diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml index 7eaeb16a8f..d075f1fdce 100644 --- a/.github/workflows/docker-images.yml +++ b/.github/workflows/docker-images.yml @@ -10,8 +10,8 @@ on: default: 'latest' options: - latest + - stable - test - - 2.4.6 build_allinone: type: boolean description: 'Build the All-In-One image' @@ -41,24 +41,60 @@ jobs: build: runs-on: ubuntu-latest steps: + - name: 'Setup jq' + uses: dcarbone/install-jq-action@v3 + with: + version: '1.7' + - name: Set environment variables shell: bash run: | # Get the short SHA of last commit echo "SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)" >> "${GITHUB_ENV}" - + # Get branch name - we don't use github.ref_head_name since we don't build on PRs echo "BRANCH_NAME=${{ github.ref_name }}" >> "${GITHUB_ENV}" - + # Set docker image tag - echo "IMAGE_TAG=${{ inputs.imageTag || github.ref_name }}" >> "${GITHUB_ENV}" - + IMAGE_TAG=${{ inputs.imageTag || github.ref_name }} + + # Check whether it's a release + LATEST_TAG=$( + curl -s -L \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{ github.token }}" \ + https://api.github.com/repos/${{ github.repository }}/releases/latest \ + | jq -r '.tag_name' + ) + IS_LATEST="false" + if [[ "${LATEST_TAG}" == "${{ github.event.release.tag_name }}" ]]; then + IS_LATEST="true" + fi; + # Control which images to build echo "BUILD_ALLINONE=${{ inputs.build_allinone || true }}" >> "${GITHUB_ENV}" echo "BUILD_FRONTEND=${{ inputs.build_frontend || true }}" >> "${GITHUB_ENV}" echo "BUILD_NODESERVICE=${{ inputs.build_nodeservice || true }}" >> "${GITHUB_ENV}" echo "BUILD_APISERVICE=${{ inputs.build_apiservice || true }}" >> "${GITHUB_ENV}" + # Image names + ALLINONE_IMAGE_NAMES=lowcoderorg/lowcoder-ce:${IMAGE_TAG} + FRONTEND_IMAGE_NAMES=lowcoderorg/lowcoder-ce-frontend:${IMAGE_TAG} + APISERVICE_IMAGE_NAMES=lowcoderorg/lowcoder-ce-api-service:${IMAGE_TAG} + NODESERVICE_IMAGE_NAMES=lowcoderorg/lowcoder-ce-node-service:${IMAGE_TAG} + + if [[ "${IS_LATEST}" == "true" ]]; then + ALLINONE_IMAGE_NAMES="lowcoderorg/lowcoder-ce:latest,${ALLINONE_IMAGE_NAMES}" + FRONTEND_IMAGE_NAMES="lowcoderorg/lowcoder-ce-frontend:latest,${FRONTEND_IMAGE_NAMES}" + APISERVICE_IMAGE_NAMES="lowcoderorg/lowcoder-ce-api-service:latest,${APISERVICE_IMAGE_NAMES}" + NODESERVICE_IMAGE_NAMES="lowcoderorg/lowcoder-ce-node-service:latest,${NODESERVICE_IMAGE_NAMES}" + fi; + + echo "ALLINONE_IMAGE_NAMES=${ALLINONE_IMAGE_NAMES}" >> "${GITHUB_ENV}" + echo "FRONTEND_IMAGE_NAMES=${FRONTEND_IMAGE_NAMES}" >> "${GITHUB_ENV}" + echo "APISERVICE_IMAGE_NAMES=${APISERVICE_IMAGE_NAMES}" >> "${GITHUB_ENV}" + echo "NODESERVICE_IMAGE_NAMES=${NODESERVICE_IMAGE_NAMES}" >> "${GITHUB_ENV}" + - name: Checkout lowcoder source uses: actions/checkout@v4 with: @@ -91,7 +127,7 @@ jobs: linux/amd64 linux/arm64 push: true - tags: lowcoderorg/lowcoder-ce:${{ env.IMAGE_TAG }} + tags: ${{ env.ALLINONE_IMAGE_NAMES }} - name: Build and push the frontend image if: ${{ env.BUILD_FRONTEND == 'true' }} @@ -108,7 +144,7 @@ jobs: linux/amd64 linux/arm64 push: true - tags: lowcoderorg/lowcoder-ce-frontend:${{ env.IMAGE_TAG }} + tags: ${{ env.FRONTEND_IMAGE_NAMES }} - name: Build and push the node service image if: ${{ env.BUILD_NODESERVICE == 'true' }} @@ -120,7 +156,7 @@ jobs: linux/amd64 linux/arm64 push: true - tags: lowcoderorg/lowcoder-ce-node-service:${{ env.IMAGE_TAG }} + tags: ${{ env.NODESERVICE_IMAGE_NAMES }} - name: Build and push the API service image if: ${{ env.BUILD_APISERVICE == 'true' }} @@ -132,5 +168,5 @@ jobs: linux/amd64 linux/arm64 push: true - tags: lowcoderorg/lowcoder-ce-api-service:${{ env.IMAGE_TAG }} + tags: ${{ env.APISERVICE_IMAGE_NAMES }} diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 55e2fcebc3..64b8252843 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -30,4 +30,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - SONAR_SCANNER_OPTS: "-Dsonar.javascript.node.maxspace=8192 -Xmx512m" + SONAR_SCANNER_OPTS: "-Dsonar.javascript.node.maxspace=8192 -Xmx8192m" diff --git a/.vscode/settings.json b/.vscode/settings.json index 495ac31a02..56add3db1f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,5 +5,6 @@ "titleBar.activeForeground": "#F9FAF2" }, "java.debug.settings.onBuildFailureProceed": true, - "java.configuration.updateBuildConfiguration": "automatic" + "java.configuration.updateBuildConfiguration": "automatic", + "terminal.integrated.scrollback": 100000000, } \ No newline at end of file diff --git a/app.json b/app.json index 9252ff2764..e20bff7494 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "name": "lowcoder", "description": "A Visual App builder with 120+ built-in components. Create software applications (internal and customer-facing!) and Meeting/Collaboration tools for your Company and your Customers with minimal coding experience.", "repository": "https://github.com/lowcoder-org/lowcoder", - "logo": "https://lowcoder.cloud/images/webclip.png", + "logo": "https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Lowcoder%20Logo%20512.png", "keywords": [ "LowCode", "Low code", @@ -10,7 +10,8 @@ "Fast Application Development", "Rapid development", "Collaboration tool", - "Video conferencing" + "Video conferencing", + "AI User Interface" ], "stack": "container", "formation": { @@ -22,11 +23,11 @@ "env": { "LOWCODER_DB_ENCRYPTION_PASSWORD": { "description": "The encryption password used to encrypt all sensitive credentials in the database. You can use any random string (eg abcd).", - "required": false + "required": true }, "LOWCODER_DB_ENCRYPTION_SALT": { "description": "The encryption salt used to encrypt all sensitive credentials in the database. You can use any random string (eg abcd).", - "required": false + "required": true }, "LOWCODER_CORS_DOMAINS": { "description": "The domains supported for CORS requests. All domains are allowed by default. If there are multiple domains, please separate them with commas.", @@ -61,12 +62,12 @@ "required": false }, "LOWCODER_API_SERVICE_URL": { - "description": "Lowcoder API service URL", + "description": "Lowcoder API service URL (main backend) - for multi-docker image installations.", "value": "http://localhost:8080", "required": false }, "LOWCODER_NODE_SERVICE_URL": { - "description": "Lowcoder Node service (js executor) URL", + "description": "Lowcoder Node Service URL (data execution server) - for multi-docker image installations", "value": "http://localhost:6060", "required": false }, @@ -96,9 +97,9 @@ "required": false }, "LOWCODER_WORKSPACE_MODE": { - "description": "SAAS to activate, ENTERPRISE to switch off - Workspaces", + "description": "SAAS (MULTIWORKSPACE) to activate, SINGLEWORKSPACE (ENTERPRISE) to switch off - Workspaces", "value": "SAAS", - "required": false + "required": true }, "LOWCODER_EMAIL_SIGNUP_ENABLED": { "description": "Control if users create their own Workspace automatic when Sign Up", @@ -118,16 +119,16 @@ "LOWCODER_SUPERUSER_USERNAME": { "description": "Username of the Super-User of an Lowcoder Installation", "value": "admin@localhost", - "required": false + "required": true }, "LOWCODER_SUPERUSER_PASSWORD": { "description": "Password of the Super-User, if not present or empty, it will be generated", "value": "`generated and printed into log file", - "required": false + "required": true }, "LOWCODER_API_KEY_SECRET": { "description": "String to encrypt/sign API Keys that users may create", - "required": false + "required": true }, "LOWCODER_ADMIN_SMTP_HOST": { "description": "SMTP Hostname of your Mail Relay Server", @@ -170,6 +171,45 @@ "description": "\"from\" Email address of the password Reset Email Sender", "value": "service@lowcoder.cloud", "required": false + }, + "LOWCODER_REDIS_ENABLED": { + "description": "If true redis server is started in the single docker image container", + "required": true + }, + "LOWCODER_MONGODB_ENABLED": { + "description": "If true mongo database is started in the single docker image container", + "required": true + }, + "LOWCODER_MONGODB_EXPOSED": { + "description": "If true mongo database accept connections from outside the docker in the single docker image container", + "required": false + }, + "LOWCODER_API_SERVICE_ENABLED": { + "description": "If true lowcoder api-service is started in the container", + "required": false + }, + "LOWCODER_NODE_SERVICE_ENABLED": { + "description": "If true lowcoder node-service is started in the container", + "required": false + }, + "LOWCODER_FRONTEND_ENABLED": { + "description": "If true lowcoder web frontend is started in the container", + "required": false + }, + "LOWCODER_PUID": { + "description": "ID of user running services. It will own all created logs and data.", + "value": "9001", + "required": false + }, + "LOWCODER_PGID": { + "description": "ID of group of the user running services.", + "value": "9001", + "required": false + }, + "LOWCODER_PUBLIC_URL": { + "description": "The URL of the public User Interface", + "value": "localhost:3000", + "required": false } - } + } } diff --git a/client/VERSION b/client/VERSION index 68167133b9..9aa34646dc 100644 --- a/client/VERSION +++ b/client/VERSION @@ -1 +1 @@ -2.6.5 \ No newline at end of file +2.7.0 \ No newline at end of file diff --git a/client/config/test/jest.setup-after-env.js b/client/config/test/jest.setup-after-env.js index f332f518b9..7fdbb4d278 100644 --- a/client/config/test/jest.setup-after-env.js +++ b/client/config/test/jest.setup-after-env.js @@ -3,6 +3,7 @@ // expect(element).toHaveTextContent(/react/i) // learn more: https://github.com/testing-library/jest-dom import "@testing-library/jest-dom"; +import { URL } from 'url'; // implementation of window.resizeTo for dispatching event window.resizeTo = function resizeTo(width, height) { @@ -53,4 +54,6 @@ class Worker { } } -window.Worker = Worker; \ No newline at end of file +window.Worker = Worker; + +global.URL = URL; \ No newline at end of file diff --git a/client/package.json b/client/package.json index 7723625703..1d539f23bc 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder-frontend", - "version": "2.6.5", + "version": "2.7.0", "type": "module", "private": true, "workspaces": [ @@ -83,6 +83,7 @@ "flag-icons": "^7.2.1", "number-precision": "^1.6.0", "react-countup": "^6.5.3", + "react-github-btn": "^1.4.0", "react-player": "^2.11.0", "resize-observer-polyfill": "^1.5.1", "rollup": "^4.22.5", diff --git a/client/packages/lowcoder-comps/package.json b/client/packages/lowcoder-comps/package.json index fb022019ed..2819fd79ce 100644 --- a/client/packages/lowcoder-comps/package.json +++ b/client/packages/lowcoder-comps/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder-comps", - "version": "2.6.6", + "version": "2.7.1", "type": "module", "license": "MIT", "dependencies": { @@ -17,8 +17,6 @@ "@fullcalendar/resource-timeline": "^6.1.11", "@fullcalendar/timegrid": "^6.1.6", "@fullcalendar/timeline": "^6.1.6", - "@types/react": "^18.2.45", - "@types/react-dom": "^18.2.18", "agora-rtc-sdk-ng": "^4.20.2", "agora-rtm-sdk": "^1.5.1", "big.js": "^6.2.1", @@ -28,8 +26,8 @@ "lowcoder-cli": "workspace:^", "lowcoder-sdk": "workspace:^", "mermaid": "^10.6.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "18.3.0", + "react-dom": "18.3.0", "typescript": "4.8.4" }, "lowcoder": { @@ -261,6 +259,8 @@ "test": "jest" }, "devDependencies": { + "@types/react": "18", + "@types/react-dom": "18", "jest": "29.3.0", "vite": "^4.5.5", "vite-tsconfig-paths": "^3.6.0" diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx index a6d49b854b..6ac45e93a4 100644 --- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx @@ -22,7 +22,7 @@ import { trans } from "../../i18n/comps"; import { client } from "./meetingControllerComp"; import type { IAgoraRTCRemoteUser } from "agora-rtc-sdk-ng"; import { useEffect, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; const VideoContainer = styled.video` height: 100%; @@ -132,62 +132,63 @@ let VideoCompBuilder = (function () { }, [props.userId.value]); // console.log("userId", userId); + useResizeDetector({ + targetRef: conRef, + }); return ( <EditorContext.Consumer> {(editorState: any) => ( - <ReactResizeDetector> + <div + ref={conRef} + style={{ + display: "flex", + alignItems: "center", + height: "100%", + overflow: "hidden", + borderRadius: props.style.radius, + aspectRatio: props.videoAspectRatio, + backgroundColor: props.style.background, + padding: props.style.padding, + margin: props.style.margin, + }} + > + {userId ? ( + <VideoContainer + onClick={() => props.onEvent("videoClicked")} + ref={videoRef} + style={{ + display: `${showVideo ? "flex" : "none"}`, + aspectRatio: props.videoAspectRatio, + borderRadius: props.style.radius, + width: "auto", + }} + id={userId} + ></VideoContainer> + ) : ( + <></> + )} <div - ref={conRef} style={{ - display: "flex", + flexDirection: "column", alignItems: "center", - height: "100%", - overflow: "hidden", - borderRadius: props.style.radius, - aspectRatio: props.videoAspectRatio, - backgroundColor: props.style.background, - padding: props.style.padding, - margin: props.style.margin, + display: `${!showVideo || userId ? "flex" : "none"}`, + margin: "0 auto", + padding: props.profilePadding, }} > - {userId ? ( - <VideoContainer - onClick={() => props.onEvent("videoClicked")} - ref={videoRef} - style={{ - display: `${showVideo ? "flex" : "none"}`, - aspectRatio: props.videoAspectRatio, - borderRadius: props.style.radius, - width: "auto", - }} - id={userId} - ></VideoContainer> - ) : ( - <></> - )} - <div + <img + alt="" style={{ - flexDirection: "column", - alignItems: "center", - display: `${!showVideo || userId ? "flex" : "none"}`, - margin: "0 auto", - padding: props.profilePadding, + borderRadius: props.profileBorderRadius, + width: "100%", + overflow: "hidden", }} - > - <img - alt="" - style={{ - borderRadius: props.profileBorderRadius, - width: "100%", - overflow: "hidden", - }} - src={props.profileImageUrl.value} - /> - <p style={{ margin: "0" }}>{userName ?? ""}</p> - </div> + src={props.profileImageUrl.value} + /> + <p style={{ margin: "0" }}>{userName ?? ""}</p> </div> - </ReactResizeDetector> + </div> )} </EditorContext.Consumer> ); diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx index dbedc1fd53..ae5424ad01 100644 --- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx @@ -19,7 +19,7 @@ import { useEffect, useRef, useState } from "react"; import { client } from "./meetingControllerComp"; import type { IAgoraRTCRemoteUser } from "agora-rtc-sdk-ng"; import { trans } from "../../i18n/comps"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { ButtonStyleControl } from "./videobuttonCompConstants"; const VideoContainer = styled.video` @@ -123,61 +123,63 @@ let SharingCompBuilder = (function () { } }, [props.userId.value]); + useResizeDetector({ + targetRef: conRef, + }); + return ( <EditorContext.Consumer> {(editorState: any) => ( - <ReactResizeDetector> + <div + ref={conRef} + style={{ + display: "flex", + alignItems: "center", + height: "100%", + overflow: "hidden", + borderRadius: props?.style?.radius, + aspectRatio: props?.videoAspectRatio, + backgroundColor: props.style?.background, + padding: props.style?.padding, + margin: props.style?.margin, + }} + > + {userId ? ( + <VideoContainer + onClick={() => props.onEvent("videoClicked")} + ref={videoRef} + style={{ + display: `${showVideoSharing ? "flex" : "none"}`, + aspectRatio: props.videoAspectRatio, + borderRadius: props.style.radius, + width: "auto", + }} + id="share-screen" + ></VideoContainer> + ) : ( + <></> + )} <div - ref={conRef} style={{ - display: "flex", + flexDirection: "column", alignItems: "center", - height: "100%", - overflow: "hidden", - borderRadius: props?.style?.radius, - aspectRatio: props?.videoAspectRatio, - backgroundColor: props.style?.background, - padding: props.style?.padding, - margin: props.style?.margin, + display: `${!showVideoSharing || userId ? "flex" : "none"}`, + margin: "0 auto", + padding: props.profilePadding, }} > - {userId ? ( - <VideoContainer - onClick={() => props.onEvent("videoClicked")} - ref={videoRef} - style={{ - display: `${showVideoSharing ? "flex" : "none"}`, - aspectRatio: props.videoAspectRatio, - borderRadius: props.style.radius, - width: "auto", - }} - id="share-screen" - ></VideoContainer> - ) : ( - <></> - )} - <div + <img + alt="" style={{ - flexDirection: "column", - alignItems: "center", - display: `${!showVideoSharing || userId ? "flex" : "none"}`, - margin: "0 auto", - padding: props.profilePadding, + borderRadius: props.profileBorderRadius, + width: "100%", + overflow: "hidden", }} - > - <img - alt="" - style={{ - borderRadius: props.profileBorderRadius, - width: "100%", - overflow: "hidden", - }} - src={props.profileImageUrl?.value} - /> - <p style={{ margin: "0" }}>{userName ?? ""}</p> - </div> + src={props.profileImageUrl?.value} + /> + <p style={{ margin: "0" }}>{userName ?? ""}</p> </div> - </ReactResizeDetector> + </div> )} </EditorContext.Consumer> ); diff --git a/client/packages/lowcoder-comps/src/comps/barChartComp/barChartComp.tsx b/client/packages/lowcoder-comps/src/comps/barChartComp/barChartComp.tsx index e138185865..df7fc06232 100644 --- a/client/packages/lowcoder-comps/src/comps/barChartComp/barChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/barChartComp/barChartComp.tsx @@ -10,7 +10,7 @@ import { barChartChildrenMap, ChartSize, getDataKeys } from "./barChartConstants import { barChartPropertyView } from "./barChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import { childrenToProps, @@ -56,7 +56,8 @@ BarChartTmpComp = withViewFn(BarChartTmpComp, (comp) => { const mode = comp.children.mode.getView(); const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); - const echartsCompRef = useRef<ReactECharts | null>(); + const echartsCompRef = useRef<ReactECharts | null>(null); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -156,30 +157,34 @@ BarChartTmpComp = withViewFn(BarChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + console.log('barChart - resize'); + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); @@ -304,17 +309,17 @@ let BarChartComp = withExposingConfigs(BarChartTmpComp, [ export const BarChartCompWithDefault = withDefault(BarChartComp, { - xAxisKey: "date", + xAxisKey: "month", series: [ { dataIndex: genRandomKey(), - seriesName: trans("chart.spending"), - columnName: "spending", + seriesName: "Sales", + columnName: "sales", }, { dataIndex: genRandomKey(), - seriesName: trans("chart.budget"), - columnName: "budget", + seriesName: "Target", + columnName: "target", }, ], }); diff --git a/client/packages/lowcoder-comps/src/comps/barChartComp/barChartConstants.tsx b/client/packages/lowcoder-comps/src/comps/barChartComp/barChartConstants.tsx index 668b569be3..98c4191844 100644 --- a/client/packages/lowcoder-comps/src/comps/barChartComp/barChartConstants.tsx +++ b/client/packages/lowcoder-comps/src/comps/barChartComp/barChartConstants.tsx @@ -37,6 +37,40 @@ import { FunnelChartConfig } from "../basicChartComp/chartConfigs/funnelChartCon import {EchartsTitleVerticalConfig} from "../chartComp/chartConfigs/echartsTitleVerticalConfig"; import {EchartsTitleConfig} from "../basicChartComp/chartConfigs/echartsTitleConfig"; +// Enhanced default data for bar charts +export const barChartDefaultData = [ + { + month: "Jan", + sales: 1200, + target: 1000 + }, + { + month: "Feb", + sales: 1500, + target: 1200 + }, + { + month: "Mar", + sales: 1300, + target: 1400 + }, + { + month: "Apr", + sales: 1800, + target: 1500 + }, + { + month: "May", + sales: 1600, + target: 1700 + }, + { + month: "Jun", + sales: 2100, + target: 1900 + } +]; + export const ChartTypeOptions = [ { label: trans("chart.bar"), @@ -241,9 +275,9 @@ const EchartsOptionComp = withType(EchartsOptionMap, "funnel"); export type CharOptionCompType = keyof typeof ChartOptionMap; export const chartUiModeChildren = { - title: withDefault(StringControl, trans("echarts.defaultTitle")), - data: jsonControl(toJSONObjectArray, i18nObjs.defaultDataSource), - xAxisKey: valueComp<string>(""), // x-axis, key from data + title: withDefault(StringControl, trans("barChart.defaultTitle")), + data: jsonControl(toJSONObjectArray, barChartDefaultData), + xAxisKey: valueComp<string>("month"), // x-axis, key from data xAxisDirection: dropdownControl(XAxisDirectionOptions, "horizontal"), xAxisData: jsonControl(toArray, []), series: SeriesListComp, diff --git a/client/packages/lowcoder-comps/src/comps/basicChartComp/chartComp.tsx b/client/packages/lowcoder-comps/src/comps/basicChartComp/chartComp.tsx index 500d9d3764..adb03eff44 100644 --- a/client/packages/lowcoder-comps/src/comps/basicChartComp/chartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/basicChartComp/chartComp.tsx @@ -10,7 +10,7 @@ import { chartChildrenMap, ChartSize, getDataKeys } from "./chartConstants"; import { chartPropertyView } from "./chartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "./reactEcharts"; import { childrenToProps, @@ -57,7 +57,8 @@ BasicChartTmpComp = withViewFn(BasicChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); - const echartsCompRef = useRef<ReactECharts | null>(); + const echartsCompRef = useRef<ReactECharts | null>(null); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -135,31 +136,34 @@ BasicChartTmpComp = withViewFn(BasicChartTmpComp, (comp) => { comp.children.mapInstance.dispatch(changeValueAction(null, false)) }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={themeConfig} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={themeConfig} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/basicChartComp/chartConfigs/barChartConfig.tsx b/client/packages/lowcoder-comps/src/comps/basicChartComp/chartConfigs/barChartConfig.tsx index ee11883352..dd7a369934 100644 --- a/client/packages/lowcoder-comps/src/comps/basicChartComp/chartConfigs/barChartConfig.tsx +++ b/client/packages/lowcoder-comps/src/comps/basicChartComp/chartConfigs/barChartConfig.tsx @@ -33,10 +33,10 @@ const BarTypeOptions = [ export const BarChartConfig = (function () { return new MultiCompBuilder( { - showLabel: BoolControl, + showLabel: withDefault(BoolControl, true), type: dropdownControl(BarTypeOptions, "basicBar"), - barWidth: withDefault(NumberControl, i18nObjs.defaultBarChartOption.barWidth), - showBackground: BoolControl, + barWidth: withDefault(NumberControl, 40), + showBackground: withDefault(BoolControl, false), backgroundColor: withDefault(ColorControl, i18nObjs.defaultBarChartOption.barBg), radiusAxisMax: NumberControl, polarRadiusStart: withDefault(StringControl, '30'), diff --git a/client/packages/lowcoder-comps/src/comps/boxplotChartComp/boxplotChartComp.tsx b/client/packages/lowcoder-comps/src/comps/boxplotChartComp/boxplotChartComp.tsx index 8cd1910b1d..2cc9c27933 100644 --- a/client/packages/lowcoder-comps/src/comps/boxplotChartComp/boxplotChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/boxplotChartComp/boxplotChartComp.tsx @@ -10,7 +10,7 @@ import { boxplotChartChildrenMap, ChartSize, getDataKeys } from "./boxplotChartC import { boxplotChartPropertyView } from "./boxplotChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import * as echarts from "echarts"; import { @@ -56,6 +56,7 @@ BoxplotChartTmpComp = withViewFn(BoxplotChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -151,30 +152,33 @@ BoxplotChartTmpComp = withViewFn(BoxplotChartTmpComp, (comp) => { ); }, [theme, childrenProps, chartSize, ...Object.values(echartsConfigChildren)]); + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartComp.tsx b/client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartComp.tsx index c07bcb62d6..8692ef8cfc 100644 --- a/client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/candleStickChartComp/candleStickChartComp.tsx @@ -10,7 +10,7 @@ import { candleStickChartChildrenMap, ChartSize, getDataKeys } from "./candleSti import { candleStickChartPropertyView } from "./candleStickChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ CandleStickChartTmpComp = withViewFn(CandleStickChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -154,20 +155,23 @@ CandleStickChartTmpComp = withViewFn(CandleStickChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts ref={(e) => (echartsCompRef.current = e)} style={{ height: "100%" }} @@ -178,7 +182,7 @@ CandleStickChartTmpComp = withViewFn(CandleStickChartTmpComp, (comp) => { theme={mode !== 'map' ? themeConfig : undefined} mode={mode} /> - </ReactResizeDetector> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx b/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx index 581a75e922..74ebfca4d3 100644 --- a/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/chartComp/chartComp.tsx @@ -10,7 +10,7 @@ import { chartChildrenMap, ChartSize, getDataKeys } from "./chartConstants"; import { chartPropertyView } from "./chartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "./reactEcharts"; import { childrenToProps, @@ -61,6 +61,7 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => { const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const [mapScriptLoaded, setMapScriptLoaded] = useState(false); const firstResize = useRef(true); @@ -215,20 +216,23 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => { onMapEvent('zoomLevelChange'); }, [mode, mapZoomlevel]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> {(mode !== 'map' || (mode === 'map' && isMapScriptLoaded)) && ( <ReactECharts ref={(e) => (echartsCompRef.current = e)} @@ -241,7 +245,7 @@ ChartTmpComp = withViewFn(ChartTmpComp, (comp) => { mode={mode} /> )} - </ReactResizeDetector> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/chartsGeoMapComp/chartsGeoMapComp.tsx b/client/packages/lowcoder-comps/src/comps/chartsGeoMapComp/chartsGeoMapComp.tsx index 0f13a6d4e9..60bf25cb7d 100644 --- a/client/packages/lowcoder-comps/src/comps/chartsGeoMapComp/chartsGeoMapComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/chartsGeoMapComp/chartsGeoMapComp.tsx @@ -10,7 +10,7 @@ import { chartChildrenMap, ChartSize, getDataKeys } from "../basicChartComp/char import { chartPropertyView } from "../basicChartComp/chartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import { childrenToProps, @@ -66,6 +66,7 @@ MapTmpComp = withViewFn(MapTmpComp, (comp) => { const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const [mapScriptLoaded, setMapScriptLoaded] = useState(false); const firstResize = useRef(true); @@ -168,33 +169,36 @@ MapTmpComp = withViewFn(MapTmpComp, (comp) => { onMapEvent('zoomLevelChange'); }, [mapZoomlevel]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> {isMapScriptLoaded && ( <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={undefined} - mode={mode} - /> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={undefined} + mode={mode} + /> )} - </ReactResizeDetector> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/funnelChartComp/funnelChartComp.tsx b/client/packages/lowcoder-comps/src/comps/funnelChartComp/funnelChartComp.tsx index 091ff9d670..63ccfdc149 100644 --- a/client/packages/lowcoder-comps/src/comps/funnelChartComp/funnelChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/funnelChartComp/funnelChartComp.tsx @@ -10,7 +10,7 @@ import { funnelChartChildrenMap, ChartSize, getDataKeys } from "./funnelChartCon import { funnelChartPropertyView } from "./funnelChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ FunnelChartTmpComp = withViewFn(FunnelChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,30 +156,33 @@ FunnelChartTmpComp = withViewFn(FunnelChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/gaugeChartComp/gaugeChartComp.tsx b/client/packages/lowcoder-comps/src/comps/gaugeChartComp/gaugeChartComp.tsx index 57ed97efba..67f89c2f47 100644 --- a/client/packages/lowcoder-comps/src/comps/gaugeChartComp/gaugeChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/gaugeChartComp/gaugeChartComp.tsx @@ -10,7 +10,7 @@ import { gaugeChartChildrenMap, ChartSize, getDataKeys } from "./gaugeChartConst import { gaugeChartPropertyView } from "./gaugeChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -57,6 +57,7 @@ GaugeChartTmpComp = withViewFn(GaugeChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -156,30 +157,33 @@ GaugeChartTmpComp = withViewFn(GaugeChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartComp.tsx b/client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartComp.tsx index a87d9d1eec..56b4de6a2e 100644 --- a/client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/graphChartComp/graphChartComp.tsx @@ -10,7 +10,7 @@ import { graphChartChildrenMap, ChartSize, getDataKeys } from "./graphChartConst import { graphChartPropertyView } from "./graphChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -57,6 +57,7 @@ GraphChartTmpComp = withViewFn(GraphChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -156,30 +157,33 @@ GraphChartTmpComp = withViewFn(GraphChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/heatmapChartComp/heatmapChartComp.tsx b/client/packages/lowcoder-comps/src/comps/heatmapChartComp/heatmapChartComp.tsx index a5bc421cd5..21064ba13d 100644 --- a/client/packages/lowcoder-comps/src/comps/heatmapChartComp/heatmapChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/heatmapChartComp/heatmapChartComp.tsx @@ -10,7 +10,7 @@ import { heatmapChartChildrenMap, ChartSize, getDataKeys } from "./heatmapChartC import { heatmapChartPropertyView } from "./heatmapChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ HeatmapChartTmpComp = withViewFn(HeatmapChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,31 +156,34 @@ HeatmapChartTmpComp = withViewFn(HeatmapChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={mode !== 'map' ? themeConfig : undefined} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={mode !== 'map' ? themeConfig : undefined} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/imageEditorComp/index.tsx b/client/packages/lowcoder-comps/src/comps/imageEditorComp/index.tsx index 70d2bf29bf..311a96eaf1 100644 --- a/client/packages/lowcoder-comps/src/comps/imageEditorComp/index.tsx +++ b/client/packages/lowcoder-comps/src/comps/imageEditorComp/index.tsx @@ -13,7 +13,7 @@ import { stringExposingStateControl, } from "lowcoder-sdk"; import { useRef } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import _ from "lodash"; import { RecordConstructorToView } from "lowcoder-core"; import { Container, customTheme, EmbeddedButton, saveEvent } from "./imageEditorConstants"; @@ -70,6 +70,12 @@ const ContainerImageEditor = (props: RecordConstructorToView<typeof childrenMap> props.dataURI.onChange(dataURL); props.data.onChange(dataURL.split(",")[1]); }; + + useResizeDetector({ + targetRef: conRef, + onResize, + }); + return ( <Container ref={conRef}> <EmbeddedButton @@ -81,34 +87,32 @@ const ContainerImageEditor = (props: RecordConstructorToView<typeof childrenMap> > {props.buttonText.value} </EmbeddedButton> - <ReactResizeDetector onResize={onResize}> - <div style={{ width: "100%", height: "100%" }}> - <ImageEditor - ref={editorRef} - includeUI={{ - loadImage: { - path: props.src.value, - name: props.name.value, - }, - menu: filteredMenu, - theme: customTheme, - uiSize: { - width: "100%", - height: "100%", - }, - menuBarPosition: "bottom", - locale: i18nObjs.imageEditorLocale ?? {}, - }} - cssMaxWidth={document.documentElement.clientWidth} - cssMaxHeight={document.documentElement.clientHeight} - selectionStyle={{ - cornerSize: 50, - rotatingPointOffset: 100, - }} - usageStatistics={false} - /> - </div> - </ReactResizeDetector> + <div style={{ width: "100%", height: "100%" }}> + <ImageEditor + ref={editorRef} + includeUI={{ + loadImage: { + path: props.src.value, + name: props.name.value, + }, + menu: filteredMenu, + theme: customTheme, + uiSize: { + width: "100%", + height: "100%", + }, + menuBarPosition: "bottom", + locale: i18nObjs.imageEditorLocale ?? {}, + }} + cssMaxWidth={document.documentElement.clientWidth} + cssMaxHeight={document.documentElement.clientHeight} + selectionStyle={{ + cornerSize: 50, + rotatingPointOffset: 100, + }} + usageStatistics={false} + /> + </div> </Container> ); }; diff --git a/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartComp.tsx b/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartComp.tsx index 712e224b23..14ce13539b 100644 --- a/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartComp.tsx @@ -10,7 +10,7 @@ import { line3dChartChildrenMap, ChartSize, getDataKeys } from "./line3dChartCon import { line3dChartPropertyView } from "./line3dChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import * as echarts from "echarts"; import { @@ -56,6 +56,7 @@ Line3DChartTmpComp = withViewFn(Line3DChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -151,30 +152,33 @@ Line3DChartTmpComp = withViewFn(Line3DChartTmpComp, (comp) => { ); }, [theme, childrenProps, chartSize, ...Object.values(echartsConfigChildren)]); + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartUtils.ts b/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartUtils.ts index d1be05edf3..3ba5858a18 100644 --- a/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/line3dChartComp/line3dChartUtils.ts @@ -178,7 +178,6 @@ export function getEchartsConfig( }, } }; - console.log(config); return config; } diff --git a/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartComp.tsx b/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartComp.tsx index be3e5bf655..032607625b 100644 --- a/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartComp.tsx @@ -10,7 +10,7 @@ import { lineChartChildrenMap, ChartSize, getDataKeys } from "./lineChartConstan import { lineChartPropertyView } from "./lineChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ LineChartTmpComp = withViewFn(LineChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -150,30 +151,33 @@ LineChartTmpComp = withViewFn(LineChartTmpComp, (comp) => { ); }, [theme, childrenProps, chartSize, ...Object.values(echartsConfigChildren)]); + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); @@ -302,13 +306,13 @@ export const LineChartCompWithDefault = withDefault(LineChartComp, { series: [ { dataIndex: genRandomKey(), - seriesName: trans("chart.spending"), - columnName: "spending", + seriesName: "Sales", + columnName: "sales", }, { dataIndex: genRandomKey(), - seriesName: trans("chart.budget"), - columnName: "budget", + seriesName: "Growth", + columnName: "growth", }, ], }); diff --git a/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartConstants.tsx b/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartConstants.tsx index 2685f19725..5b0554ddad 100644 --- a/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartConstants.tsx +++ b/client/packages/lowcoder-comps/src/comps/lineChartComp/lineChartConstants.tsx @@ -83,11 +83,19 @@ export const XAxisDirectionOptions = [ export type XAxisDirectionType = ValueFromOption<typeof XAxisDirectionOptions>; +export const defaultChartData = [ + { date: "Jan", sales: 320, growth: 250 }, + { date: "Feb", sales: 450, growth: 300 }, + { date: "Mar", sales: 380, growth: 340 }, + { date: "Apr", sales: 520, growth: 400 }, + { date: "May", sales: 480, growth: 450 }, + { date: "Jun", sales: 600, growth: 500 } +]; export const noDataAxisConfig = { animation: false, xAxis: { type: "category", - name: trans("chart.noData"), + name: "No Data Available", nameLocation: "middle", data: [], axisLine: { @@ -243,8 +251,8 @@ const EchartsOptionComp = withType(EchartsOptionMap, "funnel"); export type CharOptionCompType = keyof typeof ChartOptionMap; export const chartUiModeChildren = { - title: withDefault(StringControl, trans("echarts.defaultTitle")), - data: jsonControl(toJSONObjectArray, i18nObjs.defaultDataSource), + title: withDefault(StringControl, trans("lineChart.defaultTitle")), + data: jsonControl(toJSONObjectArray, defaultChartData), xAxisKey: valueComp<string>(""), // x-axis, key from data xAxisDirection: dropdownControl(XAxisDirectionOptions, "horizontal"), xAxisData: jsonControl(toArray, []), diff --git a/client/packages/lowcoder-comps/src/comps/mermaidComp/index.tsx b/client/packages/lowcoder-comps/src/comps/mermaidComp/index.tsx index 09ea5cba84..ea143725c4 100644 --- a/client/packages/lowcoder-comps/src/comps/mermaidComp/index.tsx +++ b/client/packages/lowcoder-comps/src/comps/mermaidComp/index.tsx @@ -10,11 +10,98 @@ import { import Mermaid from "./mermaid"; +// Collection of example mermaid diagrams that showcase different diagram types +const mermaidExamples = { + flowchart: +`flowchart TD + A[Start] --> B{Is it working?} + B -->|Yes| C[Great!] + B -->|No| D[Debug] + D --> E[Check Documentation] + E --> B + C --> F[Deploy]`, + + sequence: +`sequenceDiagram + participant User + participant App + participant API + participant DB + + User->>App: Submit Form + App->>API: Send Request + API->>DB: Query Data + DB->>API: Return Result + API->>App: Send Response + App->>User: Show Result`, + + classDiagram: +`classDiagram + class User { + +String name + +String email + +authenticate() + +updateProfile() + } + class Product { + +String name + +Number price + +getDetails() + } + class Order { + +Date date + +Number total + +process() + } + User "1" --> "*" Order + Order "*" --> "*" Product`, + + gantt: +`gantt + title Project Timeline + dateFormat YYYY-MM-DD + + section Planning + Research :done, a1, 2023-01-01, 10d + Requirements :active, a2, after a1, 7d + + section Development + Design :a3, after a2, 8d + Implementation :a4, after a3, 14d + Testing :a5, after a4, 7d + + section Deployment + Release :milestone, after a5, 0d`, + + entityRelationship: +`erDiagram + CUSTOMER }|--o{ ORDER : places + ORDER ||--|{ ORDER_ITEM : contains + CUSTOMER ||--o{ PAYMENT : makes + PRODUCT ||--|{ ORDER_ITEM : "ordered in"`, + + journey: +`journey + title User Purchase Journey + section Visit Website + Homepage: 5: User + Product listing: 4: User + Product detail: 3: User + section Purchase + Add to cart: 4: User + Checkout: 3: User, Admin + Payment: 3: User, Admin + section Post-Purchase + Order confirmation: 5: User, Admin + Shipping: 4: Admin + Delivery: 5: User, Admin` +}; + +// Using the flowchart example as default const childrenMap = { code: stringExposingStateControl( "code", - `graph LR - Start --> Stop` + mermaidExamples.flowchart ), onEvent: eventHandlerControl([ { diff --git a/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartComp.tsx b/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartComp.tsx index 84bcf3280a..51eedee133 100644 --- a/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartComp.tsx @@ -10,7 +10,7 @@ import { parallelChartChildrenMap, ChartSize, getDataKeys } from "./parallelChar import { parallelChartPropertyView } from "./parallelChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import * as echarts from "echarts"; import { @@ -56,6 +56,7 @@ ParallelChartTmpComp = withViewFn(ParallelChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -151,30 +152,33 @@ ParallelChartTmpComp = withViewFn(ParallelChartTmpComp, (comp) => { ); }, [theme, childrenProps, chartSize, ...Object.values(echartsConfigChildren)]); + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartUtils.ts b/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartUtils.ts index 407a2df69e..0f7835bb08 100644 --- a/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/parallelChartComp/parallelChartUtils.ts @@ -180,7 +180,6 @@ export function getEchartsConfig( parallelAxis: props.data[0].map((c, i) => ({ dim: i, name: c, type: typeof props.data[1][i] === 'string'?'category':'value'})) }; - console.log("Echarts transformedData and config", transformedData, config); return config; } diff --git a/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartComp.tsx b/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartComp.tsx index d502a8090c..aaa5f01984 100644 --- a/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartComp.tsx @@ -10,7 +10,7 @@ import { pieChartChildrenMap, ChartSize, getDataKeys } from "./pieChartConstants import { pieChartPropertyView } from "./pieChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import * as echarts from "echarts"; import { @@ -56,6 +56,7 @@ PieChartTmpComp = withViewFn(PieChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -170,30 +171,33 @@ PieChartTmpComp = withViewFn(PieChartTmpComp, (comp) => { ); }, [mapJson, theme, childrenProps, chartSize, ...Object.values(echartsConfigChildren)]); + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartConstants.tsx b/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartConstants.tsx index 62e5be9712..f8212e74c6 100644 --- a/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartConstants.tsx +++ b/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartConstants.tsx @@ -82,6 +82,41 @@ export const XAxisDirectionOptions = [ export type XAxisDirectionType = ValueFromOption<typeof XAxisDirectionOptions>; +// Add this new code block: +// Realistic pie chart demo data with proper categories and values +export const defaultPieChartData = [ + { + category: "Market Share", + name: "Samsung", + value: 21.8 + }, + { + category: "Market Share", + name: "Apple", + value: 20.5 + }, + { + category: "Market Share", + name: "Xiaomi", + value: 13.4 + }, + { + category: "Market Share", + name: "Oppo", + value: 8.8 + }, + { + category: "Market Share", + name: "Vivo", + value: 8.1 + }, + { + category: "Market Share", + name: "Others", + value: 27.4 + } +]; + export const noDataAxisConfig = { animation: false, xAxis: { @@ -241,8 +276,8 @@ export type CharOptionCompType = keyof typeof ChartOptionMap; export const chartUiModeChildren = { title: withDefault(StringControl, trans("echarts.defaultTitle")), - data: jsonControl(toJSONObjectArray, i18nObjs.defaultDataSource), - xAxisKey: valueComp<string>(""), // x-axis, key from data + data: jsonControl(toJSONObjectArray, defaultPieChartData), + xAxisKey: valueComp<string>("name"), xAxisDirection: dropdownControl(XAxisDirectionOptions, "horizontal"), xAxisData: jsonControl(toArray, []), series: SeriesListComp, diff --git a/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartUtils.ts b/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartUtils.ts index cf3b6a664f..5453933397 100644 --- a/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/pieChartComp/pieChartUtils.ts @@ -280,7 +280,6 @@ export function getEchartsConfig( ] } - console.log("Echarts transformedData and config", transformedData, config); return config; } diff --git a/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartComp.tsx b/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartComp.tsx index edb3e63121..a1cabc8841 100644 --- a/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartComp.tsx @@ -10,7 +10,7 @@ import { radarChartChildrenMap, ChartSize, getDataKeys } from "./radarChartConst import { radarChartPropertyView } from "./radarChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ RadarChartTmpComp = withViewFn(RadarChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,31 +156,34 @@ RadarChartTmpComp = withViewFn(RadarChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={mode !== 'map' ? themeConfig : undefined} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={mode !== 'map' ? themeConfig : undefined} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartUtils.ts b/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartUtils.ts index 1982cf9b47..87cecc24c5 100644 --- a/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/radarChartComp/radarChartUtils.ts @@ -177,7 +177,6 @@ export function getEchartsConfig( radius: `${props.radius}%`, shape: props?.areaFlag ? 'circle' : 'line', axisName: { - ...styleWrapper(props?.detailStyle, theme?.detailStyle, 13), show: props?.indicatorVisibility, }, splitArea: { diff --git a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartComp.tsx b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartComp.tsx index 0fedd251ca..eefb9208cb 100644 --- a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartComp.tsx @@ -10,7 +10,7 @@ import { sankeyChartChildrenMap, ChartSize, getDataKeys } from "./sankeyChartCon import { sankeyChartPropertyView } from "./sankeyChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ SankeyChartTmpComp = withViewFn(SankeyChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,31 +156,34 @@ SankeyChartTmpComp = withViewFn(SankeyChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={mode !== 'map' ? themeConfig : undefined} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={mode !== 'map' ? themeConfig : undefined} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartConstants.tsx b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartConstants.tsx index e863c1b209..e38b5a1319 100644 --- a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartConstants.tsx +++ b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartConstants.tsx @@ -277,6 +277,7 @@ let chartJsonModeChildren: any = { focus: withDefault(BoolControl, true), tooltip: withDefault(BoolControl, true), legendVisibility: withDefault(BoolControl, true), + labelVisibility: withDefault(BoolControl, true), } if (EchartDefaultChartStyle && EchartDefaultTextStyle && RadarLabelStyle && SankeyLineStyle) { diff --git a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartPropertyView.tsx b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartPropertyView.tsx index 683f97c3ff..3962175314 100644 --- a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartPropertyView.tsx +++ b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartPropertyView.tsx @@ -36,6 +36,10 @@ export function sankeyChartPropertyView( {children.draggable.propertyView({label: trans("sankeyChart.draggable"), tooltip: trans("sankeyChart.draggableTooltip")})} {children.focus.propertyView({label: trans("sankeyChart.focus"), tooltip: trans("sankeyChart.focusTooltip")})} {children.tooltip.propertyView({label: trans("sankeyChart.tooltip"), tooltip: trans("echarts.tooltipTooltip")})} + {children.labelVisibility.propertyView({ + label: trans("treeChart.labelVisibility"), + tooltip: trans("echarts.labelVisibilityTooltip") + })} </Section> <Section name={sectionNames.interaction}> diff --git a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartUtils.ts b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartUtils.ts index 1cedb74c88..69ac87ee3b 100644 --- a/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/sankeyChartComp/sankeyChartUtils.ts @@ -162,9 +162,8 @@ export function getEchartsConfig( bottom: `${props?.bottom}%`, top: `${props?.top}%`, label: { - show: true, + show: props.labelVisibility, position: props.echartsLabelConfig.top, - ...styleWrapper(props?.detailStyle, theme?.detailStyle,15) }, data: props?.echartsData.length !== 0 && props?.echartsData?.map(item => ({ name: item.name, diff --git a/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartComp.tsx b/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartComp.tsx index 003fadf1de..c7fd7da9cd 100644 --- a/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartComp.tsx @@ -10,7 +10,7 @@ import { scatterChartChildrenMap, ChartSize, getDataKeys } from "./scatterChartC import { scatterChartPropertyView } from "./scatterChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../basicChartComp/reactEcharts"; import * as echarts from "echarts"; import { @@ -56,6 +56,7 @@ ScatterChartTmpComp = withViewFn(ScatterChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -151,30 +152,33 @@ ScatterChartTmpComp = withViewFn(ScatterChartTmpComp, (comp) => { ); }, [theme, childrenProps, chartSize, ...Object.values(echartsConfigChildren)]); + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartConstants.tsx b/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartConstants.tsx index 02c8f803ff..c846eeaab2 100644 --- a/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartConstants.tsx +++ b/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartConstants.tsx @@ -217,9 +217,34 @@ const ChartOptionComp = withType(ChartOptionMap, "scatter"); const EchartsOptionComp = withType(EchartsOptionMap, "funnel"); export type CharOptionCompType = keyof typeof ChartOptionMap; +export const SCATTER_CHART_DEMO_DATA = [ + + { hours: 1.5, score: 62, student: "Alex M." }, + { hours: 2.0, score: 65, student: "Sarah P." }, + { hours: 2.5, score: 71, student: "James W." }, + { hours: 2.8, score: 69, student: "Emma L." }, + { hours: 3.0, score: 75, student: "Michael R." }, + { hours: 3.2, score: 73, student: "Lisa K." }, + { hours: 3.5, score: 78, student: "David H." }, + { hours: 3.8, score: 77, student: "Sophie T." }, + { hours: 4.0, score: 82, student: "Ryan B." }, + { hours: 4.2, score: 84, student: "Nina C." }, + { hours: 4.5, score: 86, student: "Thomas G." }, + { hours: 4.8, score: 88, student: "Maria S." }, + { hours: 5.0, score: 89, student: "Daniel F." }, + { hours: 5.2, score: 91, student: "Anna D." }, + { hours: 5.5, score: 90, student: "Kevin P." }, + { hours: 5.8, score: 93, student: "Rachel M." }, + { hours: 6.0, score: 95, student: "John L." }, + { hours: 6.2, score: 94, student: "Emily W." }, + { hours: 3.0, score: 68, student: "Chris B." }, // outlier - lower performance + { hours: 5.0, score: 96, student: "Jessica H." } // outlier - higher performance + +] + export const chartUiModeChildren = { title: withDefault(StringControl, trans("echarts.defaultTitle")), - data: jsonControl(toJSONObjectArray, i18nObjs.defaultDataSource), + data: jsonControl(toJSONObjectArray, SCATTER_CHART_DEMO_DATA), xAxisKey: valueComp<string>(""), // x-axis, key from data xAxisDirection: dropdownControl(XAxisDirectionOptions, "horizontal"), xAxisData: jsonControl(toArray, []), diff --git a/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartUtils.ts b/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartUtils.ts index 67b2a4a537..f5e9bdd4be 100644 --- a/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/scatterChartComp/scatterChartUtils.ts @@ -293,7 +293,6 @@ export function getEchartsConfig( delete config.yAxis; } - console.log("Echarts transformedData and config", transformedData, config); return config; } diff --git a/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartComp.tsx b/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartComp.tsx index aaa6ff7990..f77c18293d 100644 --- a/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartComp.tsx @@ -10,7 +10,7 @@ import { sunburstChartChildrenMap, ChartSize, getDataKeys } from "./sunburstChar import { sunburstChartPropertyView } from "./sunburstChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ SunburstChartTmpComp = withViewFn(SunburstChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,31 +156,34 @@ SunburstChartTmpComp = withViewFn(SunburstChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={mode !== 'map' ? themeConfig : undefined} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={mode !== 'map' ? themeConfig : undefined} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartUtils.ts b/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartUtils.ts index ab8aa17b5f..52ca2aa4c8 100644 --- a/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/sunburstChartComp/sunburstChartUtils.ts @@ -168,7 +168,6 @@ export function getEchartsConfig( label: { show: props?.labelVisibility, rotate: 'tangential', - ...styleWrapper(props?.detailStyle, theme?.detailStyle,11) }, } ], diff --git a/client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartComp.tsx b/client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartComp.tsx index 7724fe72a9..80c549eaf8 100644 --- a/client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/themeriverChartComp/themeriverChartComp.tsx @@ -10,7 +10,7 @@ import { themeriverChartChildrenMap, ChartSize, getDataKeys } from "./themeriver import { themeriverChartPropertyView } from "./themeriverChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ ThemeriverChartTmpComp = withViewFn(ThemeriverChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,31 +156,34 @@ ThemeriverChartTmpComp = withViewFn(ThemeriverChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={mode !== 'map' ? themeConfig : undefined} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={mode !== 'map' ? themeConfig : undefined} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartConstants.tsx b/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartConstants.tsx index df9b573fca..7484f7ecf4 100644 --- a/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartConstants.tsx +++ b/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartConstants.tsx @@ -273,6 +273,7 @@ let chartJsonModeChildren: any = { edgeShape: withDefault(BoolControl, true), tooltip: withDefault(BoolControl, true), legendVisibility: withDefault(BoolControl, true), + labelVisibility: withDefault(BoolControl, true), } if (RadarLabelStyle && EchartDefaultChartStyle && EchartDefaultTextStyle) { diff --git a/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartPropertyView.tsx b/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartPropertyView.tsx index 56d8510288..f4cc5ca43d 100644 --- a/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartPropertyView.tsx +++ b/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartPropertyView.tsx @@ -29,6 +29,10 @@ export function treeChartPropertyView( {children.lineWidth.propertyView({ label: trans("treeChart.lineWidth"), tooltip: trans("treeChart.lineWidthTooltip") })} {children.tooltip.propertyView({label: trans("treeChart.tooltip")})} + {children.labelVisibility.propertyView({ + label: trans("treeChart.labelVisibility"), + tooltip: trans("echarts.labelVisibilityTooltip") + })} </Section> <Section name={sectionNames.interaction}> diff --git a/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartUtils.ts b/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartUtils.ts index 083b181036..d6f545b063 100644 --- a/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/treeChartComp/treeChartUtils.ts @@ -163,14 +163,15 @@ export function getEchartsConfig( symbolSize: props?.pointSize || 20, // Control the size of the nodes data: props?.echartsData.length !== 0 && props?.echartsData || props.echartsOption.data, label: { + show: props?.labelVisibility, position: "top", verticalAlign: "middle", align: "right", - ...styleWrapper(props?.detailStyle, theme?.detailStyle, 11), }, leaves: { label: { - position: "bottom", + show: props?.labelVisibility, + position: "right", verticalAlign: "middle", align: "left" } diff --git a/client/packages/lowcoder-comps/src/comps/treeChartComp/treechartComp.tsx b/client/packages/lowcoder-comps/src/comps/treeChartComp/treechartComp.tsx index 53fd9c8bb2..0f25f78e29 100644 --- a/client/packages/lowcoder-comps/src/comps/treeChartComp/treechartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/treeChartComp/treechartComp.tsx @@ -10,7 +10,7 @@ import { treeChartChildrenMap, ChartSize, getDataKeys } from "./treeChartConstan import { treeChartPropertyView } from "./treeChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ TreeChartTmpComp = withViewFn(TreeChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,20 +156,23 @@ TreeChartTmpComp = withViewFn(TreeChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts ref={(e) => (echartsCompRef.current = e)} style={{ height: "100%" }} @@ -179,7 +183,7 @@ TreeChartTmpComp = withViewFn(TreeChartTmpComp, (comp) => { theme={mode !== 'map' ? themeConfig : undefined} mode={mode} /> - </ReactResizeDetector> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartComp.tsx b/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartComp.tsx index c67ea88759..3740efb239 100644 --- a/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartComp.tsx +++ b/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartComp.tsx @@ -10,7 +10,7 @@ import { treemapChartChildrenMap, ChartSize, getDataKeys } from "./treemapChartC import { treeChartPropertyView } from "./treemapChartPropertyView"; import _ from "lodash"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import ReactECharts from "../chartComp/reactEcharts"; import { childrenToProps, @@ -56,6 +56,7 @@ TreemapChartTmpComp = withViewFn(TreemapChartTmpComp, (comp) => { const onUIEvent = comp.children.onUIEvent.getView(); const onEvent = comp.children.onEvent.getView(); const echartsCompRef = useRef<ReactECharts | null>(); + const containerRef = useRef<HTMLDivElement>(null); const [chartSize, setChartSize] = useState<ChartSize>(); const firstResize = useRef(true); const theme = useContext(ThemeContext); @@ -155,31 +156,34 @@ TreemapChartTmpComp = withViewFn(TreemapChartTmpComp, (comp) => { if(comp.children.mapInstance.value) return; }, [option]) + useResizeDetector({ + targetRef: containerRef, + onResize: ({width, height}) => { + if (width && height) { + setChartSize({ w: width, h: height }); + } + if (!firstResize.current) { + // ignore the first resize, which will impact the loading animation + echartsCompRef.current?.getEchartsInstance().resize(); + } else { + firstResize.current = false; + } + } + }) + return ( - <ReactResizeDetector - onResize={(w, h) => { - if (w && h) { - setChartSize({ w: w, h: h }); - } - if (!firstResize.current) { - // ignore the first resize, which will impact the loading animation - echartsCompRef.current?.getEchartsInstance().resize(); - } else { - firstResize.current = false; - } - }} - > + <div ref={containerRef} style={{height: '100%'}}> <ReactECharts - ref={(e) => (echartsCompRef.current = e)} - style={{ height: "100%" }} - notMerge - lazyUpdate - opts={{ locale: getEchartsLocale() }} - option={option} - theme={mode !== 'map' ? themeConfig : undefined} - mode={mode} - /> - </ReactResizeDetector> + ref={(e) => (echartsCompRef.current = e)} + style={{ height: "100%" }} + notMerge + lazyUpdate + opts={{ locale: getEchartsLocale() }} + option={option} + theme={mode !== 'map' ? themeConfig : undefined} + mode={mode} + /> + </div> ); }); diff --git a/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartUtils.ts b/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartUtils.ts index f07d918528..02d63c8539 100644 --- a/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartUtils.ts +++ b/client/packages/lowcoder-comps/src/comps/treemapChartComp/treemapChartUtils.ts @@ -171,7 +171,7 @@ export function getEchartsConfig( ...chartStyleWrapper(props?.chartStyle, theme?.chartStyle) }, label: { - ...styleWrapper(props?.detailStyle, theme?.detailStyle, 12), + show: props?.labelVisibility, } } ] diff --git a/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts b/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts index 73c3d7d216..66b62f7a18 100644 --- a/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts +++ b/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts @@ -63,9 +63,9 @@ export const en = { title: 'Title', defaultTitle: 'Tree Chart', tooltip: 'Tooltip', - defaultLeft: "10", + defaultLeft: "20", left: "Left", - defaultRight: "10", + defaultRight: "20", right: "Right", defaultTop: "20", top: "Top", @@ -76,7 +76,9 @@ export const en = { pointSizeTooltip: "Set the Point Size of the Chart.", defaultlineWidth: '2', lineWidth: "Line Width", - lineWidthTooltip: "Set the Line Width of the Chart." + lineWidthTooltip: "Set the Line Width of the Chart.", + labelVisibility: "Label", + labelVisibilityTooltip: "Show or hide the Label of the Chart." }, graphChart: { categories: 'Categories', @@ -214,6 +216,8 @@ export const en = { defaultTop:'15', bottom: 'Bottom', defaultBottom:'10', + labelVisibility: "Label", + labelVisibilityTooltip: "Show or hide the Label of the Chart." }, funnelChart: { title: 'Title', @@ -317,6 +321,8 @@ export const en = { }, lineChart: { + title: 'Title', + defaultTitle: 'Line Chart', cellSize: "Cell Size", range: "Range", markLines: "Mark Lines", diff --git a/client/packages/lowcoder-comps/src/i18n/comps/locales/enObj.tsx b/client/packages/lowcoder-comps/src/i18n/comps/locales/enObj.tsx index b9d17e3c2a..df8517fbcc 100644 --- a/client/packages/lowcoder-comps/src/i18n/comps/locales/enObj.tsx +++ b/client/packages/lowcoder-comps/src/i18n/comps/locales/enObj.tsx @@ -309,57 +309,70 @@ export const enObj: I18nObjects = { }, defaultSankeyChartOption: { data: [ - {name: "Category A", color: '#67F9D8'}, - {name: "Category B", color: '#FFE434'}, - {name: "Category C", color: '#56A3F1'}, - {name: "Category D", color: '#FF917C'}, - {name: "Category E", color: '#FF6347'} + {name: "Website Visits", color: '#3498db'}, + {name: "Product Page", color: '#2ecc71'}, + {name: "Cart", color: '#f39c12'}, + {name: "Checkout", color: '#e74c3c'}, + {name: "Purchase", color: '#9b59b6'}, + {name: "Abandoned", color: '#95a5a6'} ], links: [ - { source: 'Category A', target: 'Category B', value: 10 }, - { source: 'Category A', target: 'Category C', value: 15 }, - { source: 'Category B', target: 'Category D', value: 25 }, - { source: 'Category C', target: 'Category D', value: 20 }, - { source: 'Category D', target: 'Category E', value: 30 } + { source: 'Website Visits', target: 'Product Page', value: 1000 }, + { source: 'Website Visits', target: 'Abandoned', value: 300 }, + { source: 'Product Page', target: 'Cart', value: 700 }, + { source: 'Product Page', target: 'Abandoned', value: 300 }, + { source: 'Cart', target: 'Checkout', value: 400 }, + { source: 'Cart', target: 'Abandoned', value: 300 }, + { source: 'Checkout', target: 'Purchase', value: 350 }, + { source: 'Checkout', target: 'Abandoned', value: 50 } ] }, defaultCandleStickChartOption: { xAxis: { - data: ["Day 1", "Day 2", "Day 3", "Day 4", "Day 5"], - }, - axisColor: ['#f0f0f0', '#ffffff'], - data:[ - [22, 25, 18, 26], - [25, 23, 22, 27], - [23, 24, 21, 25], - [24, 26, 23, 27], - [23, 21, 20, 25] + data: [ + "2024-03-01", "2024-03-04", "2024-03-05", "2024-03-06", "2024-03-07", + "2024-03-08", "2024-03-11", "2024-03-12", "2024-03-13", "2024-03-14" ], + }, + axisColor: ['#E9EBF1', '#ffffff'], + data: [ + // Format: [open, close, lowest, highest] + [185.43, 188.52, 184.74, 189.12], // Bullish day + [188.32, 186.85, 186.21, 189.95], // Bearish day + [186.90, 187.65, 185.83, 188.12], // Small bullish day + [187.75, 185.20, 184.90, 187.85], // Bearish day + [185.35, 189.20, 185.15, 189.45], // Strong bullish day + [189.10, 187.50, 186.80, 189.30], // Bearish day + [187.60, 190.25, 187.40, 190.50], // Strong bullish day + [190.15, 189.75, 188.90, 191.20], // Small bearish day + [189.80, 192.35, 189.60, 192.50], // Strong bullish day + [192.40, 191.85, 191.20, 193.15] // Small bearish day + ], itemStyle: { - color: '#ec0000', // Body color (rising) - color0: '#00da3c', // Body color (falling) - borderColor: '#ec0000', // Border color (rising) - borderColor0: '#00da3c', // Border color (falling) + color: '#26A69A', // Bullish candle color (green) + color0: '#EF5350', // Bearish candle color (red) + borderColor: '#26A69A', // Bullish border color + borderColor0: '#EF5350' // Bearish border color } }, defaultRadarChartOption: { color: ['#6ee1d5', '#a7dd85'], indicator: [ - { name: "Indicator 1", max: 100 }, - { name: "Indicator 2", max: 100 }, - { name: "Indicator 3", max: 100 }, - { name: "Indicator 4", max: 100 }, - { name: "Indicator 5", max: 100 }, - { name: "Indicator 6", max: 100 } + { name: "Performance", max: 100 }, + { name: "Reliability", max: 100 }, + { name: "Efficiency", max: 100 }, + { name: "User Satisfaction", max: 100 }, + { name: "Cost Effectiveness", max: 100 }, + { name: "Scalability", max: 100 } ], series: [ { - "name": "Data A", - "value": [90, 80, 70, 70, 80, 70], + "name": "Current System", + "value": [85, 72, 78, 65, 82, 68], }, { - name: "Data B", - value: [60, 60, 40, 50, 50, 40], + name: "Competitor System", + value: [67, 82, 58, 73, 45, 79], areaColor: '#ff00ff77', lineColor: '#ff00ff77', lineWidth: 2, @@ -397,127 +410,205 @@ export const enObj: I18nObjects = { ] }, defaultGraphChartOption: { - color:{ - pointColor: "#0000ff", - lineColor: "#00000033" - }, - categories: [ - {name: "Nodes"}, - {name: "Edges"} - ], - nodes: [ - {name: "Node 1", category: 0}, - {name: "Node 2", category: 0}, - {name: "Node 3", category: 0} - ], - links: [ - {source: "Node 1", target: "Node 2", category: 1}, - {source: "Node 2", target: "Node 3", category: 1} - ] + color: { + pointColor: "#4285F4", + lineColor: "#00000045" + }, + categories: [ + {name: "Person", itemStyle: {color: "#4285F4"}}, + {name: "Company", itemStyle: {color: "#34A853"}}, + {name: "Project", itemStyle: {color: "#EA4335"}} + ], + nodes: [ + {id: "1", name: "John Smith", value: 25, category: 0, symbolSize: 25}, + {id: "2", name: "Jane Doe", value: 20, category: 0, symbolSize: 20}, + {id: "3", name: "Acme Inc", value: 30, category: 1, symbolSize: 30}, + {id: "4", name: "Project X", value: 25, category: 2, symbolSize: 25} + ], + links: [ + {source: "1", target: "3", value: 8, lineStyle: {width: 2}}, + {source: "1", target: "4", value: 6, lineStyle: {width: 2}}, + {source: "2", target: "3", value: 5, lineStyle: {width: 1}}, + {source: "3", target: "4", value: 9, lineStyle: {width: 3}} + ] }, defaultTreeChartOption: { data: [{ - name: "Parent", + name: "Company Structure", + children: [ + { + name: "Executive", + children: [ + { name: "CEO", value: 1 }, + { name: "CFO", value: 1 }, + { name: "COO", value: 1 } + ] + }, + { + name: "Product", + children: [ + { name: "Engineering", value: 25 }, + { name: "Design", value: 10 }, + { name: "Product Management", value: 8 } + ] + }, + { + name: "Marketing", + children: [ + { name: "Social Media", value: 5 }, + { name: "Content", value: 7 }, + { name: "Analytics", value: 3 } + ] + } + ] + }], + pointColor: "#3498db", + lineColor: "#95a5a6", + label: { + show: true, + position: "right", + distance: 5, + fontSize: 12, + color: "#333" + }, + emphasis: { + focus: "descendant" + }, + expandAndCollapse: true, + initialTreeDepth: 2, + layout: "orthogonal", + orient: "horizontal", + symbolSize: 10 + }, + defaultTreemapChartOption: { + data: [ + { + name: 'Company Budget', + value: 1000, children: [ { - name: "Child 1", + name: 'Product Development', + value: 400, + itemStyle: { color: '#3498db' }, children: [ - { name: "Child 1-1" }, - { name: "Child 1-2" } + { name: 'Engineering', value: 250, itemStyle: { color: '#3498db' } }, + { name: 'Design', value: 80, itemStyle: { color: '#5dade2' } }, + { name: 'Research', value: 70, itemStyle: { color: '#85c1e9' } } ] }, { - name: "Child 2", + name: 'Marketing', + value: 300, + itemStyle: { color: '#2ecc71' }, children: [ - { name: "Child 2-1" }, - { name: "Child 2-2" } + { name: 'Digital Advertising', value: 150, itemStyle: { color: '#2ecc71' } }, + { name: 'Content Creation', value: 80, itemStyle: { color: '#58d68d' } }, + { name: 'Events', value: 70, itemStyle: { color: '#80e5a8' } } + ] + }, + { + name: 'Operations', + value: 200, + itemStyle: { color: '#e74c3c' }, + children: [ + { name: 'Office Space', value: 100, itemStyle: { color: '#e74c3c' } }, + { name: 'Equipment', value: 50, itemStyle: { color: '#ec7063' } }, + { name: 'Utilities', value: 50, itemStyle: { color: '#f1948a' } } + ] + }, + { + name: 'HR', + value: 100, + itemStyle: { color: '#9b59b6' }, + children: [ + { name: 'Recruiting', value: 30, itemStyle: { color: '#9b59b6' } }, + { name: 'Training', value: 40, itemStyle: { color: '#af7ac5' } }, + { name: 'Benefits', value: 30, itemStyle: { color: '#c39bd3' } } ] } ] - }], - pointColor: "#380e81", - lineColor: "#1a93b8", + } + ], + label: { + show: true, + formatter: '{b}', + fontSize: 12, + color: '#333', + position: 'inside' + }, + itemStyle: { + borderColor: '#fff', + borderWidth: 1, + gapWidth: 1 + }, + breadcrumb: { + show: true + }, + roam: false }, - defaultTreemapChartOption: { + defaultSunburstChartOption: { data: [ { - name: 'Category A', - value: 100, + name: "Traffic", children: [ { - name: 'Subcategory A1', - value: 70, + name: "Direct", + value: 350, children: [ - { name: 'Item A1-1', value: 10 }, - { name: 'Item A1-2', value: 20 }, - { name: 'Item A1-3', value: 10 }, - { name: 'Item A1-4', value: 30 } + {name: "New", value: 200}, + {name: "Return", value: 150} ] - } - ] - }, - { - name: 'Category B', - value: 80, - children: [ + }, { - name: 'Subcategory B1', - value: 50, + name: "Social", + value: 300, children: [ - { name: 'Item B1-1', value: 20 }, - { name: 'Item B1-2', value: 15 }, - { name: 'Item B1-3', value: 15 } + {name: "FB", value: 120}, + {name: "IG", value: 100}, + {name: "TW", value: 80} ] }, + { + name: "Search", + value: 400, + children: [ + {name: "Google", value: 300}, + {name: "Bing", value: 100} + ] + } ] } ], - color: ['#5470C6', '#91CC75', '#FAC858', '#6b51a1'] - }, - defaultSunburstChartOption: { - data: [ - { - name: "Grandparent", - children: [ - { - name: "Parent A", - children: [ - {name: "Child A1", value: 10}, - {name: "Child A2", value: 20} - ] - }, - { - name: "Parent B", - children: [ - {name: "Child B1", value: 15}, - {name: "Child B2", value: 25} - ] - } - ] - } - ], levels: [ { itemStyle: { - color: '#f6e58d' - }, - }, - { - itemStyle: { - color: '#12e192' - }, + color: '#3498db', + borderWidth: 2, + borderColor: 'white' + } }, { itemStyle: { - color: '#ffbe76' - }, + color: '#2ecc71', + borderWidth: 1, + borderColor: 'white' + } }, { itemStyle: { - color: '#007979' - }, + color: '#e74c3c', + borderWidth: 1, + borderColor: 'white' + } } - ] + ], + label: { + show: true, + formatter: '{b}', + fontSize: 12, + color: 'white' + }, + radius: ['20%', '90%'] }, defaultCalendarChartOption: { data:[ @@ -536,28 +627,31 @@ export const enObj: I18nObjects = { }, defaultThemeriverChartOption: { data: [ - ['2025-01-01', 12, 'Product A'], - ['2025-01-01', 10, 'Product B'], - ['2025-01-01', 15, 'Product C'], - ['2025-01-01', 8, 'Product D'], - ['2025-01-02', 14, 'Product A'], - ['2025-01-02', 9, 'Product B'], - ['2025-01-02', 16, 'Product C'], - ['2025-01-02', 7, 'Product D'], - ['2025-01-03', 16, 'Product A'], - ['2025-01-03', 12, 'Product B'], - ['2025-01-03', 18, 'Product C'], - ['2025-01-03', 10, 'Product D'], - ['2025-01-04', 20, 'Product A'], - ['2025-01-04', 15, 'Product B'], - ['2025-01-04', 22, 'Product C'], - ['2025-01-04', 12, 'Product D'], - ['2025-01-05', 18, 'Product A'], - ['2025-01-05', 13, 'Product B'], - ['2025-01-05', 20, 'Product C'], - ['2025-01-05', 11, 'Product D'] + // Technology sector data - January to December + ['2024-01', 125, 'Smartphones'], + ['2024-02', 138, 'Smartphones'], + ['2024-03', 152, 'Smartphones'], + ['2024-04', 167, 'Smartphones'], + + ['2024-01', 95, 'Laptops'], + ['2024-02', 110, 'Laptops'], + ['2024-03', 125, 'Laptops'], + ['2024-04', 120, 'Laptops'], + + ['2024-01', 55, 'Tablets'], + ['2024-02', 60, 'Tablets'], + ['2024-03', 65, 'Tablets'], + ['2024-04', 72, 'Tablets'], + + ['2024-01', 30, 'Wearables'], + ['2024-02', 42, 'Wearables'], + ['2024-03', 55, 'Wearables'], + ['2024-04', 68, 'Wearables'], + + + ], - color: ['#5470C6', '#91CC75', '#FAC858', '#6b51a1'] + color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4'] }, defaultMapJsonOption: defaultMapData, diff --git a/client/packages/lowcoder-core/lib/index.js b/client/packages/lowcoder-core/lib/index.js index 32166ca50e..f972c7ba4b 100644 --- a/client/packages/lowcoder-core/lib/index.js +++ b/client/packages/lowcoder-core/lib/index.js @@ -1,118 +1,80 @@ import _ from 'lodash'; import { serialize, compile, middleware, prefixer, stringify } from 'stylis'; -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise, SuppressedError, Symbol */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} + +function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; function isEqualArgs(args, cacheArgs, equals) { @@ -123,21 +85,20 @@ function isEqualArgs(args, cacheArgs, equals) { return true; } return (args.length === cacheArgs.length && - cacheArgs.every(function (arg, index) { var _a, _b; return (_b = (_a = equals === null || equals === void 0 ? void 0 : equals[index]) === null || _a === void 0 ? void 0 : _a.call(equals, arg, args[index])) !== null && _b !== void 0 ? _b : arg === args[index]; })); + cacheArgs.every((arg, index) => equals?.[index]?.(arg, args[index]) ?? arg === args[index])); } function getCacheResult(thisObj, fnName, args, equals) { - var _a; - var cache = (_a = thisObj === null || thisObj === void 0 ? void 0 : thisObj.__cache) === null || _a === void 0 ? void 0 : _a[fnName]; + const cache = thisObj?.__cache?.[fnName]; if (cache && isEqualArgs(args, cache.args, equals)) { return cache.result; } } function cache(fn, args, thisObj, fnName, equals) { - var result = getCacheResult(thisObj, fnName, args, equals); + const result = getCacheResult(thisObj, fnName, args, equals); if (result) { return result.value; } - var cache = { + const cache = { id: Symbol("id"), args: args, time: Date.now(), @@ -146,117 +107,107 @@ function cache(fn, args, thisObj, fnName, equals) { thisObj.__cache = {}; } thisObj.__cache[fnName] = cache; - var value = fn.apply(thisObj, args); - cache.result = { value: value }; + const value = fn.apply(thisObj, args); + cache.result = { value }; return value; } function memoized(equals) { return function (target, fnName, descriptor) { - var fn = descriptor.value; - descriptor.value = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } + const fn = descriptor.value; + descriptor.value = function (...args) { return cache(fn, args, this, fnName, equals); }; return descriptor; }; } -var COST_MS_PRINT_THR = 0; -var RecursivePerfUtil = /** @class */ (function () { - function RecursivePerfUtil() { - var _this = this; - this.root = Symbol("root"); - this.stack = []; - this.initRecord = function () { - return { obj: _this.root, name: "@root", childrenPerfInfo: [], costMs: 0, depth: 0, info: {} }; - }; - this.getRecordByStack = function (stack) { - var curRecord = _this.record; - (stack !== null && stack !== void 0 ? stack : _this.stack).forEach(function (idx) { - curRecord = curRecord.childrenPerfInfo[idx]; - }); - return curRecord; - }; - this.clear = function () { - _this.record = _this.initRecord(); - }; - this.print = function (stack, cost_ms_print_thr) { - if (cost_ms_print_thr === void 0) { cost_ms_print_thr = COST_MS_PRINT_THR; } - var record = _this.getRecordByStack(stack); - console.info("~~ PerfInfo. costMs: ".concat(record.costMs.toFixed(3), ", stack: ").concat(stack, ", [name]").concat(record.name, ", [info]"), record.info, ", obj: ", record.obj, ", depth: ".concat(record.depth, ", size: ").concat(_.size(record.childrenPerfInfo))); - record.childrenPerfInfo.forEach(function (subRecord, idx) { - if (subRecord.costMs >= cost_ms_print_thr) { - console.info(" costMs: ".concat(subRecord.costMs.toFixed(3), " [").concat(idx, "]").concat(subRecord.name, " [info]"), subRecord.info, ". obj: ", subRecord.obj, ""); - } - }); - }; +const COST_MS_PRINT_THR = 0; +class RecursivePerfUtil { + root = Symbol("root"); + record; + stack = []; + constructor() { this.record = this.initRecord(); } - RecursivePerfUtil.prototype.log = function (info, key, log) { - info[key] = log; + initRecord = () => { + return { obj: this.root, name: "@root", childrenPerfInfo: [], costMs: 0, depth: 0, info: {} }; + }; + getRecordByStack = (stack) => { + let curRecord = this.record; + (stack ?? this.stack).forEach((idx) => { + curRecord = curRecord.childrenPerfInfo[idx]; + }); + return curRecord; }; - RecursivePerfUtil.prototype.perf = function (obj, name, fn) { + log(info, key, log) { + info[key] = log; + } + perf(obj, name, fn) { { return fn(_.noop); } + } + clear = () => { + this.record = this.initRecord(); }; - return RecursivePerfUtil; -}()); -var evalPerfUtil = new RecursivePerfUtil(); + print = (stack, cost_ms_print_thr = COST_MS_PRINT_THR) => { + const record = this.getRecordByStack(stack); + console.info(`~~ PerfInfo. costMs: ${record.costMs.toFixed(3)}, stack: ${stack}, [name]${record.name}, [info]`, record.info, `, obj: `, record.obj, `, depth: ${record.depth}, size: ${_.size(record.childrenPerfInfo)}`); + record.childrenPerfInfo.forEach((subRecord, idx) => { + if (subRecord.costMs >= cost_ms_print_thr) { + console.info(` costMs: ${subRecord.costMs.toFixed(3)} [${idx}]${subRecord.name} [info]`, subRecord.info, `. obj: `, subRecord.obj, ``); + } + }); + }; +} +const evalPerfUtil = new RecursivePerfUtil(); // @ts-ignore globalThis.evalPerfUtil = evalPerfUtil; -var AbstractNode = /** @class */ (function () { - function AbstractNode() { - this.type = "abstract"; - this.evalCache = {}; - } - AbstractNode.prototype.evaluate = function (exposingNodes, methods) { - var _this = this; - return evalPerfUtil.perf(this, "eval", function () { - exposingNodes = exposingNodes !== null && exposingNodes !== void 0 ? exposingNodes : {}; - var dependingNodeMap = _this.filterNodes(exposingNodes); +class AbstractNode { + type = "abstract"; + evalCache = {}; + constructor() { } + evaluate(exposingNodes, methods) { + return evalPerfUtil.perf(this, "eval", () => { + exposingNodes = exposingNodes ?? {}; + const dependingNodeMap = this.filterNodes(exposingNodes); // use cache when equals to the last dependingNodeMap - if (dependingNodeMapEquals(_this.evalCache.dependingNodeMap, dependingNodeMap)) { - return _this.evalCache.value; + if (dependingNodeMapEquals(this.evalCache.dependingNodeMap, dependingNodeMap)) { + return this.evalCache.value; } // initialize cyclic field - _this.evalCache.cyclic = false; - var result = _this.justEval(exposingNodes, methods); + this.evalCache.cyclic = false; + const result = this.justEval(exposingNodes, methods); // write cache - _this.evalCache.dependingNodeMap = dependingNodeMap; - _this.evalCache.value = result; - if (!_this.evalCache.cyclic) { + this.evalCache.dependingNodeMap = dependingNodeMap; + this.evalCache.value = result; + if (!this.evalCache.cyclic) { // check children cyclic - _this.evalCache.cyclic = _this.getChildren().some(function (node) { return node.hasCycle(); }); + this.evalCache.cyclic = this.getChildren().some((node) => node.hasCycle()); } return result; }); - }; - AbstractNode.prototype.hasCycle = function () { - var _a; - return (_a = this.evalCache.cyclic) !== null && _a !== void 0 ? _a : false; - }; - AbstractNode.prototype.dependNames = function () { + } + hasCycle() { + return this.evalCache.cyclic ?? false; + } + dependNames() { return Object.keys(this.dependValues()); - }; - AbstractNode.prototype.isHitEvalCache = function (exposingNodes) { - exposingNodes = exposingNodes !== null && exposingNodes !== void 0 ? exposingNodes : {}; - var dependingNodeMap = this.filterNodes(exposingNodes); + } + isHitEvalCache(exposingNodes) { + exposingNodes = exposingNodes ?? {}; + const dependingNodeMap = this.filterNodes(exposingNodes); return dependingNodeMapEquals(this.evalCache.dependingNodeMap, dependingNodeMap); - }; - return AbstractNode; -}()); + } +} /** * transform WrapNode in dependingNodeMap to actual node. * since WrapNode is dynamically constructed in eval process, its reference always changes. */ function unWrapDependingNodeMap(depMap) { - var nextMap = new Map(); - depMap.forEach(function (p, n) { + const nextMap = new Map(); + depMap.forEach((p, n) => { if (n.type === "wrap") { nextMap.set(n.delegate, p); } @@ -267,7 +218,7 @@ function unWrapDependingNodeMap(depMap) { return nextMap; } function setEquals(s1, s2) { - return s2 !== undefined && s1.size === s2.size && Array.from(s2).every(function (v) { return s1.has(v); }); + return s2 !== undefined && s1.size === s2.size && Array.from(s2).every((v) => s1.has(v)); } /** * check whether 2 dependingNodeMaps are equal @@ -282,10 +233,10 @@ function dependingNodeMapEquals(dependingNodeMap1, dependingNodeMap2) { if (!dependingNodeMap1 || dependingNodeMap1.size !== dependingNodeMap2.size) { return false; } - var map1 = unWrapDependingNodeMap(dependingNodeMap1); - var map2 = unWrapDependingNodeMap(dependingNodeMap2); - var result = true; - map2.forEach(function (paths, node) { + const map1 = unWrapDependingNodeMap(dependingNodeMap1); + const map2 = unWrapDependingNodeMap(dependingNodeMap2); + let result = true; + map2.forEach((paths, node) => { result = result && setEquals(paths, map1.get(node)); }); return result; @@ -294,41 +245,39 @@ function dependingNodeMapEquals(dependingNodeMap1, dependingNodeMap2) { /** * return a new node, evaluating to a function result with the input node value as the function's input */ -var FunctionNode = /** @class */ (function (_super) { - __extends(FunctionNode, _super); - function FunctionNode(child, func) { - var _this = _super.call(this) || this; - _this.child = child; - _this.func = func; - _this.type = "function"; - return _this; - } - FunctionNode.prototype.filterNodes = function (exposingNodes) { - var _this = this; - return evalPerfUtil.perf(this, "filterNodes", function () { - return _this.child.filterNodes(exposingNodes); +class FunctionNode extends AbstractNode { + child; + func; + type = "function"; + constructor(child, func) { + super(); + this.child = child; + this.func = func; + } + filterNodes(exposingNodes) { + return evalPerfUtil.perf(this, "filterNodes", () => { + return this.child.filterNodes(exposingNodes); }); - }; - FunctionNode.prototype.justEval = function (exposingNodes, methods) { + } + justEval(exposingNodes, methods) { return this.func(this.child.evaluate(exposingNodes, methods)); - }; - FunctionNode.prototype.getChildren = function () { + } + getChildren() { return [this.child]; - }; - FunctionNode.prototype.dependValues = function () { + } + dependValues() { return this.child.dependValues(); - }; - FunctionNode.prototype.fetchInfo = function (exposingNodes, options) { + } + fetchInfo(exposingNodes, options) { return this.child.fetchInfo(exposingNodes, options); - }; - __decorate([ - memoized() - ], FunctionNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], FunctionNode.prototype, "fetchInfo", null); - return FunctionNode; -}(AbstractNode)); + } +} +__decorate([ + memoized() +], FunctionNode.prototype, "filterNodes", null); +__decorate([ + memoized() +], FunctionNode.prototype, "fetchInfo", null); function withFunction(child, func) { return new FunctionNode(child, func); } @@ -337,118 +286,108 @@ function addDepend(target, node, paths) { if (!node) { return; } - var value = target.get(node); + let value = target.get(node); if (value === undefined) { value = new Set(); target.set(node, value); } - paths.forEach(function (p) { return value === null || value === void 0 ? void 0 : value.add(p); }); + paths.forEach((p) => value?.add(p)); } function addDepends(target, source) { - source === null || source === void 0 ? void 0 : source.forEach(function (paths, node) { return addDepend(target, node, paths); }); + source?.forEach((paths, node) => addDepend(target, node, paths)); return target; } /** * the evaluated value is the record constructed by the children nodes */ -var RecordNode = /** @class */ (function (_super) { - __extends(RecordNode, _super); - function RecordNode(children) { - var _this = _super.call(this) || this; - _this.children = children; - _this.type = "record"; - return _this; - } - RecordNode.prototype.filterNodes = function (exposingNodes) { - var _this = this; - return evalPerfUtil.perf(this, "filterNodes", function () { - var result = new Map(); - Object.values(_this.children).forEach(function (node) { +class RecordNode extends AbstractNode { + children; + type = "record"; + constructor(children) { + super(); + this.children = children; + } + filterNodes(exposingNodes) { + return evalPerfUtil.perf(this, `filterNodes`, () => { + const result = new Map(); + Object.values(this.children).forEach((node) => { addDepends(result, node.filterNodes(exposingNodes)); }); return result; }); - }; - RecordNode.prototype.justEval = function (exposingNodes, methods) { - var _this = this; - return _.mapValues(this.children, function (v, key) { - return evalPerfUtil.perf(_this, "eval-".concat(key), function () { return v.evaluate(exposingNodes, methods); }); - }); - }; - RecordNode.prototype.getChildren = function () { + } + justEval(exposingNodes, methods) { + return _.mapValues(this.children, (v, key) => evalPerfUtil.perf(this, `eval-${key}`, () => v.evaluate(exposingNodes, methods))); + } + getChildren() { return Object.values(this.children); - }; - RecordNode.prototype.dependValues = function () { - var nodes = Object.values(this.children); + } + dependValues() { + const nodes = Object.values(this.children); if (nodes.length === 1) { return nodes[0].dependValues(); } - var ret = {}; - nodes.forEach(function (node) { - Object.entries(node.dependValues()).forEach(function (_a) { - var key = _a[0], value = _a[1]; + let ret = {}; + nodes.forEach((node) => { + Object.entries(node.dependValues()).forEach(([key, value]) => { ret[key] = value; }); }); return ret; - }; - RecordNode.prototype.fetchInfo = function (exposingNodes, options) { - var isFetching = false; - var ready = true; - Object.entries(this.children).forEach(function (_a) { - _a[0]; var child = _a[1]; - var fi = child.fetchInfo(exposingNodes, options); + } + fetchInfo(exposingNodes, options) { + let isFetching = false; + let ready = true; + Object.entries(this.children).forEach(([name, child]) => { + const fi = child.fetchInfo(exposingNodes, options); isFetching = fi.isFetching || isFetching; ready = fi.ready && ready; }); - return { isFetching: isFetching, ready: ready }; - }; - __decorate([ - memoized() - ], RecordNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], RecordNode.prototype, "fetchInfo", null); - return RecordNode; -}(AbstractNode)); + return { isFetching, ready }; + } +} +__decorate([ + memoized() +], RecordNode.prototype, "filterNodes", null); +__decorate([ + memoized() +], RecordNode.prototype, "fetchInfo", null); function fromRecord(record) { return new RecordNode(record); } -var CachedNode = /** @class */ (function (_super) { - __extends(CachedNode, _super); - function CachedNode(child) { - var _this = _super.call(this) || this; - _this.type = "cached"; - _this.child = withEvalCache(child); - return _this; +class CachedNode extends AbstractNode { + type = "cached"; + child; + constructor(child) { + super(); + this.child = withEvalCache(child); } - CachedNode.prototype.filterNodes = function (exposingNodes) { + filterNodes(exposingNodes) { return this.child.filterNodes(exposingNodes); - }; - CachedNode.prototype.justEval = function (exposingNodes, methods) { - var isCached = this.child.isHitEvalCache(exposingNodes); // isCached must be set before evaluate() call - var value = this.child.evaluate(exposingNodes, methods); - return { value: value, isCached: isCached }; - }; - CachedNode.prototype.getChildren = function () { + } + justEval(exposingNodes, methods) { + const isCached = this.child.isHitEvalCache(exposingNodes); // isCached must be set before evaluate() call + const value = this.child.evaluate(exposingNodes, methods); + return { value, isCached }; + } + getChildren() { return [this.child]; - }; - CachedNode.prototype.dependValues = function () { + } + dependValues() { return this.child.dependValues(); - }; - CachedNode.prototype.fetchInfo = function (exposingNodes) { + } + fetchInfo(exposingNodes) { return this.child.fetchInfo(exposingNodes); - }; - __decorate([ - memoized() - ], CachedNode.prototype, "filterNodes", null); - return CachedNode; -}(AbstractNode)); + } +} +__decorate([ + memoized() +], CachedNode.prototype, "filterNodes", null); function withEvalCache(node) { - var newNode = withFunction(node, function (x) { return x; }); - newNode.evalCache = __assign({}, node.evalCache); + const newNode = withFunction(node, (x) => x); + newNode.evalCache = { ...node.evalCache }; return newNode; } /** @@ -465,9 +404,9 @@ function withEvalCache(node) { * @returns the new node */ function evalNodeOrMinor(mainNode, minorNode) { - var nodeRecord = { main: new CachedNode(mainNode), minor: minorNode }; - return new FunctionNode(new RecordNode(nodeRecord), function (record) { - var mainCachedValue = record.main; + const nodeRecord = { main: new CachedNode(mainNode), minor: minorNode }; + return new FunctionNode(new RecordNode(nodeRecord), (record) => { + const mainCachedValue = record.main; if (!mainCachedValue.isCached) { return mainCachedValue.value; } @@ -504,26 +443,27 @@ function toReadableString(value) { }); } -var ValueAndMsg = /** @class */ (function () { - function ValueAndMsg(value, msg, extra, midValue) { +class ValueAndMsg { + value; + msg; + extra; + midValue; // a middle value after eval and before transform + constructor(value, msg, extra, midValue) { this.value = value; this.msg = msg; this.extra = extra; this.midValue = midValue; } - ValueAndMsg.prototype.hasError = function () { + hasError() { return this.msg !== undefined; - }; - ValueAndMsg.prototype.getMsg = function (displayValueFn) { - var _a; - if (displayValueFn === void 0) { displayValueFn = toReadableString; } - return (_a = (this.hasError() ? this.msg : displayValueFn(this.value))) !== null && _a !== void 0 ? _a : ""; - }; - return ValueAndMsg; -}()); + } + getMsg(displayValueFn = toReadableString) { + return (this.hasError() ? this.msg : displayValueFn(this.value)) ?? ""; + } +} function dependsErrorMessage(node) { - return "DependencyError: \"".concat(node.unevaledValue, "\" caused a cyclic dependency."); + return `DependencyError: "${node.unevaledValue}" caused a cyclic dependency.`; } function getErrorMessage(err) { // todo try to use 'err instanceof EvalTypeError' instead @@ -535,27 +475,26 @@ function getErrorMessage(err) { : "UnknownError: unknown exception during eval"; } function mergeNodesWithSameName(map) { - var nameDepMap = {}; - map.forEach(function (paths, node) { - paths.forEach(function (p) { - var path = p.split("."); - var dep = genDepends(path, node); - var name = path[0]; - var newDep = mergeNode(nameDepMap[name], dep); + const nameDepMap = {}; + map.forEach((paths, node) => { + paths.forEach((p) => { + const path = p.split("."); + const dep = genDepends(path, node); + const name = path[0]; + const newDep = mergeNode(nameDepMap[name], dep); nameDepMap[name] = newDep; }); }); return nameDepMap; } function genDepends(path, node) { - var _a; if (path.length <= 0) { throw new Error("path length should not be 0"); } if (path.length === 1) { return node; } - return genDepends(path.slice(0, -1), fromRecord((_a = {}, _a[path[path.length - 1]] = node, _a))); + return genDepends(path.slice(0, -1), fromRecord({ [path[path.length - 1]]: node })); } // node2 mostly has one path function mergeNode(node1, node2) { @@ -565,13 +504,13 @@ function mergeNode(node1, node2) { if (!nodeIsRecord(node1) || !nodeIsRecord(node2)) { throw new Error("unevaledNode should be type of RecordNode"); } - var record1 = node1.children; - var record2 = node2.children; - var record = __assign({}, record1); - Object.keys(record2).forEach(function (name) { - var subNode1 = record1[name]; - var subNode2 = record2[name]; - var subNode = subNode1 ? mergeNode(subNode1, subNode2) : subNode2; + const record1 = node1.children; + const record2 = node2.children; + const record = { ...record1 }; + Object.keys(record2).forEach((name) => { + const subNode1 = record1[name]; + const subNode2 = record2[name]; + let subNode = subNode1 ? mergeNode(subNode1, subNode2) : subNode2; record[name] = subNode; }); return fromRecord(record); @@ -580,28 +519,28 @@ function nodeIsRecord(node) { return node.type === "record"; } -var DYNAMIC_SEGMENT_REGEX = /{{([\s\S]*?)}}/; +const DYNAMIC_SEGMENT_REGEX = /{{([\s\S]*?)}}/; function isDynamicSegment(segment) { return DYNAMIC_SEGMENT_REGEX.test(segment); } function getDynamicStringSegments(input) { - var segments = []; - var position = 0; - var start = input.indexOf("{{"); + const segments = []; + let position = 0; + let start = input.indexOf("{{"); while (start >= 0) { - var i = start + 2; + let i = start + 2; while (i < input.length && input[i] === "{") i++; - var end = input.indexOf("}}", i); + let end = input.indexOf("}}", i); if (end < 0) { break; } - var nextStart = input.indexOf("{{", end + 2); - var maxIndex = nextStart >= 0 ? nextStart : input.length; - var maxStartOffset = i - start - 2; - var sum = i - start; - var minValue = Number.MAX_VALUE; - var minOffset = Number.MAX_VALUE; + const nextStart = input.indexOf("{{", end + 2); + const maxIndex = nextStart >= 0 ? nextStart : input.length; + const maxStartOffset = i - start - 2; + let sum = i - start; + let minValue = Number.MAX_VALUE; + let minOffset = Number.MAX_VALUE; for (; i < maxIndex; i++) { switch (input[i]) { case "{": @@ -610,8 +549,8 @@ function getDynamicStringSegments(input) { case "}": sum--; if (input[i - 1] === "}") { - var offset = Math.min(Math.max(sum, 0), maxStartOffset); - var value = Math.abs(sum - offset); + const offset = Math.min(Math.max(sum, 0), maxStartOffset); + const value = Math.abs(sum - offset); if (value < minValue || (value === minValue && offset < minOffset)) { minValue = value; minOffset = offset; @@ -626,13 +565,12 @@ function getDynamicStringSegments(input) { start = nextStart; } segments.push(input.slice(position)); - return segments.filter(function (t) { return t; }); + return segments.filter((t) => t); } function filterDepends(unevaledValue, exposingNodes, maxDepth) { - var ret = new Map(); - for (var _i = 0, _a = getDynamicStringSegments(unevaledValue); _i < _a.length; _i++) { - var segment = _a[_i]; + const ret = new Map(); + for (const segment of getDynamicStringSegments(unevaledValue)) { if (isDynamicSegment(segment)) { addDepends(ret, parseDepends(segment.slice(2, -2), exposingNodes, maxDepth)); } @@ -643,8 +581,8 @@ function hasCycle(segment, exposingNodes) { if (!isDynamicSegment(segment)) { return false; } - var ret = false; - parseDepends(segment.slice(2, -2), exposingNodes).forEach(function (paths, node) { + let ret = false; + parseDepends(segment.slice(2, -2), exposingNodes).forEach((paths, node) => { ret = ret || node.hasCycle(); }); return ret; @@ -657,7 +595,7 @@ function changeDependName(unevaledValue, oldName, name, isFunction) { return rename(unevaledValue, oldName, name); } return getDynamicStringSegments(unevaledValue) - .map(function (segment) { + .map((segment) => { if (!isDynamicSegment(segment)) { return segment; } @@ -666,26 +604,24 @@ function changeDependName(unevaledValue, oldName, name, isFunction) { .join(""); } function rename(segment, oldName, name) { - var accessors = [".", "["]; - var regStrList = ["[a-zA-Z_$][a-zA-Z_$0-9.[\\]]*", "\\[[a-zA-Z_][a-zA-Z_0-9.]*"]; - var ret = segment; - for (var _i = 0, regStrList_1 = regStrList; _i < regStrList_1.length; _i++) { - var regStr = regStrList_1[_i]; - var reg = new RegExp(regStr, "g"); - ret = ret.replace(reg, function (s) { + const accessors = [".", "["]; + const regStrList = ["[a-zA-Z_$][a-zA-Z_$0-9.[\\]]*", "\\[[a-zA-Z_][a-zA-Z_0-9.]*"]; + let ret = segment; + for (const regStr of regStrList) { + const reg = new RegExp(regStr, "g"); + ret = ret.replace(reg, (s) => { if (s === oldName) { return name; } - var origin = oldName; - var target = name; - var matched = false; - if (s.startsWith("[".concat(origin))) { - origin = "[".concat(origin); - target = "[".concat(name); + let origin = oldName; + let target = name; + let matched = false; + if (s.startsWith(`[${origin}`)) { + origin = `[${origin}`; + target = `[${name}`; matched = true; } - for (var _i = 0, accessors_1 = accessors; _i < accessors_1.length; _i++) { - var accessor = accessors_1[_i]; + for (const accessor of accessors) { if (s.startsWith(origin + accessor)) { matched = true; target = target + accessor + s.substring(origin.length + accessor.length); @@ -701,28 +637,28 @@ function rename(segment, oldName, name) { return ret; } function getIdentifiers(jsSnippet) { - var ret = []; - var commonReg = /[a-zA-Z_$][a-zA-Z_$0-9.[\]]*/g; - var commonIds = jsSnippet.match(commonReg); + const ret = []; + const commonReg = /[a-zA-Z_$][a-zA-Z_$0-9.[\]]*/g; + const commonIds = jsSnippet.match(commonReg); if (commonIds) { - ret.push.apply(ret, commonIds); + ret.push(...commonIds); } - var indexIds = []; - (jsSnippet.match(/\[[a-zA-Z_][a-zA-Z_0-9\[\].]*\]/g) || []).forEach(function (i) { - indexIds.push.apply(indexIds, getIdentifiers(i.slice(1, -1))); + const indexIds = []; + (jsSnippet.match(/\[[a-zA-Z_][a-zA-Z_0-9\[\].]*\]/g) || []).forEach((i) => { + indexIds.push(...getIdentifiers(i.slice(1, -1))); }); - ret.push.apply(ret, indexIds); + ret.push(...indexIds); if (ret.length === 0) { return [jsSnippet]; } return ret; } function parseDepends(jsSnippet, exposingNodes, maxDepth) { - var depends = new Map(); - var identifiers = getIdentifiers(jsSnippet); - identifiers.forEach(function (identifier) { - var subpaths = _.toPath(identifier); - var depend = getDependNode(maxDepth ? subpaths.slice(0, maxDepth) : subpaths, exposingNodes); + const depends = new Map(); + const identifiers = getIdentifiers(jsSnippet); + identifiers.forEach((identifier) => { + const subpaths = _.toPath(identifier); + const depend = getDependNode(maxDepth ? subpaths.slice(0, maxDepth) : subpaths, exposingNodes); if (depend) { addDepend(depends, depend[0], [depend[1]]); } @@ -733,12 +669,11 @@ function getDependNode(subPaths, exposingNodes) { if (subPaths.length <= 0) { return undefined; } - var nodes = exposingNodes; - var node = undefined; - var path = []; - for (var _i = 0, subPaths_1 = subPaths; _i < subPaths_1.length; _i++) { - var subPath = subPaths_1[_i]; - var subNode = nodes[subPath]; + let nodes = exposingNodes; + let node = undefined; + const path = []; + for (const subPath of subPaths) { + const subNode = nodes[subPath]; if (!nodes.hasOwnProperty(subPath) || !subNode) { break; } @@ -1120,7 +1055,7 @@ var loglevel = { var log = loglevelExports; // global variables black list, forbidden to use in for jsQuery/jsAction -var functionBlacklist = new Set([ +const functionBlacklist = new Set([ "top", "parent", "document", @@ -1132,17 +1067,18 @@ var functionBlacklist = new Set([ "Navigator", "MutationObserver", ]); -var expressionBlacklist = new Set(__spreadArray(__spreadArray([], Array.from(functionBlacklist.values()), true), [ +const expressionBlacklist = new Set([ + ...Array.from(functionBlacklist.values()), "setTimeout", "setInterval", "setImmediate", -], false)); -var globalVarNames = new Set(["window", "globalThis", "self", "global"]); +]); +const globalVarNames = new Set(["window", "globalThis", "self", "global"]); function createBlackHole() { return new Proxy(function () { return createBlackHole(); }, { - get: function (t, p, r) { + get(t, p, r) { if (p === "toString") { return function () { return ""; @@ -1153,32 +1089,31 @@ function createBlackHole() { return ""; }; } - log.log("[Sandbox] access ".concat(String(p), " on black hole, return mock object")); + log.log(`[Sandbox] access ${String(p)} on black hole, return mock object`); return createBlackHole(); }, }); } -function createMockWindow(base, blacklist, onSet, disableLimit) { - if (blacklist === void 0) { blacklist = expressionBlacklist; } - var win = new Proxy(Object.assign({}, base), { - has: function () { +function createMockWindow(base, blacklist = expressionBlacklist, onSet, disableLimit) { + const win = new Proxy(Object.assign({}, base), { + has() { return true; }, - set: function (target, p, newValue) { + set(target, p, newValue) { if (typeof p === "string") { - onSet === null || onSet === void 0 ? void 0 : onSet(p); + onSet?.(p); } return Reflect.set(target, p, newValue); }, - get: function (target, p) { + get(target, p) { if (p in target) { return Reflect.get(target, p); } if (globalVarNames.has(p)) { return win; } - if (typeof p === "string" && (blacklist === null || blacklist === void 0 ? void 0 : blacklist.has(p)) && !disableLimit) { - log.log("[Sandbox] access ".concat(String(p), " on mock window, return mock object")); + if (typeof p === "string" && blacklist?.has(p) && !disableLimit) { + log.log(`[Sandbox] access ${String(p)} on mock window, return mock object`); return createBlackHole(); } return getPropertyFromNativeWindow(p); @@ -1186,8 +1121,8 @@ function createMockWindow(base, blacklist, onSet, disableLimit) { }); return win; } -var mockWindow; -var currentDisableLimit = false; +let mockWindow; +let currentDisableLimit = false; function clearMockWindow() { mockWindow = createMockWindow(); } @@ -1195,7 +1130,7 @@ function isDomElement(obj) { return obj instanceof Element || obj instanceof HTMLCollection; } function getPropertyFromNativeWindow(prop) { - var ret = Reflect.get(window, prop); + const ret = Reflect.get(window, prop); if (typeof ret === "function" && !ret.prototype) { return ret.bind(window); } @@ -1206,22 +1141,22 @@ function getPropertyFromNativeWindow(prop) { return ret; } function proxySandbox(context, methods, options) { - var _a = options || {}, _b = _a.disableLimit, disableLimit = _b === void 0 ? false : _b, _c = _a.scope, scope = _c === void 0 ? "expression" : _c, onSetGlobalVars = _a.onSetGlobalVars; - var isProtectedVar = function (key) { + const { disableLimit = false, scope = "expression", onSetGlobalVars } = options || {}; + const isProtectedVar = (key) => { return key in context || key in (methods || {}) || globalVarNames.has(key); }; - var cache = {}; - var blacklist = scope === "function" ? functionBlacklist : expressionBlacklist; + const cache = {}; + const blacklist = scope === "function" ? functionBlacklist : expressionBlacklist; if (scope === "function" || !mockWindow || disableLimit !== currentDisableLimit) { mockWindow = createMockWindow(mockWindow, blacklist, onSetGlobalVars, disableLimit); } currentDisableLimit = disableLimit; return new Proxy(mockWindow, { - has: function (target, p) { + has(target, p) { // proxy all variables return true; }, - get: function (target, p, receiver) { + get(target, p, receiver) { if (p === Symbol.unscopables) { return undefined; } @@ -1235,7 +1170,7 @@ function proxySandbox(context, methods, options) { if (p in cache) { return Reflect.get(cache, p); } - var value = Reflect.get(context, p, receiver); + let value = Reflect.get(context, p, receiver); if (typeof value === "object" && value !== null) { if (methods && p in methods) { value = Object.assign({}, value, Reflect.get(methods, p)); @@ -1251,38 +1186,43 @@ function proxySandbox(context, methods, options) { } return Reflect.get(target, p, receiver); }, - set: function (target, p, value, receiver) { + set(target, p, value, receiver) { if (isProtectedVar(p)) { throw new Error(p.toString() + " can't be modified"); } return Reflect.set(target, p, value, receiver); }, - defineProperty: function (target, p, attributes) { + defineProperty(target, p, attributes) { if (isProtectedVar(p)) { throw new Error("can't define property:" + p.toString()); } return Reflect.defineProperty(target, p, attributes); }, - deleteProperty: function (target, p) { + deleteProperty(target, p) { if (isProtectedVar(p)) { throw new Error("can't delete property:" + p.toString()); } return Reflect.deleteProperty(target, p); }, - setPrototypeOf: function (target, v) { + setPrototypeOf(target, v) { throw new Error("can't invoke setPrototypeOf"); }, }); } function evalScript(script, context, methods) { - return evalFunc("return (".concat(script, "\n);"), context, methods); + return evalFunc(`return (${script}\n);`, context, methods); } function evalFunc(functionBody, context, methods, options, isAsync) { - var code = "with(this){\n return (".concat(isAsync ? "async " : "", "function() {\n 'use strict';\n ").concat(functionBody, ";\n }).call(this);\n }"); + const code = `with(this){ + return (${isAsync ? "async " : ""}function() { + 'use strict'; + ${functionBody}; + }).call(this); + }`; // eslint-disable-next-line no-new-func - var vm = new Function(code); - var sandbox = proxySandbox(context, methods, options); - var result = vm.call(sandbox); + const vm = new Function(code); + const sandbox = proxySandbox(context, methods, options); + const result = vm.call(sandbox); return result; } @@ -1468,7 +1408,7 @@ function call(content, context, segment) { return new ValueAndMsg("", undefined, { segments: [{ value: segment, success: true }] }); } try { - var value = evalScript(content, context); + const value = evalScript(content, context); return new ValueAndMsg(value, undefined, { segments: [{ value: segment, success: true }] }); } catch (err) { @@ -1480,65 +1420,60 @@ function call(content, context, segment) { function evalDefault(unevaledValue, context) { return new DefaultParser(unevaledValue, context).parse(); } -var DefaultParser = /** @class */ (function () { - function DefaultParser(unevaledValue, context) { +class DefaultParser { + context; + segments; + valueAndMsgs = []; + constructor(unevaledValue, context) { this.context = context; - this.valueAndMsgs = []; this.segments = getDynamicStringSegments(unevaledValue.trim()); } - DefaultParser.prototype.parse = function () { - var _a; + parse() { try { - var object = this.parseObject(); + const object = this.parseObject(); if (this.valueAndMsgs.length === 0) { return new ValueAndMsg(object); } - return new ValueAndMsg(object, (_a = _.find(this.valueAndMsgs, "msg")) === null || _a === void 0 ? void 0 : _a.msg, { - segments: this.valueAndMsgs.flatMap(function (v) { var _a, _b; return (_b = (_a = v === null || v === void 0 ? void 0 : v.extra) === null || _a === void 0 ? void 0 : _a.segments) !== null && _b !== void 0 ? _b : []; }), + return new ValueAndMsg(object, _.find(this.valueAndMsgs, "msg")?.msg, { + segments: this.valueAndMsgs.flatMap((v) => v?.extra?.segments ?? []), }); } catch (err) { // return null, the later transform will determine the default value return new ValueAndMsg("", getErrorMessage(err)); } - }; - DefaultParser.prototype.parseObject = function () { - var _this = this; - var values = this.segments.map(function (segment) { - return isDynamicSegment(segment) ? _this.evalDynamicSegment(segment) : segment; - }); + } + parseObject() { + const values = this.segments.map((segment) => isDynamicSegment(segment) ? this.evalDynamicSegment(segment) : segment); return values.length === 1 ? values[0] : values.join(""); - }; - DefaultParser.prototype.evalDynamicSegment = function (segment) { - var valueAndMsg = call(segment.slice(2, -2).trim(), this.context, segment); + } + evalDynamicSegment(segment) { + const valueAndMsg = call(segment.slice(2, -2).trim(), this.context, segment); this.valueAndMsgs.push(valueAndMsg); return valueAndMsg.value; - }; - return DefaultParser; -}()); + } +} function evalJson(unevaledValue, context) { return new RelaxedJsonParser(unevaledValue, context).parse(); } // this will also be used in node-service -var RelaxedJsonParser = /** @class */ (function (_super) { - __extends(RelaxedJsonParser, _super); - function RelaxedJsonParser(unevaledValue, context) { - var _this = _super.call(this, unevaledValue, context) || this; - _this.evalIndexedObject = _this.evalIndexedObject.bind(_this); - return _this; +class RelaxedJsonParser extends DefaultParser { + constructor(unevaledValue, context) { + super(unevaledValue, context); + this.evalIndexedObject = this.evalIndexedObject.bind(this); } - RelaxedJsonParser.prototype.parseObject = function () { + parseObject() { try { return this.parseRelaxedJson(); } catch (e) { - return _super.prototype.parseObject.call(this); + return super.parseObject(); } - }; - RelaxedJsonParser.prototype.parseRelaxedJson = function () { + } + parseRelaxedJson() { // replace the original {{...}} as relaxed-json adaptive \{\{ + ${index} + \}\} - var indexedRelaxedJsonString = this.segments - .map(function (s, i) { return (isDynamicSegment(s) ? "\\{\\{" + i + "\\}\\}" : s); }) + const indexedRelaxedJsonString = this.segments + .map((s, i) => (isDynamicSegment(s) ? "\\{\\{" + i + "\\}\\}" : s)) .join(""); if (indexedRelaxedJsonString.length === 0) { // return empty, let the later transform determines the default value @@ -1546,13 +1481,13 @@ var RelaxedJsonParser = /** @class */ (function (_super) { } // transform to standard JSON strings with RELAXED JSON // here is a trick: if "\{\{ \}\}" is in quotes, keep it unchanged; otherwise transform to "{{ }}" - var indexedJsonString = relaxedJSONToJSON(indexedRelaxedJsonString, true); + const indexedJsonString = relaxedJSONToJSON(indexedRelaxedJsonString, true); // here use eval instead of JSON.parse, in order to support escaping like JavaScript. JSON.parse will cause error when escaping non-spicial char // since eval support escaping, replace "\{\{ + ${index} + \}\}" as "\\{\\{ + ${index} + \\}\\}" - var indexedJsonObject = evalScript(indexedJsonString.replace(/\\{\\{\d+\\}\\}/g, function (s) { return "\\\\{\\\\{" + s.slice(4, -4) + "\\\\}\\\\}"; }), {}); + const indexedJsonObject = evalScript(indexedJsonString.replace(/\\{\\{\d+\\}\\}/g, (s) => "\\\\{\\\\{" + s.slice(4, -4) + "\\\\}\\\\}"), {}); return this.evalIndexedObject(indexedJsonObject); - }; - RelaxedJsonParser.prototype.evalIndexedObject = function (obj) { + } + evalIndexedObject(obj) { if (typeof obj === "string") { return this.evalIndexedStringToObject(obj); } @@ -1562,91 +1497,72 @@ var RelaxedJsonParser = /** @class */ (function (_super) { if (Array.isArray(obj)) { return obj.map(this.evalIndexedObject); } - var ret = {}; - for (var _i = 0, _a = Object.entries(obj); _i < _a.length; _i++) { - var _b = _a[_i], key = _b[0], value = _b[1]; + const ret = {}; + for (const [key, value] of Object.entries(obj)) { ret[this.evalIndexedStringToString(key)] = this.evalIndexedObject(value); } return ret; - }; - RelaxedJsonParser.prototype.evalIndexedStringToObject = function (indexedString) { + } + evalIndexedStringToObject(indexedString) { // if the whole string is "{{ + ${index} + }}", it indicates that the original "{{...}}" is not in quotes, as a standalone JSON value. if (indexedString.match(/^{{\d+}}$/)) { return this.evalIndexedSnippet(indexedString); } return this.evalIndexedStringToString(indexedString); - }; - RelaxedJsonParser.prototype.evalIndexedStringToString = function (indexedString) { - var _this = this; + } + evalIndexedStringToString(indexedString) { // replace all {{ + ${index} + }} and \{\{ + ${index} \}\} - return indexedString.replace(/({{\d+}})|(\\{\\{\d+\\}\\})/g, function (s) { return _this.evalIndexedSnippet(s) + ""; }); - }; + return indexedString.replace(/({{\d+}})|(\\{\\{\d+\\}\\})/g, (s) => this.evalIndexedSnippet(s) + ""); + } // eval {{ + ${index} + }} or \{\{ + ${index} + \}\} - RelaxedJsonParser.prototype.evalIndexedSnippet = function (snippet) { - var index = parseInt(snippet.startsWith("{{") ? snippet.slice(2, -2) : snippet.slice(4, -4)); + evalIndexedSnippet(snippet) { + const index = parseInt(snippet.startsWith("{{") ? snippet.slice(2, -2) : snippet.slice(4, -4)); if (index >= 0 && index < this.segments.length) { - var segment = this.segments[index]; + const segment = this.segments[index]; if (isDynamicSegment(segment)) { return this.evalDynamicSegment(segment); } } return snippet; - }; - return RelaxedJsonParser; -}(DefaultParser)); + } +} function evalFunction(unevaledValue, context, methods, isAsync) { try { - return new ValueAndMsg(function (args, runInHost, scope) { - if (runInHost === void 0) { runInHost = false; } - if (scope === void 0) { scope = "function"; } - return evalFunc(unevaledValue.startsWith("return") - ? unevaledValue + "\n" - : "return ".concat(isAsync ? "async " : "", "function(){'use strict'; ").concat(unevaledValue, "\n}()"), args ? __assign(__assign({}, context), args) : context, methods, { disableLimit: runInHost, scope: scope }, isAsync); - }); + return new ValueAndMsg((args, runInHost = false, scope = "function") => evalFunc(unevaledValue.startsWith("return") + ? unevaledValue + "\n" + : `return ${isAsync ? "async " : ""}function(){'use strict'; ${unevaledValue}\n}()`, args ? { ...context, ...args } : context, methods, { disableLimit: runInHost, scope }, isAsync)); } catch (err) { - return new ValueAndMsg(function () { }, getErrorMessage(err)); - } -} -function evalFunctionResult(unevaledValue, context, methods) { - return __awaiter(this, void 0, void 0, function () { - var valueAndMsg, _a, err_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - valueAndMsg = evalFunction(unevaledValue, context, methods, true); - if (valueAndMsg.hasError()) { - return [2 /*return*/, new ValueAndMsg("", valueAndMsg.msg)]; - } - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - _a = ValueAndMsg.bind; - return [4 /*yield*/, valueAndMsg.value()]; - case 2: return [2 /*return*/, new (_a.apply(ValueAndMsg, [void 0, _b.sent()]))()]; - case 3: - err_1 = _b.sent(); - return [2 /*return*/, new ValueAndMsg("", getErrorMessage(err_1))]; - case 4: return [2 /*return*/]; - } - }); - }); + return new ValueAndMsg(() => { }, getErrorMessage(err)); + } +} +async function evalFunctionResult(unevaledValue, context, methods) { + const valueAndMsg = evalFunction(unevaledValue, context, methods, true); + if (valueAndMsg.hasError()) { + return new ValueAndMsg("", valueAndMsg.msg); + } + try { + return new ValueAndMsg(await valueAndMsg.value()); + } + catch (err) { + return new ValueAndMsg("", getErrorMessage(err)); + } } function string2Fn(unevaledValue, type, methods) { if (type) { switch (type) { case "JSON": - return function (context) { return evalJson(unevaledValue, context); }; + return (context) => evalJson(unevaledValue, context); case "Function": - return function (context) { return evalFunction(unevaledValue, context, methods); }; + return (context) => evalFunction(unevaledValue, context, methods); } } - return function (context) { return evalDefault(unevaledValue, context); }; + return (context) => evalDefault(unevaledValue, context); } -var IS_FETCHING_FIELD = "isFetching"; -var LATEST_END_TIME_FIELD = "latestEndTime"; -var TRIGGER_TYPE_FIELD = "triggerType"; +const IS_FETCHING_FIELD = "isFetching"; +const LATEST_END_TIME_FIELD = "latestEndTime"; +const TRIGGER_TYPE_FIELD = "triggerType"; /** * user input node * @@ -1656,66 +1572,62 @@ var TRIGGER_TYPE_FIELD = "triggerType"; * * FIXME(libin): distinguish Json CodeNode,since wrapContext may cause problems. */ -var CodeNode = /** @class */ (function (_super) { - __extends(CodeNode, _super); - function CodeNode(unevaledValue, options) { - var _this = this; - var _a; - _this = _super.call(this) || this; - _this.unevaledValue = unevaledValue; - _this.options = options; - _this.type = "input"; - _this.directDepends = new Map(); - _this.codeType = options === null || options === void 0 ? void 0 : options.codeType; - _this.evalWithMethods = (_a = options === null || options === void 0 ? void 0 : options.evalWithMethods) !== null && _a !== void 0 ? _a : true; - return _this; +class CodeNode extends AbstractNode { + unevaledValue; + options; + type = "input"; + codeType; + evalWithMethods; + directDepends = new Map(); + constructor(unevaledValue, options) { + super(); + this.unevaledValue = unevaledValue; + this.options = options; + this.codeType = options?.codeType; + this.evalWithMethods = options?.evalWithMethods ?? true; } // FIXME: optimize later - CodeNode.prototype.convertedValue = function () { + convertedValue() { if (this.codeType === "Function") { - return "{{function(){".concat(this.unevaledValue, "}}}"); + return `{{function(){${this.unevaledValue}}}}`; } return this.unevaledValue; - }; - CodeNode.prototype.filterNodes = function (exposingNodes) { + } + filterNodes(exposingNodes) { if (!!this.evalCache.inFilterNodes) { return new Map(); } this.evalCache.inFilterNodes = true; try { - var filteredDepends = this.filterDirectDepends(exposingNodes); + const filteredDepends = this.filterDirectDepends(exposingNodes); // log.log("unevaledValue: ", this.unevaledValue, "\nfilteredDepends:", filteredDepends); - var result_1 = addDepends(new Map(), filteredDepends); - filteredDepends.forEach(function (paths, node) { - addDepends(result_1, node.filterNodes(exposingNodes)); + const result = addDepends(new Map(), filteredDepends); + filteredDepends.forEach((paths, node) => { + addDepends(result, node.filterNodes(exposingNodes)); }); // Add isFetching & latestEndTime node for FetchCheck - var topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); - topDepends.forEach(function (paths, depend) { + const topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); + topDepends.forEach((paths, depend) => { if (nodeIsRecord(depend)) { - var _loop_1 = function (field) { - var node = depend.children[field]; + for (const field of [IS_FETCHING_FIELD, LATEST_END_TIME_FIELD]) { + const node = depend.children[field]; if (node) { - addDepend(result_1, node, Array.from(paths).map(function (p) { return p + "." + field; })); + addDepend(result, node, Array.from(paths).map((p) => p + "." + field)); } - }; - for (var _i = 0, _a = [IS_FETCHING_FIELD, LATEST_END_TIME_FIELD]; _i < _a.length; _i++) { - var field = _a[_i]; - _loop_1(field); } } }); - return result_1; + return result; } finally { this.evalCache.inFilterNodes = false; } - }; + } // only includes direct depends, exlucdes depends of dependencies - CodeNode.prototype.filterDirectDepends = function (exposingNodes) { + filterDirectDepends(exposingNodes) { return filterDepends(this.convertedValue(), exposingNodes); - }; - CodeNode.prototype.justEval = function (exposingNodes, methods) { + } + justEval(exposingNodes, methods) { // log.log("justEval: ", this, "\nexposingNodes: ", exposingNodes); if (!!this.evalCache.inEval) { // found cyclic eval @@ -1724,12 +1636,12 @@ var CodeNode = /** @class */ (function (_super) { } this.evalCache.inEval = true; try { - var dependingNodeMap = this.filterDirectDepends(exposingNodes); + const dependingNodeMap = this.filterDirectDepends(exposingNodes); this.directDepends = dependingNodeMap; - var dependingNodes = mergeNodesWithSameName(dependingNodeMap); - var fn = string2Fn(this.unevaledValue, this.codeType, this.evalWithMethods ? methods : {}); - var evalNode = withFunction(fromRecord(dependingNodes), fn); - var valueAndMsg = evalNode.evaluate(exposingNodes); + const dependingNodes = mergeNodesWithSameName(dependingNodeMap); + const fn = string2Fn(this.unevaledValue, this.codeType, this.evalWithMethods ? methods : {}); + const evalNode = withFunction(fromRecord(dependingNodes), fn); + let valueAndMsg = evalNode.evaluate(exposingNodes); // log.log("unevaledValue: ", this.unevaledValue, "\ndependingNodes: ", dependingNodes, "\nvalueAndMsg: ", valueAndMsg); if (this.evalCache.cyclic) { valueAndMsg = new ValueAndMsg(valueAndMsg.value, (valueAndMsg.msg ? valueAndMsg.msg + "\n" : "") + dependsErrorMessage(this), fixCyclic(valueAndMsg.extra, exposingNodes)); @@ -1739,25 +1651,25 @@ var CodeNode = /** @class */ (function (_super) { finally { this.evalCache.inEval = false; } - }; - CodeNode.prototype.getChildren = function () { + } + getChildren() { if (this.directDepends) { return Array.from(this.directDepends.keys()); } return []; - }; - CodeNode.prototype.dependValues = function () { - var ret = {}; - this.directDepends.forEach(function (paths, node) { + } + dependValues() { + let ret = {}; + this.directDepends.forEach((paths, node) => { if (node instanceof AbstractNode) { - paths.forEach(function (path) { + paths.forEach((path) => { ret[path] = node.evalCache.value; }); } }); return ret; - }; - CodeNode.prototype.fetchInfo = function (exposingNodes, options) { + } + fetchInfo(exposingNodes, options) { if (!!this.evalCache.inIsFetching) { return { isFetching: false, @@ -1766,67 +1678,65 @@ var CodeNode = /** @class */ (function (_super) { } this.evalCache.inIsFetching = true; try { - var topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); - var isFetching_1 = false; - var ready_1 = true; - topDepends.forEach(function (paths, depend) { - var pathsArr = Array.from(paths); - var value = depend.evaluate(exposingNodes); - if ((options === null || options === void 0 ? void 0 : options.ignoreManualDepReadyStatus) && + const topDepends = filterDepends(this.convertedValue(), exposingNodes, 1); + let isFetching = false; + let ready = true; + topDepends.forEach((paths, depend) => { + const pathsArr = Array.from(paths); + const value = depend.evaluate(exposingNodes); + if (options?.ignoreManualDepReadyStatus && _.has(value, TRIGGER_TYPE_FIELD) && value.triggerType === "manual") { return; } // if query is dependent on itself, mark as ready - if ((pathsArr === null || pathsArr === void 0 ? void 0 : pathsArr[0]) === (options === null || options === void 0 ? void 0 : options.queryName)) + if (pathsArr?.[0] === options?.queryName) return; // wait for lazy loaded comps to load before executing query on page load if (value && !Object.keys(value).length && paths.size) { - isFetching_1 = true; - ready_1 = false; + isFetching = true; + ready = false; } if (_.has(value, IS_FETCHING_FIELD)) { - isFetching_1 = isFetching_1 || value.isFetching === true; + isFetching = isFetching || value.isFetching === true; } if (_.has(value, LATEST_END_TIME_FIELD)) { - ready_1 = ready_1 && value.latestEndTime > 0; + ready = ready && value.latestEndTime > 0; } }); - var dependingNodeMap = this.filterNodes(exposingNodes); - dependingNodeMap.forEach(function (paths, depend) { - var fi = depend.fetchInfo(exposingNodes, options); - isFetching_1 = isFetching_1 || fi.isFetching; - ready_1 = ready_1 && fi.ready; + const dependingNodeMap = this.filterNodes(exposingNodes); + dependingNodeMap.forEach((paths, depend) => { + const fi = depend.fetchInfo(exposingNodes, options); + isFetching = isFetching || fi.isFetching; + ready = ready && fi.ready; }); return { - isFetching: isFetching_1, - ready: ready_1, + isFetching, + ready: ready, }; } finally { this.evalCache.inIsFetching = false; } - }; - __decorate([ - memoized() - ], CodeNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], CodeNode.prototype, "filterDirectDepends", null); - __decorate([ - memoized() - ], CodeNode.prototype, "fetchInfo", null); - return CodeNode; -}(AbstractNode)); + } +} +__decorate([ + memoized() +], CodeNode.prototype, "filterNodes", null); +__decorate([ + memoized() +], CodeNode.prototype, "filterDirectDepends", null); +__decorate([ + memoized() +], CodeNode.prototype, "fetchInfo", null); /** * generate node for unevaledValue */ function fromUnevaledValue(unevaledValue) { - return new FunctionNode(new CodeNode(unevaledValue), function (valueAndMsg) { return valueAndMsg.value; }); + return new FunctionNode(new CodeNode(unevaledValue), (valueAndMsg) => valueAndMsg.value); } function fixCyclic(extra, exposingNodes) { - var _a; - (_a = extra === null || extra === void 0 ? void 0 : extra.segments) === null || _a === void 0 ? void 0 : _a.forEach(function (segment) { + extra?.segments?.forEach((segment) => { if (segment.success) { segment.success = !hasCycle(segment.value, exposingNodes); } @@ -1837,38 +1747,37 @@ function fixCyclic(extra, exposingNodes) { /** * evaluate to get FetchInfo or fetching status */ -var FetchCheckNode = /** @class */ (function (_super) { - __extends(FetchCheckNode, _super); - function FetchCheckNode(child, options) { - var _this = _super.call(this) || this; - _this.child = child; - _this.options = options; - _this.type = "fetchCheck"; - return _this; - } - FetchCheckNode.prototype.filterNodes = function (exposingNodes) { +class FetchCheckNode extends AbstractNode { + child; + options; + type = "fetchCheck"; + constructor(child, options) { + super(); + this.child = child; + this.options = options; + } + filterNodes(exposingNodes) { return this.child.filterNodes(exposingNodes); - }; - FetchCheckNode.prototype.justEval = function (exposingNodes) { + } + justEval(exposingNodes) { return this.fetchInfo(exposingNodes); - }; - FetchCheckNode.prototype.getChildren = function () { + } + getChildren() { return [this.child]; - }; - FetchCheckNode.prototype.dependValues = function () { + } + dependValues() { return this.child.dependValues(); - }; - FetchCheckNode.prototype.fetchInfo = function (exposingNodes) { + } + fetchInfo(exposingNodes) { return this.child.fetchInfo(exposingNodes, this.options); - }; - __decorate([ - memoized() - ], FetchCheckNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], FetchCheckNode.prototype, "fetchInfo", null); - return FetchCheckNode; -}(AbstractNode)); + } +} +__decorate([ + memoized() +], FetchCheckNode.prototype, "filterNodes", null); +__decorate([ + memoized() +], FetchCheckNode.prototype, "fetchInfo", null); function isFetching(node) { return new FetchCheckNode(node); } @@ -3104,48 +3013,46 @@ var LRU = LRUCache; /** * directly provide data */ -var SimpleNode = /** @class */ (function (_super) { - __extends(SimpleNode, _super); - function SimpleNode(value) { - var _this = _super.call(this) || this; - _this.value = value; - _this.type = "simple"; - return _this; +class SimpleNode extends AbstractNode { + value; + type = "simple"; + constructor(value) { + super(); + this.value = value; } - SimpleNode.prototype.filterNodes = function (exposingNodes) { - return evalPerfUtil.perf(this, "filterNodes", function () { + filterNodes(exposingNodes) { + return evalPerfUtil.perf(this, "filterNodes", () => { return new Map(); }); - }; - SimpleNode.prototype.justEval = function (exposingNodes) { + } + justEval(exposingNodes) { return this.value; - }; - SimpleNode.prototype.getChildren = function () { + } + getChildren() { return []; - }; - SimpleNode.prototype.dependValues = function () { + } + dependValues() { return {}; - }; - SimpleNode.prototype.fetchInfo = function (exposingNodes) { + } + fetchInfo(exposingNodes) { return { isFetching: false, ready: true, }; - }; - __decorate([ - memoized() - ], SimpleNode.prototype, "filterNodes", null); - return SimpleNode; -}(AbstractNode)); + } +} +__decorate([ + memoized() +], SimpleNode.prototype, "filterNodes", null); /** * provide simple value, don't need to eval */ function fromValue(value) { return new SimpleNode(value); } -var lru = new LRU({ max: 16384 }); +const lru = new LRU({ max: 16384 }); function fromValueWithCache(value) { - var res = lru.get(value); + let res = lru.get(value); if (res === undefined) { res = fromValue(value); lru.set(value, res); @@ -3154,102 +3061,101 @@ function fromValueWithCache(value) { } // encapsulate module node, use specified exposing nodes and input nodes -var WrapNode = /** @class */ (function (_super) { - __extends(WrapNode, _super); - function WrapNode(delegate, moduleExposingNodes, moduleExposingMethods, inputNodes) { - var _this = _super.call(this) || this; - _this.delegate = delegate; - _this.moduleExposingNodes = moduleExposingNodes; - _this.moduleExposingMethods = moduleExposingMethods; - _this.inputNodes = inputNodes; - _this.type = "wrap"; - return _this; - } - WrapNode.prototype.wrap = function (exposingNodes, exposingMethods) { +class WrapNode extends AbstractNode { + delegate; + moduleExposingNodes; + moduleExposingMethods; + inputNodes; + type = "wrap"; + constructor(delegate, moduleExposingNodes, moduleExposingMethods, inputNodes) { + super(); + this.delegate = delegate; + this.moduleExposingNodes = moduleExposingNodes; + this.moduleExposingMethods = moduleExposingMethods; + this.inputNodes = inputNodes; + } + wrap(exposingNodes, exposingMethods) { if (!this.inputNodes) { return this.moduleExposingNodes; } - var inputNodeEntries = Object.entries(this.inputNodes); + const inputNodeEntries = Object.entries(this.inputNodes); if (inputNodeEntries.length === 0) { return this.moduleExposingNodes; } - var inputNodes = {}; - inputNodeEntries.forEach(function (_a) { - var name = _a[0], node = _a[1]; - var targetNode = typeof node === "string" ? exposingNodes[node] : node; + const inputNodes = {}; + inputNodeEntries.forEach(([name, node]) => { + let targetNode = typeof node === "string" ? exposingNodes[node] : node; if (!targetNode) { return; } inputNodes[name] = new WrapNode(targetNode, exposingNodes, exposingMethods); }); - return __assign(__assign({}, this.moduleExposingNodes), inputNodes); - }; - WrapNode.prototype.filterNodes = function (exposingNodes) { + return { + ...this.moduleExposingNodes, + ...inputNodes, + }; + } + filterNodes(exposingNodes) { return this.delegate.filterNodes(this.wrap(exposingNodes, {})); - }; - WrapNode.prototype.justEval = function (exposingNodes, methods) { + } + justEval(exposingNodes, methods) { return this.delegate.evaluate(this.wrap(exposingNodes, methods), this.moduleExposingMethods); - }; - WrapNode.prototype.fetchInfo = function (exposingNodes) { + } + fetchInfo(exposingNodes) { return this.delegate.fetchInfo(this.wrap(exposingNodes, {})); - }; - WrapNode.prototype.getChildren = function () { + } + getChildren() { return [this.delegate]; - }; - WrapNode.prototype.dependValues = function () { + } + dependValues() { return {}; - }; - __decorate([ - memoized() - ], WrapNode.prototype, "filterNodes", null); - __decorate([ - memoized() - ], WrapNode.prototype, "fetchInfo", null); - return WrapNode; -}(AbstractNode)); - -var WrapContextNode = /** @class */ (function (_super) { - __extends(WrapContextNode, _super); - function WrapContextNode(child) { - var _this = _super.call(this) || this; - _this.child = child; - _this.type = "wrapContext"; - return _this; } - WrapContextNode.prototype.filterNodes = function (exposingNodes) { +} +__decorate([ + memoized() +], WrapNode.prototype, "filterNodes", null); +__decorate([ + memoized() +], WrapNode.prototype, "fetchInfo", null); + +class WrapContextNode extends AbstractNode { + child; + type = "wrapContext"; + constructor(child) { + super(); + this.child = child; + } + filterNodes(exposingNodes) { return this.child.filterNodes(exposingNodes); - }; - WrapContextNode.prototype.justEval = function (exposingNodes, methods) { - var _this = this; - return function (params) { - var nodes; + } + justEval(exposingNodes, methods) { + return (params) => { + let nodes; if (params) { - nodes = __assign({}, exposingNodes); - Object.entries(params).forEach(function (_a) { - var key = _a[0], value = _a[1]; + nodes = { ...exposingNodes }; + Object.entries(params).forEach(([key, value]) => { nodes[key] = fromValueWithCache(value); }); } else { nodes = exposingNodes; } - return _this.child.evaluate(nodes, methods); + return this.child.evaluate(nodes, methods); }; - }; - WrapContextNode.prototype.getChildren = function () { + } + getChildren() { return [this.child]; - }; - WrapContextNode.prototype.dependValues = function () { + } + dependValues() { return this.child.dependValues(); - }; - WrapContextNode.prototype.fetchInfo = function (exposingNodes) { + } + fetchInfo(exposingNodes) { return this.child.fetchInfo(exposingNodes); - }; - __decorate([ - memoized() - ], WrapContextNode.prototype, "filterNodes", null); - return WrapContextNode; -}(AbstractNode)); + } +} +__decorate([ + memoized() +], WrapContextNode.prototype, "filterNodes", null); function wrapContext(node) { return new WrapContextNode(node); } @@ -3257,59 +3163,57 @@ function wrapContext(node) { /** * build a new node by setting new dependent nodes in child node */ -var WrapContextNodeV2 = /** @class */ (function (_super) { - __extends(WrapContextNodeV2, _super); - function WrapContextNodeV2(child, paramNodes) { - var _this = _super.call(this) || this; - _this.child = child; - _this.paramNodes = paramNodes; - _this.type = "wrapContextV2"; - return _this; - } - WrapContextNodeV2.prototype.filterNodes = function (exposingNodes) { +class WrapContextNodeV2 extends AbstractNode { + child; + paramNodes; + type = "wrapContextV2"; + constructor(child, paramNodes) { + super(); + this.child = child; + this.paramNodes = paramNodes; + } + filterNodes(exposingNodes) { return this.child.filterNodes(exposingNodes); - }; - WrapContextNodeV2.prototype.justEval = function (exposingNodes, methods) { + } + justEval(exposingNodes, methods) { return this.child.evaluate(this.wrap(exposingNodes), methods); - }; - WrapContextNodeV2.prototype.getChildren = function () { + } + getChildren() { return [this.child]; - }; - WrapContextNodeV2.prototype.dependValues = function () { + } + dependValues() { return this.child.dependValues(); - }; - WrapContextNodeV2.prototype.fetchInfo = function (exposingNodes) { + } + fetchInfo(exposingNodes) { return this.child.fetchInfo(this.wrap(exposingNodes)); - }; - WrapContextNodeV2.prototype.wrap = function (exposingNodes) { - return __assign(__assign({}, exposingNodes), this.paramNodes); - }; - __decorate([ - memoized() - ], WrapContextNodeV2.prototype, "filterNodes", null); - __decorate([ - memoized() - ], WrapContextNodeV2.prototype, "wrap", null); - return WrapContextNodeV2; -}(AbstractNode)); + } + wrap(exposingNodes) { + return { ...exposingNodes, ...this.paramNodes }; + } +} +__decorate([ + memoized() +], WrapContextNodeV2.prototype, "filterNodes", null); +__decorate([ + memoized() +], WrapContextNodeV2.prototype, "wrap", null); function transformWrapper(transformFn, defaultValue) { function transformWithMsg(valueAndMsg) { - var _a; - var result; + let result; try { - var value = transformFn(valueAndMsg.value); + const value = transformFn(valueAndMsg.value); result = new ValueAndMsg(value, valueAndMsg.msg, valueAndMsg.extra, valueAndMsg.value); } catch (err) { - var value = void 0; + let value; try { - value = defaultValue !== null && defaultValue !== void 0 ? defaultValue : transformFn(""); + value = defaultValue ?? transformFn(""); } catch (err2) { value = undefined; } - var errorMsg = (_a = valueAndMsg.msg) !== null && _a !== void 0 ? _a : getErrorMessage(err); + const errorMsg = valueAndMsg.msg ?? getErrorMessage(err); result = new ValueAndMsg(value, errorMsg, valueAndMsg.extra, valueAndMsg.value); } // log.trace( @@ -3326,34 +3230,33 @@ function transformWrapper(transformFn, defaultValue) { } function styleNamespace(id) { - return "style-for-".concat(id); + return `style-for-${id}`; } function evalStyle(id, css, globalStyle) { - var _a; - var styleId = styleNamespace(id); - var prefixId = globalStyle ? id : ".".concat(id); - var compiledCSS = ""; - css.forEach(function (i) { + const styleId = styleNamespace(id); + const prefixId = globalStyle ? id : `.${id}`; + let compiledCSS = ""; + css.forEach((i) => { if (!i.trim()) { return; } - compiledCSS += serialize(compile("".concat(prefixId, "{").concat(i, "}")), middleware([prefixer, stringify])); + compiledCSS += serialize(compile(`${prefixId}{${i}}`), middleware([prefixer, stringify])); }); - var styleNode = document.querySelector("#".concat(styleId)); + let styleNode = document.querySelector(`#${styleId}`); if (!styleNode) { styleNode = document.createElement("style"); styleNode.setAttribute("type", "text/css"); styleNode.setAttribute("id", styleId); styleNode.setAttribute("data-style-src", "eval"); - (_a = document.querySelector("head")) === null || _a === void 0 ? void 0 : _a.appendChild(styleNode); + document.querySelector("head")?.appendChild(styleNode); } styleNode.textContent = compiledCSS; } function clearStyleEval(id) { - var styleId = id && styleNamespace(id); - var styleNode = document.querySelectorAll("style[data-style-src=eval]"); + const styleId = id && styleNamespace(id); + const styleNode = document.querySelectorAll(`style[data-style-src=eval]`); if (styleNode) { - styleNode.forEach(function (i) { + styleNode.forEach((i) => { if (!styleId || styleId === i.id) { i.remove(); } @@ -3399,11 +3302,11 @@ function customAction(value, editDSL) { type: CompActionTypes.CUSTOM, path: [], value: value, - editDSL: editDSL, + editDSL, }; } function updateActionContextAction(context) { - var value = { + const value = { type: CompActionTypes.UPDATE_ACTION_CONTEXT, path: [], editDSL: false, @@ -3432,14 +3335,19 @@ function isCustomAction(action, type) { * RootComp will change the path correctly when queryName is passed. */ function executeQueryAction(props) { - return __assign({ type: CompActionTypes.EXECUTE_QUERY, path: [], editDSL: false }, props); + return { + type: CompActionTypes.EXECUTE_QUERY, + path: [], + editDSL: false, + ...props, + }; } function triggerModuleEventAction(name) { return { type: CompActionTypes.TRIGGER_MODULE_EVENT, path: [], editDSL: false, - name: name, + name, }; } /** @@ -3449,7 +3357,7 @@ function changeValueAction(value, editDSL) { return { type: CompActionTypes.CHANGE_VALUE, path: [], - editDSL: editDSL, + editDSL, value: value, }; } @@ -3457,7 +3365,7 @@ function isBroadcastAction(action, type) { return action.type === CompActionTypes.BROADCAST && _.get(action.action, "type") === type; } function renameAction(oldName, name) { - var value = { + const value = { type: CompActionTypes.RENAME, path: [], editDSL: true, @@ -3481,12 +3389,12 @@ function routeByNameAction(name, action) { }; } function multiChangeAction(changes) { - var editDSL = Object.values(changes).some(function (action) { return !!action.editDSL; }); - console.assert(Object.values(changes).every(function (action) { return !_.isNil(action.editDSL) && action.editDSL === editDSL; }), "multiChangeAction should wrap actions with the same editDSL value in property. editDSL: ".concat(editDSL, "\nchanges:"), changes); + const editDSL = Object.values(changes).some((action) => !!action.editDSL); + console.assert(Object.values(changes).every((action) => !_.isNil(action.editDSL) && action.editDSL === editDSL), `multiChangeAction should wrap actions with the same editDSL value in property. editDSL: ${editDSL}\nchanges:`, changes); return { type: CompActionTypes.MULTI_CHANGE, path: [], - editDSL: editDSL, + editDSL, changes: changes, }; } @@ -3513,14 +3421,16 @@ function onlyEvalAction() { }; } function wrapChildAction(childName, action) { - return __assign(__assign({}, action), { path: __spreadArray([childName], action.path, true) }); + return { + ...action, + path: [childName, ...action.path], + }; } function isChildAction(action) { - var _a, _b; - return ((_b = (_a = action === null || action === void 0 ? void 0 : action.path) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0; + return (action?.path?.length ?? 0) > 0; } function unwrapChildAction(action) { - return [action.path[0], __assign(__assign({}, action), { path: action.path.slice(1) })]; + return [action.path[0], { ...action, path: action.path.slice(1) }]; } function changeChildAction(childName, value, editDSL) { return wrapChildAction(childName, changeValueAction(value, editDSL)); @@ -3534,16 +3444,16 @@ function updateNodesV2Action(value) { }; } function wrapActionExtraInfo(action, extraInfos) { - return __assign(__assign({}, action), { extraInfo: __assign(__assign({}, action.extraInfo), extraInfos) }); + return { ...action, extraInfo: { ...action.extraInfo, ...extraInfos } }; } function deferAction(action) { - return __assign(__assign({}, action), { priority: "defer" }); + return { ...action, priority: "defer" }; } function changeEditDSLAction(action, editDSL) { - return __assign(__assign({}, action), { editDSL: editDSL }); + return { ...action, editDSL }; } -var CACHE_PREFIX = "__cache__"; +const CACHE_PREFIX = "__cache__"; /** * a decorator for caching function's result ignoring params. * @@ -3553,14 +3463,10 @@ var CACHE_PREFIX = "__cache__"; * */ function memo(target, propertyKey, descriptor) { - var originalMethod = descriptor.value; - var cachePropertyKey = CACHE_PREFIX + propertyKey; - descriptor.value = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var thisObj = this; + const originalMethod = descriptor.value; + const cachePropertyKey = CACHE_PREFIX + propertyKey; + descriptor.value = function (...args) { + const thisObj = this; if (!thisObj[cachePropertyKey]) { // put the result into array, for representing `undefined` thisObj[cachePropertyKey] = [originalMethod.apply(this, args)]; @@ -3577,13 +3483,13 @@ function shallowEqual(obj1, obj2) { return true; } return (Object.keys(obj1).length === Object.keys(obj2).length && - Object.keys(obj1).every(function (key) { return obj2.hasOwnProperty(key) && obj1[key] === obj2[key]; })); + Object.keys(obj1).every((key) => obj2.hasOwnProperty(key) && obj1[key] === obj2[key])); } function containFields(obj, fields) { if (fields === undefined) { return true; } - var notEqualIndex = Object.keys(fields).findIndex(function (key) { + const notEqualIndex = Object.keys(fields).findIndex((key) => { return obj[key] !== fields[key]; }); return notEqualIndex === -1; @@ -3593,11 +3499,11 @@ function containFields(obj, fields) { * pros: this function can support private fields. */ function setFieldsNoTypeCheck(obj, fields, params) { - var res = Object.assign(Object.create(Object.getPrototypeOf(obj)), obj); - Object.keys(res).forEach(function (key) { + const res = Object.assign(Object.create(Object.getPrototypeOf(obj)), obj); + Object.keys(res).forEach((key) => { if (key.startsWith(CACHE_PREFIX)) { - var propertyKey = key.slice(CACHE_PREFIX.length); - if (!(params === null || params === void 0 ? void 0 : params.keepCacheKeys) || !(params === null || params === void 0 ? void 0 : params.keepCacheKeys.includes(propertyKey))) { + const propertyKey = key.slice(CACHE_PREFIX.length); + if (!params?.keepCacheKeys || !params?.keepCacheKeys.includes(propertyKey)) { delete res[key]; } } @@ -3605,35 +3511,34 @@ function setFieldsNoTypeCheck(obj, fields, params) { return Object.assign(res, fields); } -var AbstractComp = /** @class */ (function () { - function AbstractComp(params) { - var _a; - this.dispatch = (_a = params.dispatch) !== null && _a !== void 0 ? _a : (function (_action) { }); +class AbstractComp { + dispatch; + constructor(params) { + this.dispatch = params.dispatch ?? ((_action) => { }); } - AbstractComp.prototype.changeDispatch = function (dispatch) { + changeDispatch(dispatch) { return setFieldsNoTypeCheck(this, { dispatch: dispatch }, { keepCacheKeys: ["node"] }); - }; + } /** * trigger changeValueAction, type safe */ - AbstractComp.prototype.dispatchChangeValueAction = function (value) { + dispatchChangeValueAction(value) { this.dispatch(this.changeValueAction(value)); - }; - AbstractComp.prototype.changeValueAction = function (value) { + } + changeValueAction(value) { return changeValueAction(value, true); - }; + } /** * don't override the function, override nodeWithout function instead * FIXME: node reference mustn't be changed if this object is changed */ - AbstractComp.prototype.node = function () { + node() { return this.nodeWithoutCache(); - }; - __decorate([ - memo - ], AbstractComp.prototype, "node", null); - return AbstractComp; -}()); + } +} +__decorate([ + memo +], AbstractComp.prototype, "node", null); /** * wrap a dispatch as a child dispatch @@ -3643,7 +3548,7 @@ var AbstractComp = /** @class */ (function () { * @returns a wrapped dispatch with the child dispatch */ function wrapDispatch(dispatch, childName) { - return function (action) { + return (action) => { if (dispatch) { dispatch(wrapChildAction(childName, action)); } @@ -3655,69 +3560,68 @@ function wrapDispatch(dispatch, childName) { * @remarks * functions can be cached if needed. **/ -var MultiBaseComp = /** @class */ (function (_super) { - __extends(MultiBaseComp, _super); - function MultiBaseComp(params) { - var _this = _super.call(this, params) || this; - _this.IGNORABLE_DEFAULT_VALUE = {}; - _this.children = _this.parseChildrenFromValue(params); - return _this; - } - MultiBaseComp.prototype.reduce = function (action) { - var comp = this.reduceOrUndefined(action); +class MultiBaseComp extends AbstractComp { + children; + constructor(params) { + super(params); + this.children = this.parseChildrenFromValue(params); + } + reduce(action) { + const comp = this.reduceOrUndefined(action); if (!comp) { console.warn("not supported action, should not happen, action:", action, "\ncurrent comp:", this); return this; } return comp; - }; + } // if the base class can't handle this action, just return undefined - MultiBaseComp.prototype.reduceOrUndefined = function (action) { - var _a, _b; - var _c; + reduceOrUndefined(action) { // log.debug("reduceOrUndefined. action: ", action, " this: ", this); // must handle DELETE in the parent level if (action.type === CompActionTypes.DELETE_COMP && action.path.length === 1) { return this.setChildren(_.omit(this.children, action.path[0])); } if (action.type === CompActionTypes.REPLACE_COMP && action.path.length === 1) { - var NextComp = action.compFactory; + const NextComp = action.compFactory; if (!NextComp) { return this; } - var compName = action.path[0]; - var currentComp = this.children[compName]; - var value = currentComp.toJsonValue(); - var nextComp = new NextComp({ - value: value, + const compName = action.path[0]; + const currentComp = this.children[compName]; + const value = currentComp.toJsonValue(); + const nextComp = new NextComp({ + value, dispatch: wrapDispatch(this.dispatch, compName), }); - return this.setChildren(__assign(__assign({}, this.children), (_a = {}, _a[compName] = nextComp, _a))); + return this.setChildren({ + ...this.children, + [compName]: nextComp, + }); } if (isChildAction(action)) { - var _d = unwrapChildAction(action), childName = _d[0], childAction = _d[1]; - var child = this.children[childName]; + const [childName, childAction] = unwrapChildAction(action); + const child = this.children[childName]; if (!child) { log.error("found bad action path ", childName); return this; } - var newChild = child.reduce(childAction); + const newChild = child.reduce(childAction); return this.setChild(childName, newChild); } // key, value switch (action.type) { case CompActionTypes.MULTI_CHANGE: { - var changes_1 = action.changes; + const { changes } = action; // handle DELETE in the parent level - var mcChildren = _.omitBy(this.children, function (comp, childName) { - var innerAction = changes_1[childName]; + let mcChildren = _.omitBy(this.children, (comp, childName) => { + const innerAction = changes[childName]; return (innerAction && innerAction.type === CompActionTypes.DELETE_COMP && innerAction.path.length === 0); }); // CHANGE - mcChildren = _.mapValues(mcChildren, function (comp, childName) { - var innerAction = changes_1[childName]; + mcChildren = _.mapValues(mcChildren, (comp, childName) => { + const innerAction = changes[childName]; if (innerAction) { return comp.reduce(innerAction); } @@ -3726,27 +3630,31 @@ var MultiBaseComp = /** @class */ (function (_super) { return this.setChildren(mcChildren); } case CompActionTypes.UPDATE_NODES_V2: { - var value_1 = action.value; - if (value_1 === undefined) { + const { value } = action; + if (value === undefined) { return this; } - var cacheKey = CACHE_PREFIX + "REDUCE_UPDATE_NODE"; + const cacheKey = CACHE_PREFIX + "REDUCE_UPDATE_NODE"; // if constructed by the value, just return - if (this[cacheKey] === value_1) { + if (this[cacheKey] === value) { // console.info("inside: UPDATE_NODE_V2 cache hit. action: ", action, "\nvalue: ", value, "\nthis: ", this); return this; } - var children = _.mapValues(this.children, function (comp, childName) { - if (value_1.hasOwnProperty(childName)) { - return comp.reduce(updateNodesV2Action(value_1[childName])); + const children = _.mapValues(this.children, (comp, childName) => { + if (value.hasOwnProperty(childName)) { + return comp.reduce(updateNodesV2Action(value[childName])); } return comp; }); - var extraFields = (_c = this.extraNode()) === null || _c === void 0 ? void 0 : _c.updateNodeFields(value_1); + const extraFields = this.extraNode()?.updateNodeFields(value); if (shallowEqual(children, this.children) && containFields(this, extraFields)) { return this; } - return setFieldsNoTypeCheck(this, __assign((_b = { children: children }, _b[cacheKey] = value_1, _b), extraFields), { keepCacheKeys: ["node"] }); + return setFieldsNoTypeCheck(this, { + children: children, + [cacheKey]: value, + ...extraFields, + }, { keepCacheKeys: ["node"] }); } case CompActionTypes.CHANGE_VALUE: { return this.setChildren(this.parseChildrenFromValue({ @@ -3755,7 +3663,7 @@ var MultiBaseComp = /** @class */ (function (_super) { })); } case CompActionTypes.BROADCAST: { - return this.setChildren(_.mapValues(this.children, function (comp) { + return this.setChildren(_.mapValues(this.children, (comp) => { return comp.reduce(action); })); } @@ -3763,88 +3671,96 @@ var MultiBaseComp = /** @class */ (function (_super) { return this; } } - }; - MultiBaseComp.prototype.setChild = function (childName, newChild) { - var _a; + } + setChild(childName, newChild) { if (this.children[childName] === newChild) { return this; } - return this.setChildren(__assign(__assign({}, this.children), (_a = {}, _a[childName] = newChild, _a))); - }; - MultiBaseComp.prototype.setChildren = function (children, params) { + return this.setChildren({ + ...this.children, + [childName]: newChild, + }); + } + setChildren(children, params) { if (shallowEqual(children, this.children)) { return this; } return setFieldsNoTypeCheck(this, { children: children }, params); - }; + } /** * extended interface. * * @return node for additional node, updateNodeFields for handling UPDATE_NODE event * FIXME: make type safe */ - MultiBaseComp.prototype.extraNode = function () { + extraNode() { return undefined; - }; - MultiBaseComp.prototype.childrenNode = function () { - var _this = this; - var result = {}; - Object.keys(this.children).forEach(function (key) { - var node = _this.children[key].node(); + } + childrenNode() { + const result = {}; + Object.keys(this.children).forEach((key) => { + const node = this.children[key].node(); if (node !== undefined) { result[key] = node; } }); return result; - }; - MultiBaseComp.prototype.nodeWithoutCache = function () { - var _a; - return fromRecord(__assign(__assign({}, this.childrenNode()), (_a = this.extraNode()) === null || _a === void 0 ? void 0 : _a.node)); - }; - MultiBaseComp.prototype.changeDispatch = function (dispatch) { - var newChildren = _.mapValues(this.children, function (comp, childName) { + } + nodeWithoutCache() { + return fromRecord({ + ...this.childrenNode(), + ...this.extraNode()?.node, + }); + } + changeDispatch(dispatch) { + const newChildren = _.mapValues(this.children, (comp, childName) => { return comp.changeDispatch(wrapDispatch(dispatch, childName)); }); - return _super.prototype.changeDispatch.call(this, dispatch).setChildren(newChildren, { keepCacheKeys: ["node"] }); - }; - MultiBaseComp.prototype.ignoreChildDefaultValue = function () { + return super.changeDispatch(dispatch).setChildren(newChildren, { keepCacheKeys: ["node"] }); + } + ignoreChildDefaultValue() { return false; - }; - MultiBaseComp.prototype.toJsonValue = function () { - var _this = this; - var result = {}; - var ignore = this.ignoreChildDefaultValue(); - Object.keys(this.children).forEach(function (key) { - var comp = _this.children[key]; + } + IGNORABLE_DEFAULT_VALUE = {}; + toJsonValue() { + const result = {}; + const ignore = this.ignoreChildDefaultValue(); + Object.keys(this.children).forEach((key) => { + const comp = this.children[key]; // FIXME: this implementation is a little tricky, better choose a encapsulated implementation if (comp.hasOwnProperty("NO_PERSISTENCE")) { return; } - var value = comp.toJsonValue(); + const value = comp.toJsonValue(); if (ignore && _.isEqual(value, comp["IGNORABLE_DEFAULT_VALUE"])) { return; } result[key] = value; }); return result; - }; + } // FIXME: autoHeight should be encapsulated in UIComp/UICompBuilder - MultiBaseComp.prototype.autoHeight = function () { + autoHeight() { return true; - }; - MultiBaseComp.prototype.changeChildAction = function (childName, value) { + } + changeChildAction(childName, value) { return wrapChildAction(childName, this.children[childName].changeValueAction(value)); - }; - return MultiBaseComp; -}(AbstractComp)); + } +} function mergeExtra(e1, e2) { if (e1 === undefined) { return e2; } return { - node: __assign(__assign({}, e1.node), e2.node), - updateNodeFields: function (value) { - return __assign(__assign({}, e1.updateNodeFields(value)), e2.updateNodeFields(value)); + node: { + ...e1.node, + ...e2.node, + }, + updateNodeFields: (value) => { + return { + ...e1.updateNodeFields(value), + ...e2.updateNodeFields(value), + }; }, }; } @@ -3852,22 +3768,19 @@ function mergeExtra(e1, e2) { /** * maintainer a JSONValue, nothing else */ -var SimpleAbstractComp = /** @class */ (function (_super) { - __extends(SimpleAbstractComp, _super); - function SimpleAbstractComp(params) { - var _this = this; - var _a; - _this = _super.call(this, params) || this; - _this.value = (_a = _this.oldValueToNew(params.value)) !== null && _a !== void 0 ? _a : _this.getDefaultValue(); - return _this; +class SimpleAbstractComp extends AbstractComp { + value; + constructor(params) { + super(params); + this.value = this.oldValueToNew(params.value) ?? this.getDefaultValue(); } /** * may override this to implement compatibility */ - SimpleAbstractComp.prototype.oldValueToNew = function (value) { + oldValueToNew(value) { return value; - }; - SimpleAbstractComp.prototype.reduce = function (action) { + } + reduce(action) { if (action.type === CompActionTypes.CHANGE_VALUE) { if (this.value === action.value) { return this; @@ -3875,29 +3788,23 @@ var SimpleAbstractComp = /** @class */ (function (_super) { return setFieldsNoTypeCheck(this, { value: action.value }); } return this; - }; - SimpleAbstractComp.prototype.nodeWithoutCache = function () { + } + nodeWithoutCache() { return fromValue(this.value); - }; - SimpleAbstractComp.prototype.exposingNode = function () { + } + exposingNode() { return this.node(); - }; + } // may be used in defaultValue - SimpleAbstractComp.prototype.toJsonValue = function () { + toJsonValue() { return this.value; - }; - return SimpleAbstractComp; -}(AbstractComp)); -var SimpleComp = /** @class */ (function (_super) { - __extends(SimpleComp, _super); - function SimpleComp() { - return _super !== null && _super.apply(this, arguments) || this; - } - SimpleComp.prototype.getView = function () { + } +} +class SimpleComp extends SimpleAbstractComp { + getView() { return this.value; - }; - return SimpleComp; -}(SimpleAbstractComp)); + } +} var jsxRuntimeExports = {}; var jsxRuntime = { @@ -3939,14 +3846,14 @@ var l=Symbol.for("react.element"),n=Symbol.for("react.portal"),p=Symbol.for("rea function R(a,b,e,d,c){var k=typeof a;if("undefined"===k||"boolean"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case "string":case "number":h=!0;break;case "object":switch(a.$$typeof){case l:case n:h=!0;}}if(h)return h=a,c=c(h),a=""===d?"."+Q(h,0):d,I(c)?(e="",null!=a&&(e=a.replace(P,"$&/")+"/"),R(c,b,e,"",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?"":(""+c.key).replace(P,"$&/")+"/")+a)),b.push(c)),1;h=0;d=""===d?".":d+":";if(I(a))for(var g=0;g<a.length;g++){k= a[g];var f=d+Q(k,g);h+=R(k,b,e,f,c);}else if(f=A(a),"function"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if("object"===k)throw b=String(a),Error("Objects are not valid as a React child (found: "+("[object Object]"===b?"object with keys {"+Object.keys(a).join(", ")+"}":b)+"). If you meant to render a collection of children, use an array instead.");return h} function S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,"","",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b;},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b;});-1===a._status&&(a._status=0,a._result=b);}if(1===a._status)return a._result.default;throw a._result;} - var U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error("act(...) is not supported in production builds of React.");} - react_production_min.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments);},e);},count:function(a){var b=0;S(a,function(){b++;});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error("React.Children.only expected to receive a single React element child.");return a}};react_production_min.Component=E;react_production_min.Fragment=p;react_production_min.Profiler=r;react_production_min.PureComponent=G;react_production_min.StrictMode=q;react_production_min.Suspense=w; - react_production_min.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;react_production_min.act=X; + var U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};react_production_min.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments);},e);},count:function(a){var b=0;S(a,function(){b++;});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error("React.Children.only expected to receive a single React element child.");return a}};react_production_min.Component=E;react_production_min.Fragment=p; + react_production_min.Profiler=r;react_production_min.PureComponent=G;react_production_min.StrictMode=q;react_production_min.Suspense=w;react_production_min.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W; react_production_min.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+a+".");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=""+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f]);}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f); for(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g;}return {$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};react_production_min.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};react_production_min.createElement=M;react_production_min.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};react_production_min.createRef=function(){return {current:null}}; - react_production_min.forwardRef=function(a){return {$$typeof:v,render:a}};react_production_min.isValidElement=O;react_production_min.lazy=function(a){return {$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};react_production_min.memo=function(a,b){return {$$typeof:x,type:a,compare:void 0===b?null:b}};react_production_min.startTransition=function(a){var b=V.transition;V.transition={};try{a();}finally{V.transition=b;}};react_production_min.unstable_act=X;react_production_min.useCallback=function(a,b){return U.current.useCallback(a,b)};react_production_min.useContext=function(a){return U.current.useContext(a)}; - react_production_min.useDebugValue=function(){};react_production_min.useDeferredValue=function(a){return U.current.useDeferredValue(a)};react_production_min.useEffect=function(a,b){return U.current.useEffect(a,b)};react_production_min.useId=function(){return U.current.useId()};react_production_min.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};react_production_min.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};react_production_min.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)}; - react_production_min.useMemo=function(a,b){return U.current.useMemo(a,b)};react_production_min.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};react_production_min.useRef=function(a){return U.current.useRef(a)};react_production_min.useState=function(a){return U.current.useState(a)};react_production_min.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};react_production_min.useTransition=function(){return U.current.useTransition()};react_production_min.version="18.3.1"; + react_production_min.forwardRef=function(a){return {$$typeof:v,render:a}};react_production_min.isValidElement=O;react_production_min.lazy=function(a){return {$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};react_production_min.memo=function(a,b){return {$$typeof:x,type:a,compare:void 0===b?null:b}};react_production_min.startTransition=function(a){var b=V.transition;V.transition={};try{a();}finally{V.transition=b;}};react_production_min.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.");}; + react_production_min.useCallback=function(a,b){return U.current.useCallback(a,b)};react_production_min.useContext=function(a){return U.current.useContext(a)};react_production_min.useDebugValue=function(){};react_production_min.useDeferredValue=function(a){return U.current.useDeferredValue(a)};react_production_min.useEffect=function(a,b){return U.current.useEffect(a,b)};react_production_min.useId=function(){return U.current.useId()};react_production_min.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)}; + react_production_min.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};react_production_min.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};react_production_min.useMemo=function(a,b){return U.current.useMemo(a,b)};react_production_min.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};react_production_min.useRef=function(a){return U.current.useRef(a)};react_production_min.useState=function(a){return U.current.useState(a)};react_production_min.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)}; + react_production_min.useTransition=function(){return U.current.useTransition()};react_production_min.version="18.3.0"; return react_production_min; } @@ -3984,7 +3891,7 @@ function requireReact_development () { ) { __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); } - var ReactVersion = '18.3.1'; + var ReactVersion = '18.3.0'; // ATTENTION // When adding new symbols to this file, @@ -6660,7 +6567,6 @@ function requireReact_development () { exports.StrictMode = REACT_STRICT_MODE_TYPE; exports.Suspense = REACT_SUSPENSE_TYPE; exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals; - exports.act = act; exports.cloneElement = cloneElement$1; exports.createContext = createContext; exports.createElement = createElement$1; @@ -8082,13 +7988,13 @@ function requireReactJsxRuntime_development () { } } (jsxRuntime)); -var en = {}; +const en = {}; -var zh = {}; +const zh = {}; -var de = {}; +const de = {}; -var pt = {}; +const pt = {}; // file examples: en, enGB, zh, zhHK @@ -8100,6 +8006,87 @@ var localeData = /*#__PURE__*/Object.freeze({ pt: pt }); +// +// Main +// +function memoize(fn, options) { + var cache = options && options.cache ? options.cache : cacheDefault; + var serializer = options && options.serializer ? options.serializer : serializerDefault; + var strategy = options && options.strategy ? options.strategy : strategyDefault; + return strategy(fn, { + cache: cache, + serializer: serializer, + }); +} +// +// Strategy +// +function isPrimitive(value) { + return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === "string" 'unsafe' primitive for our needs +} +function monadic(fn, cache, serializer, arg) { + var cacheKey = isPrimitive(arg) ? arg : serializer(arg); + var computedValue = cache.get(cacheKey); + if (typeof computedValue === 'undefined') { + computedValue = fn.call(this, arg); + cache.set(cacheKey, computedValue); + } + return computedValue; +} +function variadic(fn, cache, serializer) { + var args = Array.prototype.slice.call(arguments, 3); + var cacheKey = serializer(args); + var computedValue = cache.get(cacheKey); + if (typeof computedValue === 'undefined') { + computedValue = fn.apply(this, args); + cache.set(cacheKey, computedValue); + } + return computedValue; +} +function assemble(fn, context, strategy, cache, serialize) { + return strategy.bind(context, fn, cache, serialize); +} +function strategyDefault(fn, options) { + var strategy = fn.length === 1 ? monadic : variadic; + return assemble(fn, this, strategy, options.cache.create(), options.serializer); +} +function strategyVariadic(fn, options) { + return assemble(fn, this, variadic, options.cache.create(), options.serializer); +} +function strategyMonadic(fn, options) { + return assemble(fn, this, monadic, options.cache.create(), options.serializer); +} +// +// Serializer +// +var serializerDefault = function () { + return JSON.stringify(arguments); +}; +// +// Cache +// +var ObjectWithoutPrototypeCache = /** @class */ (function () { + function ObjectWithoutPrototypeCache() { + this.cache = Object.create(null); + } + ObjectWithoutPrototypeCache.prototype.get = function (key) { + return this.cache[key]; + }; + ObjectWithoutPrototypeCache.prototype.set = function (key, value) { + this.cache[key] = value; + }; + return ObjectWithoutPrototypeCache; +}()); +var cacheDefault = { + create: function create() { + return new ObjectWithoutPrototypeCache(); + }, +}; +var strategies = { + variadic: strategyVariadic, + monadic: strategyMonadic, +}; + var ErrorKind; (function (ErrorKind) { /** Argument is unclosed (e.g. `{0`) */ @@ -8696,6 +8683,12 @@ var timeData = { "H", "h" ], + "419": [ + "h", + "H", + "hB", + "hb" + ], "AC": [ "H", "h", @@ -8744,8 +8737,8 @@ var timeData = { "hB" ], "AR": [ - "H", "h", + "H", "hB", "hb" ], @@ -8835,9 +8828,9 @@ var timeData = { "H" ], "BO": [ + "h", "H", "hB", - "h", "hb" ], "BQ": [ @@ -8914,8 +8907,8 @@ var timeData = { "hB" ], "CL": [ - "H", "h", + "H", "hB", "hb" ], @@ -8940,14 +8933,14 @@ var timeData = { "H" ], "CR": [ - "H", "h", + "H", "hB", "hb" ], "CU": [ - "H", "h", + "H", "hB", "hb" ], @@ -9016,9 +9009,9 @@ var timeData = { "hb" ], "EC": [ + "h", "H", "hB", - "h", "hb" ], "EE": [ @@ -9154,8 +9147,8 @@ var timeData = { "hB" ], "GT": [ - "H", "h", + "H", "hB", "hb" ], @@ -9182,8 +9175,8 @@ var timeData = { "H" ], "HN": [ - "H", "h", + "H", "hB", "hb" ], @@ -9497,8 +9490,8 @@ var timeData = { "hB" ], "MX": [ - "H", "h", + "H", "hB", "hb" ], @@ -9538,8 +9531,8 @@ var timeData = { "hB" ], "NI": [ - "H", "h", + "H", "hB", "hb" ], @@ -9587,9 +9580,9 @@ var timeData = { "hb" ], "PE": [ + "h", "H", "hB", - "h", "hb" ], "PF": [ @@ -9647,8 +9640,8 @@ var timeData = { "H" ], "PY": [ - "H", "h", + "H", "hB", "hb" ], @@ -9761,8 +9754,8 @@ var timeData = { "hB" ], "SV": [ - "H", "h", + "H", "hB", "hb" ], @@ -9884,8 +9877,8 @@ var timeData = { "hB" ], "UY": [ - "H", "h", + "H", "hB", "hb" ], @@ -9993,37 +9986,37 @@ var timeData = { "H", "hB" ], - "es-BO": [ - "H", + "en-HK": [ "h", - "hB", - "hb" + "hb", + "H", + "hB" ], - "es-BR": [ + "en-IL": [ "H", "h", - "hB", - "hb" + "hb", + "hB" ], - "es-EC": [ - "H", + "en-MY": [ "h", - "hB", - "hb" + "hb", + "H", + "hB" ], - "es-ES": [ + "es-BR": [ "H", "h", "hB", "hb" ], - "es-GQ": [ + "es-ES": [ "H", "h", "hB", "hb" ], - "es-PE": [ + "es-GQ": [ "H", "h", "hB", @@ -11492,85 +11485,6 @@ function parse(message, opts) { return result.val; } -// -// Main -// -function memoize(fn, options) { - var cache = options && options.cache ? options.cache : cacheDefault; - var serializer = options && options.serializer ? options.serializer : serializerDefault; - var strategy = options && options.strategy ? options.strategy : strategyDefault; - return strategy(fn, { - cache: cache, - serializer: serializer, - }); -} -// -// Strategy -// -function isPrimitive(value) { - return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === "string" 'unsafe' primitive for our needs -} -function monadic(fn, cache, serializer, arg) { - var cacheKey = isPrimitive(arg) ? arg : serializer(arg); - var computedValue = cache.get(cacheKey); - if (typeof computedValue === 'undefined') { - computedValue = fn.call(this, arg); - cache.set(cacheKey, computedValue); - } - return computedValue; -} -function variadic(fn, cache, serializer) { - var args = Array.prototype.slice.call(arguments, 3); - var cacheKey = serializer(args); - var computedValue = cache.get(cacheKey); - if (typeof computedValue === 'undefined') { - computedValue = fn.apply(this, args); - cache.set(cacheKey, computedValue); - } - return computedValue; -} -function assemble(fn, context, strategy, cache, serialize) { - return strategy.bind(context, fn, cache, serialize); -} -function strategyDefault(fn, options) { - var strategy = fn.length === 1 ? monadic : variadic; - return assemble(fn, this, strategy, options.cache.create(), options.serializer); -} -function strategyVariadic(fn, options) { - return assemble(fn, this, variadic, options.cache.create(), options.serializer); -} -function strategyMonadic(fn, options) { - return assemble(fn, this, monadic, options.cache.create(), options.serializer); -} -// -// Serializer -// -var serializerDefault = function () { - return JSON.stringify(arguments); -}; -// -// Cache -// -function ObjectWithoutPrototypeCache() { - this.cache = Object.create(null); -} -ObjectWithoutPrototypeCache.prototype.get = function (key) { - return this.cache[key]; -}; -ObjectWithoutPrototypeCache.prototype.set = function (key, value) { - this.cache[key] = value; -}; -var cacheDefault = { - create: function create() { - // @ts-ignore - return new ObjectWithoutPrototypeCache(); - }, -}; -var strategies = { - variadic: strategyVariadic, - monadic: strategyMonadic, -}; - var ErrorCode; (function (ErrorCode) { // When we have a placeholder but no value to format @@ -11873,8 +11787,8 @@ function createDefaultFormatters(cache) { } var IntlMessageFormat$1 = /** @class */ (function () { function IntlMessageFormat(message, locales, overrideFormats, opts) { - var _this = this; if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; } + var _this = this; this.formatterCache = { number: {}, dateTime: {}, @@ -12034,48 +11948,50 @@ var IntlMessageFormat = IntlMessageFormat$1; // this is a copy of the translator from ../../lib/index.js // TODO: check if this file is used at all -var defaultLocale = "en"; -var locales = [defaultLocale]; +const defaultLocale = "en"; +let locales = [defaultLocale]; // Falk - Adapted the central translator to check if a localStorage key is existing. -var uiLanguage = localStorage.getItem('lowcoder_uiLanguage'); +const uiLanguage = localStorage.getItem('lowcoder_uiLanguage'); if (globalThis.navigator) { if (uiLanguage) { locales = [uiLanguage]; } else if (navigator.languages && navigator.languages.length > 0) { - locales = __spreadArray([], navigator.languages, true); + locales = [...navigator.languages]; } else { locales = [navigator.language || navigator.userLanguage || defaultLocale]; } } function parseLocale(s) { - var locale = s.trim(); + const locale = s.trim(); if (!locale) { return; } try { if (Intl.Locale) { - var _a = new Intl.Locale(locale), language = _a.language, region = _a.region; - return { locale: locale, language: language, region: region }; + const { language, region } = new Intl.Locale(locale); + return { locale, language, region }; } - var parts = locale.split("-"); - var r = parts.slice(1, 3).find(function (t) { return t.length === 2; }); - return { locale: locale, language: parts[0].toLowerCase(), region: r === null || r === void 0 ? void 0 : r.toUpperCase() }; + const parts = locale.split("-"); + const r = parts.slice(1, 3).find((t) => t.length === 2); + return { locale, language: parts[0].toLowerCase(), region: r?.toUpperCase() }; } catch (e) { - log.error("Parse locale:".concat(locale, " failed."), e); + log.error(`Parse locale:${locale} failed.`, e); } } function parseLocales(list) { - return list.map(parseLocale).filter(function (t) { return t; }); + return list.map(parseLocale).filter((t) => t); } -var fallbackLocaleInfos = parseLocales(locales.includes(defaultLocale) ? locales : __spreadArray(__spreadArray([], locales, true), [defaultLocale], false)); -var i18n = __assign({ locales: locales }, fallbackLocaleInfos[0]); +const fallbackLocaleInfos = parseLocales(locales.includes(defaultLocale) ? locales : [...locales, defaultLocale]); +const i18n = { + locales, + ...fallbackLocaleInfos[0], +}; function getValueByLocale(defaultValue, func) { - for (var _i = 0, fallbackLocaleInfos_1 = fallbackLocaleInfos; _i < fallbackLocaleInfos_1.length; _i++) { - var info = fallbackLocaleInfos_1[_i]; - var t = func(info); + for (const info of fallbackLocaleInfos) { + const t = func(info); if (t !== undefined) { return t; } @@ -12083,90 +11999,86 @@ function getValueByLocale(defaultValue, func) { return defaultValue; } function getDataByLocale(fileData, suffix, filterLocales, targetLocales) { - var localeInfos = __spreadArray([], fallbackLocaleInfos, true); - var targetLocaleInfo = parseLocales(targetLocales || []); + let localeInfos = [...fallbackLocaleInfos]; + const targetLocaleInfo = parseLocales(targetLocales || []); if (targetLocaleInfo.length > 0) { - localeInfos = __spreadArray(__spreadArray([], targetLocaleInfo, true), localeInfos, true); - } - var filterNames = parseLocales((filterLocales !== null && filterLocales !== void 0 ? filterLocales : "").split(",")) - .map(function (l) { var _a; return l.language + ((_a = l.region) !== null && _a !== void 0 ? _a : ""); }) - .filter(function (s) { return fileData[s + suffix] !== undefined; }); - var names = __spreadArray(__spreadArray([], localeInfos - .flatMap(function (_a) { - var language = _a.language, region = _a.region; - return [ + localeInfos = [...targetLocaleInfo, ...localeInfos]; + } + const filterNames = parseLocales((filterLocales ?? "").split(",")) + .map((l) => l.language + (l.region ?? "")) + .filter((s) => fileData[s + suffix] !== undefined); + const names = [ + ...localeInfos + .flatMap(({ language, region }) => [ region ? language + region : undefined, language, - filterNames.find(function (n) { return n.startsWith(language); }), - ]; - }) - .filter(function (s) { return s && (!filterLocales || filterNames.includes(s)); }), true), filterNames, true).map(function (s) { return s + suffix; }); - for (var _i = 0, names_1 = names; _i < names_1.length; _i++) { - var name_1 = names_1[_i]; - var data = fileData[name_1]; + filterNames.find((n) => n.startsWith(language)), + ]) + .filter((s) => s && (!filterLocales || filterNames.includes(s))), + ...filterNames, + ].map((s) => s + suffix); + for (const name of names) { + const data = fileData[name]; if (data !== undefined) { - return { data: data, language: name_1.slice(0, 2) }; + return { data: data, language: name.slice(0, 2) }; } } - console.error("Not found ".concat(names)); + console.error(`Not found ${names}`); // return fallback data for en language return { data: fileData['en'], language: 'en' }; // throw new Error(`Not found ${names}`); } -var globalMessageKeyPrefix = "@"; -var globalMessages = Object.fromEntries(Object.entries(getDataByLocale(localeData, "").data).map(function (_a) { - var k = _a[0], v = _a[1]; - return [ - globalMessageKeyPrefix + k, - v, - ]; -})); -var Translator = /** @class */ (function () { - function Translator(fileData, filterLocales, locales) { - var _a = getDataByLocale(fileData, "", filterLocales, locales), data = _a.data, language = _a.language; +const globalMessageKeyPrefix = "@"; +const globalMessages = Object.fromEntries(Object.entries(getDataByLocale(localeData, "").data).map(([k, v]) => [ + globalMessageKeyPrefix + k, + v, +])); +class Translator { + messages; + // language of Translator, can be different from i18n.language + language; + constructor(fileData, filterLocales, locales) { + const { data, language } = getDataByLocale(fileData, "", filterLocales, locales); this.messages = Object.assign({}, data, globalMessages); this.language = language; this.trans = this.trans.bind(this); this.transToNode = this.transToNode.bind(this); } - Translator.prototype.trans = function (key, variables) { + trans(key, variables) { return this.transToNode(key, variables).toString(); - }; - Translator.prototype.transToNode = function (key, variables) { - var message = this.getMessage(key); - var node = new IntlMessageFormat(message, i18n.locale).format(variables); + } + transToNode(key, variables) { + const message = this.getMessage(key); + const node = new IntlMessageFormat(message, i18n.locale).format(variables); if (Array.isArray(node)) { - return node.map(function (n, i) { return jsxRuntimeExports.jsx(reactExports.Fragment, { children: n }, i); }); + return node.map((n, i) => jsxRuntimeExports.jsx(reactExports.Fragment, { children: n }, i)); } return node; - }; - Translator.prototype.getMessage = function (key) { - var message = this.getNestedMessage(this.messages, key); + } + getMessage(key) { + let message = this.getNestedMessage(this.messages, key); // Fallback to English if the message is not found if (message === undefined) { message = this.getNestedMessage(en, key); // Assuming localeData.en contains English translations } // If still not found, return a default message or the key itself if (message === undefined) { - console.warn("Translation missing for key: ".concat(key)); - message = "oups! ".concat(key); + console.warn(`Translation missing for key: ${key}`); + message = `oups! ${key}`; } return message; - }; - Translator.prototype.getNestedMessage = function (obj, key) { - for (var _i = 0, _a = key.split("."); _i < _a.length; _i++) { - var k = _a[_i]; + } + getNestedMessage(obj, key) { + for (const k of key.split(".")) { if (obj !== undefined) { obj = obj[k]; } } return obj; - }; - return Translator; -}()); + } +} function getI18nObjects(fileData, filterLocales) { - var _a; - return (_a = getDataByLocale(fileData, "Obj", filterLocales)) === null || _a === void 0 ? void 0 : _a.data; + return getDataByLocale(fileData, "Obj", filterLocales)?.data; } export { AbstractComp, AbstractNode, CachedNode, CodeNode, CompActionTypes, FetchCheckNode, FunctionNode, MultiBaseComp, RecordNode, RelaxedJsonParser, SimpleAbstractComp, SimpleComp, SimpleNode, Translator, ValueAndMsg, WrapContextNodeV2, WrapNode, changeChildAction, changeDependName, changeEditDSLAction, changeValueAction, clearMockWindow, clearStyleEval, customAction, deferAction, deleteCompAction, dependingNodeMapEquals, evalFunc, evalFunctionResult, evalNodeOrMinor, evalPerfUtil, evalScript, evalStyle, executeQueryAction, fromRecord, fromUnevaledValue, fromValue, fromValueWithCache, getDynamicStringSegments, getI18nObjects, getValueByLocale, i18n, isBroadcastAction, isChildAction, isCustomAction, isDynamicSegment, isFetching, isMyCustomAction, mergeExtra, multiChangeAction, nodeIsRecord, onlyEvalAction, relaxedJSONToJSON, renameAction, replaceCompAction, routeByNameAction, transformWrapper, triggerModuleEventAction, unwrapChildAction, updateActionContextAction, updateNodesV2Action, withFunction, wrapActionExtraInfo, wrapChildAction, wrapContext, wrapDispatch }; diff --git a/client/packages/lowcoder-design/src/components/CustomModal.tsx b/client/packages/lowcoder-design/src/components/CustomModal.tsx index 990931e909..e7101cefb0 100644 --- a/client/packages/lowcoder-design/src/components/CustomModal.tsx +++ b/client/packages/lowcoder-design/src/components/CustomModal.tsx @@ -1,7 +1,7 @@ import { ButtonProps } from "antd/es/button"; import { default as AntdModal, ModalFuncProps, ModalProps as AntdModalProps } from "antd/es/modal"; import { ReactComponent as PackUpIcon } from "icons/v1/icon-Pack-up.svg"; -import React, { ReactNode, useState } from "react"; +import React, { ReactNode, useRef, useState } from "react"; import styled from "styled-components"; import { TacoButtonType, TacoButton } from "components/button"; import Draggable from "react-draggable"; @@ -221,9 +221,12 @@ const DEFAULT_PROPS = { } as const; function CustomModalRender(props: Omit<CustomModalProps & ModalFuncProps, "width"> & { width?: string | number }) { + const draggableRef = useRef<HTMLDivElement>(null); + return ( - <Draggable handle=".handle" disabled={!props.draggable}> - <ModalWrapper + <Draggable handle=".handle" disabled={!props.draggable} nodeRef={draggableRef}> + <ModalWrapper + ref={draggableRef} $width={props.width} $customStyles={props?.customStyles} > diff --git a/client/packages/lowcoder-design/src/components/Drawer.tsx b/client/packages/lowcoder-design/src/components/Drawer.tsx index 89b152a64d..7ccbce09f9 100644 --- a/client/packages/lowcoder-design/src/components/Drawer.tsx +++ b/client/packages/lowcoder-design/src/components/Drawer.tsx @@ -1,13 +1,32 @@ import { default as AntdDrawer, DrawerProps as AntdDrawerProps } from "antd/es/drawer"; import Handle from "./Modal/handler"; -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useState, useCallback, useRef } from "react"; import { Resizable, ResizeHandle } from "react-resizable"; import { useResizeDetector } from "react-resize-detector"; import styled from "styled-components"; const StyledDrawer = styled(AntdDrawer)` & .ant-drawer-content-wrapper { - transition-duration: 0s; + transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1) !important; + will-change: transform; + transform: translate3d(0, 0, 0); + } + + & .ant-drawer-content { + transition: none !important; + } + + & .ant-drawer-mask { + transition: opacity 0.3s cubic-bezier(0.7, 0.3, 0.1, 1) !important; + will-change: opacity; + } + + & .ant-drawer-header { + transition: none !important; + } + + & .ant-drawer-body { + transition: none !important; } `; @@ -53,19 +72,58 @@ export function Drawer(props: DrawerProps) { () => (resizable ? [getResizeHandle(placement)] : []), [placement, resizable] ); - const isTopBom = ["top", "bottom"].includes(placement); + const isTopBom = useMemo(() => ["top", "bottom"].includes(placement), [placement]); const [width, setWidth] = useState<number>(); const [height, setHeight] = useState<number>(); + const mountedRef = useRef(true); + + // Combined effect for width and height cleanup useEffect(() => { - setWidth(undefined); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [drawerWidth]); + if (drawerWidth !== undefined) { + setWidth(undefined); + } + if (drawerHeight !== undefined) { + setHeight(undefined); + } + }, [drawerWidth, drawerHeight]); + + // Cleanup on unmount useEffect(() => { - setHeight(undefined); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [drawerHeight]); - const { width: detectWidth, height: detectHeight, ref } = useResizeDetector(); - // log.info("Drawer. drawerWidth: ", drawerWidth, " width: ", width, "detectWidth: ", detectWidth); + return () => { + mountedRef.current = false; + }; + }, []); + + const { width: detectWidth, height: detectHeight, ref } = useResizeDetector({ + onResize: () => { + // Only update if component is still mounted + if (!mountedRef.current) return; + } + }); + + const handleResizeStart = useCallback( + (event: React.SyntheticEvent, { node, size, handle }: { node: HTMLElement; size: { width: number; height: number }; handle: ResizeHandle }) => { + props.onResizeStart?.(event, node, size, handle); + }, + [props.onResizeStart] + ); + + const handleResize = useCallback( + (event: React.SyntheticEvent, { node, size, handle }: { node: HTMLElement; size: { width: number; height: number }; handle: ResizeHandle }) => { + if (!mountedRef.current) return; + isTopBom ? setHeight(size.height) : setWidth(size.width); + props.onResize?.(event, node, size, handle); + }, + [isTopBom, props.onResize] + ); + + const handleResizeStop = useCallback( + (event: React.SyntheticEvent, { node, size, handle }: { node: HTMLElement; size: { width: number; height: number }; handle: ResizeHandle }) => { + props.onResizeStop?.(event, node, size, handle); + }, + [props.onResizeStop] + ); + return ( <StyledDrawer width={width ?? drawerWidth} height={height ?? drawerHeight} {...otherProps}> <Resizable @@ -73,16 +131,9 @@ export function Drawer(props: DrawerProps) { height={height ?? detectHeight ?? 0} resizeHandles={resizeHandles} handle={Handle} - onResizeStart={(event, { node, size, handle }) => - props.onResizeStart?.(event, node, size, handle) - } - onResize={(event, { node, size, handle }) => { - isTopBom ? setHeight(size.height) : setWidth(size.width); - props.onResize?.(event, node, size, handle); - }} - onResizeStop={(event, { node, size, handle }) => - props.onResizeStop?.(event, node, size, handle) - } + onResizeStart={handleResizeStart} + onResize={handleResize} + onResizeStop={handleResizeStop} > <div ref={ref} style={{ height: "100%" }}> {children} diff --git a/client/packages/lowcoder-design/src/components/Dropdown.tsx b/client/packages/lowcoder-design/src/components/Dropdown.tsx index 309eb40761..b2a9d27663 100644 --- a/client/packages/lowcoder-design/src/components/Dropdown.tsx +++ b/client/packages/lowcoder-design/src/components/Dropdown.tsx @@ -18,9 +18,9 @@ export const DropdownContainer = styled.div<{ $placement: ControlPlacement }>` width: ${(props) => props.$placement === "right" ? "calc(100% - 96px)" - : "bottom" - ? "calc(100% - 112px)" - : "calc(100% - 136px"}; + : props.$placement === "bottom" + ? "calc(100% - 112px)" + : "calc(100% - 136px)"}; flex-grow: 1; .ant-select:not(.ant-select-customize-input) .ant-select-selector { @@ -124,8 +124,8 @@ const FlexDiv = styled.div` const LabelWrapper = styled.div<{ $placement: ControlPlacement }>` flex-shrink: 0; - width: ${(props) => (props.$placement === "right" ? "96px" : "bottom" ? "112px" : "136px")}; -`; + width: ${(props) => props.$placement === "right" ? "96px" : props.$placement === "bottom" ? "112px" : "136px"}; + `; export type OptionType = { readonly label: ReactNode; @@ -184,7 +184,7 @@ export function Dropdown<T extends OptionsType>(props: DropdownProps<T>) { <CustomSelect open={props.open} listHeight={props.lineHeight} - popupClassName="ob-dropdown-control-select" + classNames={{popup: { root: "ob-dropdown-control-select"}}} showSearch={props.showSearch} filterOption={(input, option) => { if (props.optionFilterProp) { @@ -216,7 +216,7 @@ export function Dropdown<T extends OptionsType>(props: DropdownProps<T>) { allowClear={props.allowClear} placeholder={props.placeholder} optionLabelProp={props.optionLabelProp} - dropdownRender={(menu) => + popupRender={(menu) => props.preNode ? ( <> {props.preNode()} diff --git a/client/packages/lowcoder-design/src/components/Modal/handler.tsx b/client/packages/lowcoder-design/src/components/Modal/handler.tsx index c5c293ca31..c51a6858f9 100644 --- a/client/packages/lowcoder-design/src/components/Modal/handler.tsx +++ b/client/packages/lowcoder-design/src/components/Modal/handler.tsx @@ -1,4 +1,5 @@ import styled, { css } from "styled-components"; +import { memo, useMemo } from "react"; type ResizeHandleAxis = "s" | "w" | "e" | "n" | "sw" | "nw" | "se" | "ne"; type ReactRef<T extends HTMLElement> = { @@ -83,8 +84,11 @@ const ResizeHandle = styled.div<{ $axis: string }>` ${(props) => (["sw", "nw", "se", "ne"].indexOf(props.$axis) >= 0 ? CornerHandle : "")}; `; -const Handle = (axis: ResizeHandleAxis, ref: ReactRef<HTMLDivElement>) => { - return <ResizeHandle ref={ref} $axis={axis} className={`react-resizable-handle`}></ResizeHandle>; -}; +// Memoize Handle component +const Handle = memo((axis: ResizeHandleAxis, ref: ReactRef<HTMLDivElement>) => { + return <ResizeHandle ref={ref} $axis={axis} className="react-resizable-handle" />; +}); + +Handle.displayName = 'Handle'; export default Handle; diff --git a/client/packages/lowcoder-design/src/components/Modal/index.tsx b/client/packages/lowcoder-design/src/components/Modal/index.tsx index 1677bcb9bc..0c506b0e95 100644 --- a/client/packages/lowcoder-design/src/components/Modal/index.tsx +++ b/client/packages/lowcoder-design/src/components/Modal/index.tsx @@ -1,5 +1,5 @@ import { default as AntdModal, ModalProps as AntdModalProps } from "antd/es/modal"; -import { useEffect, useState } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; import { Resizable, ResizeHandle } from "react-resizable"; import { useResizeDetector } from "react-resize-detector"; import Handle from "./handler"; @@ -39,45 +39,60 @@ export function Modal(props: ModalProps) { const [width, setWidth] = useState<number>(); const [height, setHeight] = useState<number>(); + + // Memoize style object + const modalStyles = useMemo(() => ({ + body: { + height: height ?? modalHeight, + ...styles?.body, + } + }), [height, modalHeight, styles?.body]); + + // Memoize event handlers + const handleResizeStart = useCallback((event: React.SyntheticEvent, { node, size, handle }: { node: HTMLElement; size: { width: number; height: number }; handle: ResizeHandle }) => { + props.onResizeStart?.(event, node, size, handle); + }, [props.onResizeStart]); + + const handleResize = useCallback((event: React.SyntheticEvent, { node, size, handle }: { node: HTMLElement; size: { width: number; height: number }; handle: ResizeHandle }) => { + setWidth(size.width); + setHeight(size.height); + props.onResize?.(event, node, size, handle); + }, [props.onResize]); + + const handleResizeStop = useCallback((event: React.SyntheticEvent, { node, size, handle }: { node: HTMLElement; size: { width: number; height: number }; handle: ResizeHandle }) => { + props.onResizeStop?.(event, node, size, handle); + }, [props.onResizeStop]); + useEffect(() => { setWidth(undefined); // eslint-disable-next-line react-hooks/exhaustive-deps }, [modalWidth]); + useEffect(() => { setHeight(undefined); // eslint-disable-next-line react-hooks/exhaustive-deps }, [modalHeight]); const { width: detectWidth, height: detectHeight, ref } = useResizeDetector(); - // log.info("Modal. modalWidth: ", modalWidth, " width: ", size?.w, " detectWidth: ", detectWidth); + + // Memoize Resizable props + const resizableProps = useMemo(() => ({ + width: width ?? detectWidth ?? 0, + height: height ?? detectHeight ?? 0, + resizeHandles, + handle: Handle, + onResizeStart: handleResizeStart, + onResize: handleResize, + onResizeStop: handleResizeStop + }), [width, detectWidth, height, detectHeight, resizeHandles, handleResizeStart, handleResize, handleResizeStop]); + return ( <AntdModal width={width ?? modalWidth} - styles={{ - body: { - height: height ?? modalHeight, - ...styles?.body, - } - }} + styles={modalStyles} {...otherProps} > - <Resizable - width={width ?? detectWidth ?? 0} - height={height ?? detectHeight ?? 0} - resizeHandles={resizeHandles} - handle={Handle} - onResizeStart={(event, { node, size, handle }) => - props.onResizeStart?.(event, node, size, handle) - } - onResize={(event, { node, size, handle }) => { - setWidth(size.width); - setHeight(size.height); - props.onResize?.(event, node, size, handle); - }} - onResizeStop={(event, { node, size, handle }) => - props.onResizeStop?.(event, node, size, handle) - } - > + <Resizable {...resizableProps}> <div ref={ref} style={{ height: "100%" }}> {children} </div> diff --git a/client/packages/lowcoder-design/src/components/ScrollBar.tsx b/client/packages/lowcoder-design/src/components/ScrollBar.tsx index 9443d38a28..6842330e49 100644 --- a/client/packages/lowcoder-design/src/components/ScrollBar.tsx +++ b/client/packages/lowcoder-design/src/components/ScrollBar.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useCallback, useMemo } from "react"; import SimpleBar from "simplebar-react"; import styled from "styled-components"; import { DebouncedFunc } from 'lodash'; // Assuming you're using lodash's DebouncedFunc type @@ -57,7 +57,7 @@ interface IProps { children: React.ReactNode; className?: string; height?: string; - overflow?:string, + overflow?: string, style?: React.CSSProperties; // Add this line to include a style prop scrollableNodeProps?: { onScroll: DebouncedFunc<(e: any) => void>; @@ -68,7 +68,7 @@ interface IProps { suffixNode?: React.ReactNode; } -export const ScrollBar = ({ +export const ScrollBar = React.memo(({ className, children, style, @@ -80,31 +80,42 @@ export const ScrollBar = ({ suffixNode, ...otherProps }: IProps) => { - const height = style?.height ?? '100%'; - // You can now use the style prop directly or pass it to SimpleBar - const combinedStyle = { ...style, height }; // Example of combining height with passed style + // Memoize the combined style to prevent unnecessary re-renders + const combinedStyle = useMemo(() => { + const height = style?.height ?? '100%'; + return { ...style, height }; + }, [style]); + + // Memoize the render function to prevent recreation on every render + const renderContent = useCallback(({ scrollableNodeProps, contentNodeProps }: any) => ( + <div {...scrollableNodeProps}> + {prefixNode} + <div {...contentNodeProps}> + {children} + </div> + {suffixNode} + </div> + ), [prefixNode, children, suffixNode]); return hideScrollbar ? ( - <ScrollBarWrapper className={className}> + <ScrollBarWrapper + className={className} + > {prefixNode} {children} {suffixNode} </ScrollBarWrapper> ) : ( - <ScrollBarWrapper className={className}> - <SimpleBar style={combinedStyle} scrollableNodeProps={scrollableNodeProps} {...otherProps}> - {({ scrollableNodeProps, contentNodeProps }) => { - return ( - <div {...scrollableNodeProps as any}> - {prefixNode} - <div {...contentNodeProps as any}> - {children} - </div> - {suffixNode} - </div> - ); - }} + <ScrollBarWrapper + className={className} + > + <SimpleBar + style={combinedStyle} + scrollableNodeProps={scrollableNodeProps} + {...otherProps} + > + {renderContent} </SimpleBar> </ScrollBarWrapper> ); -}; +}); diff --git a/client/packages/lowcoder-design/src/components/Section.tsx b/client/packages/lowcoder-design/src/components/Section.tsx index 1c654f637a..46d346f235 100644 --- a/client/packages/lowcoder-design/src/components/Section.tsx +++ b/client/packages/lowcoder-design/src/components/Section.tsx @@ -1,5 +1,5 @@ import { trans } from "i18n/design"; -import React, { ReactNode, useContext } from "react"; +import React, { ReactNode, useContext, useCallback, useMemo } from "react"; import styled from "styled-components"; import { ReactComponent as Packup } from "icons/v1/icon-Pack-up.svg"; import { labelCss } from "./Label"; @@ -14,6 +14,7 @@ const SectionItem = styled.div<{ $width?: number }>` border-bottom: none; } `; + const SectionLabel = styled.div` ${labelCss}; flex-grow: 1; @@ -64,6 +65,10 @@ const SectionLabelDiv = styled.div` } `; +const ButtonContainer = styled.div` + display: flex; +`; + const ShowChildren = styled.div<{ $show?: string; $noMargin?: boolean }>` display: ${(props) => props.$show || "none"}; flex-direction: column; @@ -80,6 +85,7 @@ const TooltipWrapper = styled.span` white-space: pre-wrap; color:#fff; `; + interface ISectionConfig<T> { name?: string; open?: boolean; @@ -109,47 +115,51 @@ export const PropertySectionContext = React.createContext<PropertySectionContext state: {}, }); -export const BaseSection = (props: ISectionConfig<ReactNode>) => { - const { name,hasTooltip } = props; +const TOOLTIP_CONTENT = ( + <TooltipWrapper> + Here you can enter the animation type codes. Like bounce, swing or + tada. Read more about all possible codes at:{" "} + <a href="https://animate.style">https://animate.style</a> + </TooltipWrapper> +); + +export const BaseSection = React.memo((props: ISectionConfig<ReactNode>) => { + const { name, hasTooltip } = props; const { compName, state, toggle } = useContext(PropertySectionContext); const open = props.open !== undefined ? props.open : name ? state[compName]?.[name] !== false : true; - // console.log("open", open, props.open); - - const handleToggle = () => { + const handleToggle = useCallback(() => { if (!name) { return; } toggle(compName, name); - }; + }, [name, compName, toggle]); + + const tooltipContent = useMemo(() => hasTooltip ? TOOLTIP_CONTENT : null, [hasTooltip]); + + const getPopupContainer = useCallback((node: HTMLElement) => { + return (node.closest('.react-grid-item') as HTMLElement) || document.body; + }, []); return ( <SectionItem $width={props.width} style={props.style}> {props.name && ( <SectionLabelDiv onClick={handleToggle} className={'section-header'}> <SectionLabel>{props.name}</SectionLabel> - <div style={{display: 'flex'}}> + <ButtonContainer> {open && props.additionalButton} <PackupIcon deg={open ? 'rotate(0deg)' : 'rotate(180deg)'} /> - </div> + </ButtonContainer> </SectionLabelDiv> )} <Tooltip - title={ - hasTooltip && ( - <TooltipWrapper> - Here you can enter the animation type codes. Like bounce, swing or - tada. Read more about all possible codes at:{" "} - <a href="https://animate.style">https://animate.style</a> - </TooltipWrapper> - ) - } + title={tooltipContent} arrow={{ pointAtCenter: true, }} placement="top" color="#2c2c2c" - getPopupContainer={(node: any) => node.closest('.react-grid-item')} + getPopupContainer={getPopupContainer} > <ShowChildren $show={open ? 'flex' : 'none'} $noMargin={props.noMargin}> {props.children} @@ -157,11 +167,15 @@ export const BaseSection = (props: ISectionConfig<ReactNode>) => { </Tooltip> </SectionItem> ); -}; +}); -export function Section(props: ISectionConfig<ControlNode>) { +BaseSection.displayName = 'BaseSection'; + +export const Section = React.memo((props: ISectionConfig<ControlNode>) => { return controlItem({ filterText: props.name, searchChild: true }, <BaseSection {...props} />); -} +}); + +Section.displayName = 'Section'; // common section names export const sectionNames = { diff --git a/client/packages/lowcoder-design/src/components/Tab.tsx b/client/packages/lowcoder-design/src/components/Tab.tsx index 0c9df3216d..3828b7e27f 100644 --- a/client/packages/lowcoder-design/src/components/Tab.tsx +++ b/client/packages/lowcoder-design/src/components/Tab.tsx @@ -1,5 +1,5 @@ import styled, { css } from "styled-components"; -import React from "react"; +import React, { useCallback, useMemo } from "react"; const HeaderDiv = styled.div` width: 312px; @@ -79,26 +79,42 @@ interface ITabs { activeKey: string; } -const Tabs = (props: ITabs) => { +const Tabs = React.memo((props: ITabs) => { const { onChange, tabsConfig, activeKey } = props; - const activeTab = tabsConfig.find((c) => c.key === activeKey) || tabsConfig[0]; + + const activeTab = useMemo(() => + tabsConfig.find((c) => c.key === activeKey) || tabsConfig[0], + [tabsConfig, activeKey] + ); + + const handleTabClick = useCallback((key: string) => { + onChange(key); + }, [onChange]); + + const renderTab = useCallback((tab: ITabsConfig) => { + const isActive = activeTab.key === tab.key; + return ( + <IconAndName + key={tab.key} + onClick={() => handleTabClick(tab.key)} + $isActive={isActive} + > + {tab.icon} + <Text $color={isActive ? "#222222" : "#8b8fa3"}>{tab.title}</Text> + </IconAndName> + ); + }, [activeTab.key, handleTabClick]); return ( <> <HeaderDiv> - {props.tabsConfig.map((tab) => { - const isActive = activeTab.key === tab.key; - return ( - <IconAndName key={tab.key} onClick={() => onChange(tab.key)} $isActive={isActive}> - {tab.icon} - <Text $color={isActive ? "#222222" : "#8b8fa3"}>{tab.title}</Text> - </IconAndName> - ); - })} + {tabsConfig.map(renderTab)} </HeaderDiv> <ChildDiv>{activeTab.content}</ChildDiv> </> ); -}; +}); + +Tabs.displayName = 'Tabs'; export { Tabs }; diff --git a/client/packages/lowcoder-design/src/components/TriggeredDialog.tsx b/client/packages/lowcoder-design/src/components/TriggeredDialog.tsx index a1f7e9dc1a..75302c470f 100644 --- a/client/packages/lowcoder-design/src/components/TriggeredDialog.tsx +++ b/client/packages/lowcoder-design/src/components/TriggeredDialog.tsx @@ -40,7 +40,7 @@ export function TriggeredDialog(props: { <CustomModal open={visible} title={modalTitle} - destroyOnClose + destroyOnHidden onCancel={() => setVisible(false)} showOkButton={false} showCancelButton={false} diff --git a/client/packages/lowcoder-design/src/components/colorSelect/index.tsx b/client/packages/lowcoder-design/src/components/colorSelect/index.tsx index 52f2a206f1..1ea6154b9a 100644 --- a/client/packages/lowcoder-design/src/components/colorSelect/index.tsx +++ b/client/packages/lowcoder-design/src/components/colorSelect/index.tsx @@ -48,7 +48,7 @@ export const ColorSelect = (props: ColorSelectProps) => { useEffect(() => { if (color !== selectedColor) { - const value = getGradientObject(); + const value = getGradientObject("#ffffff"); if (!value?.isGradient) { return throttleChange(toHex(selectedColor)); } @@ -60,7 +60,7 @@ export const ColorSelect = (props: ColorSelectProps) => { <Popover trigger={trigger} placement="left" - destroyTooltipOnHide={true} + destroyOnHidden={true} onOpenChange={(value) => { setVisible(value); }} diff --git a/client/packages/lowcoder-design/src/components/container.tsx b/client/packages/lowcoder-design/src/components/container.tsx index c8054c9211..aba8898cea 100644 --- a/client/packages/lowcoder-design/src/components/container.tsx +++ b/client/packages/lowcoder-design/src/components/container.tsx @@ -1,7 +1,8 @@ import { trans } from "i18n/design"; -import { ReactNode } from "react"; +import { ReactNode, useMemo } from "react"; import styled from "styled-components"; import { ReactComponent as ContainerDrag } from "icons/v1/icon-container-drag.svg"; +import React from "react"; type ContainerPlaceholderProps = { children?: ReactNode; @@ -13,25 +14,31 @@ const HintText = styled.span` text-align: center; `; -export function ContainerPlaceholder(props: ContainerPlaceholderProps) { +const ContainerWrapper = styled.div` + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +`; + +const StyledContainerDrag = styled(ContainerDrag)` + vertical-align: bottom; + margin-right: 8px; +`; + +export const ContainerPlaceholder = React.memo(function ContainerPlaceholder(props: ContainerPlaceholderProps) { return ( - <div - style={{ - width: "100%", - height: "100%", - display: "flex", - alignItems: "center", - justifyContent: "center", - }} - > + <ContainerWrapper> <HintText> - <ContainerDrag style={{ verticalAlign: "bottom", marginRight: "8px" }} /> + <StyledContainerDrag /> {props.children} </HintText> - </div> + </ContainerWrapper> ); -} +}); +// Create a memoized version of the placeholder export const HintPlaceHolder = ( <ContainerPlaceholder>{trans("container.hintPlaceHolder")}</ContainerPlaceholder> ); diff --git a/client/packages/lowcoder-design/src/components/customSelect.tsx b/client/packages/lowcoder-design/src/components/customSelect.tsx index e06427465e..2f13f0db8e 100644 --- a/client/packages/lowcoder-design/src/components/customSelect.tsx +++ b/client/packages/lowcoder-design/src/components/customSelect.tsx @@ -96,7 +96,7 @@ const CustomSelect = React.forwardRef<HTMLDivElement, CustomSelectProps>(( return ( <SelectWrapper className={className} ref={ref} $border={border}> <AntdSelect - popupClassName={popupClassName} + classNames={{popup: { root: popupClassName }}} popupMatchSelectWidth={false} suffixIcon={<PackUpIcon />} {...restProps} diff --git a/client/packages/lowcoder-design/src/components/form.tsx b/client/packages/lowcoder-design/src/components/form.tsx index 364a9e610f..347f2e729b 100644 --- a/client/packages/lowcoder-design/src/components/form.tsx +++ b/client/packages/lowcoder-design/src/components/form.tsx @@ -1,5 +1,5 @@ import { default as Form } from "antd/es/form"; -import { default as AntdFormItem, FormItemProps as AntdFormItemProps } from "antd/es/form/FormItem"; +import { default as AntdFormItem, FormItemProps as AntdFormItemProps} from "antd/es/form/FormItem"; import { default as Input, InputProps } from "antd/es/input"; import { default as TextArea, TextAreaProps } from "antd/es/input/TextArea"; import { default as InputNumber, InputNumberProps } from "antd/es/input-number"; @@ -331,7 +331,7 @@ const FormSelect = (props: any) => { }} popupMatchSelectWidth={false} placeholder={props.placeholder} - dropdownRender={props.dropdownRender} + popupRender={props.dropdownRender} > {props.options?.map((item: any) => { return ( diff --git a/client/packages/lowcoder-design/src/components/iconSelect/index.tsx b/client/packages/lowcoder-design/src/components/iconSelect/index.tsx index 23c73b200f..39d2291ff5 100644 --- a/client/packages/lowcoder-design/src/components/iconSelect/index.tsx +++ b/client/packages/lowcoder-design/src/components/iconSelect/index.tsx @@ -152,6 +152,7 @@ class Icon { else return ( <FontAwesomeIcon + className="" icon={this.def} style={{ width: "1em", height: "1em"}} /> @@ -256,6 +257,7 @@ const IconPopup = (props: { searchKeywords?: Record<string, string>; IconType?: "OnlyAntd" | "All" | "default" | undefined; }) => { + const draggableRef = useRef<HTMLDivElement>(null); const [searchText, setSearchText] = useState(""); const [allIcons, setAllIcons] = useState<Record<string, Icon>>({}); const searchResults = useMemo( @@ -289,7 +291,8 @@ const IconPopup = (props: { title={icon.title + ", Key: " + key} placement="bottom" align={{ offset: [0, -7, 0, 0] }} - destroyTooltipOnHide + getPopupContainer={(node: any) => node.parentNode} + destroyOnHidden > <IconItemContainer tabIndex={0} @@ -311,8 +314,8 @@ const IconPopup = (props: { [searchResults, allIcons, onChangeIcon] ); return ( - <Draggable handle=".dragHandle"> - <PopupContainer> + <Draggable handle=".dragHandle" nodeRef={draggableRef}> + <PopupContainer ref={draggableRef}> <TitleDiv className="dragHandle"> <TitleText>{trans("iconSelect.title")}</TitleText> <StyledCloseIcon onClick={props.onClose} /> @@ -371,7 +374,7 @@ export const IconSelectBase = (props: { } }} // when dragging is allowed, always re-location to avoid the popover exceeds the screen - destroyTooltipOnHide + destroyOnHidden content={ <IconPopup onChange={props.onChange} diff --git a/client/packages/lowcoder-design/src/components/markdown.tsx b/client/packages/lowcoder-design/src/components/markdown.tsx index 1260f007f5..f20b2c0a3f 100644 --- a/client/packages/lowcoder-design/src/components/markdown.tsx +++ b/client/packages/lowcoder-design/src/components/markdown.tsx @@ -1,10 +1,11 @@ import { css } from "styled-components"; -import { lazy } from "react"; +import { lazy, Suspense, memo, useMemo } from "react"; // import ReactMarkdown from "react-markdown"; import rehypeRaw from "rehype-raw"; import rehypeSanitize, { defaultSchema } from "rehype-sanitize"; import remarkGfm from "remark-gfm"; -import type { Options as ReactMarkdownOptions } from "react-markdown/lib"; +import type { Options as ReactMarkdownOptions, Components } from "react-markdown/lib"; +import type { Pluggable } from "unified"; const ReactMarkdown = lazy(() => import('react-markdown')); @@ -38,44 +39,69 @@ interface TacoMarkDownProps extends ReactMarkdownOptions { children: string; } -const components = { - a: (props: any) => { - const { node, children, ...otherProps } = props; - return ( - <a {...otherProps} target="_blank"> - {children} - </a> - ); +interface AnchorProps { + node?: any; + children: React.ReactNode; + href?: string; + className?: string; + style?: React.CSSProperties; +} + +// Memoize the anchor component to prevent unnecessary re-renders +const Anchor = memo((props: AnchorProps) => { + const { node, children, ...otherProps } = props; + return ( + <a {...otherProps} target="_blank" rel="noopener noreferrer"> + {children} + </a> + ); +}); + +Anchor.displayName = 'Anchor'; + +// Memoize the components object with proper typing +const components: Components = { + a: Anchor as any, // Type assertion needed due to react-markdown's type definitions +}; + +// Memoize the sanitize schema +const sanitizeSchema = { + ...defaultSchema, + attributes: { + ...defaultSchema.attributes, + "*": [ + ...((defaultSchema.attributes && defaultSchema.attributes["*"]) || []), + "style", + "className", + ], }, }; -export const TacoMarkDown = (props: TacoMarkDownProps) => { +// Memoize the rehype plugins array with proper typing +const rehypePlugins: Pluggable[] = [ + [rehypeRaw] as Pluggable, + [rehypeSanitize, sanitizeSchema] as Pluggable, +]; + +export const TacoMarkDown = memo((props: TacoMarkDownProps) => { const { children, ...otherProps } = props; + + // Memoize the remark plugins array with proper typing + const remarkPlugins = useMemo(() => [remarkGfm] as Pluggable[], []); + return ( - <ReactMarkdown - remarkPlugins={[remarkGfm]} - components={components} - rehypePlugins={[ - [rehypeRaw], - [ - rehypeSanitize, - { - ...defaultSchema, - attributes: { - ...defaultSchema.attributes, - "*": [ - ...((defaultSchema.attributes && defaultSchema.attributes["*"]) || []), - "style", - "className", - ], - }, - }, - ], - ]} - className="markdown-body" - {...otherProps} - > - {children} - </ReactMarkdown> + <Suspense fallback={<div className="markdown-body">Loading...</div>}> + <ReactMarkdown + remarkPlugins={remarkPlugins} + components={components} + rehypePlugins={rehypePlugins} + className="markdown-body" + {...otherProps} + > + {children} + </ReactMarkdown> + </Suspense> ); -}; +}); + +TacoMarkDown.displayName = 'TacoMarkDown'; diff --git a/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx b/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx index 060945977c..b2b5e46508 100644 --- a/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx +++ b/client/packages/lowcoder-design/src/components/shapeSelect/index.tsx @@ -328,6 +328,7 @@ const IconPopup = (props: { searchKeywords?: Record<string, string>; IconType?: "OnlyAntd" | "All" | "default" | undefined; }) => { + const draggableRef = useRef<HTMLDivElement>(null); const [allIcons, setAllIcons] = useState<Record<string, Icon>>({}); const onChangeRef = useRef(props.onChange); onChangeRef.current = props.onChange; @@ -374,8 +375,8 @@ const IconPopup = (props: { // [searchResults, allIcons, onChangeIcon] // ); return ( - <Draggable handle=".dragHandle"> - <PopupContainer> + <Draggable handle=".dragHandle" nodeRef={draggableRef}> + <PopupContainer ref={draggableRef}> <TitleDiv className="dragHandle"> <TitleText>{trans("shapeSelect.title")}</TitleText> <StyledCloseIcon onClick={props.onClose} /> @@ -452,7 +453,7 @@ export const ShapeSelectBase = (props: { } }} // when dragging is allowed, always re-location to avoid the popover exceeds the screen - destroyTooltipOnHide + destroyOnHidden content={ <IconPopup onChange={props.onChange} diff --git a/client/packages/lowcoder-design/src/components/tacoInput.tsx b/client/packages/lowcoder-design/src/components/tacoInput.tsx index e7ce12111c..a6f4583877 100644 --- a/client/packages/lowcoder-design/src/components/tacoInput.tsx +++ b/client/packages/lowcoder-design/src/components/tacoInput.tsx @@ -283,7 +283,7 @@ function PhoneNumberInput(props: { <CustomSelect disabled style={{ width: "80px", height: "38px" }} - dropdownStyle={{ width: "408px" }} + styles={{ popup: { root: { width: "408px" }}}} defaultValue={defaultCountryCode} optionLabelProp="value" onChange={(value) => { diff --git a/client/packages/lowcoder-design/src/icons/index.tsx b/client/packages/lowcoder-design/src/icons/index.tsx index 02b0898f3f..94453db48b 100644 --- a/client/packages/lowcoder-design/src/icons/index.tsx +++ b/client/packages/lowcoder-design/src/icons/index.tsx @@ -87,7 +87,7 @@ export { ReactComponent as ImportAppIcon } from "./v1/icon-app-import.svg"; export { ReactComponent as ImportIcon } from "./v1/icon-import.svg"; export { ReactComponent as ImportIconV2 } from "./v1/icon-import-v2.svg"; export { ReactComponent as DatasourceIcon } from "./v1/icon-datasource.svg"; -export { ReactComponent as QueryLibraryIcon } from "./v1/icon-query-library.svg"; +export { ReactComponent as QueryLibraryIcon } from "./remix/braces-line.svg"; export { ReactComponent as TransformerIcon } from "./v1/icon-transformer.svg"; export { ReactComponent as TempStateIcon } from "./v1/icon-temp-state.svg"; export { ReactComponent as IconDep } from "./v1/icon-style-dep.svg"; @@ -132,7 +132,11 @@ export { ReactComponent as APIDocsIcon } from "./remix/instance-line.svg"; export { ReactComponent as SubscriptionIcon } from "./remix/award-fill.svg"; export { ReactComponent as SupportIcon } from "./remix/user-heart-line.svg"; // export { ReactComponent as AllAppIcon } from "./v1/icon-all-app.svg"; - +// EE +export { ReactComponent as EnvironmentsIcon } from "./remix/git-branch-line.svg"; +export { ReactComponent as UsageStatisticsIcon } from "./remix/line-chart-line.svg"; +export { ReactComponent as AutitLogsIcon } from "./remix/user-community-line.svg"; +export { ReactComponent as BrandingIcon } from "./remix/paint-brush-line.svg"; // Data Sources export { ReactComponent as MysqlIcon } from "./v1/icon-query-MySQL.svg"; @@ -145,6 +149,8 @@ export { ReactComponent as OracleIcon } from "./v1/icon-query-OracleDB.svg"; export { ReactComponent as ClickHouseIcon } from "./v1/icon-query-ClickHouse.svg"; export { ReactComponent as GoogleSheetsIcon } from "./v1/icon-query-GoogleSheets.svg"; export { ReactComponent as GraphqlIcon } from "./v1/icon-query-Graphql.svg"; +export { ReactComponent as AlasqlIcon } from "./remix/database-2-line.svg"; +export { ReactComponent as StreamApiIcon } from "./remix/rfid-line.svg"; export { ReactComponent as SnowflakeIcon } from "./v1/icon-query-snowflake.svg"; export { ReactComponent as MariaDBIcon } from "./v1/icon-query-MariaDB.svg"; @@ -219,8 +225,6 @@ export { ReactComponent as BorderWidthIcon } from "./remix/space.svg"; export { ReactComponent as BorderStyleIcon } from "./remix/separator.svg"; export { ReactComponent as RotationIcon } from "./remix/clockwise-line.svg"; export { ReactComponent as BorderRadiusIcon } from "./remix/rounded-corner.svg"; - -// Falk: TODO export { ReactComponent as ShadowIcon } from "./remix/shadow-line.svg"; export { ReactComponent as OpacityIcon } from "./remix/contrast-drop-2-line.svg"; export { ReactComponent as AnimationIcon } from "./remix/loader-line.svg"; @@ -255,6 +259,13 @@ export { ReactComponent as EnterpriseIcon } from "./remix/earth-line.svg"; export { ReactComponent as VerticalIcon } from "./remix/vertical.svg"; export { ReactComponent as HorizontalIcon } from "./remix/horizontal.svg"; +// Social Sharing +export { ReactComponent as TwitterIcon } from "./remix/twitter-x-line.svg"; +export { ReactComponent as LinkedInIcon } from "./remix/linkedin-box-fill.svg"; +export { ReactComponent as FacebookIcon } from "./remix/facebook-circle-fill.svg"; +export { ReactComponent as MediumIcon } from "./remix/medium-fill.svg"; +export { ReactComponent as RedditIcon } from "./remix/reddit-line.svg"; + // components diff --git a/client/packages/lowcoder-design/src/icons/remix/account-box-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/account-box-2-fill.svg new file mode 100644 index 0000000000..c2c5a7354b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/account-box-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 4.99509C3 3.89323 3.89262 3 4.99509 3H19.0049C20.1068 3 21 3.89262 21 4.99509V19.0049C21 20.1068 20.1074 21 19.0049 21H4.99509C3.89323 21 3 20.1074 3 19.0049V4.99509ZM12 8C12.5523 8 13 8.44772 13 9C13 9.55228 12.5523 10 12 10C11.4477 10 11 9.55228 11 9C11 8.44772 11.4477 8 12 8ZM12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12ZM12 15C13.1046 15 14 15.8954 14 17H16C16 14.7909 14.2091 13 12 13C9.79086 13 8 14.7909 8 17H10C10 15.8954 10.8954 15 12 15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/account-box-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/account-box-2-line.svg new file mode 100644 index 0000000000..bb144965aa --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/account-box-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.99509 3C3.89262 3 3 3.89323 3 4.99509V19.0049C3 20.1074 3.89323 21 4.99509 21H19.0049C20.1074 21 21 20.1068 21 19.0049V4.99509C21 3.89262 20.1068 3 19.0049 3H4.99509ZM5 19V5H19V19H5ZM12 8C12.5523 8 13 8.44772 13 9C13 9.55228 12.5523 10 12 10C11.4477 10 11 9.55228 11 9C11 8.44772 11.4477 8 12 8ZM12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12ZM12 15C10.8954 15 10 15.8954 10 17H8C8 14.7909 9.79086 13 12 13C14.2091 13 16 14.7909 16 17H14C14 15.8954 13.1046 15 12 15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/account-circle-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/account-circle-2-fill.svg new file mode 100644 index 0000000000..fad8ce6843 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/account-circle-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 8C12.5523 8 13 8.44772 13 9C13 9.55228 12.5523 10 12 10C11.4477 10 11 9.55228 11 9C11 8.44772 11.4477 8 12 8ZM12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12ZM12 15C13.1046 15 14 15.8954 14 17H16C16 14.7909 14.2091 13 12 13C9.79086 13 8 14.7909 8 17H10C10 15.8954 10.8954 15 12 15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/account-circle-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/account-circle-2-line.svg new file mode 100644 index 0000000000..c37c70644e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/account-circle-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 8C12.5523 8 13 8.44772 13 9C13 9.55228 12.5523 10 12 10C11.4477 10 11 9.55228 11 9C11 8.44772 11.4477 8 12 8ZM12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12ZM12 15C10.8954 15 10 15.8954 10 17H8C8 14.7909 9.79086 13 12 13C14.2091 13 16 14.7909 16 17H14C14 15.8954 13.1046 15 12 15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/add-large-fill.svg b/client/packages/lowcoder-design/src/icons/remix/add-large-fill.svg new file mode 100644 index 0000000000..9d6989bb1d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/add-large-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11 11.0001L11 2.0005L13 2.00049L13 11.0001L22.0001 10.9999L22.0002 12.9999L13 13.0001L13.0001 22L11.0001 22L11.0001 13.0001L2.00004 13.0003L2 11.0003L11 11.0001Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/add-large-line.svg b/client/packages/lowcoder-design/src/icons/remix/add-large-line.svg new file mode 100644 index 0000000000..234bb93fc1 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/add-large-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.0001 10.9999L22.0002 10.9997L22.0002 12.9997L13.0001 12.9999L13.0001 21.9998L11.0001 21.9998L11.0001 12.9999L2.00004 13.0001L2 11.0001L11.0001 10.9999L11 2.00025L13 2.00024L13.0001 10.9999Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/aed-electrodes-fill.svg b/client/packages/lowcoder-design/src/icons/remix/aed-electrodes-fill.svg new file mode 100644 index 0000000000..04a170e709 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/aed-electrodes-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8 3C7.44772 3 7 3.44772 7 4V7H4C3.44772 7 3 7.44772 3 8V20C3 20.5523 3.44772 21 4 21H9V23H11V21H16C16.5523 21 17 20.5523 17 20V17H20C20.5523 17 21 16.5523 21 16V4C21 3.44772 20.5523 3 20 3H8ZM17 15V8C17 7.44772 16.5523 7 16 7H9V5H19V15H17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/aed-electrodes-line.svg b/client/packages/lowcoder-design/src/icons/remix/aed-electrodes-line.svg new file mode 100644 index 0000000000..1f719410b6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/aed-electrodes-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7 4C7 3.44772 7.44772 3 8 3H20C20.5523 3 21 3.44772 21 4V16C21 16.5523 20.5523 17 20 17H17V20C17 20.5523 16.5523 21 16 21H11V23H9V21H4C3.44772 21 3 20.5523 3 20V8C3 7.44772 3.44772 7 4 7H7V4ZM19 15V5H9V7H16C16.5523 7 17 7.44772 17 8V15H19ZM5 9V19H15V9H5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/aed-fill.svg b/client/packages/lowcoder-design/src/icons/remix/aed-fill.svg new file mode 100644 index 0000000000..5029acc403 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/aed-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6 3C4.34315 3 3 4.34315 3 6V18C3 19.6569 4.34315 21 6 21H18C19.6569 21 21 19.6569 21 18V6C21 4.34315 19.6569 3 18 3H6ZM16 11L11 18V13H8L13 6V11H16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/aed-line.svg b/client/packages/lowcoder-design/src/icons/remix/aed-line.svg new file mode 100644 index 0000000000..a7bab2a690 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/aed-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6 5C5.44772 5 5 5.44772 5 6V18C5 18.5523 5.44772 19 6 19H18C18.5523 19 19 18.5523 19 18V6C19 5.44772 18.5523 5 18 5H6ZM3 6C3 4.34315 4.34315 3 6 3H18C19.6569 3 21 4.34315 21 6V18C21 19.6569 19.6569 21 18 21H6C4.34315 21 3 19.6569 3 18V6ZM16 11H13V6L8 13H11V18L16 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/ai-generate-2.svg b/client/packages/lowcoder-design/src/icons/remix/ai-generate-2.svg new file mode 100644 index 0000000000..06232c34af --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/ai-generate-2.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM5.79993 16H7.95399L8.55399 14.5H11.4459L12.0459 16H14.1999L10.9999 8H8.99993L5.79993 16ZM9.99993 10.8852L10.6459 12.5H9.35399L9.99993 10.8852ZM15 16V8H17V16H15ZM3 3C2.44772 3 2 3.44772 2 4V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20V11H20V19H4V5H14V3H3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/ai-generate-text.svg b/client/packages/lowcoder-design/src/icons/remix/ai-generate-text.svg new file mode 100644 index 0000000000..52df2eed99 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/ai-generate-text.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM2 4C2 3.44772 2.44772 3 3 3H14V5H4V19H20V11H22V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4ZM7 8H17V11H15V10H13V14H14.5V16H9.5V14H11V10H9V11H7V8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/ai-generate.svg b/client/packages/lowcoder-design/src/icons/remix/ai-generate.svg index 1203650788..ad44f33ddd 100644 --- a/client/packages/lowcoder-design/src/icons/remix/ai-generate.svg +++ b/client/packages/lowcoder-design/src/icons/remix/ai-generate.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15 5.25C16.7949 5.25 18.25 3.79493 18.25 2H19.75C19.75 3.79493 21.2051 5.25 23 5.25V6.75C21.2051 6.75 19.75 8.20507 19.75 10H18.25C18.25 8.20507 16.7949 6.75 15 6.75V5.25ZM4 7C4 5.89543 4.89543 5 6 5H13V3H6C3.79086 3 2 4.79086 2 7V17C2 19.2091 3.79086 21 6 21H18C20.2091 21 22 19.2091 22 17V12H20V17C20 18.1046 19.1046 19 18 19H6C4.89543 19 4 18.1046 4 17V7Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 9.12811L19.4668 9.69379C19.2864 10.1079 18.7136 10.1079 18.5331 9.69379L18.2866 9.12811C17.8471 8.11947 17.0555 7.31641 16.0677 6.87708L15.308 6.53922C14.8973 6.35653 14.8973 5.75881 15.308 5.57612L16.0252 5.25714C17.0384 4.80651 17.8442 3.97373 18.2761 2.93083L18.5293 2.31953C18.7058 1.89349 19.2942 1.89349 19.4706 2.31953L19.7238 2.93083C20.1558 3.97373 20.9616 4.80651 21.9748 5.25714L22.6919 5.57612C23.1027 5.75881 23.1027 6.35653 22.6919 6.53922L21.9323 6.87708C20.9445 7.31641 20.1529 8.11947 19.7134 9.12811ZM6 5C4.89543 5 4 5.89543 4 7V17C4 18.1046 4.89543 19 6 19H18C19.1046 19 20 18.1046 20 17V12H22V17C22 19.2091 20.2091 21 18 21H6C3.79086 21 2 19.2091 2 17V7C2 4.79086 3.79086 3 6 3H13V5H6Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/alarm-snooze-fill.svg b/client/packages/lowcoder-design/src/icons/remix/alarm-snooze-fill.svg new file mode 100644 index 0000000000..65a5122bd5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/alarm-snooze-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3.00012 13.0001C3.00012 17.9707 7.02956 22.0001 12.0001 22.0001C16.9707 22.0001 21.0001 17.9707 21.0001 13.0001C21.0001 8.02956 16.9707 4.00012 12.0001 4.00012C7.02956 4.00012 3.00012 8.02956 3.00012 13.0001ZM5.2826 2.74707L1.74707 6.2826L3.16128 7.69682L6.69682 4.16128L5.2826 2.74707ZM22.2532 6.2826L18.7176 2.74707L17.3034 4.16128L20.839 7.69682L22.2532 6.2826ZM9 11V9H15V11.4142L11.4142 15H15V17H9V14.5858L12.5858 11H9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/alarm-snooze-line.svg b/client/packages/lowcoder-design/src/icons/remix/alarm-snooze-line.svg new file mode 100644 index 0000000000..86b4c5ed20 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/alarm-snooze-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3.00012 13.0001C3.00012 17.9707 7.02956 22.0001 12.0001 22.0001C16.9707 22.0001 21.0001 17.9707 21.0001 13.0001C21.0001 8.02956 16.9707 4.00012 12.0001 4.00012C7.02956 4.00012 3.00012 8.02956 3.00012 13.0001ZM19.0001 13.0001C19.0001 16.8661 15.8661 20.0001 12.0001 20.0001C8.13412 20.0001 5.00012 16.8661 5.00012 13.0001C5.00012 9.13412 8.13412 6.00012 12.0001 6.00012C15.8661 6.00012 19.0001 9.13412 19.0001 13.0001ZM5.2826 2.74707L1.74707 6.2826L3.16128 7.69682L6.69682 4.16128L5.2826 2.74707ZM22.2532 6.2826L18.7176 2.74707L17.3034 4.16128L20.839 7.69682L22.2532 6.2826ZM9 11H12.5858L9 14.5858V17H15V15H11.4142L15 11.4142V9H9V11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/alibaba-cloud-fill.svg b/client/packages/lowcoder-design/src/icons/remix/alibaba-cloud-fill.svg new file mode 100644 index 0000000000..0365782e44 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/alibaba-cloud-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9.51445 5.14H4.67954C3.70366 5.14 2.76776 5.52766 2.07771 6.21771C1.38766 6.90776 1 7.84366 1 8.81954V15.1778C1 16.1537 1.38766 17.0896 2.07771 17.7796C2.76776 18.4697 3.70366 18.8573 4.67954 18.8573H9.52917L8.35908 17.2015L4.82304 16.1197C4.51117 16.0203 4.23916 15.8239 4.04659 15.5592C3.85401 15.2945 3.75092 14.9753 3.7523 14.6479V9.37147C3.74976 9.04385 3.85241 8.72406 4.04515 8.45913C4.23789 8.19419 4.51055 7.99809 4.82304 7.89965L8.35908 6.79579L9.51445 5.14ZM19.3388 5.14H14.4892L15.6593 6.79579L19.1953 7.89965C19.5074 7.99822 19.7796 8.19447 19.9717 8.45947C20.1638 8.72446 20.2657 9.04418 20.2624 9.37147V14.6479C20.2646 14.9749 20.1622 15.2941 19.9703 15.5589C19.7783 15.8236 19.5068 16.0202 19.1953 16.1197L15.6593 17.2015L14.4892 18.8573H19.3388C19.8213 18.8578 20.2991 18.7628 20.7447 18.5779C21.1903 18.3929 21.5949 18.1216 21.9352 17.7796C22.2755 17.4376 22.5448 17.0316 22.7275 16.5851C22.9103 16.1385 23.0028 15.6603 22.9999 15.1778V8.81954C22.9999 7.84684 22.6148 6.91372 21.9287 6.22419C21.2427 5.53467 20.3115 5.14486 19.3388 5.14ZM15.6666 11.1376H8.33698V12.7897H15.6666V11.1376Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/alibaba-cloud-line.svg b/client/packages/lowcoder-design/src/icons/remix/alibaba-cloud-line.svg new file mode 100644 index 0000000000..1a273433ae --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/alibaba-cloud-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 5C2.79086 5 1 6.79086 1 9V15C1 17.2091 2.79086 19 5 19H9L8 17H5C3.89543 17 3 16.1046 3 15V9C3 7.89543 3.89543 7 5 7H8L9 5H5ZM16 7H19C20.1046 7 21 7.89543 21 9V15C21 16.1046 20.1046 17 19 17H16L15 19H19C21.2091 19 23 17.2091 23 15V9C23 6.79086 21.2091 5 19 5H15L16 7ZM8 13H16V11H8V13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-bottom-fill.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-bottom-fill.svg new file mode 100644 index 0000000000..4fc13b7374 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-bottom-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 4C4 3.44772 4.44772 3 5 3H10C10.5523 3 11 3.44772 11 4L11 16C11 16.5523 10.5523 17 10 17H5C4.44772 17 4 16.5523 4 16L4 4ZM14 7C13.4477 7 13 7.44772 13 8V16C13 16.5523 13.4477 17 14 17H19C19.5523 17 20 16.5523 20 16V8C20 7.44772 19.5523 7 19 7L14 7ZM21 19L3 19V21H21V19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-bottom-line.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-bottom-line.svg new file mode 100644 index 0000000000..6f9a7d3b16 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-bottom-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9 5L9 15H6L6 5L9 5ZM5 3C4.44772 3 4 3.44772 4 4L4 16C4 16.5523 4.44772 17 5 17H10C10.5523 17 11 16.5523 11 16L11 4C11 3.44772 10.5523 3 10 3H5ZM15 9V15H18V9H15ZM13 8C13 7.44772 13.4477 7 14 7L19 7C19.5523 7 20 7.44772 20 8V16C20 16.5523 19.5523 17 19 17H14C13.4477 17 13 16.5523 13 16V8ZM21 19L3 19V21H21V19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-horizontal-center-fill.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-horizontal-center-fill.svg new file mode 100644 index 0000000000..4ee53f0c8e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-horizontal-center-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11 4V2H13V4H19C19.5523 4 20 4.44772 20 5V10C20 10.5523 19.5523 11 19 11H13V13H17C17.5523 13 18 13.4477 18 14V19C18 19.5523 17.5523 20 17 20H13V22H11V20H7C6.44772 20 6 19.5523 6 19V14C6 13.4477 6.44772 13 7 13H11V11H5C4.44772 11 4 10.5523 4 10V5C4 4.44772 4.44772 4 5 4H11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-horizontal-center-line.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-horizontal-center-line.svg new file mode 100644 index 0000000000..42019219e3 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-horizontal-center-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11 4V2H13V4H19C19.5523 4 20 4.44772 20 5V10C20 10.5523 19.5523 11 19 11H13V13H17C17.5523 13 18 13.4477 18 14V19C18 19.5523 17.5523 20 17 20H13V22H11V20H7C6.44772 20 6 19.5523 6 19V14C6 13.4477 6.44772 13 7 13H11V11H5C4.44772 11 4 10.5523 4 10V5C4 4.44772 4.44772 4 5 4H11ZM8 15V18H16V15H8ZM6 9H18V6H6V9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-left-fill.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-left-fill.svg new file mode 100644 index 0000000000..48731721bb --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-left-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 21V3H5V21H3ZM7 14C7 13.4477 7.44772 13 8 13H16C16.5523 13 17 13.4477 17 14V19C17 19.5523 16.5523 20 16 20H8C7.44772 20 7 19.5523 7 19V14ZM8 4C7.44772 4 7 4.44772 7 5V10C7 10.5523 7.44772 11 8 11H20C20.5523 11 21 10.5523 21 10V5C21 4.44772 20.5523 4 20 4H8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-left-line.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-left-line.svg new file mode 100644 index 0000000000..98172d2a7d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-left-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 21V3H5V21H3ZM9 15H15V18H9V15ZM8 13C7.44772 13 7 13.4477 7 14V19C7 19.5523 7.44772 20 8 20H16C16.5523 20 17 19.5523 17 19V14C17 13.4477 16.5523 13 16 13H8ZM9 9H19V6H9V9ZM7 5C7 4.44772 7.44772 4 8 4H20C20.5523 4 21 4.44772 21 5V10C21 10.5523 20.5523 11 20 11H8C7.44772 11 7 10.5523 7 10V5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-right-fill.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-right-fill.svg new file mode 100644 index 0000000000..b9828b3567 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-right-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19 21V3H21V21H19ZM7 14C7 13.4477 7.44772 13 8 13H16C16.5523 13 17 13.4477 17 14V19C17 19.5523 16.5523 20 16 20H8C7.44772 20 7 19.5523 7 19V14ZM4 4C3.44772 4 3 4.44772 3 5V10C3 10.5523 3.44772 11 4 11H16C16.5523 11 17 10.5523 17 10V5C17 4.44772 16.5523 4 16 4H4Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-right-line.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-right-line.svg new file mode 100644 index 0000000000..94a34b9d24 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-right-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19 21V3H21V21H19ZM9 15H15V18H9V15ZM8 13C7.44772 13 7 13.4477 7 14V19C7 19.5523 7.44772 20 8 20H16C16.5523 20 17 19.5523 17 19V14C17 13.4477 16.5523 13 16 13H8ZM5 9H15V6H5V9ZM3 5C3 4.44772 3.44772 4 4 4H16C16.5523 4 17 4.44772 17 5V10C17 10.5523 16.5523 11 16 11H4C3.44772 11 3 10.5523 3 10V5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-top-fill.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-top-fill.svg new file mode 100644 index 0000000000..947b17dccb --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-top-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 3H3V5L21 5V3ZM14 7C13.4477 7 13 7.44772 13 8V16C13 16.5523 13.4477 17 14 17H19C19.5523 17 20 16.5523 20 16V8C20 7.44772 19.5523 7 19 7L14 7ZM4 8C4 7.44772 4.44772 7 5 7L10 7C10.5523 7 11 7.44772 11 8L11 20C11 20.5523 10.5523 21 10 21H5C4.44772 21 4 20.5523 4 20L4 8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-top-line.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-top-line.svg new file mode 100644 index 0000000000..51872b52fd --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-top-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 3H3V5L21 5V3ZM15 9V15H18V9H15ZM13 8C13 7.44772 13.4477 7 14 7L19 7C19.5523 7 20 7.44772 20 8V16C20 16.5523 19.5523 17 19 17H14C13.4477 17 13 16.5523 13 16V8ZM9 9L9 19H6L6 9H9ZM5 7C4.44772 7 4 7.44772 4 8L4 20C4 20.5523 4.44772 21 5 21H10C10.5523 21 11 20.5523 11 20L11 8C11 7.44772 10.5523 7 10 7L5 7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-vertical-center-fill.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-vertical-center-fill.svg new file mode 100644 index 0000000000..c13c71413e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-vertical-center-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 19C4 19.5523 4.44772 20 5 20H10C10.5523 20 11 19.5523 11 19V13H13V17C13 17.5523 13.4477 18 14 18H19C19.5523 18 20 17.5523 20 17V13H22V11H20V7C20 6.44772 19.5523 6 19 6L14 6C13.4477 6 13 6.44772 13 7V11H11V5C11 4.44771 10.5523 4 10 4H5C4.44771 4 4 4.44772 4 5L4 11H2V13H4L4 19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/align-item-vertical-center-line.svg b/client/packages/lowcoder-design/src/icons/remix/align-item-vertical-center-line.svg new file mode 100644 index 0000000000..5bcc8e843d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/align-item-vertical-center-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9 18L9 6L6 6L6 18H9ZM5 20C4.44772 20 4 19.5523 4 19L4 13H2V11H4L4 5C4 4.44771 4.44771 4 5 4H10C10.5523 4 11 4.44771 11 5V11H13V7C13 6.44771 13.4477 6 14 6L19 6C19.5523 6 20 6.44772 20 7V11H22V13H20V17C20 17.5523 19.5523 18 19 18H14C13.4477 18 13 17.5523 13 17V13H11V19C11 19.5523 10.5523 20 10 20H5ZM15 16H18V8L15 8V16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/anthropic-fill.svg b/client/packages/lowcoder-design/src/icons/remix/anthropic-fill.svg new file mode 100644 index 0000000000..fc27aa712b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/anthropic-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.7645 5H13.4568L19.3799 20H22.6107L16.7645 5ZM7.22604 5L1.37988 20H4.68758L5.99527 16.8462H12.1491L13.3799 19.9231H16.6876L10.6876 5H7.30296H7.22604ZM6.91834 14.0769L8.91834 8.76923L10.9953 14.0769H6.99527H6.91834Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/anthropic-line.svg b/client/packages/lowcoder-design/src/icons/remix/anthropic-line.svg new file mode 100644 index 0000000000..0235928119 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/anthropic-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.1219 5H16.2678L22.1012 20H19.9553L14.1219 5ZM7.65986 5H10.3411L16.1103 20H13.9675L12.429 16H5.57192L4.03345 20H1.89062L7.65986 5ZM11.6598 14L9.00047 7.08577L6.34115 14H11.6598Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/apps-2-add-fill.svg b/client/packages/lowcoder-design/src/icons/remix/apps-2-add-fill.svg new file mode 100644 index 0000000000..89b019d8d0 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/apps-2-add-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 7C2.5 9.48528 4.51472 11.5 7 11.5C9.48528 11.5 11.5 9.48528 11.5 7C11.5 4.51472 9.48528 2.5 7 2.5C4.51472 2.5 2.5 4.51472 2.5 7ZM2.5 17C2.5 19.4853 4.51472 21.5 7 21.5C9.48528 21.5 11.5 19.4853 11.5 17C11.5 14.5147 9.48528 12.5 7 12.5C4.51472 12.5 2.5 14.5147 2.5 17ZM12.5 17C12.5 19.4853 14.5147 21.5 17 21.5C19.4853 21.5 21.5 19.4853 21.5 17C21.5 14.5147 19.4853 12.5 17 12.5C14.5147 12.5 12.5 14.5147 12.5 17ZM16 11V8H13V6H16V3H18V6H21V8H18V11H16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/apps-2-add-line.svg b/client/packages/lowcoder-design/src/icons/remix/apps-2-add-line.svg new file mode 100644 index 0000000000..2712485591 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/apps-2-add-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 7C2.5 9.48528 4.51472 11.5 7 11.5C9.48528 11.5 11.5 9.48528 11.5 7C11.5 4.51472 9.48528 2.5 7 2.5C4.51472 2.5 2.5 4.51472 2.5 7ZM2.5 17C2.5 19.4853 4.51472 21.5 7 21.5C9.48528 21.5 11.5 19.4853 11.5 17C11.5 14.5147 9.48528 12.5 7 12.5C4.51472 12.5 2.5 14.5147 2.5 17ZM12.5 17C12.5 19.4853 14.5147 21.5 17 21.5C19.4853 21.5 21.5 19.4853 21.5 17C21.5 14.5147 19.4853 12.5 17 12.5C14.5147 12.5 12.5 14.5147 12.5 17ZM9.5 7C9.5 8.38071 8.38071 9.5 7 9.5C5.61929 9.5 4.5 8.38071 4.5 7C4.5 5.61929 5.61929 4.5 7 4.5C8.38071 4.5 9.5 5.61929 9.5 7ZM9.5 17C9.5 18.3807 8.38071 19.5 7 19.5C5.61929 19.5 4.5 18.3807 4.5 17C4.5 15.6193 5.61929 14.5 7 14.5C8.38071 14.5 9.5 15.6193 9.5 17ZM19.5 17C19.5 18.3807 18.3807 19.5 17 19.5C15.6193 19.5 14.5 18.3807 14.5 17C14.5 15.6193 15.6193 14.5 17 14.5C18.3807 14.5 19.5 15.6193 19.5 17ZM16 11V8H13V6H16V3H18V6H21V8H18V11H16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/apps-2-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/apps-2-ai-fill.svg new file mode 100644 index 0000000000..0d14e9ac59 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/apps-2-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 7C2.5 9.48528 4.51472 11.5 7 11.5C9.48528 11.5 11.5 9.48528 11.5 7C11.5 4.51472 9.48528 2.5 7 2.5C4.51472 2.5 2.5 4.51472 2.5 7ZM2.5 17C2.5 19.4853 4.51472 21.5 7 21.5C9.48528 21.5 11.5 19.4853 11.5 17C11.5 14.5147 9.48528 12.5 7 12.5C4.51472 12.5 2.5 14.5147 2.5 17ZM12.5 17C12.5 19.4853 14.5147 21.5 17 21.5C19.4853 21.5 21.5 19.4853 21.5 17C21.5 14.5147 19.4853 12.5 17 12.5C14.5147 12.5 12.5 14.5147 12.5 17ZM17.5252 11.155L17.8026 10.5186C18.297 9.38398 19.1876 8.48059 20.2988 7.98638L21.1534 7.60631C21.6155 7.4008 21.6155 6.7284 21.1534 6.52289L20.3467 6.16406C19.2068 5.65713 18.3002 4.72031 17.8143 3.54712L17.5295 2.85945C17.3309 2.38018 16.669 2.38018 16.4705 2.85945L16.1856 3.54712C15.6997 4.72031 14.7932 5.65713 13.6534 6.16406L12.8466 6.52289C12.3845 6.7284 12.3845 7.4008 12.8466 7.60631L13.7011 7.98638C14.8124 8.48059 15.7029 9.38398 16.1974 10.5186L16.4748 11.155C16.6778 11.6209 17.3222 11.6209 17.5252 11.155Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/apps-2-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/apps-2-ai-line.svg new file mode 100644 index 0000000000..8120843ded --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/apps-2-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 7C2.5 9.48528 4.51472 11.5 7 11.5C9.48528 11.5 11.5 9.48528 11.5 7C11.5 4.51472 9.48528 2.5 7 2.5C4.51472 2.5 2.5 4.51472 2.5 7ZM2.5 17C2.5 19.4853 4.51472 21.5 7 21.5C9.48528 21.5 11.5 19.4853 11.5 17C11.5 14.5147 9.48528 12.5 7 12.5C4.51472 12.5 2.5 14.5147 2.5 17ZM12.5 17C12.5 19.4853 14.5147 21.5 17 21.5C19.4853 21.5 21.5 19.4853 21.5 17C21.5 14.5147 19.4853 12.5 17 12.5C14.5147 12.5 12.5 14.5147 12.5 17ZM9.5 7C9.5 8.38071 8.38071 9.5 7 9.5C5.61929 9.5 4.5 8.38071 4.5 7C4.5 5.61929 5.61929 4.5 7 4.5C8.38071 4.5 9.5 5.61929 9.5 7ZM9.5 17C9.5 18.3807 8.38071 19.5 7 19.5C5.61929 19.5 4.5 18.3807 4.5 17C4.5 15.6193 5.61929 14.5 7 14.5C8.38071 14.5 9.5 15.6193 9.5 17ZM19.5 17C19.5 18.3807 18.3807 19.5 17 19.5C15.6193 19.5 14.5 18.3807 14.5 17C14.5 15.6193 15.6193 14.5 17 14.5C18.3807 14.5 19.5 15.6193 19.5 17ZM17.5252 11.155L17.8026 10.5186C18.297 9.38398 19.1876 8.48059 20.2988 7.98638L21.1534 7.60631C21.6155 7.4008 21.6155 6.7284 21.1534 6.52289L20.3467 6.16406C19.2068 5.65713 18.3002 4.72031 17.8143 3.54712L17.5295 2.85945C17.3309 2.38018 16.669 2.38018 16.4705 2.85945L16.1856 3.54712C15.6997 4.72031 14.7932 5.65713 13.6534 6.16406L12.8466 6.52289C12.3845 6.7284 12.3845 7.4008 12.8466 7.60631L13.7011 7.98638C14.8124 8.48059 15.7029 9.38398 16.1974 10.5186L16.4748 11.155C16.6778 11.6209 17.3222 11.6209 17.5252 11.155Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-down-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-down-box-fill.svg new file mode 100644 index 0000000000..c35478490d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-down-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM11.9996 17.656L6.0498 11.7062H10.9996V6.34229H12.9996V11.7062H17.9493L11.9996 17.656Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-down-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-down-box-line.svg new file mode 100644 index 0000000000..c3c4882699 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-down-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM11.0005 6.34375V13.829L7.75789 10.5864L6.34367 12.0006L12.0005 17.6575L17.6574 12.0006L16.2432 10.5864L13.0005 13.829V6.34375H11.0005Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-fill.svg index 196fb72c80..60d3e0767b 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 19.1642L18.2071 12.9571L16.7929 11.5429L12 16.3358L7.20711 11.5429L5.79289 12.9571L12 19.1642ZM12 13.5143L18.2071 7.30722L16.7929 5.89301L12 10.6859L7.20711 5.89301L5.79289 7.30722L12 13.5143Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 19.1642L18.2071 12.9571L16.7929 11.5429L12 16.3358L7.20712 11.5429L5.79291 12.9571L12 19.1642ZM12 13.5143L18.2071 7.30722L16.7929 5.89301L12 10.6859L7.20712 5.89301L5.79291 7.30722L12 13.5143Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-line.svg index 196fb72c80..60d3e0767b 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-down-double-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 19.1642L18.2071 12.9571L16.7929 11.5429L12 16.3358L7.20711 11.5429L5.79289 12.9571L12 19.1642ZM12 13.5143L18.2071 7.30722L16.7929 5.89301L12 10.6859L7.20711 5.89301L5.79289 7.30722L12 13.5143Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 19.1642L18.2071 12.9571L16.7929 11.5429L12 16.3358L7.20712 11.5429L5.79291 12.9571L12 19.1642ZM12 13.5143L18.2071 7.30722L16.7929 5.89301L12 10.6859L7.20712 5.89301L5.79291 7.30722L12 13.5143Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-box-fill.svg new file mode 100644 index 0000000000..0d69d3f436 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM6.34277 11.9996L12.2925 6.0498V10.9996H17.6565V12.9996H12.2925V17.9493L6.34277 11.9996Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-box-line.svg new file mode 100644 index 0000000000..bb88b96e47 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM6.3436 12.001L12.0005 6.34412L13.4147 7.75834L10.172 11.001H17.6573V13.001H10.172L13.4147 16.2436L12.0005 17.6578L6.3436 12.001Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-fill.svg index 48ae6cefd5..d2b489d5d9 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.83578 12L11.0429 18.2071L12.4571 16.7929L7.66421 12L12.4571 7.20712L11.0429 5.79291L4.83578 12ZM10.4857 12L16.6928 18.2071L18.107 16.7929L13.3141 12L18.107 7.20712L16.6928 5.79291L10.4857 12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.83582 12L11.0429 18.2071L12.4571 16.7929L7.66424 12L12.4571 7.20712L11.0429 5.79291L4.83582 12ZM10.4857 12L16.6928 18.2071L18.107 16.7929L13.3141 12L18.107 7.20712L16.6928 5.79291L10.4857 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-line.svg index 48ae6cefd5..d2b489d5d9 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-double-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.83578 12L11.0429 18.2071L12.4571 16.7929L7.66421 12L12.4571 7.20712L11.0429 5.79291L4.83578 12ZM10.4857 12L16.6928 18.2071L18.107 16.7929L13.3141 12L18.107 7.20712L16.6928 5.79291L10.4857 12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.83582 12L11.0429 18.2071L12.4571 16.7929L7.66424 12L12.4571 7.20712L11.0429 5.79291L4.83582 12ZM10.4857 12L16.6928 18.2071L18.107 16.7929L13.3141 12L18.107 7.20712L16.6928 5.79291L10.4857 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-down-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-down-box-fill.svg new file mode 100644 index 0000000000..60d068aa37 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-down-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM8 15.9991V7.58489L11.5 11.0849L15.2929 7.29199L16.7071 8.70621L12.9142 12.4991L16.4142 15.9991H8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-down-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-down-box-line.svg new file mode 100644 index 0000000000..939b918471 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-down-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM8 16.001V8.00098H10V12.5868L15.2929 7.29387L16.7071 8.70808L11.4142 14.001H16V16.001H8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-up-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-up-box-fill.svg new file mode 100644 index 0000000000..9c213bd29b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-up-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM8 8H16.4142L12.9142 11.5L16.7071 15.2929L15.2929 16.7071L11.5 12.9142L8 16.4142V8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-up-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-up-box-line.svg new file mode 100644 index 0000000000..f514b04dae --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-up-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM8 8V16H10V11.4142L15.2929 16.7071L16.7071 15.2929L11.4142 10H16V8H8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-fill.svg index a8d801646f..fd63e92e6a 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.36853 12L13.1162 3.03212L14.8838 3.9679L10.6315 12L14.8838 20.0321L13.1162 20.9679L8.36853 12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.3685 12L13.1162 3.03212L14.8838 3.9679L10.6315 12L14.8838 20.0321L13.1162 20.9679L8.3685 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-line.svg index a8d801646f..fd63e92e6a 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-left-wide-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.36853 12L13.1162 3.03212L14.8838 3.9679L10.6315 12L14.8838 20.0321L13.1162 20.9679L8.36853 12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.3685 12L13.1162 3.03212L14.8838 3.9679L10.6315 12L14.8838 20.0321L13.1162 20.9679L8.3685 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-right-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-right-box-fill.svg new file mode 100644 index 0000000000..1ea22a404f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-right-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM17.6575 11.9996L11.7077 17.9493V12.9996H6.34375V10.9996H11.7077V6.0498L17.6575 11.9996Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-right-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-right-box-line.svg new file mode 100644 index 0000000000..04ab615d73 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-right-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM17.6569 12L12 17.6568L10.5858 16.2426L13.8284 13H6.34315V11L13.8284 11L10.5858 7.75732L12 6.34311L17.6569 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-right-down-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-right-down-box-fill.svg new file mode 100644 index 0000000000..bfe769f374 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-right-down-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM16.0001 15.9991H7.58586L11.0859 12.4991L7.29297 8.70621L8.70718 7.29199L12.5001 11.0849L16.0001 7.58489V15.9991Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-right-down-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-right-down-box-line.svg new file mode 100644 index 0000000000..bd9c4626cb --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-right-down-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM16 16H8V14H12.5858L7.29289 8.70711L8.70711 7.29289L14 12.5858V8H16V16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-right-up-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-right-up-box-fill.svg new file mode 100644 index 0000000000..760b4dd249 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-right-up-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM16.0001 8V16.4142L12.5001 12.9142L8.70718 16.7071L7.29297 15.2929L11.0859 11.5L7.58586 8H16.0001Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-right-up-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-right-up-box-line.svg new file mode 100644 index 0000000000..69b11582ab --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-right-up-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM16 8V16H14V11.4142L8.70711 16.7071L7.29289 15.2929L12.5858 10H8V8H16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-up-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-up-box-fill.svg new file mode 100644 index 0000000000..c5ec4b95a8 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-up-box-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM11.9996 6.34326L17.9493 12.293H12.9996V17.657H10.9996V12.293H6.0498L11.9996 6.34326Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-up-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-up-box-line.svg new file mode 100644 index 0000000000..64d7667da4 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-up-box-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 3H4C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3ZM5 19V5H19V19H5ZM12 6.34311L6.34315 12L7.75736 13.4142L11 10.1715V17.6568H13V10.1715L16.2426 13.4142L17.6569 12L12 6.34311Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-fill.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-fill.svg index 53a393175b..ef2b9da3fc 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 8.36853L20.9679 13.1162L20.0321 14.8838L12 10.6315L3.96788 14.8838L3.0321 13.1162L12 8.36853Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 8.36853L20.9679 13.1162L20.0321 14.8838L12 10.6315L3.9679 14.8838L3.03212 13.1162L12 8.36853Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-line.svg b/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-line.svg index 53a393175b..ef2b9da3fc 100644 --- a/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/arrow-up-wide-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 8.36853L20.9679 13.1162L20.0321 14.8838L12 10.6315L3.96788 14.8838L3.0321 13.1162L12 8.36853Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 8.36853L20.9679 13.1162L20.0321 14.8838L12 10.6315L3.9679 14.8838L3.03212 13.1162L12 8.36853Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/bar-chart-box-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/bar-chart-box-ai-fill.svg new file mode 100644 index 0000000000..343ea056c8 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/bar-chart-box-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM22 20V10.6586C21.3744 10.8797 20.7013 11 20 11C18.9071 11 17.8825 10.7078 17 10.1973V17H15V10H16.6822C15.0655 8.92508 14 7.08697 14 5C14 4.29873 14.1203 3.62556 14.3414 3H3C2.44772 3 2 3.44772 2 4V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20ZM7 13H9V17H7V13ZM11 7H13V17H11V7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/bar-chart-box-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/bar-chart-box-ai-line.svg new file mode 100644 index 0000000000..1b4b132986 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/bar-chart-box-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM2 4C2 3.44772 2.44772 3 3 3H14V5H4V19H20V11H22V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4ZM7 13H9V17H7V13ZM11 7H13V17H11V7ZM15 10H17V17H15V10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/book-shelf-fill.svg b/client/packages/lowcoder-design/src/icons/remix/book-shelf-fill.svg new file mode 100644 index 0000000000..76f96664b7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/book-shelf-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H14C14.5523 21 15 20.5523 15 20V10.6973L17.0215 20.2076C17.1363 20.7479 17.6673 21.0927 18.2075 20.9779L21.142 20.3541C21.6822 20.2393 22.027 19.7083 21.9122 19.1681L19.0015 5.47402C18.8866 4.9338 18.3556 4.58896 17.8154 4.70378L15 5.30221V5C15 4.44772 14.5523 4 14 4H9C9 3.44772 8.55228 3 8 3H4ZM9 6H13V14H9V6ZM13 16V19H9V16H13ZM7 17V19H5V17H7ZM18.7699 18.8137L18.3541 16.8577L19.3323 16.6498L19.748 18.6058L18.7699 18.8137Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/book-shelf-line.svg b/client/packages/lowcoder-design/src/icons/remix/book-shelf-line.svg new file mode 100644 index 0000000000..485baadd53 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/book-shelf-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H14C14.5523 21 15 20.5523 15 20V15.2973L15.9995 19.9996C16.1143 20.5398 16.6454 20.8847 17.1856 20.7699L21.0982 19.9382C21.6384 19.8234 21.9832 19.2924 21.8684 18.7522L18.9576 5.0581C18.8428 4.51788 18.3118 4.17304 17.7716 4.28786L14.9927 4.87853C14.9328 4.38353 14.5112 4 14 4H10C10 3.44772 9.55228 3 9 3H4ZM10 6H13V14H10V6ZM10 19V16H13V19H10ZM8 5V15H5V5H8ZM8 17V19H5V17H8ZM17.3321 16.6496L19.2884 16.2338L19.7042 18.1898L17.7479 18.6057L17.3321 16.6496ZM16.9163 14.6933L15.253 6.86789L17.2092 6.45207L18.8726 14.2775L16.9163 14.6933Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/brain-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/brain-2-fill.svg new file mode 100644 index 0000000000..e8318dac48 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/brain-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 2C6.567 2 5 3.567 5 5.5C5 5.68016 5.01364 5.85714 5.03993 6.02997C3.32436 6.25523 2 7.72295 2 9.5C2 10.4793 2.40223 11.3647 3.05051 12C2.40223 12.6353 2 13.5207 2 14.5C2 15.9018 2.82359 17.1104 4.01353 17.6693C4.00457 17.7785 4 17.8888 4 18C4 20.2091 5.79086 22 8 22C9.19469 22 10.2671 21.4762 11 20.6458V3.05051C10.3647 2.40223 9.47934 2 8.5 2ZM13 3.05051V20.6458C13.7329 21.4762 14.8053 22 16 22C18.2091 22 20 20.2091 20 18C20 17.8888 19.9954 17.7785 19.9865 17.6693C21.1764 17.1104 22 15.9018 22 14.5C22 13.5207 21.5978 12.6353 20.9495 12C21.5978 11.3647 22 10.4793 22 9.5C22 7.72295 20.6756 6.25523 18.9601 6.02997C18.9864 5.85714 19 5.68016 19 5.5C19 3.567 17.433 2 15.5 2C14.5207 2 13.6353 2.40223 13 3.05051Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/brain-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/brain-2-line.svg new file mode 100644 index 0000000000..07599aed13 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/brain-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7 6C7 6.23676 7.04072 6.46184 7.11469 6.66999C7.22686 6.98559 7.17357 7.33638 6.97276 7.60444C6.77194 7.8725 6.45026 8.02222 6.11585 8.00327C6.0776 8.0011 6.03898 8 6 8C4.89543 8 4 8.89543 4 10C4 10.5129 4.19174 10.9786 4.50903 11.3331C4.84885 11.7128 4.84885 12.2872 4.50903 12.6669C4.19174 13.0214 4 13.4871 4 14C4 14.8842 4.57447 15.6369 5.37327 15.9001C5.84924 16.057 6.1356 16.5419 6.04308 17.0345C6.01489 17.1846 6 17.3401 6 17.5C6 18.8807 7.11929 20 8.5 20C9.75862 20 10.8015 19.069 10.9746 17.8583C10.9806 17.8165 10.9891 17.7756 11 17.7358V6C11 4.89543 10.1046 4 9 4C7.89543 4 7 4.89543 7 6ZM13 17.7358C13.0109 17.7756 13.0194 17.8165 13.0254 17.8583C13.1985 19.069 14.2414 20 15.5 20C16.8807 20 18 18.8807 18 17.5C18 17.3401 17.9851 17.1846 17.9569 17.0345C17.8644 16.5419 18.1508 16.057 18.6267 15.9001C19.4255 15.6369 20 14.8842 20 14C20 13.4871 19.8083 13.0214 19.491 12.6669C19.1511 12.2872 19.1511 11.7128 19.491 11.3331C19.8083 10.9786 20 10.5129 20 10C20 8.89543 19.1046 8 18 8C17.961 8 17.9224 8.0011 17.8841 8.00327C17.5497 8.02222 17.2281 7.8725 17.0272 7.60444C16.8264 7.33638 16.7731 6.98559 16.8853 6.66999C16.9593 6.46184 17 6.23676 17 6C17 4.89543 16.1046 4 15 4C13.8954 4 13 4.89543 13 6V17.7358ZM9 2C10.1947 2 11.2671 2.52376 12 3.35418C12.7329 2.52376 13.8053 2 15 2C17.2091 2 19 3.79086 19 6C19 6.04198 18.9994 6.08382 18.9981 6.12552C20.7243 6.56889 22 8.13546 22 10C22 10.728 21.8049 11.4116 21.4646 12C21.8049 12.5884 22 13.272 22 14C22 15.4817 21.1949 16.7734 19.9999 17.4646L20 17.5C20 19.9853 17.9853 22 15.5 22C14.0859 22 12.8248 21.3481 12 20.3285C11.1752 21.3481 9.91405 22 8.5 22C6.01472 22 4 19.9853 4 17.5L4.00014 17.4646C2.80512 16.7734 2 15.4817 2 14C2 13.272 2.19513 12.5884 2.53536 12C2.19513 11.4116 2 10.728 2 10C2 8.13546 3.27573 6.56889 5.00194 6.12552C5.00065 6.08382 5 6.04198 5 6C5 3.79086 6.79086 2 9 2Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/brush-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/brush-ai-fill.svg new file mode 100644 index 0000000000..a5d0321e9e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/brush-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.7134 7.12811L4.46682 7.69379C4.28637 8.10792 3.71357 8.10792 3.53312 7.69379L3.28656 7.12811C2.84706 6.11947 2.05545 5.31641 1.06767 4.87708L0.308047 4.53922C-0.102682 4.35653 -0.102682 3.75881 0.308047 3.57612L1.0252 3.25714C2.03838 2.80651 2.84417 1.97373 3.27612 0.930828L3.52932 0.319534C3.70578 -0.106511 4.29417 -0.106511 4.47063 0.319534L4.72382 0.930828C5.15577 1.97373 5.96158 2.80651 6.9748 3.25714L7.69188 3.57612C8.10271 3.75881 8.10271 4.35653 7.69188 4.53922L6.93228 4.87708C5.94451 5.31641 5.15288 6.11947 4.7134 7.12811ZM18.2278 2.3713L13.2886 6.21289C9.34224 5.23923 5.55843 7.54646 4.5 11.4966C4.39826 11.8763 4.36647 12.262 4.33317 12.666C4.21829 14.0599 4.08554 15.6707 1 17.9966C3.5 19.4966 8 20.9984 11.5016 20.9984C14.8142 20.9984 17.8463 18.7896 18.7444 15.4377C19.0836 14.1719 19.0778 12.895 18.7847 11.7067L22.6253 6.76879C22.9349 6.3707 22.8997 5.80435 22.543 5.44774L19.5488 2.45355C19.1922 2.09694 18.6259 2.06168 18.2278 2.3713ZM16.8952 8.2852C16.8319 8.21952 16.7673 8.15494 16.7015 8.09149L15.5769 6.96685L18.7589 4.49198L20.5046 6.23774L18.0297 9.41972L16.8952 8.2852Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/brush-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/brush-ai-line.svg new file mode 100644 index 0000000000..d39e9e9048 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/brush-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.7134 7.12811L4.46682 7.69379C4.28637 8.10792 3.71357 8.10792 3.53312 7.69379L3.28656 7.12811C2.84706 6.11947 2.05545 5.31641 1.06767 4.87708L0.308047 4.53922C-0.102682 4.35653 -0.102682 3.75881 0.308047 3.57612L1.0252 3.25714C2.03838 2.80651 2.84417 1.97373 3.27612 0.930828L3.52932 0.319534C3.70578 -0.106511 4.29417 -0.106511 4.47063 0.319534L4.72382 0.930828C5.15577 1.97373 5.96158 2.80651 6.9748 3.25714L7.69188 3.57612C8.10271 3.75881 8.10271 4.35653 7.69188 4.53922L6.93228 4.87708C5.94451 5.31641 5.15288 6.11947 4.7134 7.12811ZM15.3144 9.53285L15.4565 9.67491C16.7513 11.018 17.3306 12.9868 16.8126 14.9201C16.1644 17.3393 13.9702 18.9984 11.5016 18.9984C9.46572 18.9984 6.78847 18.3726 4.5286 17.4841C5.73449 16.0696 6.17423 14.675 6.3285 12.805C6.36574 12.3536 6.38901 12.1741 6.43185 12.0142C7.22541 9.05261 10.0168 7.40515 12.9235 8.18399C13.8549 8.43357 14.6661 8.90783 15.3144 9.53285ZM18.2278 2.3713L13.2886 6.21289C9.34224 5.23923 5.55843 7.54646 4.5 11.4966C4.39826 11.8763 4.36647 12.262 4.33317 12.666C4.21829 14.0599 4.08554 15.6707 1 17.9966C3.5 19.4966 8 20.9984 11.5016 20.9984C14.8142 20.9984 17.8463 18.7896 18.7444 15.4377C19.0836 14.1719 19.0778 12.895 18.7847 11.7067L22.6253 6.76879C22.9349 6.3707 22.8997 5.80435 22.543 5.44774L19.5488 2.45355C19.1922 2.09694 18.6259 2.06168 18.2278 2.3713ZM16.8952 8.2852C16.8319 8.21952 16.7673 8.15494 16.7015 8.09149L15.5769 6.96685L18.7589 4.49198L20.5046 6.23774L18.0297 9.41972L16.8952 8.2852Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/camera-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/camera-ai-fill.svg new file mode 100644 index 0000000000..c75b1adc5f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/camera-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM22 20V10.6586C21.3744 10.8797 20.7013 11 20 11C19.0753 11 18.1994 10.7908 17.4172 10.4172C17.7908 11.1994 18 12.0753 18 13C18 16.3137 15.3137 19 12 19C8.68629 19 6 16.3137 6 13C6 9.68629 8.68629 7 12 7C12.9247 7 13.8006 7.20919 14.5828 7.58283C14.2092 6.80057 14 5.92472 14 5C14 4.29873 14.1203 3.62556 14.3414 3H9L7 5H3C2.44772 5 2 5.44772 2 6V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20ZM12 17C9.79086 17 8 15.2091 8 13C8 10.7909 9.79086 9 12 9C14.2091 9 16 10.7909 16 13C16 15.2091 14.2091 17 12 17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/camera-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/camera-ai-line.svg new file mode 100644 index 0000000000..a178c9d40d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/camera-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM9 3H14V5H9.82843L7.82843 7H4V19H20V11H22V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V6C2 5.44772 2.44772 5 3 5H7L9 3ZM12 18C8.96243 18 6.5 15.5376 6.5 12.5C6.5 9.46243 8.96243 7 12 7C15.0376 7 17.5 9.46243 17.5 12.5C17.5 15.5376 15.0376 18 12 18ZM12 16C13.933 16 15.5 14.433 15.5 12.5C15.5 10.567 13.933 9 12 9C10.067 9 8.5 10.567 8.5 12.5C8.5 14.433 10.067 16 12 16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/camera-lens-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/camera-lens-ai-fill.svg new file mode 100644 index 0000000000..6851e8348b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/camera-lens-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM14.3094 14L9.82726 21.7633C10.5268 21.9183 11.2538 22 12 22C14.1805 22 16.198 21.3021 17.8413 20.1175L14.3094 14ZM2.4578 15C3.31516 17.7297 5.3115 19.955 7.88985 21.119L11.4226 15H2.4578ZM2 12C2 12.3375 2.01672 12.6711 2.04938 13H9.11325L4.6322 5.23859C2.99773 7.0187 2 9.39284 2 12ZM12 2C9.81949 2 7.80198 2.6979 6.15866 3.88251L9.6906 10L14.1727 2.2367C13.4732 2.08172 12.7462 2 12 2ZM22 12C22 11.6625 21.9833 11.3289 21.9506 11H14.8868L19.3678 18.7614C21.0023 16.9813 22 14.6072 22 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/camera-lens-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/camera-lens-ai-line.svg new file mode 100644 index 0000000000..91e18f3b00 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/camera-lens-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.89349 19.7058 0.89349 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM12 22C17.5228 22 22 17.5228 22 12C22 11.5972 21.9762 11.2 21.9299 10.8097L19.9437 11.0454C19.9809 11.3584 20 11.677 20 12C20 13.4577 19.6101 14.8243 18.929 16.0013L15.4641 10H17.9295L16.7755 8H12.0003L15.1686 2.51246C14.1729 2.1801 13.1074 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM12.0003 4L8.53606 10.0003L6.39495 6.29181C7.83839 4.87429 9.81744 4 12.0003 4ZM9.69076 12.0003L10.8456 10H13.1547L14.3095 12.0001L13.1548 14H10.8453L9.69076 12.0003ZM12.0001 16L9.85814 19.7101C7.81886 19.1448 6.10694 17.7921 5.07026 16H12.0001ZM12.0001 20L15.4642 14.0001L17.605 17.7082C16.1616 19.1257 14.183 20 12.0001 20ZM5.07102 7.99869L8.53588 14H4.25204C4.08751 13.3608 4 12.6906 4 12C4 10.5423 4.38987 9.17568 5.07102 7.99869Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/camera-off-line.svg b/client/packages/lowcoder-design/src/icons/remix/camera-off-line.svg index 244f2340d4..b6734dec5f 100644 --- a/client/packages/lowcoder-design/src/icons/remix/camera-off-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/camera-off-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.5859 21H3.00016C2.44787 21 2.00016 20.5523 2.00016 20V6C2.00016 5.44772 2.44787 5 3.00016 5H3.58594L1.39355 2.80762L2.80777 1.3934L22.6068 21.1924L21.1925 22.6066L19.5859 21ZM5.58594 7H4.00016V19H17.5859L15.4053 16.8194C14.4688 17.5588 13.286 18 12.0002 18C8.96259 18 6.50016 15.5376 6.50016 12.5C6.50016 11.2142 6.94141 10.0314 7.68076 9.09482L5.58594 7ZM9.11052 10.5246C8.72543 11.0868 8.50016 11.7671 8.50016 12.5C8.50016 14.433 10.0672 16 12.0002 16C12.7331 16 13.4134 15.7747 13.9756 15.3896L9.11052 10.5246ZM22.0002 17.7858L20.0002 15.7858V7H16.1717L14.1717 5H9.82858L9.52147 5.30712L8.10726 3.8929L9.00016 3H15.0002L17.0002 5H21.0002C21.5524 5 22.0002 5.44772 22.0002 6V17.7858ZM11.2633 7.04894C11.5043 7.01667 11.7503 7 12.0002 7C15.0377 7 17.5002 9.46244 17.5002 12.5C17.5002 12.7499 17.4835 12.9958 17.4512 13.2369L15.1133 10.899C14.7794 10.251 14.2492 9.72074 13.6012 9.38683L11.2633 7.04894Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.5859 21H3.00016C2.44787 21 2.00016 20.5523 2.00016 20V6.00003C2.00016 5.44775 2.44787 5.00003 3.00016 5.00003H3.58594L1.39355 2.80765L2.80777 1.39343L22.6068 21.1924L21.1925 22.6066L19.5859 21ZM5.58594 7.00003H4.00016V19H17.5859L15.4053 16.8194C14.4688 17.5588 13.286 18 12.0002 18C8.96259 18 6.50016 15.5376 6.50016 12.5C6.50016 11.2142 6.94141 10.0314 7.68076 9.09485L5.58594 7.00003ZM9.11052 10.5246C8.72543 11.0868 8.50016 11.7671 8.50016 12.5C8.50016 14.433 10.0672 16 12.0002 16C12.7331 16 13.4134 15.7748 13.9756 15.3897L9.11052 10.5246ZM22.0002 17.7858L20.0002 15.7858V7.00003H16.1717L14.1717 5.00003H9.82858L9.52147 5.30715L8.10726 3.89293L9.00016 3.00003H15.0002L17.0002 5.00003H21.0002C21.5524 5.00003 22.0002 5.44775 22.0002 6.00003V17.7858ZM11.2633 7.04897C11.5043 7.0167 11.7503 7.00003 12.0002 7.00003C15.0377 7.00003 17.5002 9.46247 17.5002 12.5C17.5002 12.7499 17.4835 12.9959 17.4512 13.2369L15.1133 10.899C14.7794 10.251 14.2492 9.72077 13.6012 9.38686L11.2633 7.04897Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/chat-ai-fill.svg new file mode 100644 index 0000000000..ff0a5180be --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM20 11C20.6986 11 21.3694 10.8806 21.9929 10.6611C21.9976 10.7735 22 10.8865 22 11C22 15.4183 18.4183 19 14 19V22.5C9 20.5 2 17.5 2 11C2 6.58172 5.58172 3 10 3H14C14.1135 3 14.2265 3.00237 14.3389 3.00705C14.1194 3.63061 14 4.30136 14 5C14 8.31371 16.6863 11 20 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/chat-ai-line.svg new file mode 100644 index 0000000000..224451e5d6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM10 3H14V5H10C6.68629 5 4 7.68629 4 11C4 14.61 6.46208 16.9656 12 19.4798V17H14C17.3137 17 20 14.3137 20 11H22C22 15.4183 18.4183 19 14 19V22.5C9 20.5 2 17.5 2 11C2 6.58172 5.58172 3 10 3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-off-fill.svg b/client/packages/lowcoder-design/src/icons/remix/chat-off-fill.svg index c5a2a8fb01..c888a3d95a 100644 --- a/client/packages/lowcoder-design/src/icons/remix/chat-off-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/chat-off-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.80777 1.3934L22.6068 21.1924L21.1925 22.6066L17.5846 18.9994L6.45516 19L2.00016 22.5V4C2.00016 3.8307 2.04223 3.67123 2.11649 3.53146L1.39355 2.80762L2.80777 1.3934ZM21.0002 3C21.5524 3 22.0002 3.44772 22.0002 4V17.785L7.21416 3H21.0002Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.80777 1.39337L22.6068 21.1924L21.1925 22.6066L17.5846 18.9994L6.45516 19L2.00016 22.5V3.99997C2.00016 3.83067 2.04223 3.6712 2.11649 3.53143L1.39355 2.80759L2.80777 1.39337ZM21.0002 2.99997C21.5524 2.99997 22.0002 3.44769 22.0002 3.99997V17.785L7.21416 2.99997H21.0002Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-search-fill.svg b/client/packages/lowcoder-design/src/icons/remix/chat-search-fill.svg new file mode 100644 index 0000000000..1f13133967 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-search-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.45455 19L2 22.5V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V12.8027C21.1175 12.2922 20.0929 12 19 12C15.6863 12 13 14.6863 13 18C13 18.3407 13.0284 18.6748 13.083 19H6.45455ZM23.9497 21.5355L22.4462 20.032C22.7981 19.4365 23 18.7418 23 18C23 15.7909 21.2091 14 19 14C16.7909 14 15 15.7909 15 18C15 20.2091 16.7909 22 19 22C19.7418 22 20.4365 21.7981 21.032 21.4462L22.5355 22.9497L23.9497 21.5355ZM21 18C21 19.1046 20.1046 20 19 20C17.8954 20 17 19.1046 17 18C17 16.8954 17.8954 16 19 16C20.1046 16 21 16.8954 21 18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-search-line.svg b/client/packages/lowcoder-design/src/icons/remix/chat-search-line.svg new file mode 100644 index 0000000000..51ca58b50a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-search-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.76282 17H13.083C13.0284 17.3252 13 17.6593 13 18C13 18.3407 13.0284 18.6748 13.083 19H6.45455L2 22.5V4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V12.8027C21.3926 12.4513 20.7179 12.2034 20 12.083V5H4V18.3851L5.76282 17ZM23.9497 21.5355L22.4462 20.032C22.7981 19.4365 23 18.7418 23 18C23 15.7909 21.2091 14 19 14C16.7909 14 15 15.7909 15 18C15 20.2091 16.7909 22 19 22C19.7418 22 20.4365 21.7981 21.032 21.4462L22.5355 22.9497L23.9497 21.5355ZM21 18C21 19.1046 20.1046 20 19 20C17.8954 20 17 19.1046 17 18C17 16.8954 17.8954 16 19 16C20.1046 16 21 16.8954 21 18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-smile-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/chat-smile-ai-fill.svg new file mode 100644 index 0000000000..cee022cc62 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-smile-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM20 11C20.6695 11 21.3134 10.8903 21.9147 10.688C21.971 11.1174 22 11.5553 22 12C22 17.5228 17.5228 22 12 22C10.2975 22 8.6944 21.5746 7.29117 20.8242L2 22L3.17581 16.7088C2.42544 15.3056 2 13.7025 2 12C2 6.47715 6.47715 2 12 2C12.9056 2 13.7831 2.12039 14.6174 2.34603C14.2221 3.14617 14 4.04715 14 5C14 8.31371 16.6863 11 20 11ZM7 12C7 14.7614 9.23858 17 12 17C14.7614 17 17 14.7614 17 12H15C15 13.6569 13.6569 15 12 15C10.3431 15 9 13.6569 9 12H7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-smile-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/chat-smile-ai-line.svg new file mode 100644 index 0000000000..0826c646d6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-smile-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM12 2C6.47715 2 2 6.47715 2 12C2 13.7025 2.42544 15.3056 3.17581 16.7088L2 22L7.29117 20.8242C8.6944 21.5746 10.2975 22 12 22C17.5228 22 22 17.5228 22 12C22 11.5975 21.9762 11.2002 21.9298 10.8094L19.9437 11.0452C19.9809 11.3579 20 11.6765 20 12C20 16.4183 16.4183 20 12 20C10.6655 20 9.38248 19.6745 8.23428 19.0605L7.58075 18.711L4.63416 19.3658L5.28896 16.4192L4.93949 15.7657C4.32549 14.6175 4 13.3345 4 12C4 7.58172 7.58172 4 12 4C12.6919 4 13.3618 4.0876 14 4.25179L14.4983 2.31487C13.6987 2.10914 12.8614 2 12 2ZM9 12H7C7 14.7614 9.23858 17 12 17C14.7614 17 17 14.7614 17 12H15C15 13.6569 13.6569 15 12 15C10.3431 15 9 13.6569 9 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-unread-fill.svg b/client/packages/lowcoder-design/src/icons/remix/chat-unread-fill.svg new file mode 100644 index 0000000000..4103ae8de7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-unread-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 7C22.6569 7 24 5.65685 24 4C24 2.34315 22.6569 1 21 1C19.3431 1 18 2.34315 18 4C18 5.65685 19.3431 7 21 7ZM21 9C21.3425 9 21.6769 8.96557 22 8.89998V18C22 18.5523 21.5523 19 21 19H6.45455L2 22.5V4C2 3.44772 2.44772 3 3 3H16.1C16.0344 3.32311 16 3.65753 16 4C16 6.76142 18.2386 9 21 9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-unread-line.svg b/client/packages/lowcoder-design/src/icons/remix/chat-unread-line.svg new file mode 100644 index 0000000000..564c5e04bf --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-unread-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 7C22.6569 7 24 5.65685 24 4C24 2.34315 22.6569 1 21 1C19.3431 1 18 2.34315 18 4C18 5.65685 19.3431 7 21 7ZM22 18V8.89998C21.6769 8.96557 21.3425 9 21 9C20.6575 9 20.3231 8.96557 20 8.89998V17H5.76282L4 18.3851V5H16.1C16.0344 4.67689 16 4.34247 16 4C16 3.65753 16.0344 3.32311 16.1 3H3C2.44772 3 2 3.44772 2 4V22.5L6.45455 19H21C21.5523 19 22 18.5523 22 18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-voice-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/chat-voice-ai-fill.svg new file mode 100644 index 0000000000..bd2c87851f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-voice-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM22 12C22 11.5553 21.971 11.1174 21.9147 10.688C21.3134 10.8903 20.6695 11 20 11C18.9071 11 17.8825 10.7078 17 10.1973V15H15V9H15.5278C14.5777 7.93849 14 6.53671 14 5C14 4.04715 14.2221 3.14617 14.6174 2.34603C13.7831 2.12039 12.9056 2 12 2C6.47715 2 2 6.47715 2 12C2 14.7614 3.11929 17.2614 4.92893 19.0711L2 22H12C17.5228 22 22 17.5228 22 12ZM11 6H13V18H11V6ZM7 15V9H9V15H7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/chat-voice-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/chat-voice-ai-line.svg new file mode 100644 index 0000000000..275840c558 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/chat-voice-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM12 2C6.47715 2 2 6.47715 2 12C2 14.7614 3.11929 17.2614 4.92893 19.0711L2 22H12C17.5228 22 22 17.5228 22 12C22 11.5975 21.9762 11.2002 21.9298 10.8094L19.9437 11.0452C19.9809 11.3579 20 11.6765 20 12C20 16.4183 16.4183 20 12 20H6.82843L7.75736 19.0711L6.34315 17.6569C4.85124 16.1649 4 14.1524 4 12C4 7.58172 7.58172 4 12 4C12.6919 4 13.3618 4.0876 14 4.25179L14.4983 2.31487C13.6987 2.10914 12.8614 2 12 2ZM9 9H7V15H9V9ZM17 9H15V15H17V9ZM13 6H11V18H13V6Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/clapperboard-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/clapperboard-ai-fill.svg new file mode 100644 index 0000000000..29a5c89eea --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/clapperboard-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM20 11C20.7013 11 21.3744 10.8797 22 10.6586V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3H5.99807L3.68867 7H5.99807L8.30747 3H11.9981L9.68867 7H11.9981L14.3075 3H14.3414C14.1203 3.62556 14 4.29873 14 5C14 8.31371 16.6863 11 20 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/clapperboard-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/clapperboard-ai-line.svg new file mode 100644 index 0000000000..a7ab75aeb5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/clapperboard-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM14.3075 3H14.3414C14.1203 3.62556 14 4.29873 14 5C14 5.70127 14.1203 6.37444 14.3414 7H11.9981L14.3075 3ZM20 11V19H4V6.46076L5.99807 3H2.9918C2.45531 3 2 3.44476 2 3.9934V20.0066C2 20.5551 2.44405 21 2.9918 21H21.0082C21.5447 21 22 20.5552 22 20.0066V11H20ZM8.30747 3L5.99807 7H9.68867L11.9981 3H8.30747Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/claude-fill.svg b/client/packages/lowcoder-design/src/icons/remix/claude-fill.svg new file mode 100644 index 0000000000..f699875fc0 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/claude-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.92 15.3L9.86 13.1L9.92 12.9L9.86 12.8H9.66L9 12.76L6.76 12.7L4.8 12.6L2.9 12.5L2.42 12.4L2 11.8L2.04 11.5L2.44 11.24L3.02 11.28L4.28 11.38L6.18 11.5L7.56 11.58L9.6 11.82H9.92L9.96 11.68L9.86 11.6L9.78 11.52L7.8 10.2L5.68 8.8L4.56 7.98L3.96 7.58L3.66 7.18L3.54 6.34L4.08 5.74L4.82 5.8L5 5.84L5.74 6.42L7.34 7.64L9.4 9.2L9.7 9.44L9.82 9.36L9.84 9.3L9.7 9.08L8.6 7L7.4 4.92L6.86 4.06L6.72 3.54C6.66 3.34 6.64 3.14 6.64 2.94L7.24 2.1L7.6 2L8.44 2.12L8.76 2.4L9.28 3.6L10.1 5.46L11.4 7.98L11.8 8.74L12 9.42L12.06 9.62H12.2V9.52L12.3 8.08L12.5 6.34L12.7 4.1L12.76 3.46L13.08 2.7L13.68 2.3L14.2 2.52L14.6 3.1L14.54 3.46L14.32 5L13.8 7.42L13.5 9.06H13.68L13.88 8.84L14.7 7.76L16.08 6.04L16.68 5.34L17.4 4.6L17.86 4.24H18.72L19.34 5.18L19.06 6.16L18.18 7.28L17.44 8.22L16.38 9.64L15.74 10.78L15.8 10.86H15.94L18.34 10.34L19.62 10.12L21.14 9.86L21.84 10.18L21.92 10.5L21.64 11.18L20 11.58L18.08 11.98L15.22 12.64L15.18 12.66L15.22 12.72L16.5 12.84L17.06 12.88H18.42L20.94 13.08L21.6 13.48L21.98 14.02L21.92 14.42L20.9 14.94L19.54 14.62L16.34 13.86L15.26 13.6H15.1V13.68L16.02 14.58L17.68 16.08L19.8 18.02L19.9 18.5L19.64 18.9L19.36 18.86L17.52 17.46L16.8 16.86L15.2 15.5H15.1V15.64L15.46 16.18L17.42 19.12L17.52 20.02L17.38 20.3L16.86 20.5L16.32 20.38L15.16 18.78L13.96 16.98L13.02 15.34L12.92 15.42L12.34 21.46L12.08 21.76L11.48 22L10.98 21.6L10.7 21L10.98 19.76L11.3 18.16L11.56 16.88L11.8 15.3L11.94 14.78V14.74H11.8L10.6 16.4L8.8 18.86L7.36 20.38L7.02 20.52L6.42 20.22L6.48 19.66L6.8 19.2L8.8 16.64L10 15.06L10.8 14.14L10.78 14.04H10.72L5.44 17.48L4.5 17.6L4.1 17.2L4.14 16.6L4.34 16.4L5.94 15.3H5.92Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/claude-line.svg b/client/packages/lowcoder-design/src/icons/remix/claude-line.svg new file mode 100644 index 0000000000..e3f457ffa7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/claude-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.64445 2.55279C8.39746 2.05881 7.79679 1.85859 7.30281 2.10558C6.80883 2.35257 6.60861 2.95324 6.8556 3.44722L9.68128 9.09859L5.06655 5.92596C4.61145 5.61308 3.98887 5.72837 3.67598 6.18348C3.3631 6.63858 3.47839 7.26116 3.9335 7.57405L9.40503 11.3357L3.05258 11.0014C2.50106 10.9724 2.03043 11.3959 2.00141 11.9474C1.97238 12.499 2.39594 12.9696 2.94747 12.9986L8.74187 13.3036L4.44532 16.168C3.9858 16.4743 3.86162 17.0952 4.16797 17.5547C4.47433 18.0142 5.0952 18.1384 5.55473 17.8321L9.19687 15.404L6.68629 18.9188C6.36528 19.3682 6.46937 19.9927 6.91879 20.3137C7.3682 20.6347 7.99275 20.5307 8.31376 20.0812L11.3471 15.8345L10.5136 20.8356C10.4228 21.3804 10.7909 21.8956 11.3356 21.9864C11.8804 22.0772 12.3956 21.7092 12.4864 21.1644L13.2883 16.3532L15.6588 20.0408C15.9575 20.5053 16.5762 20.6398 17.0408 20.3412C17.5054 20.0425 17.6399 19.4238 17.3412 18.9592L15.5553 16.1812L18.3217 18.7348C18.7276 19.1094 19.3602 19.0841 19.7348 18.6783C20.1094 18.2725 20.0841 17.6398 19.6783 17.2652L16.6427 14.4631L20.876 14.9923C21.424 15.0608 21.9238 14.6721 21.9923 14.124C22.0608 13.576 21.6721 13.0762 21.1241 13.0077L16.9342 12.484L21.2291 11.4734C21.7667 11.3469 22.0999 10.8086 21.9734 10.271C21.8469 9.73336 21.3086 9.40009 20.771 9.52659L15.1819 10.8417L19.2863 5.61783C19.6276 5.18356 19.5521 4.5549 19.1178 4.21369C18.6836 3.87247 18.0549 3.94791 17.7137 4.38218L13.8574 9.29015L14.738 3.65438C14.8233 3.10872 14.4501 2.59725 13.9044 2.51199C13.3587 2.42673 12.8473 2.79996 12.762 3.34563L11.876 9.01594L8.64445 2.55279Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/clockwise-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/clockwise-2-line.svg index 76335881ce..3256cba63b 100644 --- a/client/packages/lowcoder-design/src/icons/remix/clockwise-2-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/clockwise-2-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.5858 4.00003L8.75736 2.1716L10.1716 0.757385L14.4142 5.00003L10.1716 9.24267L8.75736 7.82845L10.5858 6.00003H8C6.34315 6.00003 5 7.34317 5 9.00003V13H3V9.00003C3 6.2386 5.23858 4.00003 8 4.00003H10.5858ZM9 11C9 10.4477 9.44772 10 10 10H20C20.5523 10 21 10.4477 21 11V21C21 21.5523 20.5523 22 20 22H10C9.44772 22 9 21.5523 9 21V11ZM11 12V20H19V12H11Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.5858 3.99997L8.75736 2.17154L10.1716 0.757324L14.4142 4.99997L10.1716 9.24261L8.75736 7.82839L10.5858 5.99997H8C6.34315 5.99997 5 7.34311 5 8.99997V13H3V8.99997C3 6.23854 5.23858 3.99997 8 3.99997H10.5858ZM9 11C9 10.4477 9.44772 9.99997 10 9.99997H20C20.5523 9.99997 21 10.4477 21 11V21C21 21.5522 20.5523 22 20 22H10C9.44772 22 9 21.5522 9 21V11ZM11 12V20H19V12H11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/close-large-fill.svg b/client/packages/lowcoder-design/src/icons/remix/close-large-fill.svg new file mode 100644 index 0000000000..2e891d0883 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/close-large-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.5859 12L2.79297 4.20706L4.20718 2.79285L12.0001 10.5857L19.793 2.79285L21.2072 4.20706L13.4143 12L21.2072 19.7928L19.793 21.2071L12.0001 13.4142L4.20718 21.2071L2.79297 19.7928L10.5859 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/close-large-line.svg b/client/packages/lowcoder-design/src/icons/remix/close-large-line.svg new file mode 100644 index 0000000000..2e891d0883 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/close-large-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.5859 12L2.79297 4.20706L4.20718 2.79285L12.0001 10.5857L19.793 2.79285L21.2072 4.20706L13.4143 12L21.2072 19.7928L19.793 21.2071L12.0001 13.4142L4.20718 21.2071L2.79297 19.7928L10.5859 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/closed-captioning-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/closed-captioning-ai-fill.svg new file mode 100644 index 0000000000..7ca60921fe --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/closed-captioning-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM22 20V10.6586C21.3744 10.8797 20.7013 11 20 11C19.1201 11 18.2845 10.8106 17.5316 10.4703L17.4153 10.5866C17.0534 10.2241 16.553 10 16 10C14.895 10 14 10.895 14 12C14 13.105 14.895 14 16 14C16.5525 14 17.0525 13.7762 17.4144 13.4144L18.828 14.828C18.104 15.552 17.104 16 16 16C13.792 16 12 14.208 12 12C12 10.1752 13.224 8.63446 14.8953 8.1547C14.3277 7.23814 14 6.15734 14 5C14 4.29873 14.1203 3.62556 14.3414 3H3C2.44772 3 2 3.44772 2 4V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20ZM9 8C10.1045 8 11.1049 8.44841 11.829 9.173L10.4153 10.5866C10.0483 10.22 9.55 10 9 10C7.895 10 7 10.895 7 12C7 13.105 7.895 14 9 14C9.5525 14 10.0525 13.7762 10.4144 13.4144L11.828 14.828C11.1 15.55 10.1 16 9 16C6.792 16 5 14.208 5 12C5 9.792 6.792 8 9 8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/closed-captioning-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/closed-captioning-ai-line.svg new file mode 100644 index 0000000000..ae47eb6c04 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/closed-captioning-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM3 3H14V5H4V19H20V11H22V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3ZM9 8C10.1045 8 11.1049 8.44841 11.829 9.173L10.4153 10.5866C10.0534 10.2241 9.55299 10 9 10C7.895 10 7 10.895 7 12C7 13.105 7.895 14 9 14C9.5525 14 10.0525 13.7762 10.4144 13.4144L11.828 14.828C11.104 15.552 10.104 16 9 16C6.792 16 5 14.208 5 12C5 9.792 6.792 8 9 8ZM16 8C17.1045 8 18.1049 8.44841 18.829 9.173L17.4153 10.5866C17.0534 10.2241 16.553 10 16 10C14.895 10 14 10.895 14 12C14 13.105 14.895 14 16 14C16.5525 14 17.0525 13.7762 17.4144 13.4144L18.828 14.828C18.104 15.552 17.104 16 16 16C13.792 16 12 14.208 12 12C12 9.792 13.792 8 16 8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/code-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/code-ai-fill.svg new file mode 100644 index 0000000000..613628dd00 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/code-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.7134 10.1281L17.4668 10.6938C17.2864 11.1079 16.7136 11.1079 16.5331 10.6938L16.2866 10.1281C15.8471 9.11947 15.0555 8.31641 14.0677 7.87708L13.308 7.53922C12.8973 7.35653 12.8973 6.75881 13.308 6.57612L14.0252 6.25714C15.0384 5.80651 15.8442 4.97373 16.2761 3.93083L16.5293 3.31953C16.7058 2.89349 17.2942 2.89349 17.4706 3.31953L17.7238 3.93083C18.1558 4.97373 18.9616 5.80651 19.9748 6.25714L20.6919 6.57612C21.1027 6.75881 21.1027 7.35653 20.6919 7.53922L19.9323 7.87708C18.9445 8.31641 18.1529 9.11947 17.7134 10.1281ZM2.82843 12.0001L7.07107 16.2428L5.65685 17.657L0 12.0001L5.65685 6.34326L7.07107 7.75748L2.82843 12.0001ZM18.3429 17.6572L23.9998 12.0003L21.1714 9.17188L19.7571 10.5861L21.1714 12.0003L16.9287 16.2429L18.3429 17.6572Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/code-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/code-ai-line.svg new file mode 100644 index 0000000000..613628dd00 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/code-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.7134 10.1281L17.4668 10.6938C17.2864 11.1079 16.7136 11.1079 16.5331 10.6938L16.2866 10.1281C15.8471 9.11947 15.0555 8.31641 14.0677 7.87708L13.308 7.53922C12.8973 7.35653 12.8973 6.75881 13.308 6.57612L14.0252 6.25714C15.0384 5.80651 15.8442 4.97373 16.2761 3.93083L16.5293 3.31953C16.7058 2.89349 17.2942 2.89349 17.4706 3.31953L17.7238 3.93083C18.1558 4.97373 18.9616 5.80651 19.9748 6.25714L20.6919 6.57612C21.1027 6.75881 21.1027 7.35653 20.6919 7.53922L19.9323 7.87708C18.9445 8.31641 18.1529 9.11947 17.7134 10.1281ZM2.82843 12.0001L7.07107 16.2428L5.65685 17.657L0 12.0001L5.65685 6.34326L7.07107 7.75748L2.82843 12.0001ZM18.3429 17.6572L23.9998 12.0003L21.1714 9.17188L19.7571 10.5861L21.1714 12.0003L16.9287 16.2429L18.3429 17.6572Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/coins-fill.svg b/client/packages/lowcoder-design/src/icons/remix/coins-fill.svg index 9822088bee..fd0a93bc4f 100644 --- a/client/packages/lowcoder-design/src/icons/remix/coins-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/coins-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.0049 2.00275C18.4232 2.00275 22.0049 5.58447 22.0049 10.0027C22.0049 13.2474 20.0733 16.0408 17.2973 17.296C16.0422 20.0717 13.249 22.0027 10.0049 22.0027C5.5866 22.0027 2.00488 18.421 2.00488 14.0027C2.00488 10.7586 3.9359 7.96548 6.71122 6.71006C7.96681 3.93431 10.7603 2.00275 14.0049 2.00275ZM11.0049 9.00275H9.00488V10.0027C7.62417 10.0027 6.50488 11.122 6.50488 12.5027C6.50488 13.8282 7.53642 14.9128 8.84051 14.9974L9.00488 15.0027H11.0049L11.0948 15.0108C11.328 15.0531 11.5049 15.2573 11.5049 15.5027C11.5049 15.7482 11.328 15.9524 11.0948 15.9947L11.0049 16.0027H7.00488V18.0027H9.00488V19.0027H11.0049V18.0027C12.3856 18.0027 13.5049 16.8835 13.5049 15.5027C13.5049 14.1773 12.4733 13.0927 11.1693 13.0081L11.0049 13.0027H9.00488L8.91501 12.9947C8.68176 12.9524 8.50488 12.7482 8.50488 12.5027C8.50488 12.2573 8.68176 12.0531 8.91501 12.0108L9.00488 12.0027H13.0049V10.0027H11.0049V9.00275ZM14.0049 4.00275C12.2214 4.00275 10.6196 4.78091 9.52064 6.01623C9.68133 6.00758 9.84254 6.00275 10.0049 6.00275C14.4232 6.00275 18.0049 9.58447 18.0049 14.0027C18.0049 14.1654 18 14.327 17.9905 14.4872C19.2265 13.3885 20.0049 11.7865 20.0049 10.0027C20.0049 6.68904 17.3186 4.00275 14.0049 4.00275Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.0049 2.00281C18.4232 2.00281 22.0049 5.58453 22.0049 10.0028C22.0049 13.2474 20.0733 16.0409 17.2973 17.296C16.0422 20.0718 13.249 22.0028 10.0049 22.0028C5.5866 22.0028 2.00488 18.4211 2.00488 14.0028C2.00488 10.7587 3.9359 7.96554 6.71122 6.71012C7.96681 3.93438 10.7603 2.00281 14.0049 2.00281ZM11.0049 9.00281H9.00488V10.0028C7.62417 10.0028 6.50488 11.1221 6.50488 12.5028C6.50488 13.8283 7.53642 14.9128 8.84051 14.9975L9.00488 15.0028H11.0049L11.0948 15.0109C11.328 15.0532 11.5049 15.2573 11.5049 15.5028C11.5049 15.7483 11.328 15.9524 11.0948 15.9948L11.0049 16.0028H7.00488V18.0028H9.00488V19.0028H11.0049V18.0028C12.3856 18.0028 13.5049 16.8835 13.5049 15.5028C13.5049 14.1773 12.4733 13.0928 11.1693 13.0081L11.0049 13.0028H9.00488L8.91501 12.9948C8.68176 12.9524 8.50488 12.7483 8.50488 12.5028C8.50488 12.2573 8.68176 12.0532 8.91501 12.0109L9.00488 12.0028H13.0049V10.0028H11.0049V9.00281ZM14.0049 4.00281C12.2214 4.00281 10.6196 4.78097 9.52064 6.01629C9.68133 6.00764 9.84254 6.00281 10.0049 6.00281C14.4232 6.00281 18.0049 9.58453 18.0049 14.0028C18.0049 14.1655 18 14.327 17.9905 14.4873C19.2265 13.3885 20.0049 11.7866 20.0049 10.0028C20.0049 6.6891 17.3186 4.00281 14.0049 4.00281Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/coins-line.svg b/client/packages/lowcoder-design/src/icons/remix/coins-line.svg index 25180f2b04..45ed051d74 100644 --- a/client/packages/lowcoder-design/src/icons/remix/coins-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/coins-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.0049 2.00275C18.4232 2.00275 22.0049 5.58447 22.0049 10.0027C22.0049 13.2474 20.0733 16.0408 17.2973 17.296C16.0422 20.0717 13.249 22.0027 10.0049 22.0027C5.5866 22.0027 2.00488 18.421 2.00488 14.0027C2.00488 10.7586 3.9359 7.96548 6.71122 6.71006C7.96681 3.93431 10.7603 2.00275 14.0049 2.00275ZM10.0049 8.00275C6.69117 8.00275 4.00488 10.689 4.00488 14.0027C4.00488 17.3165 6.69117 20.0027 10.0049 20.0027C13.3186 20.0027 16.0049 17.3165 16.0049 14.0027C16.0049 10.689 13.3186 8.00275 10.0049 8.00275ZM11.0049 9.00275V10.0027H13.0049V12.0027H9.00488C8.72874 12.0027 8.50488 12.2266 8.50488 12.5027C8.50488 12.7482 8.68176 12.9524 8.91501 12.9947L9.00488 13.0027H11.0049C12.3856 13.0027 13.5049 14.122 13.5049 15.5027C13.5049 16.8835 12.3856 18.0027 11.0049 18.0027V19.0027H9.00488V18.0027H7.00488V16.0027H11.0049C11.281 16.0027 11.5049 15.7789 11.5049 15.5027C11.5049 15.2573 11.328 15.0531 11.0948 15.0108L11.0049 15.0027H9.00488C7.62417 15.0027 6.50488 13.8835 6.50488 12.5027C6.50488 11.122 7.62417 10.0027 9.00488 10.0027V9.00275H11.0049ZM14.0049 4.00275C12.2214 4.00275 10.6196 4.78091 9.52064 6.01623C9.68133 6.00758 9.84254 6.00275 10.0049 6.00275C14.4232 6.00275 18.0049 9.58447 18.0049 14.0027C18.0049 14.1654 18 14.327 17.9905 14.4872C19.2265 13.3885 20.0049 11.7865 20.0049 10.0027C20.0049 6.68904 17.3186 4.00275 14.0049 4.00275Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.0049 2.00281C18.4232 2.00281 22.0049 5.58453 22.0049 10.0028C22.0049 13.2474 20.0733 16.0409 17.2973 17.296C16.0422 20.0718 13.249 22.0028 10.0049 22.0028C5.5866 22.0028 2.00488 18.4211 2.00488 14.0028C2.00488 10.7587 3.9359 7.96554 6.71122 6.71012C7.96681 3.93438 10.7603 2.00281 14.0049 2.00281ZM10.0049 8.00281C6.69117 8.00281 4.00488 10.6891 4.00488 14.0028C4.00488 17.3165 6.69117 20.0028 10.0049 20.0028C13.3186 20.0028 16.0049 17.3165 16.0049 14.0028C16.0049 10.6891 13.3186 8.00281 10.0049 8.00281ZM11.0049 9.00281V10.0028H13.0049V12.0028H9.00488C8.72874 12.0028 8.50488 12.2267 8.50488 12.5028C8.50488 12.7483 8.68176 12.9524 8.91501 12.9948L9.00488 13.0028H11.0049C12.3856 13.0028 13.5049 14.1221 13.5049 15.5028C13.5049 16.8835 12.3856 18.0028 11.0049 18.0028V19.0028H9.00488V18.0028H7.00488V16.0028H11.0049C11.281 16.0028 11.5049 15.7789 11.5049 15.5028C11.5049 15.2573 11.328 15.0532 11.0948 15.0109L11.0049 15.0028H9.00488C7.62417 15.0028 6.50488 13.8835 6.50488 12.5028C6.50488 11.1221 7.62417 10.0028 9.00488 10.0028V9.00281H11.0049ZM14.0049 4.00281C12.2214 4.00281 10.6196 4.78097 9.52064 6.01629C9.68133 6.00764 9.84254 6.00281 10.0049 6.00281C14.4232 6.00281 18.0049 9.58453 18.0049 14.0028C18.0049 14.1655 18 14.327 17.9905 14.4873C19.2265 13.3885 20.0049 11.7866 20.0049 10.0028C20.0049 6.6891 17.3186 4.00281 14.0049 4.00281Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-2-fill.svg new file mode 100644 index 0000000000..bc81f08a7f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3.50008 11.0001H11.0001V3.50008L7.95718 6.54297L4.70718 3.29297L3.29297 4.70718L6.54297 7.95718L3.50008 11.0001ZM20.5 13H13V20.5L16.0429 17.4571L19.2929 20.7071L20.7071 19.2929L17.4571 16.0429L20.5 13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-2-line.svg new file mode 100644 index 0000000000..be3c64793b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9.00008 4.00008H11.0001V11.0001H4.00008V9.00008H7.58586L3.29297 4.70718L4.70718 3.29297L9.00008 7.58586V4.00008ZM20 15H16.4142L20.7071 19.2929L19.2929 20.7071L15 16.4142V20H13V13H20V15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-fill.svg new file mode 100644 index 0000000000..5fbfdb87f4 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.5 11.0001H13V3.50008L16.0429 6.54297L19.2929 3.29297L20.7071 4.70718L17.4571 7.95718L20.5 11.0001ZM3.50008 13H11.0001V20.5L7.95718 17.4571L4.70718 20.7071L3.29297 19.2929L6.54297 16.0429L3.50008 13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-line.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-line.svg new file mode 100644 index 0000000000..39a1e07c1c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-diagonal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15 4.00008H13V11.0001H20V9.00008H16.4142L20.7071 4.70718L19.2929 3.29297L15 7.58586V4.00008ZM4.00008 15H7.58586L3.29297 19.2929L4.70718 20.7071L9.00008 16.4142V20H11.0001V13H4.00008V15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-horizontal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-horizontal-fill.svg new file mode 100644 index 0000000000..35ec4a983c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-horizontal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.5 12 18.4497 7.05029 18.4488 11H23V13H18.4483L18.4473 16.9473 13.5 12ZM1 13H5.55013L5.55005 16.9493 10.5 11.9996 5.55025 7.0498 5.55017 11H1V13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-horizontal-line.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-horizontal-line.svg new file mode 100644 index 0000000000..cccd9ee797 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-horizontal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.5 12 18.4497 7.05029 19.864 8.46451 17.3284 11H23V13H17.3284L19.8615 15.5331 18.4473 16.9473 13.5 12ZM1 13H6.67084L4.13584 15.535 5.55005 16.9493 10.5 11.9996 5.55025 7.0498 4.13604 8.46402 6.67206 11H1V13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-vertical-fill.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-vertical-fill.svg new file mode 100644 index 0000000000..241e7b3b12 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-vertical-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9995 13.4995 16.9493 18.4493 12.9995 18.4483 12.9995 22.9995H10.9995L10.9995 18.4478 7.05225 18.4468 11.9995 13.4995ZM10.9995.999512 10.9995 5.54964 7.05029 5.54956 12 10.4995 16.9497 5.54977 12.9995 5.54968V.999512L10.9995.999512Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/collapse-vertical-line.svg b/client/packages/lowcoder-design/src/icons/remix/collapse-vertical-line.svg new file mode 100644 index 0000000000..4ac65c0106 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/collapse-vertical-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9995 13.4995 16.9493 18.4493 15.535 19.8635 12.9995 17.3279 12.9995 22.9995H10.9995L10.9995 17.3279 8.46646 19.861 7.05225 18.4468 11.9995 13.4995ZM10.9995.999512 10.9995 6.67035 8.46451 4.13535 7.05029 5.54956 12 10.4995 16.9497 5.54977 15.5355 4.13555 12.9995 6.67157V.999512L10.9995.999512Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/color-filter-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/color-filter-ai-fill.svg new file mode 100644 index 0000000000..b0669fa30f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/color-filter-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 25 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15.5111 7.30032C15.8957 7.46801 16.2807 7.63473 16.6635 7.80646C16.6346 7.88102 16.604 7.95471 16.5717 8.02749C14.576 8.20785 12.6858 9.24029 11.4704 10.9723C8.95785 10.7079 6.99981 8.58261 6.99981 6C6.99981 3.23858 9.23839 1 11.9998 1C13.4594 1 14.773 1.62543 15.687 2.62292C14.7051 3.05106 14 3.8962 14 4.99997C14 5.9935 14.6012 6.90361 15.5111 7.30032ZM13.1542 17.9462C13.996 16.1276 14.047 13.9741 13.1547 12.0554C14.6399 10.0118 17.4591 9.37883 19.6956 10.6701C22.087 12.0509 22.9064 15.1086 21.5257 17.5C20.145 19.8915 17.087 20.7109 14.6956 19.3302C14.0707 18.9694 13.5532 18.4942 13.1542 17.9462ZM6.27311 10.0269C7.42726 11.6652 9.26672 12.786 11.3746 12.9726C12.4016 15.2807 11.5401 18.0388 9.30357 19.3301C6.91211 20.7108 3.85415 19.8914 2.47344 17.5C1.09273 15.1085 1.91211 12.0505 4.30357 10.6698C4.92851 10.309 5.59897 10.0984 6.27311 10.0269ZM16.8763 5.7134L16.3106 5.46682C15.8965 5.28637 15.8965 4.71357 16.3106 4.53312L16.8763 4.28656C17.8849 3.84706 18.688 3.05545 19.1273 2.06767L19.4652 1.30805C19.6479 0.897318 20.2456 0.897318 20.4283 1.30805L20.7472 2.0252C21.1979 3.03838 22.0307 3.84417 23.0736 4.27612L23.6849 4.52932C24.1109 4.70578 24.1109 5.29417 23.6849 5.47063L23.0736 5.72382C22.0307 6.15577 21.1979 6.96158 20.7472 7.9748L20.4283 8.69188C20.2456 9.10271 19.6479 9.10271 19.4652 8.69188L19.1273 7.93228C18.688 6.94451 17.8849 6.15288 16.8763 5.7134Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/color-filter-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/color-filter-ai-line.svg new file mode 100644 index 0000000000..43273fc998 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/color-filter-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.00723 7.29726C6.00242 7.19876 5.99998 7.09965 5.99998 7C5.99998 3.68629 8.68627 1 12 1C13.3496 1 14.5977 1.44677 15.6006 2.20007L14.3994 3.7992C13.731 3.29712 12.9016 3 12 3C11.7239 3 11.4542 3.02798 11.1938 3.08127C9.37112 3.45426 8 5.06701 8 7C8 9.03308 9.51679 10.7119 11.4805 10.9666C12.5039 9.55847 14.055 8.70883 15.696 8.53306C16.3796 8.45983 17.0792 8.50382 17.7635 8.67248C18.3006 8.80481 18.828 9.01404 19.33 9.3039C22.1998 10.9608 23.183 14.6303 21.5262 17.5C19.8693 20.3698 16.1998 21.3531 13.33 19.6962C12.828 19.4064 12.3832 19.0543 12 18.6554C11.6169 19.0543 11.172 19.4064 10.6699 19.6963C7.80019 21.3531 4.13065 20.3699 2.47379 17.5001C0.81694 14.6304 1.80019 10.9608 4.66995 9.30397C5.17193 9.01416 5.69919 8.80494 6.23623 8.67261C6.11278 8.24646 6.03531 7.80079 6.00955 7.3413L6.00723 7.29726ZM7.14979 10.5328C6.64359 10.5989 6.14138 10.7638 5.66995 11.036C3.75678 12.1406 3.10128 14.587 4.20585 16.5001C5.31042 18.4133 7.75678 19.0688 9.66995 17.9642C10.3021 17.5993 10.7949 17.09 11.1337 16.5024C11.7429 15.4457 11.8532 14.1391 11.3649 12.9669C10.9807 12.9264 10.6072 12.8497 10.2481 12.7402C10.2028 12.7264 10.1577 12.712 10.1128 12.6972C8.91238 12.2997 7.87997 11.5335 7.14979 10.5328ZM13.1543 16.9343C13.4647 17.3396 13.8586 17.692 14.33 17.9642C16.2432 19.0687 18.6895 18.4132 19.7941 16.5C20.2936 15.635 20.4332 14.6609 20.2593 13.7511C20.0488 12.6488 19.3781 11.6409 18.33 11.0357C17.6978 10.6708 17.0104 10.4986 16.3322 10.499C15.1125 10.4998 13.9259 11.0576 13.1548 12.0666C13.2661 12.3165 13.3588 12.5707 13.4336 12.8277C13.4336 12.8277 13.4336 12.8277 13.4336 12.8277C13.4774 12.9785 13.5151 13.1302 13.5467 13.2825C13.5602 13.3478 13.5726 13.4131 13.5839 13.4786C13.7871 14.6567 13.6297 15.8611 13.1543 16.9343ZM18.5774 7C18.866 7.33402 19.106 7.71371 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C19.1965 2.12319 19.1041 2.3084 19 2.48538C18.5399 3.26793 17.8515 3.88963 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C17.6496 6.13591 18.1635 6.521 18.5774 7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/contract-left-right-line.svg b/client/packages/lowcoder-design/src/icons/remix/contract-left-right-line.svg index 1c31760ad4..c65ce81c50 100644 --- a/client/packages/lowcoder-design/src/icons/remix/contract-left-right-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/contract-left-right-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.7931 5.79285 12.586 12 18.7931 18.2071 20.2073 16.7928 15.4144 12 20.2073 7.20706 18.7931 5.79285ZM5.20697 18.2072 11.4141 12.0001 5.20697 5.793 3.79276 7.20721 8.58565 12.0001 3.79276 16.793 5.20697 18.2072Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.793 5.79285 12.5859 12 18.793 18.2071 20.2073 16.7928 15.4144 12 20.2073 7.20706 18.793 5.79285ZM5.20695 18.2072 11.4141 12.0001 5.20695 5.793 3.79274 7.20721 8.58563 12.0001 3.79274 16.793 5.20695 18.2072Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/corner-up-left-double-fill.svg b/client/packages/lowcoder-design/src/icons/remix/corner-up-left-double-fill.svg index 1cd4b65edf..3d62fac47f 100644 --- a/client/packages/lowcoder-design/src/icons/remix/corner-up-left-double-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/corner-up-left-double-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.0003 19.0001 20.0002 10.0002 14.4141 10.0002V4.58588L7.99994 11.0001 14.4141 17.4143V12.0002L18.0002 12.0002 18.0003 19.0001 20.0003 19.0001ZM10.1637 6.05023 8.74951 4.63601 2.38554 11 8.7495 17.3639 10.1637 15.9497 5.21397 11 10.1637 6.05023Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.0003 19.0001 20.0002 10.0002 14.4142 10.0002V4.58588L7.99995 11.0001 14.4142 17.4143V12.0002L18.0002 12.0002 18.0003 19.0001 20.0003 19.0001ZM10.1637 6.05023 8.74951 4.63601 2.38555 11 8.74951 17.3639 10.1637 15.9497 5.21398 11 10.1637 6.05023Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/coupon-5-fill.svg b/client/packages/lowcoder-design/src/icons/remix/coupon-5-fill.svg index b6361c4ce0..ba7627edea 100644 --- a/client/packages/lowcoder-design/src/icons/remix/coupon-5-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/coupon-5-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21.0049 13.9997V20.9997C21.0049 21.5519 20.5572 21.9997 20.0049 21.9997H4.00488C3.4526 21.9997 3.00488 21.5519 3.00488 20.9997V13.9997C4.10945 13.9997 5.00488 13.1042 5.00488 11.9997C5.00488 10.8951 4.10945 9.99966 3.00488 9.99966V2.99966C3.00488 2.44738 3.4526 1.99966 4.00488 1.99966H20.0049C20.5572 1.99966 21.0049 2.44738 21.0049 2.99966V9.99966C19.9003 9.99966 19.0049 10.8951 19.0049 11.9997C19.0049 13.1042 19.9003 13.9997 21.0049 13.9997ZM9.00488 5.99966V7.99966H15.0049V5.99966H9.00488ZM9.00488 15.9997V17.9997H15.0049V15.9997H9.00488Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21.0049 13.9997V20.9997C21.0049 21.552 20.5572 21.9997 20.0049 21.9997H4.00488C3.4526 21.9997 3.00488 21.552 3.00488 20.9997V13.9997C4.10945 13.9997 5.00488 13.1043 5.00488 11.9997C5.00488 10.8951 4.10945 9.99969 3.00488 9.99969V2.99969C3.00488 2.44741 3.4526 1.99969 4.00488 1.99969H20.0049C20.5572 1.99969 21.0049 2.44741 21.0049 2.99969V9.99969C19.9003 9.99969 19.0049 10.8951 19.0049 11.9997C19.0049 13.1043 19.9003 13.9997 21.0049 13.9997ZM9.00488 5.99969V7.99969H15.0049V5.99969H9.00488ZM9.00488 15.9997V17.9997H15.0049V15.9997H9.00488Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/currency-fill.svg b/client/packages/lowcoder-design/src/icons/remix/currency-fill.svg index ea8302992a..e61e222951 100644 --- a/client/packages/lowcoder-design/src/icons/remix/currency-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/currency-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.0047 16.0027H19.0047V4.00275H9.00468V6.00275H17.0047V16.0027ZM17.0047 18.0027V21.0019C17.0047 21.5546 16.5547 22.0027 15.9978 22.0027H4.01154C3.45548 22.0027 3.00488 21.5581 3.00488 21.0019L3.00748 7.00362C3.00759 6.45085 3.45752 6.00275 4.0143 6.00275H7.00468V3.00275C7.00468 2.45046 7.4524 2.00275 8.00468 2.00275H20.0047C20.557 2.00275 21.0047 2.45046 21.0047 3.00275V17.0027C21.0047 17.555 20.557 18.0027 20.0047 18.0027H17.0047ZM7.00468 16.0027V18.0027H9.00468V19.0027H11.0047V18.0027H11.5047C12.8854 18.0027 14.0047 16.8835 14.0047 15.5027C14.0047 14.122 12.8854 13.0027 11.5047 13.0027H8.50468C8.22854 13.0027 8.00468 12.7789 8.00468 12.5027C8.00468 12.2266 8.22854 12.0027 8.50468 12.0027H13.0047V10.0027H11.0047V9.00275H9.00468V10.0027H8.50468C7.12397 10.0027 6.00468 11.122 6.00468 12.5027C6.00468 13.8835 7.12397 15.0027 8.50468 15.0027H11.5047C11.7808 15.0027 12.0047 15.2266 12.0047 15.5027C12.0047 15.7789 11.7808 16.0027 11.5047 16.0027H7.00468Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.0047 16.0028H19.0047V4.00281H9.00468V6.00281H17.0047V16.0028ZM17.0047 18.0028V21.0019C17.0047 21.5547 16.5547 22.0028 15.9978 22.0028H4.01154C3.45548 22.0028 3.00488 21.5582 3.00488 21.0019L3.00748 7.00368C3.00759 6.45091 3.45752 6.00281 4.0143 6.00281H7.00468V3.00281C7.00468 2.45052 7.4524 2.00281 8.00468 2.00281H20.0047C20.557 2.00281 21.0047 2.45052 21.0047 3.00281V17.0028C21.0047 17.5551 20.557 18.0028 20.0047 18.0028H17.0047ZM7.00468 16.0028V18.0028H9.00468V19.0028H11.0047V18.0028H11.5047C12.8854 18.0028 14.0047 16.8835 14.0047 15.5028C14.0047 14.1221 12.8854 13.0028 11.5047 13.0028H8.50468C8.22854 13.0028 8.00468 12.7789 8.00468 12.5028C8.00468 12.2267 8.22854 12.0028 8.50468 12.0028H13.0047V10.0028H11.0047V9.00281H9.00468V10.0028H8.50468C7.12397 10.0028 6.00468 11.1221 6.00468 12.5028C6.00468 13.8835 7.12397 15.0028 8.50468 15.0028H11.5047C11.7808 15.0028 12.0047 15.2267 12.0047 15.5028C12.0047 15.7789 11.7808 16.0028 11.5047 16.0028H7.00468Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/currency-line.svg b/client/packages/lowcoder-design/src/icons/remix/currency-line.svg index 2f48c43d94..bdfa0839f6 100644 --- a/client/packages/lowcoder-design/src/icons/remix/currency-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/currency-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.0047 16.0027H19.0047V4.00275H9.00468V6.00275H17.0047V16.0027ZM17.0047 18.0027V21.0019C17.0047 21.5546 16.5547 22.0027 15.9978 22.0027H4.01154C3.45548 22.0027 3.00488 21.5581 3.00488 21.0019L3.00748 7.00362C3.00759 6.45085 3.45752 6.00275 4.0143 6.00275H7.00468V3.00275C7.00468 2.45046 7.4524 2.00275 8.00468 2.00275H20.0047C20.557 2.00275 21.0047 2.45046 21.0047 3.00275V17.0027C21.0047 17.555 20.557 18.0027 20.0047 18.0027H17.0047ZM5.0073 8.00275L5.00507 20.0027H15.0047V8.00275H5.0073ZM7.00468 16.0027H11.5047C11.7808 16.0027 12.0047 15.7789 12.0047 15.5027C12.0047 15.2266 11.7808 15.0027 11.5047 15.0027H8.50468C7.12397 15.0027 6.00468 13.8835 6.00468 12.5027C6.00468 11.122 7.12397 10.0027 8.50468 10.0027H9.00468V9.00275H11.0047V10.0027H13.0047V12.0027H8.50468C8.22854 12.0027 8.00468 12.2266 8.00468 12.5027C8.00468 12.7789 8.22854 13.0027 8.50468 13.0027H11.5047C12.8854 13.0027 14.0047 14.122 14.0047 15.5027C14.0047 16.8835 12.8854 18.0027 11.5047 18.0027H11.0047V19.0027H9.00468V18.0027H7.00468V16.0027Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.0047 16.0028H19.0047V4.00281H9.00468V6.00281H17.0047V16.0028ZM17.0047 18.0028V21.0019C17.0047 21.5547 16.5547 22.0028 15.9978 22.0028H4.01154C3.45548 22.0028 3.00488 21.5582 3.00488 21.0019L3.00748 7.00368C3.00759 6.45091 3.45752 6.00281 4.0143 6.00281H7.00468V3.00281C7.00468 2.45052 7.4524 2.00281 8.00468 2.00281H20.0047C20.557 2.00281 21.0047 2.45052 21.0047 3.00281V17.0028C21.0047 17.5551 20.557 18.0028 20.0047 18.0028H17.0047ZM5.0073 8.00281L5.00507 20.0028H15.0047V8.00281H5.0073ZM7.00468 16.0028H11.5047C11.7808 16.0028 12.0047 15.7789 12.0047 15.5028C12.0047 15.2267 11.7808 15.0028 11.5047 15.0028H8.50468C7.12397 15.0028 6.00468 13.8835 6.00468 12.5028C6.00468 11.1221 7.12397 10.0028 8.50468 10.0028H9.00468V9.00281H11.0047V10.0028H13.0047V12.0028H8.50468C8.22854 12.0028 8.00468 12.2267 8.00468 12.5028C8.00468 12.7789 8.22854 13.0028 8.50468 13.0028H11.5047C12.8854 13.0028 14.0047 14.1221 14.0047 15.5028C14.0047 16.8835 12.8854 18.0028 11.5047 18.0028H11.0047V19.0028H9.00468V18.0028H7.00468V16.0028Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/custom-size.svg b/client/packages/lowcoder-design/src/icons/remix/custom-size.svg new file mode 100644 index 0000000000..7c8d630e89 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/custom-size.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8 3H15V0.5L18.5 4L15 7.5V5H8V7.5L4.5 4L8 0.5V3ZM3 17V6.5H5V17C5 18.1046 5.89543 19 7 19H17.5V21H7C4.79086 21 3 19.2091 3 17ZM21 16V9H23.5L20 5.5L16.5 9H19V16H16.5L20 19.5L23.5 16H21Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dashboard-fill.svg b/client/packages/lowcoder-design/src/icons/remix/dashboard-fill.svg index e7a4e4b89a..6c1117c841 100644 --- a/client/packages/lowcoder-design/src/icons/remix/dashboard-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/dashboard-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 13H11V3H3V13ZM3 21H11V15H3V21ZM13 21H21V11H13V21ZM13 3V9H21V3H13Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 12C3 12.5523 3.44772 13 4 13H10C10.5523 13 11 12.5523 11 12V4C11 3.44772 10.5523 3 10 3H4C3.44772 3 3 3.44772 3 4V12ZM3 20C3 20.5523 3.44772 21 4 21H10C10.5523 21 11 20.5523 11 20V16C11 15.4477 10.5523 15 10 15H4C3.44772 15 3 15.4477 3 16V20ZM13 20C13 20.5523 13.4477 21 14 21H20C20.5523 21 21 20.5523 21 20V12C21 11.4477 20.5523 11 20 11H14C13.4477 11 13 11.4477 13 12V20ZM14 3C13.4477 3 13 3.44772 13 4V8C13 8.55228 13.4477 9 14 9H20C20.5523 9 21 8.55228 21 8V4C21 3.44772 20.5523 3 20 3H14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dashboard-horizontal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/dashboard-horizontal-fill.svg new file mode 100644 index 0000000000..ae5d1b991e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dashboard-horizontal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 3C12.5523 3 13 3.44771 13 4L13 10C13 10.5523 12.5523 11 12 11L4 11C3.44772 11 3 10.5523 3 10L3 4C3 3.44772 3.44772 3 4 3L12 3ZM20 3C20.5523 3 21 3.44771 21 4L21 10C21 10.5523 20.5523 11 20 11L16 11C15.4477 11 15 10.5523 15 10L15 4C15 3.44771 15.4477 3 16 3L20 3ZM20 13C20.5523 13 21 13.4477 21 14L21 20C21 20.5523 20.5523 21 20 21L12 21C11.4477 21 11 20.5523 11 20L11 14C11 13.4477 11.4477 13 12 13L20 13ZM3 14C3 13.4477 3.44772 13 4 13L8 13C8.55229 13 9 13.4477 9 14L9 20C9 20.5523 8.55229 21 8 21L4 21C3.44772 21 3 20.5523 3 20L3 14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dashboard-horizontal-line.svg b/client/packages/lowcoder-design/src/icons/remix/dashboard-horizontal-line.svg new file mode 100644 index 0000000000..70c79c8f04 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dashboard-horizontal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 10C3 10.5523 3.44772 11 4 11L12 11C12.5523 11 13 10.5523 13 10V4C13 3.44772 12.5523 3 12 3H4C3.44772 3 3 3.44772 3 4V10ZM11 20C11 20.5523 11.4477 21 12 21H20C20.5523 21 21 20.5523 21 20V14C21 13.4477 20.5523 13 20 13H12C11.4477 13 11 13.4477 11 14V20ZM13 15H19V19H13V15ZM3 20C3 20.5523 3.44772 21 4 21H8C8.55229 21 9 20.5523 9 20V14C9 13.4477 8.55229 13 8 13H4C3.44772 13 3 13.4477 3 14V20ZM5 19V15H7V19H5ZM5 9V5L11 5L11 9L5 9ZM20 11C20.5523 11 21 10.5523 21 10V4C21 3.44772 20.5523 3 20 3H16C15.4477 3 15 3.44772 15 4V10C15 10.5523 15.4477 11 16 11H20ZM19 9H17V5H19V9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dashboard-line.svg b/client/packages/lowcoder-design/src/icons/remix/dashboard-line.svg index a0178465f6..ad64197d8b 100644 --- a/client/packages/lowcoder-design/src/icons/remix/dashboard-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/dashboard-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13 21V11H21V21H13ZM3 13V3H11V13H3ZM9 11V5H5V11H9ZM3 21V15H11V21H3ZM5 19H9V17H5V19ZM15 19H19V13H15V19ZM13 3H21V9H13V3ZM15 5V7H19V5H15Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14 21C13.4477 21 13 20.5523 13 20V12C13 11.4477 13.4477 11 14 11H20C20.5523 11 21 11.4477 21 12V20C21 20.5523 20.5523 21 20 21H14ZM4 13C3.44772 13 3 12.5523 3 12V4C3 3.44772 3.44772 3 4 3H10C10.5523 3 11 3.44772 11 4V12C11 12.5523 10.5523 13 10 13H4ZM9 11V5H5V11H9ZM4 21C3.44772 21 3 20.5523 3 20V16C3 15.4477 3.44772 15 4 15H10C10.5523 15 11 15.4477 11 16V20C11 20.5523 10.5523 21 10 21H4ZM5 19H9V17H5V19ZM15 19H19V13H15V19ZM13 4C13 3.44772 13.4477 3 14 3H20C20.5523 3 21 3.44772 21 4V8C21 8.55228 20.5523 9 20 9H14C13.4477 9 13 8.55228 13 8V4ZM15 5V7H19V5H15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dna-fill.svg b/client/packages/lowcoder-design/src/icons/remix/dna-fill.svg new file mode 100644 index 0000000000..69cfa9fe47 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dna-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18 1C18 1.71561 17.9359 2.37948 17.8155 3H8.23193C8.87053 5.55223 10.7943 7.22876 13.5829 9.4281C13.0772 9.8647 12.5462 10.294 12 10.7267C8.72906 8.13494 6 5.66845 6 1H4C4 6.46624 7.21013 9.46355 10.3863 12C7.21013 14.5365 4 17.5338 4 23H6C6 18.0404 9.08011 15.566 12.6178 12.7863L12.7096 12.7142C16.149 10.0123 20 6.98705 20 1H18ZM17.8155 21.0002H8.23193C8.89098 18.3663 10.9188 16.665 13.8535 14.3592C14.2973 14.0106 14.7419 13.663 15.1811 13.3086C17.7659 15.5981 20 18.44 20 23.0002H18C18 22.2846 17.9359 21.6207 17.8155 21.0002Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dna-line.svg b/client/packages/lowcoder-design/src/icons/remix/dna-line.svg new file mode 100644 index 0000000000..79c298dbae --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dna-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18 1C18 1.71561 17.9359 2.37948 17.8155 3H8.23193C8.41382 3.72694 8.69997 4.38283 9.08066 5H17.1807C16.132 7.31672 14.1871 8.99371 12 10.7267C8.72906 8.13494 6 5.66845 6 1H4C4 6.46624 7.21013 9.46355 10.3863 12C7.21013 14.5365 4 17.5338 4 23H6C6 18.0404 9.08011 15.566 12.6178 12.7863L12.7096 12.7142C16.149 10.0123 20 6.98705 20 1H18ZM17.8155 21.0002H8.23193C8.41382 20.2733 8.69997 19.6174 9.08066 19.0002H17.1807C16.3939 17.262 15.1026 15.8839 13.583 14.5721C14.1162 14.1516 14.6526 13.7351 15.1811 13.3086C17.7659 15.5981 20 18.44 20 23.0002H18C18 22.2846 17.9359 21.6207 17.8155 21.0002Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dropper-fill.svg b/client/packages/lowcoder-design/src/icons/remix/dropper-fill.svg new file mode 100644 index 0000000000..33212ea641 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dropper-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15.5355 2.80744C17.0976 1.24534 19.6303 1.24534 21.1924 2.80744C22.7545 4.36953 22.7545 6.90219 21.1924 8.46429L18.3638 11.2929L18.7175 11.6466C19.108 12.0371 19.108 12.6703 18.7175 13.0608C18.327 13.4513 17.6938 13.4513 17.3033 13.0608L16.9498 12.7073L10.7351 18.922C10.1767 19.4804 9.46547 19.861 8.6911 20.0159L6.93694 20.3667C6.54976 20.4442 6.19416 20.6345 5.91496 20.9137L4.92894 21.8997C4.53841 22.2902 3.90525 22.2902 3.51472 21.8997L2.10051 20.4855C1.70999 20.095 1.70999 19.4618 2.10051 19.0713L3.08653 18.0852C3.36574 17.806 3.55605 17.4504 3.63348 17.0633L3.98431 15.3091C4.13919 14.5347 4.51981 13.8235 5.07821 13.2651L11.2929 7.05045L10.9393 6.69686C10.5488 6.30634 10.5488 5.67317 10.9393 5.28265C11.3299 4.89212 11.963 4.89212 12.3535 5.28265L12.7069 5.63604L15.5355 2.80744ZM12.7071 8.46466L6.49242 14.6794C6.21322 14.9586 6.02291 15.3142 5.94548 15.7013L5.59464 17.4555C5.43977 18.2299 5.05915 18.9411 4.50075 19.4995C5.05915 18.9411 5.77035 18.5604 6.54471 18.4056L8.29887 18.0547C8.68605 17.9773 9.04165 17.787 9.32085 17.5078L15.5355 11.2931L12.7071 8.46466Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dropper-line.svg b/client/packages/lowcoder-design/src/icons/remix/dropper-line.svg new file mode 100644 index 0000000000..ada5e2384b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dropper-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7782 4.22165C20.5592 5.0027 20.5592 6.26903 19.7782 7.05008L16.9498 9.8785L14.1213 7.05008L16.9498 4.22165C17.7308 3.4406 18.9971 3.4406 19.7782 4.22165ZM21.1924 2.80744C19.6303 1.24534 17.0976 1.24534 15.5355 2.80744L12.7071 5.63586L12.3535 5.28265C11.963 4.89212 11.3299 4.89212 10.9393 5.28265C10.5488 5.67317 10.5488 6.30633 10.9393 6.69686L11.2929 7.05044L5.07821 13.2651C4.51981 13.8235 4.13919 14.5347 3.98431 15.3091L3.63348 17.0633C3.55605 17.4504 3.36574 17.806 3.08653 18.0852L2.10051 19.0713C1.70999 19.4618 1.70999 20.095 2.10051 20.4855L3.51472 21.8997C3.90525 22.2902 4.53841 22.2902 4.92894 21.8997L5.91496 20.9137C6.19416 20.6345 6.54976 20.4442 6.93694 20.3667L8.6911 20.0159C9.46547 19.861 10.1767 19.4804 10.7351 18.922L16.9498 12.7073L17.3033 13.0608C17.6938 13.4513 18.327 13.4513 18.7175 13.0608C19.108 12.6703 19.108 12.0371 18.7175 11.6466L18.364 11.2931L21.1924 8.46429C22.7545 6.90219 22.7545 4.36953 21.1924 2.80744ZM12.7071 8.46466L15.5355 11.2931L9.32085 17.5078C9.04165 17.787 8.68605 17.9773 8.29887 18.0547L6.54471 18.4056C5.77035 18.5604 5.05915 18.9411 4.50075 19.4995C5.05915 18.9411 5.43977 18.2299 5.59464 17.4555L5.94548 15.7013C6.02291 15.3142 6.21322 14.9586 6.49242 14.6794L12.7071 8.46466Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dvd-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/dvd-ai-fill.svg new file mode 100644 index 0000000000..b962b1ad06 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dvd-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM20 11C20.6695 11 21.3134 10.8903 21.9147 10.688C21.971 11.1174 22 11.5553 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C12.9056 2 13.7831 2.12039 14.6174 2.34603C14.2221 3.14617 14 4.04715 14 5C14 8.31371 16.6863 11 20 11ZM13 11V6L8 13H11V18L16 11H13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/dvd-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/dvd-ai-line.svg new file mode 100644 index 0000000000..243f6d4a5a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/dvd-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 11.6765 19.9809 11.3579 19.9437 11.0452L21.9298 10.8094C21.9762 11.2002 22 11.5975 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C12.8614 2 13.6987 2.10914 14.4983 2.31487L14 4.25179C13.3618 4.0876 12.6919 4 12 4ZM13 11H16L11 18V13H8L13 6V11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/edit-box-fill.svg b/client/packages/lowcoder-design/src/icons/remix/edit-box-fill.svg index 52bcac4b82..dcebb38efe 100644 --- a/client/packages/lowcoder-design/src/icons/remix/edit-box-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/edit-box-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.7574 2.99677L9.29145 10.4627L9.29886 14.7098L13.537 14.7024L21 7.23941V19.9968C21 20.5491 20.5523 20.9968 20 20.9968H4C3.44772 20.9968 3 20.5491 3 19.9968V3.99677C3 3.44448 3.44772 2.99677 4 2.99677H16.7574ZM20.4853 2.09727L21.8995 3.51149L12.7071 12.7039L11.2954 12.7063L11.2929 11.2897L20.4853 2.09727Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.7574 2.99678L9.29145 10.4627L9.29886 14.7099L13.537 14.7024L21 7.23943V19.9968C21 20.5491 20.5523 20.9968 20 20.9968H4C3.44772 20.9968 3 20.5491 3 19.9968V3.99678C3 3.4445 3.44772 2.99678 4 2.99678H16.7574ZM20.4853 2.09729L21.8995 3.5115L12.7071 12.7039L11.2954 12.7064L11.2929 11.2897L20.4853 2.09729Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/edit-box-line.svg b/client/packages/lowcoder-design/src/icons/remix/edit-box-line.svg index d182545e3e..21bf1d68ee 100644 --- a/client/packages/lowcoder-design/src/icons/remix/edit-box-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/edit-box-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.7574 2.99677L14.7574 4.99677H5V18.9968H19V9.23941L21 7.23941V19.9968C21 20.5491 20.5523 20.9968 20 20.9968H4C3.44772 20.9968 3 20.5491 3 19.9968V3.99677C3 3.44448 3.44772 2.99677 4 2.99677H16.7574ZM20.4853 2.09727L21.8995 3.51149L12.7071 12.7039L11.2954 12.7063L11.2929 11.2897L20.4853 2.09727Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.7574 2.99678L14.7574 4.99678H5V18.9968H19V9.23943L21 7.23943V19.9968C21 20.5491 20.5523 20.9968 20 20.9968H4C3.44772 20.9968 3 20.5491 3 19.9968V3.99678C3 3.4445 3.44772 2.99678 4 2.99678H16.7574ZM20.4853 2.09729L21.8995 3.5115L12.7071 12.7039L11.2954 12.7064L11.2929 11.2897L20.4853 2.09729Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-2-fill.svg new file mode 100644 index 0000000000..fcb41bbab6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3H10.5L7.45711 6.04289L10.7071 9.29289L9.29289 10.7071L6.04289 7.45711L3 10.5V3ZM21 21H13.5L16.5429 17.9571L13.2929 14.7071L14.7071 13.2929L17.9571 16.5429L21 13.5V21Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-2-line.svg new file mode 100644 index 0000000000..6583215a8a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.41421 5H10V3H3V10H5V6.41421L9.29289 10.7071L10.7071 9.29289L6.41421 5ZM21 14H19V17.5858L14.7071 13.2929L13.2929 14.7071L17.5858 19H14V21H21V14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-fill.svg new file mode 100644 index 0000000000..0f8e597def --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 3H13.5L16.5429 6.04289L13.2929 9.29289L14.7071 10.7071L17.9571 7.45711L21 10.5V3ZM3 21H10.5L7.45711 17.9571L10.7071 14.7071L9.29289 13.2929L6.04289 16.5429L3 13.5V21Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-line.svg new file mode 100644 index 0000000000..32054b5d55 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.5858 5H14V3H21V10H19V6.41421L14.7071 10.7071L13.2929 9.29289L17.5858 5ZM3 14H5V17.5858L9.29289 13.2929L10.7071 14.7071L6.41421 19H10V21H3V14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-2-fill.svg new file mode 100644 index 0000000000..8788f93410 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 5L5 12.5L8.04289 9.45711L14.5429 15.9571L11.5 19H19L19 11.5L15.9571 14.5429L9.45711 8.04289L12.5 5L5 5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-2-line.svg new file mode 100644 index 0000000000..368da86107 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7 8.41421V12L5 12L5 5L12 5V7L8.41421 7L17 15.5858V12L19 12L19 19H12V17H15.5858L7 8.41421Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-fill.svg new file mode 100644 index 0000000000..eca6101efa --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19 5H11.5L14.5429 8.04289L8.04289 14.5429L5 11.5V19H12.5L9.45711 15.9571L15.9571 9.45711L19 12.5V5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-line.svg new file mode 100644 index 0000000000..c06feaff3a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-diagonal-s-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15.5858 7H12V5H19V12H17V8.41421L8.41421 17H12V19H5V12H7V15.5858L15.5858 7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-fill.svg new file mode 100644 index 0000000000..e4e9986cba --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M0.5 12L5.44975 7.05029L5.44876 11H10V13H5.44826L5.44727 16.9473L0.5 12ZM14 13H18.5501L18.55 16.9493L23.5 11.9996L18.5503 7.0498L18.5502 11H14V13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-line.svg new file mode 100644 index 0000000000..e1f60a982b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M0.5 12L5.44975 7.05029L6.86396 8.46451L4.32843 11H10V13H4.32843L6.86148 15.5331L5.44727 16.9473L0.5 12ZM14 13H19.6708L17.1358 15.535L18.55 16.9493L23.5 11.9996L18.5503 7.0498L17.136 8.46402L19.6721 11H14V13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-s-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-s-fill.svg new file mode 100644 index 0000000000..491a2be238 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-s-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7.44975 7.05017L2.5 11.9999L7.44727 16.9472L7.44826 12.9999H16.5501L16.55 16.9491L21.5 11.9994L16.5503 7.04968L16.5502 10.9999H7.44876L7.44975 7.05017Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-s-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-s-line.svg new file mode 100644 index 0000000000..b717eb4f75 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-horizontal-s-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7.44975 7.05029L2.5 12L7.44727 16.9473L8.86148 15.5331L6.32843 13H17.6708L15.1358 15.535L16.55 16.9493L21.5 11.9996L16.5503 7.0498L15.136 8.46402L17.6721 11H6.32843L8.86396 8.46451L7.44975 7.05029Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-right-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-right-fill.svg index ba7908cc98..f44ca62afb 100644 --- a/client/packages/lowcoder-design/src/icons/remix/expand-right-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/expand-right-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.9999 4.99982L21.0001 11.9999L13.9999 18.9998V13H7.99983L7.99981 11H13.9999V4.99982ZM3.99988 18.9998L3.99988 4.99982H5.99988V18.9998H3.99988Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.9998 4.99982L21.0001 11.9999L13.9998 18.9998V13H7.9998L7.99978 11H13.9998V4.99982ZM3.99985 18.9998L3.99985 4.99982H5.99985V18.9998H3.99985Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-right-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-right-line.svg index acde6a1651..a5f7ad4881 100644 --- a/client/packages/lowcoder-design/src/icons/remix/expand-right-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/expand-right-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.1717 11.0001L12.5148 6.34323L13.929 4.92902L21.0001 12.0001L13.929 19.0712L12.5148 17.6569L17.1716 13.0001L7.99983 13.0002L7.99981 11.0002L17.1717 11.0001ZM3.99988 19L3.99988 5.00003H5.99988V19H3.99988Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.1717 11.0001L12.5148 6.34323L13.929 4.92902L21.0001 12.0001L13.929 19.0712L12.5148 17.6569L17.1716 13.0001L7.9998 13.0002L7.99978 11.0002L17.1717 11.0001ZM3.99985 19L3.99985 5.00003H5.99985V19H3.99985Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-up-down-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-up-down-line.svg index 1a6ddc0ce1..879deb1997 100644 --- a/client/packages/lowcoder-design/src/icons/remix/expand-up-down-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/expand-up-down-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.2072 9.0428 12.0001 2.83569 5.79297 9.0428 7.20718 10.457 12.0001 5.66412 16.793 10.457 18.2072 9.0428ZM5.79282 14.9572 11.9999 21.1643 18.207 14.9572 16.7928 13.543 11.9999 18.3359 7.20703 13.543 5.79282 14.9572Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.2072 9.0428 12.0001 2.83569 5.793 9.0428 7.20721 10.457 12.0001 5.66412 16.793 10.457 18.2072 9.0428ZM5.79285 14.9572 12 21.1643 18.2071 14.9572 16.7928 13.543 12 18.3359 7.20706 13.543 5.79285 14.9572Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-vertical-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-fill.svg new file mode 100644 index 0000000000..3ff760820a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9995 0.499512L16.9492 5.44926L12.9995 5.44827V9.99951H10.9995V5.44777L7.05222 5.44678L11.9995 0.499512ZM10.9995 13.9995L10.9995 18.5496L7.05026 18.5496L12 23.4995L16.9497 18.5498L12.9995 18.5497V13.9995H10.9995Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-vertical-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-line.svg new file mode 100644 index 0000000000..5897a0d46a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9995 0.499512L16.9492 5.44926L15.535 6.86347L12.9995 4.32794V9.99951H10.9995L10.9995 4.32794L8.46643 6.86099L7.05222 5.44678L11.9995 0.499512ZM10.9995 13.9995L10.9995 19.6704L8.46448 17.1353L7.05026 18.5496L12 23.4995L16.9497 18.5498L15.5355 17.1356L12.9995 19.6716V13.9995H10.9995Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-vertical-s-fill.svg b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-s-fill.svg new file mode 100644 index 0000000000..c067505dd7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-s-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.9493 7.44926L11.9995 2.49951L7.05228 7.44678L10.9995 7.44777L10.9995 16.5496L7.05032 16.5496L12 21.4995L16.9498 16.5498L12.9995 16.5497L12.9995 7.44827L16.9493 7.44926Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/expand-vertical-s-line.svg b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-s-line.svg new file mode 100644 index 0000000000..f7b07e542b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/expand-vertical-s-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.9492 7.44926L11.9995 2.49951L7.05222 7.44678L8.46643 8.86099L10.9995 6.32794L10.9995 17.6704L8.46448 15.1353L7.05026 16.5496L12 21.4995L16.9497 16.5498L15.5355 15.1356L12.9995 17.6716L12.9995 6.32794L15.535 8.86347L16.9492 7.44926Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/fediverse-fill.svg b/client/packages/lowcoder-design/src/icons/remix/fediverse-fill.svg new file mode 100644 index 0000000000..7e38585f2c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/fediverse-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.2676 1.55469V2.17041L11.5205 6.18555L8.16894 3.95899L7.63622 3.65137L6.90331 4.92042L7.43652 5.22803L11.04 7.0171L7.43652 8.80567L6.90331 9.11328L7.63622 10.3823L8.16894 10.0747L11.5205 7.84815L11.2676 11.8638V12.479H12.7329V11.8638L12.48 7.84815L15.8311 10.0747L16.3642 10.3823L17.0967 9.11328L16.564 8.80567L12.96 7.0171L16.564 5.22803L17.0967 4.92042L16.3642 3.65137L15.8311 3.95899L12.48 6.18555L12.7329 2.17041V1.55469H11.2676ZM5.97215 10.7266V11.3418L6.22509 15.3574L2.87403 13.1309L2.34081 12.8228L1.6084 14.0923L2.14111 14.3999L5.74561 16.1885L2.14111 17.9775L1.6084 18.2852L2.34081 19.5542L2.87403 19.2466L6.22509 17.02L5.97215 21.0352V21.6509H7.4375V21.0352L7.18504 17.0195L10.5361 19.2466L11.0688 19.5542L11.8018 18.2852L11.2686 17.9775L7.66454 16.1885L11.2686 14.3999L11.8018 14.0923L11.0688 12.8228L10.5361 13.1309L7.18504 15.3574L7.4375 11.3418V10.7266H5.97215ZM16.5625 10.7266V11.3418L16.8154 15.3574L13.4643 13.1309L12.9316 12.8228L12.1987 14.0923L12.7314 14.3999L16.3359 16.1885L12.7314 17.9775L12.1987 18.2852L12.9316 19.5542L13.4643 19.2466L16.8154 17.02L16.5625 21.0352V21.6509H18.0283V21.0352L17.7754 17.0195L21.1265 19.2466L21.6592 19.5542L22.3921 18.2852L21.8589 17.9775L18.2549 16.1885L21.8589 14.3999L22.3921 14.0923L21.6592 12.8228L21.1265 13.1309L17.7754 15.3574L18.0283 11.3418V10.7266H16.5625Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/fediverse-line.svg b/client/packages/lowcoder-design/src/icons/remix/fediverse-line.svg new file mode 100644 index 0000000000..6ea6e6af14 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/fediverse-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.0002 11.5V8.23202L8.17007 9.86602L7.17007 8.13397L10.0002 6.5L7.17007 4.86602L8.17007 3.13397L11.0002 4.76798V1.5H13.0002V4.76792L15.8303 3.13397L16.8303 4.86603L14.0002 6.5L16.8303 8.13397L15.8303 9.86602L13.0002 8.23208V11.5H11.0002ZM21.4596 12.884L18.6294 14.518V11.25H16.6294V14.518L13.7992 12.884L12.7992 14.616L15.6294 16.25L12.7993 17.884L13.7993 19.616L16.6294 17.9821V21.25H18.6294V17.9821L21.4595 19.616L22.4595 17.884L19.6294 16.25L22.4596 14.616L21.4596 12.884ZM7.37109 17.9815L7.37109 21.2495L5.37109 21.2495L5.37109 17.9816L2.54102 19.6155L1.54102 17.8835L4.37114 16.2495L1.54102 14.6155L2.54102 12.8835L5.37109 14.5174L5.37109 11.2495H7.37109L7.37109 14.5175L10.2013 12.8835L11.2013 14.6155L8.37114 16.2495L11.2013 17.8835L10.2013 19.6155L7.37109 17.9815Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/film-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/film-ai-fill.svg new file mode 100644 index 0000000000..1efdb57b25 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/film-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM20 11C20.7013 11 21.3744 10.8797 22 10.6586V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3H14.3414C14.1203 3.62556 14 4.29873 14 5C14 8.31371 16.6863 11 20 11ZM4 5V7H6V5H4ZM4 9V11H6V9H4ZM4 13V15H6V13H4ZM18 13V15H20V13H18ZM4 17V19H6V17H4ZM18 17V19H20V17H18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/film-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/film-ai-line.svg new file mode 100644 index 0000000000..f28c12d05a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/film-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM2.9918 3H14V5H8V19H16V9H18V11H20H22V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3ZM4 5V7H6V5H4ZM4 9V11H6V9H4ZM4 13V15H6V13H4ZM18 13V15H20V13H18ZM4 17V19H6V17H4ZM18 17V19H20V17H18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/firebase-fill.svg b/client/packages/lowcoder-design/src/icons/remix/firebase-fill.svg new file mode 100644 index 0000000000..e42e0b201b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/firebase-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.75651 1.50129L4 18.4998L4.00007 18.4998L9.47342 4.81645L7.69485 1.35292C7.47439 0.923595 6.83377 1.02489 6.75651 1.50129ZM11.5638 4.31793L4.00008 18.4998L4.00012 18.4999L13.8396 6.94912L12.4412 4.32699C12.2546 3.9771 11.7558 3.97408 11.5638 4.31793ZM10.94 22.8373L4.00013 18.4999L17.31 5.66535C17.6037 5.39537 18.0834 5.56273 18.1424 5.96076L20 18.4998L13.06 22.8373C12.4115 23.2426 11.5885 23.2426 10.94 22.8373Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/firebase-line.svg b/client/packages/lowcoder-design/src/icons/remix/firebase-line.svg new file mode 100644 index 0000000000..0d86e01203 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/firebase-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9.22296 8.70695L6.91128 13.0414L8.00027 6.32592L9.22296 8.70695ZM10.3684 6.55928L7.69485 1.35292C7.47439 0.923595 6.83377 1.02489 6.75651 1.50129L4 18.4998L5.74819 19.5926L10.94 22.8375C11.5885 23.2428 12.4115 23.2428 13.06 22.8375L20 18.5L18.1424 5.96098C18.0828 5.5587 17.5934 5.39205 17.3007 5.67433L14.566 8.31132L12.4412 4.32721C12.2529 3.97426 11.7471 3.97426 11.5588 4.32721L10.3684 6.55928ZM13.0692 9.75472L8.66667 14L12 7.75L13.0692 9.75472ZM7.23219 18.1616L16.5911 9.137L17.8297 17.4979L12 21.1415L7.23219 18.1616Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flag-off-fill.svg b/client/packages/lowcoder-design/src/icons/remix/flag-off-fill.svg new file mode 100644 index 0000000000..f8b11ea316 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flag-off-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.5859 18L21.1925 22.6066L22.6068 21.1924L2.80777 1.39343L1.39355 2.80765L3.00008 4.41417V22H5.00008V16H12.0001L12.7237 17.4472C12.8931 17.786 13.2393 18 13.6181 18H16.5859ZM21.0001 5.99995V16.7576L7.24241 2.99995H12.382C12.7608 2.99995 13.1071 3.21396 13.2765 3.55274L14.0001 4.99995H20.0001C20.5524 4.99995 21.0001 5.44767 21.0001 5.99995Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flag-off-line.svg b/client/packages/lowcoder-design/src/icons/remix/flag-off-line.svg new file mode 100644 index 0000000000..5bfc2d9208 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flag-off-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.5859 18L21.1925 22.6066L22.6068 21.1924L2.80777 1.39343L1.39355 2.80765L3.00008 4.41417V22H5.00008V16H12.0001L12.7237 17.4472C12.8931 17.786 13.2393 18 13.6181 18H16.5859ZM14.5859 16H14.2361L13.8864 15.3005L14.5859 16ZM12.5859 14H5.00008V6.41417L12.5859 14ZM21.0001 5.99995V16.7576L19.0001 14.7576V6.99995H12.764L11.764 4.99995H9.24241L7.24241 2.99995H12.382C12.7608 2.99995 13.1071 3.21396 13.2765 3.55274L14.0001 4.99995H20.0001C20.5524 4.99995 21.0001 5.44767 21.0001 5.99995Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-2-fill.svg new file mode 100644 index 0000000000..06a0ebe71e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM10 8V11H14V8L18 12L14 16V13H10V16L6 12L10 8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-2-line.svg new file mode 100644 index 0000000000..e48ca94cd1 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 19H19V5H5V19ZM3 4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4ZM10 8V11H14V8L18 12L14 16V13H10V16L6 12L10 8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-fill.svg new file mode 100644 index 0000000000..f5bd390c95 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11 2V22H13V2H11ZM7 6V18H4L4 6H7ZM4 4C2.89543 4 2 4.89543 2 6V18C2 19.1046 2.89543 20 4 20H7C8.10457 20 9 19.1046 9 18V6C9 4.89543 8.10457 4 7 4H4ZM15 6C15 4.89543 15.8954 4 17 4H20C21.1046 4 22 4.89543 22 6V18C22 19.1046 21.1046 20 20 20H17C15.8954 20 15 19.1046 15 18V6Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-line.svg b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-line.svg new file mode 100644 index 0000000000..4a0dea90c1 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-horizontal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11 2V22H13V2H11ZM2 6C2 4.89543 2.89543 4 4 4H7C8.10457 4 9 4.89543 9 6V18C9 19.1046 8.10457 20 7 20H4C2.89543 20 2 19.1046 2 18V6ZM20 6V18H17V6H20ZM17 4C15.8954 4 15 4.89543 15 6V18C15 19.1046 15.8954 20 17 20H20C21.1046 20 22 19.1046 22 18V6C22 4.89543 21.1046 4 20 4H17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-vertical-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-2-fill.svg new file mode 100644 index 0000000000..43eaaede8f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM8 10L12 6L16 10H13V14H16L12 18L8 14H11L11 10H8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-vertical-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-2-line.svg new file mode 100644 index 0000000000..c6f2e23d20 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 19H19V5H5V19ZM3 4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4ZM8 10L12 6L16 10H13V14H16L12 18L8 14H11V10L8 10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-vertical-fill.svg b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-fill.svg new file mode 100644 index 0000000000..51414161da --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 11L2 11L2 13L22 13V11ZM18 7L6 7V4L18 4V7ZM20 4C20 2.89543 19.1046 2 18 2L6 2C4.89543 2 4 2.89543 4 4L4 7C4 8.10457 4.89543 9 6 9L18 9C19.1046 9 20 8.10457 20 7V4ZM18 15C19.1046 15 20 15.8954 20 17V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20L4 17C4 15.8954 4.89543 15 6 15L18 15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flip-vertical-line.svg b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-line.svg new file mode 100644 index 0000000000..b5ca54ecd2 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/flip-vertical-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 11L2 11L2 13L22 13V11ZM18 2C19.1046 2 20 2.89543 20 4V7C20 8.10457 19.1046 9 18 9L6 9C4.89543 9 4 8.10457 4 7L4 4C4 2.89543 4.89543 2 6 2L18 2ZM18 20H6V17L18 17V20ZM20 17C20 15.8954 19.1046 15 18 15L6 15C4.89543 15 4 15.8954 4 17L4 20C4 21.1046 4.89543 22 6 22H18C19.1046 22 20 21.1046 20 20V17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/flower-line.svg b/client/packages/lowcoder-design/src/icons/remix/flower-line.svg index f02942bfa0..8f41a4b1f2 100644 --- a/client/packages/lowcoder-design/src/icons/remix/flower-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/flower-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9999 2.07611L12.4551 2.30879C14.2208 3.21143 15.7328 4.53809 16.8573 6.15473C17.7852 5.71402 18.7788 5.38872 19.8193 5.19758L21 4.98071V12.9998C21 17.9703 16.9706 22 12 22C7.02944 22 3 17.9705 3 13V4.98071L4.18066 5.19758C5.22115 5.38871 6.2147 5.71398 7.14253 6.15465C8.26706 4.53805 9.77902 3.21141 11.5447 2.30879L11.9999 2.07611ZM8.87757 7.16504C10.1073 8.02646 11.1679 9.11266 12 10.3644C12.8322 9.11272 13.893 8.02642 15.1223 7.16515C14.2952 6.01594 13.2302 5.04923 11.9999 4.33741C10.7697 5.0492 9.70468 6.01587 8.87757 7.16504ZM10.8993 12.4338C10.0182 10.7202 8.65593 9.2932 6.99112 8.33225C6.3667 7.97183 5.6999 7.67707 5 7.45728V13C5 16.2899 7.26961 19.0497 10.3285 19.7992C10.1137 18.9004 10 17.9629 10 16.9998C10 15.383 10.3198 13.8411 10.8993 12.4338ZM12.4531 19.9855C16.1079 19.752 19 16.7136 19 12.9998V7.45728C18.3 7.67709 17.6332 7.97187 17.0088 8.33233C14.0127 10.0617 12 13.2963 12 16.9998C12 18.041 12.1588 19.0436 12.4531 19.9855Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9999 2.07617L12.4551 2.30885C14.2208 3.21149 15.7328 4.53815 16.8573 6.15479C17.7852 5.71408 18.7788 5.38878 19.8193 5.19765L21 4.98077V12.9998C21 17.9703 16.9706 22 12 22C7.02944 22 3 17.9706 3 13V4.98077L4.18066 5.19765C5.22115 5.38877 6.2147 5.71404 7.14253 6.15472C8.26706 4.53811 9.77902 3.21147 11.5447 2.30885L11.9999 2.07617ZM8.87757 7.1651C10.1073 8.02652 11.1679 9.11272 12 10.3645C12.8322 9.11279 13.893 8.02648 15.1223 7.16521C14.2952 6.016 13.2302 5.04929 11.9999 4.33747C10.7697 5.04926 9.70468 6.01593 8.87757 7.1651ZM10.8993 12.4338C10.0182 10.7203 8.65593 9.29326 6.99112 8.33231C6.3667 7.97189 5.6999 7.67713 5 7.45734V13C5 16.29 7.26961 19.0498 10.3285 19.7992C10.1137 18.9004 10 17.9629 10 16.9998C10 15.3831 10.3198 13.8412 10.8993 12.4338ZM12.4531 19.9856C16.1079 19.7521 19 16.7136 19 12.9998V7.45734C18.3 7.67715 17.6332 7.97193 17.0088 8.33239C14.0127 10.0618 12 13.2964 12 16.9998C12 18.0411 12.1588 19.0437 12.4531 19.9856Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/font-size-ai.svg b/client/packages/lowcoder-design/src/icons/remix/font-size-ai.svg new file mode 100644 index 0000000000..e6b258b009 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/font-size-ai.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.4668 8.69379L19.7134 8.12811C20.1529 7.11947 20.9445 6.31641 21.9323 5.87708L22.6919 5.53922C23.1027 5.35653 23.1027 4.75881 22.6919 4.57612L21.9748 4.25714C20.9616 3.80651 20.1558 2.97373 19.7238 1.93083L19.4706 1.31953C19.2942 0.893489 18.7058 0.893489 18.5293 1.31953L18.2761 1.93083C17.8442 2.97373 17.0384 3.80651 16.0252 4.25714L15.308 4.57612C14.8973 4.75881 14.8973 5.35653 15.308 5.53922L16.0677 5.87708C17.0555 6.31641 17.8471 7.11947 18.2866 8.12811L18.5331 8.69379C18.7136 9.10792 19.2864 9.10792 19.4668 8.69379ZM4.75416 15H11.246L13.246 20H15.4001L9.0001 4H7.0001L0.600098 20H2.75416L4.75416 15ZM8.0001 6.88516L10.446 13H5.55416L8.0001 6.88516ZM21.0001 12V12.5351C20.4118 12.1948 19.7287 12 19.0001 12C16.791 12 15.0001 13.7909 15.0001 16C15.0001 18.2091 16.791 20 19.0001 20C19.7287 20 20.4118 19.8052 21.0001 19.4649V20H23.0001V12H21.0001ZM21.0001 16C21.0001 17.1046 20.1047 18 19.0001 18C17.8955 18 17.0001 17.1046 17.0001 16C17.0001 14.8954 17.8955 14 19.0001 14C20.1047 14 21.0001 14.8954 21.0001 16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/formula.svg b/client/packages/lowcoder-design/src/icons/remix/formula.svg new file mode 100644 index 0000000000..0f62173e58 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/formula.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10 2C7.79086 2 6 3.79086 6 6V9H3V11H6V18C6 19.1046 5.10457 20 4 20H3V22H4C6.20914 22 8 20.2091 8 18V11H11V9H8V6C8 4.89543 8.89543 4 10 4H11V2H10ZM15.2022 16.9971L11.8907 21H14.4864L16.5 18.5659L18.5137 21H21.1093L17.7979 16.9971L21.1046 13H18.5089L16.5 15.4283L14.4912 13H11.8955L15.2022 16.9971Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/function-add-fill.svg b/client/packages/lowcoder-design/src/icons/remix/function-add-fill.svg new file mode 100644 index 0000000000..b42b929f34 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/function-add-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V10C3 10.5523 3.44772 11 4 11H10C10.5523 11 11 10.5523 11 10V4C11 3.44772 10.5523 3 10 3H4ZM4 13C3.44772 13 3 13.4477 3 14V20C3 20.5523 3.44772 21 4 21H10C10.5523 21 11 20.5523 11 20V14C11 13.4477 10.5523 13 10 13H4ZM14 13C13.4477 13 13 13.4477 13 14V20C13 20.5523 13.4477 21 14 21H20C20.5523 21 21 20.5523 21 20V14C21 13.4477 20.5523 13 20 13H14ZM16 11V8H13V6H16V3H18V6H21V8H18V11H16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/function-add-line.svg b/client/packages/lowcoder-design/src/icons/remix/function-add-line.svg new file mode 100644 index 0000000000..b70b2bcf12 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/function-add-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V10C3 10.5523 3.44772 11 4 11H10C10.5523 11 11 10.5523 11 10V4C11 3.44772 10.5523 3 10 3H4ZM4 13C3.44772 13 3 13.4477 3 14V20C3 20.5523 3.44772 21 4 21H10C10.5523 21 11 20.5523 11 20V14C11 13.4477 10.5523 13 10 13H4ZM14 13C13.4477 13 13 13.4477 13 14V20C13 20.5523 13.4477 21 14 21H20C20.5523 21 21 20.5523 21 20V14C21 13.4477 20.5523 13 20 13H14ZM15 19V15H19V19H15ZM5 9V5H9V9H5ZM5 19V15H9V19H5ZM16 11V8H13V6H16V3H18V6H21V8H18V11H16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/function-fill.svg b/client/packages/lowcoder-design/src/icons/remix/function-fill.svg index 5130a65a97..ea1c5c961e 100644 --- a/client/packages/lowcoder-design/src/icons/remix/function-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/function-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3H11V11H3V3ZM3 13H11V21H3V13ZM13 3H21V11H13V3ZM13 13H21V21H13V13Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 4C3 3.44772 3.44772 3 4 3H10C10.5523 3 11 3.44772 11 4V10C11 10.5523 10.5523 11 10 11H4C3.44772 11 3 10.5523 3 10V4ZM3 14C3 13.4477 3.44772 13 4 13H10C10.5523 13 11 13.4477 11 14V20C11 20.5523 10.5523 21 10 21H4C3.44772 21 3 20.5523 3 20V14ZM13 4C13 3.44772 13.4477 3 14 3H20C20.5523 3 21 3.44772 21 4V10C21 10.5523 20.5523 11 20 11H14C13.4477 11 13 10.5523 13 10V4ZM13 14C13 13.4477 13.4477 13 14 13H20C20.5523 13 21 13.4477 21 14V20C21 20.5523 20.5523 21 20 21H14C13.4477 21 13 20.5523 13 20V14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/function-line.svg b/client/packages/lowcoder-design/src/icons/remix/function-line.svg index b130499724..9557ca05d4 100644 --- a/client/packages/lowcoder-design/src/icons/remix/function-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/function-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3H11V11H3V3ZM3 13H11V21H3V13ZM13 3H21V11H13V3ZM13 13H21V21H13V13ZM15 5V9H19V5H15ZM15 15V19H19V15H15ZM5 5V9H9V5H5ZM5 15V19H9V15H5Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 4C3 3.44772 3.44772 3 4 3H10C10.5523 3 11 3.44772 11 4V10C11 10.5523 10.5523 11 10 11H4C3.44772 11 3 10.5523 3 10V4ZM3 14C3 13.4477 3.44772 13 4 13H10C10.5523 13 11 13.4477 11 14V20C11 20.5523 10.5523 21 10 21H4C3.44772 21 3 20.5523 3 20V14ZM13 4C13 3.44772 13.4477 3 14 3H20C20.5523 3 21 3.44772 21 4V10C21 10.5523 20.5523 11 20 11H14C13.4477 11 13 10.5523 13 10V4ZM13 14C13 13.4477 13.4477 13 14 13H20C20.5523 13 21 13.4477 21 14V20C21 20.5523 20.5523 21 20 21H14C13.4477 21 13 20.5523 13 20V14ZM15 5V9H19V5H15ZM15 15V19H19V15H15ZM5 5V9H9V5H5ZM5 15V19H9V15H5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/gemini-fill.svg b/client/packages/lowcoder-design/src/icons/remix/gemini-fill.svg new file mode 100644 index 0000000000..3f758a1107 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/gemini-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M23.9996 12.0235C17.5625 12.4117 12.4114 17.563 12.0232 24H11.9762C11.588 17.563 6.4369 12.4117 0 12.0235V11.9765C6.4369 11.5883 11.588 6.43719 11.9762 0H12.0232C12.4114 6.43719 17.5625 11.5883 23.9996 11.9765V12.0235Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/gemini-line.svg b/client/packages/lowcoder-design/src/icons/remix/gemini-line.svg new file mode 100644 index 0000000000..d1925da047 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/gemini-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.1244 1.09094H12.8753L12.9269 1.9453C13.2227 6.85075 17.1493 10.7773 22.0546 11.0732L22.909 11.1247V12.8757L22.0546 12.9272C17.1493 13.2231 13.2227 17.1498 12.9269 22.0551L12.8753 22.9095H11.1244L11.0728 22.0551C10.777 17.1498 6.85036 13.2231 1.94518 12.9272L1.09082 12.8757V11.1247L1.94518 11.0732C6.85036 10.7773 10.777 6.85075 11.0728 1.9453L11.1244 1.09094ZM11.9999 5.85023C10.83 8.61547 8.61512 10.8304 5.84996 12.0002C8.61512 13.1701 10.83 15.385 11.9999 18.1502C13.1697 15.385 15.3846 13.1701 18.1498 12.0002C15.3846 10.8304 13.1697 8.61547 11.9999 5.85023Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/goblet-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/goblet-2-fill.svg new file mode 100644 index 0000000000..f1342bee0b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/goblet-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.13317 2L5.01052 9.85858C4.70849 11.9728 5.53231 13.7891 6.89117 15.0465C7.99601 16.0688 9.45948 16.7319 11.0005 16.9343V20H6.00047V22H18.0005V20H13.0005V16.9343C14.5415 16.7319 16.0049 16.0688 17.1098 15.0465C18.4686 13.7891 19.2924 11.9728 18.9904 9.85858L17.8678 2H6.13317ZM10.0003 7C9.16936 7.00013 8.16238 7.24244 7.37122 7.47579L7.86776 4H16.1332L16.6234 7.4314C15.7848 7.70691 14.8897 8 14.0005 8C12.6083 8 11.4276 6.99978 10.0003 7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/goblet-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/goblet-2-line.svg new file mode 100644 index 0000000000..c5306d0fd1 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/goblet-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.13317 2L5.01052 9.85858C4.70849 11.9728 5.53231 13.7891 6.89117 15.0465C7.99601 16.0688 9.45948 16.7319 11.0005 16.9343V20H6.00047V22H18.0005V20H13.0005V16.9343C14.5415 16.7319 16.0049 16.0688 17.1098 15.0465C18.4686 13.7891 19.2924 11.9728 18.9904 9.85858L17.8678 2H6.13317ZM6.99042 10.1414L7.86776 4H16.1332L17.0105 10.1414C17.2085 11.5272 16.6892 12.7109 15.7514 13.5785C14.7968 14.4618 13.4178 15 12.0005 15C10.5831 15 9.20412 14.4618 8.24948 13.5785C7.31177 12.7109 6.79245 11.5272 6.99042 10.1414Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/golf-ball-fill.svg b/client/packages/lowcoder-design/src/icons/remix/golf-ball-fill.svg new file mode 100644 index 0000000000..d075568dea --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/golf-ball-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM14 7C14 6.44772 13.5523 6 13 6C12.4477 6 12 6.44772 12 7C12 7.55228 12.4477 8 13 8C13.5523 8 14 7.55228 14 7ZM13 11C13.5523 11 14 10.5523 14 10C14 9.44772 13.5523 9 13 9C12.4477 9 12 9.44772 12 10C12 10.5523 12.4477 11 13 11ZM17 12C17 11.4477 16.5523 11 16 11C15.4477 11 15 11.4477 15 12C15 12.5523 15.4477 13 16 13C16.5523 13 17 12.5523 17 12ZM16 10C16.5523 10 17 9.55228 17 9C17 8.44772 16.5523 8 16 8C15.4477 8 15 8.44772 15 9C15 9.55228 15.4477 10 16 10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/golf-ball-line.svg b/client/packages/lowcoder-design/src/icons/remix/golf-ball-line.svg new file mode 100644 index 0000000000..451793eebb --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/golf-ball-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM14 7C14 7.55228 13.5523 8 13 8C12.4477 8 12 7.55228 12 7C12 6.44772 12.4477 6 13 6C13.5523 6 14 6.44772 14 7ZM13 11C13.5523 11 14 10.5523 14 10C14 9.44771 13.5523 9 13 9C12.4477 9 12 9.44771 12 10C12 10.5523 12.4477 11 13 11ZM17 12C17 12.5523 16.5523 13 16 13C15.4477 13 15 12.5523 15 12C15 11.4477 15.4477 11 16 11C16.5523 11 17 11.4477 17 12ZM16 10C16.5523 10 17 9.55229 17 9C17 8.44771 16.5523 8 16 8C15.4477 8 15 8.44771 15 9C15 9.55229 15.4477 10 16 10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/group-3-fill.svg b/client/packages/lowcoder-design/src/icons/remix/group-3-fill.svg new file mode 100644 index 0000000000..981d5170cb --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/group-3-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 7C2.5 9.20914 4.29086 11 6.5 11C8.70914 11 10.5 9.20914 10.5 7C10.5 4.79086 8.70914 3 6.5 3C4.29086 3 2.5 4.79086 2.5 7ZM2 21V16.5C2 14.0147 4.01472 12 6.5 12C8.98528 12 11 14.0147 11 16.5V21H2ZM17.5 11C15.2909 11 13.5 9.20914 13.5 7C13.5 4.79086 15.2909 3 17.5 3C19.7091 3 21.5 4.79086 21.5 7C21.5 9.20914 19.7091 11 17.5 11ZM13 21V16.5C13 14.0147 15.0147 12 17.5 12C19.9853 12 22 14.0147 22 16.5V21H13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/group-3-line.svg b/client/packages/lowcoder-design/src/icons/remix/group-3-line.svg new file mode 100644 index 0000000000..84440de518 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/group-3-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 7C8.5 8.10457 7.60457 9 6.5 9C5.39543 9 4.5 8.10457 4.5 7C4.5 5.89543 5.39543 5 6.5 5C7.60457 5 8.5 5.89543 8.5 7ZM2.5 7C2.5 9.20914 4.29086 11 6.5 11C8.70914 11 10.5 9.20914 10.5 7C10.5 4.79086 8.70914 3 6.5 3C4.29086 3 2.5 4.79086 2.5 7ZM9 16.5C9 15.1193 7.88071 14 6.5 14C5.11929 14 4 15.1193 4 16.5V19H9V16.5ZM11 21H2V16.5C2 14.0147 4.01472 12 6.5 12C8.98528 12 11 14.0147 11 16.5V21ZM19.5 7C19.5 8.10457 18.6046 9 17.5 9C16.3954 9 15.5 8.10457 15.5 7C15.5 5.89543 16.3954 5 17.5 5C18.6046 5 19.5 5.89543 19.5 7ZM13.5 7C13.5 9.20914 15.2909 11 17.5 11C19.7091 11 21.5 9.20914 21.5 7C21.5 4.79086 19.7091 3 17.5 3C15.2909 3 13.5 4.79086 13.5 7ZM20 16.5C20 15.1193 18.8807 14 17.5 14C16.1193 14 15 15.1193 15 16.5V19H20V16.5ZM13 19V16.5C13 14.0147 15.0147 12 17.5 12C19.9853 12 22 14.0147 22 16.5V21H13V19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/heart-add-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/heart-add-2-fill.svg new file mode 100644 index 0000000000..512b461c2e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/heart-add-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.5 3C19.5376 3 22 5.5 22 9C22 10.4251 21.6891 11.7259 21.1729 12.9066C20.2524 12.332 19.165 12 18 12C14.6863 12 12 14.6863 12 18C12 19.1005 12.2963 20.1318 12.8134 21.0185C12.506 21.2007 12.2316 21.3611 12 21.5C9.50001 20 2 16 2 9C2 5.5 4.5 3 7.5 3C9.35997 3 11 4 12 5C13 4 14.64 3 16.5 3ZM19 17V14H17V17H14V19H16.999L17 22H19L18.999 19H22V17H19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/heart-add-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/heart-add-2-line.svg new file mode 100644 index 0000000000..c19271b14b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/heart-add-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 9C4 6.49238 5.71351 5 7.5 5C9.40609 5 10.7537 6.58211 12 7.82843C13.2463 6.58211 14.5939 5 16.5 5C18.3158 5 20 6.48356 20 9C20 10.1222 19.7639 11.1501 19.3509 12.1019L21.1856 12.8981C21.7005 11.7114 22 10.4135 22 9C22 5.49592 19.5337 3 16.5 3C14.5905 3 13.1464 3.9848 12 5.02802C10.8536 3.9848 9.40952 3 7.5 3C4.50355 3 2 5.49623 2 9C2 12.0199 3.36207 14.4702 5.20346 16.445C7.03313 18.4073 9.38528 19.955 11.4916 21.1985L12.5084 19.4762C10.441 18.2557 8.29313 16.8259 6.66623 15.0811C5.05106 13.3489 4 11.3626 4 9ZM19 17V14H17V17H14V19H16.999L17 22H19L18.999 19H22V17H19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/home-9-fill.svg b/client/packages/lowcoder-design/src/icons/remix/home-9-fill.svg new file mode 100644 index 0000000000..c862102912 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/home-9-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.5812 2.68627C12.2335 2.43791 11.7664 2.43791 11.4187 2.68627L1.9187 9.47198L3.08118 11.0994L11.9999 4.7289L20.9187 11.0994L22.0812 9.47198L12.5812 2.68627ZM19.5812 12.6863L12.5812 7.68627C12.2335 7.43791 11.7664 7.43791 11.4187 7.68627L4.4187 12.6863C4.15591 12.874 3.99994 13.177 3.99994 13.5V20C3.99994 20.5523 4.44765 21 4.99994 21H18.9999C19.5522 21 19.9999 20.5523 19.9999 20V13.5C19.9999 13.177 19.844 12.874 19.5812 12.6863Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/home-9-line.svg b/client/packages/lowcoder-design/src/icons/remix/home-9-line.svg new file mode 100644 index 0000000000..82901eb607 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/home-9-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.5812 2.68627C12.2335 2.43791 11.7664 2.43791 11.4187 2.68627L1.9187 9.47198L3.08118 11.0994L11.9999 4.7289L20.9187 11.0994L22.0812 9.47198L12.5812 2.68627ZM19.5812 12.6863L12.5812 7.68627C12.2335 7.43791 11.7664 7.43791 11.4187 7.68627L4.4187 12.6863C4.15591 12.874 3.99994 13.177 3.99994 13.5V20C3.99994 20.5523 4.44765 21 4.99994 21H18.9999C19.5522 21 19.9999 20.5523 19.9999 20V13.5C19.9999 13.177 19.844 12.874 19.5812 12.6863ZM5.99994 19V14.0146L11.9999 9.7289L17.9999 14.0146V19H5.99994Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/id-card-fill.svg b/client/packages/lowcoder-design/src/icons/remix/id-card-fill.svg new file mode 100644 index 0000000000..34d9c99183 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/id-card-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M1 5C1 4.44772 1.44772 4 2 4H22C22.5523 4 23 4.44772 23 5V19C23 19.5523 22.5523 20 22 20H2C1.44772 20 1 19.5523 1 19V5ZM13 8V10H19V8H13ZM18 12H13V14H18V12ZM10.5 10C10.5 8.61929 9.38071 7.5 8 7.5C6.61929 7.5 5.5 8.61929 5.5 10C5.5 11.3807 6.61929 12.5 8 12.5C9.38071 12.5 10.5 11.3807 10.5 10ZM8 13.5C6.067 13.5 4.5 15.067 4.5 17H11.5C11.5 15.067 9.933 13.5 8 13.5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/id-card-line.svg b/client/packages/lowcoder-design/src/icons/remix/id-card-line.svg new file mode 100644 index 0000000000..a82d7245d6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/id-card-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 6H21V18H3V6ZM2 4C1.44772 4 1 4.44772 1 5V19C1 19.5523 1.44772 20 2 20H22C22.5523 20 23 19.5523 23 19V5C23 4.44772 22.5523 4 22 4H2ZM13 8H19V10H13V8ZM18 12H13V14H18V12ZM10.5 10C10.5 11.3807 9.38071 12.5 8 12.5C6.61929 12.5 5.5 11.3807 5.5 10C5.5 8.61929 6.61929 7.5 8 7.5C9.38071 7.5 10.5 8.61929 10.5 10ZM8 13.5C6.067 13.5 4.5 15.067 4.5 17H11.5C11.5 15.067 9.933 13.5 8 13.5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/image-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/image-ai-fill.svg new file mode 100644 index 0000000000..37fefadea2 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/image-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM2.9918 3H14V5H4V19L13.2923 9.70649C13.6828 9.31595 14.3159 9.31591 14.7065 9.70641L20 15.0104V11H22V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3ZM8 11C6.89543 11 6 10.1046 6 9C6 7.89543 6.89543 7 8 7C9.10457 7 10 7.89543 10 9C10 10.1046 9.10457 11 8 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/image-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/image-ai-line.svg new file mode 100644 index 0000000000..643cfea84f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/image-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM2.9918 3H14V5H4V19L14 9L20 15V11H22V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3ZM20 17.8284L14 11.8284L6.82843 19H20V17.8284ZM8 11C6.89543 11 6 10.1046 6 9C6 7.89543 6.89543 7 8 7C9.10457 7 10 7.89543 10 9C10 10.1046 9.10457 11 8 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/image-circle-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/image-circle-ai-fill.svg new file mode 100644 index 0000000000..400c008936 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/image-circle-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 11.5975 21.9762 11.2002 21.9298 10.8094L19.9437 11.0452C19.9809 11.3579 20 11.6765 20 12C20 12.9012 19.851 13.7676 19.5762 14.5759L15.7073 10.707C15.3168 10.3164 14.6836 10.3164 14.2931 10.707L6.86516 18.1349C5.11372 16.6674 4 14.4637 4 12C4 7.58172 7.58172 4 12 4C12.6919 4 13.3618 4.0876 14 4.25179L14.4983 2.31487C13.6987 2.10914 12.8614 2 12 2ZM9 12C10.1046 12 11 11.1046 11 10C11 8.89543 10.1046 8 9 8C7.89543 8 7 8.89543 7 10C7 11.1046 7.89543 12 9 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/image-circle-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/image-circle-ai-line.svg new file mode 100644 index 0000000000..5c04ccfcc5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/image-circle-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM12 4C7.58172 4 4 7.58172 4 12C4 14.4636 5.11358 16.6671 6.86484 18.1346L14.2925 10.707C14.683 10.3164 15.3162 10.3164 15.7067 10.707L19.5761 14.5764C19.5773 14.5729 19.5785 14.5693 19.5797 14.5658C19.8522 13.7604 20 12.8975 20 12C20 11.6765 19.9809 11.3579 19.9437 11.0452L21.9298 10.8094C21.9762 11.2002 22 11.5975 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C12.8614 2 13.6987 2.10914 14.4983 2.31487L14 4.25179C13.3618 4.0876 12.6919 4 12 4ZM10.813 19.9125C11.2 19.9701 11.5962 19.9998 11.9996 19.9998C14.7613 19.9998 17.1992 18.6003 18.6379 16.4666L14.9996 12.8283L8.58927 19.2386L8.59334 19.2405C9.28476 19.5664 10.0304 19.7961 10.813 19.9125ZM11 10C11 11.1046 10.1046 12 9 12C7.89543 12 7 11.1046 7 10C7 8.89543 7.89543 8 9 8C10.1046 8 11 8.89543 11 10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/info-card-fill.svg b/client/packages/lowcoder-design/src/icons/remix/info-card-fill.svg new file mode 100644 index 0000000000..de249dc24a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/info-card-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M1 5C1 4.44772 1.44772 4 2 4H22C22.5523 4 23 4.44772 23 5V19C23 19.5523 22.5523 20 22 20H2C1.44772 20 1 19.5523 1 19V5ZM9 8H7V10H9V8ZM7 13V16H9V11H6V13H7ZM13 9V11H19V9H13ZM18 13H13V15H18V13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/info-card-line.svg b/client/packages/lowcoder-design/src/icons/remix/info-card-line.svg new file mode 100644 index 0000000000..db0b7ee53e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/info-card-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 6H21V18H3V6ZM2 4C1.44772 4 1 4.44772 1 5V19C1 19.5523 1.44772 20 2 20H22C22.5523 20 23 19.5523 23 19V5C23 4.44772 22.5523 4 22 4H2ZM13 9H19V11H13V9ZM18 13H13V15H18V13ZM6 13H7V16H9V11H6V13ZM9 8H7V10H9V8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/information-off-fill.svg b/client/packages/lowcoder-design/src/icons/remix/information-off-fill.svg new file mode 100644 index 0000000000..b0c6b098b7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/information-off-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7429 18.3287C21.1536 16.6049 22 14.4013 22 12C22 6.47715 17.5228 2 12 2C9.59873 2 7.39514 2.84637 5.67127 4.25705L11.9142 10.5H13V11.5858L19.7429 18.3287ZM10 11.4142L4.25705 5.67127C2.84637 7.39514 2 9.59873 2 12C2 17.5228 6.47715 22 12 22C14.4013 22 16.6049 21.1536 18.3287 19.7429L14 15.4142V17H10V15H11V12.5H10V11.4142ZM13.5858 15H13V14.4142L13.5858 15ZM13.5 8C13.5 8.82843 12.8284 9.5 12 9.5C11.1716 9.5 10.5 8.82843 10.5 8C10.5 7.17157 11.1716 6.5 12 6.5C12.8284 6.5 13.5 7.17157 13.5 8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/information-off-line.svg b/client/packages/lowcoder-design/src/icons/remix/information-off-line.svg new file mode 100644 index 0000000000..6e79a8db97 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/information-off-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12ZM16.9056 18.3199C15.551 19.3729 13.8487 20 12 20C7.58172 20 4 16.4183 4 12C4 10.1513 4.62708 8.44904 5.68014 7.09436L10 11.4142V12.5H11V15H10V17H14V15.4142L16.9056 18.3199ZM18.3199 16.9056L13 11.5858V10.5H11.9142L7.09436 5.68014C8.44904 4.62708 10.1513 4 12 4C16.4183 4 20 7.58172 20 12C20 13.8487 19.3729 15.551 18.3199 16.9056ZM13 14.4142V15H13.5858L13 14.4142ZM12 9.5C12.8284 9.5 13.5 8.82843 13.5 8C13.5 7.17157 12.8284 6.5 12 6.5C11.1716 6.5 10.5 7.17157 10.5 8C10.5 8.82843 11.1716 9.5 12 9.5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/java-fill.svg b/client/packages/lowcoder-design/src/icons/remix/java-fill.svg new file mode 100644 index 0000000000..22ec97ca40 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/java-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15.6381 4.56605L15.6938 4.5979C14.9364 4.9983 12.7704 6.28707 12.7704 7.92968C12.7704 8.4836 13.0874 9.01832 13.3844 9.51951C13.6464 9.96157 13.893 10.3776 13.893 10.7576C13.893 11.7154 12.9598 12.4572 12.4328 12.7998L12.3326 12.7419C12.532 12.4988 12.7769 12.0921 12.7769 11.6583C12.7769 11.0601 12.4704 10.5823 12.159 10.0969C11.8375 9.59566 11.5106 9.08622 11.5106 8.42742C11.5106 6.1347 14.6259 4.90505 15.6381 4.56605ZM11.5434 5.77848C12.7958 4.65825 14.1645 3.43386 14.1645 1.59287C14.1645 0.759703 13.8238 0.227919 13.6546 0.0151978L13.6005 0.0463524C13.6419 0.211686 13.7011 0.518006 13.7011 0.917705C13.7011 2.59364 12.2794 3.76866 10.903 4.90626C9.61148 5.97365 8.35986 7.0081 8.35986 8.39247C8.35986 10.3768 10.3182 11.5983 11.1447 12.1138C11.1667 12.1275 11.1879 12.1407 11.2082 12.1534L11.2587 12.1243C11.2135 12.0755 11.1657 12.0246 11.1159 11.9716C10.4801 11.2952 9.51432 10.2677 9.51432 8.69722C9.51432 7.59357 10.4875 6.72305 11.5434 5.77848ZM11.0908 15.6857C12.8553 15.6857 14.0892 15.4328 14.637 15.2776L15.4693 15.7583C14.6762 16.1607 12.918 16.4679 11.0874 16.4679C8.93406 16.4679 6.58033 16.0056 6.57265 15.3901C6.5682 15.0509 7.3385 14.8244 8.1677 14.6778L8.21766 14.7068C8.21766 14.7068 7.93691 14.808 7.93983 15.0402C7.94424 15.3893 9.35916 15.6857 11.0908 15.6857ZM7.56243 17.857C7.56243 17.4495 8.40054 17.2571 8.78509 17.1805L8.83501 17.2094C8.76891 17.2586 8.73343 17.3259 8.73343 17.3827C8.73343 17.6501 9.66273 17.8944 11.0891 17.8944C12.3671 17.8944 13.0768 17.7367 13.4981 17.6363L14.4885 18.2094C14.4444 18.2411 13.4687 18.854 11.0867 18.854C9.35558 18.854 7.56243 18.4216 7.56243 17.857ZM16.0908 16.1289C17.2713 15.4563 18.4524 14.6603 18.519 13.3819C18.5628 12.5433 17.7924 11.9276 16.9493 12.0926L16.994 11.9801L16.9946 11.9781C17.2064 11.9136 17.4675 11.8618 17.761 11.8618C18.7036 11.8618 19.4266 12.427 19.5192 13.2181C19.705 14.8043 17.4574 15.8362 16.1978 16.1906L16.0908 16.1289ZM18.0656 19.1167C18.0751 20.2067 14.3677 20.8553 11.0541 20.8841C8.19296 20.9092 3.57989 20.3685 3.57033 19.2795C3.5637 18.5262 5.57092 18.0045 6.66027 17.8545L6.77512 17.9201C6.77512 17.9201 5.14953 18.2966 5.15551 18.9817C5.16149 19.665 8.58036 20.2563 11.0485 20.2348C14.8736 20.2014 17.4627 19.5776 17.769 18.7331L17.8234 18.702C17.9352 18.7838 18.0639 18.9191 18.0656 19.1167ZM6.43132 21.3375C7.78419 21.5649 9.39241 21.6739 10.7095 21.6623C16.9181 21.6081 18.6693 20.0816 18.9407 19.7504L18.9875 19.7777C18.9226 20.986 15.6401 21.99 11.5914 22.0254C9.52977 22.0433 7.65363 21.8047 6.30604 21.4096L6.43132 21.3375ZM9.03259 12.0541C7.95397 12.1371 5.63738 12.4797 5.63738 13.0904C5.63738 13.5516 7.76084 14.2028 11.0887 14.2028C14.083 14.2028 15.9733 13.6377 16.4136 13.4221L15.7707 13.048C15.3111 13.1734 13.6023 13.5539 11.0886 13.5539C9.60853 13.5539 7.05875 13.281 7.05875 12.8646C7.05875 12.4903 8.65043 12.2016 9.10709 12.1187C9.11713 12.1169 9.12662 12.1152 9.13553 12.1135L9.03259 12.0541Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/java-line.svg b/client/packages/lowcoder-design/src/icons/remix/java-line.svg new file mode 100644 index 0000000000..030ca53e01 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/java-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.8193 8.42654C10.0602 7.34217 9.77392 6.55513 9.71179 5.98243C9.6531 5.44149 9.78522 5.01294 10.0473 4.59929C10.3303 4.15244 10.755 3.73687 11.2954 3.24643C11.8004 2.78803 12.4323 2.24339 12.9281 1.62639L11.369 0.373657C10.9532 0.891134 10.4413 1.32064 9.95118 1.76549C9.41712 2.25024 8.80225 2.82728 8.35773 3.52902C7.89217 4.26395 7.60866 5.13997 7.72346 6.19813C7.83481 7.22454 8.31113 8.33114 9.18085 9.57351L10.8193 8.42654ZM12.0691 5.39666C12.3539 4.71314 12.9313 4.02758 13.8492 3.24077L15.1508 4.75928C14.3187 5.47247 14.0211 5.91191 13.9153 6.16589C13.8112 6.41559 13.8802 6.66497 13.9502 6.91319C14.0337 7.20908 14.1728 7.70231 14.1639 8.23544C14.1522 8.94083 13.9104 9.6872 13.3321 10.5547L11.6679 9.44533C12.0896 8.81285 12.1603 8.43422 12.1642 8.20211C12.1691 7.907 12.0921 7.74146 11.9674 7.24256C11.8478 6.76427 11.7573 6.14506 12.0691 5.39666ZM6.14205 9.99985C6.61127 9.68577 7.19166 9.52606 7.73387 9.39563L7.26613 7.4511C6.45314 7.64666 5.71471 7.91182 5.15413 8.25779C4.64408 8.57258 4 9.13581 4 9.99993C4 10.7262 4.48572 11.306 5.06549 11.6857C5.02301 11.8687 5 12.0596 5 12.2576C5 13.238 5.41805 14.0646 6.14274 14.6786C6.03632 14.9777 5.98811 15.3119 6.00331 15.6465C5.22587 15.7972 4.46698 16.0193 3.83335 16.3097C3.40087 16.5079 2.97509 16.7612 2.64304 17.0874C2.30876 17.4157 2 17.8913 2 18.5C2 18.927 2.18863 19.2717 2.37382 19.5093C2.56286 19.7519 2.8059 19.9586 3.05811 20.1338C3.56429 20.4854 4.24239 20.8028 5.0167 21.0702C6.57504 21.6084 8.68585 22 11 22C14.3273 22 16.6627 21.6161 18.1899 21.2177C18.9534 21.0185 19.5137 20.816 19.894 20.6568C20.1036 20.5691 20.3141 20.4759 20.5102 20.3601C20.5209 20.3537 19.4817 18.6448 19.4864 18.642C18.9216 18.9361 18.2983 19.1224 17.6851 19.2824C16.3373 19.634 14.1727 20 11 20C8.89587 20 7.00668 19.6416 5.6696 19.1798C5.13841 18.9964 4.58196 18.7818 4.12894 18.4405C4.24432 18.3492 4.41971 18.241 4.66665 18.1278C5.22462 17.8721 5.98958 17.6623 6.80607 17.5366C7.03515 17.7796 7.30872 17.994 7.62113 18.1763C8.58641 18.7394 9.91268 19 11.5 19C12.81 19 13.7578 18.8682 14.3982 18.7263C14.7536 18.6476 15.1117 18.5587 15.4402 18.3979C15.4434 18.3964 14.5589 16.6026 14.5589 16.6026C14.3651 16.6735 14.1673 16.729 13.9657 16.7737C13.4775 16.8818 12.6753 17 11.5 17C10.0873 17 9.16359 16.7606 8.62887 16.4487C8.20348 16.2006 8.04009 15.9254 8.00673 15.6255C8.87463 15.8783 9.90235 16 11.0625 16C12.5261 16 13.5815 15.8565 14.2908 15.7033C14.6765 15.62 15.0664 15.5241 15.4255 15.3566C15.4458 15.3469 14.5678 13.5498 14.5678 13.5498C14.513 13.5722 14.2892 13.6575 13.8686 13.7483C13.3082 13.8694 12.3949 14 11.0625 14C9.45935 14 8.39107 13.7356 7.76003 13.3767C7.28904 13.1088 7.08228 12.8089 7.02081 12.487C8.26048 12.8135 9.82491 12.9999 11.5 12.9999C13.3167 12.9999 15.0016 12.7806 16.2832 12.4022L15.7168 10.4841C14.6626 10.7954 13.1762 10.9999 11.5 10.9999C9.77625 10.9999 8.25501 10.7836 7.19789 10.4584C6.69889 10.3048 6.35214 10.1417 6.14205 9.99985ZM17.5905 10.7457C18.8029 10.6355 19.2497 10.934 19.3939 11.0885C19.543 11.2483 19.5952 11.496 19.5299 11.7573C19.4137 12.2219 19.0872 12.6724 18.5567 13.0863C18.0281 13.4988 17.3563 13.8266 16.6839 14.0506L17.3161 15.9481C18.1437 15.6723 19.0344 15.2504 19.787 14.6631C20.5378 14.0773 21.2113 13.278 21.4701 12.2424C21.6547 11.5039 21.5819 10.5016 20.8561 9.72387C20.1252 8.94081 18.9471 8.61417 17.4095 8.75396L17.5905 10.7457Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/landscape-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/landscape-ai-fill.svg new file mode 100644 index 0000000000..18dc067ef9 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/landscape-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.2134 8.62811L5.96682 9.19379C5.78637 9.60792 5.21357 9.60792 5.03312 9.19379L4.78656 8.62811C4.34706 7.61947 3.55545 6.81641 2.56767 6.37708L1.80805 6.03922C1.39732 5.85653 1.39732 5.25881 1.80805 5.07612L2.5252 4.75714C3.53838 4.30651 4.34417 3.47373 4.77612 2.43083L5.02932 1.81953C5.20578 1.39349 5.79417 1.39349 5.97063 1.81953L6.22382 2.43083C6.65577 3.47373 7.46158 4.30651 8.4748 4.75714L9.19188 5.07612C9.60271 5.25881 9.60271 5.85653 9.19188 6.03922L8.43228 6.37708C7.44451 6.81641 6.65288 7.61947 6.2134 8.62811ZM11.2381 12.2698L16 21H23L15 6L11.2381 12.2698ZM14 21L8 10L2 21H14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/landscape-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/landscape-ai-line.svg new file mode 100644 index 0000000000..3ec508c41d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/landscape-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.2134 8.62811L5.96682 9.19379C5.78637 9.60792 5.21357 9.60792 5.03312 9.19379L4.78656 8.62811C4.34706 7.61947 3.55545 6.81641 2.56767 6.37708L1.80805 6.03922C1.39732 5.85653 1.39732 5.25881 1.80805 5.07612L2.5252 4.75714C3.53838 4.30651 4.34417 3.47373 4.77612 2.43083L5.02932 1.81953C5.20578 1.39349 5.79417 1.39349 5.97063 1.81953L6.22382 2.43083C6.65577 3.47373 7.46158 4.30651 8.4748 4.75714L9.19188 5.07612C9.60271 5.25881 9.60271 5.85653 9.19188 6.03922L8.43228 6.37708C7.44451 6.81641 6.65288 7.61947 6.2134 8.62811ZM15 6L11.2703 12.2162L9 8L2 21H23L15 6ZM14.9873 19L12.3897 14.2378L14.8976 10.058L19.6667 19H14.9873ZM12.6516 19H5.34843L9 12.2185L12.6516 19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/layout-grid-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/layout-grid-2-fill.svg new file mode 100644 index 0000000000..162dcacc32 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/layout-grid-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3C2.44772 3 2 3.44772 2 4V8L7.5 8V3H3ZM9.5 3V8H14.5V3H9.5ZM16.5 3V8H22V4C22 3.44772 21.5523 3 21 3H16.5ZM22 10H16.5V14H22V10ZM22 16H16.5V21H21C21.5523 21 22 20.5523 22 20V16ZM14.5 21V16H9.5V21H14.5ZM7.5 21V16H2V20C2 20.5523 2.44772 21 3 21H7.5ZM2 14H7.5V10L2 10V14ZM9.5 10H14.5V14H9.5V10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/layout-grid-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/layout-grid-2-line.svg new file mode 100644 index 0000000000..ac75881642 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/layout-grid-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 10L8 10V14H4V10ZM4 19V16H8V19H4ZM10 19V16H14V19H10ZM16 19V16H20V19H16ZM16 14V10H20V14H16ZM16 8V5H20V8H16ZM14 5V8H10V5H14ZM14 10V14H10V10H14ZM4 8V5H8V8L4 8ZM3 3C2.44772 3 2 3.44772 2 4V20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20V4C22 3.44772 21.5523 3 21 3H3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/layout-horizontal-fill.svg b/client/packages/lowcoder-design/src/icons/remix/layout-horizontal-fill.svg new file mode 100644 index 0000000000..7def54d976 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/layout-horizontal-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM7 9V7H17V9H7ZM7 13V11H17V13H7ZM17 17H7V15H17V17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/layout-horizontal-line.svg b/client/packages/lowcoder-design/src/icons/remix/layout-horizontal-line.svg new file mode 100644 index 0000000000..5ae1e9a9ad --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/layout-horizontal-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 19H19V5H5V19ZM3 4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4ZM7 9H17V7H7V9ZM17 13H7V11H17V13ZM7 17H17V15H7V17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/layout-vertical-fill.svg b/client/packages/lowcoder-design/src/icons/remix/layout-vertical-fill.svg new file mode 100644 index 0000000000..8b9daabc68 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/layout-vertical-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4ZM6.99993 16.9999V6.99993H8.99993V16.9999H6.99993ZM10.9999 6.99993H12.9999V16.9999H10.9999V6.99993ZM14.9999 6.99993H16.9999V16.9999H14.9999V6.99993Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/layout-vertical-line.svg b/client/packages/lowcoder-design/src/icons/remix/layout-vertical-line.svg new file mode 100644 index 0000000000..17ab99dd0b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/layout-vertical-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 19H19V5H5V19ZM3 4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4ZM15 7V17H17V7H15ZM11 7L11 17H13V7H11ZM7 17L7 7L9 7L9 17H7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/letter-spacing-2.svg b/client/packages/lowcoder-design/src/icons/remix/letter-spacing-2.svg new file mode 100644 index 0000000000..78071d825d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/letter-spacing-2.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6.19983 14H8.3539L9.55389 11H14.4458L15.6458 14H17.7998L12.9998 2H10.9998L6.19983 14ZM11.9998 4.88517 13.6458 9H10.3539L11.9998 4.88517ZM3 16V22L5 22 4.99992 20H18.9999L19 22 21 22 20.9999 16H18.9999V18H4.99992L5 16 3 16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/line-height-2.svg b/client/packages/lowcoder-design/src/icons/remix/line-height-2.svg new file mode 100644 index 0000000000..c54792e4a9 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/line-height-2.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.00012L2.00008 5.00012L4.00004 5.00004L4.00004 19L2 19.0001L2.00008 21.0001L8.00004 21V19H6.00004L6.00004 5.00004L8 5.00012L8.00008 3.00012L2 3.00012ZM10.2 18H12.3541L13.5541 15H18.4459L19.6459 18H21.8L17 6H15L10.2 18ZM16 8.88517L17.6459 13H14.3541L16 8.88517Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mail-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/mail-ai-fill.svg new file mode 100644 index 0000000000..fe974e84d9 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mail-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM19.9999 11C20.7012 11 21.3744 10.8797 22 10.6586V20C22 20.5523 21.5523 21 21 21H2V4C2 3.44772 2.44772 3 3 3H14.3413C14.1202 3.62556 13.9999 4.29873 13.9999 5C13.9999 6.44366 14.5098 7.76824 15.3593 8.80348L11.9999 11.6829L5.6507 6.24074L4.34912 7.75926L11.9999 14.3171L16.8855 10.1294C17.7934 10.6818 18.8595 11 19.9999 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mail-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/mail-ai-line.svg new file mode 100644 index 0000000000..8295e7bada --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mail-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM2 4C2 3.44772 2.44772 3 3 3H14V5H4.5052L12 11.662L16.3981 7.75259L17.7269 9.24741L12 14.338L4 7.22684V19H20V11H22V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-2-fill.svg new file mode 100644 index 0000000000..dccba128c1 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4 3.5L9 8.49955L4 13.5V3.5ZM21 19.9995V17.9995H3V19.9995H21ZM21 12.9995V10.9995H12V12.9995H21ZM21 5.99951V3.99951H12V5.99951H21Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-2-line.svg new file mode 100644 index 0000000000..25b6857f0a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.40347 3.90332L2.98926 5.31753L6.17124 8.49951L2.98926 11.6815L4.40347 13.0957L8.99967 8.49951L4.40347 3.90332ZM20.9997 19.9995V17.9995H2.99967V19.9995H20.9997ZM20.9997 12.9995V10.9995H11.9997V12.9995H20.9997ZM20.9997 5.99951V3.99951H11.9997V5.99951H20.9997Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-3-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-3-fill.svg new file mode 100644 index 0000000000..5137e4d88a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-3-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 4H7V6H21V4ZM21 11H11V13H21V11ZM21 18H7V20H21V18ZM8 17V7L3 11.9996L8 17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-3-line.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-3-line.svg new file mode 100644 index 0000000000..1c551f3ea5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-3-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 4H7V6H21V4ZM21 11H11V13H21V11ZM21 18H7V20H21V18ZM9.01041 8.81412L7.59619 7.3999L3 11.9961L7.59619 16.5923L9.01041 15.1781L5.82843 11.9961L9.01041 8.81412Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-4-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-4-fill.svg new file mode 100644 index 0000000000..df6254e2c6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-4-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 4H7V6H21V4ZM21 11H11V13H21V11ZM21 18H7V20H21V18ZM3 17V7L8 11.9996L3 17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-4-line.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-4-line.svg new file mode 100644 index 0000000000..2a4718e0e8 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-4-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.9997 4H6.99967V6H20.9997V4ZM20.9997 11H10.9997V13H20.9997V11ZM20.9997 18H6.99967V20H20.9997V18ZM1.98926 8.81412L3.40347 7.3999L7.99967 11.9961L3.40347 16.5923L1.98926 15.1781L5.17124 11.9961L1.98926 8.81412Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-fold-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-fold-fill.svg index 445f1e36cc..c9890fda42 100644 --- a/client/packages/lowcoder-design/src/icons/remix/menu-fold-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/menu-fold-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 17.9996V19.9996H3V17.9996H21ZM6.94975 3.5498V13.4493L2 8.49955L6.94975 3.5498ZM21 10.9996V12.9996H12V10.9996H21ZM21 3.99955V5.99955H12V3.99955H21Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 17.9996V19.9996H3V17.9996H21ZM7 3.5V13.5L2 8.49955L7 3.5ZM21 10.9996V12.9996H12V10.9996H21ZM21 3.99955V5.99955H12V3.99955H21Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-2-fill.svg new file mode 100644 index 0000000000..76b33487b6 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 3.5V13.5L16 8.49955L21 3.5ZM21 19.9995V17.9995H3V19.9995H21ZM12 12.9995V10.9995H3V12.9995H12ZM12 5.99951V3.99951H3V5.99951H12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-2-line.svg new file mode 100644 index 0000000000..0f555eb767 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.5956 3.90332L15.9994 8.49951L20.5956 13.0957L22.0098 11.6815L18.8278 8.49951L22.0098 5.31753L20.5956 3.90332ZM21 19.9995V17.9995H3V19.9995H21ZM12 12.9995V10.9995H3V12.9995H12ZM12 5.99951V3.99951H3V5.99951H12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-3-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-3-fill.svg new file mode 100644 index 0000000000..7c882453e0 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-3-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 4H3V6H17V4ZM13 11H3V13H13V11ZM17 18H3V20H17V18ZM17 17V7L22 11.9996L17 17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-3-line.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-3-line.svg new file mode 100644 index 0000000000..a223280d93 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-3-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 4H3V6H17V4ZM13 11H3V13H13V11ZM17 18H3V20H17V18ZM15.9896 8.81412L17.4038 7.3999L22 11.9961L17.4038 16.5923L15.9896 15.1781L19.1716 11.9961L15.9896 8.81412Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-4-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-4-fill.svg new file mode 100644 index 0000000000..3d28776823 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-4-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 4H3V6H17V4ZM13 11H3V13H13V11ZM17 18H3V20H17V18ZM21 17V7L16 11.9996L21 17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-4-line.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-4-line.svg new file mode 100644 index 0000000000..a51e2b5599 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-4-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 4H3V6H17V4ZM13 11H3V13H13V11ZM17 18H3V20H17V18ZM22.0104 8.81412L20.5962 7.3999L16 11.9961L20.5962 16.5923L22.0104 15.1781L18.8284 11.9961L22.0104 8.81412Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-fill.svg b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-fill.svg index c63a8cb4ff..1c0b6bbb30 100644 --- a/client/packages/lowcoder-design/src/icons/remix/menu-unfold-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/menu-unfold-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 17.9996V19.9996H3V17.9996H21ZM17.0503 3.5498L22 8.49955L17.0503 13.4493V3.5498ZM12 10.9996V12.9996H3V10.9996H12ZM12 3.99955V5.99955H3V3.99955H12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M21 17.9996V19.9996H3V17.9996H21ZM17 3.5L22 8.49955L17 13.5V3.5ZM12 10.9996V12.9996H3V10.9996H12ZM12 3.99955V5.99955H3V3.99955H12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mic-2-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/mic-2-ai-fill.svg new file mode 100644 index 0000000000..4fd3bce176 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mic-2-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.3869 6.33879C14.661 6.77254 15.0357 7.09305 15.5111 7.30032L16.0764 7.54679C16.4567 7.71256 16.7646 7.94544 17.0001 8.24543V12C17.0001 14.7614 14.7615 17 12.0001 17C9.23865 17 7.00008 14.7614 7.00008 12V6C7.00008 3.23858 9.23865 1 12.0001 1C13.4596 1 14.7731 1.6254 15.6872 2.62284L15.5109 2.6997C15.0357 2.90685 14.661 3.22733 14.3869 3.66114C14.129 4.06938 14 4.51566 14 4.99997C14 5.48428 14.129 5.93056 14.3869 6.33879ZM2.19238 13.9615L4.15392 13.5692C4.88321 17.2361 8.11888 20 12.0001 20C15.8813 20 19.1169 17.2361 19.8462 13.5692L21.8078 13.9615C20.8961 18.5452 16.8516 22 12.0001 22C7.14858 22 3.104 18.5452 2.19238 13.9615ZM19.4668 8.69379L19.7134 8.12811C20.1529 7.11947 20.9445 6.31641 21.9323 5.87708L22.6919 5.53922C23.1027 5.35653 23.1027 4.75881 22.6919 4.57612L21.9748 4.25714C20.9616 3.80651 20.1558 2.97373 19.7238 1.93083L19.4706 1.31953C19.2942 0.893489 18.7058 0.893489 18.5293 1.31953L18.2761 1.93083C17.8442 2.97373 17.0384 3.80651 16.0252 4.25714L15.308 4.57612C14.8973 4.75881 14.8973 5.35653 15.308 5.53922L16.0677 5.87708C17.0555 6.31641 17.8471 7.11947 18.2866 8.12811L18.5331 8.69379C18.7136 9.10792 19.2864 9.10792 19.4668 8.69379Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mic-2-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/mic-2-ai-line.svg new file mode 100644 index 0000000000..2f85039566 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mic-2-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 7.12811L20.4668 7.69379C20.2864 8.10792 19.7136 8.10792 19.5331 7.69379L19.2866 7.12811C18.8471 6.11947 18.0555 5.31641 17.0677 4.87708L16.308 4.53922C15.8973 4.35653 15.8973 3.75881 16.308 3.57612L17.0252 3.25714C18.0384 2.80651 18.8442 1.97373 19.2761 0.930828L19.5293 0.319534C19.7058 -0.106511 20.2942 -0.106511 20.4706 0.319534L20.7238 0.930828C21.1558 1.97373 21.9616 2.80651 22.9748 3.25714L23.6919 3.57612C24.1027 3.75881 24.1027 4.35653 23.6919 4.53922L22.9323 4.87708C21.9445 5.31641 21.1529 6.11947 20.7134 7.12811ZM7 6C7 3.23858 9.23858 1 12 1C12.9914 1 13.9182 1.28957 14.6969 1.7891L13.617 3.47248C13.1509 3.17349 12.5972 3 12 3C10.3431 3 9 4.34315 9 6V12C9 13.6569 10.3431 15 12 15C13.6569 15 15 13.6569 15 12V7H17V12C17 14.7614 14.7614 17 12 17C9.23858 17 7 14.7614 7 12V6ZM2.19238 13.9617L4.15392 13.5693C4.88321 17.2362 8.11888 20.0001 12.0001 20.0001C15.8813 20.0001 19.1169 17.2363 19.8462 13.5693L21.8078 13.9617C20.8961 18.5453 16.8516 22.0001 12.0001 22.0001C7.14858 22.0001 3.104 18.5453 2.19238 13.9617Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mic-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/mic-ai-fill.svg new file mode 100644 index 0000000000..24ee07345f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mic-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.3869 6.33879C14.661 6.77254 15.0357 7.09305 15.5111 7.30032L16.0764 7.54679C16.4565 7.71249 16.7643 7.94524 16.9998 8.24503V10C16.9998 12.7614 14.7612 15 11.9998 15C9.23833 15 6.99976 12.7614 6.99976 10V6C6.99976 3.23858 9.23833 1 11.9998 1C13.4594 1 14.7729 1.62544 15.687 2.62293L15.5109 2.6997C15.0357 2.90685 14.661 3.22733 14.3869 3.66114C14.129 4.06938 14 4.51566 14 4.99997C14 5.48428 14.129 5.93056 14.3869 6.33879ZM3.05469 11H5.07065C5.55588 14.3923 8.47329 17 11.9998 17C15.5262 17 18.4436 14.3923 18.9289 11H20.9448C20.4837 15.1716 17.1714 18.4839 12.9998 18.9451V23H10.9998V18.9451C6.82814 18.4839 3.51584 15.1716 3.05469 11ZM19.4668 8.69379L19.7134 8.12811C20.1529 7.11947 20.9445 6.31641 21.9323 5.87708L22.6919 5.53922C23.1027 5.35653 23.1027 4.75881 22.6919 4.57612L21.9748 4.25714C20.9616 3.80651 20.1558 2.97373 19.7238 1.93083L19.4706 1.31953C19.2942 0.893489 18.7058 0.893489 18.5293 1.31953L18.2761 1.93083C17.8442 2.97373 17.0384 3.80651 16.0252 4.25714L15.308 4.57612C14.8973 4.75881 14.8973 5.35653 15.308 5.53922L16.0677 5.87708C17.0555 6.31641 17.8471 7.11947 18.2866 8.12811L18.5331 8.69379C18.7136 9.10792 19.2864 9.10792 19.4668 8.69379Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mic-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/mic-ai-line.svg new file mode 100644 index 0000000000..9ff2c6678f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mic-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 7.69379L20.7134 7.12811C21.1529 6.11947 21.9445 5.31641 22.9323 4.87708L23.6919 4.53922C24.1027 4.35653 24.1027 3.75881 23.6919 3.57612L22.9748 3.25714C21.9616 2.80651 21.1558 1.97373 20.7238 0.930828L20.4706 0.319534C20.2942 -0.106511 19.7058 -0.106511 19.5293 0.319534L19.2761 0.930828C18.8442 1.97373 18.0384 2.80651 17.0252 3.25714L16.308 3.57612C15.8973 3.75881 15.8973 4.35653 16.308 4.53922L17.0677 4.87708C18.0555 5.31641 18.8471 6.11947 19.2866 7.12811L19.5331 7.69379C19.7136 8.10792 20.2864 8.10792 20.4668 7.69379ZM3.05469 11H5.07065C5.55588 14.3923 8.47329 17 11.9998 17C15.5262 17 18.4436 14.3923 18.9289 11H20.9448C20.4837 15.1716 17.1714 18.4839 12.9998 18.9451V23H10.9998V18.9451C6.82814 18.4839 3.51584 15.1716 3.05469 11ZM12 1C9.23858 1 7 3.23858 7 6V10C7 12.7614 9.23858 15 12 15C14.7614 15 17 12.7614 17 10V7H15V10C15 11.6569 13.6569 13 12 13C10.3431 13 9 11.6569 9 10V6C9 4.34315 10.3431 3 12 3C12.5972 3 13.1509 3.17349 13.617 3.47248L14.6969 1.7891C13.9182 1.28957 12.9914 1 12 1Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mixtral-fill.svg b/client/packages/lowcoder-design/src/icons/remix/mixtral-fill.svg new file mode 100644 index 0000000000..fcf3987ca3 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mixtral-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3H6.6V6.6L10.2001 6.6001V10.2001L13.8 10.2002L13.8 6.6001H17.3999V3H20.9999V20.9999H17.3999V13.8002L13.8 13.7998V17.3998H10.2V13.8002L6.6 13.7998V20.9999H3V3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mixtral-line.svg b/client/packages/lowcoder-design/src/icons/remix/mixtral-line.svg new file mode 100644 index 0000000000..3e62914fed --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mixtral-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3H8.20002V6.20004L11.4001 6.20013V9.40015L12.6 9.40018L12.6001 6.2001H15.8V3H21V21H15.8V14.6001L14.6 14.6V17.7999H9.39999V14.6001L8.20002 14.6V21H3V3ZM5 5V19H6.20002V12.5998L11.4 12.6003V15.7999H12.6V12.5998L17.8 12.6003V19H19V5H17.8V8.2001H14.6001L14.6 11.4002L9.40012 11.4001V8.20008L6.20002 8.19999V5H5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mobile-download-fill.svg b/client/packages/lowcoder-design/src/icons/remix/mobile-download-fill.svg new file mode 100644 index 0000000000..f5bca3cd33 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mobile-download-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 6C12 4.46329 12.5777 3.06151 13.5278 2H6C5.44772 2 5 2.44772 5 3V21C5 21.5523 5.44772 22 6 22H18C18.5523 22 19 21.5523 19 21V11.917C18.6748 11.9716 18.3407 12 18 12C14.6863 12 12 9.31371 12 6ZM12 17C12.5523 17 13 17.4477 13 18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18C11 17.4477 11.4477 17 12 17ZM22 6H19V2H17V6H14L18 10L22 6Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mobile-download-line.svg b/client/packages/lowcoder-design/src/icons/remix/mobile-download-line.svg new file mode 100644 index 0000000000..c992aa6b4b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mobile-download-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7 4V20H17V12H19V21C19 21.5523 18.5523 22 18 22H6C5.44772 22 5 21.5523 5 21V3C5 2.44772 5.44772 2 6 2H13V4H7ZM19 6H22L18 10L14 6H17V2H19V6ZM13 18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18C11 17.4477 11.4477 17 12 17C12.5523 17 13 17.4477 13 18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/movie-2-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/movie-2-ai-fill.svg new file mode 100644 index 0000000000..b67632b011 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/movie-2-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM20 11C20.6695 11 21.3134 10.8903 21.9147 10.688C21.971 11.1174 22 11.5553 22 12C22 15.2712 20.4293 18.1755 18.001 20H20V22H12C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C12.9056 2 13.7831 2.12039 14.6174 2.34603C14.2221 3.14617 14 4.04715 14 5C14 8.31371 16.6863 11 20 11ZM12 10C13.1046 10 14 9.10457 14 8C14 6.89543 13.1046 6 12 6C10.8954 6 10 6.89543 10 8C10 9.10457 10.8954 10 12 10ZM8 14C9.10457 14 10 13.1046 10 12C10 10.8954 9.10457 10 8 10C6.89543 10 6 10.8954 6 12C6 13.1046 6.89543 14 8 14ZM16 14C17.1046 14 18 13.1046 18 12C18 10.8954 17.1046 10 16 10C14.8954 10 14 10.8954 14 12C14 13.1046 14.8954 14 16 14ZM12 18C13.1046 18 14 17.1046 14 16C14 14.8954 13.1046 14 12 14C10.8954 14 10 14.8954 10 16C10 17.1046 10.8954 18 12 18Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/movie-2-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/movie-2-ai-line.svg new file mode 100644 index 0000000000..17999cdb36 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/movie-2-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22H20V20H18.001C18.7582 19.4311 19.4319 18.7572 20.0007 18C21.2561 16.3287 22 14.2512 22 12C22 11.5975 21.9762 11.2002 21.9298 10.8094L19.9437 11.0452C19.9809 11.3579 20 11.6765 20 12C20 14.3894 18.9525 16.5341 17.2916 18C15.8814 19.2447 14.0289 20 12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C12.6919 4 13.3618 4.0876 14 4.25179L14.4983 2.31487C13.6987 2.10914 12.8614 2 12 2ZM10 8C10 9.10457 10.8954 10 12 10C13.1046 10 14 9.10457 14 8C14 6.89543 13.1046 6 12 6C10.8954 6 10 6.89543 10 8ZM6 12C6 13.1046 6.89543 14 8 14C9.10457 14 10 13.1046 10 12C10 10.8954 9.10457 10 8 10C6.89543 10 6 10.8954 6 12ZM14 12C14 13.1046 14.8954 14 16 14C17.1046 14 18 13.1046 18 12C18 10.8954 17.1046 10 16 10C14.8954 10 14 10.8954 14 12ZM10 16C10 17.1046 10.8954 18 12 18C13.1046 18 14 17.1046 14 16C14 14.8954 13.1046 14 12 14C10.8954 14 10 14.8954 10 16Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/movie-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/movie-ai-fill.svg new file mode 100644 index 0000000000..23555f425c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/movie-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM20 11C20.7013 11 21.3744 10.8797 22 10.6586V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3H14.3414C14.1203 3.62556 14 4.29873 14 5C14 8.31371 16.6863 11 20 11ZM10.6219 8.41459C10.5562 8.37078 10.479 8.34741 10.4 8.34741C10.1791 8.34741 10 8.52649 10 8.74741V15.2526C10 15.3316 10.0234 15.4088 10.0672 15.4745C10.1897 15.6583 10.4381 15.708 10.6219 15.5854L15.5008 12.3328C15.5447 12.3035 15.5824 12.2658 15.6117 12.2219C15.7343 12.0381 15.6846 11.7897 15.5008 11.6672L10.6219 8.41459Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/movie-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/movie-ai-line.svg new file mode 100644 index 0000000000..ec34b90016 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/movie-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1529 7.11947 20.7134 8.12811ZM2.9918 3H14V5H4V19H20V11H22V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3ZM10.6219 8.41459L15.5008 11.6672C15.6846 11.7897 15.7343 12.0381 15.6117 12.2219C15.5824 12.2658 15.5447 12.3035 15.5008 12.3328L10.6219 15.5854C10.4381 15.708 10.1897 15.6583 10.0672 15.4745C10.0234 15.4088 10 15.3316 10 15.2526V8.74741C10 8.52649 10.1791 8.34741 10.4 8.34741C10.479 8.34741 10.5562 8.37078 10.6219 8.41459Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/music-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/music-ai-fill.svg new file mode 100644 index 0000000000..bfc284ecd7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/music-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.7134 8.12811L18.4668 8.69379C18.2864 9.10792 17.7136 9.10792 17.5331 8.69379L17.2866 8.12811C16.8471 7.11947 16.0555 6.31641 15.0677 5.87708L14.308 5.53922C13.8973 5.35653 13.8973 4.75881 14.308 4.57612L15.0252 4.25714C16.0384 3.80651 16.8442 2.97373 17.2761 1.93083L17.5293 1.31953C17.7058 0.893489 18.2942 0.893489 18.4706 1.31953L18.7238 1.93083C19.1558 2.97373 19.9616 3.80651 20.9748 4.25714L21.6919 4.57612C22.1027 4.75881 22.1027 5.35653 21.6919 5.53922L20.9323 5.87708C19.9445 6.31641 19.1529 7.11947 18.7134 8.12811ZM7 3H12V6H9V17C9 19.2091 7.20914 21 5 21C2.79086 21 1 19.2091 1 17C1 14.7909 2.79086 13 5 13C5.72857 13 6.41165 13.1948 7 13.5351V3ZM18 13.5351V11H20V17C20 19.2091 18.2091 21 16 21C13.7909 21 12 19.2091 12 17C12 14.7909 13.7909 13 16 13C16.7286 13 17.4117 13.1948 18 13.5351Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/music-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/music-ai-line.svg new file mode 100644 index 0000000000..0d92fb3708 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/music-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.7134 8.12811L18.4668 8.69379C18.2864 9.10792 17.7136 9.10792 17.5331 8.69379L17.2866 8.12811C16.8471 7.11947 16.0555 6.31641 15.0677 5.87708L14.308 5.53922C13.8973 5.35653 13.8973 4.75881 14.308 4.57612L15.0252 4.25714C16.0384 3.80651 16.8442 2.97373 17.2761 1.93083L17.5293 1.31953C17.7058 0.893489 18.2942 0.893489 18.4706 1.31953L18.7238 1.93083C19.1558 2.97373 19.9616 3.80651 20.9748 4.25714L21.6919 4.57612C22.1027 4.75881 22.1027 5.35653 21.6919 5.53922L20.9323 5.87708C19.9445 6.31641 19.1529 7.11947 18.7134 8.12811ZM7 3H12V5H9V17C9 19.2091 7.20914 21 5 21C2.79086 21 1 19.2091 1 17C1 14.7909 2.79086 13 5 13C5.72857 13 6.41165 13.1948 7 13.5351V3ZM18 13.5351V11H20V17C20 19.2091 18.2091 21 16 21C13.7909 21 12 19.2091 12 17C12 14.7909 13.7909 13 16 13C16.7286 13 17.4117 13.1948 18 13.5351ZM5 19C6.10457 19 7 18.1046 7 17C7 15.8954 6.10457 15 5 15C3.89543 15 3 15.8954 3 17C3 18.1046 3.89543 19 5 19ZM16 19C17.1046 19 18 18.1046 18 17C18 15.8954 17.1046 15 16 15C14.8954 15 14 15.8954 14 17C14 18.1046 14.8954 19 16 19Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mv-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/mv-ai-fill.svg new file mode 100644 index 0000000000..04cd023409 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mv-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM20 11C20.7013 11 21.3744 10.8797 22 10.6586V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934C2 3.44476 2.45531 3 2.9918 3H14.3414C14.1203 3.62556 14 4.29873 14 5C14 5.34071 14.0284 5.67479 14.083 6H12V12.1707C11.6872 12.0602 11.3506 12 11 12C9.34315 12 8 13.3431 8 15C8 16.6569 9.34315 18 11 18C12.6569 18 14 16.6569 14 15V8H14.8027C15.8401 9.7934 17.7792 11 20 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/mv-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/mv-ai-line.svg new file mode 100644 index 0000000000..5f0681349a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/mv-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.4668 8.69379L20.7134 8.12811C21.1529 7.11947 21.9445 6.31641 22.9323 5.87708L23.6919 5.53922C24.1027 5.35653 24.1027 4.75881 23.6919 4.57612L22.9748 4.25714C21.9616 3.80651 21.1558 2.97373 20.7238 1.93083L20.4706 1.31953C20.2942 0.893489 19.7058 0.893489 19.5293 1.31953L19.2761 1.93083C18.8442 2.97373 18.0384 3.80651 17.0252 4.25714L16.308 4.57612C15.8973 4.75881 15.8973 5.35653 16.308 5.53922L17.0677 5.87708C18.0555 6.31641 18.8471 7.11947 19.2866 8.12811L19.5331 8.69379C19.7136 9.10792 20.2864 9.10792 20.4668 8.69379ZM2 4C2 3.44772 2.44772 3 3 3H14V5H4V19H20V11H22V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4ZM12 12.1707V6H16V8H14V15C14 16.6569 12.6569 18 11 18C9.34315 18 8 16.6569 8 15C8 13.3431 9.34315 12 11 12C11.3506 12 11.6872 12.0602 12 12.1707Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/nextjs-fill.svg b/client/packages/lowcoder-design/src/icons/remix/nextjs-fill.svg new file mode 100644 index 0000000000..65689bc1bc --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/nextjs-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM15.9999 8H14.6499V12H15.9999V8ZM9.34609 9.70937L15.405 17.5379L16.4591 16.7293L9.68281 8H8V15.9969H9.34609V9.70937Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/nextjs-line.svg b/client/packages/lowcoder-design/src/icons/remix/nextjs-line.svg new file mode 100644 index 0000000000..0d8df51ee0 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/nextjs-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.6644 17.6493L10.2602 8H8V16H10V10.9462L16.0869 18.8788C14.8907 19.5909 13.4931 20 12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 14.2053 19.1077 16.2022 17.6644 17.6493ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM14 12V8H16V12H14Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/nodejs-fill.svg b/client/packages/lowcoder-design/src/icons/remix/nodejs-fill.svg new file mode 100644 index 0000000000..9a91f6365f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/nodejs-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.174 22.5552C11.4297 22.6937 11.7051 22.7729 12.0002 22.7729C12.2952 22.7729 12.5902 22.6937 12.8262 22.5947L20.6745 18.023C21.1854 17.7261 21.5 17.172 21.5 16.5781V7.45437C21.5 6.86056 21.1854 6.30644 20.6745 6.00954L12.8262 1.43778C12.3345 1.16072 11.6657 1.16072 11.174 1.43778L3.32604 6.00954C2.81468 6.30644 2.5 6.86056 2.5 7.45437V16.5781C2.5 17.172 2.81468 17.7261 3.32604 18.023L5.3913 19.2105C6.39448 19.7052 6.74854 19.7052 7.20089 19.7052C8.67604 19.7052 9.52182 18.7948 9.52182 17.2313V8.22623C9.52182 8.08765 9.4038 7.98875 9.28578 7.98875H8.28271C8.14495 7.98875 8.04667 8.10749 8.04667 8.22623V17.2313C8.04667 17.924 7.31891 18.6167 6.15844 18.023L4.01453 16.776C3.93578 16.7365 3.89651 16.6376 3.89651 16.5584V7.43453C3.89651 7.35536 3.93578 7.25647 4.01453 7.21689L11.8625 2.66486C11.9214 2.62528 12.0198 2.62528 12.0984 2.66486L19.9466 7.21689C20.0247 7.25647 20.0648 7.33563 20.0648 7.43453V16.5584C20.0648 16.6573 20.0247 16.7365 19.9466 16.776L12.0984 21.3479C12.0394 21.3875 11.9411 21.3875 11.8625 21.3479L9.85624 20.1407C9.79723 20.1011 9.71849 20.0812 9.65948 20.1208C9.10875 20.4375 9.01047 20.477 8.47937 20.6552C8.36135 20.6948 8.16469 20.774 8.55802 20.9917L11.174 22.5552ZM10.2887 13.5698C10.2887 14.9156 10.9967 16.499 14.4393 16.499C16.9169 16.499 18.3531 15.5093 18.3531 13.7677C18.3531 12.0657 17.212 11.6104 14.7929 11.2938C12.3539 10.9772 12.0982 10.799 12.0982 10.225C12.0982 9.75008 12.3146 9.11679 14.1242 9.11679C15.7367 9.11679 16.3463 9.47302 16.5828 10.5615C16.6023 10.6605 16.701 10.7397 16.7987 10.7397H17.8411C17.9008 10.7397 17.9594 10.7001 17.9994 10.6605C18.0385 10.6011 18.058 10.5418 18.058 10.4824C17.9008 8.58241 16.6619 7.71155 14.1438 7.71155C11.9015 7.71155 10.564 8.66157 10.564 10.2646C10.564 11.9865 11.9015 12.4615 14.0454 12.6792C16.6219 12.9365 16.8192 13.3126 16.8192 13.8271C16.8192 14.7177 16.1109 15.0938 14.4588 15.0938C12.3736 15.0938 11.9212 14.5792 11.7639 13.5302C11.7639 13.4115 11.6655 13.3323 11.5475 13.3323H10.5247C10.387 13.3323 10.2887 13.4511 10.2887 13.5698Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/nodejs-line.svg b/client/packages/lowcoder-design/src/icons/remix/nodejs-line.svg new file mode 100644 index 0000000000..6c78fc902d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/nodejs-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.8873 1.36173C12.3396 1.03958 11.6604 1.03958 11.1127 1.36173L3.36271 5.92056C2.8282 6.23498 2.5 6.8088 2.5 7.42894V16.571C2.5 17.1912 2.8282 17.765 3.36272 18.0794L5.98596 19.6225C7.31923 20.4068 9 19.4454 9 17.8986V7.74655H7V17.8986L4.5 16.428V7.57193L12 3.16016L19.5 7.57193V16.428L12 20.8398L10.2316 19.7996L9.21757 21.5234L11.1127 22.6382C11.6604 22.9604 12.3396 22.9604 12.8873 22.6382L20.6373 18.0794C21.1718 17.765 21.5 17.1912 21.5 16.571V7.42894C21.5 6.8088 21.1718 6.23498 20.6373 5.92056L12.8873 1.36173ZM13.9999 7.49998C12.6372 7.49998 11.6712 7.85114 11.0504 8.46993C10.4336 9.08484 10.3135 9.80885 10.3135 10.2313C10.3135 10.7862 10.4705 11.289 10.7951 11.7048C11.1076 12.1053 11.5199 12.3537 11.9146 12.5159C12.6341 12.8116 13.5358 12.9086 14.2587 12.9863L14.346 12.9957C15.1774 13.0856 15.7998 13.1627 16.2263 13.3411C16.4189 13.4217 16.4983 13.4954 16.531 13.5379C16.5524 13.5658 16.5934 13.6278 16.5934 13.7977C16.5934 14.0618 16.5027 14.2319 16.2204 14.3926C15.873 14.5904 15.2596 14.7396 14.3368 14.7396C13.4218 14.7396 12.7838 14.5705 12.4192 14.3181C12.1357 14.1218 11.9273 13.821 11.9822 13.1683L9.98923 13.0007C9.88075 14.29 10.3479 15.3167 11.2808 15.9625C12.1325 16.5521 13.2518 16.7396 14.3368 16.7396C15.414 16.7396 16.4289 16.5753 17.2098 16.1307C18.0558 15.6491 18.5934 14.8482 18.5934 13.7977C18.5934 13.2414 18.4381 12.7369 18.1162 12.3184C17.8054 11.9144 17.3942 11.6617 16.9981 11.496C16.2701 11.1915 15.3576 11.0932 14.6296 11.0147H14.6296L14.5609 11.0073C13.7274 10.9172 13.1036 10.8423 12.6748 10.666C12.4808 10.5863 12.4025 10.5137 12.3716 10.4742C12.3528 10.4501 12.3135 10.394 12.3135 10.2313C12.3135 10.1538 12.3363 10.0121 12.4624 9.88637C12.5847 9.76449 12.9618 9.49998 13.9999 9.49998C14.9904 9.49998 15.5674 9.60515 15.897 9.80064C16.1123 9.92838 16.3451 10.1633 16.3761 10.9329L18.3745 10.8524C18.3243 9.60675 17.8694 8.64527 16.9173 8.08051C16.0795 7.58349 15.0094 7.49998 13.9999 7.49998Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/notification-snooze-fill.svg b/client/packages/lowcoder-design/src/icons/remix/notification-snooze-fill.svg new file mode 100644 index 0000000000..1ca5cb7958 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/notification-snooze-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 17H20V10C20 5.58172 16.4183 2 12 2C7.58172 2 4 5.58172 4 10V17H2V19H22V17ZM15 23V21H9V23H15ZM9 9V7H15V9.41421L11.4142 13H15V15H9V12.5858L12.5858 9H9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/notification-snooze-line.svg b/client/packages/lowcoder-design/src/icons/remix/notification-snooze-line.svg new file mode 100644 index 0000000000..e61a9f0d08 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/notification-snooze-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 17H20V10C20 5.58172 16.4183 2 12 2C7.58172 2 4 5.58172 4 10V17H2V19H22V17ZM18 10V17H6V10C6 6.68629 8.68629 4 12 4C15.3137 4 18 6.68629 18 10ZM15 23V21H9V23H15ZM9 9H12.5858L9 12.5858V15H15V13H11.4142L15 9.41421V7H9V9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pause-large-fill.svg b/client/packages/lowcoder-design/src/icons/remix/pause-large-fill.svg new file mode 100644 index 0000000000..80f44be317 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/pause-large-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6 3H8V21H6V3ZM16 3H18V21H16V3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pause-large-line.svg b/client/packages/lowcoder-design/src/icons/remix/pause-large-line.svg new file mode 100644 index 0000000000..80f44be317 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/pause-large-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6 3H8V21H6V3ZM16 3H18V21H16V3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pentagon-fill.svg b/client/packages/lowcoder-design/src/icons/remix/pentagon-fill.svg index c3a8d1e6d5..ba753f3f25 100644 --- a/client/packages/lowcoder-design/src/icons/remix/pentagon-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/pentagon-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.0001 0.700195L22.7471 8.5083L18.6421 21.1421H5.35814L1.25317 8.5083L12.0001 0.700195Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.0004 0.700195L22.7473 8.5083L18.6423 21.1421H5.35838L1.25342 8.5083L12.0004 0.700195Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pentagon-line.svg b/client/packages/lowcoder-design/src/icons/remix/pentagon-line.svg index 963054766f..4734a6ec2c 100644 --- a/client/packages/lowcoder-design/src/icons/remix/pentagon-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/pentagon-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.0001 3.03043L20.5306 9.22822L17.2723 19.2564H6.72796L3.4696 9.22822L12.0001 3.03043ZM22.7471 8.50806L12.0001 0.699951L1.25317 8.50806L5.35814 21.1418H18.6421L22.7471 8.50806Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.0004 3.03043L20.5309 9.22822L17.2725 19.2564H6.72821L3.46984 9.22822L12.0004 3.03043ZM22.7473 8.50806L12.0004 0.699951L1.25342 8.50806L5.35838 21.1418H18.6423L22.7473 8.50806Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/perplexity-fill.svg b/client/packages/lowcoder-design/src/icons/remix/perplexity-fill.svg new file mode 100644 index 0000000000..cd0582d795 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/perplexity-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.73486 2L11.4299 7.24715V7.24595V2.01211H12.5385V7.27063L18.2591 2V7.98253H20.6078V16.6118H18.2663V21.9389L12.5385 16.9066V21.9967H11.4299V16.9896L5.74131 22V16.6118H3.39258V7.98253H5.73486V2ZM10.5942 9.0776H4.50118V15.5167H5.73992V13.4856L10.5942 9.0776ZM6.84986 13.9715V19.5565L11.4299 15.5225V9.81146L6.84986 13.9715ZM12.5704 15.4691L17.1577 19.4994V16.6118H17.1518V13.9663L12.5704 9.80608V15.4691ZM18.2663 15.5167H19.4992V9.0776H13.4516L18.2663 13.4399V15.5167ZM17.1505 7.98253V4.51888L13.3911 7.98253H17.1505ZM10.6028 7.98253L6.84346 4.51888V7.98253H10.6028Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/perplexity-line.svg b/client/packages/lowcoder-design/src/icons/remix/perplexity-line.svg new file mode 100644 index 0000000000..2660940e33 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/perplexity-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M7.17267 3.26011L5.5 1.7395V4.00005V7.50005H4H3V8.50005V16.0001V17.0001H4H5.5V20.0001V22.2606L7.17267 20.74L11 17.2606V22.0001H13V17.2606L16.8273 20.74L18.5 22.2606V20.0001V17.0001H20H21V16.0001V8.50005V7.50005H20H18.5V4.00005V1.7395L16.8273 3.26011L13 6.7395V2.00005H11V6.7395L7.17267 3.26011ZM16.5 7.50005H15.1366L16.5 6.26061V7.50005ZM8.86339 7.50005H7.5V6.26061L8.86339 7.50005ZM9.96339 9.50005L5.82733 13.2601L5.5 13.5577V14.0001V15.0001H5V9.50005H9.96339ZM14.0366 9.50005H19V15.0001H18.5V14.0001V13.5577L18.1727 13.2601L14.0366 9.50005ZM7.5 14.4424L11 11.2606V14.5577L7.5 17.7395V14.4424ZM13 11.2606L16.5 14.4424V17.7395L13 14.5577V11.2606Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/php-fill.svg b/client/packages/lowcoder-design/src/icons/remix/php-fill.svg new file mode 100644 index 0000000000..c87bd4e4fc --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/php-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.931 9.45962H3.59366L2.86408 13.211H4.05124C4.83891 13.211 5.42541 13.0622 5.81074 12.7661C6.19608 12.4686 6.45533 11.9742 6.58991 11.28C6.72024 10.6142 6.66075 10.1439 6.41425 9.87045C6.16633 9.59703 5.67333 9.45962 4.931 9.45962ZM7.38183 13.6133C7.01208 13.9675 6.56725 14.2338 6.08275 14.3939C5.60675 14.5469 4.999 14.6262 4.26233 14.6262H2.58924L2.126 17.0076H0.173828L1.91633 8.04578H5.67049C6.79958 8.04578 7.62266 8.34187 8.14116 8.93545C8.65966 9.52762 8.81549 10.355 8.60866 11.4175C8.52944 11.8379 8.38357 12.243 8.17658 12.6174C7.97399 12.9786 7.70908 13.3115 7.38183 13.6133ZM13.0825 14.6262L13.8517 10.661C13.941 10.2105 13.907 9.90162 13.7554 9.7387C13.6038 9.57437 13.2794 9.4922 12.7822 9.4922H11.2352L10.2378 14.6276H8.29983L10.0423 5.66437H11.9789L11.5157 8.0472H13.2412C14.3277 8.0472 15.0757 8.23703 15.488 8.61528C15.9002 8.99353 16.0235 9.60695 15.8606 10.4555L15.0502 14.6262H13.0825ZM23.8449 11.4175C23.767 11.8382 23.621 12.2435 23.4128 12.6174C23.2102 12.9786 22.9453 13.3115 22.6181 13.6133C22.2481 13.9664 21.8044 14.233 21.319 14.3939C20.843 14.5469 20.2352 14.6262 19.4972 14.6262H17.8255L17.3622 17.009H15.4101L17.1526 8.0472H20.9053C22.0344 8.0472 22.8575 8.34328 23.376 8.93687C23.8945 9.52762 24.0517 10.355 23.8449 11.4175ZM20.1687 9.45962H18.8327L18.1017 13.211H19.2889C20.078 13.211 20.6645 13.0622 21.0484 12.7661C21.4337 12.4686 21.693 11.9742 21.829 11.28C21.9593 10.6142 21.8984 10.1439 21.6519 9.87045C21.4054 9.59703 20.9096 9.45962 20.1687 9.45962Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/php-line.svg b/client/packages/lowcoder-design/src/icons/remix/php-line.svg new file mode 100644 index 0000000000..ef40e72300 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/php-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.15 5.5498L8.43273 14.3844H10.4327L11.2914 9.96713H12.7914C13.3437 9.96713 13.7059 10.4066 13.6006 10.9488L12.9327 14.3844H14.9327L15.6006 10.9488C15.9167 9.32234 14.8298 8.00387 13.173 8.00387H11.673L12.15 5.5498H10.15ZM2.17285 8.00392H5.92285C7.71777 8.00392 8.89521 9.43226 8.55272 11.1942C8.21023 12.9562 6.47751 14.3845 4.68259 14.3845H2.93259L2.45557 16.8386H0.455566L2.17285 8.00392ZM3.31421 12.4212H5.06421C5.75456 12.4212 6.42099 11.8719 6.55272 11.1942C6.68444 10.5165 6.23159 9.96717 5.54123 9.96717H3.79123L3.31421 12.4212ZM17.1728 8.00392H20.9228C22.7178 8.00392 23.8952 9.43226 23.5527 11.1942C23.2102 12.9562 21.4775 14.3845 19.6826 14.3845H17.9326L17.4556 16.8386H15.4556L17.1728 8.00392ZM18.3142 12.4212H20.0642C20.7546 12.4212 21.421 11.8719 21.5527 11.1942C21.6844 10.5165 21.2316 9.96717 20.5412 9.96717H18.7912L18.3142 12.4212Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pix-fill.svg b/client/packages/lowcoder-design/src/icons/remix/pix-fill.svg new file mode 100644 index 0000000000..f11f09325d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/pix-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_1315_1152)"><path d="M5.38545 18.1135L9.52498 22.253C10.8918 23.6199 13.1079 23.6199 14.4747 22.253L18.6143 18.1135C17.5088 18.1824 16.3802 17.7945 15.5354 16.9497L12.5302 13.9445C12.2373 13.6516 11.7624 13.6516 11.4695 13.9445L8.46432 16.9497C7.61954 17.7945 6.49092 18.1824 5.38545 18.1135ZM20.4851 16.2426L22.2529 14.4748C23.6197 13.108 23.6197 10.8919 22.2529 9.5251L20.4851 7.75734C19.3136 6.58576 17.4141 6.58576 16.2425 7.75734L13.2373 10.7625C12.5539 11.446 11.4458 11.446 10.7624 10.7625L7.75721 7.75734C6.58564 6.58576 4.68615 6.58576 3.51457 7.75734L1.74681 9.5251C0.37997 10.8919 0.37997 13.108 1.74681 14.4748L3.51457 16.2426C4.68615 17.4142 6.58564 17.4142 7.75721 16.2426L10.7624 13.2374C11.4458 12.554 12.5539 12.554 13.2373 13.2374L16.2425 16.2426C17.4141 17.4142 19.3136 17.4142 20.4851 16.2426ZM5.38545 5.88646C6.49092 5.81753 7.61954 6.20545 8.46432 7.05023L11.4695 10.0554C11.7624 10.3483 12.2373 10.3483 12.5302 10.0554L15.5354 7.05023C16.3802 6.20545 17.5088 5.81753 18.6143 5.88646L14.4747 1.74693C13.1079 0.380092 10.8918 0.380092 9.52498 1.74693L5.38545 5.88646Z"/></g><defs><clipPath id="clip0_1315_1152"><rect fill="white"/></clipPath></defs></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pix-line.svg b/client/packages/lowcoder-design/src/icons/remix/pix-line.svg new file mode 100644 index 0000000000..9a37711c7c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/pix-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_1315_1150)"><path d="M1.74681 9.5251C0.37997 10.8919 0.37997 13.108 1.74681 14.4748L9.52498 22.253C10.8918 23.6199 13.1079 23.6199 14.4747 22.253L22.2529 14.4748C23.6197 13.108 23.6197 10.8919 22.2529 9.5251L14.4747 1.74693C13.1079 0.380092 10.8918 0.380092 9.52498 1.74693L1.74681 9.5251ZM5.98945 8.11089C6.57523 7.5251 7.52498 7.5251 8.11077 8.11089L10.5856 10.5858C11.3667 11.3668 12.633 11.3668 13.4141 10.5858L15.8889 8.11089C16.4746 7.52526 17.4244 7.52559 18.0103 8.11089L20.8387 10.9393C21.4245 11.5251 21.4245 12.4748 20.8387 13.0606L18.0103 15.8891L18.0092 15.8901C17.4234 16.4748 16.4744 16.4745 15.8889 15.8891L13.4141 13.4142C12.633 12.6331 11.3667 12.6331 10.5856 13.4142L8.11077 15.8891C7.52523 16.4746 6.57603 16.4748 5.99018 15.8898L3.16102 13.0606C2.57523 12.4748 2.57523 11.5251 3.16102 10.9393L5.98945 8.11089ZM15.7736 5.87418C15.2994 6.04294 14.8543 6.3171 14.4747 6.69668L11.9999 9.17155L9.52498 6.69668C9.14541 6.3171 8.70034 6.04294 8.22616 5.87418L10.9392 3.16114C11.525 2.57535 12.4747 2.57536 13.0605 3.16114L15.7736 5.87418ZM15.7736 18.1258L13.0605 20.8388C12.4747 21.4246 11.525 21.4246 10.9392 20.8388L8.22616 18.1258C8.70034 17.957 9.14541 17.6828 9.52498 17.3033L11.9999 14.8284L14.4747 17.3033C14.8543 17.6828 15.2994 17.957 15.7736 18.1258Z"/></g><defs><clipPath id="clip0_1315_1150"><rect fill="white"/></clipPath></defs></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/play-large-fill.svg b/client/packages/lowcoder-design/src/icons/remix/play-large-fill.svg new file mode 100644 index 0000000000..85c30aedfa --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/play-large-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6 20.1957V3.80421C6 3.01878 6.86395 2.53993 7.53 2.95621L20.6432 11.152C21.2699 11.5436 21.2699 12.4563 20.6432 12.848L7.53 21.0437C6.86395 21.46 6 20.9812 6 20.1957Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/play-large-line.svg b/client/packages/lowcoder-design/src/icons/remix/play-large-line.svg new file mode 100644 index 0000000000..c423dbb57a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/play-large-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8 18.3915V5.60846L18.2264 12L8 18.3915ZM6 3.80421V20.1957C6 20.9812 6.86395 21.46 7.53 21.0437L20.6432 12.848C21.2699 12.4563 21.2699 11.5436 20.6432 11.152L7.53 2.95621C6.86395 2.53993 6 3.01878 6 3.80421Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/play-reverse-large-fill.svg b/client/packages/lowcoder-design/src/icons/remix/play-reverse-large-fill.svg new file mode 100644 index 0000000000..95d4dd2b60 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/play-reverse-large-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18 20.1957V3.80421C18 3.01878 17.1361 2.53993 16.47 2.95621L3.3568 11.152C2.73013 11.5436 2.73013 12.4563 3.3568 12.848L16.47 21.0437C17.136 21.46 18 20.9812 18 20.1957Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/play-reverse-large-line.svg b/client/packages/lowcoder-design/src/icons/remix/play-reverse-large-line.svg new file mode 100644 index 0000000000..0cb6d29a88 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/play-reverse-large-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16 18.3915V5.60846L5.77359 12L16 18.3915ZM18 3.80421V20.1957C18 20.9812 17.136 21.46 16.47 21.0437L3.3568 12.848C2.73013 12.4563 2.73013 11.5436 3.3568 11.152L16.47 2.95621C17.1361 2.53993 18 3.01878 18 3.80421Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-clubs-fill.svg b/client/packages/lowcoder-design/src/icons/remix/poker-clubs-fill.svg new file mode 100644 index 0000000000..dc45edd754 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-clubs-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.7748 11.0393C14.933 9.26656 16 7.63328 16 6C16 3.79086 14.2091 2 12 2C9.79086 2 8 3.79086 8 6C8 7.63328 9.06704 9.26656 10.2252 11.0393L10.226 11.0405C10.3036 11.1593 10.3816 11.2787 10.4597 11.3988C10.1704 11.179 9.90318 10.9699 9.65213 10.7734C8.27615 9.69663 7.38594 9 6 9C3.79086 9 2 10.7909 2 13C2 15.2091 3.79086 17 6 17C7.63328 17 9.26656 15.933 11.0393 14.7748L11.0701 14.7547C10.9774 17.0361 10.1119 18.4381 9.15685 19.9853L9.15684 19.9853L9.15683 19.9853C9.03494 20.1828 8.91159 20.3826 8.7882 20.5869C8.4039 21.2232 8.87465 22 9.61803 22H14.382C15.1253 22 15.5961 21.2232 15.2118 20.5869C15.0884 20.3826 14.9651 20.1828 14.8432 19.9853L14.8432 19.9853L14.8432 19.9853C13.8881 18.4381 13.0226 17.0361 12.9299 14.7547C12.9402 14.7614 12.9505 14.7681 12.9607 14.7748C14.7334 15.933 16.3667 17 18 17C20.2091 17 22 15.2091 22 13C22 10.7909 20.2091 9 18 9C16.6141 9 15.7238 9.69663 14.3479 10.7734C14.0968 10.9699 13.8296 11.179 13.5403 11.3988C13.6187 11.2783 13.697 11.1585 13.7748 11.0393Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-clubs-line.svg b/client/packages/lowcoder-design/src/icons/remix/poker-clubs-line.svg new file mode 100644 index 0000000000..cc4a914c37 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-clubs-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.23611 7.46049C8.57416 8.54052 9.22587 9.55225 9.86317 10.5037L10.0123 10.7259C10.1653 10.9537 10.316 11.1779 10.4597 11.3988C10.4597 11.3988 9.90318 10.9699 9.65213 10.7734C8.52697 9.89291 7.72662 9.2666 6.71443 9.06753C6.48879 9.02315 6.25263 9 6 9C3.79086 9 2 10.7909 2 13C2 15.2091 3.79086 17 6 17C6.67629 17 7.35259 16.817 8.03878 16.5204C8.72217 16.225 9.41538 15.8169 10.1282 15.3645C10.1123 16.3363 9.99514 17.1443 9.79852 17.8863C9.55229 18.8155 9.18139 19.6409 8.72841 20.5544C8.39815 21.2204 8.87465 22 9.61803 22H14.382C15.1253 22 15.6018 21.2204 15.2716 20.5544C14.8186 19.6409 14.4477 18.8155 14.2015 17.8863C14.0049 17.1443 13.8877 16.3363 13.8718 15.3645C14.5846 15.8169 15.2778 16.225 15.9612 16.5204C16.6474 16.8171 17.3237 17 18 17C20.2091 17 22 15.2091 22 13C22 10.7909 20.2091 9 18 9C17.7332 9 17.4848 9.02581 17.2478 9.07518C16.2533 9.28228 15.459 9.90391 14.3479 10.7734C14.0968 10.9699 13.5403 11.3988 13.5403 11.3988C13.6181 11.2791 13.6959 11.1601 13.7732 11.0417L13.7747 11.0395L13.7748 11.0393L13.7749 11.0391L13.7751 11.0389C13.8946 10.856 14.0131 10.6746 14.1296 10.4945C14.8038 9.45198 15.4097 8.45411 15.7391 7.47113C15.9043 6.97825 16 6.48913 16 6C16 3.79086 14.2091 2 12 2C9.79086 2 8 3.79086 8 6C8 6.50041 8.08792 6.98701 8.23611 7.46049ZM13.4584 7.72074C13.1078 8.40207 12.65 9.10337 12.1022 9.94258L11.9996 10.0997C11.8684 9.90093 11.7419 9.7126 11.6196 9.53077L11.6196 9.53074C11.2389 8.96424 10.9005 8.46087 10.5982 7.90024C10.1889 7.14129 10 6.53374 10 6C10 4.89543 10.8954 4 12 4C13.1046 4 14 4.89543 14 6C14 6.41382 13.8532 6.95355 13.4584 7.72074ZM10.4958 13.3985C10.9721 13.3899 11.4445 13.2117 11.8164 12.8683C11.8826 12.8072 11.9438 12.7426 12 12.6748C12.0562 12.7426 12.1174 12.8072 12.1836 12.8683C12.5555 13.2117 13.0279 13.3899 13.5042 13.3985C13.2933 13.4379 13.0871 13.5116 12.894 13.6198C12.4758 13.8541 12.1635 14.2258 12 14.6599C11.8365 14.2258 11.5242 13.8541 11.106 13.6198C10.9129 13.5116 10.7067 13.4379 10.4958 13.3985ZM11.1853 20C11.5527 19.1113 11.8427 18.1782 12 17.0726C12.1573 18.1782 12.4473 19.1113 12.8147 20H11.1853ZM13.9087 13.3648C14.4532 13.2631 14.902 12.898 15.3304 12.5495C15.4144 12.4811 15.4976 12.4134 15.5807 12.3485C17.0606 11.1904 17.4148 11 18.0002 11C19.1048 11 20.0002 11.8954 20.0002 13C20.0002 14.1046 19.1048 15 18.0002 15C17.3011 15 16.4061 14.604 14.9438 13.6759C14.6281 13.4755 14.2694 13.3714 13.9087 13.3648ZM6 11C6.58546 11 6.93965 11.1904 8.41957 12.3485C8.50259 12.4134 8.58582 12.4811 8.66983 12.5495C9.09823 12.898 9.54698 13.2631 10.0915 13.3648C9.73085 13.3714 9.37215 13.4755 9.05642 13.6759C7.59418 14.604 6.69912 15 6 15C4.89543 15 4 14.1046 4 13C4 11.8954 4.89543 11 6 11Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-diamonds-fill.svg b/client/packages/lowcoder-design/src/icons/remix/poker-diamonds-fill.svg new file mode 100644 index 0000000000..77fffbb869 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-diamonds-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.03607 10.7336L11.2259 1.94599C11.626 1.45697 12.3737 1.45697 12.7738 1.94599L19.9637 10.7336C20.5664 11.4703 20.5664 12.5298 19.9637 13.2665L12.7738 22.0541C12.3737 22.5431 11.626 22.5431 11.2259 22.0541L4.03607 13.2665C3.43329 12.5298 3.43329 11.4703 4.03607 10.7336Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-diamonds-line.svg b/client/packages/lowcoder-design/src/icons/remix/poker-diamonds-line.svg new file mode 100644 index 0000000000..677903ce86 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-diamonds-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.03607 10.7334C3.43329 11.4702 3.43329 12.5297 4.03607 13.2664L11.2259 22.054C11.626 22.543 12.3737 22.543 12.7738 22.054L19.9637 13.2664C20.5664 12.5297 20.5664 11.4702 19.9637 10.7334L12.7738 1.94586C12.3737 1.45685 11.626 1.45685 11.2259 1.94586L4.03607 10.7334ZM11.9999 4.15829L18.4157 11.9999L11.9999 19.8415L5.58398 11.9999L11.9999 4.15829Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-hearts-fill.svg b/client/packages/lowcoder-design/src/icons/remix/poker-hearts-fill.svg new file mode 100644 index 0000000000..19bffc2833 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-hearts-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2 8.5C2 5.46243 4.46243 3 7.5 3C9.36016 3 11.0046 3.92345 12 5.33692C12.9954 3.92345 14.6398 3 16.5 3C19.5376 3 22 5.46243 22 8.5C22 16 11.9999 21.4852 11.9999 21.4852C11.9999 21.4852 2 16 2 8.5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-hearts-line.svg b/client/packages/lowcoder-design/src/icons/remix/poker-hearts-line.svg new file mode 100644 index 0000000000..f85023fc68 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-hearts-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 8.81056L13.6352 6.48845C14.2721 5.58412 15.3179 5 16.5 5C18.433 5 20 6.567 20 8.5C20 11.3788 18.0407 14.1215 15.643 16.3358C14.4877 17.4027 13.3237 18.2603 12.4451 18.8521C12.2861 18.9592 12.1371 19.0571 11.9999 19.1456C11.8627 19.0571 11.7137 18.9592 11.5547 18.8521C10.6761 18.2604 9.51216 17.4028 8.35685 16.3358C5.95926 14.1216 4 11.3788 4 8.5C4 6.567 5.567 5 7.5 5C8.68209 5 9.72794 5.58412 10.3648 6.48845L12 8.81056ZM10.5557 3.92626C9.68172 3.3412 8.63071 3 7.5 3C4.46243 3 2 5.46243 2 8.5C2 16 11.9999 21.4852 11.9999 21.4852C11.9999 21.4852 22 16 22 8.5C22 5.46243 19.5376 3 16.5 3C15.3693 3 14.3183 3.3412 13.4443 3.92626C12.8805 4.3037 12.3903 4.78263 12 5.33692C11.6097 4.78263 11.1195 4.3037 10.5557 3.92626Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-spades-fill.svg b/client/packages/lowcoder-design/src/icons/remix/poker-spades-fill.svg new file mode 100644 index 0000000000..8727d4acfc --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-spades-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.9513 15.8933C10.0076 16.5855 8.80705 17 7.5 17C4.46243 17 2 14.7614 2 12C2 8.45193 5.52486 5.91097 8.64404 3.66245C9.92046 2.74232 11.1289 1.87116 12.0001 1C12.8713 1.87114 14.0797 2.74228 15.3561 3.66238C18.4752 5.91092 22 8.4519 22 12C22 14.7614 19.5376 17 16.5 17C15.193 17 13.9924 16.5855 13.0487 15.8933C13.333 17.5389 14.0578 18.713 14.8432 19.9853C14.965 20.1827 15.0884 20.3826 15.2118 20.5869C15.5961 21.2232 15.1253 22 14.382 22H9.61803C8.87465 22 8.4039 21.2232 8.7882 20.5869C8.91159 20.3826 9.03495 20.1827 9.15685 19.9853C9.94224 18.713 10.667 17.5389 10.9513 15.8933Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/poker-spades-line.svg b/client/packages/lowcoder-design/src/icons/remix/poker-spades-line.svg new file mode 100644 index 0000000000..972c9c2d6c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/poker-spades-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 15.9157C11.8821 15.467 11.6096 15.0654 11.2182 14.7894C10.6256 14.3715 9.85332 14.3071 9.19971 14.621C8.70291 14.8596 8.12567 15 7.5 15C5.38335 15 4 13.4817 4 12C4 10.9402 4.51493 9.88477 5.61339 8.70965C6.74632 7.49767 8.26768 6.39904 9.89838 5.22372C10.5914 4.72424 11.3194 4.19956 12.0001 3.65734C12.6809 4.19953 13.4088 4.72418 14.1017 5.22364C15.7324 6.39897 17.2537 7.4976 18.3866 8.70959C19.4851 9.88471 20 10.9402 20 12C20 13.4817 18.6166 15 16.5 15C15.8743 15 15.2971 14.8596 14.8003 14.621C14.1467 14.3071 13.3744 14.3715 12.7818 14.7894C12.3904 15.0654 12.1179 15.467 12 15.9157ZM12.0001 1C11.1289 1.87116 9.92046 2.74232 8.64404 3.66245C5.52486 5.91097 2 8.45193 2 12C2 14.7614 4.46243 17 7.5 17C8.42657 17 9.29962 16.7917 10.0656 16.4238C9.9739 17.2908 9.78783 18.0297 9.52965 18.7406C9.31014 19.345 9.03851 19.9291 8.72841 20.5544C8.39815 21.2204 8.87465 22 9.61803 22H14.382C15.1253 22 15.6018 21.2204 15.2716 20.5544C14.9615 19.9291 14.6899 19.345 14.4704 18.7406C14.2122 18.0297 14.0261 17.2908 13.9344 16.4238C14.7004 16.7917 15.5734 17 16.5 17C19.5376 17 22 14.7614 22 12C22 8.4519 18.4752 5.91092 15.3561 3.66238C14.0797 2.74228 12.8713 1.87114 12.0001 1ZM12 17.0738C12.1583 18.1843 12.4514 19.1212 12.8146 20H11.1854C11.5486 19.1212 11.8417 18.1843 12 17.0738Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/police-badge-fill.svg b/client/packages/lowcoder-design/src/icons/remix/police-badge-fill.svg new file mode 100644 index 0000000000..c8f2416f53 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/police-badge-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.91312 11.6739C3.23584 10.1953 3.53865 8.80805 2 6.5L5.5 2.5C5.5 2.5 9 4 12 1.5C15 4 18.5 2.5 18.5 2.5L22 6.5C20.4612 8.8081 20.7641 10.1954 21.0868 11.674C21.3933 13.0781 21.7177 14.5645 20.5 17C19.3425 19.315 17.3478 20.1227 15.4849 20.877C14.1289 21.4261 12.8428 21.9469 12.0003 23C11.1577 21.9469 9.8715 21.4261 8.51549 20.8771C6.65245 20.1227 4.65758 19.315 3.50001 17C2.28218 14.5645 2.60663 13.078 2.91312 11.6739ZM14.3776 12.7725L16.7552 10.4549L13.4694 9.97746L11.9999 7L10.5304 9.97746L7.24463 10.4549L9.62227 12.7725L9.06098 16.0451L11.9999 14.5L14.9388 16.0451L14.3776 12.7725Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/police-badge-line.svg b/client/packages/lowcoder-design/src/icons/remix/police-badge-line.svg new file mode 100644 index 0000000000..076e446d30 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/police-badge-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.4749 4.935C16.9805 4.90972 17.437 4.8446 17.8262 4.76709L19.5583 6.74664C19.168 7.5663 18.9456 8.34894 18.8629 9.12355C18.7392 10.2814 18.9517 11.2675 19.1081 11.9874L19.1152 12.02C19.2771 12.7643 19.3835 13.2536 19.3679 13.8288C19.3533 14.3705 19.2212 15.0854 18.7112 16.1056C17.6105 18.307 15.0162 18.7716 12.9964 19.7815C12.6702 19.9446 12.3335 20.1308 12.0002 20.3499C11.6669 20.1308 11.3301 19.9445 11.0039 19.7814C8.98405 18.7716 6.38962 18.307 5.28885 16.1055C4.77874 15.0854 4.64666 14.3704 4.63201 13.8287C4.61645 13.2535 4.72283 12.7642 4.8847 12.0198L4.89176 11.9873C5.04823 11.2676 5.2607 10.2815 5.13707 9.12358C5.05436 8.34897 4.83196 7.56633 4.44171 6.74666L6.17384 4.76709C6.56299 4.8446 7.01951 4.90972 7.52512 4.935C8.78997 4.99825 10.402 4.81028 12 3.91846C13.598 4.81028 15.21 4.99825 16.4749 4.935ZM21.0868 11.674C20.7641 10.1954 20.4612 8.8081 22 6.5L18.5 2.5C18.5 2.5 15 4 12 1.5C9 4 5.5 2.5 5.5 2.5L2 6.5C3.53865 8.80805 3.23584 10.1953 2.91312 11.6739C2.60663 13.078 2.28218 14.5645 3.50001 17C5.07707 20.1539 8.20822 20.5102 10.4428 21.7453C11.0423 22.0766 11.5772 22.4712 12.0003 23C12.4234 22.4712 12.9583 22.0766 13.5578 21.7452C15.7921 20.5102 18.9231 20.1539 20.5 17C21.7177 14.5645 21.3933 13.0781 21.0868 11.674ZM14.3776 12.7725L14.9388 16.0451L11.9999 14.5L9.06098 16.0451L9.62227 12.7725L7.24463 10.4549L10.5304 9.97746L11.9999 7L13.4694 9.97746L16.7552 10.4549L14.3776 12.7725Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/prohibited-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/prohibited-2-fill.svg new file mode 100644 index 0000000000..fbd02f5d44 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/prohibited-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.25705 18.3287C2.84636 16.6049 2 14.4013 2 12C2 6.47715 6.47715 2 12 2C14.4013 2 16.6049 2.84637 18.3287 4.25705L4.25705 18.3287ZM19.7429 5.67127C21.1536 7.39514 22 9.59873 22 12C22 17.5228 17.5228 22 12 22C9.59873 22 7.39514 21.1536 5.67127 19.7429L19.7429 5.67127Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/prohibited-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/prohibited-2-line.svg new file mode 100644 index 0000000000..2b79dc3c0d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/prohibited-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M16.9057 5.68009L5.68009 16.9057C4.62644 15.5506 4 13.8491 4 12C4 7.58172 7.58172 4 12 4C13.8491 4 15.5506 4.62644 16.9057 5.68009ZM7.0943 18.3199L18.3199 7.0943C19.3736 8.44939 20 10.1509 20 12C20 16.4183 16.4183 20 12 20C10.1509 20 8.44939 19.3736 7.0943 18.3199ZM12 2C6.47715 2 2 6.47715 2 12C2 17.5223 6.47771 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47771 17.5223 2 12 2Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pulse-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/pulse-ai-fill.svg new file mode 100644 index 0000000000..30546fef8a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/pulse-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 8.12811L19.4668 8.69379C19.2864 9.10792 18.7136 9.10792 18.5331 8.69379L18.2866 8.12811C17.8471 7.11947 17.0555 6.31641 16.0677 5.87708L15.308 5.53922C14.8973 5.35653 14.8973 4.75881 15.308 4.57612L16.0252 4.25714C17.0384 3.80651 17.8442 2.97373 18.2761 1.93083L18.5293 1.31953C18.7058 0.893489 19.2942 0.893489 19.4706 1.31953L19.7238 1.93083C20.1558 2.97373 20.9616 3.80651 21.9748 4.25714L22.6919 4.57612C23.1027 4.75881 23.1027 5.35653 22.6919 5.53922L21.9323 5.87708C20.9445 6.31641 20.1529 7.11947 19.7134 8.12811ZM15 21.5386L9 7.53861L6.6594 13H1V11H5.3406L9 2.46143L15 16.4614L17.3406 11H23V13H18.6594L15 21.5386Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/pulse-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/pulse-ai-line.svg new file mode 100644 index 0000000000..30546fef8a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/pulse-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 8.12811L19.4668 8.69379C19.2864 9.10792 18.7136 9.10792 18.5331 8.69379L18.2866 8.12811C17.8471 7.11947 17.0555 6.31641 16.0677 5.87708L15.308 5.53922C14.8973 5.35653 14.8973 4.75881 15.308 4.57612L16.0252 4.25714C17.0384 3.80651 17.8442 2.97373 18.2761 1.93083L18.5293 1.31953C18.7058 0.893489 19.2942 0.893489 19.4706 1.31953L19.7238 1.93083C20.1558 2.97373 20.9616 3.80651 21.9748 4.25714L22.6919 4.57612C23.1027 4.75881 23.1027 5.35653 22.6919 5.53922L21.9323 5.87708C20.9445 6.31641 20.1529 7.11947 19.7134 8.12811ZM15 21.5386L9 7.53861L6.6594 13H1V11H5.3406L9 2.46143L15 16.4614L17.3406 11H23V13H18.6594L15 21.5386Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/quill-pen-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/quill-pen-ai-fill.svg new file mode 100644 index 0000000000..b0fe7db79d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/quill-pen-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.7134 7.12811L4.46682 7.69379C4.28637 8.10792 3.71357 8.10792 3.53312 7.69379L3.28656 7.12811C2.84706 6.11947 2.05545 5.31641 1.06767 4.87708L0.308047 4.53922C-0.102682 4.35653 -0.102682 3.75881 0.308047 3.57612L1.0252 3.25714C2.03838 2.80651 2.84417 1.97373 3.27612 0.930828L3.52932 0.319534C3.70578 -0.106511 4.29417 -0.106511 4.47063 0.319534L4.72382 0.930828C5.15577 1.97373 5.96158 2.80651 6.9748 3.25714L7.69188 3.57612C8.10271 3.75881 8.10271 4.35653 7.69188 4.53922L6.93228 4.87708C5.94451 5.31641 5.15288 6.11947 4.7134 7.12811ZM3.06361 21.6132C4.08854 15.422 6.31105 1.99658 21 1.99658C19.5042 4.99658 18.5 6.49658 17.5 7.49658L16.5 8.49658L18 9.49658C17 12.4966 14 15.9966 10 16.4966C7.33146 16.8301 5.66421 18.6635 4.99824 21.9966H3C3.02074 21.8722 3.0419 21.7443 3.06361 21.6132Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/quill-pen-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/quill-pen-ai-line.svg new file mode 100644 index 0000000000..8213088e2e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/quill-pen-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.7134 7.12811L4.46682 7.69379C4.28637 8.10792 3.71357 8.10792 3.53312 7.69379L3.28656 7.12811C2.84706 6.11947 2.05545 5.31641 1.06767 4.87708L0.308047 4.53922C-0.102682 4.35653 -0.102682 3.75881 0.308047 3.57612L1.0252 3.25714C2.03838 2.80651 2.84417 1.97373 3.27612 0.930828L3.52932 0.319534C3.70578 -0.106511 4.29417 -0.106511 4.47063 0.319534L4.72382 0.930828C5.15577 1.97373 5.96158 2.80651 6.9748 3.25714L7.69188 3.57612C8.10271 3.75881 8.10271 4.35653 7.69188 4.53922L6.93228 4.87708C5.94451 5.31641 5.15288 6.11947 4.7134 7.12811ZM6.33421 15.8154C6.51032 15.233 6.7072 14.6562 6.93912 14.0327C8.99484 8.50636 12.4197 5.08172 18.0129 4.21479C17.5 5.35838 17.0151 6.15301 16.5858 6.58237C16.2521 6.91603 15.9185 7.24993 15.5848 7.58407L14.1721 8.99878L15.6279 10.4535C14.4976 12.5384 12.2652 14.1979 9.75193 14.512C8.43544 14.6766 7.29345 15.1188 6.33421 15.8154ZM18 9.99658L17 8.99728C17.3331 8.66372 17.6662 8.33039 18.0027 7.99391C19.0018 6.99303 20.0009 4.99392 21 1.99658C6.31105 1.99658 4.08854 15.422 3.06361 21.6132C3.0419 21.7443 3.02074 21.8722 3 21.9966H4.99824C5.66421 18.6635 7.33146 16.8301 10 16.4966C14 15.9966 17 12.9966 18 9.99658Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/reset-left-fill.svg b/client/packages/lowcoder-design/src/icons/remix/reset-left-fill.svg new file mode 100644 index 0000000000..189130fa0f --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/reset-left-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 12C22 17.5228 17.5229 22 12 22C6.4772 22 2 17.5228 2 12C2 6.47715 6.4772 2 12 2V4C7.5817 4 4 7.58172 4 12C4 16.4183 7.5817 20 12 20C16.4183 20 20 16.4183 20 12C20 9.53614 18.8862 7.33243 17.1346 5.86492L15 8V2L21 2L18.5535 4.44656C20.6649 6.28002 22 8.9841 22 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/reset-left-line.svg b/client/packages/lowcoder-design/src/icons/remix/reset-left-line.svg new file mode 100644 index 0000000000..fd58168fc3 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/reset-left-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 12C22 17.5228 17.5229 22 12 22C6.4772 22 2 17.5228 2 12C2 6.47715 6.4772 2 12 2V4C7.5817 4 4 7.58172 4 12C4 16.4183 7.5817 20 12 20C16.4183 20 20 16.4183 20 12C20 9.25022 18.6127 6.82447 16.4998 5.38451L16.5 8H14.5V2L20.5 2V4L18.0008 3.99989C20.4293 5.82434 22 8.72873 22 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/reset-right-fill.svg b/client/packages/lowcoder-design/src/icons/remix/reset-right-fill.svg new file mode 100644 index 0000000000..f5b0dc42d7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/reset-right-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2V4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12C4 9.53614 5.11383 7.33243 6.86543 5.86492L9 8V2L3 2L5.44648 4.44656C3.33509 6.28002 2 8.9841 2 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/reset-right-line.svg b/client/packages/lowcoder-design/src/icons/remix/reset-right-line.svg new file mode 100644 index 0000000000..d586a6d9b2 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/reset-right-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2V4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12C4 9.25022 5.38734 6.82447 7.50024 5.38451L7.5 8H9.5V2L3.5 2V4L5.99918 3.99989C3.57075 5.82434 2 8.72873 2 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/safe-3-fill.svg b/client/packages/lowcoder-design/src/icons/remix/safe-3-fill.svg new file mode 100644 index 0000000000..cddda77dd7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/safe-3-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 3C2.44772 3 2 3.44772 2 4V19C2 19.5523 2.44772 20 3 20H4V22H6V20H18V22H20V20H21C21.5523 20 22 19.5523 22 19V4C22 3.44772 21.5523 3 21 3H3ZM15.3492 8.23642L16.682 6.90366L18.0962 8.31787L16.7634 9.65063C17.4122 10.794 17.4122 12.2057 16.7634 13.3491L18.0962 14.6818L16.682 16.096L15.3492 14.7633C14.2058 15.412 12.7942 15.412 11.6508 14.7633L10.318 16.096L8.90381 14.6818L10.2366 13.3491C9.58781 12.2057 9.58781 10.794 10.2366 9.65063L8.90381 8.31787L10.318 6.90366L11.6508 8.23642C12.7942 7.58767 14.2058 7.58767 15.3492 8.23642ZM14.7374 10.2624C14.054 9.579 12.946 9.579 12.2626 10.2624C11.5791 10.9458 11.5791 12.0539 12.2626 12.7373C12.946 13.4207 14.054 13.4207 14.7374 12.7373C15.4209 12.0539 15.4209 10.9458 14.7374 10.2624ZM5 8H7V15H5V8Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/safe-3-line.svg b/client/packages/lowcoder-design/src/icons/remix/safe-3-line.svg new file mode 100644 index 0000000000..a47ce8c736 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/safe-3-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2 4C2 3.44772 2.44772 3 3 3H21C21.5523 3 22 3.44772 22 4V19C22 19.5523 21.5523 20 21 20H20V22H18V20H6V22H4V20H3C2.44772 20 2 19.5523 2 19V4ZM4 18H5H19H20V5H4V18ZM15.3492 8.23642C14.2058 7.58767 12.7942 7.58767 11.6508 8.23642L10.318 6.90366L8.90381 8.31787L10.2366 9.65063C9.58781 10.794 9.58781 12.2057 10.2366 13.3491L8.90381 14.6818L10.318 16.096L11.6508 14.7633C12.7942 15.412 14.2058 15.412 15.3492 14.7633L16.682 16.096L18.0962 14.6818L16.7634 13.3491C17.4122 12.2057 17.4122 10.794 16.7634 9.65063L18.0962 8.31787L16.682 6.90366L15.3492 8.23642ZM14.7374 10.2624C15.4209 10.9458 15.4209 12.0539 14.7374 12.7373C14.054 13.4207 12.946 13.4207 12.2626 12.7373C11.5791 12.0539 11.5791 10.9458 12.2626 10.2624C12.946 9.579 14.054 9.579 14.7374 10.2624ZM5 8V15H7V8H5Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/shopping-bag-4-fill.svg b/client/packages/lowcoder-design/src/icons/remix/shopping-bag-4-fill.svg new file mode 100644 index 0000000000..6605461a02 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/shopping-bag-4-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9 6C9 4.34315 10.3431 3 12 3C13.6569 3 15 4.34315 15 6H9ZM7 6H4C3.44772 6 3 6.44772 3 7V21C3 21.5523 3.44772 22 4 22H20C20.5523 22 21 21.5523 21 21V7C21 6.44772 20.5523 6 20 6H17C17 3.23858 14.7614 1 12 1C9.23858 1 7 3.23858 7 6ZM9 10C9 11.6569 10.3431 13 12 13C13.6569 13 15 11.6569 15 10H17C17 12.7614 14.7614 15 12 15C9.23858 15 7 12.7614 7 10H9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/shopping-bag-4-line.svg b/client/packages/lowcoder-design/src/icons/remix/shopping-bag-4-line.svg new file mode 100644 index 0000000000..f7b2854af9 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/shopping-bag-4-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9 6H15C15 4.34315 13.6569 3 12 3C10.3431 3 9 4.34315 9 6ZM7 6C7 3.23858 9.23858 1 12 1C14.7614 1 17 3.23858 17 6H20C20.5523 6 21 6.44772 21 7V21C21 21.5523 20.5523 22 20 22H4C3.44772 22 3 21.5523 3 21V7C3 6.44772 3.44772 6 4 6H7ZM5 8V20H19V8H5ZM9 10C9 11.6569 10.3431 13 12 13C13.6569 13 15 11.6569 15 10H17C17 12.7614 14.7614 15 12 15C9.23858 15 7 12.7614 7 10H9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/skip-up-line.svg b/client/packages/lowcoder-design/src/icons/remix/skip-up-line.svg index 3cfa8e2aa9..e37b2992ad 100644 --- a/client/packages/lowcoder-design/src/icons/remix/skip-up-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/skip-up-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 13.9142L16.7929 18.7071L18.2071 17.2929L12 11.0858L5.79291 17.2929L7.20712 18.7071L12 13.9142ZM6.00001 7L18 7V9L6.00001 9L6.00001 7Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12 13.9142L16.7929 18.7071L18.2071 17.2929L12 11.0858L5.79289 17.2929L7.20711 18.7071L12 13.9142ZM6 7L18 7V9L6 9L6 7Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/snowflake-fill.svg b/client/packages/lowcoder-design/src/icons/remix/snowflake-fill.svg new file mode 100644 index 0000000000..82c2728b3c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/snowflake-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9998 3.29814L14.4451 1.66794L15.5545 3.33204L12.9998 5.03517V10.2678L17.5313 7.65149L17.7289 4.58748L19.7247 4.7162L19.5356 7.64899L22.17 8.95159L21.2836 10.7444L18.5313 9.38354L14.0001 11.9996L18.5317 14.616L21.284 13.2551L22.1704 15.0479L19.536 16.3505L19.7251 19.2833L17.7293 19.412L17.5317 16.348L12.9998 13.7315V18.9648L15.5545 20.6679L14.4451 22.332L11.9998 20.7018L9.55446 22.332L8.44506 20.6679L10.9998 18.9648V13.7319L6.46786 16.3484L6.27026 19.4124L4.2744 19.2836L4.46355 16.3508L1.8291 15.0483L2.71555 13.2554L5.46786 14.6163L10.0001 11.9996L5.46824 9.38319L2.71594 10.7441L1.82948 8.95124L4.46393 7.64864L4.27478 4.71585L6.27064 4.58713L6.46824 7.65113L10.9998 10.2674V5.03517L8.44506 3.33204L9.55446 1.66794L11.9998 3.29814Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/snowflake-line.svg b/client/packages/lowcoder-design/src/icons/remix/snowflake-line.svg new file mode 100644 index 0000000000..82c2728b3c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/snowflake-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9998 3.29814L14.4451 1.66794L15.5545 3.33204L12.9998 5.03517V10.2678L17.5313 7.65149L17.7289 4.58748L19.7247 4.7162L19.5356 7.64899L22.17 8.95159L21.2836 10.7444L18.5313 9.38354L14.0001 11.9996L18.5317 14.616L21.284 13.2551L22.1704 15.0479L19.536 16.3505L19.7251 19.2833L17.7293 19.412L17.5317 16.348L12.9998 13.7315V18.9648L15.5545 20.6679L14.4451 22.332L11.9998 20.7018L9.55446 22.332L8.44506 20.6679L10.9998 18.9648V13.7319L6.46786 16.3484L6.27026 19.4124L4.2744 19.2836L4.46355 16.3508L1.8291 15.0483L2.71555 13.2554L5.46786 14.6163L10.0001 11.9996L5.46824 9.38319L2.71594 10.7441L1.82948 8.95124L4.46393 7.64864L4.27478 4.71585L6.27064 4.58713L6.46824 7.65113L10.9998 10.2674V5.03517L8.44506 3.33204L9.55446 1.66794L11.9998 3.29814Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/speak-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/speak-ai-fill.svg new file mode 100644 index 0000000000..bbd5bfc36d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/speak-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 7.12811L20.4668 7.69379C20.2864 8.10792 19.7136 8.10792 19.5331 7.69379L19.2866 7.12811C18.8471 6.11947 18.0555 5.31641 17.0677 4.87708L16.308 4.53922C15.8973 4.35653 15.8973 3.75881 16.308 3.57612L17.0252 3.25714C18.0384 2.80651 18.8442 1.97373 19.2761 0.930828L19.5293 0.319534C19.7058 -0.106511 20.2942 -0.106511 20.4706 0.319534L20.7238 0.930828C21.1558 1.97373 21.9616 2.80651 22.9748 3.25714L23.6919 3.57612C24.1027 3.75881 24.1027 4.35653 23.6919 4.53922L22.9323 4.87708C21.9445 5.31641 21.1529 6.11947 20.7134 7.12811ZM9 2C13.0675 2 16.426 5.03562 16.9337 8.96494L19.1842 12.5037C19.3324 12.7367 19.3025 13.0847 18.9593 13.2317L17 14.071V17C17 18.1046 16.1046 19 15 19H13.001L13 22H4L4.00025 18.3061C4.00033 17.1252 3.56351 16.0087 2.7555 15.0011C1.65707 13.6313 1 11.8924 1 10C1 5.58172 4.58172 2 9 2ZM21.1535 18.1024L19.4893 16.9929C20.4436 15.5642 21 13.8471 21 12.0001C21 11.489 20.9574 10.9878 20.8756 10.5L22.8186 10C22.9378 10.6486 23 11.317 23 12.0001C23 14.2576 22.32 16.3562 21.1535 18.1024Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/speak-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/speak-ai-line.svg new file mode 100644 index 0000000000..0e7df0c33d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/speak-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 7.12811L20.4668 7.69379C20.2864 8.10792 19.7136 8.10792 19.5331 7.69379L19.2866 7.12811C18.8471 6.11947 18.0555 5.31641 17.0677 4.87708L16.308 4.53922C15.8973 4.35653 15.8973 3.75881 16.308 3.57612L17.0252 3.25714C18.0384 2.80651 18.8442 1.97373 19.2761 0.930828L19.5293 0.319534C19.7058 -0.106511 20.2942 -0.106511 20.4706 0.319534L20.7238 0.930828C21.1558 1.97373 21.9616 2.80651 22.9748 3.25714L23.6919 3.57612C24.1027 3.75881 24.1027 4.35653 23.6919 4.53922L22.9323 4.87708C21.9445 5.31641 21.1529 6.11947 20.7134 7.12811ZM9 2C13.0675 2 16.426 5.03562 16.9337 8.96494L19.1842 12.5037C19.3324 12.7367 19.3025 13.0847 18.9593 13.2317L17 14.071V17C17 18.1046 16.1046 19 15 19H13.001L13 22H4L4.00025 18.3061C4.00033 17.1252 3.56351 16.0087 2.7555 15.0011C1.65707 13.6313 1 11.8924 1 10C1 5.58172 4.58172 2 9 2ZM9 4C5.68629 4 3 6.68629 3 10C3 11.3849 3.46818 12.6929 4.31578 13.7499C5.40965 15.114 6.00036 16.6672 6.00025 18.3063L6.00013 20H11.0007L11.0017 17H15V12.7519L16.5497 12.0881L15.0072 9.66262L14.9501 9.22118C14.5665 6.25141 12.0243 4 9 4ZM19.4893 16.9929L21.1535 18.1024C22.32 16.3562 23 14.2576 23 12.0001C23 11.317 22.9378 10.6486 22.8186 10L20.8756 10.5C20.9574 10.9878 21 11.489 21 12.0001C21 13.8471 20.4436 15.5642 19.4893 16.9929Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/square-root.svg b/client/packages/lowcoder-design/src/icons/remix/square-root.svg new file mode 100644 index 0000000000..66d7d36079 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/square-root.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15.382 4H22V6H16.618L9 21.2361L5.38197 14H2V12H6.61803L9 16.7639L15.382 4Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/stack-fill.svg b/client/packages/lowcoder-design/src/icons/remix/stack-fill.svg index 77f341113b..c9c8e9b1a8 100644 --- a/client/packages/lowcoder-design/src/icons/remix/stack-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/stack-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.0834 10.4999L21.2855 11.2212C21.5223 11.3633 21.599 11.6704 21.457 11.9072C21.4147 11.9776 21.3559 12.0365 21.2855 12.0787L12.0001 17.6499L2.71463 12.0787C2.47784 11.9366 2.40106 11.6295 2.54313 11.3927C2.58536 11.3223 2.64425 11.2634 2.71463 11.2212L3.91672 10.4999L12.0001 15.3499L20.0834 10.4999ZM20.0834 15.1999L21.2855 15.9212C21.5223 16.0633 21.599 16.3704 21.457 16.6072C21.4147 16.6776 21.3559 16.7365 21.2855 16.7787L12.5145 22.0412C12.1979 22.2313 11.8022 22.2313 11.4856 22.0412L2.71463 16.7787C2.47784 16.6366 2.40106 16.3295 2.54313 16.0927C2.58536 16.0223 2.64425 15.9634 2.71463 15.9212L3.91672 15.1999L12.0001 20.0499L20.0834 15.1999ZM12.5145 1.30864L21.2855 6.5712C21.5223 6.71327 21.599 7.0204 21.457 7.25719C21.4147 7.32757 21.3559 7.38647 21.2855 7.42869L12.0001 12.9999L2.71463 7.42869C2.47784 7.28662 2.40106 6.97949 2.54313 6.7427C2.58536 6.67232 2.64425 6.61343 2.71463 6.5712L11.4856 1.30864C11.8022 1.11864 12.1979 1.11864 12.5145 1.30864Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.0833 10.4999L21.2854 11.2212C21.5221 11.3633 21.5989 11.6704 21.4569 11.9072C21.4146 11.9776 21.3557 12.0365 21.2854 12.0787L11.9999 17.6499L2.71451 12.0787C2.47772 11.9366 2.40093 11.6295 2.54301 11.3927C2.58523 11.3223 2.64413 11.2634 2.71451 11.2212L3.9166 10.4999L11.9999 15.3499L20.0833 10.4999ZM20.0833 15.1999L21.2854 15.9212C21.5221 16.0633 21.5989 16.3704 21.4569 16.6072C21.4146 16.6776 21.3557 16.7365 21.2854 16.7787L12.5144 22.0412C12.1977 22.2313 11.8021 22.2313 11.4854 22.0412L2.71451 16.7787C2.47772 16.6366 2.40093 16.3295 2.54301 16.0927C2.58523 16.0223 2.64413 15.9634 2.71451 15.9212L3.9166 15.1999L11.9999 20.0499L20.0833 15.1999ZM12.5144 1.30864L21.2854 6.5712C21.5221 6.71327 21.5989 7.0204 21.4569 7.25719C21.4146 7.32757 21.3557 7.38647 21.2854 7.42869L11.9999 12.9999L2.71451 7.42869C2.47772 7.28662 2.40093 6.97949 2.54301 6.7427C2.58523 6.67232 2.64413 6.61343 2.71451 6.5712L11.4854 1.30864C11.8021 1.11864 12.1977 1.11864 12.5144 1.30864Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/stack-line.svg b/client/packages/lowcoder-design/src/icons/remix/stack-line.svg index 650b770d1e..da2b98c24d 100644 --- a/client/packages/lowcoder-design/src/icons/remix/stack-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/stack-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.0834 15.1999L21.2855 15.9212C21.5223 16.0633 21.599 16.3704 21.457 16.6072C21.4147 16.6776 21.3559 16.7365 21.2855 16.7787L12.5145 22.0412C12.1979 22.2313 11.8022 22.2313 11.4856 22.0412L2.71463 16.7787C2.47784 16.6366 2.40106 16.3295 2.54313 16.0927C2.58536 16.0223 2.64425 15.9634 2.71463 15.9212L3.91672 15.1999L12.0001 20.0499L20.0834 15.1999ZM20.0834 10.4999L21.2855 11.2212C21.5223 11.3633 21.599 11.6704 21.457 11.9072C21.4147 11.9776 21.3559 12.0365 21.2855 12.0787L12.0001 17.6499L2.71463 12.0787C2.47784 11.9366 2.40106 11.6295 2.54313 11.3927C2.58536 11.3223 2.64425 11.2634 2.71463 11.2212L3.91672 10.4999L12.0001 15.3499L20.0834 10.4999ZM12.5145 1.30864L21.2855 6.5712C21.5223 6.71327 21.599 7.0204 21.457 7.25719C21.4147 7.32757 21.3559 7.38647 21.2855 7.42869L12.0001 12.9999L2.71463 7.42869C2.47784 7.28662 2.40106 6.97949 2.54313 6.7427C2.58536 6.67232 2.64425 6.61343 2.71463 6.5712L11.4856 1.30864C11.8022 1.11864 12.1979 1.11864 12.5145 1.30864ZM12.0001 3.33233L5.88735 6.99995L12.0001 10.6676L18.1128 6.99995L12.0001 3.33233Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.0833 15.1999L21.2854 15.9212C21.5221 16.0633 21.5989 16.3704 21.4569 16.6072C21.4146 16.6776 21.3557 16.7365 21.2854 16.7787L12.5144 22.0412C12.1977 22.2313 11.8021 22.2313 11.4854 22.0412L2.71451 16.7787C2.47772 16.6366 2.40093 16.3295 2.54301 16.0927C2.58523 16.0223 2.64413 15.9634 2.71451 15.9212L3.9166 15.1999L11.9999 20.0499L20.0833 15.1999ZM20.0833 10.4999L21.2854 11.2212C21.5221 11.3633 21.5989 11.6704 21.4569 11.9072C21.4146 11.9776 21.3557 12.0365 21.2854 12.0787L11.9999 17.6499L2.71451 12.0787C2.47772 11.9366 2.40093 11.6295 2.54301 11.3927C2.58523 11.3223 2.64413 11.2634 2.71451 11.2212L3.9166 10.4999L11.9999 15.3499L20.0833 10.4999ZM12.5144 1.30864L21.2854 6.5712C21.5221 6.71327 21.5989 7.0204 21.4569 7.25719C21.4146 7.32757 21.3557 7.38647 21.2854 7.42869L11.9999 12.9999L2.71451 7.42869C2.47772 7.28662 2.40093 6.97949 2.54301 6.7427C2.58523 6.67232 2.64413 6.61343 2.71451 6.5712L11.4854 1.30864C11.8021 1.11864 12.1977 1.11864 12.5144 1.30864ZM11.9999 3.33233L5.88723 6.99995L11.9999 10.6676L18.1126 6.99995L11.9999 3.33233Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/stairs-fill.svg b/client/packages/lowcoder-design/src/icons/remix/stairs-fill.svg new file mode 100644 index 0000000000..8087db07a0 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/stairs-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15 3H21V21H3V15H7V11H11V7H15V3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/stairs-line.svg b/client/packages/lowcoder-design/src/icons/remix/stairs-line.svg new file mode 100644 index 0000000000..01dbcb9b02 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/stairs-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M15 3H21V21H3V15H7V11H11V7H15V3ZM17 5V9H13V13H9V17H5V19H19V5H17Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/star-off-fill.svg b/client/packages/lowcoder-design/src/icons/remix/star-off-fill.svg new file mode 100644 index 0000000000..4437f95df3 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/star-off-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M23.4132 8.7918L18.0211 13.7783L9.70961 5.46678L12.0006 0.5L15.3862 7.84006L23.4132 8.7918ZM18.6224 20.0361L21.193 22.6067L22.6072 21.1925L2.80818 1.39348L1.39397 2.80769L6.65832 8.07205L0.587891 8.7918L6.52248 14.2799L4.94715 22.2082L12.0006 18.26L19.054 22.2082L18.6224 20.0361Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/star-off-line.svg b/client/packages/lowcoder-design/src/icons/remix/star-off-line.svg new file mode 100644 index 0000000000..3f682ff8b7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/star-off-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M23.4132 8.7918L18.0211 13.7783L16.6058 12.363L18.8719 10.2674L14.039 9.69434L12.0006 5.27502L11.2169 6.97405L9.70961 5.46678L12.0006 0.5L15.3862 7.84006L23.4132 8.7918ZM8.45885 9.87258L5.12921 10.2674L8.70231 13.5717L7.75383 18.3451L12.0006 15.968L16.2473 18.3451L16.0777 17.4914L8.45885 9.87258ZM18.6224 20.0361L19.054 22.2082L12.0006 18.26L4.94715 22.2082L6.52248 14.2799L0.587891 8.7918L6.65832 8.07205L1.39397 2.80769L2.80818 1.39348L22.6072 21.1925L21.193 22.6067L18.6224 20.0361Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/stop-large-fill.svg b/client/packages/lowcoder-design/src/icons/remix/stop-large-fill.svg new file mode 100644 index 0000000000..53d2462cb9 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/stop-large-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3 4C3 3.44772 3.44772 3 4 3H20C20.5523 3 21 3.44772 21 4V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/stop-large-line.svg b/client/packages/lowcoder-design/src/icons/remix/stop-large-line.svg new file mode 100644 index 0000000000..a0462d9565 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/stop-large-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5 5H19V19H5V5ZM4 3C3.44772 3 3 3.44772 3 4V20C3 20.5523 3.44772 21 4 21H20C20.5523 21 21 20.5523 21 20V4C21 3.44772 20.5523 3 20 3H4Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/tailwind-css-fill.svg b/client/packages/lowcoder-design/src/icons/remix/tailwind-css-fill.svg new file mode 100644 index 0000000000..3d2ad9ecb4 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/tailwind-css-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9996 4.85999C8.82628 4.85999 6.84294 6.44665 6.04961 9.61999C7.23961 8.03332 8.62794 7.43832 10.2146 7.83499C11.12 8.06109 11.7666 8.71757 12.4835 9.44545C13.6507 10.6295 15.0004 12 17.9496 12C21.1229 12 23.1063 10.4133 23.8996 7.23998C22.7096 8.82665 21.3213 9.42165 19.7346 9.02499C18.8292 8.79889 18.1827 8.1424 17.4657 7.41452C16.2995 6.23047 14.9498 4.85999 11.9996 4.85999ZM6.04961 12C2.87628 12 0.892943 13.5867 0.0996094 16.76C1.28961 15.1733 2.67794 14.5783 4.26461 14.975C5.17 15.2011 5.81657 15.8576 6.53354 16.5855C7.70073 17.7695 9.05039 19.14 11.9996 19.14C15.1729 19.14 17.1563 17.5533 17.9496 14.38C16.7596 15.9667 15.3713 16.5617 13.7846 16.165C12.8792 15.9389 12.2326 15.2824 11.5157 14.5545C10.3495 13.3705 8.99982 12 6.04961 12Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/tailwind-css-line.svg b/client/packages/lowcoder-design/src/icons/remix/tailwind-css-line.svg new file mode 100644 index 0000000000..ee12623462 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/tailwind-css-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.1267 6.21913C9.17785 5.37821 10.4989 5 12.0014 5C13.41 5 14.4863 5.33092 15.3593 5.83363C16.0983 6.25922 16.7127 6.84126 17.3072 7.44492C17.953 8.10062 18.3034 8.41984 18.7437 8.52979C19.217 8.64811 19.617 8.61249 19.9825 8.45585C20.3621 8.29317 20.7745 7.96918 21.2014 7.4L22.9715 8.24254C22.6005 9.72673 21.9241 10.9425 20.8761 11.7809C19.8249 12.6218 18.5038 13 17.0014 13C15.5931 13 14.517 12.669 13.6441 12.1664C12.8103 11.6862 12.2012 11.068 11.7232 10.583C11.0611 9.9112 10.7056 9.5817 10.2591 9.47021C9.78583 9.35189 9.3858 9.38751 9.02031 9.54415C8.64071 9.70683 8.22828 10.0308 7.80139 10.6L6.03125 9.75746C6.4023 8.27328 7.07869 7.05754 8.1267 6.21913ZM12.0014 7C11.1728 7 10.5057 7.14609 9.96802 7.40781C11.2881 7.49046 12.1492 8.30299 13.0247 9.12911C13.5289 9.60492 14.0379 10.0852 14.6422 10.4332C15.2012 10.7551 15.9313 11 17.0014 11C17.8299 11 18.497 10.8539 19.0347 10.5922C17.7147 10.5095 16.8538 9.69708 15.9786 8.87101C15.4744 8.39515 14.9655 7.91478 14.3612 7.56679C13.8022 7.24491 13.0719 7 12.0014 7ZM3.1267 12.2191C4.17785 11.3782 5.49894 11 7.00139 11C8.41001 11 9.48634 11.3309 10.3593 11.8336C11.0983 12.2592 11.7127 12.8413 12.3072 13.4449C12.953 14.1006 13.3034 14.4198 13.7437 14.5298C14.217 14.6481 14.617 14.6125 14.9825 14.4559C15.3621 14.2932 15.7745 13.9692 16.2014 13.4L17.9715 14.2425C17.6005 15.7267 16.9241 16.9425 15.8761 17.7809C14.8249 18.6218 13.5038 19 12.0014 19C10.5931 19 9.51701 18.669 8.64412 18.1664C7.81033 17.6862 7.20115 17.068 6.72319 16.583C6.06109 15.9112 5.70557 15.5817 5.25911 15.4702C4.78583 15.3519 4.3858 15.3875 4.02031 15.5441C3.64071 15.7068 3.22828 16.0308 2.80139 16.6L1.03125 15.7575C1.4023 14.2733 2.07869 13.0575 3.1267 12.2191ZM7.00136 13C6.17284 13 5.50571 13.1461 4.96802 13.4078C6.28809 13.4905 7.14918 14.303 8.02466 15.1291L8.02467 15.1291C8.52891 15.6049 9.03793 16.0852 9.64217 16.4332C10.2012 16.7551 10.9313 17 12.0014 17C12.8299 17 13.497 16.8539 14.0347 16.5922C12.7147 16.5095 11.8538 15.6971 10.9786 14.871C10.4744 14.3952 9.96546 13.9148 9.36117 13.5668C8.80225 13.2449 8.0719 13 7.00136 13Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/telegram-2-fill.svg b/client/packages/lowcoder-design/src/icons/remix/telegram-2-fill.svg new file mode 100644 index 0000000000..0df6bfd87a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/telegram-2-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M2.14753 11.8099C7.3949 9.52374 10.894 8.01654 12.6447 7.28833C17.6435 5.20916 18.6822 4.84799 19.3592 4.83606C19.5081 4.83344 19.8411 4.87034 20.0567 5.04534C20.2388 5.1931 20.2889 5.39271 20.3129 5.5328C20.3369 5.6729 20.3667 5.99204 20.343 6.2414C20.0721 9.08763 18.9 15.9947 18.3037 19.1825C18.0514 20.5314 17.5546 20.9836 17.0736 21.0279C16.0283 21.1241 15.2345 20.3371 14.2221 19.6735C12.6379 18.635 11.7429 17.9885 10.2051 16.9751C8.42795 15.804 9.58001 15.1603 10.5928 14.1084C10.8579 13.8331 15.4635 9.64397 15.5526 9.26395C15.5637 9.21642 15.5741 9.03926 15.4688 8.94571C15.3636 8.85216 15.2083 8.88415 15.0962 8.9096C14.9373 8.94566 12.4064 10.6184 7.50365 13.928C6.78528 14.4212 6.13461 14.6616 5.55163 14.649C4.90893 14.6351 3.67265 14.2856 2.7536 13.9869C1.62635 13.6204 0.730432 13.4267 0.808447 12.8044C0.849081 12.4803 1.29544 12.1488 2.14753 11.8099Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/telegram-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/telegram-2-line.svg new file mode 100644 index 0000000000..b102cd6f8b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/telegram-2-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.0943 7.14643C17.6874 6.93123 17.9818 6.85378 18.1449 6.82608C18.1461 6.87823 18.1449 6.92051 18.1422 6.94825C17.9096 9.39217 16.8906 15.4048 16.3672 18.2026C16.2447 18.8578 16.1507 19.1697 15.5179 18.798C15.1014 18.5532 14.7245 18.2452 14.3207 17.9805C12.9961 17.1121 11.1 15.8189 11.2557 15.8967C9.95162 15.0373 10.4975 14.5111 11.2255 13.8093C11.3434 13.6957 11.466 13.5775 11.5863 13.4525C11.64 13.3967 11.9027 13.1524 12.2731 12.8081C13.4612 11.7035 15.7571 9.56903 15.8151 9.32202C15.8246 9.2815 15.8334 9.13045 15.7436 9.05068C15.6539 8.97092 15.5215 8.9982 15.4259 9.01989C15.2904 9.05064 13.1326 10.4769 8.95243 13.2986C8.33994 13.7192 7.78517 13.9242 7.28811 13.9134L7.29256 13.9156C6.63781 13.6847 5.9849 13.4859 5.32855 13.286C4.89736 13.1546 4.46469 13.0228 4.02904 12.8812C3.92249 12.8466 3.81853 12.8137 3.72083 12.783C8.24781 10.8109 11.263 9.51243 12.7739 8.884C14.9684 7.97124 16.2701 7.44551 17.0943 7.14643ZM19.5169 5.21806C19.2635 5.01244 18.985 4.91807 18.7915 4.87185C18.5917 4.82412 18.4018 4.80876 18.2578 4.8113C17.7814 4.81969 17.2697 4.95518 16.4121 5.26637C15.5373 5.58382 14.193 6.12763 12.0058 7.03736C10.4638 7.67874 7.39388 9.00115 2.80365 11.001C2.40046 11.1622 2.03086 11.3451 1.73884 11.5619C1.46919 11.7622 1.09173 12.1205 1.02268 12.6714C0.970519 13.0874 1.09182 13.4714 1.33782 13.7738C1.55198 14.037 1.82635 14.1969 2.03529 14.2981C2.34545 14.4483 2.76276 14.5791 3.12952 14.6941C3.70264 14.8737 4.27444 15.0572 4.84879 15.233C6.62691 15.7773 8.09066 16.2253 9.7012 17.2866C10.8825 18.0651 12.041 18.8775 13.2243 19.6531C13.6559 19.936 14.0593 20.2607 14.5049 20.5224C14.9916 20.8084 15.6104 21.0692 16.3636 20.9998C17.5019 20.8951 18.0941 19.8479 18.3331 18.5703C18.8552 15.7796 19.8909 9.68351 20.1332 7.13774C20.1648 6.80544 20.1278 6.433 20.097 6.25318C20.0653 6.068 19.9684 5.58448 19.5169 5.21806Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/telegram-fill.svg b/client/packages/lowcoder-design/src/icons/remix/telegram-fill.svg index f497543c08..ef041adaac 100644 --- a/client/packages/lowcoder-design/src/icons/remix/telegram-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/telegram-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.001 22C6.47813 22 2.00098 17.5228 2.00098 12C2.00098 6.47715 6.47813 2 12.001 2C17.5238 2 22.001 6.47715 22.001 12C22.001 17.5228 17.5238 22 12.001 22ZM8.89113 13.1708L8.90378 13.1628C9.48351 15.0767 9.77337 16.0337 9.77337 16.0337C9.88564 16.3442 10.04 16.3996 10.2273 16.3743C10.4145 16.3489 10.5139 16.2476 10.6361 16.1297C10.6361 16.1297 11.0324 15.7472 11.825 14.9823L14.3759 16.8698C14.8407 17.1266 15.1763 16.9941 15.2917 16.4377L16.9495 8.61641C17.1325 7.88842 16.8115 7.59644 16.247 7.82754L6.51397 11.5871C5.84996 11.854 5.85317 12.2255 6.39308 12.3911L8.89113 13.1708Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM12.3584 9.38246C11.3857 9.78702 9.4418 10.6244 6.5266 11.8945C6.05321 12.0827 5.80524 12.2669 5.78266 12.4469C5.74451 12.7513 6.12561 12.8711 6.64458 13.0343C6.71517 13.0565 6.78832 13.0795 6.8633 13.1039C7.37388 13.2698 8.06071 13.464 8.41776 13.4717C8.74164 13.4787 9.10313 13.3452 9.50222 13.0711C12.226 11.2325 13.632 10.3032 13.7203 10.2832C13.7826 10.269 13.8689 10.2513 13.9273 10.3032C13.9858 10.3552 13.98 10.4536 13.9739 10.48C13.9361 10.641 12.4401 12.0318 11.666 12.7515C11.4351 12.9661 11.2101 13.1853 10.9833 13.4039C10.509 13.8611 10.1533 14.204 11.003 14.764C11.8644 15.3317 12.7323 15.8982 13.5724 16.4971C13.9867 16.7925 14.359 17.0579 14.8188 17.0156C15.0861 16.991 15.3621 16.7397 15.5022 15.9903C15.8335 14.2193 16.4847 10.3821 16.6352 8.80083C16.6484 8.6623 16.6318 8.485 16.6185 8.40717C16.6052 8.32934 16.5773 8.21844 16.4762 8.13635C16.3563 8.03913 16.1714 8.01863 16.0887 8.02009C15.7125 8.02672 15.1355 8.22737 12.3584 9.38246Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/telegram-line.svg b/client/packages/lowcoder-design/src/icons/remix/telegram-line.svg index d66dec8aac..30ed0ae908 100644 --- a/client/packages/lowcoder-design/src/icons/remix/telegram-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/telegram-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.001 20C16.4193 20 20.001 16.4183 20.001 12C20.001 7.58172 16.4193 4 12.001 4C7.5827 4 4.00098 7.58172 4.00098 12C4.00098 16.4183 7.5827 20 12.001 20ZM12.001 22C6.47813 22 2.00098 17.5228 2.00098 12C2.00098 6.47715 6.47813 2 12.001 2C17.5238 2 22.001 6.47715 22.001 12C22.001 17.5228 17.5238 22 12.001 22ZM8.89113 13.1708L6.39308 12.3911C5.85317 12.2255 5.84996 11.854 6.51397 11.5871L16.247 7.82754C16.8115 7.59644 17.1325 7.88842 16.9495 8.61641L15.2917 16.4377C15.1763 16.9941 14.8407 17.1266 14.3759 16.8698L11.825 14.9823L10.6361 16.1297C10.5139 16.2476 10.4145 16.3489 10.2273 16.3743C10.04 16.3996 9.88564 16.3442 9.77337 16.0337L8.90378 13.1628L8.89113 13.1708Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM12.3584 9.38246C11.3857 9.78702 9.4418 10.6244 6.5266 11.8945C6.05321 12.0827 5.80524 12.2669 5.78266 12.4469C5.74451 12.7513 6.12561 12.8711 6.64458 13.0343C6.71517 13.0565 6.78832 13.0795 6.8633 13.1039C7.37388 13.2698 8.06071 13.464 8.41776 13.4717C8.74164 13.4787 9.10313 13.3452 9.50222 13.0711C12.226 11.2325 13.632 10.3032 13.7203 10.2832C13.7826 10.269 13.8689 10.2513 13.9273 10.3032C13.9858 10.3552 13.98 10.4536 13.9739 10.48C13.9361 10.641 12.4401 12.0318 11.6659 12.7515C11.4351 12.9661 11.2101 13.1853 10.9833 13.4039C10.509 13.8611 10.1533 14.204 11.003 14.764C11.8644 15.3317 12.7323 15.8982 13.5724 16.4971C13.9867 16.7925 14.359 17.0579 14.8188 17.0156C15.0861 16.991 15.3621 16.7397 15.5022 15.9903C15.8335 14.2193 16.4847 10.3821 16.6352 8.80083C16.6484 8.6623 16.6318 8.485 16.6185 8.40717C16.6052 8.32934 16.5773 8.21844 16.4762 8.13635C16.3563 8.03913 16.1714 8.01863 16.0887 8.02009C15.7125 8.02672 15.1355 8.22737 12.3584 9.38246Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/tools-fill.svg b/client/packages/lowcoder-design/src/icons/remix/tools-fill.svg index a9a735f93c..cca0ba292f 100644 --- a/client/packages/lowcoder-design/src/icons/remix/tools-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/tools-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.32943 3.27152C6.56252 2.83314 7.9923 3.10743 8.97927 4.0944C9.96652 5.08165 10.2407 6.51196 9.80178 7.74529L20.6465 18.5901L18.5252 20.7114L7.67936 9.86703C6.44627 10.3054 5.01649 10.0311 4.02952 9.04415C3.04227 8.0569 2.7681 6.62659 3.20701 5.39326L5.44373 7.62994C6.02952 8.21572 6.97927 8.21572 7.56505 7.62994C8.15084 7.04415 8.15084 6.0944 7.56505 5.50862L5.32943 3.27152ZM15.6968 5.15506L18.8788 3.38729L20.293 4.80151L18.5252 7.98349L16.7574 8.33704L14.6361 10.4584L13.2219 9.04415L15.3432 6.92283L15.6968 5.15506ZM8.62572 12.9332L10.747 15.0546L5.79729 20.0043C5.2115 20.5901 4.26175 20.5901 3.67597 20.0043C3.12464 19.453 3.09221 18.5792 3.57867 17.99L3.67597 17.883L8.62572 12.9332Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.32943 3.27158C6.56252 2.8332 7.9923 3.10749 8.97927 4.09446C9.96652 5.08171 10.2407 6.51202 9.80178 7.74535L20.6465 18.5902L18.5252 20.7115L7.67936 9.86709C6.44627 10.3055 5.01649 10.0312 4.02952 9.04421C3.04227 8.05696 2.7681 6.62665 3.20701 5.39332L5.44373 7.63C6.02952 8.21578 6.97927 8.21578 7.56505 7.63C8.15084 7.04421 8.15084 6.09446 7.56505 5.50868L5.32943 3.27158ZM15.6968 5.15512L18.8788 3.38736L20.293 4.80157L18.5252 7.98355L16.7574 8.3371L14.6361 10.4584L13.2219 9.04421L15.3432 6.92289L15.6968 5.15512ZM8.62572 12.9333L10.747 15.0546L5.79729 20.0044C5.2115 20.5902 4.26175 20.5902 3.67597 20.0044C3.12464 19.453 3.09221 18.5793 3.57867 17.99L3.67597 17.883L8.62572 12.9333Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/tools-line.svg b/client/packages/lowcoder-design/src/icons/remix/tools-line.svg index 2181886d99..1fe39b6afa 100644 --- a/client/packages/lowcoder-design/src/icons/remix/tools-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/tools-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.32943 3.27152C6.56252 2.83314 7.9923 3.10743 8.97927 4.0944C10.1002 5.21531 10.3019 6.90735 9.5843 8.23378L20.293 18.9436L18.8788 20.3579L8.16982 9.64869C6.84325 10.3668 5.15069 10.1653 4.02952 9.04415C3.04227 8.0569 2.7681 6.62659 3.20701 5.39326L5.44373 7.62994C6.02952 8.21572 6.97927 8.21572 7.56505 7.62994C8.15084 7.04415 8.15084 6.0944 7.56505 5.50862L5.32943 3.27152ZM15.6968 5.15506L18.8788 3.38729L20.293 4.80151L18.5252 7.98349L16.7574 8.33704L14.6361 10.4584L13.2219 9.04415L15.3432 6.92283L15.6968 5.15506ZM8.97927 13.2868L10.3935 14.701L5.09018 20.0043C4.69966 20.3948 4.06649 20.3948 3.67597 20.0043C3.31334 19.6417 3.28744 19.0698 3.59826 18.6773L3.67597 18.5901L8.97927 13.2868Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.32943 3.27158C6.56252 2.8332 7.9923 3.10749 8.97927 4.09446C10.1002 5.21537 10.3019 6.90741 9.5843 8.23385L20.293 18.9437L18.8788 20.3579L8.16982 9.64875C6.84325 10.3669 5.15069 10.1654 4.02952 9.04421C3.04227 8.05696 2.7681 6.62665 3.20701 5.39332L5.44373 7.63C6.02952 8.21578 6.97927 8.21578 7.56505 7.63C8.15084 7.04421 8.15084 6.09446 7.56505 5.50868L5.32943 3.27158ZM15.6968 5.15512L18.8788 3.38736L20.293 4.80157L18.5252 7.98355L16.7574 8.3371L14.6361 10.4584L13.2219 9.04421L15.3432 6.92289L15.6968 5.15512ZM8.97927 13.2868L10.3935 14.7011L5.09018 20.0044C4.69966 20.3949 4.06649 20.3949 3.67597 20.0044C3.31334 19.6417 3.28744 19.0699 3.59826 18.6774L3.67597 18.5902L8.97927 13.2868Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/tooth-fill.svg b/client/packages/lowcoder-design/src/icons/remix/tooth-fill.svg new file mode 100644 index 0000000000..f160996daa --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/tooth-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M12.0002 3.23235C13.5819 4.0567 14.7825 5.51252 15.2664 7.26605C15.4134 7.79843 15.9641 8.1109 16.4964 7.96396C17.0288 7.81702 17.3413 7.26633 17.1943 6.73395C16.7346 5.06811 15.7806 3.60711 14.4998 2.519C14.665 2.50641 14.8318 2.5 15 2.5C17.0071 2.5 18.6792 3.228 19.8307 4.60982C20.962 5.96738 21.5 7.84558 21.5 10C21.5 13.0971 20.9858 15.8652 20.1051 17.8976C19.265 19.8362 17.8974 21.5 16 21.5C14.8997 21.5 14.2129 20.8477 13.8053 20.1396C13.4431 19.5106 13.2269 18.7169 13.0529 18.0779C12.8459 17.3179 12.6873 16.7504 12.4615 16.3583C12.2754 16.0352 12.1497 16 12 16C11.8503 16 11.7246 16.0352 11.5385 16.3583C11.3127 16.7504 11.1541 17.3179 10.9471 18.0779L10.9471 18.0779C10.7731 18.7169 10.5569 19.5106 10.1947 20.1396C9.78706 20.8477 9.10027 21.5 8 21.5C6.1026 21.5 4.73499 19.8362 3.89494 17.8976C3.01425 15.8652 2.5 13.0971 2.5 10C2.5 7.84558 3.03797 5.96738 4.16928 4.60982C5.32079 3.228 6.9929 2.5 9 2.5C9.00948 2.5 9.01896 2.50002 9.02843 2.50006C10.0987 2.50466 11.1098 2.7686 12 3.23245C12.0001 3.23242 12.0001 3.23238 12.0002 3.23235Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/tooth-line.svg b/client/packages/lowcoder-design/src/icons/remix/tooth-line.svg new file mode 100644 index 0000000000..86de6efec7 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/tooth-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.70572 5.89018C6.42921 5.022 7.5071 4.5 9 4.5C9.90702 4.5 10.7486 4.7673 11.4538 5.22714C12.2364 5.73739 12.8501 6.48416 13.1936 7.36377C13.3945 7.87822 13.9744 8.13239 14.4888 7.93149C15.0033 7.73058 15.2575 7.15067 15.0565 6.63623C14.769 5.89989 14.3515 5.22943 13.8324 4.65272C14.2044 4.55311 14.5957 4.5 15 4.5C16.4929 4.5 17.5708 5.022 18.2943 5.89018C19.038 6.78262 19.5 8.15442 19.5 10C19.5 12.9029 19.0142 15.3848 18.2699 17.1024C17.485 18.9138 16.6026 19.5 16 19.5C15.8503 19.5 15.7246 19.4648 15.5385 19.1417C15.3127 18.7496 15.1541 18.1821 14.9471 17.4221C14.7731 16.7831 14.5569 15.9894 14.1947 15.3604C13.7871 14.6523 13.1003 14 12 14C10.8997 14 10.2129 14.6523 9.80525 15.3604C9.44313 15.9894 9.22692 16.7831 9.05289 17.4221C8.8459 18.1821 8.68726 18.7496 8.4615 19.1417C8.27544 19.4648 8.14973 19.5 8 19.5C7.3974 19.5 6.51501 18.9138 5.73006 17.1024C4.98575 15.3848 4.5 12.9029 4.5 10C4.5 8.15442 4.96203 6.78262 5.70572 5.89018ZM12 3.23245C11.1019 2.7645 10.0808 2.5 9 2.5C6.9929 2.5 5.32079 3.228 4.16928 4.60982C3.03797 5.96738 2.5 7.84558 2.5 10C2.5 13.0971 3.01425 15.8652 3.89494 17.8976C4.73499 19.8362 6.1026 21.5 8 21.5C9.10027 21.5 9.78706 20.8477 10.1947 20.1396C10.5692 19.4892 10.7876 18.6626 10.9648 18.0131C11.1626 17.2875 11.3192 16.7392 11.5385 16.3583C11.7246 16.0352 11.8503 16 12 16C12.1497 16 12.2754 16.0352 12.4615 16.3583C12.6808 16.7392 12.8374 17.2875 13.0352 18.0131C13.2123 18.6625 13.4308 19.4892 13.8053 20.1396C14.2129 20.8477 14.8997 21.5 16 21.5C17.8974 21.5 19.265 19.8362 20.1051 17.8976C20.9858 15.8652 21.5 13.0971 21.5 10C21.5 7.84558 20.962 5.96738 19.8307 4.60982C18.6792 3.228 17.0071 2.5 15 2.5C13.9192 2.5 12.8981 2.7645 12 3.23245Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/translate-ai-2.svg b/client/packages/lowcoder-design/src/icons/remix/translate-ai-2.svg new file mode 100644 index 0000000000..039b27e5b5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/translate-ai-2.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 8.12811L19.4668 8.69379C19.2864 9.10792 18.7136 9.10792 18.5331 8.69379L18.2866 8.12811C17.8471 7.11947 17.0555 6.31641 16.0677 5.87708L15.308 5.53922C14.8973 5.35653 14.8973 4.75881 15.308 4.57612L16.0252 4.25714C17.0384 3.80651 17.8442 2.97373 18.2761 1.93083L18.5293 1.31953C18.7058 0.893489 19.2942 0.893489 19.4706 1.31953L19.7238 1.93083C20.1558 2.97373 20.9616 3.80651 21.9748 4.25714L22.6919 4.57612C23.1027 4.75881 23.1027 5.35653 22.6919 5.53922L21.9323 5.87708C20.9445 6.31641 20.1529 7.11947 19.7134 8.12811ZM22.9 21L18.5 10H16.5L12.101 21H14.255L15.454 18H19.544L20.745 21H22.9ZM16.253 16L17.5 12.8852L18.745 16H16.253ZM7.5466 12.3036C6.41407 11.0171 5.45992 9.56967 4.72266 8H6.96329C7.53108 9.04434 8.21011 10.0196 8.98442 10.9097C10.2737 9.48824 11.3027 7.82653 11.9961 6H2V4H8V2H10V4H14.6497C14.5624 4.42994 14.4594 4.85421 14.3412 5.27216C13.5862 7.94155 12.2142 10.3512 10.389 12.3375C11.1089 12.9848 11.8869 13.5688 12.7142 14.0805L11.9615 15.9627C10.8814 15.3228 9.87297 14.5749 8.95119 13.7336C7.17781 15.2694 5.09248 16.4547 2.8027 17.1819L2.1973 15.2757C4.18364 14.6449 5.99672 13.6242 7.5466 12.3036Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/translate-ai.svg b/client/packages/lowcoder-design/src/icons/remix/translate-ai.svg new file mode 100644 index 0000000000..1a32e50371 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/translate-ai.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 8.12811L19.4668 8.69379C19.2864 9.10792 18.7136 9.10792 18.5331 8.69379L18.2866 8.12811C17.8471 7.11947 17.0555 6.31641 16.0677 5.87708L15.308 5.53922C14.8973 5.35653 14.8973 4.75881 15.308 4.57612L16.0252 4.25714C17.0384 3.80651 17.8442 2.97373 18.2761 1.93083L18.5293 1.31953C18.7058 0.893489 19.2942 0.893489 19.4706 1.31953L19.7238 1.93083C20.1558 2.97373 20.9616 3.80651 21.9748 4.25714L22.6919 4.57612C23.1027 4.75881 23.1027 5.35653 22.6919 5.53922L21.9323 5.87708C20.9445 6.31641 20.1529 7.11947 19.7134 8.12811ZM5 17V15H3V17C3 19.2091 4.79086 21 7 21H10V19H7L6.85074 18.9945C5.81588 18.9182 5 18.0544 5 17ZM22.4 21L18 10H16L11.601 21H13.755L14.954 18H19.044L20.245 21H22.4ZM15.753 16L17 12.8852L18.245 16H15.753ZM8 4V2H6V4H2V11H6V14H8V11H12V4H8ZM4 6H6V9H4V6ZM8 6H10V9H8V6Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/triangular-flag-fill.svg b/client/packages/lowcoder-design/src/icons/remix/triangular-flag-fill.svg new file mode 100644 index 0000000000..38daaf555e --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/triangular-flag-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.66056 2.18123C5.01456 1.61285 4 2.07155 4 2.932V22H6V18.0002H20.9896C21.9116 18.0002 22.3423 16.8584 21.6501 16.2494L5.66056 2.18123Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/triangular-flag-line.svg b/client/packages/lowcoder-design/src/icons/remix/triangular-flag-line.svg new file mode 100644 index 0000000000..591cdd3a89 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/triangular-flag-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M6 5.1438V16.0002H18.3391L6 5.1438ZM4 2.932C4 2.07155 5.01456 1.61285 5.66056 2.18123L21.6501 16.2494C22.3423 16.8584 21.9116 18.0002 20.9896 18.0002H6V22H4V2.932Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/twitter-x-fill.svg b/client/packages/lowcoder-design/src/icons/remix/twitter-x-fill.svg index 0f5090d446..1879f1c121 100644 --- a/client/packages/lowcoder-design/src/icons/remix/twitter-x-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/twitter-x-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M18.2048 2.25H21.5128L14.2858 10.51L22.7878 21.75H16.1308L10.9168 14.933L4.95084 21.75H1.64084L9.37084 12.915L1.21484 2.25H8.04084L12.7538 8.481L18.2048 2.25ZM17.0438 19.77H18.8768L7.04484 4.126H5.07784L17.0438 19.77Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17.6874 3.0625L12.6907 8.77425L8.37045 3.0625H2.11328L9.58961 12.8387L2.50378 20.9375H5.53795L11.0068 14.6886L15.7863 20.9375H21.8885L14.095 10.6342L20.7198 3.0625H17.6874ZM16.6232 19.1225L5.65436 4.78217H7.45745L18.3034 19.1225H16.6232Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/twitter-x-line.svg b/client/packages/lowcoder-design/src/icons/remix/twitter-x-line.svg index 2f7d3ab06f..65ffe96dfa 100644 --- a/client/packages/lowcoder-design/src/icons/remix/twitter-x-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/twitter-x-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8 2H1L9.26086 13.0145L1.44995 21.9999H4.09998L10.4883 14.651L16 22H23L14.3917 10.5223L21.8001 2H19.1501L13.1643 8.88578L8 2ZM17 20L5 4H7L19 20H17Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.4883 14.651L15.25 21H22.25L14.3917 10.5223L20.9308 3H18.2808L13.1643 8.88578L8.75 3H1.75L9.26086 13.0145L2.31915 21H4.96917L10.4883 14.651ZM16.25 19L5.75 5H7.75L18.25 19H16.25Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/user-community-fill.svg b/client/packages/lowcoder-design/src/icons/remix/user-community-fill.svg new file mode 100644 index 0000000000..a64d62fbf2 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/user-community-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.23379 7.72989C6.65303 5.48625 9.15342 4 12.0002 4C14.847 4 17.3474 5.48625 18.7667 7.72989L20.4569 6.66071C18.6865 3.86199 15.5612 2 12.0002 2C8.43928 2 5.31393 3.86199 3.54356 6.66071L5.23379 7.72989ZM12.0002 20C9.15342 20 6.65303 18.5138 5.23379 16.2701L3.54356 17.3393C5.31393 20.138 8.43928 22 12.0002 22C15.5612 22 18.6865 20.138 20.4569 17.3393L18.7667 16.2701C17.3474 18.5138 14.847 20 12.0002 20ZM12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12ZM12 13C14.2091 13 16 14.7909 16 17H8C8 14.7909 9.79086 13 12 13ZM6 12C6 13.6569 4.65685 15 3 15C1.34315 15 0 13.6569 0 12C0 10.3431 1.34315 9 3 9C4.65685 9 6 10.3431 6 12ZM21 15C22.6569 15 24 13.6569 24 12C24 10.3431 22.6569 9 21 9C19.3431 9 18 10.3431 18 12C18 13.6569 19.3431 15 21 15Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/user-community-line.svg b/client/packages/lowcoder-design/src/icons/remix/user-community-line.svg new file mode 100644 index 0000000000..ea66741bda --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/user-community-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.23379 7.72989C6.65303 5.48625 9.15342 4 12.0002 4C14.847 4 17.3474 5.48625 18.7667 7.72989L20.4569 6.66071C18.6865 3.86199 15.5612 2 12.0002 2C8.43928 2 5.31393 3.86199 3.54356 6.66071L5.23379 7.72989ZM12.0002 20C9.15342 20 6.65303 18.5138 5.23379 16.2701L3.54356 17.3393C5.31393 20.138 8.43928 22 12.0002 22C15.5612 22 18.6865 20.138 20.4569 17.3393L18.7667 16.2701C17.3474 18.5138 14.847 20 12.0002 20ZM12 8C12.5523 8 13 8.44772 13 9C13 9.55228 12.5523 10 12 10C11.4477 10 11 9.55228 11 9C11 8.44772 11.4477 8 12 8ZM12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12ZM12 15C10.8954 15 10 15.8954 10 17H8C8 14.7909 9.79086 13 12 13C14.2091 13 16 14.7909 16 17H14C14 15.8954 13.1046 15 12 15ZM3 11C2.44772 11 2 11.4477 2 12C2 12.5523 2.44772 13 3 13C3.55228 13 4 12.5523 4 12C4 11.4477 3.55228 11 3 11ZM0 12C0 10.3431 1.34315 9 3 9C4.65685 9 6 10.3431 6 12C6 13.6569 4.65685 15 3 15C1.34315 15 0 13.6569 0 12ZM20 12C20 11.4477 20.4477 11 21 11C21.5523 11 22 11.4477 22 12C22 12.5523 21.5523 13 21 13C20.4477 13 20 12.5523 20 12ZM21 9C19.3431 9 18 10.3431 18 12C18 13.6569 19.3431 15 21 15C22.6569 15 24 13.6569 24 12C24 10.3431 22.6569 9 21 9Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/user-minus-fill.svg b/client/packages/lowcoder-design/src/icons/remix/user-minus-fill.svg new file mode 100644 index 0000000000..5367efed8b --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/user-minus-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14 14.252V22H4C4 17.5817 7.58172 14 12 14C12.6906 14 13.3608 14.0875 14 14.252ZM12 13C8.685 13 6 10.315 6 7C6 3.685 8.685 1 12 1C15.315 1 18 3.685 18 7C18 10.315 15.315 13 12 13ZM23 18V20H15V18H23Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/user-minus-line.svg b/client/packages/lowcoder-design/src/icons/remix/user-minus-line.svg new file mode 100644 index 0000000000..d2225637f5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/user-minus-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14 14.252V16.3414C13.3744 16.1203 12.7013 16 12 16C8.68629 16 6 18.6863 6 22H4C4 17.5817 7.58172 14 12 14C12.6906 14 13.3608 14.0875 14 14.252ZM12 13C8.685 13 6 10.315 6 7C6 3.685 8.685 1 12 1C15.315 1 18 3.685 18 7C18 10.315 15.315 13 12 13ZM12 11C14.21 11 16 9.21 16 7C16 4.79 14.21 3 12 3C9.79 3 8 4.79 8 7C8 9.21 9.79 11 12 11ZM23 18V20H15V18H23Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/vercel-fill.svg b/client/packages/lowcoder-design/src/icons/remix/vercel-fill.svg new file mode 100644 index 0000000000..848b4324d8 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/vercel-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M23 21.6479H1L12 2.35205L23 21.6479Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/vercel-line.svg b/client/packages/lowcoder-design/src/icons/remix/vercel-line.svg new file mode 100644 index 0000000000..2d8c6e3b2a --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/vercel-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M23 21.6479L12 2.35205L1 21.6479H23ZM19.5577 19.6479H4.4423L12 6.39042L19.5577 19.6479Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/verified-badge-line.svg b/client/packages/lowcoder-design/src/icons/remix/verified-badge-line.svg index 3eafef0ea4..08979cf4a1 100644 --- a/client/packages/lowcoder-design/src/icons/remix/verified-badge-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/verified-badge-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.0073 2.10365C8.60568 1.64993 7.08206 2.28104 6.41181 3.59294L5.60603 5.17011C5.51029 5.35751 5.35787 5.50992 5.17048 5.60566L3.5933 6.41144C2.2814 7.08169 1.6503 8.60532 2.10401 10.0069L2.64947 11.6919C2.71428 11.8921 2.71428 12.1077 2.64947 12.3079L2.10401 13.9929C1.6503 15.3945 2.28141 16.9181 3.5933 17.5883L5.17048 18.3941C5.35787 18.4899 5.51029 18.6423 5.60603 18.8297L6.41181 20.4068C7.08206 21.7187 8.60569 22.3498 10.0073 21.8961L11.6923 21.3507C11.8925 21.2859 12.108 21.2859 12.3082 21.3507L13.9932 21.8961C15.3948 22.3498 16.9185 21.7187 17.5887 20.4068L18.3945 18.8297C18.4902 18.6423 18.6426 18.4899 18.83 18.3941L20.4072 17.5883C21.7191 16.9181 22.3502 15.3945 21.8965 13.9929L21.351 12.3079C21.2862 12.1077 21.2862 11.8921 21.351 11.6919L21.8965 10.0069C22.3502 8.60531 21.7191 7.08169 20.4072 6.41144L18.83 5.60566C18.6426 5.50992 18.4902 5.3575 18.3945 5.17011L17.5887 3.59294C16.9185 2.28104 15.3948 1.64993 13.9932 2.10365L12.3082 2.6491C12.108 2.71391 11.8925 2.71391 11.6923 2.6491L10.0073 2.10365ZM8.19283 4.50286C8.41624 4.06556 8.92412 3.8552 9.39132 4.00643L11.0763 4.55189C11.6769 4.74632 12.3236 4.74632 12.9242 4.55189L14.6092 4.00643C15.0764 3.8552 15.5843 4.06556 15.8077 4.50286L16.6135 6.08004C16.9007 6.64222 17.3579 7.09946 17.9201 7.38668L19.4973 8.19246C19.9346 8.41588 20.145 8.92375 19.9937 9.39095L19.4483 11.076C19.2538 11.6766 19.2538 12.3232 19.4483 12.9238L19.9937 14.6088C20.145 15.076 19.9346 15.5839 19.4973 15.8073L17.9201 16.6131C17.3579 16.9003 16.9007 17.3576 16.6135 17.9197L15.8077 19.4969C15.5843 19.9342 15.0764 20.1446 14.6092 19.9933L12.9242 19.4479C12.3236 19.2535 11.6769 19.2535 11.0763 19.4479L9.39132 19.9933C8.92412 20.1446 8.41624 19.9342 8.19283 19.4969L7.38705 17.9197C7.09983 17.3576 6.64258 16.9003 6.08041 16.6131L4.50323 15.8073C4.06593 15.5839 3.85556 15.076 4.0068 14.6088L4.55226 12.9238C4.74668 12.3232 4.74668 11.6766 4.55226 11.076L4.0068 9.39095C3.85556 8.92375 4.06593 8.41588 4.50323 8.19246L6.0804 7.38668C6.64258 7.09946 7.09983 6.64222 7.38705 6.08004L8.19283 4.50286ZM6.75984 11.7573L11.0025 15.9999L18.0736 8.92885L16.6594 7.51464L11.0025 13.1715L8.17406 10.343L6.75984 11.7573Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10.0072 2.10365C8.60556 1.64993 7.08193 2.28104 6.41168 3.59294L5.6059 5.17011C5.51016 5.35751 5.35775 5.50992 5.17036 5.60566L3.59318 6.41144C2.28128 7.08169 1.65018 8.60532 2.10389 10.0069L2.64935 11.6919C2.71416 11.8921 2.71416 12.1077 2.64935 12.3079L2.10389 13.9929C1.65018 15.3945 2.28129 16.9181 3.59318 17.5883L5.17036 18.3941C5.35775 18.4899 5.51016 18.6423 5.6059 18.8297L6.41169 20.4068C7.08194 21.7187 8.60556 22.3498 10.0072 21.8961L11.6922 21.3507C11.8924 21.2859 12.1079 21.2859 12.3081 21.3507L13.9931 21.8961C15.3947 22.3498 16.9183 21.7187 17.5886 20.4068L18.3944 18.8297C18.4901 18.6423 18.6425 18.4899 18.8299 18.3941L20.4071 17.5883C21.719 16.9181 22.3501 15.3945 21.8964 13.9929L21.3509 12.3079C21.2861 12.1077 21.2861 11.8921 21.3509 11.6919L21.8964 10.0069C22.3501 8.60531 21.719 7.08169 20.4071 6.41144L18.8299 5.60566C18.6425 5.50992 18.4901 5.3575 18.3944 5.17011L17.5886 3.59294C16.9183 2.28104 15.3947 1.64993 13.9931 2.10365L12.3081 2.6491C12.1079 2.71391 11.8924 2.71391 11.6922 2.6491L10.0072 2.10365ZM8.19271 4.50286C8.41612 4.06556 8.924 3.8552 9.39119 4.00643L11.0762 4.55189C11.6768 4.74632 12.3235 4.74632 12.9241 4.55189L14.6091 4.00643C15.0763 3.8552 15.5841 4.06556 15.8076 4.50286L16.6133 6.08004C16.9006 6.64222 17.3578 7.09946 17.92 7.38668L19.4972 8.19246C19.9345 8.41588 20.1448 8.92375 19.9936 9.39095L19.4481 11.076C19.2537 11.6766 19.2537 12.3232 19.4481 12.9238L19.9936 14.6088C20.1448 15.076 19.9345 15.5839 19.4972 15.8073L17.92 16.6131C17.3578 16.9003 16.9006 17.3576 16.6133 17.9197L15.8076 19.4969C15.5841 19.9342 15.0763 20.1446 14.6091 19.9933L12.9241 19.4479C12.3235 19.2535 11.6768 19.2535 11.0762 19.4479L9.3912 19.9933C8.924 20.1446 8.41612 19.9342 8.19271 19.4969L7.38692 17.9197C7.09971 17.3576 6.64246 16.9003 6.08028 16.6131L4.50311 15.8073C4.06581 15.5839 3.85544 15.076 4.00668 14.6088L4.55213 12.9238C4.74656 12.3232 4.74656 11.6766 4.55213 11.076L4.00668 9.39095C3.85544 8.92375 4.06581 8.41588 4.50311 8.19246L6.08028 7.38668C6.64246 7.09946 7.09971 6.64222 7.38692 6.08004L8.19271 4.50286ZM6.75972 11.7573L11.0023 15.9999L18.0734 8.92885L16.6592 7.51464L11.0023 13.1715L8.17394 10.343L6.75972 11.7573Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/video-ai-fill.svg new file mode 100644 index 0000000000..6b55b914d5 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 8.12811L19.4668 8.69379C19.2864 9.10792 18.7136 9.10792 18.5331 8.69379L18.2866 8.12811C17.8471 7.11947 17.0555 6.31641 16.0677 5.87708L15.308 5.53922C14.8973 5.35653 14.8973 4.75881 15.308 4.57612L16.0252 4.25714C17.0384 3.80651 17.8442 2.97373 18.2761 1.93083L18.5293 1.31953C18.7058 0.893489 19.2942 0.893489 19.4706 1.31953L19.7238 1.93083C20.1558 2.97373 20.9616 3.80651 21.9748 4.25714L22.6919 4.57612C23.1027 4.75881 23.1027 5.35653 22.6919 5.53922L21.9323 5.87708C20.9445 6.31641 20.1529 7.11947 19.7134 8.12811ZM19 11C19.7013 11 20.3744 10.8797 21 10.6586V20.0066C21 20.5552 20.5551 21 20.0066 21H3.9934C3.44476 21 3 20.5551 3 20.0066V3.9934C3 3.44476 3.44495 3 3.9934 3H13.3414C13.1203 3.62556 13 4.29873 13 5C13 8.31371 15.6863 11 19 11ZM10.6219 8.41459C10.5562 8.37078 10.479 8.34741 10.4 8.34741C10.1791 8.34741 10 8.52649 10 8.74741V15.2526C10 15.3316 10.0234 15.4088 10.0672 15.4745C10.1897 15.6583 10.4381 15.708 10.6219 15.5854L15.5008 12.3328C15.5447 12.3035 15.5824 12.2658 15.6117 12.2219C15.7343 12.0381 15.6846 11.7897 15.5008 11.6672L10.6219 8.41459Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/video-ai-line.svg new file mode 100644 index 0000000000..7ca98a6d13 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M19.7134 8.12811L19.4668 8.69379C19.2864 9.10792 18.7136 9.10792 18.5331 8.69379L18.2866 8.12811C17.8471 7.11947 17.0555 6.31641 16.0677 5.87708L15.308 5.53922C14.8973 5.35653 14.8973 4.75881 15.308 4.57612L16.0252 4.25714C17.0384 3.80651 17.8442 2.97373 18.2761 1.93083L18.5293 1.31953C18.7058 0.893489 19.2942 0.893489 19.4706 1.31953L19.7238 1.93083C20.1558 2.97373 20.9616 3.80651 21.9748 4.25714L22.6919 4.57612C23.1027 4.75881 23.1027 5.35653 22.6919 5.53922L21.9323 5.87708C20.9445 6.31641 20.1529 7.11947 19.7134 8.12811ZM3.9934 3H13V5H5V19H19V11H21V20.0066C21 20.5552 20.5551 21 20.0066 21H3.9934C3.44476 21 3 20.5551 3 20.0066V3.9934C3 3.44476 3.44495 3 3.9934 3ZM10.6219 8.41459L15.5008 11.6672C15.6846 11.7897 15.7343 12.0381 15.6117 12.2219C15.5824 12.2658 15.5447 12.3035 15.5008 12.3328L10.6219 15.5854C10.4381 15.708 10.1897 15.6583 10.0672 15.4745C10.0234 15.4088 10 15.3316 10 15.2526V8.74741C10 8.52649 10.1791 8.34741 10.4 8.34741C10.479 8.34741 10.5562 8.37078 10.6219 8.41459Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-off-fill.svg b/client/packages/lowcoder-design/src/icons/remix/video-off-fill.svg new file mode 100644 index 0000000000..93514eda3c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-off-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 18.4142L21.1925 22.6067L22.6067 21.1925L2.80769 1.39349L1.39348 2.80771L2.58579 4.00001H2C1.44772 4.00001 1 4.44773 1 5.00001V19C1 19.5523 1.44772 20 2 20H16C16.5523 20 17 19.5523 17 19V18.4142ZM16 4.00001H8.21402L22.7083 18.4943C22.8805 18.4153 23 18.2415 23 18.0397V5.96034C23 5.85776 22.9684 5.75765 22.9096 5.67361C22.7513 5.44739 22.4395 5.39237 22.2133 5.55073L17 9.20001V5.00001C17 4.44773 16.5523 4.00001 16 4.00001Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-off-line.svg b/client/packages/lowcoder-design/src/icons/remix/video-off-line.svg new file mode 100644 index 0000000000..36c718741d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-off-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 18.4142L21.1925 22.6067L22.6067 21.1925L2.80769 1.39349L1.39348 2.80771L2.58579 4.00001H2C1.44772 4.00001 1 4.44773 1 5.00001V19C1 19.5523 1.44772 20 2 20H16C16.5523 20 17 19.5523 17 19V18.4142ZM15 16.4142V18H3V6.00001H4.58579L15 16.4142ZM23 18.0397C23 18.2517 22.875 18.4176 22.7083 18.4943L21 16.786V8.84133L17 11.6413V12.786L15 10.786V6.00001H10.214L8.21402 4.00001H16C16.5523 4.00001 17 4.44773 17 5.00001V9.20001L22.2133 5.55073C22.5447 5.31876 23 5.55583 23 5.96034V18.0397Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-on-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/video-on-ai-fill.svg new file mode 100644 index 0000000000..4f83309162 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-on-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.7134 9.12811L4.46682 9.69379C4.28637 10.1079 3.71357 10.1079 3.53312 9.69379L3.28656 9.12811C2.84706 8.11947 2.05545 7.31641 1.06767 6.87708L0.308047 6.53922C-0.102682 6.35653 -0.102682 5.75881 0.308047 5.57612L1.0252 5.25714C2.03838 4.80651 2.84417 3.97373 3.27612 2.93083L3.52932 2.31953C3.70578 1.89349 4.29417 1.89349 4.47063 2.31953L4.72382 2.93083C5.15577 3.97373 5.96158 4.80651 6.9748 5.25714L7.69188 5.57612C8.10271 5.75881 8.10271 6.35653 7.69188 6.53922L6.93228 6.87708C5.94451 7.31641 5.15288 8.11947 4.7134 9.12811ZM10 6C10 9.31371 7.31371 12 4 12C2.90714 12 1.88252 11.7078 1 11.1973V19C1 19.5523 1.44772 20 2 20H16C16.5523 20 17 19.5523 17 19V14.8L22.2133 18.4493C22.2973 18.5081 22.3974 18.5397 22.5 18.5397C22.7761 18.5397 23 18.3158 23 18.0397V5.96033C23 5.85774 22.9684 5.75764 22.9096 5.6736C22.7513 5.44737 22.4395 5.39235 22.2133 5.55071L17 9.2V5C17 4.44772 16.5523 4 16 4H9.65859C9.87969 4.62556 10 5.29873 10 6Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-on-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/video-on-ai-line.svg new file mode 100644 index 0000000000..a56067dadc --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-on-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M4.7134 9.12811L4.46682 9.69379C4.28637 10.1079 3.71357 10.1079 3.53312 9.69379L3.28656 9.12811C2.84706 8.11947 2.05545 7.31641 1.06767 6.87708L0.308047 6.53922C-0.102682 6.35653 -0.102682 5.75881 0.308047 5.57612L1.0252 5.25714C2.03838 4.80651 2.84417 3.97373 3.27612 2.93083L3.52932 2.31953C3.70578 1.89349 4.29417 1.89349 4.47063 2.31953L4.72382 2.93083C5.15577 3.97373 5.96158 4.80651 6.9748 5.25714L7.69188 5.57612C8.10271 5.75881 8.10271 6.35653 7.69188 6.53922L6.93228 6.87708C5.94451 7.31641 5.15288 8.11947 4.7134 9.12811ZM1 19V12H3V18H15V6H10V4H16C16.5523 4 17 4.44772 17 5V9.2L22.2133 5.55071C22.4395 5.39235 22.7513 5.44737 22.9096 5.6736C22.9684 5.75764 23 5.85774 23 5.96033V18.0397C23 18.3158 22.7761 18.5397 22.5 18.5397C22.3974 18.5397 22.2973 18.5081 22.2133 18.4493L17 14.8V19C17 19.5523 16.5523 20 16 20H2C1.44772 20 1 19.5523 1 19ZM17 12.3587L21 15.1587V8.84131L17 11.6413V12.3587Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-on-fill.svg b/client/packages/lowcoder-design/src/icons/remix/video-on-fill.svg new file mode 100644 index 0000000000..631f6065e3 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-on-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 9.2L22.2133 5.55071C22.4395 5.39235 22.7513 5.44737 22.9096 5.6736C22.9684 5.75764 23 5.85774 23 5.96033V18.0397C23 18.3158 22.7761 18.5397 22.5 18.5397C22.3974 18.5397 22.2973 18.5081 22.2133 18.4493L17 14.8V19C17 19.5523 16.5523 20 16 20H2C1.44772 20 1 19.5523 1 19V5C1 4.44772 1.44772 4 2 4H16C16.5523 4 17 4.44772 17 5V9.2Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/video-on-line.svg b/client/packages/lowcoder-design/src/icons/remix/video-on-line.svg new file mode 100644 index 0000000000..cec745d019 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/video-on-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M17 9.2L22.2133 5.55071C22.4395 5.39235 22.7513 5.44737 22.9096 5.6736C22.9684 5.75764 23 5.85774 23 5.96033V18.0397C23 18.3158 22.7761 18.5397 22.5 18.5397C22.3974 18.5397 22.2973 18.5081 22.2133 18.4493L17 14.8V19C17 19.5523 16.5523 20 16 20H2C1.44772 20 1 19.5523 1 19V5C1 4.44772 1.44772 4 2 4H16C16.5523 4 17 4.44772 17 5V9.2ZM17 12.3587L21 15.1587V8.84131L17 11.6413V12.3587ZM3 6V18H15V6H3Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/vip-crown-2-line.svg b/client/packages/lowcoder-design/src/icons/remix/vip-crown-2-line.svg index b88ede5c83..2f62c57320 100644 --- a/client/packages/lowcoder-design/src/icons/remix/vip-crown-2-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/vip-crown-2-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3.49709 8.06467L4.78355 18.9996H19.2266L20.513 8.06467L16.5032 10.7379L12.0051 4.44054L7.50694 10.7379L3.49709 8.06467ZM2.80577 5.20009L7.00505 7.99961L11.1913 2.13884C11.5123 1.68943 12.1369 1.58534 12.5863 1.90635C12.6761 1.97049 12.7546 2.04905 12.8188 2.13884L17.0051 7.99961L21.2043 5.20009C21.6639 4.89374 22.2847 5.01791 22.5911 5.47744C22.7228 5.67506 22.7799 5.91311 22.7522 6.14898L21.109 20.1165C21.0497 20.6201 20.6229 20.9996 20.1158 20.9996H3.8943C3.38722 20.9996 2.9604 20.6201 2.90115 20.1165L1.25792 6.14898C1.19339 5.60048 1.58573 5.10352 2.13423 5.03899C2.37011 5.01124 2.60816 5.06835 2.80577 5.20009ZM12.0051 14.9996C10.9005 14.9996 10.0051 14.1042 10.0051 12.9996C10.0051 11.895 10.9005 10.9996 12.0051 10.9996C13.1096 10.9996 14.0051 11.895 14.0051 12.9996C14.0051 14.1042 13.1096 14.9996 12.0051 14.9996Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M3.49709 8.06464L4.78355 18.9996H19.2266L20.513 8.06464L16.5032 10.7379L12.0051 4.44051L7.50694 10.7379L3.49709 8.06464ZM2.80577 5.20006L7.00505 7.99958L11.1913 2.13881C11.5123 1.6894 12.1369 1.58531 12.5863 1.90631C12.6761 1.97045 12.7546 2.04901 12.8188 2.13881L17.0051 7.99958L21.2043 5.20006C21.6639 4.89371 22.2847 5.01788 22.5911 5.47741C22.7228 5.67503 22.7799 5.91308 22.7522 6.14895L21.109 20.1164C21.0497 20.62 20.6229 20.9996 20.1158 20.9996H3.8943C3.38722 20.9996 2.9604 20.62 2.90115 20.1164L1.25792 6.14895C1.19339 5.60045 1.58573 5.10349 2.13423 5.03896C2.37011 5.01121 2.60816 5.06832 2.80577 5.20006ZM12.0051 14.9996C10.9005 14.9996 10.0051 14.1042 10.0051 12.9996C10.0051 11.895 10.9005 10.9996 12.0051 10.9996C13.1096 10.9996 14.0051 11.895 14.0051 12.9996C14.0051 14.1042 13.1096 14.9996 12.0051 14.9996Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/voice-ai-fill.svg b/client/packages/lowcoder-design/src/icons/remix/voice-ai-fill.svg new file mode 100644 index 0000000000..8d4fcac83d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/voice-ai-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 7.12811L20.4668 7.69379C20.2864 8.10792 19.7136 8.10792 19.5331 7.69379L19.2866 7.12811C18.8471 6.11947 18.0555 5.31641 17.0677 4.87708L16.308 4.53922C15.8973 4.35653 15.8973 3.75881 16.308 3.57612L17.0252 3.25714C18.0384 2.80651 18.8442 1.97373 19.2761 0.930828L19.5293 0.319534C19.7058 -0.106511 20.2942 -0.106511 20.4706 0.319534L20.7238 0.930828C21.1558 1.97373 21.9616 2.80651 22.9748 3.25714L23.6919 3.57612C24.1027 3.75881 24.1027 4.35653 23.6919 4.53922L22.9323 4.87708C21.9445 5.31641 21.1529 6.11947 20.7134 7.12811ZM8.5 6H6.5V18H8.5V6ZM4 10H2V14H4V10ZM13 2H11V22H13V2ZM17.5 8H15.5V18H17.5V8ZM22 10H20V14H22V10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/voice-ai-line.svg b/client/packages/lowcoder-design/src/icons/remix/voice-ai-line.svg new file mode 100644 index 0000000000..8d4fcac83d --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/voice-ai-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M20.7134 7.12811L20.4668 7.69379C20.2864 8.10792 19.7136 8.10792 19.5331 7.69379L19.2866 7.12811C18.8471 6.11947 18.0555 5.31641 17.0677 4.87708L16.308 4.53922C15.8973 4.35653 15.8973 3.75881 16.308 3.57612L17.0252 3.25714C18.0384 2.80651 18.8442 1.97373 19.2761 0.930828L19.5293 0.319534C19.7058 -0.106511 20.2942 -0.106511 20.4706 0.319534L20.7238 0.930828C21.1558 1.97373 21.9616 2.80651 22.9748 3.25714L23.6919 3.57612C24.1027 3.75881 24.1027 4.35653 23.6919 4.53922L22.9323 4.87708C21.9445 5.31641 21.1529 6.11947 20.7134 7.12811ZM8.5 6H6.5V18H8.5V6ZM4 10H2V14H4V10ZM13 2H11V22H13V2ZM17.5 8H15.5V18H17.5V8ZM22 10H20V14H22V10Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/volume-down-fill.svg b/client/packages/lowcoder-design/src/icons/remix/volume-down-fill.svg index a75bc551e1..0f5ee10cef 100644 --- a/client/packages/lowcoder-design/src/icons/remix/volume-down-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/volume-down-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.88889 16H5C4.44772 16 4 15.5523 4 15V9.00001C4 8.44772 4.44772 8.00001 5 8.00001H8.88889L14.1834 3.66815C14.3971 3.49329 14.7121 3.52479 14.887 3.73851C14.9601 3.82784 15 3.93971 15 4.05513V19.9449C15 20.221 14.7761 20.4449 14.5 20.4449C14.3846 20.4449 14.2727 20.405 14.1834 20.3319L8.88889 16ZM18.8631 16.5911L17.4411 15.169C18.3892 14.4376 19 13.2901 19 12C19 10.5697 18.2493 9.31469 17.1203 8.6076L18.5589 7.169C20.0396 8.2616 21 10.0187 21 12C21 13.8422 20.1698 15.4904 18.8631 16.5911Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.88889 16.0001H5C4.44772 16.0001 4 15.5524 4 15.0001V9.00007C4 8.44778 4.44772 8.00007 5 8.00007H8.88889L14.1834 3.66821C14.3971 3.49335 14.7121 3.52485 14.887 3.73857C14.9601 3.8279 15 3.93977 15 4.05519V19.9449C15 20.2211 14.7761 20.4449 14.5 20.4449C14.3846 20.4449 14.2727 20.405 14.1834 20.3319L8.88889 16.0001ZM18.8631 16.5911L17.4411 15.1691C18.3892 14.4376 19 13.2902 19 12.0001C19 10.5697 18.2493 9.31476 17.1203 8.60766L18.5589 7.16906C20.0396 8.26166 21 10.0187 21 12.0001C21 13.8422 20.1698 15.4905 18.8631 16.5911Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/volume-down-line.svg b/client/packages/lowcoder-design/src/icons/remix/volume-down-line.svg index 82285d9e02..5c495eaabf 100644 --- a/client/packages/lowcoder-design/src/icons/remix/volume-down-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/volume-down-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13 7.22049L9.60282 10H6V14H9.60282L13 16.7795V7.22049ZM8.88889 16H5C4.44772 16 4 15.5523 4 15V9.00001C4 8.44772 4.44772 8.00001 5 8.00001H8.88889L14.1834 3.66815C14.3971 3.49329 14.7121 3.52479 14.887 3.73851C14.9601 3.82784 15 3.93971 15 4.05513V19.9449C15 20.221 14.7761 20.4449 14.5 20.4449C14.3846 20.4449 14.2727 20.405 14.1834 20.3319L8.88889 16ZM18.8631 16.5911L17.4411 15.169C18.3892 14.4376 19 13.2901 19 12C19 10.5697 18.2493 9.31469 17.1203 8.6076L18.5589 7.169C20.0396 8.2616 21 10.0187 21 12C21 13.8422 20.1698 15.4904 18.8631 16.5911Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13 7.22056L9.60282 10.0001H6V14.0001H9.60282L13 16.7796V7.22056ZM8.88889 16.0001H5C4.44772 16.0001 4 15.5524 4 15.0001V9.00007C4 8.44778 4.44772 8.00007 5 8.00007H8.88889L14.1834 3.66821C14.3971 3.49335 14.7121 3.52485 14.887 3.73857C14.9601 3.8279 15 3.93977 15 4.05519V19.9449C15 20.2211 14.7761 20.4449 14.5 20.4449C14.3846 20.4449 14.2727 20.405 14.1834 20.3319L8.88889 16.0001ZM18.8631 16.5911L17.4411 15.1691C18.3892 14.4376 19 13.2902 19 12.0001C19 10.5697 18.2493 9.31476 17.1203 8.60766L18.5589 7.16906C20.0396 8.26166 21 10.0187 21 12.0001C21 13.8422 20.1698 15.4905 18.8631 16.5911Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/volume-mute-fill.svg b/client/packages/lowcoder-design/src/icons/remix/volume-mute-fill.svg index 4f4219c048..5b53f7f8af 100644 --- a/client/packages/lowcoder-design/src/icons/remix/volume-mute-fill.svg +++ b/client/packages/lowcoder-design/src/icons/remix/volume-mute-fill.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.88889 16H2C1.44772 16 1 15.5523 1 15V9.00001C1 8.44772 1.44772 8.00001 2 8.00001H5.88889L11.1834 3.66815C11.3971 3.49329 11.7121 3.52479 11.887 3.73851C11.9601 3.82784 12 3.93971 12 4.05513V19.9449C12 20.221 11.7761 20.4449 11.5 20.4449C11.3846 20.4449 11.2727 20.405 11.1834 20.3319L5.88889 16ZM20.4142 12L23.9497 15.5355L22.5355 16.9498L19 13.4142L15.4645 16.9498L14.0503 15.5355L17.5858 12L14.0503 8.46447L15.4645 7.05026L19 10.5858L22.5355 7.05026L23.9497 8.46447L20.4142 12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M5.88889 16.0001H2C1.44772 16.0001 1 15.5524 1 15.0001V9.00007C1 8.44778 1.44772 8.00007 2 8.00007H5.88889L11.1834 3.66821C11.3971 3.49335 11.7121 3.52485 11.887 3.73857C11.9601 3.8279 12 3.93977 12 4.05519V19.9449C12 20.2211 11.7761 20.4449 11.5 20.4449C11.3846 20.4449 11.2727 20.405 11.1834 20.3319L5.88889 16.0001ZM20.4142 12.0001L23.9497 15.5356L22.5355 16.9498L19 13.4143L15.4645 16.9498L14.0503 15.5356L17.5858 12.0001L14.0503 8.46454L15.4645 7.05032L19 10.5859L22.5355 7.05032L23.9497 8.46454L20.4142 12.0001Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/volume-mute-line.svg b/client/packages/lowcoder-design/src/icons/remix/volume-mute-line.svg index 0982be3d1c..61718751a9 100644 --- a/client/packages/lowcoder-design/src/icons/remix/volume-mute-line.svg +++ b/client/packages/lowcoder-design/src/icons/remix/volume-mute-line.svg @@ -1 +1 @@ -<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10 7.22049L6.60282 10H3V14H6.60282L10 16.7795V7.22049ZM5.88889 16H2C1.44772 16 1 15.5523 1 15V9.00001C1 8.44772 1.44772 8.00001 2 8.00001H5.88889L11.1834 3.66815C11.3971 3.49329 11.7121 3.52479 11.887 3.73851C11.9601 3.82784 12 3.93971 12 4.05513V19.9449C12 20.221 11.7761 20.4449 11.5 20.4449C11.3846 20.4449 11.2727 20.405 11.1834 20.3319L5.88889 16ZM20.4142 12L23.9497 15.5355L22.5355 16.9498L19 13.4142L15.4645 16.9498L14.0503 15.5355L17.5858 12L14.0503 8.46447L15.4645 7.05026L19 10.5858L22.5355 7.05026L23.9497 8.46447L20.4142 12Z"/></svg> \ No newline at end of file +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M10 7.22056L6.60282 10.0001H3V14.0001H6.60282L10 16.7796V7.22056ZM5.88889 16.0001H2C1.44772 16.0001 1 15.5524 1 15.0001V9.00007C1 8.44778 1.44772 8.00007 2 8.00007H5.88889L11.1834 3.66821C11.3971 3.49335 11.7121 3.52485 11.887 3.73857C11.9601 3.8279 12 3.93977 12 4.05519V19.9449C12 20.2211 11.7761 20.4449 11.5 20.4449C11.3846 20.4449 11.2727 20.405 11.1834 20.3319L5.88889 16.0001ZM20.4142 12.0001L23.9497 15.5356L22.5355 16.9498L19 13.4143L15.4645 16.9498L14.0503 15.5356L17.5858 12.0001L14.0503 8.46454L15.4645 7.05032L19 10.5859L22.5355 7.05032L23.9497 8.46454L20.4142 12.0001Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/webhook-fill.svg b/client/packages/lowcoder-design/src/icons/remix/webhook-fill.svg new file mode 100644 index 0000000000..f095685347 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/webhook-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M13.5011 4.39885C14.7217 5.10357 15.2612 6.53847 14.8826 7.83501L16.8025 8.3956C17.4334 6.23483 16.5385 3.8431 14.5011 2.6668C12.1096 1.28609 9.05169 2.10547 7.67098 4.49693C6.4615 6.59181 6.94024 9.19811 8.68509 10.7404L6.80304 14.0002L6.7998 14.0002C5.69524 14.0002 4.7998 14.8957 4.7998 16.0002C4.7998 17.1048 5.69524 18.0002 6.7998 18.0002C7.90437 18.0002 8.7998 17.1048 8.7998 16.0002C8.7998 15.8408 8.78115 15.6857 8.7459 15.537C8.66351 15.1896 8.64362 14.8123 8.82215 14.503L11.3671 10.095L10.5011 9.59501C9.06623 8.76658 8.5746 6.93181 9.40303 5.49693C10.2315 4.06205 12.0662 3.57043 13.5011 4.39885ZM15.0313 18.0802C15.9648 19.0563 17.4772 19.3066 18.6978 18.6018C20.1327 17.7734 20.6243 15.9387 19.7959 14.5038C18.9675 13.0689 17.1327 12.5773 15.6978 13.4057L14.8318 13.9057L12.2864 9.49688C12.1079 9.18768 11.7711 9.01623 11.4291 8.91386C11.2827 8.87005 11.1391 8.80868 11.0011 8.72897C10.0445 8.17668 9.71673 6.9535 10.269 5.99692C10.8213 5.04033 12.0445 4.71258 13.0011 5.26487C13.9577 5.81715 14.2854 7.04033 13.7331 7.99692L13.7314 7.99981L15.6139 11.2603C17.822 10.5203 20.3185 11.4089 21.528 13.5038C22.9087 15.8952 22.0893 18.9532 19.6978 20.3339C17.6604 21.5102 15.1417 21.0893 13.5859 19.4625L15.0313 18.0802ZM3.7998 16.0005C3.7998 14.5911 4.77271 13.4064 6.08484 13.086L5.61041 11.1431C3.42366 11.677 1.7998 13.6479 1.7998 16.0005C1.7998 18.7619 4.03838 21.0005 6.7998 21.0005C9.21876 21.0005 11.2365 19.2827 11.6998 17.0005H15.4641L15.4658 17.0036C16.0181 17.9602 17.2413 18.2879 18.1979 17.7356C19.1545 17.1833 19.4822 15.9602 18.9299 15.0036C18.3776 14.047 17.1545 13.7192 16.1979 14.2715C16.0598 14.3512 15.9349 14.4449 15.8238 14.5497C15.5642 14.7947 15.2474 15.0005 14.8904 15.0005H9.7998V16.0005C9.7998 17.6574 8.45666 19.0005 6.7998 19.0005C5.14295 19.0005 3.7998 17.6574 3.7998 16.0005Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/webhook-line.svg b/client/packages/lowcoder-design/src/icons/remix/webhook-line.svg new file mode 100644 index 0000000000..925735cab4 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/webhook-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M8.86874 14.1392C8.6556 14.4912 8.55014 14.7778 8.72043 15.2253C9.1905 16.4613 8.52737 17.664 7.28097 17.9905C6.10556 18.2985 4.96035 17.526 4.72713 16.2676C4.52048 15.1537 5.38488 14.0617 6.61294 13.8877C6.67963 13.8781 6.74717 13.874 6.83351 13.8688C6.88044 13.866 6.93293 13.8628 6.99384 13.8582L8.86194 10.7257C7.687 9.55742 6.98767 8.19164 7.14246 6.49936C7.25188 5.30308 7.72226 4.26933 8.58208 3.42201C10.2288 1.79945 12.7411 1.53667 14.68 2.78212C16.5423 3.97841 17.3951 6.30867 16.6681 8.30311L14.9611 7.84C15.1895 6.73115 15.0206 5.73536 14.2727 4.88234C13.7786 4.31914 13.1446 4.02394 12.4236 3.91516C10.9783 3.69681 9.55922 4.6254 9.13816 6.04399C8.66019 7.65406 9.38355 8.96924 11.3603 9.96029C10.5311 11.3541 9.70859 12.7518 8.86874 14.1392ZM13.7838 8.27337C14.3816 9.32798 14.9886 10.3986 15.5902 11.4593C18.631 10.5186 20.9237 12.2018 21.7462 14.004C22.7396 16.1809 22.0605 18.7593 20.1094 20.1023C18.1067 21.481 15.5741 21.2454 13.7997 19.4744L15.1919 18.3094C16.9444 19.4445 18.4772 19.3911 19.6151 18.047C20.5855 16.9003 20.5644 15.1906 19.5659 14.068C18.4136 12.7726 16.8701 12.7331 15.0044 13.9767C14.2305 12.6037 13.443 11.2413 12.6936 9.85845C12.4409 9.39233 12.1618 9.12196 11.5923 9.0233C10.6411 8.85839 10.027 8.04157 9.99016 7.12642C9.95395 6.22138 10.4871 5.4033 11.3205 5.08455C12.146 4.7688 13.1148 5.02367 13.6701 5.72554C14.1239 6.29901 14.2681 6.94443 14.0293 7.65167C13.9843 7.7852 13.9304 7.91584 13.8713 8.05885C13.8431 8.12694 13.8138 8.19801 13.7838 8.27337ZM11.552 16.895H15.2126C15.2636 16.963 15.3113 17.0303 15.3579 17.0959C15.4551 17.233 15.5474 17.3632 15.6551 17.4788C16.4304 18.3077 17.7395 18.3489 18.5682 17.5795C19.4271 16.7821 19.466 15.4426 18.6544 14.6101C17.8602 13.7955 16.5029 13.7177 15.7655 14.5802C15.3176 15.1044 14.8586 15.166 14.2641 15.1567C12.7414 15.1332 11.2177 15.149 9.69524 15.149C9.79406 17.2909 8.98436 18.6255 7.37841 18.9424C5.80582 19.2528 4.3575 18.4504 3.84759 16.9864C3.26842 15.3229 3.98467 13.9925 6.05421 12.9366C5.89847 12.3725 5.74115 11.8016 5.58541 11.236C3.32977 11.7276 1.63749 13.916 1.8122 16.378C1.96652 18.5514 3.71968 20.4815 5.86369 20.8273C7.02819 21.0153 8.12233 20.82 9.13741 20.2442C10.4433 19.5032 11.2011 18.3381 11.552 16.895Z" fill="#231F20"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/weight-fill.svg b/client/packages/lowcoder-design/src/icons/remix/weight-fill.svg new file mode 100644 index 0000000000..e7dbb5ed5c --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/weight-fill.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.0004 6C14.0004 7.10457 13.1049 8 12.0004 8C10.8958 8 10.0004 7.10457 10.0004 6C10.0004 4.89543 10.8958 4 12.0004 4C13.1049 4 14.0004 4.89543 14.0004 6ZM15.4652 8C15.8056 7.41165 16.0004 6.72857 16.0004 6C16.0004 3.79086 14.2095 2 12.0004 2C9.79122 2 8.00036 3.79086 8.00036 6C8.00036 6.72857 8.19515 7.41165 8.53549 8H5.06615C4.57888 8 4.16255 8.3512 4.08045 8.8315L2.2001 19.8315C2.0957 20.4423 2.56618 21 3.18581 21H20.8149C21.4345 21 21.905 20.4423 21.8006 19.8315L19.9203 8.8315C19.8382 8.3512 19.4218 8 18.9346 8H15.4652Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/remix/weight-line.svg b/client/packages/lowcoder-design/src/icons/remix/weight-line.svg new file mode 100644 index 0000000000..e1a5ee24f3 --- /dev/null +++ b/client/packages/lowcoder-design/src/icons/remix/weight-line.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M14.0004 6C14.0004 7.10457 13.1049 8 12.0004 8C10.8958 8 10.0004 7.10457 10.0004 6C10.0004 4.89543 10.8958 4 12.0004 4C13.1049 4 14.0004 4.89543 14.0004 6ZM15.4652 8C15.8056 7.41165 16.0004 6.72857 16.0004 6C16.0004 3.79086 14.2095 2 12.0004 2C9.79122 2 8.00036 3.79086 8.00036 6C8.00036 6.72857 8.19515 7.41165 8.53549 8H5.06615C4.57888 8 4.16255 8.3512 4.08045 8.8315L2.2001 19.8315C2.0957 20.4423 2.56618 21 3.18581 21H20.8149C21.4345 21 21.905 20.4423 21.8006 19.8315L19.9203 8.8315C19.8382 8.3512 19.4218 8 18.9346 8H15.4652ZM12.0004 10H18.091L19.6295 19H4.37125L5.90971 10H12.0004Z"/></svg> \ No newline at end of file diff --git a/client/packages/lowcoder-design/src/icons/v1/icon-application-marketplace.svg b/client/packages/lowcoder-design/src/icons/v1/icon-application-marketplace.svg index 4175130634..d5e51f61fe 100644 --- a/client/packages/lowcoder-design/src/icons/v1/icon-application-marketplace.svg +++ b/client/packages/lowcoder-design/src/icons/v1/icon-application-marketplace.svg @@ -1,16 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="20px" height="20px" viewBox="0 0 23 23" version="1.1" xmlns="http://www.w3.org/2000/svg"> - <defs> - <linearGradient id="icon-application-marketplace_svg__a" x1="50%" y1="1.89576049%" x2="50%" y2="94.4251638%"> - <stop stop-color="#5C6066" offset="0%"/> - <stop stop-color="#333740" offset="100%"/> - </linearGradient> - <linearGradient x1="50%" y1="1.89576049%" x2="50%" y2="94.4251638%"> - <stop stop-color="#6D83F2" offset="0%"/> - <stop stop-color="#4965F2" offset="100%"/> - </linearGradient> - </defs> - <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <path d="M2.7,9.45a4.235,4.235,0,0,0,.3.3V22a1,1,0,0,0,1,1H20a1,1,0,0,0,1-1V9.752a4.235,4.235,0,0,0,.3-.3,4,4,0,0,0,.731-3.456L20.97,1.758A1,1,0,0,0,20,1H4a1,1,0,0,0-.97.758L1.972,5.994A4,4,0,0,0,2.7,9.45ZM13,21H11V16h2Zm6,0H15V15a1,1,0,0,0-1-1H10a1,1,0,0,0-1,1v6H5V10.9A3.989,3.989,0,0,0,8.914,9.61c.026.03.053.059.08.089A4.086,4.086,0,0,0,12.041,11a4.039,4.039,0,0,0,2.965-1.3c.027-.03.054-.059.08-.089A3.989,3.989,0,0,0,19,10.9ZM3.911,6.479,4.781,3H19.219l.87,3.479A2.029,2.029,0,0,1,18.12,9,2.041,2.041,0,0,1,16.1,7.14l-.042-.5a1,1,0,0,0-1.993.166v0a2.006,2.006,0,0,1-.529,1.539A2.059,2.059,0,0,1,11.959,9,2.029,2.029,0,0,1,9.937,6.806v0a1,1,0,0,0-.914-1.079.989.989,0,0,0-1.079.913l-.042.5A2.041,2.041,0,0,1,5.88,9,2.029,2.029,0,0,1,3.911,6.479Z" fill="url(#icon-application-marketplace_svg__a)" fill-rule="nonzero" /> - </g> +<svg fill="currentColor" width="20px" height="20px" viewBox="0 0 23 23" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <path d="M2.7,9.45a4.235,4.235,0,0,0,.3.3V22a1,1,0,0,0,1,1H20a1,1,0,0,0,1-1V9.752a4.235,4.235,0,0,0,.3-.3,4,4,0,0,0,.731-3.456L20.97,1.758A1,1,0,0,0,20,1H4a1,1,0,0,0-.97.758L1.972,5.994A4,4,0,0,0,2.7,9.45ZM13,21H11V16h2Zm6,0H15V15a1,1,0,0,0-1-1H10a1,1,0,0,0-1,1v6H5V10.9A3.989,3.989,0,0,0,8.914,9.61c.026.03.053.059.08.089A4.086,4.086,0,0,0,12.041,11a4.039,4.039,0,0,0,2.965-1.3c.027-.03.054-.059.08-.089A3.989,3.989,0,0,0,19,10.9ZM3.911,6.479,4.781,3H19.219l.87,3.479A2.029,2.029,0,0,1,18.12,9,2.041,2.041,0,0,1,16.1,7.14l-.042-.5a1,1,0,0,0-1.993.166v0a2.006,2.006,0,0,1-.529,1.539A2.059,2.059,0,0,1,11.959,9,2.029,2.029,0,0,1,9.937,6.806v0a1,1,0,0,0-.914-1.079.989.989,0,0,0-1.079.913l-.042.5A2.041,2.041,0,0,1,5.88,9,2.029,2.029,0,0,1,3.911,6.479Z" /> </svg> \ No newline at end of file diff --git a/client/packages/lowcoder-sdk-webpack-bundle/package.json b/client/packages/lowcoder-sdk-webpack-bundle/package.json index 1039326507..b9266b7bd5 100644 --- a/client/packages/lowcoder-sdk-webpack-bundle/package.json +++ b/client/packages/lowcoder-sdk-webpack-bundle/package.json @@ -1,7 +1,7 @@ { "name": "lowcoder-sdk-webpack-bundle", "description": "", - "version": "2.1.2", + "version": "2.7.0", "main": "index.jsx", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", diff --git a/client/packages/lowcoder-sdk/package.json b/client/packages/lowcoder-sdk/package.json index 4c57864a4b..e901e98aac 100644 --- a/client/packages/lowcoder-sdk/package.json +++ b/client/packages/lowcoder-sdk/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder-sdk", - "version": "2.6.6", + "version": "2.7.0", "type": "module", "files": [ "src", diff --git a/client/packages/lowcoder/package.json b/client/packages/lowcoder/package.json index 9338fa428d..f25be12c32 100644 --- a/client/packages/lowcoder/package.json +++ b/client/packages/lowcoder/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder", - "version": "2.6.5", + "version": "2.7.0", "private": true, "type": "module", "main": "src/index.sdk.ts", @@ -24,21 +24,21 @@ "@fortawesome/free-regular-svg-icons": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^6.5.1", "@fortawesome/react-fontawesome": "latest", + "@jsonforms/core": "^3.5.1", + "@lottiefiles/dotlottie-react": "^0.13.0", "@manaflair/redux-batch": "^1.0.0", - "@rjsf/antd": "^5.21.2", - "@rjsf/core": "^5.21.2", - "@rjsf/utils": "^5.21.2", - "@rjsf/validator-ajv8": "^5.21.2", + "@rjsf/antd": "^5.24.9", + "@rjsf/core": "^5.24.9", + "@rjsf/utils": "^5.24.9", + "@rjsf/validator-ajv8": "^5.24.9", "@types/lodash": "^4.14.194", "@types/node": "^16.7.13", - "@types/react": "^18.2.45", - "@types/react-dom": "^18.2.18", "@types/react-signature-canvas": "^1.0.2", "@types/react-test-renderer": "^18.0.0", "@types/react-virtualized": "^9.21.21", - "alasql": "^4.6.2", + "alasql": "^4.6.6", "animate.css": "^4.1.1", - "antd": "^5.23.4", + "antd": "^5.25.2", "axios": "^1.7.7", "buffer": "^6.0.3", "clsx": "^2.0.0", @@ -46,7 +46,9 @@ "coolshapes-react": "lowcoder-org/coolshapes-react", "copy-to-clipboard": "^3.3.3", "core-js": "^3.25.2", + "dayjs": "^1.11.13", "echarts": "^5.4.3", + "echarts-for-react": "^3.0.2", "echarts-wordcloud": "^2.1.0", "eslint4b-prebuilt-2": "^7.32.0", "file-saver": "^2.0.5", @@ -62,30 +64,30 @@ "moment": "^2.29.4", "numbro": "^2.3.6", "papaparse": "^5.3.2", + "pigeon-maps": "^0.22.1", "qrcode.react": "^3.1.0", "rc-trigger": "^5.3.1", - "react": "^18.2.0", + "react": "18.3.0", "react-best-gradient-color-picker": "^3.0.10", "react-colorful": "^5.5.1", "react-device-mockup": "^1.0.0", "react-documents": "^1.2.1", - "react-dom": "^18.2.0", - "react-draggable": "^4.4.4", + "react-dom": "18.3.0", + "react-draggable": "^4.4.6", "react-error-boundary": "^4.0.13", "react-grid-layout": "^1.3.0", "react-helmet": "^6.1.0", - "react-joyride": "^2.4.0", + "react-joyride": "next", "react-json-view": "^1.21.3", "react-markdown": "^9.0.1", "react-qr-barcode-scanner": "^1.0.6", - "react-quill": "^2.0.0", + "react-quill-new": "^3.4.6", "react-redux": "^7.2.6", "react-resizable": "^3.0.4", - "react-resize-detector": "^7.0.0", + "react-resize-detector": "^12.0.2", "react-router": "^5.2.1", "react-router-dom": "^5.3.0", "react-signature-canvas": "^1.0.6", - "react-sortable-hoc": "^2.0.0", "react-test-renderer": "^18.1.0", "react-use": "^17.3.2", "react-webcam": "^7.2.0", @@ -101,6 +103,7 @@ "sql-formatter": "^8.2.0", "styled-components": "^6.1.8", "stylis": "^4.1.1", + "supercluster": "^8.0.1", "tern": "^0.24.3", "typescript-collections": "^1.3.3", "ua-parser-js": "^1.0.33", @@ -119,7 +122,10 @@ "@types/core-js": "^2.5.5", "@types/intl": "^1.2.1", "@types/papaparse": "^5.3.5", + "@types/react": "18", + "@types/react-dom": "18", "@types/regenerator-runtime": "^0.13.1", + "@types/supercluster": "^7.1.3", "@types/uuid": "^8.3.4", "@vitejs/plugin-react": "^2.2.0", "dotenv": "^16.0.3", diff --git a/client/packages/lowcoder/src/api/apiUtils.ts b/client/packages/lowcoder/src/api/apiUtils.ts index 8396e35014..3b8e4e4344 100644 --- a/client/packages/lowcoder/src/api/apiUtils.ts +++ b/client/packages/lowcoder/src/api/apiUtils.ts @@ -122,7 +122,14 @@ export const apiFailureResponseInterceptor = (error: any) => { if (!notAuthRequiredPath(error.config?.url)) { if (error.response.status === API_STATUS_CODES.REQUEST_NOT_AUTHORISED) { // get x-org-id from failed request - const organizationId = error.response.headers['x-org-id'] || undefined; + let organizationId; + if (error.response.headers['x-org-id']) { + organizationId = error.response.headers['x-org-id']; + } + if (localStorage.getItem('lowcoder_login_orgId')) { + organizationId = localStorage.getItem('lowcoder_login_orgId'); + localStorage.removeItem('lowcoder_login_orgId'); + } // Redirect to login and set a redirect url. StoreRegistry.getStore().dispatch( logoutAction({ diff --git a/client/packages/lowcoder/src/api/enterpriseApi.ts b/client/packages/lowcoder/src/api/enterpriseApi.ts new file mode 100644 index 0000000000..6886090424 --- /dev/null +++ b/client/packages/lowcoder/src/api/enterpriseApi.ts @@ -0,0 +1,122 @@ +import axios from 'axios'; + +export interface FetchBrandingSettingPayload { + orgId?: string; + fallbackToGlobal?: boolean; +} +export interface BrandingSettings { + logo?: string | null; + squareLogo?: string | null; + mainBrandingColor?: string; + appHeaderColor?: string; + adminSidebarColor?: string; + adminSidebarFontColor?: string; + adminSidebarActiveBgColor?: string; + adminSidebarActiveFontColor?: string; + editorSidebarColor?: string; + editorSidebarFontColor?: string; + editorSidebarActiveBgColor?: string; + editorSidebarActiveFontColor?: string; + font?: string; + errorPageText?: string; + errorPageImage?: string | null; + signUpPageText?: string; + signUpPageImage?: string | null; + loggedOutPageText?: string; + loggedOutPageImage?: string | null; + standardDescription?: string; + standardTitle?: string; + showDocumentation?: boolean; + documentationLink?: string | null; + submitIssue?: boolean; + whatsNew?: boolean; + whatsNewLink?: string | null; +} +export interface BrandingConfig { + config_name?: string, + config_description?: string, + config_icon?: string, + config_set?: BrandingSettings, + orgId?: string, + user_id?: string, + id?: string, +} + +export interface BrandingSettingResponse extends BrandingConfig {}; + +export interface EnterpriseLicenseResponse { + eeActive: boolean; + remainingAPICalls: number; + eeLicenses: Array<{ + uuid: string; + issuedTo: string; + apiCallsLimit: number; + }>; +} + +// Existing functions +export const getEnterpriseLicense = async () => { + const response = await axios.get('/api/plugins/enterprise/license'); + return response.data; +}; + +export const getAuditLogs = async (params = {}) => { + const query = new URLSearchParams(params).toString(); + const response = await axios.get(`/api/plugins/enterprise/audit-logs${query ? `?${query}` : ''}`); + return response.data; +}; + +export const getAuditLogStatistics = async (params = {}) => { + const query = new URLSearchParams(params).toString(); + const response = await axios.get(`/api/plugins/enterprise/audit-logs/statistics?groupByParam=eventTypeId${query ? `&${query}` : ''}`); + return response.data; +}; + +export const getMeta = async (formData = {}) => { + const response = await axios.post(`/api/meta/`, formData); + return response.data; +} + +export const getEnvironmentsByIds = async (formData: string[] = []) => { + const response = await axios.post(`/api/plugins/enterprise/environments/byIds`, formData); + return response.data; +} + +export const getAppUsageLogs = async (params = {}) => { + const query = new URLSearchParams(params).toString(); + const response = await axios.get(`/api/plugins/enterprise/app-usage-logs${query ? `?${query}` : ''}`); + return response.data; +}; + +export const getAppUsageStatistics = async (groupByParam : string) => { + const response = await axios.get(`/api/plugins/enterprise/app-usage-logs/statistics?groupByParam=${groupByParam}`); + return response.data; +}; + + +export const getBranding = async (orgId: string = '') => { + const response = await axios.get('/api/plugins/enterprise/branding?orgId='+orgId); + const data = response.data; + if (Boolean(data.error)) { + return {}; + } + return { + ...data, + config_set: data?.config_set ? JSON.parse(data.config_set) : {}, + }; +}; + +export const createBranding = async (brandingData : any) => { + let response; + if (brandingData.id) { + response = await axios.put(`/api/plugins/enterprise/branding?brandId=${brandingData.id}`, brandingData); + } else { + response = await axios.post('/api/plugins/enterprise/branding', brandingData); + } + return response.data; +}; + +export const updateBranding = async (brandingData : any) => { + const response = await axios.put('/api/plugins/enterprise/branding', brandingData); + return response.data; +}; diff --git a/client/packages/lowcoder/src/api/iconFlowApi.ts b/client/packages/lowcoder/src/api/iconFlowApi.ts new file mode 100644 index 0000000000..2c774404c7 --- /dev/null +++ b/client/packages/lowcoder/src/api/iconFlowApi.ts @@ -0,0 +1,163 @@ +import Api from "api/api"; +import axios, { AxiosInstance, AxiosPromise, AxiosRequestConfig } from "axios"; +import { calculateFlowCode } from "./apiUtils"; + +export interface SearchParams { + query: string; + asset: string; + per_page: number; + page: number; + sort: string; + formats?: string; + price?: string; +} + +export type ResponseType = { + response: any; +}; + +const lcHeaders = { + "Lowcoder-Token": calculateFlowCode(), + "Content-Type": "application/json" +}; + +let axiosIns: AxiosInstance | null = null; + +const getAxiosInstance = (clientSecret?: string) => { + if (axiosIns && !clientSecret) { + return axiosIns; + } + + const headers: Record<string, string> = { + "Content-Type": "application/json", + }; + + const apiRequestConfig: AxiosRequestConfig = { + baseURL: "https://api-service.lowcoder.cloud/api/flow", + headers, + }; + + axiosIns = axios.create(apiRequestConfig); + return axiosIns; +} + +class IconFlowApi extends Api { + + static async secureRequest(body: any, timeout: number = 6000): Promise<any> { + let response; + const axiosInstance = getAxiosInstance(); + + // Create a cancel token and set timeout for cancellation + const source = axios.CancelToken.source(); + const timeoutId = setTimeout(() => { + source.cancel("Request timed out."); + }, timeout); + + // Request configuration with cancel token + const requestConfig: AxiosRequestConfig = { + method: "POST", + withCredentials: true, + data: body, + cancelToken: source.token, // Add cancel token + }; + + try { + response = await axiosInstance.request(requestConfig); + } catch (error) { + if (axios.isCancel(error)) { + // Retry once after timeout cancellation + try { + // Reset the cancel token and retry + const retrySource = axios.CancelToken.source(); + const retryTimeoutId = setTimeout(() => { + retrySource.cancel("Retry request timed out."); + }, 20000); + + response = await axiosInstance.request({ + ...requestConfig, + cancelToken: retrySource.token, + }); + + clearTimeout(retryTimeoutId); + } catch (retryError) { + console.warn("Error at Secure Flow Request. Retry failed:", retryError); + throw retryError; + } + } else { + console.warn("Error at Secure Flow Request:", error); + throw error; + } + } finally { + clearTimeout(timeoutId); // Clear the initial timeout + } + + return response; + } + +} + +export const searchAssets = async (searchParameters : SearchParams) => { + const apiBody = { + path: "webhook/scout/search-asset", + data: searchParameters, + method: "post", + headers: lcHeaders + }; + try { + const result = await IconFlowApi.secureRequest(apiBody); + return result?.data?.response?.items?.total > 0 ? result.data.response.items as any : null; + } catch (error) { + console.error("Error searching Design Assets:", error); + throw error; + } +}; + +export const getAssetLinks = async (uuid: string, params: Record<string, string>) => { + const apiBody = { + path: "webhook/scout/get-asset-links", + data: {"uuid" : uuid, "params" : params}, + method: "post", + headers: lcHeaders + }; + try { + const result = await IconFlowApi.secureRequest(apiBody); + + return result?.data?.response?.download?.url.length > 0 ? result.data.response.download as any : null; + } catch (error) { + console.error("Error searching Design Assets:", error); + throw error; + } +}; + + +/* + +static async search(params: SearchParams): Promise<any> { + let response; + try { + response = await getAxiosInstance().request({ + url: '/v3/search', + method: "GET", + withCredentials: false, + params: { + ...params, + }, + }); + } catch (error) { + console.error(error); + } + return response?.data.response.items; + } + + static async download(uuid: string, params: Record<string, string>): Promise<any> { + const response = await getAxiosInstance(clientSecret).request({ + url: `/v3/items/${uuid}/api-download?format=${params.format}`, + method: "POST", + withCredentials: false, + }); + return response?.data.response.download; + } + +*/ + +export default IconFlowApi; \ No newline at end of file diff --git a/client/packages/lowcoder/src/api/iconscoutApi.ts b/client/packages/lowcoder/src/api/iconscoutApi.ts new file mode 100644 index 0000000000..0ad5bf2569 --- /dev/null +++ b/client/packages/lowcoder/src/api/iconscoutApi.ts @@ -0,0 +1,15 @@ +import Api from "api/api"; +import axios from "axios"; + +export type ResponseType = { + response: any; +}; + +class IconScoutApi extends Api { + static async downloadAsset(url: string): Promise<any> { + const response = await axios.get(url, {responseType: 'blob'}) + return response?.data; + } +} + +export default IconScoutApi; \ No newline at end of file diff --git a/client/packages/lowcoder/src/api/inviteApi.ts b/client/packages/lowcoder/src/api/inviteApi.ts index d161502864..ffdadd45d5 100644 --- a/client/packages/lowcoder/src/api/inviteApi.ts +++ b/client/packages/lowcoder/src/api/inviteApi.ts @@ -20,6 +20,7 @@ export type InviteInfo = { class InviteApi extends Api { static getInviteURL = "/invitation"; static acceptInviteURL = (invitationId: string) => `/invitation/${invitationId}/invite`; + static sendInvitationURL = `${this.getInviteURL}/email/invite`; // generate invitation static getInvite(request: GetInviteRequest): AxiosPromise<GenericApiResponse<InviteInfo>> { @@ -36,6 +37,11 @@ class InviteApi extends Api { // the same api as getInviteInfo, method is by post return Api.get(InviteApi.acceptInviteURL(request.invitationId)); } + + // send invitations + static sendInvitations(request: {emails: string[], orgId: string}): AxiosPromise<GenericApiResponse<any>> { + return Api.post(InviteApi.sendInvitationURL, request); + } } export default InviteApi; diff --git a/client/packages/lowcoder/src/api/materialApi.ts b/client/packages/lowcoder/src/api/materialApi.ts index 01700b1acf..51562d8e5c 100644 --- a/client/packages/lowcoder/src/api/materialApi.ts +++ b/client/packages/lowcoder/src/api/materialApi.ts @@ -10,6 +10,7 @@ interface UploadResponse { export enum MaterialUploadTypeEnum { LOGO = "LOGO", FAVICON = "FAVICON", + COMMON = "COMMON", } class MaterialApi extends Api { diff --git a/client/packages/lowcoder/src/api/newsApi.ts b/client/packages/lowcoder/src/api/newsApi.ts new file mode 100644 index 0000000000..9da9202609 --- /dev/null +++ b/client/packages/lowcoder/src/api/newsApi.ts @@ -0,0 +1,142 @@ +import Api from "api/api"; +import axios, { AxiosInstance, AxiosRequestConfig, CancelToken } from "axios"; +import { calculateFlowCode } from "./apiUtils"; + +export type ResponseType = { + response: any; +}; + +// Axios Configuration +const lcHeaders = { + "Lowcoder-Token": calculateFlowCode(), + "Content-Type": "application/json" +}; + +let axiosIns: AxiosInstance | null = null; + +const getAxiosInstance = (clientSecret?: string) => { + if (axiosIns && !clientSecret) { + return axiosIns; + } + + const headers: Record<string, string> = { + "Content-Type": "application/json", + }; + + const apiRequestConfig: AxiosRequestConfig = { + baseURL: "https://api-service.lowcoder.cloud/api/flow", + headers, + }; + + axiosIns = axios.create(apiRequestConfig); + return axiosIns; +}; + +class NewsApi extends Api { + + static async secureRequest(body: any, timeout: number = 6000): Promise<any> { + let response; + const axiosInstance = getAxiosInstance(); + + // Create a cancel token and set timeout for cancellation + const source = axios.CancelToken.source(); + const timeoutId = setTimeout(() => { + source.cancel("Request timed out."); + }, timeout); + + // Request configuration with cancel token + const requestConfig: AxiosRequestConfig = { + method: "POST", + withCredentials: true, + data: body, + cancelToken: source.token, // Add cancel token + }; + + try { + response = await axiosInstance.request(requestConfig); + } catch (error) { + if (axios.isCancel(error)) { + // Retry once after timeout cancellation + try { + // Reset the cancel token and retry + const retrySource = axios.CancelToken.source(); + const retryTimeoutId = setTimeout(() => { + retrySource.cancel("Retry request timed out."); + }, 10000); + + response = await axiosInstance.request({ + ...requestConfig, + cancelToken: retrySource.token, + }); + + clearTimeout(retryTimeoutId); + } catch (retryError) { + console.warn("Error at Secure Flow Request. Retry failed:", retryError); + throw retryError; + } + } else { + console.warn("Error at Secure Flow Request:", error); + throw error; + } + } finally { + clearTimeout(timeoutId); // Clear the initial timeout + } + + return response; + } +} + +// API Functions + +// secure/get-youtube-videos +// secure/get-github-releases + +export const getReleases = async () => { + const apiBody = { + path: "webhook/secure/get-github-releases", + data: {}, + method: "post", + headers: lcHeaders + }; + try { + const result = await NewsApi.secureRequest(apiBody); + return result?.data[0]?.github?.length > 0 ? result.data[0].github as any[] : []; + } catch (error) { + console.error("Error getting news:", error); + throw error; + } +}; + +export const getYoutubeVideos = async () => { + const apiBody = { + path: "webhook/secure/get-youtube-videos", + data: {}, + method: "post", + headers: lcHeaders + }; + try { + const result = await NewsApi.secureRequest(apiBody); + return result?.data[0]?.youtube?.length > 0 ? result.data[0].youtube as any[] : []; + } catch (error) { + console.error("Error getting news:", error); + throw error; + } +}; + +export const getHubspotContent = async () => { + const apiBody = { + path: "webhook/secure/get-hubspot-content", + data: {}, + method: "post", + headers: lcHeaders + }; + try { + const result = await NewsApi.secureRequest(apiBody); + return result?.data[0]?.hubspot?.length > 0 ? result.data[0].hubspot as any[] : []; + } catch (error) { + console.error("Error getting news:", error); + throw error; + } +}; + +export default NewsApi; diff --git a/client/packages/lowcoder/src/api/subscriptionApi.ts b/client/packages/lowcoder/src/api/subscriptionApi.ts index 6bfcdb2599..db4599dc4b 100644 --- a/client/packages/lowcoder/src/api/subscriptionApi.ts +++ b/client/packages/lowcoder/src/api/subscriptionApi.ts @@ -1,11 +1,6 @@ import Api from "api/api"; import axios, { AxiosInstance, AxiosRequestConfig, CancelToken } from "axios"; -import { useDispatch, useSelector } from "react-redux"; -import { useEffect, useState} from "react"; import { calculateFlowCode } from "./apiUtils"; -import { fetchGroupsAction, fetchOrgUsersAction } from "redux/reduxActions/orgActions"; -import { getOrgUsers } from "redux/selectors/orgSelectors"; -import { AppState } from "@lowcoder-ee/redux/reducers"; import type { LowcoderNewCustomer, LowcoderSearchCustomer, @@ -145,7 +140,7 @@ export const searchCustomersSubscriptions = async (Customer: LowcoderSearchCusto } // Filter out entries with `"success": "false"` - const validEntries = result.data.filter((entry: any) => entry.success !== "false"); + const validEntries = result.data?.filter((entry: any) => entry.success !== "false"); // Flatten the data arrays and filter out duplicates by `id` const uniqueSubscriptions = Object.values( diff --git a/client/packages/lowcoder/src/app.tsx b/client/packages/lowcoder/src/app.tsx index 05dbeaab25..1fb49720d4 100644 --- a/client/packages/lowcoder/src/app.tsx +++ b/client/packages/lowcoder/src/app.tsx @@ -31,13 +31,13 @@ import { ADMIN_AUTH_URL, PUBLIC_APP_EDITOR_URL, } from "constants/routesURL"; -import React from "react"; +import React, { useEffect, useMemo } from "react"; import { createRoot } from "react-dom/client"; import { Helmet } from "react-helmet"; -import { connect, Provider } from "react-redux"; -import { Redirect, Router, Switch } from "react-router-dom"; +import { connect, Provider, useDispatch, useSelector } from "react-redux"; +import { Redirect, Route, Router, Switch } from "react-router-dom"; import type { AppState } from "redux/reducers"; -import { fetchConfigAction } from "redux/reduxActions/configActions"; +import { fetchConfigAction, fetchDeploymentIdAction } from "redux/reduxActions/configActions"; import { fetchUserAction } from "redux/reduxActions/userActions"; import { reduxStore } from "redux/store/store"; import { developEnv } from "util/envUtils"; @@ -50,16 +50,21 @@ import { loadComps } from "comps"; import { initApp } from "util/commonUtils"; import { favicon } from "assets/images"; import { hasQueryParam } from "util/urlUtils"; -import { isFetchUserFinished } from "redux/selectors/usersSelectors"; // getCurrentUser, +import { getUser, isFetchUserFinished } from "redux/selectors/usersSelectors"; // getCurrentUser, import { getIsCommonSettingFetched } from "redux/selectors/commonSettingSelectors"; import { SystemWarning } from "./components/SystemWarning"; -import { getBrandingConfig } from "./redux/selectors/configSelectors"; +import { getBrandingConfig, getDeploymentId } from "./redux/selectors/configSelectors"; import { buildMaterialPreviewURL } from "./util/materialUtils"; import GlobalInstances from 'components/GlobalInstances'; // import posthog from 'posthog-js' import { fetchHomeData, fetchServerSettingsAction } from "./redux/reduxActions/applicationActions"; import { getNpmPackageMeta } from "./comps/utils/remote"; import { packageMetaReadyAction, setLowcoderCompsLoading } from "./redux/reduxActions/npmPluginActions"; +import { fetchBrandingSetting } from "./redux/reduxActions/enterpriseActions"; +import { EnterpriseProvider } from "./util/context/EnterpriseContext"; +import { SimpleSubscriptionContextProvider } from "./util/context/SimpleSubscriptionContext"; +import { getBrandingSetting } from "./redux/selectors/enterpriseSelectors"; +import { fetchSubscriptionsAction } from "./redux/reduxActions/subscriptionActions"; const LazyUserAuthComp = React.lazy(() => import("pages/userAuth")); const LazyInviteLanding = React.lazy(() => import("pages/common/inviteLanding")); @@ -72,17 +77,55 @@ const LazyApplicationHome = React.lazy(() => import("pages/ApplicationV2")); const LazyDebugComp = React.lazy(() => import("./debug")); const LazyDebugNewComp = React.lazy(() => import("./debugNew")); -const Wrapper = (props: { children: React.ReactNode, language: string }) => ( - <ConfigProvider - theme={{ hashed: false }} - locale={getAntdLocale(props.language)} - > - <App> - <GlobalInstances /> - {props.children} - </App> - </ConfigProvider> -); +const Wrapper = React.memo((props: { + children: React.ReactNode, + language: string, + fontFamily?: string +}) => { + const deploymentId = useSelector(getDeploymentId); + const user = useSelector(getUser); + const dispatch = useDispatch(); + + useEffect(() => { + if (user.currentOrgId) { + dispatch(fetchDeploymentIdAction()); + } + }, [user.currentOrgId]); + + useEffect(() => { + if(Boolean(deploymentId)) { + dispatch(fetchSubscriptionsAction()) + } + }, [deploymentId]); + + const theme = useMemo(() => { + return { + hashed: false, + token: { + fontFamily: `${ + props.fontFamily + ? props.fontFamily.split('+').join(' ') + : `-apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, "Segoe UI", "PingFang SC", + "Microsoft Yahei", "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol", "Noto Color Emoji"` + }, sans-serif`, + }, + } + }, [props.fontFamily]); + + return ( + <ConfigProvider + theme={theme} + wave={{ disabled: true }} + locale={getAntdLocale(props.language)} + > + <App> + <GlobalInstances /> + {props.children} + </App> + </ConfigProvider> + ); +}); type AppIndexProps = { isFetchUserFinished: boolean; @@ -94,13 +137,16 @@ type AppIndexProps = { defaultHomePage: string | null | undefined; fetchHomeDataFinished: boolean; fetchConfig: (orgId?: string) => void; + fetchBrandingSetting: (orgId?: string) => void; fetchHomeData: (currentUserAnonymous?: boolean | undefined) => void; fetchLowcoderCompVersions: () => void; getCurrentUser: () => void; fetchServerSettings: () => void; favicon: string; brandName: string; + brandDescription: string; uiLanguage: string; + brandingFontFamily?: string; }; class AppIndex extends React.Component<AppIndexProps, any> { @@ -121,6 +167,7 @@ class AppIndex extends React.Component<AppIndexProps, any> { if (!this.props.currentUserAnonymous) { this.props.fetchHomeData(this.props.currentUserAnonymous); this.props.fetchLowcoderCompVersions(); + this.props.fetchBrandingSetting(this.props.currentOrgId); } } } @@ -150,11 +197,11 @@ class AppIndex extends React.Component<AppIndexProps, any> { localStorage.setItem('lowcoder_uiLanguage', this.props.uiLanguage); return ( - <Wrapper language={this.props.uiLanguage}> + <Wrapper language={this.props.uiLanguage} fontFamily={this.props.brandingFontFamily}> <Helmet> {<title>{this.props.brandName}</title>} {<link rel="icon" href={this.props.favicon} />} - <meta name="description" content={trans('productDesc')} /> + <meta name="description" content={this.props.brandDescription} /> <meta name="keywords" content="Lowcoder, Applications, App Builder, Internal Applications, Websites, Dashboards, Data Visualization, Customer Applications, CRM, ERP, eCommerce, VideoMeeting, Rapid Development" @@ -170,7 +217,7 @@ class AppIndex extends React.Component<AppIndexProps, any> { <meta key="og:description" property="og:description" - content={trans('productDesc')} + content={this.props.brandDescription} /> <meta key="og:image" @@ -193,7 +240,7 @@ class AppIndex extends React.Component<AppIndexProps, any> { <meta key="twitter:description" name="twitter:description" - content={trans('productDesc')} + content={this.props.brandDescription} /> <meta key="twitter:image" @@ -266,7 +313,7 @@ class AppIndex extends React.Component<AppIndexProps, any> { <meta key="iframely:description" property="iframely:description" - content={trans('productDesc')} + content={this.props.brandDescription} />, <link key="iframely" @@ -275,7 +322,8 @@ class AppIndex extends React.Component<AppIndexProps, any> { href={window.location.href} media="(aspect-ratio: 1280/720)" />, - + ]} + {((isLowCoderDomain || isLocalhost) && !Boolean(this.props.brandingFontFamily)) && [ <link key="preconnect-googleapis" rel="preconnect" @@ -293,6 +341,24 @@ class AppIndex extends React.Component<AppIndexProps, any> { rel="stylesheet" /> ]} + {Boolean(this.props.brandingFontFamily) && [ + <link + key="preconnect-googleapis" + rel="preconnect" + href="https://fonts.googleapis.com" + />, + <link + key="preconnect-gstatic" + rel="preconnect" + href="https://fonts.gstatic.com" + crossOrigin="anonymous" + />, + <link + key={this.props.brandingFontFamily} + href={`https://fonts.googleapis.com/css2?family=${this.props.brandingFontFamily}&display=swap`} + rel="stylesheet" + /> + ]} </Helmet> <SystemWarning /> <Router history={history}> @@ -310,33 +376,60 @@ class AppIndex extends React.Component<AppIndexProps, any> { component={LazyPublicAppEditor} /> - <LazyRoute - fallback="layout" - path={APP_EDITOR_URL} - component={LazyAppEditor} - /> - <LazyRoute - fallback="layout" - path={[ - USER_PROFILE_URL, - NEWS_URL, - ORG_HOME_URL, - ALL_APPLICATIONS_URL, - DATASOURCE_CREATE_URL, - DATASOURCE_EDIT_URL, - DATASOURCE_URL, - SUPPORT_URL, - QUERY_LIBRARY_URL, - FOLDERS_URL, - FOLDER_URL, - TRASH_URL, - SETTING_URL, - MARKETPLACE_URL, - ADMIN_APP_URL - ]} - // component={ApplicationListPage} - component={LazyApplicationHome} - /> + <Route + path={ + [ + APP_EDITOR_URL, + USER_PROFILE_URL, + NEWS_URL, + ORG_HOME_URL, + ALL_APPLICATIONS_URL, + DATASOURCE_CREATE_URL, + DATASOURCE_EDIT_URL, + DATASOURCE_URL, + SUPPORT_URL, + QUERY_LIBRARY_URL, + FOLDERS_URL, + FOLDER_URL, + TRASH_URL, + SETTING_URL, + MARKETPLACE_URL, + ADMIN_APP_URL + ] + } + > + <SimpleSubscriptionContextProvider> + <Switch> + <LazyRoute + fallback="layout" + path={APP_EDITOR_URL} + component={LazyAppEditor} + /> + <LazyRoute + fallback="layout" + path={[ + USER_PROFILE_URL, + NEWS_URL, + ORG_HOME_URL, + ALL_APPLICATIONS_URL, + DATASOURCE_CREATE_URL, + DATASOURCE_EDIT_URL, + DATASOURCE_URL, + SUPPORT_URL, + QUERY_LIBRARY_URL, + FOLDERS_URL, + FOLDER_URL, + TRASH_URL, + SETTING_URL, + MARKETPLACE_URL, + ADMIN_APP_URL + ]} + // component={ApplicationListPage} + component={LazyApplicationHome} + /> + </Switch> + </SimpleSubscriptionContextProvider> + </Route> <LazyRoute exact path={ADMIN_AUTH_URL} component={LazyUserAuthComp} /> <LazyRoute path={USER_AUTH_URL} component={LazyUserAuthComp} /> <LazyRoute @@ -414,8 +507,10 @@ const mapStateToProps = (state: AppState) => ({ favicon: getBrandingConfig(state)?.favicon ? buildMaterialPreviewURL(getBrandingConfig(state)?.favicon!) : favicon, - brandName: getBrandingConfig(state)?.brandName ?? trans("productName"), + brandName: getBrandingSetting(state)?.config_set?.standardTitle ?? trans("productName"), + brandDescription: getBrandingSetting(state)?.config_set?.standardDescription ?? trans('productDesc'), uiLanguage: state.ui.users.user.uiLanguage, + brandingFontFamily: getBrandingSetting(state)?.config_set?.font, }); const mapDispatchToProps = (dispatch: any) => ({ @@ -426,6 +521,7 @@ const mapDispatchToProps = (dispatch: any) => ({ fetchHomeData: (currentUserAnonymous: boolean | undefined) => { dispatch(fetchHomeData({})); }, + fetchBrandingSetting: (orgId?: string) => dispatch(fetchBrandingSetting({ orgId, fallbackToGlobal: true })), fetchLowcoderCompVersions: async () => { try { dispatch(setLowcoderCompsLoading(true)); @@ -453,7 +549,9 @@ export function bootstrap() { const root = createRoot(container!); root.render( <Provider store={reduxStore}> + <EnterpriseProvider> <AppIndexWithProps /> + </EnterpriseProvider> </Provider> ); } diff --git a/client/packages/lowcoder/src/components/BrandedIcon.tsx b/client/packages/lowcoder/src/components/BrandedIcon.tsx new file mode 100644 index 0000000000..254c324fdd --- /dev/null +++ b/client/packages/lowcoder/src/components/BrandedIcon.tsx @@ -0,0 +1,21 @@ +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; +import { ReactNode } from "react"; +import { useSelector } from "react-redux"; +import { styled } from "styled-components"; + +const IconWrapper = styled.span<{$color?: string}>` + svg > path[fill-rule='evenodd'] { + ${props => props.$color && `fill: ${props.$color}` }; + } +`; + +export const BrandedIcon = (props: { + children: ReactNode, +}) => { + const brandingSettings = useSelector(getBrandingSetting); + return ( + <IconWrapper $color={brandingSettings?.config_set?.mainBrandingColor}> + {props.children} + </IconWrapper> + ); +}; diff --git a/client/packages/lowcoder/src/components/CompName.tsx b/client/packages/lowcoder/src/components/CompName.tsx index 0e11d10e2c..69fd8c781e 100644 --- a/client/packages/lowcoder/src/components/CompName.tsx +++ b/client/packages/lowcoder/src/components/CompName.tsx @@ -1,4 +1,4 @@ -import { useContext, useEffect, useState } from "react"; +import React, { useContext, useEffect, useState, useCallback, useMemo } from "react"; import styled from "styled-components"; import { PointIcon, SearchOutlinedIcon } from "lowcoder-design/src/icons"; import type { EditPopoverItemType } from 'lowcoder-design/src/components/popover'; @@ -72,89 +72,100 @@ interface Iprops { search?: { searchText: string; setSearchText: (t: string) => void }; } -export const CompName = (props: Iprops) => { +export const CompName = React.memo((props: Iprops) => { const [error, setError] = useState<string | undefined>(undefined); const [editing, setEditing] = useState(false); const [upgrading, setUpgrading] = useState(false); + const [showSearch, setShowSearch] = useState<boolean>(false); + const editorState = useContext(EditorContext); - const selectedComp = values(editorState.selectedComps())[0]; - const compType = selectedComp.children.compType.getView() as UICompType; - const compInfo = parseCompType(compType); - const docUrl = getComponentDocUrl(compType); - const playgroundUrl = getComponentPlaygroundUrl(compType); - - const items: EditPopoverItemType[] = []; - - // Falk: TODO - Implement upgrade for individual Version functionality - const handleUpgrade = async () => { - if (upgrading) { - return; - } + const selectedComp = useMemo(() => values(editorState.selectedComps())[0], [editorState]); + const compType = useMemo(() => selectedComp.children.compType.getView() as UICompType, [selectedComp]); + const compInfo = useMemo(() => parseCompType(compType), [compType]); + const docUrl = useMemo(() => getComponentDocUrl(compType), [compType]); + const playgroundUrl = useMemo(() => getComponentPlaygroundUrl(compType), [compType]); + + // Cleanup on unmount + useEffect(() => { + return () => { + setError(undefined); + setEditing(false); + setUpgrading(false); + setShowSearch(false); + }; + }, []); + + // Reset search when name changes + useEffect(() => { + setShowSearch(false); + }, [props.name]); + + const handleUpgrade = useCallback(async () => { + if (upgrading) return; setUpgrading(true); - await GridCompOperator.upgradeCurrentComp(editorState); - setUpgrading(false); - }; - - if (docUrl) { - items.push({ - text: trans("comp.menuViewDocs"), - onClick: () => { - window.open(docUrl, "_blank"); - }, - }); - } + try { + await GridCompOperator.upgradeCurrentComp(editorState); + } finally { + setUpgrading(false); + } + }, [upgrading, editorState]); - if (playgroundUrl) { - items.push({ - text: trans("comp.menuViewPlayground"), - onClick: () => { - window.open(playgroundUrl, "_blank"); - }, - }); - } + const handleRename = useCallback((value: string) => { + if (editorState.rename(props.name, value)) { + editorState.setSelectedCompNames(new Set([value])); + setError(undefined); + } + }, [editorState, props.name]); + const handleSearchChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { + props.search?.setSearchText(e.target.value); + }, [props.search]); - if (compInfo.isRemote) { - // Falk: Displaying the current version of the component - items.push({ - text: trans("history.currentVersion") + ": " + compInfo.packageVersion, - onClick: () => { - }, - }); - // items.push({ - // text: trans("history.currentVersion") + ": " + compInfo.packageVersion, - // onClick: () => { - - // }, - // }); - - items.push({ - text: trans("comp.menuUpgradeToLatest"), - onClick: () => { - handleUpgrade(); - }, - - }); - } + const handleSearchToggle = useCallback(() => { + setShowSearch(prev => !prev); + props.search?.setSearchText(""); + }, [props.search]); - const [showSearch, setShowSearch] = useState<boolean>(false); - const { search } = props; - useEffect(() => { - setShowSearch(false); - }, [props.name]); - const compName = ( - <CompDiv $width={props.width} $hasSearch={!!search} $showSearch={showSearch}> + const items = useMemo<EditPopoverItemType[]>(() => { + const menuItems: EditPopoverItemType[] = []; + + if (docUrl) { + menuItems.push({ + text: trans("comp.menuViewDocs"), + onClick: () => window.open(docUrl, "_blank"), + }); + } + + if (playgroundUrl) { + menuItems.push({ + text: trans("comp.menuViewPlayground"), + onClick: () => window.open(playgroundUrl, "_blank"), + }); + } + + if (compInfo.isRemote) { + menuItems.push({ + text: trans("history.currentVersion") + ": " + compInfo.packageVersion, + onClick: () => {}, + }); + + menuItems.push({ + text: trans("comp.menuUpgradeToLatest"), + onClick: handleUpgrade, + }); + } + + return menuItems; + }, [docUrl, playgroundUrl, compInfo, handleUpgrade]); + + const compName = useMemo(() => ( + <CompDiv $width={props.width} $hasSearch={!!props.search} $showSearch={showSearch}> <div> <EditText text={props.name} - onFinish={(value) => { - if (editorState.rename(props.name, value)) { - editorState.setSelectedCompNames(new Set([value])); - setError(undefined); - } - }} + onFinish={handleRename} onChange={(value) => setError(editorState.checkRename(props.name, value))} - onEditStateChange={(editing) => setEditing(editing)} + onEditStateChange={setEditing} /> <PopupCard editorFocus={!!error && editing} @@ -163,16 +174,13 @@ export const CompName = (props: Iprops) => { hasError={!!error} /> </div> - {!!search && ( + {!!props.search && ( <SearchIcon - onClick={() => { - setShowSearch(!showSearch); - search?.setSearchText(""); - }} + onClick={handleSearchToggle} style={{ color: showSearch ? "#315EFB" : "#8B8FA3" }} /> )} - { compType === "module" ? ( + {compType === "module" ? ( <EditPopover items={items} edit={() => GridCompOperator.editComp(editorState)} @@ -189,19 +197,32 @@ export const CompName = (props: Iprops) => { </EditPopover> )} </CompDiv> - ); + ), [ + props.width, + props.search, + props.name, + showSearch, + error, + editing, + compType, + items, + editorState, + handleRename, + handleSearchToggle + ]); + return ( <div> {compName} - {search && showSearch && ( + {props.search && showSearch && ( <Search placeholder={trans("comp.searchProp")} - value={search.searchText} - onChange={(e) => search.setSearchText(e.target.value)} + value={props.search.searchText} + onChange={handleSearchChange} allowClear={true} style={{ padding: "0 16px", margin: "0 0 4px 0" }} /> )} </div> ); -}; +}); diff --git a/client/packages/lowcoder/src/components/ErrorFallback.tsx b/client/packages/lowcoder/src/components/ErrorFallback.tsx new file mode 100644 index 0000000000..ecd6aa01b4 --- /dev/null +++ b/client/packages/lowcoder/src/components/ErrorFallback.tsx @@ -0,0 +1,71 @@ +import { ExclamationCircleFilled, WarningFilled } from "@ant-design/icons"; +import { ALL_APPLICATIONS_URL } from "@lowcoder-ee/constants/routesURL"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; +import { buildMaterialPreviewURL } from "@lowcoder-ee/util/materialUtils"; +import Button from "antd/es/button"; +import Flex from "antd/es/flex"; +import { useMemo } from "react"; +import { useSelector } from "react-redux"; +import styled from "styled-components"; +import history from "util/history"; + +const StyledFlex = styled(Flex)` + height: 100vh; + width: 300px; + margin: 0 auto; +`; + +const StyledErrorImage = styled.img` + width: 300px; +`; + +const StyledErrorIcon = styled(ExclamationCircleFilled)` + svg { + width: 80px; + height: 80px; + color: #ff4d4f; + } +`; + +const StyledErrorText = styled.h2` + margin: 1rem 0; + text-align: center; +`; + +const DefaultErrorMessage = 'Something went wrong while displaying this webpage'; + +const ErrorFallback = (props: { + errorMessage?: string, +}) => { + const brandingSettings = useSelector(getBrandingSetting); + + const errorText = useMemo(() => { + if (props.errorMessage) return props.errorMessage; + if (brandingSettings?.config_set?.errorPageText) return brandingSettings?.config_set?.errorPageText; + return DefaultErrorMessage; + }, [props.errorMessage, brandingSettings?.config_set?.errorPageText]); + + const errorImage = useMemo(() => { + const imageUrl = brandingSettings?.config_set?.errorPageImage || ''; + // if (Boolean(brandingSettings?.orgId)) { + // return buildMaterialPreviewURL(imageUrl); + // } + return imageUrl; + }, [brandingSettings?.orgId, brandingSettings?.config_set?.errorPageImage]); + + return ( + + <StyledFlex align="center" justify="center" vertical> + {Boolean(errorImage) + ? <StyledErrorImage src={errorImage} /> + : <StyledErrorIcon /> + } + <StyledErrorText>{errorText}</StyledErrorText> + <Button type="primary" onClick={() => history.push(ALL_APPLICATIONS_URL)}> + Go to Apps + </Button> + </StyledFlex> + ) +} + +export default ErrorFallback; \ No newline at end of file diff --git a/client/packages/lowcoder/src/components/JSLibraryModal.tsx b/client/packages/lowcoder/src/components/JSLibraryModal.tsx index 37b8b6efa4..34224677a4 100644 --- a/client/packages/lowcoder/src/components/JSLibraryModal.tsx +++ b/client/packages/lowcoder/src/components/JSLibraryModal.tsx @@ -273,7 +273,7 @@ export function JSLibraryModal(props: JSLibraryModalProps) { setInstallError(undefined); setURL(""); }} - destroyOnClose={true} + destroyOnHidden={true} showOkButton={false} showCancelButton={false} width="648px" diff --git a/client/packages/lowcoder/src/components/PermissionDialog/AppPermissionDialog.tsx b/client/packages/lowcoder/src/components/PermissionDialog/AppPermissionDialog.tsx index 3a22c96a43..69a9afe883 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/AppPermissionDialog.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/AppPermissionDialog.tsx @@ -27,9 +27,9 @@ import { TacoButton } from "components/button"; import copy from "copy-to-clipboard"; import { StyledLoading } from "./commonComponents"; import { PermissionRole } from "./Permission"; -import { SHARE_TITLE } from "../../constants/apiConstants"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import { default as Divider } from "antd/es/divider"; +import { SocialShareButtons } from "components/SocialShareButtons"; export const AppPermissionDialog = React.memo((props: { applicationId: string; @@ -83,7 +83,7 @@ export const AppPermissionDialog = React.memo((props: { return ( <PermissionDialog {...props} - title={SHARE_TITLE} + title={trans("home.appSharingDialogueTitle")} ownerLabel={trans("home.allPermissions")} viewBodyRender={(list) => { if (!appPermissionInfo) { @@ -96,6 +96,7 @@ export const AppPermissionDialog = React.memo((props: { applicationId={applicationId} permissionInfo={appPermissionInfo!} /> + <Divider/> {list} </> ); @@ -206,6 +207,8 @@ function AppShareView(props: { useEffect(() => { setPublicToMarketplace(permissionInfo.publicToMarketplace); }, [permissionInfo.publicToMarketplace]); + const inviteLink = window.location.origin + APPLICATION_VIEW_URL(props.applicationId, "view"); + return ( <div style={{ marginBottom: "22px" }}> @@ -247,7 +250,19 @@ function AppShareView(props: { {trans("home.marketplaceGoodPublishing")} </div><Divider/></>} - {isPublic && <AppInviteView appId={applicationId} />} + {isPublic && <AppInviteView appId={applicationId} />} + + {isPublic && + <> + <Divider /> + <SocialShareButtons + url={inviteLink} + text={trans("home.appSocialSharingMessage")} + /> + </> + } + + </div> ); } diff --git a/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx b/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx index dd591145f3..82ea45beb9 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/Permission.tsx @@ -365,8 +365,10 @@ const PermissionSelector = (props: { })} </AddPermissionsSelect> <AddRoleSelect - dropdownStyle={{ - width: "fit-content", + styles={{ + popup: { + root: { width: "fit-content" } + } }} $isVisible={roleSelectVisible} variant="borderless" diff --git a/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx b/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx index 0834cf2d9e..b3645f7887 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/PermissionDialog.tsx @@ -65,7 +65,7 @@ export const PermissionDialog = (props: { return ( <StepModal open={visible} - destroyOnClose + destroyOnHidden onCancel={() => { setActiveStepKey("view"); onVisibleChange(false); diff --git a/client/packages/lowcoder/src/components/PermissionDialog/PermissionList.tsx b/client/packages/lowcoder/src/components/PermissionDialog/PermissionList.tsx index 4fd3abb9ef..f29ef424e5 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/PermissionList.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/PermissionList.tsx @@ -115,8 +115,10 @@ function PermissionLiItem(props: { ) : ( <StyledRoleSelect style={{ marginRight: "4px" }} - dropdownStyle={{ - width: "100px", + styles={{ + popup: { + root: { width: "100px" } + }, }} defaultValue={permissionItem.role} variant="borderless" diff --git a/client/packages/lowcoder/src/components/ResCreatePanel.tsx b/client/packages/lowcoder/src/components/ResCreatePanel.tsx index 1225b99c72..9d60608aa8 100644 --- a/client/packages/lowcoder/src/components/ResCreatePanel.tsx +++ b/client/packages/lowcoder/src/components/ResCreatePanel.tsx @@ -17,6 +17,7 @@ import { Datasource } from "constants/datasourceConstants"; import { QUICK_GRAPHQL_ID, QUICK_REST_API_ID, + JS_CODE_ID, } from "../constants/datasourceConstants"; import { ResourceType } from "constants/queryConstants"; import { default as Upload } from "antd/es/upload"; @@ -145,6 +146,7 @@ const ResButton = (props: { type: BottomResTypeEnum.Query, extra: { compType: "js", + dataSourceId: JS_CODE_ID, }, }, libraryQuery: { @@ -263,6 +265,11 @@ export function ResCreatePanel(props: ResCreateModalProps) { .map((id, idx) => ( <ResButton key={idx} size={buttonSize} identifier={id} onSelect={onSelect} /> ))} + <ResButton + size={buttonSize} + identifier={BottomResTypeEnum.Folder} + onSelect={onSelect} + /> </DataSourceListWrapper> </div> @@ -271,28 +278,8 @@ export function ResCreatePanel(props: ResCreateModalProps) { <div className="section-title">{trans("code")}</div> <div className="section"> <DataSourceListWrapper $placement={placement}> - <ResButton - size={buttonSize} - identifier={BottomResTypeEnum.TempState} - onSelect={onSelect} - /> - <ResButton - size={buttonSize} - identifier={BottomResTypeEnum.Transformer} - onSelect={onSelect} - /> - <ResButton - size={buttonSize} - identifier={BottomResTypeEnum.DateResponder} - onSelect={onSelect} - /> <ResButton size={buttonSize} identifier={"js"} onSelect={onSelect} /> - {!isPublicApp && <ResButton size={buttonSize} identifier={"libraryQuery"} onSelect={onSelect} /> } - <ResButton - size={buttonSize} - identifier={BottomResTypeEnum.Folder} - onSelect={onSelect} - /> + <ResButton size={buttonSize} identifier={BottomResTypeEnum.TempState} onSelect={onSelect} /> </DataSourceListWrapper> </div> </> @@ -320,14 +307,51 @@ export function ResCreatePanel(props: ResCreateModalProps) { </div> </> )} + + {placement === "queryLibrary" && ( + <> + <div className="section-title">{trans("code")}</div> + <div className="section"> + <DataSourceListWrapper $placement={placement}> + <ResButton size={buttonSize} identifier={"js"} onSelect={onSelect} /> + </DataSourceListWrapper> + </div> + </> + )} - <div className="section-title">{trans("query.datasource")}</div> + <div className="section-title">{trans("query.preparedDataQueries")}</div> + <div className="section"> + {!isPublicApp && <ResButton size={buttonSize} identifier={"libraryQuery"} onSelect={onSelect} /> } + </div> + + <div className="section-title">{trans("query.adHocDataQueries")}</div> <div className="section"> <DataSourceListWrapper $placement={placement}> <ResButton size={buttonSize} identifier={"restApi"} onSelect={onSelect} /> <ResButton size={buttonSize} identifier={"streamApi"} onSelect={onSelect} /> <ResButton size={buttonSize} identifier={"alasql"} onSelect={onSelect} /> <ResButton size={buttonSize} identifier={"graphql"} onSelect={onSelect} /> + </DataSourceListWrapper> + </div> + + <div className="section-title">{trans("query.queryResultTransformer")}</div> + <div className="section"> + <DataSourceListWrapper $placement={placement}> + <ResButton size={buttonSize} identifier={BottomResTypeEnum.Transformer} onSelect={onSelect} /> + </DataSourceListWrapper> + </div> + + <div className="section-title">{trans("query.queryResultReactor")}</div> + <div className="section"> + <DataSourceListWrapper $placement={placement}> + <ResButton size={buttonSize} identifier={BottomResTypeEnum.DateResponder} onSelect={onSelect} /> + </DataSourceListWrapper> + </div> + + <div className="section-title">{trans("query.datasource")}</div> + <div className="section"> + <DataSourceListWrapper $placement={placement}> + {datasource.map((i) => ( <ResButton size={buttonSize} key={i.id} identifier={i} onSelect={onSelect} /> ))} diff --git a/client/packages/lowcoder/src/components/SocialShareButtons.tsx b/client/packages/lowcoder/src/components/SocialShareButtons.tsx new file mode 100644 index 0000000000..a1506265e7 --- /dev/null +++ b/client/packages/lowcoder/src/components/SocialShareButtons.tsx @@ -0,0 +1,109 @@ +import React from "react"; +import styled from "styled-components"; +import { trans } from "../i18n"; +import { + TwitterIcon, + LinkedInIcon, + FacebookIcon, + MediumIcon, + RedditIcon, +} from "lowcoder-design"; + +const ShareWrapper = styled.div` + margin-top: 0px; + padding: 0px; +`; + +const ButtonGroup = styled.div` + display: flex; + gap: 12px; + margin-top: 8px; + + a { + display: inline-flex; + align-items: center; + justify-content: center; + width: 44px; + height: 44px; + border-radius: 4px; + background-color: #f5f5f5; + text-decoration: none; + color: #333; + + &:hover { + background-color: #e6e6e6; + } + + svg { + width: 20px; + height: 20px; + } + } +`; + +export const SocialShareButtons: React.FC<{ url: string; text: string }> = ({ + url, + text, +}) => { + const encodedUrl = encodeURIComponent(url); + const encodedText = encodeURIComponent(text); + + return ( + <ShareWrapper> + <div style={{ fontWeight: 500, marginBottom: 4 }}> + {trans("home.appSocialSharing")} + </div> + <ButtonGroup> + {/* Twitter supports inline text and URL */} + <a + href={`https://twitter.com/intent/tweet?text=${encodedText}&url=${encodedUrl}`} + target="_blank" + title={trans("home.socialShare") + " Twitter"} + rel="noopener noreferrer" + > + <TwitterIcon /> + </a> + + {/* Facebook ONLY accepts the URL and reads OG metadata from it */} + <a + href={`https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`} + target="_blank" + title={trans("home.socialShare") + " Facebook"} + rel="noopener noreferrer" + > + <FacebookIcon /> + </a> + + {/* LinkedIn also only uses the URL; title/summary are ignored unless OG tags exist */} + <a + href={`https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`} + target="_blank" + title={trans("home.socialShare") + " LinkedIn"} + rel="noopener noreferrer" + > + <LinkedInIcon /> + </a> + + {/* Reddit sharing */} + <a + href={`https://www.reddit.com/submit?url=${encodedUrl}&title=${encodedText}`} + target="_blank" + title={trans("home.socialShare") + " Reddit"} + rel="noopener noreferrer" + > + <RedditIcon /> + </a> + + {/* Medium sharing - sharing the Medium article URL directly */} + <a + href={"https://medium.com/new-story"} + target="_blank" + title={trans("home.socialShare") + " Medium"} + rel="noopener noreferrer" + > + <MediumIcon /> + </a> + </ButtonGroup> + </ShareWrapper> + ); +}; diff --git a/client/packages/lowcoder/src/components/Tabs.tsx b/client/packages/lowcoder/src/components/Tabs.tsx index 1735a838cb..6ec03515c7 100644 --- a/client/packages/lowcoder/src/components/Tabs.tsx +++ b/client/packages/lowcoder/src/components/Tabs.tsx @@ -1,6 +1,6 @@ import { default as AntdTabs } from "antd/es/tabs"; import { GreyTextColor, TabActiveColor } from "constants/style"; -import { ReactNode } from "react"; +import { ReactNode, memo } from "react"; import styled from "styled-components"; export const Tabs = styled(AntdTabs)` @@ -52,7 +52,7 @@ interface TabTitleProps { text: ReactNode; } -export const TabTitle = function TabTitle(props: TabTitleProps) { +export const TabTitle = memo(function TabTitle(props: TabTitleProps) { const { icon, text } = props; return ( <TabTitleWrapper> @@ -60,4 +60,6 @@ export const TabTitle = function TabTitle(props: TabTitleProps) { {text} </TabTitleWrapper> ); -}; +}); + +TabTitle.displayName = 'TabTitle'; diff --git a/client/packages/lowcoder/src/components/layout/Layout.tsx b/client/packages/lowcoder/src/components/layout/Layout.tsx index 06e307d6d4..04acd92071 100644 --- a/client/packages/lowcoder/src/components/layout/Layout.tsx +++ b/client/packages/lowcoder/src/components/layout/Layout.tsx @@ -9,15 +9,23 @@ import SideBar from "components/layout/SideBar"; import { CNMainContent, CNSidebar } from "constants/styleSelectors"; import { SideBarSection, SideBarSectionProps } from "./SideBarSection"; import styled from "styled-components"; +import { useSelector } from "react-redux"; import { MenuOutlined } from "@ant-design/icons"; import { Drawer, Button } from "antd"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; type LayoutProps = { sections: SideBarSectionProps[]; }; -const SideBarV2 = styled(SideBar)` - background: #f7f9fc !important; +const SideBarV2 = styled(SideBar)<{ + $bgColor?: string, + $fontColor?: string, + $activeBgColor?: string, + $activeFontColor?: string, +}>` + background: ${props => props.$bgColor ? props.$bgColor : '#f7f9fc'} !important; + ${props => props.$fontColor && `color: ${props.$fontColor}`}; padding: 28px 10px; border-right: 1px solid #ebebeb; @@ -50,9 +58,9 @@ const DrawerContentWrapper = styled.div` `; export function Layout(props: LayoutProps) { - const [drawerVisible, setDrawerVisible] = useState(false); const [isMobile, setIsMobile] = useState(false); + const brandingSettings = useSelector(getBrandingSetting); const toggleDrawer = () => { setDrawerVisible(!drawerVisible); @@ -111,12 +119,20 @@ export function Layout(props: LayoutProps) { placement="right" closable={true} onClose={toggleDrawer} - visible={drawerVisible} - bodyStyle={{ padding: "0px" }} - destroyOnClose // Ensure drawer content is removed when closed + open={drawerVisible} + styles={{ + body: { padding: "0px" } + }} + destroyOnHidden // Ensure drawer content is removed when closed > <DrawerContentWrapper> - <SideBarV2 className={CNSidebar}> + <SideBarV2 + className={CNSidebar} + $bgColor={brandingSettings?.config_set?.adminSidebarColor} + $fontColor={brandingSettings?.config_set?.adminSidebarFontColor} + $activeBgColor={brandingSettings?.config_set?.adminSidebarActiveBgColor} + $activeFontColor={brandingSettings?.config_set?.adminSidebarActiveFontColor} + > {mobileSections .filter((section) => section.items.length > 0) .map((section, index) => ( @@ -133,7 +149,13 @@ export function Layout(props: LayoutProps) { {/* Desktop Layout */} <AntdLayout> {!isMobile && ( - <SideBarV2 className={`${CNSidebar} desktop-only`}> + <SideBarV2 + className={`${CNSidebar} desktop-only`} + $bgColor={brandingSettings?.config_set?.adminSidebarColor} + $fontColor={brandingSettings?.config_set?.adminSidebarFontColor} + $activeBgColor={brandingSettings?.config_set?.adminSidebarActiveBgColor} + $activeFontColor={brandingSettings?.config_set?.adminSidebarActiveFontColor} + > {desktopSections .filter((section) => section.items.length > 0) .map((section, index) => ( diff --git a/client/packages/lowcoder/src/components/layout/SideBarItem.tsx b/client/packages/lowcoder/src/components/layout/SideBarItem.tsx index ec89099442..695eb4e196 100644 --- a/client/packages/lowcoder/src/components/layout/SideBarItem.tsx +++ b/client/packages/lowcoder/src/components/layout/SideBarItem.tsx @@ -6,7 +6,12 @@ import { useLocation } from "react-router-dom"; type SideBarSize = "medium" | "small"; -const Wrapper = styled.div<{ $size?: SideBarSize; $selected?: boolean }>` +const Wrapper = styled.div<{ + $size?: SideBarSize; + $selected?: boolean; + $selectedBgColor?: string; + $selectedFontColor?: string; +}>` width: 100%; height: ${(props) => (props.$size === "small" ? "36px" : "44px")}; border-radius: 4px; @@ -16,7 +21,12 @@ const Wrapper = styled.div<{ $size?: SideBarSize; $selected?: boolean }>` cursor: pointer; &:hover { - background: ${(props) => (props.$selected ? "#ebf0f7" : "#efeff1")}; + background: ${(props) => (props.$selected ? ( + `${props.$selectedBgColor ? props.$selectedBgColor : '#ebf0f7'}` + ) : ( + `${props.$selectedBgColor ? props.$selectedBgColor : '#efeff1'}` + ))}; + color: ${(props) => props.$selectedFontColor ? props.$selectedFontColor : '#4965f2'} } svg { @@ -26,8 +36,8 @@ const Wrapper = styled.div<{ $size?: SideBarSize; $selected?: boolean }>` ${(props) => props.$selected && css` - color: #4965f2; - background: #ebf0f7; + color: ${props.$selectedFontColor ? props.$selectedFontColor : '#4965f2'}; + background: ${props.$selectedBgColor ? props.$selectedBgColor : '#ebf0f7'}; `} `; @@ -41,6 +51,8 @@ export const SideBarItem = (props: SideBarItemProps) => { className={CNSidebarItem} $size={props.size} $selected={props.selected} + $selectedBgColor={props.selectedBgColor} + $selectedFontColor={props.selectedFontColor} onClick={() => props.onClick?.(currentPath)} > {Icon && <Icon selected={props.selected} style={{ marginRight: "8px" }} />} @@ -53,6 +65,8 @@ export interface SideBarItemProps { icon?: FunctionComponent<SVGProps<any> & { selected?: boolean }>; text: ReactNode | FunctionComponent<{ selected?: boolean }>; selected?: boolean; + selectedBgColor?: string; + selectedFontColor?: string; size?: SideBarSize; onClick?: (currentPath: string) => void; style?: CSSProperties; diff --git a/client/packages/lowcoder/src/components/layout/SideBarSection.tsx b/client/packages/lowcoder/src/components/layout/SideBarSection.tsx index 3a7df0aa79..52a5a2d042 100644 --- a/client/packages/lowcoder/src/components/layout/SideBarSection.tsx +++ b/client/packages/lowcoder/src/components/layout/SideBarSection.tsx @@ -11,6 +11,7 @@ import { getUser } from "../../redux/selectors/usersSelectors"; import { normalAppListSelector } from "../../redux/selectors/applicationSelector"; import { useLocation } from "react-router-dom"; import history from "../../util/history"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; const defaultOnSelectedFn = (routePath: string, currentPath: string) => routePath === currentPath; @@ -23,6 +24,7 @@ const Wrapper = styled.div` export const SideBarSection = (props: SideBarSectionProps) => { const user = useSelector<AppState, User>(getUser); const applications = useSelector<AppState, ApplicationMeta[]>(normalAppListSelector); + const brandingSettings = useSelector(getBrandingSetting); const currentPath = useLocation().pathname; const isShow = props.items .map((item) => (item.visible ? item.visible({ user: user, applications: applications }) : true)) @@ -45,6 +47,8 @@ export const SideBarSection = (props: SideBarSectionProps) => { ? item.onSelected(item.routePath, currentPath) : defaultOnSelectedFn(item.routePath, currentPath) } + selectedBgColor={brandingSettings?.config_set?.adminSidebarActiveBgColor} + selectedFontColor={brandingSettings?.config_set?.adminSidebarActiveFontColor} onClick={() => { // Trigger item's onClick if defined item.onClick diff --git a/client/packages/lowcoder/src/components/resultPanel/BottomResultPanel.tsx b/client/packages/lowcoder/src/components/resultPanel/BottomResultPanel.tsx index 36e0a64fd3..7f4f82c23b 100644 --- a/client/packages/lowcoder/src/components/resultPanel/BottomResultPanel.tsx +++ b/client/packages/lowcoder/src/components/resultPanel/BottomResultPanel.tsx @@ -55,6 +55,7 @@ export const BottomResultPanel = (props: BottomResultPanelProps) => { return ( <Draggable + nodeRef={draggableRef} disabled={unDraggable} bounds={bounds} enableUserSelectHack={false} diff --git a/client/packages/lowcoder/src/components/table/EditableCell.tsx b/client/packages/lowcoder/src/components/table/EditableCell.tsx index 9fae29b50c..42d7123457 100644 --- a/client/packages/lowcoder/src/components/table/EditableCell.tsx +++ b/client/packages/lowcoder/src/components/table/EditableCell.tsx @@ -1,7 +1,7 @@ import { PresetStatusColorType } from "antd/es/_util/colors"; import _ from "lodash"; import { changeChildAction, DispatchType } from "lowcoder-core"; -import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useState } from "react"; +import React, { ReactNode, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; import styled from "styled-components"; import { JSONValue } from "util/jsonTypes"; import ColumnTypeView from "./columnTypeView"; @@ -29,15 +29,24 @@ const EditableChip = styled.div` border-right-color: #5589F2; `; +const EditableOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +`; + export interface CellProps { editable?: boolean; - size?: string; + tableSize?: string; candidateTags?: string[]; candidateStatus?: { text: string; status: StatusType }[]; textOverflow?: boolean; cellTooltip?: string; editMode?: string; onTableEvent?: (eventName: any) => void; + cellIndex?: string; } export type CellViewReturn = (props: CellProps) => ReactNode; @@ -45,6 +54,7 @@ export type EditViewFn<T> = (props: { value: T; onChange: (value: T) => void; onChangeEnd: () => void; + otherProps?: Record<string, any>; }) => ReactNode; const BorderDiv = styled.div` @@ -56,7 +66,7 @@ const BorderDiv = styled.div` left: 0; `; -const CellWrapper = ({ +const CellWrapper = React.memo(({ children, tooltipTitle, }: { @@ -73,7 +83,7 @@ const CellWrapper = ({ return ( <>{children}</> ) -}; +}); interface EditableCellProps<T> extends CellProps { normalView: ReactNode; @@ -84,7 +94,7 @@ interface EditableCellProps<T> extends CellProps { changeValue?: T | null; } -export function EditableCell<T extends JSONValue>(props: EditableCellProps<T>) { +function EditableCellComp<T extends JSONValue>(props: EditableCellProps<T>) { const { dispatch, normalView, @@ -96,54 +106,88 @@ export function EditableCell<T extends JSONValue>(props: EditableCellProps<T>) { candidateStatus, editMode, onTableEvent, + tableSize, + textOverflow, + cellTooltip, + cellIndex, + ...otherProps } = props; + const status = _.isNil(changeValue) ? "normal" : "toSave"; const editable = editViewFn ? props.editable : false; const { isEditing, setIsEditing } = useContext(TableCellContext); const value = changeValue ?? baseValue!; const [tmpValue, setTmpValue] = useState<T | null>(value); - const singleClickEdit = editMode === 'single'; + const singleClickEdit = editMode === 'single'; + + // Use refs to track component mount state and previous values + const mountedRef = useRef(true); + const prevValueRef = useRef(value); + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setTmpValue(null); + setIsEditing(false); + }; + }, [setIsEditing]); + + // Update tmpValue when value changes useEffect(() => { - setTmpValue(value); - }, [JSON.stringify(value)]); + if (!mountedRef.current) return; + + if (!_.isEqual(value, prevValueRef.current)) { + setTmpValue(value); + prevValueRef.current = value; + } + }, [value]); const onChange = useCallback( (value: T) => { + if (!mountedRef.current) return; setTmpValue(value); }, - [setTmpValue] + [] ); const onChangeEnd = useCallback(() => { + if (!mountedRef.current) return; + setIsEditing(false); + const newValue = _.isNil(tmpValue) || _.isEqual(tmpValue, baseValue) ? null : tmpValue; dispatch( changeChildAction( "changeValue", - _.isNil(tmpValue) || _.isEqual(tmpValue, baseValue) ? null : tmpValue, + newValue, false ) ); if(!_.isEqual(tmpValue, value)) { onTableEvent?.('columnEdited'); } - }, [dispatch, JSON.stringify(baseValue), JSON.stringify(tmpValue)]); + }, [dispatch, tmpValue, baseValue, value, onTableEvent, setIsEditing]); const editView = useMemo( - () => editViewFn?.({ value, onChange, onChangeEnd }) ?? <></>, - [editViewFn, JSON.stringify(value), onChange, onChangeEnd] + () => editViewFn?.({ value, onChange, onChangeEnd, otherProps }) ?? <></>, + [editViewFn, value, onChange, onChangeEnd, otherProps] ); const enterEditFn = useCallback(() => { - if (editable) setIsEditing(true); - }, [editable]); + if (!mountedRef.current || !editable) return; + setIsEditing(true); + }, [editable, setIsEditing]); + // Memoize context values to prevent unnecessary re-renders + const tagsContextValue = useMemo(() => candidateTags ?? [], [candidateTags]); + const statusContextValue = useMemo(() => candidateStatus ?? [], [candidateStatus]); + if (isEditing) { return ( <> <BorderDiv className="editing-border" /> - <TagsContext.Provider value={candidateTags ?? []}> - <StatusContext.Provider value={candidateStatus ?? []}> + <TagsContext.Provider value={tagsContextValue}> + <StatusContext.Provider value={statusContextValue}> <div className="editing-wrapper"> {editView} </div> @@ -154,35 +198,31 @@ export function EditableCell<T extends JSONValue>(props: EditableCellProps<T>) { } return ( - <ColumnTypeView - textOverflow={props.textOverflow} - > - {status === "toSave" && !isEditing && <EditableChip />} + <ColumnTypeView + textOverflow={props.textOverflow} + > + {status === "toSave" && !isEditing && <EditableChip key={`editable-chip-${cellIndex}`}/>} + <CellWrapper tooltipTitle={props.cellTooltip}> + <div + key={`normal-view-${cellIndex}`} + tabIndex={editable ? 0 : -1 } + onFocus={enterEditFn} + > + {normalView} + </div> + </CellWrapper> + {/* overlay on normal view to handle double click for editing */} + {editable && ( <CellWrapper tooltipTitle={props.cellTooltip}> - <div - tabIndex={editable ? 0 : -1 } - onFocus={enterEditFn} - > - {normalView} - </div> + <EditableOverlay + key={`editable-view-${cellIndex}`} + onDoubleClick={!singleClickEdit ? enterEditFn : undefined} + onClick={singleClickEdit ? enterEditFn : undefined} + /> </CellWrapper> - {/* overlay on normal view to handle double click for editing */} - {editable && ( - <CellWrapper tooltipTitle={props.cellTooltip}> - <div - style={{ - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - }} - onDoubleClick={!singleClickEdit ? enterEditFn : undefined} - onClick={singleClickEdit ? enterEditFn : undefined} - > - </div> - </CellWrapper> - )} - </ColumnTypeView> + )} + </ColumnTypeView> ); } + +export const EditableCell = React.memo(EditableCellComp) as typeof EditableCellComp; \ No newline at end of file diff --git a/client/packages/lowcoder/src/components/table/columnTypeView.tsx b/client/packages/lowcoder/src/components/table/columnTypeView.tsx index 87216d833f..806695ca1f 100644 --- a/client/packages/lowcoder/src/components/table/columnTypeView.tsx +++ b/client/packages/lowcoder/src/components/table/columnTypeView.tsx @@ -1,24 +1,26 @@ -import React, { useEffect, useMemo, useRef, useState } from "react"; +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; import styled from "styled-components"; +const overflowStyles = ` + div { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: keep-all; + } + span { + display: inline-block; + white-space: nowrap; + text-overflow: ellipsis; + word-break: keep-all; + } +`; + const ColumnTypeViewWrapper = styled.div<{ $textOverflow?: boolean }>` position: relative; - ${props => props.$textOverflow == false && ` - div { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - word-break: keep-all; - } - span { - display: inline-block; /* Change display to inline-block for span */ - white-space: nowrap; - text-overflow: ellipsis; - word-break: keep-all; - } - `} + ${props => props.$textOverflow === false && overflowStyles} `; const ColumnTypeHoverView = styled.div<{ @@ -73,13 +75,12 @@ function childIsOverflow(nodes: HTMLCollection): boolean { return false; } -export default function ColumnTypeView(props: { +function ColumnTypeView(props: { children: React.ReactNode, textOverflow?: boolean, }) { - - const wrapperRef = useRef<HTMLDivElement>(null); - const hoverViewRef = useRef<HTMLDivElement>(null); + const wrapperRef = useRef<HTMLDivElement | null>(null); + const hoverViewRef = useRef<HTMLDivElement | null>(null); const [isHover, setIsHover] = useState(false); const [hasOverflow, setHasOverflow] = useState(false); const [adjustedPosition, setAdjustedPosition] = useState<{ @@ -89,52 +90,107 @@ export default function ColumnTypeView(props: { height?: number; width?: number; }>({ done: false }); - const [delayHandler, setDelayHandler] = useState<any>(); - const delayMouseEnter = useMemo(() => { - return () => - setDelayHandler( - setTimeout(() => { - setIsHover(true); - }, 300) - ); + + // Use refs for cleanup + const timeoutRef = useRef<NodeJS.Timeout>(); + const mountedRef = useRef(true); + const parentElementRef = useRef<HTMLElement | null>(null); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + if (parentElementRef.current) { + parentElementRef.current.style.zIndex = ""; + } + wrapperRef.current = null; + hoverViewRef.current = null; + parentElementRef.current = null; + }; + }, []); + + // Memoize event handlers + const delayMouseEnter = useCallback(() => { + if (!mountedRef.current) return; + + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + + timeoutRef.current = setTimeout(() => { + if (mountedRef.current) { + setIsHover(true); + } + }, 300); + }, []); + + const handleMouseLeave = useCallback(() => { + if (!mountedRef.current) return; + + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + setIsHover(false); }, []); + const handleMouseEnter = useCallback(() => { + if (!mountedRef.current) return; + setIsHover(true); + }, []); + + // Check for overflow useEffect(() => { + if (!mountedRef.current) return; + const wrapperEle = wrapperRef.current; if (!isHover || !wrapperEle) { return; } + const overflow = wrapperEle.clientHeight < wrapperEle.scrollHeight || wrapperEle.clientWidth < wrapperEle.scrollWidth; + if (overflow || childIsOverflow(wrapperEle.children)) { - !hasOverflow && setHasOverflow(true); - } else { - hasOverflow && setHasOverflow(false); + if (!hasOverflow) { + setHasOverflow(true); + } + } else if (hasOverflow) { + setHasOverflow(false); } - }, [isHover]); + }, [isHover, hasOverflow]); + // Adjust position useEffect(() => { + if (!mountedRef.current) return; + const wrapperEle = wrapperRef.current; const hoverEle = hoverViewRef.current; + if (!isHover || !hasOverflow) { - if (wrapperEle?.parentElement) { - wrapperEle.parentElement.style.zIndex = ""; + if (parentElementRef.current) { + parentElementRef.current.style.zIndex = ""; } setAdjustedPosition({ done: false }); return; } + // Get the position of the outer table - const tableEle = wrapperRef.current?.closest(".ant-table-content") as HTMLDivElement; + const tableEle = wrapperEle?.closest(".ant-table-content") as HTMLDivElement; if (!hoverEle || !tableEle || !wrapperEle) { return; } + + // Store parent element reference for cleanup if (wrapperEle.parentElement) { - // change parent z-index, fix bug when column sticky - wrapperEle.parentElement.style.zIndex = "999"; + parentElementRef.current = wrapperEle.parentElement; + parentElementRef.current.style.zIndex = "999"; } - // actual width and height of the element + // Calculate dimensions const width = Math.min( hoverEle.getBoundingClientRect().width, tableEle.getBoundingClientRect().width @@ -144,12 +200,14 @@ export default function ColumnTypeView(props: { tableEle.getBoundingClientRect().height ); - let left; + // Calculate position adjustments const leftOverflow = tableEle.getBoundingClientRect().x - hoverEle.getBoundingClientRect().x; const rightOverflow = tableEle.getBoundingClientRect().x + tableEle.offsetWidth - (hoverEle.getBoundingClientRect().x + width); + + let left; if (leftOverflow > 0) { left = leftOverflow; } else if (rightOverflow < 0) { @@ -162,30 +220,27 @@ export default function ColumnTypeView(props: { tableEle.offsetHeight - (hoverEle.getBoundingClientRect().y + height); - // Adjust the hover position according to the table position setAdjustedPosition({ - left: left, + left, top: bottomOverflow < 0 ? bottomOverflow : undefined, - height: height, - width: width, + height, + width, done: true, }); }, [isHover, hasOverflow]); + // Memoize children to prevent unnecessary re-renders + const memoizedChildren = useMemo(() => props.children, [props.children]); + return ( <> <ColumnTypeViewWrapper ref={wrapperRef} $textOverflow={props.textOverflow} - onMouseEnter={() => { - delayMouseEnter(); - }} - onMouseLeave={() => { - clearTimeout(delayHandler); - setIsHover(false); - }} + onMouseEnter={delayMouseEnter} + onMouseLeave={handleMouseLeave} > - {props.children} + {memoizedChildren} </ColumnTypeViewWrapper> {isHover && hasOverflow && wrapperRef.current && !props.textOverflow && ( <ColumnTypeHoverView @@ -197,14 +252,14 @@ export default function ColumnTypeView(props: { $adjustLeft={adjustedPosition.left} $adjustTop={adjustedPosition.top} $padding={`${wrapperRef.current.offsetTop}px ${wrapperRef.current.offsetLeft}px`} - onMouseEnter={() => { - setIsHover(true); - }} - onMouseLeave={() => setIsHover(false)} + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} > - {props.children} + {memoizedChildren} </ColumnTypeHoverView> )} </> ); } + +export default React.memo(ColumnTypeView); \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx b/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx index 7749f262f8..4f240f35f7 100644 --- a/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/appSettingsComp.tsx @@ -216,7 +216,7 @@ const childrenMap = { disableCollision: valueComp<boolean>(false), lowcoderCompVersion: withDefault(StringControl, 'latest'), maxWidth: dropdownInputSimpleControl(OPTIONS, USER_DEFINE, "1920"), - gridColumns: RangeControl.closed(8, 48, 24), + gridColumns: RangeControl.closed(1, 48, 24), gridRowHeight: RangeControl.closed(4, 100, 8), gridRowCount: withDefault(NumberControl, DEFAULT_ROW_COUNT), gridPaddingX: withDefault(NumberControl, 20), diff --git a/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx b/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx index 54a2698129..a8211777db 100644 --- a/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/autoCompleteComp/autoCompleteComp.tsx @@ -20,7 +20,7 @@ import { import styled, { css } from "styled-components"; import { UICompBuilder } from "../../generators"; import { FormDataPropertyView } from "../formComp/formDataConstants"; -import { jsonControl } from "comps/controls/codeControl"; +import { jsonControl, NumberControl } from "comps/controls/codeControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { getStyle, @@ -92,6 +92,7 @@ const childrenMap = { inputFieldStyle: styleControl(InputLikeStyle , 'inputFieldStyle'), childrenInputFieldStyle: styleControl(ChildrenMultiSelectStyle, 'childrenInputFieldStyle'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), + tabIndex: NumberControl, }; const getValidate = (value: any): "" | "warning" | "error" | undefined => { @@ -256,7 +257,7 @@ let AutoCompleteCompBase = (function () { } return false; }} - dropdownRender={(originNode: ReactNode) => ( + popupRender={(originNode: ReactNode) => ( <DropdownStyled $style={props.childrenInputFieldStyle as ChildrenMultiSelectStyleType}> {originNode} </DropdownStyled> @@ -271,6 +272,7 @@ let AutoCompleteCompBase = (function () { suffix={hasIcon(props.suffixIcon) && props.suffixIcon} status={getValidate(validateState)} onPressEnter={undefined} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> </AutoComplete> </> @@ -354,6 +356,9 @@ let AutoCompleteCompBase = (function () { > {children.animationStyle.getPropertyView()} </Section> + <Section name={sectionNames.advanced}> + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} + </Section> </> ); }) diff --git a/client/packages/lowcoder/src/comps/comps/avatar.tsx b/client/packages/lowcoder/src/comps/comps/avatar.tsx index a1da4984a7..bbd39f73e8 100644 --- a/client/packages/lowcoder/src/comps/comps/avatar.tsx +++ b/client/packages/lowcoder/src/comps/comps/avatar.tsx @@ -164,7 +164,7 @@ const AvatarView = (props: RecordConstructorToView<typeof childrenMap>) => { placement={props.labelPosition === 'left' ? "bottomLeft" : "bottomRight"} arrow disabled={!props.enableDropdownMenu} - dropdownRender={() => menu} + popupRender={() => menu} > <Wrapper $iconSize={props.iconSize} $labelPosition={props.labelPosition} $style={props.style}> <Badge diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx index 8b03c04925..6f657c1e84 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/buttonComp.tsx @@ -4,7 +4,7 @@ import { ButtonEventHandlerControl } from "comps/controls/eventHandlerControl"; import { IconControl } from "comps/controls/iconControl"; import { CompNameContext, EditorContext, EditorState } from "comps/editorState"; import { withDefault } from "comps/generators"; -import { UICompBuilder } from "comps/generators/uiCompBuilder"; +import { NewChildren, UICompBuilder } from "comps/generators/uiCompBuilder"; import { disabledPropertyView, hiddenPropertyView, @@ -23,10 +23,12 @@ import { ButtonStyleControl, } from "./buttonCompConstants"; import { RefControl } from "comps/controls/refControl"; - -import React, { useContext, useEffect } from "react"; +import { Tooltip } from "antd"; +import React, { useContext, useEffect, useCallback, useRef } from "react"; import { AnimationStyle } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; +import { RecordConstructorToComp } from "lowcoder-core"; +import { ToViewReturn } from "@lowcoder-ee/comps/generators/multi"; const FormLabel = styled(CommonBlueLabel)` font-size: 13px; @@ -120,25 +122,91 @@ function submitForm(editorState: EditorState, formName: string) { } } -const ButtonTmpComp = (function () { - const childrenMap = { - text: withDefault(StringControl, trans("button.button")), - type: dropdownControl(typeOptions, ""), - onEvent: ButtonEventHandlerControl, - disabled: BoolCodeControl, - loading: BoolCodeControl, - form: SelectFormControl, - prefixIcon: IconControl, - suffixIcon: IconControl, - style: ButtonStyleControl, - animationStyle: styleControl(AnimationStyle, 'animationStyle'), - viewRef: RefControl<HTMLElement>, - }; - return new UICompBuilder(childrenMap, (props) => { - return( - <ButtonCompWrapper $disabled={props.disabled}> - <EditorContext.Consumer> - {(editorState) => ( +const childrenMap = { + text: withDefault(StringControl, trans("button.button")), + type: dropdownControl(typeOptions, ""), + onEvent: ButtonEventHandlerControl, + disabled: BoolCodeControl, + loading: BoolCodeControl, + form: SelectFormControl, + prefixIcon: IconControl, + suffixIcon: IconControl, + style: ButtonStyleControl, + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + viewRef: RefControl<HTMLElement>, + tooltip: StringControl +}; + +type ChildrenType = NewChildren<RecordConstructorToComp<typeof childrenMap>>; + +const ButtonPropertyView = React.memo((props: { + children: ChildrenType +}) => { + const { editorModeStatus } = useContext(EditorContext); + return ( + <> + <Section name={sectionNames.basic}> + {props.children.text.propertyView({ label: trans("text") })} + {props.children.tooltip.propertyView({ label: trans("labelProp.tooltip")})} + </Section> + + {(editorModeStatus === "logic" || editorModeStatus === "both") && ( + <><Section name={sectionNames.interaction}> + {props.children.type.propertyView({ label: trans("prop.type"), radioButton: true })} + {isDefault(props.children.type.getView()) + ? [ + props.children.onEvent.getPropertyView(), + disabledPropertyView(props.children), + hiddenPropertyView(props.children), + loadingPropertyView(props.children), + ] + : props.children.form.getPropertyView()} + </Section> + </> + )} + + {(editorModeStatus === "layout" || editorModeStatus === "both") && ( + <> + <Section name={sectionNames.layout}> + {props.children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {props.children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} + </Section> + <Section name={sectionNames.style}>{props.children.style.getPropertyView()}</Section> + </> + )} + </> + ); +}); + +const ButtonView = React.memo((props: ToViewReturn<ChildrenType>) => { + const editorState = useContext(EditorContext); + const mountedRef = useRef<boolean>(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleClick = useCallback(() => { + if (!mountedRef.current) return; + + try { + if (isDefault(props.type)) { + props.onEvent("click"); + } else { + submitForm(editorState, props.form); + } + } catch (error) { + console.error("Error in button click handler:", error); + } + }, [props.type, props.onEvent, props.form, editorState]); + + return ( + <ButtonCompWrapper $disabled={props.disabled}> + <EditorContext.Consumer> + {(editorState) => ( + <Tooltip title={props.tooltip}> <Button100 ref={props.viewRef} $buttonStyle={props.style} @@ -147,9 +215,7 @@ const ButtonTmpComp = (function () { props.disabled || (!isDefault(props.type) && getForm(editorState, props.form)?.disableSubmit()) } - onClick={() => - isDefault(props.type) ? props.onEvent("click") : submitForm(editorState, props.form) - } + onClick={handleClick} > {props.prefixIcon && <IconWrapper>{props.prefixIcon}</IconWrapper>} { @@ -157,46 +223,20 @@ const ButtonTmpComp = (function () { } {props.suffixIcon && <IconWrapper>{props.suffixIcon}</IconWrapper>} </Button100> - )} - </EditorContext.Consumer> - </ButtonCompWrapper> - ); - }) - .setPropertyViewFn((children) => ( - <> - <Section name={sectionNames.basic}> - {children.text.propertyView({ label: trans("text") })} - </Section> - - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <><Section name={sectionNames.interaction}> - {children.type.propertyView({ label: trans("prop.type"), radioButton: true })} - {isDefault(children.type.getView()) - ? [ - children.onEvent.getPropertyView(), - disabledPropertyView(children), - hiddenPropertyView(children), - loadingPropertyView(children), - ] - : children.form.getPropertyView()} - </Section> - </> + </Tooltip> )} + </EditorContext.Consumer> + </ButtonCompWrapper> + ); +}); - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> - <Section name={sectionNames.layout}> - {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} - </Section> - <Section name={sectionNames.style}>{children.style.getPropertyView()}</Section> - </> - )} - </> - )) - .setExposeMethodConfigs(buttonRefMethods) - .build(); -})(); +const buttonViewFn = (props: ToViewReturn<ChildrenType>) => <ButtonView {...props} /> +const buttonPropertyViewFn = (children: ChildrenType) => <ButtonPropertyView children={children} /> + +const ButtonTmpComp = new UICompBuilder(childrenMap, buttonViewFn) + .setPropertyViewFn(buttonPropertyViewFn) + .setExposeMethodConfigs(buttonRefMethods) + .build(); export const ButtonComp = withExposingConfigs(ButtonTmpComp, [ new NameConfig("text", trans("button.textDesc")), diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx index a734d7e45f..955d2a5931 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/dropdownComp.tsx @@ -125,7 +125,7 @@ const DropdownTmpComp = (function () { {props.onlyMenu ? ( <Dropdown disabled={props.disabled} - dropdownRender={() => menu} + popupRender={() => menu} trigger={[props.triggerMode]} > <Button100 $buttonStyle={props.style as any} disabled={props.disabled}> @@ -135,7 +135,7 @@ const DropdownTmpComp = (function () { ) : ( <StyledDropdownButton disabled={props.disabled} - dropdownRender={() => menu} + popupRender={() => menu} trigger={[props.triggerMode]} onClick={() => props.onEvent("click")} buttonsRender={([left, right]) => [ diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx index 74f9f8a550..811ed91be3 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/scannerComp.tsx @@ -1,6 +1,4 @@ import { default as Button } from "antd/es/button"; -import { default as Dropdown } from "antd/es/dropdown"; -import { default as Menu } from "antd/es/menu"; import { default as Skeleton } from "antd/es/skeleton"; import { Button100, @@ -14,16 +12,29 @@ import { DropdownStyle } from "comps/controls/styleControlConstants"; import { withDefault } from "comps/generators"; import { UICompBuilder } from "comps/generators/uiCompBuilder"; import { CustomModal, Section, sectionNames } from "lowcoder-design"; -import styled from "styled-components"; -import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generators/withExposing"; -import { hiddenPropertyView, disabledPropertyView, showDataLoadingIndicatorsPropertyView } from "comps/utils/propertyUtils"; +import styled, { keyframes } from "styled-components"; +import { + CommonNameConfig, + NameConfig, + withExposingConfigs, +} from "../../generators/withExposing"; +import { + hiddenPropertyView, + disabledPropertyView, + showDataLoadingIndicatorsPropertyView, +} from "comps/utils/propertyUtils"; import { trans } from "i18n"; -import React, { Suspense, useEffect, useRef, useState, useContext } from "react"; +import React, { + Suspense, + useEffect, + useRef, + useState, + useContext, +} from "react"; import { arrayStringExposingStateControl } from "comps/controls/codeStateControl"; import { BoolControl } from "comps/controls/boolControl"; -import type { ItemType } from "antd/es/menu/interface"; import { RefControl } from "comps/controls/refControl"; -import { EditorContext } from "comps/editorState"; +import { EditorContext } from "comps/editorState"; const Error = styled.div` color: #f5222d; @@ -51,6 +62,50 @@ const Wrapper = styled.div` } `; +const dropdownShow = keyframes` + from { + opacity: 0; + transform: translateY(-8px) scaleY(0.98); + } + to { + opacity: 1; + transform: translateY(0) scaleY(1); + } +`; + +const DropdownContainer = styled.div` + position: absolute; + top: 44px; + right: 0; + min-width: 150px; + background: #fff; + border: 1px solid #e0e0e0; + border-radius: 8px; + box-shadow: + 0 8px 24px rgba(0, 0, 0, 0.12), + 0 1.5px 3px rgba(0, 0, 0, 0.08); + z-index: 1000; + padding: 6px 0; + animation: ${dropdownShow} 0.22s cubic-bezier(0.22, 1, 0.36, 1); + transition: box-shadow 0.2s; +`; + +const DropdownItem = styled.div` + padding: 10px 20px; + cursor: pointer; + font-size: 14px; + color: #222; + background: transparent; + transition: background 0.15s; + &:hover { + background: #f0f5ff; + color: #1677ff; + } + &:active { + background: #e6f7ff; + } +`; + const CustomModalStyled = styled(CustomModal)` top: 10vh; .react-draggable { @@ -59,7 +114,9 @@ const CustomModalStyled = styled(CustomModal)` } `; -const BarcodeScannerComponent = React.lazy(() => import("react-qr-barcode-scanner")); +const BarcodeScannerComponent = React.lazy( + () => import("react-qr-barcode-scanner") +); const ScannerTmpComp = (function () { const childrenMap = { @@ -70,17 +127,20 @@ const ScannerTmpComp = (function () { maskClosable: withDefault(BoolControl, true), onEvent: ScannerEventHandlerControl, disabled: BoolCodeControl, - style: styleControl(DropdownStyle, 'style'), + style: styleControl(DropdownStyle, "style"), viewRef: RefControl<HTMLElement>, }; return new UICompBuilder(childrenMap, (props) => { const [showModal, setShowModal] = useState(false); const [errMessage, setErrMessage] = useState(""); - const [videoConstraints, setVideoConstraints] = useState<MediaTrackConstraints>({ - facingMode: "environment", - }); - const [modeList, setModeList] = useState<ItemType[]>([]); - const [dropdownShow, setDropdownShow] = useState(false); + const [videoConstraints, setVideoConstraints] = + useState<MediaTrackConstraints>({ + facingMode: "environment", + }); + const [modeList, setModeList] = useState<{ label: string; key: string }[]>( + [] + ); + const [handleDropdown, setHandleDropdown] = useState(false); const [success, setSuccess] = useState(false); useEffect(() => { @@ -92,7 +152,7 @@ const ScannerTmpComp = (function () { const continuousValue = useRef<string[]>([]); const handleUpdate = (err: any, result: any) => { - if (!!result) { + if (result) { if (props.continuous) { continuousValue.current = [...continuousValue.current, result.text]; const val = props.uniqueData @@ -109,15 +169,16 @@ const ScannerTmpComp = (function () { setSuccess(false); } }; + const handleErr = (err: any) => { if (typeof err === "string") { setErrMessage(err); + } else if ( + err.message === "getUserMedia is not implemented in this browser" + ) { + setErrMessage(trans("scanner.errTip")); } else { - if (err.message === "getUserMedia is not implemented in this browser") { - setErrMessage(trans("scanner.errTip")); - } else { - setErrMessage(err.message); - } + setErrMessage(err.message); } setSuccess(false); }; @@ -153,10 +214,12 @@ const ScannerTmpComp = (function () { showCancelButton={false} open={showModal} maskClosable={props.maskClosable} - destroyOnClose + destroyOnHidden onCancel={() => { setShowModal(false); props.onEvent("close"); + setVideoConstraints({ facingMode: "environment" }); + setHandleDropdown(false); }} > {!!errMessage ? ( @@ -173,36 +236,33 @@ const ScannerTmpComp = (function () { videoConstraints={videoConstraints} /> </Suspense> - <div - style={{ height: "42px" }} - onClick={() => { - setDropdownShow(false); - }} - > - <Dropdown - placement="bottomRight" - trigger={["click"]} - open={dropdownShow} - onOpenChange={(value) => setDropdownShow(value)} - dropdownRender={() => ( - <Menu - items={modeList} - onClick={(value) => - setVideoConstraints({ ...videoConstraints, deviceId: value.key }) - } - /> - )} + + <div style={{ position: "relative", marginTop: 10 }}> + <Button + style={{ float: "right" }} + onClick={() => { + getModeList(); + setHandleDropdown(!handleDropdown); + }} > - <Button - style={{ float: "right", marginTop: "10px" }} - onClick={(e) => { - e.stopPropagation(); - getModeList(); - }} - > - {trans("scanner.changeCamera")} - </Button> - </Dropdown> + {trans("scanner.changeCamera")} + </Button> + + {handleDropdown && ( + <DropdownContainer> + {modeList.map(({ key, label }) => ( + <DropdownItem + key={key} + onClick={() => { + setVideoConstraints({ deviceId: { exact: key } }); + setHandleDropdown(false); + }} + > + {label} + </DropdownItem> + ))} + </DropdownContainer> + )} </div> </Wrapper> ) @@ -211,35 +271,44 @@ const ScannerTmpComp = (function () { </ButtonCompWrapper> ); }) - .setPropertyViewFn((children) => { - return ( - <> - <Section name={sectionNames.basic}> - {children.text.propertyView({ label: trans("text") })} - </Section> + .setPropertyViewFn((children) => ( + <> + <Section name={sectionNames.basic}> + {children.text.propertyView({ label: trans("text") })} + </Section> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( - <><Section name={sectionNames.interaction}> - {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {showDataLoadingIndicatorsPropertyView(children)} - </Section> - <Section name={sectionNames.advanced}> - {children.continuous.propertyView({ label: trans("scanner.continuous") })} + {(useContext(EditorContext).editorModeStatus === "logic" || + useContext(EditorContext).editorModeStatus === "both") && ( + <> + <Section name={sectionNames.interaction}> + {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {showDataLoadingIndicatorsPropertyView(children)} + </Section> + <Section name={sectionNames.advanced}> + {children.continuous.propertyView({ + label: trans("scanner.continuous"), + })} {children.continuous.getView() && - children.uniqueData.propertyView({ label: trans("scanner.uniqueData") })} - {children.maskClosable.propertyView({ label: trans("scanner.maskClosable") })} + children.uniqueData.propertyView({ + label: trans("scanner.uniqueData"), + })} + {children.maskClosable.propertyView({ + label: trans("scanner.maskClosable"), + })} </Section> - </> - )} + </> + )} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <><Section name={sectionNames.style}>{children.style.getPropertyView()}</Section></> - )} - </> - ); - }) + {(useContext(EditorContext).editorModeStatus === "layout" || + useContext(EditorContext).editorModeStatus === "both") && ( + <Section name={sectionNames.style}> + {children.style.getPropertyView()} + </Section> + )} + </> + )) .setExposeMethodConfigs(buttonRefMethods) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/buttonComp/toggleButtonComp.tsx b/client/packages/lowcoder/src/comps/comps/buttonComp/toggleButtonComp.tsx index f78fee7bb4..0184fb87ac 100644 --- a/client/packages/lowcoder/src/comps/comps/buttonComp/toggleButtonComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/buttonComp/toggleButtonComp.tsx @@ -26,6 +26,7 @@ import { BoolControl } from "comps/controls/boolControl"; import { RefControl } from "comps/controls/refControl"; import React, { useContext, useEffect } from "react"; import { EditorContext } from "comps/editorState"; +import { Tooltip } from "antd"; const IconWrapper = styled.div` display: flex; @@ -65,6 +66,7 @@ const ToggleTmpComp = (function () { animationStyle: styleControl(AnimationStyle , 'animationStyle'), showBorder: withDefault(BoolControl, true), viewRef: RefControl<HTMLElement>, + tooltip: StringControl, }; return new UICompBuilder(childrenMap, (props) => { const text = props.showText @@ -78,20 +80,22 @@ const ToggleTmpComp = (function () { $showBorder={props.showBorder} $animationStyle={props.animationStyle} > - <Button100 - ref={props.viewRef} - $buttonStyle={props.style} - loading={props.loading} - disabled={props.disabled} - onClick={() => { - props.onEvent("change"); - props.value.onChange(!props.value.value); - }} - > - {props.iconPosition === "right" && text} - {<IconWrapper>{props.value.value ? props.trueIcon : props.falseIcon}</IconWrapper>} - {props.iconPosition === "left" && text} - </Button100> + <Tooltip title={props.tooltip}> + <Button100 + ref={props.viewRef} + $buttonStyle={props.style} + loading={props.loading} + disabled={props.disabled} + onClick={() => { + props.onEvent("change"); + props.value.onChange(!props.value.value); + }} + > + {props.iconPosition === "right" && text} + {<IconWrapper>{props.value.value ? props.trueIcon : props.falseIcon}</IconWrapper>} + {props.iconPosition === "left" && text} + </Button100> + </Tooltip> </ButtonCompWrapperStyled> ); }) @@ -114,6 +118,7 @@ const ToggleTmpComp = (function () { </Section> <Section name={sectionNames.advanced}> {children.showText.propertyView({ label: trans("toggleButton.showText") })} + {children.tooltip.propertyView({label: trans("labelProp.tooltip")})} {children.showText.getView() && children.trueText.propertyView({ label: trans("toggleButton.trueLabel") })} {children.showText.getView() && diff --git a/client/packages/lowcoder/src/comps/comps/carouselComp.tsx b/client/packages/lowcoder/src/comps/comps/carouselComp.tsx index e4b5f26d05..5d3f6d77bb 100644 --- a/client/packages/lowcoder/src/comps/comps/carouselComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/carouselComp.tsx @@ -10,7 +10,7 @@ import { ChangeEventHandlerControl } from "comps/controls/eventHandlerControl"; import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; import { PositionControl } from "comps/controls/dropdownControl"; import { useEffect, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { ArrayStringControl } from "comps/controls/codeControl"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, AnimationStyleType, CarouselStyle } from "comps/controls/styleControlConstants"; @@ -56,26 +56,30 @@ let CarouselBasicComp = (function () { setHeight(containerRef.current.clientHeight); } }; + + useResizeDetector({ + targetRef: containerRef, + onResize, + }); + return ( <Container ref={containerRef} $bg={props.style.background} $animationStyle={props.animationStyle} > - <ReactResizeDetector onResize={onResize}> - <Carousel - dots={props.showDots} - dotPosition={props.dotPosition} - autoplay={props.autoPlay} - afterChange={() => props.onEvent("change")} - > - {props.data.map((url, index) => ( - <div key={index}> - <CarouselItem $src={url} style={{ height }} /> - </div> - ))} - </Carousel> - </ReactResizeDetector> + <Carousel + dots={props.showDots} + dotPosition={props.dotPosition} + autoplay={props.autoPlay} + afterChange={() => props.onEvent("change")} + > + {props.data.map((url, index) => ( + <div key={index}> + <CarouselItem $src={url} style={{ height }} /> + </div> + ))} + </Carousel> </Container> ); }) diff --git a/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx b/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx index 7b9c80a240..c457ba4c06 100644 --- a/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/columnLayout/columnLayout.tsx @@ -42,6 +42,7 @@ import { disabledPropertyView, hiddenPropertyView } from "comps/utils/propertyUt import { DisabledContext } from "comps/generators/uiCompBuilder"; import { SliderControl } from "@lowcoder-ee/comps/controls/sliderControl"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; +import React from "react"; const ContainWrapper = styled.div<{ $style: ContainerStyleType & { @@ -72,6 +73,7 @@ const ColWrapper = styled(Col)<{ $minWidth?: string, $matchColumnsHeight: boolean, }>` + min-width: ${(props) => props.$minWidth || 'auto'}; > div { height: ${(props) => props.$matchColumnsHeight ? `calc(100% - ${props.$style?.padding || 0} - ${props.$style?.padding || 0})` : 'auto'}; border-radius: ${(props) => props.$style?.radius}; @@ -122,6 +124,53 @@ const ColumnContainer = (props: ColumnContainerProps) => { ); }; +// Function to apply min-widths to grid template columns +const applyMinWidthsToGridColumns = (columnsDef: string, minWidths: (string | null)[] = []) => { + // Handle empty case + if (!columnsDef?.trim()) return ''; + + // Handle repeat() functions with special parsing + if (columnsDef.includes('repeat(')) { + // For complex repeat patterns, we should return as-is to avoid breaking the layout + // A more complex parser would be needed to fully support repeat with minmax + return columnsDef; + } + + const columns = columnsDef.trim().split(/\s+/); + + const newColumns = columns.map((col, index) => { + const minWidth = minWidths[index]; + + // Skip if no minWidth provided for this column + if (!minWidth) { + return col; + } + + // Keywords that should never be wrapped in minmax() + const keywords = ['auto', 'min-content', 'max-content', 'fit-content', 'subgrid']; + if (keywords.some(keyword => col === keyword)) { + return col; + } + + // Functions that should never be wrapped in minmax() + if (col.includes('(') && col.includes(')')) { + // Already includes a function like calc(), minmax(), etc. + return col; + } + + // Determine if column is flexible and can be wrapped with minmax + // - fr units (e.g., "1fr", "2.5fr") + // - percentage values (e.g., "50%") + // - length values (px, em, rem, etc.) + const isFlexible = /fr$/.test(col) || + /%$/.test(col) || + /^\d+(\.\d+)?(px|em|rem|vh|vw|vmin|vmax|cm|mm|in|pt|pc)$/.test(col); + + return isFlexible ? `minmax(${minWidth}, ${col})` : col; + }); + + return newColumns.join(' '); +}; const ColumnLayout = (props: ColumnLayoutProps) => { let { @@ -138,6 +187,12 @@ const ColumnLayout = (props: ColumnLayoutProps) => { mainScrollbar } = props; + // Extract minWidths from columns + const minWidths = columns.map(column => column.minWidth || null); + + // Apply min-widths to grid template columns + const gridTemplateColumns = applyMinWidthsToGridColumns(templateColumns, minWidths); + return ( <BackgroundColorContext.Provider value={props.style.background}> <DisabledContext.Provider value={props.disabled}> @@ -146,7 +201,7 @@ const ColumnLayout = (props: ColumnLayoutProps) => { <ContainWrapper $style={{ ...props.style, display: "grid", - gridTemplateColumns: templateColumns, + gridTemplateColumns: gridTemplateColumns, columnGap, gridTemplateRows: templateRows, rowGap, @@ -158,6 +213,7 @@ const ColumnLayout = (props: ColumnLayoutProps) => { const containerProps = containers[id].children; const noOfColumns = columns.length; return ( + <React.Fragment key={id}> <BackgroundColorContext.Provider value={props.columnStyle.background}> <ColWrapper key={id} @@ -176,6 +232,7 @@ const ColumnLayout = (props: ColumnLayoutProps) => { /> </ColWrapper> </BackgroundColorContext.Provider> + </React.Fragment> ) }) } diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx index c7e1201bcf..55ac388ca2 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/cardComp.tsx @@ -1,4 +1,4 @@ -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; import { Section, sectionNames } from "lowcoder-design"; import { TriContainer } from "../triContainerComp/triContainer"; @@ -216,51 +216,54 @@ export const ContainerBaseComp = (function () { setWidth(container?.clientWidth ?? 0); setHeight(container?.clientHeight ?? 0); }; + + useResizeDetector({ + targetRef: conRef, + onResize, + }); + return ( - <ReactResizeDetector onResize={onResize}> - <Wrapper - ref={conRef} - $style={props.style} - $animationStyle={props.animationStyle} - $headerStyle={props.headerStyle} - $bodyStyle={props.bodyStyle} - $showMate={props.showMeta || props.cardType == 'custom'} - $cardType={props.cardType} - onMouseEnter={() => props.onEvent('focus')} - onMouseLeave={() => props.onEvent('blur')} - onClick={() => props.onEvent('click')} - > - {<Card - style={{ width: width, height: '100%' }} - size={props.size} - hoverable={props.hoverable} - // 标题设置 - title={props.showTitle && props.title} - extra={props.showTitle && <a href="#" onClick={() => props.onEvent('clickExtra')}>{props.extraTitle}</a>} + <Wrapper + ref={conRef} + $style={props.style} + $animationStyle={props.animationStyle} + $headerStyle={props.headerStyle} + $bodyStyle={props.bodyStyle} + $showMate={props.showMeta || props.cardType == 'custom'} + $cardType={props.cardType} + onMouseEnter={() => props.onEvent('focus')} + onMouseLeave={() => props.onEvent('blur')} + onClick={() => props.onEvent('click')} + > + <Card + style={{ width: width, height: '100%' }} + size={props.size} + hoverable={props.hoverable} + // 标题设置 + title={props.showTitle && props.title} + extra={props.showTitle && <a href="#" onClick={() => props.onEvent('clickExtra')}>{props.extraTitle}</a>} - // 内容 - cover={props.cardType == 'common' && props.CoverImg && <img src={props.imgSrc} height={props.imgHeight} />} - actions={props.cardType == 'common' && props.showActionIcon ? - props.actionOptions.filter(item => !item.hidden).map(item => { - return ( - <IconWrapper - onClick={() => item.onEvent('click')} - disabled={item.disabled} - $style={props.style} - > - {item.icon} - </IconWrapper>) - } - ) : [] + // 内容 + cover={props.cardType == 'common' && props.CoverImg && <img src={props.imgSrc} height={props.imgHeight} />} + actions={props.cardType == 'common' && props.showActionIcon ? + props.actionOptions.filter(item => !item.hidden).map(item => { + return ( + <IconWrapper + onClick={() => item.onEvent('click')} + disabled={item.disabled} + $style={props.style} + > + {item.icon} + </IconWrapper>) } - > - {props.cardType == 'common' && props.showMeta && <Meta title={props.metaTitle} description={props.metaDesc} />} - {props.cardType == 'custom' && <ContainWrapper> - <TriContainer {...props} /></ContainWrapper>} - </Card> + ) : [] } - </Wrapper> - </ReactResizeDetector> + > + {props.cardType == 'common' && props.showMeta && <Meta title={props.metaTitle} description={props.metaDesc} />} + {props.cardType == 'custom' && <ContainWrapper> + <TriContainer {...props} /></ContainWrapper>} + </Card> + </Wrapper> ); }) .setPropertyViewFn((children) => { diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/containerView.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/containerView.tsx index 55e287a6fd..6e227b971d 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/containerView.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/containerView.tsx @@ -54,7 +54,7 @@ import React, { useRef, useState, } from "react"; -import { useResizeDetector } from "react-resize-detector"; +import { ResizePayload, useResizeDetector } from "react-resize-detector"; import styled from "styled-components"; import { checkIsMobile } from "util/commonUtils"; import { ExternalEditorContext } from "util/context/ExternalEditorContext"; @@ -397,8 +397,18 @@ export const InnerGrid = React.memo((props: ViewPropsWithSelect) => { ); const dispatchPositionParamsTimerRef = useRef(0); + + // Add cleanup for timeout + useEffect(() => { + return () => { + if (dispatchPositionParamsTimerRef.current) { + window.clearTimeout(dispatchPositionParamsTimerRef.current); + } + }; + }, []); + const onResize = useCallback( - (width?: number, height?: number) => { + ({width, height}: ResizePayload) => { if(!width || !height) return; if (width !== positionParams.containerWidth) { @@ -444,13 +454,8 @@ export const InnerGrid = React.memo((props: ViewPropsWithSelect) => { props.dispatch, ] ); - const setSelectedNames = useCallback( - (names: Set<string>) => { - editorState?.setSelectedCompNames(names); - }, - [editorState?.setSelectedCompNames] - ); + // Cleanup resize detector const { width, ref } = useResizeDetector({ onResize, handleHeight: isRowCountLocked, @@ -458,6 +463,26 @@ export const InnerGrid = React.memo((props: ViewPropsWithSelect) => { refreshRate: 100, }); + const setSelectedNames = useCallback( + (names: Set<string>) => { + editorState?.setSelectedCompNames(names); + }, + [editorState?.setSelectedCompNames] + ); + + // Cleanup item references when items are removed + useEffect(() => { + const currentKeys = new Set(Object.keys(props.items)); + const refKeys = new Set(Object.keys(itemViewRef.current)); + + // Remove references to items that no longer exist + refKeys.forEach(key => { + if (!currentKeys.has(key)) { + delete itemViewRef.current[key]; + } + }); + }, [props.items]); + const itemViewRef = useRef<GirdItemViewRecord>({}); const itemViews = useMemo(() => { const newView: GirdItemViewRecord = {}; @@ -497,7 +522,7 @@ export const InnerGrid = React.memo((props: ViewPropsWithSelect) => { return ( <ReactGridLayout - innerRef={ref} + innerRef={ref as RefObject<HTMLDivElement>} className={props.className} style={props.style} scrollContainerRef={props.scrollContainerRef} diff --git a/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx b/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx index 0ca13d6527..efa3dc6b3d 100644 --- a/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/containerComp/pageLayoutComp.tsx @@ -141,10 +141,8 @@ export const PageLayoutComp = withMethodExposing(PageLayoutCompTmP, [ params: [{ name: "collapsed", type: "boolean" }], }, execute: (comp, values) => { - const page = values[0] as number; - if (page && page > 0) { - // comp.children.pagination.children.pageNo.dispatchChangeValueAction(page); - } + const collapsed = !!values[0]; // Ensure boolean value + comp.children.container.children.siderCollapsed.dispatchChangeValueAction(collapsed); }, } ]); diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx index fd2add1501..8068829d82 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/dateComp.tsx @@ -4,6 +4,7 @@ import { RecordConstructorToComp, RecordConstructorToView } from "lowcoder-core" import { BoolCodeControl, CustomRuleControl, + NumberControl, RangeControl, StringControl, } from "../../controls/codeControl"; @@ -99,6 +100,7 @@ const commonChildren = { childrenInputFieldStyle: styleControl(ChildrenMultiSelectStyle, 'childrenInputFieldStyle'), timeZone: dropdownControl(timeZoneOptions, Intl.DateTimeFormat().resolvedOptions().timeZone), pickerMode: dropdownControl(PickerModeOptions, 'date'), + tabIndex: NumberControl, }; type CommonChildrenType = RecordConstructorToComp<typeof commonChildren>; @@ -185,6 +187,7 @@ export type DateCompViewProps = Pick< disabledTime: () => ReturnType<typeof disabledTime>; suffixIcon: ReactNode; placeholder?: string | [string, string]; + tabIndex?: number; }; const getFormattedDate = ( @@ -281,6 +284,7 @@ const DatePickerTmpCmp = new UICompBuilder(childrenMap, (props) => { onFocus={() => props.onEvent("focus")} onBlur={() => props.onEvent("blur")} suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> ), showValidationWhenEmpty: props.showValidationWhenEmpty, @@ -322,6 +326,7 @@ const DatePickerTmpCmp = new UICompBuilder(childrenMap, (props) => { {disabledPropertyView(children)} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section> </> )} @@ -475,7 +480,9 @@ let DateRangeTmpCmp = (function () { }} onFocus={() => props.onEvent("focus")} onBlur={() => props.onEvent("blur")} - suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} /> + suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} + /> ); const startResult = validate({ ...props, value: props.start }); @@ -536,6 +543,7 @@ let DateRangeTmpCmp = (function () { {disabledPropertyView(children)} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section> </> )} diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/dateRangeUIView.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/dateRangeUIView.tsx index a2c7ba56d3..c56ddecb6f 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/dateRangeUIView.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/dateRangeUIView.tsx @@ -44,7 +44,8 @@ export interface DateRangeUIViewProps extends DateCompViewProps { placeholder?: string | [string, string]; onChange: (start?: dayjs.Dayjs | null, end?: dayjs.Dayjs | null) => void; onPanelChange: (value: any, mode: [string, string]) => void; - onClickDateRangeTimeZone:(value:any)=>void + onClickDateRangeTimeZone:(value:any)=>void; + tabIndex?: number; } export const DateRangeUIView = (props: DateRangeUIViewProps) => { diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/dateUIView.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/dateUIView.tsx index a5bdea97ab..a98a1eaa59 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/dateUIView.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/dateUIView.tsx @@ -39,7 +39,7 @@ export interface DataUIViewProps extends DateCompViewProps { onChange: DatePickerProps<Dayjs>['onChange']; onPanelChange: () => void; onClickDateTimeZone:(value:any)=>void; - + tabIndex?: number; } const DateMobileUIView = React.lazy(() => diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx index 10dc2dc905..098d68593b 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/timeComp.tsx @@ -4,6 +4,7 @@ import { RecordConstructorToComp, RecordConstructorToView } from "lowcoder-core" import { BoolCodeControl, CustomRuleControl, + NumberControl, RangeControl, StringControl, } from "../../controls/codeControl"; @@ -92,6 +93,7 @@ const commonChildren = { suffixIcon: withDefault(IconControl, "/icon:regular/clock"), timeZone: dropdownControl(timeZoneOptions, Intl.DateTimeFormat().resolvedOptions().timeZone), viewRef: RefControl<CommonPickerMethods>, + tabIndex: NumberControl, ...validationChildren, }; @@ -212,6 +214,7 @@ const TimePickerTmpCmp = new UICompBuilder(childrenMap, (props) => { onFocus={() => props.onEvent("focus")} onBlur={() => props.onEvent("blur")} suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> ), showValidationWhenEmpty: props.showValidationWhenEmpty, @@ -247,6 +250,7 @@ const TimePickerTmpCmp = new UICompBuilder(childrenMap, (props) => { {disabledPropertyView(children)} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section></> )} @@ -368,6 +372,7 @@ const TimeRangeTmpCmp = (function () { onFocus={() => props.onEvent("focus")} onBlur={() => props.onEvent("blur")} suffixIcon={hasIcon(props.suffixIcon) && props.suffixIcon} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> ); @@ -423,6 +428,7 @@ const TimeRangeTmpCmp = (function () { {disabledPropertyView(children)} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section></> )} diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/timeRangeUIView.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/timeRangeUIView.tsx index 44afcc7b33..940a372660 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/timeRangeUIView.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/timeRangeUIView.tsx @@ -39,6 +39,7 @@ export interface TimeRangeUIViewProps extends TimeCompViewProps { placeholder?: string | [string, string]; onChange: (start?: dayjs.Dayjs | null, end?: dayjs.Dayjs | null) => void; handleTimeRangeZoneChange: (value:any) => void; + tabIndex?: number; } export const TimeRangeUIView = (props: TimeRangeUIViewProps) => { diff --git a/client/packages/lowcoder/src/comps/comps/dateComp/timeUIView.tsx b/client/packages/lowcoder/src/comps/comps/dateComp/timeUIView.tsx index a04b117e22..891dfc1a44 100644 --- a/client/packages/lowcoder/src/comps/comps/dateComp/timeUIView.tsx +++ b/client/packages/lowcoder/src/comps/comps/dateComp/timeUIView.tsx @@ -34,6 +34,7 @@ export interface TimeUIViewProps extends TimeCompViewProps { value: dayjs.Dayjs | null; onChange: (value: dayjs.Dayjs | null) => void; handleTimeZoneChange: (value:any) => void; + tabIndex?: number; } export const TimeUIView = (props: TimeUIViewProps) => { diff --git a/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx b/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx index 78857be7eb..8df84e1584 100644 --- a/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/fileComp/fileComp.tsx @@ -346,7 +346,7 @@ const ImageCaptureModal = (props: { showCancelButton={false} open={props.showModal} maskClosable={true} - destroyOnClose + destroyOnHidden onCancel={props.onModalClose} > {!!errMessage ? ( @@ -413,7 +413,7 @@ const ImageCaptureModal = (props: { trigger={["click"]} open={dropdownShow} onOpenChange={(value) => setDropdownShow(value)} - dropdownRender={() => ( + popupRender={() => ( <Menu items={modeList} onClick={(value) => diff --git a/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx b/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx index 864e000d32..6d4f2fc9ad 100644 --- a/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx +++ b/client/packages/lowcoder/src/comps/comps/formComp/createForm.tsx @@ -12,7 +12,7 @@ import { TacoButton, } from "lowcoder-design"; import _ from "lodash"; -import { useEffect, useState } from "react"; +import { useEffect, useState, useCallback } from "react"; import { useDispatch, useSelector } from "react-redux"; import { AppState } from "redux/reducers"; import { fetchDatasourceStructure } from "redux/reduxActions/datasourceActions"; @@ -23,12 +23,14 @@ import { getDataSourceTypeConfig } from "./generate"; import { DataSourceTypeConfig, TableColumn } from "./generate/dataSourceCommon"; import { CompConfig } from "./generate/comp"; import { uiCompRegistry } from "comps/uiCompRegistry"; -import { arrayMove, SortableContainer, SortableElement, SortableHandle } from "react-sortable-hoc"; import { trans } from "i18n"; import log from "loglevel"; import { Datasource } from "@lowcoder-ee/constants/datasourceConstants"; import DataSourceIcon from "components/DataSourceIcon"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { DndContext } from "@dnd-kit/core"; +import { SortableContext, useSortable } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; const OpenDialogButton = styled.span` &:hover { @@ -421,20 +423,26 @@ const CustomEditText = (props: { ); }; -const DragHandle = SortableHandle(() => <StyledDragIcon />); - -const SortableItem = SortableElement<{ - item: RowItem, - form: FormInstance, -}>((props: { item: RowItem; form: FormInstance }) => { +const SortableItem = (props: { item: RowItem; form: FormInstance; index: number }) => { const { item, form } = props; const { columnName, columnType, compItems } = item; const disabled = !Form.useWatch(["columns", columnName, "enabled"], form); + const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ + id: String(props.index), + }); + return ( - <DataRow disabled={disabled}> + <DataRow + ref={setNodeRef} + disabled={disabled} + style={{ + transform: CSS.Transform.toString(transform), + transition, + }} + > <CellName> <LineWrapper> - <DragHandle /> + <StyledDragIcon {...attributes} {...listeners} /> <FormItem name={["columns", columnName, "enabled"]} valuePropName="checked" @@ -477,12 +485,9 @@ const SortableItem = SortableElement<{ </CellRequired> </DataRow> ); -}); +}; -const SortableBody = SortableContainer<{ - items: RowItem[], - form: FormInstance, -}>((props: { items: RowItem[]; form: FormInstance }) => { +const SortableBody = (props: { items: RowItem[]; form: FormInstance }) => { return ( <DataBody> {props.items.map((t, index) => { @@ -498,7 +503,7 @@ const SortableBody = SortableContainer<{ })} </DataBody> ); -}); +}; function getEmptyText(dataSourceNum: number, tableNum: number, columnNum: number): string { if (dataSourceNum === 0) { @@ -547,13 +552,22 @@ const CreateFormBody = (props: { onCreate: CreateHandler }) => { const dataSourceId: string | undefined = Form.useWatch("dataSourceId", form); const dataSourceItems = useDataSourceItems(); const dataSourceItem = dataSourceItems.find((t) => t.dataSource.id === dataSourceId); + + // Cleanup form on unmount + useEffect(() => { + return () => { + form.resetFields(); + }; + }, [form]); + // default to the first item useEffect(() => { if (!dataSourceItem) { const id = dataSourceItems.length > 0 ? dataSourceItems[0].dataSource.id : undefined; form.setFieldsValue({ dataSourceId: id }); } - }, [dataSourceItems]); + }, [dataSourceItems, dataSourceItem, form]); + // Refetch when changed const dispatch = useDispatch(); useEffect(() => { @@ -565,23 +579,45 @@ const CreateFormBody = (props: { onCreate: CreateHandler }) => { const tableName: string | undefined = Form.useWatch("tableName", form); const tableStructures = useTableStructures(dataSourceId); const tableStructure = tableStructures.find((t) => t.name === tableName); + // default to the first one useEffect(() => { if (!tableStructure) { const name = tableStructures.length > 0 ? tableStructures[0].name : undefined; form.setFieldsValue({ tableName: name }); } - }, [tableStructures]); + }, [tableStructures, tableStructure, form]); + // Columns of the data table, saved to support drag and drop const [items, setItems] = useState<RowItem[]>([]); const dataSourceTypeConfig = dataSourceItem?.typeConfig; + useEffect(() => { const { initItems, initColumns } = getInitItemsAndColumns(dataSourceTypeConfig, tableStructure); // Set the initial value by the method. Because if another table has the same column name, setting via initialValue is invalid. form.setFieldsValue({ columns: initColumns }); setItems(initItems); - }, [dataSourceTypeConfig, tableStructure]); + }, [dataSourceTypeConfig, tableStructure, form]); + + const handleDragEnd = useCallback((e: { active: { id: string }; over: { id: string } | null }) => { + if (!e.over) { + return; + } + const fromIndex = Number(e.active.id); + const toIndex = Number(e.over.id); + if (fromIndex < 0 || toIndex < 0 || fromIndex === toIndex) { + return; + } + + const newData = [...items]; + const [movedItem] = newData.splice(fromIndex, 1); + newData.splice(toIndex, 0, movedItem); + + setItems(newData); + }, [items]); + const emptyText = getEmptyText(dataSourceItems.length, tableStructures.length, items.length); + return ( <> <Form form={form} preserve={false}> @@ -633,16 +669,18 @@ const CreateFormBody = (props: { onCreate: CreateHandler }) => { <CellComp $head={true}>{trans("formComp.compType")}</CellComp> <CellRequired $head={true}>{trans("formComp.required")}</CellRequired> </HeaderRow> - <SortableBody - items={items} - form={form} - useDragHandle - onSortEnd={({ oldIndex, newIndex }) => { - if (oldIndex !== newIndex) { - setItems(arrayMove(items, oldIndex, newIndex)); - } - }} - /> + <DndContext + onDragEnd={handleDragEnd} + > + <SortableContext + items={items.map((_, itemIdx) => String(itemIdx))} + > + <SortableBody + items={items} + form={form} + /> + </SortableContext> + </DndContext> <ModalFooterWrapper> <TacoButton buttonType="primary" @@ -661,27 +699,40 @@ const CreateFormBody = (props: { onCreate: CreateHandler }) => { export const CreateForm = (props: { onCreate: CreateHandler }) => { const [visible, setVisible] = useState(false); + + const handleMouseDown = useCallback((e: React.MouseEvent) => { + setVisible(true); + e.stopPropagation(); + }, []); + + const handleKeyDown = useCallback((e: React.KeyboardEvent) => { + e.stopPropagation(); + }, []); + + const handleClick = useCallback((e: React.MouseEvent) => { + e.stopPropagation(); + }, []); + + const handleCancel = useCallback(() => { + setVisible(false); + }, []); + return ( <> - <OpenDialogButton - onMouseDown={(e) => { - setVisible(true); - e.stopPropagation(); - }} - > + <OpenDialogButton onMouseDown={handleMouseDown}> {trans("formComp.openDialogButton")} </OpenDialogButton> <div - onKeyDown={(e) => e.stopPropagation()} - onMouseDown={(e) => e.stopPropagation()} - onClick={(e) => e.stopPropagation()} + onKeyDown={handleKeyDown} + onMouseDown={handleMouseDown} + onClick={handleClick} > <CustomModal open={visible} - destroyOnClose={true} + destroyOnHidden={true} title={trans("formComp.generateForm")} footer={null} - onCancel={() => setVisible(false)} + onCancel={handleCancel} width="600px" children={<CreateFormBody {...props} />} styles={{ body: {padding: 0} }} diff --git a/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx b/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx index 1d2ac87bbc..e0fce300cf 100644 --- a/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/formComp/formComp.tsx @@ -60,6 +60,7 @@ import { messageInstance } from "lowcoder-design/src/components/GlobalInstances" import { styled } from "styled-components"; import { styleControl } from "@lowcoder-ee/comps/controls/styleControl"; import { AnimationStyle } from "@lowcoder-ee/comps/controls/styleControlConstants"; +import { StringControl } from "comps/controls/codeControl"; const FormWrapper = styled.div` height: 100%; @@ -80,7 +81,8 @@ const childrenMap = { disableSubmit: BoolCodeControl, loading: BoolCodeControl, onEvent: eventHandlerControl(eventOptions), - animationStyle: styleControl(AnimationStyle) + animationStyle: styleControl(AnimationStyle), + invalidFormMessage: StringControl }; type FormProps = TriContainerViewProps & @@ -167,14 +169,18 @@ function onCreate( const BodyPlaceholder = (props: FormProps) => { const editorState = useContext(EditorContext); const formName = useContext(CompNameContext); + + const handleCreate = (data: CreateData) => { + const result = onCreate(data, props, editorState, formName); + return Promise.resolve(result); + }; + return ( <ContainerPlaceholder> {trans("formComp.containerPlaceholder")} <br /> <CreateForm - onCreate={(data: CreateData) => - Promise.resolve(onCreate(data, props, editorState, formName)) - } + onCreate={handleCreate} /> </ContainerPlaceholder> ); @@ -230,6 +236,7 @@ const FormBaseComp = (function () { {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( <Section name={sectionNames.advanced}> {children.initialData.propertyView({ label: trans("formComp.initialData") })} + {children.invalidFormMessage.propertyView({ label: trans("formComp.invalidFormMessage") })} </Section> )} @@ -363,7 +370,8 @@ let FormTmpComp = class extends FormBaseComp implements IForm { return Promise.resolve(); }); } else { - messageInstance.error(trans("formComp.notValidForm")); + const customMessage = this.children.invalidFormMessage.getView(); + messageInstance.error(customMessage || trans("formComp.notValidForm")); return Promise.reject("formComp.notValidForm"); } } diff --git a/client/packages/lowcoder/src/comps/comps/formComp/formDataConstants.tsx b/client/packages/lowcoder/src/comps/comps/formComp/formDataConstants.tsx index fae531ae05..dbc23e845b 100644 --- a/client/packages/lowcoder/src/comps/comps/formComp/formDataConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/formComp/formDataConstants.tsx @@ -2,7 +2,7 @@ import { RecordConstructorToComp } from "lowcoder-core"; import { StringControl } from "comps/controls/codeControl"; import { CompNameContext, EditorContext } from "comps/editorState"; import { Section } from "lowcoder-design"; -import { ReactNode } from "react"; +import { ReactNode, useContext, useMemo } from "react"; import { trans } from "i18n"; export interface IForm { @@ -17,24 +17,26 @@ export const formDataChildren = { type FormDataComp = RecordConstructorToComp<typeof formDataChildren>; -export const FormDataPropertyView = (children: FormDataComp) => ( - <EditorContext.Consumer> - {(editorState) => ( - <CompNameContext.Consumer> - {(name) => ( - <> - {editorState?.findUIParentContainer(name, "form") && ( - <Section name={trans("form")}> - {children.formDataKey.propertyView({ - label: trans("formComp.name"), - placeholder: name, - tooltip: trans("formComp.nameTooltip"), - })} - </Section> - )} - </> - )} - </CompNameContext.Consumer> - )} - </EditorContext.Consumer> -); +export const FormDataPropertyView = (children: FormDataComp) => { + const editorState = useContext(EditorContext); + const name = useContext(CompNameContext); + + const isFormParent = useMemo(() => + editorState?.findUIParentContainer(name, "form"), + [editorState, name] + ); + + if (!isFormParent) { + return null; + } + + return ( + <Section name={trans("form")}> + {children.formDataKey.propertyView({ + label: trans("formComp.name"), + placeholder: name, + tooltip: trans("formComp.nameTooltip"), + })} + </Section> + ); +}; diff --git a/client/packages/lowcoder/src/comps/comps/gridLayoutComp/canvasView.tsx b/client/packages/lowcoder/src/comps/comps/gridLayoutComp/canvasView.tsx index 4b0f769aad..c5bb0cced9 100644 --- a/client/packages/lowcoder/src/comps/comps/gridLayoutComp/canvasView.tsx +++ b/client/packages/lowcoder/src/comps/comps/gridLayoutComp/canvasView.tsx @@ -1,6 +1,6 @@ import { EditorContext } from "comps/editorState"; import { EditorContainer } from "pages/common/styledComponent"; -import React, { Profiler, useContext, useMemo, useRef, useState } from "react"; +import React, { Profiler, useContext, useMemo, useRef, useState, useEffect, useCallback } from "react"; import styled from "styled-components"; import { profilerCallback } from "util/cacheUtils"; import { @@ -97,11 +97,70 @@ export const CanvasView = React.memo((props: ContainerBaseProps) => { const isDefaultTheme = useContext(ThemeContext)?.themeId === 'default-theme-id'; const isPreviewTheme = useContext(ThemeContext)?.themeId === 'preview-theme'; const editorState = useContext(EditorContext); - const [dragSelectedComps, setDragSelectedComp] = useState(EmptySet); - const scrollContainerRef = useRef(null); + const [dragSelectedComps, setDragSelectedComp] = useState<Set<string>>(new Set()); + const currentSelectionRef = useRef<Set<string>>(new Set()); + const scrollContainerRef = useRef<HTMLDivElement>(null); + const mountedRef = useRef(true); const appSettings = editorState.getAppSettings(); const maxWidthFromHook = useMaxWidth(); + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setDragSelectedComp(new Set()); + currentSelectionRef.current = new Set(); + }; + }, []); + + // Keep ref in sync with state + useEffect(() => { + currentSelectionRef.current = dragSelectedComps; + }, [dragSelectedComps]); + + // Memoized drag selection handler + const handleDragSelection = useCallback((checkSelectFunc?: CheckSelectFn) => { + if (!mountedRef.current) return new Set<string>(); + + const selectedComps = new Set<string>(); + if (checkSelectFunc) { + Object.values(props.layout).forEach((layoutItem) => { + const key = layoutItem.i; + if (props.items.hasOwnProperty(key)) { + const item = props.items[key]; + const name = item.name; + const element = document.getElementById(key); + if (element) { + checkSelectFunc( + element as HTMLDivElement, + (result) => (result ? selectedComps.add(name) : selectedComps.delete(name)) + ); + } + } + }); + } + return selectedComps; + }, [props.items, props.layout]); + + const handleMouseMove = useCallback((checkSelectFunc: CheckSelectFn) => { + if (mountedRef.current) { + const selectedName = handleDragSelection(checkSelectFunc); + setDragSelectedComp(new Set(selectedName)); + } + }, [handleDragSelection]); + + const handleMouseUp = useCallback(() => { + if (mountedRef.current) { + const currentSelection = new Set(currentSelectionRef.current); + setDragSelectedComp(new Set()); + editorState.setSelectedCompNames(currentSelection); + } + }, [editorState]); + + const handleMouseDown = useCallback(() => { + setDragSelectedComp(new Set()); + }, []); + const maxWidth = useMemo( () => appSettings.maxWidth ?? maxWidthFromHook, [appSettings, maxWidthFromHook] @@ -291,17 +350,9 @@ export const CanvasView = React.memo((props: ContainerBaseProps) => { $bgImagePosition={bgImagePosition} > <DragSelector - onMouseDown={() => { - setDragSelectedComp(EmptySet); - }} - onMouseUp={() => { - editorState.setSelectedCompNames(dragSelectedComps); - setDragSelectedComp(EmptySet); - }} - onMouseMove={(checkSelectFunc) => { - const selectedName = getDragSelectedNames(props.items, props.layout, checkSelectFunc); - setDragSelectedComp(selectedName); - }} + onMouseDown={handleMouseDown} + onMouseUp={handleMouseUp} + onMouseMove={handleMouseMove} > <Profiler id="Panel" onRender={profilerCallback}> <InnerGrid @@ -318,7 +369,7 @@ export const CanvasView = React.memo((props: ContainerBaseProps) => { positionParams={positionParams} emptyRows={defaultRowCount} minHeight={defaultMinHeight} - extraHeight={defaultRowCount === DEFAULT_ROW_COUNT ? rootContainerExtraHeight : undefined } + extraHeight={defaultRowCount === DEFAULT_ROW_COUNT ? rootContainerExtraHeight : undefined} /> </Profiler> </DragSelector> diff --git a/client/packages/lowcoder/src/comps/comps/gridLayoutComp/dragSelector.tsx b/client/packages/lowcoder/src/comps/comps/gridLayoutComp/dragSelector.tsx index 79e0173022..8f8345c9ca 100644 --- a/client/packages/lowcoder/src/comps/comps/gridLayoutComp/dragSelector.tsx +++ b/client/packages/lowcoder/src/comps/comps/gridLayoutComp/dragSelector.tsx @@ -1,5 +1,5 @@ import { Layers } from "constants/Layers"; -import React, { ReactNode } from "react"; +import React, { ReactNode, useCallback, useRef, useEffect } from "react"; export type CheckSelectFn = ( item?: HTMLDivElement | null, @@ -29,154 +29,152 @@ interface SectionState { mouseDown: boolean; selectionBox?: Rect; startPoint?: Point; + appendMode: boolean; } -const InitialState = { +const createInitialState = (): SectionState => ({ mouseDown: false, appendMode: false, selectionBox: undefined, startPoint: undefined, -}; - -class DragSelectorComp extends React.Component<SectionProps, SectionState> { - private readonly selectAreaRef: React.RefObject<HTMLDivElement>; - - constructor(props: SectionProps) { - super(props); - this.selectAreaRef = React.createRef<HTMLDivElement>(); - this.state = InitialState; - this._onMouseMove = this._onMouseMove.bind(this); - this._onMouseUp = this._onMouseUp.bind(this); - } - - _onMouseDown(e: React.MouseEvent<HTMLDivElement>) { - if (e.button === 2 || e.nativeEvent.which === 2) { - return; - } - let nextState: SectionState = { mouseDown: false }; - nextState.mouseDown = true; - nextState.startPoint = { - x: e.pageX - (this.selectAreaRef.current?.getBoundingClientRect().left ?? 0), - y: e.pageY - (this.selectAreaRef.current?.getBoundingClientRect().top ?? 0), +}); + +export const DragSelector = React.memo((props: SectionProps) => { + const selectAreaRef = useRef<HTMLDivElement>(null); + const stateRef = useRef<SectionState>(createInitialState()); + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + // Clean up any remaining event listeners + window.document.removeEventListener("mousemove", handleMouseMove); + window.document.removeEventListener("mouseup", handleMouseUp); }; - this.setState(nextState); - window.document.addEventListener("mousemove", this._onMouseMove); - window.document.addEventListener("mouseup", this._onMouseUp); - this.props.onMouseDown(); - } - - _onMouseUp() { - window.document.removeEventListener("mousemove", this._onMouseMove); - window.document.removeEventListener("mouseup", this._onMouseUp); - this.props.onMouseUp(); - this.setState(InitialState); - } - - _onMouseMove(e: MouseEvent) { - if (this.state.mouseDown) { - let endPoint = { - x: e.pageX - (this.selectAreaRef.current?.getBoundingClientRect().left ?? 0), - y: e.pageY - (this.selectAreaRef.current?.getBoundingClientRect().top ?? 0), - }; - this.setState({ - selectionBox: this._calculateSelectionBox(this.state.startPoint, endPoint), - }); - } - // Disable selection of text during mouse movement - var selection = window.getSelection(); - selection!.removeAllRanges(); - selection = null; - this.props.onMouseMove(this.childrenViewCheckFunc); - } - - rectIntersect = ( + }, []); + + const rectIntersect = useCallback(( selectionBox: Rect | undefined, item: HTMLElement | null | undefined ): boolean => { - if (!selectionBox || !item) { - return false; - } + if (!selectionBox || !item || !selectAreaRef.current) return false; + + const containerRect = selectAreaRef.current.getBoundingClientRect(); const itemBox = { - top: - item.getBoundingClientRect().top - - (this.selectAreaRef.current?.getBoundingClientRect().top ?? 0), - left: - item.getBoundingClientRect().left - - (this.selectAreaRef.current?.getBoundingClientRect().left ?? 0), + top: item.getBoundingClientRect().top - containerRect.top, + left: item.getBoundingClientRect().left - containerRect.left, width: item.getBoundingClientRect().width, height: item.getBoundingClientRect().height, }; + return ( selectionBox.left <= itemBox.left + itemBox.width && selectionBox.left + selectionBox.width >= itemBox.left && selectionBox.top <= itemBox.top + itemBox.height && selectionBox.top + selectionBox.height >= itemBox.top ); - }; + }, []); + + const calculateSelectionBox = useCallback((startPoint: Point | undefined, endPoint: Point) => { + if (!stateRef.current.mouseDown || !startPoint || !endPoint) return undefined; + + return { + left: Math.min(startPoint.x, endPoint.x), + top: Math.min(startPoint.y, endPoint.y), + width: Math.abs(startPoint.x - endPoint.x), + height: Math.abs(startPoint.y - endPoint.y), + }; + }, []); - childrenViewCheckFunc = ( + const childrenViewCheckFunc = useCallback(( item?: HTMLDivElement | null, afterCheck?: (checkResult: boolean) => void ) => { - const result = this.rectIntersect(this.state.selectionBox, item); - if (!!afterCheck) { + const result = rectIntersect(stateRef.current.selectionBox, item); + if (afterCheck) { afterCheck(result); } return result; - }; + }, [rectIntersect]); - render() { - return ( - <div - ref={this.selectAreaRef} - onMouseDown={this._onMouseDown.bind(this)} - style={{ position: "relative" }} - > - {this.props.children} - {this.renderSelectionBox()} - </div> - ); - } - - renderSelectionBox() { - if ( - !this.state.mouseDown || - !this.state.startPoint || - !this.state.selectionBox || - !this.selectAreaRef.current - ) { + const handleMouseMove = useCallback((e: MouseEvent) => { + if (!mountedRef.current || !stateRef.current.mouseDown) return; + + const endPoint = { + x: e.pageX - (selectAreaRef.current?.getBoundingClientRect().left ?? 0), + y: e.pageY - (selectAreaRef.current?.getBoundingClientRect().top ?? 0), + }; + + stateRef.current = { + ...stateRef.current, + selectionBox: calculateSelectionBox(stateRef.current.startPoint, endPoint), + }; + + // Clean up selection properly + const selection = window.getSelection(); + if (selection) { + selection.removeAllRanges(); + } + + props.onMouseMove(childrenViewCheckFunc); + }, [props.onMouseMove, calculateSelectionBox, childrenViewCheckFunc]); + + const handleMouseUp = useCallback(() => { + window.document.removeEventListener("mousemove", handleMouseMove); + window.document.removeEventListener("mouseup", handleMouseUp); + props.onMouseUp(); + stateRef.current = createInitialState(); + }, [handleMouseMove, props.onMouseUp]); + + const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => { + if (e.button === 2 || e.nativeEvent.which === 2) return; + + const startPoint = { + x: e.pageX - (selectAreaRef.current?.getBoundingClientRect().left ?? 0), + y: e.pageY - (selectAreaRef.current?.getBoundingClientRect().top ?? 0), + }; + + stateRef.current = { + mouseDown: true, + startPoint, + selectionBox: undefined, + appendMode: false, + }; + + window.document.addEventListener("mousemove", handleMouseMove); + window.document.addEventListener("mouseup", handleMouseUp); + props.onMouseDown(); + }, [handleMouseMove, handleMouseUp, props.onMouseDown]); + + const renderSelectionBox = useCallback(() => { + if (!stateRef.current.mouseDown || !stateRef.current.startPoint || !stateRef.current.selectionBox || !selectAreaRef.current) { return null; } + return ( <div style={{ background: "rgba(51, 119, 255, 0.1)", position: "absolute", zIndex: Layers.dragSelectBox, - left: this.state.selectionBox.left, - top: this.state.selectionBox.top, - height: this.state.selectionBox.height, - width: this.state.selectionBox.width, + left: stateRef.current.selectionBox.left, + top: stateRef.current.selectionBox.top, + height: stateRef.current.selectionBox.height, + width: stateRef.current.selectionBox.width, }} /> ); - } - - _calculateSelectionBox(startPoint: Point | undefined, endPoint: Point) { - if (!this.state.mouseDown || !startPoint || !endPoint) { - return undefined; - } - let left = Math.min(startPoint.x, endPoint.x); - let top = Math.min(startPoint.y, endPoint.y); - let width = Math.abs(startPoint.x - endPoint.x); - let height = Math.abs(startPoint.y - endPoint.y); - return { - left: left, - top: top, - width: width, - height: height, - }; - } -} - -export const DragSelector = React.memo(DragSelectorComp); + }, []); + + return ( + <div + ref={selectAreaRef} + onMouseDown={handleMouseDown} + style={{ position: "relative" }} + > + {props.children} + {renderSelectionBox()} + </div> + ); +}); diff --git a/client/packages/lowcoder/src/comps/comps/iconComp.tsx b/client/packages/lowcoder/src/comps/comps/iconComp.tsx index f93b0eb2a3..4ae9dcdd98 100644 --- a/client/packages/lowcoder/src/comps/comps/iconComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/iconComp.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import styled, { css } from "styled-components"; import { RecordConstructorToView } from "lowcoder-core"; import { styleControl } from "comps/controls/styleControl"; @@ -22,7 +22,7 @@ import { hiddenPropertyView, showDataLoadingIndicatorsPropertyView } from "comps import { trans } from "i18n"; import { NumberControl } from "comps/controls/codeControl"; import { IconControl } from "comps/controls/iconControl"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { AutoHeightControl } from "../controls/autoHeightControl"; import { clickEvent, @@ -30,10 +30,14 @@ import { } from "../controls/eventHandlerControl"; import { useContext } from "react"; import { EditorContext } from "comps/editorState"; +import { AssetType, IconscoutControl } from "@lowcoder-ee/comps/controls/iconscoutControl"; +import { dropdownControl } from "../controls/dropdownControl"; const Container = styled.div<{ + $sourceMode: string; $style: IconStyleType | undefined; - $animationStyle:AnimationStyleType}>` + $animationStyle:AnimationStyleType; +}>` display: flex; align-items: center; justify-content: center; @@ -57,14 +61,30 @@ const Container = styled.div<{ pointer-events: auto; } `} + ${(props) => props.$sourceMode === 'asset-library' && ` + img { + max-width: 100%; + max-height: 100%; + width: 100%; + height: 100%; + object-fit: contain; + } + `} `; const EventOptions = [clickEvent] as const; +const ModeOptions = [ + { label: "Standard", value: "standard" }, + { label: "Asset Library", value: "asset-library" }, +] as const; + const childrenMap = { style: styleControl(IconStyle,'style'), animationStyle: styleControl(AnimationStyle,'animationStyle'), + sourceMode: dropdownControl(ModeOptions, "standard"), icon: withDefault(IconControl, "/icon:antd/homefilled"), + iconScoutAsset: IconscoutControl(AssetType.ICON), autoHeight: withDefault(AutoHeightControl, "auto"), iconSize: withDefault(NumberControl, 20), onEvent: eventHandlerControl(EventOptions), @@ -87,27 +107,40 @@ const IconView = (props: RecordConstructorToView<typeof childrenMap>) => { setHeight(container?.clientHeight ?? 0); }; + useResizeDetector({ + targetRef: conRef, + onResize, + }); + + const style = useMemo(() => { + if (props.sourceMode === 'standard') { + return { + fontSize: props.autoHeight + ? `${height < width ? height : width}px` + : props.iconSize, + background: props.style.background, + } + } + return { + width: props.autoHeight ? '' : props.iconSize, + background: props.style.background, + } + }, [width, height, props.autoHeight, props.iconSize, props.sourceMode, props.style.background]); + return ( - <ReactResizeDetector - onResize={onResize} - render={() => ( - <Container - ref={conRef} - $style={props.style} - $animationStyle={props.animationStyle} - style={{ - fontSize: props.autoHeight - ? `${height < width ? height : width}px` - : props.iconSize, - background: props.style.background, - }} - onClick={() => props.onEvent("click")} - > - {props.icon} - </Container> - )} + <Container + ref={conRef} + $style={props.style} + $sourceMode={props.sourceMode} + $animationStyle={props.animationStyle} + style={style} + onClick={() => props.onEvent("click")} > - </ReactResizeDetector> + { props.sourceMode === 'standard' + ? (props.icon || '') + : <img src={props.iconScoutAsset.value} /> + } + </Container> ); }; @@ -117,11 +150,17 @@ let IconBasicComp = (function () { .setPropertyViewFn((children) => ( <> <Section name={sectionNames.basic}> - {children.icon.propertyView({ + { children.sourceMode.propertyView({ + label: "", + radioButton: true + })} + {children.sourceMode.getView() === 'standard' && children.icon.propertyView({ label: trans("iconComp.icon"), IconType: "All", })} - + {children.sourceMode.getView() === 'asset-library' && children.iconScoutAsset.propertyView({ + label: trans("button.icon"), + })} </Section> {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( diff --git a/client/packages/lowcoder/src/comps/comps/imageComp.tsx b/client/packages/lowcoder/src/comps/comps/imageComp.tsx index d78a21d201..ec4190bc6e 100644 --- a/client/packages/lowcoder/src/comps/comps/imageComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/imageComp.tsx @@ -12,9 +12,9 @@ import { withExposingConfigs, } from "../generators/withExposing"; import { RecordConstructorToView } from "lowcoder-core"; -import { useEffect, useRef, useState } from "react"; +import { ReactElement, useEffect, useRef, useState } from "react"; import _ from "lodash"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, @@ -35,6 +35,8 @@ import { useContext } from "react"; import { EditorContext } from "comps/editorState"; import { StringControl } from "../controls/codeControl"; import { PositionControl } from "comps/controls/dropdownControl"; +import { dropdownControl } from "../controls/dropdownControl"; +import { AssetType, IconscoutControl } from "../controls/iconscoutControl"; const Container = styled.div<{ $style: ImageStyleType | undefined, @@ -111,6 +113,10 @@ const getStyle = (style: ImageStyleType) => { }; const EventOptions = [clickEvent] as const; +const ModeOptions = [ + { label: "URL", value: "standard" }, + { label: "Asset Library", value: "asset-library" }, +] as const; const ContainerImg = (props: RecordConstructorToView<typeof childrenMap>) => { const imgRef = useRef<HTMLDivElement>(null); @@ -171,46 +177,51 @@ const ContainerImg = (props: RecordConstructorToView<typeof childrenMap>) => { } }; + useResizeDetector({ + targetRef: conRef, + onResize, + }); + return ( - <ReactResizeDetector - onResize={onResize} - render={() => ( - <Container - ref={conRef} - $style={props.style} - $animationStyle={props.animationStyle} - $clipPath={props.clipPath} - $overflow={props.enableOverflow ? props.overflow : "hidden"} - $positionX={props.positionX} - $positionY={props.positionY} - $enableOverflow={props.enableOverflow} - $aspectRatio={props.aspectRatio || "16 / 9"} - $placement={props.placement} - > - <div - ref={imgRef} - style={ - props.autoHeight ? { width: "100%", height: "100%" } : undefined - } - > - <AntImage - src={props.src.value} - referrerPolicy="same-origin" - draggable={false} - preview={props.supportPreview ? {src: props.previewSrc || props.src.value } : false} - fallback={DEFAULT_IMG_URL} - onClick={() => props.onEvent("click")} - /> - </div> - </Container> - )} + <Container + ref={conRef} + $style={props.style} + $animationStyle={props.animationStyle} + $clipPath={props.clipPath} + $overflow={props.enableOverflow ? props.overflow : "hidden"} + $positionX={props.positionX} + $positionY={props.positionY} + $enableOverflow={props.enableOverflow} + $aspectRatio={props.aspectRatio || "16 / 9"} + $placement={props.placement} > - </ReactResizeDetector> + <div + ref={imgRef} + style={ + props.autoHeight ? { width: "100%", height: "100%" } : undefined + } + > + <AntImage + src={ + props.sourceMode === 'asset-library' + ? props.iconScoutAsset?.value + : props.src.value + } + referrerPolicy="same-origin" + draggable={false} + preview={props.supportPreview ? {src: props.previewSrc || props.src.value } : false} + fallback={DEFAULT_IMG_URL} + onClick={() => props.onEvent("click")} + /> + </div> + </Container> ); }; const childrenMap = { + sourceMode: dropdownControl(ModeOptions, "standard"), src: withDefault(StringStateControl, "https://temp.im/350x400"), + iconScoutAsset: IconscoutControl(AssetType.ILLUSTRATION), onEvent: eventHandlerControl(EventOptions), style: styleControl(ImageStyle , 'style'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), @@ -234,9 +245,14 @@ let ImageBasicComp = new UICompBuilder(childrenMap, (props) => { return ( <> <Section name={sectionNames.basic}> - {children.src.propertyView({ + { children.sourceMode.propertyView({ + label: "", + radioButton: true + })} + {children.sourceMode.getView() === 'standard' && children.src.propertyView({ label: trans("image.src"), })} + {children.sourceMode.getView() === 'asset-library' && children.iconScoutAsset.propertyView({})} </Section> {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( diff --git a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx index 3828e9b01b..4738291683 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonEditorComp.tsx @@ -12,7 +12,7 @@ import { formDataChildren, FormDataPropertyView } from "../formComp/formDataCons import { AnimationStyle, JsonEditorStyle } from "comps/controls/styleControlConstants"; import { styleControl } from "comps/controls/styleControl"; import { migrateOldData, withDefault } from "comps/generators/simpleGenerators"; -import { useRef, useEffect, useContext } from "react"; +import { useRef, useEffect, useContext, useCallback, useMemo } from "react"; import { EditorState, EditorView, @@ -67,7 +67,7 @@ const childrenMap = { value: jsonValueExposingStateControl('value', defaultData), onEvent: ChangeEventHandlerControl, autoHeight: withDefault(AutoHeightControl,'auto'), - showVerticalScrollbar:BoolControl, + showVerticalScrollbar: BoolControl, label: withDefault(LabelControl, {position: 'column'}), style: styleControl(JsonEditorStyle, 'style'), animationStyle: styleControl(AnimationStyle, 'animationStyle'), @@ -77,72 +77,110 @@ const childrenMap = { let JsonEditorTmpComp = (function () { return new UICompBuilder(childrenMap, (props) => { const wrapperRef = useRef<HTMLDivElement>(null); - const view = useRef<EditorViewType | null>(null); - const initialized = useRef(false); - const state = useRef<EditorState | null>(null); - const editContent = useRef<string>(); + const viewRef = useRef<EditorViewType | null>(null); + const initializedRef = useRef(false); + const stateRef = useRef<EditorState | null>(null); + const editContentRef = useRef<string>(); + const mountedRef = useRef(true); + + const handleChange = useCallback((state: EditorState) => { + if (!mountedRef.current) return; + + editContentRef.current = state.doc.toString(); + try { + const value = JSON.parse(state.doc.toString()); + props.value.onChange(value); + props.onEvent("change"); + } catch (error) { + // Invalid JSON - ignore + } + }, [props.value, props.onEvent]); + const { extensions } = useExtensions({ codeType: "PureJSON", language: "json", showLineNum: true, enableClickCompName: false, - onFocus: (focused) => { + onFocus: useCallback((focused: boolean) => { if (focused) { wrapperRef.current?.click(); } - }, - onChange: (state) => { - editContent.current = state.doc.toString(); - try { - const value = JSON.parse(state.doc.toString()); - props.value.onChange(value); - props.onEvent("change"); - } catch (error) {} - }, + }, []), + onChange: handleChange, }); + // Initialize editor state useEffect(() => { - if (!initialized.current && wrapperRef.current) { - state.current = EditorState.create({ + if (!initializedRef.current && wrapperRef.current) { + stateRef.current = EditorState.create({ doc: JSON.stringify(props.value.value, null, 2), extensions, }); } - }, [wrapperRef.current]); + if (wrapperRef.current && viewRef.current && !editContentRef.current) { + const newState = EditorState.create({ + doc: JSON.stringify(props.value.value, null, 2), + extensions, + }); + viewRef.current?.setState(newState); + } + }, [wrapperRef.current, extensions, props.value.value]); + // Create editor view useEffect(() => { - if (state.current&&wrapperRef.current) { - view.current = new EditorView({ state: state.current, parent: wrapperRef.current }); - initialized.current = true; + if (stateRef.current && wrapperRef.current) { + viewRef.current = new EditorView({ + state: stateRef.current, + parent: wrapperRef.current + }); + initializedRef.current = true; } - }, [props.showVerticalScrollbar]) - - if (wrapperRef.current && view.current && !editContent.current) { - const state = EditorState.create({ - doc: JSON.stringify(props.value.value, null, 2), - extensions, - }); - view.current?.setState(state); - } - if (editContent.current) { - editContent.current = undefined; - } + + return () => { + viewRef.current?.destroy(); + viewRef.current = null; + stateRef.current = null; + initializedRef.current = false; + }; + }, [props.showVerticalScrollbar]); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + viewRef.current?.destroy(); + viewRef.current = null; + stateRef.current = null; + initializedRef.current = false; + }; + }, []); + + const handleFocus = useCallback(() => { + editContentRef.current = 'focus'; + }, []); + + const editorContent = useMemo(() => ( + <ScrollBar hideScrollbar={!props.showVerticalScrollbar}> + <Wrapper + ref={wrapperRef} + onFocus={handleFocus} + $height={props.autoHeight} + $showVerticalScrollbar={props.showVerticalScrollbar} + /> + </ScrollBar> + ), [props.showVerticalScrollbar, props.autoHeight, handleFocus]); + return props.label({ style: props.style, animationStyle: props.animationStyle, - children: ( - <ScrollBar hideScrollbar={!props.showVerticalScrollbar}> - <Wrapper - ref={wrapperRef} - onFocus={() => (editContent.current = 'focus')} - $height={props.autoHeight} - $showVerticalScrollbar={props.showVerticalScrollbar} - /> - </ScrollBar> - ), + children: editorContent, }); }) .setPropertyViewFn((children) => { + const editorContext = useContext(EditorContext); + const isLogicMode = editorContext.editorModeStatus === "logic" || editorContext.editorModeStatus === "both"; + const isLayoutMode = editorContext.editorModeStatus === "layout" || editorContext.editorModeStatus === "both"; + return ( <> <Section name={sectionNames.basic}> @@ -151,27 +189,33 @@ let JsonEditorTmpComp = (function () { <FormDataPropertyView {...children} /> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( + {isLogicMode && ( <Section name={sectionNames.interaction}> {children.onEvent.getPropertyView()} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children)} </Section> )} + <Section name={trans('prop.height')}> {children.autoHeight.propertyView({ label: trans('prop.height') })} </Section> - {!children.autoHeight.getView()&&<Section name={sectionNames.layout}> - {children.showVerticalScrollbar.propertyView({label: trans('prop.showVerticalScrollbar')})} - </Section>} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( children.label.getPropertyView() )} - {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( - <> - <Section name={sectionNames.style}>{children.style.getPropertyView()}</Section> - <Section name={sectionNames.animationStyle} hasTooltip={true}>{children.animationStyle.getPropertyView()}</Section> - </> + + {!children.autoHeight.getView() && ( + <Section name={sectionNames.layout}> + {children.showVerticalScrollbar.propertyView({label: trans('prop.showVerticalScrollbar')})} + </Section> )} + {isLayoutMode && ( + <> + {children.label.getPropertyView()} + <Section name={sectionNames.style}>{children.style.getPropertyView()}</Section> + <Section name={sectionNames.animationStyle} hasTooltip={true}> + {children.animationStyle.getPropertyView()} + </Section> + </> + )} </> ); }) @@ -179,7 +223,6 @@ let JsonEditorTmpComp = (function () { })(); JsonEditorTmpComp = migrateOldData(JsonEditorTmpComp, fixOldData); - JsonEditorTmpComp = migrateOldData(JsonEditorTmpComp, fixOldDataSecond); JsonEditorTmpComp = class extends JsonEditorTmpComp { diff --git a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx index c3f93b6e1c..466c37e9f2 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonComp/jsonLottieComp.tsx @@ -2,6 +2,7 @@ import { hiddenPropertyView, showDataLoadingIndicatorsPropertyView } from "comps import { ArrayOrJSONObjectControl, NumberControl, + StringControl, } from "comps/controls/codeControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { BoolControl } from "comps/controls/boolControl"; @@ -9,8 +10,8 @@ import { styleControl } from "comps/controls/styleControl"; import { AnimationStyle, LottieStyle } from "comps/controls/styleControlConstants"; import { trans } from "i18n"; import { Section, sectionNames } from "lowcoder-design"; -import { useContext, lazy, useEffect } from "react"; -import { UICompBuilder, withDefault } from "../../generators"; +import { useContext, lazy, useEffect, useState } from "react"; +import { stateComp, UICompBuilder, withDefault } from "../../generators"; import { NameConfig, NameConfigHidden, @@ -18,10 +19,22 @@ import { } from "../../generators/withExposing"; import { defaultLottie } from "./jsonConstants"; import { EditorContext } from "comps/editorState"; +import { AssetType, IconscoutControl } from "@lowcoder-ee/comps/controls/iconscoutControl"; +import { DotLottie } from "@lottiefiles/dotlottie-react"; +import { AutoHeightControl } from "@lowcoder-ee/comps/controls/autoHeightControl"; +import { useResizeDetector } from "react-resize-detector"; +import { eventHandlerControl } from "@lowcoder-ee/comps/controls/eventHandlerControl"; +import { withMethodExposing } from "@lowcoder-ee/comps/generators/withMethodExposing"; +import { changeChildAction } from "lowcoder-core"; -const Player = lazy( - () => import('@lottiefiles/react-lottie-player') - .then(module => ({default: module.Player})) +// const Player = lazy( +// () => import('@lottiefiles/react-lottie-player') +// .then(module => ({default: module.Player})) +// ); + +const DotLottiePlayer = lazy( + () => import('@lottiefiles/dotlottie-react') + .then(module => ({default: module.DotLottieReact})) ); /** @@ -34,7 +47,11 @@ const animationStartOptions = [ }, { label: trans("jsonLottie.onHover"), - value: "on hover", + value: "hover", + }, + { + label: trans("jsonLottie.onTrigger"), + value: "trigger", }, ] as const; @@ -84,12 +101,48 @@ const speedOptions = [ }, ] as const; +const alignOptions = [ + { label: "None", value: "none" }, + { label: "Fill", value: "fill" }, + { label: "Cover", value: "cover" }, + { label: "Contain", value: "contain" }, + { label: "Fit Width", value: "fit-width" }, + { label: "Fit Height", value: "fit-height" }, +] as const; + +const fitOptions = [ + { label: "Top Left", value: "0,0" }, + { label: "Top Center", value: "0.5,0" }, + { label: "Top Right", value: "1,0" }, + { label: "Center Left", value: "0,0.5" }, + { label: "Center", value: "0.5,0.5" }, + { label: "Center Right", value: "1,0.5" }, + { label: "Bottom Left", value: "0,1" }, + { label: "Bottom Center", value: "0.5,1" }, + { label: "Bottom Right", value: "1,1" }, +] as const; + +const ModeOptions = [ + { label: "Lottie JSON", value: "standard" }, + { label: "Asset Library", value: "asset-library" } +] as const; + +const EventOptions = [ + { label: trans("jsonLottie.load"), value: "load", description: trans("jsonLottie.load") }, + { label: trans("jsonLottie.play"), value: "play", description: trans("jsonLottie.play") }, + { label: trans("jsonLottie.pause"), value: "pause", description: trans("jsonLottie.pause") }, + { label: trans("jsonLottie.stop"), value: "stop", description: trans("jsonLottie.stop") }, + { label: trans("jsonLottie.complete"), value: "complete", description: trans("jsonLottie.complete") }, +] as const;; + let JsonLottieTmpComp = (function () { const childrenMap = { + sourceMode: dropdownControl(ModeOptions, "standard"), value: withDefault( ArrayOrJSONObjectControl, JSON.stringify(defaultLottie, null, 2) ), + iconScoutAsset: IconscoutControl(AssetType.LOTTIE), speed: dropdownControl(speedOptions, "1"), width: withDefault(NumberControl, 100), height: withDefault(NumberControl, 100), @@ -98,11 +151,83 @@ let JsonLottieTmpComp = (function () { animationStart: dropdownControl(animationStartOptions, "auto"), loop: dropdownControl(loopOptions, "single"), keepLastFrame: BoolControl.DEFAULT_TRUE, + autoHeight: withDefault(AutoHeightControl, "auto"), + aspectRatio: withDefault(StringControl, "1/1"), + fit: dropdownControl(alignOptions, "contain"), + align: dropdownControl(fitOptions, "0.5,0.5"), + onEvent: eventHandlerControl(EventOptions), + dotLottieRef: stateComp<any | null>(null), }; - return new UICompBuilder(childrenMap, (props) => { + return new UICompBuilder(childrenMap, (props, dispatch) => { + const [dotLottie, setDotLottie] = useState<DotLottie | null>(null); + + const setLayoutAndResize = () => { + const align = props.align.split(','); + dotLottie?.setLayout({fit: props.fit, align: [Number(align[0]), Number(align[1])]}) + dotLottie?.resize(); + } + + const { ref: wrapperRef } = useResizeDetector({ + onResize: () => { + if (dotLottie) { + setLayoutAndResize(); + } + } + }); + + useEffect(() => { + const onComplete = () => { + props.keepLastFrame && dotLottie?.setFrame(100); + props.onEvent('complete'); + } + + const onLoad = () => { + setLayoutAndResize(); + props.onEvent('load'); + } + + const onPlay = () => { + props.onEvent('play'); + } + + const onPause = () => { + props.onEvent('pause'); + } + + const onStop = () => { + props.onEvent('stop'); + } + + if (dotLottie) { + dotLottie.addEventListener('complete', onComplete); + dotLottie.addEventListener('load', onLoad); + dotLottie.addEventListener('play', onPlay); + dotLottie.addEventListener('pause', onPause); + dotLottie.addEventListener('stop', onStop); + } + + return () => { + if (dotLottie) { + dotLottie.removeEventListener('complete', onComplete); + dotLottie.removeEventListener('load', onLoad); + dotLottie.removeEventListener('play', onPlay); + dotLottie.removeEventListener('pause', onPause); + dotLottie.removeEventListener('stop', onStop); + } + }; + }, [dotLottie, props.keepLastFrame]); + + useEffect(() => { + if (dotLottie) { + setLayoutAndResize(); + } + }, [dotLottie, props.fit, props.align, props.autoHeight]); + return ( <div + ref={wrapperRef} style={{ + height: '100%', padding: `${props.container.margin}`, animation: props.animationStyle.animation, animationDelay: props.animationStyle.animationDelay, @@ -120,22 +245,26 @@ let JsonLottieTmpComp = (function () { rotate: props.container.rotation, }} > - <Player + <DotLottiePlayer key={ [props.speed, props.animationStart, props.loop, props.value, props.keepLastFrame] as any } - keepLastFrame={props.keepLastFrame} - autoplay={props.animationStart === "auto" && true} - hover={props.animationStart === "on hover" && true} + dotLottieRefCallback={(lottieRef) => { + setDotLottie(lottieRef); + dispatch( + changeChildAction("dotLottieRef", lottieRef as any, false) + ) + }} + autoplay={props.animationStart === "auto"} loop={props.loop === "single" ? false : true} speed={Number(props.speed)} - src={props.value} + data={props.sourceMode === 'standard' ? props.value as Record<string, undefined> : undefined} + src={props.sourceMode === 'asset-library' ? props.iconScoutAsset?.value : undefined} style={{ - height: "100%", - width: "100%", - maxWidth: "100%", - maxHeight: "100%", + aspectRatio: props.aspectRatio, }} + onMouseEnter={() => props.animationStart === "hover" && dotLottie?.play()} + onMouseLeave={() => props.animationStart === "hover" && dotLottie?.pause()} /> </div> </div> @@ -145,23 +274,40 @@ let JsonLottieTmpComp = (function () { return ( <> <Section name={sectionNames.basic}> - {children.value.propertyView({ + { children.sourceMode.propertyView({ + label: "", + radioButton: true + })} + {children.sourceMode.getView() === 'standard' && children.value.propertyView({ label: trans("jsonLottie.lottieJson"), })} + {children.sourceMode.getView() === 'asset-library' && children.iconScoutAsset.propertyView({})} </Section> {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( <><Section name={sectionNames.interaction}> + {children.onEvent.getPropertyView()} {children.speed.propertyView({ label: trans("jsonLottie.speed")})} {children.loop.propertyView({ label: trans("jsonLottie.loop")})} {children.animationStart.propertyView({ label: trans("jsonLottie.animationStart")})} - {children.keepLastFrame.propertyView({ label: trans("jsonLottie.keepLastFrame")})} {hiddenPropertyView(children)} + {children.keepLastFrame.propertyView({ label: trans("jsonLottie.keepLastFrame")})} {showDataLoadingIndicatorsPropertyView(children)} </Section> </> )} + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + <Section name={sectionNames.layout}> + {children.autoHeight.getPropertyView()} + {children.aspectRatio.propertyView({ + label: trans("style.aspectRatio"), + })} + {children.align.propertyView({ label: trans("jsonLottie.align")})} + {children.fit.propertyView({ label: trans("jsonLottie.fit")})} + </Section> + )} + {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( <> <Section name={sectionNames.style}> @@ -179,9 +325,43 @@ let JsonLottieTmpComp = (function () { })(); JsonLottieTmpComp = class extends JsonLottieTmpComp { override autoHeight(): boolean { - return false; + return this.children.autoHeight.getView(); } }; + +JsonLottieTmpComp = withMethodExposing(JsonLottieTmpComp, [ + { + method: { + name: "play", + description: trans("jsonLottie.play"), + params: [], + }, + execute: (comp) => { + (comp.children.dotLottieRef.value as unknown as DotLottie)?.play(); + }, + }, + { + method: { + name: "pause", + description: trans("jsonLottie.pause"), + params: [], + }, + execute: (comp) => { + (comp.children.dotLottieRef.value as unknown as DotLottie)?.pause(); + }, + }, + { + method: { + name: "stop", + description: trans("jsonLottie.stop"), + params: [], + }, + execute: (comp) => { + (comp.children.dotLottieRef.value as unknown as DotLottie)?.stop(); + }, + }, +]); + export const JsonLottieComp = withExposingConfigs(JsonLottieTmpComp, [ new NameConfig("value", trans("jsonLottie.valueDesc")), NameConfigHidden, diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/JsonFormsRenderer.tsx b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/JsonFormsRenderer.tsx new file mode 100644 index 0000000000..cbdab8a0ff --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/JsonFormsRenderer.tsx @@ -0,0 +1,689 @@ +import React, { useState, useCallback, useEffect, ReactNode } from "react"; +import { + Form, + Input, + InputNumber, + Switch, + DatePicker, + Select, + Space, + Button, + Slider, + Tabs, + Row, + Col, + Steps, +} from "antd"; +import styled from "styled-components"; +import type { JsonSchema } from "@jsonforms/core"; +import type { JSONSchema7 } from "json-schema"; +import { debounce } from "lodash"; +import dayjs from "dayjs"; +import { trans } from "i18n"; +import type { + JsonFormsUiSchema, + FieldUiSchema, + Layout, + Categorization, + ValidationState, + JsonFormsRendererProps, + Category, + Control +} from "./types"; +import type { SwitchChangeEventHandler } from "antd/es/switch"; +const { TextArea } = Input; + +const Container = styled.div` + .ant-form-item { + margin-bottom: 16px; + } + + .ant-form-item-label { + padding: 0; + font-weight: 600; + } + + .ant-form-item-extra { + min-height: 0px; + } + + .ant-form-item-explain { + line-height: 24px; + } + + .ant-steps { + margin-bottom: 24px; + } + + .stepper-navigation { + margin-top: 24px; + display: flex; + justify-content: space-between; + } +`; + +interface HorizontalLayout { + type: "HorizontalLayout"; + elements: Control[]; +} + +const JsonFormsRenderer: React.FC<JsonFormsRendererProps> = ({ + schema, + data, + onChange, + style, + uiSchema, + onSubmit, + resetAfterSubmit, + validationState: externalValidationState, + onValidationChange, +}) => { + // Local state to handle immediate updates + const [localData, setLocalData] = useState(data); + // Track focused field + const [focusedField, setFocusedField] = useState<string | null>(null); + const [currentStep, setCurrentStep] = useState(0); + const [internalValidationState, setInternalValidationState] = useState<ValidationState>({}); + const [isSubmitted, setIsSubmitted] = useState(false); + + // Use external validation state if provided, otherwise use internal + const validationState = externalValidationState || internalValidationState; + const setValidationState = useCallback((newState: ValidationState | ((prev: ValidationState) => ValidationState)) => { + if (typeof newState === 'function') { + const updatedState = newState(validationState); + setInternalValidationState(updatedState); + onValidationChange?.(updatedState); + } else { + setInternalValidationState(newState); + onValidationChange?.(newState); + } + }, [validationState, onValidationChange]); + + // Update local data when prop data changes + useEffect(() => { + setLocalData(data); + }, [data]); + + // Debounced onChange handler + const debouncedOnChange = useCallback( + debounce((newData: any) => { + onChange(newData); + }, 300), + [onChange] + ); + + const getFieldUiSchema = (path: string): FieldUiSchema | undefined => { + if (!uiSchema) return undefined; + + // For JSONForms UI schema, we need to find the Control element that matches the path + if (uiSchema.type === "HorizontalLayout" && Array.isArray(uiSchema.elements)) { + const control = uiSchema.elements.find((element: any) => { + if (element.type === "Control") { + // Convert the scope path to match our field path + // e.g., "#/properties/multilineString" -> "multilineString" + const scopePath = element.scope?.replace("#/properties/", ""); + return scopePath === path; + } + return false; + }); + return control; + } + + // Fallback to the old path-based lookup for backward compatibility + const pathParts = path.split('.'); + let current: any = uiSchema; + for (const part of pathParts) { + if (current && typeof current === 'object') { + current = current[part]; + } else { + return undefined; + } + } + return current as FieldUiSchema; + }; + + const evaluateRule = (rule: any, data: any): boolean => { + if (!rule) return true; + + const { scope, schema: ruleSchema } = rule.condition; + const path = scope.replace("#/properties/", "").split("/"); + let value = data; + + for (const part of path) { + value = value?.[part]; + } + + return value === ruleSchema.const; + }; + + const shouldShowElement = (element: any): boolean => { + if (!element.rule) return true; + return evaluateRule(element.rule, data); + }; + + const renderLayout = (layout: Layout) => { + if (layout.type === "HorizontalLayout") { + return ( + <Row gutter={16}> + {layout.elements + .filter((element: Control) => shouldShowElement(element)) + .map((element: Control, index: number) => ( + <Col key={index} span={24 / layout.elements.length}> + {renderControl(element)} + </Col> + ))} + </Row> + ); + } + return null; + }; + + const renderControl = (control: Control) => { + // Convert scope path to actual data path + // e.g., "#/properties/address/properties/street" -> "address.street" + const scopePath = control.scope.replace("#/properties/", "").replace("/properties/", "."); + const path = scopePath.split("."); + let fieldSchema: JSONSchema7 | undefined = schema as JSONSchema7; + let value = data; + + // Navigate through the schema to find the correct field schema + for (const part of path) { + if (fieldSchema?.properties) { + fieldSchema = fieldSchema.properties[part] as JSONSchema7 | undefined; + } + if (value && typeof value === 'object') { + value = value[part]; + } + } + + if (!fieldSchema) return null; + + // Use the last part of the path as the field key + const fieldKey = path[path.length - 1]; + // Use the parent path for nested objects + const parentPath = path.slice(0, -1).join("."); + + return renderField( + fieldKey, + fieldSchema, + value, + parentPath + ); + }; + + const renderCategory = (category: Category) => { + if (!shouldShowElement(category)) return null; + + return ( + <div key={category.label}> + {category.elements + .filter((element: Control | Layout) => shouldShowElement(element)) + .map((element: Control | Layout, index: number) => { + if (element.type === "Control") { + return <div key={index}>{renderControl(element as Control)}</div>; + } else if (element.type === "HorizontalLayout") { + return <div key={index}>{renderLayout(element as Layout)}</div>; + } + return null; + })} + </div> + ); + }; + // Add validation function + const validateField = useCallback((path: string, value: any, fieldSchema: any) => { + const errors: string[] = []; + + // Required field validation - check if field name is in schema.required array + const fieldName = path.split('.').pop() || ''; + if (schema.required?.includes(fieldName) && (value === undefined || value === null || value === '')) { + errors.push('This field is required'); + } + + // Type-specific validation + if (value !== undefined && value !== null) { + switch (fieldSchema.type) { + case 'string': + if (fieldSchema.minLength && value.length < fieldSchema.minLength) { + errors.push(`Minimum length is ${fieldSchema.minLength}`); + } + if (fieldSchema.maxLength && value.length > fieldSchema.maxLength) { + errors.push(`Maximum length is ${fieldSchema.maxLength}`); + } + if (fieldSchema.pattern && !new RegExp(fieldSchema.pattern).test(value)) { + errors.push('Invalid format'); + } + break; + case 'number': + case 'integer': + if (fieldSchema.minimum !== undefined && value < fieldSchema.minimum) { + errors.push(`Minimum value is ${fieldSchema.minimum}`); + } + if (fieldSchema.maximum !== undefined && value > fieldSchema.maximum) { + errors.push(`Maximum value is ${fieldSchema.maximum}`); + } + break; + } + } + + return errors; + }, []) + // Helper to get value at a dot-separated path + const getValueAtPath = (obj: any, path: string) => { + if (!path) return obj; + return path.split('.').reduce((acc, part) => (acc ? acc[part] : undefined), obj); + }; + // Update validation state when data changes + useEffect(() => { + if (isSubmitted) { + const newValidationState: ValidationState = {}; + const validateObject = (obj: any, schema: any, path: string = '') => { + if (schema.properties) { + Object.entries(schema.properties).forEach(([key, fieldSchema]: [string, any]) => { + const fullPath = path ? `${path}.${key}` : key; + const value = getValueAtPath(obj, key); + newValidationState[fullPath] = { + errors: validateField(fullPath, getValueAtPath(obj, key), fieldSchema), + touched: true + }; + if (fieldSchema.type === 'object' && fieldSchema.properties) { + validateObject(getValueAtPath(obj, key) || {}, fieldSchema, fullPath); + } + }); + } + }; + validateObject(data, schema); + setValidationState(newValidationState); + } + }, [data, schema, validateField, isSubmitted]); + const handleValueChange = (newValue: any, fieldKey: string, fieldPath?: string) => { + const newData = { ...localData }; + if (fieldPath) { + const pathParts = fieldPath.split("."); + let current = newData; + for (let i = 0; i < pathParts.length; i++) { + if (i === pathParts.length - 1) { + current[pathParts[i]] = { + ...current[pathParts[i]], + [fieldKey]: newValue, + }; + } else { + current = current[pathParts[i]]; + } + } + } else { + newData[fieldKey] = newValue; + } + + setLocalData(newData); + debouncedOnChange(newData); + }; + + const createInputHandler = (fieldKey: string, fieldPath?: string) => { + return (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => { + handleValueChange(e.target.value, fieldKey, fieldPath); + }; + }; + + const createNumberHandler = (fieldKey: string, fieldPath?: string) => { + return (value: number | null) => { + handleValueChange(value, fieldKey, fieldPath); + }; + }; + + const createSwitchHandler = (fieldKey: string, fieldPath?: string) => { + return (checked: boolean) => { + handleValueChange(checked, fieldKey, fieldPath); + }; + }; + + const createArrayHandler = (fieldKey: string, fieldPath?: string) => { + return (newItems: any[]) => { + handleValueChange(newItems, fieldKey, fieldPath); + }; + }; + + const renderField = ( + key: string, + fieldSchema: any, + value: any, + path: string = "" + ): ReactNode => { + const fullPath = path ? `${path}.${key}` : key; + const label = fieldSchema.title || key; + const required = schema.required?.includes(key); + const uiSchemaForField = getFieldUiSchema(fullPath); + const isMultiline = uiSchemaForField?.options?.multi === true; + const isSlider = uiSchemaForField?.options?.slider === true; + const isRestrict = uiSchemaForField?.options?.restrict === true; + const isFocused = focusedField === fullPath; + const fieldValidation = validationState[fullPath]; + const showErrors = isSubmitted && fieldValidation?.touched; + + const handleFocus = () => setFocusedField(fullPath); const handleBlur = () => { + setFocusedField(null); + // Validate field on blur + const errors = validateField(fullPath, value, fieldSchema); + setValidationState(prev => { + const newState = { + ...prev, + [fullPath]: { + errors, + touched: true + } + }; + return newState; + }); + }; + + // Modify Form.Item to include validation + const formItemProps = { + key: fullPath, + label: label, + required: required, + extra: isFocused ? fieldSchema.description : undefined, + validateStatus: (fieldValidation?.touched && fieldValidation?.errors.length ? 'error' : undefined) as "" | "error" | "success" | "warning" | "validating" | undefined, + help: fieldValidation?.touched ? fieldValidation?.errors.join(', ') : undefined, + }; + + // Handle nested objects + if (fieldSchema.type === "object" && fieldSchema.properties) { + return ( + <Form.Item {...formItemProps}> + <Space direction="vertical" style={{ width: "100%" }}> + {Object.entries(fieldSchema.properties).map( + ([subKey, subSchema]: [string, any]) => + renderField(subKey, subSchema, value?.[subKey], fullPath) + )} + </Space> + </Form.Item> + ); + } + + // Handle arrays + if (fieldSchema.type === "array") { + const items = value || []; + return ( + <Form.Item {...formItemProps}> + <Space direction="vertical" style={{ width: "100%" }}> + {items.map((item: any, index: number) => ( + <Space key={index}> + {renderField(`${index}`, fieldSchema.items, item, fullPath)} + <Button + type="text" + danger + onClick={() => { + const newItems = [...items]; + newItems.splice(index, 1); + handleValueChange(newItems, key, fullPath); + }} + > + Remove + </Button> + </Space> + ))} + <Button type="dashed" onClick={() => handleValueChange([...items, ""], key, fullPath)}> + Add Item + </Button> + </Space> + </Form.Item> + ); + } + + // Handle different field types + switch (fieldSchema.type) { + case "string": + if (fieldSchema.format === "date") { + return ( + <Form.Item {...formItemProps}> + <DatePicker + style={{ width: "100%" }} + value={value ? dayjs(value).isValid() ? dayjs(value) : null : null} + onChange={(date) => { + if (date && date.isValid()) { + handleValueChange(date.format('YYYY-MM-DD'), key, path); + } else { + handleValueChange(null, key, path); + } + }} + onFocus={handleFocus} + onBlur={handleBlur} + format="YYYY-MM-DD" + allowClear={true} + inputReadOnly={true} + disabledDate={(current) => { + // Disable future dates + return current && current.isAfter(dayjs().endOf('day')); + }} + picker="date" + /> + </Form.Item> + ); + } + if (fieldSchema.enum) { + return ( + <Form.Item {...formItemProps}> + <Select + style={{ width: "100%" }} + value={value} + onChange={(newValue) => handleValueChange(newValue, key, path)} + onFocus={handleFocus} + onBlur={handleBlur} + options={fieldSchema.enum.map((option: string) => ({ + label: option, + value: option, + }))} + /> + </Form.Item> + ); + } + // Check if this field should be multiline + if (isMultiline) { + return ( + <Form.Item {...formItemProps}> + <TextArea + value={value || ""} + onChange={createInputHandler(key, path)} + onFocus={handleFocus} + onBlur={handleBlur} + autoComplete="off" + spellCheck={false} + autoSize={{ minRows: 3, maxRows: 6 }} + maxLength={isRestrict ? fieldSchema.maxLength : undefined} + /> + </Form.Item> + ); + } + return ( + <Form.Item {...formItemProps}> + <Input + value={value || ""} + onChange={createInputHandler(key, path)} + onFocus={handleFocus} + onBlur={handleBlur} + autoComplete="off" + spellCheck={false} + maxLength={isRestrict ? fieldSchema.maxLength : undefined} + /> + </Form.Item> + ); + + case "number": + case "integer": + return ( + <Form.Item {...formItemProps}> + {isSlider ? ( + <Slider + style={{ width: "100%" }} + min={fieldSchema.minimum} + max={fieldSchema.maximum} + value={value} + onChange={createNumberHandler(key, path)} + onFocus={handleFocus} + onBlur={handleBlur} + /> + ) : ( + <InputNumber + style={{ width: "100%" }} + value={value} + onChange={createNumberHandler(key, path)} + onFocus={handleFocus} + onBlur={handleBlur} + min={fieldSchema.minimum} + max={fieldSchema.maximum} + controls={false} + formatter={(value) => + `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ",") + } + parser={(value: string | undefined) => { + if (!value) return NaN; + const parsed = value.replace(/\$\s?|,*/g, ""); + const num = Number(parsed); + return isNaN(num) ? NaN : num; + }} + /> + )} + </Form.Item> + ); + + case "boolean": + return ( + <Form.Item {...formItemProps} valuePropName="checked"> + <div onFocus={handleFocus} onBlur={handleBlur}> + <Switch + checked={value} + onChange={createSwitchHandler(key, path)} + /> + </div> + </Form.Item> + ); + + default: + return ( + <Form.Item {...formItemProps}> + <Input + value={value || ""} + onChange={createInputHandler(key, path)} + onFocus={handleFocus} + onBlur={handleBlur} + autoComplete="off" + spellCheck={false} + /> + </Form.Item> + ); + } + }; + const handleSubmit = () => { + setIsSubmitted(true); + + // Check if there are any validation errors + const hasErrors = Object.values(validationState).some((state: ValidationState[string]) => state.errors.length); + if (!hasErrors && onSubmit) { + onSubmit(); + if (resetAfterSubmit) { + setCurrentStep(0); + setIsSubmitted(false); + setValidationState({}); + } + } + }; + + if (uiSchema?.type === "Categorization") { + const categorization = uiSchema as Categorization; + const variant = categorization.options?.variant || "tabs"; + const visibleCategories = categorization.elements.filter((category: Category) => shouldShowElement(category)); + const isLastStep = currentStep === visibleCategories.length - 1; + + const handleNext = () => { + if (currentStep < visibleCategories.length - 1) { + setCurrentStep(currentStep + 1); + } + }; + + const handlePrev = () => { + if (currentStep > 0) { + setCurrentStep(currentStep - 1); + } + }; + + if (variant === "stepper") { + return ( + <Container style={style}> + <Steps + current={currentStep} + items={visibleCategories.map((category) => ({ + title: category.i18n ? trans(category.i18n) : (category.label || ''), + description: category.elements.length > 0 ? + `${category.elements.length} field${category.elements.length > 1 ? 's' : ''}` : + undefined + }))} + /> + <div> + {renderCategory(visibleCategories[currentStep])} + </div> + <div className="stepper-navigation"> + <Button + onClick={handlePrev} + disabled={currentStep === 0} + > + {trans("previous")} + </Button> + {isLastStep ? ( + <Button + type="primary" + onClick={handleSubmit} + > + {trans("submit")} + </Button> + ) : ( + <Button + type="primary" + onClick={handleNext} + > + {trans("next")} + </Button> + )} + </div> + </Container> + ); + } + + if (variant === "tabs") { + return ( + <Container style={style}> + <Tabs + activeKey={String(currentStep)} + onChange={(key) => setCurrentStep(parseInt(key))} + items={visibleCategories.map((category, index) => ({ + key: String(index), + label: category.i18n ? trans(category.i18n) : (category.label || ''), + children: renderCategory(category), + }))} + /> + </Container> + ); + } + } + + // Fallback to default rendering if not a categorization + return ( + <Container style={style}> + <Form layout="vertical"> + {Object.entries(schema.properties || {}).map( + ([key, fieldSchema]: [string, any]) => + renderField(key, fieldSchema, localData?.[key]) + )} + <Form.Item> + <Button + type="primary" + onClick={handleSubmit} + style={{ float: "right" }} + > + {trans("event.submit")} + </Button> + </Form.Item> + </Form> + </Container> + ); +}; + +export default React.memo(JsonFormsRenderer); diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/ObjectFieldTemplate.tsx b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/ObjectFieldTemplate.tsx index c03a436c90..846b0d5aff 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/ObjectFieldTemplate.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/ObjectFieldTemplate.tsx @@ -1,7 +1,13 @@ import React, { useEffect, useRef, useState } from "react"; -import { Row, Col, Tabs } from 'antd'; -import { ObjectFieldTemplateProps, getTemplate, getUiOptions, descriptionId, titleId, canExpand } from '@rjsf/utils'; -import { ConfigConsumer } from 'antd/es/config-provider/context'; +import { Row, Col, Tabs } from "antd"; +import { + ObjectFieldTemplateProps, + getTemplate, + getUiOptions, + descriptionId, + canExpand, +} from "@rjsf/utils"; +import { ConfigConsumer } from "antd/es/config-provider/context"; import { useContainerWidth } from "./jsonSchemaFormComp"; import styled from "styled-components"; import TabPane from "antd/es/tabs/TabPane"; @@ -47,7 +53,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { const getLegendStyle = (level: number): React.CSSProperties => { switch (level) { case 0: - return { fontSize: "16px", fontWeight: "bold", marginBottom: "8px" }; // Form Title + return { fontSize: "16px", fontWeight: "bold", marginBottom: "24px" }; // Form Title case 1: return { fontSize: "14px", fontWeight: "600", marginBottom: "6px" }; // Section Title default: @@ -63,7 +69,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { lg: 12, xl: 8, }; - + if (typeof colSpan === "number") { return { span: colSpan }; } else if (typeof colSpan === "object") { @@ -81,7 +87,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { } return { span: 24 }; // Default span }; - + const getFieldRenderer = (type: string) => { const typeMap: Record<string, string> = { string: "StringField", // Handles strings @@ -95,11 +101,11 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { oneOf: "OneOfField", // Handles oneOf schemas schema: "SchemaField", }; - + const fieldName = typeMap[type]; return fieldName ? registry.fields[fieldName] : undefined; }; - + const renderSingleLevel = (level : number) => { return ( <Row gutter={rowGutter}> @@ -108,14 +114,17 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { const colSpan = isArray ? { span: 24 } : calculateResponsiveColSpan(uiSchema?.[prop.name] || {}); - + return ( <Col key={prop.name} {...colSpan}> {/* Render legend for array fields */} {isArray && ( - <><br /><legend style={getLegendStyle(level)}> - {prop.content.props.schema.title} - </legend></> + <> + <br /> + <legend style={getLegendStyle(level)}> + {prop.content.props.schema.title} + </legend> + </> )} {/* Render field content */} {prop.content} @@ -139,8 +148,13 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { const colSpan = calculateResponsiveColSpan(field.uiSchema); return ( <Col key={fieldIndex} {...colSpan}> - {properties.find((prop) => prop.name === field.scope.replace("#/properties/", "")) - ?.content} + { + properties.find( + (prop) => + prop.name === + field.scope.replace("#/properties/", "") + )?.content + } </Col> ); })} @@ -149,8 +163,10 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { } if (element.type === "Control") { - return properties.find((prop) => prop.name === element.scope.replace("#/properties/", "")) - ?.content; + return properties.find( + (prop) => + prop.name === element.scope.replace("#/properties/", "") + )?.content; } return null; @@ -163,32 +179,45 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { const renderFieldsFromSection = (section: any, level: number = 0) => { const { formData, schema, uiSchema } = section.content.props; - + if (schema.type === "object" && schema.properties) { // Render fields for objects const fieldKeys = Object.keys(schema.properties); - + return ( - <Row gutter={rowGutter} style={level === 0 ? { marginBottom: "36px" } : { marginLeft: -8, marginRight: -8, marginBottom: "16px" }}> + <Row + gutter={rowGutter} + style={ + level === 0 + ? { marginBottom: "36px" } + : { marginLeft: -8, marginRight: -8, marginBottom: "16px" } + } + > {fieldKeys.map((fieldKey) => { const fieldSchema = schema.properties[fieldKey]; const fieldUiSchema = uiSchema?.[fieldKey] || {}; const fieldFormData = formData ? formData[fieldKey] : undefined; const span = calculateResponsiveColSpan(fieldUiSchema); - + const FieldRenderer = getFieldRenderer(fieldSchema.type); - + if (!FieldRenderer) { - console.error(`No renderer found for field type: ${fieldSchema.type}`); + console.error( + `No renderer found for field type: ${fieldSchema.type}` + ); return ( <Col key={fieldKey} span={span.span}> <div>Unsupported field type: {fieldSchema.type}</div> </Col> ); } - + return ( - <Col key={fieldKey} span={span.span} style={{marginTop : "12px"}}> + <Col + key={fieldKey} + span={span.span} + style={{ marginTop: "12px" }} + > <fieldset> <legend style={getLegendStyle(level)}>{fieldSchema.title || fieldKey}</legend> <FieldRenderer @@ -219,7 +248,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { } else if (schema.type === "array" && schema.items) { // Render fields for arrays const FieldRenderer = getFieldRenderer(schema.type); - + if (!FieldRenderer) { console.error(`No renderer found for field type: ${schema.type}`); return ( @@ -228,7 +257,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { </div> ); } - + return ( <fieldset> <FieldRenderer @@ -248,16 +277,17 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { </fieldset> ); } - + // Log error for unsupported or missing schema types console.error("Unsupported or missing schema type in section:", section); return null; - }; + }; const renderSections = (properties: any[], level: number) => { - const isMultiLevel = properties.some( - (prop) => prop.content.props.schema?.type === "object" && prop.content.props.schema?.properties + (prop) => + prop.content.props.schema?.type === "object" && + prop.content.props.schema?.properties ); if (!isMultiLevel) { @@ -265,29 +295,29 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { } return properties.map((section) => { - const schema = section.content.props.schema; + const schema = section.content.props.schema; const isArray = typeof section.content.props.index === 'number'; - const sectionTitle = schema.title || section.name; + const sectionTitle = schema.title || section.name; - return ( - <Row - key={section.name} - gutter={rowGutter} - style={{ marginBottom: "16px", width: "100%" }} - > - <Col span={24}> - <fieldset> - {/* Always render the legend for the section itself */} - {level === 0 && !isArray ? ( - <legend style={getLegendStyle(level)}>{sectionTitle}</legend> - ) : null} - - {/* Render the section content */} - {renderFieldsFromSection(section, level + 1)} - </fieldset> - </Col> - </Row> - ); + return ( + <Row + key={section.name} + gutter={rowGutter} + style={{ marginBottom: "16px", width: "100%" }} + > + <Col span={24}> + <fieldset> + {/* Always render the legend for the section itself */} + {level === 0 && !isArray ? ( + <legend style={getLegendStyle(level)}>{sectionTitle}</legend> + ) : null} + + {/* Render the section content */} + {renderFieldsFromSection(section, level + 1)} + </fieldset> + </Col> + </Row> + ); }); }; @@ -296,7 +326,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { {() => ( <fieldset id={idSchema.$id} className="form-section"> {/* Render Title */} - {schema.type === "object" && title && ( + {/* {schema.type === "object" && title && ( <legend> <TitleFieldTemplate id={titleId(idSchema)} @@ -307,7 +337,7 @@ const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { registry={registry} /> </legend> - )} + )} */} {/* Render Description */} {description && ( diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx index 219f3d7838..f0b83c4f53 100644 --- a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/jsonSchemaFormComp.tsx @@ -1,5 +1,5 @@ import { withTheme } from '@rjsf/core'; -import type { RJSFValidationError, ErrorListProps, UISchemaSubmitButtonOptions } from "@rjsf/utils"; +import type { RJSFValidationError, ErrorListProps, UISchemaSubmitButtonOptions, ErrorSchema } from "@rjsf/utils"; import validator from "@rjsf/validator-ajv8"; import { default as Button } from "antd/es/button"; import { BoolControl } from "comps/controls/boolControl"; @@ -28,7 +28,10 @@ import ObjectFieldTemplate from './ObjectFieldTemplate'; import ArrayFieldTemplate from './ArrayFieldTemplate'; import { Select } from 'antd'; import Title from 'antd/es/typography/Title'; - +import { dropdownControl } from 'comps/controls/dropdownControl'; +import JsonFormsRenderer from "./JsonFormsRenderer"; +import { UISchemaElement } from "@jsonforms/core"; +import type { JsonFormsUiSchema, ValidationState } from "./types"; Theme.widgets.DateWidget = DateWidget(false); Theme.widgets.DateTimeWidget = DateWidget(true); @@ -118,7 +121,10 @@ function convertData(schema?: JSONSchema7, data?: any) { let newData: Record<string, unknown> = {}; Object.entries(properties).forEach(([key, definition]) => { const value = data ? data[key] : undefined; - newData[key] = typeof definition === "object" ? convertData(definition, value) : value; + newData[key] = + typeof definition === "object" + ? convertData(definition, value) + : value; }); return newData; } @@ -163,30 +169,11 @@ function transformErrors(errors: RJSFValidationError[]): RJSFValidationError[] { if (message) { // Error message displayed below the comp (will not be displayed when "ui:help" is set in the UI schema) error.message = message; - // Errors displayed in the error list, not displayed when empty - error.stack = ""; } return error; }); } -function ErrorList(props: ErrorListProps) { - const errors = props.errors.filter((error) => error.stack); - // Avoid showing blank space when there are no errors - if (errors.length === 0) { - return <></>; - } - return ( - <div style={{ color: "red" }}> - <ul> - {errors.map((error) => ( - <li key={error.stack}>{error.stack}</li> - ))} - </ul> - </div> - ); -} - const SearchableSelectWidget = (props : any) => { const { options, value, required, disabled, readonly, autofocus, onChange } = props; const { enumOptions } = options; @@ -223,9 +210,14 @@ function onSubmit(props: { }); } +const formTypeOptions = [ + { label: "RJSF", value: "rjsf" }, + { label: "JSONForms", value: "jsonforms" }, +] as const; let FormBasicComp = (function () { const childrenMap = { + formType: dropdownControl(formTypeOptions, "rjsf"), resetAfterSubmit: BoolControl, schema: jsonObjectControl(i18nObjs.jsonForm.defaultSchema), showVerticalScrollbar: withDefault(BoolControl, false), @@ -233,15 +225,20 @@ let FormBasicComp = (function () { autoHeight: AutoHeightControl, data: jsonObjectExposingStateControl("data", i18nObjs.jsonForm.defaultFormData), onEvent: eventHandlerControl(EventOptions), - style: styleControl(JsonSchemaFormStyle , 'style'), - animationStyle: styleControl(AnimationStyle , 'animationStyle'), + style: styleControl(JsonSchemaFormStyle, "style"), + animationStyle: styleControl(AnimationStyle, "animationStyle"), + errorSchema: jsonObjectControl({ + __errors: ["Custom error message for the entire form"], + fieldName: { + __errors: ["Custom error for specific field"] + } + }), + validationState: jsonObjectExposingStateControl("validationState", {}), }; return new UICompBuilder(childrenMap, (props) => { // rjsf 4.20 supports ui:submitButtonOptions, but if the button is customized, it will not take effect. Here we implement it ourselves - const buttonOptions = props?.uiSchema?.[ - "ui:submitButtonOptions" - ] as UISchemaSubmitButtonOptions; + const buttonOptions = props?.uiSchema?.["ui:submitButtonOptions"] as UISchemaSubmitButtonOptions; const schema = props.schema; @@ -255,101 +252,168 @@ let FormBasicComp = (function () { setContainerWidth(containerRef.current.offsetWidth); } }; - + const resizeObserver = new ResizeObserver(() => { updateWidth(); }); - + if (containerRef.current) { resizeObserver.observe(containerRef.current); } - + // Initial update updateWidth(); - + // Cleanup observer on unmount return () => { resizeObserver.disconnect(); }; }, []); + // Convert the error schema to the format RJSF expects + const getExtraErrors = () => { + if (!props.errorSchema || Object.keys(props.errorSchema).length === 0) { + return undefined; + } + + const extraErrors: ErrorSchema = {}; + + // Handle root level errors + if (props.errorSchema.__errors) { + extraErrors.__errors = Array.isArray(props.errorSchema.__errors) + ? props.errorSchema.__errors.map(String) + : [String(props.errorSchema.__errors)]; + } + + // Handle field level errors + Object.entries(props.errorSchema).forEach(([key, value]) => { + if (key !== '__errors' && typeof value === 'object' && value !== null) { + extraErrors[key] = { + __errors: (value as any).__errors || [] + }; + } + }); + + return extraErrors; + }; + return ( <ContainerWidthContext.Provider value={containerWidth}> <Container $style={props.style} $animationStyle={props.animationStyle} ref={containerRef}> <ScrollBar - style={{ - height: props.autoHeight ? "auto" : "100%", - margin: "0px", - padding: "0px", - }} - overflow={"hidden"} - hideScrollbar={!props.showVerticalScrollbar} - > - <ErrorBoundary> - <Title level={2} style={{ marginBottom: '24px' }}> - {schema.title as string | number} - </Title> - <Form - validator={validator} - schema={props.schema} - uiSchema={props.uiSchema} - formData={convertData(props.schema, props.data.value)} - onSubmit={() => onSubmit(props)} - onChange={(e) => props.data.onChange(e.formData)} - transformErrors={(errors) => transformErrors(errors)} - templates={{ - ObjectFieldTemplate: ObjectFieldTemplate, - ArrayFieldTemplate: ArrayFieldTemplate, - // FieldTemplate: LayoutFieldTemplate, - }} - widgets={{ searchableSelect: SearchableSelectWidget }} - // ErrorList={ErrorList} - children={ - <Button - hidden={buttonOptions?.norender} - disabled={buttonOptions?.props?.disabled} - className={buttonOptions?.props?.className} - type="primary" - htmlType="submit" - style={{ float: "right" }} - > - {buttonOptions?.submitText ?? trans("event.submit")} - </Button> - } - /> - </ErrorBoundary> + style={{ + height: props.autoHeight ? "auto" : "100%", + margin: "0px", + padding: "0px", + }} + overflow={"hidden"} + hideScrollbar={!props.showVerticalScrollbar} + > + <ErrorBoundary> + {props.formType === "rjsf" ? ( + <> + <Title level={2} style={{ marginBottom: "24px", display: "flex", justifyContent: "center" }}> + {schema.title as string | number} + </Title> + <Form + validator={validator} + schema={props.schema} + uiSchema={props.uiSchema} + formData={convertData(props.schema, props.data.value)} + onSubmit={() => onSubmit(props)} + onChange={(e) => props.data.onChange(e.formData)} + transformErrors={(errors) => transformErrors(errors)} + extraErrors={getExtraErrors()} + liveValidate={false} + showErrorList={false} + templates={{ + ObjectFieldTemplate: ObjectFieldTemplate, + ArrayFieldTemplate: ArrayFieldTemplate, + }} + widgets={{ searchableSelect: SearchableSelectWidget }} + children={ + <Button + hidden={buttonOptions?.norender} + disabled={buttonOptions?.props?.disabled} + className={buttonOptions?.props?.className} + type="primary" + htmlType="submit" + style={{ float: "right" }} + > + {buttonOptions?.submitText ?? trans("event.submit")} + </Button> + } + /> + </>) + :( <JsonFormsRenderer + schema={props.schema} + data={props.data.value} + onChange={(newData: any) => { + props.data.onChange(newData); + }} + style={props.style} + showVerticalScrollbar={props.showVerticalScrollbar} + autoHeight={props.autoHeight} + resetAfterSubmit={props.resetAfterSubmit} + uiSchema={props.uiSchema as JsonFormsUiSchema} + onSubmit={() => { + return onSubmit(props); + }} + validationState={props.validationState.value} + showValidation={true} + onValidationChange={(newValidationState: ValidationState) => { + props.validationState.onChange(newValidationState); + }} + /> + )} + </ErrorBoundary> </ScrollBar> </Container> </ContainerWidthContext.Provider> - ); }) .setPropertyViewFn((children) => { + const formType = children.formType.getView(); return ( <> - {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( + {(useContext(EditorContext).editorModeStatus === "logic" || + useContext(EditorContext).editorModeStatus === "both") && ( <Section name={sectionNames.basic}> - + {children.formType.propertyView({ + radioButton: true, + })} {children.schema.propertyView({ key: trans("jsonSchemaForm.jsonSchema"), label: ( <> {trans("jsonSchemaForm.jsonSchema") + " ("} - <a - href={"http://json-schema.org/learn/getting-started-step-by-step"} - target={"_blank"} - rel="noreferrer" - > - Docs 1 - </a> - {", "} - <a - href={"https://jsonforms.io/examples/basic"} - target={"_blank"} - rel="noreferrer" - > - Docs 2 - </a> + {formType === "rjsf" ? ( + <> + <a + href={"https://rjsf-team.github.io/react-jsonschema-form/"} + target={"_blank"} + rel="noreferrer" + > + Doc 1 + </a> + {", "} + <a + href={"https://rjsf-team.github.io/react-jsonschema-form/docs/"} + target={"_blank"} + rel="noreferrer" + > + Doc 2 + </a> + </> + ) : ( + <a + href={"https://jsonforms.io/"} + target={"_blank"} + rel="noreferrer" + > + Documentation + </a> + )} {")"} </> ), @@ -357,11 +421,13 @@ let FormBasicComp = (function () { <> {trans("jsonSchemaForm.schemaTooltip") + " "} <a - href={"http://json-schema.org/learn/getting-started-step-by-step"} + href={formType === "rjsf" + ? "http://json-schema.org/learn/getting-started-step-by-step" + : "https://jsonforms.io/"} target={"_blank"} rel="noreferrer" > - JSON Schema + {formType === "rjsf" ? "JSON Schema" : "JSONForms"} </a> </> ), @@ -371,21 +437,23 @@ let FormBasicComp = (function () { label: ( <> {trans("jsonSchemaForm.uiSchema") + " ("} - <a - href={"https://jsonforms.io/docs/uischema"} - target={"_blank"} - rel="noreferrer" - > - Docs 1 - </a> - {", "} - <a - href={"https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/uiSchema"} - target={"_blank"} - rel="noreferrer" - > - Docs 2 - </a> + {formType === "rjsf" ? ( + <a + href={"https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/uiSchema/"} + target={"_blank"} + rel="noreferrer" + > + Documentation + </a> + ) : ( + <a + href={"https://jsonforms.io/docs/uischema/"} + target={"_blank"} + rel="noreferrer" + > + Documentation + </a> + )} {")"} </> ), @@ -393,13 +461,13 @@ let FormBasicComp = (function () { <> {trans("jsonSchemaForm.schemaTooltip") + " "} <a - href={ - "https://jsonforms.io/docs/uischema" - } + href={formType === "rjsf" + ? "https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/uiSchema/" + : "https://jsonforms.io/"} target={"_blank"} rel="noreferrer" > - UI Schema + {formType === "rjsf" ? "UI Schema" : "JSONForms"} </a> </> ), @@ -408,6 +476,21 @@ let FormBasicComp = (function () { key: trans("jsonSchemaForm.defaultData"), label: trans("jsonSchemaForm.defaultData"), })} + {children.formType.getView() === "rjsf" && ( + children.errorSchema.propertyView({ + key: "errorSchema", + label: trans("jsonSchemaForm.errorSchema"), + tooltip: "Define custom error messages for form fields. Use __errors array for field-specific errors.", + }) + ) + // : ( + // children.validationState.propertyView({ + // key: "validationState", + // label: trans("jsonSchemaForm.validationState"), + // tooltip: "Current validation state of the form fields. Shows errors and touched state for each field.", + // }) + // ) + } </Section> )} @@ -423,13 +506,12 @@ let FormBasicComp = (function () { )} {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && ( <> - <Section name={sectionNames.layout}> - {children.autoHeight.getPropertyView()} - {!children.autoHeight.getView() && ( + <Section name={sectionNames.layout}> + {children.autoHeight.getPropertyView()} + {!children.autoHeight.getView() && children.showVerticalScrollbar.propertyView({ label: trans("prop.showVerticalScrollbar"), - }) - )} + })} </Section> <Section name={sectionNames.style}> {children.style.getPropertyView()} @@ -439,7 +521,6 @@ let FormBasicComp = (function () { </Section> </> )} - </> ); }) @@ -452,7 +533,6 @@ FormBasicComp = class extends FormBasicComp { } }; - let FormTmpComp = withExposingConfigs(FormBasicComp, [ depsConfig({ name: "data", diff --git a/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/types.ts b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/types.ts new file mode 100644 index 0000000000..ee6e7d13d9 --- /dev/null +++ b/client/packages/lowcoder/src/comps/comps/jsonSchemaFormComp/types.ts @@ -0,0 +1,95 @@ +import type { JsonSchema } from "@jsonforms/core"; + +export interface FieldUiSchema { + type?: string; + scope?: string; + options?: { + multi?: boolean; + slider?: boolean; + restrict?: boolean; + }; + [key: string]: any; +} + +export interface JsonFormsUiSchema { + type?: string; + elements?: Array<Category | Control | Layout>; + options?: { + variant?: "tabs" | "stepper"; + showNavButtons?: boolean; + }; + [key: string]: FieldUiSchema | JsonFormsUiSchema | any; +} + +export interface Category { + type: "Category"; + label?: string; + i18n?: string; + elements: Array<Control | Layout>; + rule?: { + effect: "SHOW" | "HIDE"; + condition: { + scope: string; + schema: { + const: any; + }; + }; + }; +} + +export interface Control { + type: "Control"; + scope: string; + options?: { + multi?: boolean; + slider?: boolean; + restrict?: boolean; + }; + rule?: { + effect: "SHOW" | "HIDE"; + condition: { + scope: string; + schema: { + const: any; + }; + }; + }; +} + +export interface HorizontalLayout { + type: "HorizontalLayout"; + elements: Control[]; +} + +export type Layout = HorizontalLayout; + +export interface Categorization { + type: "Categorization"; + elements: Category[]; + options?: { + variant?: "tabs" | "stepper"; + showNavButtons?: boolean; + }; +} + +export interface ValidationState { + [key: string]: { + errors: string[]; + touched: boolean; + } | any; +} + +export interface JsonFormsRendererProps { + schema: JsonSchema; + data: any; + onChange: (data: any) => void; + style?: any; + showVerticalScrollbar?: boolean; + showValidation?: boolean; + autoHeight?: boolean; + resetAfterSubmit?: boolean; + uiSchema?: JsonFormsUiSchema; + onSubmit?: () => void; + validationState?: ValidationState; + onValidationChange?: (validationState: ValidationState) => void; +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/comps/listViewComp/listView.tsx b/client/packages/lowcoder/src/comps/comps/listViewComp/listView.tsx index 71503d0c2c..44ff6753d8 100644 --- a/client/packages/lowcoder/src/comps/comps/listViewComp/listView.tsx +++ b/client/packages/lowcoder/src/comps/comps/listViewComp/listView.tsx @@ -1,11 +1,11 @@ import { default as Pagination } from "antd/es/pagination"; import { EditorContext } from "comps/editorState"; import { BackgroundColorContext } from "comps/utils/backgroundColorContext"; -import _ from "lodash"; +import _, { findIndex } from "lodash"; import { ConstructorToView, deferAction } from "lowcoder-core"; -import { HintPlaceHolder, ScrollBar, pageItemRender } from "lowcoder-design"; +import { DragIcon, HintPlaceHolder, ScrollBar, pageItemRender } from "lowcoder-design"; import { RefObject, useContext, createContext, useMemo, useRef, useEffect } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { ResizePayload, useResizeDetector } from "react-resize-detector"; import styled from "styled-components"; import { checkIsMobile } from "util/commonUtils"; import { useDelayState } from "util/hooks"; @@ -22,6 +22,10 @@ import { useMergeCompStyles } from "@lowcoder-ee/util/hooks"; import { childrenToProps } from "@lowcoder-ee/comps/generators/multi"; import { AnimationStyleType } from "@lowcoder-ee/comps/controls/styleControlConstants"; import { getBackgroundStyle } from "@lowcoder-ee/util/styleUtils"; +import { DndContext } from "@dnd-kit/core"; +import { SortableContext, useSortable } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; +import { JSONObject } from "@lowcoder-ee/util/jsonTypes"; const ListViewWrapper = styled.div<{ $style: any; $paddingWidth: string,$animationStyle:AnimationStyleType }>` height: 100%; @@ -63,6 +67,22 @@ const ListOrientationWrapper = styled.div<{ flex-direction: ${(props) => (props.$isHorizontal ? "row" : "column")}; `; +const StyledDragIcon = styled(DragIcon)` + height: 16px; + width: 16px; + color: #8b8fa3; + + &:hover { + cursor: grab; + outline: none; + } + + &:focus { + cursor: grab; + outline: none; + } +`; + type MinHorizontalWidthContextType = { horizontalWidth: string, minHorizontalWidth?: string, @@ -73,19 +93,48 @@ const MinHorizontalWidthContext = createContext<MinHorizontalWidthContextType>({ minHorizontalWidth: '100px', }); -const ContainerInListView = (props: ContainerBaseProps ) => { +const ContainerInListView = (props: ContainerBaseProps & {itemIdx: number, enableSorting?: boolean} ) => { const { horizontalWidth, minHorizontalWidth } = useContext(MinHorizontalWidthContext); + const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ + id: String(props.itemIdx), + }); + + if (!props.enableSorting) { + return ( + <div + style={{ + width: horizontalWidth, + minWidth: minHorizontalWidth || '0px', + }} + > + <InnerGrid + {...props} + emptyRows={15} + containerPadding={[4, 4]} + hintPlaceholder={HintPlaceHolder} + /> + </div> + ) + } + return ( <div + ref={setNodeRef} style={{ width: horizontalWidth, minWidth: minHorizontalWidth || '0px', + transform: CSS.Transform.toString(transform), + transition, + display: 'flex', + flexWrap: 'nowrap', + alignItems: 'center', }} > + {<StyledDragIcon {...attributes} {...listeners} />} <InnerGrid {...props} emptyRows={15} @@ -107,6 +156,7 @@ type ListItemProps = { unMountFn?: () => void; minHorizontalWidth?: string; horizontalWidth: string; + enableSorting?: boolean; }; function ListItem({ @@ -122,6 +172,7 @@ function ListItem({ scrollContainerRef, minHeight, horizontalGridCells, + enableSorting, } = props; // disable the unmount function to save user's state with pagination @@ -133,35 +184,37 @@ function ListItem({ // }, []); return ( - <MinHorizontalWidthContext.Provider - value={{ - horizontalWidth, - minHorizontalWidth + <MinHorizontalWidthContext.Provider + value={{ + horizontalWidth, + minHorizontalWidth + }} + > + <ContainerInListView + itemIdx={itemIdx} + layout={containerProps.layout} + items={gridItemCompToGridItems(containerProps.items)} + horizontalGridCells={horizontalGridCells} + positionParams={containerProps.positionParams} + // all layout changes should only reflect on the commonContainer + dispatch={itemIdx === offset ? containerProps.dispatch : _.noop} + style={{ + height: "100%", + // in case of horizontal mode, minHorizontalWidth is 0px + width: minHorizontalWidth || '100%', + backgroundColor: "transparent", + // flex: "auto", }} - > - <ContainerInListView - layout={containerProps.layout} - items={gridItemCompToGridItems(containerProps.items)} - horizontalGridCells={horizontalGridCells} - positionParams={containerProps.positionParams} - // all layout changes should only reflect on the commonContainer - dispatch={itemIdx === offset ? containerProps.dispatch : _.noop} - style={{ - height: "100%", - // in case of horizontal mode, minHorizontalWidth is 0px - width: minHorizontalWidth || '100%', - backgroundColor: "transparent", - // flex: "auto", - }} - autoHeight={autoHeight} - isDroppable={itemIdx === offset} - isDraggable={itemIdx === offset} - isResizable={itemIdx === offset} - isSelectable={itemIdx === offset} - scrollContainerRef={scrollContainerRef} - overflow={"hidden"} - minHeight={minHeight} - enableGridLines={true} + autoHeight={autoHeight} + isDroppable={itemIdx === offset} + isDraggable={itemIdx === offset} + isResizable={itemIdx === offset} + isSelectable={itemIdx === offset} + scrollContainerRef={scrollContainerRef} + overflow={"hidden"} + minHeight={minHeight} + enableGridLines={true} + enableSorting={enableSorting} /> </MinHorizontalWidthContext.Provider> ); @@ -190,6 +243,7 @@ export function ListView(props: Props) { () => getData(children.noOfRows.getView()), [children.noOfRows] ); + const listData = useMemo(() => children.listData.getView(), [children.listData]); const horizontalGridCells = useMemo(() => children.horizontalGridCells.getView(), [children.horizontalGridCells]); const autoHeight = useMemo(() => children.autoHeight.getView(), [children.autoHeight]); const showHorizontalScrollbar = useMemo(() => children.showHorizontalScrollbar.getView(), [children.showHorizontalScrollbar]); @@ -213,6 +267,13 @@ export function ListView(props: Props) { total, }; }, [children.pagination, totalCount]); + + const enableSorting = useMemo(() => children.enableSorting.getView(), [children.enableSorting]); + + useEffect(() => { + children.listData.dispatchChangeValueAction(data); + }, [JSON.stringify(data)]); + const style = children.style.getView(); const animationStyle = children.animationStyle.getView(); @@ -229,6 +290,7 @@ export function ListView(props: Props) { // log.log("List. listHeight: ", listHeight, " minHeight: ", minHeight); const renders = _.range(0, noOfRows).map((rowIdx) => { // log.log("renders. i: ", i, "containerProps: ", containerProps, " text: ", Object.values(containerProps.items as Record<string, any>)[0].children.comp.children.text); + const items = _.range(0, noOfColumns); const render = ( <div key={rowIdx} @@ -238,7 +300,7 @@ export function ListView(props: Props) { }} > <FlexWrapper> - {_.range(0, noOfColumns).map((colIdx) => { + {items.map((colIdx) => { const itemIdx = rowIdx * noOfColumns + colIdx + pageInfo.offset; if ( itemIdx >= pageInfo.total || @@ -250,7 +312,7 @@ export function ListView(props: Props) { const containerProps = containerFn( { [itemIndexName]: itemIdx, - [itemDataName]: getCurrentItemParams(data, itemIdx) + [itemDataName]: getCurrentItemParams(listData as JSONObject[], itemIdx) }, String(itemIdx) ).getView(); @@ -259,6 +321,7 @@ export function ListView(props: Props) { deferAction(ContextContainerComp.batchDeleteAction([String(itemIdx)])) ); }; + return ( <ListItem key={itemIdx} @@ -272,12 +335,14 @@ export function ListView(props: Props) { unMountFn={unMountFn} horizontalWidth={`${100 / noOfColumns}%`} minHorizontalWidth={horizontal ? minHorizontalWidth : undefined} + enableSorting={enableSorting} /> ); })} </FlexWrapper> </div> ); + return render; }); @@ -289,28 +354,59 @@ export function ListView(props: Props) { useMergeCompStyles(childrenProps, comp.dispatch); + const handleDragEnd = (e: { active: { id: string }; over: { id: string } | null }) => { + if (!e.over) { + return; + } + const fromIndex = Number(e.active.id); + const toIndex = Number(e.over.id); + if (fromIndex < 0 || toIndex < 0 || fromIndex === toIndex) { + return; + } + + const newData = [...listData]; + const [movedItem] = newData.splice(fromIndex, 1); + newData.splice(toIndex, 0, movedItem); + + children.listData.dispatchChangeValueAction(newData); + children.onEvent.getView()('sortChange'); + }; + + useResizeDetector({ + targetRef: ref, + onResize: ({width, height}: ResizePayload) => { + if (height) setListHeight(height); + }, + observerOptions: { box: "border-box" }, + }); + // log.debug("renders: ", renders); + return ( <BackgroundColorContext.Provider value={style.background}> <ListViewWrapper $style={style} $paddingWidth={paddingWidth} $animationStyle={animationStyle}> <BodyWrapper ref={ref} $autoHeight={autoHeight}> <ScrollBar style={{ height: autoHeight ? "auto" : "100%", margin: "0px", padding: "0px" }} hideScrollbar={horizontal ? !showHorizontalScrollbar : !showVerticalScrollbar} overflow={autoHeight ? horizontal ? 'scroll' : 'hidden' : 'scroll'}> - <ReactResizeDetector - onResize={(width?: number, height?: number) => { - if (height) setListHeight(height); - }} - observerOptions={{ box: "border-box" }} - render={() => ( - <ListOrientationWrapper - $isHorizontal={horizontal} - $isGrid={noOfColumns > 1} - $autoHeight={autoHeight} - > - {renders} - </ListOrientationWrapper> - )} + <ListOrientationWrapper + $isHorizontal={horizontal} + $isGrid={noOfColumns > 1} + $autoHeight={autoHeight} > - </ReactResizeDetector> + {!enableSorting + ? renders + : ( + <DndContext onDragEnd={handleDragEnd}> + <SortableContext + items={ + _.range(0, totalCount).map((colIdx) => String(colIdx)) + } + > + {renders} + </SortableContext> + </DndContext> + ) + } + </ListOrientationWrapper> </ScrollBar> </BodyWrapper> <FooterWrapper> diff --git a/client/packages/lowcoder/src/comps/comps/listViewComp/listViewComp.tsx b/client/packages/lowcoder/src/comps/comps/listViewComp/listViewComp.tsx index 47da5c6f3c..fcd478be99 100644 --- a/client/packages/lowcoder/src/comps/comps/listViewComp/listViewComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/listViewComp/listViewComp.tsx @@ -29,7 +29,7 @@ import { withFunction, WrapContextNodeV2, } from "lowcoder-core"; -import { JSONValue } from "util/jsonTypes"; +import { JSONArray, JSONObject, JSONValue } from "util/jsonTypes"; import { depthEqual, lastValueIfEqual, shallowEqual } from "util/objectUtils"; import { CompTree, getAllCompItems, IContainer } from "../containerBase"; import { SimpleContainerComp, toSimpleContainerData } from "../containerBase/simpleContainerComp"; @@ -40,9 +40,11 @@ import { listPropertyView } from "./listViewPropertyView"; import { getData } from "./listViewUtils"; import { withMethodExposing } from "comps/generators/withMethodExposing"; import { SliderControl } from "@lowcoder-ee/comps/controls/sliderControl"; +import { eventHandlerControl, sortChangeEvent } from "@lowcoder-ee/comps/controls/eventHandlerControl"; const childrenMap = { noOfRows: withIsLoadingMethod(NumberOrJSONObjectArrayControl), // FIXME: migrate "noOfRows" to "data" + listData: stateComp<JSONArray>([]), noOfColumns: withDefault(NumberControl, 1), itemIndexName: withDefault(StringControl, "i"), itemDataName: withDefault(StringControl, "currentItem"), @@ -60,6 +62,8 @@ const childrenMap = { animationStyle: styleControl(AnimationStyle, 'animationStyle'), horizontal: withDefault(BoolControl, false), minHorizontalWidth: withDefault(RadiusControl, '100px'), + enableSorting: withDefault(BoolControl, false), + onEvent: eventHandlerControl([sortChangeEvent] as const), }; const ListViewTmpComp = new UICompBuilder(childrenMap, () => <></>) @@ -116,7 +120,7 @@ export class ListViewImplComp extends ListViewTmpComp implements IContainer { const { itemCount } = getData(this.children.noOfRows.getView()); const itemIndexName = this.children.itemIndexName.getView(); const itemDataName = this.children.itemDataName.getView(); - const dataExposingNode = this.children.noOfRows.exposingNode(); + const dataExposingNode = this.children.listData.exposingNode(); const containerComp = this.children.container; // for each container expose each comps with params const exposingRecord = _(_.range(0, itemCount)) @@ -181,6 +185,15 @@ ListViewPropertyComp = withExposingConfigs(ListViewPropertyComp, [ return data; }, }), + depsConfig({ + name: "sortedData", + desc: trans("listView.dataDesc"), + depKeys: ["listData"], + func: (input) => { + const { data } = getData(input.listData as JSONObject[]); + return data; + }, + }), new CompDepsConfig( "pageNo", (comp) => ({index: comp.children.pagination.children.pageNo.exposingNode() }), diff --git a/client/packages/lowcoder/src/comps/comps/listViewComp/listViewPropertyView.tsx b/client/packages/lowcoder/src/comps/comps/listViewComp/listViewPropertyView.tsx index 6e9a4b865d..b3c3911ce1 100644 --- a/client/packages/lowcoder/src/comps/comps/listViewComp/listViewPropertyView.tsx +++ b/client/packages/lowcoder/src/comps/comps/listViewComp/listViewPropertyView.tsx @@ -55,8 +55,12 @@ export function listPropertyView(compType: ListCompType) { {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && ( <Section name={sectionNames.interaction}> + {children.onEvent.getPropertyView()} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children)} + {children.enableSorting.propertyView({ + label: trans('listView.enableSorting'), + })} </Section> )} diff --git a/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx b/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx index 28e318618c..313358815a 100644 --- a/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx +++ b/client/packages/lowcoder/src/comps/comps/meetingComp/controlButton.tsx @@ -36,9 +36,11 @@ import { widthCalculator, } from "comps/controls/styleControlConstants"; import { useEffect, useRef, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { useContext } from "react"; +import { Tooltip } from "antd"; +import { AssetType, IconscoutControl } from "@lowcoder-ee/comps/controls/iconscoutControl"; const Container = styled.div<{ $style: any }>` height: 100%; @@ -74,9 +76,15 @@ const IconWrapper = styled.div<{ $style: any }>` ${(props) => props.$style && getStyleIcon(props.$style)} `; +const IconScoutWrapper = styled.div<{ $style: any }>` + display: flex; + + ${(props) => props.$style && getStyleIcon(props.$style)} +`; + function getStyleIcon(style: any) { return css` - svg { + svg, img { width: ${style.size} !important; height: ${style.size} !important; } @@ -163,6 +171,11 @@ const typeOptions = [ }, ] as const; +const ModeOptions = [ + { label: "Standard", value: "standard" }, + { label: "Asset Library", value: "asset-library" }, +] as const; + function isDefault(type?: string) { return !type; } @@ -183,10 +196,13 @@ const childrenMap = { disabled: BoolCodeControl, loading: BoolCodeControl, form: SelectFormControl, + sourceMode: dropdownControl(ModeOptions, "standard"), prefixIcon: IconControl, + iconScoutAsset: IconscoutControl(AssetType.ICON), style: ButtonStyleControl, viewRef: RefControl<HTMLElement>, - restrictPaddingOnRotation:withDefault(StringControl, 'controlButton') + restrictPaddingOnRotation:withDefault(StringControl, 'controlButton'), + tooltip: StringControl }; let ButtonTmpComp = (function () { @@ -227,63 +243,70 @@ let ButtonTmpComp = (function () { setStyle(container?.clientHeight + "px", container?.clientWidth + "px"); }; + useResizeDetector({ + targetRef: conRef, + onResize, + }); + return ( <EditorContext.Consumer> {(editorState) => ( - <ReactResizeDetector - onResize={onResize} - render={() => ( - <Container ref={conRef} $style={props.style}> - <div - ref={imgRef} + <Container ref={conRef} $style={props.style}> + <div + ref={imgRef} + style={ + props.autoHeight + ? { width: "100%", height: "100%" } + : undefined + } + > + <Tooltip title={props.tooltip}> + <Button100 + ref={props.viewRef} + $buttonStyle={props.style} + loading={props.loading} style={ props.autoHeight - ? { width: "100%", height: "100%" } - : undefined + ? { + width: "100%", + height: "100%", + aspectRatio: props.aspectRatio, + borderRadius: props.style.radius, + } + : { + aspectRatio: props.aspectRatio, + borderRadius: props.style.radius, + } + } + disabled={ + props.disabled || + (!isDefault(props.type) && + getForm(editorState, props.form)?.disableSubmit()) + } + onClick={() => + isDefault(props.type) + ? props.onEvent("click") + : submitForm(editorState, props.form) } > - <Button100 - ref={props.viewRef} - $buttonStyle={props.style} - loading={props.loading} - style={ - props.autoHeight - ? { - width: "100%", - height: "100%", - aspectRatio: props.aspectRatio, - borderRadius: props.style.radius, - } - : { - aspectRatio: props.aspectRatio, - borderRadius: props.style.radius, - } - } - disabled={ - props.disabled || - (!isDefault(props.type) && - getForm(editorState, props.form)?.disableSubmit()) - } - onClick={() => - isDefault(props.type) - ? props.onEvent("click") - : submitForm(editorState, props.form) - } - > - {props.prefixIcon && ( - <IconWrapper - $style={{ ...props.style, size: props.iconSize }} - > - {props.prefixIcon} - </IconWrapper> - )} - - </Button100> - </div> - </Container> - )} - > - </ReactResizeDetector> + {props.sourceMode === 'standard' && props.prefixIcon && ( + <IconWrapper + $style={{ ...props.style, size: props.iconSize }} + > + {props.prefixIcon} + </IconWrapper> + )} + {props.sourceMode === 'asset-library' && props.iconScoutAsset && ( + <IconScoutWrapper + $style={{ ...props.style, size: props.iconSize }} + > + {Boolean(props.iconScoutAsset.value) && <img src={props.iconScoutAsset.value} />} + </IconScoutWrapper> + )} + </Button100> + </Tooltip> + </div> + </Container> )} </EditorContext.Consumer> ); @@ -291,9 +314,19 @@ let ButtonTmpComp = (function () { .setPropertyViewFn((children) => ( <> <Section name={sectionNames.basic}> - {children.prefixIcon.propertyView({ + { children.sourceMode.propertyView({ + label: "", + radioButton: true + })} + {children.sourceMode.getView() === 'standard' && children.prefixIcon.propertyView({ + label: trans("button.icon"), + })} + {children.sourceMode.getView() === 'asset-library' &&children.iconScoutAsset.propertyView({ label: trans("button.icon"), })} + {children.tooltip.propertyView({ + label: trans("labelProp.tooltip"), + })} </Section> {(useContext(EditorContext).editorModeStatus === "logic" || @@ -314,13 +347,13 @@ let ButtonTmpComp = (function () { {children.iconSize.propertyView({ label: trans("button.iconSize"), })} - </Section> - <Section name={sectionNames.style}> - {children.style.getPropertyView()} {children.aspectRatio.propertyView({ label: trans("style.aspectRatio"), })} </Section> + <Section name={sectionNames.style}> + {children.style.getPropertyView()} + </Section> </> )} </> diff --git a/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.tsx b/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.tsx index 93039108b3..30805ca766 100644 --- a/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/moduleComp/moduleComp.tsx @@ -221,9 +221,11 @@ class ModuleTmpComp extends ModuleCompBase { override changeDispatch(dispatch: DispatchType) { const next = super.changeDispatch(dispatch); - const nextModuleRootComp = this.moduleRootComp?.changeDispatch(next.getModuleDispatchFn()); + const nextModuleRootComp = this.moduleRootComp?.changeDispatch( + this.getModuleDispatchFn(next.dispatch) + ); if (!nextModuleRootComp) { - return next; + return this; } return setFieldsNoTypeCheck( next, @@ -234,10 +236,10 @@ class ModuleTmpComp extends ModuleCompBase { ); } - getModuleDispatchFn() { + getModuleDispatchFn(dispatch: DispatchType) { return (action: CompAction<any>) => { // log.info("dispatch from module:", action); - this.dispatch( + dispatch( customAction( { type: "delegated", @@ -305,7 +307,7 @@ class ModuleTmpComp extends ModuleCompBase { if (getReduceContext().disableUpdateState) return this; const { dsl, moduleDsl } = action.value; const moduleRootComp = new RootComp({ - dispatch: this.getModuleDispatchFn(), + dispatch: this.getModuleDispatchFn(this.dispatch), value: dsl, }); moduleRootComp.setModuleRoot(true); diff --git a/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx b/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx index 58d3ed0168..1ee33fa616 100644 --- a/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/navComp/navComp.tsx @@ -198,7 +198,7 @@ const NavCompBase = new UICompBuilder(childrenMap, (props) => { return ( <Dropdown key={idx} - dropdownRender={() => subMenu} + popupRender={() => subMenu} > {item} </Dropdown> diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx index 4f8ad6bcee..7dbacf9005 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/numberInputComp.tsx @@ -21,7 +21,7 @@ import { withExposingConfigs, } from "comps/generators/withExposing"; import { Section, sectionNames, ValueFromOption } from "lowcoder-design"; -import { ReactNode, useEffect, useRef, useState } from "react"; +import { ReactNode, useEffect, useRef, useState, useCallback } from "react"; import styled, { css } from "styled-components"; import { RecordConstructorToView } from "lowcoder-core"; import { InputEventHandlerControl } from "../../controls/eventHandlerControl"; @@ -272,6 +272,7 @@ const childrenMap = { min: UndefinedNumberControl, max: UndefinedNumberControl, customRule: CustomRuleControl, + tabIndex: NumberControl, ...formDataChildren, }; @@ -279,8 +280,18 @@ const childrenMap = { const CustomInputNumber = (props: RecordConstructorToView<typeof childrenMap>) => { const ref = useRef<HTMLInputElement | null>(null); const defaultValue = props.defaultValue.value; + const mountedRef = useRef(true); + // Cleanup on unmount useEffect(() => { + return () => { + mountedRef.current = false; + ref.current = null; + }; + }, []); + + useEffect(() => { + if (!mountedRef.current) return; let value = 0; if (defaultValue === 'null' && props.allowNull) { value = NaN; @@ -295,16 +306,18 @@ const CustomInputNumber = (props: RecordConstructorToView<typeof childrenMap>) = const [tmpValue, setTmpValue] = useState(formatFn(props.value.value)); - const handleFinish = () => { + const handleFinish = useCallback(() => { + if (!mountedRef.current) return; const oldValue = props.value.value; const newValue = parseNumber(tmpValue, props.allowNull); props.value.onChange(newValue); if((oldValue !== newValue)) { props.onEvent("change"); } - }; + }, [tmpValue, props.allowNull, props.value, props.onEvent]); useEffect(() => { + if (!mountedRef.current) return; setTmpValue(formatFn(props.value.value)); }, [ props.value.value, @@ -314,9 +327,49 @@ const CustomInputNumber = (props: RecordConstructorToView<typeof childrenMap>) = props.thousandsSeparator, ]); + const handleChangeCapture = useCallback((e: any) => { + if (!mountedRef.current) return; + setTmpValue((e.target.value?.toString() ?? "").replace("。", ".")); + }, []); + + const handleStep = useCallback((_: any, info: any) => { + if (!mountedRef.current) return; + const v = NP.plus( + parseNumber(tmpValue), + NP.times(info.type === "up" ? 1 : -1, Number(info.offset)) + ); + props.value.onChange(v); + props.onEvent("change"); + }, [tmpValue, props.value, props.onEvent]); + + const handleKeyPress = useCallback((event: React.KeyboardEvent) => { + if (!mountedRef.current) return; + const value = tmpValue; + const cursor = ref.current?.selectionStart; + if (/\d/.test(event.key)) { + return; + } + if (cursor === 0 && event.key === "-" && !/-/.test(value)) { + return; + } + if (cursor !== 0 && props.thousandsSeparator && event.key === ",") { + return; + } + if ( + cursor !== 0 && + props.precision > 0 && + (event.key === "." || event.key === "。") && + !/[.]/.test(value) + ) { + return; + } + event.preventDefault(); + }, [tmpValue, props.thousandsSeparator, props.precision]); + return ( <InputNumber ref={(input) => { + if (!mountedRef.current) return; props.viewRef(input); ref.current = input; }} @@ -330,53 +383,22 @@ const CustomInputNumber = (props: RecordConstructorToView<typeof childrenMap>) = precision={props.precision} $style={props.inputFieldStyle} prefix={hasIcon(props.prefixIcon) ? props.prefixIcon : props.prefixText.value} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} onPressEnter={() => { handleFinish(); props.onEvent("submit"); }} - onChangeCapture={(e: any) => { - // eslint-disable-next-line only-ascii/only-ascii - setTmpValue((e.target.value?.toString() ?? "").replace("。", ".")); - }} - onStep={(_, info) => { - // since percentage mode needs to be handled manually - const v = NP.plus( - parseNumber(tmpValue), - NP.times(info.type === "up" ? 1 : -1, Number(info.offset)) - ); - props.value.onChange(v); - props.onEvent("change"); - }} + onChangeCapture={handleChangeCapture} + onStep={handleStep} onFocus={() => { + if (!mountedRef.current) return; props.onEvent("focus"); }} onBlur={() => { handleFinish(); props.onEvent("blur"); }} - onKeyPress={(event) => { - const value = tmpValue; - const cursor = ref.current?.selectionStart; - if (/\d/.test(event.key)) { - return; - } - if (cursor === 0 && event.key === "-" && !/-/.test(value)) { - return; - } - if (cursor !== 0 && props.thousandsSeparator && event.key === ",") { - return; - } - if ( - cursor !== 0 && - props.precision > 0 && - // eslint-disable-next-line only-ascii/only-ascii - (event.key === "." || event.key === "。") && - !/[.]/.test(value) - ) { - return; - } - event.preventDefault(); - }} + onKeyPress={handleKeyPress} /> ); }; @@ -416,6 +438,7 @@ let NumberInputTmpComp = (function () { {children.onEvent.getPropertyView()} {disabledPropertyView(children)} {hiddenPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section> </> )} diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx index 0c17a5a7f6..74b32347d2 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/rangeSliderComp.tsx @@ -6,6 +6,8 @@ import { CommonNameConfig, NameConfig, withExposingConfigs } from "../../generat import { SliderChildren, SliderPropertyView, SliderStyled, SliderWrapper } from "./sliderCompConstants"; import { hasIcon } from "comps/utils"; import { BoolControl } from "comps/controls/boolControl"; +import { NumberControl } from "comps/controls/codeControl"; +import { useCallback, useRef, useEffect } from "react"; const RangeSliderBasicComp = (function () { const childrenMap = { @@ -13,20 +15,49 @@ const RangeSliderBasicComp = (function () { start: numberExposingStateControl("start", 10), end: numberExposingStateControl("end", 60), vertical: BoolControl, + tabIndex: NumberControl, }; + return new UICompBuilder(childrenMap, (props, dispatch) => { + const mountedRef = useRef(true); + const startValueRef = useRef(props.start.value); + const endValueRef = useRef(props.end.value); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + startValueRef.current = 0; + endValueRef.current = 0; + }; + }, []); + + const handleMouseDown = useCallback((e: React.MouseEvent) => { + e.stopPropagation(); + return false; + }, []); + + const handleChange = useCallback((value: number | number[]) => { + if (!mountedRef.current) return; + if (Array.isArray(value)) { + const [start, end] = value; + startValueRef.current = start; + endValueRef.current = end; + props.start.onChange(start); + props.end.onChange(end); + props.onEvent("change"); + } + }, [props.start, props.end, props.onEvent]); + return props.label({ style: props.style, labelStyle: props.labelStyle, - inputFieldStyle:props.inputFieldStyle, - animationStyle:props.animationStyle, + inputFieldStyle: props.inputFieldStyle, + animationStyle: props.animationStyle, children: ( <SliderWrapper $vertical={Boolean(props.vertical)} - onMouseDown={(e: any) => { - e.stopPropagation(); - return false; - }} + onMouseDown={handleMouseDown} > {hasIcon(props.prefixIcon) && props.prefixIcon} <SliderStyled @@ -36,11 +67,8 @@ const RangeSliderBasicComp = (function () { $style={props.inputFieldStyle} style={{ margin: 0 }} $vertical={Boolean(props.vertical) || false} - onChange={([start, end]) => { - props.start.onChange(start); - props.end.onChange(end); - props.onEvent("change"); - }} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} + onChange={handleChange} /> {hasIcon(props.suffixIcon) && props.suffixIcon} </SliderWrapper> diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx index cabda66348..e31117cdf3 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderComp.tsx @@ -7,6 +7,8 @@ import { formDataChildren, FormDataPropertyView } from "../formComp/formDataCons import { SliderChildren, SliderPropertyView, SliderStyled, SliderWrapper } from "./sliderCompConstants"; import { hasIcon } from "comps/utils"; import { BoolControl } from "comps/controls/boolControl"; +import { NumberControl } from "comps/controls/codeControl"; +import { useCallback } from "react"; const SliderBasicComp = (function () { /** @@ -16,21 +18,28 @@ const SliderBasicComp = (function () { ...SliderChildren, value: numberExposingStateControl("value", 60), vertical: BoolControl, + tabIndex: NumberControl, ...formDataChildren, }; return new UICompBuilder(childrenMap, (props) => { + const handleMouseDown = useCallback((e: React.MouseEvent) => { + e.stopPropagation(); + }, []); + + const handleChange = useCallback((value: number) => { + props.value.onChange(value); + props.onEvent("change"); + }, [props.value, props.onEvent]); + return props.label({ style: props.style, labelStyle: props.labelStyle, - inputFieldStyle:props.inputFieldStyle, - animationStyle:props.animationStyle, + inputFieldStyle: props.inputFieldStyle, + animationStyle: props.animationStyle, children: ( <SliderWrapper $vertical={Boolean(props.vertical)} - onMouseDown={(e: any) => { - e.stopPropagation(); - return false; - }} + onMouseDown={handleMouseDown} > {hasIcon(props.prefixIcon) && props.prefixIcon} <SliderStyled @@ -39,10 +48,8 @@ const SliderBasicComp = (function () { $style={props.inputFieldStyle} style={{margin: 0}} $vertical={Boolean(props.vertical) || false} - onChange={(e) => { - props.value.onChange(e); - props.onEvent("change"); - }} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} + onChange={handleChange} /> {hasIcon(props.suffixIcon) && props.suffixIcon} </SliderWrapper> diff --git a/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderCompConstants.tsx b/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderCompConstants.tsx index 8750d2e0c2..ae4c5abd88 100644 --- a/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderCompConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/numberInputComp/sliderCompConstants.tsx @@ -12,8 +12,7 @@ import { darkenColor, fadeColor } from "lowcoder-design"; import { disabledPropertyView, hiddenPropertyView, showDataLoadingIndicatorsPropertyView } from "comps/utils/propertyUtils"; import { IconControl } from "comps/controls/iconControl"; import { trans } from "i18n"; - -import { useContext } from "react"; +import { memo, useCallback, useContext } from "react"; import { EditorContext } from "comps/editorState"; const getStyle = (style: SliderStyleType, vertical: boolean) => { @@ -92,42 +91,61 @@ export const SliderChildren = { animationStyle: styleControl(AnimationStyle, 'animationStyle') }; -export const SliderPropertyView = ( - children: RecordConstructorToComp<typeof SliderChildren & { hidden: typeof BoolCodeControl }> -) => ( - <> +const InteractionSection = memo(({ children }: { children: RecordConstructorToComp<typeof SliderChildren & { hidden: typeof BoolCodeControl }> }) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + if (!["logic", "both"].includes(editorModeStatus)) { + return null; + } - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <Section name={sectionNames.interaction}> - {children.onEvent.getPropertyView()} - {disabledPropertyView(children)} - {hiddenPropertyView(children)} - {showDataLoadingIndicatorsPropertyView(children as any)} - </Section> - )} + return ( + <Section name={sectionNames.interaction}> + {children.onEvent.getPropertyView()} + {disabledPropertyView(children)} + {hiddenPropertyView(children)} + {showDataLoadingIndicatorsPropertyView(children as any)} + {(children as any).tabIndex?.propertyView({ label: trans("prop.tabIndex") })} + </Section> + ); +}); - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - children.label.getPropertyView() - )} +const LayoutSection = memo(({ children }: { children: RecordConstructorToComp<typeof SliderChildren & { hidden: typeof BoolCodeControl }> }) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + + if (!["layout", "both"].includes(editorModeStatus)) { + return null; + } - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <><Section name={sectionNames.layout}> - {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} - {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} - </Section> - <Section name={sectionNames.style}> - {children.style.getPropertyView()} - </Section> - <Section name={sectionNames.labelStyle}> - {children.labelStyle.getPropertyView()} - </Section> - <Section name={sectionNames.inputFieldStyle}> - {children.inputFieldStyle.getPropertyView()} - </Section> - <Section name={sectionNames.animationStyle} hasTooltip={true}> - {children.animationStyle.getPropertyView()} - </Section> - </> - )} + return ( + <> + {children.label.getPropertyView()} + <Section name={sectionNames.layout}> + {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.suffixIcon.propertyView({ label: trans("button.suffixIcon") })} + </Section> + <Section name={sectionNames.style}> + {children.style.getPropertyView()} + </Section> + <Section name={sectionNames.labelStyle}> + {children.labelStyle.getPropertyView()} + </Section> + <Section name={sectionNames.inputFieldStyle}> + {children.inputFieldStyle.getPropertyView()} + </Section> + <Section name={sectionNames.animationStyle} hasTooltip={true}> + {children.animationStyle.getPropertyView()} + </Section> + </> + ); +}); + +export const SliderPropertyView = memo(( + children: RecordConstructorToComp<typeof SliderChildren & { hidden: typeof BoolCodeControl }> +) => ( + <> + <InteractionSection children={children} /> + <LayoutSection children={children} /> </> -); +)); + +SliderPropertyView.displayName = 'SliderPropertyView'; diff --git a/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayout.tsx b/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayout.tsx index bfece6cf21..f7e09104af 100644 --- a/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/pageLayoutComp/pageLayout.tsx @@ -103,10 +103,12 @@ const BodyInnerGrid = styled(InnerGrid)<{ $bodyBackgroundImageSize: string; $bodyBackgroundImagePosition: string; $bodyBackgroundImageOrigin: string; + $bodyPadding: string; }>` border-top: ${(props) => `${props.$showBorder ? props.$borderWidth : 0} solid ${props.$borderColor}`}; flex: 1; border-radius: 0; + padding: ${(props) => props.$bodyPadding || "0px"} !important; ${props => getBackgroundStyle({ background: props.$backgroundColor, @@ -169,9 +171,18 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi const isMobile = checkIsMobile(maxWidth); const appRef = useRef(); + // Handle mobile responsiveness for sider collapse + useEffect(() => { + // Force collapse on mobile if sider is shown + if (isMobile && showSider) { + props.setSiderCollapsed(true); + } + }, [isMobile, showSider, props.setSiderCollapsed]); + function onSiderCollapse (collapsed : boolean) { props.setSiderCollapsed(collapsed); - // how to set the collapsed state in the container when the user manually collapses the sider? + // We already updated the state through props.setSiderCollapsed + // The parent component will update the value via useEffect } useEffect(() => {setSiderCollapsed(container.siderCollapsed)} , [container.siderCollapsed]); @@ -196,8 +207,8 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi <Sider width={container.siderWidth} style={{ padding: "0px", margin: '0px', backgroundColor: siderStyle?.siderBackground || 'transparent' }} - collapsible={container.siderCollapsible} - breakpoint="sm" + collapsible={container.siderCollapsible && !isMobile} + breakpoint={container.siderCollapsible ? "sm" : undefined} collapsedWidth={container.siderCollapsedWidth} collapsed={siderCollapsed} onCollapse={(value) => onSiderCollapse(value)} > @@ -255,8 +266,8 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi <Sider width={container.siderWidth} style={{ padding: "0px", margin: '0px', marginTop: style.borderWidth, backgroundColor: siderStyle?.siderBackground || 'transparent' }} - collapsible={container.siderCollapsible} - breakpoint="sm" + collapsible={container.siderCollapsible && !isMobile} + breakpoint={container.siderCollapsible ? "sm" : undefined} collapsedWidth={container.siderCollapsedWidth} collapsed={siderCollapsed} onCollapse={(value) => setSiderCollapsed(value)} > @@ -312,7 +323,8 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi $bodyBackgroundImageOrigin={bodyStyle?.backgroundImageOrigin} $borderColor={style?.border} $borderWidth={style?.borderWidth} - style={{ padding: bodyStyle.containerBodyPadding }} /> + $bodyPadding={bodyStyle.containerBodyPadding} + style={{ padding: "0px" }} /> )} </ScrollBar> </Content> @@ -321,8 +333,8 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi <Sider width={container.siderWidth} style={{ padding: "0px", margin: '0px', backgroundColor: siderStyle?.siderBackground || 'transparent' }} - collapsible={container.siderCollapsible} - breakpoint="sm" + collapsible={container.siderCollapsible && !isMobile} + breakpoint={container.siderCollapsible ? "sm" : undefined} collapsedWidth={container.siderCollapsedWidth} reverseArrow={true} collapsed={siderCollapsed} onCollapse={(value) => setSiderCollapsed(value)} @@ -381,7 +393,8 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi $bodyBackgroundImageOrigin={bodyStyle?.backgroundImageOrigin} $borderColor={style?.border} $borderWidth={style?.borderWidth} - style={{ padding: bodyStyle.containerBodyPadding }} /> + $bodyPadding={bodyStyle.containerBodyPadding} + style={{ padding: "0px" }} /> )} </ScrollBar> </Content> @@ -416,8 +429,8 @@ export function PageLayout(props: LayoutProps & { siderCollapsed: boolean; setSi <Sider width={container.siderWidth} style={{ padding: "0px", margin: '0px', backgroundColor: siderStyle?.siderBackground || 'transparent'}} - collapsible={container.siderCollapsible} - breakpoint="sm" + collapsible={container.siderCollapsible && !isMobile} + breakpoint={container.siderCollapsible ? "sm" : undefined} collapsedWidth={container.siderCollapsedWidth} reverseArrow={true} collapsed={siderCollapsed} onCollapse={(value) => setSiderCollapsed(value)} diff --git a/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx b/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx index eef0ba0a82..944b639760 100644 --- a/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/preLoadComp.tsx @@ -289,7 +289,7 @@ function PreloadConfigModal(props: ChildrenInstance) { mask={activeKey !== TabKey.CSS} open={showScriptsAndStyleModal} title={trans("preLoad.scriptsAndStyles")} - destroyOnClose + destroyOnHidden onCancel={() => changeExternalState?.({ showScriptsAndStyleModal: false })} showOkButton={false} showCancelButton={false} diff --git a/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx b/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx index 13b3b8b5c1..0ce837560c 100644 --- a/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx +++ b/client/packages/lowcoder/src/comps/comps/responsiveLayout/responsiveLayout.tsx @@ -87,7 +87,7 @@ const ColWrapper = styled(Col)<{ flex-basis: ${(props) => props.$rowBreak ? `calc(100% / var(--columns))` // Force exact column distribution - : `clamp(${props.$minWidth}, 100% / var(--columns), 100%)`}; // MinWidth respected + : `clamp(${props.$minWidth || "0px"}, calc(100% / var(--columns)), 100%)`}; // MinWidth respected min-width: ${(props) => props.$minWidth}; // Ensure minWidth is respected max-width: 100%; // Prevent more columns than allowed @@ -237,7 +237,8 @@ const ResponsiveLayout = (props: ResponsiveLayoutProps) => { if (!containers[id]) return null; const containerProps = containers[id].children; - const calculatedWidth = 100 / numberOfColumns; + // Use the actual minWidth from column configuration instead of calculated width + const columnMinWidth = column.minWidth || `${100 / numberOfColumns}px`; return ( <ColWrapper @@ -247,7 +248,7 @@ const ResponsiveLayout = (props: ResponsiveLayoutProps) => { sm={rowBreak ? 24 / numberOfColumns : undefined} xs={rowBreak ? 24 / numberOfColumns : undefined} $style={props.columnStyle} - $minWidth={`${calculatedWidth}px`} + $minWidth={columnMinWidth} $matchColumnsHeight={matchColumnsHeight} $rowBreak={rowBreak} > diff --git a/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx b/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx index deb4eac704..64ec62a952 100644 --- a/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/richTextEditorComp.tsx @@ -1,4 +1,4 @@ -import { StringControl } from "comps/controls/codeControl"; +import { StringControl, NumberControl } from "comps/controls/codeControl"; import { BoolControl } from "comps/controls/boolControl"; import { BoolCodeControl } from "../controls/codeControl"; import { stringExposingStateControl } from "comps/controls/codeStateControl"; @@ -7,8 +7,8 @@ import { ChangeEventHandlerControl } from "comps/controls/eventHandlerControl"; import { UICompBuilder, withDefault } from "comps/generators"; import { NameConfig, NameConfigHidden, withExposingConfigs } from "comps/generators/withExposing"; import { Section, sectionNames } from "lowcoder-design"; -import React, { Suspense, useEffect, useRef, useState } from "react"; -import type ReactQuill from "react-quill"; +import React, { ChangeEvent, Suspense, useEffect, useRef, useState } from "react"; +import type ReactQuill from "react-quill-new"; import { useDebounce } from "react-use"; import styled, { css } from "styled-components"; import { formDataChildren, FormDataPropertyView } from "./formComp/formDataConstants"; @@ -19,7 +19,7 @@ import { readOnlyPropertyView, showDataLoadingIndicatorsPropertyView, } from "comps/utils/propertyUtils"; -import _ from "lodash"; +import _, { debounce } from "lodash"; import { trans } from "i18n"; import { default as Skeleton } from "antd/es/skeleton"; import { styleControl } from "comps/controls/styleControl"; @@ -180,6 +180,7 @@ const childrenMap = { toolbar: withDefault(StringControl, JSON.stringify(toolbarOptions)), onEvent: ChangeEventHandlerControl, style: styleControl(RichTextEditorStyle , 'style'), + tabIndex: NumberControl, ...formDataChildren, }; @@ -196,9 +197,10 @@ interface IProps { onChange: (value: string) => void; $style: RichTextEditorStyleType; contentScrollBar: boolean; + tabIndex?: number; } -const ReactQuillEditor = React.lazy(() => import("react-quill")); +const ReactQuillEditor = React.lazy(() => import("react-quill-new")); function RichTextEditor(props: IProps) { const [key, setKey] = useState(0); @@ -226,6 +228,15 @@ function RichTextEditor(props: IProps) { [props.placeholder] ); + useEffect(() => { + if (editorRef.current && props.tabIndex !== undefined) { + const editor = editorRef.current.getEditor(); + if (editor && editor.scroll && editor.scroll.domNode) { + (editor.scroll.domNode as HTMLElement).tabIndex = props.tabIndex; + } + } + }, [props.tabIndex, key]); // Also re-run when key changes due to placeholder update + const contains = (parent: HTMLElement, descendant: HTMLElement) => { try { // Firefox inserts inaccessible nodes around video elements @@ -294,9 +305,15 @@ function RichTextEditor(props: IProps) { } const RichTextEditorCompBase = new UICompBuilder(childrenMap, (props) => { - const handleChange = (v: string) => { - props.value.onChange(v); - props.onEvent("change"); + const debouncedOnChangeRef = useRef( + debounce((value: string) => { + props.value.onChange(value); + props.onEvent("change"); + }, 1000) + ); + + const handleChange = (value: string) => { + debouncedOnChangeRef.current?.(value); }; return ( @@ -310,6 +327,7 @@ const RichTextEditorCompBase = new UICompBuilder(childrenMap, (props) => { onChange={handleChange} $style={props.style} contentScrollBar={props.contentScrollBar} + tabIndex={props.tabIndex} /> ); }) @@ -328,6 +346,7 @@ const RichTextEditorCompBase = new UICompBuilder(childrenMap, (props) => { {children.onEvent.getPropertyView()} {hiddenPropertyView(children)} {readOnlyPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} {showDataLoadingIndicatorsPropertyView(children)} </Section> )} diff --git a/client/packages/lowcoder/src/comps/comps/rootComp.tsx b/client/packages/lowcoder/src/comps/comps/rootComp.tsx index edf1f3a34b..58ef58d15b 100644 --- a/client/packages/lowcoder/src/comps/comps/rootComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/rootComp.tsx @@ -8,7 +8,7 @@ import { HookListComp } from "comps/hooks/hookListComp"; import { QueryListComp } from "comps/queries/queryComp"; import { NameAndExposingInfo } from "comps/utils/exposingTypes"; import { handlePromiseAndDispatch } from "util/promiseUtils"; -import { HTMLAttributes, Suspense, lazy, useContext, useEffect, useMemo, useState } from "react"; +import { HTMLAttributes, Suspense, lazy, useContext, useEffect, useMemo, useRef, useState } from "react"; import { setFieldsNoTypeCheck } from "util/objectUtils"; import { AppSettingsComp } from "./appSettingsComp"; import { PreloadComp } from "./preLoadComp"; @@ -36,6 +36,8 @@ import React from "react"; import { isEqual } from "lodash"; import {LoadingBarHideTrigger} from "@lowcoder-ee/util/hideLoading"; import clsx from "clsx"; +import { useUnmount } from "react-use"; + const EditorView = lazy( () => import("pages/editor/editorView"), ); @@ -65,6 +67,10 @@ const RootView = React.memo((props: RootViewProps) => { const [propertySectionState, setPropertySectionState] = useState<PropertySectionState>({}); const { readOnly } = useContext(ExternalEditorContext); const isUserViewMode = useUserViewMode(); + const mountedRef = useRef(true); + const editorStateRef = useRef<EditorState>(); + const prevCompRef = useRef(comp); + const appThemeId = comp.children.settings.getView().themeId; const { orgCommonSettings } = getGlobalSettings(); const themeList = orgCommonSettings?.themeList || []; @@ -80,27 +86,54 @@ const RootView = React.memo((props: RootViewProps) => { ); useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + useEffect(() => { + if (!mountedRef.current) return; + const newEditorState = new EditorState(comp, (changeEditorStateFn) => { - setEditorState((oldState) => (oldState ? changeEditorStateFn(oldState) : undefined)); + if (mountedRef.current) { + setEditorState((oldState) => { + return (oldState ? changeEditorStateFn(oldState) : undefined) + }); + } }); + editorStateRef.current = newEditorState; setEditorState(newEditorState); + + return () => { + if (editorStateRef.current) { + editorStateRef.current = undefined; + } + }; }, []); useEffect(() => { - if (editorState != null) { + if (!mountedRef.current || !editorState) return; + + if (prevCompRef.current !== comp) { editorState.setComp(() => comp); + prevCompRef.current = comp; } - }, [comp]); + }, [comp, editorState]); + + useUnmount(() => { + setEditorState(undefined); + setPropertySectionState({}); + if (editorStateRef.current) { + editorStateRef.current = undefined; + } + }); - /** - * ensure memo, otherwise all component caches will be invalid - */ const themeContextValue = useMemo( () => ({ theme, themeId, }), - [theme] + [theme, themeId] ); const propertySectionContextValue = useMemo<PropertySectionContextType>(() => { @@ -109,6 +142,8 @@ const RootView = React.memo((props: RootViewProps) => { compName, state: propertySectionState, toggle: (compName: string, sectionName: string) => { + if (!mountedRef.current) return; + setPropertySectionState((oldState) => { const nextSectionState: PropertySectionState = { ...oldState }; const compState = nextSectionState[compName] || {}; @@ -164,6 +199,7 @@ export class RootComp extends RootCompBase { preloaded = false; preloadId = ""; isModuleRoot = false; + private editorStateRef?: EditorState; getView() { if (!this.preloaded) { @@ -174,6 +210,7 @@ export class RootComp extends RootCompBase { clearPreload() { this.children.preload.clear(); + this.editorStateRef = undefined; } setModuleRoot(moduleRoot: boolean) { @@ -184,8 +221,13 @@ export class RootComp extends RootCompBase { if (this.preloaded) { return this; } - await this.children.preload.run(id); - return setFieldsNoTypeCheck(this, { preloaded: true, preloadId: id }); + try { + await this.children.preload.run(id); + return setFieldsNoTypeCheck(this, { preloaded: true, preloadId: id }); + } catch (error) { + this.clearPreload(); + throw error; + } } private findInternalComp(name: string) { diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/cascaderComp.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/cascaderComp.tsx index fad05e2f9f..c71b85e2dd 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/cascaderComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/cascaderComp.tsx @@ -58,7 +58,7 @@ let CascaderBasicComp = (function () { $childrenInputFieldStyle={props.childrenInputFieldStyle} onFocus={() => props.onEvent("focus")} onBlur={() => props.onEvent("blur")} - dropdownRender={(menus: React.ReactNode) => ( + popupRender={(menus: React.ReactNode) => ( <DropdownRenderStyle $childrenInputFieldStyle={props.childrenInputFieldStyle}> {menus} </DropdownRenderStyle> diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/checkboxComp.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/checkboxComp.tsx index f69b694531..9a7abb8bd1 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/checkboxComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/checkboxComp.tsx @@ -1,6 +1,6 @@ import { default as AntdCheckboxGroup } from "antd/es/checkbox/Group"; import { SelectInputOptionControl } from "comps/controls/optionsControl"; -import { BoolCodeControl } from "../../controls/codeControl"; +import { BoolCodeControl, NumberControl } from "../../controls/codeControl"; import { arrayStringExposingStateControl } from "../../controls/codeStateControl"; import { LabelControl } from "../../controls/labelControl"; import { ChangeEventHandlerControl } from "../../controls/eventHandlerControl"; @@ -24,6 +24,8 @@ import { trans } from "i18n"; import { RefControl } from "comps/controls/refControl"; import { migrateOldData } from "comps/generators/simpleGenerators"; import { fixOldInputCompData } from "../textInputComp/textInputConstants"; +import Tooltip from "antd/es/tooltip"; +import { useCallback, useRef, useEffect, memo } from "react"; export const getStyle = (style: CheckboxStyleType) => { return css` @@ -63,7 +65,7 @@ export const getStyle = (style: CheckboxStyleType) => { } } - .ant-checkbox-inner) { + .ant-checkbox-inner { background-color: ${style.uncheckedBackground}; border-radius: ${style.radius}; border-color: ${style.checkedBorder}; @@ -115,6 +117,7 @@ export const getStyle = (style: CheckboxStyleType) => { const CheckboxGroup = styled(AntdCheckboxGroup) <{ $style: CheckboxStyleType; $layout: ValueFromOption<typeof RadioLayoutOptions>; + tabIndex?: number; }>` min-height: 32px; ${(props) => props.$style && getStyle(props.$style)} @@ -139,6 +142,54 @@ const CheckboxGroup = styled(AntdCheckboxGroup) <{ }} `; +const MemoizedCheckboxGroup = memo(({ + value, + disabled, + style, + layout, + options, + onChange, + viewRef, + tabIndex +}: { + value: string[]; + disabled: boolean; + style: CheckboxStyleType; + layout: ValueFromOption<typeof RadioLayoutOptions>; + options: Array<{ label: any; value: string; disabled?: boolean }>; + onChange: (values: string[]) => void; + viewRef: React.Ref<HTMLDivElement>; + tabIndex?: number +}) => { + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleChange = useCallback((values: unknown[]) => { + if (!mountedRef.current) return; + onChange(values as string[]); + }, [onChange]); + + return ( + <CheckboxGroup + ref={viewRef} + disabled={disabled} + value={value} + $style={style} + $layout={layout} + options={options} + onChange={handleChange} + tabIndex={tabIndex} + /> + ); +}); + +MemoizedCheckboxGroup.displayName = 'MemoizedCheckboxGroup'; + let CheckboxBasicComp = (function () { const childrenMap = { defaultValue: arrayStringExposingStateControl("defaultValue"), @@ -156,37 +207,52 @@ let CheckboxBasicComp = (function () { viewRef: RefControl<HTMLDivElement>, inputFieldStyle: styleControl(CheckboxStyle , 'inputFieldStyle'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), + tabIndex: NumberControl, ...SelectInputValidationChildren, ...formDataChildren, }; + return new UICompBuilder(childrenMap, (props) => { - const [ - validateState, - handleChange, - ] = useSelectInputValidate(props); + const mountedRef = useRef(true); + const [validateState, handleChange] = useSelectInputValidate(props); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleValidateChange = useCallback((values: string[]) => { + if (!mountedRef.current) return; + handleChange(values); + }, [handleChange]); + + const filteredOptions = useCallback(() => { + return props.options + .filter((option) => option.value !== undefined && !option.hidden) + .map((option) => ({ + label: option.label, + value: option.value, + disabled: option.disabled, + })); + }, [props.options]); + return props.label({ required: props.required, style: props.style, labelStyle: props.labelStyle, - inputFieldStyle:props.inputFieldStyle, - animationStyle:props.animationStyle, + inputFieldStyle: props.inputFieldStyle, + animationStyle: props.animationStyle, children: ( - <CheckboxGroup - ref={props.viewRef} - disabled={props.disabled} + <MemoizedCheckboxGroup value={props.value.value} - $style={props.inputFieldStyle} - $layout={props.layout} - options={props.options - .filter((option) => option.value !== undefined && !option.hidden) - .map((option) => ({ - label: option.label, - value: option.value, - disabled: option.disabled, - }))} - onChange={(values) => { - handleChange(values as string[]); - }} + disabled={props.disabled} + style={props.inputFieldStyle} + layout={props.layout} + options={filteredOptions()} + onChange={handleValidateChange} + viewRef={props.viewRef} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> ), ...validateState, diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/radioComp.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/radioComp.tsx index 6bc4805cd1..28d5d6f3db 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/radioComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/radioComp.tsx @@ -13,6 +13,8 @@ import { EllipsisTextCss, ValueFromOption } from "lowcoder-design"; import { trans } from "i18n"; import { fixOldInputCompData } from "../textInputComp/textInputConstants"; import { migrateOldData } from "comps/generators/simpleGenerators"; +import Tooltip from "antd/es/tooltip"; +import { useCallback, useRef, useEffect, memo } from "react"; const getStyle = (style: RadioStyleType, inputFieldStyle?:RadioStyleType ) => { return css` @@ -96,36 +98,113 @@ const Radio = styled(AntdRadioGroup)<{ }} `; +const MemoizedRadio = memo(({ + value, + disabled, + style, + inputFieldStyle, + layout, + options, + onChange, + viewRef +}: { + value: string; + disabled: boolean; + style: RadioStyleType; + inputFieldStyle: RadioStyleType; + layout: ValueFromOption<typeof RadioLayoutOptions>; + options: Array<{ label: string; value: string; disabled?: boolean; hidden?: boolean }>; + onChange: (value: string) => void; + viewRef: React.Ref<HTMLDivElement>; +}) => { + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleChange = useCallback((e: any) => { + if (!mountedRef.current) return; + onChange(e.target.value); + }, [onChange]); + + const filteredOptions = useCallback(() => { + return options + .filter((option) => option.value !== undefined && !option.hidden) + .map((option) => ({ + label: option.label, + value: option.value, + disabled: option.disabled, + })); + }, [options]); + + return ( + <Radio + ref={viewRef} + disabled={disabled} + value={value} + $style={style} + $inputFieldStyle={inputFieldStyle} + $layout={layout} + onChange={handleChange} + options={filteredOptions()} + /> + ); +}); + +MemoizedRadio.displayName = 'MemoizedRadio'; + let RadioBasicComp = (function () { return new UICompBuilder(RadioChildrenMap, (props) => { - const [ - validateState, - handleChange, - ] = useSelectInputValidate(props); + const mountedRef = useRef(true); + const radioRef = useRef<HTMLDivElement | null>(null); + const [validateState, handleChange] = useSelectInputValidate(props); + + useEffect(() => { + if (!mountedRef.current) return; + if (radioRef.current && typeof props.tabIndex === 'number') { + const firstRadioInput = radioRef.current.querySelector('input[type="radio"]'); + if (firstRadioInput) { + firstRadioInput.setAttribute('tabindex', props.tabIndex.toString()); + } + } + }, [props.tabIndex, props.options]); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleValidateChange = useCallback((value: string) => { + if (!mountedRef.current) return; + handleChange(value); + }, [handleChange]); + return props.label({ required: props.required, style: props.style, labelStyle: props.labelStyle, - inputFieldStyle:props.inputFieldStyle, - animationStyle:props.animationStyle, + inputFieldStyle: props.inputFieldStyle, + animationStyle: props.animationStyle, children: ( - <Radio - ref={props.viewRef} - disabled={props.disabled} + <MemoizedRadio value={props.value.value} - $style={props.style} - $inputFieldStyle={props.inputFieldStyle} - $layout={props.layout} - onChange={(e) => { - handleChange(e.target.value); + disabled={props.disabled} + style={props.style} + inputFieldStyle={props.inputFieldStyle} + layout={props.layout} + options={props.options} + onChange={handleValidateChange} + viewRef={(el) => { + if (!mountedRef.current) return; + if (el) { + props.viewRef(el); + radioRef.current = el; + } }} - options={props.options - .filter((option) => option.value !== undefined && !option.hidden) - .map((option) => ({ - label: option.label, - value: option.value, - disabled: option.disabled, - }))} /> ), ...validateState, diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/radioCompConstants.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/radioCompConstants.tsx index 2945fec1f8..25efd5ef75 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/radioCompConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/radioCompConstants.tsx @@ -1,5 +1,5 @@ import { RecordConstructorToComp } from "lowcoder-core"; -import { BoolCodeControl } from "../../controls/codeControl"; +import { BoolCodeControl, NumberControl } from "../../controls/codeControl"; import { LabelControl } from "../../controls/labelControl"; import { arrayStringExposingStateControl, @@ -43,6 +43,7 @@ export const RadioChildrenMap = { viewRef: RefControl<HTMLDivElement>, inputFieldStyle:styleControl(RadioStyle ,'inputFieldStyle' ), animationStyle: styleControl(AnimationStyle , 'animationStyle'), + tabIndex: NumberControl, ...SelectInputValidationChildren, ...formDataChildren, }; @@ -73,7 +74,9 @@ export const RadioPropertyView = ( {disabledPropertyView(children)} {hiddenPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children as any)} - </Section></> + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} + </Section> + </> )} {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx index fe030f20b6..0da2dce212 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/selectCompConstants.tsx @@ -271,13 +271,15 @@ export const SelectUIView = ( filterOption={(input, option) => option?.label.toLowerCase().includes(input.toLowerCase()) } - dropdownRender={(originNode: ReactNode) => ( + popupRender={(originNode: ReactNode) => ( <DropdownStyled $style={props.childrenInputFieldStyle as ChildrenMultiSelectStyleType}> {originNode} </DropdownStyled> )} - dropdownStyle={{ - padding: 0, + styles={{ + popup: { + root: { padding: 0 }, + } }} menuItemSelectedIcon={props.mode ? <MultiselectTagIcon title="" /> : ""} onChange={props.onChange} diff --git a/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx b/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx index f8c916404f..ca24b74924 100644 --- a/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx +++ b/client/packages/lowcoder/src/comps/comps/selectInputComp/stepControl.tsx @@ -151,6 +151,9 @@ let StepControlBasicComp = (function () { const onChange = (index: number) => { if (props.selectable == false) return; const newIndex = Math.max(0, index); + if (props.options[newIndex]?.disabled) { + return; + } setCurrent(newIndex); if (props.options[newIndex]?.value !== undefined) { props.value.onChange(newIndex + 1 + ""); // Convert back to 1-based index for display. @@ -198,6 +201,7 @@ let StepControlBasicComp = (function () { title={option.label} subTitle={option.subTitle} description={option.description} + disabled={option.disabled} status={option.status as "error" | "finish" | "wait" | "process" | undefined} icon={props.showIcons && hasIcon(option.icon) && option.icon || undefined} /> diff --git a/client/packages/lowcoder/src/comps/comps/signatureComp.tsx b/client/packages/lowcoder/src/comps/comps/signatureComp.tsx index 6ba13fe0ed..d113e08df4 100644 --- a/client/packages/lowcoder/src/comps/comps/signatureComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/signatureComp.tsx @@ -19,8 +19,8 @@ import { hiddenPropertyView, showDataLoadingIndicatorsPropertyView } from "comps import { trans } from "i18n"; import { changeValueAction, multiChangeAction } from "lowcoder-core"; import { Section, sectionNames, UndoIcon } from "lowcoder-design"; -import React, { Suspense, useEffect, useState } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import React, { Suspense, useEffect, useRef, useState } from "react"; +import { ResizePayload, useResizeDetector } from "react-resize-detector"; import type SignatureCanvasType from "react-signature-canvas"; import styled from "styled-components"; import { UICompBuilder } from "../generators"; @@ -112,91 +112,117 @@ const SignatureCanvas = React.lazy(() => import("react-signature-canvas")); let SignatureTmpComp = (function () { return new UICompBuilder(childrenMap, (props, dispatch) => { - let canvas: SignatureCanvasType | null = null; + const canvasRef = useRef<SignatureCanvasType | null>(null); const [isBegin, setIsBegin] = useState(false); const [canvasSize, setCanvasSize] = useState([0, 0]); + const conRef = useRef<HTMLDivElement>(null); const updateValue = (isClear: boolean = false) => { - const clear = isClear || canvas?.toData().length === 0; - if (canvas) { - clear && canvas?.clear(); + if (!canvasRef.current) return; + + const clear = isClear || canvasRef.current.toData().length === 0; + if (clear) { + canvasRef.current.clear(); + setIsBegin(false); dispatch( multiChangeAction({ - value: changeValueAction(clear ? "" : canvas.toDataURL(), false), + value: changeValueAction("", false), + }) + ); + } else { + dispatch( + multiChangeAction({ + value: changeValueAction(canvasRef.current.toDataURL(), false), }) ); } }; + + useResizeDetector({ + targetRef: conRef, + onResize: ({width, height}: ResizePayload) => { + if (width && height) { + setCanvasSize([width, height]); + // Don't clear on resize as it breaks the drawing functionality + // updateValue(true); + } + }, + }); + + // Cleanup on unmount + useEffect(() => { + return () => { + if (canvasRef.current) { + canvasRef.current.clear(); + } + }; + }, []); + return props.label({ style: props.style, labelStyle: props.labelStyle, - inputFieldStyle:props.inputFieldStyle, + inputFieldStyle: props.inputFieldStyle, children: ( - <ReactResizeDetector - onResize={(width, height) => { - width && height && setCanvasSize([width, height]); - updateValue(true); + <Wrapper + ref={conRef} + onMouseDown={(e) => { + e.preventDefault(); }} + $style={props.inputFieldStyle} + $isEmpty={!props.value && !isBegin} > - <Wrapper - onMouseDown={(e) => { - e.preventDefault(); - }} - $style={props.inputFieldStyle} - $isEmpty={!props.value && !isBegin} - > - <div className="signature"> - <Suspense fallback={<Skeleton />}> - <SignatureCanvas - ref={(ref) => { - canvas = ref; - }} - penColor={props.inputFieldStyle.pen} - clearOnResize={false} - canvasProps={{ - className: "sigCanvas", - width: canvasSize[0], - height: canvasSize[1], - }} - onEnd={() => { - updateValue(); - setIsBegin(false); + <div key="signature" className="signature"> + <Suspense fallback={<Skeleton />}> + <SignatureCanvas + ref={canvasRef} + penColor={props.inputFieldStyle.pen} + clearOnResize={false} + canvasProps={{ + className: "sigCanvas", + width: canvasSize[0], + height: canvasSize[1], + }} + onEnd={() => { + updateValue(); + setIsBegin(false); + props.onEvent("change"); + }} + onBegin={() => { + setIsBegin(true); + }} + /> + </Suspense> + </div> + {(props.showClear || props.showUndo) && ( + <div key="footer" className="footer"> + {props.showUndo && ( + <span className="anticon"> + <UndoIcon + onClick={() => { + if (!canvasRef.current) return; + const data = canvasRef.current.toData(); + if (data && data.length > 0) { + data.pop(); + canvasRef.current.fromData(data); + updateValue(); + props.onEvent("change"); + } + }} + /> + </span> + )} + {props.showClear && ( + <DeleteOutlined + onClick={() => { + updateValue(true); props.onEvent("change"); }} - onBegin={() => setIsBegin(true)} /> - </Suspense> + )} </div> - {(props.showClear || props.showUndo) && ( - <div className="footer"> - {props.showUndo && ( - <span className="anticon"> - <UndoIcon - onClick={() => { - const data = canvas?.toData(); - if (data) { - data?.pop(); - canvas?.fromData(data); - updateValue(); - props.onEvent("change"); - } - }} - /> - </span> - )} - {props.showClear && ( - <DeleteOutlined - onClick={() => { - updateValue(true); - props.onEvent("change"); - }} - /> - )} - </div> - )} - {!(isBegin || props.value) && <div className="empty">{props.tips}</div>} - </Wrapper> - </ReactResizeDetector> + )} + {!(isBegin || props.value) && <div key="empty" className="empty">{props.tips}</div>} + </Wrapper> ), }); }) diff --git a/client/packages/lowcoder/src/comps/comps/switchComp.tsx b/client/packages/lowcoder/src/comps/comps/switchComp.tsx index 730f521df4..40bada394f 100644 --- a/client/packages/lowcoder/src/comps/comps/switchComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/switchComp.tsx @@ -1,5 +1,5 @@ import { default as Switch } from "antd/es/switch"; -import { BoolCodeControl } from "comps/controls/codeControl"; +import { BoolCodeControl, NumberControl } from "comps/controls/codeControl"; import { booleanExposingStateControl } from "comps/controls/codeStateControl"; import { changeEvent, eventHandlerControl } from "comps/controls/eventHandlerControl"; import { LabelControl } from "comps/controls/labelControl"; @@ -18,7 +18,7 @@ import { refMethods } from "comps/generators/withMethodExposing"; import { blurMethod, clickMethod, focusWithOptions } from "comps/utils/methodUtils"; import { fixOldInputCompData } from "./textInputComp/textInputConstants"; -import { useContext, useEffect } from "react"; +import { useCallback, useContext, useEffect } from "react"; import { EditorContext } from "comps/editorState"; const EventOptions = [ @@ -104,6 +104,7 @@ let SwitchTmpComp = (function () { ), viewRef: RefControl<HTMLElement>, inputFieldStyle: migrateOldData(styleControl(SwitchStyle, 'inputFieldStyle'), fixOldData), + tabIndex: NumberControl, ...formDataChildren, }; return new UICompBuilder(childrenMap, (props) => { @@ -114,6 +115,12 @@ let SwitchTmpComp = (function () { props.value.onChange(defaultValue); }, [defaultValue]); + const handleChange = useCallback((checked: boolean) => { + props.value.onChange(checked); + props.onEvent("change"); + props.onEvent(checked ? "true" : "false"); + }, [props.value, props.onEvent]); + return props.label({ style: props.style, labelStyle: props.labelStyle, @@ -125,17 +132,18 @@ let SwitchTmpComp = (function () { checked={value} disabled={props.disabled} ref={props.viewRef} - onChange={(checked) => { - props.value.onChange(checked); - props.onEvent("change"); - props.onEvent(checked ? "true" : "false"); - }} + onChange={handleChange} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> </SwitchWrapper> ), }); }) .setPropertyViewFn((children) => { + const editorModeStatus = useContext(EditorContext).editorModeStatus; + const isLogicMode = ["logic", "both"].includes(editorModeStatus); + const isLayoutMode = ["layout", "both"].includes(editorModeStatus); + return ( <> <Section name={sectionNames.basic}> @@ -144,20 +152,21 @@ let SwitchTmpComp = (function () { <FormDataPropertyView {...children} /> - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + {isLogicMode && ( <Section name={sectionNames.interaction}> {children.onEvent.getPropertyView()} {disabledPropertyView(children)} {hiddenPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} {showDataLoadingIndicatorsPropertyView(children)} </Section> )} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + {isLayoutMode && ( children.label.getPropertyView() )} - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( + {isLayoutMode && ( <> <Section name={sectionNames.style}> {children.style.getPropertyView()} diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComp.tsx index 58e0b7df4f..ff3df44c4e 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComp.tsx @@ -141,6 +141,18 @@ export class ColumnTypeComp extends TypedColumnTypeComp { }; } + private handleTypeChange: (value: ColumnTypeKeys) => void = (value) => { + // Keep the previous text value, some components do not have text, the default value is currentCell + let textRawData = "{{currentCell}}"; + if (this.children.comp.children.hasOwnProperty("text")) { + textRawData = (this.children.comp.children as any).text.toJsonValue(); + } + this.dispatchChangeValueAction({ + compType: value, + comp: { text: textRawData }, + } as any); + } + override getPropertyView() { return ( <> @@ -149,17 +161,7 @@ export class ColumnTypeComp extends TypedColumnTypeComp { value={this.children.compType.getView()} options={actionOptions} label={trans("table.columnType")} - onChange={(value) => { - // Keep the previous text value, some components do not have text, the default value is currentCell - let textRawData = "{{currentCell}}"; - if (this.children.comp.children.hasOwnProperty("text")) { - textRawData = (this.children.comp.children as any).text.toJsonValue(); - } - this.dispatchChangeValueAction({ - compType: value, - comp: { text: textRawData }, - } as any); - }} + onChange={this.handleTypeChange} /> {this.children.comp.getPropertyView()} </> diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeCompBuilder.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeCompBuilder.tsx index 98d5703786..b401761d26 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeCompBuilder.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeCompBuilder.tsx @@ -54,6 +54,7 @@ export class ColumnTypeCompBuilder< RecordConstructorToComp<NewChildrenCtorMap<ChildrenCtorMap, T>> >; private editViewFn?: EditViewFn<T>; + private cleanupFunctions: (() => void)[] = []; constructor( childrenMap: ChildrenCtorMap, @@ -93,22 +94,57 @@ export class ColumnTypeCompBuilder< if (!this.propertyViewFn) { throw new Error("need property view fn"); } + + // Memoize the props processing + const memoizedViewFn = _.memoize( + (props: any, dispatch: any) => { + const baseValue = this.baseValueFn?.(props, dispatch); + const normalView = this.viewFn(props, dispatch); + return ( + <EditableCell<T> + {...props} + normalView={normalView} + dispatch={dispatch} + baseValue={baseValue} + changeValue={props.changeValue as any} + editViewFn={this.editViewFn} + /> + ); + }, + (props) => { + let safeOptions = []; + let safeAvatars = []; + if(props.options) { + safeOptions = props.options.map((option: Record<string, any>) => { + const {prefixIcon, suffixIcon, ...safeOption} = option; + return safeOption; + }) + } + if(props.avatars) { + safeAvatars = props.avatars.map((avatar: Record<string, any>) => { + const {AvatarIcon, ...safeAvatar} = avatar; + return safeAvatar; + }) + } + const { + prefixIcon, + suffixIcon, + iconFalse, + iconTrue, + iconNull, + tagColors, + options, + avatars, + ...safeProps + } = props; + return safeProps; + } + ); + const viewFn: ColumnTypeViewFn<ChildrenCtorMap, T, CellViewReturn> = (props, dispatch): CellViewReturn => - (cellProps) => { - const baseValue = this.baseValueFn?.(props, dispatch); - const normalView = this.viewFn(props, dispatch); - return ( - <EditableCell<T> - {...cellProps} - normalView={normalView} - dispatch={dispatch} - baseValue={baseValue} - changeValue={props.changeValue as any} - editViewFn={this.editViewFn} - /> - ); - }; + (cellProps) => memoizedViewFn({ ...props, ...cellProps } as any, dispatch); + const ColumnTypeCompTmp = new MultiCompBuilder( this.childrenMap as ToConstructor< RecordConstructorToComp<NewChildrenCtorMap<ChildrenCtorMap, T>> @@ -117,12 +153,21 @@ export class ColumnTypeCompBuilder< ) .setPropertyViewFn(this.propertyViewFn) .build(); + const displayValueFn = this.displayValueFn; const editViewFn = this.editViewFn; return class extends ColumnTypeCompTmp { // table cell data - readonly displayValue: JSONValue = null; + private _displayValue: JSONValue = null; + private cleanupFunctions: (() => void)[] = []; + constructor(props: any) { + super(props); + this.cleanupFunctions.push(() => { + this._displayValue = null; + memoizedViewFn.cache.clear?.(); + }); + } override extraNode() { return { @@ -134,7 +179,8 @@ export class ColumnTypeCompBuilder< }, updateNodeFields: (value: any) => { const displayValueFunc = value[__COLUMN_DISPLAY_VALUE_FN]; - return { displayValue: displayValueFunc(value) }; + this._displayValue = displayValueFunc(value); + return { displayValue: this._displayValue }; }, }; } @@ -143,12 +189,24 @@ export class ColumnTypeCompBuilder< * Get the data actually displayed by the table cell */ getDisplayValue() { - return this.displayValue; + return this._displayValue; } static canBeEditable() { return !_.isNil(editViewFn); } + + componentWillUnmount() { + // Cleanup all registered cleanup functions + this.cleanupFunctions.forEach(cleanup => cleanup()); + this.cleanupFunctions = []; + } }; } + + // Cleanup method to be called when the builder is no longer needed + cleanup() { + this.cleanupFunctions.forEach(cleanup => cleanup()); + this.cleanupFunctions = []; + } } diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/ColumnNumberComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/ColumnNumberComp.tsx index 8c7ea937d3..f221b547db 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/ColumnNumberComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/ColumnNumberComp.tsx @@ -1,4 +1,5 @@ - import { default as InputNumber } from "antd/es/input-number"; +import React, { useState, useRef, useEffect, useCallback, useMemo, ReactNode } from "react"; +import { default as InputNumber } from "antd/es/input-number"; import { NumberControl, RangeControl, StringControl } from "comps/controls/codeControl"; import { BoolControl } from "comps/controls/boolControl"; import { trans } from "i18n"; @@ -35,59 +36,123 @@ const childrenMap = { suffix: StringControl, }; -let float = false; -let step = 1; -let precision = 0; +const getBaseValue: ColumnTypeViewFn<typeof childrenMap, number, number> = (props) => props.text; -const getBaseValue: ColumnTypeViewFn<typeof childrenMap, number, number> = ( - props -) => { - return props.text +type NumberViewProps = { + value: number; + prefix: string; + suffix: string; + prefixIcon: ReactNode; + suffixIcon: ReactNode; + float: boolean; + precision: number; }; +type NumberEditProps = { + value: number; + onChange: (value: number) => void; + onChangeEnd: () => void; + step: number; + precision: number; + float: boolean; +}; + +const ColumnNumberView = React.memo((props: NumberViewProps) => { + const formattedValue = useMemo(() => { + let result = !props.float ? Math.floor(props.value) : props.value; + if (props.float) { + result = Number(result.toFixed(props.precision + 1)); + } + return result; + }, [props.value, props.float, props.precision]); + + return ( + <> + {hasIcon(props.prefixIcon) && ( + <span>{props.prefixIcon}</span> + )} + <span>{props.prefix + formattedValue + props.suffix}</span> + {hasIcon(props.suffixIcon) && ( + <span>{props.suffixIcon}</span> + )} + </> + ); +}); + +ColumnNumberView.displayName = 'ColumnNumberView'; + + +const ColumnNumberEdit = React.memo((props: NumberEditProps) => { + const [currentValue, setCurrentValue] = useState(props.value); + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setCurrentValue(0); + }; + }, []); + + const handleChange = useCallback((value: string | number | null) => { + if (!mountedRef.current) return; + const newValue = typeof value === 'number' ? value : 0; + const finalValue = !props.float ? Math.floor(newValue) : newValue; + props.onChange(finalValue); + setCurrentValue(finalValue); + }, [props.onChange, props.float]); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + const handlePressEnter = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + return ( + <InputNumberWrapper> + <InputNumber + step={props.step} + value={currentValue} + autoFocus + variant="borderless" + onChange={handleChange} + precision={props.float ? props.precision : 0} + onBlur={handleBlur} + onPressEnter={handlePressEnter} + /> + </InputNumberWrapper> + ); +}); + +ColumnNumberEdit.displayName = 'NumberEdit'; + export const ColumnNumberComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { - float = props.float; - step = props.step; - precision = props.precision; const value = props.changeValue ?? getBaseValue(props, dispatch); - let formattedValue: string | number = !float ? Math.floor(value) : value; - if(float) { - formattedValue = formattedValue.toFixed(precision + 1); - } - return ( - <>{hasIcon(props.prefixIcon) && ( - <span>{props.prefixIcon}</span> - )} - <span>{props.prefix + formattedValue + props.suffix}</span> - {hasIcon(props.suffixIcon) && ( - <span>{props.suffixIcon}</span> - )} </> - ); + return <ColumnNumberView value={value} {...props} />; }, (nodeValue) => nodeValue.text.value, - getBaseValue, + getBaseValue ) .setEditViewFn((props) => { + const { value, onChange, onChangeEnd, otherProps } = props; return ( - <InputNumberWrapper> - <InputNumber - step={step} - defaultValue={props.value} - autoFocus - variant="borderless" - onChange={(value) => { - value = value ?? 0; - props.onChange(!float ? Math.floor(value) : value); - }} - precision={float ? precision : 0} - onBlur={props.onChangeEnd} - onPressEnter={props.onChangeEnd} + <ColumnNumberEdit + value={value} + onChange={onChange} + onChangeEnd={onChangeEnd} + step={otherProps?.step ?? 1} + precision={otherProps?.precision ?? 0} + float={otherProps?.float ?? false} /> - </InputNumberWrapper> - )}) + ); + }) .setPropertyViewFn((children) => { return ( <> @@ -99,7 +164,7 @@ export const ColumnNumberComp = (function () { label: trans("table.numberStep"), tooltip: trans("table.numberStepTooltip"), onFocus: (focused) => { - if(!focused) { + if (!focused) { const value = children.step.getView(); const isFloat = children.float.getView(); const newValue = !isFloat ? Math.floor(value) : value; @@ -107,7 +172,7 @@ export const ColumnNumberComp = (function () { } } })} - {float && ( + {children.float.getView() && ( children.precision.propertyView({ label: trans("table.precision"), }) diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnAvatarsComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnAvatarsComp.tsx index 0b159b08db..c34b6dfbb9 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnAvatarsComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnAvatarsComp.tsx @@ -10,7 +10,7 @@ import { AlignCenter, AlignLeft, AlignRight } from "lowcoder-design"; import { NumberControl } from "comps/controls/codeControl"; import { Avatar, Tooltip } from "antd"; import { clickEvent, eventHandlerControl, refreshEvent } from "comps/controls/eventHandlerControl"; -import { ReactElement, useContext, useEffect } from "react"; +import React, { ReactElement, useCallback, useEffect, useRef } from "react"; import { IconControl } from "comps/controls/iconControl"; import { ColorControl } from "comps/controls/colorControl"; import { optionsControl } from "comps/controls/optionsControl"; @@ -18,16 +18,6 @@ import { BoolControl } from "comps/controls/boolControl"; import { dropdownControl } from "comps/controls/dropdownControl"; import { JSONObject } from "util/jsonTypes"; -const MenuLinkWrapper = styled.div` - > a { - color: ${PrimaryColor} !important; - - &:hover { - color: ${LightActiveTextColor} !important; - } - } -`; - const MacaroneList = [ '#fde68a', '#eecff3', @@ -86,6 +76,100 @@ export const alignOptions = [ { label: <AlignRight />, value: "flex-end" }, ] as const; +// Memoized Avatar component +const MemoizedAvatar = React.memo(({ + item, + index, + style, + autoColor, + avatarSize, + onEvent +}: { + item: any; + index: number; + style: any; + autoColor: boolean; + avatarSize: number; + onEvent: (event: string) => void; +}) => { + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleClick = useCallback(() => { + if (!mountedRef.current) return; + onEvent("click"); + }, [onEvent]); + + return ( + <Tooltip title={item.Tooltip} key={index}> + <Avatar + src={item.src ?? undefined} + icon={(item.AvatarIcon as ReactElement)?.props.value === '' || item.label.trim() !== '' ? undefined : item.AvatarIcon} + style={{ + color: item.color ? item.color : (style.fill !== '#FFFFFF' ? style.fill : '#FFFFFF'), + backgroundColor: item.backgroundColor ? item.backgroundColor : (autoColor ? MacaroneList[index % MacaroneList.length] : style.background), + }} + size={avatarSize} + onClick={handleClick} + > + {item.label} + </Avatar> + </Tooltip> + ); +}); + +MemoizedAvatar.displayName = 'MemoizedAvatar'; + +// Memoized Avatar Group component +const MemoizedAvatarGroup = React.memo(({ + avatars, + maxCount, + avatarSize, + style, + autoColor, + onEvent +}: { + avatars: any[]; + maxCount: number; + avatarSize: number; + style: any; + autoColor: boolean; + onEvent: (event: string) => void; +}) => { + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + return ( + <Avatar.Group maxCount={maxCount} size={avatarSize}> + {avatars.map((item, index) => ( + <MemoizedAvatar + key={index} + item={item} + index={index} + style={style} + autoColor={autoColor} + avatarSize={avatarSize} + onEvent={onEvent} + /> + ))} + </Avatar.Group> + ); +}); + +MemoizedAvatarGroup.displayName = 'MemoizedAvatarGroup'; + export const ColumnAvatarsComp = (function () { const childrenMap = { style: styleControl(avatarGroupStyle), @@ -107,42 +191,22 @@ export const ColumnAvatarsComp = (function () { return new ColumnTypeCompBuilder( childrenMap, - (props , dispatch) => { + (props, dispatch) => { return ( <Container $style={props.style} alignment={props.alignment} > - { - <Avatar.Group maxCount={props.maxCount} size={props.avatarSize}> - { - props.avatars.map((item, index) => { - return ( - <Tooltip title={item.Tooltip}> - <Avatar - src={item.src ?? undefined} - icon={(item.AvatarIcon as ReactElement)?.props.value === '' || item.label.trim() !== '' ? undefined : item.AvatarIcon} - style={{ - color: item.color ? item.color : (props.style.fill !== '#FFFFFF' ? props.style.fill : '#FFFFFF'), - backgroundColor: item.backgroundColor ? item.backgroundColor : (props.autoColor ? MacaroneList[index % MacaroneList.length] : props.style.background), - }} - size={props.avatarSize} - onClick={() => { - props.onEvent("click") - // Falk: TODO: Implement dispatch function to set the currentAvatar - // dispatch(changeChildAction("currentAvatar", item as JSONObject, false)); - }} - > - {item.label} - </Avatar> - </Tooltip> - ) - }) - } - </Avatar.Group> - } + <MemoizedAvatarGroup + avatars={props.avatars} + maxCount={props.maxCount} + avatarSize={props.avatarSize} + style={props.style} + autoColor={props.autoColor} + onEvent={props.onEvent} + /> </Container> - ) + ); }, () => "" ) diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnBooleanComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnBooleanComp.tsx index 8c53650a81..d1d530eb6c 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnBooleanComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnBooleanComp.tsx @@ -1,6 +1,7 @@ +import React, { useCallback, useRef, useEffect, useMemo } from "react"; import { BoolCodeControl } from "comps/controls/codeControl"; import { trans } from "i18n"; -import { default as Checkbox } from "antd/es/checkbox"; +import { default as Checkbox, CheckboxChangeEvent } from "antd/es/checkbox"; import { ColumnTypeCompBuilder, ColumnTypeViewFn } from "../columnTypeCompBuilder"; import { ColumnValueTooltip } from "../simpleColumnTypeComps"; import { getStyle } from "comps/comps/selectInputComp/checkboxComp"; @@ -65,44 +66,101 @@ type CheckBoxEditPropsType = { onChangeEnd: () => void; }; -const CheckBoxEdit = (props: CheckBoxEditPropsType) => { +// Memoized checkbox edit component +const CheckBoxEdit = React.memo((props: CheckBoxEditPropsType) => { + const mountedRef = useRef(true); const style = useStyle(CheckboxStyle); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + const handleKeyDown = useCallback((e: React.KeyboardEvent) => { + if (!mountedRef.current) return; + if (e.key === "Enter") { + props.onChangeEnd(); + } + }, [props.onChangeEnd]); + + const handleChange = useCallback((e: CheckboxChangeEvent) => { + if (!mountedRef.current) return; + props.onChange(e.target.checked); + }, [props.onChange]); + return ( <Wrapper - onBlur={() => props.onChangeEnd()} - onKeyDown={(e) => { - if (e.key === "Enter") { - props.onChangeEnd(); - } - }} + onBlur={handleBlur} + onKeyDown={handleKeyDown} > <CheckboxStyled autoFocus $style={style} defaultChecked={props.value} - onChange={(e) => props.onChange(e.target.checked)} + onChange={handleChange} /> </Wrapper> ); -}; +}); + +CheckBoxEdit.displayName = 'CheckBoxEdit'; + +// Memoized checkbox view component +const CheckBoxView = React.memo(({ + value, + iconTrue, + iconFalse, + iconNull, + falseValues +}: { + value: boolean; + iconTrue: React.ReactNode; + iconFalse: React.ReactNode; + iconNull: React.ReactNode; + falseValues: string; +}) => { + const style = useStyle(CheckboxStyle); + + const content = useMemo(() => { + if (value === true) { + return hasIcon(iconTrue) ? iconTrue : <TableCheckedIcon />; + } else if (value === false) { + return hasIcon(iconFalse) ? iconFalse : (falseValues === "x" ? <TableUnCheckedIcon /> : falseValues); + } else { + return hasIcon(iconNull) ? iconNull : "No Value"; + } + }, [value, iconTrue, iconFalse, iconNull, falseValues]); + + return ( + <IconWrapper $style={style} $ifChecked={value}> + {content} + </IconWrapper> + ); +}); + +CheckBoxView.displayName = 'CheckBoxView'; export const BooleanComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { const value = props.changeValue ?? getBaseValue(props, dispatch); - const CheckBoxComp = () => { - const style = useStyle(CheckboxStyle); - return ( - <IconWrapper $style={style} $ifChecked={value}> - {value === true ? ( hasIcon(props.iconTrue) ? props.iconTrue : <TableCheckedIcon /> ) - : value === false ? ( hasIcon(props.iconFalse) ? props.iconFalse : ( props.falseValues === "x" ? <TableUnCheckedIcon /> : props.falseValues ) - ) : ( hasIcon(props.iconNull) ? props.iconNull : "No Value" - )} - </IconWrapper> - ); - }; - return <CheckBoxComp />; + return ( + <CheckBoxView + value={value} + iconTrue={props.iconTrue} + iconFalse={props.iconFalse} + iconNull={props.iconNull} + falseValues={props.falseValues} + /> + ); }, (nodeValue) => nodeValue.text.value, getBaseValue diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateComp.tsx index a71734f469..99bee383e6 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateComp.tsx @@ -9,10 +9,10 @@ import { withDefault } from "comps/generators"; import { formatPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { isNumber } from "lodash"; -import dayjs from "dayjs"; +import dayjs, { Dayjs } from "dayjs"; import utc from "dayjs/plugin/utc"; import { CalendarCompIconSmall, PrevIcon, SuperPrevIcon } from "lowcoder-design"; -import { useEffect, useRef, useState } from "react"; +import React, { useCallback, useEffect, useRef, useState } from "react"; import styled from "styled-components"; import { DateParser, DATE_FORMAT } from "util/dateTimeUtils"; @@ -49,9 +49,7 @@ const DatePickerStyled = styled(DatePicker)<{ $open: boolean }>` top: 0.5px; display: flex; align-items: center; - // background: #fff; padding: 0 3px; - // border-left: 1px solid #d7d9e0; } `; @@ -117,6 +115,12 @@ const StylePanel = styled.div` } `; +const DatePickerPopup = styled.div` + border-radius: 8px; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.10); + overflow: hidden; +`; + const Wrapper = styled.div` background: transparent !important; `; @@ -127,7 +131,6 @@ export function formatDate(date: string, format: string) { mom = dayjs(Number(date)); } if (!mom.isValid()) { - // mom = dayjs.utc(date, DateParser).local(); mom = dayjs.utc(date).local(); } @@ -140,8 +143,6 @@ const childrenMap = { inputFormat: withDefault(StringControl, DATE_FORMAT), }; -let inputFormat = DATE_FORMAT; - const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; type DateEditProps = { @@ -152,32 +153,72 @@ type DateEditProps = { inputFormat: string; }; -export const DateEdit = (props: DateEditProps) => { +// Memoized DateEdit component +export const DateEdit = React.memo((props: DateEditProps) => { const pickerRef = useRef<any>(); + const mountedRef = useRef(true); const [panelOpen, setPanelOpen] = useState(true); - let value = dayjs(props.value, DateParser); - if (!value.isValid()) { - value = dayjs(0, DateParser); - } + + // Initialize tempValue with proper validation + const [tempValue, setTempValue] = useState<dayjs.Dayjs | null>(() => { + const initialValue = dayjs(props.value, DateParser); + return initialValue.isValid() ? initialValue : dayjs(0, DateParser); + }); + + // Memoize event handlers + const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => { + if (!mountedRef.current) return; + if (e.key === "Enter" && !panelOpen) { + props.onChangeEnd(); + } + }, [panelOpen, props.onChangeEnd]); + + const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => { + if (!mountedRef.current) return; + e.stopPropagation(); + e.preventDefault(); + }, []); + + const handleOpenChange = useCallback((open: boolean) => { + if (!mountedRef.current) return; + setPanelOpen(open); + }, []); - const [tempValue, setTempValue] = useState<dayjs.Dayjs | null>(value); + const handleChange = useCallback((value: dayjs.Dayjs | null, dateString: string | string[]) => { + if (!mountedRef.current) return; + props.onChange(dateString as string); + }, [props.onChange]); + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + // Update tempValue when props.value changes useEffect(() => { - const value = props.value ? dayjs(props.value, DateParser) : null; - setTempValue(value); - }, [props.value]) + if (!mountedRef.current) return; + + const newValue = props.value ? dayjs(props.value, DateParser) : null; + if (newValue?.isValid()) { + setTempValue(newValue); + } + }, [props.value]); + + // Cleanup event listeners and state + useEffect(() => { + return () => { + mountedRef.current = false; + setTempValue(null); + if (pickerRef.current) { + pickerRef.current = null; + } + }; + }, []); return ( <Wrapper - onKeyDown={(e) => { - if (e.key === "Enter" && !panelOpen) { - props.onChangeEnd(); - } - }} - onMouseDown={(e) => { - e.stopPropagation(); - e.preventDefault(); - }} + onKeyDown={handleKeyDown} + onMouseDown={handleMouseDown} > <DatePickerStyled ref={pickerRef} @@ -195,27 +236,25 @@ export const DateEdit = (props: DateEditProps) => { showTime={props.showTime} showNow={true} defaultOpen={true} - panelRender={(panelNode) => <StylePanel>{panelNode}</StylePanel>} - popupStyle={{ - borderRadius: "8px", - boxShadow: "0 0 10px 0 rgba(0,0,0,0.10)", - overflow: "hidden", - }} - onOpenChange={(open) => setPanelOpen(open)} - onChange={(value, dateString) => { - props.onChange(dateString as string) - }} - onBlur={() => props.onChangeEnd()} + panelRender={(panelNode) => ( + <DatePickerPopup> + <StylePanel>{panelNode}</StylePanel> + </DatePickerPopup> + )} + onOpenChange={handleOpenChange} + onChange={(date: unknown, dateString: string | string[]) => handleChange(date as Dayjs | null, dateString)} + onBlur={handleBlur} /> </Wrapper> ); -}; +}); + +DateEdit.displayName = 'DateEdit'; export const DateComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { - inputFormat = props.inputFormat; const value = props.changeValue ?? getBaseValue(props, dispatch); return formatDate(value, props.format); }, @@ -228,7 +267,7 @@ export const DateComp = (function () { onChange={props.onChange} onChangeEnd={props.onChangeEnd} showTime={false} - inputFormat={inputFormat} + inputFormat={props.otherProps?.inputFormat} /> )) .setPropertyViewFn((children) => ( diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateTimeComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateTimeComp.tsx index 7e243fdfb0..181fccba7b 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateTimeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDateTimeComp.tsx @@ -9,6 +9,7 @@ import { formatPropertyView } from "comps/utils/propertyUtils"; import { trans } from "i18n"; import { DATE_TIME_FORMAT } from "util/dateTimeUtils"; import { DateEdit, formatDate } from "./columnDateComp"; +import React, { useCallback, useEffect, useRef } from "react"; const childrenMap = { text: StringControl, @@ -16,15 +17,52 @@ const childrenMap = { inputFormat: withDefault(StringControl, DATE_TIME_FORMAT), }; -let inputFormat = DATE_TIME_FORMAT; - const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; +// Memoized DateTimeEdit component +const DateTimeEdit = React.memo((props: { + value: string; + onChange: (value: string) => void; + onChangeEnd: () => void; + inputFormat: string; +}) => { + const mountedRef = useRef(true); + + // Memoize event handlers + const handleChange = useCallback((value: string) => { + if (!mountedRef.current) return; + props.onChange(value); + }, [props.onChange]); + + const handleChangeEnd = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + return ( + <DateEdit + value={props.value} + onChange={handleChange} + onChangeEnd={handleChangeEnd} + showTime={true} + inputFormat={props.inputFormat} + /> + ); +}); + +DateTimeEdit.displayName = 'DateTimeEdit'; + export const DateTimeComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { - inputFormat = props.inputFormat; const value = props.changeValue ?? getBaseValue(props, dispatch); return formatDate(value, props.format); }, @@ -32,12 +70,11 @@ export const DateTimeComp = (function () { getBaseValue ) .setEditViewFn((props) => ( - <DateEdit + <DateTimeEdit value={props.value} onChange={props.onChange} onChangeEnd={props.onChangeEnd} - showTime={true} - inputFormat={inputFormat} + inputFormat={props.otherProps?.inputFormat} /> )) .setPropertyViewFn((children) => ( diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDropdownComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDropdownComp.tsx index de554ac0ed..d71ad03cb3 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDropdownComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnDropdownComp.tsx @@ -1,4 +1,4 @@ -import { ReactElement } from "react"; +import React, { ReactNode, useCallback, useRef, useEffect, useMemo, ReactElement } from "react"; import { DropdownOptionControl } from "comps/controls/optionsControl"; import { StringControl } from "comps/controls/codeControl"; import { trans } from "i18n"; @@ -13,6 +13,20 @@ import { ButtonTypeOptions } from "../simpleColumnTypeComps"; import { useStyle } from "comps/controls/styleControl"; import { ButtonStyle } from "comps/controls/styleControlConstants"; import { Button100 } from "comps/comps/buttonComp/buttonCompConstants"; +import styled from "styled-components"; +import { ButtonType } from "antd/es/button"; + +const StyledButton = styled(Button100)` + display: flex; + align-items: center; + gap: 0; + min-width: 30px; + width: auto; +`; + +const StyledIconWrapper = styled(IconWrapper)` + margin: 0; +`; const childrenMap = { buttonType: dropdownControl(ButtonTypeOptions, "primary"), @@ -24,88 +38,128 @@ const childrenMap = { const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.label; +// Memoized dropdown menu component +const DropdownMenu = React.memo(({ items, options }: { items: any[]; options: any[] }) => { + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleClick = useCallback(({ key }: { key: string }) => { + if (!mountedRef.current) return; + const item = items.find((o) => o.key === key); + const itemIndex = options.findIndex(option => option.label === item?.label); + item && options[itemIndex]?.onEvent("click"); + }, [items, options]); + + const handleMouseDown = useCallback((e: React.MouseEvent) => { + e.stopPropagation(); + e.preventDefault(); + }, []); + + return ( + <Menu + items={items} + onClick={handleClick} + onMouseDown={handleMouseDown} + /> + ); +}); + +DropdownMenu.displayName = 'DropdownMenu'; + +const DropdownView = React.memo((props: { + buttonType: ButtonType; + label: string; + prefixIcon: ReactNode; + suffixIcon: ReactNode; + options: any[]; +}) => { + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const hasOptionIcon = useMemo(() => + props.options.findIndex((option) => (option.prefixIcon as ReactElement)?.props.value) > -1, + [props.options] + ); + + const items = useMemo(() => + props.options + .filter((option) => !option.hidden) + .map((option, index) => ({ + title: option.label, + label: option.label, + key: option.label + " - " + index, + disabled: option.disabled, + icon: hasOptionIcon && <span>{option.prefixIcon}</span>, + index, + })), + [props.options, hasOptionIcon] + ); + + const hasPrefixIcon = useMemo(() => + (props.prefixIcon as ReactElement)?.props.value, + [props.prefixIcon] + ); + + const hasSuffixIcon = useMemo(() => + (props.suffixIcon as ReactElement)?.props.value, + [props.suffixIcon] + ); + + const buttonStyle = useStyle(ButtonStyle); + + const menu = useMemo(() => ( + <DropdownMenu items={items} options={props.options} /> + ), [items, props.options]); + + return ( + <Dropdown + trigger={["click"]} + placement="bottomRight" + popupRender={() => menu} + > + <StyledButton + type={props.buttonType} + $buttonStyle={props.buttonType === "primary" ? buttonStyle : undefined} + > + {hasPrefixIcon && ( + <StyledIconWrapper style={{ + marginRight: props.label || hasSuffixIcon ? '3px' : '0x', + }}> + {props.prefixIcon} + </StyledIconWrapper> + )} + {props.label || (hasPrefixIcon || hasSuffixIcon ? undefined : " ")} + {hasSuffixIcon && ( + <StyledIconWrapper style={{ + marginLeft: props.label || hasPrefixIcon ? '3px' : '0x', + }}> + {props.suffixIcon} + </StyledIconWrapper> + )} + </StyledButton> + </Dropdown> + ); +}); + +DropdownView.displayName = 'DropdownView'; + export const ColumnDropdownComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props) => { - const hasOptionIcon = props.options.findIndex((option) => (option.prefixIcon as ReactElement)?.props.value) > -1; - const items = props.options - .filter((option) => !option.hidden) - .map((option, index) => ({ - title: option.label, - label: option.label, - key: option.label + " - " + index, - disabled: option.disabled, - icon: hasOptionIcon && <span>{option.prefixIcon}</span>, - index, - })); - - const hasPrefixIcon = (props.prefixIcon as ReactElement)?.props.value; - const hasSuffixIcon = (props.suffixIcon as ReactElement)?.props.value; - const buttonStyle = useStyle(ButtonStyle); - - const menu = ( - <Menu - items={items} - onClick={({ key }) => { - const item = items.find((o) => o.key === key); - const itemIndex = props.options.findIndex(option => option.label === item?.label); - item && props.options[itemIndex]?.onEvent("click"); - }} - onMouseDown={(e) => { - e.stopPropagation(); - e.preventDefault(); - }} - /> - ); - - return ( - <Dropdown - trigger={["click"]} - placement="bottomRight" - dropdownRender={() => menu} - > - <Button100 - type={props.buttonType} - style={{ - display: 'flex', - alignItems: 'center', - gap: '0', - minWidth: '30px', - width: 'auto', - }} - $buttonStyle={ - props.buttonType === "primary" - ? buttonStyle - : undefined - } - > - { - hasPrefixIcon && ( - <IconWrapper style={{ - margin: '0px', - marginRight: props.label || hasSuffixIcon ? '3px' : '0x', - }}> - {props.prefixIcon} - </IconWrapper> - ) - } - { - props.label || (hasPrefixIcon || hasSuffixIcon ? undefined : " ") // Avoid button disappearing - } - { - hasSuffixIcon && ( - <IconWrapper style={{ - margin: '0px', - marginLeft: props.label || hasPrefixIcon ? '3px' : '0x', - }}> - {props.suffixIcon} - </IconWrapper> - ) - } - </Button100> - </Dropdown> - ); + return <DropdownView {...props} />; }, (nodeValue) => nodeValue.label.value, getBaseValue, diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnImgComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnImgComp.tsx index 566da4aa9e..b062f8fc46 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnImgComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnImgComp.tsx @@ -1,3 +1,4 @@ +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { default as Input } from "antd/es/input"; import { ColumnTypeCompBuilder, @@ -7,6 +8,8 @@ import { StringControl, NumberControl } from "comps/controls/codeControl"; import { trans } from "i18n"; import { withDefault } from "comps/generators"; import { TacoImage } from "lowcoder-design"; +import styled from "styled-components"; +import { DEFAULT_IMG_URL } from "@lowcoder-ee/util/stringUtils"; export const ColumnValueTooltip = trans("table.columnValueTooltip"); @@ -15,6 +18,77 @@ const childrenMap = { size: withDefault(NumberControl, "50"), }; +const StyledTacoImage = styled(TacoImage)` + pointer-events: auto; +`; + +// Memoized image component +const ImageView = React.memo(({ src, size }: { src: string; size: number }) => { + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + return ( + <StyledTacoImage + src={src || DEFAULT_IMG_URL} + width={size} + /> + ); +}); + +ImageView.displayName = 'ImageView'; + +// Memoized edit component +const ImageEdit = React.memo(({ value, onChange, onChangeEnd }: { value: string; onChange: (value: string) => void; onChangeEnd: () => void }) => { + const mountedRef = useRef(true); + const [currentValue, setCurrentValue] = useState(value); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { + if (mountedRef.current) { + const newValue = e.target.value; + setCurrentValue(newValue); + onChange(newValue); + } + }, [onChange]); + + const handleBlur = useCallback(() => { + if (mountedRef.current) { + onChangeEnd(); + } + }, [onChangeEnd]); + + const handlePressEnter = useCallback(() => { + if (mountedRef.current) { + onChangeEnd(); + } + }, [onChangeEnd]); + + return ( + <Input + value={currentValue} + autoFocus + variant="borderless" + onChange={handleChange} + onBlur={handleBlur} + onPressEnter={handlePressEnter} + /> + ); +}); + +ImageEdit.displayName = 'ImageEdit'; + const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.src; export const ImageComp = (function () { @@ -22,22 +96,16 @@ export const ImageComp = (function () { childrenMap, (props, dispatch) => { const value = props.changeValue ?? getBaseValue(props, dispatch); - return <TacoImage style={{ pointerEvents: "auto" }} src={value} width={props.size} />; + return <ImageView src={value} size={props.size} />; }, (nodeValue) => nodeValue.src.value, getBaseValue ) .setEditViewFn((props) => ( - <Input - defaultValue={props.value} - autoFocus - variant="borderless" - onChange={(e) => { - const value = e.target.value; - props.onChange(value); - }} - onBlur={props.onChangeEnd} - onPressEnter={props.onChangeEnd} + <ImageEdit + value={props.value} + onChange={props.onChange} + onChangeEnd={props.onChangeEnd} /> )) .setPropertyViewFn((children) => { diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinkComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinkComp.tsx index 9a28d18300..c82b7326a3 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinkComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinkComp.tsx @@ -1,3 +1,4 @@ +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { default as Input } from "antd/es/input"; import { ColumnTypeCompBuilder, @@ -32,16 +33,71 @@ const StyledLink = styled.a<{ $disabled: boolean }>` ${(props) => props.$disabled && disableCss}; `; -export const ColumnLink = (props: { disabled: boolean; label: string; onClick?: () => void }) => ( - <StyledLink - $disabled={props.disabled} - onClick={() => { - !props.disabled && props.onClick && props.onClick(); - }} - > - {props.label} - </StyledLink> -); +// Memoized link component +export const ColumnLink = React.memo(({ disabled, label, onClick }: { disabled: boolean; label: string; onClick?: () => void }) => { + const handleClick = useCallback(() => { + if (!disabled && onClick) { + onClick(); + } + }, [disabled, onClick]); + + return ( + <StyledLink + $disabled={disabled} + onClick={handleClick} + > + {label} + </StyledLink> + ); +}); + +ColumnLink.displayName = 'ColumnLink'; + +// Memoized edit component +const LinkEdit = React.memo(({ value, onChange, onChangeEnd }: { value: string; onChange: (value: string) => void; onChangeEnd: () => void }) => { + const mountedRef = useRef(true); + const [currentValue, setCurrentValue] = useState(value); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { + if (mountedRef.current) { + const newValue = e.target.value; + setCurrentValue(newValue); + onChange(newValue); + } + }, [onChange]); + + const handleBlur = useCallback(() => { + if (mountedRef.current) { + onChangeEnd(); + } + }, [onChangeEnd]); + + const handlePressEnter = useCallback(() => { + if (mountedRef.current) { + onChangeEnd(); + } + }, [onChangeEnd]); + + return ( + <Input + value={currentValue} + autoFocus + variant="borderless" + onChange={handleChange} + onBlur={handleBlur} + onPressEnter={handlePressEnter} + /> + ); +}); + +LinkEdit.displayName = 'LinkEdit'; const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; @@ -56,16 +112,10 @@ export const LinkComp = (function () { getBaseValue ) .setEditViewFn((props) => ( - <Input - defaultValue={props.value} - autoFocus - variant="borderless" - onChange={(e) => { - const value = e.target.value; - props.onChange(value); - }} - onBlur={props.onChangeEnd} - onPressEnter={props.onChangeEnd} + <LinkEdit + value={props.value} + onChange={props.onChange} + onChangeEnd={props.onChangeEnd} /> )) .setPropertyViewFn((children) => ( diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinksComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinksComp.tsx index 06f7fcb388..4ecd308ddd 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinksComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinksComp.tsx @@ -1,3 +1,4 @@ +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { default as Menu } from "antd/es/menu"; import { ColumnTypeCompBuilder } from "comps/comps/tableComp/column/columnTypeCompBuilder"; import { ActionSelectorControlInContext } from "comps/controls/actionSelector/actionSelectorControl"; @@ -36,6 +37,27 @@ const MenuWrapper = styled.div` } `; +// Memoized menu item component +const MenuItem = React.memo(({ option, index }: { option: any; index: number }) => { + const handleClick = useCallback(() => { + if (!option.disabled && option.onClick) { + option.onClick(); + } + }, [option.disabled, option.onClick]); + + return ( + <MenuLinkWrapper> + <ColumnLink + disabled={option.disabled} + label={option.label} + onClick={handleClick} + /> + </MenuLinkWrapper> + ); +}); + +MenuItem.displayName = 'MenuItem'; + const OptionItem = new MultiCompBuilder( { label: StringControl, @@ -62,6 +84,36 @@ const OptionItem = new MultiCompBuilder( }) .build(); +// Memoized menu component +const LinksMenu = React.memo(({ options }: { options: any[] }) => { + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const menuItems = useMemo(() => + options + .filter((o) => !o.hidden) + .map((option, index) => ({ + key: index, + label: <MenuItem option={option} index={index} /> + })), + [options] + ); + + return ( + <MenuWrapper> + <Menu mode="horizontal" items={menuItems} /> + </MenuWrapper> + ); +}); + +LinksMenu.displayName = 'LinksMenu'; + export const ColumnLinksComp = (function () { const childrenMap = { options: manualOptionsControl(OptionItem, { @@ -71,28 +123,7 @@ export const ColumnLinksComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props) => { - const menuItems = props.options - .filter((o) => !o.hidden) - .map((option, index) => ( - { - key: index, - label: ( - <MenuLinkWrapper> - <ColumnLink - disabled={option.disabled} - label={option.label} - onClick={option.onClick} - /> - </MenuLinkWrapper> - ) - } - )); - - return ( - <MenuWrapper> - <Menu mode="horizontal" items={menuItems} /> - </MenuWrapper> - ) + return <LinksMenu options={props.options} />; }, () => "" ) diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnMarkdownComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnMarkdownComp.tsx index aa131c04e4..e8fcd9a4b2 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnMarkdownComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnMarkdownComp.tsx @@ -1,3 +1,4 @@ +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { default as Input } from "antd/es/input"; import { ColumnTypeCompBuilder, @@ -27,31 +28,80 @@ const childrenMap = { const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; +// Memoized markdown view component +const MarkdownView = React.memo(({ value }: { value: string }) => { + return ( + <Wrapper> + <TacoMarkDown>{value}</TacoMarkDown> + </Wrapper> + ); +}); + +MarkdownView.displayName = 'MarkdownView'; + +// Memoized edit component with proper cleanup +const MarkdownEdit = React.memo((props: { + value: string; + onChange: (value: string) => void; + onChangeEnd: () => void; +}) => { + const [currentValue, setCurrentValue] = useState(props.value); + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setCurrentValue(''); + }; + }, []); + + const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { + if (!mountedRef.current) return; + const value = e.target.value; + props.onChange(value); + setCurrentValue(value); + }, [props.onChange]); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + const handlePressEnter = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + return ( + <Input + value={currentValue} + autoFocus + variant="borderless" + onChange={handleChange} + onBlur={handleBlur} + onPressEnter={handlePressEnter} + /> + ); +}); + +MarkdownEdit.displayName = 'MarkdownEdit'; + export const ColumnMarkdownComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { const value = props.changeValue ?? getBaseValue(props, dispatch); - return ( - <Wrapper> - <TacoMarkDown>{value}</TacoMarkDown> - </Wrapper> - ); + return <MarkdownView value={value} />; }, (nodeValue) => nodeValue.text.value, getBaseValue ) .setEditViewFn((props) => ( - <Input - defaultValue={props.value} - autoFocus - variant="borderless" - onChange={(e) => { - const value = e.target.value; - props.onChange(value); - }} - onBlur={props.onChangeEnd} - onPressEnter={props.onChangeEnd} + <MarkdownEdit + value={props.value} + onChange={props.onChange} + onChangeEnd={props.onChangeEnd} /> )) .setPropertyViewFn((children) => ( diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnProgressComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnProgressComp.tsx index 1c5e02814f..7e06f4c8ee 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnProgressComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnProgressComp.tsx @@ -1,3 +1,4 @@ +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { NumberControl } from "comps/controls/codeControl"; import { trans } from "i18n"; import { default as InputNumber } from "antd/es/input-number"; @@ -71,6 +72,58 @@ const childrenMap = { const getBaseValue: ColumnTypeViewFn<typeof childrenMap, number, number> = (props) => props.text; +type ProgressEditProps = { + value: number; + onChange: (value: number) => void; + onChangeEnd: () => void; +}; + +const ProgressEdit = React.memo((props: ProgressEditProps) => { + const [currentValue, setCurrentValue] = useState(props.value); + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setCurrentValue(0); + }; + }, []); + + const handleChange = useCallback((value: string | number | null) => { + if (!mountedRef.current) return; + const newValue = typeof value === 'number' ? value : 0; + props.onChange(newValue); + setCurrentValue(newValue); + }, [props.onChange]); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + const handlePressEnter = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + }, [props.onChangeEnd]); + + return ( + <InputNumberStyled + min={0} + max={100} + value={currentValue} + autoFocus + variant="borderless" + controls={{ upIcon: <TablePlusIcon />, downIcon: <TableMinusIcon /> }} + onChange={handleChange} + onBlur={handleBlur} + onPressEnter={handlePressEnter} + /> + ); +}); + +ProgressEdit.displayName = 'ProgressEdit'; + export const ProgressComp = (function () { return new ColumnTypeCompBuilder( childrenMap, @@ -89,18 +142,10 @@ export const ProgressComp = (function () { ) .setEditViewFn((props) => { return ( - <InputNumberStyled - min={0} - max={100} - defaultValue={props.value} - autoFocus - variant="borderless" - controls={{ upIcon: <TablePlusIcon />, downIcon: <TableMinusIcon /> }} - onChange={(value) => { - props.onChange(Number(value)); - }} - onBlur={props.onChangeEnd} - onPressEnter={props.onChangeEnd} + <ProgressEdit + value={props.value} + onChange={props.onChange} + onChangeEnd={props.onChangeEnd} /> ); }) diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnRatingComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnRatingComp.tsx index 8aca4df276..fc44cd9367 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnRatingComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnRatingComp.tsx @@ -1,3 +1,4 @@ +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { NumberControl } from "comps/controls/codeControl"; import { trans } from "i18n"; import { ColumnTypeCompBuilder, ColumnTypeViewFn } from "../columnTypeCompBuilder"; @@ -42,7 +43,7 @@ const RateStyled = styled(Rate)<{ isEdit?: boolean }>` const Wrapper = styled.div` background: transparent !important; padding: 0 8px; -` +`; const childrenMap = { text: NumberControl, @@ -50,6 +51,61 @@ const childrenMap = { const getBaseValue: ColumnTypeViewFn<typeof childrenMap, number, number> = (props) => props.text; +type RatingEditProps = { + value: number; + onChange: (value: number) => void; + onChangeEnd: () => void; +}; + +const RatingEdit = React.memo((props: RatingEditProps) => { + const [currentValue, setCurrentValue] = useState(props.value); + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setCurrentValue(0); + }; + }, []); + + const handleChange = useCallback((value: number) => { + if (!mountedRef.current) return; + props.onChange(value); + setCurrentValue(value); + }, [props.onChange]); + + const handleBlur = useCallback((e: React.FocusEvent<HTMLDivElement>) => { + if (!mountedRef.current) return; + if (!e.currentTarget?.contains(e.relatedTarget)) { + props.onChangeEnd(); + } + }, [props.onChangeEnd]); + + const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLUListElement>) => { + if (!mountedRef.current) return; + if (e.key === "Enter") { + props.onChangeEnd(); + } + }, [props.onChangeEnd]); + + return ( + <Wrapper + onBlur={handleBlur} + > + <RateStyled + autoFocus + isEdit={true} + value={currentValue} + onChange={handleChange} + onKeyDown={handleKeyDown} + /> + </Wrapper> + ); +}); + +RatingEdit.displayName = 'RatingEdit'; + export const RatingComp = (function () { return new ColumnTypeCompBuilder( childrenMap, @@ -62,25 +118,11 @@ export const RatingComp = (function () { ) .setEditViewFn((props) => { return ( - <Wrapper - onBlur={(e) => { - if (!e.currentTarget?.contains(e.relatedTarget)) { - props.onChangeEnd(); - } - }} - > - <RateStyled - autoFocus - isEdit={true} - defaultValue={props.value} - onChange={(value) => props.onChange(value)} - onKeyDown={(e) => { - if (e.key === "Enter") { - props.onChangeEnd(); - } - }} - /> - </Wrapper> + <RatingEdit + value={props.value} + onChange={props.onChange} + onChangeEnd={props.onChangeEnd} + /> ); }) .setPropertyViewFn((children) => { diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSelectComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSelectComp.tsx index a51b182e10..de76a4dd87 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSelectComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSelectComp.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState, useRef, useEffect, useCallback, useMemo } from "react"; import { SelectUIView } from "comps/comps/selectInputComp/selectCompConstants"; import { SelectOptionControl } from "comps/controls/optionsControl"; @@ -80,7 +80,6 @@ const childrenMap = { options: SelectOptionControl, }; -let options: any[] = [] const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; type SelectEditProps = { @@ -90,38 +89,56 @@ type SelectEditProps = { options: any[]; }; -const defaultProps: any = {} -const SelectEdit = (props: SelectEditProps) => { +const SelectEdit = React.memo((props: SelectEditProps) => { const [currentValue, setCurrentValue] = useState(props.initialValue); + const mountedRef = useRef(true); + const defaultProps: any = {}; + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setCurrentValue(''); + }; + }, []); + + const handleChange = useCallback((val: string) => { + if (!mountedRef.current) return; + props.onChange(val); + setCurrentValue(val); + }, [props.onChange]); + + const handleEvent = useCallback(async (eventName: string) => { + if (!mountedRef.current) return [] as unknown[]; + if (eventName === "blur") { + props.onChangeEnd(); + } + return [] as unknown[]; + }, [props.onChangeEnd]); + + const memoizedOptions = useMemo(() => props.options, [props.options]); + return ( <SelectUIView autoFocus allowClear - {...defaultProps} value={currentValue} - options={props.options} - onChange={(val) => { - props.onChange(val); - setCurrentValue(val) - }} - onEvent={async (eventName) => { - if (eventName === "blur") { - props.onChangeEnd() - } - return [] - }} + options={memoizedOptions} + onChange={handleChange} + onEvent={handleEvent} // @ts-ignore style={{}} + {...defaultProps} /> ); -}; +}); +SelectEdit.displayName = 'SelectEdit'; export const ColumnSelectComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { - options = props.options; const value = props.changeValue ?? getBaseValue(props, dispatch); const option = props.options.find(x => x.value === value); return ( @@ -139,7 +156,7 @@ export const ColumnSelectComp = (function () { <Wrapper> <SelectEdit initialValue={props.value} - options={options} + options={props.otherProps?.options || []} onChange={props.onChange} onChangeEnd={props.onChangeEnd} /> diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnStatusComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnStatusComp.tsx index b8181f91a7..61a8fbc6f8 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnStatusComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnStatusComp.tsx @@ -6,7 +6,7 @@ import { import { trans } from "i18n"; import { StringControl, stringUnionControl } from "comps/controls/codeControl"; import { DropdownStyled, Wrapper } from "./columnTagsComp"; -import { ReactNode, useContext, useState } from "react"; +import React, { ReactNode, useContext, useState, useCallback, useRef, useEffect, useMemo } from "react"; import { StatusContext } from "components/table/EditableCell"; import { CustomSelect, PackUpIcon, ScrollBar } from "lowcoder-design"; import { PresetStatusColorType } from "antd/es/_util/colors"; @@ -44,11 +44,91 @@ type StatusEditPropsType = { onChangeEnd: () => void; }; -const StatusEdit = (props: StatusEditPropsType) => { +const StatusEdit = React.memo((props: StatusEditPropsType) => { const defaultStatus = useContext(StatusContext); - const [status, setStatus] = useState(defaultStatus); - const [allOptions, setAllOptions] = useState(BadgeStatusOptions); + const [status, setStatus] = useState<Array<{ text: string; status: StatusType }>>(() => { + const result: Array<{ text: string; status: StatusType }> = []; + defaultStatus.forEach((item) => { + if (item.text.includes(",")) { + item.text.split(",").forEach((tag) => result.push({ text: tag, status: "none" })); + } + result.push({ text: item.text, status: item.status }); + }); + return result; + }); const [open, setOpen] = useState(false); + const mountedRef = useRef(true); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setStatus([]); + setOpen(false); + }; + }, []); + + // Update status when defaultStatus changes + useEffect(() => { + if (!mountedRef.current) return; + + const result: Array<{ text: string; status: StatusType }> = []; + defaultStatus.forEach((item) => { + if (item.text.includes(",")) { + item.text.split(",").forEach((tag) => result.push({ text: tag, status: "none" })); + } + result.push({ text: item.text, status: item.status }); + }); + setStatus(result); + }, [defaultStatus]); + + const handleSearch = useCallback((value: string) => { + if (!mountedRef.current) return; + + if (defaultStatus.findIndex((item) => item.text.includes(value)) < 0) { + setStatus([...defaultStatus, { text: value, status: "none" }]); + } else { + setStatus(defaultStatus); + } + props.onChange({ + value, + status: status.find((item) => item.text === value)?.status || "none", + }); + }, [defaultStatus, status, props.onChange]); + + const handleChange = useCallback((value: string) => { + if (!mountedRef.current) return; + props.onChange({ + value, + status: status.find((item) => item.text === value)?.status || "none", + }); + setOpen(false); + }, [status, props.onChange]); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + setOpen(false); + }, [props.onChangeEnd]); + + const handleFocus = useCallback(() => { + if (!mountedRef.current) return; + setOpen(true); + }, []); + + const handleClick = useCallback(() => { + if (!mountedRef.current) return; + setOpen(!open); + }, [open]); + + const memoizedOptions = useMemo(() => + BadgeStatusOptions.map((value, index) => ( + <CustomSelect.Option value={value} key={index}> + {value === "none" ? value : <Badge status={value} text={value} />} + </CustomSelect.Option> + )), + [] + ); return ( <Wrapper> @@ -62,58 +142,25 @@ const StatusEdit = (props: StatusEditPropsType) => { style={{ width: "100%" }} suffixIcon={<PackUpIcon />} showSearch - onSearch={(value: string) => { - if (defaultStatus.findIndex((item) => item.text.includes(value)) < 0) { - setStatus([ - ...defaultStatus, - { - text: value, - status: "none", - }, - ]); - } else { - setStatus(defaultStatus); - } - props.onChange({ - value, - status: status.find((item) => item.text === value)?.status || "none", - }); - }} - onChange={(value: string) => { - props.onChange({ - value, - status: status.find((item) => item.text === value)?.status || "none", - }); - setOpen(false) - }} - dropdownRender={(originNode: ReactNode) => ( + onSearch={handleSearch} + onChange={handleChange} + popupRender={(originNode: ReactNode) => ( <DropdownStyled> <ScrollBar style={{ maxHeight: "256px" }}>{originNode}</ScrollBar> </DropdownStyled> )} - dropdownStyle={{ marginTop: "7px", padding: "8px 0 6px 0" }} - onBlur={() => { - props.onChangeEnd(); - setOpen(false); - }} - onFocus={() => { - setOpen(true); - }} - onClick={() => setOpen(!open)} + styles={{ popup: { root: { marginTop: "7px", padding: "8px 0 6px 0" }}}} + onBlur={handleBlur} + onFocus={handleFocus} + onClick={handleClick} > - {allOptions.map((value, index) => ( - <CustomSelect.Option value={value} key={index}> - {value === "none" ? ( - value - ) : ( - <Badge status={value} text={value} /> - )} - </CustomSelect.Option> - ))} + {memoizedOptions} </CustomSelect> </Wrapper> ); -}; +}); + +StatusEdit.displayName = 'StatusEdit'; export const BadgeStatusComp = (function () { return new ColumnTypeCompBuilder( @@ -126,24 +173,20 @@ export const BadgeStatusComp = (function () { (nodeValue) => [nodeValue.status.value, nodeValue.text.value].filter((t) => t).join(" "), getBaseValue ) - .setEditViewFn((props) => { - return ( - <StatusEdit value={props.value} onChange={props.onChange} onChangeEnd={props.onChangeEnd} /> - ); - }) - .setPropertyViewFn((children) => { - return ( - <> - {children.text.propertyView({ - label: trans("table.columnValue"), - tooltip: ColumnValueTooltip, - })} - {children.status.propertyView({ - label: trans("table.status"), - tooltip: trans("table.statusTooltip"), - })} - </> - ); - }) + .setEditViewFn((props) => ( + <StatusEdit value={props.value} onChange={props.onChange} onChangeEnd={props.onChangeEnd} /> + )) + .setPropertyViewFn((children) => ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.status.propertyView({ + label: trans("table.status"), + tooltip: trans("table.statusTooltip"), + })} + </> + )) .build(); })(); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSwitchComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSwitchComp.tsx index 62a868fc01..0cdeee48a4 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSwitchComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnSwitchComp.tsx @@ -1,23 +1,16 @@ import { BoolCodeControl } from "comps/controls/codeControl"; import { trans } from "i18n"; -import { default as Checkbox } from "antd/es/checkbox"; import { ColumnTypeCompBuilder, ColumnTypeViewFn } from "../columnTypeCompBuilder"; import { ColumnValueTooltip } from "../simpleColumnTypeComps"; -import { SwitchStyle, SwitchStyleType, LabelStyle, InputFieldStyle } from "comps/controls/styleControlConstants"; -import styled, { css } from "styled-components"; -import { CheckboxStyle } from "comps/controls/styleControlConstants"; -import { useStyle } from "comps/controls/styleControl"; +import { InputFieldStyle } from "comps/controls/styleControlConstants"; +import styled from "styled-components"; import { default as Switch } from "antd/es/switch"; import { styleControl } from "comps/controls/styleControl"; import { RefControl } from "comps/controls/refControl"; import { booleanExposingStateControl } from "comps/controls/codeStateControl"; import { changeEvent, eventHandlerControl } from "comps/controls/eventHandlerControl"; import { disabledPropertyView } from "comps/utils/propertyUtils"; - -interface SwitchWrapperProps { - disabled: boolean; - $style?: SwitchStyleType; -} +import React, { useCallback, useRef, useEffect } from "react"; const EventOptions = [ changeEvent, @@ -33,26 +26,6 @@ const EventOptions = [ }, ] as const; -const getStyle = (style: SwitchStyleType) => { - return css` - .ant-switch-handle::before { - background-color: ${style.handle}; - } - button { - background-image: none; - background-color: ${style.unchecked}; - &.ant-switch-checked { - background-color: ${style.checked}; - } - } - `; -}; - -const SwitchWrapper = styled.div<{ disabled: boolean }>` - display: flex; - align-items: center; -`; - const Wrapper = styled.div` background: transparent !important; padding: 0 8px; @@ -64,31 +37,96 @@ const childrenMap = { onEvent: eventHandlerControl(EventOptions), disabled: BoolCodeControl, style: styleControl(InputFieldStyle), - viewRef: RefControl<HTMLElement>, + // viewRef: RefControl<HTMLButtonElement>, }; const getBaseValue: ColumnTypeViewFn<typeof childrenMap, boolean, boolean> = (props) => props.switchState; +const SwitchView = React.memo(({ value, disabled, onEvent, valueControl }: { + value: boolean; + disabled: boolean; + // viewRef: (viewRef: HTMLButtonElement | null) => void; + onEvent: (event: string) => void; + valueControl: { onChange: (value: boolean) => void }; +}) => { + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleChange = useCallback((checked: boolean) => { + if (!mountedRef.current) return; + valueControl.onChange(checked); + onEvent("change"); + onEvent(checked ? "true" : "false"); + }, [valueControl, onEvent]); + + return ( + <Switch + checked={value} + disabled={disabled || true} + // ref={viewRef} + onChange={handleChange} + /> + ); +}); + +SwitchView.displayName = 'SwitchView'; + +const SwitchEdit = React.memo(({ value, onChange, onChangeEnd }: { + value: boolean; + onChange: (value: boolean) => void; + onChangeEnd: () => void; +}) => { + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleChange = useCallback((checked: boolean) => { + if (!mountedRef.current) return; + onChange(checked); + }, [onChange]); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + onChangeEnd(); + }, [onChangeEnd]); + + return ( + <Wrapper onBlur={handleBlur}> + <Switch + autoFocus + defaultChecked={value} + disabled={false} + onChange={handleChange} + /> + </Wrapper> + ); +}); + +SwitchEdit.displayName = 'SwitchEdit'; + export const SwitchComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { const value = props.changeValue ?? getBaseValue(props, dispatch); - const CheckBoxComp = () => { - return ( - <Switch - checked={value} - disabled={props.disabled || true} - ref={props.viewRef} - onChange={(checked) => { - props.value.onChange(checked); - props.onEvent("change"); - props.onEvent(checked ? "true" : "false"); - }} - /> - ); - }; - return <CheckBoxComp />; + return ( + <SwitchView + value={value} + disabled={props.disabled} + // viewRef={props.viewRef} + onEvent={props.onEvent} + valueControl={props.value} + /> + ); }, (nodeValue) => nodeValue.switchState.value, getBaseValue @@ -106,6 +144,8 @@ export const SwitchComp = (function () { disabled={false} onChange={(checked, e) => { props.onChange(checked); + props.otherProps?.onEvent?.("change"); + props.otherProps?.onEvent?.(checked ? "true" : "false"); }} /> </Wrapper> diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTagsComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTagsComp.tsx index 61ed6cb531..0f4f1e15f6 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTagsComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTagsComp.tsx @@ -10,7 +10,7 @@ import { codeControl } from "comps/controls/codeControl"; import { trans } from "i18n"; import styled from "styled-components"; import _ from "lodash"; -import { ReactNode, useContext, useState } from "react"; +import React, { ReactNode, useContext, useState, useRef, useEffect, useCallback, useMemo } from "react"; import { toJson } from "really-relaxed-json"; import { hashToNum } from "util/stringUtils"; import { CustomSelect, PackUpIcon } from "lowcoder-design"; @@ -82,6 +82,7 @@ type TagEditPropsType = { value: string | string[]; onChange: (value: string | string[]) => void; onChangeEnd: () => void; + tagOptions: any[]; }; export const Wrapper = styled.div` @@ -185,9 +186,7 @@ export const TagStyled = styled(Tag)` } `; -let tagOptionsList: any[] = []; - -const TagEdit = (props: TagEditPropsType) => { +const TagEdit = React.memo((props: TagEditPropsType) => { const defaultTags = useContext(TagsContext); const [tags, setTags] = useState(() => { const result: string[] = []; @@ -200,6 +199,57 @@ const TagEdit = (props: TagEditPropsType) => { return result; }); const [open, setOpen] = useState(false); + const mountedRef = useRef(true); + + // Memoize tag options to prevent unnecessary re-renders + const memoizedTagOptions = useMemo(() => props.tagOptions || [], [props.tagOptions]); + + // Cleanup on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setTags([]); + setOpen(false); + }; + }, []); + + // Update tags when defaultTags changes + useEffect(() => { + if (!mountedRef.current) return; + + const result: string[] = []; + defaultTags.forEach((item) => { + if (item.split(",")[1]) { + item.split(",").forEach((tag) => result.push(tag)); + } + result.push(item); + }); + setTags(result); + }, [defaultTags]); + + const handleSearch = useCallback((value: string) => { + if (!mountedRef.current) return; + + if (defaultTags.findIndex((item) => item.includes(value)) < 0) { + setTags([...defaultTags, value]); + } else { + setTags(defaultTags); + } + props.onChange(value); + }, [defaultTags, props.onChange]); + + const handleChange = useCallback((value: string | string[]) => { + if (!mountedRef.current) return; + props.onChange(value); + setOpen(false); + }, [props.onChange]); + + const handleBlur = useCallback(() => { + if (!mountedRef.current) return; + props.onChangeEnd(); + setOpen(false); + }, [props.onChangeEnd]); + return ( <Wrapper> <CustomSelect @@ -213,43 +263,36 @@ const TagEdit = (props: TagEditPropsType) => { open={open} allowClear={true} suffixIcon={<PackUpIcon />} - onSearch={(value: string) => { - if (defaultTags.findIndex((item) => item.includes(value)) < 0) { - setTags([...defaultTags, value]); - } else { - setTags(defaultTags); - } - props.onChange(value); - }} - onChange={(value: string | string[]) => { - props.onChange(value); - setOpen(false) - }} - dropdownRender={(originNode: ReactNode) => ( + onSearch={handleSearch} + onChange={handleChange} + popupRender={(originNode: ReactNode) => ( <DropdownStyled> <ScrollBar style={{ maxHeight: "256px" }}>{originNode}</ScrollBar> </DropdownStyled> )} - dropdownStyle={{ marginTop: "7px", padding: "8px 0 6px 0" }} + styles={{ popup: { root: { marginTop: "7px", padding: "8px 0 6px 0" }}}} onFocus={() => { - setOpen(true); + if (mountedRef.current) { + setOpen(true); + } }} - onBlur={() => { - props.onChangeEnd(); - setOpen(false); + onBlur={handleBlur} + onClick={() => { + if (mountedRef.current) { + setOpen(!open); + } }} - onClick={() => setOpen(!open)} > {tags.map((value, index) => ( <CustomSelect.Option value={value} key={index}> {value.split(",")[1] ? ( value.split(",").map((item, i) => ( - <Tag color={getTagColor(item, tagOptionsList)} icon={getTagIcon(item, tagOptionsList)} key={i} style={{ marginRight: "8px" }}> + <Tag color={getTagColor(item, memoizedTagOptions)} icon={getTagIcon(item, memoizedTagOptions)} key={i} style={{ marginRight: "8px" }}> {item} </Tag> )) ) : ( - <Tag color={getTagColor(value, tagOptionsList)} icon={getTagIcon(value, tagOptionsList)} key={index}> + <Tag color={getTagColor(value, memoizedTagOptions)} icon={getTagIcon(value, memoizedTagOptions)} key={index}> {value} </Tag> )} @@ -258,14 +301,15 @@ const TagEdit = (props: TagEditPropsType) => { </CustomSelect> </Wrapper> ); -}; +}); + +TagEdit.displayName = 'TagEdit'; export const ColumnTagsComp = (function () { return new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { const tagOptions = props.tagColors; - tagOptionsList = props.tagColors; let value = props.changeValue ?? getBaseValue(props, dispatch); value = typeof value === "string" && value.split(",")[1] ? value.split(",") : value; const tags = _.isArray(value) ? value : (value.length ? [value] : []); @@ -273,7 +317,7 @@ export const ColumnTagsComp = (function () { // The actual eval value is of type number or boolean const tagText = String(tag); return ( - <div> + <div key={`${tag.split(' ').join('_')}-${index}`}> <TagStyled color={getTagColor(tagText, tagOptions)} icon={getTagIcon(tagText, tagOptions)} key={index} > {tagText} </TagStyled> @@ -291,7 +335,12 @@ export const ColumnTagsComp = (function () { .setEditViewFn((props) => { const text = props.value; const value = _.isArray(text) ? text.join(",") : text; - return <TagEdit value={value} onChange={props.onChange} onChangeEnd={props.onChangeEnd} />; + return <TagEdit + value={value} + onChange={props.onChange} + onChangeEnd={props.onChangeEnd} + tagOptions={props.otherProps?.tagColors || []} + />; }) .setPropertyViewFn((children) => ( <> diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTimeComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTimeComp.tsx index b4ad2d73dd..f338f0f645 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTimeComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnTimeComp.tsx @@ -1,166 +1,193 @@ -import { default as TimePicker } from "antd/es/time-picker"; -import { - ColumnTypeCompBuilder, - ColumnTypeViewFn, -} from "comps/comps/tableComp/column/columnTypeCompBuilder"; -import { ColumnValueTooltip } from "comps/comps/tableComp/column/simpleColumnTypeComps"; -import { StringControl } from "comps/controls/codeControl"; -import { withDefault } from "comps/generators"; -import { formatPropertyView } from "comps/utils/propertyUtils"; -import { trans } from "i18n"; -import dayjs from "dayjs"; -import { useEffect, useRef, useState } from "react"; -import styled from "styled-components"; -import { TIME_FORMAT } from "util/dateTimeUtils"; -import { hasIcon } from "comps/utils"; -import { IconControl } from "comps/controls/iconControl"; - - -const TimePickerStyled = styled(TimePicker)<{ $open: boolean }>` - width: 100%; - height: 100%; - position: absolute; - top: 0; - padding: 0; - padding-left: 11px; - .ant-picker-input { - height: 100%; - } - input { - padding-right: 18px; - cursor: pointer; - } - &.ant-picker-focused .ant-picker-suffix svg g { - stroke: ${(props) => props.$open && "#315EFB"}; - } - .ant-picker-suffix { - height: calc(100% - 1px); - position: absolute; - right: 0; - top: 0.5px; - display: flex; - align-items: center; - padding: 0 3px; - } -`; - -const Wrapper = styled.div` - background: transparent !important; -`; - -export function formatTime(time: string, format: string) { - const parsedTime = dayjs(time, TIME_FORMAT); - return parsedTime.isValid() ? parsedTime.format(format) : ""; -} - -const childrenMap = { - text: StringControl, - prefixIcon: IconControl, - suffixIcon: IconControl, - format: withDefault(StringControl, TIME_FORMAT), - inputFormat: withDefault(StringControl, TIME_FORMAT), -}; - -let inputFormat = TIME_FORMAT; - -const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; - -type TimeEditProps = { - value: string; - onChange: (value: string) => void; - onChangeEnd: () => void; - inputFormat: string; -}; - -export const TimeEdit = (props: TimeEditProps) => { - const pickerRef = useRef<any>(); - const [panelOpen, setPanelOpen] = useState(true); - let value = dayjs(props.value, TIME_FORMAT); - if (!value.isValid()) { - value = dayjs("00:00:00", TIME_FORMAT); - } - - const [tempValue, setTempValue] = useState<dayjs.Dayjs | null>(value); - - useEffect(() => { - const value = props.value ? dayjs(props.value, TIME_FORMAT) : null; - setTempValue(value); - }, [props.value]); - - return ( - <Wrapper - onKeyDown={(e) => { - if (e.key === "Enter" && !panelOpen) { - props.onChangeEnd(); - } - }} - onMouseDown={(e) => { - e.stopPropagation(); - e.preventDefault(); - }} - > - <TimePickerStyled - ref={pickerRef} - $open={panelOpen} - format={props.inputFormat} - allowClear={true} - autoFocus - value={tempValue} - defaultOpen={true} - onOpenChange={(open) => setPanelOpen(open)} - onChange={(value, timeString) => { - props.onChange(timeString as string); - }} - onBlur={() => props.onChangeEnd()} - /> - </Wrapper> - ); -}; - -export const TimeComp = (function () { - return new ColumnTypeCompBuilder( - childrenMap, - (props, dispatch) => { - inputFormat = props.inputFormat; - const value = props.changeValue ?? getBaseValue(props, dispatch); - return( - <> - {hasIcon(props.prefixIcon) && ( - <span>{props.prefixIcon}</span> - )} - <span>{value}</span> - {hasIcon(props.suffixIcon) && ( - <span>{props.suffixIcon}</span> - )} - </> - ); - - }, - (nodeValue) => formatTime(nodeValue.text.value, nodeValue.format.value), - getBaseValue - ) - .setEditViewFn((props) => ( - <TimeEdit - value={props.value} - onChange={props.onChange} - onChangeEnd={props.onChangeEnd} - inputFormat={inputFormat} - /> - )) - .setPropertyViewFn((children) => ( - <> - {children.text.propertyView({ - label: trans("table.columnValue"), - tooltip: ColumnValueTooltip, - })} - {children.prefixIcon.propertyView({ - label: trans("button.prefixIcon"), - })} - {children.suffixIcon.propertyView({ - label: trans("button.suffixIcon"), - })} - {formatPropertyView({ children, placeholder: TIME_FORMAT })} - </> - )) - .build(); -})(); +import { default as TimePicker } from "antd/es/time-picker"; +import { + ColumnTypeCompBuilder, + ColumnTypeViewFn, +} from "comps/comps/tableComp/column/columnTypeCompBuilder"; +import { ColumnValueTooltip } from "comps/comps/tableComp/column/simpleColumnTypeComps"; +import { StringControl } from "comps/controls/codeControl"; +import { withDefault } from "comps/generators"; +import { formatPropertyView } from "comps/utils/propertyUtils"; +import { trans } from "i18n"; +import dayjs from "dayjs"; +import React, { useEffect, useRef, useState, useCallback } from "react"; +import styled from "styled-components"; +import { TIME_FORMAT } from "util/dateTimeUtils"; +import { hasIcon } from "comps/utils"; +import { IconControl } from "comps/controls/iconControl"; + +const TimePickerStyled = styled(TimePicker)<{ $open: boolean }>` + width: 100%; + height: 100%; + position: absolute; + top: 0; + padding: 0; + padding-left: 11px; + .ant-picker-input { + height: 100%; + } + input { + padding-right: 18px; + cursor: pointer; + } + &.ant-picker-focused .ant-picker-suffix svg g { + stroke: ${(props) => props.$open && "#315EFB"}; + } + .ant-picker-suffix { + height: calc(100% - 1px); + position: absolute; + right: 0; + top: 0.5px; + display: flex; + align-items: center; + padding: 0 3px; + } +`; + +const Wrapper = styled.div` + background: transparent !important; +`; + +export function formatTime(time: string, format: string) { + const parsedTime = dayjs(time, TIME_FORMAT); + return parsedTime.isValid() ? parsedTime.format(format) : ""; +} + +const childrenMap = { + text: StringControl, + prefixIcon: IconControl, + suffixIcon: IconControl, + format: withDefault(StringControl, TIME_FORMAT), + inputFormat: withDefault(StringControl, TIME_FORMAT), +}; + +const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text; + +type TimeEditProps = { + value: string; + onChange: (value: string) => void; + onChangeEnd: () => void; + inputFormat: string; +}; + +export const TimeEdit = React.memo((props: TimeEditProps) => { + const pickerRef = useRef<any>(); + const [panelOpen, setPanelOpen] = useState(true); + const mountedRef = useRef(true); + + // Initialize tempValue with proper validation + const [tempValue, setTempValue] = useState<dayjs.Dayjs | null>(() => { + const initialValue = dayjs(props.value, TIME_FORMAT); + return initialValue.isValid() ? initialValue : dayjs("00:00:00", TIME_FORMAT); + }); + + // Memoize event handlers + const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => { + if (e.key === "Enter" && !panelOpen) { + props.onChangeEnd(); + } + }, [panelOpen, props.onChangeEnd]); + + const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => { + e.stopPropagation(); + e.preventDefault(); + }, []); + + const handleOpenChange = useCallback((open: boolean) => { + if (mountedRef.current) { + setPanelOpen(open); + } + }, []); + + const handleChange = useCallback((value: dayjs.Dayjs | null, dateString: string | string[]) => { + props.onChange(dateString as string); + }, [props.onChange]); + + // Update tempValue when props.value changes + useEffect(() => { + if (!mountedRef.current) return; + + const newValue = props.value ? dayjs(props.value, TIME_FORMAT) : null; + if (newValue?.isValid()) { + setTempValue(newValue); + } + }, [props.value]); + + // Cleanup event listeners and state + useEffect(() => { + return () => { + mountedRef.current = false; + setTempValue(null); + if (pickerRef.current) { + pickerRef.current = null; + } + }; + }, []); + + return ( + <Wrapper + onKeyDown={handleKeyDown} + onMouseDown={handleMouseDown} + > + <TimePickerStyled + ref={pickerRef} + $open={panelOpen} + format={props.inputFormat} + allowClear={true} + autoFocus + value={tempValue} + defaultOpen={true} + onOpenChange={handleOpenChange} + onChange={handleChange} + onBlur={props.onChangeEnd} + /> + </Wrapper> + ); +}); + +TimeEdit.displayName = 'TimeEdit'; + +export const TimeComp = (function () { + return new ColumnTypeCompBuilder( + childrenMap, + (props, dispatch) => { + const value = props.changeValue ?? getBaseValue(props, dispatch); + return ( + <> + {hasIcon(props.prefixIcon) && ( + <span>{props.prefixIcon}</span> + )} + <span>{value}</span> + {hasIcon(props.suffixIcon) && ( + <span>{props.suffixIcon}</span> + )} + </> + ); + }, + (nodeValue) => formatTime(nodeValue.text.value, nodeValue.format.value), + getBaseValue + ) + .setEditViewFn(({value, onChange, onChangeEnd, otherProps}) => ( + <TimeEdit + value={value} + onChange={onChange} + onChangeEnd={onChangeEnd} + inputFormat={otherProps?.inputFormat} + /> + )) + .setPropertyViewFn((children) => ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.prefixIcon.propertyView({ + label: trans("button.prefixIcon"), + })} + {children.suffixIcon.propertyView({ + label: trans("button.suffixIcon"), + })} + {formatPropertyView({ children, placeholder: TIME_FORMAT })} + </> + )) + .build(); +})(); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/simpleTextComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/simpleTextComp.tsx index 04330e9c65..36d1d7ce99 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/simpleTextComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/simpleTextComp.tsx @@ -5,6 +5,8 @@ import { ColumnTypeCompBuilder, ColumnTypeViewFn } from "../columnTypeCompBuilde import { ColumnValueTooltip } from "../simpleColumnTypeComps"; import { IconControl } from "comps/controls/iconControl"; import { hasIcon } from "comps/utils"; +import React, { useCallback, useMemo } from "react"; +import { RecordConstructorToComp } from "lowcoder-core"; const childrenMap = { text: StringOrNumberControl, @@ -12,58 +14,83 @@ const childrenMap = { suffixIcon: IconControl, }; -const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string | number, string | number> = ( - props -) => props.text + ""; +// Memoize the base value function to prevent unnecessary string creation +const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string | number, string | number> = (props) => + typeof props.text === 'string' ? props.text : String(props.text); -export const SimpleTextComp = (function () { - return new ColumnTypeCompBuilder( +// Memoized icon components to prevent unnecessary re-renders +const IconWrapper = React.memo(({ icon }: { icon: React.ReactNode }) => ( + <span>{icon}</span> +)); + +interface SimpleTextContentProps { + value: string | number; + prefixIcon?: React.ReactNode; + suffixIcon?: React.ReactNode; +} + +interface SimpleTextEditViewProps { + value: string | number; + onChange: (value: string | number) => void; + onChangeEnd: () => void; +} + +const SimpleTextContent = React.memo(({ value, prefixIcon, suffixIcon }: SimpleTextContentProps) => ( + <> + {hasIcon(prefixIcon) && <IconWrapper icon={prefixIcon} />} + <span>{value}</span> + {hasIcon(suffixIcon) && <IconWrapper icon={suffixIcon} />} + </> +)); + +const SimpleTextEditView = React.memo(({ value, onChange, onChangeEnd }: SimpleTextEditViewProps) => { + const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { + onChange(e.target.value); + }, [onChange]); + + return ( + <Input + defaultValue={value} + autoFocus + variant="borderless" + onChange={handleChange} + onBlur={onChangeEnd} + onPressEnter={onChangeEnd} + /> +)}); + +const SimpleTextPropertyView = React.memo(({ children }: { children: RecordConstructorToComp<typeof childrenMap> }) => { + return useMemo(() => ( + <> + {children.text.propertyView({ + label: trans("table.columnValue"), + tooltip: ColumnValueTooltip, + })} + {children.prefixIcon.propertyView({ + label: trans("button.prefixIcon"), + })} + {children.suffixIcon.propertyView({ + label: trans("button.suffixIcon"), + })} + </> + ), [children.text, children.prefixIcon, children.suffixIcon]); +}); + +export const SimpleTextComp = new ColumnTypeCompBuilder( childrenMap, (props, dispatch) => { const value = props.changeValue ?? getBaseValue(props, dispatch); - return( - <> - {hasIcon(props.prefixIcon) && ( - <span>{props.prefixIcon}</span> - )} - <span>{value}</span> - {hasIcon(props.suffixIcon) && ( - <span>{props.suffixIcon}</span> - )} - </> + return ( + <SimpleTextContent + value={value} + prefixIcon={props.prefixIcon} + suffixIcon={props.suffixIcon} + /> ); }, (nodeValue) => nodeValue.text.value, getBaseValue ) - .setEditViewFn((props) => ( - <Input - defaultValue={props.value} - autoFocus - variant="borderless" - onChange={(e) => { - const value = e.target.value; - props.onChange(value); - }} - onBlur={props.onChangeEnd} - onPressEnter={props.onChangeEnd} - /> - )) - .setPropertyViewFn((children) => { - return ( - <> - {children.text.propertyView({ - label: trans("table.columnValue"), - tooltip: ColumnValueTooltip, - })} - {children.prefixIcon.propertyView({ - label: trans("button.prefixIcon"), - })} - {children.suffixIcon.propertyView({ - label: trans("button.suffixIcon"), - })} - </> - ); - }) + .setEditViewFn((props) => <SimpleTextEditView {...props} />) + .setPropertyViewFn((children) => <SimpleTextPropertyView children={children} />) .build(); -})(); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/simpleColumnTypeComps.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/simpleColumnTypeComps.tsx index 8839c3202f..3d5096cc89 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/simpleColumnTypeComps.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/simpleColumnTypeComps.tsx @@ -7,6 +7,12 @@ import { trans } from "i18n"; import { useStyle } from "comps/controls/styleControl"; import { ButtonStyle } from "comps/controls/styleControlConstants"; import { Button100 } from "comps/comps/buttonComp/buttonCompConstants"; +import { IconControl } from "comps/controls/iconControl"; +import { hasIcon } from "comps/utils"; +import React, { useCallback, useEffect, useMemo } from "react"; +import { CSSProperties } from "react"; +import { RecordConstructorToComp } from "lowcoder-core"; +import { ToViewReturn } from "@lowcoder-ee/comps/generators/multi"; export const ColumnValueTooltip = trans("table.columnValueTooltip"); @@ -20,40 +26,60 @@ export const ButtonTypeOptions = [ value: "default", }, { - label: trans("text"), + label: trans("table.text"), value: "text", }, ] as const; +const childrenMap = { + text: StringControl, + buttonType: dropdownControl(ButtonTypeOptions, "primary"), + onClick: ActionSelectorControlInContext, + loading: BoolCodeControl, + disabled: BoolCodeControl, + prefixIcon: IconControl, + suffixIcon: IconControl, +}; + +const ButtonStyled = React.memo(({ props }: { props: ToViewReturn<RecordConstructorToComp<typeof childrenMap>>}) => { + const style = useStyle(ButtonStyle); + const hasText = !!props.text; + const hasPrefixIcon = hasIcon(props.prefixIcon); + const hasSuffixIcon = hasIcon(props.suffixIcon); + const iconOnly = !hasText && (hasPrefixIcon || hasSuffixIcon); + + const handleClick = useCallback((e: React.MouseEvent) => { + props.onClick?.(); + }, [props.onClick]); + + const buttonStyle = useMemo(() => ({ + margin: 0, + width: iconOnly ? 'auto' : undefined, + minWidth: iconOnly ? 'auto' : undefined, + padding: iconOnly ? '0 8px' : undefined + } as CSSProperties), [iconOnly]); + + return ( + <Button100 + type={props.buttonType} + onClick={handleClick} + loading={props.loading} + disabled={props.disabled} + $buttonStyle={props.buttonType === "primary" ? style : undefined} + style={buttonStyle} + icon={hasPrefixIcon ? props.prefixIcon : undefined} + > + {/* prevent the button from disappearing */} + {hasText ? props.text : (iconOnly ? null : " ")} + {hasSuffixIcon && !props.loading && <span style={{ marginLeft: hasText ? '8px' : 0 }}>{props.suffixIcon}</span>} + </Button100> + ); +}); + export const ButtonComp = (function () { - const childrenMap = { - text: StringControl, - buttonType: dropdownControl(ButtonTypeOptions, "primary"), - onClick: ActionSelectorControlInContext, - loading: BoolCodeControl, - disabled: BoolCodeControl, - }; return new ColumnTypeCompBuilder( childrenMap, - (props) => { - const ButtonStyled = () => { - const style = useStyle(ButtonStyle); - return ( - <Button100 - type={props.buttonType} - onClick={props.onClick} - loading={props.loading} - disabled={props.disabled} - $buttonStyle={props.buttonType === "primary" ? style : undefined} - style={{margin: 0}} - > - {/* prevent the button from disappearing */} - {!props.text ? " " : props.text} - </Button100> - ); - }; - return <ButtonStyled />; - }, + (props) => <ButtonStyled props={props} />, (nodeValue) => nodeValue.text.value ) .setPropertyViewFn((children) => ( @@ -62,6 +88,12 @@ export const ButtonComp = (function () { label: trans("table.columnValue"), tooltip: ColumnValueTooltip, })} + {children.prefixIcon.propertyView({ + label: trans("button.prefixIcon"), + })} + {children.suffixIcon.propertyView({ + label: trans("button.suffixIcon"), + })} {children.buttonType.propertyView({ label: trans("table.type"), radioButton: true, diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx index 3e7a8df61b..b3dbe77c92 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx @@ -32,6 +32,8 @@ import { ColumnValueTooltip } from "./simpleColumnTypeComps"; import { SummaryColumnComp } from "./tableSummaryColumnComp"; import { list } from "@lowcoder-ee/comps/generators/list"; import { EMPTY_ROW_KEY } from "../tableCompView"; +import React, { useCallback, useMemo } from "react"; + export type Render = ReturnType<ConstructorToComp<typeof RenderComp>["getOriginalComp"]>; export const RenderComp = withSelectedMultiContext(ColumnTypeComp); @@ -144,7 +146,7 @@ export const columnChildrenMap = { fontFamily: withDefault(StringControl, "sans-serif"), fontStyle: withDefault(StringControl, 'normal'), cellColor: CellColorComp, - textOverflow: withDefault(TextOverflowControl, "ellipsis"), + textOverflow: withDefault(TextOverflowControl, "wrap"), linkColor: withDefault(ColorControl, "#3377ff"), linkHoverColor: withDefault(ColorControl, ""), linkActiveColor: withDefault(ColorControl, ""), @@ -165,25 +167,197 @@ const StyledBackgroundImageIcon = styled(ImageCompIcon)` width: 24px; margin: 0 * Put it here temporarily to avoid circular dependencies */ const ColumnInitComp = new MultiCompBuilder(columnChildrenMap, (props, dispatch) => { + const onWidthResize = (width: number) => { + dispatch( + multiChangeAction({ + width: changeValueAction(width, true), + autoWidth: changeValueAction("fixed", true), + }) + ); + }; + return { ...props, - onWidthResize: (width: number) => { - dispatch( - multiChangeAction({ - width: changeValueAction(width, true), - autoWidth: changeValueAction("fixed", true), - }) - ); - }, + onWidthResize, }; }) .setPropertyViewFn(() => <></>) .build(); +const ColumnPropertyView = React.memo(({ + comp, + viewMode, + summaryRowIndex +}: { + comp: ColumnComp; + viewMode: string; + summaryRowIndex: number; +}) => { + const selectedColumn = comp.children.render.getSelectedComp(); + + const columnType = useMemo(() => + selectedColumn.getComp().children.compType.getView(), + [selectedColumn] + ); + + const columnValue = useMemo(() => { + const column = selectedColumn.getComp().toJsonValue(); + if (column.comp?.hasOwnProperty('src')) { + return (column.comp as any).src; + } else if (column.comp?.hasOwnProperty('text')) { + return (column.comp as any).text; + } + return '{{currentCell}}'; + }, [selectedColumn]); + + const initialColumns = useMemo(() => + selectedColumn.getParams()?.initialColumns as OptionType[] || [], + [selectedColumn] + ); + + const summaryColumns = comp.children.summaryColumns.getView(); + + return ( + <> + {viewMode === 'summary' && ( + summaryColumns[summaryRowIndex].propertyView('') + )} + {viewMode === 'normal' && ( + <> + {comp.children.title.propertyView({ + label: trans("table.columnTitle"), + placeholder: comp.children.dataIndex.getView(), + })} + {comp.children.titleTooltip.propertyView({ + label: trans("table.columnTitleTooltip"), + })} + {comp.children.cellTooltip.getPropertyView()} + <Dropdown + showSearch={true} + defaultValue={columnValue} + options={initialColumns} + label={trans("table.dataMapping")} + onChange={(value) => { + // Keep the previous text value, some components do not have text, the default value is currentCell + const compType = columnType; + let compValue: Record<string, string> = { text: value}; + if(columnType === 'image') { + compValue = { src: value }; + } + comp.children.render.dispatchChangeValueAction({ + compType, + comp: compValue, + } as any); + }} + /> + {/* FIXME: cast type currently, return type of withContext should be corrected later */} + {comp.children.render.getPropertyView()} + {comp.children.showTitle.propertyView({ + label: trans("table.showTitle"), + tooltip: trans("table.showTitleTooltip"), + })} + {ColumnTypeCompMap[columnType].canBeEditable() && + comp.children.editable.propertyView({ label: trans("table.editable") })} + {comp.children.sortable.propertyView({ + label: trans("table.sortable"), + })} + {comp.children.hide.propertyView({ + label: trans("prop.hide"), + })} + {comp.children.align.propertyView({ + label: trans("table.align"), + radioButton: true, + })} + {comp.children.fixed.propertyView({ + label: trans("table.fixedColumn"), + radioButton: true, + })} + {comp.children.autoWidth.propertyView({ + label: trans("table.autoWidth"), + radioButton: true, + })} + {comp.children.autoWidth.getView() === "fixed" && + comp.children.width.propertyView({ label: trans("prop.width") })} + + {(columnType === 'link' || columnType === 'links') && ( + <> + <Divider style={{ margin: '12px 0' }} /> + {controlItem({}, ( + <div> + <b>{"Link Style"}</b> + </div> + ))} + {comp.children.linkColor.propertyView({ + label: trans('text') // trans('style.background'), + })} + {comp.children.linkHoverColor.propertyView({ + label: "Hover text", // trans('style.background'), + })} + {comp.children.linkActiveColor.propertyView({ + label: "Active text", // trans('style.background'), + })} + </> + )} + <Divider style={{ margin: '12px 0' }} /> + {controlItem({}, ( + <div> + <b>{"Column Style"}</b> + </div> + ))} + {comp.children.background.propertyView({ + label: trans('style.background'), + })} + {columnType !== 'link' && comp.children.text.propertyView({ + label: trans('text'), + })} + {comp.children.border.propertyView({ + label: trans('style.border') + })} + {comp.children.borderWidth.propertyView({ + label: trans('style.borderWidth'), + preInputNode: <StyledBorderIcon as={BorderWidthIcon} title="" />, + placeholder: '1px', + })} + {comp.children.radius.propertyView({ + label: trans('style.borderRadius'), + preInputNode: <StyledBorderRadiusIcon as={IconRadius} title="" />, + placeholder: '3px', + })} + {columnType !== 'markdown' && comp.children.textSize.propertyView({ + label: trans('style.textSize'), + preInputNode: <StyledTextSizeIcon as={TextSizeIcon} title="" />, + placeholder: '14px', + })} + {comp.children.textWeight.propertyView({ + label: trans('style.textWeight'), + preInputNode: <StyledTextWeightIcon as={TextWeightIcon} title="" />, + placeholder: 'normal', + })} + {comp.children.fontFamily.propertyView({ + label: trans('style.fontFamily'), + preInputNode: <StyledFontFamilyIcon as={FontFamilyIcon} title="" />, + placeholder: 'sans-serif', + })} + {comp.children.fontStyle.propertyView({ + label: trans('style.fontStyle'), + preInputNode: <StyledFontFamilyIcon as={FontFamilyIcon} title="" />, + placeholder: 'normal' + })} + {comp.children.textOverflow.getPropertyView()} + {comp.children.cellColor.getPropertyView()} + </> + )} + </> + ); +}); + +ColumnPropertyView.displayName = 'ColumnPropertyView'; + export class ColumnComp extends ColumnInitComp { override reduce(action: CompAction) { let comp = super.reduce(action); if (action.type === CompActionTypes.UPDATE_NODES_V2) { + // Reset context data without cleanup since components are managed by React comp = comp.setChild( "cellColor", comp.children.cellColor.reduce( @@ -238,150 +412,7 @@ export class ColumnComp extends ColumnInitComp { } propertyView(key: string, viewMode: string, summaryRowIndex: number) { - const columnType = this.children.render.getSelectedComp().getComp().children.compType.getView(); - const initialColumns = this.children.render.getSelectedComp().getParams()?.initialColumns as OptionType[] || []; - const column = this.children.render.getSelectedComp().getComp().toJsonValue(); - let columnValue = '{{currentCell}}'; - if (column.comp?.hasOwnProperty('src')) { - columnValue = (column.comp as any).src; - } else if (column.comp?.hasOwnProperty('text')) { - columnValue = (column.comp as any).text; - } - - const summaryColumns = this.children.summaryColumns.getView(); - - return ( - <> - {viewMode === 'summary' && ( - summaryColumns[summaryRowIndex].propertyView('') - )} - {viewMode === 'normal' && ( - <> - {this.children.title.propertyView({ - label: trans("table.columnTitle"), - placeholder: this.children.dataIndex.getView(), - })} - {this.children.titleTooltip.propertyView({ - label: trans("table.columnTitleTooltip"), - })} - {this.children.cellTooltip.getPropertyView()} - <Dropdown - showSearch={true} - defaultValue={columnValue} - options={initialColumns} - label={trans("table.dataMapping")} - onChange={(value) => { - // Keep the previous text value, some components do not have text, the default value is currentCell - const compType = columnType; - let comp: Record<string, string> = { text: value}; - if(columnType === 'image') { - comp = { src: value }; - } - this.children.render.dispatchChangeValueAction({ - compType, - comp, - } as any); - }} - /> - {/* FIXME: cast type currently, return type of withContext should be corrected later */} - {this.children.render.getPropertyView()} - {this.children.showTitle.propertyView({ - label: trans("table.showTitle"), - tooltip: trans("table.showTitleTooltip"), - })} - {ColumnTypeCompMap[columnType].canBeEditable() && - this.children.editable.propertyView({ label: trans("table.editable") })} - {this.children.sortable.propertyView({ - label: trans("table.sortable"), - })} - {this.children.hide.propertyView({ - label: trans("prop.hide"), - })} - {this.children.align.propertyView({ - label: trans("table.align"), - radioButton: true, - })} - {this.children.fixed.propertyView({ - label: trans("table.fixedColumn"), - radioButton: true, - })} - {this.children.autoWidth.propertyView({ - label: trans("table.autoWidth"), - radioButton: true, - })} - {this.children.autoWidth.getView() === "fixed" && - this.children.width.propertyView({ label: trans("prop.width") })} - - {(columnType === 'link' || columnType === 'links') && ( - <> - <Divider style={{ margin: '12px 0' }} /> - {controlItem({}, ( - <div> - <b>{"Link Style"}</b> - </div> - ))} - {this.children.linkColor.propertyView({ - label: trans('text') // trans('style.background'), - })} - {this.children.linkHoverColor.propertyView({ - label: "Hover text", // trans('style.background'), - })} - {this.children.linkActiveColor.propertyView({ - label: "Active text", // trans('style.background'), - })} - </> - )} - <Divider style={{ margin: '12px 0' }} /> - {controlItem({}, ( - <div> - <b>{"Column Style"}</b> - </div> - ))} - {this.children.background.propertyView({ - label: trans('style.background'), - })} - {columnType !== 'link' && this.children.text.propertyView({ - label: trans('text'), - })} - {this.children.border.propertyView({ - label: trans('style.border') - })} - {this.children.borderWidth.propertyView({ - label: trans('style.borderWidth'), - preInputNode: <StyledBorderIcon as={BorderWidthIcon} title="" />, - placeholder: '1px', - })} - {this.children.radius.propertyView({ - label: trans('style.borderRadius'), - preInputNode: <StyledBorderRadiusIcon as={IconRadius} title="" />, - placeholder: '3px', - })} - {this.children.textSize.propertyView({ - label: trans('style.textSize'), - preInputNode: <StyledTextSizeIcon as={TextSizeIcon} title="" />, - placeholder: '14px', - })} - {this.children.textWeight.propertyView({ - label: trans('style.textWeight'), - preInputNode: <StyledTextWeightIcon as={TextWeightIcon} title="" />, - placeholder: 'normal', - })} - {this.children.fontFamily.propertyView({ - label: trans('style.fontFamily'), - preInputNode: <StyledFontFamilyIcon as={FontFamilyIcon} title="" />, - placeholder: 'sans-serif', - })} - {this.children.fontStyle.propertyView({ - label: trans('style.fontStyle'), - preInputNode: <StyledFontFamilyIcon as={FontFamilyIcon} title="" />, - placeholder: 'normal' - })} - {this.children.textOverflow.getPropertyView()} - {this.children.cellColor.getPropertyView()} - </> - )} - </> - ); + return <ColumnPropertyView comp={this} viewMode={viewMode} summaryRowIndex={summaryRowIndex} />; } getChangeSet() { diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnListComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnListComp.tsx index 2c7d9df3e6..7ad933cf92 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnListComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnListComp.tsx @@ -37,9 +37,10 @@ type ActionDataType = { }; export function tableDataRowExample(data: Array<JSONObject>) { - if (data.length <= 0) { + if (!data?.length) { return undefined; } + if (typeof data[0] === "string") { // do not parse arrays in string format return undefined; diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableSummaryColumnComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableSummaryColumnComp.tsx index 13f4f2d5b8..6b0e2c4068 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableSummaryColumnComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableSummaryColumnComp.tsx @@ -40,7 +40,7 @@ export const columnChildrenMap = { fontFamily: withDefault(StringControl, "sans-serif"), fontStyle: withDefault(StringControl, 'normal'), cellColor: StringControl, - textOverflow: withDefault(TextOverflowControl, "ellipsis"), + textOverflow: withDefault(TextOverflowControl, "wrap"), linkColor: withDefault(ColorControl, "#3377ff"), linkHoverColor: withDefault(ColorControl, ""), linkActiveColor: withDefault(ColorControl, ""), diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/expansionControl.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/expansionControl.tsx index fb2da12fee..98044cd318 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/expansionControl.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/expansionControl.tsx @@ -11,7 +11,7 @@ import { BackgroundColorContext } from "comps/utils/backgroundColorContext"; import { trans } from "i18n"; import _ from "lodash"; import { ConstructorToView, wrapChildAction } from "lowcoder-core"; -import { createContext, useContext } from "react"; +import { createContext, useContext, useCallback } from "react"; import { tryToNumber } from "util/convertUtils"; import { SimpleContainerComp } from "../containerBase/simpleContainerComp"; import { OB_ROW_ORI_INDEX, RecordType } from "./tableUtils"; diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableComp.tsx index fa05cd2e68..fee2da5233 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableComp.tsx @@ -690,6 +690,19 @@ TableTmpComp = withMethodExposing(TableTmpComp, [ comp.children.selection.children.selectedRowKeys.dispatchChangeValueAction([]); }, }, + { + method: { + name: "selectAll", + description: "Select all rows in the current filtered view", + params: [], + }, + execute: (comp) => { + const displayData = comp.filterData ?? []; + const allKeys = displayData.map((row) => row[OB_ROW_ORI_INDEX] + ""); + comp.children.selection.children.selectedRowKey.dispatchChangeValueAction(allKeys[0] || "0"); + comp.children.selection.children.selectedRowKeys.dispatchChangeValueAction(allKeys); + }, + }, { method: { name: "cancelChanges", diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx index 792d22379a..7d5d26e131 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx @@ -1,4 +1,4 @@ -import { default as Table, TableProps } from "antd/es/table"; +import { default as Table, TableProps, ColumnType } from "antd/es/table"; import { TableCellContext, TableRowContext } from "comps/comps/tableComp/tableContext"; import { TableToolbar } from "comps/comps/tableComp/tableToolbarComp"; import { RowColorViewType, RowHeightViewType, TableEventOptionValues } from "comps/comps/tableComp/tableTypes"; @@ -484,40 +484,47 @@ const TableTdLoading = styled(Skeleton.Button)<SkeletonButtonProps & { const ResizeableTitle = (props: any) => { const { onResize, onResizeStop, width, viewModeResizable, ...restProps } = props; - const [widthChild, setWidthChild] = useState(0); - const elementRef = useRef(null); + const [childWidth, setChildWidth] = useState(0); + const resizeRef = useRef<HTMLDivElement>(null); const isUserViewMode = useUserViewMode(); - const setChildWidth = () => { - if (width && width > 0) { - // There is width, no need for childWidth - return; + const updateChildWidth = useCallback(() => { + if (resizeRef.current) { + const width = resizeRef.current.getBoundingClientRect().width; + setChildWidth(width); } - setWidthChild((elementRef.current as any).getBoundingClientRect().width); - }; + }, []); useEffect(() => { - if (!elementRef.current) { - return; + updateChildWidth(); + const resizeObserver = new ResizeObserver(() => { + updateChildWidth(); + }); + + if (resizeRef.current) { + resizeObserver.observe(resizeRef.current); } - setChildWidth(); - }, []); - // the multi select column and expand column should not be resizable + return () => { + resizeObserver.disconnect(); + }; + }, [updateChildWidth]); + const isNotDataColumn = _.isNil(restProps.title); - if ((isUserViewMode && !viewModeResizable) || isNotDataColumn) { - return <TableTh ref={elementRef} {...restProps} width={width} />; + if ((isUserViewMode && !restProps.viewModeResizable) || isNotDataColumn) { + return <TableTh ref={resizeRef} {...restProps} width={width} />; } return ( <Resizable - width={width > 0 ? width : widthChild} + width={width > 0 ? width : childWidth} height={0} - onResize={(e: React.SyntheticEvent, { size }: { size: { width: number } }) => - onResize(size.width) - } - onResizeStart={(e) => { - setChildWidth(); + onResize={(e: React.SyntheticEvent, { size }: { size: { width: number } }) => { + e.stopPropagation(); + onResize(size.width); + }} + onResizeStart={(e: React.SyntheticEvent) => { + updateChildWidth(); e.stopPropagation(); e.preventDefault(); }} @@ -533,7 +540,7 @@ const ResizeableTitle = (props: any) => { /> )} > - <TableTh ref={elementRef} {...restProps} title="" /> + <TableTh ref={resizeRef} {...restProps} title="" /> </Resizable> ); }; @@ -551,7 +558,7 @@ type CustomTableProps<RecordType> = Omit<TableProps<RecordType>, "components" | onCellClick: (columnName: string, dataIndex: string) => void; }; -function TableCellView(props: { +const TableCellView = React.memo((props: { record: RecordType; title: string; rowColorFn: RowColorViewType; @@ -565,7 +572,7 @@ function TableCellView(props: { tableSize?: string; autoHeight?: boolean; loading?: boolean; -}) { +}) => { const { record, title, @@ -585,10 +592,10 @@ function TableCellView(props: { const [editing, setEditing] = useState(false); const rowContext = useContext(TableRowContext); - let tdView; - if (!record) { - tdView = <td {...restProps}>{children}</td>; - } else { + + // Memoize style calculations + const style = useMemo(() => { + if (!record) return null; const rowColor = rowColorFn({ currentRow: record, currentIndex: rowIndex, @@ -606,7 +613,7 @@ function TableCellView(props: { currentRow: record, }); - const style = { + return { background: cellColor || rowColor || columnStyle.background || columnsStyle.background, margin: columnStyle.margin || columnsStyle.margin, text: columnStyle.text || columnsStyle.text, @@ -618,8 +625,14 @@ function TableCellView(props: { fontFamily: columnsStyle.fontFamily || columnStyle.fontFamily, fontStyle: columnsStyle.fontStyle || columnStyle.fontStyle, rowHeight: rowHeight, - } - let { background } = style; + }; + }, [record, rowIndex, title, rowColorFn, rowHeightFn, cellColorFn, columnStyle, columnsStyle]); + + let tdView; + if (!record) { + tdView = <td {...restProps}>{children}</td>; + } else { + let { background } = style!; if (rowContext.hover) { background = 'transparent'; } @@ -628,7 +641,7 @@ function TableCellView(props: { <TableTd {...restProps} $background={background} - $style={style} + $style={style!} $defaultThemeDetail={defaultTheme} $linkStyle={linkStyle} $isEditing={editing} @@ -648,96 +661,115 @@ function TableCellView(props: { {tdView} </TableCellContext.Provider> ); -} +}); -function TableRowView(props: any) { +const TableRowView = React.memo((props: any) => { const [hover, setHover] = useState(false); const [selected, setSelected] = useState(false); + + // Memoize event handlers + const handleMouseEnter = useCallback(() => setHover(true), []); + const handleMouseLeave = useCallback(() => setHover(false), []); + const handleFocus = useCallback(() => setSelected(true), []); + const handleBlur = useCallback(() => setSelected(false), []); + return ( - <TableRowContext.Provider value={{ hover: hover, selected: selected }}> + <TableRowContext.Provider value={{ hover, selected }}> <tr {...props} tabIndex={-1} - onMouseEnter={() => setHover(true)} - onMouseLeave={() => setHover(false)} - onFocus={() => setSelected(true)} - onBlur={() => setSelected(false)} - ></tr> + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} + onFocus={handleFocus} + onBlur={handleBlur} + /> </TableRowContext.Provider> ); -} +}); /** * A table with adjustable column width, width less than 0 means auto column width */ -function ResizeableTable<RecordType extends object>(props: CustomTableProps<RecordType>) { - const [resizeData, setResizeData] = useState({ - index: -1, - width: -1, - }); - let allColumnFixed = true; - const { customLoading } = props; - - const columns = props.columns.map((col, index) => { - const { width, style, linkStyle, cellColorFn, ...restCol } = col; - const resizeWidth = (resizeData.index === index ? resizeData.width : col.width) ?? 0; - let colWidth: number | string = "auto"; - let minWidth: number | string = COL_MIN_WIDTH; - if (typeof resizeWidth === "number" && resizeWidth > 0) { - minWidth = "unset"; - colWidth = resizeWidth; - } else { - allColumnFixed = false; +function ResizeableTableComp<RecordType extends object>(props: CustomTableProps<RecordType>) { + const { + columns, + viewModeResizable, + visibleResizables, + rowColorFn, + rowHeightFn, + columnsStyle, + size, + rowAutoHeight, + customLoading, + onCellClick, + ...restProps + } = props; + const [resizeData, setResizeData] = useState({ index: -1, width: -1 }); + + // Memoize resize handlers + const handleResize = useCallback((width: number, index: number) => { + setResizeData({ index, width }); + }, []); + + const handleResizeStop = useCallback((width: number, index: number, onWidthResize?: (width: number) => void) => { + setResizeData({ index: -1, width: -1 }); + if (onWidthResize) { + onWidthResize(width); } - return { - ...restCol, - RC_TABLE_INTERNAL_COL_DEFINE: { - style: { - minWidth: minWidth, - width: colWidth, - }, + }, []); + + // Memoize cell handlers + const createCellHandler = useCallback((col: CustomColumnType<RecordType>) => { + return (record: RecordType, index: number) => ({ + record, + title: String(col.dataIndex), + rowColorFn, + rowHeightFn, + cellColorFn: col.cellColorFn, + rowIndex: index, + columnsStyle, + columnStyle: col.style, + linkStyle: col.linkStyle, + tableSize: size, + autoHeight: rowAutoHeight, + onClick: () => onCellClick(col.titleText, String(col.dataIndex)), + loading: customLoading, + }); + }, [rowColorFn, rowHeightFn, columnsStyle, size, rowAutoHeight, onCellClick, customLoading]); + + // Memoize header cell handlers + const createHeaderCellHandler = useCallback((col: CustomColumnType<RecordType>, index: number, resizeWidth: number) => { + return () => ({ + width: resizeWidth, + title: col.titleText, + viewModeResizable, + onResize: (width: React.SyntheticEvent) => { + if (width) { + handleResize(Number(width), index); + } }, - onCell: (record: RecordType, rowIndex: any) => ({ - record, - title: String(col.dataIndex), - rowColorFn: props.rowColorFn, - rowHeightFn: props.rowHeightFn, - cellColorFn: cellColorFn, - rowIndex: rowIndex, - columnsStyle: props.columnsStyle, - columnStyle: style, - linkStyle, - tableSize: props.size, - autoHeight: props.rowAutoHeight, - onClick: () => { - props.onCellClick(col.titleText, String(col.dataIndex)); - }, - loading: customLoading, - }), - onHeaderCell: () => ({ - width: resizeWidth, - title: col.titleText, - viewModeResizable: props.viewModeResizable, - onResize: (width: React.SyntheticEvent) => { - if (width) { - setResizeData({ - index: index, - width: width as unknown as number, - }); - } - }, - onResizeStop: (e: React.SyntheticEvent, { size }: { size: { width: number } }) => { - setResizeData({ - index: -1, - width: -1, - }); - if (col.onWidthResize) { - col.onWidthResize(size.width); - } - }, - }), - }; - }); + onResizeStop: (e: React.SyntheticEvent, { size }: { size: { width: number } }) => { + handleResizeStop(size.width, index, col.onWidthResize); + }, + }); + }, [viewModeResizable, handleResize, handleResizeStop]); + + // Memoize columns to prevent unnecessary re-renders + const memoizedColumns = useMemo(() => { + return columns.map((col, index) => { + const { width, style, linkStyle, cellColorFn, onWidthResize, ...restCol } = col; + const resizeWidth = (resizeData.index === index ? resizeData.width : col.width) ?? 0; + + const column: ColumnType<RecordType> = { + ...restCol, + width: typeof resizeWidth === "number" && resizeWidth > 0 ? resizeWidth : undefined, + minWidth: typeof resizeWidth === "number" && resizeWidth > 0 ? undefined : COL_MIN_WIDTH, + onCell: (record: RecordType, index?: number) => createCellHandler(col)(record, index ?? 0), + onHeaderCell: () => createHeaderCellHandler(col, index, Number(resizeWidth))(), + }; + return column; + }); + }, [columns, resizeData, createCellHandler, createHeaderCellHandler]); return ( <Table<RecordType> @@ -750,18 +782,19 @@ function ResizeableTable<RecordType extends object>(props: CustomTableProps<Reco row: TableRowView, }, }} - {...props} + {...restProps} pagination={false} - columns={columns} + columns={memoizedColumns} scroll={{ x: COL_MIN_WIDTH * columns.length, - y: undefined, }} - ></Table> + /> ); } +ResizeableTableComp.whyDidYouRender = true; + +const ResizeableTable = React.memo(ResizeableTableComp) as typeof ResizeableTableComp; -ResizeableTable.whyDidYouRender = true; const createNewEmptyRow = ( rowIndex: number, @@ -776,11 +809,11 @@ const createNewEmptyRow = ( return emptyRowData; } -export function TableCompView(props: { +export const TableCompView = React.memo((props: { comp: InstanceType<typeof TableImplComp>; onRefresh: (allQueryNames: Array<string>, setLoading: (loading: boolean) => void) => void; onDownload: (fileName: string) => void; -}) { +}) => { const [emptyRowsMap, setEmptyRowsMap] = useState<Record<string, RecordType>>({}); const editorState = useContext(EditorContext); const currentTheme = useContext(ThemeContext)?.theme; @@ -1011,7 +1044,13 @@ export function TableCompView(props: { } if (antdColumns.length === 0) { - return <EmptyContent text={trans("table.emptyColumns")} />; + return ( + <div> + {toolbar.position === "above" && !hideToolbar && toolbarView} + <EmptyContent text={trans("table.emptyColumns")} /> + {toolbar.position === "below" && !hideToolbar && toolbarView} + </div> + ); } const hideScrollbar = !showHorizontalScrollbar && !showVerticalScrollbar; @@ -1101,4 +1140,4 @@ export function TableCompView(props: { </BackgroundColorContext.Provider> ); -} +}); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx index 325e0d14da..70bb8ce05a 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tablePropertyView.tsx @@ -29,11 +29,12 @@ import { tableDataDivClassName } from "pages/tutorials/tutorialsConstant"; import styled, { css } from "styled-components"; import { getSelectedRowKeys } from "./selectionControl"; import { TableChildrenType } from "./tableTypes"; -import React, { useMemo, useState } from "react"; +import React, { useMemo, useState, useCallback } from "react"; import { GreyTextColor } from "constants/style"; import { alignOptions } from "comps/controls/dropdownControl"; import { ColumnTypeCompMap } from "comps/comps/tableComp/column/columnTypeComp"; import Segmented from "antd/es/segmented"; +import { CheckboxChangeEvent } from "antd/es/checkbox"; const InsertDiv = styled.div` display: flex; @@ -163,50 +164,62 @@ const columnBatchOptions = [ type ColumnBatchOptionValueType = typeof columnBatchOptions[number]["value"]; -function HideIcon(props: { hide: boolean; setHide: (hide: boolean) => void }) { +const HideIcon = React.memo((props: { hide: boolean; setHide: (hide: boolean) => void }) => { const { hide, setHide } = props; const Eye = hide ? CloseEye : OpenEye; - return ( - <Eye - onClick={(e: any) => { - setHide(!hide); - }} - /> - ); -} - -function columnBatchCheckBox<T extends keyof ColumnCompType["children"]>( - childrenKey: T, - convertValueFunc?: (checked: boolean) => RawColumnType[T] -) { - const isChecked = (column: ColumnCompType) => { + + const handleClick = useCallback((e: React.MouseEvent) => { + e.stopPropagation(); + setHide(!hide); + }, [hide, setHide]); + + return <Eye onClick={handleClick} />; +}); + +HideIcon.displayName = 'HideIcon'; + +function ColumnBatchCheckBox<T extends keyof ColumnCompType["children"]>({ + childrenKey, + column, + convertValueFunc, +}: { + childrenKey: T; + column: ColumnCompType | Array<ColumnCompType>; + convertValueFunc?: (checked: boolean) => RawColumnType[T]; +}) { + const isChecked = useCallback((column: ColumnCompType) => { if (childrenKey === "autoWidth") { return column.children.autoWidth.getView() === "auto"; } else { return column.children[childrenKey].getView(); } - }; + }, [childrenKey]); - const convertValue = convertValueFunc ?? ((checked: boolean) => checked); + const convertValue = useCallback((checked: boolean) => + convertValueFunc ? convertValueFunc(checked) : checked, + [convertValueFunc] + ); - return (column: Array<ColumnCompType> | ColumnCompType) => { - const isBatch = Array.isArray(column); - const columns = isBatch ? column : [column]; - const disabledStatus = columns.map((c) => { - if (childrenKey !== "editable") { - return false; - } - const columnType = c.children.render - .getOriginalComp() - .children.comp.children.compType.getView(); - return !ColumnTypeCompMap[columnType].canBeEditable(); - }); + const isBatch = Array.isArray(column); + const columns = isBatch ? column : [column]; + + const disabledStatus = useMemo(() => columns.map((c) => { + if (childrenKey !== "editable") { + return false; + } + const columnType = c.children.render + .getOriginalComp() + .children.comp.children.compType.getView(); + return !ColumnTypeCompMap[columnType].canBeEditable(); + }), [columns, childrenKey]); + + const { allChecked, allNotChecked } = useMemo(() => { let allChecked = true; let allNotChecked = true; + columns.forEach((c, index) => { if (disabledStatus[index]) { if (!isBatch) { - // The batch status is not affected by disabled allChecked = false; } return; @@ -217,44 +230,50 @@ function columnBatchCheckBox<T extends keyof ColumnCompType["children"]>( allChecked = false; } }); + + return { allChecked, allNotChecked }; + }, [columns, disabledStatus, isBatch, isChecked]); + + const onCheckChange = useCallback((checked: boolean) => { + columns.forEach( + (c, index) => + !disabledStatus[index] && + c.children[childrenKey].dispatch( + deferAction(changeValueAction(convertValue(checked) as any, true)) + ) + ); + }, [columns, disabledStatus, childrenKey, convertValue]); - const onCheckChange = (checked: boolean) => { - columns.forEach( - (c, index) => - !disabledStatus[index] && - c.children[childrenKey].dispatch( - deferAction(changeValueAction(convertValue(checked) as any, true)) - ) - ); - }; - - if (childrenKey === "hide") { - return <HideIcon hide={allChecked} setHide={(hide) => onCheckChange(hide)} />; - } + if (childrenKey === "hide") { + return <HideIcon hide={allChecked} setHide={onCheckChange} />; + } - return ( - <CheckBox - indeterminate={!allChecked && !allNotChecked} - disabled={!isBatch && disabledStatus[0]} - checked={allChecked} - onChange={(e) => { - onCheckChange(e.target.checked); - }} - /> - ); - }; + return ( + <CheckBox + indeterminate={!allChecked && !allNotChecked} + disabled={!isBatch && disabledStatus[0]} + checked={allChecked} + onChange={(e: CheckboxChangeEvent) => { + onCheckChange(e.target.checked); + }} + /> + ); } const ColumnBatchView: Record< ColumnBatchOptionValueType, (column: ColumnCompType | Array<ColumnCompType>) => JSX.Element > = { - hide: columnBatchCheckBox("hide"), - editable: columnBatchCheckBox("editable"), - sortable: columnBatchCheckBox("sortable"), - autoWidth: columnBatchCheckBox("autoWidth", (checked) => { - return checked ? "auto" : "fixed"; - }), + hide: (column) => <ColumnBatchCheckBox childrenKey="hide" column={column} />, + editable: (column) => <ColumnBatchCheckBox childrenKey="editable" column={column} />, + sortable: (column) => <ColumnBatchCheckBox childrenKey="sortable" column={column} />, + autoWidth: (column) => ( + <ColumnBatchCheckBox + childrenKey="autoWidth" + column={column} + convertValueFunc={(checked) => (checked ? "auto" : "fixed")} + /> + ), align: (column) => { const columns = Array.isArray(column) ? column : [column]; const value = Array.isArray(column) ? undefined : column.children.align.getView(); @@ -277,22 +296,39 @@ function ColumnPropertyView<T extends MultiBaseComp<TableChildrenType>>(props: { comp: T; columnLabel: string; }) { - const [viewMode, setViewMode] = useState('normal'); - const [summaryRow, setSummaryRow] = useState(0); const { comp } = props; - const selection = getSelectedRowKeys(comp.children.selection)[0] ?? "0"; + const [viewMode, setViewMode] = useState<ViewOptionType>('normal'); + const [summaryRow, setSummaryRow] = useState(0); const [columnFilterType, setColumnFilterType] = useState<ColumnFilterOptionValueType>("all"); - const columns = comp.children.columns.getView(); - const rowExample = comp.children.dataRowExample.getView(); - const dynamicColumn = comp.children.dynamicColumn.getView(); - const data = comp.children.data.getView(); const [columnBatchType, setColumnBatchType] = useState<ColumnBatchOptionValueType>("hide"); + + const selection = useMemo(() => getSelectedRowKeys(comp.children.selection)[0] ?? "0", [comp.children.selection]); + const columns = useMemo(() => comp.children.columns.getView(), [comp.children.columns]); + const rowExample = useMemo(() => comp.children.dataRowExample.getView(), [comp.children.dataRowExample]); + const dynamicColumn = useMemo(() => comp.children.dynamicColumn.getView(), [comp.children.dynamicColumn]); + const data = useMemo(() => comp.children.data.getView(), [comp.children.data]); const columnOptionItems = useMemo( () => columns.filter((c) => columnFilterType === "all" || !c.children.hide.getView()), [columnFilterType, columns] ); const summaryRows = parseInt(comp.children.summaryRows.getView()); + const handleViewModeChange = useCallback((value: string) => { + setViewMode(value as ViewOptionType); + }, []); + + const handleSummaryRowChange = useCallback((value: number) => { + setSummaryRow(value); + }, []); + + const handleColumnFilterChange = useCallback((value: ColumnFilterOptionValueType) => { + setColumnFilterType(value); + }, []); + + const handleColumnBatchTypeChange = useCallback((value: ColumnBatchOptionValueType) => { + setColumnBatchType(value); + }, []); + const columnOptionToolbar = ( <InsertDiv> <div style={{ display: "flex", alignItems: "center", marginRight: "auto" }}> @@ -344,7 +380,7 @@ function ColumnPropertyView<T extends MultiBaseComp<TableChildrenType>>(props: { options={columnFilterOptions} label="" onChange={(value) => { - setColumnFilterType(value); + handleColumnFilterChange(value); }} /> } @@ -359,7 +395,7 @@ function ColumnPropertyView<T extends MultiBaseComp<TableChildrenType>>(props: { options={columnBatchOptions} label="" onChange={(value) => { - setColumnBatchType(value); + handleColumnBatchTypeChange(value); }} /> {ColumnBatchView[columnBatchType](columns)} @@ -400,14 +436,14 @@ function ColumnPropertyView<T extends MultiBaseComp<TableChildrenType>>(props: { block options={columnViewOptions} value={viewMode} - onChange={(k) => setViewMode(k as ViewOptionType)} + onChange={(k) => handleViewModeChange(k as ViewOptionType)} /> {viewMode === 'summary' && ( <Segmented block options={summaryRowOptions.slice(0, summaryRows)} value={summaryRow} - onChange={(k) => setSummaryRow(k)} + onChange={(k) => handleSummaryRowChange(k)} /> )} {column.propertyView(selection, viewMode, summaryRow)} diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableSummaryComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableSummaryComp.tsx index b6562a485a..58a7871aa3 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableSummaryComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableSummaryComp.tsx @@ -4,7 +4,7 @@ import { TableColumnLinkStyleType, TableColumnStyleType, TableSummaryRowStyleTyp import styled from "styled-components"; import { defaultTheme } from "@lowcoder-ee/constants/themeConstants"; import Table from "antd/es/table"; -import { ReactNode } from "react"; +import { ReactNode, useMemo, memo, useCallback } from "react"; import Tooltip from "antd/es/tooltip"; const TableSummaryRow = styled(Table.Summary.Row)<{ @@ -102,7 +102,7 @@ const TableSummarCell = styled(Table.Summary.Cell)<{ } `; -const CellWrapper = ({ +const CellWrapper = memo(({ children, tooltipTitle, }: { @@ -119,9 +119,11 @@ const CellWrapper = ({ return ( <>{children}</> ) -}; +}); -function TableSummaryCellView(props: { +CellWrapper.displayName = 'CellWrapper'; + +const TableSummaryCellView = memo(function TableSummaryCellView(props: { index: number; key: string; children: any; @@ -145,7 +147,7 @@ function TableSummaryCellView(props: { ...restProps } = props; - const style = { + const style = useMemo(() => ({ background: cellColor || columnStyle.background, margin: columnStyle.margin || rowStyle.margin, text: columnStyle.text || rowStyle.text, @@ -157,7 +159,7 @@ function TableSummaryCellView(props: { textWeight: rowStyle.textWeight || columnStyle.textWeight, fontFamily: rowStyle.fontFamily || columnStyle.fontFamily, fontStyle: rowStyle.fontStyle || columnStyle.fontStyle, - } + }), [cellColor, columnStyle, rowStyle]); return ( <TableSummarCell @@ -172,9 +174,11 @@ function TableSummaryCellView(props: { </CellWrapper> </TableSummarCell> ); -} +}); -export function TableSummary(props: { +TableSummaryCellView.displayName = 'TableSummaryCellView'; + +export const TableSummary = memo(function TableSummary(props: { tableSize: string; expandableRows: boolean; multiSelectEnabled: boolean; @@ -192,14 +196,51 @@ export function TableSummary(props: { multiSelectEnabled, istoolbarPositionBelow, } = props; - let visibleColumns = columns.filter(col => !col.getView().hide); - if (expandableRows) { - visibleColumns.unshift(new ColumnComp({})); - } - if (multiSelectEnabled) { - visibleColumns.unshift(new ColumnComp({})); - } - + + const visibleColumns = useMemo(() => { + let cols = columns.filter(col => !col.getView().hide); + if (expandableRows) { + cols.unshift(new ColumnComp({})); + } + if (multiSelectEnabled) { + cols.unshift(new ColumnComp({})); + } + return cols; + }, [columns, expandableRows, multiSelectEnabled]); + + const renderSummaryCell = useCallback((column: ColumnComp, rowIndex: number, index: number) => { + const summaryColumn = column.children.summaryColumns.getView()[rowIndex].getView(); + return ( + <TableSummaryCellView + index={index} + key={`summary-${rowIndex}-${column.getView().dataIndex}-${index}`} + tableSize={tableSize} + rowStyle={summaryRowStyle} + align={summaryColumn.align} + cellColor={summaryColumn.cellColor} + cellTooltip={summaryColumn.cellTooltip} + columnStyle={{ + background: summaryColumn.background, + margin: summaryColumn.margin, + text: summaryColumn.text, + border: summaryColumn.border, + radius: summaryColumn.radius, + textSize: summaryColumn.textSize, + textWeight: summaryColumn.textWeight, + fontStyle: summaryColumn.fontStyle, + fontFamily: summaryColumn.fontFamily, + }} + linkStyle={{ + text: summaryColumn.linkColor, + hoverText: summaryColumn.linkHoverColor, + activeText: summaryColumn.linkActiveColor, + }} + > + {summaryColumn.render({}, '').getView().view({})} + </TableSummaryCellView> + ); + }, [tableSize, summaryRowStyle]); + if (!visibleColumns.length) return <></>; return ( @@ -210,40 +251,11 @@ export function TableSummary(props: { $istoolbarPositionBelow={istoolbarPositionBelow} $background={summaryRowStyle.background} > - {visibleColumns.map((column, index) => { - const summaryColumn = column.children.summaryColumns.getView()[rowIndex].getView(); - return ( - <TableSummaryCellView - index={index} - key={`summary-${rowIndex}-${column.getView().dataIndex}-${index}`} - tableSize={tableSize} - rowStyle={summaryRowStyle} - align={summaryColumn.align} - cellColor={summaryColumn.cellColor} - cellTooltip={summaryColumn.cellTooltip} - columnStyle={{ - background: summaryColumn.background, - margin: summaryColumn.margin, - text: summaryColumn.text, - border: summaryColumn.border, - radius: summaryColumn.radius, - textSize: summaryColumn.textSize, - textWeight: summaryColumn.textWeight, - fontStyle:summaryColumn.fontStyle, - fontFamily: summaryColumn.fontFamily, - }} - linkStyle={{ - text: summaryColumn.linkColor, - hoverText: summaryColumn.linkHoverColor, - activeText: summaryColumn.linkActiveColor, - }} - > - {summaryColumn.render({}, '').getView().view({})} - </TableSummaryCellView> - ) - })} + {visibleColumns.map((column, index) => renderSummaryCell(column, rowIndex, index))} </TableSummaryRow> ))} </Table.Summary> ); -} +}); + +TableSummary.displayName = 'TableSummary'; diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx index 64d0b6fae8..2969e3c46d 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableToolbarComp.tsx @@ -34,11 +34,14 @@ import { TacoInput, ValueFromOption, } from "lowcoder-design"; -import React, { useContext, useEffect, useMemo, useRef, useState } from "react"; +import React, { useContext, useEffect, useMemo, useRef, useState, memo, useCallback } from "react"; import styled, { css } from "styled-components"; import { JSONValue } from "util/jsonTypes"; import { ControlNodeCompBuilder } from "comps/generators/controlCompBuilder"; import { defaultTheme } from "@lowcoder-ee/constants/themeConstants"; +import type { CheckboxChangeEvent } from 'antd/es/checkbox'; + +type ToolbarRowType = ConstructorToView<typeof TableToolbarComp>; const SaveChangeButtons = styled.div` display: flex; @@ -239,6 +242,39 @@ const ColumnCheckItem = styled.div` gap: 4px; `; +const StyledCustomSelect = styled(CustomSelect)<{ $width: string }>` + .ant-select { + width: ${props => props.$width}; + } +`; + +const CustomSelectionOptionInner = styled.div` + width: 72px; + font-size: 13px; + line-height: 13px; +`; + +const StyledTacoInput = styled(TacoInput)` + width: 136px; +`; + +const StyledLinkButton = styled(LinkButton)` + margin-right: auto; +`; + +const ColumnSettingContent = styled.div` + display: flex; + flex-direction: column; + gap: 8px; +`; + +const ColumnSettingFooter = styled.div` + display: flex; + align-items: flex-end; + justify-content: space-between; + height: 32px; +`; + const filterStackOptions = [ { label: trans("table.and"), @@ -277,6 +313,7 @@ const tableFilterOperators = [ "lt", "lte", ] as const; + const noValueOperators: TableFilterOperator[] = ["isEmpty", "isNotEmpty"]; type TableFilterOperator = typeof tableFilterOperators[number]; @@ -361,6 +398,11 @@ export const tableFilterOperatorMap: Record< }, } as const; +const tableFilterOperatorOptions = tableFilterOperators.map((operator) => ({ + label: tableFilterOperatorMap[operator].label, + value: operator, +})); + type TableFilterDataType = { columnKey: string; filterValue: string; @@ -399,7 +441,140 @@ function emptyFilterItem(filter: FilterItemType) { return !filter.columnKey && !filter.operator && filter.filterValue === ""; } -function TableFilterView(props: { +const FilterFooter = memo(function FilterFooter(props: { + filterItems: FilterItemType[]; + setFilterItems: (items: FilterItemType[]) => void; + setVisible: (v: boolean) => void; +}) { + const { filterItems, setFilterItems, setVisible } = props; + + const handleAddFilter = useCallback(() => { + setFilterItems(filterItems.concat(genFilterViewItem())); + }, [filterItems, setFilterItems]); + + const handleClearFilters = useCallback(() => { + setFilterItems([genFilterViewItem()]); + }, [setFilterItems]); + + const handleClose = useCallback(() => { + setVisible(false); + }, [setVisible]); + + return ( + <FilterViewBottom> + <StyledLinkButton + text={trans("addItem")} + icon={<BluePlusIcon />} + onClick={handleAddFilter} + /> + <TacoButton + onClick={handleClearFilters} + buttonType="delete" + > + {trans("table.clear")} + </TacoButton> + <TacoButton buttonType="primary" onClick={handleClose}> + {trans("ok")} + </TacoButton> + </FilterViewBottom> + ); +}); + +FilterFooter.displayName = 'FilterFooter'; + +const FilterContent = memo(function FilterContent(props: { + filterItems: FilterItemType[]; + columnKeyNames: Array<[string, string]>; + stackTypeState: TableFilter["stackType"]; + stackTypeValue: TableFilter["stackType"] | undefined; + updateFilter: (filterItem: FilterItemType) => void; + handleStackTypeChange: (value: TableFilter["stackType"]) => void; + removeFilter: (key: string) => void; +}) { + const { + filterItems, + columnKeyNames, + stackTypeState, + stackTypeValue, + updateFilter, + handleStackTypeChange, + removeFilter, + } = props; + + const handleColumnKeyChange = useCallback((filter: FilterItemType, value: string) => { + updateFilter({ ...filter, columnKey: value }); + }, [updateFilter]); + + const handleOperatorChange = useCallback((filter: FilterItemType, value: TableFilterOperator) => { + updateFilter({ ...filter, operator: value }); + }, [updateFilter]); + + const handleFilterValueChange = useCallback((filter: FilterItemType, e: React.ChangeEvent<HTMLInputElement>) => { + updateFilter({ ...filter, filterValue: e.target.value }); + }, [updateFilter]); + + return ( + <FilterViewContent> + {filterItems && + filterItems.map((filter, index) => ( + <FilterItem key={filter.key}> + {index === 0 && ( + <CommonTextLabel style={{ width: "65px" }}> + {trans("table.filterRule")} + </CommonTextLabel> + )} + {index >= 1 && ( + <StyledCustomSelect + $width="65px" + border + defaultValue={stackTypeState} + value={stackTypeValue} + disabled={index > 1} + onChange={handleStackTypeChange} + > + {filterStackOptions.map((item) => ( + <CustomSelect.Option key={item.value} value={item.value}> + <CustomSelectionOptionInner> + {item.label} + </CustomSelectionOptionInner> + </CustomSelect.Option> + ))} + </StyledCustomSelect> + )} + <StyledCustomSelect + $width="160px" + options={columnKeyNames.map((c) => ({ label: c[1], value: c[0] }))} + value={filter.columnKey} + placeholder={trans("table.chooseColumnName")} + allowClear + onChange={(value) => handleColumnKeyChange(filter, value)} + /> + <StyledCustomSelect + $width="160px" + defaultValue={filter.operator} + placeholder={trans("table.chooseCondition")} + allowClear + options={tableFilterOperatorOptions} + onChange={(value) => handleOperatorChange(filter, value)} + /> + <StyledTacoInput + disabled={filter.operator && noValueOperators.includes(filter.operator)} + defaultValue={filter.filterValue} + onChange={(e) => handleFilterValueChange(filter, e)} + /> + <StyledDeleteIcon + disabled={filterItems.length === 1 && emptyFilterItem(filterItems[0])} + onClick={() => removeFilter(filter.key)} + /> + </FilterItem> + ))} + </FilterViewContent> + ); +}); + +FilterContent.displayName = 'FilterContent'; + +const TableFilterView = memo(function TableFilterView(props: { columnKeyNames: Array<[string, string]>; tableFilter: TableFilter; onFilterChange: (filters: TableFilterDataType[], stackType: TableFilter["stackType"]) => void; @@ -407,27 +582,35 @@ function TableFilterView(props: { }) { const { columnKeyNames, tableFilter, onFilterChange, setVisible } = props; const [stackTypeState, setStackTypeState] = useState(tableFilter.stackType); - const [filters, setFilters] = useState<FilterItemType[]>(() => { - if (tableFilter.filters.length <= 0) { - return [genFilterViewItem()]; - } - return tableFilter.filters.map((f) => ({ key: genRandomKey(), ...f })); - }); - const updateFilter = (filterItem: FilterItemType) => { - setFilters( - filters.map((f) => - f.key === filterItem.key - ? { - ...filterItem, - } - : f - ) + const [filterItems, setFilterItems] = useState<FilterItemType[]>(() => + tableFilter.filters.length > 0 + ? tableFilter.filters.map((f) => genFilterViewItem(f.columnKey, f.filterValue, f.operator)) + : [genFilterViewItem()] + ); + const stackTypeValue = useMemo(() => filterStackOptions.find((f) => f.value === stackTypeState)?.value, [stackTypeState]); + + const updateFilter = useCallback((filterItem: FilterItemType) => { + setFilterItems((items) => + items.map((item) => (item.key === filterItem.key ? filterItem : item)) ); - }; + }, []); + + const removeFilter = useCallback((key: string) => { + if (filterItems.length === 1) { + setFilterItems([genFilterViewItem()]); + } else { + setFilterItems((items) => items.filter((item) => item.key !== key)); + } + }, [filterItems]); + + const handleStackTypeChange = useCallback((value: TableFilter["stackType"]) => { + setStackTypeState(value); + }, []); + useEffect(() => { onFilterChange( - filters - .filter((f) => validFilterItem(f)) + filterItems + .filter(validFilterItem) .map((f) => ({ filterValue: f.filterValue, operator: f.operator!, @@ -435,109 +618,8 @@ function TableFilterView(props: { })), stackTypeState ); - }, [stackTypeState, filters]); - - const popOverContent = ( - <FilterViewContent> - {filters && - filters.map((filter, index) => { - return ( - <FilterItem key={filter.key}> - {index === 0 && ( - <CommonTextLabel style={{ width: "65px" }}> - {trans("table.filterRule")} - </CommonTextLabel> - )} - {index >= 1 && ( - <CustomSelect - style={{ width: "65px" }} - border - defaultValue={stackTypeState} - value={filterStackOptions.find((f) => f.value === stackTypeState)?.value} - disabled={index > 1} - onChange={(value) => setStackTypeState(value)} - > - {filterStackOptions.map((item, index) => { - return ( - <CustomSelect.Option key={item.value} value={item.value}> - <div style={{ width: "72px", fontSize: "13px", lineHeight: "13px" }}> - {item.label} - </div> - </CustomSelect.Option> - ); - })} - </CustomSelect> - )} - <CustomSelect - options={columnKeyNames.map((c) => ({ label: c[1], value: c[0] }))} - style={{ width: "160px" }} - value={filter.columnKey} - placeholder={trans("table.chooseColumnName")} - allowClear - onChange={(value) => { - updateFilter({ ...filter, columnKey: value }); - }} - /> - <CustomSelect - defaultValue={filter.operator} - placeholder={trans("table.chooseCondition")} - style={{ width: "160px" }} - allowClear - options={tableFilterOperators.map((operator) => ({ - label: tableFilterOperatorMap[operator].label, - value: operator, - }))} - onChange={(value) => { - updateFilter({ ...filter, operator: value }); - }} - /> - <TacoInput - style={{ width: "136px" }} - disabled={filter.operator && noValueOperators.includes(filter.operator)} - defaultValue={filter.filterValue} - onChange={(e) => { - updateFilter({ ...filter, filterValue: e.target.value }); - }} - /> - <StyledDeleteIcon - disabled={filters.length === 1 && emptyFilterItem(filters[0])} - onClick={() => { - if (filters.length === 1) { - setFilters([genFilterViewItem()]); - } else { - setFilters(filters.filter((f) => f.key !== filter.key)); - } - }} - /> - </FilterItem> - ); - })} - </FilterViewContent> - ); + }, [stackTypeState, filterItems, onFilterChange]); - const filterFooter = ( - <FilterViewBottom> - <LinkButton - style={{ marginRight: "auto" }} - text={trans("addItem")} - icon={<BluePlusIcon />} - onClick={() => { - setFilters(filters.concat(genFilterViewItem())); - }} - /> - <TacoButton - onClick={() => { - setFilters([genFilterViewItem()]); - }} - buttonType="delete" - > - {trans("table.clear")} - </TacoButton> - <TacoButton buttonType="primary" onClick={() => setVisible(false)}> - {trans("ok")} - </TacoButton> - </FilterViewBottom> - ); return ( <SuspensionBox title={trans("table.filter")} @@ -545,91 +627,76 @@ function TableFilterView(props: { width={600} scrollable contentMaxHeight={292} - content={popOverContent} - footer={filterFooter} + content={ + <FilterContent + filterItems={filterItems} + columnKeyNames={columnKeyNames} + stackTypeState={stackTypeState} + stackTypeValue={stackTypeValue} + updateFilter={updateFilter} + handleStackTypeChange={handleStackTypeChange} + removeFilter={removeFilter} + /> + } + footer={ + <FilterFooter + filterItems={filterItems} + setFilterItems={setFilterItems} + setVisible={setVisible} + /> + } /> ); -} - -export const TableToolbarComp = (function () { - const childrenMap = { - showRefresh: BoolControl, - showDownload: BoolControl, - showFilter: BoolControl, - columnSetting: BoolControl, - fixedToolbar: BoolControl, - // searchText: StringControl, - filter: stateComp<TableFilter>({ stackType: "and", filters: [] }), - position: dropdownControl(positionOptions, "below"), - columnSeparator: withDefault(StringControl, ','), - showUpdateButtons: withDefault(BoolControl, true), - }; +}); - return new ControlNodeCompBuilder(childrenMap, (props, dispatch) => { - return { - ...props, - onFilterChange: (filters: TableFilterDataType[], stackType: TableFilter["stackType"]) => { - dispatch( - changeChildAction( - "filter", - { - stackType: stackType, - filters: filters, - }, - false - ) - ); - }, - }; - }) - .setPropertyViewFn((children) => [ - children.position.propertyView({ label: trans("table.position"), radioButton: true }), - children.fixedToolbar.propertyView({ - label: trans("table.fixedToolbar"), - tooltip: trans("table.fixedToolbarTooltip") - }), - children.showUpdateButtons.propertyView({ label: trans("table.showUpdateButtons")}), - children.showFilter.propertyView({ label: trans("table.showFilter") }), - children.showRefresh.propertyView({ label: trans("table.showRefresh") }), - children.showDownload.propertyView({ label: trans("table.showDownload") }), - children.showDownload.getView() && children.columnSeparator.propertyView({ - label: trans("table.columnSeparator"), - tooltip: trans("table.columnSeparatorTooltip"), - }), - children.columnSetting.propertyView({ label: trans("table.columnSetting") }), - /* children.searchText.propertyView({ - label: trans("table.searchText"), - tooltip: trans("table.searchTextTooltip"), - placeholder: "{{input1.value}}", - }), */ - ]) - .build(); -})(); +TableFilterView.displayName = 'TableFilterView'; -function ColumnSetting(props: { +const ColumnSetting = memo(function ColumnSetting(props: { columns: Array<ColumnCompType>; setVisible: (v: boolean) => void; }) { const { columns, setVisible } = props; - let allChecked = true; - const checkViews = columns.map((c) => { - const columnView = c.getView(); - const checked = !columnView.tempHide; - if (!checked) { - allChecked = false; - } - return ( - <ColumnCheckItem key={columnView.dataIndex}> - <CheckBox - checked={checked} - onChange={(e) => { - c.children.tempHide.dispatchChangeValueAction(!e.target.checked); - }} - /> - <CommonTextLabel>{columnView.title || columnView.dataIndex}</CommonTextLabel> - </ColumnCheckItem> - ); - }); + + // Memoize checked states for all columns + const checkedStates = useMemo(() => columns.map((c) => !c.getView().tempHide), [columns]); + + // Memoize allChecked calculation + const allChecked = useMemo(() => checkedStates.every(Boolean), [checkedStates]); + + // Memoize checkViews rendering + const checkViews = useMemo(() => + columns.map((c, idx) => { + const columnView = c.getView(); + const checked = checkedStates[idx]; + return ( + <ColumnCheckItem key={columnView.dataIndex}> + <CheckBox + checked={checked} + onChange={(e: CheckboxChangeEvent) => { + c.children.tempHide.dispatchChangeValueAction(!e.target.checked); + }} + /> + <CommonTextLabel>{columnView.title || columnView.dataIndex}</CommonTextLabel> + </ColumnCheckItem> + ); + }), + [columns, checkedStates] + ); + + // Memoize the 'Select All' onChange handler + const handleSelectAll = useCallback((e: CheckboxChangeEvent) => { + const checked = e.target.checked; + columns.forEach((c) => { + const tempHide = c.children.tempHide.getView(); + // fixme batch dispatch + if (checked && tempHide) { + c.children.tempHide.dispatchChangeValueAction(false); + } else if (!checked && !tempHide) { + c.children.tempHide.dispatchChangeValueAction(true); + } + }); + }, [columns]); + return ( <SuspensionBox title={trans("table.columnShows")} @@ -637,43 +704,25 @@ function ColumnSetting(props: { width={160} contentMaxHeight={150} scrollable - content={ - <div style={{ display: "flex", flexDirection: "column", gap: "8px" }}>{checkViews}</div> - } + content={<ColumnSettingContent>{checkViews}</ColumnSettingContent>} footer={ - <div - style={{ - display: "flex", - alignItems: "flex-end", - justifyContent: "space-between", - height: "32px", - }} - > + <ColumnSettingFooter> <ColumnCheckItem> <CheckBox checked={allChecked} - onChange={(e) => { - const checked = e.target.checked; - columns.forEach((c) => { - const tempHide = c.children.tempHide.getView(); - // fixme batch dispatch - if (checked && tempHide) { - c.children.tempHide.dispatchChangeValueAction(false); - } else if (!checked && !tempHide) { - c.children.tempHide.dispatchChangeValueAction(true); - } - }); - }} + onChange={handleSelectAll} /> <CommonTextLabel>{trans("table.selectAll")}</CommonTextLabel> </ColumnCheckItem> - </div> + </ColumnSettingFooter> } /> ); -} +}); -function ToolbarPopover(props: { +ColumnSetting.displayName = 'ColumnSetting'; + +const ToolbarPopover = memo(function ToolbarPopover(props: { visible: boolean; setVisible: (v: boolean) => void; Icon: React.FC<React.SVGProps<SVGSVGElement>>; @@ -681,47 +730,32 @@ function ToolbarPopover(props: { content: JSX.Element; }) { const { visible, setVisible, Icon, iconClassName, content } = props; - const iconRef = useRef<SVGSVGElement>(null); - const popOverRef = useRef<HTMLDivElement>(null); + + const handleVisibleChange = useCallback((v: boolean) => { + setVisible(v); + }, [setVisible]); + return ( <Popover open={visible} + onOpenChange={handleVisibleChange} + content={content} + trigger="click" + placement="bottomRight" styles={{ - root: { pointerEvents: "auto" }, - body: {padding: '0'} + body: { + padding: 0, + }, }} - content={ - <div - ref={popOverRef} - tabIndex={-1} - onBlur={(e) => { - if (!e.currentTarget.contains(e.relatedTarget) && iconRef.current !== e.relatedTarget) { - setVisible(false); - } - }} - > - {content} - </div> - } > - <Icon - className={iconClassName} - tabIndex={-1} - ref={iconRef} - onBlur={(e) => { - if (!popOverRef.current?.contains(e.relatedTarget)) { - setVisible(false); - } - }} - onClick={() => setVisible(!visible)} - /> + <Icon className={iconClassName} /> </Popover> ); -} +}); -type ToolbarRowType = ConstructorToView<typeof TableToolbarComp>; +ToolbarPopover.displayName = 'ToolbarPopover'; -export function TableToolbar(props: { +export const TableToolbar = memo(function TableToolbar(props: { toolbar: ToolbarRowType; $style: TableToolbarStyleType; pagination: PaginationProps; @@ -735,6 +769,7 @@ export function TableToolbar(props: { }) { const { toolbar, + $style, pagination, columns, onRefresh, @@ -744,75 +779,96 @@ export function TableToolbar(props: { onCancelChanges, onEvent, } = props; + + const theme = useContext(ThemeContext)?.theme; + const filtered = useMemo(() => toolbar.filter.filters.length > 0, [toolbar.filter.filters.length]); const [filterVisible, setFilterVisible] = useState(false); - const [settingVisible, setSettingVisible] = useState(false); - const visibleColumns = columns.filter((c) => !c.children.hide.getView()); + const [columnSettingVisible, setColumnSettingVisible] = useState(false); + const visibleColumns = useMemo(() => columns.filter((column) => !column.getView().hide), [columns]); + + const handleRefresh = useCallback(() => { + onRefresh(); + onEvent("refresh"); + }, [onRefresh, onEvent]); + + const handleDownload = useCallback(() => { + onDownload(); + onEvent("download"); + }, [onDownload, onEvent]); + + const handleSaveChanges = useCallback(() => { + onSaveChanges(); + onEvent("saveChanges"); + }, [onSaveChanges, onEvent]); + + const handleCancelChanges = useCallback(() => { + onCancelChanges(); + onEvent("cancelChanges"); + }, [onCancelChanges, onEvent]); + + const handleColumnFilterChange = useCallback((filters: TableFilterDataType[], stackType: TableFilter["stackType"]) => { + if ( + !_.isEqual(filters, toolbar.filter.filters) || + stackType !== toolbar.filter.stackType + ) { + toolbar.onFilterChange(filters, stackType); + onEvent("filterChange"); + } + }, [toolbar, onEvent]); + const columnKeyNameTuple = useMemo(() => { return visibleColumns.map((column) => { const c = column.getView(); return [c.dataIndex, c.title || c.dataIndex] as [string, string]; }); - }, [columns]); - const theme = useContext(ThemeContext)?.theme; + }, [visibleColumns]); return ( <ToolbarWrapper - $style={props.$style} + $style={$style} + $filtered={filtered} $theme={theme || defaultTheme} - $filtered={toolbar.filter.filters.length > 0} $position={toolbar.position} $fixedToolbar={toolbar.fixedToolbar} > <ToolbarWrapper2> <ToolbarIcons className="toolbar-icons"> {toolbar.showRefresh && ( - <RefreshIcon - className="refresh" - onClick={() => { - onRefresh(); - onEvent("refresh"); - }} - /> + <RefreshIcon className="refresh" onClick={handleRefresh} /> )} {toolbar.showFilter && ( <ToolbarPopover visible={filterVisible} setVisible={setFilterVisible} + Icon={FilterIcon} + iconClassName="filter" content={ <TableFilterView columnKeyNames={columnKeyNameTuple} tableFilter={toolbar.filter} - onFilterChange={(filters, stackType) => { - if ( - !_.isEqual(filters, toolbar.filter.filters) || - stackType !== toolbar.filter.stackType - ) { - toolbar.onFilterChange(filters, stackType); - onEvent("filterChange"); - } - }} - setVisible={(v) => setFilterVisible(v)} + setVisible={setFilterVisible} + onFilterChange={handleColumnFilterChange} /> } - Icon={FilterIcon} - iconClassName="filter" /> )} - {toolbar.showDownload && <DownloadIcon className="download" onClick={onDownload} />} + {toolbar.showDownload && ( + <DownloadIcon className="download" onClick={handleDownload} /> + )} {toolbar.columnSetting && ( <ToolbarPopover - visible={settingVisible} - setVisible={setSettingVisible} - content={<ColumnSetting columns={visibleColumns} setVisible={setSettingVisible} />} + visible={columnSettingVisible} + setVisible={setColumnSettingVisible} Icon={TableColumnVisibilityIcon} iconClassName="column-setting" + content={<ColumnSetting columns={columns} setVisible={setColumnSettingVisible} />} /> )} </ToolbarIcons> <Pagination size="small" - itemRender={pageItemRender} {...pagination} + itemRender={pageItemRender} onChange={(page, pageSize) => { pagination.onChange && pagination.onChange(page, pageSize); if (page !== pagination.current) { @@ -822,13 +878,70 @@ export function TableToolbar(props: { /> {hasChange && toolbar.showUpdateButtons && ( <SaveChangeButtons> - <Button onClick={onCancelChanges}>{trans("cancel")}</Button> - <Button type="primary" onClick={onSaveChanges}> + <TacoButton onClick={handleCancelChanges}>{trans("cancel")}</TacoButton> + <TacoButton buttonType="primary" onClick={handleSaveChanges}> {trans("table.saveChanges")} - </Button> + </TacoButton> </SaveChangeButtons> )} </ToolbarWrapper2> </ToolbarWrapper> ); -} +}); + +TableToolbar.displayName = 'TableToolbar'; + +export const TableToolbarComp = (function () { + const childrenMap = { + showRefresh: BoolControl, + showDownload: BoolControl, + showFilter: BoolControl, + columnSetting: BoolControl, + fixedToolbar: BoolControl, + // searchText: StringControl, + filter: stateComp<TableFilter>({ stackType: "and", filters: [] }), + position: dropdownControl(positionOptions, "below"), + columnSeparator: withDefault(StringControl, ','), + showUpdateButtons: withDefault(BoolControl, true), + }; + + return new ControlNodeCompBuilder(childrenMap, (props, dispatch) => { + return { + ...props, + onFilterChange: (filters: TableFilterDataType[], stackType: TableFilter["stackType"]) => { + dispatch( + changeChildAction( + "filter", + { + stackType: stackType, + filters: filters, + }, + false + ) + ); + }, + }; + }) + .setPropertyViewFn((children) => [ + children.position.propertyView({ label: trans("table.position"), radioButton: true }), + children.fixedToolbar.propertyView({ + label: trans("table.fixedToolbar"), + tooltip: trans("table.fixedToolbarTooltip") + }), + children.showUpdateButtons.propertyView({ label: trans("table.showUpdateButtons")}), + children.showFilter.propertyView({ label: trans("table.showFilter") }), + children.showRefresh.propertyView({ label: trans("table.showRefresh") }), + children.showDownload.propertyView({ label: trans("table.showDownload") }), + children.showDownload.getView() && children.columnSeparator.propertyView({ + label: trans("table.columnSeparator"), + tooltip: trans("table.columnSeparatorTooltip"), + }), + children.columnSetting.propertyView({ label: trans("table.columnSetting") }), + /* children.searchText.propertyView({ + label: trans("table.searchText"), + tooltip: trans("table.searchTextTooltip"), + placeholder: "{{input1.value}}", + }), */ + ]) + .build(); +})(); diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx index 0fa8341728..025e91e51e 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx @@ -385,7 +385,7 @@ export function columnsToAntdFormat( .getView() .view({ editable: record[OB_ROW_ORI_INDEX].startsWith(EMPTY_ROW_KEY) || column.editable, - size, + tableSize: size, candidateTags: tags, candidateStatus: status, textOverflow: column.textOverflow, @@ -396,6 +396,7 @@ export function columnsToAntdFormat( }), editMode, onTableEvent, + cellIndex: `${column.dataIndex}-${index}`, }); }, ...(column.sortable diff --git a/client/packages/lowcoder/src/comps/comps/textComp.tsx b/client/packages/lowcoder/src/comps/comps/textComp.tsx index f51a1ede4e..93b3d79ae0 100644 --- a/client/packages/lowcoder/src/comps/comps/textComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textComp.tsx @@ -18,7 +18,7 @@ import { alignWithJustifyControl } from "comps/controls/alignControl"; import { MarginControl } from "../controls/marginControl"; import { PaddingControl } from "../controls/paddingControl"; -import React, { useContext, useEffect } from "react"; +import React, { useContext, useEffect, useRef, useMemo } from "react"; import { EditorContext } from "comps/editorState"; import { clickEvent, eventHandlerControl } from "../controls/eventHandlerControl"; import { NewChildren } from "../generators/uiCompBuilder"; @@ -80,7 +80,7 @@ const getStyle = (style: TextStyleType) => { `; }; -const TextContainer = styled.div<{ +const TextContainer = React.memo(styled.div<{ $type: string; $styleConfig: TextStyleType; $animationStyle:AnimationStyleType; @@ -107,7 +107,7 @@ const TextContainer = styled.div<{ .markdown-body { overflow-wrap: anywhere; } -`; +`); const AlignTop = styled(AlignLeft)` transform: rotate(90deg); `; @@ -156,77 +156,115 @@ type ChildrenType = NewChildren<RecordConstructorToComp<typeof childrenMap>>; const TextPropertyView = React.memo((props: { children: ChildrenType }) => { - return ( - <> - <Section name={sectionNames.basic}> - {props.children.type.propertyView({ - label: trans("value"), - tooltip: trans("textShow.valueTooltip"), - radioButton: true, - })} - {props.children.text.propertyView({})} + const editorContext = useContext(EditorContext); + const editorModeStatus = useMemo(() => editorContext.editorModeStatus, [editorContext.editorModeStatus]); + + const basicSection = useMemo(() => ( + <Section name={sectionNames.basic}> + {props.children.type.propertyView({ + label: trans("value"), + tooltip: trans("textShow.valueTooltip"), + radioButton: true, + })} + {props.children.text.propertyView({})} + </Section> + ), [props.children.type, props.children.text]); + + const interactionSection = useMemo(() => + ["logic", "both"].includes(editorModeStatus) && ( + <Section name={sectionNames.interaction}> + {hiddenPropertyView(props.children)} + {props.children.onEvent.getPropertyView()} + {showDataLoadingIndicatorsPropertyView(props.children)} </Section> + ), [editorModeStatus, props.children]); - {["logic", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <Section name={sectionNames.interaction}> - {hiddenPropertyView(props.children)} - {props.children.onEvent.getPropertyView()} - {showDataLoadingIndicatorsPropertyView(props.children)} - </Section> - )} - - {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( - <> - <Section name={sectionNames.layout}> - {props.children.autoHeight.getPropertyView()} - {!props.children.autoHeight.getView() && - props.children.contentScrollBar.propertyView({ - label: trans("prop.contentScrollbar"), - })} - {!props.children.autoHeight.getView() && - props.children.verticalAlignment.propertyView({ - label: trans("textShow.verticalAlignment"), - radioButton: true, - })} - {props.children.horizontalAlignment.propertyView({ - label: trans("textShow.horizontalAlignment"), + const layoutSection = useMemo(() => + ["layout", "both"].includes(editorModeStatus) && ( + <> + <Section name={sectionNames.layout}> + {props.children.autoHeight.getPropertyView()} + {!props.children.autoHeight.getView() && + props.children.contentScrollBar.propertyView({ + label: trans("prop.contentScrollbar"), + })} + {!props.children.autoHeight.getView() && + props.children.verticalAlignment.propertyView({ + label: trans("textShow.verticalAlignment"), radioButton: true, })} - </Section> - <Section name={sectionNames.style}> - {props.children.style.getPropertyView()} - </Section> - <Section name={sectionNames.animationStyle} hasTooltip={true}> - {props.children.animationStyle.getPropertyView()} - </Section> - </> - )} + {props.children.horizontalAlignment.propertyView({ + label: trans("textShow.horizontalAlignment"), + radioButton: true, + })} + </Section> + <Section name={sectionNames.style}> + {props.children.style.getPropertyView()} + </Section> + <Section name={sectionNames.animationStyle} hasTooltip={true}> + {props.children.animationStyle.getPropertyView()} + </Section> + </> + ), [editorModeStatus, props.children]); + + return ( + <> + {basicSection} + {interactionSection} + {layoutSection} </> ); -}) +}, (prev, next) => { + return ( + prev.children === next.children && + prev.children.text.getView() === next.children.text.getView() && + prev.children.type.getView() === next.children.type.getView() + ); +}); const TextView = React.memo((props: ToViewReturn<ChildrenType>) => { const value = props.text.value; + const handleClick = React.useCallback(() => { + props.onEvent("click"); + }, [props.onEvent]); + + const containerStyle = useMemo(() => ({ + justifyContent: props.horizontalAlignment, + alignItems: props.autoHeight ? "center" : props.verticalAlignment, + textAlign: props.horizontalAlignment, + rotate: props.style.rotation + }), [props.horizontalAlignment, props.autoHeight, props.verticalAlignment, props.style.rotation]); + + const content = useMemo(() => + props.type === "markdown" ? <TacoMarkDown>{value}</TacoMarkDown> : value, + [props.type, value] + ); return ( <TextContainer $animationStyle={props.animationStyle} $type={props.type} $styleConfig={props.style} - style={{ - justifyContent: props.horizontalAlignment, - alignItems: props.autoHeight ? "center" : props.verticalAlignment, - textAlign: props.horizontalAlignment, - rotate: props.style.rotation - }} - onClick={() => props.onEvent("click")} + style={containerStyle} + onClick={handleClick} > <ScrollBar hideScrollbar={!props.contentScrollBar}> - {props.type === "markdown" ? <TacoMarkDown>{value}</TacoMarkDown> : value} + {content} </ScrollBar> </TextContainer> ); -}, (prev, next) => JSON.stringify(prev) === JSON.stringify(next)); +}, (prev, next) => { + return ( + prev.text.value === next.text.value && + prev.type === next.type && + prev.autoHeight === next.autoHeight && + prev.contentScrollBar === next.contentScrollBar && + prev.verticalAlignment === next.verticalAlignment && + prev.horizontalAlignment === next.horizontalAlignment && + prev.style === next.style && + prev.animationStyle === next.animationStyle + ); +}); let TextTmpComp = (function () { return new UICompBuilder(childrenMap, (props) => <TextView {...props} />) diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx index 6222fb6ded..cfbdfe0428 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/inputComp.tsx @@ -32,6 +32,8 @@ import { hasIcon } from "comps/utils"; import { InputRef } from "antd/es/input"; import { RefControl } from "comps/controls/refControl"; import { migrateOldData, withDefault } from "comps/generators/simpleGenerators"; +import { numberSimpleControl } from "comps/controls/numberSimpleControl"; +import { NumberControl } from "comps/controls/codeControl"; import React, { useContext, useEffect } from "react"; import { EditorContext } from "comps/editorState"; @@ -55,8 +57,9 @@ const childrenMap = { labelStyle:styleControl(LabelStyle, 'labelStyle'), prefixIcon: IconControl, suffixIcon: IconControl, - inputFieldStyle: styleControl(InputLikeStyle, 'inputFieldStyle') , + inputFieldStyle: styleControl(InputLikeStyle, 'inputFieldStyle'), animationStyle: styleControl(AnimationStyle, 'animationStyle'), + tabIndex: NumberControl, }; let InputBasicComp = new UICompBuilder(childrenMap, (props) => { @@ -72,6 +75,7 @@ let InputBasicComp = new UICompBuilder(childrenMap, (props) => { $style={props.inputFieldStyle} prefix={hasIcon(props.prefixIcon) && props.prefixIcon} suffix={hasIcon(props.suffixIcon) && props.suffixIcon} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> ), style: props.style, diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx index 846a81a7d7..4347043874 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/passwordComp.tsx @@ -42,6 +42,7 @@ import { RefControl } from "comps/controls/refControl"; import React, { useContext, useEffect } from "react"; import { EditorContext } from "comps/editorState"; import { migrateOldData } from "comps/generators/simpleGenerators"; +import { NumberControl } from "comps/controls/codeControl"; const PasswordStyle = styled(InputPassword)<{ $style: InputLikeStyleType; @@ -63,6 +64,7 @@ let PasswordTmpComp = (function () { labelStyle: styleControl(LabelStyle,'labelStyle'), inputFieldStyle: styleControl(InputLikeStyle , 'inputFieldStyle'), animationStyle: styleControl(AnimationStyle , 'animationStyle'), + tabIndex: NumberControl, }; return new UICompBuilder(childrenMap, (props, dispatch) => { const [inputProps, validateState] = useTextInputProps(props); @@ -76,6 +78,7 @@ let PasswordTmpComp = (function () { ref={props.viewRef} visibilityToggle={props.visibilityToggle} $style={props.inputFieldStyle} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> ), style: props.style, @@ -105,6 +108,7 @@ let PasswordTmpComp = (function () { })} {readOnlyPropertyView(children)} {children.prefixIcon.propertyView({ label: trans("button.prefixIcon") })} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section><Section name={sectionNames.validation}> {requiredPropertyView(children)} {children.showValidationWhenEmpty.propertyView({label: trans("prop.showEmptyValidation")})} diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx index b631d65fbd..c8a7582eb8 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/textAreaComp.tsx @@ -33,6 +33,7 @@ import { trans } from "i18n"; import { RefControl } from "comps/controls/refControl"; import { TextAreaRef } from "antd/es/input/TextArea"; import { blurMethod, focusWithOptions } from "comps/utils/methodUtils"; +import { NumberControl } from "comps/controls/codeControl"; import React, { useContext, useEffect } from "react"; import { EditorContext } from "comps/editorState"; @@ -80,7 +81,8 @@ let TextAreaTmpComp = (function () { labelStyle: styleControl(LabelStyle ,'labelStyle' ), textAreaScrollBar: withDefault(BoolControl, false), inputFieldStyle: styleControl(InputLikeStyle , 'inputFieldStyle'), - animationStyle: styleControl(AnimationStyle, 'animationStyle') + animationStyle: styleControl(AnimationStyle, 'animationStyle'), + tabIndex: NumberControl }; return new UICompBuilder(childrenMap, (props) => { const [inputProps, validateState] = useTextInputProps(props); @@ -96,6 +98,7 @@ let TextAreaTmpComp = (function () { allowClear={props.allowClear} style={{ height: "100% !important", resize: "vertical" }} $style={props.inputFieldStyle} + tabIndex={typeof props.tabIndex === 'number' ? props.tabIndex : undefined} /> </Wrapper> ), @@ -128,6 +131,7 @@ let TextAreaTmpComp = (function () { <Section name={sectionNames.advanced}> {allowClearPropertyView(children)} {readOnlyPropertyView(children)} + {children.tabIndex.propertyView({ label: trans("prop.tabIndex") })} </Section> <TextInputValidationSection {...children} /></> )} diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx index 513c4f38f0..c2ab8801b2 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx @@ -11,7 +11,7 @@ import { stringExposingStateControl } from "comps/controls/codeStateControl"; import { LabelControl } from "comps/controls/labelControl"; import { InputLikeStyleType, LabelStyleType, heightCalculator, widthCalculator } from "comps/controls/styleControlConstants"; import { Section, sectionNames, ValueFromOption } from "lowcoder-design"; -import _ from "lodash"; +import _, { debounce } from "lodash"; import { css } from "styled-components"; import { EMAIL_PATTERN, URL_PATTERN } from "util/stringUtils"; import { MultiBaseComp, RecordConstructorToComp, RecordConstructorToView } from "lowcoder-core"; @@ -170,6 +170,7 @@ export const useTextInputProps = (props: RecordConstructorToView<typeof textInpu const [validateState, setValidateState] = useState({}); const changeRef = useRef(false) const touchRef = useRef(false); + const [localInputValue, setLocalInputValue] = useState<string>(''); const propsRef = useRef<RecordConstructorToView<typeof textInputChildren>>(props); propsRef.current = props; @@ -181,6 +182,12 @@ export const useTextInputProps = (props: RecordConstructorToView<typeof textInpu props.value.onChange(defaultValue) }, [defaultValue]); + useEffect(() => { + if (inputValue !== localInputValue) { + setLocalInputValue(inputValue); + } + }, [inputValue]); + useEffect(() => { if (!changeRef.current) return; @@ -188,13 +195,13 @@ export const useTextInputProps = (props: RecordConstructorToView<typeof textInpu textInputValidate({ ...propsRef.current, value: { - value: inputValue, + value: localInputValue, }, }) ); propsRef.current.onEvent("change"); changeRef.current = false; - }, [inputValue]); + }, [localInputValue]); useEffect(() => { if (!touchRef.current) return; @@ -203,21 +210,51 @@ export const useTextInputProps = (props: RecordConstructorToView<typeof textInpu textInputValidate({ ...propsRef.current, value: { - value: props.value.value, + value: localInputValue, }, }) ); }, [props.customRule]) + const debouncedOnChangeRef = useRef( + debounce((value: string) => { + props.value.onChange(value); + }, 1000) + ); + + // Cleanup debounced function on unmount + useEffect(() => { + return () => { + debouncedOnChangeRef.current.cancel(); + }; + }, []); + const handleChange = (e: ChangeEvent<HTMLInputElement>) => { - props.value.onChange(e.target.value); + const value = e.target.value; + setLocalInputValue(value); + changeRef.current = true; touchRef.current = true; + debouncedOnChangeRef.current?.(value); }; + // Cleanup refs on unmount + useEffect(() => { + return () => { + changeRef.current = false; + touchRef.current = false; + propsRef.current = null as any; + }; + }, []); + return [ { - ...textInputProps(props), + ...textInputProps({ + ...props, + value: { + value: localInputValue, + } as any, + }), onChange: handleChange, }, validateState, @@ -238,6 +275,7 @@ export const TextInputInteractionSection = (children: TextInputComp) => ( {children.onEvent.getPropertyView()} {disabledPropertyView(children)} {showDataLoadingIndicatorsPropertyView(children as any)} + {(children as any).tabIndex?.propertyView({ label: trans("prop.tabIndex") })} </Section> ); @@ -271,7 +309,6 @@ export function getStyle(style: InputLikeStyleType, labelStyle?: LabelStyleType) text-decoration:${style.textDecoration}; background-color: ${style.background}; border-color: ${style.border}; - // line-height: ${style.lineHeight}; &:focus, &.ant-input-affix-wrapper-focused { diff --git a/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx b/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx index 6e4f298dd4..db45ba023b 100644 --- a/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/timelineComp/timelineComp.tsx @@ -142,9 +142,15 @@ const TimelineComp = ( dispatch(changeChildAction("clickedIndex", index, false)); onEvent("click"); }} + // for responsiveness style={{ cursor: "pointer", color: value?.titleColor || style?.titleColor, + whiteSpace: "normal", + wordWrap: "break-word", + textAlign: "left", + height: "auto", + padding: "0" }} > <b>{value?.title}</b> diff --git a/client/packages/lowcoder/src/comps/comps/transferComp.tsx b/client/packages/lowcoder/src/comps/comps/transferComp.tsx index 56a20d064b..0da018ee4f 100644 --- a/client/packages/lowcoder/src/comps/comps/transferComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/transferComp.tsx @@ -11,7 +11,7 @@ import { trans } from "i18n"; import { NumberControl, StringControl } from "comps/controls/codeControl"; import { default as Transfer } from "antd/es/transfer"; import type { TransferKey } from "antd/es/transfer/interface"; -import ReactResizeDetector from "react-resize-detector"; +import { useResizeDetector } from "react-resize-detector"; import { changeEvent, eventHandlerControl, searchEvent, selectedChangeEvent } from "../controls/eventHandlerControl"; import styled, { css } from "styled-components"; import { useContext, useEffect, useRef, useState } from "react"; @@ -111,33 +111,36 @@ const TransferView = React.memo((props: RecordConstructorToView<typeof childrenM setHeight(container?.clientHeight ?? 0); }; + useResizeDetector({ + targetRef: conRef, + onResize, + }); + return ( - <ReactResizeDetector onResize={onResize}> - <Container - ref={conRef} - $style={props.style} - > - <Transfer - listStyle={{ - width: width, - height: height, - }} - showSearch={props.showSearch} - dataSource={props.items.value as any} - titles={[props.targetTitle, props.sourceTitle]} - targetKeys={props.targetKeys.value} - selectedKeys={selectedKeys} - onChange={handleChange} - onSelectChange={onSelectChange} - render={(item: RecordType) => item.title} - oneWay={props.oneWay} - onSearch={handleSearch} - pagination={props.pagination ? { - pageSize: props.pageSize || 10, - } : false} - /> - </Container> - </ReactResizeDetector> + <Container + ref={conRef} + $style={props.style} + > + <Transfer + listStyle={{ + width: width, + height: height, + }} + showSearch={props.showSearch} + dataSource={props.items.value as any} + titles={[props.targetTitle, props.sourceTitle]} + targetKeys={props.targetKeys.value} + selectedKeys={selectedKeys} + onChange={handleChange} + onSelectChange={onSelectChange} + render={(item: RecordType) => item.title} + oneWay={props.oneWay} + onSearch={handleSearch} + pagination={props.pagination ? { + pageSize: props.pageSize || 10, + } : false} + /> + </Container> ); }); diff --git a/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx b/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx index ea8e6f006a..4f472da9b1 100644 --- a/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/dropdownControl.tsx @@ -67,7 +67,11 @@ function DropdownPropertyView<T extends OptionsType>(props: DropdownPropertyView showSearch={params.showSearch} onChange={onChange} disabled={params.disabled} - dropdownStyle={props.dropdownStyle} + styles={{ + popup: { + root: props.dropdownStyle + } + }} labelStyle={props.labelStyle} /> ); diff --git a/client/packages/lowcoder/src/comps/controls/eventHandlerControl.tsx b/client/packages/lowcoder/src/comps/controls/eventHandlerControl.tsx index 11f81b5690..d8c26d7ad8 100644 --- a/client/packages/lowcoder/src/comps/controls/eventHandlerControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/eventHandlerControl.tsx @@ -20,7 +20,7 @@ import { QueryConfigItemWrapper, ValueFromOption, } from "lowcoder-design"; -import { Fragment, ReactNode, useContext, useEffect, useState} from "react"; +import { Fragment, ReactNode, useContext, useEffect, useState, useRef, useCallback } from "react"; import { memo } from "util/cacheUtils"; import { EditorContext } from "../editorState"; import { ActionSelectorControl } from "./actionSelector/actionSelectorControl"; @@ -59,7 +59,12 @@ class SingleEventHandlerControl< return; } if (handler) { - return handler(); + try { + return handler(); + } catch (error) { + console.error('Error in event handler:', error); + return Promise.reject(error); + } } }; } @@ -142,10 +147,9 @@ const EventHandlerControlPropertyView = (props: { type?: "query"; eventConfigs: EventConfigsType; }) => { - - const editorState = useContext(EditorContext); const [showNewCreate, setShowNewCreate] = useState(false); + const mountedRef = useRef(true); const { dispatch, @@ -157,14 +161,27 @@ const EventHandlerControlPropertyView = (props: { type } = props; - useEffect(() => setShowNewCreate(false), [dispatch]); + // Reset state on unmount + useEffect(() => { + return () => { + mountedRef.current = false; + setShowNewCreate(false); + }; + }, []); + + // Reset showNewCreate when dispatch changes + useEffect(() => { + if (mountedRef.current) { + setShowNewCreate(false); + } + }, [dispatch]); const queryHandler = { name: eventConfigs[0].value, }; - const handleAdd = () => { - if (eventConfigs.length === 0) { + const handleAdd = useCallback(() => { + if (eventConfigs.length === 0 || !mountedRef.current) { return; } @@ -190,8 +207,10 @@ const EventHandlerControlPropertyView = (props: { handler: isInDevIde ? messageHandler : queryExecHandler, } as const; dispatch(pushAction(type !== "query" ? newHandler : queryHandler)); - setShowNewCreate(true); - }; + if (mountedRef.current) { + setShowNewCreate(true); + } + }, [dispatch, eventConfigs, editorState, pushAction, type]); const renderItems = () => items.length > 0 ? ( @@ -251,7 +270,12 @@ class EventHandlerControl<T extends EventConfigsType> extends list(SingleEventHa super.getView().forEach((child) => { const ret = child.getView()(eventName); if (ret) { - list.push(ret); + list.push( + Promise.resolve(ret).catch(error => { + console.error('Error in event handler:', error); + return Promise.reject(error); + }) + ); } }); return Promise.all(list); @@ -489,7 +513,11 @@ export const resetEvent: EventConfigType = { value: "reset", description: trans("event.resetDesc"), }; - +export const sortChangeEvent: EventConfigType = { + label: trans("event.sortChange"), + value: "sortChange", + description: trans("event.sortChangeDesc"), +}; // Meeting Events diff --git a/client/packages/lowcoder/src/comps/controls/iconControl.tsx b/client/packages/lowcoder/src/comps/controls/iconControl.tsx index 767000ad83..56439bc878 100644 --- a/client/packages/lowcoder/src/comps/controls/iconControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/iconControl.tsx @@ -224,7 +224,11 @@ export const IconControlView = memo((props: { value: string }) => { return renderIcon; } - return <StyledImage src={value} alt="" />; + if (value) { + return <StyledImage src={value} alt="" />; + } + + return ''; }, [icon, value, IconDictionary[value]]) }); diff --git a/client/packages/lowcoder/src/comps/controls/iconscoutControl.tsx b/client/packages/lowcoder/src/comps/controls/iconscoutControl.tsx new file mode 100644 index 0000000000..e400ddec3e --- /dev/null +++ b/client/packages/lowcoder/src/comps/controls/iconscoutControl.tsx @@ -0,0 +1,600 @@ +import { trans } from "i18n"; +import { + SimpleComp, +} from "lowcoder-core"; +import { + BlockGrayLabel, + ControlPropertyViewWrapper, + CustomModal, + DeleteInputIcon, + TacoButton, + TacoInput, + useIcon, + wrapperToControlItem, +} from "lowcoder-design"; +import { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from "react"; +import styled from "styled-components"; +import Popover from "antd/es/popover"; +import { CloseIcon, SearchIcon } from "icons"; +import Draggable from "react-draggable"; +import IconScoutApi from "@lowcoder-ee/api/iconscoutApi"; +import { searchAssets, getAssetLinks, SearchParams } from "@lowcoder-ee/api/iconFlowApi"; +import List, { ListRowProps } from "react-virtualized/dist/es/List"; +import { debounce } from "lodash"; +import Spin from "antd/es/spin"; +import { ControlParams } from "./controlParams"; +import { getBase64 } from "@lowcoder-ee/util/fileUtils"; +import Flex from "antd/es/flex"; +import Typography from "antd/es/typography"; +import LoadingOutlined from "@ant-design/icons/LoadingOutlined"; +import Badge from "antd/es/badge"; +import { CrownFilled } from "@ant-design/icons"; +import { SUBSCRIPTION_SETTING } from "@lowcoder-ee/constants/routesURL"; +import { useSimpleSubscriptionContext } from "@lowcoder-ee/util/context/SimpleSubscriptionContext"; +import { SubscriptionProductsEnum } from "@lowcoder-ee/constants/subscriptionConstants"; + +const ButtonWrapper = styled.div` + width: 100%; + display: flex; + align-items: center; +`; +const ButtonIconWrapper = styled.div` + display: flex; + width: 18px; +`; + +const StyledDeleteInputIcon = styled(DeleteInputIcon)` + margin-left: auto; + cursor: pointer; + + &:hover circle { + fill: #8b8fa3; + } +`; + +const StyledImage = styled.img` + height: 100%; + width: 100%; + color: currentColor; +`; + +const Wrapper = styled.div` + > div:nth-of-type(1) { + margin-bottom: 4px; + } +`; +const PopupContainer = styled.div` + display: flex; + flex-direction: column; + width: 580px; + min-height: 480px; + background: #ffffff; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); + border-radius: 8px; + box-sizing: border-box; +`; + +const TitleDiv = styled.div` + height: 48px; + display: flex; + align-items: center; + padding: 0 16px; + justify-content: space-between; + user-select: none; +`; +const TitleText = styled.span` + font-size: 16px; + color: #222222; + line-height: 16px; +`; +const StyledCloseIcon = styled(CloseIcon)` + width: 16px; + height: 16px; + cursor: pointer; + color: #8b8fa3; + + &:hover g line { + stroke: #222222; + } +`; + +const SearchDiv = styled.div` + position: relative; + margin: 0px 16px; + padding-bottom: 8px; + display: flex; + justify-content: space-between; +`; +const StyledSearchIcon = styled(SearchIcon)` + position: absolute; + top: 6px; + left: 12px; +`; +const IconListWrapper = styled.div` + padding-left: 10px; + padding-right: 4px; +`; +const IconList = styled(List)` + scrollbar-gutter: stable; + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background-clip: content-box; + border-radius: 9999px; + background-color: rgba(139, 143, 163, 0.2); + } + + &::-webkit-scrollbar-thumb:hover { + background-color: rgba(139, 143, 163, 0.36); + } +`; + +const IconRow = styled.div` + padding: 6px; + display: flex; + align-items: flex-start; /* Align items to the start to allow different heights */ + justify-content: space-between; + + &:last-child { + gap: 8px; + justify-content: flex-start; + } + + .ant-badge { + height: 100%; + } +`; + +const IconItemContainer = styled.div` + width: 120px; + height: 120px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + cursor: pointer; + font-size: 28px; + border-radius: 4px; + background: #fafafa; + + &:hover { + box-shadow: 0 8px 24px #1a29470a,0 2px 8px #1a294714; + } + + &:focus { + border: 1px solid #315efb; + box-shadow: 0 0 0 2px #d6e4ff; + } +`; + +const IconWrapper = styled.div<{$isPremium?: boolean}>` + height: 100%; + display: flex; + align-items: center; + justify-content: center; + ${props => props.$isPremium && 'opacity: 0.75' }; +`; + +const StyledPreviewIcon = styled.img` + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; +`; + +const StyledPreviewLotte = styled.video` + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; +` + +export enum AssetType { + ICON = "icon", + ILLUSTRATION = "illustration", + // '3D' = "3d", + LOTTIE = "lottie", +} + +export type IconScoutAsset = { + uuid: string; + value: string; + preview: string; +} + +const IconScoutSearchParams: SearchParams = { + query: '', + asset: 'icon', + per_page: 25, + page: 1, + sort: 'relevant', +}; + +const columnNum = 4; + +export const IconPicker = (props: { + assetType: string; + uuid: string; + value: string; + preview: string; + onChange: (key: string, value: string, preview: string) => void; + label?: ReactNode; + IconType?: "OnlyAntd" | "All" | "default" | undefined; +}) => { + const draggableRef = useRef<HTMLDivElement>(null); + const [visible, setVisible] = useState(false); + const [loading, setLoading] = useState(false); + const [downloading, setDownloading] = useState(false); + const [searchText, setSearchText] = useState<string>(''); + const [searchResults, setSearchResults] = useState<Array<any>>([]); + const [page, setPage] = useState(1); + const [hasMore, setHasMore] = useState(true); + const abortControllerRef = useRef<AbortController | null>(null); + const { subscriptions } = useSimpleSubscriptionContext(); + + const mediaPackSubscription = useMemo(() => + subscriptions.find( + sub => sub.product === SubscriptionProductsEnum.MEDIAPACKAGE && sub.status === 'active' + ), + [subscriptions] + ); + + const onChangeRef = useRef(props.onChange); + onChangeRef.current = props.onChange; + + // Cleanup function for async operations + useEffect(() => { + return () => { + if (abortControllerRef.current) { + abortControllerRef.current.abort(); + } + }; + }, []); + + const onChangeIcon = useCallback( + (key: string, value: string, url: string) => { + onChangeRef.current(key, value, url); + setVisible(false); + }, + [] + ); + + const fetchResults = useCallback(async (query: string, pageNum: number = 1) => { + if (abortControllerRef.current) { + abortControllerRef.current.abort(); + } + abortControllerRef.current = new AbortController(); + + setLoading(true); + try { + const [freeResult, premiumResult] = await Promise.all([ + searchAssets({ + ...IconScoutSearchParams, + asset: props.assetType, + price: 'free', + query, + page: pageNum, + }), + searchAssets({ + ...IconScoutSearchParams, + asset: props.assetType, + price: 'premium', + query, + page: pageNum, + }) + ]); + + const combined = [...freeResult.data, ...premiumResult.data]; + const isLastPage = combined.length < IconScoutSearchParams.per_page * 2; + + setSearchResults(prev => + pageNum === 1 ? combined : [...prev, ...combined] + ); + setHasMore(!isLastPage); + } catch (error: any) { + if (error.name !== 'AbortError') { + console.error('Error fetching results:', error); + } + } finally { + setLoading(false); + } + }, [props.assetType]); + + const downloadAsset = useCallback(async ( + uuid: string, + downloadUrl: string, + callback: (assetUrl: string) => void, + ) => { + try { + if (uuid && downloadUrl) { + const json = await IconScoutApi.downloadAsset(downloadUrl); + getBase64(json, (url: string) => { + callback(url); + }); + } + } catch(error) { + console.error('Error downloading asset:', error); + setDownloading(false); + } + }, []); + + const fetchDownloadUrl = useCallback(async (uuid: string, preview: string) => { + try { + setDownloading(true); + const result = await getAssetLinks(uuid, { + format: props.assetType === AssetType.LOTTIE ? 'lottie' : 'svg', + }); + + await downloadAsset(uuid, result.download_url, (assetUrl: string) => { + setDownloading(false); + onChangeIcon(uuid, assetUrl, preview); + }); + } catch (error) { + console.error('Error fetching download URL:', error); + setDownloading(false); + } + }, [props.assetType, downloadAsset, onChangeIcon]); + + const handleChange = useCallback((e: { target: { value: any; }; }) => { + const query = e.target.value; + setSearchText(query); // Update search text immediately + + if (query.length > 2) { + debouncedFetchResults(query); // Trigger search only for >2 characters + } else { + setSearchResults([]); // Clear results if input is too short + } + }, []); + + const debouncedFetchResults = useMemo( + () => debounce((query: string) => { + setPage(1); + fetchResults(query, 1); + }, 700), + [fetchResults] + ); + + const rowRenderer = useCallback( + ({ index, key, style }: ListRowProps) => { + const icons = searchResults.slice(index * columnNum, (index + 1) * columnNum); + + return ( + <IconRow key={key} style={style}> + {icons.map((icon) => ( + <Popover + key={icon.uuid + '-popover'} + content={ + <div style={{ maxWidth: 400 }}> + {props.assetType === AssetType.LOTTIE ? ( + <video + src={icon.urls.thumb} + autoPlay + loop + muted + style={{ width: "100%", height: "auto", borderRadius: 6 }} + /> + ) : ( + <img + src={props.assetType === AssetType.ICON ? icon.urls.png_128 : icon.urls.thumb} + alt="" + style={{ width: "100%", height: "auto", borderRadius: 6 }} + /> + )} + </div> + } + placement="right" + mouseEnterDelay={0.2} + > + <IconItemContainer + key={icon.uuid} + tabIndex={0} + onClick={() => { + if (!mediaPackSubscription) { + CustomModal.confirm({ + title: trans("iconScout.buySubscriptionTitle"), + content: trans("iconScout.buySubscriptionContent"), + onConfirm: () => { + window.open(SUBSCRIPTION_SETTING, "_blank"); + }, + confirmBtnType: "primary", + okText: trans("iconScout.buySubscriptionButton"), + }); + return; + } + + fetchDownloadUrl( + icon.uuid, + props.assetType === AssetType.ICON ? icon.urls.png_64 : icon.urls.thumb, + ); + }} + > + <Badge + count={ + icon.price !== 0 ? ( + <CrownFilled style={{ color: "#e7b549" }} /> + ) : undefined + } + size="small" + > + <IconWrapper $isPremium={icon.price !== 0}> + {props.assetType === AssetType.ICON && ( + <StyledPreviewIcon src={icon.urls.png_64} /> + )} + {props.assetType === AssetType.ILLUSTRATION && ( + <StyledPreviewIcon src={icon.urls.thumb} /> + )} + {props.assetType === AssetType.LOTTIE && ( + <StyledPreviewLotte src={icon.urls.thumb} autoPlay /> + )} + </IconWrapper> + </Badge> + </IconItemContainer> + </Popover> + ))} + </IconRow> + ); + }, + [columnNum, mediaPackSubscription, props.assetType, fetchDownloadUrl, searchResults] + ); + + const popupTitle = useMemo(() => { + if (props.assetType === AssetType.ILLUSTRATION) return trans("iconScout.searchImage"); + if (props.assetType === AssetType.LOTTIE) return trans("iconScout.searchAnimation"); + return trans("iconScout.searchIcon"); + }, [props.assetType]); + + const handleScroll = useCallback(({ + clientHeight, + scrollHeight, + scrollTop, + }: { + clientHeight: number; + scrollHeight: number; + scrollTop: number; + }) => { + if (hasMore && !loading && scrollHeight - scrollTop <= clientHeight + 10) { + const nextPage = page + 1; + setPage(nextPage); + fetchResults(searchText, nextPage); + } + }, [hasMore, loading, page, searchText, fetchResults]); + + const memoizedIconListElement = useMemo(() => ( + <IconList + width={550} + height={400} + rowHeight={140} + rowCount={Math.ceil(searchResults.length / columnNum)} + rowRenderer={rowRenderer} + onScroll={handleScroll} + /> + ), [searchResults.length, rowRenderer, handleScroll, columnNum]); + + return ( + <Popover + trigger={'click'} + placement="left" + open={visible} + onOpenChange={setVisible} + styles={{ + body: { + border: "none", + boxShadow: "none", + background: "transparent", + } + }} + destroyOnHidden + content={ + <Draggable handle=".dragHandle" nodeRef={draggableRef}> + <PopupContainer ref={draggableRef}> + <TitleDiv className="dragHandle"> + <TitleText>{popupTitle}</TitleText> + <StyledCloseIcon onClick={() => setVisible(false)} /> + </TitleDiv> + <SearchDiv> + <TacoInput + style={{ width: "100%", paddingLeft: "40px" }} + onChange={handleChange} + placeholder={popupTitle} + /> + <StyledSearchIcon /> + </SearchDiv> + <Spin spinning={downloading} indicator={<LoadingOutlined style={{ fontSize: 25 }} />} > + {!loading && Boolean(searchText) && !Boolean(searchResults?.length) && ( + <Flex align="center" justify="center" style={{flex: 1}}> + <Typography.Text type="secondary"> + {trans("iconScout.noResults")} + </Typography.Text> + </Flex> + )} + {Boolean(searchText) && Boolean(searchResults?.length) && ( + <IconListWrapper> + {memoizedIconListElement} + </IconListWrapper> + )} + {loading && ( + <Flex align="center" justify="center" style={{flex: 1}}> + <Spin indicator={<LoadingOutlined style={{ fontSize: 25 }} spin />} /> + </Flex> + )} + </Spin> + </PopupContainer> + </Draggable> + } + > + <TacoButton style={{ width: "100%" }}> + {props.preview ? ( + <ButtonWrapper> + <ButtonIconWrapper> + {props.assetType === AssetType.LOTTIE && ( + <video style={{'width': '100%'}} src={props.preview} autoPlay /> + )} + {props.assetType !== AssetType.LOTTIE && ( + <IconControlView value={props.value} uuid={props.uuid}/> + )} + </ButtonIconWrapper> + <StyledDeleteInputIcon + onClick={(e) => { + props.onChange("", "", ""); + e.stopPropagation(); + }} + /> + </ButtonWrapper> + ) : ( + <BlockGrayLabel label={props.assetType === AssetType.LOTTIE ? trans("iconControl.searchAnimation") : props.assetType === AssetType.ILLUSTRATION ? trans("iconControl.searchIllustration") : trans("iconControl.searchIcon")} /> + )} + </TacoButton> + </Popover> + ); +}; + +export function IconControlView(props: { value: string, uuid: string }) { + const { value } = props; + const icon = useIcon(value); + + if (icon) { + return icon.getView(); + } + return <StyledImage src={value} alt="" />; +} + +export function IconscoutControl( + assetType: string = AssetType.ICON, +) { + return class IconscoutControl extends SimpleComp<IconScoutAsset> { + readonly IGNORABLE_DEFAULT_VALUE = false; + + protected getDefaultValue(): IconScoutAsset { + return { + uuid: "", + value: "", + preview: "", + }; + } + + override getPropertyView(): ReactNode { + throw new Error("Method not implemented."); + } + + propertyView(params: ControlParams & { type?: "switch" | "checkbox" }) { + return wrapperToControlItem( + <ControlPropertyViewWrapper {...params}> + <IconPicker + assetType={assetType} + uuid={this.value.uuid} + value={this.value.value} + preview={this.value.preview} + onChange={(uuid, value, preview) => { + this.dispatchChangeValueAction({uuid, value, preview}) + }} + label={params.label} + IconType={params.IconType} + /> + </ControlPropertyViewWrapper> + ); + } + }; +} diff --git a/client/packages/lowcoder/src/comps/controls/multiSelectControl.tsx b/client/packages/lowcoder/src/comps/controls/multiSelectControl.tsx index 7b45a2690c..f4991282d9 100644 --- a/client/packages/lowcoder/src/comps/controls/multiSelectControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/multiSelectControl.tsx @@ -10,7 +10,8 @@ import _ from "lodash"; const LabelWrapper = styled.div<{ $placement: ControlPlacement }>` flex-shrink: 0; - width: ${(props) => (props.$placement === "right" ? "96px" : "bottom" ? "112px" : "136px")}; + width: ${(props) => + props.$placement === "right" ? "96px" : props.$placement === "bottom" ? "112px" : "136px"}; `; const DropDownItemLabel = styled.div` @@ -69,7 +70,7 @@ export function multiSelectControl<T extends OptionsType>( <DropdownContainer $placement={placement}> <CustomSelect mode={"multiple"} - popupClassName="ob-dropdown-control-select" + classNames={{popup: {root: "ob-dropdown-control-select"}}} filterOption={(input, option) => { if (!option?.value) { return false; diff --git a/client/packages/lowcoder/src/comps/controls/sliderControl.tsx b/client/packages/lowcoder/src/comps/controls/sliderControl.tsx index a02562887b..3856ab55d0 100644 --- a/client/packages/lowcoder/src/comps/controls/sliderControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/sliderControl.tsx @@ -20,7 +20,7 @@ class SliderControl extends SimpleComp<number> { <ControlPropertyViewWrapper {...params}> <Slider style={{ width: "90%", margin: "8px 5% 0 5%"}} - min={8} // Define the minimum value for the slider + min={1} // Define the minimum value for the slider max={48} // Define the maximum value for the slider value={this.value || 24} onChange={(value) => this.dispatchChangeValueAction(value)} // this.dispatchChangeValueAction(value)} diff --git a/client/packages/lowcoder/src/comps/controls/tourStepControl.tsx b/client/packages/lowcoder/src/comps/controls/tourStepControl.tsx index 317baef9b0..210da469a4 100644 --- a/client/packages/lowcoder/src/comps/controls/tourStepControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/tourStepControl.tsx @@ -310,7 +310,11 @@ function EditorStateDropdownPropertyView<T extends OptionsType>(props: DropdownP showSearch={true} onChange={onChange} disabled={params.disabled} - dropdownStyle={props.dropdownStyle} + styles={{ + popup: { + root: props.dropdownStyle + } + }} labelStyle={props.labelStyle} /> ); diff --git a/client/packages/lowcoder/src/comps/generators/uiCompBuilder.tsx b/client/packages/lowcoder/src/comps/generators/uiCompBuilder.tsx index 9539a5bab0..7f6a0bdeaf 100644 --- a/client/packages/lowcoder/src/comps/generators/uiCompBuilder.tsx +++ b/client/packages/lowcoder/src/comps/generators/uiCompBuilder.tsx @@ -79,6 +79,7 @@ export const ExtendedPropertyView = React.memo(< const editorState = useContext(EditorContext); const selectedComp = values(editorState?.selectedComps())[0]; const compType = selectedComp?.children?.compType?.getView() as UICompType; + const timeoutRef = useRef<NodeJS.Timeout>(); useEffect(() => { setCompName(uiCompRegistry[compType]?.compName || ''); @@ -96,6 +97,15 @@ export const ExtendedPropertyView = React.memo(< } }, [compName]); + // Cleanup on unmount + useEffect(() => { + return () => { + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + }; + }, []); + return ( <> {props.children} @@ -120,7 +130,7 @@ export const ExtendedPropertyView = React.memo(< autoHandleAfterReduce: true, } ) - setTimeout(() => { + timeoutRef.current = setTimeout(() => { window.location.reload(); }, 1000); }} @@ -296,27 +306,18 @@ const UIView = React.memo((props: { comp.dispatch ); - const defaultChildren = useMemo(() => comp.children, [comp.children]); - const isNotContainer = useMemo(() => Boolean(defaultChildren.style), [defaultChildren.style]); - const restrictPaddingOnRotation = useMemo(() => Boolean(defaultChildren.restrictPaddingOnRotation), [defaultChildren.restrictPaddingOnRotation]); - const rotationVal = useMemo(() => { - if (isNotContainer) { - return defaultChildren.style?.children?.rotation?.valueAndMsg.value - } - return null; - }, [isNotContainer, defaultChildren.style?.children?.rotation?.valueAndMsg.value]); - const boxShadowVal = useMemo(() => { - if (isNotContainer) { - return defaultChildren.style?.children?.boxShadow?.valueAndMsg?.value; - } - return null; - }, [isNotContainer, defaultChildren.style?.children?.boxShadow?.valueAndMsg?.value]); - const restrictPaddingOnRotationVal = useMemo(() => { - if (isNotContainer) { - return defaultChildren?.restrictPaddingOnRotation?.valueAndMsg?.value - } - return null; - }, [isNotContainer, defaultChildren?.restrictPaddingOnRotation?.valueAndMsg?.value]); + // Optimize memoization by combining related values + const { defaultChildren, isNotContainer, restrictPaddingOnRotation } = useMemo(() => ({ + defaultChildren: comp.children, + isNotContainer: Boolean(comp.children.style), + restrictPaddingOnRotation: Boolean(comp.children.restrictPaddingOnRotation) + }), [comp.children]); + + const { rotationVal, boxShadowVal, restrictPaddingOnRotationVal } = useMemo(() => ({ + rotationVal: isNotContainer ? defaultChildren.style?.children?.rotation?.valueAndMsg.value : null, + boxShadowVal: isNotContainer ? defaultChildren.style?.children?.boxShadow?.valueAndMsg?.value : null, + restrictPaddingOnRotationVal: isNotContainer ? defaultChildren?.restrictPaddingOnRotation?.valueAndMsg?.value : null + }), [isNotContainer, defaultChildren]); const getPadding = useCallback(() => { if ( diff --git a/client/packages/lowcoder/src/comps/hooks/drawerComp.tsx b/client/packages/lowcoder/src/comps/hooks/drawerComp.tsx index d607c32111..8a4e540a19 100644 --- a/client/packages/lowcoder/src/comps/hooks/drawerComp.tsx +++ b/client/packages/lowcoder/src/comps/hooks/drawerComp.tsx @@ -16,9 +16,9 @@ import { BackgroundColorContext } from "comps/utils/backgroundColorContext"; import { CanvasContainerID } from "constants/domLocators"; import { Layers } from "constants/Layers"; import { trans } from "i18n"; -import { changeChildAction } from "lowcoder-core"; +import { changeChildAction, DispatchType, RecordConstructorToComp, RecordConstructorToView } from "lowcoder-core"; import { Drawer, HintPlaceHolder, Section, sectionNames } from "lowcoder-design"; -import { useCallback } from "react"; +import { useCallback, useEffect, useMemo } from "react"; import { ResizeHandle } from "react-resizable"; import styled from "styled-components"; import { useUserViewMode } from "util/hooks"; @@ -28,6 +28,11 @@ import { title } from "process"; import { SliderControl } from "../controls/sliderControl"; import clsx from "clsx"; import { useApplicationId } from "util/hooks"; +import React from "react"; +import { NewChildren } from "../generators/uiCompBuilder"; +import { ToViewReturn } from "../generators/multi"; +import { SimpleContainerComp } from "../comps/containerBase/simpleContainerComp"; +import { JSX } from "react/jsx-runtime"; const EventOptions = [closeEvent] as const; @@ -97,158 +102,192 @@ function transToPxSize(size: string | number) { return isNumeric(size) ? size + "px" : (size as string); } -let TmpDrawerComp = (function () { - return new ContainerCompBuilder( - { - visible: booleanExposingStateControl("visible"), - onEvent: eventHandlerControl(EventOptions), - width: StringControl, - height: StringControl, - title: StringControl, - titleAlign: HorizontalAlignmentControl, - horizontalGridCells: SliderControl, - autoHeight: AutoHeightControl, - drawerScrollbar: withDefault(BoolControl, true), - style: styleControl(DrawerStyle), - placement: PositionControl, - closePosition: withDefault(LeftRightControl, "left"), - maskClosable: withDefault(BoolControl, true), - showMask: withDefault(BoolControl, true), - toggleClose:withDefault(BoolControl,true), - escapeClosable: withDefault(BoolControl, true), +const childrenMap = { + visible: booleanExposingStateControl("visible"), + onEvent: eventHandlerControl(EventOptions), + width: StringControl, + height: StringControl, + title: StringControl, + titleAlign: HorizontalAlignmentControl, + horizontalGridCells: SliderControl, + autoHeight: AutoHeightControl, + drawerScrollbar: withDefault(BoolControl, true), + style: styleControl(DrawerStyle), + placement: PositionControl, + closePosition: withDefault(LeftRightControl, "left"), + maskClosable: withDefault(BoolControl, true), + showMask: withDefault(BoolControl, true), + toggleClose:withDefault(BoolControl,true), + escapeClosable: withDefault(BoolControl, true), +}; + +type ChildrenType = NewChildren<RecordConstructorToComp<typeof childrenMap>> & { + container: InstanceType<typeof SimpleContainerComp> +}; + +const DrawerPropertyView = React.memo((props: { + children: ChildrenType +}) => { + return ( + <> + <Section name={sectionNames.basic}> + {props.children.title.propertyView({ label: trans("drawer.title") })} + {props.children.title.getView() && props.children.titleAlign.propertyView({ label: trans("drawer.titleAlign"), radioButton: true })} + {props.children.closePosition.propertyView({ label: trans("drawer.closePosition"), radioButton: true })} + {props.children.placement.propertyView({ label: trans("drawer.placement"), radioButton: true })} + {["top", "bottom"].includes(props.children.placement.getView()) + ? props.children.autoHeight.getPropertyView() + : props.children.width.propertyView({ + label: trans("drawer.width"), + tooltip: trans("drawer.widthTooltip"), + placeholder: DEFAULT_SIZE + "", + })} + {!props.children.autoHeight.getView() && + ["top", "bottom"].includes(props.children.placement.getView()) && + props.children.height.propertyView({ + label: trans("drawer.height"), + tooltip: trans("drawer.heightTooltip"), + placeholder: DEFAULT_SIZE + "", + })} + {props.children.horizontalGridCells.propertyView({ + label: trans('prop.horizontalGridCells'), + })} + {props.children.drawerScrollbar.propertyView({ label: trans("prop.drawerScrollbar") })} + {props.children.maskClosable.propertyView({ + label: trans("prop.maskClosable"), + })} + {props.children.showMask.propertyView({ + label: trans("prop.showMask"), + })} + {props.children.toggleClose.propertyView({ + label: trans("prop.toggleClose"), + })} + {props.children.escapeClosable.propertyView({ + label: trans("prop.escapeClose"), + })} + </Section> + <Section name={sectionNames.interaction}>{props.children.onEvent.getPropertyView()}</Section> + <Section name={sectionNames.style}>{props.children.style.getPropertyView()}</Section> + </> +)}); + +const DrawerView = React.memo(( + props: ToViewReturn<ChildrenType> & { dispatch: DispatchType } +) => { + const isTopBom = useMemo(() => ["top", "bottom"].includes(props.placement), [props.placement]); + const { items, ...otherContainerProps } = props.container; + const userViewMode = useUserViewMode(); + const appID = useApplicationId(); + const resizable = useMemo(() => !userViewMode && (!isTopBom || !props.autoHeight), [userViewMode, isTopBom, props.autoHeight]); + + const onResizeStop = useCallback( + ( + e: React.SyntheticEvent, + node: HTMLElement, + size: { width: number; height: number }, + handle: ResizeHandle + ) => { + isTopBom + ? props.dispatch(changeChildAction("height", size.height, true)) + : props.dispatch(changeChildAction("width", size.width, true)); }, - (props, dispatch) => { - const isTopBom = ["top", "bottom"].includes(props.placement); - const { items, ...otherContainerProps } = props.container; - const userViewMode = useUserViewMode(); - const appID = useApplicationId(); - const resizable = !userViewMode && (!isTopBom || !props.autoHeight); - const onResizeStop = useCallback( - ( - e: React.SyntheticEvent, - node: HTMLElement, - size: { width: number; height: number }, - handle: ResizeHandle - ) => { - isTopBom - ? dispatch(changeChildAction("height", size.height, true)) - : dispatch(changeChildAction("width", size.width, true)); - }, - [dispatch, isTopBom] - ); - return ( - <BackgroundColorContext.Provider value={props.style.background}> - <DrawerWrapper> - <StyledDrawer - resizable={resizable} - onResizeStop={onResizeStop} - rootStyle={props.visible.value ? { overflow: "auto", pointerEvents: "auto" } : {}} - styles={{ - wrapper: { - maxHeight: "100%", - maxWidth: "100%", - }, - body: { - padding: 0, - background: props.style.background - } - }} - title={props.title} - $titleAlign={props.titleAlign} - $drawerScrollbar={props.drawerScrollbar} - closable={false} - keyboard={props.escapeClosable} - placement={props.placement} - open={props.visible.value} - getContainer={() => document.querySelector(`#${CanvasContainerID}`) || document.body} - footer={null} - width={transToPxSize(props.width || DEFAULT_SIZE)} - height={!props.autoHeight ? transToPxSize(props.height || DEFAULT_SIZE) : ""} - onClose={(e) => { - props.visible.onChange(false); - }} - afterOpenChange={(visible) => { - if (!visible) { - props.onEvent("close"); - } - }} - zIndex={Layers.drawer} - maskClosable={props.maskClosable} - mask={props.showMask} - className={clsx(`app-${appID}`, props.className)} - data-testid={props.dataTestId as string} - > - {props.toggleClose && ( - <ButtonStyle - $closePosition={props.closePosition} - onClick={() => { - props.visible.onChange(false); - }} - > - <CloseOutlined /> - </ButtonStyle> - )} - <InnerGrid - {...otherContainerProps} - items={gridItemCompToGridItems(items)} - horizontalGridCells={props.horizontalGridCells} - autoHeight={props.autoHeight} - minHeight={isTopBom ? DEFAULT_SIZE + "px" : "100%"} - style={{ height: "100%" }} - containerPadding={[DEFAULT_PADDING, DEFAULT_PADDING]} - hintPlaceholder={HintPlaceHolder} - bgColor={props.style.background} - /> - </StyledDrawer> - </DrawerWrapper> - </BackgroundColorContext.Provider> - ); + [props.dispatch, isTopBom] + ); + + const getContainer = useCallback(() => + document.querySelector(`#${CanvasContainerID}`) || document.body, + [] + ); + + const onClose = useCallback((e?: React.MouseEvent | React.KeyboardEvent) => { + props.visible.onChange(false); + }, [props.visible]); + + const afterOpenChange = useCallback((visible: boolean) => { + if (!visible) { + props.onEvent("close"); + } + }, [props.onEvent]); + + const drawerStyles = useMemo(() => ({ + wrapper: { + maxHeight: "100%", + maxWidth: "100%", + }, + body: { + padding: 0, + background: props.style.background } + }), [props.style.background]); + + const rootStyle = useMemo(() => + props.visible.value ? { overflow: "auto", pointerEvents: "auto" } : {}, + [props.visible.value] + ); + + return ( + <BackgroundColorContext.Provider value={props.style.background}> + <DrawerWrapper> + <StyledDrawer + resizable={resizable} + onResizeStop={onResizeStop} + rootStyle={rootStyle as any} + styles={drawerStyles} + title={props.title} + $titleAlign={props.titleAlign} + $drawerScrollbar={props.drawerScrollbar} + closable={false} + keyboard={props.escapeClosable} + placement={props.placement} + open={props.visible.value} + getContainer={getContainer} + footer={null} + width={transToPxSize(props.width || DEFAULT_SIZE)} + height={!props.autoHeight ? transToPxSize(props.height || DEFAULT_SIZE) : ""} + onClose={onClose} + afterOpenChange={afterOpenChange} + zIndex={Layers.drawer} + maskClosable={props.maskClosable} + mask={props.showMask} + className={clsx(`app-${appID}`, props.className)} + data-testid={props.dataTestId as string} + > + {props.toggleClose && ( + <ButtonStyle + $closePosition={props.closePosition} + onClick={onClose} + > + <CloseOutlined /> + </ButtonStyle> + )} + <InnerGrid + {...otherContainerProps} + items={gridItemCompToGridItems(items)} + horizontalGridCells={props.horizontalGridCells} + autoHeight={props.autoHeight} + minHeight={isTopBom ? DEFAULT_SIZE + "px" : "100%"} + style={{ height: "100%" }} + containerPadding={[DEFAULT_PADDING, DEFAULT_PADDING]} + hintPlaceholder={HintPlaceHolder} + bgColor={props.style.background} + /> + </StyledDrawer> + </DrawerWrapper> + </BackgroundColorContext.Provider> + ); +}); + +DrawerView.displayName = 'DrawerView'; + +const drawerViewFn = (props: ToViewReturn<ChildrenType>, dispatch: DispatchType) => <DrawerView {...props} dispatch={dispatch} /> +const drawerPropertyViewFn = (children: ChildrenType) => <DrawerPropertyView children={children} /> + +let TmpDrawerComp = new ContainerCompBuilder( + childrenMap, + drawerViewFn, ) - .setPropertyViewFn((children) => ( - <> - <Section name={sectionNames.basic}> - {children.title.propertyView({ label: trans("drawer.title") })} - {children.title.getView() && children.titleAlign.propertyView({ label: trans("drawer.titleAlign"), radioButton: true })} - {children.closePosition.propertyView({ label: trans("drawer.closePosition"), radioButton: true })} - {children.placement.propertyView({ label: trans("drawer.placement"), radioButton: true })} - {["top", "bottom"].includes(children.placement.getView()) - ? children.autoHeight.getPropertyView() - : children.width.propertyView({ - label: trans("drawer.width"), - tooltip: trans("drawer.widthTooltip"), - placeholder: DEFAULT_SIZE + "", - })} - {!children.autoHeight.getView() && - ["top", "bottom"].includes(children.placement.getView()) && - children.height.propertyView({ - label: trans("drawer.height"), - tooltip: trans("drawer.heightTooltip"), - placeholder: DEFAULT_SIZE + "", - })} - {children.horizontalGridCells.propertyView({ - label: trans('prop.horizontalGridCells'), - })} - {children.drawerScrollbar.propertyView({ label: trans("prop.drawerScrollbar") })} - {children.maskClosable.propertyView({ - label: trans("prop.maskClosable"), - })} - {children.showMask.propertyView({ - label: trans("prop.showMask"), - })} - {children.toggleClose.propertyView({ - label: trans("prop.toggleClose"), - })} - {children.escapeClosable.propertyView({ - label: trans("prop.escapeClose"), - })} - </Section> - <Section name={sectionNames.interaction}>{children.onEvent.getPropertyView()}</Section> - <Section name={sectionNames.style}>{children.style.getPropertyView()}</Section> - </> - )) - .build(); -})(); + .setPropertyViewFn(drawerPropertyViewFn) + .build(); TmpDrawerComp = class extends TmpDrawerComp { override autoHeight(): boolean { diff --git a/client/packages/lowcoder/src/comps/hooks/hookComp.tsx b/client/packages/lowcoder/src/comps/hooks/hookComp.tsx index 0a4439c6ed..3ad2e9ef7d 100644 --- a/client/packages/lowcoder/src/comps/hooks/hookComp.tsx +++ b/client/packages/lowcoder/src/comps/hooks/hookComp.tsx @@ -27,7 +27,7 @@ import _ from "lodash"; import dayjs from "dayjs"; import { ConstructorToComp } from "lowcoder-core"; import { ScrollBar, Section, sectionNames } from "lowcoder-design"; -import React, { useContext, useEffect, useMemo } from "react"; +import React, { useContext, useEffect, useMemo, useCallback } from "react"; import { useInterval, useTitle, useWindowSize } from "react-use"; import { useCurrentUser } from "util/currentUser"; import { LocalStorageComp } from "./localStorageComp"; @@ -53,9 +53,16 @@ const CurrentUserHookComp = hookToStateComp(() => { function useCurrentTime() { const [time, setTime] = React.useState(0); - useInterval(() => { - setTime(new Date().getTime()); - }, 1000); + + // Add cleanup for the interval + useEffect(() => { + const interval = setInterval(() => { + setTime(new Date().getTime()); + }, 1000); + + return () => clearInterval(interval); + }, []); + return useMemo( () => ({ time: time, @@ -126,6 +133,23 @@ function SelectHookView(props: { const editorState = useContext(EditorContext); const selectedComp = editorState.selectedComp(); + // Memoize the comp tree calculation + const compTree = useMemo(() => { + if (!props.comp || !(props.comp as any).getCompTree) return null; + return (props.comp as any).getCompTree(); + }, [props.comp]); + + // Memoize the child components calculation + const allChildComp = useMemo(() => { + if (!compTree) return {}; + return getAllCompItems(compTree); + }, [compTree]); + + // Memoize the click handler + const handleClick = useCallback(() => { + editorState.setSelectedCompNames(new Set([props.compName])); + }, [editorState, props.compName]); + // Select the modal and its subcomponents on the left to display the modal useEffect(() => { if ( @@ -151,7 +175,6 @@ function SelectHookView(props: { ); } else { // all child components of modal - const allChildComp = getAllCompItems((props.comp as any).getCompTree()); const selectChildComp = Object.values(allChildComp).find( (child) => child === selectedComp ); @@ -166,14 +189,10 @@ function SelectHookView(props: { ); } } - }, [selectedComp, editorState.selectSource]); + }, [selectedComp, editorState.selectSource, allChildComp]); return ( - <div - onClick={() => - editorState.setSelectedCompNames(new Set([props.compName])) - } - > + <div onClick={handleClick}> {props.children} </div> ); diff --git a/client/packages/lowcoder/src/comps/hooks/localStorageComp.ts b/client/packages/lowcoder/src/comps/hooks/localStorageComp.ts index 96f1ca4650..e3ce4633f1 100644 --- a/client/packages/lowcoder/src/comps/hooks/localStorageComp.ts +++ b/client/packages/lowcoder/src/comps/hooks/localStorageComp.ts @@ -13,21 +13,28 @@ const APP_STORE_NAMESPACE = "lowcoder_app_local_storage"; const LocalStorageCompBase = withViewFn( simpleMultiComp({ values: stateComp<JSONObject>({}) }), (comp) => { - const originStore = localStorage.getItem(APP_STORE_NAMESPACE) || "{}"; - let parseStore = {}; - try { - parseStore = JSON.parse(originStore); - } catch (e) { - log.error("application local storage invalid"); - } - + // add custom event listener to update values reactively useEffect(() => { - const value = comp.children.values.value; - if (!isEqual(value, parseStore)) { - log.info(value, parseStore); - comp.children.values.dispatchChangeValueAction(parseStore); - } - }, [parseStore]); + const handler = () => { + try { + const raw = localStorage.getItem(APP_STORE_NAMESPACE) || "{}"; + const parsed = JSON.parse(raw); + comp.children.values.dispatchChangeValueAction(parsed); + } catch (e) { + log.error("Failed to parse localStorage:", e); + } + }; + + // Add listener on mount + window.addEventListener("lowcoder-localstorage-updated", handler); + + // Run once on mount to initialize + handler(); + + return () => { + window.removeEventListener("lowcoder-localstorage-updated", handler); + }; + }, []); return null; } @@ -62,6 +69,8 @@ LocalStorageComp = withMethodExposing(LocalStorageComp, [ parseStore[key] = value; localStorage.setItem(APP_STORE_NAMESPACE, JSON.stringify(parseStore)); comp.children.values.dispatchChangeValueAction(parseStore); + + window.dispatchEvent(new CustomEvent("lowcoder-localstorage-updated")); } catch (e) { localStorage.setItem(APP_STORE_NAMESPACE, "{}"); } @@ -83,6 +92,9 @@ LocalStorageComp = withMethodExposing(LocalStorageComp, [ delete parseStore[key]; localStorage.setItem(APP_STORE_NAMESPACE, JSON.stringify(parseStore)); comp.children.values.dispatchChangeValueAction(parseStore); + + // Trigger update + window.dispatchEvent(new CustomEvent("lowcoder-localstorage-updated")); } catch (e) { localStorage.setItem(APP_STORE_NAMESPACE, "{}"); } @@ -98,6 +110,9 @@ LocalStorageComp = withMethodExposing(LocalStorageComp, [ execute: (comp) => { localStorage.removeItem(APP_STORE_NAMESPACE); comp.children.values.dispatchChangeValueAction({}); + + // Trigger update + window.dispatchEvent(new CustomEvent("lowcoder-localstorage-updated")); }, }, ]); diff --git a/client/packages/lowcoder/src/comps/hooks/modalComp.tsx b/client/packages/lowcoder/src/comps/hooks/modalComp.tsx index 7cdcbe4fd6..2977ad4b98 100644 --- a/client/packages/lowcoder/src/comps/hooks/modalComp.tsx +++ b/client/packages/lowcoder/src/comps/hooks/modalComp.tsx @@ -14,7 +14,7 @@ import { Layers } from "constants/Layers"; import { HintPlaceHolder, Modal, Section, sectionNames } from "lowcoder-design"; import { trans } from "i18n"; import { changeChildAction } from "lowcoder-core"; -import { CSSProperties, useCallback } from "react"; +import { CSSProperties, useCallback, useMemo, useRef } from "react"; import { ResizeHandle } from "react-resizable"; import styled, { css } from "styled-components"; import { useUserViewMode } from "util/hooks"; @@ -116,19 +116,36 @@ let TmpModalComp = (function () { (props, dispatch) => { const userViewMode = useUserViewMode(); const appID = useApplicationId(); - const bodyStyle: CSSProperties = { padding: 0 }; - const width = transToPxSize(props.width || DEFAULT_WIDTH); - let height = undefined; - let resizeHandles: ResizeHandle[] = ["w", "e"]; - if (!props.autoHeight) { - height = transToPxSize(props.height || DEFAULT_HEIGHT); - resizeHandles.push("s"); - bodyStyle.overflow = "hidden auto"; - } - if (userViewMode) { - resizeHandles = []; - } - const { items, ...otherContainerProps } = props.container; + const containerRef = useRef<HTMLElement | null>(null); + + // Memoize body style + const bodyStyle = useMemo<CSSProperties>(() => ({ + padding: 0, + overflow: props.autoHeight ? undefined : "hidden auto" + }), [props.autoHeight]); + + // Memoize width and height + const width = useMemo(() => + transToPxSize(props.width || DEFAULT_WIDTH), + [props.width] + ); + + const height = useMemo(() => + !props.autoHeight ? transToPxSize(props.height || DEFAULT_HEIGHT) : undefined, + [props.autoHeight, props.height] + ); + + // Memoize resize handles + const resizeHandles = useMemo<ResizeHandle[]>(() => { + if (userViewMode) return []; + const handles: ResizeHandle[] = ["w", "e"]; + if (!props.autoHeight) { + handles.push("s"); + } + return handles; + }, [userViewMode, props.autoHeight]); + + // Memoize resize handler const onResizeStop = useCallback( ( e: React.SyntheticEvent, @@ -144,13 +161,48 @@ let TmpModalComp = (function () { }, [dispatch] ); - let paddingValues = [10, 10]; - if (props.style.padding != undefined) { + + // Memoize padding values + const paddingValues = useMemo(() => { + if (!props.style.padding) return [10, 10]; const extractedValues = extractMarginValues(props.style); - if (extractedValues !== null) { - paddingValues = extractedValues; - } - } + return extractedValues || [10, 10]; + }, [props.style.padding]); + + // Memoize container getter + const getContainer = useCallback(() => { + if (!containerRef.current) { + containerRef.current = document.querySelector(`#${CanvasContainerID}`) || document.body; + } + return containerRef.current; + }, []); + + // Memoize event handlers + const handleCancel = useCallback((e: React.MouseEvent) => { + if (props.toggleClose) { + props.visible.onChange(false); + } + }, [props.toggleClose, props.visible]); + + const handleAfterClose = useCallback(() => { + if (props.toggleClose) { + props.onEvent("close"); + } + }, [props.toggleClose, props.onEvent]); + + const handleAfterOpenChange = useCallback((open: boolean) => { + if (open) { + props.onEvent("open"); + } + }, [props.onEvent]); + + // Memoize modal render function + const modalRender = useCallback((node: React.ReactNode) => ( + <ModalStyled $style={props.style} $modalScrollbar={props.modalScrollbar}> + {node} + </ModalStyled> + ), [props.style, props.modalScrollbar]); + return ( <BackgroundColorContext.Provider value={props.style.background}> <ModalWrapper> @@ -162,30 +214,24 @@ let TmpModalComp = (function () { open={props.visible.value} maskClosable={props.maskClosable} focusTriggerAfterClose={false} - getContainer={() => document.querySelector(`#${CanvasContainerID}`) || document.body} + getContainer={getContainer} footer={null} styles={{body: bodyStyle}} title={props.title} $titleAlign={props.titleAlign} width={width} - onCancel={(e) => { - props.toggleClose&&props.visible.onChange(false); - }} - afterClose={() => { - props.toggleClose&&props.onEvent("close"); - }} - afterOpenChange={(open: boolean) => { - if (open) props.onEvent("open"); - }} + onCancel={handleCancel} + afterClose={handleAfterClose} + afterOpenChange={handleAfterOpenChange} zIndex={Layers.modal} - modalRender={(node) => <ModalStyled $style={props.style} $modalScrollbar={props.modalScrollbar}>{node}</ModalStyled>} + modalRender={modalRender} mask={props.showMask} className={clsx(`app-${appID}`, props.className)} data-testid={props.dataTestId as string} > <InnerGrid - {...otherContainerProps} - items={gridItemCompToGridItems(items)} + {...props.container} + items={gridItemCompToGridItems(props.container.items)} horizontalGridCells={props.horizontalGridCells} autoHeight={props.autoHeight} minHeight={paddingValues ? DEFAULT_HEIGHT - paddingValues[0] * 2 + "px" : ""} diff --git a/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx b/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx index 0d4fb1df06..37ba630bc4 100644 --- a/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx +++ b/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from "react"; import { hookToStateComp } from "../generators/hookToComp"; -import { CanvasContainerID } from "@lowcoder-ee/index.sdk"; +import { CanvasContainerID } from "@lowcoder-ee/constants/domLocators"; enum ScreenTypes { Mobile = 'mobile', diff --git a/client/packages/lowcoder/src/comps/index.tsx b/client/packages/lowcoder/src/comps/index.tsx index f6ce3e1c33..2395f4f290 100644 --- a/client/packages/lowcoder/src/comps/index.tsx +++ b/client/packages/lowcoder/src/comps/index.tsx @@ -192,6 +192,7 @@ import { TreeSelectComp } from "./comps/treeComp/treeSelectComp"; import { DrawerComp } from "./hooks/drawerComp"; import { ModalComp } from "./hooks/modalComp"; import { defaultCollapsibleContainerData } from "./comps/containerComp/collapsibleContainerComp"; +import { ContainerComp as FloatTextContainerComp } from "./comps/containerComp/textContainerComp"; type Registry = { [key in UICompType]?: UICompManifest; @@ -605,7 +606,7 @@ export var uiCompMap: Registry = { categories: ["layout"], icon: FloatingTextCompIcon, keywords: trans("uiComp.floatTextContainerCompKeywords"), - comp: ContainerComp, + comp: FloatTextContainerComp, withoutLoading: true, layoutInfo: { w: 12, diff --git a/client/packages/lowcoder/src/comps/queries/libraryQuery.tsx b/client/packages/lowcoder/src/comps/queries/libraryQuery.tsx index f246b9bb38..e1b13744bf 100644 --- a/client/packages/lowcoder/src/comps/queries/libraryQuery.tsx +++ b/client/packages/lowcoder/src/comps/queries/libraryQuery.tsx @@ -2,6 +2,7 @@ import { default as LoadingOutlined } from "@ant-design/icons/LoadingOutlined"; import { default as Spin } from "antd/es/spin"; import DataSourceIcon from "components/DataSourceIcon"; import { ContextControlType, ContextJsonControl } from "comps/controls/contextCodeControl"; +import { FunctionControl } from "comps/controls/codeControl"; import { trans } from "i18n"; import { CompAction, @@ -10,6 +11,10 @@ import { isMyCustomAction, MultiBaseComp, wrapChildAction, + evalFunc, + changeValueAction, + multiChangeAction, + isDynamicSegment, } from "lowcoder-core"; import { Dropdown, @@ -34,6 +39,12 @@ import { ToInstanceType, } from "../generators/multi"; import { toQueryView } from "./queryCompUtils"; +import { getGlobalSettings } from "comps/utils/globalSettings"; +import { QUERY_EXECUTION_ERROR, QUERY_EXECUTION_OK } from "../../constants/queryConstants"; +import type { SandBoxOption } from "lowcoder-core/src/eval/utils/evalScript"; +import { QueryLibraryApi } from "@lowcoder-ee/api/queryLibraryApi"; +import { validateResponse } from "@lowcoder-ee/api/apiUtils"; +import { JSONValue } from "@lowcoder-ee/util/jsonTypes"; const NoInputsWrapper = styled.div` color: ${GreyTextColor}; @@ -121,6 +132,8 @@ type QueryLibraryUpdateAction = { const childrenMap = { libraryQueryId: valueComp<string>(""), libraryQueryRecordId: valueComp<string>("latest"), + libraryQueryType: valueComp<string>(""), + libraryQueryDSL: valueComp<JSONValue>(null), inputs: InputsComp, error: stateComp<string>(""), }; @@ -133,6 +146,7 @@ export const LibraryQuery = class extends LibraryQueryBase { readonly isReady: boolean = false; private value: DataType | undefined; + private queryInfo: any = null; constructor(params: CompParams<DataType>) { super(params); @@ -140,6 +154,62 @@ export const LibraryQuery = class extends LibraryQueryBase { } override getView() { + // Check if this is a JS query + const queryInfo = this.children.libraryQueryDSL.getView() as any; + const queryType = this.children.libraryQueryType.getView() as any; + if (queryType === "js") { + return async (props: any) => { + try { + const { orgCommonSettings } = getGlobalSettings(); + const runInHost = !!orgCommonSettings?.runJavaScriptInHost; + const timer = performance.now(); + const script = queryInfo.query.comp.script || ""; + const options: SandBoxOption = { disableLimit: runInHost }; + + // Get input values from the inputs component and resolve any variables + const inputValues = Object.entries(this.children.inputs.children).reduce((acc, [name, input]) => { + // Get the raw value from the input component's text property + let { unevaledValue } = input.children.text; + let value = input.children.text.getView(); + + // Resolve any variables in the value + if (typeof unevaledValue === 'string') { + unevaledValue = unevaledValue.replace(/\{\{([^}]+)\}\}/g, (match, path) => { + const parts = path.split('.'); + let current = props.args || {}; + for (const part of parts) { + if (current && typeof current === 'object') { + current = current[part]; + } else { + return match; // Return original if path not found + } + } + return current ?? match; + }); + } + + acc[name] = isDynamicSegment(unevaledValue) ? value : unevaledValue; + return acc; + }, {} as Record<string, any>); + + const data = await evalFunc(script, inputValues, undefined, options); + return { + data: data, + code: QUERY_EXECUTION_OK, + success: true, + runTime: Number((performance.now() - timer).toFixed()), + }; + } catch (e) { + return { + success: false, + data: "", + code: QUERY_EXECUTION_ERROR, + message: (e as any).message || "", + }; + } + }; + } + return toQueryView( Object.entries(this.children.inputs.children).map(([name, input]) => ({ key: name, @@ -161,9 +231,13 @@ export const LibraryQuery = class extends LibraryQueryBase { override reduce(action: CompAction): this { if (isMyCustomAction<QueryLibraryUpdateAction>(action, "queryLibraryUpdate")) { + const isJSQuery = this.children.libraryQueryType.getView() === 'js' + const queryDSL = isJSQuery ? action.value?.dsl : null; + const queryDSLValue = this.children.libraryQueryDSL.reduce(this.children.libraryQueryDSL.changeValueAction(queryDSL)) + const inputs = this.children.inputs.setInputs(action.value?.dsl?.["inputs"] ?? []); return setFieldsNoTypeCheck(this, { - children: { ...this.children, inputs: inputs }, + children: { ...this.children, inputs: inputs, libraryQueryDSL: queryDSLValue }, isReady: true, }); } @@ -252,13 +326,23 @@ const PropertyView = (props: { comp: InstanceType<typeof LibraryQuery> }) => { value: meta.libraryQueryMetaView.id, }))} value={queryId ?? queryLibraryMeta[0]?.libraryQueryMetaView.id} - onChange={(value) => dispatch(props.comp.changeChildAction("libraryQueryId", value))} + onChange={(value) => { + const queryDSL = queryLibraryMeta[value]?.libraryQueryMetaView || null; + const { datasourceType } = queryDSL as any; + + props.comp.dispatch( + multiChangeAction({ + libraryQueryId: changeValueAction(value, false), + libraryQueryType: changeValueAction(datasourceType, false), + }) + ) + }} /> </div> <QueryTutorialButton label={trans("queryLibrary.viewQuery")} url={`/query-library?forwardQueryId=${queryId}`} - styleName={"dropdownRight"} + styleName="dropdownRight" /> </QueryConfigWrapper> @@ -284,4 +368,4 @@ const PropertyView = (props: { comp: InstanceType<typeof LibraryQuery> }) => { const QueryLabelWrapper = styled.div` display: flex; align-items: center; -`; +`; \ No newline at end of file diff --git a/client/packages/lowcoder/src/comps/queries/queryComp.tsx b/client/packages/lowcoder/src/comps/queries/queryComp.tsx index 9b8fa0cabd..c40cb3cd6a 100644 --- a/client/packages/lowcoder/src/comps/queries/queryComp.tsx +++ b/client/packages/lowcoder/src/comps/queries/queryComp.tsx @@ -487,7 +487,7 @@ QueryCompTmp = class extends QueryCompTmp { args: action.args, variables: action.args, timeout: this.children.timeout, - callback: (result) => this.processResult(result, action, startTime) + callback: (result: QueryResult) => this.processResult(result, action, startTime) }); }, getTriggerType(this) === "manual") .then( diff --git a/client/packages/lowcoder/src/comps/queries/queryComp/queryPropertyView.tsx b/client/packages/lowcoder/src/comps/queries/queryComp/queryPropertyView.tsx index a6d56e4301..d78f7d6ab9 100644 --- a/client/packages/lowcoder/src/comps/queries/queryComp/queryPropertyView.tsx +++ b/client/packages/lowcoder/src/comps/queries/queryComp/queryPropertyView.tsx @@ -5,6 +5,7 @@ import { isCompWithPropertyView } from "comps/utils/propertyUtils"; import { QUICK_GRAPHQL_ID, QUICK_REST_API_ID, + JS_CODE_ID } from "constants/datasourceConstants"; import { PageType } from "constants/pageConstants"; import { trans } from "i18n"; @@ -21,7 +22,7 @@ import { TriggerTypeStyled, } from "lowcoder-design"; import { BottomTabs } from "pages/editor/bottom/BottomTabs"; -import { useContext, useMemo } from "react"; +import { useCallback, useContext, useDeferredValue, useEffect, useMemo, useState } from "react"; import { useSelector } from "react-redux"; import { getDataSource, getDataSourceTypes } from "redux/selectors/datasourceSelectors"; import { BottomResTypeEnum } from "types/bottomRes"; @@ -552,7 +553,7 @@ function findQueryInNestedStructure( const regex = new RegExp( `{{\\s*[!?]?(\\s*${queryName}\\b(\\.[^}\\s]*)?\\s*)(\\?[^}:]*:[^}]*)?\\s*}}` ); - return regex.test(structure); + return structure === queryName || regex.test(structure); } if (typeof structure === "object" && structure !== null) { @@ -565,13 +566,12 @@ function findQueryInNestedStructure( } function collectComponentsUsingQuery(comps: any, queryName: string) { - // Select all active components const components = Object.values(comps); // Filter components that reference the query by name const componentsUsingQuery = components.filter((component: any) => { - return findQueryInNestedStructure(component.children, queryName); + return findQueryInNestedStructure(component.toJsonValue(), queryName); }); return componentsUsingQuery; @@ -596,7 +596,7 @@ function collectQueryUsageDetails(component: any, queryName: string): any[] { // Check if the string contains the query const regex = new RegExp(`{{\\s*[!?]?(\\s*${queryName}\\b(\\.[^}\\s]*)?\\s*)(\\?[^}:]*:[^}]*)?\\s*}}`); const entriesToRemove = ["children", "comp", "unevaledValue", "value"]; - if (regex.test(value)) { + if (value === queryName || regex.test(value)) { console.log("tester",component.children); results.push({ componentType: component.children.compType?.value || "Unknown Component", @@ -724,39 +724,65 @@ export function ComponentUsagePanel(props: { } // a usage display to show which components make use of this query -export const QueryUsagePropertyView = (props: { +export const QueryUsagePropertyView = React.memo((props: { comp: InstanceType<typeof QueryComp>; placement?: PageType; }) => { const { comp, placement = "editor" } = props; + const [ loading, setLoading ] = useState(false); + const [ usageObjects, setUsageObjects ] = useState<any[]>([]); const editorState = useContext(EditorContext); - const queryName = comp.children.name.getView(); - const componentsUsingQuery = collectComponentsUsingQuery(editorState.getAllUICompMap(), queryName); - - const usageObjects = buildQueryUsageDataset(componentsUsingQuery, queryName); + const queryName = useMemo(() => comp.children.name.getView(), [comp.children.name]); + const allUICompMap = useMemo(() => editorState.getAllUICompMap(), []); + + + const buildUsageDataset = useCallback(async () => { + return new Promise((resolve) => { + setTimeout(() => { + const componentsUsingQuery = collectComponentsUsingQuery(allUICompMap, queryName); + const usageObjs = buildQueryUsageDataset(componentsUsingQuery, queryName); + setUsageObjects(usageObjs); + resolve(true); + }, 2000); + }) + }, [queryName, allUICompMap]); + + const findQueryUsageObjects = useCallback(async () => { + setLoading(true); + try { + await buildUsageDataset(); + } catch(e) { + console.error(e); + } finally { + setLoading(false); + } + }, [buildQueryUsageDataset]); - const handleSelect = (componentType: string,componentName: string, path: string) => { + useEffect(() => { + findQueryUsageObjects(); + }, [findQueryUsageObjects]); + + const handleSelect = useCallback((componentType: string,componentName: string, path: string) => { editorState.setSelectedCompNames(new Set([componentName])); // console.log(`Selected Component: ${componentName}, Path: ${path}`); - }; + }, []); - if (usageObjects.length > 0) { - return ( - <> - <Divider /> - <QuerySectionWrapper> - <QueryConfigWrapper> - <QueryConfigLabel>{trans("query.componentsUsingQueryTitle")}</QueryConfigLabel> - <ComponentUsagePanel components={usageObjects} onSelect={handleSelect} /> - </QueryConfigWrapper> - </QuerySectionWrapper> - </> - ); - } else { - return <div></div>; + if (loading || !Boolean(usageObjects?.length)) { + return <></> } - -}; + + return ( + <> + <Divider /> + <QuerySectionWrapper> + <QueryConfigWrapper> + <QueryConfigLabel>{trans("query.componentsUsingQueryTitle")}</QueryConfigLabel> + <ComponentUsagePanel components={usageObjects} onSelect={handleSelect} /> + </QueryConfigWrapper> + </QuerySectionWrapper> + </> + ); +}); function useDatasourceStatus(datasourceId: string, datasourceType: ResourceType) { @@ -770,7 +796,8 @@ function useDatasourceStatus(datasourceId: string, datasourceType: ResourceType) datasourceType === "libraryQuery" || datasourceType === "alasql" || datasourceId === QUICK_REST_API_ID || - datasourceId === QUICK_GRAPHQL_ID + datasourceId === QUICK_GRAPHQL_ID || + datasourceId === JS_CODE_ID ) { return ""; } diff --git a/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx b/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx index bb518fcad4..bf49517af0 100644 --- a/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx +++ b/client/packages/lowcoder/src/comps/queries/queryCompUtils.tsx @@ -7,6 +7,9 @@ import { Fragment } from "react"; import { ParamsControlType, ValueFunction } from "../controls/paramsControl"; import { getGlobalSettings } from "comps/utils/globalSettings"; import { ResourceType } from "@lowcoder-ee/constants/queryConstants"; +import { evalFunc } from "lowcoder-core"; +import { QUERY_EXECUTION_ERROR, QUERY_EXECUTION_OK } from "../../constants/queryConstants"; +import type { SandBoxOption } from "lowcoder-core/src/eval/utils/evalScript"; export type FunctionProperty = { key: string; @@ -30,17 +33,44 @@ export function toQueryView(params: FunctionProperty[]) { }): Promise<QueryResult> => { const { applicationId, isViewMode } = getGlobalSettings(); + // Check if this is a JS query + const isJsQuery = props.queryId?.startsWith("js:"); + if (isJsQuery) { + try { + const { orgCommonSettings } = getGlobalSettings(); + const runInHost = !!orgCommonSettings?.runJavaScriptInHost; + const timer = performance.now(); + const script = props.args?.script || ""; + const options: SandBoxOption = { disableLimit: runInHost }; + const data = await evalFunc(`return (${script}\n);`, props.args || {}, undefined, options); + return { + data: data, + code: QUERY_EXECUTION_OK, + success: true, + runTime: Number((performance.now() - timer).toFixed()), + }; + } catch (e) { + return { + success: false, + data: "", + code: QUERY_EXECUTION_ERROR, + message: (e as any).message || "", + }; + } + } + let mappedVariables: Array<{key: string, value: string}> = []; Object.keys(props.variables) .filter(k => k !== "$queryName") .forEach(key => { + const value = Object.hasOwn(props.variables[key], 'value') ? props.variables[key].value : props.variables[key]; mappedVariables.push({ key: `${key}.value`, - value: props.variables[key] || "" + value: value || "" }) mappedVariables.push({ key: `${props.args?.$queryName}.variables.${key}`, - value: props.variables[key] || "" + value: value || "" }) }) diff --git a/client/packages/lowcoder/src/comps/queries/resourceDropdown.tsx b/client/packages/lowcoder/src/comps/queries/resourceDropdown.tsx index 3907a3d92c..7386db7e87 100644 --- a/client/packages/lowcoder/src/comps/queries/resourceDropdown.tsx +++ b/client/packages/lowcoder/src/comps/queries/resourceDropdown.tsx @@ -15,6 +15,7 @@ import { DatasourceType, ResourceType } from "@lowcoder-ee/constants/queryConsta import { QUICK_GRAPHQL_ID, QUICK_REST_API_ID, + JS_CODE_ID } from "constants/datasourceConstants"; import { apiPluginsForQueryLibrary, @@ -78,7 +79,7 @@ interface ResourceOptionValue { } const JSOptionValue: ResourceOptionValue = { - id: "", + id: JS_CODE_ID, type: "js", }; @@ -156,14 +157,15 @@ export const ResourceDropdown = (props: ResourceDropdownProps) => { const optionValue: ResourceOptionValue = JSON.parse(value); const datasourceId = optionValue.id; const datasourceType = optionValue.type; + if (!datasourceType) { messageInstance.error("datasource invalid"); return; } props.changeResource(datasourceId, datasourceType); }} - onDropdownVisibleChange={onDropdownVisibleChange} - dropdownRender={ + onOpenChange={onDropdownVisibleChange} + popupRender={ Object.keys(dataSourceTypesMap).length > 0 ? (menu) => ( <DropdownWrapper> @@ -293,19 +295,20 @@ export const ResourceDropdown = (props: ResourceDropdownProps) => { </SelectOptionContains> </SelectOption> - {context?.placement !== "queryLibrary" && ( - <> - <SelectOption - key={JSON.stringify(JSOptionValue)} - label={trans("query.executeJSCode")} - value={JSON.stringify(JSOptionValue)} - > - <SelectOptionContains> - {getBottomResIcon("js")} - <SelectOptionLabel>{trans("query.executeJSCode")} </SelectOptionLabel> - </SelectOptionContains> - </SelectOption> + {/* Always show JS option regardless of placement */} + <SelectOption + key={JSON.stringify(JSOptionValue)} + label={trans("query.executeJSCode")} + value={JSON.stringify(JSOptionValue)} + > + <SelectOptionContains> + {getBottomResIcon("js")} + <SelectOptionLabel>{trans("query.executeJSCode")} </SelectOptionLabel> + </SelectOptionContains> + </SelectOption> + {/* Only show Library Query option when not in Query Library */} + {context?.placement !== "queryLibrary" && ( <SelectOption key={JSON.stringify(LibraryQueryOptionValue)} label={trans("query.importFromQueryLibrary")} @@ -316,8 +319,7 @@ export const ResourceDropdown = (props: ResourceDropdownProps) => { <SelectOptionLabel>{trans("query.importFromQueryLibrary")} </SelectOptionLabel> </SelectOptionContains> </SelectOption> - </> - )} + )} </CustomSelect> </SelectWrapper> ); diff --git a/client/packages/lowcoder/src/comps/utils/propertyUtils.tsx b/client/packages/lowcoder/src/comps/utils/propertyUtils.tsx index e361a64cc5..5f65242cbd 100644 --- a/client/packages/lowcoder/src/comps/utils/propertyUtils.tsx +++ b/client/packages/lowcoder/src/comps/utils/propertyUtils.tsx @@ -40,6 +40,7 @@ export const allowClearPropertyView = (children: { allowClear: InstanceType<typeof BoolControl>; }) => children.allowClear.propertyView({ label: trans("prop.showClear") }); + export const showSearchPropertyView = (children: { showSearch: InstanceType<typeof BoolControl>; }) => children.showSearch.propertyView({ label: trans("prop.showSearch") }); diff --git a/client/packages/lowcoder/src/comps/utils/useCompInstance.test.tsx b/client/packages/lowcoder/src/comps/utils/useCompInstance.test.tsx index 59a02fe701..824426d5bb 100644 --- a/client/packages/lowcoder/src/comps/utils/useCompInstance.test.tsx +++ b/client/packages/lowcoder/src/comps/utils/useCompInstance.test.tsx @@ -106,4 +106,4 @@ test("nestDispatchHandler", () => { "start7", "end7", ]); -}); +}); \ No newline at end of file diff --git a/client/packages/lowcoder/src/constants/datasourceConstants.ts b/client/packages/lowcoder/src/constants/datasourceConstants.ts index 640fee1afa..0c65449f38 100644 --- a/client/packages/lowcoder/src/constants/datasourceConstants.ts +++ b/client/packages/lowcoder/src/constants/datasourceConstants.ts @@ -43,4 +43,5 @@ export interface Datasource { export const QUICK_REST_API_ID = "#QUICK_REST_API"; export const QUICK_GRAPHQL_ID = "#QUICK_GRAPHQL"; +export const JS_CODE_ID = "#JS_CODE"; export const OLD_LOWCODER_DATASOURCE: Partial<DatasourceType>[] = []; diff --git a/client/packages/lowcoder/src/constants/reduxActionConstants.ts b/client/packages/lowcoder/src/constants/reduxActionConstants.ts index 6df5991f2d..aea840a5c6 100644 --- a/client/packages/lowcoder/src/constants/reduxActionConstants.ts +++ b/client/packages/lowcoder/src/constants/reduxActionConstants.ts @@ -169,6 +169,20 @@ export const ReduxActionTypes = { FETCH_SUBSCRIPTIONS_SUCCESS: "FETCH_SUBSCRIPTIONS_SUCCESS", FETCH_SUBSCRIPTIONS_FAILURE: "FETCH_SUBSCRIPTIONS_FAILURE", + /* Enterprise Edition */ + FETCH_ENTERPRISE_LICENSE : "FETCH_ENTERPRISE_LICENSE", + SET_ENTERPRISE_LICENSE : "SET_ENTERPRISE_LICENSE", + + /* Environments */ + FETCH_ENVIRONMENTS : "FETCH_ENVIRONMENTS", + FETCH_ENVIRONMENTS_SUCCESS: "FETCH_ENVIRONMENTS_SUCCESS", + FETCH_ENVIRONMENTS_FAILURE: "FETCH_ENVIRONMENTS_FAILURE", + + /* Branding Setting */ + FETCH_BRANDING_SETTING : "FETCH_BRANDING_SETTING", + SET_WORKSPACE_BRANDING_SETTING : "SET_WORKSPACE_BRANDING_SETTING", + SET_GLOBAL_BRANDING_SETTING : "SET_GLOBAL_BRANDING_SETTING", + /* application snapshot */ FETCH_APP_SNAPSHOTS: "FETCH_APP_SNAPSHOTS", FETCH_APP_SNAPSHOTS_SUCCESS: "FETCH_APP_SNAPSHOTS_SUCCESS", diff --git a/client/packages/lowcoder/src/constants/routesURL.ts b/client/packages/lowcoder/src/constants/routesURL.ts index 6931a1d741..a675ec6495 100644 --- a/client/packages/lowcoder/src/constants/routesURL.ts +++ b/client/packages/lowcoder/src/constants/routesURL.ts @@ -19,6 +19,14 @@ export const THEME_SETTING = "/setting/theme"; export const PLUGINS_SETTING = "/setting/plugins"; export const THEME_DETAIL = "/setting/theme/detail"; export const THEME_DETAIL_URL = `${THEME_DETAIL}/:themeId`; +export const AUDIT_LOG_DASHBOARD = "/setting/audit"; +export const AUDIT_LOG_DETAIL = "/setting/audit/:eventId/detail"; +export const APP_USAGE_DASHBOARD = "/setting/app-usage"; +export const APP_USAGE_DETAIL = "/setting/app-usage/:eventId/detail"; + +export const ENVIRONMENT_SETTING = "/setting/environments"; +export const ENVIRONMENT_DETAIL = `${ENVIRONMENT_SETTING}/:environmentId`; +export const ENVIRONMENT_WORKSPACE_DETAIL = `${ENVIRONMENT_DETAIL}/workspaces/:workspaceId`; export const OAUTH_PROVIDER_SETTING = "/setting/oauth-provider"; export const OAUTH_PROVIDER_DETAIL = "/setting/oauth-provider/detail"; @@ -116,3 +124,7 @@ export const buildSubscriptionSettingsLink = (subscriptionId: string, productId export const buildSubscriptionInfoLink = (productId: string) => `${SUBSCRIPTION_SETTING}/info/${productId}`; export const buildSupportTicketLink = (ticketId: string) => `${SUPPORT_URL}/details/${ticketId}`; + +export const buildEnvironmentId = (environmentId: string) => `${ENVIRONMENT_SETTING}/${environmentId}`; +export const buildEnvironmentWorkspaceId = (environmentId: string, workspaceId: string) => + `${ENVIRONMENT_SETTING}/${environmentId}/workspaces/${workspaceId}`; diff --git a/client/packages/lowcoder/src/constants/subscriptionConstants.ts b/client/packages/lowcoder/src/constants/subscriptionConstants.ts index c8beab2188..7bc89671cf 100644 --- a/client/packages/lowcoder/src/constants/subscriptionConstants.ts +++ b/client/packages/lowcoder/src/constants/subscriptionConstants.ts @@ -2,10 +2,11 @@ export enum SubscriptionProductsEnum { // PROD SUPPORT = "QYGsTWZYyJYzMg", + MEDIAPACKAGE = 'SOz085DH7CmNHG', // DEV // SUPPORT = "QW8L3WPMiNjQjI", - MEDIAPACKAGE = 'QW8MpIBHxieKXd', + // MEDIAPACKAGE = 'QW8MpIBHxieKXd', AZUREAPIS = 'QlQ7cdOh8Lv4dy', GOOGLEAPIS = 'enterprise', AWSAPIS = 'enterprise-global', @@ -35,10 +36,10 @@ export const InitSubscriptionProducts = [ type: "org", quantity_entity: "orgUser", }, - /* { + { pricingType: "For you in this Workspace, monthly", activeSubscription: false, - accessLink: "1Pf65wDDlQgecLSf6OFlbsD5", + accessLink: "1RUB2XDDlQgecLSfRsBDx14y", product: SubscriptionProductsEnum.MEDIAPACKAGE, checkoutLink: "", checkoutLinkDataLoaded: false, @@ -46,7 +47,7 @@ export const InitSubscriptionProducts = [ type: "user", quantity_entity: "singleItem", }, - { + /* { pricingType: "For all in this Workspace, monthly", activeSubscription: false, accessLink: "1PttHIDDlQgecLSf0XP27tXt", diff --git a/client/packages/lowcoder/src/constants/themeConstants.ts b/client/packages/lowcoder/src/constants/themeConstants.ts index 052389f189..e4d1a0cf98 100644 --- a/client/packages/lowcoder/src/constants/themeConstants.ts +++ b/client/packages/lowcoder/src/constants/themeConstants.ts @@ -186,6 +186,11 @@ const tree = { } +const signature = { + inputFieldStyle: { + pen: "#222222", + } +} export const defaultTheme: ThemeDetail = { ...theme, @@ -219,6 +224,7 @@ export const defaultTheme: ThemeDetail = { select: select, multiSelect: select, treeSelect: select, - tree:tree + tree:tree, + signature, }, }; diff --git a/client/packages/lowcoder/src/i18n/locales/de.ts b/client/packages/lowcoder/src/i18n/locales/de.ts index 33c8940906..17d38343d0 100644 --- a/client/packages/lowcoder/src/i18n/locales/de.ts +++ b/client/packages/lowcoder/src/i18n/locales/de.ts @@ -1,4032 +1,4844 @@ import { en } from "./en"; export const de = { - ...en, - - "productName": "Lowcoder", - "productDesc": "Erstelle Softwareanwendungen für Dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist eine hervorragende Alternative zu Retool, Appsmith und Tooljet.", - "notSupportedBrowser": "Dein aktueller Browser hat möglicherweise Kompatibilitätsprobleme. Um ein optimales Nutzererlebnis zu gewährleisten, verwende bitte die neueste Version von Chrome.", - "create": "Erstellen", - "move": "Verschieben", - "addItem": "Hinzufügen", - "newItem": "Neu", - "copy": "Kopieren", - "rename": "Umbenennen", - "delete": "Löschen", - "deletePermanently": "Dauerhaft löschen", - "remove": "Entfernen", - "recover": "Wiederherstellen", - "edit": "Bearbeiten", - "view": "Ansicht", - "value": "Wert", - "data": "Daten", - "information": "Informationen", - "success": "Erfolg", - "warning": "Warnung", - "error": "Fehler", - "reference": "Referenz", - "text": "Text", - "basic": "Grundlegend", - "label": "Etikett", - "layout": "Layout", - "color": "Farbe", - "form": "Formular", - "menu": "Menü", - "menuItem": "Menüpunkt", - "ok": "OK", - "cancel": "Abbrechen", - "finish": "Beenden", - "reset": "Zurücksetzen", - "icon": "Icon", - "code": "Code", - "title": "Titel", - "emptyContent": "Leer", - "more": "Mehr", - "search": "Suche", - "back": "Zurück", - "accessControl": "Zugangskontrolle", - "copySuccess": "Erfolgreich kopiert", - "copyError": "Kopierfehler", - "api": { - ...en.api, - - "publishSuccess": "Erfolgreich veröffentlicht", - "recoverFailed": "Wiederherstellung fehlgeschlagen", - "needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version.", - }, - "codeEditor": { - ...en.codeEditor, - - "notSupportAutoFormat": "Der aktuelle Code-Editor unterstützt keine automatische Formatierung.", - "fold": "Zuklappen", - }, - "exportMethod": { - ...en.exportMethod, - - "setDesc": "Eigenschaft einstellen: {property}", - "clearDesc": "Eigenschaft löschen: {property}", - "resetDesc": "{property} auf Standardwert zurücksetzen", - }, - "method": { - ...en.method, - - "focus": "Fokus setzen", - "focusOptions": "Fokus-Optionen. Siehe HTMLElement.focus()", - "blur": "Fokus entfernen", - "click": "Klick", - "select": "Auswählen", - "setSelectionRange": "Start- und Endposition der Textauswahl festlegen", - "selectionStart": "0-basierter Index des ersten ausgewählten Zeichens", - "selectionEnd": "0-basierter Index des Zeichens nach dem letzten ausgewählten Zeichen", - "setRangeText": "Textbereich ersetzen", - "replacement": "String zum Einfügen", - "replaceStart": "0-basierter Index des ersten zu ersetzenden Zeichens", - "replaceEnd": "0-basierter Index des Zeichens nach dem letzten zu ersetzenden Zeichen", - }, - "errorBoundary": { - ...en.errorBoundary, - - "encounterError": "Das Laden einer Komponente ist fehlgeschlagen. Bitte überprüfe deine Konfiguration.", - "clickToReload": "Klicke bitte um Neu zu laden.", - "errorMsg": "Fehler: ", - }, - "imgUpload": { - ...en.imgUpload, - - "notSupportError": "Unterstützt nur {types} Bild-Dateitypen", - "exceedSizeError": "Die Bildgröße darf {size} nicht überschreiten", - }, - "gridCompOperator": { - ...en.gridCompOperator, - - "notSupport": "Nicht unterstützt", - "selectAtLeastOneComponent": "Bitte wähle mindestens eine Komponente aus", - "selectCompFirst": "Komponenten vor dem Kopieren auswählen", - "noContainerSelected": "Kein Container ausgewählt", - "deleteCompsSuccess": "Erfolgreich gelöscht. Drücke {undoKey} zum Rückgängigmachen.", - "deleteCompsTitle": "Komponenten löschen", - "deleteCompsBody": "Bist du sicher, dass du die ausgewählten Komponenten {compNum} löschen willst?", - "cutCompsSuccess": "Erfolgreich selektiert und gelöscht. Drücke {pasteKey}, um die Komponente einzufügen, oder {undoKey}, um den Vorgang rückgängig zu machen.", - }, - "leftPanel": { - ...en.leftPanel, - - "queries": "Datenabfragen", - "globals": "Globale Datenvariablen", - "propTipsArr": "{num} Posten", - "propTips": "{num} Tasten", - "propTipArr": "Posten {num}", - "propTip": "{num} Schlüssel", - "stateTab": "Status", - "settingsTab": "Einstellungen", - "toolbarTitle": "Individualisierung", - "toolbarPreload": "Skripte und Stile", - "components": "Aktive Komponenten", - "modals": "Modale Fenster", - "expandTip": "Klicken, um die aktuellen Daten (State) der Komponente zu sehen.", - "collapseTip": "Klicken Sie, um die Ansicht zu reduzieren.", - "layers": "Schichten", - "activatelayers": "Dynamische Ebenen verwenden", - "selectedComponents": "Ausgewählte Komponenten...", - "displayComponents": "Steuerung Display", - "lockComponents": "Kontrolle Position", - }, - "bottomPanel": { - ...en.bottomPanel, - - "title": "Datenabfragen", - "run": "Start", - "noSelectedQuery": "Keine Datenabfrage ausgewählt", - "metaData": "Metadaten der Datenquelle", - "noMetadata": "Keine Metadaten verfügbar", - "metaSearchPlaceholder": "Metadaten suchen", - "allData": "Alle Daten", - }, - "rightPanel": { - ...en.rightPanel, - - "propertyTab": "Eigenschaften", - "noSelectedComps": "Keine Komponenten ausgewählt. Klicke auf eine Komponente, um ihre Eigenschaften anzuzeigen.", - "createTab": "Einfügen", - "searchPlaceHolder": "Komponenten oder Module suchen", - "uiComponentTab": "Komponenten", - "extensionTab": "Erweiterungen", - "modulesTab": "Module", - "moduleListTitle": "Module", - "pluginListTitle": "Erweiterungen (Plugins)", - "emptyModules": "Module sind wiederverwendbare Mikro-Apps. Du kannst sie in deine App einbetten.", - "searchNotFound": "Kannst du die richtige Komponente nicht finden? Schreibe uns!", - "emptyPlugins": "Keine Plugins hinzugefügt.", - "contactUs": "Kontakt", - "issueHere": "hier.", - }, - "prop": { - ...en.prop, - - "expand": "Erweitern", - "columns": "Spalten", - "videokey": "Video Schlüssel", - "rowSelection": "Zeilenauswahl", - "toolbar": "Symbolleiste", - "pagination": "Paginierung", - "logo": "Logo", - "style": "Stil", - "inputs": "Variablen", - "meta": "Metadaten", - "data": "Daten", - "hide": "Verstecken", - "loading": "Laden", - "disabled": "Deaktiviert", - "placeholder": "Platzhalter", - "showClear": "Schaltfläche \"Löschen\" anzeigen", - "showSearch": "Suche anzeigen", - "defaultValue": "Standardwert", - "required": "Erforderliches Feld", - "readOnly": "Nur lesbar", - "readOnlyTooltip": "Schreibgeschützte Komponenten erscheinen normal, können aber nicht geändert werden.", - "minimum": "Minimum", - "maximum": "Maximum", - "regex": "Regular Expression", - "minLength": "Mindestlänge", - "maxLength": "Maximale Länge", - "height": "Höhe", - "width": "Breite", - "selectApp": "App auswählen", - "showCount": "Anzahl anzeigen", - "textType": "Textart", - "customRule": "Benutzerdefinierte Regel", - "customRuleTooltip": "Eine nicht leere Zeichenkette weist auf einen Fehler hin; eine leere Zeichenkette oder null bedeutet, dass die Validierung erfolgreich war. Beispiel: ", - "manual": "Handbuch", - "map": "Karte", - "json": "JSON", - "use12Hours": "12-Stunden-Format verwenden", - "hourStep": "Stunden Schritt", - "minuteStep": "Minuten Schritt", - "secondStep": "Sekunden Schritt", - "minDate": "Frühestes Datum", - "maxDate": "Spätestes Datum", - "minTime": "Früheste Zeit", - "maxTime": "Späteste Zeit", - "type": "Typ", - "showLabel": "Etikett anzeigen", - "showHeader": "Kopfbereich anzeigen", - "showBody": "Hauptbereich zeigen", - "showSider": "Schieberegler anzeigen", - "innerSider": "Innere Seiten", - "showFooter": "Fußbereich anzeigen", - "maskClosable": "Zum Schließen auf \"Schließen\" klicken", - "toggleClose": "Schaltfläche \"Schließen\" aktivieren", - "showMask": "Maske darstellen", - "textOverflow": "Textüberlauf", - "scrollbar": "Bildlaufleisten anzeigen", - "siderScrollbar": "Bildlaufleisten im Sider anzeigen", - "siderRight": "Schieberegler rechts", - "siderWidth": "Sider Width", - "siderWidthTooltip": "Die Seitenbreite unterstützt Prozentwerte (%) und Pixel (px).", - "siderCollapsedWidth": "Sider Zusammengeklappte Breite", - "siderCollapsedWidthTooltip": "Die eingeklappte Breite des Siders unterstützt Prozentwerte (%) und Pixel (px).", - "siderCollapsible": "Sider Zusammenklappbar", - "siderCollapsed": "Sider kollabiert", - "contentScrollbar": "Bildlaufleisten im Inhalt anzeigen", - "appID": "App-Id", - "showApp": "Eine App im Inhaltsbereich anzeigen", - "showAppTooltip": "Sie können ganze Apps im Inhaltsbereich anzeigen lassen. Bitte beachten Sie, dass wir für Module keine Inputs, Outputs, Events und Methoden unterstützen.", - "baseURL": "API-Basis-URL", - "horizontal": "Horizontal", - "minHorizontalWidth": "Horizontale Mindestbreite", - "component": "Komponente", - "className": "Klasse", - "dataTestId": "Test ID", - "preventOverwriting": "Überschreiben von Stilen verhindern", - "color": "Farbe", - "horizontalGridCells": "Horizontale Rasterzellen", - "verticalGridCells": "Vertikale Rasterzellen", - "showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", - "showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", - "timeZone": "ZeitZone", - }, - "autoHeightProp": { - ...en.autoHeightProp, - - "auto": "Automatisch", - "fixed": "Festgelegt", - }, - "textOverflowProp": { - ...en.textOverflowProp, - - "ellipsis": "Mouseover", - "wrap": "Wickeln", - }, - "labelProp": { - ...en.labelProp, - - "text": "Etikett Text", - "tooltip": "QuickInfo", - "position": "Position", - "collapse": "Kollabieren", - "left": "Links", - "right": "Rechts", - "top": "Open", - "align": "Ausrichtung", - "width": "Breite", - "widthTooltip": "Die Etikettenbreite unterstützt Prozentwerte (%) und Pixel (px).", - }, - "eventHandler": { - ...en.eventHandler, - - "eventHandlers": "Ereignishandler", - "emptyEventHandlers": "Keine Ereignishandler", - "incomplete": "Unvollständige Auswahl", - "inlineEventTitle": "Bei {eventName}", - "event": "Ereignis", - "action": "Aktion", - "noSelect": "Keine Auswahl", - "runQuery": "Eine Datenabfrage ausführen", - "selectQuery": "Datenabfrage auswählen", - "controlComp": "Eine Komponente steuern", - "runScript": "JavaScript ausführen", - "runScriptPlaceHolder": "Hier kann man JavaScript Code schreiben", - "component": "Komponente", - "method": "Methode", - "setTempState": "Einen temporären Zustand setzen", - "state": "Zustand", - "triggerModuleEvent": "Ein Modulereignis auslösen", - "moduleEvent": "Modulereignis", - "goToApp": "Zu einer anderen App wechseln", - "queryParams": "Abfrageparameter", - "hashParams": "Hash-Parameter", - "showNotification": "Eine Benachrichtigung anzeigen", - "text": "Text", - "level": "Stufe", - "duration": "Dauer", - "notifyDurationTooltip": "Zeiteinheit kann 's' (Sekunde, Standard) oder 'ms' (Millisekunde) sein. Maximale Dauer ist {max} Sekunden", - "goToURL": "URL öffnen", - "openInNewTab": "In neuem Tab öffnen", - "copyToClipboard": "In die Zwischenablage kopieren", - "copyToClipboardValue": "Wert", - "export": "Daten exportieren", - "exportNoFileType": "Keine Auswahl (optional)", - "fileName": "Dateiname", - "fileNameTooltip": "Dateiendung angeben, um Dateityp zu spezifizieren, z.B. 'bild.png'.", - "fileType": "Dateityp", - "condition": "Nur ausführen wenn...", - "conditionTooltip": "Ereignis-Handler nur ausführen, wenn diese Bedingung 'wahr' ist.", - "debounce": "Warten für", - "throttle": "Drosseln für", - "slowdownTooltip": "Verwende Warten oder Drosseln, um die Häufigkeit von Aktionen zu steuern. Zeiteinheit kann 'ms' (Millisekunde, Standard) oder 's' (Sekunde) sein.", - "notHandledError": "Nicht behandelter Fehler", - "currentApp": "Aktuelle App", - "inputEventHandlers": "Eingabe-Ereignishandler", - "inputEventHandlersDesc": "Ereignishandler bezüglich Benutzereingaben", - "buttonEventHandlers": "Button-Ereignishandler", - "buttonEventHandlersDesc": "Ereignishandler bezüglich Button-Klicks", - "changeEventHandlers": "Änderungs-Ereignishandler", - "changeEventHandlersDesc": "Ereignishandler bezüglich Wertänderungen", - "editedEventHandlers": "Bearbeitungs-Ereignishandler", - "editedEventHandlersDesc": "Ereignishandler bezüglich Bearbeitungsstatus von Elementen", - "clickEventHandlers": "Klick-Ereignishandler", - "clickEventHandlersDesc": "Ereignishandler bezüglich Klicks", - "keyDownEventHandlers": "Tastendruck-Ereignishandler", - "keyDownEventHandlersDesc": "Ereignishandler bezüglich Tastendrücken", - "checkboxEventHandlers": "Checkbox-Ereignishandler", - "checkboxEventHandlersDesc": "Ereignishandler bezüglich Checkbox-Änderungen", - "dragEventHandlers": "Drag-and-Drop-Ereignishandler", - "dragEventHandlersDesc": "Ereignishandler bezüglich Drag-and-Drop-Ereignissen", - "elementEventHandlers": "Element-Ereignishandler", - "elementEventHandlersDesc": "Ereignishandler bezüglich generischer Element-Ereignisse", - "mediaEventHandlers": "Medien-Ereignishandler", - "mediaEventHandlersDesc": "Ereignishandler bezüglich Medienereignissen", - "scannerEventHandlers": "Scanner-Ereignishandler", - "scannerEventHandlersDesc": "Ereignishandler bezüglich Scanner-Ereignissen", - "chartEventHandlers": "Diagramm-Ereignishandler", - "chartEventHandlersDesc": "Ereignishandler bezüglich Diagrammereignissen", - "geoMapEventHandlers": "Geo-Map-Ereignishandler", - "geoMapEventHandlersDesc": "Ereignishandler bezüglich Geo-Map-Ereignissen", - "stepEventHandlers": "Schritt-Ereignishandler", - "stepEventHandlersDesc": "Ereignishandler bezüglich Schritt-UI-Ereignissen", - "shareEventHandlers": "Teilen-Ereignishandler", - "shareEventHandlersDesc": "Ereignishandler bezüglich Teilen-Ereignissen", - "selectEventHandlers": "Auswahl-Ereignishandler", - "selectEventHandlersDesc": "Ereignishandler bezüglich Auswahl-Ereignissen", - "meetingEventHandlers": "Besprechungs-Ereignishandler", - "meetingEventHandlersDesc": "Ereignishandler bezüglich Besprechungs-Ereignissen", - "collaborationEventHandlers": "Kollaborations-Ereignishandler", - "collaborationEventHandlersDesc": "Ereignishandler bezüglich Kollaborations-Ereignissen", - "set": "Satz", - "clear": "Klar", - "reset": "Reset", - "messageType": "Message Type", - "placement": "Platzierung", - "description": "Beschreibung", - }, - "event": { - ...en.event, - - "submit": "Absenden", - "submitDesc": "Auslöser beim Absenden.", - "change": "Ändern", - "changeDesc": "Auslöser bei Änderungen.", - "focus": "Fokussieren", - "focusDesc": "Auslöser beim Fokussieren.", - "blur": "Verlassen", - "blurDesc": "Auslöser beim Verlassen.", - "click": "Klicken", - "clickDesc": "Auslöser beim Klicken.", - "doubleClick": "Doppelklick", - "doubleClickDesc": "Auslöser beim Doppelklicken.", - "rightClick": "Rechtsklick", - "rightClickDesc": "Auslöser beim Rechtsklicken.", - "keyDown": "Tastendruck", - "keyDownDesc": "Auslöser beim Tastendruck.", - "select": "Auswählen", - "selectDesc": "Auslöser bei Auswahl.", - "checked": "Aktiviert", - "checkedDesc": "Auslöser, wenn eine Checkbox aktiviert wird.", - "unchecked": "Deaktiviert", - "uncheckedDesc": "Auslöser, wenn eine Checkbox deaktiviert wird.", - "drag": "Ziehen", - "dragDesc": "Auslöser beim Ziehen.", - "drop": "Fallen lassen", - "dropDesc": "Auslöser beim Fallenlassen.", - "open": "Öffnen", - "openDesc": "Auslöser beim Öffnen.", - "mute": "Stummschalten", - "muteDesc": "Auslöser beim Stummschalten eines Mikrofons.", - "unmute": "Stummschaltung aufheben", - "unmuteDesc": "Auslöser beim Aufheben der Stummschaltung eines Mikrofons.", - "showCamera": "Kamera zeigen", - "showCameraDesc": "Auslöser, wenn die Kamera gezeigt wird.", - "hideCamera": "Kamera verstecken", - "hideCameraDesc": "Auslöser, wenn die Kamera versteckt wird.", - "shareScreen": "Bildschirm teilen", - "shareScreenDesc": "Auslöser beim Teilen des Bildschirms.", - "shareScreenEnd": "Bildschirmteilen beenden", - "shareScreenEndDesc": "Auslöser beim Beenden des Bildschirmteilens.", - "shareControl": "Steuerung teilen", - "shareControlDesc": "Auslöser beim Teilen der Steuerung.", - "shareControlEnd": "Steuerungsteilen beenden", - "shareControlEndDesc": "Auslöser beim Beenden des Steuerungsteilens.", - "shareContent": "Inhalt teilen", - "shareContentDesc": "Auslöser beim Teilen von Inhalten.", - "shareContentEnd": "Inhaltsteilen beenden", - "shareContentEndDesc": "Auslöser beim Beenden des Inhaltsteilens.", - "stopShare": "Stop Share", - "stopShareDesc": "Auslöser bei Stop Share", - "meetingStart": "Besprechung beginnen", - "meetingStartDesc": "Auslöser beim Start einer Besprechung.", - "meetingEnd": "Besprechung beenden", - "meetingEndDesc": "Auslöser beim Beenden einer Besprechung.", - "meetingJoin": "Besprechung beitreten", - "meetingJoinDesc": "Auslöser beim Beitritt zu einer Besprechung.", - "meetingLeave": "Besprechung verlassen", - "meetingLeaveDesc": "Auslöser beim Verlassen einer Besprechung.", - "play": "Abspielen", - "playDesc": "Auslöser beim Abspielen.", - "pause": "Pausieren", - "pauseDesc": "Auslöser beim Pausieren.", - "ended": "Beendet", - "endedDesc": "Auslöser wenn beendet.", - "step": "Schritt", - "stepDesc": "Auslöser bei einem Schritt.", - "next": "Nächster", - "nextDesc": "Auslöser beim nächsten Schritt.", - "finished": "Abgeschlossen", - "finishedDesc": "Auslöser wenn abgeschlossen.", - "saved": "Gespeichert", - "savedDesc": "Auslöser wenn gespeichert.", - "edited": "Bearbeitet", - "editedDesc": "Auslöser wenn bearbeitet.", - "geoMapMove": "Geo-Map Bewegen", - "geoMapMoveDesc": "Auslöser beim Bewegen der Geo-Map.", - "geoMapZoom": "Geo-Map Zoomen", - "geoMapZoomDesc": "Auslöser beim Zoomen der Geo-Map.", - "geoMapSelect": "Geo-Map Auswahl", - "geoMapSelectDesc": "Auslöser bei einer Auswahl auf der Geo-Map.", - "scannerSuccess": "Scanner Erfolg", - "scannerSuccessDesc": "Auslöser bei erfolgreichem Scan.", - "scannerError": "Scanner Fehler", - "scannerErrorDesc": "Auslöser bei einem Scannerfehler.", - "chartZoom": "Diagramm Zoomen", - "chartZoomDesc": "Auslöser beim Zoomen eines Diagramms.", - "chartHover": "Diagramm Hover", - "chartHoverDesc": "Auslöser beim Hover über einem Diagramm.", - "chartSelect": "Diagramm Auswählen", - "chartSelectDesc": "Auslöser bei der Auswahl eines Diagramms.", - "chartDeselect": "Diagramm Abwählen", - "chartDeselectDesc": "Auslöser beim Abwählen eines Diagramms.", - "close": "Schließen", - "closeDesc": "Auslöser beim Schließen.", - "parse": "Parsen", - "parseDesc": "Auslöser beim Parsen.", - "success": "Erfolg", - "successDesc": "Auslöser bei Erfolg.", - "delete": "Löschen", - "deleteDesc": "Auslöser beim Löschen.", - "mention": "Erwähnung", - "mentionDesc": "Auslöser bei einer Erwähnung.", - "search": "Suche", - "searchDesc": "Auslöser für die Suche", - "selectedChange": "Auswahl ändern", - "selectedChangeDesc": "Auslöser bei geänderter Auswahl", - "clickExtra": "Klicken Sie auf Aktion", - "clickExtraDesc": "Auslöser bei Klick auf Extra-Element", - "start": "Start", - "startDesc": "Auslöser beim Start", - "resume": "Lebenslauf", - "resumeDesc": "Auslöser im Lebenslauf", - "countdown": "Countdown", - "countdownDesc": "Auslöser am Ende des Countdowns", - "reset": "Zurücksetzen endet", - "resetDesc": "Auslöser bei Reset Timer", - "refresh": "Refresh", - "refreshDesc": "Auslöser beim Aktualisieren", - }, - "style": { - ...en.style, - - "boxShadowColor": "Schattenfarbe", - "boxShadow": "Box Schatten", - "opacity": "Deckkraft", - "animation": "Animation", - "animationIterationCount": "Animation Iterationszahl", - "animationDelay": "Animation Verzögerung", - "animationDuration": "Animation Dauer", - "resetTooltip": "Stile zurücksetzen. Lösche das Eingabefeld, um einen einzelnen Stil zurückzusetzen.", - "textColor": "Textfarbe", - "contrastText": "Kontrastreiche Textfarbe", - "generated": "Generiert", - "customize": "Anpassen", - "staticText": "Statischer Text", - "accent": "Akzent", - "validate": "Validierungsmeldung", - "border": "Randfarbe", - "borderRadius": "Randradius", - "borderWidth": "Randbreite", - "borderStyle": "Randstil", - "background": "Hintergrund", - "headerBackground": "Kopfzeilenhintergrund", - "siderBackground": "Seitenleisten-Hintergrund", - "footerBackground": "Fußzeilenhintergrund", - "fill": "Füllung", - "track": "Spur", - "links": "Verknüpfungen", - "thumb": "Schiebereglergriff", - "thumbBorder": "Schieberegler-Rand", - "checked": "Aktiviert", - "unchecked": "Nicht aktiviert", - "handle": "Griff", - "tags": "Etiketten", - "tagsText": "Etiketten-Text", - "multiIcon": "Mehrfachauswahl-Symbol", - "tabText": "Tab-Text", - "tabAccent": "Tab-Akzent", - "checkedBackground": "Aktivierter Hintergrund", - "uncheckedBackground": "Deaktivierter Hintergrund", - "uncheckedBorder": "Deaktivierter Rand", - "indicatorBackground": "Indikator-Hintergrund", - "tableCellText": "Zellentext", - "selectedRowBackground": "Ausgewählter Zeilenhintergrund", - "hoverRowBackground": "Zeilen-Hover-Hintergrund", - "hoverBackground": "Hover-Hintergrund", - "textTransform": "Textumwandlung", - "textDecoration": "Textdekoration", - "alternateRowBackground": "Alternierender Zeilenhintergrund", - "tableHeaderBackground": "Tabellenkopf-Hintergrund", - "tableHeaderText": "Tabellenkopf-Text", - "toolbarBackground": "Werkzeugleisten-Hintergrund", - "toolbarText": "Werkzeugleisten-Text", - "pen": "Stift", - "footerIcon": "Fußzeilen-Symbol", - "tips": "Tipps", - "margin": "Außenabstand", - "padding": "Innenabstand", - "marginLeft": "Linker Außenabstand", - "marginRight": "Rechter Außenabstand", - "marginTop": "Oberer Außenabstand", - "marginBottom": "Unterer Außenabstand", - "containerHeaderPadding": "Kopfzeilen-Innenabstand", - "containerFooterPadding": "Fußzeilen-Innenabstand", - "containerSiderPadding": "Seitenleisten-Innenabstand", - "containerBodyPadding": "Körper-Innenabstand", - "minWidth": "Mindestbreite", - "aspectRatio": "Seitenverhältnis", - "text": "Text", - "textSize": "Textgröße", - "textWeight": "Textgewicht", - "fontFamily": "Schriftart", - "fontStyle": "Schriftstil", - "backgroundImage": "Hintergrundbild", - "backgroundImageRepeat": "Hintergrundbild-Wiederholung", - "backgroundImageSize": "Hintergrundbild-Größe", - "backgroundImagePosition": "Hintergrundbild-Position", - "backgroundImageOrigin": "Hintergrundbild-Ursprung", - "headerBackgroundImage": "Kopfzeilen-Hintergrundbild", - "headerBackgroundImageRepeat": "Kopfzeilen-Bildwiederholung", - "headerBackgroundImageSize": "Kopfzeilen-Bildgröße", - "headerBackgroundImagePosition": "Kopfzeilen-Bildposition", - "headerBackgroundImageOrigin": "Kopfzeilen-Bildursprung", - "footerBackgroundImage": "Fußzeilen-Hintergrundbild", - "footerBackgroundImageRepeat": "Fußzeilen-Bildwiederholung", - "footerBackgroundImageSize": "Fußzeilen-Bildgröße", - "footerBackgroundImagePosition": "Fußzeilen-Bildposition", - "footerBackgroundImageOrigin": "Fußzeilen-Bildursprung", - "rotation": "Drehung", - "alternateBackground": "Alternative Hintergrundfarbe", - "headerText": "Textfarbe der Kopfzeile", - "labelColor": "Etikett Farbe", - "label": "Etikett Farbe", - "lineHeight": "Höhe der Linie", - "subTitleColor": "Untertitel Farbe", - "titleText": "Titel Farbe", - "success": "Erfolg Farbe", - "siderBackgroundImage": "Sider Hintergrundbild", - "siderBackgroundImageRepeat": "Sider Hintergrundbild Wiederholung", - "siderBackgroundImageSize": "Sider Hintergrundbild Größe", - "siderBackgroundImagePosition": "Sider Hintergrundbild Position", - "siderBackgroundImageOrigin": "Sider Hintergrundbild Ursprung", - "activeBackground": "Aktive Hintergrundfarbe", - "labelBackground": "Hintergrundfarbe des Etiketts", - - "radiusTip": "Legt den Radius der Ecken des Elements fest. Beispiel: 5px, 50% oder 1em.", - "gapTip": "Legt den Abstand zwischen Zeilen und Spalten in einem Raster- oder Flexcontainer fest. Beispiel: 10px, 1rem oder 5%.", - "cardRadiusTip": "Definiert den Eckenradius für Kartenkomponenten. Beispiel: 10px, 15px.", - "borderWidthTip": "Legt die Breite des Randes des Elements fest. Beispiel: 1px, 0.5em oder dünn.", - "borderStyleTip": "Legt den Stil des Randes fest. Beispiel: solid, dashed, dotted oder none.", - "marginTip": "Definiert den äußeren Abstand um ein Element. Beispiel: 10px, 2em oder auto. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 0px 1px 5px 2px.", - "directionTip": "Legt die Richtung des Layouts fest. Beispiel: row, column oder row-reverse.", - "detailSizeTip": "Definiert die Größe bestimmter Details im Layout. Beispiel: 10px, 2em oder 80%.", - "chartOpacityTip": "Legt die Deckkraft des Diagramms fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent).", - "chartBoxShadowTip": "Definiert den Schatten, den das Diagramm wirft. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3).", - "chartBorderStyleTip": "Legt den Stil der Diagrammrand fest. Beispiel: solid, dashed oder dotted.", - "chartBorderRadiusTip": "Definiert den Eckenradius der Diagrammgrenze. Beispiel: 10px, 20%.", - "chartBorderWidthTip": "Legt die Breite der Diagrammgrenze fest. Beispiel: 2px, 0.5em.", - "chartTextSizeTip": "Legt die Schriftgröße des Diagrammtexts fest. Beispiel: 16px, 1em, 120%.", - "chartTextWeightTip": "Legt die Schriftstärke des Diagrammtexts fest. Beispiel: normal, bold oder 700.", - "chartFontFamilyTip": "Legt die Schriftart für den Diagrammtext fest. Beispiel: Arial, Helvetica oder 'Times New Roman'.", - "chartFontStyleTip": "Legt den Schriftstil des Diagrammtexts fest. Beispiel: normal, italic oder oblique.", - "animationIterationCountTip": "Legt fest, wie oft eine Animation ausgeführt werden soll. Beispiel: infinite, 1 oder 3.", - "opacityTip": "Legt den Transparenzgrad des Elements fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent), 0 (unsichtbar).", - "boxShadowColorTip": "Legt die Farbe des Schattens fest. Beispiel: rgba(0, 0, 0, 0.3), #FF5733.", - "chartBackgroundColorTip": "Legt die Hintergrundfarbe des Diagramms fest. Beispiel: #FFFFFF, rgba(255, 255, 255, 0.8).", - "chartGradientColorTip": "Definiert die Farbverläufe für den Diagrammhintergrund. Beispiel: linear-gradient(to right, #ff7e5f, #feb47b).", - "chartShadowColorTip": "Legt die Schattenfarbe des Diagramms fest. Beispiel: rgba(0, 0, 0, 0.2), #333333.", - "chartBorderColorTip": "Definiert die Farbe der Diagrammgrenze. Beispiel: #000000, rgba(0, 0, 0, 0.5).", - "chartTextColorTip": "Legt die Farbe des Diagrammtexts fest. Beispiel: #333333, rgba(51, 51, 51, 1).", - "boxShadowTip": "Definiert den Schatten, der von einem Element geworfen wird. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", - "animationDelayTip": "Legt die Verzögerung vor Beginn der Animation fest. Beispiel: 1s, 500ms, 0.", - "animationDurationTip": "Legt die Dauer der Animation fest. Beispiel: 2s, 3s, 500ms.", - "paddingTip": "Definiert den inneren Abstand innerhalb eines Elements. Beispiel: 10px, 2em, 5%. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 10px 21px 5px 20px.", - "containerHeaderPaddingTip": "Definiert den Innenabstand für den Container-Header. Beispiel: 10px, 1rem.", - "containerSiderPaddingTip": "Definiert den Innenabstand für die Container-Seitenleiste. Beispiel: 8px, 1em.", - "containerFooterPaddingTip": "Definiert den Innenabstand für den Container-Footer. Beispiel: 12px, 1rem.", - "containerBodyPaddingTip": "Definiert den Innenabstand für den Container-Body. Beispiel: 15px, 2em.", - "textSizeTip": "Legt die Schriftgröße des Textes fest. Beispiel: 14px, 1.2em, 110%.", - "textWeightTip": "Definiert die Schriftstärke des Textes. Beispiel: normal, bold, 400.", - "fontFamilyTip": "Legt die Schriftart des Textes fest. Beispiel: Arial, Verdana, 'Courier New'.", - "textDecorationTip": "Definiert die Verzierung des Textes. Beispiel: underline, line-through, none.", - "textTransformTip": "Legt die Groß- und Kleinschreibung des Textes fest. Beispiel: uppercase, lowercase, capitalize.", - "fontStyleTip": "Definiert den Schriftstil des Textes. Beispiel: normal, italic, oblique.", - "backgroundImageTip": "Legt das Hintergrundbild eines Elements fest. Beispiel: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", - "headerBackgroundImageTip": "Legt das Hintergrundbild des Headers fest. Beispiel: url('header.jpg').", - "footerBackgroundImageTip": "Legt das Hintergrundbild des Footers fest. Beispiel: url('footer.jpg').", - "backgroundImageRepeatTip": "Definiert, wie das Hintergrundbild wiederholt wird. Beispiel: no-repeat, repeat-x, repeat-y.", - "headerBackgroundImageRepeatTip": "Definiert, wie das Header-Hintergrundbild wiederholt wird. Beispiel: repeat-x, no-repeat.", - "footerBackgroundImageRepeatTip": "Definiert, wie das Footer-Hintergrundbild wiederholt wird. Beispiel: repeat-y, no-repeat.", - "backgroundImageSizeTip": "Definiert die Größe des Hintergrundbilds. Beispiel: cover, contain, 50% 50%.", - "backgroundImagePositionTip": "Legt die Position des Hintergrundbilds fest. Beispiel: center, top right, 10% 20%.", - "backgroundImageOriginTip": "Legt den Bereich fest, in dem das Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", - "headerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Header-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", - "footerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Footer-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", - "rotationTip": "Legt den Rotationswinkel des Elements fest. Beispiel: 45deg, 90deg, -180deg.", - "lineHeightTip": "Legt die Höhe einer Textzeile fest. Beispiel: 1.5, 2, 120%." - - }, - "export": { - ...en.export, - - "hiddenDesc": "Wenn true, wird die Komponente ausgeblendet", - "disabledDesc": "Wenn true, ist die Komponente deaktiviert und nicht interaktiv", - "visibleDesc": "Wenn true, ist die Komponente sichtbar", - "inputValueDesc": "Aktueller Wert der Eingabe", - "invalidDesc": "Zeigt an, ob der Wert ungültig ist", - "placeholderDesc": "Platzhaltertext, wenn kein Wert eingestellt ist", - "requiredDesc": "Wenn true, ist ein gültiger Wert erforderlich", - "submitDesc": "Formular abschicken", - "richTextEditorValueDesc": "Aktueller Inhalt des Text-Editors", - "richTextEditorReadOnlyDesc": "Wenn true, ist der Editor schreibgeschützt", - "richTextEditorHideToolBarDesc": "Wenn true, wird die Symbolleiste ausgeblendet", - "jsonEditorDesc": "Aktuelle JSON-Daten", - "sliderValueDesc": "Aktuell ausgewählter Schieberegler Wert", - "sliderMaxValueDesc": "Maximaler Wert des Schiebereglers", - "sliderMinValueDesc": "Mindestwert des Schiebereglers", - "sliderStartDesc": "Wert des gewählten Startpunkts", - "sliderEndDesc": "Wert des ausgewählten Endpunkts", - "ratingValueDesc": "Aktuell ausgewählte Bewertung", - "ratingMaxDesc": "Maximaler Wert der Bewertung", - "datePickerValueDesc": "Aktuell ausgewähltes Datum", - "datePickerFormattedValueDesc": "Ausgewähltes Datum formatiert", - "datePickerTimestampDesc": "Zeitstempel des ausgewählten Datums", - "dateRangeStartDesc": "Startdatum des Bereichs", - "dateRangeEndDesc": "Enddatum des Bereichs", - "dateRangeStartTimestampDesc": "Zeitstempel des Startdatums", - "dateRangeEndTimestampDesc": "Zeitstempel des Enddatums", - "dateRangeFormattedValueDesc": "Formatierter Datumsbereich", - "dateRangeFormattedStartValueDesc": "Formatiertes Startdatum", - "dateRangeFormattedEndValueDesc": "Formatiertes Enddatum", - "timePickerValueDesc": "Aktuell gewählte Zeit", - "timePickerFormattedValueDesc": "Formatierte ausgewählte Zeit", - "timeRangeStartDesc": "Startzeit des Zeitbereichs", - "timeRangeEndDesc": "Endzeit des Zeitbereichs", - "timeRangeFormattedValueDesc": "Formatierter Zeitbereich", - "timeRangeFormattedStartValueDesc": "Formatierte Startzeit des Zeitbereichs", - "timeRangeFormattedEndValueDesc": "Formatierte Endzeit des Zeitbereichs", - "timeZone": "Zeitzone", - "timeZoneDesc": "Zeitzone des ausgewählten Datums", - }, - "validationDesc": { - ...en.validationDesc, - - "email": "Bitte gib eine gültige E-Mail Adresse ein", - "url": "Bitte gib eine gültige URL ein", - "regex": "Die Eingabe muss zum regulären Ausdruck passen.", - "maxLength": "Zu viele Zeichen, aktuell: {length}, maximal: {maxLength}", - "minLength": "Nicht genug Zeichen, aktuell: {length}, minimal: {minLength}", - "maxValue": "Wert überschreitet Maximum, aktuell: {value}, Maximum: {max}", - "minValue": "Wert unter Minimum, aktuell: {value}, Minimum: {min}", - "maxTime": "Zeit überschreitet Maximum, aktuell: {time}, Maximum: {maxTime}", - "minTime": "Zeit unter Minimum, aktuell: {time}, Minimum: {minTime}", - "maxDate": "Datum überschreitet Maximum, aktuell: {date}, Maximum: {maxDate}", - "minDate": "Datum unter Minimum, aktuell: {date}, Minimum: {minDate}", - }, - "query": { - ...en.query, - - "noQueries": "Keine Datenabfragen verfügbar.", - "queryTutorialButton": "Ansicht {value} Dokumente", - "datasource": "Deine Datenquellen", - "newDatasource": "Neue Datenquelle", - "generalTab": "Allgemein", - "notificationTab": "Benachrichtigung", - "advancedTab": "Erweiterte Einstellungen", - "showFailNotification": "Benachrichtigung bei Misserfolg anzeigen", - "failCondition": "Fehlerbedingungen für Misserfolg", - "failConditionTooltip1": "Passe die Fehlerbedingungen und die entsprechenden Benachrichtigungen an.", - "failConditionTooltip2": "Wenn eine Bedingung erfüllt ist, wird die Abfrage als fehlgeschlagen markiert und die entsprechende Benachrichtigung ausgelöst.", - "showSuccessNotification": "Benachrichtigung bei Erfolg anzeigen", - "successMessageLabel": "Erfolgsmeldung", - "successMessage": "Datenabfrage ist erfolgreich gelaufen", - "notifyDuration": "Dauer", - "notifyDurationTooltip": "Dauer der Benachrichtigung. Die Zeiteinheit kann \\'s\\' (Sekunde, Standard) oder \\'ms\\' (Millisekunde) sein. Der Standardwert ist {default}s. Das Maximum ist {max}s.", - "successMessageWithName": "{name} Lauf erfolgreich", - "failMessageWithName": "{name} Lauf fehlgeschlagen: {result}", - "showConfirmationModal": "Bestätigungsmodal vor der Ausführung anzeigen", - "confirmationMessageLabel": "Bestätigungsnachricht", - "confirmationMessage": "Bist du sicher, dass du diese Datenabfrage ausführen willst?", - "newQuery": "Neue Datenabfrage", - "newFolder": "Neue Mappe", - "recentlyUsed": "Kürzlich verwendet", - "folder": "Ordner", - "folderNotEmpty": "Der Ordner ist nicht leer", - "dataResponder": "Daten Aktor", - "tempState": "Temporärer Zustand", - "transformer": "Daten Transformator", - "quickRestAPI": "HTTP REST-Abfrage", - "quickStreamAPI": "Daten Stream-Abfrage", - "quickGraphql": "GraphQL-Abfrage", - "lowcoderAPI": "Lowcoder-API", - "executeJSCode": "JavaScript-Code", - "importFromQueryLibrary": "von Abfragebibliothek", - "importFromFile": "Aus Datei importieren", - "triggerType": "Ausgelöst, wenn...", - "triggerTypeAuto": "Eingaben ändern sich oder nach dem Laden der Seite", - "triggerTypePageLoad": "Nach dem Laden der Anwendung (Seite)", - "triggerTypeManual": "Manuell auslösen", - "triggerTypeInputChange": "Wenn sich Eingaben ändern", - "triggerTypeQueryExec": "Nach Ausführung einer Daten-Abfrage", - "triggerTypeTimeout": "Nach dem Laden der Anwendung (Seite) und Timeout", - "delayTime": "Verzögerungszeit", - "chooseDataSource": "Datenquelle wählen", - "method": "Methode", - "updateExceptionDataSourceTitle": "Fehlerhafte Datenquelle aktualisieren", - "updateExceptionDataSourceContent": "Aktualisiere die folgende Abfrage mit der gleichen Datenquelle:", - "update": "Update", - "disablePreparedStatement": "SQL Prepared Statements deaktivieren", - "disablePreparedStatementTooltip": "Die Deaktivierung von SQL Prepared Statements kann dynamisches SQL erzeugen, erhöht aber das Risiko von SQL-Injection", - "timeout": "Abbruch nach", - "timeoutTooltip": "Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Standardwert: {defaultSeconds} Sekunden. Maximaler Wert: {maxSeconds} Sekunden. Z.B. 300 (d.h. 300ms), 800ms, 5s.", - "periodic": "Diese Datenabfrage regelmäßig ausführen", - "periodicTime": "Zeitraum", - "periodicTimeTooltip": "Zeitraum zwischen aufeinanderfolgenden Ausführungen. Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Mindestwert: 100 ms. Bei Werten unter 100ms wird die periodische Ausführung deaktiviert. Z.B. 300 (d.h. 300ms), 800ms, 5s.", - "cancelPrevious": "Ignoriere die Ergebnisse früherer unvollendeter Datenabfragen", - "cancelPreviousTooltip": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen unvollständigen Datenabfragen ignoriert, wenn sie nicht abgeschlossen wurden, und diese ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", - "dataSourceStatusError": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen nicht abgeschlossenen Datenabfragen ignoriert, und die ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", - "success": "Erfolg", - "fail": "Fehler", - "successDesc": "Ausgelöst, wenn die Ausführung erfolgreich ist", - "failDesc": "Ausgelöst, wenn die Ausführung fehlschlägt", - "fixedDelayError": "Abfrage nicht ausgeführt", - "execSuccess": "Erfolgreich gelaufen", - "execFail": "Lauf fehlgeschlagen", - "execIgnored": "Die Ergebnisse dieser Datenabfrage wurden ignoriert", - "deleteSuccessMessage": "Erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden", - "dataExportDesc": "Daten, die durch die aktuelle Datenabfrage erhalten wurden", - "codeExportDesc": "Aktueller Query Status Code", - "successExportDesc": "Ob die aktuelle Datenabfrage erfolgreich ausgeführt wurde", - "messageExportDesc": "Von der aktuellen Datenabfrage zurückgegebene Informationen", - "extraExportDesc": "Andere Daten in der aktuellen Datenabfrage", - "isFetchingExportDesc": "Ist die aktuelle Datenabfrage in der Verarbeitung?", - "runTimeExportDesc": "Aktuelle Datenabfrage-Ausführungszeit (ms)", - "latestEndTimeExportDesc": "Letzte Laufzeit", - "triggerTypeExportDesc": "Auslöser Typ", - "chooseResource": "Wähle eine Ressource", - "createDataSource": "Eine neue Datenquelle erstellen", - "editDataSource": "Bearbeiten", - "datasourceName": "Datenquelle Name", - "datasourceNameRuleMessage": "Bitte gib einen Namen für die Datenquelle ein", - "generalSetting": "Allgemeine Einstellungen", - "advancedSetting": "Erweiterte Einstellungen", - "port": "Hafen", - "portRequiredMessage": "Bitte einen Port eingeben", - "portErrorMessage": "Bitte gib einen korrekten Port ein", - "connectionType": "Verbindungstyp", - "regular": "Regulär", - "host": "Gastgeber", - "hostRequiredMessage": "Bitte gib einen Host-Domänennamen oder eine IP-Adresse ein", - "userName": "Benutzer Name", - "password": "Passwort", - "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", - "uriRequiredMessage": "Bitte gib eine URI ein", - "urlRequiredMessage": "Bitte gib eine URL ein", - "uriErrorMessage": "Bitte gib eine korrekte URI ein", - "urlErrorMessage": "Bitte gib eine korrekte URL ein", - "httpRequiredMessage": "Bitte gib http:// oder https:// ein.", - "databaseName": "Datenbank Name", - "databaseNameRequiredMessage": "Bitte gib einen Datenbanknamen ein", - "useSSL": "SSL verwenden", - "userNameRequiredMessage": "Bitte gib deinen User-Namen ein", - "passwordRequiredMessage": "Bitte gib dein Passwort ein", - "authentication": "Authentifizierung", - "authenticationType": "Authentifizierung Typ", - "sslCertVerificationType": "SSL-Zertifikat-Verifizierung", - "sslCertVerificationTypeDefault": "CA-Zertifikat verifizieren", - "sslCertVerificationTypeSelf": "Selbstsigniertes Zertifikat verifizieren", - "sslCertVerificationTypeDisabled": "Deaktiviert", - "selfSignedCert": "Selbstsigniertes Zertifikat", - "selfSignedCertRequireMsg": "Bitte gib dein Zertifikat ein", - "enableTurnOffPreparedStatement": "SQL Prepared Statements für Abfragen aktivieren", - "enableTurnOffPreparedStatementTooltip": "Du kannst SQL Prepared Statements auf der Registerkarte \"Erweitert\" der Abfrage aktivieren oder deaktivieren.", - "serviceName": "Dienst Name", - "serviceNameRequiredMessage": "Bitte gib deinen Dienstnamen ein", - "useSID": "SID verwenden", - "connectSuccessfully": "Verbindung erfolgreich", - "saveSuccessfully": "Erfolgreich gerettet", - "database": "Datenbank", - "cloudHosting": "Der in der Cloud gehostete Lowcoder kann nicht auf lokale Dienste mit 127.0.0.1 oder localhost zugreifen. Versuche, dich mit öffentlichen Netzwerkdatenquellen zu verbinden oder verwende einen Reverse Proxy für private Dienste.", - "notCloudHosting": "Für den Einsatz von Docker-Hosts verwendet Lowcoder Bridge-Netzwerke, daher sind 127.0.0.1 und localhost als Hostadressen ungültig. Für den Zugriff auf Datenquellen auf lokalen Rechnern siehe", - "howToAccessHostDocLink": "Wie man auf die Host-API/DB zugreift", - "returnList": "Rückgabe Liste", - "chooseDatasourceType": "Datenquellentyp auswählen", - "viewDocuments": "Dokumente ansehen", - "testConnection": "Test Verbindung", - "save": "Speichern", - "whitelist": "Whitelist", - "whitelistTooltip": "Füge die IP-Adressen von Lowcoder nach Bedarf zu deiner Datenquellen-Zulassungsliste hinzu.", - "address": "Adresse: ", - "nameExists": "Name {name} existiert bereits", - "jsQueryDocLink": "Über JavaScript Query", - "dynamicDataSourceConfigLoadingText": "Laden einer zusätzlichen Datenquellenkonfiguration...", - "dynamicDataSourceConfigErrText": "Die Konfiguration der zusätzlichen Datenquelle konnte nicht geladen werden.", - "retry": "Wiederholen", - "categoryDatabase": "Datenbank", - "categoryBigdata": "Big Data", - "categoryAi": "KI", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "App-Entwicklung", - "categoryWorkflow": "Arbeitsablauf", - "categoryMessaging": "Messaging", - "categoryAssets": "Assets & Speicher", - "categoryProjectManagement": "Projektmanagement", - "categoryCrm": "CRM", - "categoryEcommerce": "E-Commerce", - "categoryWebscrapers": "Web-Scraper & Open Data", - "categoryDocumentHandling": "Bericht & Dokumentenerstellung", - "categoryRPA": "Roboter Prozess Automatisierung", - "componentsUsingQueryTitle": "Abfrageverwendung", - "componentsUsingQuery": "Wo wird diese Abfrage verwendet", - "variables": "Variablen" - }, - "sqlQuery": { - ...en.sqlQuery, - - "keyValuePairs": "Schlüssel-Werte-Paare", - "object": "Objekt", - "allowMultiModify": "Mehrzeilige Änderungen zulassen", - "allowMultiModifyTooltip": "Wenn diese Option ausgewählt ist, werden alle Zeilen, die die Bedingungen erfüllen, bearbeitet. Andernfalls wird nur die erste Zeile, die die Bedingungen erfüllt, bearbeitet.", - "array": "Array", - "insertList": "Liste einfügen", - "insertListTooltip": "Werte werden eingefügt, wenn sie nicht existieren", - "filterRule": "Filter-Regel", - "updateList": "Liste aktualisieren", - "updateListTooltip": "Vorhandene Werte können durch die gleichen Werte der Einfügeliste überschrieben werden", - "sqlMode": "SQL-Mode", - "guiMode": "GUI-Mode", - "operation": "Operation", - "insert": "Einfügen", - "upsert": "Einfügen, aber aktualisieren, wenn es einen Konflikt gibt", - "update": "Update", - "delete": "Löschen", - "bulkInsert": "Stapel Einfügen", - "bulkUpdate": "Stapel Aktualisieren", - "table": "Tabelle", - "primaryKeyColumn": "Primärschlüsselspalte", - }, - "EsQuery": { - ...en.EsQuery, - - "rawCommand": "Roh-Abfragebefehl", - "queryTutorialButton": "Elasticsearch API Dokumente anzeigen", - "request": "Abfrage", - }, - "googleSheets": { - ...en.googleSheets, - - "rowIndex": "Zeilenindex", - "spreadsheetId": "Tabellenkalkulations-ID", - "sheetName": "Tabellen-Blatt Name", - "readData": "Daten lesen", - "appendData": "Zeile anhängen", - "updateData": "Zeile aktualisieren", - "deleteData": "Zeile löschen", - "clearData": "Reihe löschen", - "serviceAccountRequireMessage": "Bitte gib dein Servicekonto ein", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Sortieren", - "sortPlaceholder": "Platzhalter", - }, - "queryLibrary": { - ...en.queryLibrary, - - "export": "Exportieren nach JSON", - "noInput": "Die aktuelle Abfrage hat keine Eingabe", - "inputName": "Name", - "inputDesc": "Beschreibung", - "emptyInputs": "Keine Eingaben", - "clickToAdd": "Hinzufügen", - "chooseQuery": "Abfrage wählen", - "viewQuery": "Ansicht Abfrage", - "chooseVersion": "Version wählen", - "latest": "Neueste", - "publish": "Veröffentlichen", - "historyVersion": "Historische Version", - "deleteQueryLabel": "Abfrage löschen", - "deleteQueryContent": "Die Abfrage kann nach dem Löschen nicht wiederhergestellt werden. Die Abfrage löschen?", - "run": "Lauf", - "readOnly": "Nur lesen", - "exit": "Abbruch", - "recoverAppSnapshotContent": "Die aktuelle Abfrage zur Version {version} wiederherstellen", - "searchPlaceholder": "Suchabfrage", - "allQuery": "Alle Abfragen", - "deleteQueryTitle": "Abfrage löschen", - "unnamed": "Unbenannt", - "publishNewVersion": "Neue Version veröffentlichen", - "publishSuccess": "Erfolgreich veröffentlicht", - "version": "Version", - "desc": "Beschreibung", - }, - "snowflake": { - ...en.snowflake, - - "accountIdentifierTooltip": "Siehe ", - "extParamsTooltip": "Zusätzliche Verbindungsparameter konfigurieren", - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - - "queryOrgUsers": "Abfrage Arbeitsbereich Benutzer", - }, - "redisQuery": { - ...en.redisQuery, - - "rawCommand": "Roher Befehl", - "command": "Befehl", - "queryTutorial": "Redis-Befehlsdokumente anzeigen", - }, - "httpQuery": { - ...en.httpQuery, - - "bodyFormDataTooltip": "Wenn {type} ausgewählt ist, sollte das Werteformat {object} sein. Beispiel: {example}", - "text": "Text", - "file": "Datei", - "extraBodyTooltip": "Schlüsselwerte im Extra Body werden an den Body mit den Datentypen JSON oder Form Data angehängt", - "forwardCookies": "Cookies weiterleiten", - "forwardAllCookies": "Alle Cookies weiterleiten", - }, - "smtpQuery": { - ...en.smtpQuery, - - "attachment": "Anhang", - "attachmentTooltip": "Kann mit der Datei-Upload-Komponente verwendet werden, die Daten müssen konvertiert werden in: ", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Sender", - "recipient": "Empfänger", - "carbonCopy": "Durchschlag", - "blindCarbonCopy": "Blindkopie", - "subject": "Thema", - "content": "Inhalt", - "contentTooltip": "Unterstützt die Eingabe von Text oder HTML", - }, - "uiCompCategory": { - ...en.uiCompCategory, - - "dashboards": "Dashboards & Berichte", - "layout": "Layout und Navigation", - "forms": "Datenerhebung & Formulare", - "collaboration": "Meetings & Zusammenarbeit", - "projectmanagement": "Projektmanagement", - "scheduling": "Kalender & Terminplanung", - "documents": "Dokumenten- und Dateiverwaltung", - "itemHandling": "Handhabung von Inventar", - "multimedia": "Multimedia und Animation", - "integration": "Integration & Erweiterung", - "legacy" : "Älter & Auslaufend" - }, - "uiComp": { - ...en.uiComp, - - "autoCompleteCompName": "Vorschlag Feld", - "autoCompleteCompDesc": "Ein Eingabefeld, das Vorschläge während der Eingabe anbietet und dadurch die Benutzererfahrung und Genauigkeit verbessert.", - "autoCompleteCompKeywords": "Vorschläge, Autovervollständigung, Tippen, Eingabe", - "inputCompName": "Eingabe Feld", - "inputCompDesc": "Ein grundlegendes Texteingabefeld, das es Benutzern ermöglicht, Text einzugeben und zu bearbeiten.", - "inputCompKeywords": "Text, Eingabe, Feld, Bearbeiten", - "textAreaCompName": "Text Bereich Feld", - "textAreaCompDesc": "Ein mehrzeiliges Texteingabefeld für längere Inhalte wie Kommentare oder Beschreibungen.", - "textAreaCompKeywords": "mehrzeilig, Textbereich, Eingabe, Text", - "passwordCompName": "Passwort Feld", - "passwordCompDesc": "Ein sicheres Eingabefeld für Passwörter, das Zeichen aus Datenschutzgründen maskiert.", - "passwordCompKeywords": "Passwort, Sicherheit, Eingabe, versteckt", - "richTextEditorCompName": "Text Editor", - "richTextEditorCompDesc": "Ein fortgeschrittener Texteditor, der reichhaltige Formatierungsoptionen wie Fett, Kursiv und Listen unterstützt.", - "richTextEditorCompKeywords": "Editor, Text, Formatierung, Rich Content", - "numberInputCompName": "Zahlen Feld", - "numberInputCompDesc": "Ein Eingabefeld speziell für numerische Eingaben mit Optionen zum Erhöhen und Verringern der Werte.", - "numberInputCompKeywords": "Nummer, Eingabe, Inkrement, Dekrement", - "sliderCompName": "Regler", - "sliderCompDesc": "Eine grafische Schiebereglerkomponente zur Auswahl eines Wertes oder Bereichs innerhalb einer festgelegten Skala.", - "sliderCompKeywords": "Schieberegler, Bereich, Eingabe, grafisch", - "rangeSliderCompName": "Bereich Regler", - "rangeSliderCompDesc": "Ein Schieberegler mit zwei Griffen zur Auswahl eines Wertebereichs, nützlich für Filterungen oder zum Festlegen von Grenzwerten.", - "rangeSliderCompKeywords": "Bereich, Schieberegler, Zweigriff, Filter", - "ratingCompName": "Bewertung", - "ratingCompDesc": "Eine Komponente zur Erfassung von Benutzerbewertungen, dargestellt durch Sterne.", - "ratingCompKeywords": "Bewertung, Sterne, Rückmeldung, Eingabe", - "switchCompName": "Schalter", - "switchCompDesc": "Ein Umschalter für Ein/Aus- oder Ja/Nein-Entscheidungen.", - "switchCompKeywords": "Umschalter, Schalter, ein/aus, Steuerung", - "selectCompName": "Auswahl", - "selectCompDesc": "Ein Dropdown-Menü zur Auswahl aus einer Liste von Optionen.", - "selectCompKeywords": "Dropdown, auswählen, Optionen, Menü", - "multiSelectCompName": "Mehrfach Auswahl", - "multiSelectCompDesc": "Eine Komponente, die die Auswahl mehrerer Elemente aus einer Dropdown-Liste ermöglicht.", - "multiSelectCompKeywords": "Mehrfachauswahl, mehrere, Dropdown, Auswahlmöglichkeiten", - "cascaderCompName": "Kaskade Auswahl", - "cascaderCompDesc": "Ein mehrstufiges Dropdown für die hierarchische Auswahl von Daten, beispielsweise bei der Standortauswahl.", - "cascaderCompKeywords": "Kaskadierer, hierarchisch, Dropdown, Stufen", - "checkboxCompName": "Kontrollkästchen", - "checkboxCompDesc": "Ein Standardkästchen für Optionen, die ausgewählt oder abgewählt werden können.", - "checkboxCompKeywords": "Kästchen, Optionen, auswählen, umschalten", - "radioCompName": "Options Feld", - "radioCompDesc": "Optionsfelder zur Auswahl einer Option aus einem Set, wobei nur eine Wahl erlaubt ist.", - "radioCompKeywords": "Optionsfeld, Schaltflächen, auswählen, Einzelwahl", - "segmentedControlCompName": "Segmente", - "segmentedControlCompDesc": "Eine Steuerung mit segmentierten Optionen zum schnellen Wechsel zwischen mehreren Auswahlmöglichkeiten.", - "segmentedControlCompKeywords": "segmentiert, Steuerung, wechseln, Optionen", - "stepControlCompName": "Schritte", - "stepControlCompDesc": "Eine Steuerung mit Schrittoptionen, die visuell geführte Schritte für Anwendungen wie Formulare oder Assistenten bietet.", - "stepControlCompKeywords": "Schritte, Steuerung, wechseln, Optionen", - "fileUploadCompName": "Upload", - "fileUploadCompDesc": "Eine Komponente zum Hochladen von Dateien mit Unterstützung für Drag-and-Drop und Dateiauswahl.", - "fileUploadCompKeywords": "Datei, hochladen, ziehen und ablegen, auswählen", - "dateCompName": "Datum Auswahl", - "dateCompDesc": "Eine Datumsauswahlkomponente zum Auswählen von Daten aus einem Kalenderinterface.", - "dateCompKeywords": "Datum, Auswähler, Kalender, auswählen", - "dateRangeCompName": "Datum Bereich Auswahl", - "dateRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitraums, nützlich für Buchungssysteme oder Filter.", - "dateRangeCompKeywords": "Datumsbereich, auswählen, Buchung, filtern", - "timeCompName": "Zeit Auswahl", - "timeCompDesc": "Eine Zeitwahlkomponente zur Auswahl spezifischer Tageszeiten.", - "timeCompKeywords": "Zeit, Auswähler, auswählen, Uhr", - "timeRangeCompName": "Zeitraum Auswahl", - "timeRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitintervalls, oft verwendet in Planungsanwendungen.", - "timeRangeCompKeywords": "Zeitraum, auswählen, Planung, Dauer", - "buttonCompName": "Button", - "buttonCompDesc": "Eine vielseitige Knopfkomponente für das Absenden von Formularen, das Auslösen von Aktionen oder das Navigieren.", - "buttonCompKeywords": "Knopf, absenden, Aktion, navigieren", - "meetingControlCompName": "Icon Taste", - "meetingCompDesc": "Eine Steuerungstaste mit Icons.", - "meetingCompKeywords": "Steuerung, Taste, Icons", - "linkCompName": "Link zu", - "linkCompDesc": "Eine Komponente zur Anzeige von Hyperlinks für die Navigation oder zum Verlinken auf externe Ressourcen.", - "linkCompKeywords": "Verknüpfung, Hyperlink, Navigation, extern", - "scannerCompName": "Code Scanner", - "scannerCompDesc": "Eine Komponente zum Scannen von Barcodes, QR-Codes und anderen ähnlichen Daten.", - "scannerCompKeywords": "Scanner, Barcode, QR-Code, Scannen", - "dropdownCompName": "Auswahlliste", - "dropdownCompDesc": "Ein Dropdown-Menü zur kompakten Darstellung einer Liste von Optionen.", - "dropdownCompKeywords": "Dropdown, Menü, Optionen, auswählen", - "toggleButtonCompName": "Umschalter", - "toggleButtonCompDesc": "Ein Knopf, der zwischen zwei Zuständen oder Optionen umschalten kann.", - "toggleButtonCompKeywords": "Umschalten, Knopf, Schalter, Zustand", - "textCompName": "Text Anzeige", - "textCompDesc": "Eine einfache Komponente zur Anzeige von statischem oder dynamischem Textinhalt einschließlich Markdown-Formatierung.", - "textCompKeywords": "Text, Anzeige, statisch, dynamisch", - "tableCompName": "Tabelle", - "tableCompDesc": "Eine umfangreiche Tabellenkomponente zur Darstellung von Daten in einem strukturierten Tabellenformat, mit Optionen für Sortierung und Filterung, Baumdatenanzeige und erweiterbare Zeilen.", - "tableCompKeywords": "Tabelle, Daten, Sortierung, Filterung", - "imageCompName": "Bild", - "imageCompDesc": "Eine Komponente zur Anzeige von Bildern, die verschiedene Formate basierend auf URI oder Base64-Daten unterstützt.", - "imageCompKeywords": "Bild, Anzeige, Medium, Base64", - "progressCompName": "Fortschritt Anzeige", - "progressCompDesc": "Ein visueller Indikator des Fortschritts, der typischerweise verwendet wird, um den Fertigstellungsstatus einer Aufgabe zu zeigen.", - "progressCompKeywords": "Fortschritt, Indikator, Status, Aufgabe", - "progressCircleCompName": "Fortschritt Anzeige Kreis", - "progressCircleCompDesc": "Ein kreisförmiger Fortschrittsindikator, der häufig für Ladezustände oder zeitgebundene Aufgaben verwendet wird.", - "progressCircleCompKeywords": "Kreis, Fortschritt, Indikator, Laden", - "fileViewerCompName": "Datei Anzeiger", - "fileViewerCompDesc": "Eine Komponente zur Anzeige verschiedener Dateitypen, einschließlich Dokumente und Bilder.", - "fileViewerCompKeywords": "Datei, Anzeiger, Dokument, Bild", - "dividerCompName": "Trennlinie", - "dividerCompDesc": "Eine visuelle Trennkomponente, die verwendet wird, um Inhalte oder Abschnitte innerhalb eines Layouts zu separieren.", - "dividerCompKeywords": "Trennlinie, Separator, Layout, Gestaltung", - "qrCodeCompName": "QRCode Anzeiger", - "qrCodeCompDesc": "Eine Komponente zur Anzeige von QR-Codes, nützlich für schnelles Scannen und Informationsübertragung.", - "qrCodeCompKeywords": "QR-Code, Scannen, Barcode, Information", - "formCompName": "Formular", - "formCompDesc": "Eine Containerkomponente für die Erstellung strukturierter Formulare mit verschiedenen Eingabetypen.", - "formCompKeywords": "Formular, Eingabe, Container, Struktur", - "jsonSchemaFormCompName": "JSON Schema Formular", - "jsonSchemaFormCompDesc": "Eine dynamische Formularkomponente, die basierend auf einem JSON-Schema generiert wird.", - "jsonSchemaFormCompKeywords": "JSON, Schema, Formular, dynamisch", - "containerCompName": "Container", - "containerCompDesc": "Ein Allzweck-Container für das Layout und die Organisation von UI-Elementen.", - "containerCompKeywords": "Container, Layout, Organisation, UI", - "floatTextContainerCompName": "Text Umbruch Container", - "floatTextContainerCompDesc": "Eine Komponente zur Anzeige von Text, die den Inhalt dynamisch anpasst und einfließen lässt.", - "floatTextContainerCompKeywords": "Container, Layout, Text, fließend", - "collapsibleContainerCompName": "Klapp Container", - "collapsibleContainerCompDesc": "Ein Container, der erweitert oder zusammengeklappt werden kann, ideal für die Verwaltung der Sichtbarkeit von Inhalten.", - "collapsibleContainerCompKeywords": "klappbar, Container, erweitern, zusammenklappen", - "tabbedContainerCompName": "Register Karten Container", - "tabbedContainerCompDesc": "Ein Container mit Registerkartennavigation zur Organisation von Inhalten in separaten Bereichen.", - "tabbedContainerCompKeywords": "Registerkarten, Container, Navigation, Bereiche", - "pageLayoutCompName": "Seiten Layout", - "pageLayoutCompDesc": "Ein Container, der es ermöglicht, ein Layout mit Kopfzeile, Seitenleiste, Fußzeile und Hauptinhaltsbereichen zu erstellen.", - "pageLayoutCompKeywords": "Layout, Container, Navigation, Seiten", - "modalCompName": "Modal", - "modalCompDesc": "Eine Pop-up-Modalkomponente zur Anzeige von Inhalten, Alarmen oder Formularen im Fokus.", - "modalCompKeywords": "Modal, Pop-up, Alarm, Formular", - "listViewCompName": "Listen Ansicht", - "listViewCompDesc": "Eine Komponente zur Anzeige einer Liste von Elementen oder Daten, in die andere Komponenten eingefügt werden können, ähnlich einem Repeater.", - "listViewCompKeywords": "Liste, Ansicht, Anzeige, Repeater", - "gridCompName": "Grid Ansicht", - "gridCompDesc": "Eine flexible Gitterkomponente zur Erstellung strukturierter Layouts mit Zeilen und Spalten, eine Erweiterung der Listenansicht.", - "gridCompKeywords": "Gitter, Layout, Zeilen, Spalten", - "navigationCompName": "Navigation", - "navigationCompDesc": "Eine Navigationskomponente zum Erstellen von Menüs, Brotkrumen oder Tabs für die Seitennavigation.", - "navigationCompKeywords": "Navigation, Menü, Brotkrumen, Tabs", - "iframeCompName": "IFrame", - "iframeCompDesc": "Eine Inline-Frame-Komponente zum Einbetten externer Webseiten und Anwendungen oder Inhalte innerhalb der Anwendung.", - "iframeCompKeywords": "IFrame, einbetten, Webseite, Inhalt", - "customCompName": "Code Komponente", - "customCompDesc": "Eine flexible, programmierbare Komponente zur Erstellung einzigartiger, benutzerdefinierter UI-Elemente, die speziell auf Ihre Bedürfnisse zugeschnitten sind.", - "customCompKeywords": "benutzerdefiniert, benutzerdefiniert, flexibel, programmierbar", - "moduleCompName": "App Modul", - "moduleCompDesc": "Verwenden Sie Module, um Mikro-Apps zu erstellen, die spezifische Funktionen oder Merkmale kapseln. Module können dann eingebettet und in allen Apps wiederverwendet werden.", - "moduleCompKeywords": "Modul, Mikro-App, Funktionalität, wiederverwendbar", - "jsonExplorerCompName": "JSON Anzeiger", - "jsonExplorerCompDesc": "Eine Komponente zum visuellen Erkunden und Interagieren mit JSON-Datenstrukturen.", - "jsonExplorerCompKeywords": "JSON, Explorer, Daten, Struktur", - "jsonEditorCompName": "JSON-Editor", - "jsonEditorCompDesc": "Eine Editor-Komponente zum Erstellen und Modifizieren von JSON-Daten mit Validierung und Syntaxhervorhebung.", - "jsonEditorCompKeywords": "JSON, Editor, modifizieren, validieren", - "treeCompName": "Baum Struktur", - "treeCompDesc": "Eine Baumstrukturkomponente zur Darstellung hierarchischer Daten, wie z. B. Dateisysteme oder Organigramme.", - "treeCompKeywords": "Baum, hierarchisch, Daten, Struktur", - "treeSelectCompName": "Baum Auswahl", - "treeSelectCompDesc": "Eine Auswahlkomponente, die Optionen in einem hierarchischen Baumformat präsentiert, was eine organisierte und verschachtelte Auswahl ermöglicht.", - "treeSelectCompKeywords": "Baum, auswählen, hierarchisch, verschachtelt", - "audioCompName": "Audio", - "audioCompDesc": "Eine Komponente zur Einbettung von Audioinhalten, mit Steuerungselementen für Wiedergabe und Lautstärkeregelung.", - "audioCompKeywords": "Audio, Wiedergabe, Ton, Musik", - "videoCompName": "Video", - "videoCompDesc": "Eine Multimediakomponente zum Einbetten und Abspielen von Videoinhalten, unterstützt verschiedene Formate.", - "videoCompKeywords": "Video, Multimedia, Abspielen, Einbetten", - "drawerCompName": "Schublade", - "drawerCompDesc": "Ein schiebbares Paneel, das für zusätzliche Navigation oder zur Inhaltsanzeige verwendet werden kann, typischerweise vom Bildschirmrand ausgehend.", - "drawerCompKeywords": "Schublade, schiebbar, Paneel, Navigation", - "chartCompName": "Diagramm", - "chartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Graphen.", - "chartCompKeywords": "Diagramm, Graph, Daten, Visualisierung", - "carouselCompName": "Bild Karussell", - "carouselCompDesc": "Eine rotierende Karussellkomponente zur Präsentation von Bildern, Bannern oder Inhaltsfolien.", - "carouselCompKeywords": "Karussell, Bilder, Rotation, Präsentation", - "imageEditorCompName": "Bild Editor", - "imageEditorCompDesc": "Eine interaktive Komponente zur Bearbeitung und Manipulation von Bildern, bietet verschiedene Werkzeuge und Filter.", - "imageEditorCompKeywords": "Bild, Editor, bearbeiten, Werkzeuge", - "mermaidCompName": "Mermaid Diagramm", - "mermaidCompDesc": "Eine Komponente zum Erstellen komplexer Diagramme und Flussdiagramme basierend auf der Mermaid-Syntax.", - "mermaidCompKeywords": "Mermaid, Diagramme, Flussdiagramme, Visualisierung", - "calendarCompName": "Kalender", - "calendarCompDesc": "Eine Kalenderkomponente zur Anzeige von Daten und Ereignissen, mit Ansichtsoptionen für Monat, Woche oder Tag.", - "calendarCompKeywords": "Kalender, Daten, Ereignisse, Planung", - "signatureCompName": "Unterschrift", - "signatureCompDesc": "Eine Komponente zur Erfassung digitaler Unterschriften, nützlich für Genehmigungs- und Verifizierungsprozesse.", - "signatureCompKeywords": "Unterschrift, digital, Genehmigung, Verifizierung", - "jsonLottieCompName": "Lottie Animationen", - "jsonLottieCompDesc": "Eine Komponente zur Anzeige von Lottie-Animationen, bietet leichtgewichtige und skalierbare Animationen basierend auf JSON-Daten.", - "jsonLottieCompKeywords": "Lottie, Animation, JSON, skalierbar", - "timelineCompName": "Zeitleiste", - "timelineCompDesc": "Eine Komponente zur Darstellung von Ereignissen oder Aktionen in einer chronologischen Reihenfolge, visuell dargestellt entlang einer linearen Zeitleiste.", - "timelineCompKeywords": "Zeitleiste, Ereignisse, chronologisch, Geschichte", - "commentCompName": "Kommentar", - "commentCompDesc": "Eine Komponente zum Hinzufügen und Anzeigen von Benutzerkommentaren, unterstützt verschachtelte Antworten und Benutzerinteraktion.", - "commentCompKeywords": "Kommentar, Diskussion, Benutzerinteraktion, Rückmeldung", - "mentionCompName": "Erwähnung", - "mentionCompDesc": "Eine Komponente, die das Erwähnen von Benutzern oder Tags innerhalb von Textinhalten unterstützt, typischerweise verwendet in sozialen Medien oder kollaborativen Plattformen.", - "mentionCompKeywords": "Erwähnung, Tag, Benutzer, soziale Medien", - "responsiveLayoutCompName": "Reaktionsfähiges Layout", - "responsiveLayoutCompDesc": "Eine Layoutkomponente, die entwickelt wurde, um sich verschiedenen Bildschirmgrößen und Geräten anzupassen, und so ein konsistentes Benutzererlebnis sicherstellt.", - "responsiveLayoutCompKeywords": "responsiv, Layout, anpassen, Bildschirmgröße", - "iconCompName": "Icons", - "iconCompDesc": "Verwenden Sie verschiedene Icons, um die visuelle Anziehungskraft und das Benutzererlebnis Ihrer Anwendung zu verbessern.", - "iconCompKeywords": "Icons, Piktogramme, Symbole, Formen", - "tourCompName": "Tour", - "tourCompDesc": "Eine Produktführung zur Anleitung der Benutzer.", - "tourCompKeywords": "Tour, Produktführung, Walkthrough, interaktiver Rundgang", - "hillchartCompName": "Hillchart", - "hillchartCompDesc": "Eine Visualisierungskomponente zur Darstellung von Projektmanagement-Zustandsdaten in einem Hill-Chart-Format.", - "hillchartCompKeywords": "projektmanagement, hill chart, visualisierung, daten", - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "Eine Komponente zur Anzeige interaktiver Karten unter Verwendung von OpenLayers, mit Unterstützung für verschiedene Kartenebenen und Funktionen.", - "openLayersGeoMapCompKeywords": "openlayers, geokarte, interaktiv, kartenebenen", - "chartsGeoMapCompName": "Geo Map Charts", - "chartsGeoMapCompDesc": "Eine Komponente zur Visualisierung von geografischen Daten auf interaktiven Karten mit dynamischen Diagrammen", - "chartsGeoMapCompKeywords": "Geokarte, Diagramme, Visualisierung, geografische Daten", - "bpmnEditorCompName": "BPMN-Editor", - "bpmnEditorCompDesc": "Eine Komponente zum Anzeigen, Erstellen und Bearbeiten von BPMN-Diagrammen, die verschiedene BPMN-Elemente und -Funktionen unterstützt.", - "bpmnEditorCompKeywords": "BPMN, Editor, Diagramme, Elemente, Arbeitsabläufe", - "turnstileCaptchaCompName": "Drehkreuz Captcha", - "turnstileCaptchaCompDesc": "Eine Captcha-Komponente zur Verifizierung von Benutzern gegenüber Bots.", - "turnstileCaptchaCompKeywords": "Captcha, Überprüfung, Identität, Sicherheit", - "pivotTableCompName": "Pivot Table", - "pivotTableCompDesc": "Ein Datenzusammenfassungs- und Analysewerkzeug zum Organisieren und Aggregieren von Daten in einem tabellarischen Format.", - "pivotTableCompKeywords": "Pivot-Tabelle, Daten, Analyse, Aggregation", - "funnelChartCompName": "Trichterdiagramm", - "funnelChartCompDesc": "Ein Visualisierungstool zur Darstellung der fortschreitenden Datenreduzierung in verschiedenen Phasen.", - "funnelChartCompKeywords": "trichterdiagramm, verkauf, umwandlungen, prozess", - "gaugeChartCompName": "Pegelkarte", - "gaugeChartCompDesc": "Ein Diagramm, das Daten als Messwert auf einer Skala anzeigt. Es ist nützlich, um den Status oder das Niveau von etwas anzuzeigen.", - "gaugeChartCompKeywords": "Messdiagramm, Metriken, Leistung, Status", - "sankeyChartCompName": "Sankey-Diagramm", - "sankeyChartCompDesc": "Ein Flussdiagramm, bei dem die Breite der Pfeile proportional zur Flussrate ist. Es dient zur Darstellung von Energie-, Material- oder Kostentransfers.", - "sankeyChartCompKeywords": "Sankey-Diagramm, Fluss, Energie, Kosten", - "candleStickChartCompName": "Candlestick-Diagramm", - "candleStickChartCompDesc": "Eine Art von Finanzdiagramm, das zur Beschreibung von Kursbewegungen eines Wertpapiers, Derivats oder einer Währung verwendet wird.", - "candleStickChartCompKeywords": "Candlestick-Diagramm, Aktien, Handel, Finanzen", - "radarChartCompName": "Radarkarte", - "radarChartCompDesc": "Eine grafische Methode zur Darstellung von multivariaten Daten in Form eines zweidimensionalen Diagramms von drei oder mehr quantitativen Variablen.", - "radarChartCompKeywords": "Radardiagramm, multivariate, Leistungsanalyse", - "heatmapChartCompName": "Heatmap-Diagramm", - "heatmapChartCompDesc": "Eine grafische Darstellung von Daten, bei der einzelne Werte als Farben dargestellt werden.", - "heatmapChartCompKeywords": "Heatmap, Datenvisualisierung, Intensität", - "graphChartCompName": "Graphisches Diagramm", - "graphChartCompDesc": "Ein Diagramm, das ein Netzwerk von Knoten darstellt, die durch Kanten verbunden sind, und das zur Darstellung von Verbindungen und Beziehungen nützlich ist.", - "graphChartCompKeywords": "Diagramm, Netzwerke, Beziehungen, Knoten", - "treeChartCompName": "Baumdiagramm", - "treeChartCompDesc": "Ein Diagramm, das die Hierarchie in einer baumartigen Struktur visuell darstellt und die Beziehungen zwischen den verschiedenen Knoten zeigt.", - "treeChartCompKeywords": "Baumdiagramm, Hierarchie, Organisation", - "treemapChartCompName": "Baumdiagramm", - "treemapChartCompDesc": "Ein Diagramm, das verschachtelte Rechtecke zur proportionalen Darstellung hierarchischer Daten verwendet.", - "treemapChartCompKeywords": "Baumstruktur, Hierarchie, Datenvisualisierung", - "sunburstChartCompName": "Sunburst-Karte", - "sunburstChartCompDesc": "Eine radiale raumfüllende Visualisierungstechnik, die hierarchische Beziehungen durch Schichten eines Kreises veranschaulicht.", - "sunburstChartCompKeywords": "Sonnenglockentabelle, radial, Hierarchie", - "themeriverChartCompName": "Thema Flusskarte", - "themeriverChartCompDesc": "Eine Visualisierung, die einem Flussdiagramm ähnelt, das die Veränderungen eines Datensatzes im Laufe der Zeit über Kategorien hinweg zeigt.", - "themeriverChartCompKeywords": "Thema Fluss, Zeitreihen, Trends", - "basicChartCompName": "Grundlegende Tabelle", - "basicChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Schaubildern.", - "basicChartCompKeywords": "Diagramm, Grafik, Daten, Visualisierung", - "shapeCompName": "Formen", - "shapeCompDesc": "Eine Sammlung geometrischer Formen zur Verwendung in Diagrammen, Illustrationen und Visualisierungen.", - "shapeCompKeywords": "Formen, geometrisch, Diagramme, Illustrationen", - "ganttChartCompName": "Gantt-Diagramm", - "ganttChartCompDesc": "Ein Diagramm, das einen Projektplan mit den Start- und Endterminen von Elementen und Abhängigkeiten darstellt.", - "ganttChartCompKeywords": "Gantt-Diagramm, Projektmanagement, Zeitplan", - "kanbanCompName" : "Kanban Board (preview!)", - "kanbanCompDesc" : "Eine visuelle Organisationsmethode zur Verwaltung von Aufgaben und Workflows in einem Board mit Spalten und Karten.", - "kanbanCompKeywords" : "kanban, board, workflow, tasks", - "colorPickerCompName": "Farbwähler", - "colorPickerCompDesc": "Intuitive Farbauswahl zur individuellen Gestaltung.", - "colorPickerCompKeywords": "farbe, auswahl, anpassung", - "floatButtonCompName": "Schwimmer-Taste", - "floatButtonCompDesc": "Eine schwebende Aktionstaste für markante und schnelle Aktionen.", - "floatButtonCompKeywords": "Schwimmende Taste, Aktion, Schnell", - "avatarCompName": "Avatar", - "avatarCompDesc": "Zeigt Benutzeravatare oder Profilbilder zur persönlichen Identifizierung an.", - "avatarCompKeywords": "Avatar, Profilbild, Benutzerkennung", - "avatarGroupCompName": "Avatar-Gruppe", - "avatarGroupCompDesc": "Eine Gruppe von Avataren, die mehrere Benutzer oder Entitäten auf kompakte und visuell ansprechende Weise repräsentieren.", - "avatarGroupCompKeywords": "Avatar-Gruppe, Benutzer, Entitäten, kompakt", - "transferName": "Übertragung", - "transferDesc": "Erleichtert den Datentransfer zwischen zwei Listen mit Drag-and-Drop-Funktionalität.", - "transferKeywords": "Übertragung, Daten, Drag-and-Drop", - "cardCompName": "Inhalt Karte", - "cardCompDesc": "Eine Kartenkomponente zur strukturierten Darstellung von Informationen oder Inhalten.", - "cardCompKeywords": "Karte, Information, Inhalt, Anzeige", - "timerCompName": "Zeitschaltuhr", - "timerCompDesc": "Eine Komponente, die einen Countdown oder die verstrichene Zeit anzeigt, nützlich für die Verfolgung von Zeiträumen und Fristen.", - "timerCompKeywords": "Timer, Countdown, verstrichene Zeit, Verfolgung, Dauern, Fristen", - }, - "comp": { - ...en.comp, - - "menuViewDocs": "Dokumentation ansehen", - "menuViewPlayground": "Interaktiven Spielplatz ansehen", - "menuUpgradeToLatest": "Upgrade auf die neueste Version", - "nameNotEmpty": "Kann nicht leer sein", - "nameRegex": "Muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern und Unterstriche (_) enthalten", - "nameJSKeyword": "Kann kein JavaScript-Schlüsselwort sein", - "nameGlobalVariable": "Kann kein globaler Variablenname sein", - "nameExists": "Name {name} Existiert bereits", - "getLatestVersionMetaError": "Die neueste Version konnte nicht abgerufen werden, bitte versuche es später.", - "needNotUpgrade": "Die aktuelle Version ist bereits die neueste.", - "compNotFoundInLatestVersion": "Aktuelle Komponente nicht in der neuesten Version gefunden.", - "upgradeSuccess": "Erfolgreich auf die neueste Version upgegradet.", - "searchProp": "Suche", - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - - "retry": "Wiederholen", - "resetAfterSubmit": "Zurücksetzen nach erfolgreichem Absenden des Formulars", - "jsonSchema": "JSON-Schema", - "uiSchema": "UI Schema", - "schemaTooltip": "Siehe", - "defaultData": "Vorausgefüllte Formulardaten", - "dataDesc": "Aktuelle Formulardaten", - "required": "Erforderlich", - "maximum": "Der Maximalwert ist {value}", - "minimum": "Der Mindestwert ist {value}", - "exclusiveMaximum": "Sollte kleiner sein als {value}", - "exclusiveMinimum": "Sollte größer sein als {value}", - "multipleOf": "Sollte ein Vielfaches von {value} sein", - "minLength": "Mindestens {value} Zeichen", - "maxLength": "Höchstens {value} Zeichen", - "pattern": "Sollte dem Muster {value} entsprechen", - "format": "Sollte dem Format {value} entsprechen", - }, - "select": { - ...en.select, - - "inputValueDesc": "Eingabe Suchwert", - }, - "customComp": { - ...en.customComp, - - "text": "Es ist ein guter Tag.", - "triggerQuery": "Trigger-Abfrage", - "updateData": "Daten aktualisieren", - "updateText": "Ich bin auch in guter Stimmung, jetzt meine eigene Komponente mit Lowcoder zu entwickeln!", - "sdkGlobalVarName": "Lowcoder", - "data": "Daten, die du an die benutzerdefinierte Komponente übergeben willst", - "code": "Code deiner benutzerdefinierten Komponente", - }, - "tree": { - ...en.tree, - - "placeholder": "Bitte auswählen", - "selectType": "Typ auswählen", - "noSelect": "Keine Auswahl", - "singleSelect": "Einzeln auswählen", - "multiSelect": "Mehrfachauswahl", - "checkbox": "Kontrollkästchen", - "checkedStrategy": "Geprüfte Strategie", - "showAll": "Alle Knotenpunkte", - "showParent": "Nur übergeordnete Knotenpunkte", - "showChild": "Nur Kind-Knoten", - "autoExpandParent": "Auto Expand Elternteil", - "checkStrictly": "Streng prüfen", - "checkStrictlyTooltip": "TreeNode genau prüfen; Parent TreeNode und Children TreeNodes sind nicht assoziiert", - "treeData": "Baumdaten", - "treeDataDesc": "Aktuelle Baumdaten", - "value": "Standardwerte", - "valueDesc": "Aktuelle Werte", - "expanded": "Erweitert Werte", - "expandedDesc": "Aktuelle erweiterte Werte", - "defaultExpandAll": "Standard Alle Knoten erweitern", - "showLine": "Linie anzeigen", - "showLeafIcon": "Blattsymbol anzeigen", - "treeDataAsia": "Asien", - "treeDataChina": "China", - "treeDataBeijing": "Peking", - "treeDataShanghai": "Shanghai", - "treeDataJapan": "Japan", - "treeDataEurope": "Europa", - "treeDataEngland": "England", - "treeDataFrance": "Frankreich", - "treeDataGermany": "Deutschland", - "treeDataNorthAmerica": "Nord-Amerika", - "helpLabel": "Knotenpunkt Etikett", - "helpValue": "Einzigartiger Knotenpunktwert im Baum", - "helpChildren": "Kinder Knoten", - "helpDisabled": "Deaktiviert den Knotenpunkt", - "helpSelectable": "Ob der Knoten wählbar ist (Single/Multi Select Typ)", - "helpCheckable": "Ob ein Kontrollkästchen angezeigt werden soll (Checkbox-Typ)", - "helpDisableCheckbox": "Deaktiviert das Kontrollkästchen (Checkbox-Typ)", - }, - "moduleContainer": { - ...en.moduleContainer, - - "eventTest": "Veranstaltungstest", - "methodTest": "Methode Test", - "inputTest": "Eingangstest", - }, - "password": { - ...en.password, - - "label": "Passwort", - "placeholder": "Bitte gib ein sicheres Passwort ein", - "conformLabel": "Passwort Bestätigung", - "conformPlaceholder": "Bitte das Passwort zur Bestätigung nochmal eingeben", - "visibilityToggle": "Sichtbarkeit anzeigen Toggle", - }, - "richTextEditor": { - ...en.richTextEditor, - - "toolbar": "Symbolleiste anpassen", - "toolbarDescription": "Du kannst die Symbolleiste individuell anpassen. Weitere Informationen findest du unter: https://quilljs.com/docs/modules/toolbar/.", - "placeholder": "Bitte eingeben...", - "hideToolbar": "Symbolleiste ausblenden", - "content": "Inhalt", - "title": "Titel", - "save": "Speichern", - "link": "Link:", - "edit": "bearbeiten", - "remove": "entfernen", - "defaultValue": "Basis Inhalt", - }, - "floatButton": { - ...en.floatButton, - - "custom": "Benutzerdefiniert", - "backTop": "Zurück Oben", - "buttonType": "Button Type", - "buttonShape": "Taste Form", - "square": "Platz", - "circle": "Kreis", - "description": "Beschreibung", - "badge": "Abzeichen", - "primary": "Primäre Seite", - "default": "Standard", - "buttonTheme": "Schaltfläche Thema", - "badgeColor": "Farbe des Abzeichens", - "dot": "Abzeichen als Punkt", - "hidden": "Versteckt", - "visibilityHeight": "Sichtbarkeit Höhe", - "visibilityHeightDesc": "Scrollen bis zu einer bestimmten Höhe, bevor die Schaltfläche \"Zurück zum Anfang\" angezeigt wird, 0 wird immer angezeigt, Bearbeitungsmodus kann keine Vorschau in Echtzeit anzeigen", - }, - "colorPicker": { - ...en.colorPicker, - - "trigger": "Auslöser Ereignis", - "click": "Klicken Sie auf", - "hover": "schweben", - "disabledAlpha": "Alpha-Auswahl deaktivieren", - "recommended": "Empfohlen", - "showPresets": "Farbvoreinstellungen anzeigen", - }, - "badge": { - ...en.badge, - - "showCloseButton": "Schaltfläche \"Schließen\" anzeigen", - "Type": "Abzeichen Typ", - "Count": "Abzeichen zählen", - "Size": "Größe des Abzeichens", - "SizeDefault": "Standard", - "SizeSmall": "Klein", - "overflowCount": "Überlaufzahl", - "Title": "Titel des Abzeichens", - "dot": "Punkt", - "number": "Nummer", - "tooltip": "QuickInfo", - }, - "gantt": { - ...en.gantt, - - "key": "Schlüssel", - "title": "Titel", - "project": "Projekt", - "from": "Von", - "minute": "Minute", - "hour": "Stunde", - "day": "Tag", - "week": "Woche", - "month": "Monat", - "year": "Jahr", - "quarter": "Quarter", - "tasks": "Aufgaben Daten", - "level": "Ebene", - "durationUnit": "Duration unit", - "duration": "Duration", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Woche #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "Baum", - "ColumnsData": "Spalten Daten", - "allowChangeTask": "DbClick Aufgabe", - "allowAddLink": "Link hinzufügen", - "allowLinkDelete": "Link Löschen", - "allowProgressDrag": "Fortschritt ziehen", - "allowTaskDrag": "Aufgabe Ziehen", - "links": "Links Data", - "dataFormat": "Datenanalyse Format", - "handleDateChange": "Handhabung von Aufgabenänderungen", - "handleTaskChange": "Handhabung von Aufgabenänderungen", - "handleAddedLink": "Handle Added Link", - "handleDeletedLink": "Gelöschten Link behandeln", - "handleProgressDrag": "Handle Progress Drag", - "showTodayMark": "Heute anzeigen Mark", - "resize": "Größe ändern", - "otherEvents": "Andere Ereignisse", - "openAllBranchInit": "Alle Filialen öffnen Init", - "date": "Date", - "text": "Text", - "progress": "Fortschritte", - "width": "Breite", - "ColumnsType": "Spalten Typ", - "currentId": "Aktuelle ID", - "currentObject": "Aktuelles Objekt", - "addTask": "Aufgabe(n) hinzufügen", - "taskObject": "Aufgabe Objekt", - "taskObjectDesc": "Unterstützt Arrays von Tasks oder einzelne Task-Objekte", - "linkID": "Link-ID", - "linkIDDesc": "Unterstützt Arrays von Link-IDs oder einzelne Link-Objekte", - "removeTask": "Aufgabe entfernen", - "taskID": "Aufgaben-ID", - "taskIDDesc": "Unterstützt Arrays von IDs oder einzelne IDs", - "add": "hinzufügen", - "expandingAll": "Alle ausbauen", - "collapsingAll": "Alle kollabieren", - "addTaskFail": "Die Additionsaufgabe ist fehlgeschlagen, und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", - "addLinkFail": "Der Additionslink ist fehlgeschlagen und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", - "removeTaskFail": "Die Löschaufgabe ist fehlgeschlagen, und der Parametertyp sollte string oder string array sein", - "removeLinkFail": "Die Löschverknüpfungen sind fehlgeschlagen, und der Parametertyp sollte string array sein", - "otherData": "Andere Daten{i}", - "projectText": "Projekt #{i}", - "taskText": "Aufgabe #{i}", - "AutoCalculateProgress": "Automatischer Berechnungsfortschritt", - "allowProjectDrag": "Ziehen von Projekten zulassen", - "showColumns": "Spalten anzeigen", - "exportToPNG": "In PNG exportieren", - "exportToPDF": "In PDF exportieren", - "exportToExcel": "Nach Excel exportieren", - "progressLowBg": "Niedrig BgColor", - "progressLowColor": "Niedrige Progress-Farbe", - "progressMediumBg": "Medium BgColor", - "progressMediumColor": "Medium Progress Farbe", - "progressHighBg": "Höhe BgColor", - "progressHighColor": "Höhe Fortschritt Farbe", - "progresscompletedColor": "Abgeschlossener Fortschritt Farbe", - "lowProgressLine": "Niedrige Progressionslinie", - "mediumProgressLine": "Mittlere Fortschrittslinie", - "SegmentedColor": "Fortschritt Segmentierte Farbe", - "link_f2s": "Verbindung F2S", - "link_s2s": "Link S2S", - "link_f2f": "Link F2F", - "link_s2f": "Link S2F", - "weekScale": "#{i},", - "showHolidays": "Feiertage anzeigen", - "StatutoryHolidays": "Gesetzliche Feiertage Daten", - "skipOffTime": "Ausblenden der Nicht-Arbeitszeit", - "weekend": "Wochenende", - "weekendSelected": "Ausgewähltes Wochenende", - "noWorkHour": "Keine Arbeitsstunde", - "noWorkHourSelected": "keine Arbeitsstunde ausgewählt", - "showWorkTimes": "Arbeitszeiten anzeigen", - "workTimeData": "Arbeitszeitdaten", - "fit": "fit", - "manual": "Handbuch", - "scaleMode": "Skalenmodus", - "startDate": "Start Date", - "endDate": "End Date", - "addLink": "Link(s) hinzufügen", - "linkObject": "link Objekt", - "removeLink": "Link entfernen", - "allowSort": "Sortieren zulassen", - "showTask": "Aufgabe anzeigen", - "toggleOnDBClick": "Umschalten auf DBClick", - "sortOptions": "Erste Sortieroptionen", - "rowHeight": "Zeilenhöhe", - "showTooltip": "Tooltip anzeigen", - "tooltipTemplates": "Tooltip-Vorlage", - "allowResizeTask": "Größenänderung der Aufgabe zulassen", - "projectColor": "Projekt Farbe", - "projectColorBg": "Projekt BgColor", - "taskColor": "Aufgabe Farbe", - "taskColorBg": "Aufgabe BgColor", - "milestoneColor": "Meilenstein Farbe", - "highlightOverdue": "Highlight Überfällig", - "overdueColor": "Überfällige Farbe", - "overdueBgColor": "Überfällig BgColor", - "projectCompletedBgColor": "Abgeschlossenes Projekt BgColor", - "projectCompletedColor": "Projekt fertiggestellt Farbe", - "tag": "Tag", - "tasksTableWidth": "Aufgaben Tabellenbreite", - "allowErrorMessage": "Fehlermeldung zulassen", - "currentProjectId": "Aktuelle Projekt-ID", - "currentProjectLastTask": "Aktuelles Projekt Letzte Aufgabe", - "onlySortProject": "Nur Projekt sortieren", - }, - "transfer": { - ...en.transfer, - - "sourceTitle": "Source Data", - "targetTitle": "Ziel-Daten", - "content": "Inhalt {i}", - "items": "Artikel", - "targetKeys": "Ausgewählte Schlüssel", - "oneWay": "Einweg", - "pagination": "Paginierung", - "pageSize": "Page Size", - "allowSearch": "Suche zulassen", - "selectedKeys": "Ausgewählte Schlüssel", - "searchInfo": "Infos zur Suche", - "targerObject": "Targer Object", - }, - "avatarGroup": { - ...en.avatarGroup, - - "maxCount": "Maximale Anzahl", - "avatarSize": "Avatar Größe", - "autoColor": "Auto Farbe", - "alignment": "Ausrichtung", - "currentAvatar": "Aktueller Avatar", - }, - "avatarComp": { - ...en.avatarComp, - - "square": "Platz", - "circle": "Kreis", - "icon": "Symbol", - "shape": "Form", - "counts": "Abzeichen", - "title": "Titel", - "src": "src", - "avatarCompTooltip": "Die Anzeigepriorität ist: Bild -> Zeichen -> Symbol. Je nachdem, was zuerst verfügbar ist.", - "iconSize": "Icon Größe", - "avatarBackground": "Hintergrund", - "label": "Etikett", - "caption": "Bildunterschrift", - "labelPosition": "Position", - "alignmentPosition": "Ausrichtung", - "text": "Text", - "enableDropDown": "Enable DropDown", - "containerBackground": "Hintergrund", - }, - "card": { - ...en.card, - - "cardType": "Karte Typ", - "common": "gemeinsame", - "custom": "benutzerdefinierte", - "default": "Standard", - "small": "klein", - "showTitle": "Titel anzeigen", - "title": "Titel", - "more": "Mehr", - "extraTitle": "Aufruf zum Handeln", - "CoverImg": "Titelbild", - "imgSrc": "Bildquelle", - "showMeta": "Inhalt anzeigen", - "metaTitle": "Inhalt Titel", - "metaDesc": "Content Beschreibung", - "imgHeight": "Bildhöhe", - "showActionIcon": "Aktionsoptionen anzeigen", - "actionOptions": "Handlungsoptionen", - "menu": "Menü {i}", - "hoverColor": "Hover Farbe", - "IconColor": "Icon Farbe", - "titleSize": "Titel Größe", - }, - "timer": { - ...en.timer, - - "timerState": "Timer Zustand", - "elapsedTime": "Verstrichene Zeit", - "timer": "Zeitschaltuhr", - "countdown": "Countdown", - "defaultValue": "Standardwert", - "timerType": "Timer Type", - "start": "Start", - "pause": "Pause", - "resume": "Lebenslauf", - "reset": "Reset", - "startPause": "Start/Pause", - "hideButton": "Schaltfläche \"Ausblenden", - "fontColor": "Schriftfarbe", - }, - "iconComp": { - ...en.iconComp, - - "icon": "Icon", - "autoSize": "Symbol AutoSize", - "iconSize": "Icon Größe", - }, - "numberInput": { - ...en.numberInput, - - "formatter": "Format", - "precision": "Präzision", - "allowNull": "Nullwert zulassen", - "thousandsSeparator": "Tausendertrennzeichen anzeigen", - "controls": "Schaltflächen zum Erhöhen/Verringern anzeigen", - "step": "Schritt", - "standard": "Standard", - "percent": "Prozente", - }, - "slider": { - ...en.slider, - - "step": "Schritt", - "stepTooltip": "Der Wert muss größer als 0 und durch (Max-Min) teilbar sein", - "vertical": "Vertikale Ausrichtung", - }, - "rating": { - ...en.rating, - - "max": "Maximale Bewertung", - "allowHalf": "Halbe Bewertungspunkte zulassen", - }, - "optionsControl": { - ...en.optionsControl, - - "optionList": "Optionen", - "option": "Option", - "optionI": "Option {i}", - "viewDocs": "Docs ansehen", - "tip": "Die Variablen \\'item\\' und \\'i\\' repräsentieren den Wert und den Index jedes Elements in der Datenmatrix", - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - - "value": "Wert / Schlüssel", - "valueTooltip": "Step Value muss eine Zahl sein. Für den ersten Schritt muss er gleich dem Anfangswert sein. Die Zahlen müssen in konsistenter und aufsteigender Reihenfolge stehen.", - "title": "Schritt Titel", - "subTitle": "Schritt Untertitel", - "description": "Schritt Beschreibung", - "status": "Schritt Status", - "icon": "Schritt-Symbol", - }, - "step": { - ...en.step, - - "initialValue": "Start-Nummern bei", - "initialValueTooltip": "Wo soll die visuelle Nummerierung beginnen. Muss 1 oder höher sein.", - "valueDesc": "Aktueller Wert", - "size": "Schritte Größe", - "sizeSmall": "Klein", - "sizeDefault": "Standard", - "percent": "Schritte in Prozent", - "type": "Schritte Typ", - "typeDefault": "Standard", - "typeNavigation": "Navigation", - "typeInline": "Inline", - "direction": "Schritte Richtung", - "directionVertical": "Vertikal", - "directionHorizontal": "Horizontal", - "labelPlacement": "Schritte Etikettenplatzierung", - "status": "Schritte Status", - "statusWait": "Warten", - "statusProcess": "Prozess", - "statusFinish": "Oberfläche", - "statusError": "Fehler", - "showDots": "Punkte statt Symbole anzeigen", - "showIcons": "Icons statt Symbole anzeigen", - "responsive": "Ansprechbar", - "selectable": "Wählbar", - }, - "coloredTagOptionControl": { - ...en.coloredTagOptionControl, - - "tag": "Tag Text", - "color": "Farbe", - "icon": "Icon", - }, - "radio": { - ...en.radio, - - "options": "Optionen", - "horizontal": "Horizontal", - "horizontalTooltip": "Das horizontale Layout wickelt sich selbst ein, wenn es keinen Platz mehr hat", - "vertical": "Vertikal", - "verticalTooltip": "Das vertikale Layout wird immer in einer einzigen Spalte angezeigt", - "autoColumns": "Auto Kolonne", - "autoColumnsTooltip": "Das Auto-Spalten-Layout ordnet die Reihenfolge automatisch neu an, wenn es der Platz erlaubt, und zeigt sie als mehrere Spalten an", - }, - "cascader": { - ...en.cascader, - - "options": "JSON-Daten zur Anzeige kaskadierender Auswahlen", - }, - "selectInput": { - ...en.selectInput, - - "valueDesc": "Aktuell ausgewählter Wert", - "selectedIndexDesc": "Der Index des aktuell ausgewählten Wertes oder -1, wenn kein Wert ausgewählt ist", - "selectedLabelDesc": "Die Bezeichnung des aktuell ausgewählten Wertes", - }, - "file": { - ...en.file, - - "typeErrorMsg": "Muss eine Zahl mit einer gültigen Dateigrößeneinheit oder eine einheitenlose Anzahl von Bytes sein.", - "fileEmptyErrorMsg": "Upload fehlgeschlagen. Die Dateigröße ist leer.", - "fileSizeExceedErrorMsg": "Upload fehlgeschlagen. Die Dateigröße übersteigt das Limit.", - "minSize": "Min Größe", - "minSizeTooltip": "Die Mindestgröße der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", - "maxSize": "Max Größe", - "maxSizeTooltip": "Die maximale Größe der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", - "single": "Einzeln", - "multiple": "Mehrere", - "directory": "Verzeichnis", - "upload": "durchsuchen", - "fileType": "Dateitypen", - "reference": "Bitte beachten Sie", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Eindeutige Dateityp-Angaben", - "uploadType": "Upload Typ", - "showUploadList": "Upload-Liste anzeigen", - "maxFiles": "Max Dateien", - "filesValueDesc": "Der Inhalt der aktuell hochgeladenen Datei ist Base64-kodiert", - "filesDesc": "Liste der aktuell hochgeladenen Dateien. Für Details, siehe", - "clearValueDesc": "Alle Dateien löschen", - "parseFiles": "Dateien parsen", - "parsedValueTooltip1": "Wenn parseFiles True ist, werden die hochgeladenen Dateien als Objekt, Array oder String analysiert. Auf die geparsten Daten kann über das Array parsedValue zugegriffen werden.", - "parsedValueTooltip2": "Unterstützt Excel-, JSON-, CSV- und Textdateien. Andere Formate geben Null zurück.", - }, - "date": { - ...en.date, - - "format": "Format", - "formatTip": "Unterstützung: \\'JJJJ-MM-TT HH:mm:ss\\', \\'JJJJ-MM-TT\\', \\'Zeitstempel\\'", - "reference": "Bitte beachten Sie", - "showTime": "Zeit zeigen", - "start": "Startdatum", - "end": "Enddatum", - "year": "Jahr", - "quarter": "Quartal", - "month": "Monat", - "week": "Woche", - "date": "Datum", - "clearAllDesc": "Alle löschen", - "resetAllDesc": "Alle zurücksetzen", - "placeholder": "Datum auswählen", - "placeholderText": "Platzhalter", - "startDate": "Startdatum", - "endDate": "Enddatum", - }, - "time": { - ...en.time, - - "start": "Startzeit", - "end": "Endzeit", - "formatTip": "Unterstützung: \\'HH:mm:ss\\', \\'Zeitstempel\\'", - "format": "Format", - "placeholder": "Zeit wählen", - "placeholderText": "Platzhalter", - "startTime": "Startzeit", - "endTime": "Endzeit", - }, - "button": { - ...en.button, - - "prefixIcon": "Präfix-Symbol", - "prefixText": "Präfix Text", - "suffixIcon": "Suffix-Symbol", - "icon": "Icon", - "iconSize": "Icon Größe", - "button": "Formular Schaltfläche", - "formToSubmit": "Formular zum Einreichen", - "default": "Standard", - "submit": "einreichen", - "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", - "loadingDesc": "Befindet sich der Button im Ladezustand? Wenn wahr, wird die aktuelle Schaltfläche geladen", - "formButtonEvent": "Veranstaltung", - }, - "link": { - ...en.link, - - "link": "Link zu", - "textDesc": "Derzeit auf dem Link angezeigter Text", - "loadingDesc": "Befindet sich der Link im Ladezustand? Wenn wahr, wird der aktuelle Link geladen", - }, - "scanner": { - ...en.scanner, - - "text": "Klicken Sie auf Scannen", - "camera": "Kamera {index}", - "changeCamera": "Kamera wechseln", - "continuous": "Kontinuierliches Scannen", - "uniqueData": "Doppelte Daten ignorieren", - "maskClosable": "Klicke auf die Maske zum Schließen", - "errTip": "Bitte verwende diese Komponente unter HTTPS oder Localhost", - }, - "dropdown": { - ...en.dropdown, - - "onlyMenu": "Anzeige nur mit Etikett", - "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", - "triggerMode": "Triggermodus" - }, - "textShow": { - ...en.textShow, - - "text": "### 👋 Hallo, {name}", - "valueTooltip": "Markdown unterstützt die meisten HTML-Tags und -Attribute. iframe, Script und andere Tags sind aus Sicherheitsgründen deaktiviert.", - "verticalAlignment": "Vertikale Ausrichtung", - "horizontalAlignment": "Horizontale Ausrichtung", - "textDesc": "Im aktuellen Textfeld angezeigter Text", - }, - "table": { - ...en.table, - - "editable": "Editierbar", - "columnNum": "Rubriken", - "viewModeResizable": "Spaltenbreite vom Benutzer angepasst", - "viewModeResizableTooltip": "Ob Nutzer die Spaltenbreite anpassen können.", - "visibleResizables": "Handles zur Größenänderung anzeigen", - "visibleResizablesTooltip": "Sichtbare Größenänderungsgriffe im Tabellenkopf anzeigen.", - "showFilter": "Schaltfläche Filter anzeigen", - "showRefresh": "Schaltfläche \"Aktualisieren\" anzeigen", - "showDownload": "Download-Schaltfläche anzeigen", - "columnSeparator": "Spaltentrennzeichen", - "columnSeparatorTooltip": "Spaltentrennzeichen („Trennzeichen“) in der heruntergeladenen CSV-Datei. \n\nEmpfehlungen:\n- Komma (,)\n- Semikolon (;)\n- Pipe (|)\n- Tabulator (\\t)", - "columnSetting": "Schaltfläche Spalteneinstellung anzeigen", - "searchText": "Text suchen", - "searchTextTooltip": "Suche und Filterung der in der Tabelle dargestellten Daten", - "showQuickJumper": "Quick Jumper anzeigen", - "hideOnSinglePage": "Auf einzelner Seite ausblenden", - "showSizeChanger": "Schaltfläche Größenänderer anzeigen", - "pageSizeOptions": "Optionen für die Seitengröße", - "pageSize": "Seitengröße", - "total": "Gesamtzahl der Zeilen", - "totalTooltip": "Der Standardwert ist die Anzahl der aktuellen Datenelemente, die aus der Abfrage abgerufen werden können, z. B: \\'{{query1.data[0].count}}\\'", - "filter": "Filter", - "filterRule": "Filter-Regel", - "chooseColumnName": "Spalte wählen", - "chooseCondition": "Bedingung wählen", - "clear": "Klar", - "columnShows": "Säule zeigt", - "selectAll": "Alle auswählen", - "and": "Und", - "or": "Oder", - "contains": "Enthält", - "notContain": "Enthält nicht", - "equals": "Entspricht", - "isNotEqual": "Ist nicht gleich", - "isEmpty": "Ist leer", - "isNotEmpty": "Ist nicht leer", - "greater": "Größer als", - "greaterThanOrEquals": "Größer als oder gleich", - "lessThan": "Weniger als", - "lessThanOrEquals": "Kleiner als oder gleich", - "action": "Aktion", - "columnValue": "Spalte Wert", - "columnValueTooltip": "\\'{{currentCell}}\\': Aktuelle Zelldaten\n \\'{{currentRow}}\\': Aktuelle Zeilendaten\n \\'{{currentIndex}}\\': Aktueller Datenindex (beginnend bei 0)\n Beispiel: \\'{{currentCell * 5}}\\' Show 5 Times the Original Value Data.", - "columnTooltip": "Spalten-Tooltip", - "imageSrc": "Bildquelle", - "imageSize": "Bildgröße", - "columnTitle": "Titel anzeigen", - "columnTitleTooltip": "Titel-Tooltip", - "showTitle": "Titel anzeigen", - "showTitleTooltip": "Spaltentitel im Tabellenkopf ein-/ausblenden", - "sortable": "Sortierbar", - "align": "Ausrichtung", - "fixedColumn": "Feste Säule", - "autoWidth": "Auto Breite", - "customColumn": "Benutzerdefinierte Säule", - "auto": "Auto", - "fixed": "Festgelegt", - "columnType": "Säule Typ", - "dataMapping": "Datenzuordnung", - "numberStep": "Schritt", - "numberStepTooltip": "Die Zahl, auf die der aktuelle Wert erhöht oder verringert wird. Es kann eine ganze Zahl oder eine Dezimalzahl sein", - "precision": "Präzision", - "float": "Schwimmer", - "prefix": "Präfix", - "suffix": "Nachsilbe", - "avatars": "Avatare", - "avatarGroupAlignment": "Ausrichtung der Avatare", - "text": "Text", - "number": "Nummer", - "link": "Link zu", - "links": "Links", - "tag": "Tag", - "select": "Wählen Sie", - "dropdown": "Auswahlliste", - "date": "Datum", - "dateTime": "Datum Uhrzeit", - "badgeStatus": "Status", - "button": "Taste", - "image": "Bild", - "boolean": "Boolesche", - "switch": "Schalter", - "rating": "Bewertung", - "progress": "Fortschritt", - "option": "Operation", - "optionList": "Betriebsliste", - "option1": "Betrieb 1", - "status": "Status", - "statusTooltip": "Optionale Werte: Erfolg, Fehler, Standard, Warnung, Verarbeitung", - "primaryButton": "Primäre", - "defaultButton": "Standard", - "type": "Typ", - "tableSize": "Tabelle Größe", - "hideHeader": "Tabellenkopfzeile ausblenden", - "hideToolbar" : "Tabellenfußzeile ausblenden", - "fixedHeader": "Feste Tabellenüberschrift", - "fixedHeaderTooltip": "Kopfzeile wird für vertikal scrollbare Tabelle fixiert", - "fixedToolbar": "Feste Symbolleiste", - "fixedToolbarTooltip": "Die Symbolleiste wird für vertikal scrollbare Tabellen je nach Position fixiert", - "hideBordered": "Spaltenumrandung ausblenden", - "showHeaderGridBorder": "Kopfzeilen-Gitterrahmen anzeigen", - "showRowGridBorder": "Rand des Zeilenrasters anzeigen", - "showVerticalRowGridBorder": "Vertikalen Zeilenraster-Rahmen anzeigen", - "showHorizontalRowGridBorder": "Horizontalen Zeilenraster-Rahmen anzeigen", - "deleteColumn": "Spalte löschen", - "confirmDeleteColumn": "Bestätige Spalte löschen: ", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "Die aktuellen Daten ändern sich. Klicke auf , um die Spalte neu zu generieren.", - "changeSetDesc": "Ein Objekt, das Änderungen an einer bearbeitbaren Tabelle darstellt, enthält nur die geänderte Zelle. Zeilen gehen zuerst und Spalten gehen als zweites.", - "selectedRowDesc": "Liefert Daten für die aktuell ausgewählte Zeile und zeigt die Zeile an, die ein Klick-Ereignis auslöst, wenn der Nutzer auf eine Schaltfläche/Link in der Zeile klickt", - "selectedRowsDesc": "Nützlich im Mehrfachauswahlmodus, gleich wie SelectedRow", - "pageNoDesc": "Aktuelle Anzeigeseite, beginnend mit 1", - "pageSizeDesc": "Wie viele Zeilen pro Seite", - "sortColumnDesc": "Der Name der aktuell ausgewählten sortierten Spalte", - "sortDesc": "Ob die aktuelle Zeile in absteigender Reihenfolge ist", - "pageOffsetDesc": "Der aktuelle Beginn des Blätterns, der für das Blättern zum Abrufen von Daten verwendet wird. Beispiel: Select * from Users Limit \\'{{table1.pageSize}}\\' Versatz \\'{{table1.pageOffset}}\\'", - "displayDataDesc": "In der aktuellen Tabelle angezeigte Daten", - "selectedIndexDesc": "Ausgewählter Index in der Datenanzeige", - "filterDesc": "Parameter für die Tabellenfilterung", - "dataDesc": "Die JSON-Daten für die Tabelle", - "saveChanges": "Änderungen speichern", - "cancelChanges": "Änderungen abbrechen", - "rowSelectChange": "Zeile auswählen Ändern", - "rowClick": "Reihe Klicken", - "rowExpand": "Reihe verkleinern", - "rowShrink": "Zeilenverkleinerung", - "search": "Suchen", - "download": "Herunterladen", - "columnEdited": "Spalte bearbeitet", - "filterChange": "Filterwechsel", - "sortChange": "Sortieren Ändern", - "pageChange": "Seitenwechsel", - "refresh": "Auffrischen", - "rowColor": "Bedingte Zeilenfarbe", - "rowColorDesc": "Legt die Zeilenfarbe basierend auf den optionalen Variablen bedingt fest: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: \\'{{ currentRow.id > 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", - "rowHeight": "Bedingte Zeilenhöhe", - "rowHeightDesc": "Bedingte Einstellung der Zeilenhöhe basierend auf den optionalen Variablen: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Bedingte Zellenfarbe", - "cellColorDesc": "Stelle die Zellenfarbe basierend auf dem Zellenwert mit CurrentCell bedingt ein. Beispiel: \\''{{ currentCell == 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", - "saveChangesNotBind": "Es wurde kein Event Handler für das Speichern von Änderungen konfiguriert. Bitte binde mindestens einen Ereignishandler vor dem Klick.", - "dynamicColumn": "Dynamische Spalteneinstellung verwenden", - "dynamicColumnConfig": "Säuleneinstellung", - "dynamicColumnConfigDesc": "Dynamische Spalteneinstellungen. Akzeptiert ein Array von Spaltennamen. In der Standardeinstellung sind alle Spalten sichtbar. Beispiel: [%r@\\\"id%r@\\\", %r@\\\"name%r@\\\"]", - "position": "Position", - "showDataLoadSpinner": "Ladeanzeige anzeigen", - "showValue": "Wert anzeigen", - "expandable": "Ausbaufähig", - "configExpandedView": "Expandierte Ansicht konfigurieren", - "toUpdateRowsDesc": "Ein Array von Objekten für zu aktualisierende Zeilen in bearbeitbaren Tabellen.", - "selectedCellDesc": "Ausgewählte Zelle", - "empty": "Leere", - "falseValues": "Text Wenn Falsch", - "iconTrue": "Symbol Wenn wahr", - "iconFalse": "Icon When False", - "iconNull": "Icon When Null", - "allColumn": "Alle", - "visibleColumn": "Sichtbar", - "emptyColumns": "Derzeit sind keine Spalten sichtbar", - "showSummary": "Zusammenfassungszeile(n) anzeigen", - "totalSummaryRows": "Gesamtzahl der Zeilen", - "inlineAddNewRow": "Inline neue Zeile(n) hinzufügen", - "editMode": "Bearbeitungsmodus", - "singleClick": "Einzelklick", - "doubleClick": "Doppelklick", - "showUpdateButtons": "Schaltflächen zum Speichern/Abbrechen anzeigen", - }, - "image": { - ...en.image, - - "src": "Bildquelle", - "srcDesc": "Die Bildquelle. Kann eine URL, ein Pfad oder ein Base64-String sein. z.B.: data:image/png;base64, AAA... CCC", - "supportPreview": "Zuum Vorschau Unterstützung", - "supportPreviewTip": "Wirksam, wenn die Bildquelle gültig ist", - "previewSrc": "HighRes Bildquelle" - }, - "progress": { - ...en.progress, - - "value": "Wert", - "valueTooltip": "Der Prozentsatz der Fertigstellung als Wert zwischen 0 und 100", - "showInfo": "Wert anzeigen", - "valueDesc": "Aktueller Fortschrittswert, der von 0 bis 100 reicht", - "showInfoDesc": "Ob der aktuelle Fortschrittswert angezeigt werden soll", - }, - "fileViewer": { - ...en.fileViewer, - - "invalidURL": "Bitte gib eine gültige URL oder einen Base64-String ein", - "src": "Datei URI", - "srcTooltip": "Vorschau des bereitgestellten Link-Inhalts durch Einbetten von HTML, Base64-kodierte Daten können ebenfalls unterstützt werden, z. B.: data:application/pdf; base64,AAA... CCC", - "srcDesc": "Der Datei-URI", - }, - "divider": { - ...en.divider, - - "title": "Titel", - "align": "Ausrichtung", - "dashed": "Gestrichelt", - "type": "Vertikaler Typ", - "dashedDesc": "Gestrichelte Linie verwenden", - "titleDesc": "Teiler Titel", - "alignDesc": "Teiler Titelausrichtung", - }, - "QRCode": { - ...en.QRCode, - - "value": "QR Code Inhalt Wert", - "valueTooltip": "Der Wert enthält maximal 2953 Zeichen. Der QR-Code-Wert kann verschiedene Datentypen kodieren, z. B. Textnachrichten, URLs, Kontaktdaten (VCard/meCard), Wi-Fi-Anmeldedaten, E-Mail-Adressen, Telefonnummern, SMS-Nachrichten, Geolocation-Koordinaten, Kalenderereignisdetails, Zahlungsinformationen, Kryptowährungsadressen und App-Download-Links.", - "valueDesc": "Der QR-Code-Inhaltswert", - "level": "Fehlertoleranz Level", - "levelTooltip": "Bezieht sich auf die Fähigkeit des QR-Codes, gescannt zu werden, auch wenn ein Teil des Codes blockiert ist. Je höher die Stufe, desto komplexer ist der Code.", - "includeMargin": "Rand anzeigen", - "image": "Bild in der Mitte anzeigen", - "L": "L (Niedrig)", - "M": "M (Mittel)", - "Q": "Q (Quartil)", - "H": "H (Hoch)", - "maxLength": "Der Inhalt ist zu lang. Setze die Länge auf weniger als 2953 Zeichen", - }, - "jsonExplorer": { - ...en.jsonExplorer, - - "indent": "Einrückung der einzelnen Ebenen", - "expandToggle": "JSON-Baum erweitern", - "theme": "Farbe Thema", - "valueDesc": "Aktuelle JSON-Daten", - "default": "Standard", - "defaultDark": "Standard Dunkel", - "neutralLight": "Neutrales Licht", - "neutralDark": "Neutral Dunkel", - "azure": "Azurblau", - "darkBlue": "Dunkelblau", - }, - "audio": { - ...en.audio, - - "src": "Audio Source URI oder Base64 String", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Autoplay", - "loop": "Schleife", - "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:audio/mpeg;base64,AAA... CCC", - "play": "Spielen", - "playDesc": "Ausgelöst, wenn Audio abgespielt wird", - "pause": "Pause", - "pauseDesc": "Ausgelöst, wenn der Ton pausiert wird", - "ended": "Beendet", - "endedDesc": "Ausgelöst, wenn die Audiowiedergabe endet", - }, - "video": { - ...en.video, - - "src": "Video Source URI oder Base64 String", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "Poster-URL", - "defaultPosterUrl": "", - "autoPlay": "Autoplay", - "loop": "Schleife", - "controls": "Steuerelemente ausblenden", - "volume": "Band", - "playbackRate": "Wiedergaberate", - "posterTooltip": "Der Standardwert ist das erste Bild des Videos", - "autoPlayTooltip": "Nachdem das Video geladen wurde, wird es automatisch abgespielt. Wenn du diesen Wert von True auf False änderst, wird das Video angehalten. (Wenn ein Poster eingestellt ist, wird es über die Schaltfläche Poster abgespielt)", - "controlsTooltip": "Steuerelemente für die Videowiedergabe ausblenden. Wird möglicherweise nicht von jeder Videoquelle vollständig unterstützt.", - "volumeTooltip": "Lege die Lautstärke des Players fest, zwischen 0 und 1", - "playbackRateTooltip": "Lege die Rate des Spielers fest, zwischen 1 und 2", - "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:video/mp4;base64, AAA... CCC", - "play": "Spielen", - "playDesc": "Ausgelöst, wenn das Video abgespielt wird", - "pause": "Pause", - "pauseDesc": "Ausgelöst, wenn das Video pausiert wird", - "load": "Laden", - "loadDesc": "Ausgelöst, wenn das Laden der Videoressource abgeschlossen ist", - "ended": "Beendet", - "endedDesc": "Ausgelöst, wenn das Video zu Ende gespielt wird", - "currentTimeStamp": "Die aktuelle Abspielposition des Videos in Sekunden", - "duration": "Die Gesamtdauer des Videos in Sekunden", - }, - "media": { - ...en.media, - - "playDesc": "Beginnt die Wiedergabe der Medien.", - "pauseDesc": "Pausiert die Medienwiedergabe.", - "loadDesc": "Setzt die Medien auf den Anfang zurück und startet die Auswahl der Medienressource neu.", - "seekTo": "Suche nach der angegebenen Anzahl von Sekunden oder einem Bruchteil, wenn der Betrag zwischen 0 und 1 liegt", - "seekToAmount": "Anzahl der Sekunden, oder Bruchteil, wenn sie zwischen 0 und 1 liegt", - "showPreview": "Vorschau anzeigen", - }, - "rangeSlider": { - ...en.rangeSlider, - - "start": "Startwert", - "end": "Endwert", - "step": "Schrittweite", - "stepTooltip": "Die Granularität des Schiebereglers, der Wert muss größer als 0 und teilbar durch (Max-Min) sein", - }, - "iconControl": { - ...en.iconControl, - - "selectIcon": "Wähle ein Symbol", - "insertIcon": "Ein Icon einfügen", - "insertImage": "Ein Bild einfügen oder ", - }, - "shapeControl": { - ...en.shapeControl, - - "selectShape": "Wählen Sie eine Form", - "insertShape": "Einfügen einer Form", - "insertImage": "Ein Bild einfügen oder", - }, - "millisecondsControl": { - ...en.millisecondsControl, - - "timeoutTypeError": "Bitte gib die korrekte Timeout-Zeit in ms ein, die aktuelle Eingabe ist: {value}", - "timeoutLessThanMinError": "Die Eingabe muss größer sein als {left}, die aktuelle Eingabe ist: {value}", - }, - "selectionControl": { - ...en.selectionControl, - - "single": "Einzeln", - "multiple": "Mehrere", - "close": "Schließen", - "mode": "Modus wählen", - }, - "container": { - ...en.container, - - "title": "Angezeigter Container-Titel", - "titleTooltip": "Der Titel des Containers", - "flowWidth": "Inhalt Breite", - "floatType": "Text Schwebekörper Typ", - }, - "drawer": { - ...en.drawer, - - "closePosition": "Platzierung der Verschlusses", - "placement": "Platzierung der Schubladen", - "size": "Größe", - "top": "Top", - "right": "Rechts", - "center": "Zentrum", - "bottom": "Unten", - "left": "Links", - "title": "Titel der Schublade", - "titleAlign": "Ausrichtung der Titel", - "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", - "heightTooltip": "Pixel, z.B. 378", - "openDrawerDesc": "Offene Schublade", - "closeDrawerDesc": "Schublade schließen", - "width": "Breite der Schublade", - "height": "Höhe der Schublade", - }, - "meeting": { - ...en.meeting, - - "logLevel": "Agora SDK Log Level", - "placement": "Platzierung der Meeting-Schubladen", - "meeting": "Meeting-Einstellungen", - "cameraView": "Kameraansicht", - "cameraViewDesc": "Kameraansicht des lokalen Benutzers (Host)", - "screenShared": "Bildschirm geteilt", - "screenSharedDesc": "Vom lokalen Benutzer (Host) geteilter Bildschirm", - "audioUnmuted": "Audio entstummt", - "audioMuted": "Audio stummgeschaltet", - "videoClicked": "Video Geklickt", - "videoOff": "Video aus", - "videoOn": "Video auf", - "size": "Größe", - "top": "Top", - "host": "Gastgeber des Besprechungsraums. Du müsstest den Gastgeber als eigene Anwendungslogik verwalten", - "participants": "Teilnehmer des Besprechungsraums", - "shareScreen": "Vom lokalen Benutzer geteilter Bildschirm", - "appid": "Agora Anwendungs-ID", - "meetingName": "Treffen Name", - "localUserID": "Host-Benutzer-ID", - "userName": "Host-Benutzername", - "rtmToken": "Agora RTM-Token", - "rtcToken": "Agora RTC-Token", - "noVideo": "Kein Video", - "profileImageUrl": "Profilbild-URL", - "right": "Rechts", - "bottom": "Unten", - "videoId": "Video-Stream-ID", - "audioStatus": "Audio-Status", - "left": "Links", - "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", - "heightTooltip": "Pixel, z.B. 378", - "openDrawerDesc": "Offene Schublade", - "closeDrawerDesc": "Schublade schließen", - "width": "Breite der Schublade", - "height": "Höhe der Schublade", - "actionBtnDesc": "Aktionstaste", - "broadCast": "Broadcast-Nachrichten", - "title": "Meeting Titel", - "meetingCompName": "Agora Meeting Controller", - "sharingCompName": "Bildschirm teilen Stream", - "videoCompName": "Kamera-Stream", - "videoSharingCompName": "Bildschirm teilen Stream", - "meetingControlCompName": "Icon Taste", - "meetingCompDesc": "Meeting-Komponente", - "meetingCompControls": "Meeting-Kontrolle", - "meetingCompKeywords": "Agora Meeting, Web-Meeting, Kollaboration", - "iconSize": "Icon Größe", - "userId": "Host-Benutzer-ID", - "roomId": "Zimmer-ID", - "meetingActive": "Laufendes Treffen", - "messages": "Gesendete Nachrichten", - }, - "settings": { - ...en.settings, - - "title": "Einstellungen", - "userGroups": "Benutzergruppen", - "organization": "Arbeitsräume", - "subscription": "Abonnements", - "audit": "Audit-Logs", - "theme": "Themen", - "plugin": "Plugins", - "advanced": "Fortgeschrittene", - "apiDocs": "API-Dokumente", - "lab": "Labor", - "branding": "Branding", - "oauthProviders": "OAuth-Anbieter", - "appUsage": "App-Nutzungsprotokolle", - "environments": "Umgebungen", - "premium": "Prämie", - "AppUsage": "Globale App-Nutzung", - }, - "memberSettings": { - ...en.memberSettings, - - "admin": "Verwaltung", - "superAdmin": "Super Admin", - "adminGroupRoleInfo": "Admin kann Gruppenmitglieder und Ressourcen verwalten", - "adminOrgRoleInfo": "Admins besitzen alle Ressourcen und können Gruppen verwalten.", - "member": "Mitglied", - "memberGroupRoleInfo": "Mitglied kann Gruppenmitglieder sehen", - "memberOrgRoleInfo": "Mitglieder können nur Ressourcen nutzen oder besuchen, zu denen sie Zugang haben.", - "title": "Mitglieder", - "createGroup": "Gruppe erstellen", - "newGroupPrefix": "Neue Gruppe ", - "allMembers": "Alle Mitglieder", - "deleteModalTitle": "Diese Gruppe löschen", - "deleteModalContent": "Die gelöschte Gruppe kann nicht wiederhergestellt werden. Bist du sicher, dass du die Gruppe löschen willst?", - "addMember": "Mitglieder hinzufügen", - "nameColumn": "Benutzer Name", - "joinTimeColumn": "Beitrittszeit", - "actionColumn": "Operation", - "roleColumn": "Rolle", - "exitGroup": "Ausstiegsgruppe", - "moveOutGroup": "Aus Gruppe entfernen", - "inviteUser": "Mitglieder einladen", - "exitOrg": "Lass", - "exitOrgDesc": "Bist du sicher, dass du diesen Arbeitsplatz verlassen willst?", - "moveOutOrg": "entfernen", - "moveOutOrgDescSaasMode": "Bist du sicher, dass du den Benutzer {name} aus diesem Arbeitsbereich entfernen möchtest?", - "moveOutOrgDesc": "Bist du sicher, dass du Benutzer {name} entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", - "devGroupTip": "Mitglieder der Entwicklergruppe haben die Berechtigung, Apps und Datenquellen zu erstellen.", - "lastAdminQuit": "Der letzte Administrator kann nicht aussteigen.", - "organizationNotExist": "Der aktuelle Arbeitsbereich ist nicht vorhanden", - "inviteUserHelp": "Du kannst den Einladungslink zum Versenden an den Nutzer kopieren", - "inviteUserLabel": "Einladungslink:", - "inviteCopyLink": "Link kopieren", - "inviteText": "{userName} lädt dich ein, dem Arbeitsbereich %r@\\\"{organization}%r@\\\" beizutreten, Klicke auf den Link, um beizutreten: {inviteLink}", - "groupName": "Gruppe Name", - "createTime": "Erstellt", - "manageBtn": "Verwalte", - "userDetail": "Einzelheiten", - "syncDeleteTip": "Diese Gruppe wurde aus der Adressbuchquelle gelöscht", - "syncGroupTip": "Diese Gruppe ist eine Adressbuch-Synchronisationsgruppe und kann nicht bearbeitet werden", - }, - "orgSettings": { - ...en.orgSettings, - - "newOrg": "Neuer Arbeitsbereich (Organisation)", - "title": "Arbeitsbereich", - "createOrg": "Arbeitsbereich erstellen (Organisation)", - "deleteModalTitle": "Bist du sicher, dass du diesen Arbeitsbereich löschen willst?", - "deleteModalContent": "Du bist dabei, diesen Arbeitsbereich {permanentlyDelete} zu löschen. Sobald er gelöscht ist, wird der Arbeitsbereich {notRestored}.", - "permanentlyDelete": "Dauerhaft", - "notRestored": "Kann nicht wiederhergestellt werden", - "deleteModalLabel": "Bitte gib den Arbeitsbereichsnamen {name} ein, um den Vorgang zu bestätigen:", - "deleteModalTip": "Bitte Arbeitsbereichsname eingeben", - "deleteModalErr": "Der Name des Arbeitsbereichs ist inkorrekt", - "deleteModalBtn": "löschen", - "editOrgTitle": "Arbeitsbereich-Informationen bearbeiten", - "orgNameLabel": "Arbeitsbereich Name:", - "orgNameCheckMsg": "Der Name des Arbeitsbereichs darf nicht leer sein", - "orgLogo": "Arbeitsbereich Logo:", - "logoModify": "Bild ändern", - "inviteSuccessMessage": "Erfolgreich dem Arbeitsbereich beitreten", - "inviteFailMessage": "Beitritt zum Arbeitsbereich fehlgeschlagen", - "uploadErrorMessage": "Upload-Fehler", - "orgName": "Arbeitsbereich Name", - }, - "freeLimit": "Kostenlose Probefahrt", - "tabbedContainer": { - ...en.tabbedContainer, - - "switchTab": "Registerkarte wechseln", - "switchTabDesc": "Ausgelöst beim Wechsel der Registerkarten", - "tab": "Registerkarten", - "atLeastOneTabError": "Der Tab-Container hält mindestens einen Tab fest", - "selectedTabKeyDesc": "Aktuell ausgewählte Registerkarte", - "iconPosition": "Icon Position", - "placement": "Platzierung der Registerkarten", - "showTabs": "Registerkarten anzeigen", - "gutter": "Lücke", - "gutterTooltip": "Der Abstand zwischen den Tabs in px", - "tabsCentered": "Zentrierte Registerkarten", - }, - "formComp": { - ...en.formComp, - - "containerPlaceholder": "Ziehen Sie Komponenten aus dem rechten Fenster oder", - "openDialogButton": "Erstelle ein Formular aus einer deiner Datenquellen", - "resetAfterSubmit": "Zurücksetzen nach erfolgreicher Übermittlung", - "initialData": "Erste Daten", - "disableSubmit": "Abschicken deaktivieren", - "success": "Erfolgreich generiertes Formular", - "selectCompType": "Komponententyp auswählen", - "dataSource": "Datenquelle: ", - "selectSource": "Quelle wählen", - "table": "Tabelle: ", - "selectTable": "Tabelle auswählen", - "columnName": "Spalte Name", - "dataType": "Datentyp", - "compType": "Komponente Typ", - "required": "Erforderlich", - "generateForm": "Formular generieren", - "compSelectionError": "Unkonfigurierter Spaltentyp", - "compTypeNameError": "Der Name des Komponententyps konnte nicht ermittelt werden", - "noDataSourceSelected": "Keine Datenquelle ausgewählt", - "noTableSelected": "Kein Tisch ausgewählt", - "noColumn": "Keine Säule", - "noColumnSelected": "Keine Spalte ausgewählt", - "noDataSourceFound": "Keine unterstützte Datenquelle gefunden. Eine neue Datenquelle erstellen", - "noTableFound": "Es wurden keine Tabellen in dieser Datenquelle gefunden, bitte wähle eine andere Datenquelle", - "noColumnFound": "In dieser Tabelle wurde keine unterstützte Spalte gefunden. Bitte wähle eine andere Tabelle", - "formTitle": "Formular Titel", - "name": "Name", - "nameTooltip": "Der Name des Attributs in den Daten des Formulars ist standardmäßig der Komponentenname, wenn er leer gelassen wird.", - "notSupportMethod": "Nicht unterstützte Methoden: ", - "notValidForm": "Das Formular ist nicht gültig", - "resetDesc": "Formulardaten auf Standardwert zurücksetzen", - "clearDesc": "Formulardaten löschen", - "setDataDesc": "Formulardaten einstellen", - "valuesLengthError": "Parameter Nummer Fehler", - "valueTypeError": "Parameter Typ Fehler", - "dataDesc": "Aktuelle Formulardaten", - "loadingDesc": "Ob das Formular geladen ist?", - }, - "modalComp": { - ...en.modalComp, - - "open": "Öffnen Sie", - "openDesc": "Ausgelöst, wenn das modale Dialogfeld geöffnet wird", - "close": "Schließen", - "closeDesc": "Ausgelöst, wenn das modale Dialogfeld geschlossen wird", - "openModalDesc": "Öffnen Sie das Dialogfeld", - "closeModalDesc": "Das Dialogfeld schließen", - "visibleDesc": "Ist es sichtbar? Wenn ja, wird das aktuelle Dialogfeld eingeblendet", - "title": "Titel der Schublade", - "titleAlign": "Ausrichtung der Titel", - "modalHeight": "Modale Höhe", - "modalHeightTooltip": "Pixel, Beispiel: 222", - "modalWidth": "Modale Breite", - "modalWidthTooltip": "Zahl oder Prozentsatz, Beispiel: 520, 60%", - }, - "listView": { - ...en.listView, - - "noOfRows": "Zeilenanzahl", - "noOfRowsTooltip": "Anzahl der Zeilen in der Liste - wird normalerweise auf eine Variable gesetzt (z. B. \\'{{query1.data.length}}\\'), um Abfrageergebnisse zu präsentieren", - "noOfColumns": "Anzahl der Kolonnen", - "itemIndexName": "Datenelement Index Name", - "itemIndexNameDesc": "Der Variablenname, der sich auf den Index des Elements bezieht, Standard: {default}", - "itemDataName": "Datenelement Objektname", - "itemDataNameDesc": "Der Variablenname, der sich auf das Datenobjekt des Items bezieht, Standard als {default}", - "itemsDesc": "Daten der Komponenten in der Liste offenlegen", - "dataDesc": "Die in der aktuellen Liste verwendeten JSON-Daten", - "dataTooltip": "Wenn du nur eine Zahl einträgst, wird dieses Feld als Zeilenzahl betrachtet und die Daten werden als leer angesehen.", - }, - "navigation": { - ...en.navigation, - - "addText": "Untermenüpunkt hinzufügen", - "logoURL": "Navigation Logo URL", - "horizontalAlignment": "Horizontale Ausrichtung", - "logoURLDesc": "Du kannst ein Logo auf der linken Seite anzeigen, indem du einen URI-Wert oder einen Base64-String eingibst, z.B. data:image/png;base64,AAA... CCC", - "itemsDesc": "Hierarchische Navigationsmenüpunkte", - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - - "subMenu": "Untermenü {number}", - }, - "navItemComp": { - ...en.navItemComp, - - "active": "Aktiv", - }, - "iframe": { - ...en.iframe, - - "URLDesc": "Die Quell-URL für den IFrame-Inhalt. Achte darauf, dass die URL HTTPS oder localhost ist. Vergewissere dich auch, dass die URL nicht durch die Content Security Policy (CSP) des Browsers blockiert wird. Der Header \\'X-Frame-Options\\' sollte nicht auf \\'DENY\\' oder \\'SAMEORIGIN\\' gesetzt sein.", - "allowDownload": "Downloads zulassen", - "allowSubmitForm": "Formular einreichen zulassen", - "allowMicrophone": "Mikrofon zulassen", - "allowCamera": "Kamera zulassen", - "allowPopup": "Popups zulassen", - }, - "switchComp": { - ...en.switchComp, - - "defaultValue": "Standard Boolescher Wert", - "open": "Auf", - "close": "Aus", - "openDesc": "Ausgelöst, wenn der Schalter eingeschaltet wird", - "closeDesc": "Ausgelöst, wenn der Schalter ausgeschaltet ist", - "valueDesc": "Aktueller Status des Schalters", - }, - "signature": { - ...en.signature, - - "tips": "Hinweistext", - "signHere": "Hier unterschreiben", - "showUndo": "Rückgängig machen anzeigen", - "showClear": "Löschen anzeigen", - }, - "localStorageComp": { - ...en.localStorageComp, - - "valueDesc": "Alle derzeit gespeicherten Datenelemente", - "setItemDesc": "Einen Artikel hinzufügen", - "removeItemDesc": "Einen Artikel entfernen", - "clearItemDesc": "Alle Artikel löschen", - }, - "utilsComp": { - ...en.utilsComp, - - "openUrl": "URL öffnen", - "openApp": "App öffnen", - "copyToClipboard": "In die Zwischenablage kopieren", - "downloadFile": "Datei herunterladen", - }, - "messageComp": { - ...en.messageComp, - - "info": "Eine Benachrichtigung senden", - "loading": "Ladebestätigung senden", - "success": "Erfolgsbenachrichtigung senden", - "warn": "Eine Warnmeldung senden", - "error": "Eine Fehlerbenachrichtigung senden", - }, - "toastComp": { - ...en.toastComp, - - "destroy": "eine Benachrichtigung schließen", - "info": "Eine Benachrichtigung senden", - "loading": "Ladebestätigung senden", - "success": "Erfolgsbenachrichtigung senden", - "warn": "Eine Warnmeldung senden", - "error": "Eine Fehlerbenachrichtigung senden", - }, - "themeComp": { - ...en.themeComp, - - "switchTo": "Thema wechseln", - }, - "transformer": { - ...en.transformer, - - "preview": "Vorschau", - "docLink": "Lies mehr über Transformers...", - "previewSuccess": "Vorschau Erfolg", - "previewFail": "Vorschau Fail", - "deleteMessage": "Transformator löschen Erfolg. Du kannst {undoKey} zum Rückgängigmachen verwenden.", - "documentationText": "Transformers sind für die Datenumwandlung und Wiederverwendung deines mehrzeiligen JavaScript-Codes gedacht. Verwende Transformers, um Daten aus Abfragen oder Komponenten an deine lokalen App-Anforderungen anzupassen. Im Gegensatz zu JavaScript-Abfragen sind Transformer nur für Leseoperationen ausgelegt. Das bedeutet, dass du innerhalb eines Transformers keine Abfrage auslösen oder einen temporären Zustand aktualisieren kannst.", - }, - "temporaryState": { - ...en.temporaryState, - - "value": "Anfangswert", - "valueTooltip": "Der Anfangswert, der im temporären Zustand gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.", - "docLink": "Lies mehr über temporäre Zustände...", - "pathTypeError": "Pfad muss entweder ein String oder ein Array von Werten sein", - "unStructuredError": "Unstrukturierte Daten {prev} können nicht von {path} aktualisiert werden", - "valueDesc": "Vorläufiger Zustandswert", - "deleteMessage": "Der temporäre Zustand wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", - "documentationText": "Temporäre Zustände sind eine leistungsstarke Funktion zur Verwaltung komplexer Variablen, die den Zustand von Komponenten in deiner Anwendung dynamisch aktualisieren. Diese Zustände dienen als Zwischenspeicher für Daten, die sich im Laufe der Zeit aufgrund von Benutzerinteraktionen oder anderen Prozessen ändern können.", - }, - "dataResponder": { - ...en.dataResponder, - - "data": "Daten", - "dataDesc": "Daten des aktuellen Data Responders", - "dataTooltip": "Wenn diese Daten geändert werden, lösen sie nachfolgende Aktionen aus.", - "docLink": "Lies mehr über die Data Responders...", - "deleteMessage": "Der Data Responder wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", - "documentationText": "Wenn du eine App entwickelst, kannst du den Komponenten Ereignisse zuweisen, um Änderungen an bestimmten Daten zu überwachen. Eine Tabellenkomponente kann zum Beispiel Ereignisse wie %r@\\\"Row select change%r@\\\", %r@\\\"Filter change%r@\\\", %r@\\\"Sort change%r@\\\" und %r@\\\"Page change%r@\\\" haben, um Änderungen in der selectedRow-Eigenschaft zu verfolgen. Für Änderungen in temporären Zuständen, Transformatoren oder Abfrageergebnissen, für die keine Standardereignisse zur Verfügung stehen, werden jedoch Data Responder verwendet. Mit ihnen kannst du alle Datenänderungen erkennen und darauf reagieren.", - }, - "theme": { - ...en.theme, - - "title": "Themen", - "createTheme": "Thema erstellen", - "themeName": "Themenname:", - "themeNamePlaceholder": "Bitte gib einen Themennamen ein", - "defaultThemeTip": "Standard-Theme:", - "createdThemeTip": "Das Thema, das du erstellt hast:", - "option": "Option{index}", - "input": "Eingabe", - "confirm": "Ok", - "emptyTheme": "Keine Themen verfügbar", - "click": "", - "toCreate": "", - "nameColumn": "Name", - "defaultTip": "Standard", - "updateTimeColumn": "Update Zeit", - "edit": "bearbeiten", - "cancelDefaultTheme": "Standardthema aufheben", - "setDefaultTheme": "Als Standardthema festlegen", - "copyTheme": "Thema duplizieren", - "setSuccessMsg": "Einstellung Erfolglos", - "cancelSuccessMsg": "Unsetting Erfolglos", - "deleteSuccessMsg": "Löschung Erfolglos", - "checkDuplicateNames": "Der Themenname existiert bereits, bitte gib ihn erneut ein", - "copySuffix": " Kopiere", - "saveSuccessMsg": "Erfolgreich gerettet", - "leaveTipTitle": "Tipps", - "leaveTipContent": "Du bist noch nicht gerettet, bestätigst du den Austritt?", - "leaveTipOkText": "Lass", - "goList": "Zurück zur Liste", - "saveBtn": "Speichern", - "mainColor": "Hauptfarben", - "text": "Textfarben", - "layout": "Layout-Einstellungen", - "fonts": "Schriftart-Einstellungen", - "components": "Komponentenvorlagen", - "charts": "eCharts Definition", - "defaultTheme": "Standard", - "yellow": "Gelb", - "green": "Grün", - "previewTitle": "Themenvorschau\nBeispielkomponenten, die deine Themenfarben verwenden", - "dateColumn": "Datum", - "emailColumn": "E-Mail", - "phoneColumn": "Telefon", - "subTitle": "Titel", - "linkLabel": "Link zu", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Fortschritt", - "sliderLabel": "Schieber", - "radioLabel": "Radio", - "checkboxLabel": "Kontrollkästchen", - "buttonLabel": "Formular Schaltfläche", - "switch": "Schalter", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.de", - "previewEmail3": "imgur.com", - "previewEmail4": "globo.de", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Diagrammstil-Vorschau", - "chartSpending": "Ausgaben", - "chartBudget": "Haushalt", - "chartAdmin": "Verwaltung", - "chartFinance": "Finanzen", - "chartSales": "Verkäufe", - "chartFunnel": "Trichterdiagramm", - "chartShow": "anzeigen", - "chartClick": "Klick", - "chartVisit": "Besuche", - "chartQuery": "Abfrage", - "chartBuy": "Kaufen", - }, - "themeDetail": { - ...en.themeDetail, - - "primary": "Primärfarbe", - "primaryDesc": "Standard-Primärfarbe, die von den meisten Komponenten verwendet wird", - "textDark": "Dunkle Textfarbe", - "textDarkDesc": "Wird verwendet, wenn die Hintergrundfarbe hell ist", - "textLight": "Helle Textfarbe", - "textLightDesc": "Wird verwendet, wenn die Hintergrundfarbe dunkel ist", - "canvas": "Canvas Farbe", - "canvasDesc": "Standard-Hintergrundfarbe der App", - "primarySurface": "Container Farbe", - "primarySurfaceDesc": "Standard-Hintergrundfarbe für Komponenten wie z.B. Tabellen", - "borders": "Border Styles", - "spacing": "Abstandsstile", - "font": "Font Styles", - "fonts": "Schriftarten", - "borderRadius": "Radius des Rahmens", - "borderRadiusDesc": "Standard-Radius des Rahmens, der von den meisten Komponenten verwendet wird", - "borderColor": "Farbe der Umrandung", - "borderColorDesc": "Standard-Rahmenfarbe, die von den meisten Komponenten verwendet wird", - "borderWidth": "Border Width", - "borderWidthDesc": "Standard-Rahmenbreite, die von den meisten Komponenten verwendet wird", - "borderStyle": "Border Style", - "borderStyleDesc": "Standard-Rahmenstil, der von den meisten Komponenten verwendet wird", - "fontFamily": "Schriftfamilie", - "fontFamilyDesc": "Standard-Schriftfamilie, die von den meisten Komponenten verwendet wird", - "chart": "Chart-Stil", - "chartDesc": "JSON Eingabe für Echarts", - "echartsJson": "Chart-Stil JSON", - "margin": "Außenabstand", - "marginDesc": "Standard Außenabstand, der typischerweise für die meisten Komponenten verwendet wird", - "padding": "Innenabstand", - "paddingDesc": "Standard Innenabstand, der für die meisten Komponenten verwendet wird", - "containerHeaderPadding": "Kopfbereich Innenabstand", - "containerheaderpaddingDesc": "Standard Kopfbereich Innenabstand, der für die meisten Komponenten verwendet wird", - "gridColumns": "Canvas Rasterspalten", - "gridColumnsDesc": "Standardanzahl von Spalten, welcher für den Canvas verwendet wird", - "loadingIndicators": "Ladeindikatoren", - "showComponentLoadingIndicators": "Ladeindikatoren beim Laden einer Komponente anzeigen", - "showDataLoadingIndicators": "Zeige Ladeindikatoren während des Ladens von Daten", - "showIndicatorsDuringDataLoading": "Zeige Indikatoren während des Datenladens", - "dataLoadingIndicator": "Daten-Ladeindikator" - }, - "pluginSetting": { - ...en.pluginSetting, - - "title": "Plugins", - "npmPluginTitle": "npm-Plugins", - "npmPluginDesc": "Richte npm-Plugins für alle Anwendungen im aktuellen Arbeitsbereich ein.", - "npmPluginEmpty": "Es wurden keine npm-Plugins hinzugefügt.", - "npmPluginAddButton": "Ein npm-Plugin hinzufügen", - "saveSuccess": "Erfolgreich gerettet", - }, - "advanced": { - ...en.advanced, - - "title": "Fortgeschrittene", - "defaultHomeTitle": "Standard-Homepage", - "defaultHomeHelp": "Die Homepage ist die App, die alle Nicht-Entwickler standardmäßig sehen, wenn sie sich anmelden. Hinweis: Stelle sicher, dass die ausgewählte App auch für Nicht-Entwickler zugänglich ist.", - "defaultHomePlaceholder": "Wähle die Standard-Homepage", - "saveBtn": "Speichern", - "preloadJSTitle": "JavaScript vorladen", - "preloadJSHelp": "Richte vorgeladenen JavaScript-Code für alle Apps im aktuellen Arbeitsbereich ein.", - "preloadCSSTitle": "CSS vorladen", - "preloadCSSHelp": "Richte vorgeladenen CSS-Code für alle Apps im aktuellen Arbeitsbereich ein.", - "preloadCSSApply": "Auf die Startseite des Arbeitsbereichs anwenden", - "preloadLibsTitle": "JavaScript-Bibliothek", - "preloadLibsHelp": "Richte vorgeladene JavaScript-Bibliotheken für alle Anwendungen im aktuellen Arbeitsbereich ein, und das System hat lodash, day.js, uuid, numbro zur direkten Verwendung eingebaut. Die JavaScript-Bibliotheken werden vor der Initialisierung der App geladen, was einen gewissen Einfluss auf die Leistung der App hat.", - "preloadLibsEmpty": "Es wurden keine JavaScript-Bibliotheken hinzugefügt", - "preloadLibsAddBtn": "Eine Bibliothek hinzufügen", - "saveSuccess": "Erfolgreich gerettet", - "AuthOrgTitle": "Willkommensbildschirm des Arbeitsbereichs", - "AuthOrgDescrition": "Die URL, unter der sich deine Nutzer beim aktuellen Arbeitsbereich anmelden können.", - "APIConsumption": "API-Verbrauch", - "APIConsumptionDescription": "Hier können Sie den API-Verbrauch für alle Apps im aktuellen Arbeitsbereich sehen.", - "overallAPIConsumption": "Gesamter API-Verbrauch in diesem Arbeitsbereich bis jetzt", - "lastMonthAPIConsumption": "API-Verbrauch des letzten Monats, in diesem Arbeitsbereich", - "npmRegistryTitle": "Benutzerdefinierte NPM-Registrierung", - "npmRegistryHelp": "Richten Sie eine benutzerdefinierte NPM-Registry ein, um den Abruf von Plugins aus einer privaten NPM-Registry zu ermöglichen.", - "showHeaderInPublicApps": "Kopfzeile öffentlich anzeigen", - "showHeaderInPublicAppsHelp": "Legen Sie die Sichtbarkeit des Headers in der öffentlichen Ansicht für alle Apps fest", - }, - "branding": { - ...en.branding, - - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": "Nur .JPG, .SVG oder .PNG", - "faviconTitle": "Favicon", - "faviconHelp": "Nur .JPG, .SVG oder .PNG", - "brandNameTitle": "Markenname", - "headColorTitle": "Kopffarbe", - "save": "Speichern", - "saveSuccessMsg": "Erfolgreich gerettet", - "upload": "Zum Hochladen klicken", - }, - "networkMessage": { - ...en.networkMessage, - - "0": "Verbindung zum Server fehlgeschlagen, bitte überprüfe dein Netzwerk", - "200": "Erfolg", - "201": "Erstellt", - "204": "Kein Inhalt", - "400": "Bad Request", - "401": "Authentifizierung fehlgeschlagen, bitte melde dich erneut an", - "403": "Keine Erlaubnis, bitte kontaktiere den Administrator für eine Genehmigung", - "404": "Nicht gefunden", - "500": "Besetzter Dienst, bitte versuche es später noch einmal", - "timeout": "Zeitüberschreitung anfordern", - }, - "share": { - ...en.share, - - "title": "Teilen", - "viewer": "Betrachter", - "editor": "Herausgeber", - "owner": "Besitzer", - "datasourceViewer": "Kann verwenden", - "datasourceOwner": "Kann Managen", - }, - "debug": { - ...en.debug, - - "title": "Titel", - "switch": "Schalterkomponente: ", - }, - "module": { - ...en.module, - - "emptyText": "Keine Daten", - "docLink": "Lesen Sie mehr über Module...", - "documentationText": "Module sind vollständige Anwendungen, die in andere Anwendungen eingebunden und wiederholt werden können und wie eine einzelne Komponente funktionieren. Da Module eingebettet werden können, müssen sie in der Lage sein, mit Ihren externen Anwendungen oder Websites zu interagieren. Diese vier Einstellungen helfen, die Kommunikation mit einem Modul zu unterstützen.", - "circularReference": "Zirkuläre Referenz, aktuelles Modul/Anwendung kann nicht verwendet werden!", - "emptyTestInput": "Das aktuelle Modul hat keinen Eingang zum Testen", - "emptyTestMethod": "Das aktuelle Modul hat keine Methode zum Testen", - "name": "Name", - "input": "Eingabe", - "params": "Params", - "emptyParams": "Es wurden keine Params hinzugefügt", - "emptyInput": "Es wurde keine Eingabe hinzugefügt", - "emptyMethod": "Es wurde keine Methode hinzugefügt", - "emptyOutput": "Es wurde keine Ausgabe hinzugefügt", - "data": "Daten", - "string": "Zeichenfolge", - "number": "Nummer", - "array": "Array", - "boolean": "Boolesche", - "query": "Abfrage", - "autoScaleCompHeight": "Bauteilhöhenwaage mit Container", - "excuteMethod": "Methode {name} ausführen", - "method": "Methode", - "action": "Aktion", - "output": "Ausgabe", - "nameExists": "Name {name} bereits vorhanden", - "eventTriggered": "Ereignis {name} wird ausgelöst", - "globalPromptWhenEventTriggered": "Zeigt eine globale Aufforderung an, wenn ein Ereignis ausgelöst wird", - "emptyEventTest": "Das aktuelle Modul hat keine zu prüfenden Ereignisse", - "emptyEvent": "Es wurde kein Ereignis hinzugefügt", - "event": "Veranstaltung", - }, - "resultPanel": { - ...en.resultPanel, - - "returnFunction": "Der Rückgabewert ist eine Funktion.", - "consume": "{Zeit}", - "JSON": "JSON anzeigen", - }, - "createAppButton": { - ...en.createAppButton, - - "creating": "Erstellen...", - "created": "Erstelle {name}", - }, - "apiMessage": { - ...en.apiMessage, - - "authenticationFail": "Benutzerauthentifizierung fehlgeschlagen, bitte melde dich erneut an", - "verifyAccount": "Konto muss verifiziert werden", - "functionNotSupported": "Die aktuelle Version unterstützt diese Funktion nicht. Bitte kontaktiere das Lowcoder Business Team, um dein Konto zu aktualisieren.", - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - - "createCompFail": "Komponente erstellen {comp} Fehlgeschlagen", - "notHandledError": "{method} Nicht ausgeführte Methode", - }, - "aggregation": { - ...en.aggregation, - - "navLayout": "Navigationsleiste", - "chooseApp": "App wählen", - "iconTooltip": "Unterstützt Image src Link oder Base64 String wie data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Versteckt für nicht autorisierte Benutzer", - "queryParam": "URL-Abfrage-Parameter", - "hashParam": "URL-Hash-Parameter", - "tabBar": "Registerkarte Bar", - "emptyTabTooltip": "Konfiguriere diese Seite im rechten Fensterbereich", - }, - "appSetting": { - ...en.appSetting, - - "450": "450px (Mobile)", - "800": "800px (Tablet)", - "1440": "1440px (Laptop)", - "1920": "1920px (Breitbild)", - "3200": "3200px (Super Large Screen)", - "title": "Allgemeine App-Einstellungen", - "autofill": "Autofill", - "userDefined": "Benutzerdefiniert", - "default": "Standard", - "tooltip": "Das Popover nach der Einstellung schließen", - "canvasMaxWidth": "Maximale Bildschirmbreite für diese App", - "userDefinedMaxWidth": "Benutzerdefinierte maximale Breite", - "inputUserDefinedPxValue": "Bitte gib einen benutzerdefinierten Pixelwert ein", - "maxWidthTip": "Die maximale Breite sollte größer als oder gleich 350 sein", - "themeSetting": "Angewandter Stil Thema", - "themeSettingDefault": "Standard", - "themeCreate": "Thema erstellen", - "appTitle": "Titel", - "appDescription": "Beschreibung", - "appCategory": "Kategorie", - "showPublicHeader": "Kopfzeile in der öffentlichen Ansicht anzeigen", - }, - "customShortcut": { - ...en.customShortcut, - - "title": "Benutzerdefinierte Abkürzungen", - "shortcut": "Abkürzung", - "action": "Aktion", - "empty": "Keine Abkürzungen", - "placeholder": "Shortcut drücken", - "otherPlatform": "Andere", - "space": "Raum", - }, - "profile": { - ...en.profile, - - "orgSettings": "Arbeitsbereich-Einstellungen", - "switchOrg": "Bereich wechseln", - "joinedOrg": "Meine Arbeitsbereiche", - "createOrg": "Arbeitsbereich erstellen", - "logout": "Abmelden", - "personalInfo": "Mein Profil", - "bindingSuccess": "Bindung {sourceName} Erfolg", - "uploadError": "Upload-Fehler", - "editProfilePicture": "Ändern Sie", - "saveUserNameTooltip": "Drücken Sie die Eingabetaste, um Ihren neuen Benutzernamen zu speichern. Wenn Sie Ihre E-Mail-Adresse sehen, bedeutet dies, dass wir sie als Benutzernamen übernommen haben und Sie sie in einen besseren ändern können. Ihre E-Mail als technischer Benutzername bleibt unangetastet.", - "changeAvatarTooltip": "Sie können PNG- oder JPG-Dateien hochladen", - "nameCheck": "Der Name darf nicht leer sein", - "name": "Name:", - "namePlaceholder": "Bitte gib deinen Namen ein", - "toBind": "Zum Binden", - "binding": "Ist Verbindlich", - "bindError": "Parameter Error, Currently Not Supported Binding.", - "bindName": "Binden {name}", - "loginAfterBind": "Nach der Bindung kannst du dich mit {name} anmelden", - "bindEmail": "E-Mail binden:", - "email": "E-Mail", - "emailCheck": "Bitte gib eine gültige E-Mail ein", - "emailPlaceholder": "Bitte gib deine E-Mail ein", - "submit": "einreichen", - "bindEmailSuccess": "Erfolgreiche E-Mail-Bindung", - "passwordModifiedSuccess": "Passwort erfolgreich geändert", - "passwordSetSuccess": "Passwort erfolgreich gesetzt", - "oldPassword": "Altes Passwort:", - "inputCurrentPassword": "Bitte gib dein aktuelles Passwort ein", - "newPassword": "Neues Passwort:", - "inputNewPassword": "Bitte gib dein neues Passwort ein", - "confirmNewPassword": "Bestätige das neue Passwort:", - "inputNewPasswordAgain": "Bitte gib dein neues Passwort erneut ein", - "password": "Passwort:", - "modifyPassword": "Passwort ändern", - "setPassword": "Passwort setzen", - "alreadySetPassword": "Passwort setzen", - "setPassPlaceholder": "Du kannst dich mit Passwort anmelden", - "setPassAfterBind": "Du kannst das Passwort nach der Kontobindung festlegen", - "socialConnections": "Soziale Bindungen", - "changeAvatar": "Avatar ändern", - "about": "Dein Account", - "userId": "Benutzer-ID", - "createdAt": "Erstellt am", - "currentOrg": "aktuelle Organisation", - "settings": "Einstellungen", - "uiLanguage": "UI-Sprache", - "info": "Info", - "createdApps": "Erstellte Apps", - "createdModules": "Erstellte Module", - "sharedApps": "Mit Ihnen geteilte Apps", - "sharedModules": "Mit Ihnen geteilte Module", - "onMarketplace": "Auf dem Marktplatz", - "howToPublish": "So veröffentlichen Sie auf dem Marktplatz", - "memberOfOrgs": "Workspaces-Mitgliedschaft", - "apiKeys": "API-Schlüssel", - "createApiKey": "API-Schlüssel erstellen", - "apiKeyName": "Name", - "apiKeyDescription": "Beschreibung", - "apiKeyCopy": "Klicke auf den API Schlüssel um den Key in die Zwischenablage zu kopieren", - "apiKey": "API-Schlüssel", - "deleteApiKey": "API-Schlüssel löschen", - "deleteApiKeyContent": "Sind Sie sicher, dass Sie diesen API-Schlüssel löschen möchten?", - "deleteApiKeyError": "Etwas ist schief gelaufen. Bitte versuche es erneut.", - }, - "shortcut": { - ...en.shortcut, - - "shortcutList": "Tastaturkürzel", - "click": "Klick", - "global": "Global", - "toggleShortcutList": "Tastaturkurzbefehle umschalten", - "editor": "Herausgeber", - "toggleLeftPanel": "Linkes Fenster umschalten", - "toggleBottomPanel": "Unteres Fenster umschalten", - "toggleRightPanel": "Rechtes Fenster umschalten", - "toggleAllPanels": "Alle Fenster umschalten", - "preview": "Vorschau", - "undo": "Rückgängig machen", - "redo": "Redo", - "showGrid": "Raster anzeigen", - "component": "Komponente", - "multiSelect": "Mehrere auswählen", - "selectAll": "Alle auswählen", - "copy": "Kopiere", - "cut": "Schnitt", - "paste": "Kleister", - "move": "Verschiebe", - "zoom": "Größe ändern", - "delete": "löschen", - "deSelect": "Deselektiere", - "queryEditor": "Abfrage-Editor", - "excuteQuery": "Aktuelle Abfrage ausführen", - "editBox": "Text-Editor", - "formatting": "Format", - "openInLeftPanel": "Im linken Fenster öffnen", - }, - "help": { - ...en.help, - - "videoText": "Übersicht", - "onBtnText": "OK", - "permissionDenyTitle": "💡 Du kannst keine neue Anwendung oder Datenquelle erstellen?", - "permissionDenyContent": "Du hast nicht die Berechtigung, die Anwendung und die Datenquelle zu erstellen. Bitte kontaktiere den Administrator, um der Entwicklergruppe beizutreten.", - "appName": "Tutorial Anwendung", - "chat": "Chatte mit uns", - "docs": "Dokumentation ansehen", - "editorTutorial": "Tutorial-Editor", - "update": "Was gibt's Neues?", - "version": "Version", - "versionWithColon": "Version:", - "submitIssue": "Problem melden", - }, - "header": { - ...en.header, - - "nameCheckMessage": "Der Name kann nicht leer sein", - "viewOnly": "Nur Ansicht", - "recoverAppSnapshotTitle": "Diese Version wiederherstellen?", - "recoverAppSnapshotContent": "Stelle die aktuelle App auf die Version wieder her, die zum Zeitpunkt {time} erstellt wurde.", - "recoverAppSnapshotMessage": "Diese Version wiederherstellen", - "returnEdit": "Zurück zum Bearbeiten", - "deploy": "Veröffentlichen", - "export": "Exportieren nach JSON", - "editName": "Name bearbeiten", - "duplicate": "{type} Duplizieren", - "snapshot": "Bearbeitungs-Historie", - "scriptsAndStyles": "Skripte und Stil", - "appSettings": "App-Einstellungen", - "preview": "Vorschau", - "editError": "Verlaufsvorschau-Modus, kein Betrieb wird unterstützt.", - "clone": "Klonen", - "editorMode_layout": "Layout", - "editorMode_logic": "Logik", - "editorMode_both": "Beide", - "editorMode_layout_tooltip": "Passen Sie im rechten Fenster das Erscheinungsbild und Layout der Komponente an. Passen Sie Aussehen, Stil und Animationen an.", - "editorMode_logic_tooltip": "Richten Sie im rechten Fenster ein, wie Ihre Komponente funktioniert und interagiert. Verwalten Sie den Inhalt und das interaktive Verhalten.", - "AppEditingBlocked": "App-Bearbeitung blockiert für:", - "AppEditingBlockedHint": "Änderungen werden nicht gespeichert, während ein anderer Benutzer diese App bearbeitet.", - "AppEditingBlockedMessage": "Bitte warten Sie, bevor Sie den Bearbeitungsstatus der App überprüfen.", - "AppEditingBlockedCheckStatus": "App-Status prüfen", - "AppEditingBlockedSomeone": "Jemand", - "AppEditingBlockedMessageSnipped": "bearbeitet diese App", -}, - "userAuth": { - ...en.userAuth, - - "registerByEmail": "Anmelden", - "email": "E-Mail:", - "inputEmail": "Bitte gib deine E-Mail ein", - "inputValidEmail": "Bitte gib eine gültige E-Mail ein", - "forgotPassword": "Passwort vergessen", - "forgotPasswordInfo": "Geben Sie Ihre E-Mail-Adresse ein, und wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts zu.", - "forgotPasswordSuccess": "Bitte überprüfen Sie Ihre E-Mail auf den Link zum Zurücksetzen des Passworts.", - "forgotPasswordError": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", - "register": "Neu Registrieren", - "userLogin": "Anmelden", - "login": "Anmelden", - "bind": "Binde", - "passwordCheckLength": "Mindestens {min} Zeichen", - "passwordCheckContainsNumberAndLetter": "Muss Buchstaben und Ziffern enthalten", - "passwordCheckSpace": "Kann keine Leerzeichen enthalten", - "welcomeTitle": "Willkommen bei {productName}", - "inviteWelcomeTitle": "{username} lädt dich zur Mitarbeit ein", - "terms": "Geschäftsbedingungen", - "privacy": "Datenschutzrichtlinie", - "registerHint": "Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu.", - "chooseAccount": "Wähle dein Konto", - "signInLabel": "Melde dich mit {name} an", - "bindAccount": "Konto zusammenführen", - "scanQrCode": "Scanne den QR-Code mit {name}", - "invalidThirdPartyParam": "Ungültige Drittpartei Param", - "account": "Konto", - "inputAccount": "Bitte gib dein Konto ein", - "ldapLogin": "LDAP-Anmeldung", - "resetPassword": "Passwort zurücksetzen", - "resetPasswordDesc": "Setze das Passwort von Benutzer {name} zurück. Nach dem Zurücksetzen wird ein neues Passwort generiert.", - "resetSuccess": "Zurücksetzen Erfolglos", - "resetSuccessDesc": "Passwort zurücksetzen war erfolgreich. Das neue Passwort lautet: {password}", - "resetLostPasswordSuccess": "Passwort zurücksetzen war erfolgreich. Bitte melden Sie sich erneut an.", - "copyPassword": "Passwort kopieren", - "poweredByLowcoder": "Powered by: Lowcoder.cloud", - }, - "preLoad": { - ...en.preLoad, - - "jsLibraryHelpText": "Füge JavaScript-Bibliotheken über URL-Adressen zu deiner aktuellen Anwendung hinzu. lodash, day.js, uuid, numbro sind zur sofortigen Verwendung in das System integriert. JavaScript-Bibliotheken werden geladen, bevor die Anwendung initialisiert wird, was sich auf die Leistung der Anwendung auswirken kann.", - "exportedAs": "Exportiert als", - "urlTooltip": "URL-Adresse der JavaScript-Bibliothek, [unpkg.com](https://unpkg.com/) oder [jsdelivr.net](https://www.jsdelivr.com/) wird empfohlen", - "externalLibsHelperText": "Es werden nur Bibliotheken unterstützt, die den UMD-Ansatz (Universal Module Definition) verwenden. Lesen Sie hier mehr: https://github.com/umdjs/umd", - "recommended": "Empfohlen", - "viewJSLibraryDocument": "Dokument", - "jsLibraryURLError": "Ungültige URL", - "jsLibraryExist": "JavaScript-Bibliothek existiert bereits", - "jsLibraryEmptyContent": "Keine JavaScript-Bibliotheken hinzugefügt", - "jsLibraryDownloadError": "Fehler beim Herunterladen der JavaScript-Bibliothek", - "jsLibraryInstallSuccess": "Die JavaScript-Bibliothek wurde erfolgreich installiert", - "jsLibraryInstallFailed": "Installation der JavaScript-Bibliothek fehlgeschlagen", - "jsLibraryInstallFailedCloud": "Vielleicht ist die Bibliothek in der Sandbox nicht verfügbar, [Dokumentation](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{Nachricht}", - "add": "Neu hinzufügen", - "jsHelpText": "Füge eine globale Methode oder Variable zur aktuellen Anwendung hinzu.", - "cssHelpText": "Füge der aktuellen Anwendung Stile hinzu. Die DOM-Struktur kann sich ändern, wenn das System iteriert. Versuche, Stile über Komponenteneigenschaften zu ändern.", - "scriptsAndStyles": "Skripte und Stile", - "jsLibrary": "JavaScript-Bibliothek", - }, - "editorTutorials": { - ...en.editorTutorials, - - "component": "Komponente", - "componentContent": "Die rechte Komponentenleiste bietet dir viele vorgefertigte Anwendungsblöcke (Komponenten). Diese können zur Verwendung auf die Leinwand gezogen werden. Mit ein wenig Programmierkenntnissen kannst du auch deine eigenen Komponenten erstellen.", - "canvas": "Segeltuch", - "canvasContent": "Erstelle deine Apps auf dem Canvas mit dem Ansatz \"What You See Is What You Get\". Ziehe die Komponenten einfach per Drag & Drop, um dein Layout zu gestalten, und verwende Tastenkombinationen zum schnellen Bearbeiten wie Löschen, Kopieren und Einfügen. Sobald du eine Komponente ausgewählt hast, kannst du jedes Detail anpassen - vom Styling und Layout bis hin zur Datenbindung und dem logischen Verhalten. Ein weiterer Vorteil ist das responsive Design, das dafür sorgt, dass deine Apps auf jedem Gerät gut aussehen.", - "queryData": "Daten abfragen", - "queryDataContent": "Du kannst hier Datenabfragen erstellen und dich mit MySQL, MongoDB, Redis, Airtable und vielen anderen Datenquellen verbinden. Nachdem du die Abfrage konfiguriert hast, klickst du auf \\'Run\\', um die Daten abzurufen und das Tutorial fortzusetzen.", - "compProperties": "Komponenten-Eigenschaften", - "interactiveDemo": "Interaktive Demo", - "interactiveDemoToolTip": "Klicken Sie hier, um eine interaktive Demo dieser Funktion zu starten", - }, - "supademos": { - ...en.supademos, - - "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", - }, - "homeTutorials": { - ...en.homeTutorials, - - "createAppContent": "🎉 Willkommen! Klicke auf \\'App\\' und beginne, deine erste Anwendung zu erstellen.", - "createAppTitle": "App erstellen", - }, - "npmRegistry": { - ...en.npmRegistry, - - "npmRegistryEnable": "Benutzerdefinierte NPM-Registrierung aktivieren", - "npmRegistryUrl": "NPM-Registrierungsurl", - "npmRegistryUrlRequired": "Bitte geben Sie die Registrierungs-URL ein", - "npmRegistryUrlInvalid": "Bitte geben Sie eine gültige URL ein", - "npmRegistryScope": "Umfang des Pakets", - "npmRegistryPattern": "Muster", - "npmRegistryPatternInvalid": "Bitte geben Sie ein gültiges Muster ein (beginnend mit @ für Organisationen).", - "npmRegistryAuth": "Authentifizierung", - "npmRegistryAuthType": "Art der Authentifizierung", - "npmRegistryAuthCredentials": "Berechtigungsnachweise zur Authentifizierung", - "npmRegistryAuthCredentialsRequired": "Bitte geben Sie die Anmeldedaten für die Registrierung ein", - "npmRegistryAuthCredentialsHelp": "Für die Basisauthentifizierung geben Sie den base64-kodierten Benutzernamen und das Passwort im Format \"base64(Benutzername:Passwort)\" an, für die Tokenauthentifizierung das Token.", - }, - "history": { - ...en.history, - - "layout": "\\'{0}' Layout-Anpassung", - "upgrade": "Upgrade \\'{0}\\'", - "delete": "Löschen \\'{0}\\'", - "add": "Hinzufügen \\'{0}\\'", - "modify": "Ändern \\'{0}\\'", - "rename": "\\'{1}\\' in \\'{0}\\' umbenennen", - "recover": "Wiederherstellen der '2'-Version", - "recoverVersion": "Version wiederherstellen", - "andSoOn": "und so weiter", - "timeFormat": "MM DD um hh:mm A", - "emptyHistory": "Keine Geschichte", - "currentVersionWithBracket": " (Aktuell)", - "currentVersion": "Aktuelle Version", - "justNow": "Gerade jetzt", - "history": "Geschichte", - }, - "home": { - ...en.home, - - "profile": "Profil", - "news": "Nachrichten", - "newsLoading": "Das Laden dauert ein wenig...", - "orgHome": "Homepage (Org)", - "yourOrg": "Ihre Organisation", - "orgHomeTitle": "Organisation Homepage", - "appMarketplace": "Anwendungsmarktplatz", - "allApplications": "Alle Apps", - "allModules": "Alle Module", - "allFolders": "Alle Ordner", - "yourFolders": "Deine Ordner", - "modules": "Module", - "module": "Modul", - "api": "Lowcoder-API", - "trash": "Papierkorb", - "marketplace": "Marktplatz", - "allCategories": "Alle Kategorien", - "queryLibrary": "Abfragebibliothek", - "datasource": "Datenquellen", - "selectDatasourceType": "Datenquellentyp auswählen", - "home": "Startseite | Verwaltungsbereich", - "all": "Alle", - "app": "App", - "navigation": "Navigation", - "navLayout": "PC-Navigation", - "navLayoutDesc": "Menü auf der linken Seite für eine einfache Desktop-Navigation.", - "mobileTabLayout": "Mobile Navigation", - "mobileTabLayoutDesc": "Untere Navigationsleiste für reibungsloses mobiles Surfen.", - "folders": "Ordner", - "folder": "Mappe", - "rootFolder": "Wurzel", - "import": "Importieren", - "export": "Exportieren nach JSON", - "show": "anzeigen", - "inviteUser": "Mitglieder einladen", - "createFolder": "Ordner erstellen", - "createFolderSubTitle": "Name des Ordners:", - "moveToFolder": "In Ordner verschieben", - "moveToTrash": "In den Papierkorb verschieben", - "moveToFolderSubTitle": "Bewege dich zu:", - "folderName": "Name des Ordners:", - "resCardSubTitle": "{time} von {creator}", - "trashEmpty": "Der Papierkorb ist leer.", - "projectEmpty": "Hier ist nichts.", - "projectEmptyCanAdd": "Du hast noch keine Apps. Klicke auf Neu, um loszulegen.", - "name": "Name", - "type": "Typ", - "creator": "Erstellt von", - "lastModified": "Zuletzt geändert", - "deleteTime": "Zeit löschen", - "createTime": "Zeit schaffen", - "datasourceName": "Name der Datenquelle", - "databaseName": "Name der Datenbank", - "nameCheckMessage": "Der Name darf nicht leer sein", - "deleteElementTitle": "Dauerhaft löschen", - "moveToTrashSubTitle": "{type} {name} wird in den Papierkorb verschoben.", - "deleteElementSubTitle": "Lösche {type} {name} dauerhaft, er kann nicht wiederhergestellt werden.", - "deleteSuccessMsg": "Gelöscht erfolgreich", - "deleteErrorMsg": "Gelöschter Fehler", - "recoverSuccessMsg": "Erfolgreich wiederhergestellt", - "newDatasource": "Neue Datenquelle", - "creating": "Erstellen...", - "chooseDataSourceType": "Datenquellentyp auswählen", - "folderAlreadyExists": "Der Ordner existiert bereits", - "newNavLayout": "{userName}'s {name}", - "newApp": "{userName}'s neuer {name} ", - "importError": "Importfehler, {message}", - "exportError": "Exportfehler, {message}", - "importSuccess": "Erfolg importieren", - "fileUploadError": "Datei-Upload-Fehler", - "fileFormatError": "Fehler im Dateiformat", - "groupWithSquareBrackets": "[Gruppe] ", - "allPermissions": "Besitzer", - "shareLink": "Link teilen: ", - "copyLink": "Link kopieren", - "appPublicMessage": "App veröffentlichen. Die App wird damit für jeden sichtbar.", - "modulePublicMessage": "Module veröffentlichen. Das Module wird damit für jeden sichtbar.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Veröffentlichen Sie Ihre App auf dem öffentlichen Marktplatz. Jeder kann sie dort sehen und kopieren.", - "moduleMarketplaceMessage": "Veröffentlichen Sie Ihr Modul auf dem öffentlichen Marktplatz. Jeder kann es dort sehen und kopieren.", - "marketplaceGoodPublishing": "Bitte stellen Sie sicher, dass Ihre App gut benannt und einfach zu bedienen ist. Entfernen Sie alle sensiblen Informationen vor der Veröffentlichung. Entfernen Sie außerdem lokale Datenquellen und ersetzen Sie sie durch statische, integrierte temporäre Daten.", - "noMarketplaceApps": "Noch sind keine Anwendungen auf dem Marktplatz.", - "errorMarketplaceApps": "Fehler beim Laden von Marketplace Apps", - "localMarketplaceTitle": "Lokaler Marktplatz", - "globalMarketplaceTitle": "Öffentlicher Marktplatz", - "memberPermissionList": "Berechtigungen: ", - "orgName": "{orgName} admins", - "addMember": "Mitglieder hinzufügen", - "addPermissionPlaceholder": "Bitte gib einen Namen ein, um Mitglieder zu suchen", - "searchMemberOrGroup": "Suche nach Mitgliedern oder Gruppen: ", - "addPermissionErrorMessage": "Berechtigung kann nicht hinzugefügt werden, {message}", - "copyModalTitle": "Klonen", - "copyNameLabel": "{type} Name", - "copyModalfolderLabel": "Zum Ordner hinzufügen", - "copyNamePlaceholder": "Bitte gib einen {type} Namen ein", - "chooseNavType": "Bitte wähle die Art der Navigation", - "createNavigation": "Navigation erstellen", - "howToUseAPI": "Verwendung der Open Rest API", - "support": "Unterstützung", - }, - "support": { - ...en.support, - - "supportTitle": "Lowcoder-Support", - "supportContent": "Wenn Sie Fragen haben oder Hilfe benötigen, nutzen Sie bitte das Ticketsystem, um Ihr Problem schnell zu lösen.", - "newSupportTicket": "Neues Support-Ticket", - "ticketTitle": "Titel", - "priority": "Priorität", - "assignee": "Zuständiger", - "status": "Ticketstatus", - "updatedTime": "Aktualisierte Zeit", - "active": "Aktiv", - "inactive": "Inaktiv", - "noEmail": "Keine E-Mail", - "details": "Einzelheiten", - "reloadTickets": "Tickets neu laden", - "createdDate": "Erstellungsdatum", - "updatedDate": "Aktualisierungsdatum", - "description": "Problembeschreibung", - "subtasks": "Unteraufgaben", - "subtasksProgress": "Fortschritt aller Unteraufgaben", - "attachments": "Anhänge", - "comments": "Kommentare", - "addComment": "Kommentar hinzufügen", - "addAttachment": "Anhang hinzufügen", - "edit": "Ticketbeschreibung bearbeiten", - "save": "Ticketbeschreibung speichern", - "cancel": "Abbrechen", - "submitComment": "Kommentar absenden", - "upload": "Anhang hochladen", - "selectFile": "Datei auswählen", - "ticketDescriptionUpdated": "Ticketbeschreibung erfolgreich aktualisiert!", - "ticketDescriptionUpdateFailed": "Ticketbeschreibung konnte nicht aktualisiert werden.", - "writeComment": "Einen Kommentar schreiben...", - "ticketCommentAdded": "Kommentar erfolgreich hinzugefügt!", - "ticketCommentFailed": "Kommentar konnte nicht hinzugefügt werden.", - "ticketCommentEmpty": "Bitte schreiben Sie einen Kommentar, bevor Sie ihn absenden.", - "ticketAttachmentUploaded": "Anhang erfolgreich hochgeladen!", - "ticketAttachmentFailed": "Anhang konnte nicht hochgeladen werden.", - "ticketAttachmentEmpty": "Bitte wählen Sie eine Datei zum Hochladen aus.", - "ticketFetchError": "Ticket konnte nicht geladen werden.", - "ticketNotFound": "Ticket nicht gefunden.", - "addAttachmentFileSize": "Datei muss kleiner als 5 MB sein!", - "goBack": "Zurück", - "noDescription": "Keine Beschreibung verfügbar.", - "createTicket": "Neues Support-Ticket erstellen", - "createTicketTitlePlaceholder": "Titel eingeben (max. 150 Zeichen)", - "createTicketDescriptionTitle": "Beschreiben Sie Ihr Problem - je mehr Details, desto besser:", - "createTicketDescriptionPlaceholder": "Beschreiben Sie das Problem im Detail, einschließlich: 1) Schritte zur Reproduktion des Problems, 2) Erwartetes Verhalten im Vergleich zum tatsächlichen Verhalten, 3) Code-Snippets, falls zutreffend, 4) Betroffene Komponenten, APIs oder Konfigurationen", - "createTicketSubmit": "Ticket absenden", - "createTicketInfoText": "Wenn Ihr Ticket erstellt wurde, können Sie im Abschnitt 'Details' Screenshots und Kommentare hinzufügen.", - }, - "carousel": { - ...en.carousel, - - "dotPosition": "Position der Navigationspunkte", - "autoPlay": "AutoPlay", - "showDots": "Navigationspunkte anzeigen", - }, - "npm": { - ...en.npm, - - "invalidNpmPackageName": "Ungültiger npm-Paketname oder URL.", - "pluginExisted": "Dieses npm Plugin existierte bereits", - "compNotFound": "Komponente {compName} nicht gefunden.", - "addPluginModalTitle": "Plugin aus einem npm-Repository hinzufügen", - "pluginNameLabel": "URL oder Name des npm-Pakets", - "noCompText": "Keine Komponenten.", - "compsLoading": "Laden...", - "removePluginBtnText": "entfernen", - "addPluginBtnText": "npm-Plugin hinzufügen", - }, - "toggleButton": { - ...en.toggleButton, - - "valueDesc": "Der Standardwert des Toggle-Buttons, zum Beispiel: Falsch", - "trueDefaultText": "Verstecken", - "falseDefaultText": "anzeigen", - "trueLabel": "Text für Wahr", - "falseLabel": "Text für Falsch", - "trueIconLabel": "Icon für Wahr", - "falseIconLabel": "Icon für Falsch", - "iconPosition": "Icon Position", - "showText": "Text anzeigen", - "alignment": "Ausrichtung", - "showBorder": "Grenze anzeigen", - }, - "componentDoc": { - ...en.componentDoc, - - "markdownDemoText": "**Lowcoder** | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", - "demoText": "Lowcoder | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", - "submit": "einreichen", - "style": "Stil", - "danger": "Gefahr", - "warning": "Warnung", - "success": "Erfolg", - "menu": "Menü", - "link": "Link zu", - "customAppearance": "Benutzerdefiniertes Erscheinungsbild", - "search": "Suche", - "pleaseInputNumber": "Bitte eine Nummer eingeben", - "mostValue": "Größter Wert", - "maxRating": "Maximale Bewertung", - "notSelect": "Nicht ausgewählt", - "halfSelect": "Halbe Auswahl", - "pleaseSelect": "Bitte wählen", - "title": "Titel", - "content": "Inhalt", - "componentNotFound": "Komponente ist nicht vorhanden", - "example": "Beispiele", - "defaultMethodDesc": "Den Wert der Eigenschaft {name} festlegen", - "propertyUsage": "Du kannst komponentenbezogene Informationen lesen, indem du über den Komponentennamen auf die Komponenteneigenschaften zugreifst, wo immer du JavaScript schreiben kannst.", - "property": "Eigenschaften", - "propertyName": "Eigenschaft Name", - "propertyType": "Typ", - "propertyDesc": "Beschreibung", - "event": "Veranstaltungen", - "eventName": "Name der Veranstaltung", - "eventDesc": "Beschreibung", - "mehtod": "Methoden", - "methodUsage": "Du kannst mit Komponenten über ihre Methoden interagieren und sie überall dort, wo du JavaScript schreiben kannst, mit ihrem Namen aufrufen. Oder du kannst sie über die Aktion \"Komponente\" eines Ereignisses aufrufen.", - "methodName": "Methode Name", - "methodDesc": "Beschreibung", - "showBorder": "Grenze anzeigen", - "haveTry": "Versuch es selbst", - "settings": "Einstellung", - "settingValues": "Einstellung Wert", - "defaultValue": "Standardwert", - "time": "Zeit", - "date": "Datum", - "noValue": "Keine", - "xAxisType": "X-Achse Typ", - "hAlignType": "Horizontale Ausrichtung", - "leftLeftAlign": "Links-Links-Ausrichtung", - "leftRightAlign": "Links-Rechts-Ausrichtung", - "topLeftAlign": "Ausrichtung von oben nach links", - "topRightAlign": "Ausrichtung oben-rechts", - "validation": "Validierung", - "required": "Erforderlich", - "defaultStartDateValue": "Standard Startdatum", - "defaultEndDateValue": "Standard-Enddatum", - "basicUsage": "Grundlegende Verwendung", - "basicDemoDescription": "Die folgenden Beispiele zeigen die grundlegende Verwendung der Komponente.", - "noDefaultValue": "Kein Standardwert", - "forbid": "Verboten", - "placeholder": "Platzhalter", - "pleaseInputPassword": "Bitte gib ein Passwort ein", - "password": "Passwort", - "textAlign": "Textausrichtung", - "length": "Länge", - "top": "Top", - "pleaseInputName": "Bitte gib deinen Namen ein", - "userName": "Name", - "fixed": "Festgelegt", - "responsive": "Ansprechbar", - "workCount": "Wortzahl", - "cascaderOptions": "Kaskadenoptionen", - "pleaseSelectCity": "Bitte wähle eine Stadt", - "advanced": "Fortgeschrittene", - "showClearIcon": "Löschen-Symbol anzeigen", - /* eslint-disable only-ascii/only-ascii */ - "appleOptionLabel": "🍎 Apfel", - "waterMelonOptionLabel": "🍉 Wassermelone", - "berryOptionLabel": "🍓 Erdbeere", - "lemonOptionLabel": "🍋 Zitrone", - "coconutOptionLabel": "🥥 Kokosnuss", - /* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Favoriten", - "option": "Option", - "singleFileUpload": "Einzelner Datei-Upload", - "multiFileUpload": "Mehrere Dateien hochladen", - "folderUpload": "Ordner hochladen", - "multiFile": "Mehrere Dateien", - "folder": "Mappe", - "open": "Öffnen Sie", - "favoriteFruits": "Lieblingsfrüchte", - "pleaseSelectOneFruit": "Wähle eine Frucht", - "notComplete": "Nicht vollständig", - "complete": "Vollständig", - "echart": "EChart", - "lineChart": "Liniendiagramm", - "basicLineChart": "Grundlegendes Liniendiagramm", - "lineChartType": "Liniendiagramm Typ", - "stackLineChart": "Gestapelte Linie", - "areaLineChart": "Bereich Linie", - "scatterChart": "Punktediagramm", - "scatterShape": "Streuung Form", - "scatterShapeCircle": "Kreis", - "scatterShapeRect": "Rechteck", - "scatterShapeTri": "Dreieck", - "scatterShapeDiamond": "Diamant", - "scatterShapePin": "Stecknadel", - "scatterShapeArrow": "Pfeil", - "pieChart": "Kreisdiagramm", - "basicPieChart": "Grundlegendes Kreisdiagramm", - "pieChatType": "Kreisdiagramm Typ", - "pieChartTypeCircle": "Donut-Tabelle", - "pieChartTypeRose": "Rosenkarte", - "titleAlign": "Titel Position", - "color": "Farbe", - "dashed": "Gestrichelt", - "imADivider": "Ich bin eine Trennungslinie", - "tableSize": "Tabelle Größe", - "subMenuItem": "UnterMenü {num}", - "menuItem": "Menü {num}", - "labelText": "Etikett", - "labelPosition": "Etikett - Position", - "labelAlign": "Etikett - Ausrichten", - "optionsOptionType": "Konfiguration Methode", - "styleBackgroundColor": "Hintergrundfarbe", - "styleBorderColor": "Farbe der Umrandung", - "styleColor": "Schriftfarbe", - "selectionMode": "Zeilenauswahl-Modus", - "paginationSetting": "Paginierung Einstellung", - "paginationShowSizeChanger": "Unterstützung der Benutzer bei der Änderung der Anzahl von Einträgen pro Seite", - "paginationShowSizeChangerButton": "Schaltfläche Größenänderer anzeigen", - "paginationShowQuickJumper": "Quick Jumper anzeigen", - "paginationHideOnSinglePage": "Verstecken, wenn es nur eine Seite gibt", - "paginationPageSizeOptions": "Seitengröße", - "chartConfigCompType": "Chart-Typ", - "xConfigType": "X-Achse Typ", - "loading": "Laden", - "disabled": "Deaktiviert", - "minLength": "Mindestlänge", - "maxLength": "Maximale Länge", - "showCount": "Wortzahl anzeigen", - "autoHeight": "Höhe", - "thousandsSeparator": "Tausendertrennzeichen", - "precision": "Nachkommastellen", - "value": "Standardwert", - "formatter": "Format", - "min": "Mindestwert", - "max": "Maximaler Wert", - "step": "Schrittweite", - "start": "Startzeit", - "end": "Endzeit", - "allowHalf": "Halbe Auswahl zulassen", - "filetype": "Dateityp", - "showUploadList": "Upload-Liste anzeigen", - "uploadType": "Upload Typ", - "allowClear": "Löschen-Symbol anzeigen", - "minSize": "Minimale Dateigröße", - "maxSize": "Maximale Dateigröße", - "maxFiles": "Maximale Anzahl von hochgeladenen Dateien", - "format": "Format", - "minDate": "Minimum Datum", - "maxDate": "Maximales Datum", - "minTime": "Mindestzeit", - "maxTime": "Maximale Zeit", - "text": "Text", - "type": "Typ", - "hideHeader": "Kopfzeile ausblenden", - "hideBordered": "Grenze ausblenden", - "src": "Bild-URL", - "showInfo": "Wert anzeigen", - "mode": "Modus", - "onlyMenu": "Nur Menü", - "horizontalAlignment": "Horizontale Ausrichtung", - "row": "Links", - "column": "Top", - "leftAlign": "Linke Ausrichtung", - "rightAlign": "Rechts ausrichten", - "percent": "Prozentsatz", - "fixedHeight": "Feste Höhe", - "auto": "Anpassungsfähig", - "directory": "Mappe", - "multiple": "Mehrere Dateien", - "singleFile": "Einzelne Datei", - "manual": "Handbuch", - "default": "Standard", - "small": "Klein", - "middle": "Mittel", - "large": "Groß", - "single": "Einzeln", - "multi": "Mehrere", - "close": "Schließen", - "ui": "UI-Modus", - "line": "Liniendiagramm", - "scatter": "Punktwolke", - "pie": "Kreisdiagramm", - "basicLine": "Grundlegendes Liniendiagramm", - "stackedLine": "Gestapeltes Liniendiagramm", - "areaLine": "Gebiet Gebietskarte", - "basicPie": "Grundlegendes Kreisdiagramm", - "doughnutPie": "Donut-Tabelle", - "rosePie": "Rosenkarte", - "category": "Kategorie Achse", - "circle": "Kreis", - "rect": "Rechteck", - "triangle": "Dreieck", - "diamond": "Diamant", - "pin": "Stecknadel", - "arrow": "Pfeil", - "left": "Links", - "right": "Rechts", - "center": "Zentrum", - "bottom": "Unten", - "justify": "Beide Enden rechtfertigen", - }, - "playground": { - ...en.playground, - - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Aktueller Datenstand", - "preview": "Vorschau", - "property": "Eigenschaften", - "console": "Visual Script-Konsole", - "executeMethods": "Ausführen von Methoden", - "noMethods": "Keine Methoden.", - "methodParams": "Parameter der Methode", - "methodParamsHelp": "Parameter der Eingabemethode mit JSON. Zum Beispiel kannst du die Parameter von setValue\\ wie folgt festlegen: [1] oder 1", - }, - "calendar": { - ...en.calendar, - - "headerBtnBackground": "Schaltfläche Hintergrund", - "btnText": "Schaltfläche Text", - "title": "Titel", - "selectBackground": "Ausgewählter Hintergrund", - }, - "idSource": { - ...en.idSource, - - "title": "OAuth-Anbieter", - "form": "E-Mail", - "pay": "Prämie", - "enable": "Aktiviere", - "unEnable": "Nicht aktiviert", - "loginType": "Anmeldung Typ", - "status": "Status", - "desc": "Beschreibung", - "manual": "Adressbuch:", - "syncManual": "Adressbuch synchronisieren", - "syncManualSuccess": "Sync Erfolgreich", - "enableRegister": "Registrierung zulassen", - "saveBtn": "Speichern und Aktivieren", - "save": "Speichern", - "none": "Keine", - "formPlaceholder": "Bitte {label} eingeben", - "formSelectPlaceholder": "Bitte wähle das {label}", - "saveSuccess": "Erfolgreich gespeichert", - "dangerLabel": "Gefahrenzone", - "dangerTip": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Gehe mit Vorsicht vor.", - "disable": "Deaktivieren", - "disableSuccess": "Erfolgreich deaktiviert", - "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", - "disableTip": "Tipps", - "disableContent": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Bist du sicher, dass du fortfahren kannst?", - "manualTip": "", - "lockTip": "Der Inhalt ist gesperrt. Um Änderungen vorzunehmen, klicke bitte auf das {icon}, um die Sperre aufzuheben.", - "lockModalContent": "Die Änderung des Feldes \"ID-Attribut\" kann erhebliche Auswirkungen auf die Benutzeridentifizierung haben. Bitte vergewissere dich, dass du die Auswirkungen dieser Änderung verstehst, bevor du fortfährst.", - "payUserTag": "Prämie", - "source": "Quelle", - "sourceName": "Auth Provider Name", - "sourceDescription": "Auth Provider Beschreibung", - "sourceIcon": "Auth-Provider-Symbol", - "sourceCategory": "Auth Provider Kategorie", - "souceIssuerURI": "Auth Provider Issuer URI", - "souceAuthorizationEndpoint": "Auth Provider Autorisierungsendpunkt", - "souceTokenEndpoint": "Auth Provider Token Endpunkt", - "souceUserInfoEndpoint": "Auth Provider Benutzerinfo Endpunkt", - "userInfoIntrospection": "OpenID-Benutzer-Introspektion verwenden", - "userCanSelectAccounts": "Benutzer kann aus Konten auswählen", - "sourceCategoryEnterprise": "Unternehmensidentität", - "sourceCategoryCloud": "Cloud-Dienste", - "sourceCategorySocial": "Soziale Medien", - "sourceCategoryDevelopment": "Entwicklung", - "sourceCategoryTools": "Tools & Produktivität", - }, - "slotControl": { - ...en.slotControl, - - "configSlotView": "Slot-Ansicht konfigurieren", - }, - "jsonLottie": { - ...en.jsonLottie, - - "lottieJson": "Lottie JSON", - "speed": "Geschwindigkeit", - "width": "Breite", - "height": "Höhe", - "backgroundColor": "Hintergrundfarbe", - "animationStart": "Animation Start", - "valueDesc": "Aktuelle JSON-Daten", - "loop": "Schleife", - "auto": "Auto", - "onHover": "Beim Schweben", - "singlePlay": "Einzelspiel", - "endlessLoop": "Endlosschleife", - "keepLastFrame": "Letzten Frame anzeigen lassen", - }, - "timeLine": { - ...en.timeLine, - - "titleColor": "Titel Farbe", - "subTitleColor": "Untertitel Farbe", - "labelColor": "Etikett Farbe", - "value": "Zeitleiste Daten", - "mode": "Bestellung anzeigen", - "left": "Inhalt Rechts", - "right": "Inhalt Links", - "alternate": "Alternative Reihenfolge der Inhalte", - "modeTooltip": "Einstellen, dass der Inhalt links/rechts oder abwechselnd auf beiden Seiten der Zeitleiste angezeigt wird", - "reverse": "Neueste Ereignisse zuerst", - "pending": "Ausstehender Knotenpunkt Text", - "pendingDescription": "Wenn diese Option aktiviert ist, wird ein letzter Knoten mit dem Text und einer Warteanzeige angezeigt.", - "defaultPending": "Kontinuierliche Verbesserung", - "clickTitleEvent": "Klick Titel Ereignis", - "clickTitleEventDesc": "Klick Titel Ereignis", - "Introduction": "Einführung Tasten", - "helpTitle": "Titel der Zeitleiste (erforderlich)", - "helpsubTitle": "Untertitel der Zeitleiste", - "helpLabel": "Beschriftung der Zeitleiste, die zur Anzeige von Daten verwendet wird", - "helpColor": "Zeigt die Farbe des Zeitachsenknotens an", - "helpDot": "Timeline-Knoten als Ameisendesign-Symbole rendern", - "helpTitleColor": "Individuell die Farbe des Knotentitels steuern", - "helpSubTitleColor": "Individuelle Steuerung der Farbe der Knotenuntertitel", - "helpLabelColor": "Individuelle Steuerung der Farbe des Knotensymbols", - "valueDesc": "Daten der Zeitleiste", - "clickedObjectDesc": "Daten zum angeklickten Objekt", - "clickedIndexDesc": "Index der angeklickten Objekte", - }, - "comment": { - ...en.comment, - - "value": "Daten der Kommentarliste", - "showSendButton": "Kommentare zulassen", - "title": "Titel", - "titledDefaultValue": "%d Kommentar in Summe", - "placeholder": "Shift + Enter zum Kommentieren; @ oder # für Schnelleingabe eingeben", - "placeholderDec": "Platzhalter", - "buttonTextDec": "Schaltfläche Titel", - "buttonText": "Kommentar", - "mentionList": "Daten der Erwähnungsliste", - "mentionListDec": "Key-Mention Keywords; Value-Mention Listendaten", - "userInfo": "Benutzerinfo", - "dateErr": "Datum Fehler", - "commentList": "Kommentar Liste", - "deletedItem": "Gelöschter Artikel", - "submitedItem": "Eingereichter Artikel", - "deleteAble": "Schaltfläche \"Löschen\" anzeigen", - "Introduction": "Einführung Tasten", - "helpUser": "Benutzerinformationen (erforderlich)", - "helpname": "Nutzername (erforderlich)", - "helpavatar": "Avatar URL (Hohe Priorität)", - "helpdisplayName": "Name anzeigen (niedrige Priorität)", - "helpvalue": "Kommentar Inhalt", - "helpcreatedAt": "Datum erstellen", - }, - "mention": { - ...en.mention, - - "mentionList": "Daten der Erwähnungsliste", - }, - "autoComplete": { - ...en.autoComplete, - - "value": "Auto Komplett Wert", - "checkedValueFrom": "Geprüfter Wert von", - "ignoreCase": "Suche ignorieren Fall", - "searchLabelOnly": "Nur Label suchen", - "searchFirstPY": "Erste Pinyin-Suche", - "searchCompletePY": "Vollständiges Pinyin suchen", - "searchText": "Text suchen", - "SectionDataName": "AutoVervollständigen Daten", - "valueInItems": "Wert in Positionen", - "type": "Typ", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Schlüssel", - "selectLable": "Etikett", - "ComponentType": "Komponente Typ", - "colorIcon": "Blau", - "grewIcon": "Grau", - "noneIcon": "Keine", - "small": "Klein", - "large": "Groß", - "componentSize": "Komponente Größe", - "Introduction": "Einführung Tasten", - "helpLabel": "Etikett", - "helpValue": "Wert", - }, - "responsiveLayout": { - ...en.responsiveLayout, - - "column": "Rubriken", - "addColumn": "Spalte hinzufügen", - "columnDefinition": "Definition einer Spalte", - "rowDefinition": "Zeile Definition", - "columnGap": "Lücke in der Spalte", - "rowGap": "Zeile Lücke", - "atLeastOneColumnError": "Responsive Layout behält mindestens eine Spalte bei", - "columnsPerRow": "Spalten pro Zeile", - "columnsSpacing": "Abstand zwischen den Spalten (px)", - "horizontal": "Horizontal", - "vertical": "Vertikal", - "mobile": "Mobil", - "tablet": "Tablette", - "desktop": "Desktop", - "rowStyle": "Reihe Stil", - "columnStyle": "Säulenstil", - "minWidth": "Min. Breite", - "rowBreak": "Reihenpause", - "useComponentWidth": "Eigene Größe verwenden", - "useComponentWidthDesc": "Verwende die Containerbreite anstelle der App-Breite", - "matchColumnsHeight": "Höhe der Säulen anpassen", - "rowLayout": "Zeilenlayout", - "columnsLayout": "Spalten Layout", - "columnsDefinitionTooltip": "Spalten können auf der Grundlage der CSS-Spalteneigenschaften frei definiert werden. Mit \"auto auto\" werden zum Beispiel zwei Spalten mit gleicher Breite erstellt. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "Die Zeilen können auf der Grundlage der CSS-Eigenschaften für Zeilen frei definiert werden. Zum Beispiel erzeugt 'auto auto' zwei Zeilen mit gleicher Höhe. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, - "navLayout": { - ...en.navLayout, - - "mode": "Modus", - "modeInline": "Inline", - "modeVertical": "Vertikal", - "modeHorizontal": "Horizontal", - "width": "Breite", - "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", - "navStyle": "Menü-Stil", - "navItemStyle": "Menüpunkt Stil", - "navBackground": "Hintergrundbild", - "mobileNavVerticalOrientation": "Vertikale Ausrichtung", - "mobileNavVerticalMaxWidth": "Maximale Breite", - "mobileNavBarHeight": "Höhe der Navigationsleiste", - "mobileNavVerticalShowSeparator": "Trennzeichen anzeigen", - "mobileNavIconSize": "Icon Größe", - }, - "timeZone": { - ...en.timeZone, - - "UTC-12:00": "(UTC-12:00) Int'l Date Line W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Hawaii", - "UTC-09:00": "(UTC-09:00) Alaska", - "UTC-08:00": "(UTC-08:00) Baja CA", - "UTC-07:00": "(UTC-07:00) Pazifische Zeit (US)", - "UTC-06:00": "(UTC-06:00) Zentrale Zeit (US)", - "UTC-05:00": "(UTC-05:00) Östliche Zeit (US)", - "UTC-04:00": "(UTC-04:00) Atlantische Zeit", - "UTC-03:00": "(UTC-03:00) Buenos Aires", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Kap Verde", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Berlin, Rom", - "UTC+02:00": "(UTC+02:00) Athen, Bukarest", - "UTC+03:00": "(UTC+03:00) Moskau", - "UTC+04:00": "(UTC+04:00) Dubai, Muscat", - "UTC+05:00": "(UTC+05:00) Karatschi", - "UTC+05:30": "(UTC+05:30) Neu Delhi", - "UTC+05:45": "(UTC+05:45) Kathmandu", - "UTC+06:00": "(UTC+06:00) Dhaka", - "UTC+06:30": "(UTC+06:30) Yangon", - "UTC+07:00": "(UTC+07:00) Bangkok", - "UTC+08:00": "(UTC+08:00) Peking, HK", - "UTC+09:00": "(UTC+09:00) Tokio, Seoul", - "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", - "UTC+10:00": "(UTC+10:00) Sydney", - "UTC+11:00": "(UTC+11:00) Salomonen, Neukaledonien", - "UTC+12:00": "(UTC+12:00) Auckland, Fidschi", - "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", - "UserChoice": "UserChoice", - }, - "tour": { - ...en.tour, - - "section1Title": "Schritte", - "section1Subtitle": "Schritte", - "tooltipExampleHeader": "Beispiel:", - "tooltipSignatureHeader": "Unterschrift:", - "options": { - ...en.tour.options, - - "title": { - ...en.tour.options.title, - - "label": "Titel", - "placeholder": "Willkommen", - "tooltip": "Der Titel des Schrittes. Jeder HTML-Code ist hier gültig.", - }, - "description": { - ...en.tour.options.description, - - "label": "Beschreibung", - "placeholder": "Willkommen bei lowcoder!", - "tooltip": "Die Beschreibung des Schrittes. Jeder HTML-Code ist hier gültig.", - }, - "mask": { - ...en.tour.options.mask, - - "label": "Maske", - "tooltip": "Ob die Maskierung zu aktivieren, ändern Sie die Maske Stil und Farbe füllen, indem Sie benutzerdefinierte Requisiten, die Standardeinstellung folgt der `Maske` Eigenschaft von Tour.", - "tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", - }, - "arrow": { - ...en.tour.options.arrow, - - "label": "Pfeil", - "tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht; andernfalls zeigt der Pfeil immer in die Nähe der Oberseite der Komponente.", - "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.options.type, - - "label": "Typ", - "tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt zur Gestaltung der Haupttour gesteuert werden.", - }, - "target": { - ...en.tour.options.target, - - "label": "Komponente", - "tooltip": "Die Komponente, auf die Sie den Tooltip setzen wollen, oder lassen Sie es leer, wenn Sie einfach ein Modal in der Mitte des Bildschirms haben wollen.", - }, - "coverImage": { - ...en.tour.options.coverImage, - - "label": "Cover Image URI", - "tooltip": "Ein URI für ein Bild, das Sie mit dem Schritt anzeigen möchten", - }, - }, - "indicatorsRender": { - ...en.tour.indicatorsRender, - - "label": "Indikatoren rendern", - "tooltip": "Bietet einen benutzerdefinierten Indikator dafür, in welchem Schritt Sie sich befinden", - "tooltipValidTypes": "Format ist eine Funktion, die zwei Argumente akzeptiert, `current` und `total` und einen ReactNode zurückgibt", - "tooltipFunctionSignatureHeader": "Unterschrift:", - "tooltipFunctionSignature": "(aktuell: Zahl, gesamt: Zahl) => ReactNode", - "tooltipExampleHeader": "Beispiel:", - }, - "disabledInteraction": { - ...en.tour.disabledInteraction, - - "label": "Interaktion deaktivieren", - "tooltip": "Deaktivieren Sie die Interaktion in dem markierten Bereich.", - }, - "mask": { - ...en.tour.mask, - - "label": "Maske", - "tooltip": "Aktivieren der Maskierung, Ändern des Maskenstils und der Füllfarbe durch Übergabe von benutzerdefinierten Requisiten, die Vorgabe folgt der Eigenschaft `Maske` von Tour. Kann auf der Ebene der Stufe überschrieben werden.", - "tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", - }, - "placement": { - ...en.tour.placement, - - "label": "Platzierung", - "tooltip": "Position der Leitkarte in Bezug auf das Zielelement. Kann auf Schrittebene überschrieben werden.", - "tooltipValidOptions": "Gültige Optionen", - "tooltipValidOptionsAbove": "Oberhalb des Bauteils:", - "tooltipValidOptionsLeft": "Links neben der Komponente:", - "tooltipValidOptionsRight": "Rechts neben der Komponente:", - "tooltipValidOptionsBelow": "Unterhalb des Bauteils:", - "tooltipValidOptionsOnTop": "Oben auf der Komponente:", - }, - "arrow": { - ...en.tour.arrow, - - "label": "Pfeil", - "tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht, andernfalls zeigt der Pfeil immer in die Nähe des oberen Teils der Komponente. Kann auf der Schrittebene außer Kraft gesetzt werden.", - "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.type, - - "label": "Typ", - "tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt \"Styling der Haupttour\" gesteuert werden. Kann auf Schritt-Ebene überschrieben werden.", - }, - }, - "docUrls": { - ...en.docUrls, - - "docHome": "https://docs.lowcoder.cloud/", - "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - "components": "https://app.lowcoder.cloud/components/{compType}", - "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - "optionList": "", - "terms": "https://lowcoder.cloud/terms", - "privacy": "https://lowcoder.cloud/privacy", - "aboutUs": "https://lowcoder.cloud/about", - "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", - "introVideo": "", - "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - "devNpmPluginText": "Wie man ein npm-Plugin entwickelt", - "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - "thirdLibUrlText": "Bibliotheken von Drittanbietern verwenden", - }, - "datasourceTutorial": { - ...en.datasourceTutorial, - - "mysql": "", - "mongodb": "", - "postgres": "", - "redis": "", - "es": "", - "smtp": "", - "clickHouse": "", - }, - "queryTutorial": { - ...en.queryTutorial, - - "js": "", - "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - "customComponent": { - ...en.customComponent, - - "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", - }, - "template": { - ...en.template, - - "cloneUrl": "/apps/vorlage-import/", - }, - "lowcoderUrl": { - ...en.lowcoderUrl, - - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", - }, + ...en, + +"productName": "Lowcoder", +"productDesc": "Erstelle Softwareanwendungen für Dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist eine hervorragende Alternative zu Retool, Appsmith und Tooljet.", +"notSupportedBrowser": "Dein aktueller Browser hat möglicherweise Kompatibilitätsprobleme. Um ein optimales Nutzererlebnis zu gewährleisten, verwende bitte die neueste Version von Chrome.", +"create": "Erstellen", +"move": "Verschieben", +"addItem": "Hinzufügen", +"newItem": "Neu", +"copy": "Kopieren", +"rename": "Umbenennen", +"delete": "Löschen", +"deletePermanently": "Dauerhaft löschen", +"remove": "Entfernen", +"recover": "Wiederherstellen", +"edit": "Bearbeiten", +"view": "Ansicht", +"value": "Wert", +"data": "Daten", +"information": "Informationen", +"success": "Erfolg", +"warning": "Warnung", +"error": "Fehler", +"reference": "Referenz", +"text": "Text", +"basic": "Grundlegend", +"label": "Etikett", +"layout": "Layout", +"color": "Farbe", +"form": "Formular", +"menu": "Menü", +"menuItem": "Menüpunkt", +"ok": "OK", +"cancel": "Abbrechen", +"finish": "Beenden", +"reset": "Zurücksetzen", +"icon": "Icon", +"code": "Code", +"title": "Titel", +"emptyContent": "Leer", +"more": "Mehr", +"search": "Suche", +"back": "Zurück", +"accessControl": "Zugangskontrolle", +"copySuccess": "Erfolgreich kopiert", +"copyError": "Kopierfehler", +"api": { + ...en.api, + +"publishSuccess": "Erfolgreich veröffentlicht", +"recoverFailed": "Wiederherstellung fehlgeschlagen", +"needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version.", +}, +"codeEditor": { + ...en.codeEditor, + +"notSupportAutoFormat": "Der aktuelle Code-Editor unterstützt keine automatische Formatierung.", +"fold": "Zuklappen", +}, +"exportMethod": { + ...en.exportMethod, + +"setDesc": "Eigenschaft einstellen: {property}", +"clearDesc": "Eigenschaft löschen: {property}", +"resetDesc": "{property} auf Standardwert zurücksetzen", +}, +"method": { + ...en.method, + +"focus": "Fokus setzen", +"focusOptions": "Fokus-Optionen. Siehe HTMLElement.focus()", +"blur": "Fokus entfernen", +"click": "Klick", +"select": "Auswählen", +"setSelectionRange": "Start- und Endposition der Textauswahl festlegen", +"selectionStart": "0-basierter Index des ersten ausgewählten Zeichens", +"selectionEnd": "0-basierter Index des Zeichens nach dem letzten ausgewählten Zeichen", +"setRangeText": "Textbereich ersetzen", +"replacement": "String zum Einfügen", +"replaceStart": "0-basierter Index des ersten zu ersetzenden Zeichens", +"replaceEnd": "0-basierter Index des Zeichens nach dem letzten zu ersetzenden Zeichen", +}, +"errorBoundary": { + ...en.errorBoundary, + +"encounterError": "Das Laden einer Komponente ist fehlgeschlagen. Bitte überprüfe deine Konfiguration.", +"clickToReload": "Klicke bitte um Neu zu laden.", +"errorMsg": "Fehler: ", +}, +"imgUpload": { + ...en.imgUpload, + +"notSupportError": "Unterstützt nur {types} Bild-Dateitypen", +"exceedSizeError": "Die Bildgröße darf {size} nicht überschreiten", +}, +"gridCompOperator": { + ...en.gridCompOperator, + +"notSupport": "Nicht unterstützt", +"selectAtLeastOneComponent": "Bitte wähle mindestens eine Komponente aus", +"selectCompFirst": "Komponenten vor dem Kopieren auswählen", +"noContainerSelected": "Kein Container ausgewählt", +"deleteCompsSuccess": "Erfolgreich gelöscht. Drücke {undoKey} zum Rückgängigmachen.", +"deleteCompsTitle": "Komponenten löschen", +"deleteCompsBody": "Bist du sicher, dass du die ausgewählten Komponenten {compNum} löschen willst?", +"cutCompsSuccess": "Erfolgreich selektiert und gelöscht. Drücke {pasteKey}, um die Komponente einzufügen, oder {undoKey}, um den Vorgang rückgängig zu machen.", +}, +"leftPanel": { + ...en.leftPanel, + +"queries": "Datenabfragen", +"globals": "Globale Datenvariablen", +"propTipsArr": "{num} Posten", +"propTips": "{num} Tasten", +"propTipArr": "Posten {num}", +"propTip": "{num} Schlüssel", +"stateTab": "Status", +"settingsTab": "Einstellungen", +"toolbarTitle": "Individualisierung", +"toolbarPreload": "Skripte und Stile", +"components": "Aktive Komponenten", +"modals": "Modale Fenster", +"expandTip": "Klicken, um die aktuellen Daten (State) der Komponente zu sehen.", +"collapseTip": "Klicken Sie, um die Ansicht zu reduzieren.", +"layers": "Schichten", +"activatelayers": "Dynamische Ebenen verwenden", +"selectedComponents": "Ausgewählte Komponenten...", +"displayComponents": "Steuerung Display", +"lockComponents": "Kontrolle Position", +}, +"bottomPanel": { + ...en.bottomPanel, + +"title": "Datenabfragen", +"run": "Start", +"noSelectedQuery": "Keine Datenabfrage ausgewählt", +"metaData": "Metadaten der Datenquelle", +"noMetadata": "Keine Metadaten verfügbar", +"metaSearchPlaceholder": "Metadaten suchen", +"allData": "Alle Daten", +}, +"rightPanel": { + ...en.rightPanel, + +"propertyTab": "Eigenschaften", +"noSelectedComps": "Keine Komponenten ausgewählt. Klicke auf eine Komponente, um ihre Eigenschaften anzuzeigen.", +"createTab": "Einfügen", +"searchPlaceHolder": "Komponenten oder Module suchen", +"uiComponentTab": "Komponenten", +"extensionTab": "Erweiterungen", +"modulesTab": "Module", +"moduleListTitle": "Module", +"pluginListTitle": "Erweiterungen (Plugins)", +"emptyModules": "Module sind wiederverwendbare Mikro-Apps. Du kannst sie in deine App einbetten.", +"searchNotFound": "Kannst du die richtige Komponente nicht finden? Schreibe uns!", +"emptyPlugins": "Keine Plugins hinzugefügt.", +"contactUs": "Kontakt", +"issueHere": "hier.", +"folderListTitle": "Ordner", +}, +"prop": { + ...en.prop, + +"expand": "Erweitern", +"columns": "Spalten", +"videokey": "Video Schlüssel", +"rowSelection": "Zeilenauswahl", +"toolbar": "Symbolleiste", +"pagination": "Paginierung", +"logo": "Logo", +"style": "Stil", +"inputs": "Variablen", +"meta": "Metadaten", +"data": "Daten", +"hide": "Verstecken", +"loading": "Laden", +"disabled": "Deaktiviert", +"placeholder": "Platzhalter", +"showClear": "Schaltfläche \"Löschen\" anzeigen", +"showSearch": "Suche anzeigen", +"defaultValue": "Standardwert", +"required": "Erforderliches Feld", +"showEmptyValidation": "Validierung beim Leeren/Zurücksetzen anzeigen", +"readOnly": "Nur lesbar", +"readOnlyTooltip": "Schreibgeschützte Komponenten erscheinen normal, können aber nicht geändert werden.", +"minimum": "Minimum", +"maximum": "Maximum", +"regex": "Regular Expression", +"minLength": "Mindestlänge", +"maxLength": "Maximale Länge", +"height": "Höhe", +"width": "Breite", +"selectApp": "App auswählen", +"showCount": "Anzahl anzeigen", +"tabIndex": "Registerkarte \"Index", +"textType": "Textart", +"customRule": "Benutzerdefinierte Regel", +"customRuleTooltip": "Eine nicht leere Zeichenkette weist auf einen Fehler hin; eine leere Zeichenkette oder null bedeutet, dass die Validierung erfolgreich war. Beispiel: ", +"manual": "Handbuch", +"map": "Karte", +"json": "JSON", +"use12Hours": "12-Stunden-Format verwenden", +"hourStep": "Stunden Schritt", +"minuteStep": "Minuten Schritt", +"secondStep": "Sekunden Schritt", +"minDate": "Frühestes Datum", +"maxDate": "Spätestes Datum", +"minTime": "Früheste Zeit", +"maxTime": "Späteste Zeit", +"type": "Typ", +"showLabel": "Etikett anzeigen", +"showHeader": "Kopfbereich anzeigen", +"showBody": "Hauptbereich zeigen", +"showSider": "Schieberegler anzeigen", +"innerSider": "Innere Seiten", +"showFooter": "Fußbereich anzeigen", +"maskClosable": "Zum Schließen auf \"Schließen\" klicken", +"escapeClose": "Schließen bei Escape-Taste aktivieren", +"toggleClose": "Schaltfläche \"Schließen\" aktivieren", +"showMask": "Maske darstellen", +"textOverflow": "Textüberlauf", +"scrollbar": "Bildlaufleisten anzeigen", +"showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", +"showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", +"siderScrollbar": "Bildlaufleisten im Sider anzeigen", +"mainScrollbar": "Bildlaufleisten im Hauptinhalt anzeigen", +"modalScrollbar": "Show Scrollbars in Modal", +"drawerScrollbar": "Bildlaufleisten in der Schublade anzeigen", +"textAreaScrollBar": "Show Scrollbars in Text Area", +"siderRight": "Schieberegler rechts", +"siderWidth": "Sider Width", +"siderWidthTooltip": "Die Seitenbreite unterstützt Prozentwerte (%) und Pixel (px).", +"siderCollapsedWidth": "Sider Zusammengeklappte Breite", +"siderCollapsedWidthTooltip": "Die eingeklappte Breite des Siders unterstützt Prozentwerte (%) und Pixel (px).", +"siderCollapsible": "Sider Zusammenklappbar", +"siderCollapsed": "Sider kollabiert", +"contentScrollbar": "Bildlaufleisten im Inhalt anzeigen", +"appID": "App-Id", +"showApp": "Eine App im Inhaltsbereich anzeigen", +"showAppTooltip": "Sie können ganze Apps im Inhaltsbereich anzeigen lassen. Bitte beachten Sie, dass wir für Module keine Inputs, Outputs, Events und Methoden unterstützen.", +"baseURL": "API-Basis-URL", +"horizontal": "Horizontal", +"minHorizontalWidth": "Horizontale Mindestbreite", +"component": "Komponente", +"className": "Klasse", +"dataTestId": "Test ID", +"preventOverwriting": "Überschreiben von Stilen verhindern", +"color": "Farbe", +"horizontalGridCells": "Horizontale Rasterzellen", +"verticalGridCells": "Vertikale Rasterzellen", +"timeZone": "ZeitZone", +"pickerMode": "Picker Mode", +}, +"autoHeightProp": { + ...en.autoHeightProp, + +"auto": "Automatisch", +"fixed": "Festgelegt", +}, +"textOverflowProp": { + ...en.textOverflowProp, + +"ellipsis": "Mouseover", +"wrap": "Wickeln", +}, +"labelProp": { + ...en.labelProp, + +"text": "Etikett Text", +"tooltip": "QuickInfo", +"position": "Position", +"collapse": "Kollabieren", +"left": "Links", +"right": "Rechts", +"top": "Open", +"align": "Ausrichtung", +"width": "Breite", +"widthTooltip": "Die Etikettenbreite unterstützt Prozentwerte (%) und Pixel (px).", +}, +"eventHandler": { + ...en.eventHandler, + +"eventHandlers": "Ereignishandler", +"emptyEventHandlers": "Keine Ereignishandler", +"incomplete": "Unvollständige Auswahl", +"inlineEventTitle": "Bei {eventName}", +"event": "Ereignis", +"action": "Aktion", +"noSelect": "Keine Auswahl", +"runQuery": "Eine Datenabfrage ausführen", +"selectQuery": "Datenabfrage auswählen", +"controlComp": "Eine Komponente steuern", +"runScript": "JavaScript ausführen", +"runScriptPlaceHolder": "Hier kann man JavaScript Code schreiben", +"component": "Komponente", +"method": "Methode", +"setTempState": "Einen temporären Zustand setzen", +"state": "Zustand", +"triggerModuleEvent": "Ein Modulereignis auslösen", +"moduleEvent": "Modulereignis", +"goToApp": "Zu einer anderen App wechseln", +"queryParams": "Abfrageparameter", +"queryVariables": "Abfrage-Variablen", +"hashParams": "Hash-Parameter", +"showNotification": "Eine Benachrichtigung anzeigen", +"text": "Text", +"level": "Stufe", +"duration": "Dauer", +"notifyDurationTooltip": "Zeiteinheit kann 's' (Sekunde, Standard) oder 'ms' (Millisekunde) sein. Maximale Dauer ist {max} Sekunden", +"goToURL": "URL öffnen", +"openInNewTab": "In neuem Tab öffnen", +"copyToClipboard": "In die Zwischenablage kopieren", +"copyToClipboardValue": "Wert", +"export": "Daten exportieren", +"exportNoFileType": "Keine Auswahl (optional)", +"fileName": "Dateiname", +"fileNameTooltip": "Dateiendung angeben, um Dateityp zu spezifizieren, z.B. 'bild.png'.", +"fileType": "Dateityp", +"condition": "Nur ausführen wenn...", +"conditionTooltip": "Ereignis-Handler nur ausführen, wenn diese Bedingung 'wahr' ist.", +"debounce": "Warten für", +"throttle": "Drosseln für", +"slowdownTooltip": "Verwende Warten oder Drosseln, um die Häufigkeit von Aktionen zu steuern. Zeiteinheit kann 'ms' (Millisekunde, Standard) oder 's' (Sekunde) sein.", +"notHandledError": "Nicht behandelter Fehler", +"currentApp": "Aktuelle App", +"inputEventHandlers": "Eingabe-Ereignishandler", +"inputEventHandlersDesc": "Ereignishandler bezüglich Benutzereingaben", +"buttonEventHandlers": "Button-Ereignishandler", +"buttonEventHandlersDesc": "Ereignishandler bezüglich Button-Klicks", +"changeEventHandlers": "Änderungs-Ereignishandler", +"changeEventHandlersDesc": "Ereignishandler bezüglich Wertänderungen", +"editedEventHandlers": "Bearbeitungs-Ereignishandler", +"editedEventHandlersDesc": "Ereignishandler bezüglich Bearbeitungsstatus von Elementen", +"clickEventHandlers": "Klick-Ereignishandler", +"clickEventHandlersDesc": "Ereignishandler bezüglich Klicks", +"keyDownEventHandlers": "Tastendruck-Ereignishandler", +"keyDownEventHandlersDesc": "Ereignishandler bezüglich Tastendrücken", +"checkboxEventHandlers": "Checkbox-Ereignishandler", +"checkboxEventHandlersDesc": "Ereignishandler bezüglich Checkbox-Änderungen", +"dragEventHandlers": "Drag-and-Drop-Ereignishandler", +"dragEventHandlersDesc": "Ereignishandler bezüglich Drag-and-Drop-Ereignissen", +"elementEventHandlers": "Element-Ereignishandler", +"elementEventHandlersDesc": "Ereignishandler bezüglich generischer Element-Ereignisse", +"mediaEventHandlers": "Medien-Ereignishandler", +"mediaEventHandlersDesc": "Ereignishandler bezüglich Medienereignissen", +"scannerEventHandlers": "Scanner-Ereignishandler", +"scannerEventHandlersDesc": "Ereignishandler bezüglich Scanner-Ereignissen", +"chartEventHandlers": "Diagramm-Ereignishandler", +"chartEventHandlersDesc": "Ereignishandler bezüglich Diagrammereignissen", +"geoMapEventHandlers": "Geo-Map-Ereignishandler", +"geoMapEventHandlersDesc": "Ereignishandler bezüglich Geo-Map-Ereignissen", +"stepEventHandlers": "Schritt-Ereignishandler", +"stepEventHandlersDesc": "Ereignishandler bezüglich Schritt-UI-Ereignissen", +"shareEventHandlers": "Teilen-Ereignishandler", +"shareEventHandlersDesc": "Ereignishandler bezüglich Teilen-Ereignissen", +"selectEventHandlers": "Auswahl-Ereignishandler", +"selectEventHandlersDesc": "Ereignishandler bezüglich Auswahl-Ereignissen", +"meetingEventHandlers": "Besprechungs-Ereignishandler", +"meetingEventHandlersDesc": "Ereignishandler bezüglich Besprechungs-Ereignissen", +"collaborationEventHandlers": "Kollaborations-Ereignishandler", +"collaborationEventHandlersDesc": "Ereignishandler bezüglich Kollaborations-Ereignissen", +"set": "Satz", +"clear": "Klar", +"reset": "Reset", +"messageType": "Message Type", +"placement": "Platzierung", +"description": "Beschreibung", +}, +"event": { + ...en.event, + +"submit": "Absenden", +"submitDesc": "Auslöser beim Absenden.", +"change": "Ändern", +"changeDesc": "Auslöser bei Änderungen.", +"focus": "Fokussieren", +"focusDesc": "Auslöser beim Fokussieren.", +"blur": "Verlassen", +"blurDesc": "Auslöser beim Verlassen.", +"click": "Klicken", +"clickDesc": "Auslöser beim Klicken.", +"doubleClick": "Doppelklick", +"doubleClickDesc": "Auslöser beim Doppelklicken.", +"rightClick": "Rechtsklick", +"rightClickDesc": "Auslöser beim Rechtsklicken.", +"keyDown": "Tastendruck", +"keyDownDesc": "Auslöser beim Tastendruck.", +"select": "Auswählen", +"selectDesc": "Auslöser bei Auswahl.", +"checked": "Aktiviert", +"checkedDesc": "Auslöser, wenn eine Checkbox aktiviert wird.", +"unchecked": "Deaktiviert", +"uncheckedDesc": "Auslöser, wenn eine Checkbox deaktiviert wird.", +"drag": "Ziehen", +"dragDesc": "Auslöser beim Ziehen.", +"drop": "Fallen lassen", +"dropDesc": "Auslöser beim Fallenlassen.", +"open": "Öffnen", +"openDesc": "Auslöser beim Öffnen.", +"mute": "Stummschalten", +"muteDesc": "Auslöser beim Stummschalten eines Mikrofons.", +"unmute": "Stummschaltung aufheben", +"unmuteDesc": "Auslöser beim Aufheben der Stummschaltung eines Mikrofons.", +"showCamera": "Kamera zeigen", +"showCameraDesc": "Auslöser, wenn die Kamera gezeigt wird.", +"hideCamera": "Kamera verstecken", +"hideCameraDesc": "Auslöser, wenn die Kamera versteckt wird.", +"shareScreen": "Bildschirm teilen", +"shareScreenDesc": "Auslöser beim Teilen des Bildschirms.", +"shareScreenEnd": "Bildschirmteilen beenden", +"shareScreenEndDesc": "Auslöser beim Beenden des Bildschirmteilens.", +"shareControl": "Steuerung teilen", +"shareControlDesc": "Auslöser beim Teilen der Steuerung.", +"shareControlEnd": "Steuerungsteilen beenden", +"shareControlEndDesc": "Auslöser beim Beenden des Steuerungsteilens.", +"shareContent": "Inhalt teilen", +"shareContentDesc": "Auslöser beim Teilen von Inhalten.", +"shareContentEnd": "Inhaltsteilen beenden", +"shareContentEndDesc": "Auslöser beim Beenden des Inhaltsteilens.", +"stopShare": "Stop Share", +"stopShareDesc": "Auslöser bei Stop Share", +"meetingStart": "Besprechung beginnen", +"meetingStartDesc": "Auslöser beim Start einer Besprechung.", +"meetingEnd": "Besprechung beenden", +"meetingEndDesc": "Auslöser beim Beenden einer Besprechung.", +"meetingJoin": "Besprechung beitreten", +"meetingJoinDesc": "Auslöser beim Beitritt zu einer Besprechung.", +"meetingLeave": "Besprechung verlassen", +"meetingLeaveDesc": "Auslöser beim Verlassen einer Besprechung.", +"play": "Abspielen", +"playDesc": "Auslöser beim Abspielen.", +"pause": "Pausieren", +"pauseDesc": "Auslöser beim Pausieren.", +"ended": "Beendet", +"endedDesc": "Auslöser wenn beendet.", +"step": "Schritt", +"stepDesc": "Auslöser bei einem Schritt.", +"next": "Nächster", +"nextDesc": "Auslöser beim nächsten Schritt.", +"finished": "Abgeschlossen", +"finishedDesc": "Auslöser wenn abgeschlossen.", +"saved": "Gespeichert", +"savedDesc": "Auslöser wenn gespeichert.", +"edited": "Bearbeitet", +"editedDesc": "Auslöser wenn bearbeitet.", +"geoMapMove": "Geo-Map Bewegen", +"geoMapMoveDesc": "Auslöser beim Bewegen der Geo-Map.", +"geoMapZoom": "Geo-Map Zoomen", +"geoMapZoomDesc": "Auslöser beim Zoomen der Geo-Map.", +"geoMapSelect": "Geo-Map Auswahl", +"geoMapSelectDesc": "Auslöser bei einer Auswahl auf der Geo-Map.", +"scannerSuccess": "Scanner Erfolg", +"scannerSuccessDesc": "Auslöser bei erfolgreichem Scan.", +"scannerError": "Scanner Fehler", +"scannerErrorDesc": "Auslöser bei einem Scannerfehler.", +"chartZoom": "Diagramm Zoomen", +"chartZoomDesc": "Auslöser beim Zoomen eines Diagramms.", +"chartHover": "Diagramm Hover", +"chartHoverDesc": "Auslöser beim Hover über einem Diagramm.", +"chartSelect": "Diagramm Auswählen", +"chartSelectDesc": "Auslöser bei der Auswahl eines Diagramms.", +"chartDeselect": "Diagramm Abwählen", +"chartDeselectDesc": "Auslöser beim Abwählen eines Diagramms.", +"close": "Schließen", +"closeDesc": "Auslöser beim Schließen.", +"parse": "Parsen", +"parseDesc": "Auslöser beim Parsen.", +"success": "Erfolg", +"successDesc": "Auslöser bei Erfolg.", +"delete": "Löschen", +"deleteDesc": "Auslöser beim Löschen.", +"mention": "Erwähnung", +"mentionDesc": "Auslöser bei einer Erwähnung.", +"search": "Suche", +"searchDesc": "Auslöser für die Suche", +"selectedChange": "Auswahl ändern", +"selectedChangeDesc": "Auslöser bei geänderter Auswahl", +"clickExtra": "Klicken Sie auf Aktion", +"clickExtraDesc": "Auslöser bei Klick auf Extra-Element", +"start": "Start", +"startDesc": "Auslöser beim Start", +"resume": "Lebenslauf", +"resumeDesc": "Auslöser im Lebenslauf", +"countdown": "Countdown", +"countdownDesc": "Auslöser am Ende des Countdowns", +"reset": "Zurücksetzen endet", +"resetDesc": "Auslöser bei Reset Timer", +"refresh": "Refresh", +"refreshDesc": "Auslöser beim Aktualisieren", +"sortChange": "Sortieren Ändern", +"sortChangeDesc": "Auslöser für Sortieränderungen", +}, +"style": { + ...en.style, + +"boxShadowColor": "Schattenfarbe", +"boxShadow": "Box Schatten", +"opacity": "Deckkraft", +"animation": "Animation", +"animationIterationCount": "Animation Iterationszahl", +"animationDelay": "Animation Verzögerung", +"animationDuration": "Animation Dauer", +"resetTooltip": "Stile zurücksetzen. Lösche das Eingabefeld, um einen einzelnen Stil zurückzusetzen.", +"textColor": "Textfarbe", +"contrastText": "Kontrastreiche Textfarbe", +"generated": "Generiert", +"customize": "Anpassen", +"staticText": "Statischer Text", +"accent": "Akzent", +"validate": "Validierungsmeldung", +"border": "Randfarbe", +"borderRadius": "Randradius", +"borderWidth": "Randbreite", +"borderStyle": "Randstil", +"background": "Hintergrund", +"headerBackground": "Kopfzeilenhintergrund", +"siderBackground": "Seitenleisten-Hintergrund", +"footerBackground": "Fußzeilenhintergrund", +"fill": "Füllung", +"track": "Spur", +"links": "Verknüpfungen", +"thumb": "Schiebereglergriff", +"thumbBorder": "Schieberegler-Rand", +"checked": "Aktiviert", +"unchecked": "Nicht aktiviert", +"handle": "Griff", +"tags": "Etiketten", +"tagsText": "Etiketten-Text", +"multiIcon": "Mehrfachauswahl-Symbol", +"tabText": "Tab-Text", +"tabAccent": "Tab-Akzent", +"checkedBackground": "Aktivierter Hintergrund", +"uncheckedBackground": "Deaktivierter Hintergrund", +"uncheckedBorder": "Deaktivierter Rand", +"indicatorBackground": "Indikator-Hintergrund", +"tableCellText": "Zellentext", +"selectedRowBackground": "Ausgewählter Zeilenhintergrund", +"hoverRowBackground": "Zeilen-Hover-Hintergrund", +"hoverBackground": "Hover-Hintergrund", +"textTransform": "Textumwandlung", +"textDecoration": "Textdekoration", +"alternateRowBackground": "Alternierender Zeilenhintergrund", +"tableHeaderBackground": "Tabellenkopf-Hintergrund", +"tableHeaderText": "Tabellenkopf-Text", +"toolbarBackground": "Werkzeugleisten-Hintergrund", +"toolbarText": "Werkzeugleisten-Text", +"pen": "Stift", +"footerIcon": "Fußzeilen-Symbol", +"tips": "Tipps", +"margin": "Außenabstand", +"padding": "Innenabstand", +"marginLeft": "Linker Außenabstand", +"marginRight": "Rechter Außenabstand", +"marginTop": "Oberer Außenabstand", +"marginBottom": "Unterer Außenabstand", +"containerHeaderPadding": "Kopfzeilen-Innenabstand", +"containerFooterPadding": "Fußzeilen-Innenabstand", +"containerSiderPadding": "Seitenleisten-Innenabstand", +"containerBodyPadding": "Körper-Innenabstand", +"minWidth": "Mindestbreite", +"aspectRatio": "Seitenverhältnis", +"text": "Text", +"textSize": "Textgröße", +"textWeight": "Textgewicht", +"fontFamily": "Schriftart", +"fontStyle": "Schriftstil", +"backgroundImage": "Hintergrundbild", +"backgroundImageRepeat": "Hintergrundbild-Wiederholung", +"backgroundImageSize": "Hintergrundbild-Größe", +"backgroundImagePosition": "Hintergrundbild-Position", +"backgroundImageOrigin": "Hintergrundbild-Ursprung", +"headerBackgroundImage": "Kopfzeilen-Hintergrundbild", +"headerBackgroundImageRepeat": "Kopfzeilen-Bildwiederholung", +"headerBackgroundImageSize": "Kopfzeilen-Bildgröße", +"headerBackgroundImagePosition": "Kopfzeilen-Bildposition", +"headerBackgroundImageOrigin": "Kopfzeilen-Bildursprung", +"footerBackgroundImage": "Fußzeilen-Hintergrundbild", +"footerBackgroundImageRepeat": "Fußzeilen-Bildwiederholung", +"footerBackgroundImageSize": "Fußzeilen-Bildgröße", +"footerBackgroundImagePosition": "Fußzeilen-Bildposition", +"footerBackgroundImageOrigin": "Fußzeilen-Bildursprung", +"rotation": "Drehung", +"alternateBackground": "Alternative Hintergrundfarbe", +"headerText": "Textfarbe der Kopfzeile", +"labelColor": "Etikett Farbe", +"label": "Etikett Farbe", +"lineHeight": "Höhe der Linie", +"subTitleColor": "Untertitel Farbe", +"titleText": "Titel Farbe", +"success": "Erfolg Farbe", +"siderBackgroundImage": "Sider Hintergrundbild", +"siderBackgroundImageRepeat": "Sider Hintergrundbild Wiederholung", +"siderBackgroundImageSize": "Sider Hintergrundbild Größe", +"siderBackgroundImagePosition": "Sider Hintergrundbild Position", +"siderBackgroundImageOrigin": "Sider Hintergrundbild Ursprung", +"activeBackground": "Aktive Hintergrundfarbe", +"labelBackground": "Hintergrundfarbe des Etiketts", +"gradientBackground": "Farbverlauf Hintergrundfarbe", +"direction": "Richtung", +"chartOpacity": "Deckkraft", +"chartBoxShadow": "Box Schatten", +"chartBorderStyle": "Border Style", +"chartBorderRadius": "Border Radius", +"chartBorderWidth": "Border Width", +"chartTextSize": "Text Size", +"chartTextWeight": "Text Gewicht", +"chartFontFamily": "Schriftfamilie", +"chartFontStyle": "Font Style", +"chartBackgroundColor": "Hintergrundfarbe", +"chartGradientColor": "Farbverlauf", +"chartShadowColor": "Schattenfarbe", +"chartBorderColor": "Farbe der Umrandung", +"chartTextColor": "Textfarbe", +"detailSize": "Detail Größe", +"radiusTip": "Legt den Radius der Ecken des Elements fest. Beispiel: 5px, 50% oder 1em.", +"gapTip": "Legt den Abstand zwischen Zeilen und Spalten in einem Raster- oder Flexcontainer fest. Beispiel: 10px, 1rem oder 5%.", +"cardRadiusTip": "Definiert den Eckenradius für Kartenkomponenten. Beispiel: 10px, 15px.", +"borderWidthTip": "Legt die Breite des Randes des Elements fest. Beispiel: 1px, 0.5em oder dünn.", +"borderStyleTip": "Legt den Stil des Randes fest. Beispiel: solid, dashed, dotted oder none.", +"marginTip": "Definiert den äußeren Abstand um ein Element. Beispiel: 10px, 2em oder auto. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 0px 1px 5px 2px.", +"directionTip": "Legt die Richtung des Layouts fest. Beispiel: row, column oder row-reverse.", +"detailSizeTip": "Definiert die Größe bestimmter Details im Layout. Beispiel: 10px, 2em oder 80%.", +"chartOpacityTip": "Legt die Deckkraft des Diagramms fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent).", +"chartBoxShadowTip": "Definiert den Schatten, den das Diagramm wirft. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3).", +"chartBorderStyleTip": "Legt den Stil der Diagrammrand fest. Beispiel: solid, dashed oder dotted.", +"chartBorderRadiusTip": "Definiert den Eckenradius der Diagrammgrenze. Beispiel: 10px, 20%.", +"chartBorderWidthTip": "Legt die Breite der Diagrammgrenze fest. Beispiel: 2px, 0.5em.", +"chartTextSizeTip": "Legt die Schriftgröße des Diagrammtexts fest. Beispiel: 16px, 1em, 120%.", +"chartTextWeightTip": "Legt die Schriftstärke des Diagrammtexts fest. Beispiel: normal, bold oder 700.", +"chartFontFamilyTip": "Legt die Schriftart für den Diagrammtext fest. Beispiel: Arial, Helvetica oder 'Times New Roman'.", +"chartFontStyleTip": "Legt den Schriftstil des Diagrammtexts fest. Beispiel: normal, italic oder oblique.", +"animationIterationCountTip": "Legt fest, wie oft eine Animation ausgeführt werden soll. Beispiel: infinite, 1 oder 3.", +"opacityTip": "Legt den Transparenzgrad des Elements fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent), 0 (unsichtbar).", +"boxShadowColorTip": "Legt die Farbe des Schattens fest. Beispiel: rgba(0, 0, 0, 0.3), #FF5733.", +"chartBackgroundColorTip": "Legt die Hintergrundfarbe des Diagramms fest. Beispiel: #FFFFFF, rgba(255, 255, 255, 0.8).", +"chartGradientColorTip": "Definiert die Farbverläufe für den Diagrammhintergrund. Beispiel: linear-gradient(to right, #ff7e5f, #feb47b).", +"chartShadowColorTip": "Legt die Schattenfarbe des Diagramms fest. Beispiel: rgba(0, 0, 0, 0.2), #333333.", +"chartBorderColorTip": "Definiert die Farbe der Diagrammgrenze. Beispiel: #000000, rgba(0, 0, 0, 0.5).", +"chartTextColorTip": "Legt die Farbe des Diagrammtexts fest. Beispiel: #333333, rgba(51, 51, 51, 1).", +"boxShadowTip": "Definiert den Schatten, der von einem Element geworfen wird. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", +"animationDelayTip": "Legt die Verzögerung vor Beginn der Animation fest. Beispiel: 1s, 500ms, 0.", +"animationDurationTip": "Legt die Dauer der Animation fest. Beispiel: 2s, 3s, 500ms.", +"paddingTip": "Definiert den inneren Abstand innerhalb eines Elements. Beispiel: 10px, 2em, 5%. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 10px 21px 5px 20px.", +"containerHeaderPaddingTip": "Definiert den Innenabstand für den Container-Header. Beispiel: 10px, 1rem.", +"containerSiderPaddingTip": "Definiert den Innenabstand für die Container-Seitenleiste. Beispiel: 8px, 1em.", +"containerFooterPaddingTip": "Definiert den Innenabstand für den Container-Footer. Beispiel: 12px, 1rem.", +"containerBodyPaddingTip": "Definiert den Innenabstand für den Container-Body. Beispiel: 15px, 2em.", +"textSizeTip": "Legt die Schriftgröße des Textes fest. Beispiel: 14px, 1.2em, 110%.", +"textWeightTip": "Definiert die Schriftstärke des Textes. Beispiel: normal, bold, 400.", +"fontFamilyTip": "Legt die Schriftart des Textes fest. Beispiel: Arial, Verdana, 'Courier New'.", +"textDecorationTip": "Definiert die Verzierung des Textes. Beispiel: underline, line-through, none.", +"textTransformTip": "Legt die Groß- und Kleinschreibung des Textes fest. Beispiel: uppercase, lowercase, capitalize.", +"fontStyleTip": "Definiert den Schriftstil des Textes. Beispiel: normal, italic, oblique.", +"backgroundImageTip": "Legt das Hintergrundbild eines Elements fest. Beispiel: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", +"headerBackgroundImageTip": "Legt das Hintergrundbild des Headers fest. Beispiel: url('header.jpg').", +"footerBackgroundImageTip": "Legt das Hintergrundbild des Footers fest. Beispiel: url('footer.jpg').", +"backgroundImageRepeatTip": "Definiert, wie das Hintergrundbild wiederholt wird. Beispiel: no-repeat, repeat-x, repeat-y.", +"headerBackgroundImageRepeatTip": "Definiert, wie das Header-Hintergrundbild wiederholt wird. Beispiel: repeat-x, no-repeat.", +"footerBackgroundImageRepeatTip": "Definiert, wie das Footer-Hintergrundbild wiederholt wird. Beispiel: repeat-y, no-repeat.", +"backgroundImageSizeTip": "Definiert die Größe des Hintergrundbilds. Beispiel: cover, contain, 50% 50%.", +"backgroundImagePositionTip": "Legt die Position des Hintergrundbilds fest. Beispiel: center, top right, 10% 20%.", +"backgroundImageOriginTip": "Legt den Bereich fest, in dem das Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", +"headerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Header-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", +"footerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Footer-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", +"rotationTip": "Legt den Rotationswinkel des Elements fest. Beispiel: 45deg, 90deg, -180deg.", +"lineHeightTip": "Legt die Höhe einer Textzeile fest. Beispiel: 1.5, 2, 120%.", +}, +"export": { + ...en.export, + +"hiddenDesc": "Wenn true, wird die Komponente ausgeblendet", +"disabledDesc": "Wenn true, ist die Komponente deaktiviert und nicht interaktiv", +"visibleDesc": "Wenn true, ist die Komponente sichtbar", +"inputValueDesc": "Aktueller Wert der Eingabe", +"invalidDesc": "Zeigt an, ob der Wert ungültig ist", +"placeholderDesc": "Platzhaltertext, wenn kein Wert eingestellt ist", +"requiredDesc": "Wenn true, ist ein gültiger Wert erforderlich", +"submitDesc": "Formular abschicken", +"richTextEditorValueDesc": "Aktueller Inhalt des Text-Editors", +"richTextEditorReadOnlyDesc": "Wenn true, ist der Editor schreibgeschützt", +"richTextEditorHideToolBarDesc": "Wenn true, wird die Symbolleiste ausgeblendet", +"jsonEditorDesc": "Aktuelle JSON-Daten", +"sliderValueDesc": "Aktuell ausgewählter Schieberegler Wert", +"sliderMaxValueDesc": "Maximaler Wert des Schiebereglers", +"sliderMinValueDesc": "Mindestwert des Schiebereglers", +"sliderStartDesc": "Wert des gewählten Startpunkts", +"sliderEndDesc": "Wert des ausgewählten Endpunkts", +"ratingValueDesc": "Aktuell ausgewählte Bewertung", +"ratingMaxDesc": "Maximaler Wert der Bewertung", +"datePickerValueDesc": "Aktuell ausgewähltes Datum", +"datePickerFormattedValueDesc": "Ausgewähltes Datum formatiert", +"datePickerTimestampDesc": "Zeitstempel des ausgewählten Datums", +"dateRangeStartDesc": "Startdatum des Bereichs", +"dateRangeEndDesc": "Enddatum des Bereichs", +"dateRangeStartTimestampDesc": "Zeitstempel des Startdatums", +"dateRangeEndTimestampDesc": "Zeitstempel des Enddatums", +"dateRangeFormattedValueDesc": "Formatierter Datumsbereich", +"dateRangeFormattedStartValueDesc": "Formatiertes Startdatum", +"dateRangeFormattedEndValueDesc": "Formatiertes Enddatum", +"timePickerValueDesc": "Aktuell gewählte Zeit", +"timePickerFormattedValueDesc": "Formatierte ausgewählte Zeit", +"timeRangeStartDesc": "Startzeit des Zeitbereichs", +"timeRangeEndDesc": "Endzeit des Zeitbereichs", +"timeRangeFormattedValueDesc": "Formatierter Zeitbereich", +"timeRangeFormattedStartValueDesc": "Formatierte Startzeit des Zeitbereichs", +"timeRangeFormattedEndValueDesc": "Formatierte Endzeit des Zeitbereichs", +"timeZone": "Zeitzone", +"timeZoneDesc": "Zeitzone des ausgewählten Datums", +}, +"validationDesc": { + ...en.validationDesc, + +"email": "Bitte gib eine gültige E-Mail Adresse ein", +"url": "Bitte gib eine gültige URL ein", +"regex": "Die Eingabe muss zum regulären Ausdruck passen.", +"maxLength": "Zu viele Zeichen, aktuell: {length}, maximal: {maxLength}", +"minLength": "Nicht genug Zeichen, aktuell: {length}, minimal: {minLength}", +"maxValue": "Wert überschreitet Maximum, aktuell: {value}, Maximum: {max}", +"minValue": "Wert unter Minimum, aktuell: {value}, Minimum: {min}", +"maxTime": "Zeit überschreitet Maximum, aktuell: {time}, Maximum: {maxTime}", +"minTime": "Zeit unter Minimum, aktuell: {time}, Minimum: {minTime}", +"maxDate": "Datum überschreitet Maximum, aktuell: {date}, Maximum: {maxDate}", +"minDate": "Datum unter Minimum, aktuell: {date}, Minimum: {minDate}", +}, +"query": { + ...en.query, + +"noQueries": "Keine Datenabfragen verfügbar.", +"queryTutorialButton": "Ansicht {value} Dokumente", +"datasource": "Deine Datenquellen", +"newDatasource": "Neue Datenquelle", +"generalTab": "Allgemein", +"notificationTab": "Benachrichtigung", +"variablesTab": "Variablen", +"advancedTab": "Erweiterte Einstellungen", +"showFailNotification": "Benachrichtigung bei Misserfolg anzeigen", +"failCondition": "Fehlerbedingungen für Misserfolg", +"failConditionTooltip1": "Passe die Fehlerbedingungen und die entsprechenden Benachrichtigungen an.", +"failConditionTooltip2": "Wenn eine Bedingung erfüllt ist, wird die Abfrage als fehlgeschlagen markiert und die entsprechende Benachrichtigung ausgelöst.", +"showSuccessNotification": "Benachrichtigung bei Erfolg anzeigen", +"successMessageLabel": "Erfolgsmeldung", +"successMessage": "Datenabfrage ist erfolgreich gelaufen", +"notifyDuration": "Dauer", +"notifyDurationTooltip": "Dauer der Benachrichtigung. Die Zeiteinheit kann \\'s\\' (Sekunde, Standard) oder \\'ms\\' (Millisekunde) sein. Der Standardwert ist {default}s. Das Maximum ist {max}s.", +"successMessageWithName": "{name} Lauf erfolgreich", +"failMessageWithName": "{name} Lauf fehlgeschlagen: {result}", +"showConfirmationModal": "Bestätigungsmodal vor der Ausführung anzeigen", +"confirmationMessageLabel": "Bestätigungsnachricht", +"confirmationMessage": "Bist du sicher, dass du diese Datenabfrage ausführen willst?", +"newQuery": "Neue Datenabfrage", +"newFolder": "Neue Mappe", +"recentlyUsed": "Kürzlich verwendet", +"folder": "Ordner", +"folderNotEmpty": "Der Ordner ist nicht leer", +"dataResponder": "Daten Aktor", +"tempState": "Temporärer Zustand", +"transformer": "Daten Transformator", +"quickRestAPI": "HTTP REST-Abfrage", +"quickStreamAPI": "Daten Stream-Abfrage", +"quickGraphql": "GraphQL-Abfrage", +"quickAlasql": "Local SQL Query", +"databaseType": "Datenbank-Typ", +"chooseDatabase": "Datenbank auswählen", +"lowcoderAPI": "Lowcoder-API", +"executeJSCode": "JavaScript-Code", +"importFromQueryLibrary": "von Abfragebibliothek", +"preparedDataQueries": "Ihre vorbereiteten Datenabfragen", +"adHocDataQueries": "Qick Data Queries (ohne vorbereitete Abfrage oder Datenquelle)", +"queryResultTransformer": "Manipulieren Sie eine Abfrageantwort, um Daten vor der Bindung zu transformieren", +"queryResultReactor": "Reagieren Sie auf jede Änderung eines dynamischen Datenwertes", +"importFromFile": "Aus Datei importieren", +"triggerType": "Ausgelöst, wenn...", +"triggerTypeAuto": "Eingaben ändern sich oder nach dem Laden der Seite", +"triggerTypePageLoad": "Nach dem Laden der Anwendung (Seite)", +"triggerTypeManual": "Manuell auslösen", +"triggerTypeInputChange": "Wenn sich Eingaben ändern", +"triggerTypeQueryExec": "Nach Ausführung einer Daten-Abfrage", +"triggerTypeTimeout": "Nach dem Laden der Anwendung (Seite) und Timeout", +"delayTime": "Verzögerungszeit", +"chooseDataSource": "Datenquelle wählen", +"method": "Methode", +"updateExceptionDataSourceTitle": "Fehlerhafte Datenquelle aktualisieren", +"updateExceptionDataSourceContent": "Aktualisiere die folgende Abfrage mit der gleichen Datenquelle:", +"update": "Update", +"disablePreparedStatement": "SQL Prepared Statements deaktivieren", +"disablePreparedStatementTooltip": "Die Deaktivierung von SQL Prepared Statements kann dynamisches SQL erzeugen, erhöht aber das Risiko von SQL-Injection", +"timeout": "Abbruch nach", +"timeoutTooltip": "Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Standardwert: {defaultSeconds} Sekunden. Maximaler Wert: {maxSeconds} Sekunden. Z.B. 300 (d.h. 300ms), 800ms, 5s.", +"periodic": "Diese Datenabfrage regelmäßig ausführen", +"periodicTime": "Zeitraum", +"periodicTimeTooltip": "Zeitraum zwischen aufeinanderfolgenden Ausführungen. Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Mindestwert: 100 ms. Bei Werten unter 100ms wird die periodische Ausführung deaktiviert. Z.B. 300 (d.h. 300ms), 800ms, 5s.", +"cancelPrevious": "Ignoriere die Ergebnisse früherer unvollendeter Datenabfragen", +"cancelPreviousTooltip": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen unvollständigen Datenabfragen ignoriert, wenn sie nicht abgeschlossen wurden, und diese ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", +"dataSourceStatusError": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen nicht abgeschlossenen Datenabfragen ignoriert, und die ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", +"success": "Erfolg", +"fail": "Fehler", +"successDesc": "Ausgelöst, wenn die Ausführung erfolgreich ist", +"failDesc": "Ausgelöst, wenn die Ausführung fehlschlägt", +"fixedDelayError": "Abfrage nicht ausgeführt", +"execSuccess": "Erfolgreich gelaufen", +"execFail": "Lauf fehlgeschlagen", +"execIgnored": "Die Ergebnisse dieser Datenabfrage wurden ignoriert", +"deleteSuccessMessage": "Erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden", +"dataExportDesc": "Daten, die durch die aktuelle Datenabfrage erhalten wurden", +"codeExportDesc": "Aktueller Query Status Code", +"successExportDesc": "Ob die aktuelle Datenabfrage erfolgreich ausgeführt wurde", +"messageExportDesc": "Von der aktuellen Datenabfrage zurückgegebene Informationen", +"extraExportDesc": "Andere Daten in der aktuellen Datenabfrage", +"isFetchingExportDesc": "Ist die aktuelle Datenabfrage in der Verarbeitung?", +"runTimeExportDesc": "Aktuelle Datenabfrage-Ausführungszeit (ms)", +"latestEndTimeExportDesc": "Letzte Laufzeit", +"triggerTypeExportDesc": "Auslöser Typ", +"chooseResource": "Wähle eine Ressource", +"createDataSource": "Eine neue Datenquelle erstellen", +"editDataSource": "Bearbeiten", +"datasourceName": "Datenquelle Name", +"datasourceNameRuleMessage": "Bitte gib einen Namen für die Datenquelle ein", +"generalSetting": "Allgemeine Einstellungen", +"advancedSetting": "Erweiterte Einstellungen", +"port": "Hafen", +"portRequiredMessage": "Bitte einen Port eingeben", +"portErrorMessage": "Bitte gib einen korrekten Port ein", +"connectionType": "Verbindungstyp", +"regular": "Regulär", +"host": "Gastgeber", +"hostRequiredMessage": "Bitte gib einen Host-Domänennamen oder eine IP-Adresse ein", +"userName": "Benutzer Name", +"password": "Passwort", +"encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", +"uriRequiredMessage": "Bitte gib eine URI ein", +"urlRequiredMessage": "Bitte gib eine URL ein", +"uriErrorMessage": "Bitte gib eine korrekte URI ein", +"urlErrorMessage": "Bitte gib eine korrekte URL ein", +"httpRequiredMessage": "Bitte gib http:// oder https:// ein.", +"databaseName": "Datenbank Name", +"databaseNameRequiredMessage": "Bitte gib einen Datenbanknamen ein", +"useSSL": "SSL verwenden", +"userNameRequiredMessage": "Bitte gib deinen User-Namen ein", +"passwordRequiredMessage": "Bitte gib dein Passwort ein", +"authentication": "Authentifizierung", +"authenticationType": "Authentifizierung Typ", +"sslCertVerificationType": "SSL-Zertifikat-Verifizierung", +"sslCertVerificationTypeDefault": "CA-Zertifikat verifizieren", +"sslCertVerificationTypeSelf": "Selbstsigniertes Zertifikat verifizieren", +"sslCertVerificationTypeDisabled": "Deaktiviert", +"selfSignedCert": "Selbstsigniertes Zertifikat", +"selfSignedCertRequireMsg": "Bitte gib dein Zertifikat ein", +"enableTurnOffPreparedStatement": "SQL Prepared Statements für Abfragen aktivieren", +"enableTurnOffPreparedStatementTooltip": "Du kannst SQL Prepared Statements auf der Registerkarte \"Erweitert\" der Abfrage aktivieren oder deaktivieren.", +"serviceName": "Dienst Name", +"serviceNameRequiredMessage": "Bitte gib deinen Dienstnamen ein", +"useSID": "SID verwenden", +"connectSuccessfully": "Verbindung erfolgreich", +"saveSuccessfully": "Erfolgreich gerettet", +"database": "Datenbank", +"cloudHosting": "Der in der Cloud gehostete Lowcoder kann nicht auf lokale Dienste mit 127.0.0.1 oder localhost zugreifen. Versuche, dich mit öffentlichen Netzwerkdatenquellen zu verbinden oder verwende einen Reverse Proxy für private Dienste.", +"notCloudHosting": "Für den Einsatz von Docker-Hosts verwendet Lowcoder Bridge-Netzwerke, daher sind 127.0.0.1 und localhost als Hostadressen ungültig. Für den Zugriff auf Datenquellen auf lokalen Rechnern siehe", +"howToAccessHostDocLink": "Wie man auf die Host-API/DB zugreift", +"returnList": "Rückgabe Liste", +"chooseDatasourceType": "Datenquellentyp auswählen", +"viewDocuments": "Dokumente ansehen", +"testConnection": "Test Verbindung", +"save": "Speichern", +"whitelist": "Whitelist", +"whitelistTooltip": "Füge die IP-Adressen von Lowcoder nach Bedarf zu deiner Datenquellen-Zulassungsliste hinzu.", +"address": "Adresse: ", +"nameExists": "Name {name} existiert bereits", +"jsQueryDocLink": "Über JavaScript Query", +"dynamicDataSourceConfigLoadingText": "Laden einer zusätzlichen Datenquellenkonfiguration...", +"dynamicDataSourceConfigErrText": "Die Konfiguration der zusätzlichen Datenquelle konnte nicht geladen werden.", +"retry": "Wiederholen", +"categoryDatabase": "Datenbank", +"categoryBigdata": "Große Daten", +"categoryAi": "KI", +"categoryDevops": "DevOps", +"categoryAppdevelopment": "App-Entwicklung", +"categoryWorkflow": "Arbeitsablauf", +"categoryMessaging": "Nachrichtenübermittlung", +"categoryAssets": "Assets & Speicher", +"categoryProjectManagement": "Projektmanagement", +"categoryCrm": "CRM", +"categoryEcommerce": "E-Commerce", +"categoryWebscrapers": "Web-Scraper & Open Data", +"categoryDocumentHandling": "Bericht & Dokumentenerstellung", +"categoryRPA": "Roboter Prozess Automatisierung", +"componentsUsingQueryTitle": "Abfrageverwendung", +"componentsUsingQuery": "Wo wird diese Abfrage verwendet", +"variables": "Variablen", +}, +"sqlQuery": { + ...en.sqlQuery, + +"keyValuePairs": "Schlüssel-Werte-Paare", +"object": "Objekt", +"allowMultiModify": "Mehrzeilige Änderungen zulassen", +"allowMultiModifyTooltip": "Wenn diese Option ausgewählt ist, werden alle Zeilen, die die Bedingungen erfüllen, bearbeitet. Andernfalls wird nur die erste Zeile, die die Bedingungen erfüllt, bearbeitet.", +"array": "Array", +"insertList": "Liste einfügen", +"insertListTooltip": "Werte werden eingefügt, wenn sie nicht existieren", +"filterRule": "Filter-Regel", +"updateList": "Liste aktualisieren", +"updateListTooltip": "Vorhandene Werte können durch die gleichen Werte der Einfügeliste überschrieben werden", +"sqlMode": "SQL-Mode", +"guiMode": "GUI-Mode", +"operation": "Operation", +"insert": "Einfügen", +"upsert": "Einfügen, aber aktualisieren, wenn es einen Konflikt gibt", +"update": "Update", +"delete": "Löschen", +"bulkInsert": "Stapel Einfügen", +"bulkUpdate": "Stapel Aktualisieren", +"table": "Tabelle", +"primaryKeyColumn": "Primärschlüsselspalte", +}, +"EsQuery": { + ...en.EsQuery, + +"rawCommand": "Roh-Abfragebefehl", +"queryTutorialButton": "Elasticsearch API Dokumente anzeigen", +"request": "Abfrage", +}, +"googleSheets": { + ...en.googleSheets, + +"rowIndex": "Zeilenindex", +"spreadsheetId": "Tabellenkalkulations-ID", +"sheetName": "Tabellen-Blatt Name", +"readData": "Daten lesen", +"appendData": "Zeile anhängen", +"updateData": "Zeile aktualisieren", +"deleteData": "Zeile löschen", +"clearData": "Reihe löschen", +"serviceAccountRequireMessage": "Bitte gib dein Servicekonto ein", +"ASC": "ASC", +"DESC": "DESC", +"sort": "Sortieren", +"sortPlaceholder": "Platzhalter", +}, +"queryLibrary": { + ...en.queryLibrary, + +"export": "Exportieren nach JSON", +"noInput": "Die aktuelle Abfrage hat keine Eingabe", +"inputName": "Name", +"inputDesc": "Beschreibung", +"emptyInputs": "Keine Eingaben", +"clickToAdd": "Hinzufügen", +"chooseQuery": "Abfrage wählen", +"viewQuery": "Ansicht Abfrage", +"chooseVersion": "Version wählen", +"latest": "Neueste", +"publish": "Veröffentlichen", +"historyVersion": "Historische Version", +"deleteQueryLabel": "Abfrage löschen", +"deleteQueryContent": "Die Abfrage kann nach dem Löschen nicht wiederhergestellt werden. Die Abfrage löschen?", +"run": "Lauf", +"readOnly": "Nur lesen", +"exit": "Abbruch", +"recoverAppSnapshotContent": "Die aktuelle Abfrage zur Version {version} wiederherstellen", +"searchPlaceholder": "Suchabfrage", +"allQuery": "Alle Abfragen", +"deleteQueryTitle": "Abfrage löschen", +"unnamed": "Unbenannt", +"publishNewVersion": "Neue Version veröffentlichen", +"publishSuccess": "Erfolgreich veröffentlicht", +"version": "Version", +"desc": "Beschreibung", +}, +"snowflake": { + ...en.snowflake, + +"accountIdentifierTooltip": "Siehe ", +"extParamsTooltip": "Zusätzliche Verbindungsparameter konfigurieren", +}, +"lowcoderQuery": { + ...en.lowcoderQuery, + +"queryOrgUsers": "Abfrage Arbeitsbereich Benutzer", +}, +"redisQuery": { + ...en.redisQuery, + +"rawCommand": "Roher Befehl", +"command": "Befehl", +"queryTutorial": "Redis-Befehlsdokumente anzeigen", +}, +"httpQuery": { + ...en.httpQuery, + +"bodyFormDataTooltip": "Wenn {type} ausgewählt ist, sollte das Werteformat {object} sein. Beispiel: {example}", +"text": "Text", +"file": "Datei", +"extraBodyTooltip": "Schlüsselwerte im Extra Body werden an den Body mit den Datentypen JSON oder Form Data angehängt", +"forwardCookies": "Cookies weiterleiten", +"forwardAllCookies": "Alle Cookies weiterleiten", +}, +"smtpQuery": { + ...en.smtpQuery, + +"attachment": "Anhang", +"attachmentTooltip": "Kann mit der Datei-Upload-Komponente verwendet werden, die Daten müssen konvertiert werden in: ", +"MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", +"sender": "Sender", +"recipient": "Empfänger", +"carbonCopy": "Durchschlag", +"blindCarbonCopy": "Blindkopie", +"subject": "Thema", +"content": "Inhalt", +"contentTooltip": "Unterstützt die Eingabe von Text oder HTML", +}, +"uiCompCategory": { + ...en.uiCompCategory, + +"dashboards": "Dashboards & Berichte", +"layout": "Layout und Navigation", +"forms": "Datenerhebung & Formulare", +"collaboration": "Meetings & Zusammenarbeit", +"projectmanagement": "Projektmanagement", +"scheduling": "Kalender & Terminplanung", +"documents": "Dokumenten- und Dateiverwaltung", +"itemHandling": "Handhabung von Inventar", +"multimedia": "Multimedia und Animation", +"integration": "Integration & Erweiterung", +"legacy": "Älter & Auslaufend", +}, +"uiComp": { + ...en.uiComp, + +"autoCompleteCompName": "Vorschlag Feld", +"autoCompleteCompDesc": "Ein Eingabefeld, das Vorschläge während der Eingabe anbietet und dadurch die Benutzererfahrung und Genauigkeit verbessert.", +"autoCompleteCompKeywords": "Vorschläge, Autovervollständigung, Tippen, Eingabe", +"inputCompName": "Eingabe Feld", +"inputCompDesc": "Ein grundlegendes Texteingabefeld, das es Benutzern ermöglicht, Text einzugeben und zu bearbeiten.", +"inputCompKeywords": "Text, Eingabe, Feld, Bearbeiten", +"textAreaCompName": "Text Bereich Feld", +"textAreaCompDesc": "Ein mehrzeiliges Texteingabefeld für längere Inhalte wie Kommentare oder Beschreibungen.", +"textAreaCompKeywords": "mehrzeilig, Textbereich, Eingabe, Text", +"passwordCompName": "Passwort Feld", +"passwordCompDesc": "Ein sicheres Eingabefeld für Passwörter, das Zeichen aus Datenschutzgründen maskiert.", +"passwordCompKeywords": "Passwort, Sicherheit, Eingabe, versteckt", +"richTextEditorCompName": "Text Editor", +"richTextEditorCompDesc": "Ein fortgeschrittener Texteditor, der reichhaltige Formatierungsoptionen wie Fett, Kursiv und Listen unterstützt.", +"richTextEditorCompKeywords": "Editor, Text, Formatierung, Rich Content", +"numberInputCompName": "Zahlen Feld", +"numberInputCompDesc": "Ein Eingabefeld speziell für numerische Eingaben mit Optionen zum Erhöhen und Verringern der Werte.", +"numberInputCompKeywords": "Nummer, Eingabe, Inkrement, Dekrement", +"sliderCompName": "Regler", +"sliderCompDesc": "Eine grafische Schiebereglerkomponente zur Auswahl eines Wertes oder Bereichs innerhalb einer festgelegten Skala.", +"sliderCompKeywords": "Schieberegler, Bereich, Eingabe, grafisch", +"rangeSliderCompName": "Bereich Regler", +"rangeSliderCompDesc": "Ein Schieberegler mit zwei Griffen zur Auswahl eines Wertebereichs, nützlich für Filterungen oder zum Festlegen von Grenzwerten.", +"rangeSliderCompKeywords": "Bereich, Schieberegler, Zweigriff, Filter", +"ratingCompName": "Bewertung", +"ratingCompDesc": "Eine Komponente zur Erfassung von Benutzerbewertungen, dargestellt durch Sterne.", +"ratingCompKeywords": "Bewertung, Sterne, Rückmeldung, Eingabe", +"switchCompName": "Schalter", +"switchCompDesc": "Ein Umschalter für Ein/Aus- oder Ja/Nein-Entscheidungen.", +"switchCompKeywords": "Umschalter, Schalter, ein/aus, Steuerung", +"selectCompName": "Auswahl", +"selectCompDesc": "Ein Dropdown-Menü zur Auswahl aus einer Liste von Optionen.", +"selectCompKeywords": "Dropdown, auswählen, Optionen, Menü", +"multiSelectCompName": "Mehrfach Auswahl", +"multiSelectCompDesc": "Eine Komponente, die die Auswahl mehrerer Elemente aus einer Dropdown-Liste ermöglicht.", +"multiSelectCompKeywords": "Mehrfachauswahl, mehrere, Dropdown, Auswahlmöglichkeiten", +"cascaderCompName": "Kaskade Auswahl", +"cascaderCompDesc": "Ein mehrstufiges Dropdown für die hierarchische Auswahl von Daten, beispielsweise bei der Standortauswahl.", +"cascaderCompKeywords": "Kaskadierer, hierarchisch, Dropdown, Stufen", +"checkboxCompName": "Kontrollkästchen", +"checkboxCompDesc": "Ein Standardkästchen für Optionen, die ausgewählt oder abgewählt werden können.", +"checkboxCompKeywords": "Kästchen, Optionen, auswählen, umschalten", +"radioCompName": "Options Feld", +"radioCompDesc": "Optionsfelder zur Auswahl einer Option aus einem Set, wobei nur eine Wahl erlaubt ist.", +"radioCompKeywords": "Optionsfeld, Schaltflächen, auswählen, Einzelwahl", +"segmentedControlCompName": "Segmente", +"segmentedControlCompDesc": "Eine Steuerung mit segmentierten Optionen zum schnellen Wechsel zwischen mehreren Auswahlmöglichkeiten.", +"segmentedControlCompKeywords": "segmentiert, Steuerung, wechseln, Optionen", +"stepControlCompName": "Schritte", +"stepControlCompDesc": "Eine Steuerung mit Schrittoptionen, die visuell geführte Schritte für Anwendungen wie Formulare oder Assistenten bietet.", +"stepControlCompKeywords": "Schritte, Steuerung, wechseln, Optionen", +"fileUploadCompName": "Upload", +"fileUploadCompDesc": "Eine Komponente zum Hochladen von Dateien mit Unterstützung für Drag-and-Drop und Dateiauswahl.", +"fileUploadCompKeywords": "Datei, hochladen, ziehen und ablegen, auswählen", +"dateCompName": "Datum Auswahl", +"dateCompDesc": "Eine Datumsauswahlkomponente zum Auswählen von Daten aus einem Kalenderinterface.", +"dateCompKeywords": "Datum, Auswähler, Kalender, auswählen", +"dateRangeCompName": "Datum Bereich Auswahl", +"dateRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitraums, nützlich für Buchungssysteme oder Filter.", +"dateRangeCompKeywords": "Datumsbereich, auswählen, Buchung, filtern", +"timeCompName": "Zeit Auswahl", +"timeCompDesc": "Eine Zeitwahlkomponente zur Auswahl spezifischer Tageszeiten.", +"timeCompKeywords": "Zeit, Auswähler, auswählen, Uhr", +"timeRangeCompName": "Zeitraum Auswahl", +"timeRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitintervalls, oft verwendet in Planungsanwendungen.", +"timeRangeCompKeywords": "Zeitraum, auswählen, Planung, Dauer", +"buttonCompName": "Button", +"buttonCompDesc": "Eine vielseitige Knopfkomponente für das Absenden von Formularen, das Auslösen von Aktionen oder das Navigieren.", +"buttonCompKeywords": "Knopf, absenden, Aktion, navigieren", +"meetingControlCompName": "Icon Taste", +"meetingCompDesc": "Eine Steuerungstaste mit Icons.", +"meetingCompKeywords": "Steuerung, Taste, Icons", +"linkCompName": "Link zu", +"linkCompDesc": "Eine Komponente zur Anzeige von Hyperlinks für die Navigation oder zum Verlinken auf externe Ressourcen.", +"linkCompKeywords": "Verknüpfung, Hyperlink, Navigation, extern", +"scannerCompName": "Code Scanner", +"scannerCompDesc": "Eine Komponente zum Scannen von Barcodes, QR-Codes und anderen ähnlichen Daten.", +"scannerCompKeywords": "Scanner, Barcode, QR-Code, Scannen", +"dropdownCompName": "Auswahlliste", +"dropdownCompDesc": "Ein Dropdown-Menü zur kompakten Darstellung einer Liste von Optionen.", +"dropdownCompKeywords": "Dropdown, Menü, Optionen, auswählen", +"toggleButtonCompName": "Umschalter", +"toggleButtonCompDesc": "Ein Knopf, der zwischen zwei Zuständen oder Optionen umschalten kann.", +"toggleButtonCompKeywords": "Umschalten, Knopf, Schalter, Zustand", +"textCompName": "Text Anzeige", +"textCompDesc": "Eine einfache Komponente zur Anzeige von statischem oder dynamischem Textinhalt einschließlich Markdown-Formatierung.", +"textCompKeywords": "Text, Anzeige, statisch, dynamisch", +"tableCompName": "Tabelle", +"tableCompDesc": "Eine umfangreiche Tabellenkomponente zur Darstellung von Daten in einem strukturierten Tabellenformat, mit Optionen für Sortierung und Filterung, Baumdatenanzeige und erweiterbare Zeilen.", +"tableCompKeywords": "Tabelle, Daten, Sortierung, Filterung", +"imageCompName": "Bild", +"imageCompDesc": "Eine Komponente zur Anzeige von Bildern, die verschiedene Formate basierend auf URI oder Base64-Daten unterstützt.", +"imageCompKeywords": "Bild, Anzeige, Medium, Base64", +"progressCompName": "Fortschritt Anzeige", +"progressCompDesc": "Ein visueller Indikator des Fortschritts, der typischerweise verwendet wird, um den Fertigstellungsstatus einer Aufgabe zu zeigen.", +"progressCompKeywords": "Fortschritt, Indikator, Status, Aufgabe", +"progressCircleCompName": "Fortschritt Anzeige Kreis", +"progressCircleCompDesc": "Ein kreisförmiger Fortschrittsindikator, der häufig für Ladezustände oder zeitgebundene Aufgaben verwendet wird.", +"progressCircleCompKeywords": "Kreis, Fortschritt, Indikator, Laden", +"fileViewerCompName": "Datei Anzeiger", +"fileViewerCompDesc": "Eine Komponente zur Anzeige verschiedener Dateitypen, einschließlich Dokumente und Bilder.", +"fileViewerCompKeywords": "Datei, Anzeiger, Dokument, Bild", +"dividerCompName": "Trennlinie", +"dividerCompDesc": "Eine visuelle Trennkomponente, die verwendet wird, um Inhalte oder Abschnitte innerhalb eines Layouts zu separieren.", +"dividerCompKeywords": "Trennlinie, Separator, Layout, Gestaltung", +"qrCodeCompName": "QRCode Anzeiger", +"qrCodeCompDesc": "Eine Komponente zur Anzeige von QR-Codes, nützlich für schnelles Scannen und Informationsübertragung.", +"qrCodeCompKeywords": "QR-Code, Scannen, Barcode, Information", +"formCompName": "Formular", +"formCompDesc": "Eine Containerkomponente für die Erstellung strukturierter Formulare mit verschiedenen Eingabetypen.", +"formCompKeywords": "Formular, Eingabe, Container, Struktur", +"jsonSchemaFormCompName": "JSON Schema Formular", +"jsonSchemaFormCompDesc": "Eine dynamische Formularkomponente, die basierend auf einem JSON-Schema generiert wird.", +"jsonSchemaFormCompKeywords": "JSON, Schema, Formular, dynamisch", +"containerCompName": "Container", +"containerCompDesc": "Ein Allzweck-Container für das Layout und die Organisation von UI-Elementen.", +"containerCompKeywords": "Container, Layout, Organisation, UI", +"floatTextContainerCompName": "Text Umbruch Container", +"floatTextContainerCompDesc": "Eine Komponente zur Anzeige von Text, die den Inhalt dynamisch anpasst und einfließen lässt.", +"floatTextContainerCompKeywords": "Container, Layout, Text, fließend", +"collapsibleContainerCompName": "Klapp Container", +"collapsibleContainerCompDesc": "Ein Container, der erweitert oder zusammengeklappt werden kann, ideal für die Verwaltung der Sichtbarkeit von Inhalten.", +"collapsibleContainerCompKeywords": "klappbar, Container, erweitern, zusammenklappen", +"tabbedContainerCompName": "Register Karten Container", +"tabbedContainerCompDesc": "Ein Container mit Registerkartennavigation zur Organisation von Inhalten in separaten Bereichen.", +"tabbedContainerCompKeywords": "Registerkarten, Container, Navigation, Bereiche", +"pageLayoutCompName": "Seiten Layout", +"pageLayoutCompDesc": "Ein Container, der es ermöglicht, ein Layout mit Kopfzeile, Seitenleiste, Fußzeile und Hauptinhaltsbereichen zu erstellen.", +"pageLayoutCompKeywords": "Layout, Container, Navigation, Seiten", +"modalCompName": "Modal", +"modalCompDesc": "Eine Pop-up-Modalkomponente zur Anzeige von Inhalten, Alarmen oder Formularen im Fokus.", +"modalCompKeywords": "Modal, Pop-up, Alarm, Formular", +"listViewCompName": "Listen Ansicht", +"listViewCompDesc": "Eine Komponente zur Anzeige einer Liste von Elementen oder Daten, in die andere Komponenten eingefügt werden können, ähnlich einem Repeater.", +"listViewCompKeywords": "Liste, Ansicht, Anzeige, Repeater", +"gridCompName": "Grid Ansicht", +"gridCompDesc": "Eine flexible Gitterkomponente zur Erstellung strukturierter Layouts mit Zeilen und Spalten, eine Erweiterung der Listenansicht.", +"gridCompKeywords": "Gitter, Layout, Zeilen, Spalten", +"navigationCompName": "Navigation", +"navigationCompDesc": "Eine Navigationskomponente zum Erstellen von Menüs, Brotkrumen oder Tabs für die Seitennavigation.", +"navigationCompKeywords": "Navigation, Menü, Brotkrumen, Tabs", +"iframeCompName": "IFrame", +"iframeCompDesc": "Eine Inline-Frame-Komponente zum Einbetten externer Webseiten und Anwendungen oder Inhalte innerhalb der Anwendung.", +"iframeCompKeywords": "IFrame, einbetten, Webseite, Inhalt", +"customCompName": "Code Komponente", +"customCompDesc": "Eine flexible, programmierbare Komponente zur Erstellung einzigartiger, benutzerdefinierter UI-Elemente, die speziell auf Ihre Bedürfnisse zugeschnitten sind.", +"customCompKeywords": "benutzerdefiniert, benutzerdefiniert, flexibel, programmierbar", +"moduleCompName": "App Modul", +"moduleCompDesc": "Verwenden Sie Module, um Mikro-Apps zu erstellen, die spezifische Funktionen oder Merkmale kapseln. Module können dann eingebettet und in allen Apps wiederverwendet werden.", +"moduleCompKeywords": "Modul, Mikro-App, Funktionalität, wiederverwendbar", +"jsonExplorerCompName": "JSON Anzeiger", +"jsonExplorerCompDesc": "Eine Komponente zum visuellen Erkunden und Interagieren mit JSON-Datenstrukturen.", +"jsonExplorerCompKeywords": "JSON, Explorer, Daten, Struktur", +"jsonEditorCompName": "JSON-Editor", +"jsonEditorCompDesc": "Eine Editor-Komponente zum Erstellen und Modifizieren von JSON-Daten mit Validierung und Syntaxhervorhebung.", +"jsonEditorCompKeywords": "JSON, Editor, modifizieren, validieren", +"treeCompName": "Baum Struktur", +"treeCompDesc": "Eine Baumstrukturkomponente zur Darstellung hierarchischer Daten, wie z. B. Dateisysteme oder Organigramme.", +"treeCompKeywords": "Baum, hierarchisch, Daten, Struktur", +"treeSelectCompName": "Baum Auswahl", +"treeSelectCompDesc": "Eine Auswahlkomponente, die Optionen in einem hierarchischen Baumformat präsentiert, was eine organisierte und verschachtelte Auswahl ermöglicht.", +"treeSelectCompKeywords": "Baum, auswählen, hierarchisch, verschachtelt", +"audioCompName": "Audio", +"audioCompDesc": "Eine Komponente zur Einbettung von Audioinhalten, mit Steuerungselementen für Wiedergabe und Lautstärkeregelung.", +"audioCompKeywords": "Audio, Wiedergabe, Ton, Musik", +"videoCompName": "Video", +"videoCompDesc": "Eine Multimediakomponente zum Einbetten und Abspielen von Videoinhalten, unterstützt verschiedene Formate.", +"videoCompKeywords": "Video, Multimedia, Abspielen, Einbetten", +"drawerCompName": "Schublade", +"drawerCompDesc": "Ein schiebbares Paneel, das für zusätzliche Navigation oder zur Inhaltsanzeige verwendet werden kann, typischerweise vom Bildschirmrand ausgehend.", +"drawerCompKeywords": "Schublade, schiebbar, Paneel, Navigation", +"chartCompName": "Diagramm", +"chartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Graphen.", +"chartCompKeywords": "Diagramm, Graph, Daten, Visualisierung", +"carouselCompName": "Bild Karussell", +"carouselCompDesc": "Eine rotierende Karussellkomponente zur Präsentation von Bildern, Bannern oder Inhaltsfolien.", +"carouselCompKeywords": "Karussell, Bilder, Rotation, Präsentation", +"imageEditorCompName": "Bild Editor", +"imageEditorCompDesc": "Eine interaktive Komponente zur Bearbeitung und Manipulation von Bildern, bietet verschiedene Werkzeuge und Filter.", +"imageEditorCompKeywords": "Bild, Editor, bearbeiten, Werkzeuge", +"mermaidCompName": "Mermaid Diagramm", +"mermaidCompDesc": "Eine Komponente zum Erstellen komplexer Diagramme und Flussdiagramme basierend auf der Mermaid-Syntax.", +"mermaidCompKeywords": "Mermaid, Diagramme, Flussdiagramme, Visualisierung", +"calendarCompName": "Kalender", +"calendarCompDesc": "Eine Kalenderkomponente zur Anzeige von Daten und Ereignissen, mit Ansichtsoptionen für Monat, Woche oder Tag.", +"calendarCompKeywords": "Kalender, Daten, Ereignisse, Planung", +"signatureCompName": "Unterschrift", +"signatureCompDesc": "Eine Komponente zur Erfassung digitaler Unterschriften, nützlich für Genehmigungs- und Verifizierungsprozesse.", +"signatureCompKeywords": "Unterschrift, digital, Genehmigung, Verifizierung", +"jsonLottieCompName": "Lottie Animationen", +"jsonLottieCompDesc": "Eine Komponente zur Anzeige von Lottie-Animationen, bietet leichtgewichtige und skalierbare Animationen basierend auf JSON-Daten.", +"jsonLottieCompKeywords": "Lottie, Animation, JSON, skalierbar", +"timelineCompName": "Zeitleiste", +"timelineCompDesc": "Eine Komponente zur Darstellung von Ereignissen oder Aktionen in einer chronologischen Reihenfolge, visuell dargestellt entlang einer linearen Zeitleiste.", +"timelineCompKeywords": "Zeitleiste, Ereignisse, chronologisch, Geschichte", +"commentCompName": "Kommentar", +"commentCompDesc": "Eine Komponente zum Hinzufügen und Anzeigen von Benutzerkommentaren, unterstützt verschachtelte Antworten und Benutzerinteraktion.", +"commentCompKeywords": "Kommentar, Diskussion, Benutzerinteraktion, Rückmeldung", +"mentionCompName": "Erwähnung", +"mentionCompDesc": "Eine Komponente, die das Erwähnen von Benutzern oder Tags innerhalb von Textinhalten unterstützt, typischerweise verwendet in sozialen Medien oder kollaborativen Plattformen.", +"mentionCompKeywords": "Erwähnung, Tag, Benutzer, soziale Medien", +"responsiveLayoutCompName": "Reaktionsfähiges Layout", +"responsiveLayoutCompDesc": "Eine Layoutkomponente, die entwickelt wurde, um sich verschiedenen Bildschirmgrößen und Geräten anzupassen, und so ein konsistentes Benutzererlebnis sicherstellt.", +"responsiveLayoutCompKeywords": "responsiv, Layout, anpassen, Bildschirmgröße", +"splitLayoutCompName": "Split Layout", +"splitLayoutCompDesc": "Eine Layout-Komponente, um mehrere Ansichtsbereiche zu organisieren und Bereiche horizontal oder vertikal zu trennen. Sie bietet dem Benutzer die Möglichkeit, die Breite oder Höhe der Ansichtsbereiche per Drag & Drop anzupassen.", +"splitLayoutCompKeywords": "Teilen, Splitter, Layout, Anpassen, Bildschirmgröße", +"iconCompName": "Icons", +"iconCompDesc": "Verwenden Sie verschiedene Icons, um die visuelle Anziehungskraft und das Benutzererlebnis Ihrer Anwendung zu verbessern.", +"iconCompKeywords": "Icons, Piktogramme, Symbole, Formen", +"tourCompName": "Tour", +"tourCompDesc": "Eine Produktführung zur Anleitung der Benutzer.", +"tourCompKeywords": "Tour, Produktführung, Walkthrough, interaktiver Rundgang", +"hillchartCompName": "Hillchart", +"hillchartCompDesc": "Eine Visualisierungskomponente zur Darstellung von Projektmanagement-Zustandsdaten in einem Hill-Chart-Format.", +"hillchartCompKeywords": "projektmanagement, hill chart, visualisierung, daten", +"openLayersGeoMapCompName": "Openlayers Geomap", +"openLayersGeoMapCompDesc": "Eine Komponente zur Anzeige interaktiver Karten unter Verwendung von OpenLayers, mit Unterstützung für verschiedene Kartenebenen und Funktionen.", +"openLayersGeoMapCompKeywords": "openlayers, geokarte, interaktiv, kartenebenen", +"chartsGeoMapCompName": "Geo Map Charts", +"chartsGeoMapCompDesc": "Eine Komponente zur Visualisierung von geografischen Daten auf interaktiven Karten mit dynamischen Diagrammen", +"chartsGeoMapCompKeywords": "Geokarte, Diagramme, Visualisierung, geografische Daten", +"bpmnEditorCompName": "BPMN-Editor", +"bpmnEditorCompDesc": "Eine Komponente zum Anzeigen, Erstellen und Bearbeiten von BPMN-Diagrammen, die verschiedene BPMN-Elemente und -Funktionen unterstützt.", +"bpmnEditorCompKeywords": "BPMN, Editor, Diagramme, Elemente, Arbeitsabläufe", +"turnstileCaptchaCompName": "Drehkreuz Captcha", +"turnstileCaptchaCompDesc": "Eine Captcha-Komponente zur Verifizierung von Benutzern gegenüber Bots.", +"turnstileCaptchaCompKeywords": "Captcha, Überprüfung, Identität, Sicherheit", +"pivotTableCompName": "Pivot Table", +"pivotTableCompDesc": "Ein Datenzusammenfassungs- und Analysewerkzeug zum Organisieren und Aggregieren von Daten in einem tabellarischen Format.", +"pivotTableCompKeywords": "Pivot-Tabelle, Daten, Analyse, Aggregation", +"funnelChartCompName": "Trichterdiagramm", +"funnelChartCompDesc": "Ein Visualisierungstool zur Darstellung der fortschreitenden Datenreduzierung in verschiedenen Phasen.", +"funnelChartCompKeywords": "trichterdiagramm, verkauf, umwandlungen, prozess", +"gaugeChartCompName": "Pegelkarte", +"gaugeChartCompDesc": "Ein Diagramm, das Daten als Messwert auf einer Skala anzeigt. Es ist nützlich, um den Status oder das Niveau von etwas anzuzeigen.", +"gaugeChartCompKeywords": "Messdiagramm, Metriken, Leistung, Status", +"sankeyChartCompName": "Sankey-Diagramm", +"sankeyChartCompDesc": "Ein Flussdiagramm, bei dem die Breite der Pfeile proportional zur Flussrate ist. Es dient zur Darstellung von Energie-, Material- oder Kostentransfers.", +"sankeyChartCompKeywords": "Sankey-Diagramm, Fluss, Energie, Kosten", +"candleStickChartCompName": "Candlestick-Diagramm", +"candleStickChartCompDesc": "Eine Art von Finanzdiagramm, das zur Beschreibung von Kursbewegungen eines Wertpapiers, Derivats oder einer Währung verwendet wird.", +"candleStickChartCompKeywords": "Candlestick-Diagramm, Aktien, Handel, Finanzen", +"radarChartCompName": "Radarkarte", +"radarChartCompDesc": "Eine grafische Methode zur Darstellung von multivariaten Daten in Form eines zweidimensionalen Diagramms von drei oder mehr quantitativen Variablen.", +"radarChartCompKeywords": "Radardiagramm, multivariate, Leistungsanalyse", +"heatmapChartCompName": "Heatmap-Diagramm", +"heatmapChartCompDesc": "Eine grafische Darstellung von Daten, bei der einzelne Werte als Farben dargestellt werden.", +"heatmapChartCompKeywords": "Heatmap, Datenvisualisierung, Intensität", +"graphChartCompName": "Graphisches Diagramm", +"graphChartCompDesc": "Ein Diagramm, das ein Netzwerk von Knoten darstellt, die durch Kanten verbunden sind, und das zur Darstellung von Verbindungen und Beziehungen nützlich ist.", +"graphChartCompKeywords": "Diagramm, Netzwerke, Beziehungen, Knoten", +"treeChartCompName": "Baumdiagramm", +"treeChartCompDesc": "Ein Diagramm, das die Hierarchie in einer baumartigen Struktur visuell darstellt und die Beziehungen zwischen den verschiedenen Knoten zeigt.", +"treeChartCompKeywords": "Baumdiagramm, Hierarchie, Organisation", +"treemapChartCompName": "Baumdiagramm", +"treemapChartCompDesc": "Ein Diagramm, das verschachtelte Rechtecke zur proportionalen Darstellung hierarchischer Daten verwendet.", +"treemapChartCompKeywords": "Baumstruktur, Hierarchie, Datenvisualisierung", +"sunburstChartCompName": "Sunburst-Karte", +"sunburstChartCompDesc": "Eine radiale raumfüllende Visualisierungstechnik, die hierarchische Beziehungen durch Schichten eines Kreises veranschaulicht.", +"sunburstChartCompKeywords": "Sonnenglockentabelle, radial, Hierarchie", +"themeriverChartCompName": "Thema Flusskarte", +"themeriverChartCompDesc": "Eine Visualisierung, die einem Flussdiagramm ähnelt, das die Veränderungen eines Datensatzes im Laufe der Zeit über Kategorien hinweg zeigt.", +"themeriverChartCompKeywords": "Thema Fluss, Zeitreihen, Trends", +"basicChartCompName": "Grundlegende Tabelle", +"basicChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Schaubildern.", +"basicChartCompKeywords": "Diagramm, Grafik, Daten, Visualisierung", +"shapeCompName": "Formen", +"shapeCompDesc": "Eine Sammlung geometrischer Formen zur Verwendung in Diagrammen, Illustrationen und Visualisierungen.", +"shapeCompKeywords": "Formen, geometrisch, Diagramme, Illustrationen", +"ganttChartCompName": "Gantt-Diagramm", +"ganttChartCompDesc": "Ein Diagramm, das einen Projektplan mit den Start- und Endterminen von Elementen und Abhängigkeiten darstellt.", +"ganttChartCompKeywords": "Gantt-Diagramm, Projektmanagement, Zeitplan", +"kanbanCompName": "Kanban-Tafel (Vorschau!)", +"kanbanCompDesc": "Eine visuelle Organisationsmethode zur Verwaltung von Aufgaben und Workflows in einem Board mit Spalten und Karten.", +"kanbanCompKeywords": "Kanban, Tafel, Arbeitsablauf, Aufgaben", +"pieChartCompName": "Elster Chart", +"pieChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Kreisdiagrammen.", +"pieChartCompKeywords": "Diagramm, Daten, Visualisierung", +"lineChartCompName": "Liniendiagramm", +"lineChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Liniendiagrammen.", +"lineChartCompKeywords": "Diagramm, Daten, Visualisierung", +"barChartCompName": "Balkendiagramm", +"barChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Balkendiagrammen.", +"barChartCompKeywords": "Diagramm, Daten, Visualisierung", +"scatterChartCompName": "Punktediagramm", +"scatterChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Streudiagrammen.", +"scatterChartCompKeywords": "Diagramm, Daten, Visualisierung", +"colorPickerCompName": "Farbwähler", +"colorPickerCompDesc": "Intuitive Farbauswahl zur individuellen Gestaltung.", +"colorPickerCompKeywords": "farbe, auswahl, anpassung", +"floatButtonCompName": "Schwimmer-Taste", +"floatButtonCompDesc": "Eine schwebende Aktionstaste für markante und schnelle Aktionen.", +"floatButtonCompKeywords": "Schwimmende Taste, Aktion, Schnell", +"avatarCompName": "Avatar", +"avatarCompDesc": "Zeigt Benutzeravatare oder Profilbilder zur persönlichen Identifizierung an.", +"avatarCompKeywords": "Avatar, Profilbild, Benutzerkennung", +"avatarGroupCompName": "Avatar-Gruppe", +"avatarGroupCompDesc": "Eine Gruppe von Avataren, die mehrere Benutzer oder Entitäten auf kompakte und visuell ansprechende Weise repräsentieren.", +"avatarGroupCompKeywords": "Avatar-Gruppe, Benutzer, Entitäten, kompakt", +"transferName": "Übertragung", +"transferDesc": "Erleichtert den Datentransfer zwischen zwei Listen mit Drag-and-Drop-Funktionalität.", +"transferKeywords": "Übertragung, Daten, Drag-and-Drop", +"cardCompName": "Inhalt Karte", +"cardCompDesc": "Eine Kartenkomponente zur strukturierten Darstellung von Informationen oder Inhalten.", +"cardCompKeywords": "Karte, Information, Inhalt, Anzeige", +"timerCompName": "Zeitschaltuhr", +"timerCompDesc": "Eine Komponente, die einen Countdown oder die verstrichene Zeit anzeigt, nützlich für die Verfolgung von Zeiträumen und Fristen.", +"timerCompKeywords": "Timer, Countdown, verstrichene Zeit, Verfolgung, Dauern, Fristen", +}, +"comp": { + ...en.comp, + +"menuViewDocs": "Dokumentation ansehen", +"menuViewPlayground": "Interaktiven Spielplatz ansehen", +"menuUpgradeToLatest": "Upgrade auf die neueste Version", +"nameNotEmpty": "Kann nicht leer sein", +"nameRegex": "Muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern und Unterstriche (_) enthalten", +"nameJSKeyword": "Kann kein JavaScript-Schlüsselwort sein", +"nameGlobalVariable": "Kann kein globaler Variablenname sein", +"nameExists": "Name {name} Existiert bereits", +"getLatestVersionMetaError": "Die neueste Version konnte nicht abgerufen werden, bitte versuche es später.", +"needNotUpgrade": "Die aktuelle Version ist bereits die neueste.", +"compNotFoundInLatestVersion": "Aktuelle Komponente nicht in der neuesten Version gefunden.", +"upgradeSuccess": "Erfolgreich auf die neueste Version upgegradet.", +"searchProp": "Suche", +}, +"jsonSchemaForm": { + ...en.jsonSchemaForm, + +"retry": "Wiederholen", +"resetAfterSubmit": "Zurücksetzen nach erfolgreichem Absenden des Formulars", +"jsonSchema": "JSON-Schema", +"uiSchema": "UI Schema", +"schemaTooltip": "Siehe", +"defaultData": "Vorausgefüllte Formulardaten", +"dataDesc": "Aktuelle Formulardaten", +"required": "Erforderlich", +"maximum": "Der Maximalwert ist {value}", +"minimum": "Der Mindestwert ist {value}", +"exclusiveMaximum": "Sollte kleiner sein als {value}", +"exclusiveMinimum": "Sollte größer sein als {value}", +"multipleOf": "Sollte ein Vielfaches von {value} sein", +"minLength": "Mindestens {value} Zeichen", +"maxLength": "Höchstens {value} Zeichen", +"pattern": "Sollte dem Muster {value} entsprechen", +"format": "Sollte dem Format {value} entsprechen", +}, +"select": { + ...en.select, + +"inputValueDesc": "Eingabe Suchwert", +}, +"customComp": { + ...en.customComp, + +"text": "Es ist ein guter Tag.", +"triggerQuery": "Trigger-Abfrage", +"updateData": "Daten aktualisieren", +"updateText": "Ich bin auch in guter Stimmung, jetzt meine eigene Komponente mit Lowcoder zu entwickeln!", +"sdkGlobalVarName": "Lowcoder", +"data": "Daten, die du an die benutzerdefinierte Komponente übergeben willst", +"code": "Code deiner benutzerdefinierten Komponente", +}, +"tree": { + ...en.tree, + +"placeholder": "Bitte auswählen", +"selectType": "Typ auswählen", +"noSelect": "Keine Auswahl", +"singleSelect": "Einzeln auswählen", +"multiSelect": "Mehrfachauswahl", +"checkbox": "Kontrollkästchen", +"checkedStrategy": "Geprüfte Strategie", +"showAll": "Alle Knotenpunkte", +"showParent": "Nur übergeordnete Knotenpunkte", +"showChild": "Nur Kind-Knoten", +"autoExpandParent": "Auto Expand Elternteil", +"checkStrictly": "Streng prüfen", +"checkStrictlyTooltip": "TreeNode genau prüfen; Parent TreeNode und Children TreeNodes sind nicht assoziiert", +"treeData": "Baumdaten", +"treeDataDesc": "Aktuelle Baumdaten", +"value": "Standardwerte", +"valueDesc": "Aktuelle Werte", +"expanded": "Erweitert Werte", +"expandedDesc": "Aktuelle erweiterte Werte", +"defaultExpandAll": "Standard Alle Knoten erweitern", +"showLine": "Linie anzeigen", +"showLeafIcon": "Blattsymbol anzeigen", +"treeDataAsia": "Asien", +"treeDataChina": "China", +"treeDataBeijing": "Peking", +"treeDataShanghai": "Shanghai", +"treeDataJapan": "Japan", +"treeDataEurope": "Europa", +"treeDataEngland": "England", +"treeDataFrance": "Frankreich", +"treeDataGermany": "Deutschland", +"treeDataNorthAmerica": "Nord-Amerika", +"helpLabel": "Knotenpunkt Etikett", +"helpValue": "Einzigartiger Knotenpunktwert im Baum", +"helpChildren": "Kinder Knoten", +"helpDisabled": "Deaktiviert den Knotenpunkt", +"helpSelectable": "Ob der Knoten wählbar ist (Single/Multi Select Typ)", +"helpCheckable": "Ob ein Kontrollkästchen angezeigt werden soll (Checkbox-Typ)", +"helpDisableCheckbox": "Deaktiviert das Kontrollkästchen (Checkbox-Typ)", +}, +"moduleContainer": { + ...en.moduleContainer, + +"eventTest": "Veranstaltungstest", +"methodTest": "Methode Test", +"inputTest": "Eingangstest", +}, +"password": { + ...en.password, + +"label": "Passwort", +"placeholder": "Bitte gib ein sicheres Passwort ein", +"conformLabel": "Passwort Bestätigung", +"conformPlaceholder": "Bitte das Passwort zur Bestätigung nochmal eingeben", +"visibilityToggle": "Sichtbarkeit anzeigen Toggle", +}, +"richTextEditor": { + ...en.richTextEditor, + +"toolbar": "Symbolleiste anpassen", +"toolbarDescription": "Du kannst die Symbolleiste individuell anpassen. Weitere Informationen findest du unter: https://quilljs.com/docs/modules/toolbar/.", +"placeholder": "Bitte eingeben...", +"hideToolbar": "Symbolleiste ausblenden", +"content": "Inhalt", +"title": "Titel", +"save": "Speichern", +"link": "Link:", +"edit": "bearbeiten", +"remove": "entfernen", +"defaultValue": "Basis Inhalt", +}, +"floatButton": { + ...en.floatButton, + +"custom": "Benutzerdefiniert", +"backTop": "Zurück Oben", +"buttonType": "Button Type", +"buttonShape": "Taste Form", +"square": "Platz", +"circle": "Kreis", +"description": "Beschreibung", +"badge": "Abzeichen", +"primary": "Primäre Seite", +"default": "Standard", +"buttonTheme": "Schaltfläche Thema", +"badgeColor": "Farbe des Abzeichens", +"dot": "Abzeichen als Punkt", +"hidden": "Versteckt", +"visibilityHeight": "Sichtbarkeit Höhe", +"visibilityHeightDesc": "Scrollen bis zu einer bestimmten Höhe, bevor die Schaltfläche \"Zurück zum Anfang\" angezeigt wird, 0 wird immer angezeigt, Bearbeitungsmodus kann keine Vorschau in Echtzeit anzeigen", +}, +"colorPicker": { + ...en.colorPicker, + +"trigger": "Auslöser Ereignis", +"click": "Klicken Sie auf", +"hover": "schweben", +"disabledAlpha": "Alpha-Auswahl deaktivieren", +"recommended": "Empfohlen", +"showPresets": "Farbvoreinstellungen anzeigen", +}, +"badge": { + ...en.badge, + +"showCloseButton": "Schaltfläche \"Schließen\" anzeigen", +"Type": "Abzeichen Typ", +"Count": "Abzeichen zählen", +"Size": "Größe des Abzeichens", +"SizeDefault": "Standard", +"SizeSmall": "Klein", +"overflowCount": "Überlaufzahl", +"Title": "Titel des Abzeichens", +"dot": "Punkt", +"number": "Nummer", +"tooltip": "QuickInfo", +}, +"gantt": { + ...en.gantt, + +"key": "Schlüssel", +"title": "Titel", +"project": "Projekt", +"from": "Von", +"minute": "Minute", +"hour": "Stunde", +"day": "Tag", +"week": "Woche", +"month": "Monat", +"year": "Jahr", +"quarter": "Quarter", +"tasks": "Aufgaben Daten", +"level": "Ebene", +"durationUnit": "Duration unit", +"duration": "Duration", +"hourScalesFormat": "%F %d", +"dayScalesFormat": "%d %M", +"weekScalesFormat1": "%d %M", +"weekScalesFormat2": "%j %D", +"monthScalesFormat1": "%F, %Y", +"monthScalesFormat2": "Woche #%W", +"quarterScalesFormat": "{y} Q{i}", +"yearScalesFormat": "%Y", +"tree": "Baum", +"ColumnsData": "Spalten Daten", +"allowChangeTask": "DbClick Aufgabe", +"allowAddLink": "Link hinzufügen", +"allowLinkDelete": "Link Löschen", +"allowProgressDrag": "Fortschritt ziehen", +"allowTaskDrag": "Aufgabe Ziehen", +"links": "Links Data", +"dataFormat": "Datenanalyse Format", +"handleDateChange": "Handhabung von Aufgabenänderungen", +"handleTaskChange": "Handhabung von Aufgabenänderungen", +"handleAddedLink": "Handle Added Link", +"handleDeletedLink": "Gelöschten Link behandeln", +"handleProgressDrag": "Handle Progress Drag", +"showTodayMark": "Heute anzeigen Mark", +"resize": "Größe ändern", +"otherEvents": "Andere Ereignisse", +"openAllBranchInit": "Alle Filialen öffnen Init", +"date": "Date", +"text": "Text", +"progress": "Fortschritte", +"width": "Breite", +"ColumnsType": "Spalten Typ", +"currentId": "Aktuelle ID", +"currentObject": "Aktuelles Objekt", +"addTask": "Aufgabe(n) hinzufügen", +"taskObject": "Aufgabe Objekt", +"taskObjectDesc": "Unterstützt Arrays von Tasks oder einzelne Task-Objekte", +"linkID": "Link-ID", +"linkIDDesc": "Unterstützt Arrays von Link-IDs oder einzelne Link-Objekte", +"removeTask": "Aufgabe entfernen", +"taskID": "Aufgaben-ID", +"taskIDDesc": "Unterstützt Arrays von IDs oder einzelne IDs", +"add": "hinzufügen", +"expandingAll": "Alle ausbauen", +"collapsingAll": "Alle kollabieren", +"addTaskFail": "Die Additionsaufgabe ist fehlgeschlagen, und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", +"addLinkFail": "Der Additionslink ist fehlgeschlagen und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", +"removeTaskFail": "Die Löschaufgabe ist fehlgeschlagen, und der Parametertyp sollte string oder string array sein", +"removeLinkFail": "Die Löschverknüpfungen sind fehlgeschlagen, und der Parametertyp sollte string array sein", +"otherData": "Andere Daten{i}", +"projectText": "Projekt #{i}", +"taskText": "Aufgabe #{i}", +"AutoCalculateProgress": "Automatischer Berechnungsfortschritt", +"allowProjectDrag": "Ziehen von Projekten zulassen", +"showColumns": "Spalten anzeigen", +"exportToPNG": "In PNG exportieren", +"exportToPDF": "In PDF exportieren", +"exportToExcel": "Nach Excel exportieren", +"progressLowBg": "Niedrig BgColor", +"progressLowColor": "Niedrige Progress-Farbe", +"progressMediumBg": "Medium BgColor", +"progressMediumColor": "Medium Progress Farbe", +"progressHighBg": "Höhe BgColor", +"progressHighColor": "Höhe Fortschritt Farbe", +"progresscompletedColor": "Abgeschlossener Fortschritt Farbe", +"lowProgressLine": "Niedrige Progressionslinie", +"mediumProgressLine": "Mittlere Fortschrittslinie", +"SegmentedColor": "Fortschritt Segmentierte Farbe", +"link_f2s": "Verbindung F2S", +"link_s2s": "Link S2S", +"link_f2f": "Link F2F", +"link_s2f": "Link S2F", +"weekScale": "#{i},", +"showHolidays": "Feiertage anzeigen", +"StatutoryHolidays": "Gesetzliche Feiertage Daten", +"skipOffTime": "Ausblenden der Nicht-Arbeitszeit", +"weekend": "Wochenende", +"weekendSelected": "Ausgewähltes Wochenende", +"noWorkHour": "Keine Arbeitsstunde", +"noWorkHourSelected": "keine Arbeitsstunde ausgewählt", +"showWorkTimes": "Arbeitszeiten anzeigen", +"workTimeData": "Arbeitszeitdaten", +"fit": "fit", +"manual": "Handbuch", +"scaleMode": "Skalenmodus", +"startDate": "Start Date", +"endDate": "End Date", +"addLink": "Link(s) hinzufügen", +"linkObject": "link Objekt", +"removeLink": "Link entfernen", +"allowSort": "Sortieren zulassen", +"showTask": "Aufgabe anzeigen", +"toggleOnDBClick": "Umschalten auf DBClick", +"sortOptions": "Erste Sortieroptionen", +"rowHeight": "Zeilenhöhe", +"showTooltip": "Tooltip anzeigen", +"tooltipTemplates": "Tooltip-Vorlage", +"allowResizeTask": "Größenänderung der Aufgabe zulassen", +"projectColor": "Projekt Farbe", +"projectColorBg": "Projekt BgColor", +"taskColor": "Aufgabe Farbe", +"taskColorBg": "Aufgabe BgColor", +"milestoneColor": "Meilenstein Farbe", +"highlightOverdue": "Highlight Überfällig", +"overdueColor": "Überfällige Farbe", +"overdueBgColor": "Überfällig BgColor", +"projectCompletedBgColor": "Abgeschlossenes Projekt BgColor", +"projectCompletedColor": "Projekt fertiggestellt Farbe", +"tag": "Tag", +"tasksTableWidth": "Aufgaben Tabellenbreite", +"allowErrorMessage": "Fehlermeldung zulassen", +"currentProjectId": "Aktuelle Projekt-ID", +"currentProjectLastTask": "Aktuelles Projekt Letzte Aufgabe", +"onlySortProject": "Nur Projekt sortieren", +}, +"transfer": { + ...en.transfer, + +"sourceTitle": "Source Data", +"targetTitle": "Ziel-Daten", +"content": "Inhalt {i}", +"items": "Artikel", +"targetKeys": "Ausgewählte Schlüssel", +"oneWay": "Einweg", +"pagination": "Paginierung", +"pageSize": "Page Size", +"allowSearch": "Suche zulassen", +"selectedKeys": "Ausgewählte Schlüssel", +"searchInfo": "Infos zur Suche", +"targerObject": "Targer Object", +}, +"avatarGroup": { + ...en.avatarGroup, + +"maxCount": "Maximale Anzahl", +"avatarSize": "Avatar Größe", +"autoColor": "Auto Farbe", +"alignment": "Ausrichtung", +"currentAvatar": "Aktueller Avatar", +}, +"avatarComp": { + ...en.avatarComp, + +"square": "Platz", +"circle": "Kreis", +"icon": "Symbol", +"shape": "Form", +"counts": "Abzeichen", +"title": "Titel", +"src": "src", +"avatarCompTooltip": "Die Anzeigepriorität ist: Bild -> Zeichen -> Symbol. Je nachdem, was zuerst verfügbar ist.", +"iconSize": "Icon Größe", +"avatarBackground": "Hintergrund", +"label": "Etikett", +"caption": "Bildunterschrift", +"labelPosition": "Position", +"alignmentPosition": "Ausrichtung", +"text": "Text", +"enableDropDown": "Enable DropDown", +"containerBackground": "Hintergrund", +}, +"card": { + ...en.card, + +"cardType": "Karte Typ", +"common": "gemeinsame", +"custom": "benutzerdefinierte", +"default": "Standard", +"small": "klein", +"showTitle": "Titel anzeigen", +"title": "Titel", +"more": "Mehr", +"extraTitle": "Aufruf zum Handeln", +"CoverImg": "Titelbild", +"imgSrc": "Bildquelle", +"showMeta": "Inhalt anzeigen", +"metaTitle": "Inhalt Titel", +"metaDesc": "Content Beschreibung", +"imgHeight": "Bildhöhe", +"showActionIcon": "Aktionsoptionen anzeigen", +"actionOptions": "Handlungsoptionen", +"menu": "Menü {i}", +"hoverColor": "Hover Farbe", +"IconColor": "Icon Farbe", +"titleSize": "Titel Größe", +}, +"timer": { + ...en.timer, + +"timerState": "Timer Zustand", +"elapsedTime": "Verstrichene Zeit", +"timer": "Zeitschaltuhr", +"countdown": "Countdown", +"defaultValue": "Standardwert", +"timerType": "Timer Type", +"start": "Start", +"pause": "Pause", +"resume": "Lebenslauf", +"reset": "Reset", +"startPause": "Start/Pause", +"hideButton": "Schaltfläche \"Ausblenden", +"fontColor": "Schriftfarbe", +}, +"iconComp": { + ...en.iconComp, + +"icon": "Icon", +"autoSize": "Symbol AutoSize", +"iconSize": "Icon Größe", +}, +"numberInput": { + ...en.numberInput, + +"formatter": "Format", +"precision": "Präzision", +"allowNull": "Nullwert zulassen", +"thousandsSeparator": "Tausendertrennzeichen anzeigen", +"controls": "Schaltflächen zum Erhöhen/Verringern anzeigen", +"step": "Schritt", +"standard": "Standard", +"percent": "Prozente", +}, +"slider": { + ...en.slider, + +"step": "Schritt", +"stepTooltip": "Der Wert muss größer als 0 und durch (Max-Min) teilbar sein", +"vertical": "Vertikale Ausrichtung", +}, +"rating": { + ...en.rating, + +"max": "Maximale Bewertung", +"allowHalf": "Halbe Bewertungspunkte zulassen", +}, +"optionsControl": { + ...en.optionsControl, + +"optionList": "Optionen", +"option": "Option", +"optionI": "Option {i}", +"viewDocs": "Docs ansehen", +"tip": "Die Variablen \\'item\\' und \\'i\\' repräsentieren den Wert und den Index jedes Elements in der Datenmatrix", +}, +"stepOptionsControl": { + ...en.stepOptionsControl, + +"value": "Wert / Schlüssel", +"valueTooltip": "Step Value muss eine Zahl sein. Für den ersten Schritt muss er gleich dem Anfangswert sein. Die Zahlen müssen in konsistenter und aufsteigender Reihenfolge stehen.", +"title": "Schritt Titel", +"subTitle": "Schritt Untertitel", +"description": "Schritt Beschreibung", +"status": "Schritt Status", +"icon": "Schritt-Symbol", +}, +"step": { + ...en.step, + +"initialValue": "Start-Nummern bei", +"initialValueTooltip": "Wo soll die visuelle Nummerierung beginnen. Muss 1 oder höher sein.", +"valueDesc": "Aktueller Wert", +"size": "Schritte Größe", +"sizeSmall": "Klein", +"sizeDefault": "Standard", +"percent": "Schritte in Prozent", +"type": "Schritte Typ", +"typeDefault": "Standard", +"typeNavigation": "Navigation", +"typeInline": "Inline", +"direction": "Schritte Richtung", +"directionVertical": "Vertikal", +"directionHorizontal": "Horizontal", +"labelPlacement": "Schritte Etikettenplatzierung", +"status": "Schritte Status", +"statusWait": "Warten", +"statusProcess": "Prozess", +"statusFinish": "Oberfläche", +"statusError": "Fehler", +"showDots": "Punkte statt Symbole anzeigen", +"showIcons": "Icons statt Symbole anzeigen", +"responsive": "Ansprechbar", +"selectable": "Wählbar", +}, +"coloredTagOptionControl": { + ...en.coloredTagOptionControl, + +"tag": "Tag Text", +"color": "Farbe", +"icon": "Icon", +}, +"radio": { + ...en.radio, + +"options": "Optionen", +"horizontal": "Horizontal", +"horizontalTooltip": "Das horizontale Layout wickelt sich selbst ein, wenn es keinen Platz mehr hat", +"vertical": "Vertikal", +"verticalTooltip": "Das vertikale Layout wird immer in einer einzigen Spalte angezeigt", +"autoColumns": "Auto Kolonne", +"autoColumnsTooltip": "Das Auto-Spalten-Layout ordnet die Reihenfolge automatisch neu an, wenn es der Platz erlaubt, und zeigt sie als mehrere Spalten an", +}, +"cascader": { + ...en.cascader, + +"options": "JSON-Daten zur Anzeige kaskadierender Auswahlen", +}, +"selectInput": { + ...en.selectInput, + +"valueDesc": "Aktuell ausgewählter Wert", +"selectedIndexDesc": "Der Index des aktuell ausgewählten Wertes oder -1, wenn kein Wert ausgewählt ist", +"selectedLabelDesc": "Die Bezeichnung des aktuell ausgewählten Wertes", +}, +"file": { + ...en.file, + +"typeErrorMsg": "Muss eine Zahl mit einer gültigen Dateigrößeneinheit oder eine einheitenlose Anzahl von Bytes sein.", +"fileEmptyErrorMsg": "Upload fehlgeschlagen. Die Dateigröße ist leer.", +"fileSizeExceedErrorMsg": "Upload fehlgeschlagen. Die Dateigröße übersteigt das Limit.", +"minSize": "Min Größe", +"minSizeTooltip": "Die Mindestgröße der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", +"maxSize": "Max Größe", +"maxSizeTooltip": "Die maximale Größe der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", +"single": "Einzeln", +"multiple": "Mehrere", +"directory": "Verzeichnis", +"upload": "durchsuchen", +"fileType": "Dateitypen", +"reference": "Bitte beachten Sie", +"fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", +"fileTypeTooltip": "Eindeutige Dateityp-Angaben", +"uploadType": "Upload Typ", +"showUploadList": "Upload-Liste anzeigen", +"maxFiles": "Max Dateien", +"filesValueDesc": "Der Inhalt der aktuell hochgeladenen Datei ist Base64-kodiert", +"filesDesc": "Liste der aktuell hochgeladenen Dateien. Für Details, siehe", +"clearValueDesc": "Alle Dateien löschen", +"parseFiles": "Dateien parsen", +"parsedValueTooltip1": "Wenn parseFiles True ist, werden die hochgeladenen Dateien als Objekt, Array oder String analysiert. Auf die geparsten Daten kann über das Array parsedValue zugegriffen werden.", +"parsedValueTooltip2": "Unterstützt Excel-, JSON-, CSV- und Textdateien. Andere Formate geben Null zurück.", +"forceCapture": "Force Capture", +"forceCaptureTooltip": "Anstatt hochzuladen, Bild von der Kamera aufnehmen", +"usePhoto": "Foto verwenden", +"retakePhoto": "Foto neu aufnehmen", +"capture": "Erfassen Sie", +}, +"date": { + ...en.date, + +"format": "Format", +"inputFormat": "Eingabeformat", +"formatTip": "Unterstützung: \\'JJJJ-MM-TT HH:mm:ss\\', \\'JJJJ-MM-TT\\', \\'Zeitstempel\\'", +"reference": "Bitte beachten Sie", +"showTime": "Zeit zeigen", +"start": "Startdatum", +"end": "Enddatum", +"year": "Jahr", +"quarter": "Quartal", +"month": "Monat", +"week": "Woche", +"date": "Datum", +"clearAllDesc": "Alle löschen", +"resetAllDesc": "Alle zurücksetzen", +"placeholder": "Datum auswählen", +"placeholderText": "Platzhalter", +"startDate": "Startdatum", +"endDate": "Enddatum", +}, +"time": { + ...en.time, + +"start": "Startzeit", +"end": "Endzeit", +"formatTip": "Unterstützung: \\'HH:mm:ss\\', \\'Zeitstempel\\'", +"format": "Format", +"placeholder": "Zeit wählen", +"placeholderText": "Platzhalter", +"startTime": "Startzeit", +"endTime": "Endzeit", +}, +"button": { + ...en.button, + +"prefixIcon": "Präfix-Symbol", +"prefixText": "Präfix Text", +"suffixIcon": "Suffix-Symbol", +"icon": "Icon", +"iconSize": "Icon Größe", +"button": "Formular Schaltfläche", +"formToSubmit": "Formular zum Einreichen", +"default": "Standard", +"submit": "einreichen", +"textDesc": "Derzeit auf der Schaltfläche angezeigter Text", +"loadingDesc": "Befindet sich der Button im Ladezustand? Wenn wahr, wird die aktuelle Schaltfläche geladen", +"formButtonEvent": "Veranstaltung", +}, +"link": { + ...en.link, + +"link": "Link zu", +"textDesc": "Derzeit auf dem Link angezeigter Text", +"loadingDesc": "Befindet sich der Link im Ladezustand? Wenn wahr, wird der aktuelle Link geladen", +}, +"scanner": { + ...en.scanner, + +"text": "Klicken Sie auf Scannen", +"camera": "Kamera {index}", +"changeCamera": "Kamera wechseln", +"continuous": "Kontinuierliches Scannen", +"uniqueData": "Doppelte Daten ignorieren", +"maskClosable": "Klicke auf die Maske zum Schließen", +"errTip": "Bitte verwende diese Komponente unter HTTPS oder Localhost", +}, +"dropdown": { + ...en.dropdown, + +"onlyMenu": "Anzeige nur mit Etikett", +"textDesc": "Derzeit auf der Schaltfläche angezeigter Text", +"triggerMode": "Triggermodus", +}, +"textShow": { + ...en.textShow, + +"text": "### 👋 Hallo, {name}", +"valueTooltip": "Markdown unterstützt die meisten HTML-Tags und -Attribute. iframe, Script und andere Tags sind aus Sicherheitsgründen deaktiviert.", +"verticalAlignment": "Vertikale Ausrichtung", +"horizontalAlignment": "Horizontale Ausrichtung", +"textDesc": "Im aktuellen Textfeld angezeigter Text", +}, +"table": { + ...en.table, + +"editable": "Editierbar", +"columnNum": "Rubriken", +"viewModeResizable": "Spaltenbreite vom Benutzer angepasst", +"viewModeResizableTooltip": "Ob Nutzer die Spaltenbreite anpassen können.", +"visibleResizables": "Handles zur Größenänderung anzeigen", +"visibleResizablesTooltip": "Sichtbare Größenänderungsgriffe im Tabellenkopf anzeigen.", +"showFilter": "Schaltfläche Filter anzeigen", +"showRefresh": "Schaltfläche \"Aktualisieren\" anzeigen", +"showDownload": "Download-Schaltfläche anzeigen", +"columnSeparator": "Spaltentrennzeichen", +"columnSeparatorTooltip": "Spaltentrennzeichen („Trennzeichen“) in der heruntergeladenen CSV-Datei. \n\nEmpfehlungen:\n- Komma (,)\n- Semikolon (;)\n- Pipe (|)\n- Tabulator (\\t)", +"columnSetting": "Schaltfläche Spalteneinstellung anzeigen", +"searchText": "Text suchen", +"searchTextTooltip": "Suche und Filterung der in der Tabelle dargestellten Daten", +"showQuickJumper": "Quick Jumper anzeigen", +"hideOnSinglePage": "Auf einzelner Seite ausblenden", +"showSizeChanger": "Schaltfläche Größenänderer anzeigen", +"pageSizeOptions": "Optionen für die Seitengröße", +"pageSize": "Seitengröße", +"total": "Gesamtzahl der Zeilen", +"totalTooltip": "Der Standardwert ist die Anzahl der aktuellen Datenelemente, die aus der Abfrage abgerufen werden können, z. B: \\'{{query1.data[0].count}}\\'", +"filter": "Filter", +"filterRule": "Filter-Regel", +"chooseColumnName": "Spalte wählen", +"chooseCondition": "Bedingung wählen", +"clear": "Klar", +"columnShows": "Säule zeigt", +"selectAll": "Alle auswählen", +"and": "Und", +"or": "Oder", +"contains": "Enthält", +"notContain": "Enthält nicht", +"equals": "Entspricht", +"isNotEqual": "Ist nicht gleich", +"isEmpty": "Ist leer", +"isNotEmpty": "Ist nicht leer", +"greater": "Größer als", +"greaterThanOrEquals": "Größer als oder gleich", +"lessThan": "Weniger als", +"lessThanOrEquals": "Kleiner als oder gleich", +"action": "Aktion", +"columnValue": "Spalte Wert", +"columnValueTooltip": "\\'{{currentCell}}\\': Aktuelle Zelldaten\n \\'{{currentRow}}\\': Aktuelle Zeilendaten\n \\'{{currentIndex}}\\': Aktueller Datenindex (beginnend bei 0)\n Beispiel: \\'{{currentCell * 5}}\\' Show 5 Times the Original Value Data.", +"columnTooltip": "Spalten-Tooltip", +"imageSrc": "Bildquelle", +"imageSize": "Bildgröße", +"columnTitle": "Titel anzeigen", +"columnTitleTooltip": "Titel-Tooltip", +"showTitle": "Titel anzeigen", +"showTitleTooltip": "Spaltentitel im Tabellenkopf ein-/ausblenden", +"sortable": "Sortierbar", +"align": "Ausrichtung", +"fixedColumn": "Feste Säule", +"autoWidth": "Auto Breite", +"customColumn": "Benutzerdefinierte Säule", +"auto": "Auto", +"fixed": "Festgelegt", +"columnType": "Säule Typ", +"dataMapping": "Datenzuordnung", +"numberStep": "Schritt", +"numberStepTooltip": "Die Zahl, auf die der aktuelle Wert erhöht oder verringert wird. Es kann eine ganze Zahl oder eine Dezimalzahl sein", +"precision": "Präzision", +"float": "Schwimmer", +"prefix": "Präfix", +"suffix": "Nachsilbe", +"avatars": "Avatare", +"avatarGroupAlignment": "Ausrichtung der Avatare", +"text": "Text", +"number": "Nummer", +"link": "Link zu", +"links": "Links", +"tag": "Tag", +"select": "Wählen Sie", +"dropdown": "Auswahlliste", +"time": "Zeit", +"date": "Datum", +"dateTime": "Datum Uhrzeit", +"badgeStatus": "Status", +"button": "Taste", +"image": "Bild", +"boolean": "Boolesche", +"switch": "Schalter", +"rating": "Bewertung", +"progress": "Fortschritt", +"option": "Operation", +"optionList": "Betriebsliste", +"option1": "Betrieb 1", +"status": "Status", +"statusTooltip": "Optionale Werte: Erfolg, Fehler, Standard, Warnung, Verarbeitung", +"primaryButton": "Primäre", +"defaultButton": "Standard", +"type": "Typ", +"tableSize": "Tabelle Größe", +"hideHeader": "Tabellenkopfzeile ausblenden", +"hideToolbar": "Tabellenfußzeile ausblenden", +"fixedHeader": "Feste Tabellenüberschrift", +"fixedHeaderTooltip": "Kopfzeile wird für vertikal scrollbare Tabelle fixiert", +"fixedToolbar": "Feste Symbolleiste", +"fixedToolbarTooltip": "Die Symbolleiste wird für vertikal scrollbare Tabellen je nach Position fixiert", +"hideBordered": "Spaltenumrandung ausblenden", +"showHeaderGridBorder": "Kopfzeilen-Gitterrahmen anzeigen", +"showRowGridBorder": "Rand des Zeilenrasters anzeigen", +"showVerticalRowGridBorder": "Vertikalen Zeilenraster-Rahmen anzeigen", +"showHorizontalRowGridBorder": "Horizontalen Zeilenraster-Rahmen anzeigen", +"deleteColumn": "Spalte löschen", +"confirmDeleteColumn": "Bestätige Spalte löschen: ", +"small": "S", +"middle": "M", +"large": "L", +"refreshButtonTooltip": "Die aktuellen Daten ändern sich. Klicke auf , um die Spalte neu zu generieren.", +"changeSetDesc": "Ein Objekt, das Änderungen an einer bearbeitbaren Tabelle darstellt, enthält nur die geänderte Zelle. Zeilen gehen zuerst und Spalten gehen als zweites.", +"selectedRowDesc": "Liefert Daten für die aktuell ausgewählte Zeile und zeigt die Zeile an, die ein Klick-Ereignis auslöst, wenn der Nutzer auf eine Schaltfläche/Link in der Zeile klickt", +"selectedRowsDesc": "Nützlich im Mehrfachauswahlmodus, gleich wie SelectedRow", +"pageNoDesc": "Aktuelle Anzeigeseite, beginnend mit 1", +"pageSizeDesc": "Wie viele Zeilen pro Seite", +"sortColumnDesc": "Der Name der aktuell ausgewählten sortierten Spalte", +"sortDesc": "Ob die aktuelle Zeile in absteigender Reihenfolge ist", +"pageOffsetDesc": "Der aktuelle Beginn des Blätterns, der für das Blättern zum Abrufen von Daten verwendet wird. Beispiel: Select * from Users Limit \\'{{table1.pageSize}}\\' Versatz \\'{{table1.pageOffset}}\\'", +"displayDataDesc": "In der aktuellen Tabelle angezeigte Daten", +"selectedIndexDesc": "Ausgewählter Index in der Datenanzeige", +"filterDesc": "Parameter für die Tabellenfilterung", +"dataDesc": "Die JSON-Daten für die Tabelle", +"saveChanges": "Änderungen speichern", +"cancelChanges": "Änderungen abbrechen", +"rowSelectChange": "Zeile auswählen Ändern", +"rowClick": "Reihe Klicken", +"rowExpand": "Reihe verkleinern", +"rowShrink": "Zeilenverkleinerung", +"search": "Suchen", +"download": "Herunterladen", +"columnEdited": "Spalte bearbeitet", +"filterChange": "Filterwechsel", +"sortChange": "Sortieren Ändern", +"pageChange": "Seitenwechsel", +"refresh": "Auffrischen", +"rowColor": "Bedingte Zeilenfarbe", +"rowColorDesc": "Legt die Zeilenfarbe basierend auf den optionalen Variablen bedingt fest: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: \\'{{ currentRow.id > 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", +"rowHeight": "Bedingte Zeilenhöhe", +"rowHeightDesc": "Bedingte Einstellung der Zeilenhöhe basierend auf den optionalen Variablen: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", +"cellColor": "Bedingte Zellenfarbe", +"cellColorDesc": "Stelle die Zellenfarbe basierend auf dem Zellenwert mit CurrentCell bedingt ein. Beispiel: \\''{{ currentCell == 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", +"saveChangesNotBind": "Es wurde kein Event Handler für das Speichern von Änderungen konfiguriert. Bitte binde mindestens einen Ereignishandler vor dem Klick.", +"dynamicColumn": "Dynamische Spalteneinstellung verwenden", +"dynamicColumnConfig": "Säuleneinstellung", +"dynamicColumnConfigDesc": "Dynamische Spalteneinstellungen. Akzeptiert ein Array von Spaltennamen. In der Standardeinstellung sind alle Spalten sichtbar. Beispiel: [%r@\\\"id%r@\\\", %r@\\\"name%r@\\\"]", +"position": "Position", +"showDataLoadSpinner": "Ladeanzeige anzeigen", +"showValue": "Wert anzeigen", +"expandable": "Ausbaufähig", +"configExpandedView": "Expandierte Ansicht konfigurieren", +"toUpdateRowsDesc": "Ein Array von Objekten für zu aktualisierende Zeilen in bearbeitbaren Tabellen.", +"selectedCellDesc": "Ausgewählte Zelle", +"empty": "Leere", +"falseValues": "Text Wenn Falsch", +"iconTrue": "Symbol Wenn wahr", +"iconFalse": "Icon When False", +"iconNull": "Icon When Null", +"allColumn": "Alle", +"visibleColumn": "Sichtbar", +"emptyColumns": "Derzeit sind keine Spalten sichtbar", +"showSummary": "Zusammenfassungszeile(n) anzeigen", +"totalSummaryRows": "Gesamtzahl der Zeilen", +"inlineAddNewRow": "Inline neue Zeile(n) hinzufügen", +"editMode": "Bearbeitungsmodus", +"singleClick": "Einzelklick", +"doubleClick": "Doppelklick", +"showUpdateButtons": "Schaltflächen zum Speichern/Abbrechen anzeigen", +}, +"image": { + ...en.image, + +"src": "Bildquelle", +"srcDesc": "Die Bildquelle. Kann eine URL, ein Pfad oder ein Base64-String sein. z.B.: data:image/png;base64, AAA... CCC", +"supportPreview": "Zuum Vorschau Unterstützung", +"supportPreviewTip": "Wirksam, wenn die Bildquelle gültig ist", +"previewSrc": "HighRes Bildquelle", +"clipPath": "Bildbeschneidungspfad", +"clipPathTip": "Verwenden Sie clip-path, um eine benutzerdefinierte Form für Ihr Element zu definieren, die auf einer CSS-Definition basiert, eine SVG-Maske referenziert (über die Quell-URL) oder vordefinierte Formen wie circle(), ellipse(), polygon() oder inset() für das Clipping verwendet.", +"enableOverflow": "Überlauf freigeben", +"enableOverflowTip": "Ermöglicht das Überlaufen des Bildes über den Container und damit das Beschneiden über die Grenzen des Containers hinaus. Nützlich, um den Fokus auf bestimmte Teile des Bildes zu legen.", +"overflow": "Überlauf-Verhalten (CSS)", +"overflowTip": "Legt fest, wie sich der Inhalt beim Überlaufen des Containers verhalten soll. Optionen wie \"hidden\", \"scroll\" oder \"visible\" bestimmen die Sichtbarkeit des abgeschnittenen Inhalts.", +"positionX": "Horizontale Position", +"positionXTip": "Gibt die horizontale Ausrichtung des Bildes innerhalb seines Containers an. Beispiele: 'links', 'Mitte', 'rechts' oder Prozentwerte.", +"positionY": "Vertikale Position", +"positionYTip": "Gibt die vertikale Ausrichtung des Bildes innerhalb seines Containers an. Beispiele: 'oben', 'Mitte', 'unten' oder Prozentwerte.", +"aspectRatio": "Bildseitenverhältnis (CSS)", +"aspectRatioTip": "Behält ein einheitliches Verhältnis von Breite zu Höhe für das Bild bei, z. B. \"16/9\" für Breitbild oder \"1/1\" für quadratisch. Bei natürlichen Bildabmessungen leer lassen.", +"placement": "Image Placement", +"placementTip": "Bestimmt, wo und wie das Bild innerhalb des Layouts oder Containers angezeigt wird. Zu den Optionen gehören eine bestimmte Ausrichtung oder Platzierungslogik.", +}, +"progress": { + ...en.progress, + +"value": "Wert", +"valueTooltip": "Der Prozentsatz der Fertigstellung als Wert zwischen 0 und 100", +"showInfo": "Wert anzeigen", +"valueDesc": "Aktueller Fortschrittswert, der von 0 bis 100 reicht", +"showInfoDesc": "Ob der aktuelle Fortschrittswert angezeigt werden soll", +}, +"fileViewer": { + ...en.fileViewer, + +"invalidURL": "Bitte gib eine gültige URL oder einen Base64-String ein", +"src": "Datei URI", +"srcTooltip": "Vorschau des bereitgestellten Link-Inhalts durch Einbetten von HTML, Base64-kodierte Daten können ebenfalls unterstützt werden, z. B.: data:application/pdf; base64,AAA... CCC", +"srcDesc": "Der Datei-URI", +}, +"divider": { + ...en.divider, + +"title": "Titel", +"align": "Ausrichtung", +"dashed": "Gestrichelt", +"type": "Vertikaler Typ", +"dashedDesc": "Gestrichelte Linie verwenden", +"titleDesc": "Teiler Titel", +"alignDesc": "Teiler Titelausrichtung", +}, +"QRCode": { + ...en.QRCode, + +"value": "QR Code Inhalt Wert", +"valueTooltip": "Der Wert enthält maximal 2953 Zeichen. Der QR-Code-Wert kann verschiedene Datentypen kodieren, z. B. Textnachrichten, URLs, Kontaktdaten (VCard/meCard), Wi-Fi-Anmeldedaten, E-Mail-Adressen, Telefonnummern, SMS-Nachrichten, Geolocation-Koordinaten, Kalenderereignisdetails, Zahlungsinformationen, Kryptowährungsadressen und App-Download-Links.", +"valueDesc": "Der QR-Code-Inhaltswert", +"level": "Fehlertoleranz Level", +"levelTooltip": "Bezieht sich auf die Fähigkeit des QR-Codes, gescannt zu werden, auch wenn ein Teil des Codes blockiert ist. Je höher die Stufe, desto komplexer ist der Code.", +"includeMargin": "Rand anzeigen", +"image": "Bild in der Mitte anzeigen", +"L": "L (Niedrig)", +"M": "M (Mittel)", +"Q": "Q (Quartil)", +"H": "H (Hoch)", +"maxLength": "Der Inhalt ist zu lang. Setze die Länge auf weniger als 2953 Zeichen", +}, +"jsonExplorer": { + ...en.jsonExplorer, + +"indent": "Einrückung der einzelnen Ebenen", +"expandToggle": "JSON-Baum erweitern", +"theme": "Farbe Thema", +"valueDesc": "Aktuelle JSON-Daten", +"default": "Standard", +"defaultDark": "Standard Dunkel", +"neutralLight": "Neutrales Licht", +"neutralDark": "Neutral Dunkel", +"azure": "Azurblau", +"darkBlue": "Dunkelblau", +}, +"audio": { + ...en.audio, + +"src": "Audio Source URI oder Base64 String", +"defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", +"autoPlay": "Autoplay", +"loop": "Schleife", +"srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:audio/mpeg;base64,AAA... CCC", +"play": "Spielen", +"playDesc": "Ausgelöst, wenn Audio abgespielt wird", +"pause": "Pause", +"pauseDesc": "Ausgelöst, wenn der Ton pausiert wird", +"ended": "Beendet", +"endedDesc": "Ausgelöst, wenn die Audiowiedergabe endet", +}, +"video": { + ...en.video, + +"src": "Video Source URI oder Base64 String", +"defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", +"poster": "Poster-URL", +"defaultPosterUrl": "", +"autoPlay": "Autoplay", +"loop": "Schleife", +"controls": "Steuerelemente ausblenden", +"volume": "Band", +"playbackRate": "Wiedergaberate", +"posterTooltip": "Der Standardwert ist das erste Bild des Videos", +"autoPlayTooltip": "Nachdem das Video geladen wurde, wird es automatisch abgespielt. Wenn du diesen Wert von True auf False änderst, wird das Video angehalten. (Wenn ein Poster eingestellt ist, wird es über die Schaltfläche Poster abgespielt)", +"controlsTooltip": "Steuerelemente für die Videowiedergabe ausblenden. Wird möglicherweise nicht von jeder Videoquelle vollständig unterstützt.", +"volumeTooltip": "Lege die Lautstärke des Players fest, zwischen 0 und 1", +"playbackRateTooltip": "Lege die Rate des Spielers fest, zwischen 1 und 2", +"srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:video/mp4;base64, AAA... CCC", +"play": "Spielen", +"playDesc": "Ausgelöst, wenn das Video abgespielt wird", +"pause": "Pause", +"pauseDesc": "Ausgelöst, wenn das Video pausiert wird", +"load": "Laden", +"loadDesc": "Ausgelöst, wenn das Laden der Videoressource abgeschlossen ist", +"ended": "Beendet", +"endedDesc": "Ausgelöst, wenn das Video zu Ende gespielt wird", +"currentTimeStamp": "Die aktuelle Abspielposition des Videos in Sekunden", +"duration": "Die Gesamtdauer des Videos in Sekunden", +}, +"media": { + ...en.media, + +"playDesc": "Beginnt die Wiedergabe der Medien.", +"pauseDesc": "Pausiert die Medienwiedergabe.", +"loadDesc": "Setzt die Medien auf den Anfang zurück und startet die Auswahl der Medienressource neu.", +"seekTo": "Suche nach der angegebenen Anzahl von Sekunden oder einem Bruchteil, wenn der Betrag zwischen 0 und 1 liegt", +"seekToAmount": "Anzahl der Sekunden, oder Bruchteil, wenn sie zwischen 0 und 1 liegt", +"showPreview": "Vorschau anzeigen", +}, +"rangeSlider": { + ...en.rangeSlider, + +"start": "Startwert", +"end": "Endwert", +"step": "Schrittweite", +"stepTooltip": "Die Granularität des Schiebereglers, der Wert muss größer als 0 und teilbar durch (Max-Min) sein", +}, +"iconControl": { + ...en.iconControl, + +"selectIcon": "Wähle ein Symbol", +"searchIcon": "Ein Symbol suchen", +"searchAnimation": "Eine Animation suchen", +"searchIllustration": "Eine Illustration suchen", +"insertIcon": "Ein Icon einfügen", +"insertImage": "Ein Bild einfügen oder ", +}, +"shapeControl": { + ...en.shapeControl, + +"selectShape": "Wählen Sie eine Form", +"insertShape": "Einfügen einer Form", +"insertImage": "Ein Bild einfügen oder", +}, +"millisecondsControl": { + ...en.millisecondsControl, + +"timeoutTypeError": "Bitte gib die korrekte Timeout-Zeit in ms ein, die aktuelle Eingabe ist: {value}", +"timeoutLessThanMinError": "Die Eingabe muss größer sein als {left}, die aktuelle Eingabe ist: {value}", +}, +"selectionControl": { + ...en.selectionControl, + +"single": "Einzeln", +"multiple": "Mehrere", +"close": "Schließen", +"mode": "Modus wählen", +}, +"container": { + ...en.container, + +"title": "Angezeigter Container-Titel", +"titleTooltip": "Der Titel des Containers", +"flowWidth": "Inhalt Breite", +"floatType": "Text Schwebekörper Typ", +}, +"drawer": { + ...en.drawer, + +"closePosition": "Platzierung der Verschlusses", +"placement": "Platzierung der Schubladen", +"size": "Größe", +"top": "Top", +"right": "Rechts", +"center": "Zentrum", +"bottom": "Unten", +"left": "Links", +"title": "Titel der Schublade", +"titleAlign": "Ausrichtung der Titel", +"widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", +"heightTooltip": "Pixel, z.B. 378", +"openDrawerDesc": "Offene Schublade", +"closeDrawerDesc": "Schublade schließen", +"width": "Breite der Schublade", +"height": "Höhe der Schublade", +}, +"meeting": { + ...en.meeting, + +"logLevel": "Agora SDK Log Level", +"placement": "Platzierung der Meeting-Schubladen", +"meeting": "Meeting-Einstellungen", +"cameraView": "Kameraansicht", +"cameraViewDesc": "Kameraansicht des lokalen Benutzers (Host)", +"screenShared": "Bildschirm geteilt", +"screenSharedDesc": "Vom lokalen Benutzer (Host) geteilter Bildschirm", +"audioUnmuted": "Audio entstummt", +"audioMuted": "Audio stummgeschaltet", +"videoClicked": "Video Geklickt", +"videoOff": "Video aus", +"videoOn": "Video auf", +"size": "Größe", +"top": "Top", +"host": "Gastgeber des Besprechungsraums. Du müsstest den Gastgeber als eigene Anwendungslogik verwalten", +"participants": "Teilnehmer des Besprechungsraums", +"shareScreen": "Vom lokalen Benutzer geteilter Bildschirm", +"appid": "Agora Anwendungs-ID", +"meetingName": "Treffen Name", +"localUserID": "Host-Benutzer-ID", +"userName": "Host-Benutzername", +"rtmToken": "Agora RTM-Token", +"rtcToken": "Agora RTC-Token", +"noVideo": "Kein Video", +"profileImageUrl": "Profilbild-URL", +"right": "Rechts", +"bottom": "Unten", +"videoId": "Video-Stream-ID", +"audioStatus": "Audio-Status", +"left": "Links", +"widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", +"heightTooltip": "Pixel, z.B. 378", +"openDrawerDesc": "Offene Schublade", +"closeDrawerDesc": "Schublade schließen", +"width": "Breite der Schublade", +"height": "Höhe der Schublade", +"actionBtnDesc": "Aktionstaste", +"broadCast": "Broadcast-Nachrichten", +"title": "Meeting Titel", +"meetingCompName": "Agora Meeting Controller", +"sharingCompName": "Bildschirm teilen Stream", +"videoCompName": "Kamera-Stream", +"videoSharingCompName": "Bildschirm teilen Stream", +"meetingControlCompName": "Icon Taste", +"meetingCompDesc": "Meeting-Komponente", +"meetingCompControls": "Meeting-Kontrolle", +"meetingCompKeywords": "Agora Meeting, Web-Meeting, Kollaboration", +"iconSize": "Icon Größe", +"userId": "Host-Benutzer-ID", +"roomId": "Zimmer-ID", +"meetingActive": "Laufendes Treffen", +"messages": "Gesendete Nachrichten", +}, +"settings": { + ...en.settings, + +"title": "Einstellungen", +"userGroups": "Benutzergruppen", +"organization": "Arbeitsräume", +"subscription": "Abonnements", +"audit": "Audit-Logs", +"theme": "Themen", +"plugin": "Plugins", +"advanced": "Fortgeschrittene", +"apiDocs": "API-Dokumente", +"lab": "Labor", +"branding": "Branding", +"oauthProviders": "OAuth-Anbieter", +"appUsage": "App-Nutzungsprotokolle", +"environments": "Umgebungen", +"premium": "Prämie", +}, +"enterprise": { + ...en.enterprise, + +"AuditLogTitle": "Audit Log Dasboard", +"AuditLogOverview": "Log-Filter", +"USER_LOGIN": "User Login", +"USER_LOGOUT": "User Logout", +"APPLICATION_VIEW": "Bewerbung ansehen", +"APPLICATION_CREATE": "Anwendung erstellen", +"APPLICATION_DELETE": "Anwendung löschen", +"APPLICATION_UPDATE": "Anwendung aktualisieren", +"APPLICATION_MOVE": "Anwendung verschieben", +"APPLICATION_RECYCLED": "Recycle-Anwendung", +"APPLICATION_RESTORE": "Anwendung wiederherstellen", +"APPLICATION_PUBLISH": "Veröffentlichung von Anwendungen", +"APPLICATION_VERSION_CHANGE": "Aktualisierung der Anwendungsversion", +"APPLICATION_SHARING_CHANGE": "Gemeinsame Nutzung von Anwendungen ändern", +"APPLICATION_PERMISSION_CHANGE": "Anwendung Erlaubnis ändern", +"FOLDER_CREATE": "Ordner erstellen", +"FOLDER_DELETE": "Ordner löschen", +"FOLDER_UPDATE": "Update-Ordner", +"QUERY_EXECUTION": "Abfrage ausführen", +"GROUP_CREATE": "Gruppe erstellen", +"GROUP_UPDATE": "Gruppe aktualisieren", +"GROUP_DELETE": "Gruppe löschen", +"GROUP_MEMBER_ADD": "Gruppenmitglied hinzufügen", +"GROUP_MEMBER_ROLE_UPDATE": "Rolle des Gruppenmitglieds aktualisieren", +"GROUP_MEMBER_LEAVE": "Gruppe verlassen", +"GROUP_MEMBER_REMOVE": "Gruppenmitglied entfernen", +"SERVER_START_UP": "Start des Servers", +"SERVER_INFO": "Server-Informationen anzeigen", +"DATA_SOURCE_CREATE": "Datenquelle erstellen", +"DATA_SOURCE_UPDATE": "Update Datasource", +"DATA_SOURCE_DELETE": "Datenquelle löschen", +"DATA_SOURCE_PERMISSION_GRANT": "Grant Datasource Permission", +"DATA_SOURCE_PERMISSION_UPDATE": "Update Datasource Permission", +"DATA_SOURCE_PERMISSION_DELETE": "Berechtigung zum Löschen von Datenquellen", +"LIBRARY_QUERY_CREATE": "Bibliotheksabfrage erstellen", +"LIBRARY_QUERY_UPDATE": "Bibliotheksabfrage aktualisieren", +"LIBRARY_QUERY_DELETE": "Bibliotheksabfrage löschen", +"LIBRARY_QUERY_PUBLISH": "Bibliotheksabfrage veröffentlichen", +"API_CALL_EVENT": "API-Aufruf Ereignis", +"logFilter": "Log-Filter", +"noLogsFound": "Keine Protokolle gefunden. Passen Sie die Filter an und versuchen Sie es erneut.", +"usageLogUserEngagement": "Nutzerbindung nach Region", +"usageLogAppViews": "App-Nutzung im Laufe der Zeit", +"usageLogTopTen": "Top 10 Apps", +"usageLogAnonymousKNown": "Anonyme/bekannte Benutzer", +"usageLogDevices": "Gerät/OS Aufschlüsselung", +"usageLogBrowsers": "Browser/Layout Engine Aufschlüsselung", +"premiumFeaturesNotice": "Alle Premium Features sind in der Enterprise Edition von Lowcoder verfügbar.", +"requestLicense": "Lizenzen für die Enterprise Edition anfordern", +"requestLicensesBtton": "Request Enterprise Access", +"AuditLogsTitle": "Audit Logs", +"AuditLogsIntroTitle": "Leistungsstarker Einblick in die Aktivitäten Ihres Arbeitsbereichs", +"AuditLogsIntro1": "Mithilfe von Audit-Protokollen können Administratoren genau verfolgen, was auf der gesamten Lowcoder-Plattform passiert. Von Benutzeranmeldungen bis hin zu App-Änderungen wird jede relevante Aktion erfasst und gespeichert.", +"AuditLogsIntro2": "Für jedes Ereignis werden detaillierte Metadaten wie Geolocation, Gerätetyp, Browser und Betriebssystem erfasst.", +"AuditLogsIntro3": "Diese Transparenz ermöglicht Ihnen die Überwachung von Aktivitäten in allen verbundenen Umgebungen und bietet einen zuverlässigen Prüfpfad, der die Einhaltung von Vorschriften, die Sicherheit und den betrieblichen Einblick unterstützt.", +"AuditLogsEventsTitle": "Welche Ereignisse werden verfolgt?", +"AuditLogsEventsIntro": "Die folgenden Benutzeraktionen werden in Echtzeit protokolliert:", +"SignIn": "Eintragen", +"Logout": "Abmeldung", +"ViewApp": "App ansehen", +"CreateApp": "Neue Anwendung erstellen", +"DeleteApp": "App löschen", +"UpdateApp": "App aktualisieren", +"MoveToFolder": "In Ordner verschieben", +"MoveToTrash": "In den Papierkorb verschieben", +"RestoreApp": "App wiederherstellen", +"CreateFolder": "Neuen Ordner erstellen", +"DeleteFolder": "Ordner löschen", +"UpdateFolder": "Ordner aktualisieren", +"ExecuteDataQuery": "Ausführen der Datenabfrage", +"CreateUserGroup": "Neue Benutzergruppe erstellen", +"UpdateUserGroup": "Benutzergruppe aktualisieren", +"DeleteUserGroup": "Benutzergruppe löschen", +"AddGroupMember": "Mitglied der Benutzergruppe hinzufügen", +"UpdateGroupMemberRole": "Rolle des Benutzergruppenmitglieds aktualisieren", +"LeaveUserGroup": "Benutzergruppe verlassen", +"RemoveGroupMember": "Mitglied der Benutzergruppe entfernen", +"ServerStartup": "Start des Servers", +"CreateDataSource": "Datenquelle erstellen", +"UpdateDataSource": "Datenquelle aktualisieren", +"DeleteDataSource": "Datenquelle löschen", +"GrantUpdateDeletePermission": "Erteilen oder Aktualisieren von Berechtigungen", +"LibraryQueryActions": "Erstellen / Aktualisieren / Löschen von Bibliotheksabfragen", +"PublishLibraryQuery": "Bibliotheksabfrage veröffentlichen", +"AuditLogsPreviewTitle": "Vorschau des Audit-Logs in Aktion (zum Vergrößern anklicken)", +"ScreenshotPlaceholder1": "[Screenshot 1 Platzhalter]", +"ScreenshotPlaceholder2": "[Screenshot 2 Platzhalter]", +"ScreenshotPlaceholder3": "[Screenshot 3 Platzhalter]", +"PricingTitle": "Preise für die Enterprise Edition", +"PricingIntro": "Wir bieten flexible Preise für Organisationen jeder Größe, die auf Ihr Nutzungsmodell zugeschnitten sind:", +"FlatRateTitle": "Option 1: Pauschalpreis pro Instanz - $169 / Monat", +"FlatRateDesc": "Eine Instanz ist eine vollständige Lowcoder-Umgebung (Metadaten-Datenbank + Laufzeit), die unabhängig eingesetzt werden kann. Dies beinhaltet:", +"FlatRatePoint1": "Ein spezieller MongoDB-Metadatenspeicher", +"FlatRatePoint2": "Ein oder mehrere Anwendungslaufzeiten (\"Api-Service\"- und / oder \"Node-Service\"-Container)", +"UsagePricingTitle": "Option 2: Nutzungsabhängige Preise - $0,001 pro API-Aufruf", +"UsagePricingDesc": "Jede Instanz kann alternativ auf Basis der API-Nutzung lizenziert werden. Wir bieten Prepaid-Pakete an:", +"API100k": "100.000 API-Aufrufe - $100", +"API1M": "1.000.000 API-Aufrufe - $1.000", +"API10M": "10.000.000 API-Aufrufe - $10.000", +"UsageOverrunDesc": "Wenn Ihr API-Paket zur Neige geht, werden Sie von uns benachrichtigt. Sobald das Paket aufgebraucht ist, bleibt Ihre Instanz funktionsfähig, arbeitet aber mit reduzierter Geschwindigkeit, um Missbrauch zu verhindern und Fairness zu wahren.", +"UsageTopUpInfo": "Sie können jederzeit nahtlos zusätzliche Pakete hinzufügen, um einen kontinuierlichen, schnellen Zugang zu gewährleisten - ohne Serviceunterbrechungen.", +"AppUsageTitle": "App-Nutzungsprotokolle", +"AppUsageIntroTitle": "Verstehen, wie Ihre Anwendungen genutzt werden", +"AppUsageIntro1": "App-Nutzungsprotokolle geben Ihnen tiefe Einblicke in die Nutzung Ihrer veröffentlichten Lowcoder-Apps.", +"AppUsageIntro2": "Diese Funktionalität funktioniert wie eine eingebaute, vereinfachte Version von Google Analytics - jedoch vollständig privat und auf Ihre Lowcoder-Instanz beschränkt.", +"AppUsageIntro3": "Administratoren können analysieren, wie Apps im Laufe der Zeit aufgerufen werden, welche am meisten genutzt werden und von wo aus sich die Nutzer verbinden.", +"AppUsageMetricsTitle": "Metriken, die Sie verfolgen können...", +"AppUsageMetricsIntro": "Diese Analysen helfen Ihnen, fundierte Entscheidungen über Engagement und Nutzung der Plattform zu treffen:", +"MetricActiveUsers": "App Views pro Tag / Woche / Monat (basierend auf Zeitfilter)", +"MetricViewsPerApp": "Top 10 Apps", +"MetricDevices": "Zugriff über verschiedene Geräte (Desktop, Tablet, Handy)", +"MetricBrowsers": "Zugang über Browser und Betriebssystem", +"MetricCountries": "Geografische Herkunft der Nutzer", +"AppUsageScreenshotsTitle": "App Usage Analytics in Aktion (zum Vergrößern klicken)", +"AppUsageScreenshot1": "[App Usage Dashboard Screenshot]", +"AppUsageScreenshot2": "[Pro-App-Ansichten-Diagramm]", +"AppUsageScreenshot3": "[ Geo-Verbreitungskarte ]", +"BrandingIntroTitle": "Kundenspezifisches Branding & White-Labeling", +"BrandingIntro1": "Mit Lowcoders Branding-Einstellungen können Sie das Produkterlebnis für Ihre Nutzer verbessern, indem Sie ein vollständig anpassbares Branding anbieten.", +"BrandingIntro2": "Geben Sie Ihren Kunden oder internen Teams die Möglichkeit, die Plattform so zu nutzen, als wäre es ihre eigene - Logo, Farben, Schriftarten und benutzerdefinierte Seiten inklusive.", +"BrandingIntro3": "Oder Sie benötigen eine vollständige White-Label-Lösung, um Ihre Markenidentität an jedem Kontaktpunkt zu unterstreichen.", +"BrandingColorsIntro1": "Sie können Ihr eigenes Farbschema festlegen, das zu Ihrer Corporate Identity passt, einschließlich der primären UI-Elemente und Navigationsleisten.", +"BrandingColorsIntro2": "Passen Sie die Hervorhebungen in der Seitenleiste, die Kopfzeilenabschnitte und sogar den Textkontrast an, um die Benutzerfreundlichkeit und Zugänglichkeit zu verbessern.", +"BrandingFontsIntro": "Wählen Sie aus kuratierten Google-Schriftarten, um Ihre Anwendung in Stil und Lesbarkeit zu gestalten.", +"BrandingLogosIntro": "Natürlich können Sie auch Ihre eigenen Logos hochladen - rechteckig oder quadratisch -, die in Kopfzeilen, Dashboards und Anmeldebildschirmen erscheinen. Behalten Sie die Markenkonsistenz auf allen Geräten und Bildschirmen bei.", +"BrandingPagesIntro1": "Fügen Sie Ihren Fehlerseiten, Anmeldeströmen und Abmeldemeldungen personalisierte Texte und Grafiken hinzu.", +"BrandingPagesIntro2": "Diese Berührungspunkte tragen dazu bei, auch bei unerwarteten Szenarien oder Kontowechseln ein vollständig markengerechtes Erlebnis zu bieten.", +"BrandingMetaIntro": "Definieren Sie Standard-Metadaten wie Seitentitel und -beschreibung, um Ihre SEO-Präsenz und Ihre Markenbotschaft zu verbessern.", +"BrandingHelpLinksIntro": "Fügen Sie kontextabhängige Dokumentationslinks direkt in die Anwendung ein und bieten Sie Ihren Nutzern so eine Just-in-Time-Hilfe.", +"BrandingWhatsNewIntro": "Aktivieren Sie die Rubrik \"Was gibt es Neues\", um Aktualisierungen und Produktankündigungen in einer markengerechten und sichtbaren Weise hervorzuheben.", +"EnvironmentsIntroTitle": "Lowcoder Staging", +"EnvironmentsTitle": "Multi-Environment-Infrastruktur", +"EnvironmentsIntro1": "Lowcoder-Umgebungen ermöglichen es Ihnen, Ihre Entwicklungs-, Test- und Produktionsphasen sauber und sicher zu trennen.", +"EnvironmentsIntro2": "Unternehmensteams profitieren von strukturierten Release-Workflows, Genehmigungsprozessen und stufenübergreifender Versionsstabilität.", +"EnvironmentsIntro3": "Mit der Umgebungsfunktion können Administratoren steuern, was, wann und wo bereitgestellt wird - alles über eine einzige Schnittstelle.", +"EnvironmentsIntro4": "Lowcoder umfasst mehrere Objekttypen wie Arbeitsbereiche, Datenquellen, Datenabfragen und Apps. Da viele dieser Objekte miteinander verbunden sind (z. B. kann eine Datenquelle von mehreren Apps gemeinsam genutzt werden), würde ein reiner Git-basierter Export nicht alle Abhängigkeiten konsistent erfassen. Stattdessen bietet Lowcoder einen selektiven, integrierten Bereitstellungsmechanismus direkt in der Benutzeroberfläche. Apps, Datenquellen und Abfragen können selektiv verwaltet und in verschiedenen Umgebungen bereitgestellt werden. Verwaltete Objekte gewährleisten sichere, kontrollierte Staging- und Produktions-Releases.", +"yourDeploymentID": "Ihre Einsatz-ID", +"EnvironmentsFeaturePreviewTitle": "Environments & Deployment in Aktion (zum Vergrößern anklicken)", +"EnvironmentsUseCasesTitle": "Warum Umgebungen verwenden? (Inszenierung)", +"EnvironmentsUseCase1": "Verhindern Sie unbeabsichtigte Änderungen in der Produktion, indem Sie Anwendungen in speziellen Entwicklungs- oder QA-Umgebungen testen.", +"EnvironmentsUseCase2": "Anpassung an die IT-Governance des Unternehmens durch die Implementierung gestaffelter Implementierungen mit auditfähiger Nachverfolgung.", +"EnvironmentsUseCase3": "Geben Sie Teams die Möglichkeit, mit umgebungsspezifischen Konfigurationen, Daten und Integrationen sicher zu arbeiten.", +"EnvironmentsFeaturesTitle": "Was Sie bekommen", +"EnvironmentsFeature1": "Zentrales Dashboard zur Anzeige und Verwaltung aller Lowcoder-Umgebungen.", +"EnvironmentsFeature2": "Bereitstellung von Anwendungen, Datenquellen und Konfigurationen zwischen Umgebungen direkt über die Benutzeroberfläche, ohne dass zusätzliche CI/CD-Tools erforderlich sind.", +"EnvironmentsFeature3": "Umgebungsspezifische Zugriffskontrollen und Sichtbarkeitsregeln.", +"EnvironmentsFeature5": "Klare Trennung der Belange von Staging-, Sandbox- und Produktionsbetrieb.", +"apiUsage": "API-Aufrufe.", +"loadingApiUsage": "Laden von API-Nutzungsdaten...", +}, +"environments": { + ...en.environments, + +"title": "Umgebungen", +"search": "Suche", +"refresh": "Refresh", +"addEnvironment": "Umgebung hinzufügen", +"errorLoadingEnvironments": "Fehler beim Laden von Umgebungen", +"noEnvironmentsFoundMatching": "Keine Umgebungen gefunden für \"{searchText}\"", +"noEnvironmentsFound": "Keine Umgebungen gefunden. Erstellen Sie Ihre erste Umgebung, um loszulegen.", +"environmentsTypeLabel": "{type} Umgebungen", +"showingAllEnvironments": "Alle {count}-Umgebungen anzeigen", +"unnamedEnvironment": "Unbenannte Umgebung", +"masterEnvironment": "Master-Umgebung", +"viewAuditLogs": "View Audit Logs", +"id": "ID", +"domain": "Domain", +"master": "Meister", +"license": "Lizenz", +"apiCalls": "API-Aufrufe", +"yes": "Ja", +"no": "Nein", +"copyId": "ID kopieren", +"copied": "Kopiert!", +"percentUsed": "{percent}% verwendet", +"licenseStatus_checking": "Prüfen...", +"licenseStatus_licensed": "Lizensiert", +"licenseStatus_unlicensed": "Lizenz erforderlich", +"licenseStatus_error": "Einrichtung erforderlich", +"licenseStatus_unknown": "Unbekannt", +"detail_environmentNotFound": "Umgebung nicht gefunden", +"detail_returnToEnvironmentsList": "Zurück zur Liste der Umgebungen", +"detail_environmentDetail": "Umwelt Detail", +"detail_environmentOverview": "Überblick über die Umwelt", +"detail_noDomainSet": "Keine Domäne festgelegt", +"detail_environmentId": "Umgebung-ID", +"detail_licenseStatus": "Lizenz-Status", +"detail_licenseNeeded": "Erforderliche Lizenz", +"detail_setupRequired": "Einrichtung erforderlich", +"detail_created": "Erstellt", +"detail_unknown": "Unbekannt", +"detail_licenseDetails": "Lizenz-Details", +"detail_apiCallsRemaining": "Verbleibende API-Aufrufe", +"detail_totalApiCallsLimit": "Limit für API-Aufrufe insgesamt", +"detail_enterpriseEdition": "Enterprise-Edition", +"detail_active": "Aktiv", +"detail_inactive": "Inaktiv", +"detail_licenseInformation": "Lizenzinformationen", +"detail_calls": "API Calls.", +"detail_licenses": "Lizenzen", +"detail_license": "Lizenz", +"detail_workspaces": "Arbeitsbereiche", +"detail_userGroups": "Benutzergruppen", +"detail_type": "Typ", +"detail_status": "Status", +"detail_licensed": "Lizensiert", +"detail_unlicensed": "Nicht lizenziert", +"detail_apiKey": "API-Schlüssel", +"detail_configured": "Konfiguriert", +"detail_notSet": "Nicht festgelegt", +"detail_masterEnv": "Master Env", +"unlicensed_unlicensedDescription": "Diese Umgebung benötigt eine gültige Lizenz, um den vollen Funktionsumfang freizuschalten. Bitte stellen Sie sicher, dass Ihre API Service URL korrekt konfiguriert und das Plugin installiert ist.", +"unlicensed_errorDescription": "Bei der Überprüfung der Lizenz ist ein Problem aufgetreten. Bitte überprüfen Sie die Konfigurationseinstellungen.", +"unlicensed_defaultDescription": "Diese Umgebung erfordert eine Lizenzkonfiguration, um fortfahren zu können.", +"unlicensed_contactLowcoderTeam": "Kontakt zum Lowcoder-Team", +"unlicensed_editEnvironment": "Umgebung bearbeiten", +"unlicensed_backToEnvironments": "Zurück zu Umgebungen", +"unlicensed_helpText": "Benötigen Sie Hilfe? Kontaktieren Sie unser Team für Lizenzierungssupport oder bearbeiten Sie die Umgebungskonfiguration, um dieses Problem zu lösen.", +"unlicensed_type": "Typ", +"unlicensed_status": "Status", +"unlicensed_masterEnv": "Master Env", +"unlicensed_licenseIssue": "Lizenzausgabe", +"unlicensed_error": "Fehler", +"unlicensed_missing": "Fehlt", +"error_itemNotFound": "Der von Ihnen gesuchte Artikel existiert nicht oder Sie haben keine Berechtigung, ihn anzusehen.", +"modal_createNewEnvironment": "Neue Umgebung erstellen", +"modal_editEnvironment": "Umgebung bearbeiten", +"modal_cancel": "Abbrechen", +"modal_createEnvironment": "Umgebung erstellen", +"modal_saveChanges": "Änderungen speichern", +"modal_environmentName": "Umgebung Name", +"modal_pleaseEnterName": "Bitte geben Sie einen Namen ein", +"modal_nameMinLength": "Der Name muss aus mindestens 2 Zeichen bestehen", +"modal_enterEnvironmentName": "Name der Umgebung eingeben", +"modal_description": "Beschreibung", +"modal_enterDescription": "Beschreibung eingeben", +"modal_stage": "Stage", +"modal_pleaseSelectStage": "Bitte wählen Sie eine Etappe", +"modal_selectStage": "Stufe wählen", +"modal_development": "Entwicklung (DEV)", +"modal_testing": "Prüfung (TEST)", +"modal_preProduction": "Vorproduktion (PREPROD)", +"modal_production": "Produktion (PROD)", +"modal_frontendUrl": "Frontend-URL", +"modal_pleaseEnterValidUrl": "Bitte geben Sie eine gültige URL ein", +"modal_apiServiceUrl": "API Service URL", +"modal_nodeServiceUrl": "Node Service URL", +"modal_apiKey": "API-Schlüssel", +"modal_enterApiKey": "API-Schlüssel eingeben", +"modal_masterEnvironment": "Master-Umgebung", +"modal_alreadyMasterEnvironment": "{name} ist bereits die Master-Umgebung", +"modal_willBeMaster": "Wird Meister sein", +"modal_currentlyMaster": "Derzeit Master", +"modal_configurationRequirements": "Anforderungen an die Konfiguration", +"modal_configurationRequirementsDesc": "Vergewissern Sie sich, dass die URL des API-Dienstes konfiguriert und korrekt ist, dass der API-Schlüssel gültig ist und dass sowohl die Lizenz als auch das Plugin ordnungsgemäß installiert sind, um die Lizenz zu überprüfen.", +"workspaces_title": "Arbeitsbereiche", +"workspaces_subtitle": "Verwalten von Arbeitsbereichen in dieser Umgebung", +"workspaces_refresh": "Refresh", +"workspaces_errorLoadingWorkspaces": "Fehler beim Laden von Arbeitsbereichen", +"workspaces_configurationIssue": "Problem der Konfiguration", +"workspaces_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", +"workspaces_totalWorkspaces": "Arbeitsbereiche insgesamt", +"workspaces_managedWorkspaces": "Verwaltete Arbeitsbereiche", +"workspaces_unmanagedWorkspaces": "Nicht verwaltete Arbeitsbereiche", +"workspaces_workspace": "Arbeitsbereich", +"workspaces_role": "Rolle", +"workspaces_status": "Status", +"workspaces_managed": "Verwaltet", +"workspaces_unmanaged": "Unverwaltet", +"workspaces_actions": "Aktionen", +"workspaces_viewAuditLogs": "View Audit Logs", +"workspaces_audit": "Prüfung", +"workspaces_searchWorkspaces": "Arbeitsbereiche nach Name oder ID suchen", +"workspaces_showAll": "Alle anzeigen", +"workspaces_managedOnly": "Nur verwaltet", +"workspaces_showingResults": "Zeigt {count} von {total} Arbeitsbereiche", +"workspaces_paginationTotal": "{start}-{end} von {total} Arbeitsbereichen", +"workspaces_noWorkspacesFound": "Keine Arbeitsbereiche in dieser Umgebung gefunden", +"userGroups_title": "Benutzergruppen", +"userGroups_subtitle": "Verwalten von Benutzergruppen in dieser Umgebung", +"userGroups_refresh": "Refresh", +"userGroups_errorLoadingUserGroups": "Fehler beim Laden von Benutzergruppen", +"userGroups_configurationIssue": "Problem der Konfiguration", +"userGroups_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", +"userGroups_totalGroups": "Gruppen insgesamt", +"userGroups_allUsersGroups": "Alle Benutzergruppen", +"userGroups_developerGroups": "Entwickler-Gruppen", +"userGroups_customGroups": "Benutzerdefinierte Gruppen", +"userGroups_userGroup": "User Group", +"userGroups_type": "Typ", +"userGroups_allUsers": "Alle Benutzer", +"userGroups_developers": "Entwickler", +"userGroups_custom": "Benutzerdefiniert", +"userGroups_members": "Mitglieder", +"userGroups_adminMembers": "Verwaltungsmitglieder", +"userGroups_created": "Erstellt", +"userGroups_totalMembersTooltip": "Gesamtzahl der Mitglieder in dieser Gruppe", +"userGroups_adminMembersTooltip": "Anzahl der Admin-Benutzer in dieser Gruppe", +"userGroups_searchUserGroups": "Benutzergruppen nach Name oder ID suchen", +"userGroups_showingResults": "Zeigt {count} von {total} Benutzergruppen", +"userGroups_paginationTotal": "{start}-{end} von {total} Benutzergruppen", +"userGroups_noUserGroupsFound": "Keine Benutzergruppen in dieser Umgebung gefunden", +"apps_title": "Apps", +"apps_subtitle": "Verwalten von Arbeitsbereichsanwendungen", +"apps_refresh": "Refresh", +"apps_errorLoadingApps": "Fehler beim Laden von Anwendungen", +"apps_configurationIssue": "Problem der Konfiguration", +"apps_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", +"apps_totalApps": "Apps insgesamt", +"apps_publishedApps": "Veröffentlichte Apps", +"apps_managedApps": "Verwaltete Apps", +"apps_unmanagedApps": "Nicht verwaltete Anwendungen", +"apps_app": "App", +"apps_status": "Status", +"apps_published": "Veröffentlicht", +"apps_draft": "Entwurf", +"apps_managed": "Verwaltet", +"apps_unmanaged": "Unverwaltet", +"apps_deploy": "Bereitstellung von", +"apps_audit": "Prüfung", +"apps_appMustBeManagedToDeploy": "Die Anwendung muss verwaltet werden, bevor sie bereitgestellt werden kann", +"apps_deployThisApp": "Diese Anwendung in einer anderen Umgebung bereitstellen", +"apps_viewAuditLogs": "View Audit Logs", +"apps_searchApps": "Anwendungen nach Name oder ID suchen", +"apps_showAll": "Alle anzeigen", +"apps_managedOnly": "Nur verwaltet", +"apps_showingResults": "Zeigt {count} von {total} Anwendungen", +"apps_paginationTotal": "{start}-{end} von {total} Anwendungen", +"apps_noAppsFound": "Keine Anwendungen in diesem Arbeitsbereich gefunden", +"apps_appRecycled": "Diese Anwendung wurde in den Papierkorb verschoben", +"apps_managedSuccess": "{name} wird jetzt verwaltet", +"apps_unmanagedSuccess": "{name} ist jetzt Unverwaltet", +"apps_managedError": "Der verwaltete Status für {name} konnte nicht geändert werden.", +"dataSources_title": "Datenquellen", +"dataSources_subtitle": "Verwalten von Arbeitsbereichsdatenverbindungen", +"dataSources_refresh": "Refresh", +"dataSources_errorLoadingDataSources": "Fehler beim Laden von Datenquellen", +"dataSources_configurationIssue": "Problem der Konfiguration", +"dataSources_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", +"dataSources_totalDataSources": "Datenquellen insgesamt", +"dataSources_availableTypes": "Verfügbare Typen", +"dataSources_managed": "Verwaltet", +"dataSources_unmanaged": "Unverwaltet", +"dataSources_dataSource": "Datenquelle", +"dataSources_type": "Typ", +"dataSources_status": "Status", +"dataSources_deploy": "Bereitstellung von", +"dataSources_audit": "Prüfung", +"dataSources_dataSourceMustBeManagedToDeploy": "Die Datenquelle muss verwaltet werden, bevor sie eingesetzt werden kann.", +"dataSources_deployThisDataSource": "Diese Datenquelle in einer anderen Umgebung bereitstellen", +"dataSources_viewAuditLogs": "View Audit Logs", +"dataSources_searchDataSources": "Datenquellen nach Name oder ID suchen", +"dataSources_showAll": "Alle anzeigen", +"dataSources_managedOnly": "Nur verwaltet", +"dataSources_showingResults": "Anzeige von {count} von {total} Datenquellen", +"dataSources_paginationTotal": "{start}-{end} von {total} Datenquellen", +"dataSources_noDataSourcesFound": "Keine Datenquellen in diesem Arbeitsbereich gefunden", +"dataSources_managedSuccess": "{name} wird jetzt verwaltet", +"dataSources_unmanagedSuccess": "{name} ist jetzt Unverwaltet", +"dataSources_managedError": "Der verwaltete Status für {name} konnte nicht geändert werden.", +"queries_title": "Abfragen", +"queries_subtitle": "Verwalten von Arbeitsbereich-API-Abfragen", +"queries_refresh": "Refresh", +"queries_errorLoadingQueries": "Fehler beim Laden von Abfragen", +"queries_configurationIssue": "Problem der Konfiguration", +"queries_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", +"queries_totalQueries": "Abfragen insgesamt", +"queries_managed": "Verwaltet", +"queries_unmanaged": "Unverwaltet", +"queries_query": "Query", +"queries_creator": "Schöpfer", +"queries_status": "Status", +"queries_deploy": "Bereitstellung von", +"queries_audit": "Prüfung", +"queries_queryMustBeManagedToDeploy": "Die Abfrage muss verwaltet werden, bevor sie eingesetzt werden kann", +"queries_deployThisQuery": "Diese Abfrage in einer anderen Umgebung bereitstellen", +"queries_viewAuditLogs": "View Audit Logs", +"queries_searchQueries": "Suchanfragen nach Name oder ID", +"queries_showAll": "Alle anzeigen", +"queries_managedOnly": "Nur verwaltet", +"queries_showingResults": "Zeigt {count} von {total} Abfragen", +"queries_paginationTotal": "{start}-{end} von {total} Abfragen", +"queries_noQueriesFound": "Keine Abfragen in diesem Arbeitsbereich gefunden", +"queries_managedSuccess": "{name} wird jetzt verwaltet", +"queries_unmanagedSuccess": "{name} ist jetzt Unverwaltet", +"queries_managedError": "Der verwaltete Status für {name} konnte nicht geändert werden.", +"deployModal_deployTitle": "Setzen Sie {singularLabel} ein: ___PLATZHALTER1___", +"deployModal_loadingEnvironments": "Umgebungen laden...", +"deployModal_sourceEnvironment": "Quelle: Umwelt", +"deployModal_targetEnvironment": "Zielumgebung", +"deployModal_selectTargetEnvironment": "Zielumgebung auswählen", +"deployModal_selectTargetEnvironmentValidation": "Bitte wählen Sie eine Zielumgebung", +"deployModal_confirmed": "Bestätigt", +"deployModal_cancel": "Abbrechen", +"deployModal_deploy": "Bereitstellung von", +"deployModal_targetEnvironmentNotFound": "Zielumgebung nicht gefunden", +"deployModal_confirmCredentialOverwrite": "Bitte bestätigen Sie das Überschreiben der Anmeldeinformationen vor der Bereitstellung", +"deployModal_deploySuccess": "Erfolgreiche Bereitstellung von {name} in der Zielumgebung", +"deployModal_deployFailed": "Bereitstellung von {singularLabel} fehlgeschlagen", +"deployModal_selectFieldValidation": "Bitte wählen Sie ___PLATZHALTER0___", +"deployModal_selectFieldPlaceholder": "Wählen Sie {label}", +"deployModal_inputFieldValidation": "Bitte geben Sie {label} ein.", +"deployModal_inputFieldPlaceholder": "Geben Sie {label} ein", +"contactLowcoder_title": "Kontakt zum Lowcoder-Team", +"contactLowcoder_environmentLabel": "Umwelt:", +"contactLowcoder_environmentIdLabel": "Umwelt-ID:", +"contactLowcoder_deploymentIdLabel": "Einsatz-ID:", +"contactLowcoder_loading": "Laden...", +"contactLowcoder_notAvailable": "Nicht verfügbar", +"contactLowcoder_unnamedEnvironment": "Unbenannte Umgebung", +"contactLowcoder_fetchingDeploymentInfo": "Abrufen von Einsatzinformationen...", +"contactLowcoder_unableToLoadContactForm": "Kontakt-Formular kann nicht geladen werden", +"contactLowcoder_apiConfigurationError": "Umgebung API-Dienst-URL oder API-Schlüssel nicht konfiguriert", +"contactLowcoder_failedToFetchDeploymentId": "Einsatz-ID konnte nicht abgerufen werden", +"contactLowcoder_ensureProperConfiguration": "Bitte stellen Sie sicher, dass die Umgebung richtig konfiguriert ist, um den Support zu kontaktieren.", +"credentialConfirmations_firstConfirmation_title": "Warnung zum Überschreiben von Anmeldeinformationen", +"credentialConfirmations_firstConfirmation_message": "Diese Aktion überschreibt die vorhandenen Anmeldeinformationen in der Zielumgebung.", +"credentialConfirmations_firstConfirmation_description": "Dies ist ein schwerwiegender Vorgang, der andere Anwendungen und Benutzer beeinträchtigen kann.", +"credentialConfirmations_firstConfirmation_question": "Sind Sie sicher, dass Sie fortfahren wollen?", +"credentialConfirmations_firstConfirmation_continueButton": "Weiter", +"credentialConfirmations_firstConfirmation_cancelButton": "Abbrechen", +"credentialConfirmations_secondConfirmation_title": "Endgültige Bestätigung erforderlich", +"credentialConfirmations_secondConfirmation_message": "Letzte Warnung: Überschreiben von Anmeldeinformationen", +"credentialConfirmations_secondConfirmation_description": "Sie sind im Begriff, Anmeldedaten in der Zielumgebung zu überschreiben. Diese Aktion kann nicht rückgängig gemacht werden und kann bestehende Integrationen unterbrechen.", +"credentialConfirmations_secondConfirmation_confirmOnceMore": "Bitte bestätigen Sie noch einmal.", +"credentialConfirmations_secondConfirmation_finalQuestion": "Sind Sie absolut sicher, dass Sie die Anmeldeinformationen überschreiben wollen?", +"credentialConfirmations_secondConfirmation_confirmButton": "Ja, Anmeldeinformationen überschreiben", +"credentialConfirmations_secondConfirmation_cancelButton": "Abbrechen", +"config_singularLabels_app": "App", +"config_singularLabels_dataSource": "Datenquelle", +"config_singularLabels_query": "Query", +"config_singularLabels_workspace": "Arbeitsbereich", +"config_fields_updateDependenciesIfNeeded": "Abhängigkeiten bei Bedarf aktualisieren", +"config_fields_publishOnTarget": "Zielgenaue Veröffentlichung", +"config_fields_publicToAll": "Öffentlich für alle", +"config_fields_publicToMarketplace": "Öffentlich zum Marktplatz", +"config_fields_overwriteCredentials": "Anmeldeinformationen überschreiben", +"services_environments_missingEnvironmentId": "Fehlende Umgebungs-ID", +"services_environments_failedToUpdateEnvironment": "Aktualisierung der Umgebung fehlgeschlagen", +"services_environments_environmentCreatedSuccessfully": "Umgebung erfolgreich erstellt", +"services_environments_failedToCreateEnvironment": "Umgebung konnte nicht erstellt werden", +"services_environments_failedToFetchEnvironments": "Abrufen von Umgebungen fehlgeschlagen", +"services_environments_failedToFetchEnvironment": "Umgebung konnte nicht abgerufen werden", +"services_environments_environmentIdRequired": "Umwelt-ID ist erforderlich", +"services_environments_apiKeyRequiredForWorkspaces": "API-Schlüssel ist erforderlich, um Arbeitsbereiche abzurufen", +"services_environments_apiServiceUrlRequiredForWorkspaces": "Die URL des API-Dienstes ist erforderlich, um Arbeitsbereiche abzurufen.", +"services_environments_failedToFetchWorkspaces": "Abrufen von Arbeitsbereichen fehlgeschlagen", +"services_environments_apiKeyRequiredForUserGroups": "API-Schlüssel ist erforderlich, um Benutzergruppen abzurufen", +"services_environments_apiServiceUrlRequiredForUserGroups": "Die URL des API-Dienstes ist erforderlich, um Benutzergruppen abzurufen.", +"services_environments_failedToFetchUserGroups": "Abrufen von Benutzergruppen fehlgeschlagen", +"services_environments_workspaceIdRequired": "Arbeitsbereich-ID ist erforderlich", +"services_environments_apiKeyRequiredForApps": "API-Schlüssel ist erforderlich, um Anwendungen abzurufen", +"services_environments_apiServiceUrlRequiredForApps": "Die URL des API-Dienstes ist erforderlich, um Anwendungen abzurufen.", +"services_environments_failedToFetchWorkspaceApps": "Arbeitsbereich-Apps konnten nicht abgerufen werden", +"services_environments_apiKeyRequiredForDataSources": "API-Schlüssel ist erforderlich, um Datenquellen abzurufen", +"services_environments_apiServiceUrlRequiredForDataSources": "Die URL des API-Dienstes ist erforderlich, um Datenquellen abzurufen.", +"services_environments_failedToFetchWorkspaceDataSources": "Datenquellen für den Arbeitsbereich konnten nicht abgerufen werden", +"services_environments_apiKeyRequiredForQueries": "API-Schlüssel ist erforderlich, um Abfragen abzurufen", +"services_environments_apiServiceUrlRequiredForQueries": "Die URL des API-Dienstes ist zum Abrufen von Abfragen erforderlich", +"services_environments_failedToFetchWorkspaceQueries": "Abfragen zum Arbeitsbereich konnten nicht abgerufen werden", +"services_environments_apiServiceUrlNotConfigured": "API-Dienst-URL nicht konfiguriert", +"services_environments_licenseCheckFailed": "Lizenzprüfung fehlgeschlagen", +"services_environments_apiKeyRequiredForDeploymentId": "Der API-Schlüssel ist erforderlich, um die Einsatz-ID abzurufen.", +"services_environments_failedToFetchDeploymentId": "Einsatz-ID konnte nicht abgerufen werden", +"services_enterprise_missingEnvironmentId": "Fehlende Umgebungs-ID", +"services_enterprise_failedToFetchManagedWorkspaces": "Verwaltete Arbeitsbereiche konnten nicht abgerufen werden", +"services_enterprise_missingRequiredParamsToConnectOrg": "Erforderliche Parameter für die Verbindung des Arbeitsbereichs fehlen", +"services_enterprise_failedToConnectOrg": "Verbindung zum Arbeitsbereich fehlgeschlagen", +"services_enterprise_missingOrgGidToUnconnectWorkspace": "Fehlende Arbeitsbereich-GID, um die Verbindung zum Arbeitsbereich zu trennen", +"services_enterprise_failedToUnconnectOrg": "Verbindung zum Arbeitsbereich konnte nicht getrennt werden", +"services_enterprise_failedToConnectApp": "Verbindung zur App fehlgeschlagen", +"services_enterprise_failedToUnconnectApp": "Verbindung zur Anwendung konnte nicht getrennt werden", +"services_enterprise_failedToFetchDataSources": "Datenquellen konnten nicht abgerufen werden", +"services_enterprise_failedToDeployDataSource": "Datenquelle konnte nicht bereitgestellt werden", +"services_enterprise_failedToDisconnectManagedDataSource": "Verwaltete Datenquelle konnte nicht getrennt werden", +"services_enterprise_environmentIdRequired": "Umwelt-ID ist erforderlich", +"services_enterprise_failedToFetchQueries": "Abfragen konnten nicht abgerufen werden", +"services_enterprise_environmentIdAndQueryGidRequired": "Environment ID und Query GID sind erforderlich", +"services_enterprise_failedToDeployQuery": "Abfrage konnte nicht bereitgestellt werden", +"services_enterprise_queryGidRequired": "Abfrage der GID ist erforderlich", +"services_enterprise_failedToDisconnectQuery": "Abfrage konnte nicht getrennt werden", +"services_apps_failedToFetchApps": "Anwendungen können nicht abgerufen werden", +"services_apps_failedToDeployApp": "Anwendung kann nicht bereitgestellt werden", +"services_datasources_workspaceIdRequired": "Arbeitsbereich-ID ist erforderlich", +"services_datasources_apiKeyRequiredToFetchDataSources": "API-Schlüssel ist erforderlich, um Datenquellen abzurufen", +"services_datasources_apiServiceUrlRequiredToFetchDataSources": "Die URL des API-Dienstes ist erforderlich, um Datenquellen abzurufen.", +"services_datasources_failedToFetchDataSources": "Datenquellen konnten nicht abgerufen werden", +"services_datasources_failedToDeployDataSource": "Datenquelle konnte nicht bereitgestellt werden", +"services_workspace_failedToFetchWorkspaces": "Abrufen von Arbeitsbereichen fehlgeschlagen", +"services_workspace_failedToDeployWorkspace": "Bereitstellung des Arbeitsbereichs fehlgeschlagen", +"services_managedObjects_missingRequiredParameters": "Fehlende erforderliche Parameter", +"services_managedObjects_failedToCheckManagedStatus": "Prüfung des verwalteten Status fehlgeschlagen", +"services_managedObjects_failedToSetAsManaged": "{{objType}} konnte nicht als verwaltet festgelegt werden", +"services_managedObjects_failedToRemoveFromManaged": "{{objType}} konnte nicht aus verwalteten Dateien entfernt werden", +"services_managedObjects_missingEnvironmentId": "Fehlende Umgebungs-ID", +"services_managedObjects_failedToFetchManagedObjects": "Verwaltete Objekte konnten nicht abgerufen werden", +"services_managedObjects_failedToFetchManagedObject": "Verwaltetes Objekt konnte nicht geholt werden", +"services_managedObjects_managedObjectNotFound": "Verwaltetes Objekt für objGid nicht gefunden: ___PLATZHALTER0___}", +"services_license_apiServiceUrlRequired": "Die URL des API-Dienstes ist erforderlich", +"services_license_licenseInformationUnavailable": "Lizenzinformationen nicht verfügbar", +"services_license_licenseCheckTookTooLong": "Lizenzkontrolle dauerte zu lange", +"services_license_licenseServiceNotAvailable": "Lizenzservice nicht verfügbar", +"services_license_authenticationRequired": "Authentifizierung erforderlich - bitte prüfen Sie den API-Schlüssel", +"services_license_licenseServiceTemporarilyUnavailable": "Lizenzdienst vorübergehend nicht verfügbar", +"services_license_remainingAPICalls": "{{remaining}} verbleibend ({{used}}/{{total}} verwendet, {{percentage}}%)", +}, +"subscription": { + ...en.subscription, + +"details": "Details zum Abonnement", +"productDetails": "Details zum Produkt", +"productName": "Produktname", +"productDescription": "Beschreibung des Produkts", +"productPrice": "Produkt Preis", +"subscriptionDetails": "Details zum Abonnement", +"status": "Status", +"startDate": "Start Date", +"currentPeriodEnd": "Ende des laufenden Zeitraums", +"customerId": "Kunden-ID", +"subscriptionItems": "Abonnement-Artikel", +"itemId": "Artikel-ID", +"plan": "Plan", +"quantity": "Menge", +"product": "Produkt", +"invoices": "Rechnungen", +"invoiceNumber": "Rechnungsnummer", +"date": "Date", +"amount": "Betrag", +"link": "Link zu", +"viewInvoice": "Rechnung ansehen", +"downloadPDF": "PDF herunterladen", +"billingReason": "Grund der Abrechnung", +"subscriptionCycle": "monatliches Abonnement", +"customer": "Kunde", +"links": "Links", +"paid": "Bezahlt", +"unpaid": "Unbezahlt", +"noInvoices": "Keine Rechnungen verfügbar", +"costVolumeDevelopment": "Kosten-/Volumenentwicklung", +"noUsageRecords": "Keine Nutzungsaufzeichnungen verfügbar", +"itemDescription": "Artikel Beschreibung", +"periodStart": "Zeitraum Beginn", +"periodEnd": "Ende des Zeitraums", +"billingReason.subscription_cycle": "Abonnement-Zyklus", +"billingReason.subscription_create": "Erstellung von Abonnements", +"billingReason.manual": "Manuelle Abrechnung", +"billingReason.upcoming": "Kommende Abrechnung", +"billingReason.subscription_threshold": "Schwellenwert für Abonnements", +"billingReason.subscription_update": "Abonnement-Update", +"backToSubscriptions": "Zurück zu Abonnements", +"manageSubscription": "Verwalten Sie Ihre Abonnements", +"subscriptionHelp": "Hilfe zum Abonnement", +"subscriptionHelpDescription": "Wenn Sie Fragen haben, kontaktieren Sie uns bitte. Wir helfen Ihnen gerne weiter. service@lowcoder.cloud", +"success": "Zahlung & Abonnement Erfolg", +"successTitle": "Danke, dass Sie der Lowcoder-Familie beigetreten sind!", +"successThankYou": "Wir freuen uns sehr, Sie an Bord zu haben! Ihr Vertrauen in Lowcoder bedeutet uns alles, und wir sind bestrebt, Ihnen vom ersten Tag an ein außergewöhnliches Erlebnis zu bieten.\n\nBei Lowcoder sind Sie nicht nur ein Kunde, sondern Teil einer Gemeinschaft, die Innovation und Wachstum vorantreibt. Unser Ziel ist es, Ihnen dabei zu helfen, Ihre Ziele mit Leichtigkeit zu erreichen, sei es, dass wir Herausforderungen schnell lösen, innovative Lösungen entwickeln oder für Sie da sind, wenn Sie Unterstützung benötigen.\n\nDarauf können Sie sich freuen:\n\n- Erstklassige Unterstützung: Unser Team ist bereit, Sie bei jedem Schritt zu unterstützen.\n- Kontinuierliche Innovation: Wir verbessern uns ständig, um Ihnen die besten Tools und Funktionen zu bieten.\n- Eine Partnerschaft für den Erfolg: Ihr Erfolg ist unsere Priorität.\n\nVielen Dank, dass Sie uns inspirieren, Grenzen zu überschreiten und jeden Tag nach Spitzenleistungen zu streben. Wir können es kaum erwarten, zu sehen, was wir gemeinsam aufbauen werden.\n\nWillkommen an Bord! Lassen Sie uns außergewöhnliche Dinge schaffen.", +"successLowcoderTeam": "Das Lowcoder-Team", +}, +"subscriptionError": { + ...en.subscriptionError, + +"fetchProductDetails": "Fehler beim Abrufen von Produktdetails.", +"fetchSubscriptionDetails": "Fehler beim Abrufen von Abonnementdetails.", +"fetchInvoices": "Fehler beim Abrufen von Rechnungen.", +}, +"auditLog": { + ...en.auditLog, + +"title": "Audit Log Detail", +"geoLocation": "Geo-Standort", +"browserData": "Browser / System Metadata", +"browser": "Browser", +"OS": "OS", +"device": "Gerät", +"deviceType": "Gerätetyp", +"engine": "Motor", +"webview": "Webansicht", +"eventDetail": "Ereignis Detail", +}, +"memberSettings": { + ...en.memberSettings, + +"admin": "Verwaltung", +"superAdmin": "Super Verwalter", +"adminGroupRoleInfo": "Admin kann Gruppenmitglieder und Ressourcen verwalten", +"adminOrgRoleInfo": "Admins besitzen alle Ressourcen und können Gruppen verwalten.", +"member": "Mitglied", +"memberGroupRoleInfo": "Mitglied kann Gruppenmitglieder sehen", +"memberOrgRoleInfo": "Mitglieder können nur Ressourcen nutzen oder besuchen, zu denen sie Zugang haben.", +"title": "Mitglieder", +"createGroup": "Gruppe erstellen", +"newGroupPrefix": "Neue Gruppe ", +"allMembers": "Alle Mitglieder", +"deleteModalTitle": "Diese Gruppe löschen", +"deleteModalContent": "Die gelöschte Gruppe kann nicht wiederhergestellt werden. Bist du sicher, dass du die Gruppe löschen willst?", +"addMember": "Mitglieder hinzufügen", +"nameColumn": "Benutzer Name", +"joinTimeColumn": "Beitrittszeit", +"actionColumn": "Operation", +"roleColumn": "Rolle", +"exitGroup": "Ausstiegsgruppe", +"moveOutGroup": "Aus Gruppe entfernen", +"inviteUser": "Mitglieder einladen", +"exitOrg": "Lass", +"exitOrgDesc": "Bist du sicher, dass du diesen Arbeitsplatz verlassen willst?", +"moveOutOrg": "entfernen", +"moveOutOrgDescSaasMode": "Bist du sicher, dass du den Benutzer {name} aus diesem Arbeitsbereich entfernen möchtest?", +"moveOutOrgDesc": "Bist du sicher, dass du Benutzer {name} entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", +"devGroupTip": "Mitglieder der Entwicklergruppe haben die Berechtigung, Apps und Datenquellen zu erstellen.", +"lastAdminQuit": "Der letzte Administrator kann nicht aussteigen.", +"organizationNotExist": "Der aktuelle Arbeitsbereich ist nicht vorhanden", +"inviteUserHelp": "Du kannst den Einladungslink zum Versenden an den Nutzer kopieren", +"inviteUserLabel": "Einladungslink:", +"inviteCopyLink": "Link kopieren", +"inviteText": "{userName} lädt dich ein, dem Arbeitsbereich %r@\\\"{organization}%r@\\\" beizutreten, Klicke auf den Link, um beizutreten: {inviteLink}", +"inviteByEmailHelp": "Sie können eine oder mehrere E-Mail-Adressen eingeben, um Einladungslinks zu versenden", +"inviteByEmailLabel": "Emails eingeben:", +"inviteByEmailButton": "Einladungen versenden", +"inviteByEmailSuccess": "Einladungen erfolgreich verschickt!", +"inviteByEmailError": "Beim Versenden der Einladungen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", +"noValidEmails": "Keine gültigen Emails gefunden", +"groupName": "Gruppe Name", +"createTime": "Erstellt", +"manageBtn": "Verwalte", +"userDetail": "Einzelheiten", +"syncDeleteTip": "Diese Gruppe wurde aus der Adressbuchquelle gelöscht", +"syncGroupTip": "Diese Gruppe ist eine Adressbuch-Synchronisationsgruppe und kann nicht bearbeitet werden", +}, +"orgSettings": { + ...en.orgSettings, + +"newOrg": "Neuer Arbeitsbereich (Organisation)", +"title": "Arbeitsbereich", +"createOrg": "Arbeitsbereich erstellen (Organisation)", +"deleteModalTitle": "Bist du sicher, dass du diesen Arbeitsbereich löschen willst?", +"deleteModalContent": "Du bist dabei, diesen Arbeitsbereich {permanentlyDelete} zu löschen. Sobald er gelöscht ist, wird der Arbeitsbereich {notRestored}.", +"permanentlyDelete": "Dauerhaft", +"notRestored": "Kann nicht wiederhergestellt werden", +"deleteModalLabel": "Bitte gib den Arbeitsbereichsnamen {name} ein, um den Vorgang zu bestätigen:", +"deleteModalTip": "Bitte Arbeitsbereichsname eingeben", +"deleteModalErr": "Der Name des Arbeitsbereichs ist inkorrekt", +"deleteModalBtn": "löschen", +"editOrgTitle": "Arbeitsbereich-Informationen bearbeiten", +"orgNameLabel": "Arbeitsbereich Name:", +"orgNameCheckMsg": "Der Name des Arbeitsbereichs darf nicht leer sein", +"orgLogo": "Arbeitsbereich Logo:", +"logoModify": "Bild ändern", +"inviteSuccessMessage": "Erfolgreich dem Arbeitsbereich beitreten", +"inviteFailMessage": "Beitritt zum Arbeitsbereich fehlgeschlagen", +"uploadErrorMessage": "Upload-Fehler", +"orgName": "Arbeitsbereich Name", +}, +"freeLimit": "Kostenlose Probefahrt", +"tabbedContainer": { + ...en.tabbedContainer, + +"switchTab": "Registerkarte wechseln", +"switchTabDesc": "Ausgelöst beim Wechsel der Registerkarten", +"tab": "Registerkarten", +"atLeastOneTabError": "Der Tab-Container hält mindestens einen Tab fest", +"selectedTabKeyDesc": "Aktuell ausgewählte Registerkarte", +"iconPosition": "Icon Position", +"placement": "Platzierung der Registerkarten", +"showTabs": "Registerkarten anzeigen", +"gutter": "Lücke", +"gutterTooltip": "Der Abstand zwischen den Tabs in px", +"tabsCentered": "Zentrierte Registerkarten", +"destroyInactiveTab": "Inaktives TabPane zerstören", +}, +"formComp": { + ...en.formComp, + +"containerPlaceholder": "Ziehen Sie Komponenten aus dem rechten Fenster oder", +"openDialogButton": "Erstelle ein Formular aus einer deiner Datenquellen", +"resetAfterSubmit": "Zurücksetzen nach erfolgreicher Übermittlung", +"initialData": "Erste Daten", +"disableSubmit": "Abschicken deaktivieren", +"success": "Erfolgreich generiertes Formular", +"selectCompType": "Komponententyp auswählen", +"dataSource": "Datenquelle: ", +"invalidFormMessage": "Benutzerdefinierte Meldung bei ungültigem Formular", +"selectSource": "Quelle wählen", +"table": "Tabelle: ", +"selectTable": "Tabelle auswählen", +"columnName": "Spalte Name", +"dataType": "Datentyp", +"compType": "Komponente Typ", +"required": "Erforderlich", +"generateForm": "Formular generieren", +"compSelectionError": "Unkonfigurierter Spaltentyp", +"compTypeNameError": "Der Name des Komponententyps konnte nicht ermittelt werden", +"noDataSourceSelected": "Keine Datenquelle ausgewählt", +"noTableSelected": "Kein Tisch ausgewählt", +"noColumn": "Keine Säule", +"noColumnSelected": "Keine Spalte ausgewählt", +"noDataSourceFound": "Keine unterstützte Datenquelle gefunden. Eine neue Datenquelle erstellen", +"noTableFound": "Es wurden keine Tabellen in dieser Datenquelle gefunden, bitte wähle eine andere Datenquelle", +"noColumnFound": "In dieser Tabelle wurde keine unterstützte Spalte gefunden. Bitte wähle eine andere Tabelle", +"formTitle": "Formular Titel", +"name": "Name", +"nameTooltip": "Der Name des Attributs in den Daten des Formulars ist standardmäßig der Komponentenname, wenn er leer gelassen wird.", +"notSupportMethod": "Nicht unterstützte Methoden: ", +"notValidForm": "Das Formular ist nicht gültig", +"resetDesc": "Formulardaten auf Standardwert zurücksetzen", +"clearDesc": "Formulardaten löschen", +"setDataDesc": "Formulardaten einstellen", +"valuesLengthError": "Parameter Nummer Fehler", +"valueTypeError": "Parameter Typ Fehler", +"dataDesc": "Aktuelle Formulardaten", +"loadingDesc": "Ob das Formular geladen ist?", +}, +"modalComp": { + ...en.modalComp, + +"open": "Öffnen Sie", +"openDesc": "Ausgelöst, wenn das modale Dialogfeld geöffnet wird", +"close": "Schließen", +"closeDesc": "Ausgelöst, wenn das modale Dialogfeld geschlossen wird", +"openModalDesc": "Öffnen Sie das Dialogfeld", +"closeModalDesc": "Das Dialogfeld schließen", +"visibleDesc": "Ist es sichtbar? Wenn ja, wird das aktuelle Dialogfeld eingeblendet", +"title": "Titel der Schublade", +"titleAlign": "Ausrichtung der Titel", +"modalHeight": "Modale Höhe", +"modalHeightTooltip": "Pixel, Beispiel: 222", +"modalWidth": "Modale Breite", +"modalWidthTooltip": "Zahl oder Prozentsatz, Beispiel: 520, 60%", +}, +"listView": { + ...en.listView, + +"noOfRows": "Zeilenanzahl", +"noOfRowsTooltip": "Anzahl der Zeilen in der Liste - wird normalerweise auf eine Variable gesetzt (z. B. \\'{{query1.data.length}}\\'), um Abfrageergebnisse zu präsentieren", +"noOfColumns": "Anzahl der Kolonnen", +"itemIndexName": "Datenelement Index Name", +"itemIndexNameDesc": "Der Variablenname, der sich auf den Index des Elements bezieht, Standard: {default}", +"itemDataName": "Datenelement Objektname", +"itemDataNameDesc": "Der Variablenname, der sich auf das Datenobjekt des Items bezieht, Standard als {default}", +"itemsDesc": "Daten der Komponenten in der Liste offenlegen", +"dataDesc": "Die in der aktuellen Liste verwendeten JSON-Daten", +"dataTooltip": "Wenn du nur eine Zahl einträgst, wird dieses Feld als Zeilenzahl betrachtet und die Daten werden als leer angesehen.", +"enableSorting": "Sortierung zulassen", +}, +"navigation": { + ...en.navigation, + +"addText": "Untermenüpunkt hinzufügen", +"logoURL": "Navigation Logo URL", +"horizontalAlignment": "Horizontale Ausrichtung", +"logoURLDesc": "Du kannst ein Logo auf der linken Seite anzeigen, indem du einen URI-Wert oder einen Base64-String eingibst, z.B. data:image/png;base64,AAA... CCC", +"itemsDesc": "Hierarchische Navigationsmenüpunkte", +}, +"droppadbleMenuItem": { + ...en.droppadbleMenuItem, + +"subMenu": "Untermenü {number}", +}, +"navItemComp": { + ...en.navItemComp, + +"active": "Aktiv", +}, +"iframe": { + ...en.iframe, + +"URLDesc": "Die Quell-URL für den IFrame-Inhalt. Achte darauf, dass die URL HTTPS oder localhost ist. Vergewissere dich auch, dass die URL nicht durch die Content Security Policy (CSP) des Browsers blockiert wird. Der Header \\'X-Frame-Options\\' sollte nicht auf \\'DENY\\' oder \\'SAMEORIGIN\\' gesetzt sein.", +"allowDownload": "Downloads zulassen", +"allowSubmitForm": "Formular einreichen zulassen", +"allowMicrophone": "Mikrofon zulassen", +"allowCamera": "Kamera zulassen", +"allowPopup": "Popups zulassen", +}, +"switchComp": { + ...en.switchComp, + +"defaultValue": "Standard Boolescher Wert", +"open": "Auf", +"close": "Aus", +"openDesc": "Ausgelöst, wenn der Schalter eingeschaltet wird", +"closeDesc": "Ausgelöst, wenn der Schalter ausgeschaltet ist", +"valueDesc": "Aktueller Status des Schalters", +}, +"signature": { + ...en.signature, + +"tips": "Hinweistext", +"signHere": "Hier unterschreiben", +"showUndo": "Rückgängig machen anzeigen", +"showClear": "Löschen anzeigen", +}, +"localStorageComp": { + ...en.localStorageComp, + +"valueDesc": "Alle derzeit gespeicherten Datenelemente", +"setItemDesc": "Einen Artikel hinzufügen", +"removeItemDesc": "Einen Artikel entfernen", +"clearItemDesc": "Alle Artikel löschen", +}, +"utilsComp": { + ...en.utilsComp, + +"openUrl": "URL öffnen", +"openApp": "App öffnen", +"copyToClipboard": "In die Zwischenablage kopieren", +"downloadFile": "Datei herunterladen", +"logoutUser": "Benutzer abmelden", +"resetPassword": "Passwort zurücksetzen", +}, +"messageComp": { + ...en.messageComp, + +"info": "Eine Benachrichtigung senden", +"loading": "Ladebestätigung senden", +"success": "Erfolgsbenachrichtigung senden", +"warn": "Eine Warnmeldung senden", +"error": "Eine Fehlerbenachrichtigung senden", +}, +"toastComp": { + ...en.toastComp, + +"destroy": "eine Benachrichtigung schließen", +"info": "Eine Benachrichtigung senden", +"loading": "Ladebestätigung senden", +"success": "Erfolgsbenachrichtigung senden", +"warn": "Eine Warnmeldung senden", +"error": "Eine Fehlerbenachrichtigung senden", +}, +"themeComp": { + ...en.themeComp, + +"switchTo": "Thema wechseln", +}, +"transformer": { + ...en.transformer, + +"preview": "Vorschau", +"docLink": "Lies mehr über Transformers...", +"previewSuccess": "Vorschau Erfolg", +"previewFail": "Vorschau Fail", +"deleteMessage": "Transformator löschen Erfolg. Du kannst {undoKey} zum Rückgängigmachen verwenden.", +"documentationText": "Transformers sind für die Datenumwandlung und Wiederverwendung deines mehrzeiligen JavaScript-Codes gedacht. Verwende Transformers, um Daten aus Abfragen oder Komponenten an deine lokalen App-Anforderungen anzupassen. Im Gegensatz zu JavaScript-Abfragen sind Transformer nur für Leseoperationen ausgelegt. Das bedeutet, dass du innerhalb eines Transformers keine Abfrage auslösen oder einen temporären Zustand aktualisieren kannst.", +}, +"temporaryState": { + ...en.temporaryState, + +"value": "Anfangswert", +"valueTooltip": "Der Anfangswert, der im temporären Zustand gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.", +"docLink": "Lies mehr über temporäre Zustände...", +"pathTypeError": "Pfad muss entweder ein String oder ein Array von Werten sein", +"unStructuredError": "Unstrukturierte Daten {prev} können nicht von {path} aktualisiert werden", +"valueDesc": "Vorläufiger Zustandswert", +"deleteMessage": "Der temporäre Zustand wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", +"documentationText": "Temporäre Zustände sind eine leistungsstarke Funktion zur Verwaltung komplexer Variablen, die den Zustand von Komponenten in deiner Anwendung dynamisch aktualisieren. Diese Zustände dienen als Zwischenspeicher für Daten, die sich im Laufe der Zeit aufgrund von Benutzerinteraktionen oder anderen Prozessen ändern können.", +}, +"dataResponder": { + ...en.dataResponder, + +"data": "Daten", +"dataDesc": "Daten des aktuellen Data Responders", +"dataTooltip": "Wenn diese Daten geändert werden, lösen sie nachfolgende Aktionen aus.", +"docLink": "Lies mehr über die Data Responders...", +"deleteMessage": "Der Data Responder wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", +"documentationText": "Wenn du eine App entwickelst, kannst du den Komponenten Ereignisse zuweisen, um Änderungen an bestimmten Daten zu überwachen. Eine Tabellenkomponente kann zum Beispiel Ereignisse wie %r@\\\"Row select change%r@\\\", %r@\\\"Filter change%r@\\\", %r@\\\"Sort change%r@\\\" und %r@\\\"Page change%r@\\\" haben, um Änderungen in der selectedRow-Eigenschaft zu verfolgen. Für Änderungen in temporären Zuständen, Transformatoren oder Abfrageergebnissen, für die keine Standardereignisse zur Verfügung stehen, werden jedoch Data Responder verwendet. Mit ihnen kannst du alle Datenänderungen erkennen und darauf reagieren.", +}, +"theme": { + ...en.theme, + +"title": "Themen", +"createTheme": "Thema erstellen", +"themeName": "Themenname:", +"themeNamePlaceholder": "Bitte gib einen Themennamen ein", +"defaultThemeTip": "Standard-Theme:", +"createdThemeTip": "Das Thema, das du erstellt hast:", +"option": "Option{index}", +"input": "Eingabe", +"confirm": "Ok", +"emptyTheme": "Keine Themen verfügbar", +"click": "", +"toCreate": "", +"nameColumn": "Name", +"defaultTip": "Standard", +"updateTimeColumn": "Update Zeit", +"edit": "bearbeiten", +"cancelDefaultTheme": "Standardthema aufheben", +"setDefaultTheme": "Als Standardthema festlegen", +"copyTheme": "Thema duplizieren", +"setSuccessMsg": "Einstellung Erfolglos", +"cancelSuccessMsg": "Unsetting Erfolglos", +"deleteSuccessMsg": "Löschung Erfolglos", +"checkDuplicateNames": "Der Themenname existiert bereits, bitte gib ihn erneut ein", +"copySuffix": " Kopiere", +"saveSuccessMsg": "Erfolgreich gerettet", +"leaveTipTitle": "Tipps", +"leaveTipContent": "Du bist noch nicht gerettet, bestätigst du den Austritt?", +"leaveTipOkText": "Lass", +"goList": "Zurück zur Liste", +"saveBtn": "Speichern", +"mainColor": "Hauptfarben", +"text": "Textfarben", +"layout": "Layout-Einstellungen", +"fonts": "Schriftart-Einstellungen", +"components": "Komponentenvorlagen", +"charts": "eCharts Definition", +"defaultTheme": "Standard", +"yellow": "Gelb", +"green": "Grün", +"previewTitle": "Themenvorschau\nBeispielkomponenten, die deine Themenfarben verwenden", +"dateColumn": "Datum", +"emailColumn": "E-Mail", +"phoneColumn": "Telefon", +"subTitle": "Titel", +"linkLabel": "Link zu", +"linkUrl": "app.lowcoder.cloud", +"progressLabel": "Fortschritt", +"sliderLabel": "Schieber", +"radioLabel": "Radio", +"checkboxLabel": "Kontrollkästchen", +"buttonLabel": "Formular Schaltfläche", +"switch": "Schalter", +"previewDate": "16/10/2022", +"previewEmail1": "ted.com", +"previewEmail2": "skype.de", +"previewEmail3": "imgur.com", +"previewEmail4": "globo.de", +"previewPhone1": "+63-317-333-0093", +"previewPhone2": "+30-668-580-6521", +"previewPhone3": "+86-369-925-2071", +"previewPhone4": "+7-883-227-8093", +"chartPreviewTitle": "Diagrammstil-Vorschau", +"chartSpending": "Ausgaben", +"chartBudget": "Haushalt", +"chartAdmin": "Verwaltung", +"chartFinance": "Finanzen", +"chartSales": "Verkäufe", +"chartFunnel": "Trichterdiagramm", +"chartShow": "anzeigen", +"chartClick": "Klick", +"chartVisit": "Besuche", +"chartQuery": "Abfrage", +"chartBuy": "Kaufen", +"canvas": "Canvas-Einstellungen", +}, +"themeDetail": { + ...en.themeDetail, + +"primary": "Primärfarbe", +"primaryDesc": "Standard-Primärfarbe, die von den meisten Komponenten verwendet wird", +"textDark": "Dunkle Textfarbe", +"textDarkDesc": "Wird verwendet, wenn die Hintergrundfarbe hell ist", +"textLight": "Helle Textfarbe", +"textLightDesc": "Wird verwendet, wenn die Hintergrundfarbe dunkel ist", +"canvas": "Canvas Farbe", +"canvasDesc": "Standard-Hintergrundfarbe der App", +"primarySurface": "Container Farbe", +"primarySurfaceDesc": "Standard-Hintergrundfarbe für Komponenten wie z.B. Tabellen", +"borders": "Border Styles", +"spacing": "Abstandsstile", +"font": "Font Styles", +"fonts": "Schriftarten", +"borderRadius": "Radius des Rahmens", +"borderRadiusDesc": "Standard-Radius des Rahmens, der von den meisten Komponenten verwendet wird", +"borderColor": "Farbe der Umrandung", +"borderColorDesc": "Standard-Rahmenfarbe, die von den meisten Komponenten verwendet wird", +"borderWidth": "Border Width", +"borderWidthDesc": "Standard-Rahmenbreite, die von den meisten Komponenten verwendet wird", +"borderStyle": "Border Style", +"borderStyleDesc": "Standard-Rahmenstil, der von den meisten Komponenten verwendet wird", +"fontFamily": "Schriftfamilie", +"fontFamilyDesc": "Standard-Schriftfamilie, die von den meisten Komponenten verwendet wird", +"chart": "Chart-Stil", +"chartDesc": "JSON Eingabe für Echarts", +"echartsJson": "Chart-Stil JSON", +"margin": "Außenabstand", +"marginDesc": "Standard Außenabstand, der typischerweise für die meisten Komponenten verwendet wird", +"padding": "Innenabstand", +"paddingDesc": "Standard Innenabstand, der für die meisten Komponenten verwendet wird", +"containerHeaderPadding": "Kopfbereich Innenabstand", +"containerheaderpaddingDesc": "Standard Kopfbereich Innenabstand, der für die meisten Komponenten verwendet wird", +"gridColumns": "Canvas Rasterspalten", +"gridColumnsDesc": "Standardanzahl von Spalten, welcher für den Canvas verwendet wird", +"loadingIndicators": "Ladeindikatoren", +"showComponentLoadingIndicators": "Ladeindikatoren beim Laden einer Komponente anzeigen", +"showDataLoadingIndicators": "Zeige Ladeindikatoren während des Ladens von Daten", +"dataLoadingIndicator": "Daten-Ladeindikator", +"background": "Hintergrund Stile", +"gridSettings": "Raster-Einstellungen", +"gridRowHeight": "Raster Zeilenhöhe", +"gridRowHeightDesc": "Höhe der einzelnen Zeilen im Gitter", +"gridRowCount": "Anzahl der Rasterzeilen", +"gridRowCountDesc": "Maximale Anzahl von Zeilen im Gitter", +"gridPaddingX": "Horizontale Polsterung", +"gridPaddingXDesc": "Horizontale Polsterung der Leinwand", +"gridPaddingY": "Vertikale Polsterung", +"gridPaddingYDesc": "Vertikale Polsterung der Leinwand", +"gridBgImage": "Hintergrundbild", +"gridBgImageDesc": "Hintergrundbild auf der Leinwand", +"gridBgImageRepeat": "Hintergrundbild wiederholen", +"gridBgImageRepeatDesc": "Wiederholung des Hintergrundbildes auf der Leinwand", +"gridBgImageSize": "Größe des Hintergrundbildes", +"gridBgImageSizeDesc": "Größe des Hintergrundbildes auf der Leinwand", +"gridBgImagePosition": "Hintergrundbild Position", +"gridBgImagePositionDesc": "Position des Hintergrundbildes auf der Leinwand", +"gridBgImageOrigin": "Hintergrundbild Ursprung", +"gridBgImageOriginDesc": "Ursprung des Hintergrundbildes der Leinwand", +}, +"pluginSetting": { + ...en.pluginSetting, + +"title": "Plugins", +"npmPluginTitle": "npm-Plugins", +"npmPluginDesc": "Richte npm-Plugins für alle Anwendungen im aktuellen Arbeitsbereich ein.", +"npmPluginEmpty": "Es wurden keine npm-Plugins hinzugefügt.", +"npmPluginAddButton": "Ein npm-Plugin hinzufügen", +"saveSuccess": "Erfolgreich gerettet", +}, +"advanced": { + ...en.advanced, + +"title": "Fortgeschrittene", +"defaultHomeTitle": "Standard-Homepage", +"defaultHomeHelp": "Die Homepage ist die App, die alle Nicht-Entwickler standardmäßig sehen, wenn sie sich anmelden. Hinweis: Stelle sicher, dass die ausgewählte App auch für Nicht-Entwickler zugänglich ist.", +"defaultHomePlaceholder": "Wähle die Standard-Homepage", +"saveBtn": "Speichern", +"preloadJSTitle": "JavaScript vorladen", +"preloadJSHelp": "Richte vorgeladenen JavaScript-Code für alle Apps im aktuellen Arbeitsbereich ein.", +"preloadCSSTitle": "CSS vorladen", +"preloadCSSHelp": "Richte vorgeladenen CSS-Code für alle Apps im aktuellen Arbeitsbereich ein.", +"preloadCSSApply": "Auf die Startseite des Arbeitsbereichs anwenden", +"preloadLibsTitle": "JavaScript-Bibliothek", +"preloadLibsHelp": "Richte vorgeladene JavaScript-Bibliotheken für alle Anwendungen im aktuellen Arbeitsbereich ein, und das System hat lodash, day.js, uuid, numbro zur direkten Verwendung eingebaut. Die JavaScript-Bibliotheken werden vor der Initialisierung der App geladen, was einen gewissen Einfluss auf die Leistung der App hat.", +"preloadLibsEmpty": "Es wurden keine JavaScript-Bibliotheken hinzugefügt", +"preloadLibsAddBtn": "Eine Bibliothek hinzufügen", +"saveSuccess": "Erfolgreich gerettet", +"AuthOrgTitle": "Willkommensbildschirm des Arbeitsbereichs", +"AuthOrgDescrition": "Die URL, unter der sich deine Nutzer beim aktuellen Arbeitsbereich anmelden können.", +"APIConsumption": "API-Verbrauch", +"APIConsumptionDescription": "Hier können Sie den API-Verbrauch für alle Apps im aktuellen Arbeitsbereich sehen.", +"overallAPIConsumption": "Gesamter API-Verbrauch in diesem Arbeitsbereich bis jetzt", +"lastMonthAPIConsumption": "API-Verbrauch des letzten Monats, in diesem Arbeitsbereich", +"npmRegistryTitle": "Benutzerdefinierte NPM-Registrierung", +"npmRegistryHelp": "Richten Sie eine benutzerdefinierte NPM-Registry ein, um den Abruf von Plugins aus einer privaten NPM-Registry zu ermöglichen.", +"showHeaderInPublicApps": "Kopfzeile öffentlich anzeigen", +"showHeaderInPublicAppsHelp": "Legen Sie die Sichtbarkeit des Headers in der öffentlichen Ansicht für alle Apps fest", +}, +"branding": { + ...en.branding, + +"title": "Branding-Einstellungen", +"general": "Allgemeine Einstellungen", +"selectWorkspace": "Arbeitsbereich auswählen", +"brandingName": "Markenname", +"brandingNamePlaceholder": "Markenname eingeben", +"brandingDescription": "Branding Beschreibung", +"brandingDescriptionPlaceholder": "Beschreibung des Brandings eingeben", +"logoSection": "Logos", +"logo": "Logo", +"logoHelp": "Laden Sie das Logo Ihres Unternehmens im SVG- oder PNG-Format hoch.", +"logoUrlHelp": "Geben Sie eine gültige Bildurl für das Logo an.", +"logoUrlPlaceholder": "Bildurl für Logo bereitstellen", +"squareLogo": "Quadratisches Logo", +"squareLogoHelp": "Laden Sie eine quadratische Version Ihres Logos im SVG- oder PNG-Format hoch.", +"squareLogoUrlHelp": "Geben Sie eine gültige Bildurl für das quadratische Logo an.", +"squareLogoUrlPlaceholder": "Geben Sie die URL für das quadratische Logo an.", +"colorFontSection": "Farben und Schriftarten", +"mainBrandingColor": "Hauptbrandingfarbe", +"mainBrandingColorHelp": "Wählen Sie die Hauptfarbe für Ihr Branding.", +"editorHeaderColor": "Editor-Header-Farbe", +"editorHeaderColorHelp": "Wählen Sie die Farbe des Headers des Editors.", +"adminSidebarColor": "Admin-Seitenleistenfarbe", +"adminSidebarColorHelp": "Wählen Sie die Farbe der Admin-Seitenleiste.", +"adminSidebarFontColor": "Schriftfarbe der Admin-Seitenleiste", +"adminSidebarFontColorHelp": "Wählen Sie die Schriftfarbe für die Seitenleiste des Administrators.", +"adminSidebarActiveBgColor": "Hintergrundfarbe der Admin-Seitenleiste für ausgewählte Elemente", +"adminSidebarActiveBgColorHelp": "Wählen Sie die Hintergrundfarbe des ausgewählten Elements für die Seitenleiste des Administrators.", +"adminSidebarActiveFontColor": "Schriftfarbe des ausgewählten Elements in der Admin-Seitenleiste", +"adminSidebarActiveFontColorHelp": "Wählen Sie die Schriftfarbe des ausgewählten Elements für die Seitenleiste des Administrators.", +"editorSidebarColor": "Editor-Seitenleistenfarbe", +"editorSidebarColorHelp": "Wählen Sie die Farbe der Seitenleiste des Editors.", +"editorSidebarFontColor": "Editor Seitenleiste Schriftfarbe", +"editorSidebarFontColorHelp": "Wählen Sie die Schriftfarbe für die Seitenleiste des Editors.", +"editorSidebarActiveBgColor": "Hintergrundfarbe des ausgewählten Elements in der Editor-Seitenleiste", +"editorSidebarActiveBgColorHelp": "Wählen Sie die Hintergrundfarbe des ausgewählten Elements für die Seitenleiste des Editors.", +"editorSidebarActiveFontColor": "Schriftfarbe des ausgewählten Elements in der Editor-Seitenleiste", +"editorSidebarActiveFontColorHelp": "Wählen Sie die Schriftfarbe des ausgewählten Elements für die Seitenleiste des Editors.", +"font": "Schriftart", +"fontHelp": "Wählen Sie eine Schriftart aus Google Fonts für Ihre Anwendung.", +"textSection": "Texte und Seiten", +"errorPage": "Fehlerseiten-Text", +"errorPageHelp": "Geben Sie den Text ein, der auf der Fehlerseite angezeigt wird.", +"signUpPage": "Anmeldeseiten-Text", +"signUpPageHelp": "Geben Sie den Text ein, der auf der Anmeldeseite angezeigt wird.", +"loggedOutPage": "Abmeldeseiten-Text", +"loggedOutPageHelp": "Geben Sie den Text ein, der auf der Abmeldeseite angezeigt wird.", +"standardDescription": "Standardbeschreibung", +"standardDescriptionHelp": "Geben Sie die Standardbeschreibung für SEO-Metainformationen ein.", +"standardTitle": "Standardtitel", +"standardTitleHelp": "Geben Sie den Standardtitel für SEO-Metainformationen ein.", +"showDocumentation": "Dokumentation anzeigen", +"submitIssue": "Problem melden erlauben", +"whatsNew": "„Neuigkeiten“ aktivieren", +"saveButton": "Einstellungen speichern", +"errorPageImage": "Laden Sie ein Bild für die Fehlerseite im SVG- oder PNG-Format hoch.", +"errorPageImageUrl": "Bild-URL für die Fehlerseite", +"errorPageImageUrlPlaceholder": "Provider-Bildurl für Fehlerseite", +"errorPageImageUrlHelp": "Geben Sie eine gültige Bildurl an, die auf der Fehlerseite angezeigt werden soll.", +"signUpPageImage": "Laden Sie ein Bild für die Registrierungsseite im SVG- oder PNG-Format hoch.", +"signUpPageImageUrl": "Bild-URL für die Anmeldeseite", +"signUpPageImageUrlPlaceholder": "Provider-Bildurl für die Anmeldeseite", +"signUpPageImageUrlHelp": "Geben Sie eine gültige Bildurl an, die auf der Anmeldeseite angezeigt werden soll.", +"loggedOutPageImage": "Laden Sie ein Bild für die Abmeldeseite im SVG- oder PNG-Format hoch.", +"showDocumentationSection": "Dokumentation Link-Einstellungen", +"showWhatsNewSection": "Was ist neu Link-Einstellungen", +"documentationLink": "Dokumentationslink", +"documentationLinkPlaceholder": "Geben Sie die URL für Ihre Dokumentation ein...", +"documentationLinkHelp": "Geben Sie eine gültige URL an, die Benutzer für die Dokumentation besuchen können.", +"whatsNewSection": "Dokumentationseinstellungen", +"whatsNewLink": "Dokumentationslink", +"whatsNewLinkPlaceholder": "Geben Sie die URL für Ihre Dokumentation ein...", +"whatsNewLinkHelp": "Geben Sie eine gültige URL an, die Benutzer für Ihre Neuigkeiten besuchen können.", +"deleteBranding": "Branding löschen", +"deleteBrandingContent": "Sind Sie sicher, dass Sie das Branding \"{orgName}\" löschen wollen?", +"fetchBrandingError": "Beim Abrufen der Markendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", +"upload": "Hochladen", +}, +"networkMessage": { + ...en.networkMessage, + +"0": "Verbindung zum Server fehlgeschlagen, bitte überprüfe dein Netzwerk", +"200": "Erfolg", +"201": "Erstellt", +"204": "Kein Inhalt", +"400": "Bad Request", +"401": "Authentifizierung fehlgeschlagen, bitte melde dich erneut an", +"403": "Keine Erlaubnis, bitte kontaktiere den Administrator für eine Genehmigung", +"404": "Nicht gefunden", +"500": "Besetzter Dienst, bitte versuche es später noch einmal", +"timeout": "Zeitüberschreitung anfordern", +}, +"share": { + ...en.share, + +"title": "Teilen", +"viewer": "Betrachter", +"editor": "Herausgeber", +"owner": "Besitzer", +"datasourceViewer": "Kann verwenden", +"datasourceOwner": "Kann Managen", +}, +"debug": { + ...en.debug, + +"title": "Titel", +"switch": "Schalterkomponente: ", +}, +"module": { + ...en.module, + +"folderNotEmpty": "Ordner ist nicht leer", +"emptyText": "Keine Daten", +"docLink": "Lesen Sie mehr über Module...", +"documentationText": "Module sind vollständige Anwendungen, die in andere Anwendungen eingebunden und wiederholt werden können und wie eine einzelne Komponente funktionieren. Da Module eingebettet werden können, müssen sie in der Lage sein, mit Ihren externen Anwendungen oder Websites zu interagieren. Diese vier Einstellungen helfen, die Kommunikation mit einem Modul zu unterstützen.", +"circularReference": "Zirkuläre Referenz, aktuelles Modul/Anwendung kann nicht verwendet werden!", +"emptyTestInput": "Das aktuelle Modul hat keinen Eingang zum Testen", +"emptyTestMethod": "Das aktuelle Modul hat keine Methode zum Testen", +"name": "Name", +"input": "Eingabe", +"params": "Params", +"emptyParams": "Es wurden keine Params hinzugefügt", +"emptyInput": "Es wurde keine Eingabe hinzugefügt", +"emptyMethod": "Es wurde keine Methode hinzugefügt", +"emptyOutput": "Es wurde keine Ausgabe hinzugefügt", +"data": "Daten", +"string": "Zeichenfolge", +"number": "Nummer", +"array": "Array", +"boolean": "Boolesche", +"query": "Abfrage", +"autoScaleCompHeight": "Bauteilhöhenwaage mit Container", +"excuteMethod": "Methode {name} ausführen", +"method": "Methode", +"action": "Aktion", +"output": "Ausgabe", +"nameExists": "Name {name} bereits vorhanden", +"eventTriggered": "Ereignis {name} wird ausgelöst", +"globalPromptWhenEventTriggered": "Zeigt eine globale Aufforderung an, wenn ein Ereignis ausgelöst wird", +"emptyEventTest": "Das aktuelle Modul hat keine zu prüfenden Ereignisse", +"emptyEvent": "Es wurde kein Ereignis hinzugefügt", +"event": "Veranstaltung", +}, +"resultPanel": { + ...en.resultPanel, + +"returnFunction": "Der Rückgabewert ist eine Funktion.", +"consume": "{Zeit}", +"JSON": "JSON anzeigen", +}, +"createAppButton": { + ...en.createAppButton, + +"creating": "Erstellen...", +"created": "Erstelle {name}", +}, +"apiMessage": { + ...en.apiMessage, + +"authenticationFail": "Benutzerauthentifizierung fehlgeschlagen, bitte melde dich erneut an", +"verifyAccount": "Konto muss verifiziert werden", +"functionNotSupported": "Die aktuelle Version unterstützt diese Funktion nicht. Bitte kontaktiere das Lowcoder Business Team, um dein Konto zu aktualisieren.", +}, +"globalErrorMessage": { + ...en.globalErrorMessage, + +"createCompFail": "Komponente erstellen {comp} Fehlgeschlagen", +"notHandledError": "{method} Nicht ausgeführte Methode", +}, +"aggregation": { + ...en.aggregation, + +"navLayout": "Navigationsleiste", +"chooseApp": "App wählen", +"iconTooltip": "Unterstützt Image src Link oder Base64 String wie data:image/png;base64,AAA... CCC", +"hideWhenNoPermission": "Versteckt für nicht autorisierte Benutzer", +"queryParam": "URL-Abfrage-Parameter", +"hashParam": "URL-Hash-Parameter", +"tabBar": "Registerkarte Bar", +"emptyTabTooltip": "Konfiguriere diese Seite im rechten Fensterbereich", +}, +"appSetting": { + ...en.appSetting, + +"450": "450px (Mobile)", +"800": "800px (Tablet)", +"1440": "1440px (Laptop)", +"1920": "1920px (Breitbild)", +"3200": "3200px (Super Large Screen)", +"title": "Allgemeine App-Einstellungen", +"autofill": "Autofill", +"userDefined": "Benutzerdefiniert", +"default": "Standard", +"tooltip": "Das Popover nach der Einstellung schließen", +"canvasMaxWidth": "Maximale Bildschirmbreite für diese App", +"userDefinedMaxWidth": "Benutzerdefinierte maximale Breite", +"inputUserDefinedPxValue": "Bitte gib einen benutzerdefinierten Pixelwert ein", +"maxWidthTip": "Die maximale Breite sollte größer als oder gleich 350 sein", +"themeSetting": "Angewandter Stil Thema", +"themeSettingDefault": "Standard", +"themeCreate": "Thema erstellen", +"appTitle": "Titel", +"appDescription": "Beschreibung", +"appCategory": "Kategorie", +"showPublicHeader": "Kopfzeile in der öffentlichen Ansicht anzeigen", +"canvas": "Canvas-Einstellungen", +"gridColumns": "Rasterspalten", +"gridRowHeight": "Raster Zeilenhöhe", +"gridRowCount": "Anzahl der Rasterzeilen", +"gridPaddingX": "Horizontale Polsterung der Leinwand", +"gridPaddingY": "Vertikale Polsterung der Leinwand", +"gridBgImage": "Hintergrundbild", +"gridBgImageRepeat": "Hintergrundbild wiederholen", +"gridBgImageSize": "Größe des Hintergrundbildes", +"gridBgImagePosition": "Hintergrundbild Position", +"gridBgImageOrigin": "Hintergrundbild Ursprung", +}, +"customShortcut": { + ...en.customShortcut, + +"title": "Benutzerdefinierte Abkürzungen", +"shortcut": "Abkürzung", +"action": "Aktion", +"empty": "Keine Abkürzungen", +"placeholder": "Shortcut drücken", +"otherPlatform": "Andere", +"space": "Raum", +}, +"profile": { + ...en.profile, + +"orgSettings": "Arbeitsbereich-Einstellungen", +"switchOrg": "Bereich wechseln", +"joinedOrg": "Meine Arbeitsbereiche", +"createOrg": "Arbeitsbereich erstellen", +"logout": "Abmelden", +"personalInfo": "Mein Profil", +"bindingSuccess": "Bindung {sourceName} Erfolg", +"uploadError": "Upload-Fehler", +"editProfilePicture": "Ändern Sie", +"saveUserNameTooltip": "Drücken Sie die Eingabetaste, um Ihren neuen Benutzernamen zu speichern. Wenn Sie Ihre E-Mail-Adresse sehen, bedeutet dies, dass wir sie als Benutzernamen übernommen haben und Sie sie in einen besseren ändern können. Ihre E-Mail als technischer Benutzername bleibt unangetastet.", +"changeAvatarTooltip": "Sie können PNG- oder JPG-Dateien hochladen", +"nameCheck": "Der Name darf nicht leer sein", +"name": "Name:", +"namePlaceholder": "Bitte gib deinen Namen ein", +"toBind": "Zum Binden", +"binding": "Ist Verbindlich", +"bindError": "Parameter Error, Currently Not Supported Binding.", +"bindName": "Binden {name}", +"loginAfterBind": "Nach der Bindung kannst du dich mit {name} anmelden", +"bindEmail": "E-Mail binden:", +"email": "E-Mail", +"emailCheck": "Bitte gib eine gültige E-Mail ein", +"emailPlaceholder": "Bitte gib deine E-Mail ein", +"submit": "einreichen", +"bindEmailSuccess": "Erfolgreiche E-Mail-Bindung", +"passwordModifiedSuccess": "Passwort erfolgreich geändert", +"passwordSetSuccess": "Passwort erfolgreich gesetzt", +"oldPassword": "Altes Passwort:", +"inputCurrentPassword": "Bitte gib dein aktuelles Passwort ein", +"newPassword": "Neues Passwort:", +"inputNewPassword": "Bitte gib dein neues Passwort ein", +"confirmNewPassword": "Bestätige das neue Passwort:", +"inputNewPasswordAgain": "Bitte gib dein neues Passwort erneut ein", +"password": "Passwort:", +"modifyPassword": "Passwort ändern", +"setPassword": "Passwort setzen", +"alreadySetPassword": "Passwort setzen", +"setPassPlaceholder": "Du kannst dich mit Passwort anmelden", +"setPassAfterBind": "Du kannst das Passwort nach der Kontobindung festlegen", +"socialConnections": "Soziale Bindungen", +"changeAvatar": "Avatar ändern", +"about": "Dein Account", +"userId": "Benutzer-ID", +"createdAt": "Erstellt am", +"currentOrg": "aktuelle Organisation", +"settings": "Einstellungen", +"uiLanguage": "UI-Sprache", +"info": "Info", +"createdApps": "Erstellte Apps", +"createdModules": "Erstellte Module", +"sharedApps": "Mit Ihnen geteilte Apps", +"sharedModules": "Mit Ihnen geteilte Module", +"onMarketplace": "Auf dem Marktplatz", +"howToPublish": "So veröffentlichen Sie auf dem Marktplatz", +"memberOfOrgs": "Workspaces-Mitgliedschaft", +"apiKeys": "API-Schlüssel", +"createApiKey": "API-Schlüssel erstellen", +"apiKeyInfo": "Stellen Sie sicher, dass Sie Ihren neuen API-Schlüssel jetzt kopieren. Sie werden ihn nicht mehr sehen können.", +"apiKeyName": "Name", +"apiKeyDescription": "Beschreibung", +"apiKeyCopy": "Klicke auf den API Schlüssel um den Key in die Zwischenablage zu kopieren", +"apiKey": "API-Schlüssel", +"deleteApiKey": "API-Schlüssel löschen", +"deleteApiKeyContent": "Sind Sie sicher, dass Sie diesen API-Schlüssel löschen möchten?", +"deleteApiKeyError": "Etwas ist schief gelaufen. Bitte versuche es erneut.", +}, +"shortcut": { + ...en.shortcut, + +"shortcutList": "Tastaturkürzel", +"click": "Klick", +"global": "Global", +"toggleShortcutList": "Tastaturkurzbefehle umschalten", +"editor": "Herausgeber", +"toggleLeftPanel": "Linkes Fenster umschalten", +"toggleBottomPanel": "Unteres Fenster umschalten", +"toggleRightPanel": "Rechtes Fenster umschalten", +"toggleAllPanels": "Alle Fenster umschalten", +"preview": "Vorschau", +"undo": "Rückgängig machen", +"redo": "Redo", +"showGrid": "Raster anzeigen", +"component": "Komponente", +"multiSelect": "Mehrere auswählen", +"selectAll": "Alle auswählen", +"copy": "Kopiere", +"cut": "Schnitt", +"paste": "Kleister", +"move": "Verschiebe", +"zoom": "Größe ändern", +"delete": "löschen", +"deSelect": "Deselektiere", +"queryEditor": "Abfrage-Editor", +"excuteQuery": "Aktuelle Abfrage ausführen", +"editBox": "Text-Editor", +"formatting": "Format", +"openInLeftPanel": "Im linken Fenster öffnen", +}, +"help": { + ...en.help, + +"videoText": "Übersicht", +"onBtnText": "OK", +"permissionDenyTitle": "💡 Du kannst keine neue Anwendung oder Datenquelle erstellen?", +"permissionDenyContent": "Du hast nicht die Berechtigung, die Anwendung und die Datenquelle zu erstellen. Bitte kontaktiere den Administrator, um der Entwicklergruppe beizutreten.", +"appName": "Tutorial Anwendung", +"chat": "Chatte mit uns", +"docs": "Dokumentation ansehen", +"editorTutorial": "Tutorial-Editor", +"update": "Was gibt's Neues?", +"version": "Version", +"versionWithColon": "Version:", +"submitIssue": "Problem melden", +}, +"header": { + ...en.header, + +"nameCheckMessage": "Der Name kann nicht leer sein", +"viewOnly": "Nur Ansicht", +"recoverAppSnapshotTitle": "Diese Version wiederherstellen?", +"recoverAppSnapshotContent": "Stelle die aktuelle App auf die Version wieder her, die zum Zeitpunkt {time} erstellt wurde.", +"recoverAppSnapshotMessage": "Diese Version wiederherstellen", +"returnEdit": "Zurück zum Bearbeiten", +"deploy": "Veröffentlichen", +"export": "Exportieren nach JSON", +"editName": "Name bearbeiten", +"duplicate": "{type} Duplizieren", +"snapshot": "Bearbeitungs-Historie", +"scriptsAndStyles": "Skripte und Stil", +"appSettings": "App-Einstellungen", +"preview": "Vorschau", +"editError": "Verlaufsvorschau-Modus, kein Betrieb wird unterstützt.", +"clone": "Klonen", +"editorMode_layout": "Layout", +"editorMode_logic": "Logik", +"editorMode_both": "Beide", +"editorMode_layout_tooltip": "Passen Sie im rechten Fenster das Erscheinungsbild und Layout der Komponente an. Passen Sie Aussehen, Stil und Animationen an.", +"editorMode_logic_tooltip": "Richten Sie im rechten Fenster ein, wie Ihre Komponente funktioniert und interagiert. Verwalten Sie den Inhalt und das interaktive Verhalten.", +"AppEditingBlocked": "App-Bearbeitung blockiert für:", +"AppEditingBlockedHint": "Änderungen werden nicht gespeichert, während ein anderer Benutzer diese App bearbeitet.", +"AppEditingBlockedMessage": "Bitte warten Sie, bevor Sie den Bearbeitungsstatus der App überprüfen.", +"AppEditingBlockedCheckStatus": "App-Status prüfen", +"AppEditingBlockedSomeone": "Jemand", +"AppEditingBlockedMessageSnipped": "bearbeitet diese App", +}, +"userAuth": { + ...en.userAuth, + +"registerByEmail": "Anmelden", +"email": "E-Mail:", +"inputEmail": "Bitte gib deine E-Mail ein", +"inputValidEmail": "Bitte gib eine gültige E-Mail ein", +"forgotPassword": "Passwort vergessen", +"forgotPasswordInfo": "Geben Sie Ihre E-Mail-Adresse ein, und wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts zu.", +"forgotPasswordSuccess": "Bitte überprüfen Sie Ihre E-Mail auf den Link zum Zurücksetzen des Passworts.", +"forgotPasswordError": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", +"register": "Neu Registrieren", +"userLogin": "Anmelden", +"login": "Anmelden", +"bind": "Binde", +"passwordCheckLength": "Mindestens {min} Zeichen", +"passwordCheckContainsNumberAndLetter": "Muss Buchstaben und Ziffern enthalten", +"passwordCheckSpace": "Kann keine Leerzeichen enthalten", +"welcomeTitle": "Willkommen bei {productName}", +"inviteWelcomeTitle": "{username} lädt dich zur Mitarbeit ein", +"terms": "Geschäftsbedingungen", +"privacy": "Datenschutzrichtlinie", +"registerHint": "Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu.", +"chooseAccount": "Wähle dein Konto", +"signInLabel": "Melde dich mit {name} an", +"bindAccount": "Konto zusammenführen", +"scanQrCode": "Scanne den QR-Code mit {name}", +"invalidThirdPartyParam": "Ungültige Drittpartei Param", +"account": "Konto", +"inputAccount": "Bitte gib dein Konto ein", +"ldapLogin": "LDAP-Anmeldung", +"resetPassword": "Passwort zurücksetzen", +"resetPasswordDesc": "Setze das Passwort von Benutzer {name} zurück. Nach dem Zurücksetzen wird ein neues Passwort generiert.", +"resetSuccess": "Zurücksetzen Erfolglos", +"resetSuccessDesc": "Passwort zurücksetzen war erfolgreich. Das neue Passwort lautet: {password}", +"resetLostPasswordSuccess": "Passwort zurücksetzen war erfolgreich. Bitte melden Sie sich erneut an.", +"copyPassword": "Passwort kopieren", +"poweredByLowcoder": "Powered by: Lowcoder.cloud", +"continue": "Weiter", +"enterPassword": "Geben Sie Ihr Passwort ein", +"selectAuthProvider": "Authentifizierungsanbieter auswählen", +"selectWorkspace": "Wählen Sie Ihren Arbeitsbereich", +"userNotFound": "Benutzer nicht gefunden. Bitte stellen Sie sicher, dass Sie die richtige E-Mail-Adresse eingegeben haben.", +}, +"preLoad": { + ...en.preLoad, + +"jsLibraryHelpText": "Füge JavaScript-Bibliotheken über URL-Adressen zu deiner aktuellen Anwendung hinzu. lodash, day.js, uuid, numbro sind zur sofortigen Verwendung in das System integriert. JavaScript-Bibliotheken werden geladen, bevor die Anwendung initialisiert wird, was sich auf die Leistung der Anwendung auswirken kann.", +"exportedAs": "Exportiert als", +"urlTooltip": "URL-Adresse der JavaScript-Bibliothek, [unpkg.com](https://unpkg.com/) oder [jsdelivr.net](https://www.jsdelivr.com/) wird empfohlen", +"externalLibsHelperText": "Es werden nur Bibliotheken unterstützt, die den UMD-Ansatz (Universal Module Definition) verwenden. Lesen Sie hier mehr: https://github.com/umdjs/umd", +"recommended": "Empfohlen", +"viewJSLibraryDocument": "Dokument", +"jsLibraryURLError": "Ungültige URL", +"jsLibraryExist": "JavaScript-Bibliothek existiert bereits", +"jsLibraryEmptyContent": "Keine JavaScript-Bibliotheken hinzugefügt", +"jsLibraryDownloadError": "Fehler beim Herunterladen der JavaScript-Bibliothek", +"jsLibraryInstallSuccess": "Die JavaScript-Bibliothek wurde erfolgreich installiert", +"jsLibraryInstallFailed": "Installation der JavaScript-Bibliothek fehlgeschlagen", +"jsLibraryInstallFailedCloud": "Vielleicht ist die Bibliothek in der Sandbox nicht verfügbar, [Dokumentation](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", +"jsLibraryInstallFailedHost": "{Nachricht}", +"add": "Neu hinzufügen", +"jsHelpText": "Füge eine globale Methode oder Variable zur aktuellen Anwendung hinzu.", +"cssHelpText": "Füge der aktuellen Anwendung Stile hinzu. Die DOM-Struktur kann sich ändern, wenn das System iteriert. Versuche, Stile über Komponenteneigenschaften zu ändern.", +"scriptsAndStyles": "Skripte und Stile", +"jsLibrary": "JavaScript-Bibliothek", +}, +"editorTutorials": { + ...en.editorTutorials, + +"component": "Komponente", +"componentContent": "Die rechte Komponentenleiste bietet dir viele vorgefertigte Anwendungsblöcke (Komponenten). Diese können zur Verwendung auf die Leinwand gezogen werden. Mit ein wenig Programmierkenntnissen kannst du auch deine eigenen Komponenten erstellen.", +"canvas": "Segeltuch", +"canvasContent": "Erstelle deine Apps auf dem Canvas mit dem Ansatz \"What You See Is What You Get\". Ziehe die Komponenten einfach per Drag & Drop, um dein Layout zu gestalten, und verwende Tastenkombinationen zum schnellen Bearbeiten wie Löschen, Kopieren und Einfügen. Sobald du eine Komponente ausgewählt hast, kannst du jedes Detail anpassen - vom Styling und Layout bis hin zur Datenbindung und dem logischen Verhalten. Ein weiterer Vorteil ist das responsive Design, das dafür sorgt, dass deine Apps auf jedem Gerät gut aussehen.", +"queryData": "Daten abfragen", +"queryDataContent": "Du kannst hier Datenabfragen erstellen und dich mit MySQL, MongoDB, Redis, Airtable und vielen anderen Datenquellen verbinden. Nachdem du die Abfrage konfiguriert hast, klickst du auf \\'Run\\', um die Daten abzurufen und das Tutorial fortzusetzen.", +"compProperties": "Komponenten-Eigenschaften", +"interactiveDemo": "Interaktive Demo", +"interactiveDemoToolTip": "Klicken Sie hier, um eine interaktive Demo dieser Funktion zu starten", +}, +"supademos": { + ...en.supademos, + +"transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", +"dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", +"temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", +"dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", +"restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", +"jsQuery": "", +"streamApiQuery": "", +"mongodbQuery": "", +"libraryQuery": "", +"googleSheets": "", +"graphqlQuery": "", +"snowflakeQuery": "", +}, +"homeTutorials": { + ...en.homeTutorials, + +"createAppContent": "🎉 Willkommen! Klicke auf \\'App\\' und beginne, deine erste Anwendung zu erstellen.", +"createAppTitle": "App erstellen", +}, +"npmRegistry": { + ...en.npmRegistry, + +"npmRegistryEnable": "Benutzerdefinierte NPM-Registrierung aktivieren", +"npmRegistryUrl": "NPM-Registrierungsurl", +"npmRegistryUrlRequired": "Bitte geben Sie die Registrierungs-URL ein", +"npmRegistryUrlInvalid": "Bitte geben Sie eine gültige URL ein", +"npmRegistryScope": "Umfang des Pakets", +"npmRegistryPattern": "Muster", +"npmRegistryPatternInvalid": "Bitte geben Sie ein gültiges Muster ein (beginnend mit @ für Organisationen).", +"npmRegistryAuth": "Authentifizierung", +"npmRegistryAuthType": "Art der Authentifizierung", +"npmRegistryAuthCredentials": "Berechtigungsnachweise zur Authentifizierung", +"npmRegistryAuthCredentialsRequired": "Bitte geben Sie die Anmeldedaten für die Registrierung ein", +"npmRegistryAuthCredentialsHelp": "Für die Basisauthentifizierung geben Sie den base64-kodierten Benutzernamen und das Passwort im Format \"base64(Benutzername:Passwort)\" an, für die Tokenauthentifizierung das Token.", +}, +"history": { + ...en.history, + +"layout": "\\'{0}' Layout-Anpassung", +"upgrade": "Upgrade \\'{0}\\'", +"delete": "Löschen \\'{0}\\'", +"add": "Hinzufügen \\'{0}\\'", +"modify": "Ändern \\'{0}\\'", +"rename": "\\'{1}\\' in \\'{0}\\' umbenennen", +"recover": "Wiederherstellen der '2'-Version", +"recoverVersion": "Version wiederherstellen", +"andSoOn": "und so weiter", +"timeFormat": "MM DD um hh:mm A", +"emptyHistory": "Keine Geschichte", +"currentVersionWithBracket": " (Aktuell)", +"currentVersion": "Aktuelle Version", +"justNow": "Gerade jetzt", +"history": "Geschichte", +}, +"home": { + ...en.home, + +"profile": "Profil", +"news": "Nachrichten", +"newsLoading": "Das Laden dauert ein wenig...", +"orgHome": "Homepage (Org)", +"yourOrg": "Ihre Organisation", +"orgHomeTitle": "Organisation Homepage", +"appMarketplace": "Anwendungsmarktplatz", +"allApplications": "Alle Apps", +"allModules": "Alle Module", +"allFolders": "Alle Ordner", +"yourFolders": "Deine Ordner", +"modules": "Module", +"module": "Modul", +"api": "Lowcoder-API", +"trash": "Papierkorb", +"marketplace": "Marktplatz", +"allCategories": "Alle Kategorien", +"queryLibrary": "Abfragebibliothek", +"datasource": "Datenquellen", +"selectDatasourceType": "Datenquellentyp auswählen", +"home": "Startseite | Verwaltungsbereich", +"all": "Alle", +"app": "App", +"navigation": "Navigation", +"navLayout": "PC-Navigation", +"navLayoutDesc": "Menü auf der linken Seite für eine einfache Desktop-Navigation.", +"mobileTabLayout": "Mobile Navigation", +"mobileTabLayoutDesc": "Untere Navigationsleiste für reibungsloses mobiles Surfen.", +"folders": "Ordner", +"folder": "Mappe", +"rootFolder": "Wurzel", +"import": "Importieren", +"export": "Exportieren nach JSON", +"show": "anzeigen", +"inviteUser": "Mitglieder einladen", +"createFolder": "Ordner erstellen", +"createFolderSubTitle": "Name des Ordners:", +"moveToFolder": "In Ordner verschieben", +"moveToTrash": "In den Papierkorb verschieben", +"moveToFolderSubTitle": "Bewege dich zu:", +"folderName": "Name des Ordners:", +"resCardSubTitle": "{time} von {creator}", +"trashEmpty": "Der Papierkorb ist leer.", +"projectEmpty": "Hier ist nichts.", +"projectEmptyCanAdd": "Du hast noch keine Apps. Klicke auf Neu, um loszulegen.", +"name": "Name", +"type": "Typ", +"creator": "Erstellt von", +"lastModified": "Zuletzt geändert", +"deleteTime": "Zeit löschen", +"createTime": "Zeit schaffen", +"datasourceName": "Name der Datenquelle", +"databaseName": "Name der Datenbank", +"nameCheckMessage": "Der Name darf nicht leer sein", +"deleteElementTitle": "Dauerhaft löschen", +"moveToTrashSubTitle": "{type} {name} wird in den Papierkorb verschoben.", +"deleteElementSubTitle": "Lösche {type} {name} dauerhaft, er kann nicht wiederhergestellt werden.", +"deleteSuccessMsg": "Gelöscht erfolgreich", +"deleteErrorMsg": "Gelöschter Fehler", +"recoverSuccessMsg": "Erfolgreich wiederhergestellt", +"newDatasource": "Neue Datenquelle", +"creating": "Erstellen...", +"chooseDataSourceType": "Datenquellentyp auswählen", +"folderAlreadyExists": "Der Ordner existiert bereits", +"newNavLayout": "{userName}'s {name}", +"newApp": "{userName}'s neuer {name} ", +"importError": "Importfehler, {message}", +"exportError": "Exportfehler, {message}", +"importSuccess": "Erfolg importieren", +"fileUploadError": "Datei-Upload-Fehler", +"fileFormatError": "Fehler im Dateiformat", +"groupWithSquareBrackets": "[Gruppe] ", +"allPermissions": "Besitzer", +"appSharingDialogueTitle": "App-Freigabe und Berechtigungen", +"appSocialSharing": "Teilen Sie Ihre App und Erfahrungen auf:", +"appSocialSharingMessage": "Ich habe diese App mit Lowcoder erstellt, schau sie dir an!", +"socialShare": "Weitergeben", +"shareLink": "Link teilen: ", +"copyLink": "Link kopieren", +"appPublicMessage": "App veröffentlichen. Die App wird damit für jeden sichtbar.", +"modulePublicMessage": "Module veröffentlichen. Das Module wird damit für jeden sichtbar.", +"marketplaceURL": "https://api-service.lowcoder.cloud", +"appMarketplaceMessage": "Veröffentlichen Sie Ihre App auf dem öffentlichen Marktplatz. Jeder kann sie dort sehen und kopieren.", +"moduleMarketplaceMessage": "Veröffentlichen Sie Ihr Modul auf dem öffentlichen Marktplatz. Jeder kann es dort sehen und kopieren.", +"marketplaceGoodPublishing": "Bitte stellen Sie sicher, dass Ihre App gut benannt und einfach zu bedienen ist. Entfernen Sie alle sensiblen Informationen vor der Veröffentlichung. Entfernen Sie außerdem lokale Datenquellen und ersetzen Sie sie durch statische, integrierte temporäre Daten.", +"noMarketplaceApps": "Noch sind keine Anwendungen auf dem Marktplatz.", +"errorMarketplaceApps": "Fehler beim Laden von Marketplace Apps", +"localMarketplaceTitle": "Lokaler Marktplatz", +"globalMarketplaceTitle": "Öffentlicher Marktplatz", +"memberPermissionList": "Berechtigungen: ", +"orgName": "{orgName} admins", +"addMember": "Mitglieder hinzufügen", +"addPermissionPlaceholder": "Bitte gib einen Namen ein, um Mitglieder zu suchen", +"searchMemberOrGroup": "Suche nach Mitgliedern oder Gruppen: ", +"addPermissionErrorMessage": "Berechtigung kann nicht hinzugefügt werden, {message}", +"copyModalTitle": "Klonen", +"copyNameLabel": "{type} Name", +"copyModalfolderLabel": "Zum Ordner hinzufügen", +"copyNamePlaceholder": "Bitte gib einen {type} Namen ein", +"chooseNavType": "Bitte wähle die Art der Navigation", +"createNavigation": "Navigation erstellen", +"howToUseAPI": "Verwendung der Open Rest API", +"support": "Unterstützung", +}, +"support": { + ...en.support, + +"selfUser": "Sie", +"supportTitle": "Lowcoder-Support", +"supportContent": "Wenn Sie Fragen haben oder Hilfe benötigen, nutzen Sie bitte das Ticketsystem, um Ihr Problem schnell zu lösen.", +"newSupportTicket": "Neues Support-Ticket", +"ticketTitle": "Titel", +"priority": "Priorität", +"assignee": "Zuständiger", +"status": "Ticketstatus", +"updatedTime": "Aktualisierte Zeit", +"active": "Aktiv", +"inactive": "Inaktiv", +"noEmail": "Keine E-Mail", +"details": "Einzelheiten", +"reloadTickets": "Tickets neu laden", +"createdDate": "Erstellungsdatum", +"updatedDate": "Aktualisierungsdatum", +"description": "Problembeschreibung", +"subtasks": "Unteraufgaben", +"subtasksProgress": "Fortschritt aller Unteraufgaben", +"attachments": "Anhänge", +"comments": "Kommentare", +"addComment": "Kommentar hinzufügen", +"addAttachment": "Anhang hinzufügen", +"edit": "Ticketbeschreibung bearbeiten", +"save": "Ticketbeschreibung speichern", +"cancel": "Abbrechen", +"submitComment": "Kommentar absenden", +"upload": "Anhang hochladen", +"selectFile": "Datei auswählen", +"ticketDescriptionUpdated": "Ticketbeschreibung erfolgreich aktualisiert!", +"ticketDescriptionUpdateFailed": "Ticketbeschreibung konnte nicht aktualisiert werden.", +"writeComment": "Einen Kommentar schreiben...", +"ticketCommentAdded": "Kommentar erfolgreich hinzugefügt!", +"ticketCommentFailed": "Kommentar konnte nicht hinzugefügt werden.", +"ticketCommentEmpty": "Bitte schreiben Sie einen Kommentar, bevor Sie ihn absenden.", +"ticketAttachmentUploaded": "Anhang erfolgreich hochgeladen!", +"ticketAttachmentFailed": "Anhang konnte nicht hochgeladen werden.", +"ticketAttachmentEmpty": "Bitte wählen Sie eine Datei zum Hochladen aus.", +"ticketFetchError": "Ticket konnte nicht geladen werden.", +"ticketNotFound": "Ticket nicht gefunden.", +"addAttachmentFileSize": "Datei muss kleiner als 5 MB sein!", +"goBack": "Zurück", +"noDescription": "Keine Beschreibung verfügbar.", +"createTicket": "Neues Support-Ticket erstellen", +"createTicketTitlePlaceholder": "Titel eingeben (max. 150 Zeichen)", +"createTicketDescriptionTitle": "Beschreiben Sie Ihr Problem - je mehr Details, desto besser:", +"createTicketDescriptionPlaceholder": "Beschreiben Sie das Problem im Detail, einschließlich: 1) Schritte zur Reproduktion des Problems, 2) Erwartetes Verhalten im Vergleich zum tatsächlichen Verhalten, 3) Code-Snippets, falls zutreffend, 4) Betroffene Komponenten, APIs oder Konfigurationen", +"createTicketSubmit": "Ticket absenden", +"createTicketInfoText": "Wenn Ihr Ticket erstellt wurde, können Sie im Abschnitt 'Details' Screenshots und Kommentare hinzufügen.", +}, +"carousel": { + ...en.carousel, + +"dotPosition": "Position der Navigationspunkte", +"autoPlay": "AutoPlay", +"showDots": "Navigationspunkte anzeigen", +}, +"npm": { + ...en.npm, + +"invalidNpmPackageName": "Ungültiger npm-Paketname oder URL.", +"pluginExisted": "Dieses npm Plugin existierte bereits", +"compNotFound": "Komponente {compName} nicht gefunden.", +"addPluginModalTitle": "Plugin aus einem npm-Repository hinzufügen", +"pluginNameLabel": "URL oder Name des npm-Pakets", +"noCompText": "Keine Komponenten.", +"compsLoading": "Laden...", +"removePluginBtnText": "entfernen", +"addPluginBtnText": "npm-Plugin hinzufügen", +}, +"toggleButton": { + ...en.toggleButton, + +"valueDesc": "Der Standardwert des Toggle-Buttons, zum Beispiel: Falsch", +"trueDefaultText": "Verstecken", +"falseDefaultText": "anzeigen", +"trueLabel": "Text für Wahr", +"falseLabel": "Text für Falsch", +"trueIconLabel": "Icon für Wahr", +"falseIconLabel": "Icon für Falsch", +"iconPosition": "Icon Position", +"showText": "Text anzeigen", +"alignment": "Ausrichtung", +"showBorder": "Grenze anzeigen", +}, +"componentDoc": { + ...en.componentDoc, + +"markdownDemoText": "**Lowcoder** | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", +"demoText": "Lowcoder | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", +"submit": "einreichen", +"style": "Stil", +"danger": "Gefahr", +"warning": "Warnung", +"success": "Erfolg", +"menu": "Menü", +"link": "Link zu", +"customAppearance": "Benutzerdefiniertes Erscheinungsbild", +"search": "Suche", +"pleaseInputNumber": "Bitte eine Nummer eingeben", +"mostValue": "Größter Wert", +"maxRating": "Maximale Bewertung", +"notSelect": "Nicht ausgewählt", +"halfSelect": "Halbe Auswahl", +"pleaseSelect": "Bitte wählen", +"title": "Titel", +"content": "Inhalt", +"componentNotFound": "Komponente ist nicht vorhanden", +"example": "Beispiele", +"defaultMethodDesc": "Den Wert der Eigenschaft {name} festlegen", +"propertyUsage": "Du kannst komponentenbezogene Informationen lesen, indem du über den Komponentennamen auf die Komponenteneigenschaften zugreifst, wo immer du JavaScript schreiben kannst.", +"property": "Eigenschaften", +"propertyName": "Eigenschaft Name", +"propertyType": "Typ", +"propertyDesc": "Beschreibung", +"event": "Veranstaltungen", +"eventName": "Name der Veranstaltung", +"eventDesc": "Beschreibung", +"mehtod": "Methoden", +"methodUsage": "Du kannst mit Komponenten über ihre Methoden interagieren und sie überall dort, wo du JavaScript schreiben kannst, mit ihrem Namen aufrufen. Oder du kannst sie über die Aktion \"Komponente\" eines Ereignisses aufrufen.", +"methodName": "Methode Name", +"methodDesc": "Beschreibung", +"showBorder": "Grenze anzeigen", +"haveTry": "Versuch es selbst", +"settings": "Einstellung", +"settingValues": "Einstellung Wert", +"defaultValue": "Standardwert", +"time": "Zeit", +"date": "Datum", +"noValue": "Keine", +"xAxisType": "X-Achse Typ", +"hAlignType": "Horizontale Ausrichtung", +"leftLeftAlign": "Links-Links-Ausrichtung", +"leftRightAlign": "Links-Rechts-Ausrichtung", +"topLeftAlign": "Ausrichtung von oben nach links", +"topRightAlign": "Ausrichtung oben-rechts", +"validation": "Validierung", +"required": "Erforderlich", +"defaultStartDateValue": "Standard Startdatum", +"defaultEndDateValue": "Standard-Enddatum", +"basicUsage": "Grundlegende Verwendung", +"basicDemoDescription": "Die folgenden Beispiele zeigen die grundlegende Verwendung der Komponente.", +"noDefaultValue": "Kein Standardwert", +"forbid": "Verboten", +"placeholder": "Platzhalter", +"pleaseInputPassword": "Bitte gib ein Passwort ein", +"password": "Passwort", +"textAlign": "Textausrichtung", +"length": "Länge", +"top": "Top", +"pleaseInputName": "Bitte gib deinen Namen ein", +"userName": "Name", +"fixed": "Festgelegt", +"responsive": "Ansprechbar", +"workCount": "Wortzahl", +"cascaderOptions": "Kaskadenoptionen", +"pleaseSelectCity": "Bitte wähle eine Stadt", +"advanced": "Fortgeschrittene", +"showClearIcon": "Löschen-Symbol anzeigen", +"appleOptionLabel": "Apfel", +"waterMelonOptionLabel": "Wassermelone", +"berryOptionLabel": "Erdbeere", +"lemonOptionLabel": "Zitrone", +"coconutOptionLabel": "Kokosnuss", +"likedFruits": "Favoriten", +"option": "Option", +"singleFileUpload": "Einzelner Datei-Upload", +"multiFileUpload": "Mehrere Dateien hochladen", +"folderUpload": "Ordner hochladen", +"multiFile": "Mehrere Dateien", +"folder": "Mappe", +"open": "Öffnen Sie", +"favoriteFruits": "Lieblingsfrüchte", +"pleaseSelectOneFruit": "Wähle eine Frucht", +"notComplete": "Nicht vollständig", +"complete": "Vollständig", +"echart": "EChart", +"lineChart": "Liniendiagramm", +"basicLineChart": "Grundlegendes Liniendiagramm", +"lineChartType": "Liniendiagramm Typ", +"stackLineChart": "Gestapelte Linie", +"areaLineChart": "Bereich Linie", +"scatterChart": "Punktediagramm", +"scatterShape": "Streuung Form", +"scatterShapeCircle": "Kreis", +"scatterShapeRect": "Rechteck", +"scatterShapeTri": "Dreieck", +"scatterShapeDiamond": "Diamant", +"scatterShapePin": "Stecknadel", +"scatterShapeArrow": "Pfeil", +"pieChart": "Kreisdiagramm", +"basicPieChart": "Grundlegendes Kreisdiagramm", +"pieChatType": "Kreisdiagramm Typ", +"pieChartTypeCircle": "Donut-Tabelle", +"pieChartTypeRose": "Rosenkarte", +"titleAlign": "Titel Position", +"color": "Farbe", +"dashed": "Gestrichelt", +"imADivider": "Ich bin eine Trennungslinie", +"tableSize": "Tabelle Größe", +"subMenuItem": "UnterMenü {num}", +"menuItem": "Menü {num}", +"labelText": "Etikett", +"labelPosition": "Etikett - Position", +"labelAlign": "Etikett - Ausrichten", +"optionsOptionType": "Konfiguration Methode", +"styleBackgroundColor": "Hintergrundfarbe", +"styleBorderColor": "Farbe der Umrandung", +"styleColor": "Schriftfarbe", +"selectionMode": "Zeilenauswahl-Modus", +"paginationSetting": "Paginierung Einstellung", +"paginationShowSizeChanger": "Unterstützung der Benutzer bei der Änderung der Anzahl von Einträgen pro Seite", +"paginationShowSizeChangerButton": "Schaltfläche Größenänderer anzeigen", +"paginationShowQuickJumper": "Quick Jumper anzeigen", +"paginationHideOnSinglePage": "Verstecken, wenn es nur eine Seite gibt", +"paginationPageSizeOptions": "Seitengröße", +"chartConfigCompType": "Chart-Typ", +"xConfigType": "X-Achse Typ", +"loading": "Laden", +"disabled": "Deaktiviert", +"minLength": "Mindestlänge", +"maxLength": "Maximale Länge", +"showCount": "Wortzahl anzeigen", +"autoHeight": "Höhe", +"thousandsSeparator": "Tausendertrennzeichen", +"precision": "Nachkommastellen", +"value": "Standardwert", +"formatter": "Format", +"min": "Mindestwert", +"max": "Maximaler Wert", +"step": "Schrittweite", +"start": "Startzeit", +"end": "Endzeit", +"allowHalf": "Halbe Auswahl zulassen", +"filetype": "Dateityp", +"showUploadList": "Upload-Liste anzeigen", +"uploadType": "Upload Typ", +"allowClear": "Löschen-Symbol anzeigen", +"minSize": "Minimale Dateigröße", +"maxSize": "Maximale Dateigröße", +"maxFiles": "Maximale Anzahl von hochgeladenen Dateien", +"format": "Format", +"minDate": "Minimum Datum", +"maxDate": "Maximales Datum", +"minTime": "Mindestzeit", +"maxTime": "Maximale Zeit", +"text": "Text", +"type": "Typ", +"hideHeader": "Kopfzeile ausblenden", +"hideBordered": "Grenze ausblenden", +"src": "Bild-URL", +"showInfo": "Wert anzeigen", +"mode": "Modus", +"onlyMenu": "Nur Menü", +"horizontalAlignment": "Horizontale Ausrichtung", +"row": "Links", +"column": "Top", +"leftAlign": "Linke Ausrichtung", +"rightAlign": "Rechts ausrichten", +"percent": "Prozentsatz", +"fixedHeight": "Feste Höhe", +"auto": "Anpassungsfähig", +"directory": "Mappe", +"multiple": "Mehrere Dateien", +"singleFile": "Einzelne Datei", +"manual": "Handbuch", +"default": "Standard", +"small": "Klein", +"middle": "Mittel", +"large": "Groß", +"single": "Einzeln", +"multi": "Mehrere", +"close": "Schließen", +"ui": "UI-Modus", +"line": "Liniendiagramm", +"scatter": "Punktwolke", +"pie": "Kreisdiagramm", +"basicLine": "Grundlegendes Liniendiagramm", +"stackedLine": "Gestapeltes Liniendiagramm", +"areaLine": "Gebiet Gebietskarte", +"basicPie": "Grundlegendes Kreisdiagramm", +"doughnutPie": "Donut-Tabelle", +"rosePie": "Rosenkarte", +"category": "Kategorie Achse", +"circle": "Kreis", +"rect": "Rechteck", +"triangle": "Dreieck", +"diamond": "Diamant", +"pin": "Stecknadel", +"arrow": "Pfeil", +"left": "Links", +"right": "Rechts", +"center": "Zentrum", +"bottom": "Unten", +"justify": "Beide Enden rechtfertigen", +}, +"playground": { + ...en.playground, + +"url": "https://app.lowcoder.cloud/playground/{compType}/1", +"data": "Aktueller Datenstand", +"preview": "Vorschau", +"property": "Eigenschaften", +"console": "Visual Script-Konsole", +"executeMethods": "Ausführen von Methoden", +"noMethods": "Keine Methoden.", +"methodParams": "Parameter der Methode", +"methodParamsHelp": "Parameter der Eingabemethode mit JSON. Zum Beispiel kannst du die Parameter von setValue\\ wie folgt festlegen: [1] oder 1", +}, +"calendar": { + ...en.calendar, + +"headerBtnBackground": "Schaltfläche Hintergrund", +"btnText": "Schaltfläche Text", +"title": "Titel", +"selectBackground": "Ausgewählter Hintergrund", +}, +"idSource": { + ...en.idSource, + +"title": "OAuth-Anbieter", +"form": "E-Mail", +"pay": "Prämie", +"enable": "Aktiviere", +"unEnable": "Nicht aktiviert", +"loginType": "Anmeldung Typ", +"status": "Status", +"desc": "Beschreibung", +"manual": "Adressbuch:", +"syncManual": "Adressbuch synchronisieren", +"syncManualSuccess": "Sync Erfolgreich", +"enableRegister": "Registrierung zulassen", +"saveBtn": "Speichern und Aktivieren", +"save": "Speichern", +"none": "Keine", +"formPlaceholder": "Bitte {label} eingeben", +"formSelectPlaceholder": "Bitte wähle das {label}", +"saveSuccess": "Erfolgreich gespeichert", +"dangerLabel": "Gefahrenzone", +"dangerTip": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Gehe mit Vorsicht vor.", +"lastEnabledConfig": "Sie können die Konfiguration nicht deaktivieren/löschen, da dies die einzige aktivierte Konfiguration ist.", +"disable": "Deaktivieren", +"disableSuccess": "Erfolgreich deaktiviert", +"encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", +"disableTip": "Tipps", +"disableContent": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Bist du sicher, dass du fortfahren kannst?", +"manualTip": "", +"lockTip": "Der Inhalt ist gesperrt. Um Änderungen vorzunehmen, klicke bitte auf das {icon}, um die Sperre aufzuheben.", +"lockModalContent": "Die Änderung des Feldes \"ID-Attribut\" kann erhebliche Auswirkungen auf die Benutzeridentifizierung haben. Bitte vergewissere dich, dass du die Auswirkungen dieser Änderung verstehst, bevor du fortfährst.", +"payUserTag": "Prämie", +"source": "Quelle", +"sourceName": "Auth Provider Name", +"sourceDescription": "Auth Provider Beschreibung", +"sourceIcon": "Auth-Provider-Symbol", +"sourceCategory": "Auth Provider Kategorie", +"souceIssuerURI": "Auth Provider Issuer URI", +"souceAuthorizationEndpoint": "Auth Provider Autorisierungsendpunkt", +"souceTokenEndpoint": "Auth Provider Token Endpunkt", +"souceUserInfoEndpoint": "Auth Provider Benutzerinfo Endpunkt", +"userInfoIntrospection": "OpenID-Benutzer-Introspektion verwenden", +"userCanSelectAccounts": "Benutzer kann aus Konten auswählen", +"sourceCategoryEnterprise": "Unternehmensidentität", +"sourceCategoryCloud": "Cloud-Dienste", +"sourceCategorySocial": "Soziale Medien", +"sourceCategoryDevelopment": "Entwicklung", +"sourceCategoryTools": "Tools & Produktivität", +}, +"slotControl": { + ...en.slotControl, + +"configSlotView": "Slot-Ansicht konfigurieren", +}, +"jsonLottie": { + ...en.jsonLottie, + +"lottieJson": "Lottie JSON", +"searchAnimation": "Suche Animation", +"speed": "Geschwindigkeit", +"width": "Breite", +"height": "Höhe", +"backgroundColor": "Hintergrundfarbe", +"animationStart": "Animation Start", +"valueDesc": "Aktuelle JSON-Daten", +"loop": "Schleife", +"auto": "Auto", +"onHover": "Beim Schweben", +"onTrigger": "Bei Auslösung", +"singlePlay": "Einzelspiel", +"endlessLoop": "Endlosschleife", +"keepLastFrame": "Letzten Frame anzeigen lassen", +"fit": "Fit", +"align": "Ausrichten", +"load": "Unter Last", +"play": "Im Spiel", +"pause": "Auf Pause", +"stop": "On Stop", +"complete": "Vollständig", +}, +"timeLine": { + ...en.timeLine, + +"titleColor": "Titel Farbe", +"subTitleColor": "Untertitel Farbe", +"labelColor": "Etikett Farbe", +"value": "Zeitleiste Daten", +"mode": "Bestellung anzeigen", +"left": "Inhalt Rechts", +"right": "Inhalt Links", +"alternate": "Alternative Reihenfolge der Inhalte", +"modeTooltip": "Einstellen, dass der Inhalt links/rechts oder abwechselnd auf beiden Seiten der Zeitleiste angezeigt wird", +"reverse": "Neueste Ereignisse zuerst", +"pending": "Ausstehender Knotenpunkt Text", +"pendingDescription": "Wenn diese Option aktiviert ist, wird ein letzter Knoten mit dem Text und einer Warteanzeige angezeigt.", +"defaultPending": "Kontinuierliche Verbesserung", +"clickTitleEvent": "Klick Titel Ereignis", +"clickTitleEventDesc": "Klick Titel Ereignis", +"Introduction": "Einführung Tasten", +"helpTitle": "Titel der Zeitleiste (erforderlich)", +"helpsubTitle": "Untertitel der Zeitleiste", +"helpLabel": "Beschriftung der Zeitleiste, die zur Anzeige von Daten verwendet wird", +"helpColor": "Zeigt die Farbe des Zeitachsenknotens an", +"helpDot": "Timeline-Knoten als Ameisendesign-Symbole rendern", +"helpTitleColor": "Individuell die Farbe des Knotentitels steuern", +"helpSubTitleColor": "Individuelle Steuerung der Farbe der Knotenuntertitel", +"helpLabelColor": "Individuelle Steuerung der Farbe des Knotensymbols", +"valueDesc": "Daten der Zeitleiste", +"clickedObjectDesc": "Daten zum angeklickten Objekt", +"clickedIndexDesc": "Index der angeklickten Objekte", +}, +"comment": { + ...en.comment, + +"value": "Daten der Kommentarliste", +"showSendButton": "Kommentare zulassen", +"title": "Titel", +"titledDefaultValue": "%d Kommentar in Summe", +"placeholder": "Shift + Enter zum Kommentieren; @ oder # für Schnelleingabe eingeben", +"placeholderDec": "Platzhalter", +"buttonTextDec": "Schaltfläche Titel", +"buttonText": "Kommentar", +"mentionList": "Daten der Erwähnungsliste", +"mentionListDec": "Key-Mention Keywords; Value-Mention Listendaten", +"userInfo": "Benutzerinfo", +"dateErr": "Datum Fehler", +"commentList": "Kommentar Liste", +"deletedItem": "Gelöschter Artikel", +"submitedItem": "Eingereichter Artikel", +"deleteAble": "Schaltfläche \"Löschen\" anzeigen", +"Introduction": "Einführung Tasten", +"helpUser": "Benutzerinformationen (erforderlich)", +"helpname": "Nutzername (erforderlich)", +"helpavatar": "Avatar URL (Hohe Priorität)", +"helpdisplayName": "Name anzeigen (niedrige Priorität)", +"helpvalue": "Kommentar Inhalt", +"helpcreatedAt": "Datum erstellen", +}, +"mention": { + ...en.mention, + +"mentionList": "Daten der Erwähnungsliste", +}, +"autoComplete": { + ...en.autoComplete, + +"value": "Auto Komplett Wert", +"checkedValueFrom": "Geprüfter Wert von", +"ignoreCase": "Suche ignorieren Fall", +"searchLabelOnly": "Nur Label suchen", +"searchFirstPY": "Erste Pinyin-Suche", +"searchCompletePY": "Vollständiges Pinyin suchen", +"searchText": "Text suchen", +"SectionDataName": "AutoVervollständigen Daten", +"valueInItems": "Wert in Positionen", +"type": "Typ", +"antDesign": "AntDesign", +"normal": "Normal", +"selectKey": "Schlüssel", +"selectLable": "Etikett", +"ComponentType": "Komponente Typ", +"colorIcon": "Blau", +"grewIcon": "Grau", +"noneIcon": "Keine", +"small": "Klein", +"large": "Groß", +"componentSize": "Komponente Größe", +"Introduction": "Einführung Tasten", +"helpLabel": "Etikett", +"helpValue": "Wert", +}, +"responsiveLayout": { + ...en.responsiveLayout, + +"column": "Rubriken", +"addColumn": "Spalte hinzufügen", +"columnDefinition": "Definition einer Spalte", +"rowDefinition": "Zeile Definition", +"columnGap": "Lücke in der Spalte", +"rowGap": "Zeile Lücke", +"atLeastOneColumnError": "Responsive Layout behält mindestens eine Spalte bei", +"columnsPerRow": "Spalten pro Zeile", +"columnsSpacing": "Abstand zwischen den Spalten (px)", +"horizontal": "Horizontal", +"vertical": "Vertikal", +"mobile": "Mobil", +"tablet": "Tablette", +"desktop": "Desktop", +"rowStyle": "Reihe Stil", +"columnStyle": "Säulenstil", +"minWidth": "Min. Breite", +"rowBreak": "Reihenpause", +"useComponentWidth": "Eigene Größe verwenden", +"useComponentWidthDesc": "Verwende die Containerbreite anstelle der App-Breite", +"matchColumnsHeight": "Höhe der Säulen anpassen", +"rowLayout": "Zeilenlayout", +"columnsLayout": "Spalten Layout", +"columnsDefinitionTooltip": "Spalten können auf der Grundlage der CSS-Spalteneigenschaften frei definiert werden. Mit \"auto auto\" werden zum Beispiel zwei Spalten mit gleicher Breite erstellt. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-columns", +"rowsDefinitionTooltip": "Die Zeilen können auf der Grundlage der CSS-Eigenschaften für Zeilen frei definiert werden. Zum Beispiel erzeugt 'auto auto' zwei Zeilen mit gleicher Höhe. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-rows", +}, +"splitLayout": { + ...en.splitLayout, + +"column": "Bereiche anzeigen", +"addColumn": "Bereiche hinzufügen", +"columnDefinition": "Bereich Definition", +"atLeastOneColumnError": "Responsives Layout behält mindestens eine Spalte bei", +"horizontal": "Horizontal", +"vertical": "Vertikal", +"areaStyle": "Säule Stil", +"minWidth": "Min. Breite", +"maxWidth": "Max. Breite", +"width": "Breite", +"collapsible": "Ist der Bereich zusammenklappbar?", +"matchColumnsHeight": "Spielbereiche Höhe", +"orientation": "Ausrichtung des geteilten Layouts", +"orientationTooltip": "Die visuelle Reihenfolge, in der die Bereiche ausgerichtet sind. Sie können Splitlayout-Komponenten auch innerhalb von Splitlayout-Komponenten anordnen, um komplexe Layouts zu erstellen.", +}, +"navLayout": { + ...en.navLayout, + +"mode": "Modus", +"modeInline": "Inline", +"modeVertical": "Vertikal", +"modeHorizontal": "Horizontal", +"width": "Breite", +"widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", +"navStyle": "Menü-Stil", +"navItemStyle": "Menüpunkt Stil", +"navBackground": "Hintergrundbild", +"mobileNavVerticalOrientation": "Vertikale Ausrichtung", +"mobileNavVerticalMaxWidth": "Maximale Breite", +"mobileNavBarHeight": "Höhe der Navigationsleiste", +"mobileNavVerticalShowSeparator": "Trennzeichen anzeigen", +"mobileNavIconSize": "Icon Größe", +}, +"timeZone": { + ...en.timeZone, + +"UTC-12:00": "(UTC-12:00) Int'l Date Line W", +"UTC-11:00": "(UTC-11:00) UTC-11", +"UTC-10:00": "(UTC-10:00) Hawaii", +"UTC-09:00": "(UTC-09:00) Alaska", +"UTC-08:00": "(UTC-08:00) Baja CA", +"UTC-07:00": "(UTC-07:00) Pazifische Zeit (US)", +"UTC-06:00": "(UTC-06:00) Zentrale Zeit (US)", +"UTC-05:00": "(UTC-05:00) Östliche Zeit (US)", +"UTC-04:00": "(UTC-04:00) Atlantische Zeit", +"UTC-03:00": "(UTC-03:00) Buenos Aires", +"UTC-02:00": "(UTC-02:00) UTC-02", +"UTC-01:00": "(UTC-01:00) Kap Verde", +"UTC+00:00": "(UTC 00:00) UTC", +"UTC+01:00": "(UTC+01:00) Berlin, Rom", +"UTC+02:00": "(UTC+02:00) Athen, Bukarest", +"UTC+03:00": "(UTC+03:00) Moskau", +"UTC+04:00": "(UTC+04:00) Dubai, Muscat", +"UTC+05:00": "(UTC+05:00) Karatschi", +"UTC+05:30": "(UTC+05:30) Neu Delhi", +"UTC+05:45": "(UTC+05:45) Kathmandu", +"UTC+06:00": "(UTC+06:00) Dhaka", +"UTC+06:30": "(UTC+06:30) Yangon", +"UTC+07:00": "(UTC+07:00) Bangkok", +"UTC+08:00": "(UTC+08:00) Peking, HK", +"UTC+09:00": "(UTC+09:00) Tokio, Seoul", +"UTC+09:30": "(UTC+09:30) Adelaide, Darwin", +"UTC+10:00": "(UTC+10:00) Sydney", +"UTC+11:00": "(UTC+11:00) Salomonen, Neukaledonien", +"UTC+12:00": "(UTC+12:00) Auckland, Fidschi", +"UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", +"UserChoice": "UserChoice", +}, +"tour": { + ...en.tour, + +"section1Title": "Schritte", +"section1Subtitle": "Schritte", +"tooltipExampleHeader": "Beispiel:", +"tooltipSignatureHeader": "Unterschrift:", +"options": { + ...en.tour.options, + +"title": { + ...en.tour.options.title, + +"label": "Titel", +"placeholder": "Willkommen", +"tooltip": "Der Titel des Schrittes. Jeder HTML-Code ist hier gültig.", +}, +"description": { + ...en.tour.options.description, + +"label": "Beschreibung", +"placeholder": "Willkommen bei lowcoder!", +"tooltip": "Die Beschreibung des Schrittes. Jeder HTML-Code ist hier gültig.", +}, +"mask": { + ...en.tour.options.mask, + +"label": "Maske", +"tooltip": "Ob die Maskierung zu aktivieren, ändern Sie die Maske Stil und Farbe füllen, indem Sie benutzerdefinierte Requisiten, die Standardeinstellung folgt der `Maske` Eigenschaft von Tour.", +"tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", +}, +"arrow": { + ...en.tour.options.arrow, + +"label": "Pfeil", +"tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht; andernfalls zeigt der Pfeil immer in die Nähe der Oberseite der Komponente.", +"tooltipFunctionSignature": "boolesch | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.options.type, + +"label": "Typ", +"tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt zur Gestaltung der Haupttour gesteuert werden.", +}, +"target": { + ...en.tour.options.target, + +"label": "Komponente", +"tooltip": "Die Komponente, auf die Sie den Tooltip setzen wollen, oder lassen Sie es leer, wenn Sie einfach ein Modal in der Mitte des Bildschirms haben wollen.", +}, +"coverImage": { + ...en.tour.options.coverImage, + +"label": "Cover Image URI", +"tooltip": "Ein URI für ein Bild, das Sie mit dem Schritt anzeigen möchten", +}, +}, +"indicatorsRender": { + ...en.tour.indicatorsRender, + +"label": "Indikatoren rendern", +"tooltip": "Bietet einen benutzerdefinierten Indikator dafür, in welchem Schritt Sie sich befinden", +"tooltipValidTypes": "Format ist eine Funktion, die zwei Argumente akzeptiert, `current` und `total` und einen ReactNode zurückgibt", +"tooltipFunctionSignatureHeader": "Unterschrift:", +"tooltipFunctionSignature": "(aktuell: Zahl, gesamt: Zahl) => ReactNode", +"tooltipExampleHeader": "Beispiel:", +}, +"disabledInteraction": { + ...en.tour.disabledInteraction, + +"label": "Interaktion deaktivieren", +"tooltip": "Deaktivieren Sie die Interaktion in dem markierten Bereich.", +}, +"mask": { + ...en.tour.mask, + +"label": "Maske", +"tooltip": "Aktivieren der Maskierung, Ändern des Maskenstils und der Füllfarbe durch Übergabe von benutzerdefinierten Requisiten, die Vorgabe folgt der Eigenschaft `Maske` von Tour. Kann auf der Ebene der Stufe überschrieben werden.", +"tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", +}, +"placement": { + ...en.tour.placement, + +"label": "Platzierung", +"tooltip": "Position der Leitkarte in Bezug auf das Zielelement. Kann auf Schrittebene überschrieben werden.", +"tooltipValidOptions": "Gültige Optionen", +"tooltipValidOptionsAbove": "Oberhalb des Bauteils:", +"tooltipValidOptionsLeft": "Links neben der Komponente:", +"tooltipValidOptionsRight": "Rechts neben der Komponente:", +"tooltipValidOptionsBelow": "Unterhalb des Bauteils:", +"tooltipValidOptionsOnTop": "Oben auf der Komponente:", +}, +"arrow": { + ...en.tour.arrow, + +"label": "Pfeil", +"tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht, andernfalls zeigt der Pfeil immer in die Nähe des oberen Teils der Komponente. Kann auf der Schrittebene außer Kraft gesetzt werden.", +"tooltipFunctionSignature": "boolesch | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.type, + +"label": "Typ", +"tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt \"Styling der Haupttour\" gesteuert werden. Kann auf Schritt-Ebene überschrieben werden.", +}, +}, +"docUrls": { + ...en.docUrls, + +"docHome": "https://docs.lowcoder.cloud/", +"apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", +"components": "https://app.lowcoder.cloud/components/{compType}", +"module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", +"optionList": "", +"terms": "https://lowcoder.cloud/terms", +"privacy": "https://lowcoder.cloud/privacy", +"aboutUs": "https://lowcoder.cloud/about", +"changeLog": "https://github.com/lowcoder-org/lowcoder/releases", +"introVideo": "", +"devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", +"devNpmPluginText": "Wie man ein npm-Plugin entwickelt", +"useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", +"eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", +"thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", +"thirdLibUrlText": "Bibliotheken von Drittanbietern verwenden", +}, +"datasourceTutorial": { + ...en.datasourceTutorial, + +"mysql": "", +"mongodb": "", +"postgres": "", +"redis": "", +"es": "", +"smtp": "", +"clickHouse": "", +}, +"queryTutorial": { + ...en.queryTutorial, + +"js": "", +"transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", +"tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", +"dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", +}, +"customComponent": { + ...en.customComponent, + +"entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", +}, +"template": { + ...en.template, + +"cloneUrl": "/apps/vorlage-import/", +}, +"lowcoderUrl": { + ...en.lowcoderUrl, + +"createIssue": "https://github.com/lowcoder-org/lowcoder/issues", +"discord": "https://discord.com/invite/qMG9uTmAx2", +}, +"iconScout": { + ...en.iconScout, + +"searchImage": "Bild suchen", +"searchAnimation": "Suche Animation", +"searchIcon": "Suchsymbol", +"noResults": "Keine Ergebnisse gefunden.", +"buySubscriptionTitle": "Premium-Assets freischalten", +"buySubscriptionContent": "Dieses Asset ist exklusiv für Media-Package-Abonnenten. Abonnieren Sie das Medienpaket und laden Sie unbegrenzt hochwertige Assets herunter!", +"buySubscriptionButton": "Jetzt abonnieren", +}, }; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/en.ts b/client/packages/lowcoder/src/i18n/locales/en.ts index 735b797d4e..a88b9debdd 100644 --- a/client/packages/lowcoder/src/i18n/locales/en.ts +++ b/client/packages/lowcoder/src/i18n/locales/en.ts @@ -176,6 +176,7 @@ export const en = { "width": "Width", "selectApp": "Select App", "showCount": "Show Count", + "tabIndex": "Tab Index", "textType": "Text Type", "customRule": "Custom Rule", "customRuleTooltip": "Non-empty string indicates an error; empty or null means validation passed. Example: ", @@ -463,6 +464,8 @@ export const en = { "resetDesc": "Triggers on Reset timer", "refresh": "Refresh", "refreshDesc": "Triggers on Refresh", + "sortChange": "Sort Change", + "sortChangeDesc": "Triggers on Sorting Changes", }, @@ -739,7 +742,11 @@ export const en = { "chooseDatabase": "Choose Database", "lowcoderAPI": "Lowcoder API", "executeJSCode": "Run JavaScript Code", - "importFromQueryLibrary": "Import from Query Library", + "importFromQueryLibrary": "Prepared Data Query", + "preparedDataQueries" : "Your prepared Data Queries", + "adHocDataQueries" : "Qick Data Queries (without prepared Query or Data Source)", + "queryResultTransformer" : "Manipulate a Query Response to transform Data before binding", + "queryResultReactor" : "React to any change of a dynamic Data value", "importFromFile": "Import from File", "triggerType": "Triggered when...", "triggerTypeAuto": "When Inputs Change or after Application (Page) loads", @@ -2270,6 +2277,9 @@ export const en = { }, "iconControl": { "selectIcon": "Select an Icon", + "searchIcon" : "Search an Icon", + "searchAnimation" : "Search an Animation", + "searchIllustration" : "Search an Illustration", "insertIcon": "Insert an Icon", "insertImage": "Insert an Image or " }, @@ -2387,9 +2397,527 @@ export const en = { "appUsage": "App Usage Logs", "environments": "Environments", "premium": "Premium", - "AppUsage": "Global App Usage", }, + "enterprise" : { + "AuditLogTitle": "Audit Log Dasboard", + "AuditLogOverview": "Log Filter", + "USER_LOGIN" : "User Login ", + "USER_LOGOUT" : "User Logout ", + "APPLICATION_VIEW" : "View Application ", + "APPLICATION_CREATE" : "Create Application ", + "APPLICATION_DELETE" : "Delete Application ", + "APPLICATION_UPDATE" : "Update Application ", + "APPLICATION_MOVE" : "Move Application ", + "APPLICATION_RECYCLED" : "Recycle Application ", + "APPLICATION_RESTORE" : "Restore Application ", + "APPLICATION_PUBLISH" : "Application Publishing ", + "APPLICATION_VERSION_CHANGE" : "Application Version Update ", + "APPLICATION_SHARING_CHANGE" : "Application Sharing Change ", + "APPLICATION_PERMISSION_CHANGE" : "Application Permission Change ", + "FOLDER_CREATE" : "Create Folder ", + "FOLDER_DELETE" : "Delete Folder ", + "FOLDER_UPDATE" : "Update Folder ", + "QUERY_EXECUTION" : "Execute Query ", + "GROUP_CREATE" : "Create Group ", + "GROUP_UPDATE" : "Update Group ", + "GROUP_DELETE" : "Delete Group ", + "GROUP_MEMBER_ADD" : "Add Group Member ", + "GROUP_MEMBER_ROLE_UPDATE" : "Update Group Member Role ", + "GROUP_MEMBER_LEAVE" : "Leave Group ", + "GROUP_MEMBER_REMOVE" : "Remove Group Member ", + "SERVER_START_UP" : "Server Startup ", + "SERVER_INFO" : "View Server Info ", + "DATA_SOURCE_CREATE" : "Create Datasource ", + "DATA_SOURCE_UPDATE" : "Update Datasource ", + "DATA_SOURCE_DELETE" : "Delete Datasource ", + "DATA_SOURCE_PERMISSION_GRANT" : "Grant Datasource Permission ", + "DATA_SOURCE_PERMISSION_UPDATE" : "Update Datasource Permission ", + "DATA_SOURCE_PERMISSION_DELETE" : "Delete Datasource Permission ", + "LIBRARY_QUERY_CREATE" : "Create Library Query ", + "LIBRARY_QUERY_UPDATE" : "Update Library Query ", + "LIBRARY_QUERY_DELETE" : "Delete Library Query ", + "LIBRARY_QUERY_PUBLISH" : "Publish Library Query ", + "API_CALL_EVENT" : "API Call Event ", + "logFilter" : "Log Filter", + "noLogsFound" : "No logs found. Adjust the filters and try again.", + "usageLogUserEngagement" : "User Engagement By Region", + "usageLogAppViews" : "App Usage over time", + "usageLogTopTen" : "Top 10 Apps", + "usageLogAnonymousKNown" : "Anonymous/Known Users", + "usageLogDevices" : "Device/OS Breakdown", + "usageLogBrowsers" : "Browser/Layout Engine Breakdown", + "premiumFeaturesNotice" : "All Premium Features are avilable in the Enterprise Edition of Lowcoder.", + "requestLicense" : "Request Enterprise Edition Licenses", + "requestLicensesBtton" : "Request Enterprise Access", + "AuditLogsTitle": "Audit Logs", + "AuditLogsIntroTitle": "Powerful visibility into your workspace activity", + "AuditLogsIntro1": "Audit Logs enable administrators to track exactly what happens across the entire Lowcoder platform. From user sign-ins to app modifications, every relevant action is captured and stored.", + "AuditLogsIntro2": "We include detailed metadata such as geolocation, device type, browser, and operating system for each event.", + "AuditLogsIntro3": "This transparency allows you to monitor activity across all connected environments, providing a robust audit trail to support compliance, security, and operational insight.", + "AuditLogsEventsTitle": "What events are tracked?", + "AuditLogsEventsIntro": "The following user actions are logged in real time:", + "SignIn": "Sign in", + "Logout": "Logout", + "ViewApp": "View app", + "CreateApp": "Create new app", + "DeleteApp": "Delete app", + "UpdateApp": "Update app", + "MoveToFolder": "Move to folder", + "MoveToTrash": "Move to Trash", + "RestoreApp": "Restore app", + "CreateFolder": "Create new folder", + "DeleteFolder": "Delete folder", + "UpdateFolder": "Update folder", + "ExecuteDataQuery": "Execute data query", + "CreateUserGroup": "Create new user-group", + "UpdateUserGroup": "Update user-group", + "DeleteUserGroup": "Delete user-group", + "AddGroupMember": "Add user-group member", + "UpdateGroupMemberRole": "Update user-group member's role", + "LeaveUserGroup": "Leave user-group", + "RemoveGroupMember": "Remove user-group member", + "ServerStartup": "Server startup", + "CreateDataSource": "Create data source", + "UpdateDataSource": "Update data source", + "DeleteDataSource": "Delete data source", + "GrantUpdateDeletePermission": "Grant or update permissions", + "LibraryQueryActions": "Create / Update / Delete library queries", + "PublishLibraryQuery": "Publish library query", + "AuditLogsPreviewTitle": "Preview the Audit Log in action (click to zoom)", + "ScreenshotPlaceholder1": "[ Screenshot 1 Placeholder ]", + "ScreenshotPlaceholder2": "[ Screenshot 2 Placeholder ]", + "ScreenshotPlaceholder3": "[ Screenshot 3 Placeholder ]", + "PricingTitle": "Enterprise Edition Pricing", + "PricingIntro": "We offer flexible pricing for organizations of any size, tailored to your usage model:", + "FlatRateTitle": "Option 1: Flat-rate per instance — $169 / month", + "FlatRateDesc": "An instance is a full Lowcoder environment (metadata database + runtime) that can be independently deployed. This includes:", + "FlatRatePoint1": "A dedicated MongoDB metadata store", + "FlatRatePoint2": "One or more app runtimes (\"Api-Service\" and / or \"Node-Service\" containers)", + "UsagePricingTitle": "Option 2: Usage-based pricing — $0.001 per API Call", + "UsagePricingDesc": "Each instance can alternatively be licensed based on API usage. We offer prepaid packages:", + "API100k": "100,000 API Calls — $100", + "API1M": "1,000,000 API Calls — $1,000", + "API10M": "10,000,000 API Calls — $10,000", + "UsageOverrunDesc": "When your API package runs low, we'll alert you. Once the package is consumed, your instance remains functional but will operate at a reduced speed to prevent abuse and maintain fairness.", + "UsageTopUpInfo": "You can seamlessly add additional packages anytime to ensure continuous, fast access — no service interruptions.", + "AppUsageTitle": "App Usage Logs", + "AppUsageIntroTitle": "Understand how your apps are used", + "AppUsageIntro1": "App Usage Logs give you deep insights into how your published Lowcoder apps are consumed.", + "AppUsageIntro2": "This functionality works like a built-in, simplified version of Google Analytics — but fully private and scoped to your Lowcoder instance.", + "AppUsageIntro3": "Admins can analyze how apps are accessed over time, which ones are most used, and from where users are connecting.", + + "AppUsageMetricsTitle": "Metrics we track", + "AppUsageMetricsIntro": "These analytics help you make informed decisions about engagement and platform usage:", + "MetricActiveUsers": "App Views per day / week / month (based on time filter)", + "MetricViewsPerApp": "Top 10 Apps", + "MetricDevices": "Access by device (desktop, tablet, mobile)", + "MetricBrowsers": "Access by browser and OS", + "MetricCountries": "Geographic origin of users", + "AppUsageScreenshotsTitle": "App Usage Analytics in action (click to zoom)", + "AppUsageScreenshot1": "[ App Usage Dashboard Screenshot ]", + "AppUsageScreenshot2": "[ Per-App Views Chart ]", + "AppUsageScreenshot3": "[ Geo Distribution Map ]", + + "BrandingIntroTitle": "Custom Branding & White-Labeling", + "BrandingIntro1": "With Lowcoders Branding settings, you can elevate product experience for your users by offering fully customizable branding.", + "BrandingIntro2": "Empower your customers or internal teams to use the platform as if it were their own — logo, colors, fonts, and custom pages included.", + "BrandingIntro3": "Or you need a fully white-label solution and reinforce your brand identity at every touchpoint.", + "BrandingColorsIntro1": "You can set your own color scheme to match your corporate identity, including primary UI elements and navigation bars.", + "BrandingColorsIntro2": "Customize sidebar highlights, header sections, and even text contrast to enhance user experience and accessibility.", + "BrandingFontsIntro": "Select from curated Google Fonts to make your application truly yours in both style and readability.", + "BrandingLogosIntro": "Naturally, you also can upload your own logos — rectangular and square — to appear in headers, dashboards, and login screens. Maintain brand consistency across devices and screens.", + "BrandingPagesIntro1": "Add personalized text and visuals to your error pages, signup flows, and logout messages.", + "BrandingPagesIntro2": "These touchpoints help deliver a fully branded experience even during unexpected scenarios or account transitions.", + "BrandingMetaIntro": "Define standard metadata like page title and description to improve your SEO presence and brand messaging.", + "BrandingHelpLinksIntro": "Add context-sensitive documentation links directly inside the app, providing just-in-time help to your users.", + "BrandingWhatsNewIntro": "Activate the 'What's New' section to highlight updates and product announcements in a branded and visible manner.", + + "EnvironmentsIntroTitle": "Lowcoder Staging", + "EnvironmentsTitle" : "Multi-Environment Infrastructure", + "EnvironmentsIntro1": "Lowcoder Environments allow you to separate your Dev, Test, and Prod stages cleanly and safely.", + "EnvironmentsIntro2": "Enterprise teams benefit from structured release workflows, approval processes, and version stability across stages.", + "EnvironmentsIntro3": "With the Environments feature, admins can control what gets deployed, when, and where — all from a single interface.", + "EnvironmentsIntro4" : "Lowcoder includes multiple object types like Workspaces, Data Sources, Data Queries, and Apps. Since many of these objects are interconnected (e.g. a Data Source can be shared across multiple Apps), a pure Git-based export would not capture all dependencies consistently. Instead, Lowcoder offers a selective, integrated deployment mechanism directly within the UI. Apps, data sources, and queries can be selectively managed and deployed across environments. Managed objects ensure safe, controlled staging and production releases.", + "yourDeploymentID" : "Your Deployment ID", + "EnvironmentsFeaturePreviewTitle" : "Environments & Deployment in action (click to zoom)", + + "EnvironmentsUseCasesTitle": "Why Use Environments? (Staging)", + "EnvironmentsUseCase1": "Prevent unintended changes in production by testing apps in dedicated Dev or QA environments.", + "EnvironmentsUseCase2": "Align with corporate IT governance by implementing staged deployments with audit-ready tracking.", + "EnvironmentsUseCase3": "Empower teams to build confidently with environment-specific configurations, data, and integrations.", + + "EnvironmentsFeaturesTitle": "What You Get", + "EnvironmentsFeature1": "Centralized dashboard to view and manage all Lowcoder environments.", + "EnvironmentsFeature2": "Deployment of applications, data sources, and configurations between environments, directly from the UI without the need for Additional CI/CD tools.", + "EnvironmentsFeature3": "Environment-specific access controls and visibility rules.", + "EnvironmentsFeature5": "Clear separation of concerns for staging, sandbox, and production operations.", + "apiUsage" : "API Calls.", + "loadingApiUsage" : "Loading API usage data..." + }, + // Environments page translations + "environments": { + "title": "Environments", + "search": "Search", + "refresh": "Refresh", + "addEnvironment": "Add Environment", + "errorLoadingEnvironments": "Error loading environments", + "noEnvironmentsFoundMatching": "No environments found matching \"{searchText}\"", + "noEnvironmentsFound": "No environments found. Create your first environment to get started.", + "environmentsTypeLabel": "{type} Environments", + "showingAllEnvironments": "Showing all {count} environments", + "unnamedEnvironment": "Unnamed Environment", + "masterEnvironment": "Master Environment", + "viewAuditLogs": "View Audit Logs", + "id": "ID", + "domain": "Domain", + "master": "Master", + "license": "License", + "apiCalls": "API Calls", + "yes": "Yes", + "no": "No", + "copyId": "Copy ID", + "copied": "Copied!", + "percentUsed": "{percent}% used", + "licenseStatus_checking": "Checking...", + "licenseStatus_licensed": "Licensed", + "licenseStatus_unlicensed": "License Required", + "licenseStatus_error": "Setup Required", + "licenseStatus_unknown": "Unknown", + "detail_environmentNotFound": "Environment Not Found", + "detail_returnToEnvironmentsList": "Return to Environments List", + "detail_environmentDetail": "Environment Detail", + "detail_environmentOverview": "Environment Overview", + "detail_noDomainSet": "No domain set", + "detail_environmentId": "Environment ID", + "detail_licenseStatus": "License Status", + "detail_licenseNeeded": "License Needed", + "detail_setupRequired": "Setup Required", + "detail_created": "Created", + "detail_unknown": "Unknown", + "detail_licenseDetails": "License Details", + "detail_apiCallsRemaining": "API Calls Remaining", + "detail_totalApiCallsLimit": "Total API Calls Limit", + "detail_enterpriseEdition": "Enterprise Edition", + "detail_active": "Active", + "detail_inactive": "Inactive", + "detail_licenseInformation": "License Information", + "detail_calls": "calls", + "detail_licenses": "Licenses", + "detail_license": "License", + "detail_workspaces": "Workspaces", + "detail_userGroups": "User Groups", + "detail_type": "Type", + "detail_status": "Status", + "detail_licensed": "Licensed", + "detail_unlicensed": "Unlicensed", + "detail_apiKey": "API Key", + "detail_configured": "Configured", + "detail_notSet": "Not Set", + "detail_masterEnv": "Master Env", + "unlicensed_unlicensedDescription": "This environment needs a valid license to unlock its full capabilities and features. Please make sure your API Service URL is correctly configured and Plugin is installed.", + "unlicensed_errorDescription": "We encountered an issue while checking the license. Please review the configuration settings.", + "unlicensed_defaultDescription": "This environment requires license configuration to proceed.", + "unlicensed_contactLowcoderTeam": "Contact Lowcoder Team", + "unlicensed_editEnvironment": "Edit Environment", + "unlicensed_backToEnvironments": "Back to Environments", + "unlicensed_helpText": "Need assistance? Contact our team for licensing support or edit the environment configuration to resolve this issue.", + "unlicensed_type": "Type", + "unlicensed_status": "Status", + "unlicensed_masterEnv": "Master Env", + "unlicensed_licenseIssue": "License Issue", + "unlicensed_error": "Error", + "unlicensed_missing": "Missing", + "error_itemNotFound": "The item you're looking for doesn't exist or you don't have permission to view it.", + "modal_createNewEnvironment": "Create New Environment", + "modal_editEnvironment": "Edit Environment", + "modal_cancel": "Cancel", + "modal_createEnvironment": "Create Environment", + "modal_saveChanges": "Save Changes", + "modal_environmentName": "Environment Name", + "modal_pleaseEnterName": "Please enter a name", + "modal_nameMinLength": "Name must be at least 2 characters", + "modal_enterEnvironmentName": "Enter environment name", + "modal_description": "Description", + "modal_enterDescription": "Enter description", + "modal_stage": "Stage", + "modal_pleaseSelectStage": "Please select a stage", + "modal_selectStage": "Select stage", + "modal_development": "Development (DEV)", + "modal_testing": "Testing (TEST)", + "modal_preProduction": "Pre-Production (PREPROD)", + "modal_production": "Production (PROD)", + "modal_frontendUrl": "Frontend URL", + "modal_pleaseEnterValidUrl": "Please enter a valid URL", + "modal_apiServiceUrl": "API Service URL", + "modal_nodeServiceUrl": "Node Service URL", + "modal_apiKey": "API Key", + "modal_enterApiKey": "Enter API key", + "modal_masterEnvironment": "Master Environment", + "modal_alreadyMasterEnvironment": "{name} is already the Master environment", + "modal_willBeMaster": "Will be Master", + "modal_currentlyMaster": "Currently Master", + "modal_configurationRequirements": "Configuration Requirements", + "modal_configurationRequirementsDesc": "Ensure that the API Service URL is configured and correct, the API key is valid, and for license verification make sure you have both the license and plugin properly installed.", + "workspaces_title": "Workspaces", + "workspaces_subtitle": "Manage workspaces in this environment", + "workspaces_refresh": "Refresh", + "workspaces_errorLoadingWorkspaces": "Error loading workspaces", + "workspaces_configurationIssue": "Configuration Issue", + "workspaces_missingConfiguration": "Missing required configuration: API key or API service URL", + "workspaces_totalWorkspaces": "Total Workspaces", + "workspaces_managedWorkspaces": "Managed Workspaces", + "workspaces_unmanagedWorkspaces": "Unmanaged Workspaces", + "workspaces_workspace": "Workspace", + "workspaces_role": "Role", + "workspaces_status": "Status", + "workspaces_managed": "Managed", + "workspaces_unmanaged": "Unmanaged", + "workspaces_actions": "Actions", + "workspaces_viewAuditLogs": "View Audit Logs", + "workspaces_audit": "Audit", + "workspaces_searchWorkspaces": "Search workspaces by name or ID", + "workspaces_showAll": "Show All", + "workspaces_managedOnly": "Managed Only", + "workspaces_showingResults": "Showing {count} of {total} workspaces", + "workspaces_paginationTotal": "{start}-{end} of {total} workspaces", + "workspaces_noWorkspacesFound": "No workspaces found in this environment", + "userGroups_title": "User Groups", + "userGroups_subtitle": "Manage user groups in this environment", + "userGroups_refresh": "Refresh", + "userGroups_errorLoadingUserGroups": "Error loading user groups", + "userGroups_configurationIssue": "Configuration Issue", + "userGroups_missingConfiguration": "Missing required configuration: API key or API service URL", + "userGroups_totalGroups": "Total Groups", + "userGroups_allUsersGroups": "All Users Groups", + "userGroups_developerGroups": "Developer Groups", + "userGroups_customGroups": "Custom Groups", + "userGroups_userGroup": "User Group", + "userGroups_type": "Type", + "userGroups_allUsers": "All Users", + "userGroups_developers": "Developers", + "userGroups_custom": "Custom", + "userGroups_members": "Members", + "userGroups_adminMembers": "Admin Members", + "userGroups_created": "Created", + "userGroups_totalMembersTooltip": "Total number of members in this group", + "userGroups_adminMembersTooltip": "Number of admin users in this group", + "userGroups_searchUserGroups": "Search user groups by name or ID", + "userGroups_showingResults": "Showing {count} of {total} user groups", + "userGroups_paginationTotal": "{start}-{end} of {total} user groups", + "userGroups_noUserGroupsFound": "No user groups found in this environment", + "apps_title": "Apps", + "apps_subtitle": "Manage workspace applications", + "apps_refresh": "Refresh", + "apps_errorLoadingApps": "Error loading apps", + "apps_configurationIssue": "Configuration Issue", + "apps_missingConfiguration": "Missing required configuration: API key or API service URL", + "apps_totalApps": "Total Apps", + "apps_publishedApps": "Published Apps", + "apps_managedApps": "Managed Apps", + "apps_unmanagedApps": "Unmanaged Apps", + "apps_app": "App", + "apps_status": "Status", + "apps_published": "Published", + "apps_draft": "Draft", + "apps_managed": "Managed", + "apps_unmanaged": "Unmanaged", + "apps_deploy": "Deploy", + "apps_audit": "Audit", + "apps_appMustBeManagedToDeploy": "App must be managed before it can be deployed", + "apps_deployThisApp": "Deploy this app to another environment", + "apps_viewAuditLogs": "View Audit Logs", + "apps_searchApps": "Search apps by name or ID", + "apps_showAll": "Show All", + "apps_managedOnly": "Managed Only", + "apps_showingResults": "Showing {count} of {total} apps", + "apps_paginationTotal": "{start}-{end} of {total} apps", + "apps_noAppsFound": "No apps found in this workspace", + "apps_appRecycled": "This app has been moved to recycle bin", + "apps_managedSuccess": "{name} is now Managed", + "apps_unmanagedSuccess": "{name} is now Unmanaged", + "apps_managedError": "Failed to change managed status for {name}", + "dataSources_title": "Data Sources", + "dataSources_subtitle": "Manage workspace data connections", + "dataSources_refresh": "Refresh", + "dataSources_errorLoadingDataSources": "Error loading data sources", + "dataSources_configurationIssue": "Configuration Issue", + "dataSources_missingConfiguration": "Missing required configuration: API key or API service URL", + "dataSources_totalDataSources": "Total Data Sources", + "dataSources_availableTypes": "Available Types", + "dataSources_managed": "Managed", + "dataSources_unmanaged": "Unmanaged", + "dataSources_dataSource": "Data Source", + "dataSources_type": "Type", + "dataSources_status": "Status", + "dataSources_deploy": "Deploy", + "dataSources_audit": "Audit", + "dataSources_dataSourceMustBeManagedToDeploy": "Data source must be managed before it can be deployed", + "dataSources_deployThisDataSource": "Deploy this data source to another environment", + "dataSources_viewAuditLogs": "View Audit Logs", + "dataSources_searchDataSources": "Search data sources by name or ID", + "dataSources_showAll": "Show All", + "dataSources_managedOnly": "Managed Only", + "dataSources_showingResults": "Showing {count} of {total} data sources", + "dataSources_paginationTotal": "{start}-{end} of {total} data sources", + "dataSources_noDataSourcesFound": "No data sources found in this workspace", + "dataSources_managedSuccess": "{name} is now Managed", + "dataSources_unmanagedSuccess": "{name} is now Unmanaged", + "dataSources_managedError": "Failed to change managed status for {name}", + "queries_title": "Queries", + "queries_subtitle": "Manage workspace API queries", + "queries_refresh": "Refresh", + "queries_errorLoadingQueries": "Error loading queries", + "queries_configurationIssue": "Configuration Issue", + "queries_missingConfiguration": "Missing required configuration: API key or API service URL", + "queries_totalQueries": "Total Queries", + "queries_managed": "Managed", + "queries_unmanaged": "Unmanaged", + "queries_query": "Query", + "queries_creator": "Creator", + "queries_status": "Status", + "queries_deploy": "Deploy", + "queries_audit": "Audit", + "queries_queryMustBeManagedToDeploy": "Query must be managed before it can be deployed", + "queries_deployThisQuery": "Deploy this query to another environment", + "queries_viewAuditLogs": "View Audit Logs", + "queries_searchQueries": "Search queries by name or ID", + "queries_showAll": "Show All", + "queries_managedOnly": "Managed Only", + "queries_showingResults": "Showing {count} of {total} queries", + "queries_paginationTotal": "{start}-{end} of {total} queries", + "queries_noQueriesFound": "No queries found in this workspace", + "queries_managedSuccess": "{name} is now Managed", + "queries_unmanagedSuccess": "{name} is now Unmanaged", + "queries_managedError": "Failed to change managed status for {name}", + + // Deploy Modal and Credential Confirmations + "deployModal_deployTitle": "Deploy {singularLabel}: {name}", + "deployModal_loadingEnvironments": "Loading environments...", + "deployModal_sourceEnvironment": "Source Environment", + "deployModal_targetEnvironment": "Target Environment", + "deployModal_selectTargetEnvironment": "Select target environment", + "deployModal_selectTargetEnvironmentValidation": "Please select a target environment", + "deployModal_confirmed": "Confirmed", + "deployModal_cancel": "Cancel", + "deployModal_deploy": "Deploy", + "deployModal_targetEnvironmentNotFound": "Target environment not found", + "deployModal_confirmCredentialOverwrite": "Please confirm credential overwrite before deploying", + "deployModal_deploySuccess": "Successfully deployed {name} to target environment", + "deployModal_deployFailed": "Failed to deploy {singularLabel}", + "deployModal_selectFieldValidation": "Please select {label}", + "deployModal_selectFieldPlaceholder": "Select {label}", + "deployModal_inputFieldValidation": "Please input {label}", + "deployModal_inputFieldPlaceholder": "Enter {label}", + + // Add contact lowcoder modal + "contactLowcoder_title": "Contact Lowcoder Team", + "contactLowcoder_environmentLabel": "Environment:", + "contactLowcoder_environmentIdLabel": "Environment ID:", + "contactLowcoder_deploymentIdLabel": "Deployment ID:", + "contactLowcoder_loading": "Loading...", + "contactLowcoder_notAvailable": "Not available", + "contactLowcoder_unnamedEnvironment": "Unnamed Environment", + "contactLowcoder_fetchingDeploymentInfo": "Fetching deployment information...", + "contactLowcoder_unableToLoadContactForm": "Unable to Load Contact Form", + "contactLowcoder_apiConfigurationError": "Environment API service URL or API key not configured", + "contactLowcoder_failedToFetchDeploymentId": "Failed to fetch deployment ID", + "contactLowcoder_ensureProperConfiguration": "Please ensure the environment is properly configured to contact support.", + + "credentialConfirmations_firstConfirmation_title": "Overwrite Credentials Warning", + "credentialConfirmations_firstConfirmation_message": "This action will overwrite existing credentials in the target environment.", + "credentialConfirmations_firstConfirmation_description": "This is a serious operation that may affect other applications and users.", + "credentialConfirmations_firstConfirmation_question": "Are you sure you want to proceed?", + "credentialConfirmations_firstConfirmation_continueButton": "Continue", + "credentialConfirmations_firstConfirmation_cancelButton": "Cancel", + "credentialConfirmations_secondConfirmation_title": "Final Confirmation Required", + "credentialConfirmations_secondConfirmation_message": "Final Warning: Credential Overwrite", + "credentialConfirmations_secondConfirmation_description": "You are about to overwrite credentials in the target environment. This action cannot be undone and may break existing integrations.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Please confirm one more time.", + "credentialConfirmations_secondConfirmation_finalQuestion": "Are you absolutely certain you want to overwrite the credentials?", + "credentialConfirmations_secondConfirmation_confirmButton": "Yes, Overwrite Credentials", + "credentialConfirmations_secondConfirmation_cancelButton": "Cancel", + + "config_singularLabels_app": "App", + "config_singularLabels_dataSource": "Data Source", + "config_singularLabels_query": "Query", + "config_singularLabels_workspace": "Workspace", + "config_fields_updateDependenciesIfNeeded": "Update Dependencies If Needed", + "config_fields_publishOnTarget": "Publish On Target", + "config_fields_publicToAll": "Public To All", + "config_fields_publicToMarketplace": "Public To Marketplace", + "config_fields_overwriteCredentials": "Overwrite Credentials", + + // Service error messages + "services_environments_missingEnvironmentId": "Missing environment ID", + "services_environments_failedToUpdateEnvironment": "Failed to update environment", + "services_environments_environmentCreatedSuccessfully": "Environment created successfully", + "services_environments_failedToCreateEnvironment": "Failed to create environment", + "services_environments_failedToFetchEnvironments": "Failed to fetch environments", + "services_environments_failedToFetchEnvironment": "Failed to fetch environment", + "services_environments_environmentIdRequired": "Environment ID is required", + "services_environments_apiKeyRequiredForWorkspaces": "API key is required to fetch workspaces", + "services_environments_apiServiceUrlRequiredForWorkspaces": "API service URL is required to fetch workspaces", + "services_environments_failedToFetchWorkspaces": "Failed to fetch workspaces", + "services_environments_apiKeyRequiredForUserGroups": "API key is required to fetch user groups", + "services_environments_apiServiceUrlRequiredForUserGroups": "API service URL is required to fetch user groups", + "services_environments_failedToFetchUserGroups": "Failed to fetch user groups", + "services_environments_workspaceIdRequired": "Workspace ID is required", + "services_environments_apiKeyRequiredForApps": "API key is required to fetch apps", + "services_environments_apiServiceUrlRequiredForApps": "API service URL is required to fetch apps", + "services_environments_failedToFetchWorkspaceApps": "Failed to fetch workspace apps", + "services_environments_apiKeyRequiredForDataSources": "API key is required to fetch data sources", + "services_environments_apiServiceUrlRequiredForDataSources": "API service URL is required to fetch data sources", + "services_environments_failedToFetchWorkspaceDataSources": "Failed to fetch workspace data sources", + "services_environments_apiKeyRequiredForQueries": "API key is required to fetch queries", + "services_environments_apiServiceUrlRequiredForQueries": "API service URL is required to fetch queries", + "services_environments_failedToFetchWorkspaceQueries": "Failed to fetch workspace queries", + "services_environments_apiServiceUrlNotConfigured": "API service URL not configured", + "services_environments_licenseCheckFailed": "License check failed", + "services_environments_apiKeyRequiredForDeploymentId": "API key is required to fetch deployment ID", + "services_environments_failedToFetchDeploymentId": "Failed to fetch deployment ID", + "services_enterprise_missingEnvironmentId": "Missing environment ID", + "services_enterprise_failedToFetchManagedWorkspaces": "Failed to fetch managed workspaces", + "services_enterprise_missingRequiredParamsToConnectOrg": "Missing required params to connect workspace", + "services_enterprise_failedToConnectOrg": "Failed to connect workspace", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "Missing workspace GID to unconnect workspace", + "services_enterprise_failedToUnconnectOrg": "Failed to unconnect workspace", + "services_enterprise_failedToConnectApp": "Failed to connect app", + "services_enterprise_failedToUnconnectApp": "Failed to unconnect app", + "services_enterprise_failedToFetchDataSources": "Failed to fetch data sources", + "services_enterprise_failedToDeployDataSource": "Failed to deploy data source", + "services_enterprise_failedToDisconnectManagedDataSource": "Failed to disconnect managed data source", + "services_enterprise_environmentIdRequired": "Environment ID is required", + "services_enterprise_failedToFetchQueries": "Failed to fetch queries", + "services_enterprise_environmentIdAndQueryGidRequired": "Environment ID and Query GID are required", + "services_enterprise_failedToDeployQuery": "Failed to deploy query", + "services_enterprise_queryGidRequired": "Query GID is required", + "services_enterprise_failedToDisconnectQuery": "Failed to disconnect query", + "services_apps_failedToFetchApps": "Failed to fetch apps", + "services_apps_failedToDeployApp": "Failed to deploy app", + "services_datasources_workspaceIdRequired": "Workspace ID is required", + "services_datasources_apiKeyRequiredToFetchDataSources": "API key is required to fetch data sources", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "API service URL is required to fetch data sources", + "services_datasources_failedToFetchDataSources": "Failed to fetch data sources", + "services_datasources_failedToDeployDataSource": "Failed to deploy data source", + "services_workspace_failedToFetchWorkspaces": "Failed to fetch workspaces", + "services_workspace_failedToDeployWorkspace": "Failed to deploy workspace", + "services_managedObjects_missingRequiredParameters": "Missing required parameters", + "services_managedObjects_failedToCheckManagedStatus": "Failed to check managed status", + "services_managedObjects_failedToSetAsManaged": "Failed to set {{objType}} as managed", + "services_managedObjects_failedToRemoveFromManaged": "Failed to remove {{objType}} from managed", + "services_managedObjects_missingEnvironmentId": "Missing environment ID", + "services_managedObjects_failedToFetchManagedObjects": "Failed to fetch managed objects", + "services_managedObjects_failedToFetchManagedObject": "Failed to fetch managed object", + "services_managedObjects_managedObjectNotFound": "Managed object not found for objGid: {{objGid}}", + "services_license_apiServiceUrlRequired": "API service URL is required", + "services_license_licenseInformationUnavailable": "License information unavailable", + "services_license_licenseCheckTookTooLong": "License check took too long", + "services_license_licenseServiceNotAvailable": "License service not available", + "services_license_authenticationRequired": "Authentication required - please check API key", + "services_license_licenseServiceTemporarilyUnavailable": "License service temporarily unavailable", + "services_license_remainingAPICalls": "{{remaining}} remaining ({{used}}/{{total}} used, {{percentage}}%)", + }, "subscription": { "details": "Subscription Details", "productDetails": "Product Details", @@ -2446,6 +2974,18 @@ export const en = { "fetchInvoices": "Error fetching invoices." }, + "auditLog": { + "title": "Audit Log Detail", + "geoLocation": "Geo Location", + "browserData": "Browser / System Metadata", + "browser": "Browser", + "OS": "OS", + "device": "Device", + "deviceType": "Device Type", + "engine": "Engine", + "webview": "Webview", + "eventDetail": "Event Detail" + }, // thirteenth part @@ -2484,6 +3024,12 @@ export const en = { "inviteUserLabel": "Invitation Link:", "inviteCopyLink": "Copy Link", "inviteText": "{userName} Invites You to Join the Workspace \"{organization}\", Click on the Link to Join: {inviteLink}", + "inviteByEmailHelp": "You can enter one or more email addresses to send invitation links", + "inviteByEmailLabel": "Enter emails:", + "inviteByEmailButton": "Send Invitations", + "inviteByEmailSuccess": "Invitations sent successfully!", + "inviteByEmailError": "Something went wrong while sending invitations. Please try again.", + "noValidEmails": "No valid emails found", "groupName": "Group Name", "createTime": "Create Time", "manageBtn": "Manage", @@ -2538,6 +3084,7 @@ export const en = { "success": "Form Generated Successfully", "selectCompType": "Select Component Type", "dataSource": "Data Source: ", + "invalidFormMessage": "Custom Invalid Form Message", "selectSource": "Select Source", "table": "Table: ", "selectTable": "Select Table", @@ -2598,7 +3145,8 @@ export const en = { "itemDataNameDesc": "The Variable Name Referring to the Item's Data Object, Default as {default}", "itemsDesc": "Exposing Data of Components in List", "dataDesc": "The JSON Data Used in the Current List", - "dataTooltip": "If You just Set a Number, This Field Will Be Regarded as Row Count, and the Data Will Be Regarded as Empty." + "dataTooltip": "If You just Set a Number, This Field Will Be Regarded as Row Count, and the Data Will Be Regarded as Empty.", + "enableSorting": "Allow Sorting" }, "navigation": { "addText": "Add Submenu Item", @@ -2874,18 +3422,83 @@ export const en = { // sixteenth part - "branding": { - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": ".JPG, .SVG or .PNG Only", - "faviconTitle": "Favicon", - "faviconHelp": ".JPG, .SVG or .PNG Only", - "brandNameTitle": "Brand Name", - "headColorTitle": "Head Color", - "save": "Save", - "saveSuccessMsg": "Saved Successfully", - "upload": "Click to Upload" + "title": "Branding Settings", + "general": "General Settings", + "selectWorkspace": "Select Workspace", + "brandingName": "Branding Name", + "brandingNamePlaceholder": "Enter branding name", + "brandingDescription": "Branding Description", + "brandingDescriptionPlaceholder": "Enter branding description", + "logoSection": "Logos", + "logo": "Logo", + "logoHelp": "Upload your company's logo in SVG or PNG format.", + "logoUrlHelp": "Provide valid image url for Logo.", + "logoUrlPlaceholder" : "Provider image url for Logo", + "squareLogo": "Square Logo", + "squareLogoHelp": "Upload a square version of your logo in SVG or PNG format.", + "squareLogoUrlHelp": "Provide valid image url for Square Logo.", + "squareLogoUrlPlaceholder": "Provide url for Square Logo.", + "colorFontSection": "Colors and Fonts", + "mainBrandingColor": "Main Branding Color", + "mainBrandingColorHelp": "Choose the primary color for your branding.", + "editorHeaderColor": "App Header Color", + "editorHeaderColorHelp": "Choose the color for the app's header.", + "adminSidebarColor": "Admin Sidebar Color", + "adminSidebarColorHelp": "Choose the color for the admin's sidebar.", + "adminSidebarFontColor": "Admin Sidebar Font Color", + "adminSidebarFontColorHelp": "Choose the font color for the admin's sidebar.", + "adminSidebarActiveBgColor": "Admin Sidebar Selected Item's Backround Color", + "adminSidebarActiveBgColorHelp": "Choose the selected item's background color for the admin's sidebar.", + "adminSidebarActiveFontColor": "Admin Sidebar Selected Item's Font Color", + "adminSidebarActiveFontColorHelp": "Choose the selected item's font color for the admin's sidebar.", + "editorSidebarColor": "Editor Sidebar Color", + "editorSidebarColorHelp": "Choose the color for the editor's sidebar.", + "editorSidebarFontColor": "Editor Sidebar Font Color", + "editorSidebarFontColorHelp": "Choose the font color for the editor's sidebar.", + "editorSidebarActiveBgColor": "Editor Sidebar Selected Item's Backround Color", + "editorSidebarActiveBgColorHelp": "Choose the selected item's background color for the editor's sidebar.", + "editorSidebarActiveFontColor": "Editor Sidebar Selected Item's Font Color", + "editorSidebarActiveFontColorHelp": "Choose the selected item's font color for the editor's sidebar.", + "font": "Font", + "fontHelp": "Select a font from Google Fonts for your application.", + "textSection": "Texts and Pages", + "errorPage": "Error Page Text", + "errorPageHelp": "Enter the text displayed on the error page.", + "signUpPage": "Sign-Up Page Text", + "signUpPageHelp": "Enter the text displayed on the sign-up page.", + "loggedOutPage": "Logged-Out Page Text", + "loggedOutPageHelp": "Enter the text displayed on the logged-out page.", + "standardDescription": "Standard Description", + "standardDescriptionHelp": "Enter the standard description for SEO meta information.", + "standardTitle": "Standard Title", + "standardTitleHelp": "Enter the standard title for SEO meta information.", + "showDocumentation": "Show Documentation", + "submitIssue": "Allow Submit Issue", + "whatsNew": "Enable What's New", + "saveButton": "Save Settings", + "errorPageImage" : "Upload an image for the Error Page in SVG or PNG format.", + "errorPageImageUrl" : "Image URL for the Error Page", + "errorPageImageUrlPlaceholder" : "Provider image url for Error Page", + "errorPageImageUrlHelp" : "Provider a valid image url to show on Error Page.", + "signUpPageImage" : "Upload an image for the Sign Up Page in SVG or PNG format.", + "signUpPageImageUrl" : "Image URL for the Sign Up Page", + "signUpPageImageUrlPlaceholder" : "Provider image url for Sign Up Page", + "signUpPageImageUrlHelp" : "Provider a valid image url to show on Sign Up Page.", + "loggedOutPageImage" : "Upload an image for the Logged-out Page in SVG or PNG format.", + "showDocumentationSection": "Documentation Link Settings", + "showWhatsNewSection" : "Whats New Link Settings", + "documentationLink": "Documentation Link", + "documentationLinkPlaceholder": "Enter the URL for your documentation...", + "documentationLinkHelp": "Provide a valid URL that users can visit for documentation.", + "whatsNewSection": "Documentation Settings", + "whatsNewLink": "What's New Link", + "whatsNewLinkPlaceholder": "Enter the URL for your documentation...", + "whatsNewLinkHelp": "Provide a valid URL that users can visit for your news.", + "deleteBranding": "Delete Branding", + "deleteBrandingContent": "Are you sure you want to delete \"{orgName}\" branding?", + "fetchBrandingError": "Something went wrong while fetching branding details. Please try again.", + "upload": "Upload" }, "networkMessage": { "200": "Success", @@ -3078,6 +3691,7 @@ export const en = { "memberOfOrgs": "Workspaces Membership", "apiKeys": "API Keys", "createApiKey": "Create API Key", + "apiKeyInfo": "Make sure to copy your new API key now. You won't be able to see it again.", "apiKeyName": "Name", "apiKeyDescription": "Description", "apiKeyCopy": "Click the Api Key to get the value in your clipboard", @@ -3124,8 +3738,7 @@ export const en = { "help": { "videoText": "Overview", "onBtnText": "OK", - // eslint-disable-next-line only-ascii/only-ascii - "permissionDenyTitle": "💡 Unable to Create a New Application or Data Source?", + "permissionDenyTitle": "Unable to Create a New Application or Data Source?", "permissionDenyContent": "You Don't Have Permission to Create the Application and Data Source. Please Contact the Administrator to Join the Developer Group.", "appName": "Tutorial Application", "chat": "Chat with Us", @@ -3205,6 +3818,7 @@ export const en = { "enterPassword": "Enter your password", "selectAuthProvider": "Select Authentication Provider", "selectWorkspace": "Select your workspace", + "userNotFound": "User not found. Please make sure you entered the correct email." }, "preLoad": { "jsLibraryHelpText": "Add JavaScript Libraries to Your Current Application via URL Addresses. lodash, day.js, uuid, numbro are Built into the System for Immediate Use. JavaScript Libraries are Loaded Before the Application is Initialized, Which Can Have an Impact on Application Performance.", @@ -3310,7 +3924,7 @@ export const en = { "trash": "Trash", "marketplace": "Marketplace", "allCategories": "All Categories", - "queryLibrary": "Query Library", + "queryLibrary": "Data Queries", "datasource": "Data Sources", "selectDatasourceType": "Select Data Source Type", "home": "Home", @@ -3366,6 +3980,10 @@ export const en = { "fileFormatError": "File format error", "groupWithSquareBrackets": "[Group] ", "allPermissions": "Owner", + "appSharingDialogueTitle" : "App Sharing and Permissions", + "appSocialSharing" : "Share Your App and Experience on:", + "appSocialSharingMessage" : "I made this App with Lowcoder, check it out!", + "socialShare" : "Share on", "shareLink": "Share link: ", "copyLink": "Copy link", "appPublicMessage": "Make the app public. Anyone can view.", @@ -3555,13 +4173,11 @@ export const en = { "pleaseSelectCity": "Please Select a City", "advanced": "Advanced", "showClearIcon": "Show Clear Icon", -/* eslint-disable only-ascii/only-ascii */ - appleOptionLabel: "🍎 Apple", - waterMelonOptionLabel: "🍉 Watermelon", - berryOptionLabel: "🍓 Strawberry", - lemonOptionLabel: "🍋 Lemon", - coconutOptionLabel: "🥥 Coconut", -/* eslint-enable only-ascii/only-ascii */ + "appleOptionLabel": "Apple", + "waterMelonOptionLabel": "Watermelon", + "berryOptionLabel": "Strawberry", + "lemonOptionLabel": "Lemon", + "coconutOptionLabel": "Coconut", "likedFruits": "Favorites", "option": "Option", "singleFileUpload": "Single File Upload", @@ -3772,6 +4388,7 @@ export const en = { }, "jsonLottie": { "lottieJson": "Lottie JSON", + "searchAnimation" : "Search Animation", "speed": "Speed", "width": "Width", "height": "Height", @@ -3781,9 +4398,17 @@ export const en = { "loop": "Loop", "auto": "Auto", "onHover": "On Hover", + "onTrigger": "On Trigger", "singlePlay": "Single Play", "endlessLoop": "Endless Loop", - "keepLastFrame": "Keep Last Frame displayed" + "keepLastFrame": "Keep Last Frame displayed", + "fit": "Fit", + "align": "Align", + "load": "On Load", + "play": "On Play", + "pause": "On Pause", + "stop": "On Stop", + "complete": "On Complete", }, "timeLine": { "titleColor": "Title Color", @@ -3967,6 +4592,7 @@ export const en = { "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", "UserChoice": "UserChoice" }, + tour: { section1Title: "Steps", section1Subtitle: "Steps", @@ -4088,6 +4714,15 @@ export const en = { discord: "https://discord.com/invite/qMG9uTmAx2", }, + "iconScout": { + "searchImage": "Search Image", + "searchAnimation": "Search Animation", + "searchIcon": "Search Icon", + "noResults": "No results found.", + "buySubscriptionTitle": "Unlock Premium Assets", + "buySubscriptionContent": "This asset is exclusive to Media Package Subscribers. Subscribe to Media Package and download high-quality assets without limits!", + "buySubscriptionButton": "Subscribe Now", + } }; // const jsonString = JSON.stringify(en, null, 2); diff --git a/client/packages/lowcoder/src/i18n/locales/es.ts b/client/packages/lowcoder/src/i18n/locales/es.ts index 0deceffe82..6062930932 100644 --- a/client/packages/lowcoder/src/i18n/locales/es.ts +++ b/client/packages/lowcoder/src/i18n/locales/es.ts @@ -1,4030 +1,4844 @@ import { en } from "./en"; export const es = { - ...en, - - "productName": "Lowcoder", - "productDesc": "Cree aplicaciones de software para su empresa y sus clientes con una experiencia mínima en codificación. Lowcoder es una excelente alternativa a Retool, Appsmith y Tooljet.", - "notSupportedBrowser": "Su navegador actual puede tener problemas de compatibilidad. Para una experiencia de usuario óptima, utilice la última versión de Chrome.", - "create": "Cree", - "move": "Mover", - "addItem": "Añadir", - "newItem": "Nuevo", - "copy": "Copia", - "rename": "Cambie el nombre de", - "delete": "Borrar", - "deletePermanently": "Borrar permanentemente", - "remove": "Eliminar", - "recover": "Recuperar", - "edit": "Editar", - "view": "Ver", - "value": "Valor", - "data": "Datos", - "information": "Información", - "success": "Éxito", - "warning": "Advertencia", - "error": "Error", - "reference": "Referencia", - "text": "Texto", - "basic": "Básico", - "label": "Etiqueta", - "layout": "Diseño", - "color": "Color", - "form": "Forma", - "menu": "Menú", - "menuItem": "Elemento del menú", - "ok": "OK", - "cancel": "Cancelar", - "finish": "Acabado", - "reset": "Restablecer", - "icon": "Icono", - "code": "Código", - "title": "Título", - "emptyContent": "Contenido vacío", - "more": "Más", - "search": "Buscar en", - "back": "Volver", - "accessControl": "Control de acceso", - "copySuccess": "Copiado correctamente", - "copyError": "Error de copia", - "api": { - ...en.api, - - "publishSuccess": "Publicado con éxito", - "recoverFailed": "Recuperación fallida", - "needUpdate": "Su versión actual es obsoleta. Por favor, actualice a la última versión.", - }, - "codeEditor": { - ...en.codeEditor, - - "notSupportAutoFormat": "El editor de código actual no soporta el autoformateo.", - "fold": "Pliegue", - }, - "exportMethod": { - ...en.exportMethod, - - "setDesc": "Establecer propiedad: ___MARCADOR0___", - "clearDesc": "Borrar propiedad: ___TITULAR0___", - "resetDesc": "Restablecer propiedad: {property} al valor por defecto", - }, - "method": { - ...en.method, - - "focus": "Fijar el foco", - "focusOptions": "Opciones de enfoque. Véase HTMLElement.focus()", - "blur": "Quitar el foco", - "click": "Haga clic en", - "select": "Seleccionar todo el texto", - "setSelectionRange": "Fijar las posiciones inicial y final de la selección de texto", - "selectionStart": "Índice basado en 0 del primer carácter seleccionado", - "selectionEnd": "Índice basado en 0 del carácter después del último carácter seleccionado", - "setRangeText": "Reemplazar rango de texto", - "replacement": "Cadena a insertar", - "replaceStart": "Índice basado en 0 del primer carácter a sustituir", - "replaceEnd": "Índice basado en 0 del carácter después del último carácter a sustituir", - }, - "errorBoundary": { - ...en.errorBoundary, - - "encounterError": "Error al cargar el componente. Compruebe la configuración.", - "clickToReload": "Haga clic para recargar", - "errorMsg": "Error:", - }, - "imgUpload": { - ...en.imgUpload, - - "notSupportError": "Sólo admite tipos de imagen {types}.", - "exceedSizeError": "El tamaño de la imagen no debe superar {size}.", - }, - "gridCompOperator": { - ...en.gridCompOperator, - - "notSupport": "No se admite", - "selectAtLeastOneComponent": "Seleccione al menos un componente", - "selectCompFirst": "Seleccionar componentes antes de copiar", - "noContainerSelected": "[Bug] No hay contenedor seleccionado", - "deleteCompsSuccess": "Eliminado con éxito. Pulse {undoKey} para deshacer.", - "deleteCompsTitle": "Eliminar componentes", - "deleteCompsBody": "¿Seguro que desea suprimir {compNum} componentes seleccionados?", - "cutCompsSuccess": "Cortar con éxito. Pulse ___CARTER0___ para pegar, o ___CARTER1___ para deshacer.", - }, - "leftPanel": { - ...en.leftPanel, - - "queries": "Consultas de datos en su aplicación", - "globals": "Global Data Variables", - "propTipsArr": "{num} Artículos", - "propTips": "{num} Claves", - "propTipArr": "PLACEHOLDER0___ Artículo", - "propTip": "{num} Clave", - "stateTab": "Estado", - "settingsTab": "Ajustes", - "toolbarTitle": "Individualización", - "toolbarPreload": "Guiones y estilos", - "components": "Componentes activos", - "modals": "modales in-app", - "expandTip": "Haga clic para mostrar los datos de {component}.", - "collapseTip": "Haga clic para ocultar los datos de {component}.", - "layers": "Capas", - "activatelayers": "Utilizar capas dinámicas", - "selectedComponents": "Componentes seleccionados...", - "displayComponents": "control Pantalla", - "lockComponents": "control Posición", - }, - "bottomPanel": { - ...en.bottomPanel, - - "title": "Consultas de datos", - "run": "Ejecutar", - "noSelectedQuery": "Ninguna consulta seleccionada", - "metaData": "Metadatos de la fuente de datos", - "noMetadata": "No hay metadatos disponibles", - "metaSearchPlaceholder": "Buscar metadatos", - "allData": "Todas las mesas", - }, - "rightPanel": { - ...en.rightPanel, - - "propertyTab": "Propiedades", - "noSelectedComps": "No hay componentes seleccionados. Haga clic en un componente para ver sus propiedades.", - "createTab": "Inserte", - "searchPlaceHolder": "Buscar componentes o módulos", - "uiComponentTab": "Componentes", - "extensionTab": "Extensiones", - "modulesTab": "Módulos", - "moduleListTitle": "Módulos", - "pluginListTitle": "Plugins", - "emptyModules": "Los módulos son Mikro-Apps reutilizables. Puede incrustarlos en su App.", - "searchNotFound": "¿No encuentra el componente adecuado?", - "emptyPlugins": "No se han añadido plugins", - "contactUs": "Contacte con nosotros", - "issueHere": "aquí.", - }, - "prop": { - ...en.prop, - - "expand": "Ampliar", - "columns": "Columnas", - "videokey": "Llave de vídeo", - "rowSelection": "Selección de filas", - "toolbar": "Barra de herramientas", - "pagination": "Paginación", - "logo": "Logotipo", - "style": "Estilo", - "inputs": "Entradas", - "meta": "Metadatos", - "data": "Datos", - "hide": "Ocultar", - "loading": "Cargando", - "disabled": "Discapacitados", - "placeholder": "Marcador de posición", - "showClear": "Mostrar botón de borrado", - "showSearch": "Búsqueda en", - "defaultValue": "Valor por defecto", - "required": "Campo obligatorio", - "readOnly": "Sólo lectura", - "readOnlyTooltip": "Los componentes de sólo lectura parecen normales pero no pueden modificarse.", - "minimum": "Mínimo", - "maximum": "Máximo", - "regex": "Regex", - "minLength": "Longitud mínima", - "maxLength": "Longitud máxima", - "height": "Altura", - "width": "Anchura", - "selectApp": "Seleccionar aplicación", - "showCount": "Mostrar recuento", - "textType": "Tipo de texto", - "customRule": "Norma personalizada", - "customRuleTooltip": "Una cadena no vacía indica un error; vacía o nula significa que se ha superado la validación. Ejemplo:", - "manual": "Manual", - "map": "Mapa", - "json": "JSON", - "use12Hours": "Utilice el formato de 12 horas", - "hourStep": "Hora Paso", - "minuteStep": "Paso del minuto", - "secondStep": "Segundo paso", - "minDate": "Fecha mínima", - "maxDate": "Fecha máxima", - "minTime": "Tiempo mínimo", - "maxTime": "Tiempo máximo", - "type": "Tipo", - "showLabel": "Mostrar etiqueta", - "showHeader": "Mostrar cabecera", - "showBody": "Mostrar cuerpo", - "showSider": "Mostrar Sider", - "innerSider": "Páginas interiores", - "showFooter": "Mostrar pie de página", - "maskClosable": "Haga clic fuera para cerrar", - "toggleClose": "Activar el botón Cerrar", - "showMask": "Mostrar máscara", - "textOverflow": "Desbordamiento de texto", - "scrollbar": "Mostrar barras de desplazamiento", - "siderScrollbar": "Mostrar barras de desplazamiento en Sider", - "siderRight": "Show sider a la derecha", - "siderWidth": "Ancho Sider", - "siderWidthTooltip": "La anchura del navegador admite porcentajes (%) y píxeles (px).", - "siderCollapsedWidth": "Sider Anchura colapsada", - "siderCollapsedWidthTooltip": "La anchura colapsada de Sider admite porcentajes (%) y píxeles (px).", - "siderCollapsible": "Sider plegable", - "siderCollapsed": "Sider Colapsado", - "contentScrollbar": "Mostrar barras de desplazamiento en el contenido", - "appID": "Id de aplicación", - "showApp": "Mostrar una aplicación en el área de contenido", - "showAppTooltip": "Puede mostrar aplicaciones completas en el área de contenido. Tenga en cuenta que los módulos no admiten entradas, salidas, eventos ni métodos.", - "baseURL": "URL base de la API", - "horizontal": "Horizontal", - "minHorizontalWidth": "Anchura horizontal mínima", - "component": "Identificadores de componentes propios", - "className": "Nombre de la clase CSS", - "dataTestId": "Identificación individual", - "preventOverwriting": "Evitar la sobreescritura de estilos", - "color": "Color", - "horizontalGridCells": "Celdas de cuadrícula horizontales", - "verticalGridCells": "Celdas de cuadrícula vertical", - "showHorizontalScrollbar": "Mostrar barra de desplazamiento horizontal", - "showVerticalScrollbar": "Mostrar barra de desplazamiento vertical", - "timeZone": "Zona horaria", - }, - "autoHeightProp": { - ...en.autoHeightProp, - - "auto": "Coche", - "fixed": "Fijo", - }, - "textOverflowProp": { - ...en.textOverflowProp, - - "ellipsis": "Mouseover", - "wrap": "Envolver", - }, - "labelProp": { - ...en.labelProp, - - "text": "Etiqueta", - "tooltip": "Información sobre herramientas", - "position": "Posición", - "collapse": "Colapso", - "left": "Izquierda", - "right": "Derecha", - "top": "Top", - "align": "Alineación", - "width": "Anchura", - "widthTooltip": "La anchura de la etiqueta admite porcentajes (%) y píxeles (px).", - }, - "eventHandler": { - ...en.eventHandler, - - "eventHandlers": "Controladores de eventos", - "emptyEventHandlers": "Sin controladores de eventos", - "incomplete": "Selección incompleta", - "inlineEventTitle": "En {eventName}", - "event": "Evento", - "action": "Acción", - "noSelect": "Sin selección", - "runQuery": "Ejecutar una consulta de datos", - "selectQuery": "Seleccionar consulta de datos", - "controlComp": "Control a Component", - "runScript": "Ejecutar JavaScript", - "runScriptPlaceHolder": "Escriba aquí el código", - "component": "Componente", - "method": "Método", - "setTempState": "Establecer un valor de Estado Temporal", - "state": "Estado", - "triggerModuleEvent": "Activar un evento de módulo", - "moduleEvent": "Módulo Evento", - "goToApp": "Ir a otra aplicación", - "queryParams": "Parámetros de consulta", - "hashParams": "Parámetros Hash", - "showNotification": "Mostrar una notificación", - "text": "Texto", - "level": "Nivel", - "duration": "Duración", - "notifyDurationTooltip": "La unidad de tiempo puede ser 's' (segundo, por defecto) o 'ms' (milisegundo). La duración máxima es {max} segundos", - "goToURL": "Abrir una URL", - "openInNewTab": "Abrir en una nueva pestaña", - "copyToClipboard": "Copiar un valor en el portapapeles", - "copyToClipboardValue": "Valor", - "export": "Exportar datos", - "exportNoFileType": "Sin selección (opcional)", - "fileName": "Nombre del archivo", - "fileNameTooltip": "Incluya la extensión para especificar el tipo de archivo, por ejemplo, 'imagen.png'", - "fileType": "Tipo de archivo", - "condition": "Corre sólo cuando...", - "conditionTooltip": "Ejecutar el controlador de eventos sólo cuando esta condición se evalúa como \"true\".", - "debounce": "Rebote para", - "throttle": "Acelerador para", - "slowdownTooltip": "Utiliza debounce o throttle para controlar la frecuencia de los disparos de acción. La unidad de tiempo puede ser \"ms\" (milisegundo, por defecto) o \"s\" (segundo).", - "notHandledError": "No manipulado", - "currentApp": "Actual", - "inputEventHandlers": "Manejadores de eventos de entrada", - "inputEventHandlersDesc": "Controladores de eventos relacionados con la entrada del usuario", - "buttonEventHandlers": "Controladores de eventos de botones", - "buttonEventHandlersDesc": "Controladores de eventos relacionados con pulsaciones de botones", - "changeEventHandlers": "Cambiar los controladores de eventos", - "changeEventHandlersDesc": "Controladores de eventos relacionados con cambios de valor", - "editedEventHandlers": "Editar controladores de eventos", - "editedEventHandlersDesc": "Controladores de eventos relacionados con el estado editado de los elementos", - "clickEventHandlers": "Controladores de eventos de clic", - "clickEventHandlersDesc": "Controladores de eventos relacionados con los clics", - "keyDownEventHandlers": "Manejadores de eventos de teclas pulsadas", - "keyDownEventHandlersDesc": "Controladores de eventos relacionados con eventos de teclas pulsadas", - "checkboxEventHandlers": "Controladores de eventos de casillas de verificación", - "checkboxEventHandlersDesc": "Controladores de Eventos relacionados con Cambios de Casilla", - "dragEventHandlers": "Controladores de eventos de arrastre", - "dragEventHandlersDesc": "Controladores de Eventos relacionados con Eventos de Arrastrar y Soltar", - "elementEventHandlers": "Controladores de eventos de elementos", - "elementEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Elementos de Datos genéricos", - "mediaEventHandlers": "Controladores de eventos multimedia", - "mediaEventHandlersDesc": "Controladores de eventos relacionados con eventos multimedia", - "scannerEventHandlers": "Controladores de eventos del escáner", - "scannerEventHandlersDesc": "Manejadores de eventos relacionados con eventos de escáner", - "chartEventHandlers": "Controladores de eventos de gráficos", - "chartEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Gráficos", - "geoMapEventHandlers": "Manejadores de eventos de Geo Map", - "geoMapEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Geo Mapas", - "stepEventHandlers": "Manejadores de eventos por pasos", - "stepEventHandlersDesc": "Controladores de eventos relacionados con Step UI Events", - "shareEventHandlers": "Compartir controladores de eventos", - "shareEventHandlersDesc": "Manejadores de Eventos relacionados con Compartir Eventos", - "selectEventHandlers": "Seleccionar controladores de eventos", - "selectEventHandlersDesc": "Manejadores de Eventos relacionados con Seleccionar Eventos", - "meetingEventHandlers": "Manejadores de eventos de reuniones", - "meetingEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Reunión", - "collaborationEventHandlers": "Manejadores de eventos de colaboración", - "collaborationEventHandlersDesc": "Manejadores de eventos relacionados con eventos de colaboración", - "set": "Establecer", - "clear": "Claro", - "reset": "Restablecer", - "messageType": "Tipo de mensaje", - "placement": "Colocación", - "description": "Descripción", - }, - "event": { - ...en.event, - - "submit": "Enviar", - "submitDesc": "Activadores al enviar", - "change": "Cambia", - "changeDesc": "Activadores de cambios de valor", - "focus": "Enfoque", - "focusDesc": "Activadores de Focus", - "blur": "Desenfoque", - "blurDesc": "Desenfoque", - "click": "Haga clic en", - "clickDesc": "Disparadores al hacer clic", - "doubleClick": "Doble clic", - "doubleClickDesc": "Disparadores al hacer doble clic", - "rightClick": "Clic derecho", - "rightClickDesc": "Disparadores al hacer clic con el botón derecho", - "keyDown": "Tecla Abajo", - "keyDownDesc": "Disparos al pulsar una tecla", - "select": "Seleccione", - "selectDesc": "Activadores al seleccionar", - "checked": "Comprobado", - "checkedDesc": "Disparadores cuando se marca una casilla de verificación", - "unchecked": "Sin marcar", - "uncheckedDesc": "Disparadores cuando una casilla de verificación está Desmarcada", - "drag": "Arrastre", - "dragDesc": "Activadores de arrastre", - "drop": "Drop", - "dropDesc": "Disparadores al caer", - "open": "Abrir", - "openDesc": "Desencadenantes al abrir", - "mute": "Silenciar", - "muteDesc": "Disparos al silenciar un micrófono", - "unmute": "Desactivar", - "unmuteDesc": "Disparadores al anular el silencio de un micrófono", - "showCamera": "Mostrar cámara", - "showCameraDesc": "Se activa cuando Mostrar cámara está activado", - "hideCamera": "Ocultar cámara", - "hideCameraDesc": "Se activa cuando Mostrar cámara está desactivado", - "shareScreen": "Compartir pantalla", - "shareScreenDesc": "Activadores en la pantalla Compartir", - "shareScreenEnd": "Compartir pantalla Fin", - "shareScreenEndDesc": "Disparadores al final de la pantalla Compartir", - "shareControl": "Compartir Control", - "shareControlDesc": "Activadores del control de acciones", - "shareControlEnd": "Control de acciones Fin", - "shareControlEndDesc": "Activadores en el extremo de control de acciones", - "shareContent": "Compartir contenido", - "shareContentDesc": "Desencadenantes al compartir contenido", - "shareContentEnd": "Compartir contenido Fin", - "shareContentEndDesc": "Desencadenantes al final de Compartir contenido", - "stopShare": "Dejar de compartir", - "stopShareDesc": "Activadores en Stop Share", - "meetingStart": "Inicio de la reunión", - "meetingStartDesc": "Activadores al inicio de la reunión", - "meetingEnd": "Fin de la reunión", - "meetingEndDesc": "Desencadenantes al final de la reunión", - "meetingJoin": "Reunión Únete", - "meetingJoinDesc": "Desencadenantes al unirse a una reunión", - "meetingLeave": "Permiso de reunión", - "meetingLeaveDesc": "Desencadenantes de la baja por reunión", - "play": "Jugar", - "playDesc": "Activadores en Play", - "pause": "Pausa", - "pauseDesc": "Disparadores en pausa", - "ended": "Finalizado", - "endedDesc": "Disparadores en Ended", - "step": "Paso", - "stepDesc": "Desencadenantes en Step", - "next": "Siguiente", - "nextDesc": "Activadores en Siguiente", - "finished": "Terminado", - "finishedDesc": "Desencadenantes al finalizar", - "saved": "Guardado", - "savedDesc": "Disparadores cuando se guarda un elemento", - "edited": "Editado", - "editedDesc": "Se activa cuando se edita un elemento", - "geoMapMove": "Mapa geográfico Mover", - "geoMapMoveDesc": "Disparadores cuando los usuarios mueven Geo Map", - "geoMapZoom": "Mapa geográfico Zoom", - "geoMapZoomDesc": "Disparadores cuando los usuarios hacen zoom en Geo Map", - "geoMapSelect": "Seleccionar mapa geográfico", - "geoMapSelectDesc": "Disparadores cuando los usuarios seleccionan un elemento en Geo Map", - "scannerSuccess": "Éxito del escáner", - "scannerSuccessDesc": "Se activa cuando un escáner explora correctamente", - "scannerError": "Error de escáner", - "scannerErrorDesc": "Disparadores cuando un escáner falla al escanear", - "chartZoom": "Zoom del gráfico", - "chartZoomDesc": "Disparadores en el Zoom del Gráfico", - "chartHover": "Gráfico Hover", - "chartHoverDesc": "Disparadores al pasar el ratón por encima del gráfico", - "chartSelect": "Seleccionar gráfico", - "chartSelectDesc": "Disparadores en la selección de gráficos", - "chartDeselect": "Deseleccionar gráfico", - "chartDeselectDesc": "Desmarcar disparadores en el gráfico", - "close": "Cerrar", - "closeDesc": "Desencadenantes al cerrar", - "parse": "Parse", - "parseDesc": "Disparadores en Parse", - "success": "Éxito", - "successDesc": "Activadores del éxito", - "delete": "Borrar", - "deleteDesc": "Disparadores al suprimir", - "mention": "Mencione", - "mentionDesc": "Activadores de mención", - "search": "Buscar en", - "searchDesc": "Activadores de búsqueda", - "selectedChange": "Cambio de selección", - "selectedChangeDesc": "Desencadenantes de la selección modificada", - "clickExtra": "Haga clic en Acción", - "clickExtraDesc": "Disparadores al hacer clic en un elemento adicional", - "start": "Inicio", - "startDesc": "Disparadores al inicio", - "resume": "Currículum", - "resumeDesc": "Desencadenantes en el currículum", - "countdown": "Cuenta atrás", - "countdownDesc": "Disparos al finalizar la cuenta atrás", - "reset": "Fin de la reinicialización", - "resetDesc": "Disparos al reiniciar el temporizador", - "refresh": "Actualizar", - "refreshDesc": "Activadores al actualizar", - }, - "style": { - ...en.style, - - "boxShadowColor": "Sombra Color", - "boxShadow": "Caja Sombra", - "opacity": "Opacidad", - "animation": "Animación", - "animationIterationCount": "Recuento de iteraciones de animación", - "animationDelay": "Retraso de animación", - "animationDuration": "Duración de la animación", - "resetTooltip": "Restablecer estilos. Borre el campo de entrada para restablecer un estilo individual.", - "textColor": "Color del texto", - "contrastText": "Contraste Color del texto", - "generated": "Generado", - "customize": "Personalice", - "staticText": "Texto estático", - "accent": "Acento", - "validate": "Mensaje de validación", - "border": "Color del borde", - "borderRadius": "Radio del borde", - "borderWidth": "Anchura del borde", - "borderStyle": "Estilo de borde", - "background": "Color de fondo", - "headerBackground": "Color de fondo de la cabecera", - "siderBackground": "Sider Color de fondo", - "footerBackground": "Color de fondo del pie de página", - "fill": "Rellene", - "track": "Pista", - "links": "Enlaces", - "thumb": "Pulgar", - "thumbBorder": "Borde del pulgar", - "checked": "Comprobado", - "unchecked": "Sin marcar", - "handle": "Mango", - "tags": "Etiquetas", - "tagsText": "Etiquetas Texto", - "multiIcon": "Icono de selección múltiple", - "tabText": "Texto de la pestaña", - "tabAccent": "Acento de lengüeta", - "checkedBackground": "Color de fondo marcado", - "uncheckedBackground": "Color de fondo sin marcar", - "uncheckedBorder": "Color del borde sin marcar", - "indicatorBackground": "Indicador Color de fondo", - "tableCellText": "Texto celular", - "selectedRowBackground": "Color de fondo de la fila seleccionada", - "hoverRowBackground": "Color de fondo de la fila Hover", - "hoverBackground": "Color de fondo", - "textTransform": "Transformación de texto", - "textDecoration": "Decoración de texto", - "alternateRowBackground": "Color de fondo de fila alternativo", - "tableHeaderBackground": "Color de fondo de la cabecera", - "tableHeaderText": "Texto de cabecera", - "toolbarBackground": "Color de fondo de la barra de herramientas", - "toolbarText": "Texto de la barra de herramientas", - "pen": "Pluma", - "footerIcon": "Icono de pie de página", - "tips": "Consejos", - "margin": "Margen", - "padding": "Acolchado", - "marginLeft": "Margen izquierdo", - "marginRight": "Margen derecho", - "marginTop": "Margen superior", - "marginBottom": "Margen inferior", - "containerHeaderPadding": "Relleno de cabecera", - "containerFooterPadding": "Relleno de pie de página", - "containerSiderPadding": "Acolchado Sider", - "containerBodyPadding": "Acolchado corporal", - "minWidth": "Anchura mínima", - "aspectRatio": "Relación de aspecto", - "text": "Texto", - "textSize": "Tamaño del texto", - "textWeight": "Peso del texto", - "fontFamily": "Familia de fuentes", - "fontStyle": "Estilo de fuente", - "backgroundImage": "Imagen de fondo", - "backgroundImageRepeat": "Repetición de fondo", - "backgroundImageSize": "Tamaño del fondo", - "backgroundImagePosition": "Antecedentes", - "backgroundImageOrigin": "Antecedentes Origen", - "headerBackgroundImage": "Imagen de fondo", - "headerBackgroundImageRepeat": "Repetición de la imagen de fondo", - "headerBackgroundImageSize": "Tamaño de la imagen de fondo", - "headerBackgroundImagePosition": "Posición de la imagen de fondo", - "headerBackgroundImageOrigin": "Origen de la imagen de fondo", - "footerBackgroundImage": "Imagen de fondo", - "footerBackgroundImageRepeat": "Repetición de la imagen de fondo", - "footerBackgroundImageSize": "Tamaño de la imagen de fondo", - "footerBackgroundImagePosition": "Posición de la imagen de fondo", - "footerBackgroundImageOrigin": "Origen de la imagen de fondo", - "rotation": "Rotación", - "alternateBackground": "Color de fondo alternativo", - "headerText": "Color del texto de cabecera", - "labelColor": "Color de la etiqueta", - "label": "Color de la etiqueta", - "lineHeight": "Altura de línea", - "subTitleColor": "Color del subtítulo", - "titleText": "Título Color", - "success": "Éxito Color", - "siderBackgroundImage": "Sider Imagen de fondo", - "siderBackgroundImageRepeat": "Sider Repetición de la imagen de fondo", - "siderBackgroundImageSize": "Sider Tamaño de la imagen de fondo", - "siderBackgroundImagePosition": "Sider Posición de la imagen de fondo", - "siderBackgroundImageOrigin": "Sider Origen de la imagen de fondo", - "activeBackground": "Color de fondo activo", - "labelBackground": "Color de fondo de la etiqueta", - - "radiusTip": "Especifica el radio de las esquinas del elemento. Ejemplo: 5px, 50% o 1em.", - "gapTip": "Especifica el espacio entre filas y columnas en un contenedor de cuadrícula o flex. Ejemplo: 10px, 1rem o 5%.", - "cardRadiusTip": "Define el radio de las esquinas para los componentes de tarjeta. Ejemplo: 10px, 15px.", - "borderWidthTip": "Especifica el ancho del borde del elemento. Ejemplo: 1px, 0.5em o fino.", - "borderStyleTip": "Establece el estilo del borde. Ejemplo: sólido, discontinuo, punteado o ninguno.", - "marginTip": "Define el margen exterior alrededor de un elemento. Ejemplo: 10px, 2em o auto. También se puede combinar como: 0px 20px. O incluso separar para las 4 direcciones como: 0px 1px 5px 2px.", - "directionTip": "Especifica la dirección del diseño. Ejemplo: row, column o row-reverse.", - "detailSizeTip": "Define el tamaño de detalles específicos en el diseño. Ejemplo: 10px, 2em o 80%.", - "chartOpacityTip": "Especifica la opacidad del gráfico. Ejemplo: 1 (opaco), 0.5 (50% transparente).", - "chartBoxShadowTip": "Define la sombra proyectada por el cuadro del gráfico. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", - "chartBorderStyleTip": "Establece el estilo del borde del gráfico. Ejemplo: sólido, discontinuo o punteado.", - "chartBorderRadiusTip": "Especifica el radio de las esquinas del borde del gráfico. Ejemplo: 10px, 20%.", - "chartBorderWidthTip": "Especifica el ancho del borde del gráfico. Ejemplo: 2px, 0.5em.", - "chartTextSizeTip": "Especifica el tamaño de la fuente para el texto del gráfico. Ejemplo: 16px, 1em o 120%.", - "chartTextWeightTip": "Especifica el peso de la fuente para el texto del gráfico. Ejemplo: normal, negrita o 700.", - "chartFontFamilyTip": "Especifica la familia de fuentes para el texto del gráfico. Ejemplo: Arial, Helvetica o 'Times New Roman'.", - "chartFontStyleTip": "Especifica el estilo de la fuente para el texto del gráfico. Ejemplo: normal, cursiva o oblicua.", - "animationIterationCountTip": "Define cuántas veces debe ejecutarse una animación. Ejemplo: infinito, 1 o 3.", - "opacityTip": "Establece el nivel de transparencia del elemento. Ejemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisible).", - "boxShadowColorTip": "Define el color de la sombra del cuadro. Ejemplo: rgba(0, 0, 0, 0.3), #FF5733.", - "chartBackgroundColorTip": "Establece el color de fondo del gráfico. Ejemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", - "chartGradientColorTip": "Especifica los colores degradados para el fondo del gráfico. Ejemplo: linear-gradient(to right, #ff7e5f, #feb47b).", - "chartShadowColorTip": "Define el color de la sombra del gráfico. Ejemplo: rgba(0, 0, 0, 0.2), #333333.", - "chartBorderColorTip": "Especifica el color del borde del gráfico. Ejemplo: #000000, rgba(0, 0, 0, 0.5).", - "chartTextColorTip": "Establece el color del texto del gráfico. Ejemplo: #333333, rgba(51, 51, 51, 1).", - "boxShadowTip": "Define la sombra proyectada por un elemento. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", - "animationDelayTip": "Especifica el retraso antes de que comience la animación. Ejemplo: 1s, 500ms, 0.", - "animationDurationTip": "Establece la duración de la animación. Ejemplo: 2s, 3s, 500ms.", - "paddingTip": "Define el espacio interior dentro de un elemento. Ejemplo: 10px, 2em, 5%. También se puede combinar como: 0px 20px. O separar para las 4 direcciones: 10px 21px 5px 20px.", - "containerHeaderPaddingTip": "Define el espacio interior para el encabezado del contenedor. Ejemplo: 10px, 1rem.", - "containerSiderPaddingTip": "Define el espacio interior para el lateral del contenedor. Ejemplo: 8px, 1em.", - "containerFooterPaddingTip": "Define el espacio interior para el pie de página del contenedor. Ejemplo: 12px, 1rem.", - "containerBodyPaddingTip": "Define el espacio interior para el cuerpo del contenedor. Ejemplo: 15px, 2em.", - "textSizeTip": "Especifica el tamaño de la fuente del texto. Ejemplo: 14px, 1.2em, 110%.", - "textWeightTip": "Especifica el peso de la fuente del texto. Ejemplo: normal, negrita, 400.", - "fontFamilyTip": "Especifica la familia de fuentes del texto. Ejemplo: Arial, Verdana, 'Courier New'.", - "textDecorationTip": "Define la decoración del texto. Ejemplo: subrayado, tachado, ninguno.", - "textTransformTip": "Especifica la capitalización del texto. Ejemplo: mayúsculas, minúsculas, capitalizar.", - "fontStyleTip": "Define el estilo de la fuente del texto. Ejemplo: normal, cursiva, oblicua.", - "backgroundImageTip": "Especifica la imagen de fondo de un elemento. Ejemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", - "headerBackgroundImageTip": "Especifica la imagen de fondo para el encabezado. Ejemplo: url('header.jpg').", - "footerBackgroundImageTip": "Especifica la imagen de fondo para el pie de página. Ejemplo: url('footer.jpg').", - "backgroundImageRepeatTip": "Define cómo se repite la imagen de fondo. Ejemplo: no-repeat, repeat-x, repeat-y.", - "headerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del encabezado. Ejemplo: repeat-x, no-repeat.", - "footerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del pie de página. Ejemplo: repeat-y, no-repeat.", - "backgroundImageSizeTip": "Define el tamaño de la imagen de fondo. Ejemplo: cover, contain, 50% 50%.", - "backgroundImagePositionTip": "Define la posición de la imagen de fondo. Ejemplo: center, top right, 10% 20%.", - "backgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo. Ejemplo: padding-box, border-box, content-box.", - "headerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del encabezado. Ejemplo: padding-box, border-box, content-box.", - "footerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del pie de página. Ejemplo: padding-box, border-box, content-box.", - "rotationTip": "Especifica el ángulo de rotación del elemento. Ejemplo: 45deg, 90deg, -180deg.", - "lineHeightTip": "Define la altura de una línea de texto. Ejemplo: 1.5, 2, 120%." - - }, - "export": { - ...en.export, - - "hiddenDesc": "Si es true, el componente se oculta", - "disabledDesc": "Si es true, el componente está desactivado y no es interactivo", - "visibleDesc": "Si es verdadero, el componente es visible", - "inputValueDesc": "Valor actual de la entrada", - "invalidDesc": "Indica si el valor no es válido", - "placeholderDesc": "Texto de marcador de posición cuando no se establece ningún valor", - "requiredDesc": "Si es verdadero, se requiere un valor válido", - "submitDesc": "Enviar formulario", - "richTextEditorValueDesc": "Valor actual del Editor", - "richTextEditorReadOnlyDesc": "Si es true, el Editor es de sólo lectura", - "richTextEditorHideToolBarDesc": "Si es true, la barra de herramientas se oculta", - "jsonEditorDesc": "Datos JSON actuales", - "sliderValueDesc": "Valor seleccionado actualmente", - "sliderMaxValueDesc": "Valor máximo de la corredera", - "sliderMinValueDesc": "Valor mínimo de la corredera", - "sliderStartDesc": "Valor del punto de partida seleccionado", - "sliderEndDesc": "Valor del punto final seleccionado", - "ratingValueDesc": "Clasificación seleccionada actualmente", - "ratingMaxDesc": "Valor nominal máximo", - "datePickerValueDesc": "Fecha seleccionada actualmente", - "datePickerFormattedValueDesc": "Fecha seleccionada con formato", - "datePickerTimestampDesc": "Marca de tiempo de la fecha seleccionada", - "dateRangeStartDesc": "Fecha de inicio de la serie", - "dateRangeEndDesc": "Fecha final del intervalo", - "dateRangeStartTimestampDesc": "Fecha de inicio", - "dateRangeEndTimestampDesc": "Fecha de finalización", - "dateRangeFormattedValueDesc": "Intervalo de fechas formateado", - "dateRangeFormattedStartValueDesc": "Fecha de inicio con formato", - "dateRangeFormattedEndValueDesc": "Fecha final con formato", - "timePickerValueDesc": "Hora seleccionada actualmente", - "timePickerFormattedValueDesc": "Hora seleccionada con formato", - "timeRangeStartDesc": "Hora de inicio de la cadena", - "timeRangeEndDesc": "Hora de finalización de la gama", - "timeRangeFormattedValueDesc": "Intervalo de tiempo formateado", - "timeRangeFormattedStartValueDesc": "Hora de inicio con formato", - "timeRangeFormattedEndValueDesc": "Hora final con formato", - "timeZone": "Huso horario", - "timeZoneDesc": "Zona horaria de la fecha seleccionada", - }, - "validationDesc": { - ...en.validationDesc, - - "email": "Introduzca una dirección de correo electrónico válida", - "url": "Introduzca una URL válida", - "regex": "Haga coincidir el patrón especificado", - "maxLength": "Demasiados caracteres, actual: {length}, máximo: {maxLength}", - "minLength": "No hay suficientes caracteres, actual: {length}, mínimo: {minLength}", - "maxValue": "El valor excede el máximo, actual: {value}, máximo: {max}", - "minValue": "Valor por debajo del mínimo, actual: {value}, mínimo: {min}", - "maxTime": "El tiempo excede el máximo, actual: {time}, máximo: {maxTime}", - "minTime": "Tiempo por debajo del mínimo, actual: {time}, mínimo: {minTime}", - "maxDate": "La fecha excede el máximo, actual: {date}, máximo: {maxDate}", - "minDate": "Fecha por debajo del mínimo, actual: {date}, mínimo: {minDate}", - }, - "query": { - ...en.query, - - "noQueries": "No hay consultas de datos disponibles.", - "queryTutorialButton": "Ver los documentos de {value}.", - "datasource": "Sus fuentes de datos", - "newDatasource": "Nueva fuente de datos", - "generalTab": "General", - "notificationTab": "Notificación", - "advancedTab": "Avanzado", - "showFailNotification": "Mostrar notificación en caso de fallo", - "failCondition": "Condiciones de fallo", - "failConditionTooltip1": "Personalice las condiciones de fallo y las notificaciones correspondientes.", - "failConditionTooltip2": "Si alguna condición resulta verdadera, la consulta se marca como fallida y se activa la notificación correspondiente.", - "showSuccessNotification": "Mostrar notificación de éxito", - "successMessageLabel": "Mensaje de éxito", - "successMessage": "Corre con éxito", - "notifyDuration": "Duración", - "notifyDurationTooltip": "Duración de la notificación. La unidad de tiempo puede ser \"s\" (segundo, por defecto) o \"ms\" (milisegundo). El valor por defecto es {default}s. El valor máximo es {max}s.", - "successMessageWithName": "{name} ejecución correcta", - "failMessageWithName": "{name} ejecución fallida: {result}", - "showConfirmationModal": "Mostrar modal de confirmación antes de ejecutar", - "confirmationMessageLabel": "Mensaje de confirmación", - "confirmationMessage": "¿Está seguro de que desea ejecutar esta consulta de datos?", - "newQuery": "Nueva consulta de datos", - "newFolder": "Nueva carpeta", - "recentlyUsed": "Usado recientemente", - "folder": "Carpeta", - "folderNotEmpty": "La carpeta no está vacía", - "dataResponder": "Respuesta de datos", - "tempState": "Estado Temporal", - "transformer": "Transformador", - "quickRestAPI": "Consulta REST", - "quickStreamAPI": "Consulta de flujos", - "quickGraphql": "Consulta GraphQL", - "lowcoderAPI": "API Lowcoder", - "executeJSCode": "Ejecutar código JavaScript", - "importFromQueryLibrary": "Importar desde la biblioteca de consultas", - "importFromFile": "Importar desde archivo", - "triggerType": "Activado cuando...", - "triggerTypeAuto": "Cuando cambian las entradas o después de que se cargue la aplicación (página)", - "triggerTypePageLoad": "Después de que se cargue la aplicación (página)", - "triggerTypeManual": "Solo cuando lo activas manualmente", - "triggerTypeInputChange": "Cuando cambian las entradas", - "triggerTypeQueryExec": "Después de la ejecución de la consulta", - "triggerTypeTimeout": "Después de que la aplicación (página) se carga y se produce el tiempo de espera", - "delayTime": "Tiempo de retraso", - "chooseDataSource": "Elegir fuente de datos", - "method": "Método", - "updateExceptionDataSourceTitle": "Actualizar fuente de datos que falla", - "updateExceptionDataSourceContent": "Actualice la siguiente consulta con la misma fuente de datos que falla:", - "update": "Actualización", - "disablePreparedStatement": "Desactivar declaraciones preparadas", - "disablePreparedStatementTooltip": "Desactivar las sentencias preparadas puede generar SQL dinámico, pero aumenta el riesgo de inyección SQL.", - "timeout": "Tiempo de espera después de", - "timeoutTooltip": "Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor por defecto: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Por ejemplo, 300 (es decir, 300 ms), 800 ms, 5 s.", - "periodic": "Ejecute esta consulta de datos periódicamente", - "periodicTime": "Periodo", - "periodicTimeTooltip": "Periodo entre ejecuciones sucesivas. Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor mínimo: 100ms. La ejecución periódica se desactiva para valores inferiores a 100ms. Por ejemplo, 300 (es decir, 300ms), 800ms, 5s.", - "cancelPrevious": "Ignorar los resultados de ejecuciones anteriores no finalizadas", - "cancelPreviousTooltip": "Si se desencadena una nueva ejecución, se ignorará el resultado de las ejecuciones anteriores no completadas si no se completaron, y estas ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", - "dataSourceStatusError": "Si se desencadena una nueva ejecución, el resultado de las ejecuciones anteriores no completadas se ignorará si las ejecuciones anteriores no se completaron, y las ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", - "success": "Éxito", - "fail": "Fallo", - "successDesc": "Se activa cuando la ejecución tiene éxito", - "failDesc": "Se activa cuando falla la ejecución", - "fixedDelayError": "Consulta no ejecutada", - "execSuccess": "Corre con éxito", - "execFail": "Ejecución fallida", - "execIgnored": "Los resultados de esta consulta fueron ignorados", - "deleteSuccessMessage": "Eliminado con éxito. Puede utilizar {undoKey} para deshacer el borrado.", - "dataExportDesc": "Datos obtenidos por la consulta actual", - "codeExportDesc": "Código de estado actual de la consulta", - "successExportDesc": "Si la consulta actual se ha ejecutado correctamente", - "messageExportDesc": "Información devuelta por la consulta actual", - "extraExportDesc": "Otros datos de la consulta actual", - "isFetchingExportDesc": "Es la consulta actual en la solicitud", - "runTimeExportDesc": "Tiempo de ejecución de la consulta actual (ms)", - "latestEndTimeExportDesc": "Último tiempo de ejecución", - "triggerTypeExportDesc": "Tipo de disparador", - "chooseResource": "Elija un recurso", - "createDataSource": "Crear una nueva fuente de datos", - "editDataSource": "Editar", - "datasourceName": "Nombre", - "datasourceNameRuleMessage": "Introduzca un nombre de fuente de datos", - "generalSetting": "Ajustes generales", - "advancedSetting": "Configuración avanzada", - "port": "Puerto", - "portRequiredMessage": "Introduzca un puerto", - "portErrorMessage": "Introduzca un puerto correcto", - "connectionType": "Tipo de conexión", - "regular": "Regular", - "host": "Anfitrión", - "hostRequiredMessage": "Introduzca un nombre de dominio de host o una dirección IP", - "userName": "Nombre de usuario", - "password": "Contraseña", - "encryptedServer": "-------- Cifrado en el lado del servidor --------", - "uriRequiredMessage": "Introduzca un URI", - "urlRequiredMessage": "Introduzca una URL", - "uriErrorMessage": "Introduzca un URI correcto", - "urlErrorMessage": "Introduzca una URL correcta", - "httpRequiredMessage": "Introduzca http:// o https://", - "databaseName": "Nombre de la base de datos", - "databaseNameRequiredMessage": "Introduzca el nombre de la base de datos", - "useSSL": "Utilizar SSL", - "userNameRequiredMessage": "Introduzca su nombre", - "passwordRequiredMessage": "Introduzca su contraseña", - "authentication": "Autenticación", - "authenticationType": "Tipo de autenticación", - "sslCertVerificationType": "Verificación de certificados SSL", - "sslCertVerificationTypeDefault": "Verificar CA Cert", - "sslCertVerificationTypeSelf": "Verificar certificado autofirmado", - "sslCertVerificationTypeDisabled": "Discapacitados", - "selfSignedCert": "Certificado autofirmado", - "selfSignedCertRequireMsg": "Introduzca su certificado", - "enableTurnOffPreparedStatement": "Activar la conmutación de sentencias preparadas para consultas", - "enableTurnOffPreparedStatementTooltip": "Puede activar o desactivar las sentencias preparadas en la pestaña Avanzadas de la consulta", - "serviceName": "Nombre del servicio", - "serviceNameRequiredMessage": "Introduzca el nombre de su servicio", - "useSID": "Utilizar SID", - "connectSuccessfully": "Conexión correcta", - "saveSuccessfully": "Guardado correctamente", - "database": "Base de datos", - "cloudHosting": "Lowcoder alojado en la nube no puede acceder a los servicios locales utilizando 127.0.0.1 o localhost. Intente conectarse a fuentes de datos de redes públicas o utilice un proxy inverso para servicios privados.", - "notCloudHosting": "Para el despliegue alojado en Docker, Lowcoder utiliza redes puente, por lo que 127.0.0.1 y localhost no son válidos para las direcciones de host. Para acceder a las fuentes de datos de la máquina local, consulte", - "howToAccessHostDocLink": "Cómo acceder a la API/DB del host", - "returnList": "Devolución", - "chooseDatasourceType": "Elija el tipo de fuente de datos", - "viewDocuments": "Ver documentos", - "testConnection": "Conexión de prueba", - "save": "Guardar", - "whitelist": "Lista de permisos", - "whitelistTooltip": "Añada las direcciones IP de Lowcoder a su lista de fuentes de datos permitidas según sea necesario.", - "address": "Dirección:", - "nameExists": "El nombre {name} ya existe", - "jsQueryDocLink": "Acerca de JavaScript Query", - "dynamicDataSourceConfigLoadingText": "Cargando configuración de fuente de datos adicional...", - "dynamicDataSourceConfigErrText": "No se ha podido cargar la configuración adicional de la fuente de datos.", - "retry": "Reintentar", - "categoryDatabase": "Base de Datos", - "categoryBigdata": "Big Data", - "categoryAi": "IA", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Desarrollo de Aplicaciones", - "categoryWorkflow": "Flujo de Trabajo", - "categoryMessaging": "Mensajería", - "categoryAssets": "Recursos y Almacenamiento", - "categoryProjectManagement": "Gestión de Proyectos", - "categoryCrm": "CRM", - "categoryEcommerce": "Comercio Electrónico", - "categoryWebscrapers": "Raspadores Web & Open Data", - "categoryDocumentHandling": "Generación de Informes y Documentos", - "categoryRPA": "Automatización de Procesos Robóticos", - "componentsUsingQueryTitle": "Uso de la consulta", - "componentsUsingQuery": "Dónde se usa esta consulta", - "variables": "Variables" - }, - "sqlQuery": { - ...en.sqlQuery, - - "keyValuePairs": "Pares clave-valor", - "object": "Objeto", - "allowMultiModify": "Permitir la modificación de varias filas", - "allowMultiModifyTooltip": "Si se selecciona, se operan todas las filas que cumplen las condiciones. En caso contrario, sólo se operará sobre la primera fila que cumpla las condiciones.", - "array": "Matriz", - "insertList": "Insertar lista", - "insertListTooltip": "Valores insertados cuando no existen", - "filterRule": "Regla de filtrado", - "updateList": "Actualizar lista", - "updateListTooltip": "Los valores actualizados tal como existen pueden ser anulados por los mismos valores de la lista de inserción", - "sqlMode": "Modo SQL", - "guiMode": "Modo GUI", - "operation": "Operación", - "insert": "Inserte", - "upsert": "Insertar, pero actualizar si hay conflicto", - "update": "Actualización", - "delete": "Borrar", - "bulkInsert": "Inserción a granel", - "bulkUpdate": "Actualización masiva", - "table": "Cuadro", - "primaryKeyColumn": "Columna de clave primaria", - }, - "EsQuery": { - ...en.EsQuery, - - "rawCommand": "Comando en bruto", - "queryTutorialButton": "Ver documentos de la API de Elasticsearch", - "request": "Solicitar", - }, - "googleSheets": { - ...en.googleSheets, - - "rowIndex": "Índice de filas", - "spreadsheetId": "ID de la hoja de cálculo", - "sheetName": "Nombre de la hoja", - "readData": "Leer datos", - "appendData": "Añadir fila", - "updateData": "Actualizar Fila", - "deleteData": "Borrar fila", - "clearData": "Borrar fila", - "serviceAccountRequireMessage": "Introduzca su cuenta de servicio", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Ordenar", - "sortPlaceholder": "Nombre", - }, - "queryLibrary": { - ...en.queryLibrary, - - "export": "Exportar a JSON", - "noInput": "La consulta actual no tiene entrada", - "inputName": "Nombre", - "inputDesc": "Descripción", - "emptyInputs": "Sin entradas", - "clickToAdd": "Añadir", - "chooseQuery": "Seleccione Consulta", - "viewQuery": "Ver consulta", - "chooseVersion": "Elegir versión", - "latest": "Última", - "publish": "Publique", - "historyVersion": "Historia Versión", - "deleteQueryLabel": "Borrar consulta", - "deleteQueryContent": "No se puede recuperar la consulta después de borrarla. ¿Borrar la consulta?", - "run": "Ejecutar", - "readOnly": "Sólo lectura", - "exit": "Salida", - "recoverAppSnapshotContent": "Restaurar la consulta actual a la versión {version}.", - "searchPlaceholder": "Consulta de búsqueda", - "allQuery": "Todas las consultas", - "deleteQueryTitle": "Borrar consulta", - "unnamed": "Sin nombre", - "publishNewVersion": "Publicar nueva versión", - "publishSuccess": "Publicado con éxito", - "version": "Versión", - "desc": "Descripción", - }, - "snowflake": { - ...en.snowflake, - - "accountIdentifierTooltip": "Véase", - "extParamsTooltip": "Configurar parámetros de conexión adicionales", - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - - "queryOrgUsers": "Consulta de usuarios del espacio de trabajo", - }, - "redisQuery": { - ...en.redisQuery, - - "rawCommand": "Comando en bruto", - "command": "Comando", - "queryTutorial": "Ver documentos sobre los comandos de Redis", - }, - "httpQuery": { - ...en.httpQuery, - - "bodyFormDataTooltip": "Si se selecciona {type}, el formato del valor debe ser {object}. Ejemplo: ___TITULAR2___", - "text": "Texto", - "file": "Archivo", - "extraBodyTooltip": "Los valores clave del cuerpo adicional se añadirán al cuerpo con tipos de datos JSON o de formulario.", - "forwardCookies": "Adelante Cookies", - "forwardAllCookies": "Reenviar todas las cookies", - }, - "smtpQuery": { - ...en.smtpQuery, - - "attachment": "Adjunto", - "attachmentTooltip": "Se puede utilizar con el componente de carga de archivos, los datos deben ser convertidos a:", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Transmisor", - "recipient": "Recipient", - "carbonCopy": "Copia al carbón", - "blindCarbonCopy": "Copia oculta", - "subject": "Asunto", - "content": "Contenido", - "contentTooltip": "Admite la introducción de texto o HTML", - }, - "uiCompCategory": { - ...en.uiCompCategory, - - "dashboards": "Cuadros de mando e informes", - "layout": "Diseño y navegación", - "forms": "Recogida de datos y formularios", - "collaboration": "Reuniones y colaboración", - "projectmanagement": "Gestión de proyectos", - "scheduling": "Calendario y programación", - "documents": "Gestión de documentos y archivos", - "itemHandling": "Gestión de artículos y firmas", - "multimedia": "Multimedia y animación", - "integration": "Integración y ampliación", - }, - "uiComp": { - ...en.uiComp, - - "autoCompleteCompName": "Auto Complete", - "autoCompleteCompDesc": "Un campo de entrada que ofrece sugerencias a medida que se escribe, lo que mejora la experiencia del usuario y la precisión.", - "autoCompleteCompKeywords": "sugerencias, autocompletar, escribir, entrada", - "inputCompName": "Entrada", - "inputCompDesc": "Un campo de entrada de texto básico que permite a los usuarios introducir y editar texto.", - "inputCompKeywords": "texto, entrada, campo, editar", - "textAreaCompName": "Área de texto", - "textAreaCompDesc": "Una entrada de texto de varias líneas para contenidos más largos, como comentarios o descripciones.", - "textAreaCompKeywords": "multilínea, textarea, entrada, texto", - "passwordCompName": "Contraseña", - "passwordCompDesc": "Un campo seguro para introducir la contraseña, enmascarando los caracteres para mayor privacidad.", - "passwordCompKeywords": "contraseña, seguridad, entrada, oculto", - "richTextEditorCompName": "Editor de texto enriquecido", - "richTextEditorCompDesc": "Un editor de texto avanzado que admite numerosas opciones de formato, como negrita, cursiva y listas.", - "richTextEditorCompKeywords": "editor, texto, formato, contenido enriquecido", - "numberInputCompName": "Número Entrada", - "numberInputCompDesc": "Un campo específico para la introducción de datos numéricos, con controles para aumentar y disminuir los valores.", - "numberInputCompKeywords": "número, entrada, incremento, decremento", - "sliderCompName": "Deslizador", - "sliderCompDesc": "Componente gráfico deslizante que permite seleccionar un valor o un intervalo dentro de una escala definida.", - "sliderCompKeywords": "deslizador, gama, entrada, gráfico", - "rangeSliderCompName": "Deslizador de gama", - "rangeSliderCompDesc": "Un control deslizante de doble asa para seleccionar un rango de valores, útil para filtrar o establecer límites.", - "rangeSliderCompKeywords": "gama, corredera, doble asa, filtro", - "ratingCompName": "Clasificación", - "ratingCompDesc": "Un componente para capturar las valoraciones de los usuarios, mostradas en forma de estrellas.", - "ratingCompKeywords": "valoración, estrellas, comentarios, aportaciones", - "switchCompName": "Interruptor", - "switchCompDesc": "Un interruptor basculante para decisiones del tipo encendido/apagado o sí/no.", - "switchCompKeywords": "conmutador, interruptor, encendido/apagado, control", - "selectCompName": "Seleccione", - "selectCompDesc": "Un menú desplegable para seleccionar entre una lista de opciones.", - "selectCompKeywords": "desplegable, seleccionar, opciones, menú", - "multiSelectCompName": "Multiselect", - "multiSelectCompDesc": "Componente que permite seleccionar varios elementos de una lista desplegable.", - "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", - "cascaderCompName": "Cascader", - "cascaderCompDesc": "Un desplegable de varios niveles para la selección jerárquica de datos, como la selección de una ubicación.", - "cascaderCompKeywords": "cascada, jerárquico, desplegable, niveles", - "checkboxCompName": "Casilla de verificación", - "checkboxCompDesc": "Una casilla de verificación estándar para opciones que pueden seleccionarse o deseleccionarse.", - "checkboxCompKeywords": "casilla, opciones, seleccionar, alternar", - "radioCompName": "Radio", - "radioCompDesc": "Botones de radio para seleccionar una opción de un conjunto, donde sólo se permite una elección.", - "radioCompKeywords": "radio, botones, seleccionar, elección única", - "segmentedControlCompName": "Control segmentado", - "segmentedControlCompDesc": "Un control con opciones segmentadas para alternar rápidamente entre varias opciones.", - "segmentedControlCompKeywords": "segmentado, control, alternar, opciones", - "stepControlCompName": "Control de pasos", - "stepControlCompDesc": "Un control con opciones de pasos para ofrecer pasos visuales guiados para aplicaciones como formularios o asistentes.", - "stepControlCompKeywords": "pasos, control, alternar, opciones", - "fileUploadCompName": "Carga de archivos", - "fileUploadCompDesc": "Un componente para cargar archivos, con soporte para arrastrar y soltar y selección de archivos.", - "fileUploadCompKeywords": "archivo, cargar, arrastrar y soltar, seleccionar", - "dateCompName": "Fecha", - "dateCompDesc": "Un componente selector de fechas para seleccionar fechas de una interfaz de calendario.", - "dateCompKeywords": "fecha, selector, calendario, seleccionar", - "dateRangeCompName": "Intervalo de fechas", - "dateRangeCompDesc": "Componente que permite seleccionar un intervalo de fechas, útil para sistemas de reservas o filtros.", - "dateRangeCompKeywords": "daterange, seleccionar, reservar, filtrar", - "timeCompName": "Tiempo", - "timeCompDesc": "Un componente de selección horaria para elegir determinadas horas del día.", - "timeCompKeywords": "hora, selector, seleccionar, reloj", - "timeRangeCompName": "Intervalo de tiempo", - "timeRangeCompDesc": "Componente que permite seleccionar un intervalo de tiempo, utilizado a menudo en aplicaciones de programación.", - "timeRangeCompKeywords": "timerange, seleccionar, programación, duración", - "buttonCompName": "Botón de formulario", - "buttonCompDesc": "Un componente de botón versátil para enviar formularios, desencadenar acciones o navegar.", - "buttonCompKeywords": "botón, enviar, acción, navegar", - "meetingControlCompName": "Botón Icono", - "meetingCompDesc": "Un botón para controlar funciones como iniciar, finalizar, silenciar o compartir.", - "meetingCompKeywords": "control, botón, inicio, fin", - "linkCompName": "Enlace", - "linkCompDesc": "Componente de visualización de hipervínculos para navegar o enlazar con recursos externos.", - "linkCompKeywords": "enlace, hipervínculo, navegación, externo", - "scannerCompName": "Escáner", - "scannerCompDesc": "Un componente para escanear códigos de barras, códigos QR y otros datos similares.", - "scannerCompKeywords": "escáner, código de barras, código QR, escanear", - "dropdownCompName": "Desplegable", - "dropdownCompDesc": "Un menú desplegable para mostrar de forma compacta una lista de opciones.", - "dropdownCompKeywords": "desplegable, menú, opciones, seleccionar", - "toggleButtonCompName": "Botón Toggle", - "toggleButtonCompDesc": "Botón que puede alternar entre dos estados u opciones.", - "toggleButtonCompKeywords": "conmutar, botón, interruptor, estado", - "textCompName": "Visualización de texto", - "textCompDesc": "Un componente sencillo para mostrar contenido de texto estático o dinámico con formato Markdown incluido.", - "textCompKeywords": "texto, visualización, estático, dinámico", - "tableCompName": "Cuadro", - "tableCompDesc": "Un componente de tabla enriquecido para mostrar datos en formato de tabla estructurada, con opciones de ordenación y filtrado, visualización de datos en árbol y filas extensibles.", - "tableCompKeywords": "tabla, datos, clasificación, filtrado", - "imageCompName": "Imagen", - "imageCompDesc": "Componente para la visualización de imágenes, compatible con varios formatos basados en URI o datos Base64.", - "imageCompKeywords": "imagen, visualización, medios, Base64", - "progressCompName": "Progreso", - "progressCompDesc": "Indicador visual de progreso, utilizado normalmente para mostrar el estado de finalización de una tarea.", - "progressCompKeywords": "progreso, indicador, estado, tarea", - "progressCircleCompName": "Círculo de Progreso", - "progressCircleCompDesc": "Un indicador de progreso circular, a menudo utilizado para estados de carga o tareas de tiempo limitado.", - "progressCircleCompKeywords": "círculo, progreso, indicador, carga", - "fileViewerCompName": "Visor de archivos", - "fileViewerCompDesc": "Un componente para visualizar varios tipos de archivos, incluidos documentos e imágenes.", - "fileViewerCompKeywords": "archivo, visor, documento, imagen", - "dividerCompName": "Divisor", - "dividerCompDesc": "Componente divisor visual, utilizado para separar contenidos o secciones en un diseño.", - "dividerCompKeywords": "divisor, separador, disposición, diseño", - "qrCodeCompName": "Código QR", - "qrCodeCompDesc": "Componente para mostrar códigos QR, útil para escanearlos rápidamente y transferir información.", - "qrCodeCompKeywords": "Código QR, escaneado, código de barras, información", - "formCompName": "Forma", - "formCompDesc": "Un componente contenedor para construir formularios estructurados con varios tipos de entrada.", - "formCompKeywords": "formulario, entrada, contenedor, estructura", - "jsonSchemaFormCompName": "Formulario de esquema JSON", - "jsonSchemaFormCompDesc": "Un componente de formulario dinámico generado a partir de un esquema JSON.", - "jsonSchemaFormCompKeywords": "JSON, esquema, formulario, dinámico", - "containerCompName": "Contenedor", - "containerCompDesc": "Contenedor de uso general para el diseño y la organización de los elementos de la interfaz de usuario.", - "containerCompKeywords": "contenedor, diseño, organización, interfaz de usuario", - "floatTextContainerCompName": "Contenedor de texto flotante", - "floatTextContainerCompDesc": "Componente contenedor de texto flotante", - "floatTextContainerCompKeywords": "contenedor, diseño, texto, flujo", - "collapsibleContainerCompName": "Contenedor plegable", - "collapsibleContainerCompDesc": "Un contenedor que puede expandirse o contraerse, ideal para gestionar la visibilidad de los contenidos.", - "collapsibleContainerCompKeywords": "plegable, contenedor, expandir, colapsar", - "tabbedContainerCompName": "Contenedor con pestañas", - "tabbedContainerCompDesc": "Un contenedor con navegación por pestañas para organizar el contenido en paneles separados.", - "tabbedContainerCompKeywords": "pestañas, contenedor, navegación, paneles", - "pageLayoutCompName": "Diseño de página", - "pageLayoutCompDesc": "Un contenedor que permite crear un diseño con áreas de cabecera, lateral, pie de página y contenido principal.", - "pageLayoutCompKeywords": "diseño, contenedor, navegación, páginas", - "modalCompName": "Modal", - "modalCompDesc": "Un componente modal emergente para mostrar contenido, alertas o formularios en foco.", - "modalCompKeywords": "modal, popup, alerta, formulario", - "listViewCompName": "Ver lista", - "listViewCompDesc": "Componente para mostrar una lista de elementos o datos, en cuyo interior se pueden colocar otros componentes. Como un repetidor.", - "listViewCompKeywords": "lista, vista, visualización, repetidor", - "gridCompName": "Rejilla", - "gridCompDesc": "Un componente de cuadrícula flexible para crear diseños estructurados con filas y columnas como extensión del componente Vista Lista.", - "gridCompKeywords": "cuadrícula, diseño, filas, columnas", - "navigationCompName": "Navegación", - "navigationCompDesc": "Un componente de navegación para crear menús, migas de pan o pestañas para la navegación por el sitio.", - "navigationCompKeywords": "navegación, menú, migas de pan, pestañas", - "iframeCompName": "IFrame", - "iframeCompDesc": "Un componente de marco en línea para incrustar páginas web externas y aplicaciones o contenido dentro de la aplicación.", - "iframeCompKeywords": "iframe, incrustar, página web, contenido", - "customCompName": "Componente personalizado", - "customCompDesc": "Un componente flexible y programable para crear elementos de interfaz de usuario únicos, definidos por el usuario y adaptados a sus necesidades específicas.", - "customCompKeywords": "personalizado, definido por el usuario, flexible, programable", - "moduleCompName": "Módulo", - "moduleCompDesc": "Utilice módulos para crear microaplicaciones diseñadas para encapsular funcionalidades o características específicas. Los módulos pueden incrustarse y reutilizarse en todas las aplicaciones.", - "moduleCompKeywords": "módulo, microaplicación, funcionalidad, reutilizable", - "jsonExplorerCompName": "Explorador JSON", - "jsonExplorerCompDesc": "Componente para explorar visualmente estructuras de datos JSON e interactuar con ellas.", - "jsonExplorerCompKeywords": "JSON, explorador, datos, estructura", - "jsonEditorCompName": "Editor JSON", - "jsonEditorCompDesc": "Un componente editor para crear y modificar datos JSON con validación y resaltado de sintaxis.", - "jsonEditorCompKeywords": "JSON, editor, modificar, validar", - "treeCompName": "Árbol", - "treeCompDesc": "Componente de estructura de árbol para visualizar datos jerárquicos, como sistemas de archivos u organigramas.", - "treeCompKeywords": "árbol, jerárquico, datos, estructura", - "treeSelectCompName": "Seleccionar árbol", - "treeSelectCompDesc": "Componente de selección que presenta las opciones en formato de árbol jerárquico, lo que permite realizar selecciones organizadas y anidadas.", - "treeSelectCompKeywords": "árbol, seleccionar, jerárquico, anidado", - "audioCompName": "Audio", - "audioCompDesc": "Componente para incrustar contenidos de audio, con controles de reproducción y ajuste del volumen.", - "audioCompKeywords": "audio, reproducción, sonido, música", - "videoCompName": "Vídeo", - "videoCompDesc": "Componente multimedia para incrustar y reproducir contenidos de vídeo, compatible con varios formatos.", - "videoCompKeywords": "vídeo, multimedia, reproducción, incrustación", - "drawerCompName": "Cajón", - "drawerCompDesc": "Componente de panel deslizante que puede utilizarse para navegación adicional o visualización de contenidos, y que suele emerger del borde de la pantalla.", - "drawerCompKeywords": "cajón, corredera, panel, navegación", - "chartCompName": "Gráfico", - "chartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", - "chartCompKeywords": "tabla, gráfico, datos, visualización", - "carouselCompName": "Carrusel de imágenes", - "carouselCompDesc": "Un componente de carrusel giratorio para mostrar imágenes, banners o diapositivas de contenido.", - "carouselCompKeywords": "carrusel, imágenes, rotación, escaparate", - "imageEditorCompName": "Editor de imágenes", - "imageEditorCompDesc": "Componente interactivo para editar y manipular imágenes, que ofrece diversas herramientas y filtros.", - "imageEditorCompKeywords": "imagen, editor, manipular, herramientas", - "mermaidCompName": "Cuadro de sirenas", - "mermaidCompDesc": "Componente para la representación de diagramas y organigramas complejos basados en la sintaxis Mermaid.", - "mermaidCompKeywords": "sirena, gráficos, diagramas, organigramas", - "calendarCompName": "Calendario", - "calendarCompDesc": "Un componente de calendario para mostrar fechas y eventos, con opciones para vistas de mes, semana o día.", - "calendarCompKeywords": "calendario, fechas, eventos, programación", - "signatureCompName": "Firma", - "signatureCompDesc": "Componente para la captura de firmas digitales, útil para procesos de aprobación y verificación.", - "signatureCompKeywords": "firma, digital, aprobación, verificación", - "jsonLottieCompName": "Animación Lottie", - "jsonLottieCompDesc": "Un componente para mostrar animaciones Lottie, que proporciona animaciones ligeras y escalables basadas en datos JSON.", - "jsonLottieCompKeywords": "lottie, animación, JSON, escalable", - "timelineCompName": "Cronología", - "timelineCompDesc": "Componente para mostrar eventos o acciones en orden cronológico, representados visualmente a lo largo de una línea de tiempo lineal.", - "timelineCompKeywords": "cronología, acontecimientos, cronológico, historia", - "commentCompName": "Cómo", - "commentCompDesc": "Un componente para añadir y mostrar comentarios de usuarios, con soporte para respuestas hilvanadas e interacción entre usuarios.", - "commentCompKeywords": "comentario, debate, interacción con el usuario, retroalimentación", - "mentionCompName": "Mencione", - "mentionCompDesc": "Componente que permite mencionar usuarios o etiquetas dentro de un contenido de texto, utilizado normalmente en redes sociales o plataformas colaborativas.", - "mentionCompKeywords": "mencionar, etiquetar, usuario, redes sociales", - "responsiveLayoutCompName": "Diseño adaptable", - "responsiveLayoutCompDesc": "Un componente de maquetación diseñado para adaptarse y responder a diferentes tamaños de pantalla y dispositivos, garantizando una experiencia de usuario coherente.", - "responsiveLayoutCompKeywords": "responsive, diseño, adaptar, tamaño de pantalla", - "iconCompName": "Iconos", - "iconCompDesc": "Utilice varios iconos para mejorar el atractivo visual y la experiencia de usuario de su aplicación.", - "iconCompKeywords": "Iconos, pictogramas, símbolos, formas", - "tourCompName": "Visita", - "tourCompDesc": "Un recorrido por los productos para guiar a los usuarios.", - "tourCompKeywords": "visita, visita de producto, recorrido, recorrido interactivo", - "hillchartCompName": "Hillchart", - "hillchartCompDesc": "Un componente de visualización para mostrar datos sobre el estado de la gestión de proyectos en formato de gráfico de colinas.", - "hillchartCompKeywords": "gestión de proyectos, gráfico de colinas, visualización, datos", - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "Un componente para mostrar mapas interactivos utilizando OpenLayers, con soporte para varias capas de mapas y características.", - "openLayersGeoMapCompKeywords": "openlayers, geo mapa, interactivo, capas de mapa", - "chartsGeoMapCompName": "Gráficos de mapas geográficos", - "chartsGeoMapCompDesc": "Un componente para visualizar datos geográficos en mapas interactivos con gráficos dinámicos", - "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualización, datos geográficos", - "bpmnEditorCompName": "BPMN Editor", - "bpmnEditorCompDesc": "Componente para visualizar, crear y editar diagramas BPMN, compatible con diversos elementos y características de BPMN.", - "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, flujos de trabajo", - "turnstileCaptchaCompName": "Torniquete Captcha", - "turnstileCaptchaCompDesc": "Un componente captcha para verificar usuarios contra bots.", - "turnstileCaptchaCompKeywords": "captcha, verificación, identidad, seguridad", - "pivotTableCompName": "Tabla dinámica", - "pivotTableCompDesc": "Herramienta de resumen y análisis de datos para organizar y agregar datos en formato tabular.", - "pivotTableCompKeywords": "tabla dinámica, datos, análisis, agregación", - "funnelChartCompName": "Gráfico de embudo", - "funnelChartCompDesc": "Una herramienta de visualización para mostrar la reducción progresiva de los datos a medida que pasan por etapas.", - "funnelChartCompKeywords": "gráfico de embudo, ventas, conversiones, proceso", - "gaugeChartCompName": "Cuadro de gálibos", - "gaugeChartCompDesc": "Gráfico que muestra los datos como una lectura en un dial, útil para indicar el estado o nivel de algo.", - "gaugeChartCompKeywords": "gráfico de indicadores, métricas, rendimiento, estado", - "sankeyChartCompName": "Gráfico Sankey", - "sankeyChartCompDesc": "Diagrama de flujo en el que la anchura de las flechas es proporcional al caudal, utilizado para mostrar transferencias de energía, material o costes.", - "sankeyChartCompKeywords": "diagrama de sankey, flujo, energía, costes", - "candleStickChartCompName": "Gráfico de velas", - "candleStickChartCompDesc": "Estilo de gráfico financiero utilizado para describir los movimientos de precios de un valor, derivado o divisa.", - "candleStickChartCompKeywords": "gráfico de velas, acciones, trading, finanzas", - "radarChartCompName": "Gráfico de radar", - "radarChartCompDesc": "Método gráfico de visualización de datos multivariantes en forma de gráfico bidimensional de tres o más variables cuantitativas.", - "radarChartCompKeywords": "gráfico radar, multivariante, análisis de resultados", - "heatmapChartCompName": "Mapa de calor", - "heatmapChartCompDesc": "Representación gráfica de datos en la que los valores individuales se representan como colores.", - "heatmapChartCompKeywords": "mapa de calor, visualización de datos, intensidad", - "graphChartCompName": "Gráfico", - "graphChartCompDesc": "Diagrama que representa una red de nodos conectados por aristas, útil para mostrar interconexiones y relaciones.", - "graphChartCompKeywords": "gráfico, redes, relaciones, nodos", - "treeChartCompName": "Gráfico de árbol", - "treeChartCompDesc": "Diagrama que representa visualmente la jerarquía en una estructura arborescente, mostrando las relaciones entre los distintos nodos.", - "treeChartCompKeywords": "organigrama, jerarquía, organización", - "treemapChartCompName": "Gráfico Treemap", - "treemapChartCompDesc": "Gráfico que utiliza rectángulos anidados para representar proporcionalmente datos jerárquicos.", - "treemapChartCompKeywords": "mapa de árbol, jerarquía, visualización de datos", - "sunburstChartCompName": "Gráfico Sunburst", - "sunburstChartCompDesc": "Técnica de visualización radial de relleno de espacio que ilustra las relaciones jerárquicas a través de capas de un círculo.", - "sunburstChartCompKeywords": "gráfico de sol, radial, jerarquía", - "themeriverChartCompName": "Mapa del río temático", - "themeriverChartCompDesc": "Una visualización parecida a un gráfico de flujo que muestra los cambios en un conjunto de datos a lo largo del tiempo en todas las categorías.", - "themeriverChartCompKeywords": "tema río, series temporales, tendencias", - "basicChartCompName": "Cuadro básico", - "basicChartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", - "basicChartCompKeywords": "tabla, gráfico, datos, visualización", - "shapeCompName": "Formas", - "shapeCompDesc": "Una colección de formas geométricas para diagramas, ilustraciones y visualizaciones.", - "shapeCompKeywords": "formas, geométricas, diagramas, ilustraciones", - "ganttChartCompName": "Diagrama de Gantt", - "ganttChartCompDesc": "Gráfico que ilustra el calendario de un proyecto, mostrando las fechas de inicio y fin de los elementos y las dependencias.", - "ganttChartCompKeywords": "diagrama de gantt, gestión de proyectos, calendario", - "kanbanCompName" : "Kanban Board (preview!)", - "kanbanCompDesc" : "Un tablero de Kanban interactivo para la gestión visual de tareas y flujos de trabajo.", - "kanbanCompKeywords" : "kanban, board, workflow, tasks", - "colorPickerCompName": "Selector de color", - "colorPickerCompDesc": "Selección intuitiva de colores para personalizar.", - "colorPickerCompKeywords": "color, selector, personalización", - "floatButtonCompName": "Botón de flotador", - "floatButtonCompDesc": "Un botón de acción flotante para acciones destacadas y rápidas.", - "floatButtonCompKeywords": "botón flotante, acción, rápida", - "avatarCompName": "Avatar", - "avatarCompDesc": "Muestra avatares de usuario o imágenes de perfil para una identificación personalizada.", - "avatarCompKeywords": "avatar, imagen de perfil, identificación del usuario", - "avatarGroupCompName": "Grupo Avatar", - "avatarGroupCompDesc": "Un grupo de avatares para representar a varios usuarios o entidades de forma compacta y visualmente atractiva.", - "avatarGroupCompKeywords": "grupo de avatares, usuarios, entidades, compacto", - "transferName": "Transferencia", - "transferDesc": "Facilita la transferencia de datos entre dos listas mediante la función de arrastrar y soltar.", - "transferKeywords": "transferencia, datos, arrastrar y soltar", - "cardCompName": "Tarjeta de contenido", - "cardCompDesc": "Un componente de tarjeta para mostrar información o contenidos organizados de forma estructurada.", - "cardCompKeywords": "tarjeta, información, contenido, pantalla", - "timerCompName": "Timer", - "timerCompDesc": "Componente que muestra una cuenta atrás o el tiempo transcurrido, útil para el seguimiento de duraciones y plazos.", - "timerCompKeywords": "temporizador, cuenta atrás, tiempo transcurrido, seguimiento, duraciones, plazos", - }, - "comp": { - ...en.comp, - - "menuViewDocs": "Ver documentación", - "menuViewPlayground": "Ver zona de juegos interactiva", - "menuUpgradeToLatest": "Actualizar a la última versión", - "nameNotEmpty": "No puede estar vacío", - "nameRegex": "Debe empezar por una letra y contener sólo letras, cifras y guiones bajos (_)", - "nameJSKeyword": "No puede ser una palabra clave JavaScript", - "nameGlobalVariable": "No puede ser un nombre de variable global", - "nameExists": "Nombre {name} Ya existe", - "getLatestVersionMetaError": "No se ha podido obtener la última versión, inténtelo más tarde.", - "needNotUpgrade": "La versión actual ya es la última.", - "compNotFoundInLatestVersion": "Componente actual no encontrado en la última versión.", - "upgradeSuccess": "Actualizado correctamente a la última versión.", - "searchProp": "Buscar en", - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - - "retry": "Reintentar", - "resetAfterSubmit": "Restablecer después de enviar correctamente el formulario", - "jsonSchema": "Esquema JSON", - "uiSchema": "Esquema de IU", - "schemaTooltip": "Véase", - "defaultData": "Datos de formulario precargados", - "dataDesc": "Datos del formulario actual", - "required": "Requerido", - "maximum": "El valor máximo es {value}.", - "minimum": "El valor mínimo es {value}.", - "exclusiveMaximum": "Debe ser inferior a {value}", - "exclusiveMinimum": "Debe ser mayor que {value}.", - "multipleOf": "Debe ser múltiplo de {value}.", - "minLength": "Al menos {value} Caracteres", - "maxLength": "Como máximo {value} Caracteres", - "pattern": "Debe coincidir con el patrón {value}", - "format": "Debe coincidir con el formato {value}.", - }, - "select": { - ...en.select, - - "inputValueDesc": "Valor de búsqueda de entrada", - }, - "customComp": { - ...en.customComp, - - "text": "Es un buen día.", - "triggerQuery": "Consulta de activación", - "updateData": "Actualizar datos", - "updateText": "¡También estoy de buen humor para desarrollar ahora mi propio componente personalizado con Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Datos que desea pasar al componente personalizado", - "code": "Código de su componente personalizado", - }, - "tree": { - ...en.tree, - - "placeholder": "Seleccione una opción", - "selectType": "Seleccionar tipo", - "noSelect": "No Seleccionar", - "singleSelect": "Selección individual", - "multiSelect": "Selección múltiple", - "checkbox": "Casilla de verificación", - "checkedStrategy": "Estrategia verificada", - "showAll": "Todos los nodos", - "showParent": "Sólo nodos padre", - "showChild": "Nodos hijos únicos", - "autoExpandParent": "Auto Expandir Padre", - "checkStrictly": "Comprobar estrictamente", - "checkStrictlyTooltip": "Compruebe el TreeNode con precisión; el TreeNode padre y los TreeNodes hijos no están asociados", - "treeData": "Datos del árbol", - "treeDataDesc": "Datos actuales del árbol", - "value": "Valores por defecto", - "valueDesc": "Valores actuales", - "expanded": "Valores ampliados", - "expandedDesc": "Valores ampliados actuales", - "defaultExpandAll": "Por defecto Expandir todos los nodos", - "showLine": "Mostrar línea", - "showLeafIcon": "Mostrar icono de hoja", - "treeDataAsia": "Asia", - "treeDataChina": "China", - "treeDataBeijing": "Pekín", - "treeDataShanghai": "Shanghai", - "treeDataJapan": "Japón", - "treeDataEurope": "Europa", - "treeDataEngland": "Inglaterra", - "treeDataFrance": "Francia", - "treeDataGermany": "Alemania", - "treeDataNorthAmerica": "Norteamérica", - "helpLabel": "Etiqueta de nodo", - "helpValue": "Valor de nodo único en el árbol", - "helpChildren": "Niños Nodos", - "helpDisabled": "Desactiva el Nodo", - "helpSelectable": "Si el nodo es seleccionable (tipo de selección única/múltiple)", - "helpCheckable": "Si mostrar casilla de verificación (Tipo de casilla de verificación)", - "helpDisableCheckbox": "Desactiva la casilla de verificación (Tipo de casilla de verificación)", - }, - "moduleContainer": { - ...en.moduleContainer, - - "eventTest": "Prueba de eventos", - "methodTest": "Método de ensayo", - "inputTest": "Prueba de entrada", - }, - "password": { - ...en.password, - - "label": "Contraseña", - "placeholder": "Introduzca la contraseña", - "conformLabel": "Confirmar contraseña", - "conformPlaceholder": "Confirmar contraseña", - "visibilityToggle": "Conmutar visibilidad", - }, - "richTextEditor": { - ...en.richTextEditor, - - "toolbar": "Personalizar la barra de herramientas", - "toolbarDescription": "Puede personalizar la barra de herramientas. Por favor, consulte: https://quilljs.com/docs/modules/toolbar/ para más detalles.", - "placeholder": "Por favor, introduzca...", - "hideToolbar": "Ocultar barra de herramientas", - "content": "Contenido", - "title": "Título", - "save": "Guardar", - "link": "Enlace:", - "edit": "Editar", - "remove": "Eliminar", - "defaultValue": "Contenido básico", - }, - "floatButton": { - ...en.floatButton, - - "custom": "A medida", - "backTop": "Volver Arriba", - "buttonType": "Tipo de botón", - "buttonShape": "Forma del botón", - "square": "Cuadrado", - "circle": "Círculo", - "description": "Descripción", - "badge": "Insignia", - "primary": "Principal", - "default": "Por defecto", - "buttonTheme": "Tema del botón", - "badgeColor": "Color del distintivo", - "dot": "Insignia Como Punto", - "hidden": "Oculto", - "visibilityHeight": "Altura de visibilidad", - "visibilityHeightDesc": "Desplácese hasta una altura determinada antes de mostrar el botón de volver al principio, siempre se muestra 0,El modo de edición no puede previsualizar en tiempo real", - }, - "colorPicker": { - ...en.colorPicker, - - "trigger": "Evento desencadenante", - "click": "Haga clic en", - "hover": "pase el ratón por", - "disabledAlpha": "Desactivar selección alfa", - "recommended": "Recomendado", - "showPresets": "Mostrar preajustes de color", - }, - "badge": { - ...en.badge, - - "showCloseButton": "Mostrar botón de cierre", - "Type": "Tipo de placa", - "Count": "Recuento de insignias", - "Size": "Tamaño del distintivo", - "SizeDefault": "por defecto", - "SizeSmall": "Pequeño", - "overflowCount": "Recuento de desbordamientos", - "Title": "Título de la insignia", - "dot": "Punto", - "number": "Número", - "tooltip": "Información sobre herramientas", - }, - "gantt": { - ...en.gantt, - - "key": "Clave", - "title": "Título", - "project": "Proyecto", - "from": "En", - "minute": "minuto", - "hour": "Hora", - "day": "Día", - "week": "Semana", - "month": "Mes", - "year": "Año", - "quarter": "Cuarto", - "tasks": "Datos de tareas", - "level": "nivel", - "durationUnit": "Unidad de duración", - "duration": "Duración", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Semana #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "árbol", - "ColumnsData": "Columnas Datos", - "allowChangeTask": "Tarea DbClick", - "allowAddLink": "Añadir enlace", - "allowLinkDelete": "Enlace Eliminar", - "allowProgressDrag": "Arrastre de progreso", - "allowTaskDrag": "Arrastre de tareas", - "links": "Datos de enlaces", - "dataFormat": "Formato de análisis de datos", - "handleDateChange": "Gestionar el cambio de tarea", - "handleTaskChange": "Gestionar el cambio de tarea", - "handleAddedLink": "Mango Enlace añadido", - "handleDeletedLink": "Manejar enlace eliminado", - "handleProgressDrag": "Manejar el arrastre de progreso", - "showTodayMark": "Mostrar hoy Mark", - "resize": "Cambie el tamaño de", - "otherEvents": "Otros eventos", - "openAllBranchInit": "Abrir todas las sucursales Init", - "date": "Fecha", - "text": "Texto", - "progress": "progreso", - "width": "Anchura", - "ColumnsType": "Tipo de nubes", - "currentId": "Identificación actual", - "currentObject": "Objeto actual", - "addTask": "Añadir tarea(s)", - "taskObject": "Objeto de la tarea", - "taskObjectDesc": "Admite matrices de tareas o un único objeto de tarea", - "linkID": "ID del enlace", - "linkIDDesc": "Admite matrices de ID de enlaces o un único objeto de enlace", - "removeTask": "Eliminar tarea", - "taskID": "ID de tarea", - "taskIDDesc": "Admite matrices de ID o un único ID", - "add": "Añadir", - "expandingAll": "Ampliar todo", - "collapsingAll": "Colapsar todo", - "addTaskFail": "La tarea de adición ha fallado, y el tipo de parámetro debe ser un objeto o un objeto array", - "addLinkFail": "El enlace de adición falló, y el tipo de parámetro debe ser un objeto o un objeto de matriz", - "removeTaskFail": "La tarea de eliminación ha fallado, y el tipo de parámetro debe ser cadena o matriz de cadenas", - "removeLinkFail": "Los enlaces de borrado fallaron, y el tipo de parámetro debe ser string array", - "otherData": "Otros datos{i}", - "projectText": "Proyecto #{i}", - "taskText": "Tarea #{i}", - "AutoCalculateProgress": "Progreso del cálculo automático", - "allowProjectDrag": "Permitir el arrastre de proyectos", - "showColumns": "Mostrar columnas", - "exportToPNG": "Exportar a PNG", - "exportToPDF": "Exportar a PDF", - "exportToExcel": "Exportar a Excel", - "progressLowBg": "Bajo BgColor", - "progressLowColor": "Bajo Progreso Color", - "progressMediumBg": "Medio BgColor", - "progressMediumColor": "Medio Color Progress", - "progressHighBg": "Altura BgColor", - "progressHighColor": "Heigh Progress Color", - "progresscompletedColor": "Color de progreso completado", - "lowProgressLine": "Línea de progreso baja", - "mediumProgressLine": "Línea de progreso medio", - "SegmentedColor": "Color segmentado Progress", - "link_f2s": "Enlace F2S", - "link_s2s": "Enlace S2S", - "link_f2f": "Enlace F2F", - "link_s2f": "Enlace S2F", - "weekScale": "#{i},", - "showHolidays": "Mostrar vacaciones", - "StatutoryHolidays": "Datos sobre las vacaciones legales", - "skipOffTime": "Oculta el tiempo no trabajado", - "weekend": "Fin de semana", - "weekendSelected": "Fin de semana seleccionado", - "noWorkHour": "Ninguna hora de trabajo", - "noWorkHourSelected": "ninguna hora de trabajo seleccionada", - "showWorkTimes": "Mostrar horarios de trabajo", - "workTimeData": "Datos sobre el tiempo de trabajo", - "fit": "ajuste", - "manual": "manual", - "scaleMode": "Modo Escala", - "startDate": "Fecha de inicio", - "endDate": "Fecha final", - "addLink": "Añadir enlace(s)", - "linkObject": "enlace Objeto", - "removeLink": "eliminar enlace", - "allowSort": "Permitir clasificación", - "showTask": "Mostrar tarea", - "toggleOnDBClick": "Activar DBClick", - "sortOptions": "Opciones iniciales de clasificación", - "rowHeight": "Altura de fila", - "showTooltip": "Mostrar información sobre herramientas", - "tooltipTemplates": "Plantilla Tooltip", - "allowResizeTask": "Permitir redimensionar tarea", - "projectColor": "Proyecto Color", - "projectColorBg": "Proyecto BgColor", - "taskColor": "Tarea Color", - "taskColorBg": "Tarea BgColor", - "milestoneColor": "Hito Color", - "highlightOverdue": "Resaltar Atrasado", - "overdueColor": "Color atrasado", - "overdueBgColor": "Atrasado BgColor", - "projectCompletedBgColor": "Proyecto finalizado BgColor", - "projectCompletedColor": "Proyecto finalizado Color", - "tag": "etiqueta", - "tasksTableWidth": "Anchura de la tabla de tareas", - "allowErrorMessage": "Permitir mensaje de error", - "currentProjectId": "Id de proyecto actual", - "currentProjectLastTask": "Proyecto actual Última tarea", - "onlySortProject": "Sólo Ordenar Proyecto", - }, - "transfer": { - ...en.transfer, - - "sourceTitle": "Fuente de datos", - "targetTitle": "Datos objetivo", - "content": "Contenido {i}", - "items": "Artículos", - "targetKeys": "Claves seleccionadas", - "oneWay": "Una vía", - "pagination": "Paginación", - "pageSize": "Tamaño de página", - "allowSearch": "Permitir búsqueda", - "selectedKeys": "Claves seleccionadas", - "searchInfo": "Buscar información", - "targerObject": "Objeto Targer", - }, - "avatarGroup": { - ...en.avatarGroup, - - "maxCount": "Recuento máximo", - "avatarSize": "Tamaño del avatar", - "autoColor": "Auto Color", - "alignment": "Alineación", - "currentAvatar": "Avatar actual", - }, - "avatarComp": { - ...en.avatarComp, - - "square": "cuadrado", - "circle": "círculo", - "icon": "icono", - "shape": "forma", - "counts": "Insignia", - "title": "título", - "src": "src", - "avatarCompTooltip": "La prioridad de visualización es: imagen -> caracteres -> icono. En función de lo que esté disponible en primer lugar.", - "iconSize": "Tamaño del icono", - "avatarBackground": "Fondo", - "label": "Etiqueta", - "caption": "Leyenda", - "labelPosition": "Posición", - "alignmentPosition": "alineación", - "text": "Texto", - "enableDropDown": "Activar desplegable", - "containerBackground": "Fondo", - }, - "card": { - ...en.card, - - "cardType": "Tipo de tarjeta", - "common": "común", - "custom": "personalizado", - "default": "por defecto", - "small": "pequeño", - "showTitle": "Mostrar título", - "title": "Título", - "more": "Más", - "extraTitle": "Llamamiento a la acción", - "CoverImg": "Imagen de portada", - "imgSrc": "Fuente de la imagen", - "showMeta": "Mostrar contenido", - "metaTitle": "Título del contenido", - "metaDesc": "Descripción del contenido", - "imgHeight": "Altura de la imagen", - "showActionIcon": "Mostrar opciones de acción", - "actionOptions": "Opciones de acción", - "menu": "Menú {i}", - "hoverColor": "hover Color", - "IconColor": "Icono Color", - "titleSize": "Título Tamaño", - }, - "timer": { - ...en.timer, - - "timerState": "Estado del temporizador", - "elapsedTime": "Tiempo transcurrido", - "timer": "Timer", - "countdown": "Cuenta atrás", - "defaultValue": "Valor por defecto", - "timerType": "Tipo de temporizador", - "start": "Inicio", - "pause": "Pausa", - "resume": "Currículum", - "reset": "Restablecer", - "startPause": "Inicio/Pausa", - "hideButton": "Botón Ocultar", - "fontColor": "Color de fuente", - }, - "iconComp": { - ...en.iconComp, - - "icon": "Icono", - "autoSize": "Icono AutoSize", - "iconSize": "Tamaño del icono", - }, - "numberInput": { - ...en.numberInput, - - "formatter": "Formato", - "precision": "Precisión", - "allowNull": "Permitir valor nulo", - "thousandsSeparator": "Mostrar separador de miles", - "controls": "Mostrar botones de aumento/disminución", - "step": "Paso", - "standard": "Estándar", - "percent": "Porcentaje", - }, - "slider": { - ...en.slider, - - "step": "Paso", - "stepTooltip": "El valor debe ser mayor que 0 y divisible por (Máx-Mín)", - "vertical": "Orientación vertical", - }, - "rating": { - ...en.rating, - - "max": "Clasificación máxima", - "allowHalf": "Permitir la mitad de puntos de valoración", - }, - "optionsControl": { - ...en.optionsControl, - - "optionList": "Opciones", - "option": "Opción", - "optionI": "Opción {i}", - "viewDocs": "Ver documentos", - "tip": "Las variables \"item\" e \"i\" representan el valor y el índice de cada elemento de la matriz de datos.", - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - - "value": "Valor / Clave", - "valueTooltip": "El valor del paso debe ser un número. Para el primer Paso, debe ser igual al valor inicial. Los números deben estar en orden coherente y ascendente", - "title": "Paso Título", - "subTitle": "Paso Subtítulo", - "description": "Paso Descripción", - "status": "Paso Estado", - "icon": "Paso Icono", - }, - "step": { - ...en.step, - - "initialValue": "Números iniciales en", - "initialValueTooltip": "Dónde empezar la numeración visual. Debe ser 1 o superior.", - "valueDesc": "Valor actual", - "size": "Pasos Tamaño", - "sizeSmall": "Pequeño", - "sizeDefault": "Por defecto", - "percent": "Pasos Porcentaje", - "type": "Tipo de pasos", - "typeDefault": "Estándar", - "typeNavigation": "Navegación", - "typeInline": "En línea", - "direction": "Pasos Dirección", - "directionVertical": "Vertical", - "directionHorizontal": "Horizontal", - "labelPlacement": "Pasos Colocación de etiquetas", - "status": "Pasos Estado", - "statusWait": "Espere", - "statusProcess": "Proceso", - "statusFinish": "Acabado", - "statusError": "Error", - "showDots": "Mostrar puntos en lugar de símbolos", - "showIcons": "Mostrar iconos en lugar de símbolos", - "responsive": "Respuesta", - "selectable": "Seleccionable", - }, - "coloredTagOptionControl": { - ...en.coloredTagOptionControl, - - "tag": "Texto de la etiqueta", - "color": "Color", - "icon": "Icono", - }, - "radio": { - ...en.radio, - - "options": "Opciones", - "horizontal": "Horizontal", - "horizontalTooltip": "El diseño horizontal se enrolla cuando se queda sin espacio", - "vertical": "Vertical", - "verticalTooltip": "El diseño vertical siempre se mostrará en una sola columna", - "autoColumns": "Columna Auto", - "autoColumnsTooltip": "La disposición en autocolumnas reordena automáticamente el orden según lo permita el espacio y muestra varias columnas.", - }, - "cascader": { - ...en.cascader, - - "options": "Datos JSON para mostrar selecciones en cascada", - }, - "selectInput": { - ...en.selectInput, - - "valueDesc": "Valor seleccionado actualmente", - "selectedIndexDesc": "El índice del valor seleccionado actualmente, o -1 si no hay ningún valor seleccionado.", - "selectedLabelDesc": "Etiqueta del valor seleccionado actualmente", - }, - "file": { - ...en.file, - - "typeErrorMsg": "Debe ser un número con una unidad de tamaño de archivo válida, o un número de bytes sin unidad.", - "fileEmptyErrorMsg": "Carga fallida. El tamaño del archivo está vacío.", - "fileSizeExceedErrorMsg": "Carga fallida. El tamaño del archivo excede el límite.", - "minSize": "Tamaño mínimo", - "minSizeTooltip": "El tamaño mínimo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", - "maxSize": "Tamaño máximo", - "maxSizeTooltip": "El tamaño máximo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", - "single": "Único", - "multiple": "Múltiples", - "directory": "Directorio", - "upload": "Visite", - "fileType": "Tipos de ficheros", - "reference": "Consulte", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Especificadores únicos de tipo de archivo", - "uploadType": "Tipo de carga", - "showUploadList": "Mostrar lista de cargas", - "maxFiles": "Archivos Max", - "filesValueDesc": "El contenido del archivo cargado actualmente está codificado en Base64", - "filesDesc": "Lista de los archivos cargados actualmente. Para más detalles, consulte", - "clearValueDesc": "Borrar todos los archivos", - "parseFiles": "Analizar archivos", - "parsedValueTooltip1": "Si parseFiles es True, los archivos se convertirán en objetos, matrices o cadenas. Se puede acceder a los datos analizados a través de la matriz parsedValue.", - "parsedValueTooltip2": "Admite archivos Excel, JSON, CSV y de texto. Otros formatos devolverán un valor nulo.", - }, - "date": { - ...en.date, - - "format": "Formato", - "formatTip": "Admite: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", - "reference": "Consulte", - "showTime": "Hora del espectáculo", - "start": "Fecha de inicio", - "end": "Fecha final", - "year": "Año", - "quarter": "Cuarto", - "month": "Mes", - "week": "Semana", - "date": "Fecha", - "clearAllDesc": "Borrar todo", - "resetAllDesc": "Restablecer todo", - "placeholder": "Seleccionar fecha", - "placeholderText": "Marcador de posición", - "startDate": "Fecha de inicio", - "endDate": "Fecha final", - }, - "time": { - ...en.time, - - "start": "Hora de inicio", - "end": "Fin de los tiempos", - "formatTip": "Soporte: 'HH:mm:ss', 'Timestamp'", - "format": "Formato", - "placeholder": "Seleccionar hora", - "placeholderText": "Marcador de posición", - "startTime": "Hora de inicio", - "endTime": "Fin de los tiempos", - }, - "button": { - ...en.button, - - "prefixIcon": "Prefijo Icono", - "prefixText": "Texto del prefijo", - "suffixIcon": "Icono de sufijo", - "icon": "Icono", - "iconSize": "Tamaño del icono", - "button": "Botón de formulario", - "formToSubmit": "Formulario de envío", - "default": "Por defecto", - "submit": "Enviar", - "textDesc": "Texto que aparece actualmente en el botón", - "loadingDesc": "¿Está el botón en estado de carga? Si es verdadero, el botón actual está cargando", - "formButtonEvent": "Evento", - }, - "link": { - ...en.link, - - "link": "Enlace", - "textDesc": "Texto que aparece actualmente en el enlace", - "loadingDesc": "¿Está el enlace en estado de carga? Si es verdadero, el enlace actual está cargando", - }, - "scanner": { - ...en.scanner, - - "text": "Haga clic en Escanear", - "camera": "Cámara {index}", - "changeCamera": "Cambiar cámara", - "continuous": "Escaneado continuo", - "uniqueData": "Ignorar datos duplicados", - "maskClosable": "Haga clic en la máscara para cerrar", - "errTip": "Utilice este componente bajo HTTPS o Localhost", - }, - "dropdown": { - ...en.dropdown, - - "onlyMenu": "Pantalla sólo con etiqueta", - "textDesc": "Texto que aparece actualmente en el botón", - "triggerMode": "Modo de disparo" - }, - "textShow": { - ...en.textShow, - - "text": "### 👋 Hola, {name}", - "valueTooltip": "Markdown admite la mayoría de las etiquetas y atributos HTML. iframe, Script y otras etiquetas están desactivadas por motivos de seguridad.", - "verticalAlignment": "Alineación vertical", - "horizontalAlignment": "Alineación horizontal", - "textDesc": "Texto mostrado en el cuadro de texto actual", - }, - "table": { - ...en.table, - - "editable": "Editable", - "columnNum": "Columnas", - "viewModeResizable": "Ancho de columna ajustado por el usuario", - "viewModeResizableTooltip": "Si los usuarios pueden ajustar el ancho de columna.", - "visibleResizables": "Mostrar asas de cambio de tamaño", - "visibleResizablesTooltip": "Mostrar los Manejadores de Redimensionamiento visibles en la Cabecera de la Tabla.", - "showFilter": "Botón Mostrar filtro", - "showRefresh": "Mostrar botón de actualización", - "showDownload": "Mostrar botón de descarga", - "columnSeparator": "Separador de columna", - "columnSeparatorTooltip": "Separador de columnas (\"delimitador\") en el archivo CSV descargado.\n\nRecomendaciones:\n- Coma (,)\n- Punto y coma (;)\n- Tubo (|)\n- Tabulación (\\t)", - "columnSetting": "Botón Mostrar visibilidad de columnas", - "searchText": "Buscar texto", - "searchTextTooltip": "Buscar y Filtrar los Datos, que se presentan actualmente en la Tabla. Esta es una Búsqueda sólo frontal y No Afecta a la Consulta de la Fuente de Datos).", - "showQuickJumper": "Mostrar Quick Jumper", - "hideOnSinglePage": "Ocultar en una sola página", - "showSizeChanger": "Botón de cambio de talla", - "pageSizeOptions": "Opciones de tamaño de página", - "pageSize": "Tamaño de página", - "total": "Recuento total de filas", - "totalTooltip": "El valor por defecto es el número de elementos de datos actuales que pueden obtenerse de la consulta, por ejemplo: '{{query1.data[0].count}}'.", - "filter": "Filtros", - "filterRule": "Regla de filtrado", - "chooseColumnName": "Elegir columna", - "chooseCondition": "Elegir condición", - "clear": "Claro", - "columnShows": "Columnas", - "selectAll": "Seleccionar todo", - "and": "Y", - "or": "O", - "contains": "Contiene", - "notContain": "No contiene", - "equals": "Es igual a", - "isNotEqual": "No es igual", - "isEmpty": "Está vacío", - "isNotEmpty": "No está vacío", - "greater": "Mayor que", - "greaterThanOrEquals": "Mayor o igual que", - "lessThan": "Menos de", - "lessThanOrEquals": "Menor o igual que", - "action": "Acción", - "columnValue": "Valor de columna", - "columnValueTooltip": "'{{currentCell}}': Datos de la celda actual\n '{{currentRow}}': Datos de la fila actual\n '{{currentIndex}}': Índice de datos actual (empezando por 0)\n Ejemplo: '{{currentCell * 5}}' Mostrar 5 Veces el Valor Original de los Datos.", - "columnTooltip": "Columna Tooltip", - "imageSrc": "Fuente de la imagen", - "imageSize": "Tamaño de la imagen", - "columnTitle": "Título", - "columnTitleTooltip": "Información sobre el título", - "showTitle": "Mostrar título", - "showTitleTooltip": "Mostrar/Ocultar el título de la columna en la cabecera de la tabla", - "sortable": "Clasificable", - "align": "Alineación", - "fixedColumn": "Columna fija", - "autoWidth": "Ancho automático", - "customColumn": "Columna personalizada", - "auto": "Coche", - "fixed": "Fijo", - "columnType": "Tipo de columna", - "dataMapping": "Cartografía de datos", - "numberStep": "Paso", - "numberStepTooltip": "El número al que aumenta o disminuye el valor actual. Puede ser un número entero o decimal", - "precision": "Precisión", - "float": "Flotador", - "prefix": "Prefijo", - "suffix": "Sufijo", - "avatars": "Avatares", - "avatarGroupAlignment": "Alineación de avatares", - "text": "Texto", - "number": "Número", - "link": "Enlace", - "links": "Enlaces", - "tag": "Etiqueta", - "select": "Seleccione", - "dropdown": "Desplegable", - "date": "Fecha", - "dateTime": "Fecha Hora", - "badgeStatus": "Estado", - "button": "Botón", - "image": "Imagen", - "boolean": "Booleano", - "switch": "Interruptor", - "rating": "Clasificación", - "progress": "Progreso", - "option": "Operación", - "optionList": "Lista de operaciones", - "option1": "Operación 1", - "status": "Estado", - "statusTooltip": "Valores opcionales: Correcto, Error, Predeterminado, Advertencia, Procesando", - "primaryButton": "Principal", - "defaultButton": "Por defecto", - "type": "Tipo", - "tableSize": "Tamaño de la tabla", - "hideHeader": "Ocultar cabecera de tabla", - "hideToolbar": "Ocultar pie de página", - "fixedHeader": "Cabecera de tabla fija", - "fixedHeaderTooltip": "La cabecera será fija para la tabla desplazable verticalmente", - "fixedToolbar": "Barra de herramientas fija", - "fixedToolbarTooltip": "La barra de herramientas se fijará para la tabla desplazable verticalmente en función de la posición", - "hideBordered": "Mostrar asas de cambio de tamaño", - "showHeaderGridBorder": "Mostrar borde de cuadrícula de cabecera", - "showRowGridBorder": "Mostrar borde de cuadrícula de fila", - "showVerticalRowGridBorder": "Mostrar el borde vertical de la cuadrícula de filas", - "showHorizontalRowGridBorder": "Mostrar el borde horizontal de la cuadrícula de filas", - "deleteColumn": "Borrar columna", - "confirmDeleteColumn": "Confirme Borrar columna:", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "Los Datos Actuales Cambian, Pulse para Regenerar la Columna.", - "changeSetDesc": "Un Objeto que Representa Cambios en una Tabla Editable, Sólo Contiene la Celda Cambiada. Las filas van primero y las columnas después.", - "selectedRowDesc": "Proporciona datos para la fila seleccionada actualmente, indicando la fila que desencadena un evento de clic si el usuario hace clic en un botón/enlace de la fila.", - "selectedRowsDesc": "Útil en el modo de selección múltiple, igual que SelectedRow", - "pageNoDesc": "Página de visualización actual, empezando por 1", - "pageSizeDesc": "Cuántas filas por página", - "sortColumnDesc": "Nombre de la columna ordenada actualmente seleccionada", - "sortDesc": "Si la fila actual está en orden descendente", - "pageOffsetDesc": "El inicio actual de la paginación, utilizado para la paginación para obtener datos. Ejemplo: Select * from Usuarios Limite '{{table1.pageSize}}' Desplazamiento '{{table1.pageOffset}}'", - "displayDataDesc": "Datos mostrados en la tabla actual", - "selectedIndexDesc": "Índice seleccionado en los datos de visualización", - "filterDesc": "Parámetros de filtrado de tablas", - "dataDesc": "Los datos JSON de la tabla", - "saveChanges": "Guardar cambios", - "cancelChanges": "Cancelar cambios", - "rowSelectChange": "Cambio de selección de fila", - "rowClick": "Fila Click", - "rowExpand": "Fila Ampliar", - "rowShrink": "Reducción de filas", - "search": "Buscar en", - "download": "Descargar", - "columnEdited": "Columna editada", - "filterChange": "Cambio de filtro", - "sortChange": "Ordenar Cambio", - "pageChange": "Cambio de página", - "refresh": "Actualizar", - "rowColor": "Color de fila condicional", - "rowColorDesc": "Establece Condicionalmente el Color de la Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - "rowHeight": "Alto de línea condicional", - "rowHeightDesc": "Establece Condicionalmente el Alto de Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Color de celda condicional", - "cellColorDesc": "Establezca Condicionalmente el Color de la Celda Basado en el Valor de la Celda Usando CurrentCell. Por ejemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "No hay ningún manejador de eventos configurado para guardar cambios. Vincule al menos un controlador de eventos antes de hacer clic.", - "dynamicColumn": "Utilizar la visibilidad dinámica de columnas", - "dynamicColumnConfig": "Columnas visibles", - "dynamicColumnConfigDesc": "Visibilidad dinámica de columnas. Acepta un array de nombres de columnas. Todas las columnas son visibles por defecto. Ejemplo: [\"id\", \"nombre\"]", - "position": "Posición", - "showDataLoadSpinner": "Mostrar indicador de carga", - "showValue": "Mostrar valor", - "expandable": "Ampliable", - "configExpandedView": "Configurar vista ampliada", - "toUpdateRowsDesc": "Una Matriz de Objetos para Filas a Actualizar en Tablas Editables.", - "selectedCellDesc": "Célula seleccionada", - "empty": "Vacío", - "falseValues": "Texto en falso", - "iconTrue": "Icono Cuando es verdadero", - "iconFalse": "Icono en falso", - "iconNull": "Icono A cero", - "allColumn": "Todos", - "visibleColumn": "Visible", - "emptyColumns": "Actualmente no hay columnas visibles", - "showSummary": "Mostrar fila(s) de resumen", - "totalSummaryRows": "Total de filas", - "inlineAddNewRow": "Inline Añadir nueva(s) fila(s)", - "editMode": "Modo Edición", - "singleClick": "Un solo clic", - "doubleClick": "Doble clic", - "showUpdateButtons": "Mostrar botones Guardar/Cancelar", - }, - "image": { - ...en.image, - - "src": "Fuente de la imagen", - "srcDesc": "Fuente de la imagen. Puede ser una URL, una ruta o una cadena Base64. Por ejemplo: data:image/png;base64, AAA... CCC", - "supportPreview": "Soporte Click Preview (zoom)", - "supportPreviewTip": "Efectivo cuando la fuente de la imagen es válida", - }, - "progress": { - ...en.progress, - - "value": "Valor", - "valueTooltip": "El Porcentaje Completo como valor entre 0 y 100", - "showInfo": "Mostrar valor", - "valueDesc": "Valor de progreso actual, de 0 a 100", - "showInfoDesc": "Mostrar o no el valor de progreso actual", - }, - "fileViewer": { - ...en.fileViewer, - - "invalidURL": "Introduzca una URL válida o una cadena Base64", - "src": "Archivos URI", - "srcTooltip": "Vista previa del contenido del enlace proporcionado mediante la incrustación de HTML, también se pueden admitir datos codificados en Base64, por ejemplo: data:application/pdf; base64,AAA... CCC", - "srcDesc": "URI del archivo", - }, - "divider": { - ...en.divider, - - "title": "Título", - "align": "Alineación", - "dashed": "Dashed", - "type": "Tipo vertical", - "dashedDesc": "Utilizar o no línea discontinua", - "titleDesc": "Título del divisor", - "alignDesc": "Alineación del título del divisor", - }, - "QRCode": { - ...en.QRCode, - - "value": "Valor del contenido del código QR", - "valueTooltip": "El valor contiene un máximo de 2953 caracteres. El valor del código QR puede codificar varios tipos de datos, incluidos mensajes de texto, URL, detalles de contacto (VCard/meCard), credenciales de inicio de sesión Wi-Fi, direcciones de correo electrónico, números de teléfono, mensajes SMS, coordenadas de geolocalización, detalles de eventos de calendario, información de pago, direcciones de criptomonedas y enlaces de descarga de aplicaciones.", - "valueDesc": "El valor del contenido del código QR", - "level": "Nivel de tolerancia a fallos", - "levelTooltip": "Se refiere a la capacidad del código QR para ser escaneado incluso si una parte del mismo está bloqueada. Cuanto más alto es el nivel, más complejo es el código.", - "includeMargin": "Mostrar margen", - "image": "Mostrar imagen en el centro", - "L": "L (Bajo)", - "M": "M (Medio)", - "Q": "Q (Cuartil)", - "H": "H (Alto)", - "maxLength": "El contenido es demasiado largo. Ajuste la longitud a menos de 2953 caracteres", - }, - "jsonExplorer": { - ...en.jsonExplorer, - - "indent": "Sangría de cada nivel", - "expandToggle": "Expandir árbol JSON", - "theme": "Tema de color", - "valueDesc": "Datos JSON actuales", - "default": "Por defecto", - "defaultDark": "Por defecto Oscuro", - "neutralLight": "Luz neutra", - "neutralDark": "Neutro Oscuro", - "azure": "Azure", - "darkBlue": "Azul oscuro", - }, - "audio": { - ...en.audio, - - "src": "URI de la fuente de audio o cadena Base64", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Reproducción automática", - "loop": "Bucle", - "srcDesc": "URI de audio actual o cadena Base64 como data:audio/mpeg;base64,AAA... CCC", - "play": "Jugar", - "playDesc": "Se activa cuando se reproduce audio", - "pause": "Pausa", - "pauseDesc": "Se activa cuando se pausa el audio", - "ended": "Finalizado", - "endedDesc": "Se activa cuando el audio termina de reproducirse", - }, - "video": { - ...en.video, - - "src": "URI de la fuente de vídeo o cadena Base64", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "URL del póster", - "defaultPosterUrl": "", - "autoPlay": "Reproducción automática", - "loop": "Bucle", - "controls": "Ocultar controles", - "volume": "Volumen", - "playbackRate": "Velocidad de reproducción", - "posterTooltip": "El valor por defecto es el primer fotograma del vídeo", - "autoPlayTooltip": "Después de cargar el vídeo, se reproducirá automáticamente. Si cambia este valor de True a False, el vídeo se pausará. (Si se configura un póster, se reproducirá con el botón de póster).", - "controlsTooltip": "Ocultar controles de reproducción de vídeo. Puede no ser totalmente compatible con todas las fuentes de vídeo.", - "volumeTooltip": "Ajustar el volumen del reproductor, entre 0 y 1", - "playbackRateTooltip": "Ajustar la velocidad del reproductor, entre 1 y 2", - "srcDesc": "URI de audio actual o cadena Base64 como data:video/mp4;base64, AAA... CCC", - "play": "Jugar", - "playDesc": "Se activa cuando se reproduce el vídeo", - "pause": "Pausa", - "pauseDesc": "Se activa al pausar el vídeo", - "load": "Carga", - "loadDesc": "Se activa cuando el recurso de vídeo ha terminado de cargarse", - "ended": "Finalizado", - "endedDesc": "Se activa cuando el vídeo termina de reproducirse", - "currentTimeStamp": "Posición actual de reproducción del vídeo en segundos", - "duration": "La duración total del vídeo en segundos", - }, - "media": { - ...en.media, - - "playDesc": "Inicia la reproducción del medio.", - "pauseDesc": "Pone en pausa la reproducción multimedia.", - "loadDesc": "Restablece el medio al principio y reinicia Seleccionando el recurso multimedia.", - "seekTo": "Buscar hasta el número de segundos dado, o fracción si la cantidad está entre 0 y 1", - "seekToAmount": "Número de segundos, o fracción si está entre 0 y 1", - "showPreview": "Avance del espectáculo", - }, - "rangeSlider": { - ...en.rangeSlider, - - "start": "Valor inicial", - "end": "Valor final", - "step": "Tamaño del escalón", - "stepTooltip": "Granularidad del control deslizante, el valor debe ser mayor que 0 y divisible por (Max-Min)", - }, - "iconControl": { - ...en.iconControl, - - "selectIcon": "Seleccione un icono", - "insertIcon": "Insertar un icono", - "insertImage": "Insertar una imagen o", - }, - "shapeControl": { - ...en.shapeControl, - - "selectShape": "Seleccione una forma", - "insertShape": "Insertar una forma", - "insertImage": "Insertar una imagen o", - }, - "millisecondsControl": { - ...en.millisecondsControl, - - "timeoutTypeError": "Por favor, introduzca el período de tiempo de espera correcto en ms, la entrada actual es: ___MARCADOR0___", - "timeoutLessThanMinError": "La entrada debe ser mayor que {left}, la entrada actual es: {value}", - }, - "selectionControl": { - ...en.selectionControl, - - "single": "Único", - "multiple": "Múltiples", - "close": "Cerrar", - "mode": "Modo de selección de filas", - }, - "container": { - ...en.container, - - "title": "Título del contenedor mostrado", - "titleTooltip": "Título del contenedor", - "flowWidth": "Anchura del contenido", - "floatType": "Texto Tipo flotante", - }, - "drawer": { - ...en.drawer, - - "closePosition": "Colocación del botón Cerrar", - "placement": "Colocación de cajones", - "size": "Talla", - "top": "Top", - "right": "Derecha", - "center": "Centro", - "bottom": "Fondo", - "left": "Izquierda", - "title": "Título del cajón", - "titleAlign": "Alineación de títulos", - "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", - "heightTooltip": "Píxel, por ejemplo 378", - "openDrawerDesc": "Cajón abierto", - "closeDrawerDesc": "Cerrar cajón", - "width": "Ancho del cajón", - "height": "Altura del cajón", - }, - "meeting": { - ...en.meeting, - - "logLevel": "Nivel de registro de Agora SDK", - "placement": "Colocación de cajones para reuniones", - "meeting": "Configuración de la reunión", - "cameraView": "Ver habitación", - "cameraViewDesc": "Vista de cámara del usuario local (host)", - "screenShared": "Pantalla compartida", - "screenSharedDesc": "Pantalla compartida por el usuario local (host)", - "audioUnmuted": "Audio sin silenciar", - "audioMuted": "Audio silenciado", - "videoClicked": "Vídeo pulsado", - "videoOff": "Video Off", - "videoOn": "Vídeo", - "size": "Talla", - "top": "Top", - "host": "Anfitrión de la sala de reuniones. Deberá gestionar el anfitrión como una aplicación lógica propia.", - "participants": "Participantes en la sala de reuniones", - "shareScreen": "Pantalla compartida por el usuario local", - "appid": "ID de la aplicación Agora", - "meetingName": "Nombre de la reunión", - "localUserID": "ID de usuario de host", - "userName": "Nombre de usuario del host", - "rtmToken": "Ficha Agora RTM", - "rtcToken": "Ficha Agora RTC", - "noVideo": "Sin vídeo", - "profileImageUrl": "URL de la imagen del perfil", - "right": "Derecha", - "bottom": "Fondo", - "videoId": "ID de secuencia de vídeo", - "audioStatus": "Estado de audio", - "left": "Izquierda", - "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", - "heightTooltip": "Píxel, por ejemplo 378", - "openDrawerDesc": "Cajón abierto", - "closeDrawerDesc": "Cerrar cajón", - "width": "Ancho del cajón", - "height": "Altura del cajón", - "actionBtnDesc": "Botón de acción", - "broadCast": "Difusión de mensajes", - "title": "Título de la reunión", - "meetingCompName": "Controlador de reuniones Agora", - "sharingCompName": "Compartir pantalla Stream", - "videoCompName": "Flujo de cámara", - "videoSharingCompName": "Compartir pantalla Stream", - "meetingControlCompName": "Botón Icono", - "meetingCompDesc": "Componente de reunión", - "meetingCompControls": "Control de reuniones", - "meetingCompKeywords": "Agora Meeting, Web Meeting, Colaboración", - "iconSize": "Tamaño del icono", - "userId": "ID de usuario de host", - "roomId": "ID de habitación", - "meetingActive": "Reunión en curso", - "messages": "Mensajes difundidos", - }, - "settings": { - ...en.settings, - - "title": "Ajustes", - "userGroups": "Grupos de usuarios", - "organization": "Espacios de trabajo", - "subscription": "Suscripciones", - "audit": "Registros de auditoría", - "theme": "Temas", - "plugin": "Plugins", - "advanced": "Avanzado", - "apiDocs": "Documentos API", - "lab": "Laboratorio", - "branding": "Marca", - "oauthProviders": "Autenticación de usuarios", - "appUsage": "Registros de uso de aplicaciones", - "environments": "Entornos", - "premium": "Premium", - "AppUsage": "Uso global de las aplicaciones", - }, - "memberSettings": { - ...en.memberSettings, - - "admin": "Admin", - "superAdmin": "Súper administrador", - "adminGroupRoleInfo": "El administrador puede gestionar los miembros y recursos del grupo", - "adminOrgRoleInfo": "Los administradores son propietarios de todos los recursos y pueden gestionar grupos.", - "member": "Miembro", - "memberGroupRoleInfo": "Los miembros pueden ver a los miembros del grupo", - "memberOrgRoleInfo": "Los miembros sólo pueden utilizar o visitar los recursos a los que tienen acceso.", - "title": "Miembros", - "createGroup": "Crear grupo", - "newGroupPrefix": "Nuevo Grupo", - "allMembers": "Todos los diputados", - "deleteModalTitle": "Borrar este grupo", - "deleteModalContent": "No se puede restaurar el grupo eliminado. Está seguro de eliminar el grupo?", - "addMember": "Añadir miembros", - "nameColumn": "Nombre de usuario", - "joinTimeColumn": "Hora de incorporación", - "actionColumn": "Operación", - "roleColumn": "Papel", - "exitGroup": "Grupo de salida", - "moveOutGroup": "Eliminar del Grupo", - "inviteUser": "Invitar a miembros", - "exitOrg": "Deja", - "exitOrgDesc": "¿Estás seguro de que quieres dejar este espacio de trabajo.", - "moveOutOrg": "Eliminar", - "moveOutOrgDescSaasMode": "¿Está seguro de que desea eliminar al usuario {name} de este espacio de trabajo?", - "moveOutOrgDesc": "¿Está seguro de que desea eliminar al usuario {name}? Esta acción no se puede recuperar.", - "devGroupTip": "Los miembros del grupo de desarrolladores tienen privilegios para crear aplicaciones y fuentes de datos.", - "lastAdminQuit": "El último administrador no puede salir.", - "organizationNotExist": "El espacio de trabajo actual no existe", - "inviteUserHelp": "Puede copiar el enlace de invitación para enviarlo al usuario", - "inviteUserLabel": "Enlace de invitación:", - "inviteCopyLink": "Copiar enlace", - "inviteText": "{userName} le invita a unirse al espacio de trabajo \"{organization}\", haga clic en el enlace para unirse: {inviteLink}", - "groupName": "Nombre del grupo", - "createTime": "Crear tiempo", - "manageBtn": "Gestione", - "userDetail": "Detalle", - "syncDeleteTip": "Este grupo ha sido eliminado de la libreta de direcciones Fuente", - "syncGroupTip": "Este grupo es un grupo de sincronización de la libreta de direcciones y no se puede editar", - }, - "orgSettings": { - ...en.orgSettings, - - "newOrg": "Nuevo espacio de trabajo (Organización)", - "title": "Espacio de trabajo", - "createOrg": "Crear espacio de trabajo (Organización)", - "deleteModalTitle": "¿Está seguro de eliminar este espacio de trabajo?", - "deleteModalContent": "Está a punto de eliminar este espacio de trabajo {permanentlyDelete}. Una vez eliminado, el espacio de trabajo {notRestored}.", - "permanentlyDelete": "Permanentemente", - "notRestored": "No se puede restaurar", - "deleteModalLabel": "Introduzca el nombre del espacio de trabajo {name} para confirmar la operación:", - "deleteModalTip": "Introduzca el nombre del espacio de trabajo", - "deleteModalErr": "El nombre del espacio de trabajo es incorrecto", - "deleteModalBtn": "Borrar", - "editOrgTitle": "Editar la información del espacio de trabajo", - "orgNameLabel": "Nombre del espacio de trabajo:", - "orgNameCheckMsg": "El nombre del espacio de trabajo no puede estar vacío", - "orgLogo": "Logotipo del espacio de trabajo:", - "logoModify": "Modificar imagen", - "inviteSuccessMessage": "Unirse con éxito al espacio de trabajo", - "inviteFailMessage": "Error al unirse al espacio de trabajo", - "uploadErrorMessage": "Error de carga", - "orgName": "Nombre del espacio de trabajo", - }, - "freeLimit": "Prueba gratuita", - "tabbedContainer": { - ...en.tabbedContainer, - - "switchTab": "Pestaña Switch", - "switchTabDesc": "Se activa al cambiar de pestaña", - "tab": "Fichas", - "atLeastOneTabError": "El contenedor de fichas guarda al menos una ficha", - "selectedTabKeyDesc": "Pestaña Actualmente Seleccionado", - "iconPosition": "Icono Posición", - "placement": "Colocación de pestañas", - "showTabs": "Mostrar pestañas", - "gutter": "Brecha", - "gutterTooltip": "La distancia entre pestañas en px", - "tabsCentered": "Pestañas centradas", - }, - "formComp": { - ...en.formComp, - - "containerPlaceholder": "Arrastrar componentes desde el panel derecho o", - "openDialogButton": "Generar un formulario a partir de una de sus fuentes de datos", - "resetAfterSubmit": "Restablecer tras envío correcto", - "initialData": "Datos iniciales", - "disableSubmit": "Desactivar Enviar", - "success": "Formulario generado correctamente", - "selectCompType": "Seleccione el tipo de componente", - "dataSource": "Fuente de datos:", - "selectSource": "Seleccionar fuente", - "table": "Mesa:", - "selectTable": "Seleccionar tabla", - "columnName": "Nombre de la columna", - "dataType": "Tipo de datos", - "compType": "Tipo de componente", - "required": "Requerido", - "generateForm": "Generar formulario", - "compSelectionError": "Tipo de columna no configurada", - "compTypeNameError": "No se ha podido obtener el nombre del tipo de componente", - "noDataSourceSelected": "No se ha seleccionado ninguna fuente de datos", - "noTableSelected": "Ninguna mesa seleccionada", - "noColumn": "Sin columna", - "noColumnSelected": "Sin columna seleccionada", - "noDataSourceFound": "No se ha encontrado ninguna fuente de datos compatible. Crear una nueva fuente de datos", - "noTableFound": "No se encontraron tablas en esta fuente de datos, por favor seleccione otra fuente de datos", - "noColumnFound": "No se ha encontrado ninguna columna compatible en esta tabla. Seleccione otra tabla", - "formTitle": "Título del formulario", - "name": "Nombre", - "nameTooltip": "El nombre del atributo en los datos del formulario, cuando se deja en blanco, es por defecto el nombre del componente", - "notSupportMethod": "Métodos no admitidos:", - "notValidForm": "El formulario no es válido", - "resetDesc": "Restablecer el valor predeterminado de los datos del formulario", - "clearDesc": "Borrar datos del formulario", - "setDataDesc": "Establecer datos del formulario", - "valuesLengthError": "Número de parámetro Error", - "valueTypeError": "Parámetro Tipo Error", - "dataDesc": "Datos del formulario actual", - "loadingDesc": "¿Se está cargando el formulario?", - }, - "modalComp": { - ...en.modalComp, - - "open": "Abrir", - "openDesc": "Se activa al abrir el cuadro de diálogo modal", - "close": "Cerrar", - "closeDesc": "Se activa al cerrar el cuadro de diálogo modal", - "openModalDesc": "Abrir el cuadro de diálogo", - "closeModalDesc": "Cerrar el cuadro de diálogo", - "visibleDesc": "¿Es visible? Si es verdadero, aparecerá el cuadro de diálogo actual", - "title": "Título del cajón", - "titleAlign": "Alineación de títulos", - "modalHeight": "Altura modal", - "modalHeightTooltip": "Pixel, Ejemplo: 222", - "modalWidth": "Anchura modal", - "modalWidthTooltip": "Número o porcentaje, Ejemplo: 520, 60%", - }, - "listView": { - ...en.listView, - - "noOfRows": "Recuento de filas", - "noOfRowsTooltip": "Número de filas de la lista - Suele establecerse en una variable (por ejemplo, '{{query1.data.length}}') para presentar los resultados de la consulta", - "noOfColumns": "Recuento de columnas", - "itemIndexName": "Elemento de datos Índice Nombre", - "itemIndexNameDesc": "El nombre de la variable que hace referencia al índice del artículo, por defecto {default}.", - "itemDataName": "Elemento de datos Nombre del objeto", - "itemDataNameDesc": "El nombre de la variable que se refiere al objeto de datos del artículo, por defecto {default}.", - "itemsDesc": "Exposición de datos de componentes en lista", - "dataDesc": "Los datos JSON utilizados en la lista actual", - "dataTooltip": "Si sólo establece un número, este campo se considerará como recuento de filas y los datos se considerarán vacíos.", - }, - "navigation": { - ...en.navigation, - - "addText": "Añadir elemento de submenú", - "logoURL": "Navegación Logo URL", - "horizontalAlignment": "Alineación horizontal", - "logoURLDesc": "Puede mostrar un logotipo en el lado izquierdo introduciendo un valor URI o una cadena Base64 como data:image/png;base64,AAA... CCC", - "itemsDesc": "Elementos del menú de navegación jerárquica", - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - - "subMenu": "Submenú {number}", - }, - "navItemComp": { - ...en.navItemComp, - - "active": "Activo", - }, - "iframe": { - ...en.iframe, - - "URLDesc": "La URL de origen para el contenido IFrame. Asegúrese de que la URL es HTTPS o localhost. Asegúrese también de que la URL no esté bloqueada por la Política de seguridad de contenidos (CSP) del navegador. El encabezado \"X-Frame-Options\" no debe tener el valor \"DENY\" o \"SAMEORIGIN\".", - "allowDownload": "Permitir descargas", - "allowSubmitForm": "Permitir enviar formulario", - "allowMicrophone": "Permitir micrófono", - "allowCamera": "Permitir cámara", - "allowPopup": "Permitir ventanas emergentes", - }, - "switchComp": { - ...en.switchComp, - - "defaultValue": "Valor booleano por defecto", - "open": "En", - "close": "Fuera de", - "openDesc": "Se activa al encender el interruptor", - "closeDesc": "Se activa cuando el interruptor está apagado", - "valueDesc": "Estado actual del interruptor", - }, - "signature": { - ...en.signature, - - "tips": "Texto de sugerencia", - "signHere": "Firme aquí", - "showUndo": "Mostrar Deshacer", - "showClear": "Mostrar claro", - }, - "localStorageComp": { - ...en.localStorageComp, - - "valueDesc": "Todos los datos almacenados actualmente", - "setItemDesc": "Añadir un artículo", - "removeItemDesc": "Eliminar un artículo", - "clearItemDesc": "Borrar todos los artículos", - }, - "utilsComp": { - ...en.utilsComp, - - "openUrl": "Abrir URL", - "openApp": "Aplicación abierta", - "copyToClipboard": "Copiar al portapapeles", - "downloadFile": "Descargar archivo", - }, - "messageComp": { - ...en.messageComp, - - "info": "Enviar una notificación", - "loading": "Enviar una notificación de carga", - "success": "Enviar una notificación de éxito", - "warn": "Enviar una notificación de advertencia", - "error": "Enviar una notificación de error", - }, - "toastComp": { - ...en.toastComp, - - "destroy": "cerrar una notificación", - "info": "Enviar una notificación", - "loading": "Enviar una notificación de carga", - "success": "Enviar una notificación de éxito", - "warn": "Enviar una notificación de advertencia", - "error": "Enviar una notificación de error", - }, - "themeComp": { - ...en.themeComp, - - "switchTo": "Cambiar tema", - }, - "transformer": { - ...en.transformer, - - "preview": "Vista previa", - "docLink": "Leer más sobre Transformers...", - "previewSuccess": "Vista previa Éxito", - "previewFail": "Vista previa Fracaso", - "deleteMessage": "Borrar Transformador con éxito. Puede utilizar {undoKey} para deshacer.", - "documentationText": "Los Transformadores están diseñados para la transformación de datos y la reutilización de su código JavaScript multilínea. Utilice los transformadores para adaptar los datos de consultas o componentes a las necesidades de su aplicación local. A diferencia de las consultas de JavaScript, los transformadores están diseñados para realizar operaciones de sólo lectura, lo que significa que no se puede activar una consulta o actualizar un estado temporal dentro de un transformador.", - }, - "temporaryState": { - ...en.temporaryState, - - "value": "Valor Init", - "valueTooltip": "El valor inicial almacenado en el estado temporal puede ser un booleano, una cadena, un número o cualquier valor JSON válido.", - "docLink": "Más información sobre los Estados temporales...", - "pathTypeError": "La ruta debe ser una cadena o una matriz de valores", - "unStructuredError": "Los datos no estructurados {prev} no pueden ser actualizados por {path}", - "valueDesc": "Valor temporal del Estado", - "deleteMessage": "El estado temporal se ha eliminado correctamente. Puede utilizar {undoKey} para deshacer.", - "documentationText": "Los estados temporales son una potente característica utilizada para gestionar variables complejas que actualizan dinámicamente el estado de los componentes de tu aplicación. Estos estados actúan como almacenamiento intermedio o transitorio de datos que pueden cambiar con el tiempo debido a interacciones del usuario u otros procesos.", - }, - "dataResponder": { - ...en.dataResponder, - - "data": "Datos", - "dataDesc": "Datos del respondedor de datos actual", - "dataTooltip": "Cuando se modifiquen estos datos, se desencadenarán acciones posteriores.", - "docLink": "Más información sobre los respondedores de datos...", - "deleteMessage": "El Data Responder se ha borrado correctamente. Puede utilizar {undoKey} para deshacer.", - "documentationText": "Al desarrollar una aplicación, puede asignar eventos a los componentes para controlar los cambios en datos específicos. Por ejemplo, un componente Tabla puede tener eventos como \"Cambio de selección de fila\", \"Cambio de filtro\", \"Cambio de ordenación\" y \"Cambio de página\" para controlar los cambios en la propiedad selectedRow. Sin embargo, para los cambios en estados temporales, transformadores o resultados de consultas, en los que no se dispone de eventos estándar, se utilizan los respondedores de datos. Permiten detectar y reaccionar ante cualquier modificación de los datos.", - }, - "theme": { - ...en.theme, - - "title": "Temas", - "createTheme": "Crear tema", - "themeName": "Nombre del tema:", - "themeNamePlaceholder": "Introduzca un nombre para el tema", - "defaultThemeTip": "Tema por defecto:", - "createdThemeTip": "El tema que ha creado:", - "option": "Option{index}", - "input": "Entrada", - "confirm": "Ok", - "emptyTheme": "No hay temas disponibles", - "click": "", - "toCreate": "", - "nameColumn": "Nombre", - "defaultTip": "Por defecto", - "updateTimeColumn": "Hora de actualización", - "edit": "Editar", - "cancelDefaultTheme": "Desactivar tema por defecto", - "setDefaultTheme": "Establecer como tema predeterminado", - "copyTheme": "Tema duplicado", - "setSuccessMsg": "Ajuste superado", - "cancelSuccessMsg": "Desestabilización lograda", - "deleteSuccessMsg": "Supresión Efectuada", - "checkDuplicateNames": "El nombre del tema ya existe, vuelva a introducirlo", - "copySuffix": " Copia", - "saveSuccessMsg": "Guardado correctamente", - "leaveTipTitle": "Consejos", - "leaveTipContent": "Aún no ha ahorrado, ¿confirma su marcha?", - "leaveTipOkText": "Deja", - "goList": "Volver a la lista", - "saveBtn": "Guardar", - "mainColor": "Colores principales", - "text": "Colores del texto", - "layout": "Configuración del diseño", - "fonts": "Configuración de fuentes", - "components": "Plantillas de componentes", - "charts": "Definición de eCharts", - "defaultTheme": "Por defecto", - "yellow": "Amarillo", - "green": "Verde", - "previewTitle": "Vista previa del tema\nComponentes de ejemplo que utilizan los colores de su tema", - "dateColumn": "Fecha", - "emailColumn": "Correo electrónico", - "phoneColumn": "Teléfono", - "subTitle": "Título", - "linkLabel": "Enlace", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Progreso", - "sliderLabel": "Deslizador", - "radioLabel": "Radio", - "checkboxLabel": "Casilla de verificación", - "buttonLabel": "Botón de formulario", - "switch": "Interruptor", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "globo.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Vista previa del estilo de gráfico", - "chartSpending": "Gasto", - "chartBudget": "Presupuesto", - "chartAdmin": "Administración", - "chartFinance": "Finanzas", - "chartSales": "Sales", - "chartFunnel": "Gráfico de embudo", - "chartShow": "Mostrar", - "chartClick": "Haga clic en", - "chartVisit": "Visite", - "chartQuery": "Consulta", - "chartBuy": "Comprar", - }, - "themeDetail": { - ...en.themeDetail, - - "primary": "Color de la marca", - "primaryDesc": "Color primario por defecto utilizado por la mayoría de los componentes", - "textDark": "Color de texto oscuro", - "textDarkDesc": "Se utiliza cuando el color de fondo es claro", - "textLight": "Color de texto claro", - "textLightDesc": "Se utiliza cuando el color de fondo es oscuro", - "canvas": "Canvas Color", - "canvasDesc": "Color de fondo por defecto de la aplicación", - "primarySurface": "Color del contenedor", - "primarySurfaceDesc": "Color de fondo por defecto para componentes como tablas", - "borders": "Estilos de bordes", - "spacing": "Estilos de espaciado", - "font": "Estilos de fuente", - "fonts": "Fuentes", - "borderRadius": "Radio del borde", - "borderRadiusDesc": "Radio del borde por defecto utilizado por la mayoría de los componentes", - "borderColor": "Color del borde", - "borderColorDesc": "Color de borde por defecto utilizado por la mayoría de los componentes", - "borderWidth": "Anchura del borde", - "borderWidthDesc": "Ancho de borde por defecto utilizado por la mayoría de los componentes", - "borderStyle": "Estilo de borde", - "borderStyleDesc": "Estilo de borde por defecto utilizado por la mayoría de los componentes", - "fontFamily": "Familia de fuentes", - "fontFamilyDesc": "Familia de fuentes por defecto utilizada por la mayoría de los componentes", - "chart": "Estilo de gráfico", - "chartDesc": "Aquí puede colocar eCharts Theme JSON para definir el estilo de sus gráficos en todos los Detalles.", - "echartsJson": "Puede utilizar aquí el Generador de JSON del Tema. Copie el JSON del Generador y péguelo aquí.", - "margin": "Margen", - "marginDesc": "Margen por defecto utilizado normalmente para la mayoría de los componentes", - "padding": "Acolchado", - "paddingDesc": "Relleno por defecto utilizado normalmente para la mayoría de los componentes", - "containerHeaderPadding": "Relleno de cabecera", - "containerheaderpaddingDesc": "Relleno de cabecera por defecto utilizado normalmente para la mayoría de los componentes.", - "gridColumns": "Columnas de cuadrícula de lienzo", - "gridColumnsDesc": "Número predeterminado de columnas utilizado normalmente para la mayoría de los contenedores", - "loadingIndicators": "Indicadores de carga", - "showComponentLoadingIndicators": "Mostrar indicadores de carga cuando se carga el componente", - "showDataLoadingIndicators": "Mostrar indicadores de carga al cargar los datos", - "showIndicatorsDuringDataLoading": "Mostrar indicadores durante la carga de datos", - "dataLoadingIndicator": "Indicador de carga de datos" - }, - "pluginSetting": { - ...en.pluginSetting, - - "title": "Plugins", - "npmPluginTitle": "plugins npm", - "npmPluginDesc": "Configurar plugins npm para todas las aplicaciones en el espacio de trabajo actual.", - "npmPluginEmpty": "No se han añadido plugins npm.", - "npmPluginAddButton": "Añadir un plugin npm", - "saveSuccess": "Guardado correctamente", - }, - "advanced": { - ...en.advanced, - - "title": "Avanzado", - "defaultHomeTitle": "Página de inicio por defecto", - "defaultHomeHelp": "La página de inicio es la aplicación que todos los no desarrolladores verán por defecto cuando inicien sesión. Nota: Asegúrese de que la aplicación seleccionada es accesible para los no desarrolladores.", - "defaultHomePlaceholder": "Seleccione la página de inicio por defecto", - "saveBtn": "Guardar", - "preloadJSTitle": "Precargar JavaScript", - "preloadJSHelp": "Configurar código JavaScript precargado para todas las aplicaciones del área de trabajo actual.", - "preloadCSSTitle": "Precargar CSS", - "preloadCSSHelp": "Configurar código CSS precargado para todas las aplicaciones del área de trabajo actual.", - "preloadCSSApply": "Aplicar a la página de inicio del espacio de trabajo", - "preloadLibsTitle": "Biblioteca JavaScript", - "preloadLibsHelp": "Configure bibliotecas JavaScript precargadas para todas las aplicaciones en el espacio de trabajo actual, y el sistema tiene lodash, day.js, uuid, numbro incorporados para uso directo. Las bibliotecas JavaScript se cargan antes de que se inicialice la aplicación, por lo que se produce un cierto impacto en el rendimiento de la aplicación.", - "preloadLibsEmpty": "No se han añadido bibliotecas JavaScript", - "preloadLibsAddBtn": "Añadir una biblioteca", - "saveSuccess": "Guardado correctamente", - "AuthOrgTitle": "Pantalla de bienvenida al espacio de trabajo", - "AuthOrgDescrition": "La URL para que sus usuarios inicien sesión en el espacio de trabajo actual.", - "APIConsumption": "Consumo de API", - "APIConsumptionDescription": "Aquí puede ver el consumo de API para todas las aplicaciones en el área de trabajo actual.", - "overallAPIConsumption": "Consumo global de API en este espacio de trabajo hasta ahora", - "lastMonthAPIConsumption": "Consumo de API del último mes, en este espacio de trabajo", - "npmRegistryTitle": "Registro NPM personalizado", - "npmRegistryHelp": "Configurar un Registro NPM personalizado para permitir la obtención de plugins de un registro NPM privado.", - "showHeaderInPublicApps": "Mostrar cabecera en vista pública", - "showHeaderInPublicAppsHelp": "Fijar la visibilidad de la cabecera en la vista pública para todas las aplicaciones", - }, - "branding": { - ...en.branding, - - "title": "Marca", - "logoTitle": "Logotipo", - "logoHelp": "Sólo .JPG, .SVG o .PNG", - "faviconTitle": "Favicon", - "faviconHelp": "Sólo .JPG, .SVG o .PNG", - "brandNameTitle": "Marca", - "headColorTitle": "Color de la cabeza", - "save": "Guardar", - "saveSuccessMsg": "Guardado correctamente", - "upload": "Haga clic para cargar", - }, - "networkMessage": { - ...en.networkMessage, - - "0": "No se ha podido conectar con el servidor, compruebe la red.", - "200": "Éxito", - "201": "Creado", - "204": "Sin contenido", - "400": "Mala petición", - "401": "Autenticación fallida, por favor conéctese de nuevo", - "403": "Sin permiso, póngase en contacto con el administrador para obtener autorización", - "404": "No se ha encontrado", - "500": "Servicio ocupado, inténtelo más tarde", - "timeout": "Tiempo de espera de la solicitud", - }, - "share": { - ...en.share, - - "title": "Compartir", - "viewer": "Visor", - "editor": "Editor", - "owner": "Propietario", - "datasourceViewer": "Puede utilizar", - "datasourceOwner": "Puede gestionar", - }, - "debug": { - ...en.debug, - - "title": "Título", - "switch": "Componente del interruptor:", - }, - "module": { - ...en.module, - - "emptyText": "Sin datos", - "docLink": "Más información sobre los módulos...", - "documentationText": "Los módulos son aplicaciones completas que pueden incluirse y repetirse en otras aplicaciones y que funcionan como un único componente. Como los módulos pueden ser incrustados, necesitan ser capaces de interactuar con sus aplicaciones externas o sitios web. Estas cuatro opciones ayudan a mantener la comunicación con un módulo.", - "circularReference": "Referencia circular, ¡no se puede utilizar el módulo/aplicación actual!", - "emptyTestInput": "El módulo actual no tiene ninguna entrada que comprobar", - "emptyTestMethod": "El módulo actual no tiene método de prueba", - "name": "Nombre", - "input": "Entrada", - "params": "Parámetros", - "emptyParams": "No se ha añadido ningún parámetro", - "emptyInput": "No se ha añadido ninguna entrada", - "emptyMethod": "No se ha añadido ningún método", - "emptyOutput": "No se ha añadido ninguna salida", - "data": "Datos", - "string": "Cadena", - "number": "Número", - "array": "Matriz", - "boolean": "Booleano", - "query": "Consulta", - "autoScaleCompHeight": "Balanzas de altura de componentes con contenedor", - "excuteMethod": "Ejecutar método {name}", - "method": "Método", - "action": "Acción", - "output": "Salida", - "nameExists": "Nombre {name} Ya existe", - "eventTriggered": "Se activa el evento {name}.", - "globalPromptWhenEventTriggered": "Muestra un aviso global cuando se activa un evento", - "emptyEventTest": "El módulo actual no tiene eventos que probar", - "emptyEvent": "No se ha añadido ningún evento", - "event": "Evento", - }, - "resultPanel": { - ...en.resultPanel, - - "returnFunction": "El valor de retorno es una función.", - "consume": "___TITULAR0___", - "JSON": "Mostrar JSON", - }, - "createAppButton": { - ...en.createAppButton, - - "creating": "Crear...", - "created": "Crear {name}", - }, - "apiMessage": { - ...en.apiMessage, - - "authenticationFail": "La autenticación de usuario ha fallado, por favor inicie sesión de nuevo", - "verifyAccount": "Necesidad de verificar la cuenta", - "functionNotSupported": "La versión actual no soporta esta función. Póngase en contacto con el equipo de Lowcoder Business para actualizar su cuenta.", - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - - "createCompFail": "Crear componente {comp} Fallido", - "notHandledError": "{method} Método no ejecutado", - }, - "aggregation": { - ...en.aggregation, - - "navLayout": "Barra de navegación", - "chooseApp": "Elegir aplicación", - "iconTooltip": "Soporta Image src Link o Base64 String como data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Oculto para usuarios no autorizados", - "queryParam": "Parámetros de consulta de URL", - "hashParam": "Parámetros hash de URL", - "tabBar": "Barra de pestañas", - "emptyTabTooltip": "Configurar esta página en el panel derecho", - }, - "appSetting": { - ...en.appSetting, - - "450": "450px (Teléfono)", - "800": "800px (Tableta)", - "1440": "1440px (portátil)", - "1920": "1920px (pantalla ancha)", - "3200": "3200px (pantalla supergrande)", - "title": "Configuración general de la aplicación", - "autofill": "Autorrelleno", - "userDefined": "A medida", - "default": "Por defecto", - "tooltip": "Cerrar la ventana emergente después de la configuración", - "canvasMaxWidth": "Ancho máximo del lienzo para esta aplicación", - "userDefinedMaxWidth": "Anchura máxima personalizada", - "inputUserDefinedPxValue": "Introduzca un valor de píxel personalizado", - "maxWidthTip": "La anchura máxima debe ser mayor o igual a 350", - "themeSetting": "Tema de estilo aplicado", - "themeSettingDefault": "Por defecto", - "themeCreate": "Crear tema", - "appTitle": "Título", - "appDescription": "Descripción", - "appCategory": "Categoría", - "showPublicHeader": "Mostrar cabecera en vista pública", - }, - "customShortcut": { - ...en.customShortcut, - - "title": "Atajos personalizados", - "shortcut": "Atajo", - "action": "Acción", - "empty": "Sin atajos", - "placeholder": "Pulsar acceso directo", - "otherPlatform": "Otros", - "space": "Espacio", - }, - "profile": { - ...en.profile, - - "orgSettings": "Configuración del espacio de trabajo", - "switchOrg": "Cambiar de espacio de trabajo", - "joinedOrg": "Mis espacios de trabajo", - "createOrg": "Crear espacio de trabajo", - "logout": "Cerrar sesión", - "personalInfo": "Mi perfil", - "bindingSuccess": "Vinculación {sourceName} Éxito", - "uploadError": "Error de carga", - "editProfilePicture": "Modifique", - "saveUserNameTooltip": "Pulsa Enter para guardar tu nuevo NicName. Si ves tu Email, significa que acabamos de secuestrarlo como Nombre de Usuario y puedes cambiarlo por uno mejor. Tu Email como nombre de usuario técnico permanece intacto.", - "changeAvatarTooltip": "Puede cargar archivos PNG o JPG", - "nameCheck": "El nombre no puede estar vacío", - "name": "Nombre:", - "namePlaceholder": "Introduzca su nombre", - "toBind": "Encuadernar", - "binding": "Es vinculante", - "bindError": "Parameter Error, Currently Not Supported Binding.", - "bindName": "Enlazar {name}", - "loginAfterBind": "Tras la vinculación, puede utilizar {name} para iniciar sesión", - "bindEmail": "Vincular correo electrónico:", - "email": "Correo electrónico", - "emailCheck": "Introduzca una dirección de correo electrónico válida", - "emailPlaceholder": "Introduzca su dirección de correo electrónico", - "submit": "Enviar", - "bindEmailSuccess": "Éxito de la encuadernación por correo electrónico", - "passwordModifiedSuccess": "Contraseña cambiada con éxito", - "passwordSetSuccess": "Contraseña establecida correctamente", - "oldPassword": "Contraseña antigua:", - "inputCurrentPassword": "Introduzca su contraseña actual", - "newPassword": "Nueva contraseña:", - "inputNewPassword": "Introduzca su nueva contraseña", - "confirmNewPassword": "Confirme la nueva contraseña:", - "inputNewPasswordAgain": "Vuelva a introducir su nueva contraseña", - "password": "Contraseña:", - "modifyPassword": "Modificar contraseña", - "setPassword": "Establecer contraseña", - "alreadySetPassword": "Conjunto de contraseñas", - "setPassPlaceholder": "Puede iniciar sesión con contraseña", - "setPassAfterBind": "Puede establecer la contraseña después de vincular la cuenta", - "socialConnections": "Conexiones sociales", - "changeAvatar": "Cambiar avatar", - "about": "Acerca de", - "userId": "ID de usuario", - "createdAt": "Creado en", - "currentOrg": "Organización actual", - "settings": "Ajustes", - "uiLanguage": "Lenguaje de interfaz de usuario", - "info": "Información", - "createdApps": "Sus aplicaciones creadas", - "createdModules": "Sus módulos creados", - "sharedApps": "Aplicaciones compartidas con usted", - "sharedModules": "Módulos compartidos con usted", - "onMarketplace": "En el mercado", - "howToPublish": "Cómo publicar en Marketplace", - "memberOfOrgs": "Espacios de trabajo Afiliación", - "apiKeys": "Claves API", - "createApiKey": "Crear clave API", - "apiKeyName": "Nombre", - "apiKeyDescription": "Descripción", - "apiKeyCopy": "Haga clic en la clave Api para obtener el valor en su portapapeles", - "apiKey": "Clave API", - "deleteApiKey": "Borrar clave API", - "deleteApiKeyContent": "¿Está seguro de que desea eliminar esta clave API?", - "deleteApiKeyError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", - }, - "shortcut": { - ...en.shortcut, - - "shortcutList": "Atajos de teclado", - "click": "Haga clic en", - "global": "Global", - "toggleShortcutList": "Alternar atajos de teclado", - "editor": "Editor", - "toggleLeftPanel": "Alternar panel izquierdo", - "toggleBottomPanel": "Alternar panel inferior", - "toggleRightPanel": "Alternar panel derecho", - "toggleAllPanels": "Conmutar todos los paneles", - "preview": "Vista previa", - "undo": "Deshacer", - "redo": "Rehacer", - "showGrid": "Mostrar cuadrícula", - "component": "Componente", - "multiSelect": "Seleccionar varios", - "selectAll": "Seleccionar todo", - "copy": "Copia", - "cut": "Corte", - "paste": "Pegar", - "move": "Mover", - "zoom": "Cambie el tamaño de", - "delete": "Borrar", - "deSelect": "Desmarque", - "queryEditor": "Editor de consultas", - "excuteQuery": "Ejecutar consulta actual", - "editBox": "Editor de texto", - "formatting": "Formato", - "openInLeftPanel": "Abrir en el panel izquierdo", - }, - "help": { - ...en.help, - - "videoText": "Visión general", - "onBtnText": "OK", - "permissionDenyTitle": "💡 ¿No se puede crear una nueva aplicación o fuente de datos?", - "permissionDenyContent": "No tiene permiso para crear la aplicación y la fuente de datos. Póngase en contacto con el administrador para unirse al grupo de desarrolladores.", - "appName": "Aplicación tutorial", - "chat": "Chatea con nosotros", - "docs": "Ver documentación", - "editorTutorial": "Editor de tutoriales", - "update": "¿Qué hay de nuevo?", - "version": "Versión", - "versionWithColon": "Versión:", - "submitIssue": "Presentar un asunto", - }, - "header": { - ...en.header, - - "nameCheckMessage": "El nombre no puede estar vacío", - "viewOnly": "Ver sólo", - "recoverAppSnapshotTitle": "¿Restaurar esta versión?", - "recoverAppSnapshotContent": "Restaurar la aplicación actual a la versión creada en {time}.", - "recoverAppSnapshotMessage": "Restaurar esta versión", - "returnEdit": "Volver al editor", - "deploy": "Publique", - "export": "Exportar a JSON", - "editName": "Editar nombre", - "duplicate": "Duplicar {type}", - "snapshot": "Historia", - "scriptsAndStyles": "Guiones y estilo", - "appSettings": "Configuración de la aplicación", - "preview": "Vista previa", - "editError": "Modo de vista previa de la historia, no se admite ninguna operación.", - "clone": "Clon", - "editorMode_layout": "Diseño", - "editorMode_logic": "Lógica", - "editorMode_both": "Ambos", - "editorMode_layout_tooltip": "Personalice la apariencia y el diseño del componente en la ventana derecha. Ajusta su aspecto, estilo y animación.", - "editorMode_logic_tooltip": "Configure el funcionamiento y la interacción de su componente, en la ventana adecuada. Gestione su contenido y sus comportamientos interactivos.", - "AppEditingBlocked": "Edición de la App bloqueada para:", - "AppEditingBlockedHint": "Los cambios no se guardarán mientras otro usuario esté editando esta aplicación.", - "AppEditingBlockedMessage": "Por favor, espere antes de verificar el estado de edición de la aplicación.", - "AppEditingBlockedCheckStatus": "Verificar estado de la aplicación", - "AppEditingBlockedSomeone": "Alguien", - "AppEditingBlockedMessageSnipped": "está editando esta aplicación", - }, - "userAuth": { - ...en.userAuth, - - "registerByEmail": "Inscribirse", - "email": "Correo electrónico:", - "inputEmail": "Introduzca su dirección de correo electrónico", - "inputValidEmail": "Introduzca una dirección de correo electrónico válida", - "forgotPassword": "Contraseña olvidada", - "forgotPasswordInfo": "Introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.", - "forgotPasswordSuccess": "Consulta tu correo electrónico para ver el enlace para restablecer la contraseña.", - "forgotPasswordError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", - "register": "Inscribirse", - "userLogin": "Iniciar sesión", - "login": "Iniciar sesión", - "bind": "Encuadernación", - "passwordCheckLength": "Al menos {min} Caracteres", - "passwordCheckContainsNumberAndLetter": "Debe contener letras y números", - "passwordCheckSpace": "No puede contener espacios en blanco", - "welcomeTitle": "Bienvenido a {productName}", - "inviteWelcomeTitle": "{username} le invita a trabajar juntos", - "terms": "Términos", - "privacy": "Política de privacidad", - "registerHint": "He leído y acepto la", - "chooseAccount": "Elija su cuenta", - "signInLabel": "Iniciar sesión con {name}", - "bindAccount": "Vincular cuenta", - "scanQrCode": "Escanee el código QR con {name}.", - "invalidThirdPartyParam": "Parámetros de terceros no válidos", - "account": "Cuenta", - "inputAccount": "Introduzca su cuenta", - "ldapLogin": "Inicio de sesión LDAP", - "resetPassword": "Restablecer contraseña", - "resetPasswordDesc": "Restablecer la contraseña del usuario {name}. Se generará una nueva contraseña después del restablecimiento.", - "resetSuccess": "Reinicio efectuado", - "resetSuccessDesc": "Se ha restablecido la contraseña. La nueva contraseña es: {password}.", - "resetLostPasswordSuccess": "Se ha restablecido la contraseña. Vuelva a iniciar sesión.", - "copyPassword": "Copiar contraseña", - "poweredByLowcoder": "Desarrollado por: Lowcoder.cloud", - }, - "preLoad": { - ...en.preLoad, - - "jsLibraryHelpText": "Añada bibliotecas JavaScript a su aplicación actual a través de direcciones URL. lodash, day.js, uuid, numbro están integradas en el sistema para su uso inmediato. Las bibliotecas JavaScript se cargan antes de inicializar la aplicación, lo que puede afectar al rendimiento de la misma.", - "exportedAs": "Exportado como", - "urlTooltip": "Dirección URL de la biblioteca JavaScript, se recomienda [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/)", - "externalLibsHelperText": "Sólo son compatibles las bibliotecas que utilizan el método UMD (Universal Module Definition). Más información: https://github.com/umdjs/umd", - "recommended": "Recomendado", - "viewJSLibraryDocument": "Documento", - "jsLibraryURLError": "URL no válida", - "jsLibraryExist": "La biblioteca JavaScript ya existe", - "jsLibraryEmptyContent": "No se han añadido bibliotecas JavaScript", - "jsLibraryDownloadError": "Error de descarga de la biblioteca JavaScript", - "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada correctamente", - "jsLibraryInstallFailed": "Fallo en la instalación de la biblioteca JavaScript", - "jsLibraryInstallFailedCloud": "Puede que la biblioteca no esté disponible en el Sandbox, [Documentación](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", - "jsLibraryInstallFailedHost": "___TITULAR0___", - "add": "Añadir nuevo", - "jsHelpText": "Añadir un Método o Variable Global a la Aplicación Actual.", - "cssHelpText": "Añadir Estilos a la Aplicación Actual. La estructura DOM puede cambiar a medida que el sistema itera. Intente Modificar Estilos a Través de Propiedades de Componentes.", - "scriptsAndStyles": "Guiones y estilos", - "jsLibrary": "Biblioteca JavaScript", - }, - "editorTutorials": { - ...en.editorTutorials, - - "component": "Componente", - "componentContent": "El Panel de Componentes Derecho le ofrece muchos Bloques de Aplicación (Componentes) ya hechos. Estos pueden ser arrastrados al lienzo para su uso. También puede crear sus propios componentes con un poco de conocimiento de codificación.", - "canvas": "Lienzo", - "canvasContent": "Construye tus aplicaciones en Canvas con el método \"lo que ves es lo que hay\". Basta con arrastrar y soltar los componentes para diseñar el diseño, y utilizar los atajos de teclado para realizar ediciones rápidas como borrar, copiar y pegar. Una vez seleccionado un componente, puede ajustar todos los detalles, desde el estilo y el diseño hasta la vinculación de datos y el comportamiento lógico. Además, disfrute de la ventaja añadida del diseño adaptable, que garantiza que sus aplicaciones se vean perfectamente en cualquier dispositivo.", - "queryData": "Consultar datos", - "queryDataContent": "Puede crear consultas de datos aquí y conectarse a su MySQL, MongoDB, Redis, Airtable, y muchas otras fuentes de datos. Después de configurar la consulta, haga clic en \"Ejecutar\" para obtener los datos y continuar con el tutorial.", - "compProperties": "Propiedades de los componentes", - "interactiveDemo": "Demostración interactiva", - "interactiveDemoToolTip": "Haga clic para iniciar una demostración interactiva de esta función", - }, - "supademos": { - ...en.supademos, - - "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", - }, - "homeTutorials": { - ...en.homeTutorials, - - "createAppContent": "Bienvenido Haga clic en 'App' y comience a crear su primera solicitud.", - "createAppTitle": "Crear aplicación", - }, - "npmRegistry": { - ...en.npmRegistry, - - "npmRegistryEnable": "Habilitar el Registro NPM personalizado", - "npmRegistryUrl": "Url del registro del MNP", - "npmRegistryUrlRequired": "Introduzca la URL del registro", - "npmRegistryUrlInvalid": "Introduzca una URL válida", - "npmRegistryScope": "Alcance del paquete", - "npmRegistryPattern": "Patrón", - "npmRegistryPatternInvalid": "Por favor, introduzca un patrón válido (empezando por @ para organizaciones).", - "npmRegistryAuth": "Autenticación", - "npmRegistryAuthType": "Tipo de autenticación", - "npmRegistryAuthCredentials": "Credenciales de autenticación", - "npmRegistryAuthCredentialsRequired": "Introduzca las credenciales de registro", - "npmRegistryAuthCredentialsHelp": "Para la autenticación básica, proporcione el nombre de usuario y la contraseña codificados en base64 con el formato 'base64(nombredeusuario:contraseña)'; para la autenticación por token, proporcione el token.", - }, - "history": { - ...en.history, - - "layout": "{0}' ajuste de diseño", - "upgrade": "Actualizar '{0}'", - "delete": "Borrar '{0}'", - "add": "Añadir \"{0}\".", - "modify": "Modificar '{0}'", - "rename": "Cambie el nombre de \"{1}\" a \"{0}\".", - "recover": "Recuperar la versión '{2}", - "recoverVersion": "Recuperar versión", - "andSoOn": "etc.", - "timeFormat": "MM DD a las hh:mm A", - "emptyHistory": "Sin antecedentes", - "currentVersionWithBracket": " (Actual)", - "currentVersion": "Versión actual", - "justNow": "Ahora mismo", - "history": "Historia", - }, - "home": { - ...en.home, - - "profile": "Su perfil", - "news": "Noticias", - "newsLoading": "Se cargará unos segundos.", - "orgHome": "Página de inicio (Org)", - "yourOrg": "Su organización", - "orgHomeTitle": "Página de inicio de la organización", - "appMarketplace": "Mercado de aplicaciones", - "allApplications": "Tus aplicaciones", - "allModules": "Sus módulos", - "allFolders": "Sus carpetas", - "yourFolders": "Sus carpetas", - "modules": "Módulos", - "module": "Módulo", - "api": "API Lowcoder", - "trash": "Trash", - "marketplace": "Mercado", - "allCategories": "Todas las categorías", - "queryLibrary": "Biblioteca de consultas", - "datasource": "Fuentes de datos", - "selectDatasourceType": "Seleccione el tipo de fuente de datos", - "home": "Inicio", - "all": "Todos", - "app": "Aplicación", - "navigation": "Navegación", - "navLayout": "Navegación por PC", - "navLayoutDesc": "Menú a la izquierda para facilitar la navegación.", - "mobileTabLayout": "Navegación móvil", - "mobileTabLayoutDesc": "Barra de navegación inferior para una navegación móvil fluida.", - "folders": "Carpetas", - "folder": "Carpeta", - "rootFolder": "Raíz", - "import": "Importar", - "export": "Exportar a JSON", - "show": "Mostrar", - "inviteUser": "Invitar a miembros", - "createFolder": "Crear carpeta", - "createFolderSubTitle": "Nombre de la carpeta:", - "moveToFolder": "Mover a carpeta", - "moveToTrash": "Mover a la basura", - "moveToFolderSubTitle": "Mueve \"{name}\" a:", - "folderName": "Nombre de la carpeta:", - "resCardSubTitle": "{time} por {creator}", - "trashEmpty": "La papelera está vacía.", - "projectEmpty": "Aquí no hay nada.", - "projectEmptyCanAdd": "Aún no tienes ninguna aplicación. Haz clic en Nueva para empezar.", - "name": "Nombre", - "type": "Tipo", - "creator": "Creado por", - "lastModified": "Última modificación", - "deleteTime": "Borrar hora", - "createTime": "Crear tiempo", - "datasourceName": "Nombre de la fuente de datos", - "databaseName": "Nombre de la base de datos", - "nameCheckMessage": "El nombre no puede estar vacío", - "deleteElementTitle": "Borrar permanentemente", - "moveToTrashSubTitle": "{type} {name} se trasladará a la papelera.", - "deleteElementSubTitle": "Borre {type} {name} permanentemente, no se puede recuperar.", - "deleteSuccessMsg": "Eliminado con éxito", - "deleteErrorMsg": "Error borrado", - "recoverSuccessMsg": "Recuperado con éxito", - "newDatasource": "Nueva fuente de datos", - "creating": "Crear...", - "chooseDataSourceType": "Elija el tipo de fuente de datos", - "folderAlreadyExists": "La carpeta ya existe", - "newNavLayout": "{userName}'s {name}", - "newApp": "El nuevo {userName} de {name}", - "importError": "Error de importación, {message}", - "exportError": "Error de exportación, {message}", - "importSuccess": "Éxito de la importación", - "fileUploadError": "Error de carga de archivos", - "fileFormatError": "Error de formato de archivo", - "groupWithSquareBrackets": "[Grupo]", - "allPermissions": "Propietario", - "shareLink": "Compartir enlace:", - "copyLink": "Copiar enlace", - "appPublicMessage": "Haz pública la aplicación. Cualquiera puede verla.", - "modulePublicMessage": "Haz público el módulo. Cualquiera puede verlo.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Publica tu aplicación en el Mercado Público. Cualquiera podrá verla y copiarla desde allí.", - "moduleMarketplaceMessage": "Publica tu Módulo en el Mercado Público. Cualquiera puede verlo y copiarlo desde allí.", - "marketplaceGoodPublishing": "Asegúrate de que tu aplicación tiene un buen nombre y es fácil de usar. Elimina cualquier información sensible antes de publicarla. Además, elimine las fuentes de datos locales y sustitúyalas por datos temporales estáticos integrados.", - "noMarketplaceApps": "Aún no hay aplicaciones en el mercado", - "errorMarketplaceApps": "Error al cargar Marketplace Apps", - "localMarketplaceTitle": "Mercado local", - "globalMarketplaceTitle": "Mercado público", - "memberPermissionList": "Permisos de los miembros:", - "orgName": "{orgName} admins", - "addMember": "Añadir miembros", - "addPermissionPlaceholder": "Introduzca un nombre para buscar miembros", - "searchMemberOrGroup": "Buscar miembros o grupos:", - "addPermissionErrorMessage": "Fallo al añadir permiso, {message}", - "copyModalTitle": "Clonar \"{name}\"", - "copyNameLabel": "{type} nombre", - "copyModalfolderLabel": "Añadir a la carpeta", - "copyNamePlaceholder": "Por favor, introduzca un nombre {type}.", - "chooseNavType": "Elija el tipo de navegación", - "createNavigation": "Crear navegación", - "howToUseAPI": "Cómo utilizar la API Rest abierta", - "support": "Ayuda", - }, - "support": { - ...en.support, - - "supportTitle": "Soporte Lowcoder", - "supportContent": "Si tiene alguna pregunta o necesita ayuda, utilice el sistema de tickets para resolver su problema rápidamente.", - "newSupportTicket": "Nuevo ticket de soporte", - "ticketTitle": "Título", - "priority": "Prioridad", - "assignee": "Cesionario", - "status": "Estado del billete", - "updatedTime": "Hora de actualización", - "active": "Activo", - "inactive": "Inactivo", - "noEmail": "No Email", - "details": "Detalles", - "reloadTickets": "Entradas Reload", - "createdDate": "Fecha de creación", - "updatedDate": "Fecha de actualización", - "description": "Descripción del problema", - "subtasks": "Subtareas", - "subtasksProgress": "Progreso de todas las subtareas", - "attachments": "Emisión de anexos", - "comments": "Comentarios", - "addComment": "Añadir comentario", - "addAttachment": "Añadir anexo", - "edit": "Editar descripción del ticket", - "save": "Guardar billete Descripción", - "cancel": "Cancelar", - "submitComment": "Enviar comentario", - "upload": "Enviar anexo", - "selectFile": "Seleccionar archivo", - "ticketDescriptionUpdated": "Descripción de la entrada actualizada correctamente", - "ticketDescriptionUpdateFailed": "Error al actualizar la descripción del ticket.", - "writeComment": "Escribe un comentario...", - "ticketCommentAdded": "¡Comentario añadido correctamente!", - "ticketCommentFailed": "No se ha podido añadir el comentario.", - "ticketCommentEmpty": "Por favor, escriba un comentario antes de enviarlo.", - "ticketAttachmentUploaded": "El archivo adjunto se ha cargado correctamente.", - "ticketAttachmentFailed": "No se ha podido cargar el archivo adjunto.", - "ticketAttachmentEmpty": "Seleccione un archivo para cargar.", - "ticketFetchError": "Error al cargar el ticket.", - "ticketNotFound": "Billete no encontrado.", - "addAttachmentFileSize": "El archivo debe pesar menos de 5 MB.", - "goBack": "Volver atrás", - "noDescription": "No hay descripción disponible.", - "createTicket": "Crear un nuevo Ticket de Soporte", - "createTicketTitlePlaceholder": "Introduzca el título (máx. 150 caracteres)", - "createTicketDescriptionTitle": "Describa su problema: cuantos más detalles, mejor:", - "createTicketDescriptionPlaceholder": "Describa el problema en detalle, incluyendo 1) Pasos para reproducir el problema, 2) Comportamiento esperado frente a comportamiento real, 3) Fragmentos de código, si procede, 4) Cualquier componente, API o configuración específicos afectados.", - "createTicketSubmit": "Enviar billete", - "createTicketInfoText": "Una vez creado el billete, puede añadir capturas de pantalla y comentarios en la sección \"Detalles\".", - }, - "carousel": { - ...en.carousel, - - "dotPosition": "Posición de los puntos de navegación", - "autoPlay": "Reproducción automática", - "showDots": "Mostrar puntos de navegación", - }, - "npm": { - ...en.npm, - - "invalidNpmPackageName": "Nombre de paquete npm o URL no válidos.", - "pluginExisted": "Este plugin npm ya existía", - "compNotFound": "Componente {compName} No encontrado.", - "addPluginModalTitle": "Añadir plugin desde un repositorio npm", - "pluginNameLabel": "URL o nombre del paquete npm", - "noCompText": "Sin componentes.", - "compsLoading": "Cargando...", - "removePluginBtnText": "Eliminar", - "addPluginBtnText": "Añadir plugin npm", - }, - "toggleButton": { - ...en.toggleButton, - - "valueDesc": "El Valor por Defecto del Botón Alternar, Por Ejemplo: Falso", - "trueDefaultText": "Ocultar", - "falseDefaultText": "Mostrar", - "trueLabel": "Texto para True", - "falseLabel": "Texto para Falso", - "trueIconLabel": "Icono de True", - "falseIconLabel": "Icono de Falso", - "iconPosition": "Icono Posición", - "showText": "Mostrar texto", - "alignment": "Alineación", - "showBorder": "Mostrar borde", - }, - "componentDoc": { - ...en.componentDoc, - - "markdownDemoText": "**Lowcoder** | Cree aplicaciones de software para su empresa y sus clientes con un mínimo de experiencia en programación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", - "demoText": "Lowcoder | Cree aplicaciones de software para su Empresa y sus Clientes con mínima experiencia en codificación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", - "submit": "Enviar", - "style": "Estilo", - "danger": "Peligro", - "warning": "Advertencia", - "success": "Éxito", - "menu": "Menú", - "link": "Enlace", - "customAppearance": "Apariencia personalizada", - "search": "Buscar en", - "pleaseInputNumber": "Introduzca un número", - "mostValue": "Más valor", - "maxRating": "Clasificación máxima", - "notSelect": "No seleccionado", - "halfSelect": "Media selección", - "pleaseSelect": "Seleccione una opción", - "title": "Título", - "content": "Contenido", - "componentNotFound": "El componente no existe", - "example": "Ejemplos", - "defaultMethodDesc": "Establecer el valor de la propiedad {name}.", - "propertyUsage": "Puede leer información relacionada con los componentes accediendo a las propiedades de los componentes por nombre de componente en cualquier lugar donde pueda escribir JavaScript.", - "property": "Propiedades", - "propertyName": "Nombre de la propiedad", - "propertyType": "Tipo", - "propertyDesc": "Descripción", - "event": "Eventos", - "eventName": "Nombre del evento", - "eventDesc": "Descripción", - "mehtod": "Métodos", - "methodUsage": "Tiene la capacidad de interactuar con los componentes a través de sus respectivos métodos, a los que se puede acceder por sus nombres designados dentro de cualquier segmento en el que se utilice JavaScript. Además, estos componentes pueden activarse a través de la acción \"Componente de control\", que se activa en respuesta a eventos específicos.", - "methodName": "Nombre del método", - "methodDesc": "Descripción", - "showBorder": "Mostrar borde", - "haveTry": "Pruébelo usted mismo", - "settings": "Configuración", - "settingValues": "Valor de ajuste", - "defaultValue": "Valor por defecto", - "time": "Tiempo", - "date": "Fecha", - "noValue": "Ninguno", - "xAxisType": "Tipo de eje X", - "hAlignType": "Alineación horizontal", - "leftLeftAlign": "Alineación izquierda-izquierda", - "leftRightAlign": "Alineación izquierda-derecha", - "topLeftAlign": "Alineación superior izquierda", - "topRightAlign": "Alineación superior derecha", - "validation": "Validación", - "required": "Requerido", - "defaultStartDateValue": "Fecha de inicio por defecto", - "defaultEndDateValue": "Fecha de finalización por defecto", - "basicUsage": "Uso básico", - "basicDemoDescription": "Los siguientes ejemplos muestran el uso básico del componente.", - "noDefaultValue": "Sin valor por defecto", - "forbid": "Prohibido", - "placeholder": "Marcador de posición", - "pleaseInputPassword": "Introduzca una contraseña", - "password": "Contraseña", - "textAlign": "Alineación del texto", - "length": "Longitud", - "top": "Top", - "pleaseInputName": "Introduzca su nombre", - "userName": "Nombre", - "fixed": "Fijo", - "responsive": "Respuesta", - "workCount": "Recuento de palabras", - "cascaderOptions": "Opciones de Cascader", - "pleaseSelectCity": "Seleccione una ciudad", - "advanced": "Avanzado", - "showClearIcon": "Mostrar icono de borrado", - /* eslint-disable only-ascii/only-ascii */ - "appleOptionLabel": "🍎 Manzana", - "waterMelonOptionLabel": "🍉 Sandía", - "berryOptionLabel": "🍓 Fresa", - "lemonOptionLabel": "🍋 Limón", - "coconutOptionLabel": "🥥 Coco", - /* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Favoritos", - "option": "Opción", - "singleFileUpload": "Carga de un solo archivo", - "multiFileUpload": "Carga múltiple de archivos", - "folderUpload": "Cargar carpeta", - "multiFile": "Varios archivos", - "folder": "Carpeta", - "open": "Abrir", - "favoriteFruits": "Frutas favoritas", - "pleaseSelectOneFruit": "Seleccione una fruta", - "notComplete": "No Completo", - "complete": "Complete", - "echart": "EChart", - "lineChart": "Gráfico lineal", - "basicLineChart": "Gráfico de líneas básico", - "lineChartType": "Tipo de gráfico de líneas", - "stackLineChart": "Línea apilada", - "areaLineChart": "Línea de área", - "scatterChart": "Gráfico de dispersión", - "scatterShape": "Forma de dispersión", - "scatterShapeCircle": "Círculo", - "scatterShapeRect": "Rectángulo", - "scatterShapeTri": "Triángulo", - "scatterShapeDiamond": "Diamante", - "scatterShapePin": "Chincheta", - "scatterShapeArrow": "Flecha", - "pieChart": "Gráfico circular", - "basicPieChart": "Gráfico circular básico", - "pieChatType": "Tipo de gráfico circular", - "pieChartTypeCircle": "Gráfico de donuts", - "pieChartTypeRose": "Gráfico de rosas", - "titleAlign": "Título Cargo", - "color": "Color", - "dashed": "Dashed", - "imADivider": "Soy una línea divisoria", - "tableSize": "Tamaño de la tabla", - "subMenuItem": "Submenú {num}", - "menuItem": "Menú {num}", - "labelText": "Etiqueta", - "labelPosition": "Etiqueta - Posición", - "labelAlign": "Etiqueta - Alinear", - "optionsOptionType": "Método de configuración", - "styleBackgroundColor": "Color de fondo", - "styleBorderColor": "Color del borde", - "styleColor": "Color de fuente", - "selectionMode": "Modo de selección de filas", - "paginationSetting": "Configuración de la paginación", - "paginationShowSizeChanger": "Ayuda a los usuarios para modificar el número de entradas por página", - "paginationShowSizeChangerButton": "Botón de cambio de talla", - "paginationShowQuickJumper": "Mostrar Quick Jumper", - "paginationHideOnSinglePage": "Ocultar cuando sólo hay una página", - "paginationPageSizeOptions": "Tamaño de página", - "chartConfigCompType": "Tipo de gráfico", - "xConfigType": "Tipo de eje X", - "loading": "Cargando", - "disabled": "Discapacitados", - "minLength": "Longitud mínima", - "maxLength": "Longitud máxima", - "showCount": "Mostrar recuento de palabras", - "autoHeight": "Altura", - "thousandsSeparator": "Separador de miles", - "precision": "Posiciones decimales", - "value": "Valor por defecto", - "formatter": "Formato", - "min": "Valor mínimo", - "max": "Valor máximo", - "step": "Tamaño del escalón", - "start": "Hora de inicio", - "end": "Fin de los tiempos", - "allowHalf": "Permitir media selección", - "filetype": "Tipo de archivo", - "showUploadList": "Mostrar lista de cargas", - "uploadType": "Tipo de carga", - "allowClear": "Mostrar icono de borrado", - "minSize": "Tamaño mínimo del archivo", - "maxSize": "Tamaño máximo del archivo", - "maxFiles": "Número máximo de archivos cargados", - "format": "Formato", - "minDate": "Fecha mínima", - "maxDate": "Fecha máxima", - "minTime": "Tiempo mínimo", - "maxTime": "Tiempo máximo", - "text": "Texto", - "type": "Tipo", - "hideHeader": "Ocultar cabecera", - "hideBordered": "Ocultar frontera", - "src": "URL de la imagen", - "showInfo": "Mostrar valor", - "mode": "Modo", - "onlyMenu": "Sólo Menú", - "horizontalAlignment": "Alineación horizontal", - "row": "Izquierda", - "column": "Top", - "leftAlign": "Alineación izquierda", - "rightAlign": "Alineación correcta", - "percent": "Porcentaje", - "fixedHeight": "Altura fija", - "auto": "Adaptable", - "directory": "Carpeta", - "multiple": "Varios archivos", - "singleFile": "Archivo único", - "manual": "Manual", - "default": "Por defecto", - "small": "Pequeño", - "middle": "Medio", - "large": "Grande", - "single": "Único", - "multi": "Múltiples", - "close": "Cerrar", - "ui": "Modo IU", - "line": "Gráfico lineal", - "scatter": "Gráfico de dispersión", - "pie": "Gráfico circular", - "basicLine": "Gráfico de líneas básico", - "stackedLine": "Gráfico de líneas apiladas", - "areaLine": "Mapa de la zona", - "basicPie": "Gráfico circular básico", - "doughnutPie": "Gráfico de donuts", - "rosePie": "Gráfico de rosas", - "category": "Categoría Eje", - "circle": "Círculo", - "rect": "Rectángulo", - "triangle": "Triángulo", - "diamond": "Diamante", - "pin": "Chincheta", - "arrow": "Flecha", - "left": "Izquierda", - "right": "Derecha", - "center": "Centro", - "bottom": "Fondo", - "justify": "Justificar ambos extremos", - }, - "playground": { - ...en.playground, - - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Estado actual de los datos", - "preview": "Vista previa", - "property": "Propiedades", - "console": "Consola Visual Script", - "executeMethods": "Ejecutar métodos", - "noMethods": "Sin métodos.", - "methodParams": "Parámetros del método", - "methodParamsHelp": "Parámetros del método de entrada usando JSON. Por ejemplo, puede establecer los parámetros de setValue con: [1] o 1", - }, - "calendar": { - ...en.calendar, - - "headerBtnBackground": "Botón Fondo", - "btnText": "Texto del botón", - "title": "Título", - "selectBackground": "Antecedentes", - }, - "idSource": { - ...en.idSource, - - "title": "Proveedor de autenticación de usuarios", - "form": "Correo electrónico", - "pay": "Premium", - "enable": "Activar", - "unEnable": "No activado", - "loginType": "Tipo de conexión", - "status": "Estado", - "desc": "Descripción", - "manual": "Libreta de direcciones:", - "syncManual": "Sincronizar libreta de direcciones", - "syncManualSuccess": "Sincronización realizada", - "enableRegister": "Permitir el registro", - "saveBtn": "Guardar y activar", - "save": "Guardar", - "none": "Ninguno", - "formPlaceholder": "Por favor, introduzca {label}", - "formSelectPlaceholder": "Por favor, seleccione el {label}", - "saveSuccess": "Guardado correctamente", - "dangerLabel": "Zona de peligro", - "dangerTip": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Proceda con precaución.", - "disable": "Desactivar", - "disableSuccess": "Desactivado correctamente", - "encryptedServer": "-------- Cifrado en el lado del servidor --------", - "disableTip": "Consejos", - "disableContent": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Está seguro de continuar?", - "manualTip": "", - "lockTip": "El contenido está bloqueado. Para realizar cambios, haga clic en {icon} para desbloquear.", - "lockModalContent": "La modificación del campo \"Atributo ID\" puede tener repercusiones importantes en la identificación del usuario. Por favor, confirme que entiende las implicaciones de este cambio antes de proceder.", - "payUserTag": "Premium", - "source": "Fuente", - "sourceName": "Nombre del proveedor de autenticación", - "sourceDescription": "Descripción del proveedor de autenticación", - "sourceIcon": "Icono de proveedor de autenticación", - "sourceCategory": "Categoría de proveedor de autenticación", - "souceIssuerURI": "URI del emisor del proveedor de autenticación", - "souceAuthorizationEndpoint": "Proveedor de autenticación Punto final de autorización", - "souceTokenEndpoint": "Punto final del token del proveedor de autenticación", - "souceUserInfoEndpoint": "Proveedor de autenticación Información de usuario Punto final", - "userInfoIntrospection": "Utilizar la introspección de usuarios de OpenID", - "userCanSelectAccounts": "El usuario puede seleccionar una cuenta", - "sourceCategoryEnterprise": "Identidad empresarial", - "sourceCategoryCloud": "Servicios en la nube", - "sourceCategorySocial": "Social Media", - "sourceCategoryDevelopment": "Desarrollo", - "sourceCategoryTools": "Herramientas y productividad", - }, - "slotControl": { - ...en.slotControl, - - "configSlotView": "Configurar vista de ranura", - }, - "jsonLottie": { - ...en.jsonLottie, - - "lottieJson": "Lottie JSON", - "speed": "Velocidad", - "width": "Anchura", - "height": "Altura", - "backgroundColor": "Color de fondo", - "animationStart": "Inicio de la animación", - "valueDesc": "Datos JSON actuales", - "loop": "Bucle", - "auto": "Coche", - "onHover": "Al pasar el ratón", - "singlePlay": "Juego individual", - "endlessLoop": "Bucle sin fin", - "keepLastFrame": "Mantener visualizado el último fotograma", - }, - "timeLine": { - ...en.timeLine, - - "titleColor": "Título Color", - "subTitleColor": "Color del subtítulo", - "labelColor": "Color de la etiqueta", - "value": "Datos cronológicos", - "mode": "Orden de visualización", - "left": "Derecho de contenido", - "right": "Contenido Izquierda", - "alternate": "Orden alternativo de los contenidos", - "modeTooltip": "Configurar el contenido para que aparezca a izquierda/derecha o alternativamente en ambos lados de la línea de tiempo", - "reverse": "Eventos más recientes primero", - "pending": "Texto de nodo pendiente", - "pendingDescription": "Si se establece, se mostrará un último nodo con el texto y un indicador de espera.", - "defaultPending": "Mejora continua", - "clickTitleEvent": "Haga clic en Título Evento", - "clickTitleEventDesc": "Haga clic en Título Evento", - "Introduction": "Introducción Claves", - "helpTitle": "Título del cronograma (obligatorio)", - "helpsubTitle": "Subtítulo de la cronología", - "helpLabel": "Etiqueta de la línea de tiempo, utilizada para mostrar fechas", - "helpColor": "Indica el color del nodo de la línea de tiempo", - "helpDot": "Representación de nodos de la línea de tiempo como iconos de diseño de Ant", - "helpTitleColor": "Controlar individualmente el color del título del nodo", - "helpSubTitleColor": "Controlar individualmente el color del subtítulo del nodo", - "helpLabelColor": "Control individual del color del icono de nodo", - "valueDesc": "Datos de la cronología", - "clickedObjectDesc": "Datos del artículo seleccionado", - "clickedIndexDesc": "Índice de elementos pulsados", - }, - "comment": { - ...en.comment, - - "value": "Cómo listar datos", - "showSendButton": "Permitir comentarios", - "title": "Título", - "titledDefaultValue": "%d Comentario en total", - "placeholder": "Mayúsculas + Intro para comentar; @ o # para entrada rápida", - "placeholderDec": "Marcador de posición", - "buttonTextDec": "Botón Título", - "buttonText": "Cómo", - "mentionList": "Datos de la lista de menciones", - "mentionListDec": "Palabras clave con mención clave; datos de la lista con mención de valor", - "userInfo": "Información del usuario", - "dateErr": "Error de fecha", - "commentList": "Cómo hacer una lista", - "deletedItem": "Elemento suprimido", - "submitedItem": "Artículo presentado", - "deleteAble": "Mostrar botón Eliminar", - "Introduction": "Introducción Claves", - "helpUser": "Información del usuario (obligatoria)", - "helpname": "Nombre de usuario (obligatorio)", - "helpavatar": "Avatar URL (Alta prioridad)", - "helpdisplayName": "Nombre para mostrar (prioridad baja)", - "helpvalue": "Contenido", - "helpcreatedAt": "Fecha de creación", - }, - "mention": { - ...en.mention, - - "mentionList": "Datos de la lista de menciones", - }, - "autoComplete": { - ...en.autoComplete, - - "value": "Auto Complete Value", - "checkedValueFrom": "Valor comprobado De", - "ignoreCase": "Buscar Ignorar caso", - "searchLabelOnly": "Buscar sólo etiqueta", - "searchFirstPY": "Buscar First Pinyin", - "searchCompletePY": "Buscar Pinyin completo", - "searchText": "Buscar texto", - "SectionDataName": "Autocompletar datos", - "valueInItems": "Valor en artículos", - "type": "Tipo", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Clave", - "selectLable": "Etiqueta", - "ComponentType": "Tipo de componente", - "colorIcon": "Azul", - "grewIcon": "Gris", - "noneIcon": "Ninguno", - "small": "Pequeño", - "large": "Grande", - "componentSize": "Tamaño del componente", - "Introduction": "Introducción Claves", - "helpLabel": "Etiqueta", - "helpValue": "Valor", - }, - "responsiveLayout": { - ...en.responsiveLayout, - - "column": "Columnas", - "addColumn": "Añadir columna", - "columnDefinition": "Definición de columna", - "rowDefinition": "Definición de fila", - "columnGap": "Hueco entre columnas", - "rowGap": "Hueco entre filas", - "atLeastOneColumnError": "El diseño adaptable mantiene al menos una columna", - "columnsPerRow": "Columnas por fila", - "columnsSpacing": "Espacio entre columnas (px)", - "horizontal": "Horizontal", - "vertical": "Vertical", - "mobile": "Móvil", - "tablet": "Tableta", - "desktop": "Escritorio", - "rowStyle": "Estilo Fila", - "columnStyle": "Estilo columna", - "minWidth": "Mín. Anchura", - "rowBreak": "Row Break", - "useComponentWidth": "Usar tamaño propio", - "useComponentWidthDesc": "Usa el ancho del contenedor en lugar del ancho de la aplicación", - "matchColumnsHeight": "Igualar la altura de las columnas", - "rowLayout": "Disposición de filas", - "columnsLayout": "Disposición de las columnas", - "columnsDefinitionTooltip": "Las columnas pueden definirse libremente basándose en las propiedades CSS de las columnas. Por ejemplo, 'auto auto' creará dos columnas con la misma anchura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "Las filas pueden definirse libremente basándose en las propiedades CSS de las filas. Por ejemplo, 'auto auto' creará dos filas con la misma altura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, - "navLayout": { - ...en.navLayout, - - "mode": "Modo", - "modeInline": "En línea", - "modeVertical": "Vertical", - "modeHorizontal": "Horizontal", - "width": "Anchura", - "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", - "navStyle": "Menú de estilo", - "navItemStyle": "Estilo del elemento de menú", - "navBackground": "Imagen de fondo", - "mobileNavVerticalOrientation": "Orientación vertical", - "mobileNavVerticalMaxWidth": "Anchura máxima", - "mobileNavBarHeight": "Altura de la barra de navegación", - "mobileNavVerticalShowSeparator": "Mostrar separador", - "mobileNavIconSize": "Tamaño del icono", - }, - "timeZone": { - ...en.timeZone, - - "UTC-12:00": "(UTC-12:00) Línea de fecha internacional W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Hawai", - "UTC-09:00": "(UTC-09:00) Alaska", - "UTC-08:00": "(UTC-08:00) Baja CA", - "UTC-07:00": "(UTC-07:00) Hora del Pacífico (EE.UU.)", - "UTC-06:00": "(UTC-06:00) Hora central (EE.UU.)", - "UTC-05:00": "(UTC-05:00) Hora del Este (EE.UU.)", - "UTC-04:00": "(UTC-04:00) Hora del Atlántico", - "UTC-03:00": "(UTC-03:00) Buenos Aires", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Cabo Verde", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Berlín, Roma", - "UTC+02:00": "(UTC+02:00) Atenas, Bucarest", - "UTC+03:00": "(UTC+03:00) Moscú", - "UTC+04:00": "(UTC+04:00) Dubai, Mascate", - "UTC+05:00": "(UTC+05:00) Karachi", - "UTC+05:30": "(UTC+05:30) Nueva Delhi", - "UTC+05:45": "(UTC+05:45) Katmandú", - "UTC+06:00": "(UTC+06:00) Dacca", - "UTC+06:30": "(UTC+06:30) Yangón", - "UTC+07:00": "(UTC+07:00) Bangkok", - "UTC+08:00": "(UTC+08:00) Pekín, HK", - "UTC+09:00": "(UTC+09:00) Tokio, Seúl", - "UTC+09:30": "(UTC+09:30) Adelaida, Darwin", - "UTC+10:00": "(UTC+10:00) Sídney", - "UTC+11:00": "(UTC+11:00) Islas Salomón, Nueva Caledonia", - "UTC+12:00": "(UTC+12:00) Auckland, Fiyi", - "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", - "UserChoice": "Elección de usuario", - }, - "tour": { - ...en.tour, - - "section1Title": "Pasos", - "section1Subtitle": "Pasos", - "tooltipExampleHeader": "Ejemplo:", - "tooltipSignatureHeader": "Firma:", - "options": { - ...en.tour.options, - - "title": { - ...en.tour.options.title, - - "label": "Título", - "placeholder": "Bienvenido", - "tooltip": "El título del paso. Cualquier HTML es válido aquí.", - }, - "description": { - ...en.tour.options.description, - - "label": "Descripción", - "placeholder": "¡Bienvenido a lowcoder!", - "tooltip": "La descripción del paso. Cualquier HTML es válido aquí.", - }, - "mask": { - ...en.tour.options.mask, - - "label": "Máscara", - "tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar props personalizados, por defecto sigue la propiedad `mask` de Tour.", - "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", - }, - "arrow": { - ...en.tour.options.arrow, - - "label": "Flecha", - "tooltip": "Activa y desactiva la flecha o la mueve para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente.", - "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.options.type, - - "label": "Tipo", - "tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores pueden ser controlados con la sección de estilo del tour principal.", - }, - "target": { - ...en.tour.options.target, - - "label": "Componente", - "tooltip": "El componente en el que quieres poner el tooltip, o déjalo vacío si simplemente quieres un modal en medio de la pantalla.", - }, - "coverImage": { - ...en.tour.options.coverImage, - - "label": "URI de la imagen de portada", - "tooltip": "Un URI para una imagen que desea mostrar con el paso", - }, - }, - "indicatorsRender": { - ...en.tour.indicatorsRender, - - "label": "Indicadores Render", - "tooltip": "Proporciona un indicador personalizado para saber en qué paso se encuentra", - "tooltipValidTypes": "Format es una función que acepta dos args, `current` y `total` y devuelve un ReactNode", - "tooltipFunctionSignatureHeader": "Firma:", - "tooltipFunctionSignature": "(actual: número, total: número) => ReactNode", - "tooltipExampleHeader": "Ejemplo:", - }, - "disabledInteraction": { - ...en.tour.disabledInteraction, - - "label": "Desactivar la interacción", - "tooltip": "Desactiva la interacción en la zona resaltada.", - }, - "mask": { - ...en.tour.mask, - - "label": "Máscara", - "tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar accesorios personalizados, el valor predeterminado sigue la propiedad `mask` de Tour. Se puede anular a nivel de paso.", - "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", - }, - "placement": { - ...en.tour.placement, - - "label": "Colocación", - "tooltip": "Posición de la tarjeta guía respecto al elemento de destino. Puede anularse en el nivel de paso.", - "tooltipValidOptions": "Opciones válidas", - "tooltipValidOptionsAbove": "Por encima del componente:", - "tooltipValidOptionsLeft": "A la izquierda del componente:", - "tooltipValidOptionsRight": "A la derecha del componente:", - "tooltipValidOptionsBelow": "Debajo del componente:", - "tooltipValidOptionsOnTop": "Encima del componente:", - }, - "arrow": { - ...en.tour.arrow, - - "label": "Flecha", - "tooltip": "Activa y desactiva la flecha o la desplaza para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente. Se puede anular en el nivel de paso.", - "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.type, - - "label": "Tipo", - "tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores se pueden controlar con la sección de estilo del recorrido principal. Se puede anular a nivel de paso.", - }, - }, - "docUrls": { - ...en.docUrls, - - "docHome": "https://docs.lowcoder.cloud/", - "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - "components": "https://app.lowcoder.cloud/components/{compType}", - "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - "optionList": "", - "terms": "https://lowcoder.cloud/terms", - "privacy": "https://lowcoder.cloud/privacy", - "aboutUs": "https://lowcoder.cloud/about", - "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", - "introVideo": "", - "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - "devNpmPluginText": "Cómo desarrollar un plugin npm", - "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - "thirdLibUrlText": "Utilizar bibliotecas de terceros", - }, - "datasourceTutorial": { - ...en.datasourceTutorial, - - "mysql": "", - "mongodb": "", - "postgres": "", - "redis": "", - "es": "", - "smtp": "", - "clickHouse": "", - }, - "queryTutorial": { - ...en.queryTutorial, - - "js": "", - "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - "customComponent": { - ...en.customComponent, - - "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", - }, - "template": { - ...en.template, - - "cloneUrl": "/apps/plantilla-import/", - }, - "lowcoderUrl": { - ...en.lowcoderUrl, - - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", - }, + ...en, + +"productName": "Lowcoder", +"productDesc": "Cree aplicaciones de software para su empresa y sus clientes con una experiencia mínima en codificación. Lowcoder es una excelente alternativa a Retool, Appsmith y Tooljet.", +"notSupportedBrowser": "Su navegador actual puede tener problemas de compatibilidad. Para una experiencia de usuario óptima, utilice la última versión de Chrome.", +"create": "Cree", +"move": "Mover", +"addItem": "Añadir", +"newItem": "Nuevo", +"copy": "Copia", +"rename": "Cambie el nombre de", +"delete": "Borrar", +"deletePermanently": "Borrar permanentemente", +"remove": "Eliminar", +"recover": "Recuperar", +"edit": "Editar", +"view": "Ver", +"value": "Valor", +"data": "Datos", +"information": "Información", +"success": "Éxito", +"warning": "Advertencia", +"error": "Error", +"reference": "Referencia", +"text": "Texto", +"basic": "Básico", +"label": "Etiqueta", +"layout": "Diseño", +"color": "Color", +"form": "Forma", +"menu": "Menú", +"menuItem": "Elemento del menú", +"ok": "OK", +"cancel": "Cancelar", +"finish": "Acabado", +"reset": "Restablecer", +"icon": "Icono", +"code": "Código", +"title": "Título", +"emptyContent": "Contenido vacío", +"more": "Más", +"search": "Buscar en", +"back": "Volver", +"accessControl": "Control de acceso", +"copySuccess": "Copiado correctamente", +"copyError": "Error de copia", +"api": { + ...en.api, + +"publishSuccess": "Publicado con éxito", +"recoverFailed": "Recuperación fallida", +"needUpdate": "Su versión actual es obsoleta. Por favor, actualice a la última versión.", +}, +"codeEditor": { + ...en.codeEditor, + +"notSupportAutoFormat": "El editor de código actual no soporta el autoformateo.", +"fold": "Pliegue", +}, +"exportMethod": { + ...en.exportMethod, + +"setDesc": "Establecer propiedad: ___MARCADOR0___", +"clearDesc": "Borrar propiedad: ___TITULAR0___", +"resetDesc": "Restablecer propiedad: {property} al valor por defecto", +}, +"method": { + ...en.method, + +"focus": "Fijar el foco", +"focusOptions": "Opciones de enfoque. Véase HTMLElement.focus()", +"blur": "Quitar el foco", +"click": "Haga clic en", +"select": "Seleccionar todo el texto", +"setSelectionRange": "Fijar las posiciones inicial y final de la selección de texto", +"selectionStart": "Índice basado en 0 del primer carácter seleccionado", +"selectionEnd": "Índice basado en 0 del carácter después del último carácter seleccionado", +"setRangeText": "Reemplazar rango de texto", +"replacement": "Cadena a insertar", +"replaceStart": "Índice basado en 0 del primer carácter a sustituir", +"replaceEnd": "Índice basado en 0 del carácter después del último carácter a sustituir", +}, +"errorBoundary": { + ...en.errorBoundary, + +"encounterError": "Error al cargar el componente. Compruebe la configuración.", +"clickToReload": "Haga clic para recargar", +"errorMsg": "Error:", +}, +"imgUpload": { + ...en.imgUpload, + +"notSupportError": "Sólo admite tipos de imagen {types}.", +"exceedSizeError": "El tamaño de la imagen no debe superar {size}.", +}, +"gridCompOperator": { + ...en.gridCompOperator, + +"notSupport": "No se admite", +"selectAtLeastOneComponent": "Seleccione al menos un componente", +"selectCompFirst": "Seleccionar componentes antes de copiar", +"noContainerSelected": "[Bug] No hay contenedor seleccionado", +"deleteCompsSuccess": "Eliminado con éxito. Pulse {undoKey} para deshacer.", +"deleteCompsTitle": "Eliminar componentes", +"deleteCompsBody": "¿Seguro que desea suprimir {compNum} componentes seleccionados?", +"cutCompsSuccess": "Cortar con éxito. Pulse ___CARTER0___ para pegar, o ___CARTER1___ para deshacer.", +}, +"leftPanel": { + ...en.leftPanel, + +"queries": "Consultas de datos en su aplicación", +"globals": "Global Data Variables", +"propTipsArr": "{num} Artículos", +"propTips": "{num} Claves", +"propTipArr": "PLACEHOLDER0___ Artículo", +"propTip": "{num} Clave", +"stateTab": "Estado", +"settingsTab": "Ajustes", +"toolbarTitle": "Individualización", +"toolbarPreload": "Guiones y estilos", +"components": "Componentes activos", +"modals": "modales in-app", +"expandTip": "Haga clic para mostrar los datos de {component}.", +"collapseTip": "Haga clic para ocultar los datos de {component}.", +"layers": "Capas", +"activatelayers": "Utilizar capas dinámicas", +"selectedComponents": "Componentes seleccionados...", +"displayComponents": "control Pantalla", +"lockComponents": "control Posición", +}, +"bottomPanel": { + ...en.bottomPanel, + +"title": "Consultas de datos", +"run": "Ejecutar", +"noSelectedQuery": "Ninguna consulta seleccionada", +"metaData": "Metadatos de la fuente de datos", +"noMetadata": "No hay metadatos disponibles", +"metaSearchPlaceholder": "Buscar metadatos", +"allData": "Todas las mesas", +}, +"rightPanel": { + ...en.rightPanel, + +"propertyTab": "Propiedades", +"noSelectedComps": "No hay componentes seleccionados. Haga clic en un componente para ver sus propiedades.", +"createTab": "Inserte", +"searchPlaceHolder": "Buscar componentes o módulos", +"uiComponentTab": "Componentes", +"extensionTab": "Extensiones", +"modulesTab": "Módulos", +"moduleListTitle": "Módulos", +"pluginListTitle": "Plugins", +"emptyModules": "Los módulos son Mikro-Apps reutilizables. Puede incrustarlos en su App.", +"searchNotFound": "¿No encuentra el componente adecuado?", +"emptyPlugins": "No se han añadido plugins", +"contactUs": "Contacte con nosotros", +"issueHere": "aquí.", +"folderListTitle": "Carpetas", +}, +"prop": { + ...en.prop, + +"expand": "Ampliar", +"columns": "Columnas", +"videokey": "Llave de vídeo", +"rowSelection": "Selección de filas", +"toolbar": "Barra de herramientas", +"pagination": "Paginación", +"logo": "Logotipo", +"style": "Estilo", +"inputs": "Entradas", +"meta": "Metadatos", +"data": "Datos", +"hide": "Ocultar", +"loading": "Cargando", +"disabled": "Discapacitados", +"placeholder": "Marcador de posición", +"showClear": "Mostrar botón de borrado", +"showSearch": "Búsqueda en", +"defaultValue": "Valor por defecto", +"required": "Campo obligatorio", +"showEmptyValidation": "Mostrar validación en vacío/reinicio", +"readOnly": "Sólo lectura", +"readOnlyTooltip": "Los componentes de sólo lectura parecen normales pero no pueden modificarse.", +"minimum": "Mínimo", +"maximum": "Máximo", +"regex": "Regex", +"minLength": "Longitud mínima", +"maxLength": "Longitud máxima", +"height": "Altura", +"width": "Anchura", +"selectApp": "Seleccionar aplicación", +"showCount": "Mostrar recuento", +"tabIndex": "Ficha Índice", +"textType": "Tipo de texto", +"customRule": "Norma personalizada", +"customRuleTooltip": "Una cadena no vacía indica un error; vacía o nula significa que se ha superado la validación. Ejemplo:", +"manual": "Manual", +"map": "Mapa", +"json": "JSON", +"use12Hours": "Utilice el formato de 12 horas", +"hourStep": "Hora Paso", +"minuteStep": "Paso del minuto", +"secondStep": "Segundo paso", +"minDate": "Fecha mínima", +"maxDate": "Fecha máxima", +"minTime": "Tiempo mínimo", +"maxTime": "Tiempo máximo", +"type": "Tipo", +"showLabel": "Mostrar etiqueta", +"showHeader": "Mostrar cabecera", +"showBody": "Mostrar cuerpo", +"showSider": "Mostrar Sider", +"innerSider": "Páginas interiores", +"showFooter": "Mostrar pie de página", +"maskClosable": "Haga clic fuera para cerrar", +"escapeClose": "Activar el cierre con la tecla Escape", +"toggleClose": "Activar el botón Cerrar", +"showMask": "Mostrar máscara", +"textOverflow": "Desbordamiento de texto", +"scrollbar": "Mostrar barras de desplazamiento", +"showVerticalScrollbar": "Mostrar barra de desplazamiento vertical", +"showHorizontalScrollbar": "Mostrar barra de desplazamiento horizontal", +"siderScrollbar": "Mostrar barras de desplazamiento en Sider", +"mainScrollbar": "Mostrar barras de desplazamiento en el contenido principal", +"modalScrollbar": "Mostrar barras de desplazamiento en Modal", +"drawerScrollbar": "Mostrar barras de desplazamiento en el cajón", +"textAreaScrollBar": "Mostrar barras de desplazamiento en el área de texto", +"siderRight": "Show sider a la derecha", +"siderWidth": "Ancho Sider", +"siderWidthTooltip": "La anchura del navegador admite porcentajes (%) y píxeles (px).", +"siderCollapsedWidth": "Sider Anchura colapsada", +"siderCollapsedWidthTooltip": "La anchura colapsada de Sider admite porcentajes (%) y píxeles (px).", +"siderCollapsible": "Sider plegable", +"siderCollapsed": "Sider Colapsado", +"contentScrollbar": "Mostrar barras de desplazamiento en el contenido", +"appID": "Id de aplicación", +"showApp": "Mostrar una aplicación en el área de contenido", +"showAppTooltip": "Puede mostrar aplicaciones completas en el área de contenido. Tenga en cuenta que los módulos no admiten entradas, salidas, eventos ni métodos.", +"baseURL": "URL base de la API", +"horizontal": "Horizontal", +"minHorizontalWidth": "Anchura horizontal mínima", +"component": "Identificadores de componentes propios", +"className": "Nombre de la clase CSS", +"dataTestId": "Identificación individual", +"preventOverwriting": "Evitar la sobreescritura de estilos", +"color": "Color", +"horizontalGridCells": "Celdas de cuadrícula horizontales", +"verticalGridCells": "Celdas de cuadrícula vertical", +"timeZone": "Zona horaria", +"pickerMode": "Modo selector", +}, +"autoHeightProp": { + ...en.autoHeightProp, + +"auto": "Coche", +"fixed": "Fijo", +}, +"textOverflowProp": { + ...en.textOverflowProp, + +"ellipsis": "Mouseover", +"wrap": "Envolver", +}, +"labelProp": { + ...en.labelProp, + +"text": "Etiqueta", +"tooltip": "Información sobre herramientas", +"position": "Posición", +"collapse": "Colapso", +"left": "Izquierda", +"right": "Derecha", +"top": "Top", +"align": "Alineación", +"width": "Anchura", +"widthTooltip": "La anchura de la etiqueta admite porcentajes (%) y píxeles (px).", +}, +"eventHandler": { + ...en.eventHandler, + +"eventHandlers": "Controladores de eventos", +"emptyEventHandlers": "Sin controladores de eventos", +"incomplete": "Selección incompleta", +"inlineEventTitle": "En {eventName}", +"event": "Evento", +"action": "Acción", +"noSelect": "Sin selección", +"runQuery": "Ejecutar una consulta de datos", +"selectQuery": "Seleccionar consulta de datos", +"controlComp": "Control a Component", +"runScript": "Ejecutar JavaScript", +"runScriptPlaceHolder": "Escriba aquí el código", +"component": "Componente", +"method": "Método", +"setTempState": "Establecer un valor de Estado Temporal", +"state": "Estado", +"triggerModuleEvent": "Activar un evento de módulo", +"moduleEvent": "Módulo Evento", +"goToApp": "Ir a otra aplicación", +"queryParams": "Parámetros de consulta", +"queryVariables": "Variables de consulta", +"hashParams": "Parámetros Hash", +"showNotification": "Mostrar una notificación", +"text": "Texto", +"level": "Nivel", +"duration": "Duración", +"notifyDurationTooltip": "La unidad de tiempo puede ser 's' (segundo, por defecto) o 'ms' (milisegundo). La duración máxima es {max} segundos", +"goToURL": "Abrir una URL", +"openInNewTab": "Abrir en una nueva pestaña", +"copyToClipboard": "Copiar un valor en el portapapeles", +"copyToClipboardValue": "Valor", +"export": "Exportar datos", +"exportNoFileType": "Sin selección (opcional)", +"fileName": "Nombre del archivo", +"fileNameTooltip": "Incluya la extensión para especificar el tipo de archivo, por ejemplo, 'imagen.png'", +"fileType": "Tipo de archivo", +"condition": "Corre sólo cuando...", +"conditionTooltip": "Ejecutar el controlador de eventos sólo cuando esta condición se evalúa como \"true\".", +"debounce": "Rebote para", +"throttle": "Acelerador para", +"slowdownTooltip": "Utiliza debounce o throttle para controlar la frecuencia de los disparos de acción. La unidad de tiempo puede ser \"ms\" (milisegundo, por defecto) o \"s\" (segundo).", +"notHandledError": "No manipulado", +"currentApp": "Actual", +"inputEventHandlers": "Manejadores de eventos de entrada", +"inputEventHandlersDesc": "Controladores de eventos relacionados con la entrada del usuario", +"buttonEventHandlers": "Controladores de eventos de botones", +"buttonEventHandlersDesc": "Controladores de eventos relacionados con pulsaciones de botones", +"changeEventHandlers": "Cambiar los controladores de eventos", +"changeEventHandlersDesc": "Controladores de eventos relacionados con cambios de valor", +"editedEventHandlers": "Editar controladores de eventos", +"editedEventHandlersDesc": "Controladores de eventos relacionados con el estado editado de los elementos", +"clickEventHandlers": "Controladores de eventos de clic", +"clickEventHandlersDesc": "Controladores de eventos relacionados con los clics", +"keyDownEventHandlers": "Manejadores de eventos de teclas pulsadas", +"keyDownEventHandlersDesc": "Controladores de eventos relacionados con eventos de teclas pulsadas", +"checkboxEventHandlers": "Controladores de eventos de casillas de verificación", +"checkboxEventHandlersDesc": "Controladores de Eventos relacionados con Cambios de Casilla", +"dragEventHandlers": "Controladores de eventos de arrastre", +"dragEventHandlersDesc": "Controladores de Eventos relacionados con Eventos de Arrastrar y Soltar", +"elementEventHandlers": "Controladores de eventos de elementos", +"elementEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Elementos de Datos genéricos", +"mediaEventHandlers": "Controladores de eventos multimedia", +"mediaEventHandlersDesc": "Controladores de eventos relacionados con eventos multimedia", +"scannerEventHandlers": "Controladores de eventos del escáner", +"scannerEventHandlersDesc": "Manejadores de eventos relacionados con eventos de escáner", +"chartEventHandlers": "Controladores de eventos de gráficos", +"chartEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Gráficos", +"geoMapEventHandlers": "Manejadores de eventos de Geo Map", +"geoMapEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Geo Mapas", +"stepEventHandlers": "Manejadores de eventos por pasos", +"stepEventHandlersDesc": "Controladores de eventos relacionados con Step UI Events", +"shareEventHandlers": "Compartir controladores de eventos", +"shareEventHandlersDesc": "Manejadores de Eventos relacionados con Compartir Eventos", +"selectEventHandlers": "Seleccionar controladores de eventos", +"selectEventHandlersDesc": "Manejadores de Eventos relacionados con Seleccionar Eventos", +"meetingEventHandlers": "Manejadores de eventos de reuniones", +"meetingEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Reunión", +"collaborationEventHandlers": "Manejadores de eventos de colaboración", +"collaborationEventHandlersDesc": "Manejadores de eventos relacionados con eventos de colaboración", +"set": "Establecer", +"clear": "Claro", +"reset": "Restablecer", +"messageType": "Tipo de mensaje", +"placement": "Colocación", +"description": "Descripción", +}, +"event": { + ...en.event, + +"submit": "Enviar", +"submitDesc": "Activadores al enviar", +"change": "Cambia", +"changeDesc": "Activadores de cambios de valor", +"focus": "Enfoque", +"focusDesc": "Activadores de Focus", +"blur": "Desenfoque", +"blurDesc": "Desenfoque", +"click": "Haga clic en", +"clickDesc": "Disparadores al hacer clic", +"doubleClick": "Doble clic", +"doubleClickDesc": "Disparadores al hacer doble clic", +"rightClick": "Clic derecho", +"rightClickDesc": "Disparadores al hacer clic con el botón derecho", +"keyDown": "Tecla Abajo", +"keyDownDesc": "Disparos al pulsar una tecla", +"select": "Seleccione", +"selectDesc": "Activadores al seleccionar", +"checked": "Comprobado", +"checkedDesc": "Disparadores cuando se marca una casilla de verificación", +"unchecked": "Sin marcar", +"uncheckedDesc": "Disparadores cuando una casilla de verificación está Desmarcada", +"drag": "Arrastre", +"dragDesc": "Activadores de arrastre", +"drop": "Drop", +"dropDesc": "Disparadores al caer", +"open": "Abrir", +"openDesc": "Desencadenantes al abrir", +"mute": "Silenciar", +"muteDesc": "Disparos al silenciar un micrófono", +"unmute": "Desactivar", +"unmuteDesc": "Disparadores al anular el silencio de un micrófono", +"showCamera": "Mostrar cámara", +"showCameraDesc": "Se activa cuando Mostrar cámara está activado", +"hideCamera": "Ocultar cámara", +"hideCameraDesc": "Se activa cuando Mostrar cámara está desactivado", +"shareScreen": "Compartir pantalla", +"shareScreenDesc": "Activadores en la pantalla Compartir", +"shareScreenEnd": "Compartir pantalla Fin", +"shareScreenEndDesc": "Disparadores al final de la pantalla Compartir", +"shareControl": "Compartir Control", +"shareControlDesc": "Activadores del control de acciones", +"shareControlEnd": "Control de acciones Fin", +"shareControlEndDesc": "Activadores en el extremo de control de acciones", +"shareContent": "Compartir contenido", +"shareContentDesc": "Desencadenantes al compartir contenido", +"shareContentEnd": "Compartir contenido Fin", +"shareContentEndDesc": "Desencadenantes al final de Compartir contenido", +"stopShare": "Dejar de compartir", +"stopShareDesc": "Activadores en Stop Share", +"meetingStart": "Inicio de la reunión", +"meetingStartDesc": "Activadores al inicio de la reunión", +"meetingEnd": "Fin de la reunión", +"meetingEndDesc": "Desencadenantes al final de la reunión", +"meetingJoin": "Reunión Únete", +"meetingJoinDesc": "Desencadenantes al unirse a una reunión", +"meetingLeave": "Permiso de reunión", +"meetingLeaveDesc": "Desencadenantes de la baja por reunión", +"play": "Jugar", +"playDesc": "Activadores en Play", +"pause": "Pausa", +"pauseDesc": "Disparadores en pausa", +"ended": "Finalizado", +"endedDesc": "Disparadores en Ended", +"step": "Paso", +"stepDesc": "Desencadenantes en Step", +"next": "Siguiente", +"nextDesc": "Activadores en Siguiente", +"finished": "Terminado", +"finishedDesc": "Desencadenantes al finalizar", +"saved": "Guardado", +"savedDesc": "Disparadores cuando se guarda un elemento", +"edited": "Editado", +"editedDesc": "Se activa cuando se edita un elemento", +"geoMapMove": "Mapa geográfico Mover", +"geoMapMoveDesc": "Disparadores cuando los usuarios mueven Geo Map", +"geoMapZoom": "Mapa geográfico Zoom", +"geoMapZoomDesc": "Disparadores cuando los usuarios hacen zoom en Geo Map", +"geoMapSelect": "Seleccionar mapa geográfico", +"geoMapSelectDesc": "Disparadores cuando los usuarios seleccionan un elemento en Geo Map", +"scannerSuccess": "Éxito del escáner", +"scannerSuccessDesc": "Se activa cuando un escáner explora correctamente", +"scannerError": "Error de escáner", +"scannerErrorDesc": "Disparadores cuando un escáner falla al escanear", +"chartZoom": "Zoom del gráfico", +"chartZoomDesc": "Disparadores en el Zoom del Gráfico", +"chartHover": "Gráfico Hover", +"chartHoverDesc": "Disparadores al pasar el ratón por encima del gráfico", +"chartSelect": "Seleccionar gráfico", +"chartSelectDesc": "Disparadores en la selección de gráficos", +"chartDeselect": "Deseleccionar gráfico", +"chartDeselectDesc": "Desmarcar disparadores en el gráfico", +"close": "Cerrar", +"closeDesc": "Desencadenantes al cerrar", +"parse": "Parse", +"parseDesc": "Disparadores en Parse", +"success": "Éxito", +"successDesc": "Activadores del éxito", +"delete": "Borrar", +"deleteDesc": "Disparadores al suprimir", +"mention": "Mencione", +"mentionDesc": "Activadores de mención", +"search": "Buscar en", +"searchDesc": "Activadores de búsqueda", +"selectedChange": "Cambio de selección", +"selectedChangeDesc": "Desencadenantes de la selección modificada", +"clickExtra": "Haga clic en Acción", +"clickExtraDesc": "Disparadores al hacer clic en un elemento adicional", +"start": "Inicio", +"startDesc": "Disparadores al inicio", +"resume": "Currículum", +"resumeDesc": "Desencadenantes en el currículum", +"countdown": "Cuenta atrás", +"countdownDesc": "Disparos al finalizar la cuenta atrás", +"reset": "Fin de la reinicialización", +"resetDesc": "Disparos al reiniciar el temporizador", +"refresh": "Actualizar", +"refreshDesc": "Activadores al actualizar", +"sortChange": "Ordenar Cambio", +"sortChangeDesc": "Desencadenantes de los cambios de clasificación", +}, +"style": { + ...en.style, + +"boxShadowColor": "Sombra Color", +"boxShadow": "Caja Sombra", +"opacity": "Opacidad", +"animation": "Animación", +"animationIterationCount": "Recuento de iteraciones de animación", +"animationDelay": "Retraso de animación", +"animationDuration": "Duración de la animación", +"resetTooltip": "Restablecer estilos. Borre el campo de entrada para restablecer un estilo individual.", +"textColor": "Color del texto", +"contrastText": "Contraste Color del texto", +"generated": "Generado", +"customize": "Personalice", +"staticText": "Texto estático", +"accent": "Acento", +"validate": "Mensaje de validación", +"border": "Color del borde", +"borderRadius": "Radio del borde", +"borderWidth": "Anchura del borde", +"borderStyle": "Estilo de borde", +"background": "Color de fondo", +"headerBackground": "Color de fondo de la cabecera", +"siderBackground": "Sider Color de fondo", +"footerBackground": "Color de fondo del pie de página", +"fill": "Rellene", +"track": "Pista", +"links": "Enlaces", +"thumb": "Pulgar", +"thumbBorder": "Borde del pulgar", +"checked": "Comprobado", +"unchecked": "Sin marcar", +"handle": "Mango", +"tags": "Etiquetas", +"tagsText": "Etiquetas Texto", +"multiIcon": "Icono de selección múltiple", +"tabText": "Texto de la pestaña", +"tabAccent": "Acento de lengüeta", +"checkedBackground": "Color de fondo marcado", +"uncheckedBackground": "Color de fondo sin marcar", +"uncheckedBorder": "Color del borde sin marcar", +"indicatorBackground": "Indicador Color de fondo", +"tableCellText": "Texto celular", +"selectedRowBackground": "Color de fondo de la fila seleccionada", +"hoverRowBackground": "Color de fondo de la fila Hover", +"hoverBackground": "Color de fondo", +"textTransform": "Transformación de texto", +"textDecoration": "Decoración de texto", +"alternateRowBackground": "Color de fondo de fila alternativo", +"tableHeaderBackground": "Color de fondo de la cabecera", +"tableHeaderText": "Texto de cabecera", +"toolbarBackground": "Color de fondo de la barra de herramientas", +"toolbarText": "Texto de la barra de herramientas", +"pen": "Pluma", +"footerIcon": "Icono de pie de página", +"tips": "Consejos", +"margin": "Margen", +"padding": "Acolchado", +"marginLeft": "Margen izquierdo", +"marginRight": "Margen derecho", +"marginTop": "Margen superior", +"marginBottom": "Margen inferior", +"containerHeaderPadding": "Relleno de cabecera", +"containerFooterPadding": "Relleno de pie de página", +"containerSiderPadding": "Acolchado Sider", +"containerBodyPadding": "Acolchado corporal", +"minWidth": "Anchura mínima", +"aspectRatio": "Relación de aspecto", +"text": "Texto", +"textSize": "Tamaño del texto", +"textWeight": "Peso del texto", +"fontFamily": "Familia de fuentes", +"fontStyle": "Estilo de fuente", +"backgroundImage": "Imagen de fondo", +"backgroundImageRepeat": "Repetición de fondo", +"backgroundImageSize": "Tamaño del fondo", +"backgroundImagePosition": "Antecedentes", +"backgroundImageOrigin": "Antecedentes Origen", +"headerBackgroundImage": "Imagen de fondo", +"headerBackgroundImageRepeat": "Repetición de la imagen de fondo", +"headerBackgroundImageSize": "Tamaño de la imagen de fondo", +"headerBackgroundImagePosition": "Posición de la imagen de fondo", +"headerBackgroundImageOrigin": "Origen de la imagen de fondo", +"footerBackgroundImage": "Imagen de fondo", +"footerBackgroundImageRepeat": "Repetición de la imagen de fondo", +"footerBackgroundImageSize": "Tamaño de la imagen de fondo", +"footerBackgroundImagePosition": "Posición de la imagen de fondo", +"footerBackgroundImageOrigin": "Origen de la imagen de fondo", +"rotation": "Rotación", +"alternateBackground": "Color de fondo alternativo", +"headerText": "Color del texto de cabecera", +"labelColor": "Color de la etiqueta", +"label": "Color de la etiqueta", +"lineHeight": "Altura de línea", +"subTitleColor": "Color del subtítulo", +"titleText": "Título Color", +"success": "Éxito Color", +"siderBackgroundImage": "Sider Imagen de fondo", +"siderBackgroundImageRepeat": "Sider Repetición de la imagen de fondo", +"siderBackgroundImageSize": "Sider Tamaño de la imagen de fondo", +"siderBackgroundImagePosition": "Sider Posición de la imagen de fondo", +"siderBackgroundImageOrigin": "Sider Origen de la imagen de fondo", +"activeBackground": "Color de fondo activo", +"labelBackground": "Color de fondo de la etiqueta", +"gradientBackground": "Color de fondo degradado", +"direction": "Dirección", +"chartOpacity": "Opacidad", +"chartBoxShadow": "Caja Sombra", +"chartBorderStyle": "Estilo de borde", +"chartBorderRadius": "Radio del borde", +"chartBorderWidth": "Anchura del borde", +"chartTextSize": "Tamaño del texto", +"chartTextWeight": "Peso del texto", +"chartFontFamily": "Familia de fuentes", +"chartFontStyle": "Estilo de fuente", +"chartBackgroundColor": "Color de fondo", +"chartGradientColor": "Color degradado", +"chartShadowColor": "Sombra Color", +"chartBorderColor": "Color del borde", +"chartTextColor": "Color del texto", +"detailSize": "Detalle Tamaño", +"radiusTip": "Especifica el radio de las esquinas del elemento. Ejemplo: 5px, 50% o 1em.", +"gapTip": "Especifica el espacio entre filas y columnas en un contenedor de cuadrícula o flex. Ejemplo: 10px, 1rem o 5%.", +"cardRadiusTip": "Define el radio de las esquinas para los componentes de tarjeta. Ejemplo: 10px, 15px.", +"borderWidthTip": "Especifica el ancho del borde del elemento. Ejemplo: 1px, 0.5em o fino.", +"borderStyleTip": "Establece el estilo del borde. Ejemplo: sólido, discontinuo, punteado o ninguno.", +"marginTip": "Define el margen exterior alrededor de un elemento. Ejemplo: 10px, 2em o auto. También se puede combinar como: 0px 20px. O incluso separar para las 4 direcciones como: 0px 1px 5px 2px.", +"directionTip": "Especifica la dirección del diseño. Ejemplo: row, column o row-reverse.", +"detailSizeTip": "Define el tamaño de detalles específicos en el diseño. Ejemplo: 10px, 2em o 80%.", +"chartOpacityTip": "Especifica la opacidad del gráfico. Ejemplo: 1 (opaco), 0.5 (50% transparente).", +"chartBoxShadowTip": "Define la sombra proyectada por el cuadro del gráfico. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", +"chartBorderStyleTip": "Establece el estilo del borde del gráfico. Ejemplo: sólido, discontinuo o punteado.", +"chartBorderRadiusTip": "Especifica el radio de las esquinas del borde del gráfico. Ejemplo: 10px, 20%.", +"chartBorderWidthTip": "Especifica el ancho del borde del gráfico. Ejemplo: 2px, 0.5em.", +"chartTextSizeTip": "Especifica el tamaño de la fuente para el texto del gráfico. Ejemplo: 16px, 1em o 120%.", +"chartTextWeightTip": "Especifica el peso de la fuente para el texto del gráfico. Ejemplo: normal, negrita o 700.", +"chartFontFamilyTip": "Especifica la familia de fuentes para el texto del gráfico. Ejemplo: Arial, Helvetica o 'Times New Roman'.", +"chartFontStyleTip": "Especifica el estilo de la fuente para el texto del gráfico. Ejemplo: normal, cursiva o oblicua.", +"animationIterationCountTip": "Define cuántas veces debe ejecutarse una animación. Ejemplo: infinito, 1 o 3.", +"opacityTip": "Establece el nivel de transparencia del elemento. Ejemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisible).", +"boxShadowColorTip": "Define el color de la sombra del cuadro. Ejemplo: rgba(0, 0, 0, 0.3), #FF5733.", +"chartBackgroundColorTip": "Establece el color de fondo del gráfico. Ejemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", +"chartGradientColorTip": "Especifica los colores degradados para el fondo del gráfico. Ejemplo: linear-gradient(to right, #ff7e5f, #feb47b).", +"chartShadowColorTip": "Define el color de la sombra del gráfico. Ejemplo: rgba(0, 0, 0, 0.2), #333333.", +"chartBorderColorTip": "Especifica el color del borde del gráfico. Ejemplo: #000000, rgba(0, 0, 0, 0.5).", +"chartTextColorTip": "Establece el color del texto del gráfico. Ejemplo: #333333, rgba(51, 51, 51, 1).", +"boxShadowTip": "Define la sombra proyectada por un elemento. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", +"animationDelayTip": "Especifica el retraso antes de que comience la animación. Ejemplo: 1s, 500ms, 0.", +"animationDurationTip": "Establece la duración de la animación. Ejemplo: 2s, 3s, 500ms.", +"paddingTip": "Define el espacio interior dentro de un elemento. Ejemplo: 10px, 2em, 5%. También se puede combinar como: 0px 20px. O separar para las 4 direcciones: 10px 21px 5px 20px.", +"containerHeaderPaddingTip": "Define el espacio interior para el encabezado del contenedor. Ejemplo: 10px, 1rem.", +"containerSiderPaddingTip": "Define el espacio interior para el lateral del contenedor. Ejemplo: 8px, 1em.", +"containerFooterPaddingTip": "Define el espacio interior para el pie de página del contenedor. Ejemplo: 12px, 1rem.", +"containerBodyPaddingTip": "Define el espacio interior para el cuerpo del contenedor. Ejemplo: 15px, 2em.", +"textSizeTip": "Especifica el tamaño de la fuente del texto. Ejemplo: 14px, 1.2em, 110%.", +"textWeightTip": "Especifica el peso de la fuente del texto. Ejemplo: normal, negrita, 400.", +"fontFamilyTip": "Especifica la familia de fuentes del texto. Ejemplo: Arial, Verdana, 'Courier New'.", +"textDecorationTip": "Define la decoración del texto. Ejemplo: subrayado, tachado, ninguno.", +"textTransformTip": "Especifica la capitalización del texto. Ejemplo: mayúsculas, minúsculas, capitalizar.", +"fontStyleTip": "Define el estilo de la fuente del texto. Ejemplo: normal, cursiva, oblicua.", +"backgroundImageTip": "Especifica la imagen de fondo de un elemento. Ejemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", +"headerBackgroundImageTip": "Especifica la imagen de fondo para el encabezado. Ejemplo: url('header.jpg').", +"footerBackgroundImageTip": "Especifica la imagen de fondo para el pie de página. Ejemplo: url('footer.jpg').", +"backgroundImageRepeatTip": "Define cómo se repite la imagen de fondo. Ejemplo: no-repeat, repeat-x, repeat-y.", +"headerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del encabezado. Ejemplo: repeat-x, no-repeat.", +"footerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del pie de página. Ejemplo: repeat-y, no-repeat.", +"backgroundImageSizeTip": "Define el tamaño de la imagen de fondo. Ejemplo: cover, contain, 50% 50%.", +"backgroundImagePositionTip": "Define la posición de la imagen de fondo. Ejemplo: center, top right, 10% 20%.", +"backgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo. Ejemplo: padding-box, border-box, content-box.", +"headerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del encabezado. Ejemplo: padding-box, border-box, content-box.", +"footerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del pie de página. Ejemplo: padding-box, border-box, content-box.", +"rotationTip": "Especifica el ángulo de rotación del elemento. Ejemplo: 45deg, 90deg, -180deg.", +"lineHeightTip": "Define la altura de una línea de texto. Ejemplo: 1.5, 2, 120%.", +}, +"export": { + ...en.export, + +"hiddenDesc": "Si es true, el componente se oculta", +"disabledDesc": "Si es true, el componente está desactivado y no es interactivo", +"visibleDesc": "Si es verdadero, el componente es visible", +"inputValueDesc": "Valor actual de la entrada", +"invalidDesc": "Indica si el valor no es válido", +"placeholderDesc": "Texto de marcador de posición cuando no se establece ningún valor", +"requiredDesc": "Si es verdadero, se requiere un valor válido", +"submitDesc": "Enviar formulario", +"richTextEditorValueDesc": "Valor actual del Editor", +"richTextEditorReadOnlyDesc": "Si es true, el Editor es de sólo lectura", +"richTextEditorHideToolBarDesc": "Si es true, la barra de herramientas se oculta", +"jsonEditorDesc": "Datos JSON actuales", +"sliderValueDesc": "Valor seleccionado actualmente", +"sliderMaxValueDesc": "Valor máximo de la corredera", +"sliderMinValueDesc": "Valor mínimo de la corredera", +"sliderStartDesc": "Valor del punto de partida seleccionado", +"sliderEndDesc": "Valor del punto final seleccionado", +"ratingValueDesc": "Clasificación seleccionada actualmente", +"ratingMaxDesc": "Valor nominal máximo", +"datePickerValueDesc": "Fecha seleccionada actualmente", +"datePickerFormattedValueDesc": "Fecha seleccionada con formato", +"datePickerTimestampDesc": "Marca de tiempo de la fecha seleccionada", +"dateRangeStartDesc": "Fecha de inicio de la serie", +"dateRangeEndDesc": "Fecha final del intervalo", +"dateRangeStartTimestampDesc": "Fecha de inicio", +"dateRangeEndTimestampDesc": "Fecha de finalización", +"dateRangeFormattedValueDesc": "Intervalo de fechas formateado", +"dateRangeFormattedStartValueDesc": "Fecha de inicio con formato", +"dateRangeFormattedEndValueDesc": "Fecha final con formato", +"timePickerValueDesc": "Hora seleccionada actualmente", +"timePickerFormattedValueDesc": "Hora seleccionada con formato", +"timeRangeStartDesc": "Hora de inicio de la cadena", +"timeRangeEndDesc": "Hora de finalización de la gama", +"timeRangeFormattedValueDesc": "Intervalo de tiempo formateado", +"timeRangeFormattedStartValueDesc": "Hora de inicio con formato", +"timeRangeFormattedEndValueDesc": "Hora final con formato", +"timeZone": "Huso horario", +"timeZoneDesc": "Zona horaria de la fecha seleccionada", +}, +"validationDesc": { + ...en.validationDesc, + +"email": "Introduzca una dirección de correo electrónico válida", +"url": "Introduzca una URL válida", +"regex": "Haga coincidir el patrón especificado", +"maxLength": "Demasiados caracteres, actual: {length}, máximo: {maxLength}", +"minLength": "No hay suficientes caracteres, actual: {length}, mínimo: {minLength}", +"maxValue": "El valor excede el máximo, actual: {value}, máximo: {max}", +"minValue": "Valor por debajo del mínimo, actual: {value}, mínimo: {min}", +"maxTime": "El tiempo excede el máximo, actual: {time}, máximo: {maxTime}", +"minTime": "Tiempo por debajo del mínimo, actual: {time}, mínimo: {minTime}", +"maxDate": "La fecha excede el máximo, actual: {date}, máximo: {maxDate}", +"minDate": "Fecha por debajo del mínimo, actual: {date}, mínimo: {minDate}", +}, +"query": { + ...en.query, + +"noQueries": "No hay consultas de datos disponibles.", +"queryTutorialButton": "Ver los documentos de {value}.", +"datasource": "Sus fuentes de datos", +"newDatasource": "Nueva fuente de datos", +"generalTab": "General", +"notificationTab": "Notificación", +"variablesTab": "Variables", +"advancedTab": "Avanzado", +"showFailNotification": "Mostrar notificación en caso de fallo", +"failCondition": "Condiciones de fallo", +"failConditionTooltip1": "Personalice las condiciones de fallo y las notificaciones correspondientes.", +"failConditionTooltip2": "Si alguna condición resulta verdadera, la consulta se marca como fallida y se activa la notificación correspondiente.", +"showSuccessNotification": "Mostrar notificación de éxito", +"successMessageLabel": "Mensaje de éxito", +"successMessage": "Corre con éxito", +"notifyDuration": "Duración", +"notifyDurationTooltip": "Duración de la notificación. La unidad de tiempo puede ser \"s\" (segundo, por defecto) o \"ms\" (milisegundo). El valor por defecto es {default}s. El valor máximo es {max}s.", +"successMessageWithName": "{name} ejecución correcta", +"failMessageWithName": "{name} ejecución fallida: {result}", +"showConfirmationModal": "Mostrar modal de confirmación antes de ejecutar", +"confirmationMessageLabel": "Mensaje de confirmación", +"confirmationMessage": "¿Está seguro de que desea ejecutar esta consulta de datos?", +"newQuery": "Nueva consulta de datos", +"newFolder": "Nueva carpeta", +"recentlyUsed": "Usado recientemente", +"folder": "Carpeta", +"folderNotEmpty": "La carpeta no está vacía", +"dataResponder": "Respuesta de datos", +"tempState": "Estado Temporal", +"transformer": "Transformador", +"quickRestAPI": "Consulta REST", +"quickStreamAPI": "Consulta de flujos", +"quickGraphql": "Consulta GraphQL", +"quickAlasql": "Consulta SQL local", +"databaseType": "Tipo de base de datos", +"chooseDatabase": "Elegir base de datos", +"lowcoderAPI": "API Lowcoder", +"executeJSCode": "Ejecutar código JavaScript", +"importFromQueryLibrary": "Importar desde la biblioteca de consultas", +"preparedDataQueries": "Sus consultas de datos preparadas", +"adHocDataQueries": "Consultas rápidas de datos (sin consulta preparada ni fuente de datos)", +"queryResultTransformer": "Manipular una respuesta de consulta para transformar los datos antes de vincularlos", +"queryResultReactor": "Reaccionar ante cualquier cambio de un valor dinámico de Datos", +"importFromFile": "Importar desde archivo", +"triggerType": "Activado cuando...", +"triggerTypeAuto": "Cuando cambian las entradas o después de que se cargue la aplicación (página)", +"triggerTypePageLoad": "Después de que se cargue la aplicación (página)", +"triggerTypeManual": "Solo cuando lo activas manualmente", +"triggerTypeInputChange": "Cuando cambian las entradas", +"triggerTypeQueryExec": "Después de la ejecución de la consulta", +"triggerTypeTimeout": "Después de que la aplicación (página) se carga y se produce el tiempo de espera", +"delayTime": "Tiempo de retraso", +"chooseDataSource": "Elegir fuente de datos", +"method": "Método", +"updateExceptionDataSourceTitle": "Actualizar fuente de datos que falla", +"updateExceptionDataSourceContent": "Actualice la siguiente consulta con la misma fuente de datos que falla:", +"update": "Actualización", +"disablePreparedStatement": "Desactivar declaraciones preparadas", +"disablePreparedStatementTooltip": "Desactivar las sentencias preparadas puede generar SQL dinámico, pero aumenta el riesgo de inyección SQL.", +"timeout": "Tiempo de espera después de", +"timeoutTooltip": "Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor por defecto: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Por ejemplo, 300 (es decir, 300 ms), 800 ms, 5 s.", +"periodic": "Ejecute esta consulta de datos periódicamente", +"periodicTime": "Periodo", +"periodicTimeTooltip": "Periodo entre ejecuciones sucesivas. Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor mínimo: 100ms. La ejecución periódica se desactiva para valores inferiores a 100ms. Por ejemplo, 300 (es decir, 300ms), 800ms, 5s.", +"cancelPrevious": "Ignorar los resultados de ejecuciones anteriores no finalizadas", +"cancelPreviousTooltip": "Si se desencadena una nueva ejecución, se ignorará el resultado de las ejecuciones anteriores no completadas si no se completaron, y estas ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", +"dataSourceStatusError": "Si se desencadena una nueva ejecución, el resultado de las ejecuciones anteriores no completadas se ignorará si las ejecuciones anteriores no se completaron, y las ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", +"success": "Éxito", +"fail": "Fallo", +"successDesc": "Se activa cuando la ejecución tiene éxito", +"failDesc": "Se activa cuando falla la ejecución", +"fixedDelayError": "Consulta no ejecutada", +"execSuccess": "Corre con éxito", +"execFail": "Ejecución fallida", +"execIgnored": "Los resultados de esta consulta fueron ignorados", +"deleteSuccessMessage": "Eliminado con éxito. Puede utilizar {undoKey} para deshacer el borrado.", +"dataExportDesc": "Datos obtenidos por la consulta actual", +"codeExportDesc": "Código de estado actual de la consulta", +"successExportDesc": "Si la consulta actual se ha ejecutado correctamente", +"messageExportDesc": "Información devuelta por la consulta actual", +"extraExportDesc": "Otros datos de la consulta actual", +"isFetchingExportDesc": "Es la consulta actual en la solicitud", +"runTimeExportDesc": "Tiempo de ejecución de la consulta actual (ms)", +"latestEndTimeExportDesc": "Último tiempo de ejecución", +"triggerTypeExportDesc": "Tipo de disparador", +"chooseResource": "Elija un recurso", +"createDataSource": "Crear una nueva fuente de datos", +"editDataSource": "Editar", +"datasourceName": "Nombre", +"datasourceNameRuleMessage": "Introduzca un nombre de fuente de datos", +"generalSetting": "Ajustes generales", +"advancedSetting": "Configuración avanzada", +"port": "Puerto", +"portRequiredMessage": "Introduzca un puerto", +"portErrorMessage": "Introduzca un puerto correcto", +"connectionType": "Tipo de conexión", +"regular": "Regular", +"host": "Anfitrión", +"hostRequiredMessage": "Introduzca un nombre de dominio de host o una dirección IP", +"userName": "Nombre de usuario", +"password": "Contraseña", +"encryptedServer": "-------- Cifrado en el lado del servidor --------", +"uriRequiredMessage": "Introduzca un URI", +"urlRequiredMessage": "Introduzca una URL", +"uriErrorMessage": "Introduzca un URI correcto", +"urlErrorMessage": "Introduzca una URL correcta", +"httpRequiredMessage": "Introduzca http:// o https://", +"databaseName": "Nombre de la base de datos", +"databaseNameRequiredMessage": "Introduzca el nombre de la base de datos", +"useSSL": "Utilizar SSL", +"userNameRequiredMessage": "Introduzca su nombre", +"passwordRequiredMessage": "Introduzca su contraseña", +"authentication": "Autenticación", +"authenticationType": "Tipo de autenticación", +"sslCertVerificationType": "Verificación de certificados SSL", +"sslCertVerificationTypeDefault": "Verificar CA Cert", +"sslCertVerificationTypeSelf": "Verificar certificado autofirmado", +"sslCertVerificationTypeDisabled": "Discapacitados", +"selfSignedCert": "Certificado autofirmado", +"selfSignedCertRequireMsg": "Introduzca su certificado", +"enableTurnOffPreparedStatement": "Activar la conmutación de sentencias preparadas para consultas", +"enableTurnOffPreparedStatementTooltip": "Puede activar o desactivar las sentencias preparadas en la pestaña Avanzadas de la consulta", +"serviceName": "Nombre del servicio", +"serviceNameRequiredMessage": "Introduzca el nombre de su servicio", +"useSID": "Utilizar SID", +"connectSuccessfully": "Conexión correcta", +"saveSuccessfully": "Guardado correctamente", +"database": "Base de datos", +"cloudHosting": "Lowcoder alojado en la nube no puede acceder a los servicios locales utilizando 127.0.0.1 o localhost. Intente conectarse a fuentes de datos de redes públicas o utilice un proxy inverso para servicios privados.", +"notCloudHosting": "Para el despliegue alojado en Docker, Lowcoder utiliza redes puente, por lo que 127.0.0.1 y localhost no son válidos para las direcciones de host. Para acceder a las fuentes de datos de la máquina local, consulte", +"howToAccessHostDocLink": "Cómo acceder a la API/DB del host", +"returnList": "Devolución", +"chooseDatasourceType": "Elija el tipo de fuente de datos", +"viewDocuments": "Ver documentos", +"testConnection": "Conexión de prueba", +"save": "Guardar", +"whitelist": "Lista de permisos", +"whitelistTooltip": "Añada las direcciones IP de Lowcoder a su lista de fuentes de datos permitidas según sea necesario.", +"address": "Dirección:", +"nameExists": "El nombre {name} ya existe", +"jsQueryDocLink": "Acerca de JavaScript Query", +"dynamicDataSourceConfigLoadingText": "Cargando configuración de fuente de datos adicional...", +"dynamicDataSourceConfigErrText": "No se ha podido cargar la configuración adicional de la fuente de datos.", +"retry": "Reintentar", +"categoryDatabase": "Base de Datos", +"categoryBigdata": "Grandes datos", +"categoryAi": "IA", +"categoryDevops": "DevOps", +"categoryAppdevelopment": "Desarrollo de Aplicaciones", +"categoryWorkflow": "Flujo de Trabajo", +"categoryMessaging": "Mensajería", +"categoryAssets": "Recursos y Almacenamiento", +"categoryProjectManagement": "Gestión de Proyectos", +"categoryCrm": "CRM", +"categoryEcommerce": "Comercio Electrónico", +"categoryWebscrapers": "Raspadores Web & Open Data", +"categoryDocumentHandling": "Generación de Informes y Documentos", +"categoryRPA": "Automatización de Procesos Robóticos", +"componentsUsingQueryTitle": "Uso de la consulta", +"componentsUsingQuery": "Dónde se usa esta consulta", +"variables": "Variables", +}, +"sqlQuery": { + ...en.sqlQuery, + +"keyValuePairs": "Pares clave-valor", +"object": "Objeto", +"allowMultiModify": "Permitir la modificación de varias filas", +"allowMultiModifyTooltip": "Si se selecciona, se operan todas las filas que cumplen las condiciones. En caso contrario, sólo se operará sobre la primera fila que cumpla las condiciones.", +"array": "Matriz", +"insertList": "Insertar lista", +"insertListTooltip": "Valores insertados cuando no existen", +"filterRule": "Regla de filtrado", +"updateList": "Actualizar lista", +"updateListTooltip": "Los valores actualizados tal como existen pueden ser anulados por los mismos valores de la lista de inserción", +"sqlMode": "Modo SQL", +"guiMode": "Modo GUI", +"operation": "Operación", +"insert": "Inserte", +"upsert": "Insertar, pero actualizar si hay conflicto", +"update": "Actualización", +"delete": "Borrar", +"bulkInsert": "Inserción a granel", +"bulkUpdate": "Actualización masiva", +"table": "Cuadro", +"primaryKeyColumn": "Columna de clave primaria", +}, +"EsQuery": { + ...en.EsQuery, + +"rawCommand": "Comando en bruto", +"queryTutorialButton": "Ver documentos de la API de Elasticsearch", +"request": "Solicitar", +}, +"googleSheets": { + ...en.googleSheets, + +"rowIndex": "Índice de filas", +"spreadsheetId": "ID de la hoja de cálculo", +"sheetName": "Nombre de la hoja", +"readData": "Leer datos", +"appendData": "Añadir fila", +"updateData": "Actualizar Fila", +"deleteData": "Borrar fila", +"clearData": "Borrar fila", +"serviceAccountRequireMessage": "Introduzca su cuenta de servicio", +"ASC": "ASC", +"DESC": "DESC", +"sort": "Ordenar", +"sortPlaceholder": "Nombre", +}, +"queryLibrary": { + ...en.queryLibrary, + +"export": "Exportar a JSON", +"noInput": "La consulta actual no tiene entrada", +"inputName": "Nombre", +"inputDesc": "Descripción", +"emptyInputs": "Sin entradas", +"clickToAdd": "Añadir", +"chooseQuery": "Seleccione Consulta", +"viewQuery": "Ver consulta", +"chooseVersion": "Elegir versión", +"latest": "Última", +"publish": "Publique", +"historyVersion": "Historia Versión", +"deleteQueryLabel": "Borrar consulta", +"deleteQueryContent": "No se puede recuperar la consulta después de borrarla. ¿Borrar la consulta?", +"run": "Ejecutar", +"readOnly": "Sólo lectura", +"exit": "Salida", +"recoverAppSnapshotContent": "Restaurar la consulta actual a la versión {version}.", +"searchPlaceholder": "Consulta de búsqueda", +"allQuery": "Todas las consultas", +"deleteQueryTitle": "Borrar consulta", +"unnamed": "Sin nombre", +"publishNewVersion": "Publicar nueva versión", +"publishSuccess": "Publicado con éxito", +"version": "Versión", +"desc": "Descripción", +}, +"snowflake": { + ...en.snowflake, + +"accountIdentifierTooltip": "Véase", +"extParamsTooltip": "Configurar parámetros de conexión adicionales", +}, +"lowcoderQuery": { + ...en.lowcoderQuery, + +"queryOrgUsers": "Consulta de usuarios del espacio de trabajo", +}, +"redisQuery": { + ...en.redisQuery, + +"rawCommand": "Comando en bruto", +"command": "Comando", +"queryTutorial": "Ver documentos sobre los comandos de Redis", +}, +"httpQuery": { + ...en.httpQuery, + +"bodyFormDataTooltip": "Si se selecciona {type}, el formato del valor debe ser {object}. Ejemplo: ___TITULAR2___", +"text": "Texto", +"file": "Archivo", +"extraBodyTooltip": "Los valores clave del cuerpo adicional se añadirán al cuerpo con tipos de datos JSON o de formulario.", +"forwardCookies": "Adelante Cookies", +"forwardAllCookies": "Reenviar todas las cookies", +}, +"smtpQuery": { + ...en.smtpQuery, + +"attachment": "Adjunto", +"attachmentTooltip": "Se puede utilizar con el componente de carga de archivos, los datos deben ser convertidos a:", +"MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", +"sender": "Transmisor", +"recipient": "Recipient", +"carbonCopy": "Copia al carbón", +"blindCarbonCopy": "Copia oculta", +"subject": "Asunto", +"content": "Contenido", +"contentTooltip": "Admite la introducción de texto o HTML", +}, +"uiCompCategory": { + ...en.uiCompCategory, + +"dashboards": "Cuadros de mando e informes", +"layout": "Diseño y navegación", +"forms": "Recogida de datos y formularios", +"collaboration": "Reuniones y colaboración", +"projectmanagement": "Gestión de proyectos", +"scheduling": "Calendario y programación", +"documents": "Gestión de documentos y archivos", +"itemHandling": "Gestión de artículos y firmas", +"multimedia": "Multimedia y animación", +"integration": "Integración y ampliación", +"legacy": "Legado y obsoleto", +}, +"uiComp": { + ...en.uiComp, + +"autoCompleteCompName": "Auto Complete", +"autoCompleteCompDesc": "Un campo de entrada que ofrece sugerencias a medida que se escribe, lo que mejora la experiencia del usuario y la precisión.", +"autoCompleteCompKeywords": "sugerencias, autocompletar, escribir, entrada", +"inputCompName": "Entrada", +"inputCompDesc": "Un campo de entrada de texto básico que permite a los usuarios introducir y editar texto.", +"inputCompKeywords": "texto, entrada, campo, editar", +"textAreaCompName": "Área de texto", +"textAreaCompDesc": "Una entrada de texto de varias líneas para contenidos más largos, como comentarios o descripciones.", +"textAreaCompKeywords": "multilínea, textarea, entrada, texto", +"passwordCompName": "Contraseña", +"passwordCompDesc": "Un campo seguro para introducir la contraseña, enmascarando los caracteres para mayor privacidad.", +"passwordCompKeywords": "contraseña, seguridad, entrada, oculto", +"richTextEditorCompName": "Editor de texto enriquecido", +"richTextEditorCompDesc": "Un editor de texto avanzado que admite numerosas opciones de formato, como negrita, cursiva y listas.", +"richTextEditorCompKeywords": "editor, texto, formato, contenido enriquecido", +"numberInputCompName": "Número Entrada", +"numberInputCompDesc": "Un campo específico para la introducción de datos numéricos, con controles para aumentar y disminuir los valores.", +"numberInputCompKeywords": "número, entrada, incremento, decremento", +"sliderCompName": "Deslizador", +"sliderCompDesc": "Componente gráfico deslizante que permite seleccionar un valor o un intervalo dentro de una escala definida.", +"sliderCompKeywords": "deslizador, gama, entrada, gráfico", +"rangeSliderCompName": "Deslizador de gama", +"rangeSliderCompDesc": "Un control deslizante de doble asa para seleccionar un rango de valores, útil para filtrar o establecer límites.", +"rangeSliderCompKeywords": "gama, corredera, doble asa, filtro", +"ratingCompName": "Clasificación", +"ratingCompDesc": "Un componente para capturar las valoraciones de los usuarios, mostradas en forma de estrellas.", +"ratingCompKeywords": "valoración, estrellas, comentarios, aportaciones", +"switchCompName": "Interruptor", +"switchCompDesc": "Un interruptor basculante para decisiones del tipo encendido/apagado o sí/no.", +"switchCompKeywords": "conmutador, interruptor, encendido/apagado, control", +"selectCompName": "Seleccione", +"selectCompDesc": "Un menú desplegable para seleccionar entre una lista de opciones.", +"selectCompKeywords": "desplegable, seleccionar, opciones, menú", +"multiSelectCompName": "Multiselect", +"multiSelectCompDesc": "Componente que permite seleccionar varios elementos de una lista desplegable.", +"multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", +"cascaderCompName": "Cascader", +"cascaderCompDesc": "Un desplegable de varios niveles para la selección jerárquica de datos, como la selección de una ubicación.", +"cascaderCompKeywords": "cascada, jerárquico, desplegable, niveles", +"checkboxCompName": "Casilla de verificación", +"checkboxCompDesc": "Una casilla de verificación estándar para opciones que pueden seleccionarse o deseleccionarse.", +"checkboxCompKeywords": "casilla, opciones, seleccionar, alternar", +"radioCompName": "Radio", +"radioCompDesc": "Botones de radio para seleccionar una opción de un conjunto, donde sólo se permite una elección.", +"radioCompKeywords": "radio, botones, seleccionar, elección única", +"segmentedControlCompName": "Control segmentado", +"segmentedControlCompDesc": "Un control con opciones segmentadas para alternar rápidamente entre varias opciones.", +"segmentedControlCompKeywords": "segmentado, control, alternar, opciones", +"stepControlCompName": "Control de pasos", +"stepControlCompDesc": "Un control con opciones de pasos para ofrecer pasos visuales guiados para aplicaciones como formularios o asistentes.", +"stepControlCompKeywords": "pasos, control, alternar, opciones", +"fileUploadCompName": "Carga de archivos", +"fileUploadCompDesc": "Un componente para cargar archivos, con soporte para arrastrar y soltar y selección de archivos.", +"fileUploadCompKeywords": "archivo, cargar, arrastrar y soltar, seleccionar", +"dateCompName": "Fecha", +"dateCompDesc": "Un componente selector de fechas para seleccionar fechas de una interfaz de calendario.", +"dateCompKeywords": "fecha, selector, calendario, seleccionar", +"dateRangeCompName": "Intervalo de fechas", +"dateRangeCompDesc": "Componente que permite seleccionar un intervalo de fechas, útil para sistemas de reservas o filtros.", +"dateRangeCompKeywords": "daterange, seleccionar, reservar, filtrar", +"timeCompName": "Tiempo", +"timeCompDesc": "Un componente de selección horaria para elegir determinadas horas del día.", +"timeCompKeywords": "hora, selector, seleccionar, reloj", +"timeRangeCompName": "Intervalo de tiempo", +"timeRangeCompDesc": "Componente que permite seleccionar un intervalo de tiempo, utilizado a menudo en aplicaciones de programación.", +"timeRangeCompKeywords": "timerange, seleccionar, programación, duración", +"buttonCompName": "Botón de formulario", +"buttonCompDesc": "Un componente de botón versátil para enviar formularios, desencadenar acciones o navegar.", +"buttonCompKeywords": "botón, enviar, acción, navegar", +"meetingControlCompName": "Botón Icono", +"meetingCompDesc": "Un botón para controlar funciones como iniciar, finalizar, silenciar o compartir.", +"meetingCompKeywords": "control, botón, inicio, fin", +"linkCompName": "Enlace", +"linkCompDesc": "Componente de visualización de hipervínculos para navegar o enlazar con recursos externos.", +"linkCompKeywords": "enlace, hipervínculo, navegación, externo", +"scannerCompName": "Escáner", +"scannerCompDesc": "Un componente para escanear códigos de barras, códigos QR y otros datos similares.", +"scannerCompKeywords": "escáner, código de barras, código QR, escanear", +"dropdownCompName": "Desplegable", +"dropdownCompDesc": "Un menú desplegable para mostrar de forma compacta una lista de opciones.", +"dropdownCompKeywords": "desplegable, menú, opciones, seleccionar", +"toggleButtonCompName": "Botón Toggle", +"toggleButtonCompDesc": "Botón que puede alternar entre dos estados u opciones.", +"toggleButtonCompKeywords": "conmutar, botón, interruptor, estado", +"textCompName": "Visualización de texto", +"textCompDesc": "Un componente sencillo para mostrar contenido de texto estático o dinámico con formato Markdown incluido.", +"textCompKeywords": "texto, visualización, estático, dinámico", +"tableCompName": "Cuadro", +"tableCompDesc": "Un componente de tabla enriquecido para mostrar datos en formato de tabla estructurada, con opciones de ordenación y filtrado, visualización de datos en árbol y filas extensibles.", +"tableCompKeywords": "tabla, datos, clasificación, filtrado", +"imageCompName": "Imagen", +"imageCompDesc": "Componente para la visualización de imágenes, compatible con varios formatos basados en URI o datos Base64.", +"imageCompKeywords": "imagen, visualización, medios, Base64", +"progressCompName": "Progreso", +"progressCompDesc": "Indicador visual de progreso, utilizado normalmente para mostrar el estado de finalización de una tarea.", +"progressCompKeywords": "progreso, indicador, estado, tarea", +"progressCircleCompName": "Círculo de Progreso", +"progressCircleCompDesc": "Un indicador de progreso circular, a menudo utilizado para estados de carga o tareas de tiempo limitado.", +"progressCircleCompKeywords": "círculo, progreso, indicador, carga", +"fileViewerCompName": "Visor de archivos", +"fileViewerCompDesc": "Un componente para visualizar varios tipos de archivos, incluidos documentos e imágenes.", +"fileViewerCompKeywords": "archivo, visor, documento, imagen", +"dividerCompName": "Divisor", +"dividerCompDesc": "Componente divisor visual, utilizado para separar contenidos o secciones en un diseño.", +"dividerCompKeywords": "divisor, separador, disposición, diseño", +"qrCodeCompName": "Código QR", +"qrCodeCompDesc": "Componente para mostrar códigos QR, útil para escanearlos rápidamente y transferir información.", +"qrCodeCompKeywords": "Código QR, escaneado, código de barras, información", +"formCompName": "Forma", +"formCompDesc": "Un componente contenedor para construir formularios estructurados con varios tipos de entrada.", +"formCompKeywords": "formulario, entrada, contenedor, estructura", +"jsonSchemaFormCompName": "Formulario de esquema JSON", +"jsonSchemaFormCompDesc": "Un componente de formulario dinámico generado a partir de un esquema JSON.", +"jsonSchemaFormCompKeywords": "JSON, esquema, formulario, dinámico", +"containerCompName": "Contenedor", +"containerCompDesc": "Contenedor de uso general para el diseño y la organización de los elementos de la interfaz de usuario.", +"containerCompKeywords": "contenedor, diseño, organización, interfaz de usuario", +"floatTextContainerCompName": "Contenedor de texto flotante", +"floatTextContainerCompDesc": "Componente contenedor de texto flotante", +"floatTextContainerCompKeywords": "contenedor, diseño, texto, flujo", +"collapsibleContainerCompName": "Contenedor plegable", +"collapsibleContainerCompDesc": "Un contenedor que puede expandirse o contraerse, ideal para gestionar la visibilidad de los contenidos.", +"collapsibleContainerCompKeywords": "plegable, contenedor, expandir, colapsar", +"tabbedContainerCompName": "Contenedor con pestañas", +"tabbedContainerCompDesc": "Un contenedor con navegación por pestañas para organizar el contenido en paneles separados.", +"tabbedContainerCompKeywords": "pestañas, contenedor, navegación, paneles", +"pageLayoutCompName": "Diseño de página", +"pageLayoutCompDesc": "Un contenedor que permite crear un diseño con áreas de cabecera, lateral, pie de página y contenido principal.", +"pageLayoutCompKeywords": "diseño, contenedor, navegación, páginas", +"modalCompName": "Modal", +"modalCompDesc": "Un componente modal emergente para mostrar contenido, alertas o formularios en foco.", +"modalCompKeywords": "modal, popup, alerta, formulario", +"listViewCompName": "Ver lista", +"listViewCompDesc": "Componente para mostrar una lista de elementos o datos, en cuyo interior se pueden colocar otros componentes. Como un repetidor.", +"listViewCompKeywords": "lista, vista, visualización, repetidor", +"gridCompName": "Rejilla", +"gridCompDesc": "Un componente de cuadrícula flexible para crear diseños estructurados con filas y columnas como extensión del componente Vista Lista.", +"gridCompKeywords": "cuadrícula, diseño, filas, columnas", +"navigationCompName": "Navegación", +"navigationCompDesc": "Un componente de navegación para crear menús, migas de pan o pestañas para la navegación por el sitio.", +"navigationCompKeywords": "navegación, menú, migas de pan, pestañas", +"iframeCompName": "IFrame", +"iframeCompDesc": "Un componente de marco en línea para incrustar páginas web externas y aplicaciones o contenido dentro de la aplicación.", +"iframeCompKeywords": "iframe, incrustar, página web, contenido", +"customCompName": "Componente personalizado", +"customCompDesc": "Un componente flexible y programable para crear elementos de interfaz de usuario únicos, definidos por el usuario y adaptados a sus necesidades específicas.", +"customCompKeywords": "personalizado, definido por el usuario, flexible, programable", +"moduleCompName": "Módulo", +"moduleCompDesc": "Utilice módulos para crear microaplicaciones diseñadas para encapsular funcionalidades o características específicas. Los módulos pueden incrustarse y reutilizarse en todas las aplicaciones.", +"moduleCompKeywords": "módulo, microaplicación, funcionalidad, reutilizable", +"jsonExplorerCompName": "Explorador JSON", +"jsonExplorerCompDesc": "Componente para explorar visualmente estructuras de datos JSON e interactuar con ellas.", +"jsonExplorerCompKeywords": "JSON, explorador, datos, estructura", +"jsonEditorCompName": "Editor JSON", +"jsonEditorCompDesc": "Un componente editor para crear y modificar datos JSON con validación y resaltado de sintaxis.", +"jsonEditorCompKeywords": "JSON, editor, modificar, validar", +"treeCompName": "Árbol", +"treeCompDesc": "Componente de estructura de árbol para visualizar datos jerárquicos, como sistemas de archivos u organigramas.", +"treeCompKeywords": "árbol, jerárquico, datos, estructura", +"treeSelectCompName": "Seleccionar árbol", +"treeSelectCompDesc": "Componente de selección que presenta las opciones en formato de árbol jerárquico, lo que permite realizar selecciones organizadas y anidadas.", +"treeSelectCompKeywords": "árbol, seleccionar, jerárquico, anidado", +"audioCompName": "Audio", +"audioCompDesc": "Componente para incrustar contenidos de audio, con controles de reproducción y ajuste del volumen.", +"audioCompKeywords": "audio, reproducción, sonido, música", +"videoCompName": "Vídeo", +"videoCompDesc": "Componente multimedia para incrustar y reproducir contenidos de vídeo, compatible con varios formatos.", +"videoCompKeywords": "vídeo, multimedia, reproducción, incrustación", +"drawerCompName": "Cajón", +"drawerCompDesc": "Componente de panel deslizante que puede utilizarse para navegación adicional o visualización de contenidos, y que suele emerger del borde de la pantalla.", +"drawerCompKeywords": "cajón, corredera, panel, navegación", +"chartCompName": "Gráfico", +"chartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", +"chartCompKeywords": "tabla, gráfico, datos, visualización", +"carouselCompName": "Carrusel de imágenes", +"carouselCompDesc": "Un componente de carrusel giratorio para mostrar imágenes, banners o diapositivas de contenido.", +"carouselCompKeywords": "carrusel, imágenes, rotación, escaparate", +"imageEditorCompName": "Editor de imágenes", +"imageEditorCompDesc": "Componente interactivo para editar y manipular imágenes, que ofrece diversas herramientas y filtros.", +"imageEditorCompKeywords": "imagen, editor, manipular, herramientas", +"mermaidCompName": "Cuadro de sirenas", +"mermaidCompDesc": "Componente para la representación de diagramas y organigramas complejos basados en la sintaxis Mermaid.", +"mermaidCompKeywords": "sirena, gráficos, diagramas, organigramas", +"calendarCompName": "Calendario", +"calendarCompDesc": "Un componente de calendario para mostrar fechas y eventos, con opciones para vistas de mes, semana o día.", +"calendarCompKeywords": "calendario, fechas, eventos, programación", +"signatureCompName": "Firma", +"signatureCompDesc": "Componente para la captura de firmas digitales, útil para procesos de aprobación y verificación.", +"signatureCompKeywords": "firma, digital, aprobación, verificación", +"jsonLottieCompName": "Animación Lottie", +"jsonLottieCompDesc": "Un componente para mostrar animaciones Lottie, que proporciona animaciones ligeras y escalables basadas en datos JSON.", +"jsonLottieCompKeywords": "lottie, animación, JSON, escalable", +"timelineCompName": "Cronología", +"timelineCompDesc": "Componente para mostrar eventos o acciones en orden cronológico, representados visualmente a lo largo de una línea de tiempo lineal.", +"timelineCompKeywords": "cronología, acontecimientos, cronológico, historia", +"commentCompName": "Cómo", +"commentCompDesc": "Un componente para añadir y mostrar comentarios de usuarios, con soporte para respuestas hilvanadas e interacción entre usuarios.", +"commentCompKeywords": "comentario, debate, interacción con el usuario, retroalimentación", +"mentionCompName": "Mencione", +"mentionCompDesc": "Componente que permite mencionar usuarios o etiquetas dentro de un contenido de texto, utilizado normalmente en redes sociales o plataformas colaborativas.", +"mentionCompKeywords": "mencionar, etiquetar, usuario, redes sociales", +"responsiveLayoutCompName": "Diseño adaptable", +"responsiveLayoutCompDesc": "Un componente de maquetación diseñado para adaptarse y responder a diferentes tamaños de pantalla y dispositivos, garantizando una experiencia de usuario coherente.", +"responsiveLayoutCompKeywords": "responsive, diseño, adaptar, tamaño de pantalla", +"splitLayoutCompName": "Diseño dividido", +"splitLayoutCompDesc": "Un componente de diseño para organizar múltiples áreas de visualización y separar áreas horizontal o verticalmente. Ofrece al usuario la posibilidad de adaptar la anchura o la altura de las áreas de visualización mediante arrastrar y soltar.", +"splitLayoutCompKeywords": "dividir, divisor, diseño, adaptar, tamaño de pantalla", +"iconCompName": "Iconos", +"iconCompDesc": "Utilice varios iconos para mejorar el atractivo visual y la experiencia de usuario de su aplicación.", +"iconCompKeywords": "Iconos, pictogramas, símbolos, formas", +"tourCompName": "Visita", +"tourCompDesc": "Un recorrido por los productos para guiar a los usuarios.", +"tourCompKeywords": "visita, visita de producto, recorrido, recorrido interactivo", +"hillchartCompName": "Hillchart", +"hillchartCompDesc": "Un componente de visualización para mostrar datos sobre el estado de la gestión de proyectos en formato de gráfico de colinas.", +"hillchartCompKeywords": "gestión de proyectos, gráfico de colinas, visualización, datos", +"openLayersGeoMapCompName": "Openlayers Geomap", +"openLayersGeoMapCompDesc": "Un componente para mostrar mapas interactivos utilizando OpenLayers, con soporte para varias capas de mapas y características.", +"openLayersGeoMapCompKeywords": "openlayers, geo mapa, interactivo, capas de mapa", +"chartsGeoMapCompName": "Gráficos de mapas geográficos", +"chartsGeoMapCompDesc": "Un componente para visualizar datos geográficos en mapas interactivos con gráficos dinámicos", +"chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualización, datos geográficos", +"bpmnEditorCompName": "BPMN Editor", +"bpmnEditorCompDesc": "Componente para visualizar, crear y editar diagramas BPMN, compatible con diversos elementos y características de BPMN.", +"bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, flujos de trabajo", +"turnstileCaptchaCompName": "Torniquete Captcha", +"turnstileCaptchaCompDesc": "Un componente captcha para verificar usuarios contra bots.", +"turnstileCaptchaCompKeywords": "captcha, verificación, identidad, seguridad", +"pivotTableCompName": "Tabla dinámica", +"pivotTableCompDesc": "Herramienta de resumen y análisis de datos para organizar y agregar datos en formato tabular.", +"pivotTableCompKeywords": "tabla dinámica, datos, análisis, agregación", +"funnelChartCompName": "Gráfico de embudo", +"funnelChartCompDesc": "Una herramienta de visualización para mostrar la reducción progresiva de los datos a medida que pasan por etapas.", +"funnelChartCompKeywords": "gráfico de embudo, ventas, conversiones, proceso", +"gaugeChartCompName": "Cuadro de gálibos", +"gaugeChartCompDesc": "Gráfico que muestra los datos como una lectura en un dial, útil para indicar el estado o nivel de algo.", +"gaugeChartCompKeywords": "gráfico de indicadores, métricas, rendimiento, estado", +"sankeyChartCompName": "Gráfico Sankey", +"sankeyChartCompDesc": "Diagrama de flujo en el que la anchura de las flechas es proporcional al caudal, utilizado para mostrar transferencias de energía, material o costes.", +"sankeyChartCompKeywords": "diagrama de sankey, flujo, energía, costes", +"candleStickChartCompName": "Gráfico de velas", +"candleStickChartCompDesc": "Estilo de gráfico financiero utilizado para describir los movimientos de precios de un valor, derivado o divisa.", +"candleStickChartCompKeywords": "gráfico de velas, acciones, trading, finanzas", +"radarChartCompName": "Gráfico de radar", +"radarChartCompDesc": "Método gráfico de visualización de datos multivariantes en forma de gráfico bidimensional de tres o más variables cuantitativas.", +"radarChartCompKeywords": "gráfico radar, multivariante, análisis de resultados", +"heatmapChartCompName": "Mapa de calor", +"heatmapChartCompDesc": "Representación gráfica de datos en la que los valores individuales se representan como colores.", +"heatmapChartCompKeywords": "mapa de calor, visualización de datos, intensidad", +"graphChartCompName": "Gráfico", +"graphChartCompDesc": "Diagrama que representa una red de nodos conectados por aristas, útil para mostrar interconexiones y relaciones.", +"graphChartCompKeywords": "gráfico, redes, relaciones, nodos", +"treeChartCompName": "Gráfico de árbol", +"treeChartCompDesc": "Diagrama que representa visualmente la jerarquía en una estructura arborescente, mostrando las relaciones entre los distintos nodos.", +"treeChartCompKeywords": "organigrama, jerarquía, organización", +"treemapChartCompName": "Gráfico Treemap", +"treemapChartCompDesc": "Gráfico que utiliza rectángulos anidados para representar proporcionalmente datos jerárquicos.", +"treemapChartCompKeywords": "mapa de árbol, jerarquía, visualización de datos", +"sunburstChartCompName": "Gráfico Sunburst", +"sunburstChartCompDesc": "Técnica de visualización radial de relleno de espacio que ilustra las relaciones jerárquicas a través de capas de un círculo.", +"sunburstChartCompKeywords": "gráfico de sol, radial, jerarquía", +"themeriverChartCompName": "Mapa del río temático", +"themeriverChartCompDesc": "Una visualización parecida a un gráfico de flujo que muestra los cambios en un conjunto de datos a lo largo del tiempo en todas las categorías.", +"themeriverChartCompKeywords": "tema río, series temporales, tendencias", +"basicChartCompName": "Cuadro básico", +"basicChartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", +"basicChartCompKeywords": "tabla, gráfico, datos, visualización", +"shapeCompName": "Formas", +"shapeCompDesc": "Una colección de formas geométricas para diagramas, ilustraciones y visualizaciones.", +"shapeCompKeywords": "formas, geométricas, diagramas, ilustraciones", +"ganttChartCompName": "Diagrama de Gantt", +"ganttChartCompDesc": "Gráfico que ilustra el calendario de un proyecto, mostrando las fechas de inicio y fin de los elementos y las dependencias.", +"ganttChartCompKeywords": "diagrama de gantt, gestión de proyectos, calendario", +"kanbanCompName": "Tablero Kanban (¡previsualización!)", +"kanbanCompDesc": "Un tablero de Kanban interactivo para la gestión visual de tareas y flujos de trabajo.", +"kanbanCompKeywords": "kanban, tablero, flujo de trabajo, tareas", +"pieChartCompName": "Gráfico circular", +"pieChartCompDesc": "Un componente versátil para visualizar datos con gráficos circulares.", +"pieChartCompKeywords": "gráfico, datos, visualización", +"lineChartCompName": "Gráfico lineal", +"lineChartCompDesc": "Un componente versátil para visualizar datos con gráficos de líneas.", +"lineChartCompKeywords": "gráfico, datos, visualización", +"barChartCompName": "Gráfico de barras", +"barChartCompDesc": "Un componente versátil para visualizar datos con gráficos de barras.", +"barChartCompKeywords": "gráfico, datos, visualización", +"scatterChartCompName": "Gráfico de dispersión", +"scatterChartCompDesc": "Un componente versátil para visualizar datos con gráficos de dispersión.", +"scatterChartCompKeywords": "gráfico, datos, visualización", +"colorPickerCompName": "Selector de color", +"colorPickerCompDesc": "Selección intuitiva de colores para personalizar.", +"colorPickerCompKeywords": "color, selector, personalización", +"floatButtonCompName": "Botón de flotador", +"floatButtonCompDesc": "Un botón de acción flotante para acciones destacadas y rápidas.", +"floatButtonCompKeywords": "botón flotante, acción, rápida", +"avatarCompName": "Avatar", +"avatarCompDesc": "Muestra avatares de usuario o imágenes de perfil para una identificación personalizada.", +"avatarCompKeywords": "avatar, imagen de perfil, identificación del usuario", +"avatarGroupCompName": "Grupo Avatar", +"avatarGroupCompDesc": "Un grupo de avatares para representar a varios usuarios o entidades de forma compacta y visualmente atractiva.", +"avatarGroupCompKeywords": "grupo de avatares, usuarios, entidades, compacto", +"transferName": "Transferencia", +"transferDesc": "Facilita la transferencia de datos entre dos listas mediante la función de arrastrar y soltar.", +"transferKeywords": "transferencia, datos, arrastrar y soltar", +"cardCompName": "Tarjeta de contenido", +"cardCompDesc": "Un componente de tarjeta para mostrar información o contenidos organizados de forma estructurada.", +"cardCompKeywords": "tarjeta, información, contenido, pantalla", +"timerCompName": "Timer", +"timerCompDesc": "Componente que muestra una cuenta atrás o el tiempo transcurrido, útil para el seguimiento de duraciones y plazos.", +"timerCompKeywords": "temporizador, cuenta atrás, tiempo transcurrido, seguimiento, duraciones, plazos", +}, +"comp": { + ...en.comp, + +"menuViewDocs": "Ver documentación", +"menuViewPlayground": "Ver zona de juegos interactiva", +"menuUpgradeToLatest": "Actualizar a la última versión", +"nameNotEmpty": "No puede estar vacío", +"nameRegex": "Debe empezar por una letra y contener sólo letras, cifras y guiones bajos (_)", +"nameJSKeyword": "No puede ser una palabra clave JavaScript", +"nameGlobalVariable": "No puede ser un nombre de variable global", +"nameExists": "Nombre {name} Ya existe", +"getLatestVersionMetaError": "No se ha podido obtener la última versión, inténtelo más tarde.", +"needNotUpgrade": "La versión actual ya es la última.", +"compNotFoundInLatestVersion": "Componente actual no encontrado en la última versión.", +"upgradeSuccess": "Actualizado correctamente a la última versión.", +"searchProp": "Buscar en", +}, +"jsonSchemaForm": { + ...en.jsonSchemaForm, + +"retry": "Reintentar", +"resetAfterSubmit": "Restablecer después de enviar correctamente el formulario", +"jsonSchema": "Esquema JSON", +"uiSchema": "Esquema de IU", +"schemaTooltip": "Véase", +"defaultData": "Datos de formulario precargados", +"dataDesc": "Datos del formulario actual", +"required": "Requerido", +"maximum": "El valor máximo es {value}.", +"minimum": "El valor mínimo es {value}.", +"exclusiveMaximum": "Debe ser inferior a {value}", +"exclusiveMinimum": "Debe ser mayor que {value}.", +"multipleOf": "Debe ser múltiplo de {value}.", +"minLength": "Al menos {value} Caracteres", +"maxLength": "Como máximo {value} Caracteres", +"pattern": "Debe coincidir con el patrón {value}", +"format": "Debe coincidir con el formato {value}.", +}, +"select": { + ...en.select, + +"inputValueDesc": "Valor de búsqueda de entrada", +}, +"customComp": { + ...en.customComp, + +"text": "Es un buen día.", +"triggerQuery": "Consulta de activación", +"updateData": "Actualizar datos", +"updateText": "¡También estoy de buen humor para desarrollar ahora mi propio componente personalizado con Lowcoder!", +"sdkGlobalVarName": "Lowcoder", +"data": "Datos que desea pasar al componente personalizado", +"code": "Código de su componente personalizado", +}, +"tree": { + ...en.tree, + +"placeholder": "Seleccione una opción", +"selectType": "Seleccionar tipo", +"noSelect": "No Seleccionar", +"singleSelect": "Selección individual", +"multiSelect": "Selección múltiple", +"checkbox": "Casilla de verificación", +"checkedStrategy": "Estrategia verificada", +"showAll": "Todos los nodos", +"showParent": "Sólo nodos padre", +"showChild": "Nodos hijos únicos", +"autoExpandParent": "Auto Expandir Padre", +"checkStrictly": "Comprobar estrictamente", +"checkStrictlyTooltip": "Compruebe el TreeNode con precisión; el TreeNode padre y los TreeNodes hijos no están asociados", +"treeData": "Datos del árbol", +"treeDataDesc": "Datos actuales del árbol", +"value": "Valores por defecto", +"valueDesc": "Valores actuales", +"expanded": "Valores ampliados", +"expandedDesc": "Valores ampliados actuales", +"defaultExpandAll": "Por defecto Expandir todos los nodos", +"showLine": "Mostrar línea", +"showLeafIcon": "Mostrar icono de hoja", +"treeDataAsia": "Asia", +"treeDataChina": "China", +"treeDataBeijing": "Pekín", +"treeDataShanghai": "Shanghai", +"treeDataJapan": "Japón", +"treeDataEurope": "Europa", +"treeDataEngland": "Inglaterra", +"treeDataFrance": "Francia", +"treeDataGermany": "Alemania", +"treeDataNorthAmerica": "Norteamérica", +"helpLabel": "Etiqueta de nodo", +"helpValue": "Valor de nodo único en el árbol", +"helpChildren": "Niños Nodos", +"helpDisabled": "Desactiva el Nodo", +"helpSelectable": "Si el nodo es seleccionable (tipo de selección única/múltiple)", +"helpCheckable": "Si mostrar casilla de verificación (Tipo de casilla de verificación)", +"helpDisableCheckbox": "Desactiva la casilla de verificación (Tipo de casilla de verificación)", +}, +"moduleContainer": { + ...en.moduleContainer, + +"eventTest": "Prueba de eventos", +"methodTest": "Método de ensayo", +"inputTest": "Prueba de entrada", +}, +"password": { + ...en.password, + +"label": "Contraseña", +"placeholder": "Introduzca la contraseña", +"conformLabel": "Confirmar contraseña", +"conformPlaceholder": "Confirmar contraseña", +"visibilityToggle": "Conmutar visibilidad", +}, +"richTextEditor": { + ...en.richTextEditor, + +"toolbar": "Personalizar la barra de herramientas", +"toolbarDescription": "Puede personalizar la barra de herramientas. Por favor, consulte: https://quilljs.com/docs/modules/toolbar/ para más detalles.", +"placeholder": "Por favor, introduzca...", +"hideToolbar": "Ocultar barra de herramientas", +"content": "Contenido", +"title": "Título", +"save": "Guardar", +"link": "Enlace:", +"edit": "Editar", +"remove": "Eliminar", +"defaultValue": "Contenido básico", +}, +"floatButton": { + ...en.floatButton, + +"custom": "A medida", +"backTop": "Volver Arriba", +"buttonType": "Tipo de botón", +"buttonShape": "Forma del botón", +"square": "Cuadrado", +"circle": "Círculo", +"description": "Descripción", +"badge": "Insignia", +"primary": "Principal", +"default": "Por defecto", +"buttonTheme": "Tema del botón", +"badgeColor": "Color del distintivo", +"dot": "Insignia Como Punto", +"hidden": "Oculto", +"visibilityHeight": "Altura de visibilidad", +"visibilityHeightDesc": "Desplácese hasta una altura determinada antes de mostrar el botón de volver al principio, siempre se muestra 0,El modo de edición no puede previsualizar en tiempo real", +}, +"colorPicker": { + ...en.colorPicker, + +"trigger": "Evento desencadenante", +"click": "Haga clic en", +"hover": "pase el ratón por", +"disabledAlpha": "Desactivar selección alfa", +"recommended": "Recomendado", +"showPresets": "Mostrar preajustes de color", +}, +"badge": { + ...en.badge, + +"showCloseButton": "Mostrar botón de cierre", +"Type": "Tipo de placa", +"Count": "Recuento de insignias", +"Size": "Tamaño del distintivo", +"SizeDefault": "por defecto", +"SizeSmall": "Pequeño", +"overflowCount": "Recuento de desbordamientos", +"Title": "Título de la insignia", +"dot": "Punto", +"number": "Número", +"tooltip": "Información sobre herramientas", +}, +"gantt": { + ...en.gantt, + +"key": "Clave", +"title": "Título", +"project": "Proyecto", +"from": "En", +"minute": "minuto", +"hour": "Hora", +"day": "Día", +"week": "Semana", +"month": "Mes", +"year": "Año", +"quarter": "Cuarto", +"tasks": "Datos de tareas", +"level": "nivel", +"durationUnit": "Unidad de duración", +"duration": "Duración", +"hourScalesFormat": "%F %d", +"dayScalesFormat": "%d %M", +"weekScalesFormat1": "%d %M", +"weekScalesFormat2": "%j %D", +"monthScalesFormat1": "%F, %Y", +"monthScalesFormat2": "Semana #%W", +"quarterScalesFormat": "{y} Q{i}", +"yearScalesFormat": "%Y", +"tree": "árbol", +"ColumnsData": "Columnas Datos", +"allowChangeTask": "Tarea DbClick", +"allowAddLink": "Añadir enlace", +"allowLinkDelete": "Enlace Eliminar", +"allowProgressDrag": "Arrastre de progreso", +"allowTaskDrag": "Arrastre de tareas", +"links": "Datos de enlaces", +"dataFormat": "Formato de análisis de datos", +"handleDateChange": "Gestionar el cambio de tarea", +"handleTaskChange": "Gestionar el cambio de tarea", +"handleAddedLink": "Mango Enlace añadido", +"handleDeletedLink": "Manejar enlace eliminado", +"handleProgressDrag": "Manejar el arrastre de progreso", +"showTodayMark": "Mostrar hoy Mark", +"resize": "Cambie el tamaño de", +"otherEvents": "Otros eventos", +"openAllBranchInit": "Abrir todas las sucursales Init", +"date": "Fecha", +"text": "Texto", +"progress": "progreso", +"width": "Anchura", +"ColumnsType": "Tipo de nubes", +"currentId": "Identificación actual", +"currentObject": "Objeto actual", +"addTask": "Añadir tarea(s)", +"taskObject": "Objeto de la tarea", +"taskObjectDesc": "Admite matrices de tareas o un único objeto de tarea", +"linkID": "ID del enlace", +"linkIDDesc": "Admite matrices de ID de enlaces o un único objeto de enlace", +"removeTask": "Eliminar tarea", +"taskID": "ID de tarea", +"taskIDDesc": "Admite matrices de ID o un único ID", +"add": "Añadir", +"expandingAll": "Ampliar todo", +"collapsingAll": "Colapsar todo", +"addTaskFail": "La tarea de adición ha fallado, y el tipo de parámetro debe ser un objeto o un objeto array", +"addLinkFail": "El enlace de adición falló, y el tipo de parámetro debe ser un objeto o un objeto de matriz", +"removeTaskFail": "La tarea de eliminación ha fallado, y el tipo de parámetro debe ser cadena o matriz de cadenas", +"removeLinkFail": "Los enlaces de borrado fallaron, y el tipo de parámetro debe ser string array", +"otherData": "Otros datos{i}", +"projectText": "Proyecto #{i}", +"taskText": "Tarea #{i}", +"AutoCalculateProgress": "Progreso del cálculo automático", +"allowProjectDrag": "Permitir el arrastre de proyectos", +"showColumns": "Mostrar columnas", +"exportToPNG": "Exportar a PNG", +"exportToPDF": "Exportar a PDF", +"exportToExcel": "Exportar a Excel", +"progressLowBg": "Bajo BgColor", +"progressLowColor": "Bajo Progreso Color", +"progressMediumBg": "Medio BgColor", +"progressMediumColor": "Medio Color Progress", +"progressHighBg": "Altura BgColor", +"progressHighColor": "Heigh Progress Color", +"progresscompletedColor": "Color de progreso completado", +"lowProgressLine": "Línea de progreso baja", +"mediumProgressLine": "Línea de progreso medio", +"SegmentedColor": "Color segmentado Progress", +"link_f2s": "Enlace F2S", +"link_s2s": "Enlace S2S", +"link_f2f": "Enlace F2F", +"link_s2f": "Enlace S2F", +"weekScale": "#{i},", +"showHolidays": "Mostrar vacaciones", +"StatutoryHolidays": "Datos sobre las vacaciones legales", +"skipOffTime": "Oculta el tiempo no trabajado", +"weekend": "Fin de semana", +"weekendSelected": "Fin de semana seleccionado", +"noWorkHour": "Ninguna hora de trabajo", +"noWorkHourSelected": "ninguna hora de trabajo seleccionada", +"showWorkTimes": "Mostrar horarios de trabajo", +"workTimeData": "Datos sobre el tiempo de trabajo", +"fit": "ajuste", +"manual": "manual", +"scaleMode": "Modo Escala", +"startDate": "Fecha de inicio", +"endDate": "Fecha final", +"addLink": "Añadir enlace(s)", +"linkObject": "enlace Objeto", +"removeLink": "eliminar enlace", +"allowSort": "Permitir clasificación", +"showTask": "Mostrar tarea", +"toggleOnDBClick": "Activar DBClick", +"sortOptions": "Opciones iniciales de clasificación", +"rowHeight": "Altura de fila", +"showTooltip": "Mostrar información sobre herramientas", +"tooltipTemplates": "Plantilla Tooltip", +"allowResizeTask": "Permitir redimensionar tarea", +"projectColor": "Proyecto Color", +"projectColorBg": "Proyecto BgColor", +"taskColor": "Tarea Color", +"taskColorBg": "Tarea BgColor", +"milestoneColor": "Hito Color", +"highlightOverdue": "Resaltar Atrasado", +"overdueColor": "Color atrasado", +"overdueBgColor": "Atrasado BgColor", +"projectCompletedBgColor": "Proyecto finalizado BgColor", +"projectCompletedColor": "Proyecto finalizado Color", +"tag": "etiqueta", +"tasksTableWidth": "Anchura de la tabla de tareas", +"allowErrorMessage": "Permitir mensaje de error", +"currentProjectId": "Id de proyecto actual", +"currentProjectLastTask": "Proyecto actual Última tarea", +"onlySortProject": "Sólo Ordenar Proyecto", +}, +"transfer": { + ...en.transfer, + +"sourceTitle": "Fuente de datos", +"targetTitle": "Datos objetivo", +"content": "Contenido {i}", +"items": "Artículos", +"targetKeys": "Claves seleccionadas", +"oneWay": "Una vía", +"pagination": "Paginación", +"pageSize": "Tamaño de página", +"allowSearch": "Permitir búsqueda", +"selectedKeys": "Claves seleccionadas", +"searchInfo": "Buscar información", +"targerObject": "Objeto Targer", +}, +"avatarGroup": { + ...en.avatarGroup, + +"maxCount": "Recuento máximo", +"avatarSize": "Tamaño del avatar", +"autoColor": "Auto Color", +"alignment": "Alineación", +"currentAvatar": "Avatar actual", +}, +"avatarComp": { + ...en.avatarComp, + +"square": "cuadrado", +"circle": "círculo", +"icon": "icono", +"shape": "forma", +"counts": "Insignia", +"title": "título", +"src": "src", +"avatarCompTooltip": "La prioridad de visualización es: imagen -> caracteres -> icono. En función de lo que esté disponible en primer lugar.", +"iconSize": "Tamaño del icono", +"avatarBackground": "Fondo", +"label": "Etiqueta", +"caption": "Leyenda", +"labelPosition": "Posición", +"alignmentPosition": "alineación", +"text": "Texto", +"enableDropDown": "Activar desplegable", +"containerBackground": "Fondo", +}, +"card": { + ...en.card, + +"cardType": "Tipo de tarjeta", +"common": "común", +"custom": "personalizado", +"default": "por defecto", +"small": "pequeño", +"showTitle": "Mostrar título", +"title": "Título", +"more": "Más", +"extraTitle": "Llamamiento a la acción", +"CoverImg": "Imagen de portada", +"imgSrc": "Fuente de la imagen", +"showMeta": "Mostrar contenido", +"metaTitle": "Título del contenido", +"metaDesc": "Descripción del contenido", +"imgHeight": "Altura de la imagen", +"showActionIcon": "Mostrar opciones de acción", +"actionOptions": "Opciones de acción", +"menu": "Menú {i}", +"hoverColor": "hover Color", +"IconColor": "Icono Color", +"titleSize": "Título Tamaño", +}, +"timer": { + ...en.timer, + +"timerState": "Estado del temporizador", +"elapsedTime": "Tiempo transcurrido", +"timer": "Timer", +"countdown": "Cuenta atrás", +"defaultValue": "Valor por defecto", +"timerType": "Tipo de temporizador", +"start": "Inicio", +"pause": "Pausa", +"resume": "Currículum", +"reset": "Restablecer", +"startPause": "Inicio/Pausa", +"hideButton": "Botón Ocultar", +"fontColor": "Color de fuente", +}, +"iconComp": { + ...en.iconComp, + +"icon": "Icono", +"autoSize": "Icono AutoSize", +"iconSize": "Tamaño del icono", +}, +"numberInput": { + ...en.numberInput, + +"formatter": "Formato", +"precision": "Precisión", +"allowNull": "Permitir valor nulo", +"thousandsSeparator": "Mostrar separador de miles", +"controls": "Mostrar botones de aumento/disminución", +"step": "Paso", +"standard": "Estándar", +"percent": "Porcentaje", +}, +"slider": { + ...en.slider, + +"step": "Paso", +"stepTooltip": "El valor debe ser mayor que 0 y divisible por (Máx-Mín)", +"vertical": "Orientación vertical", +}, +"rating": { + ...en.rating, + +"max": "Clasificación máxima", +"allowHalf": "Permitir la mitad de puntos de valoración", +}, +"optionsControl": { + ...en.optionsControl, + +"optionList": "Opciones", +"option": "Opción", +"optionI": "Opción {i}", +"viewDocs": "Ver documentos", +"tip": "Las variables \"item\" e \"i\" representan el valor y el índice de cada elemento de la matriz de datos.", +}, +"stepOptionsControl": { + ...en.stepOptionsControl, + +"value": "Valor / Clave", +"valueTooltip": "El valor del paso debe ser un número. Para el primer Paso, debe ser igual al valor inicial. Los números deben estar en orden coherente y ascendente", +"title": "Paso Título", +"subTitle": "Paso Subtítulo", +"description": "Paso Descripción", +"status": "Paso Estado", +"icon": "Paso Icono", +}, +"step": { + ...en.step, + +"initialValue": "Números iniciales en", +"initialValueTooltip": "Dónde empezar la numeración visual. Debe ser 1 o superior.", +"valueDesc": "Valor actual", +"size": "Pasos Tamaño", +"sizeSmall": "Pequeño", +"sizeDefault": "Por defecto", +"percent": "Pasos Porcentaje", +"type": "Tipo de pasos", +"typeDefault": "Estándar", +"typeNavigation": "Navegación", +"typeInline": "En línea", +"direction": "Pasos Dirección", +"directionVertical": "Vertical", +"directionHorizontal": "Horizontal", +"labelPlacement": "Pasos Colocación de etiquetas", +"status": "Pasos Estado", +"statusWait": "Espere", +"statusProcess": "Proceso", +"statusFinish": "Acabado", +"statusError": "Error", +"showDots": "Mostrar puntos en lugar de símbolos", +"showIcons": "Mostrar iconos en lugar de símbolos", +"responsive": "Respuesta", +"selectable": "Seleccionable", +}, +"coloredTagOptionControl": { + ...en.coloredTagOptionControl, + +"tag": "Texto de la etiqueta", +"color": "Color", +"icon": "Icono", +}, +"radio": { + ...en.radio, + +"options": "Opciones", +"horizontal": "Horizontal", +"horizontalTooltip": "El diseño horizontal se enrolla cuando se queda sin espacio", +"vertical": "Vertical", +"verticalTooltip": "El diseño vertical siempre se mostrará en una sola columna", +"autoColumns": "Columna Auto", +"autoColumnsTooltip": "La disposición en autocolumnas reordena automáticamente el orden según lo permita el espacio y muestra varias columnas.", +}, +"cascader": { + ...en.cascader, + +"options": "Datos JSON para mostrar selecciones en cascada", +}, +"selectInput": { + ...en.selectInput, + +"valueDesc": "Valor seleccionado actualmente", +"selectedIndexDesc": "El índice del valor seleccionado actualmente, o -1 si no hay ningún valor seleccionado.", +"selectedLabelDesc": "Etiqueta del valor seleccionado actualmente", +}, +"file": { + ...en.file, + +"typeErrorMsg": "Debe ser un número con una unidad de tamaño de archivo válida, o un número de bytes sin unidad.", +"fileEmptyErrorMsg": "Carga fallida. El tamaño del archivo está vacío.", +"fileSizeExceedErrorMsg": "Carga fallida. El tamaño del archivo excede el límite.", +"minSize": "Tamaño mínimo", +"minSizeTooltip": "El tamaño mínimo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", +"maxSize": "Tamaño máximo", +"maxSizeTooltip": "El tamaño máximo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", +"single": "Único", +"multiple": "Múltiples", +"directory": "Directorio", +"upload": "Visite", +"fileType": "Tipos de ficheros", +"reference": "Consulte", +"fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", +"fileTypeTooltip": "Especificadores únicos de tipo de archivo", +"uploadType": "Tipo de carga", +"showUploadList": "Mostrar lista de cargas", +"maxFiles": "Archivos Max", +"filesValueDesc": "El contenido del archivo cargado actualmente está codificado en Base64", +"filesDesc": "Lista de los archivos cargados actualmente. Para más detalles, consulte", +"clearValueDesc": "Borrar todos los archivos", +"parseFiles": "Analizar archivos", +"parsedValueTooltip1": "Si parseFiles es True, los archivos se convertirán en objetos, matrices o cadenas. Se puede acceder a los datos analizados a través de la matriz parsedValue.", +"parsedValueTooltip2": "Admite archivos Excel, JSON, CSV y de texto. Otros formatos devolverán un valor nulo.", +"forceCapture": "Captura forzosa", +"forceCaptureTooltip": "En lugar de cargar, captura la imagen desde la cámara", +"usePhoto": "Utilizar foto", +"retakePhoto": "Retomar foto", +"capture": "Capture", +}, +"date": { + ...en.date, + +"format": "Formato", +"inputFormat": "Formato de entrada", +"formatTip": "Admite: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", +"reference": "Consulte", +"showTime": "Hora del espectáculo", +"start": "Fecha de inicio", +"end": "Fecha final", +"year": "Año", +"quarter": "Cuarto", +"month": "Mes", +"week": "Semana", +"date": "Fecha", +"clearAllDesc": "Borrar todo", +"resetAllDesc": "Restablecer todo", +"placeholder": "Seleccionar fecha", +"placeholderText": "Marcador de posición", +"startDate": "Fecha de inicio", +"endDate": "Fecha final", +}, +"time": { + ...en.time, + +"start": "Hora de inicio", +"end": "Fin de los tiempos", +"formatTip": "Soporte: 'HH:mm:ss', 'Timestamp'", +"format": "Formato", +"placeholder": "Seleccionar hora", +"placeholderText": "Marcador de posición", +"startTime": "Hora de inicio", +"endTime": "Fin de los tiempos", +}, +"button": { + ...en.button, + +"prefixIcon": "Prefijo Icono", +"prefixText": "Texto del prefijo", +"suffixIcon": "Icono de sufijo", +"icon": "Icono", +"iconSize": "Tamaño del icono", +"button": "Botón de formulario", +"formToSubmit": "Formulario de envío", +"default": "Por defecto", +"submit": "Enviar", +"textDesc": "Texto que aparece actualmente en el botón", +"loadingDesc": "¿Está el botón en estado de carga? Si es verdadero, el botón actual está cargando", +"formButtonEvent": "Evento", +}, +"link": { + ...en.link, + +"link": "Enlace", +"textDesc": "Texto que aparece actualmente en el enlace", +"loadingDesc": "¿Está el enlace en estado de carga? Si es verdadero, el enlace actual está cargando", +}, +"scanner": { + ...en.scanner, + +"text": "Haga clic en Escanear", +"camera": "Cámara {index}", +"changeCamera": "Cambiar cámara", +"continuous": "Escaneado continuo", +"uniqueData": "Ignorar datos duplicados", +"maskClosable": "Haga clic en la máscara para cerrar", +"errTip": "Utilice este componente bajo HTTPS o Localhost", +}, +"dropdown": { + ...en.dropdown, + +"onlyMenu": "Pantalla sólo con etiqueta", +"textDesc": "Texto que aparece actualmente en el botón", +"triggerMode": "Modo de disparo", +}, +"textShow": { + ...en.textShow, + +"text": "### 👋 Hola, {name}", +"valueTooltip": "Markdown admite la mayoría de las etiquetas y atributos HTML. iframe, Script y otras etiquetas están desactivadas por motivos de seguridad.", +"verticalAlignment": "Alineación vertical", +"horizontalAlignment": "Alineación horizontal", +"textDesc": "Texto mostrado en el cuadro de texto actual", +}, +"table": { + ...en.table, + +"editable": "Editable", +"columnNum": "Columnas", +"viewModeResizable": "Ancho de columna ajustado por el usuario", +"viewModeResizableTooltip": "Si los usuarios pueden ajustar el ancho de columna.", +"visibleResizables": "Mostrar asas de cambio de tamaño", +"visibleResizablesTooltip": "Mostrar los Manejadores de Redimensionamiento visibles en la Cabecera de la Tabla.", +"showFilter": "Botón Mostrar filtro", +"showRefresh": "Mostrar botón de actualización", +"showDownload": "Mostrar botón de descarga", +"columnSeparator": "Separador de columna", +"columnSeparatorTooltip": "Separador de columnas (\"delimitador\") en el archivo CSV descargado.\n\nRecomendaciones:\n- Coma (,)\n- Punto y coma (;)\n- Tubo (|)\n- Tabulación (\\t)", +"columnSetting": "Botón Mostrar visibilidad de columnas", +"searchText": "Buscar texto", +"searchTextTooltip": "Buscar y Filtrar los Datos, que se presentan actualmente en la Tabla. Esta es una Búsqueda sólo frontal y No Afecta a la Consulta de la Fuente de Datos).", +"showQuickJumper": "Mostrar Quick Jumper", +"hideOnSinglePage": "Ocultar en una sola página", +"showSizeChanger": "Botón de cambio de talla", +"pageSizeOptions": "Opciones de tamaño de página", +"pageSize": "Tamaño de página", +"total": "Recuento total de filas", +"totalTooltip": "El valor por defecto es el número de elementos de datos actuales que pueden obtenerse de la consulta, por ejemplo: '{{query1.data[0].count}}'.", +"filter": "Filtros", +"filterRule": "Regla de filtrado", +"chooseColumnName": "Elegir columna", +"chooseCondition": "Elegir condición", +"clear": "Claro", +"columnShows": "Columnas", +"selectAll": "Seleccionar todo", +"and": "Y", +"or": "O", +"contains": "Contiene", +"notContain": "No contiene", +"equals": "Es igual a", +"isNotEqual": "No es igual", +"isEmpty": "Está vacío", +"isNotEmpty": "No está vacío", +"greater": "Mayor que", +"greaterThanOrEquals": "Mayor o igual que", +"lessThan": "Menos de", +"lessThanOrEquals": "Menor o igual que", +"action": "Acción", +"columnValue": "Valor de columna", +"columnValueTooltip": "'{{currentCell}}': Datos de la celda actual\n '{{currentRow}}': Datos de la fila actual\n '{{currentIndex}}': Índice de datos actual (empezando por 0)\n Ejemplo: '{{currentCell * 5}}' Mostrar 5 Veces el Valor Original de los Datos.", +"columnTooltip": "Columna Tooltip", +"imageSrc": "Fuente de la imagen", +"imageSize": "Tamaño de la imagen", +"columnTitle": "Título", +"columnTitleTooltip": "Información sobre el título", +"showTitle": "Mostrar título", +"showTitleTooltip": "Mostrar/Ocultar el título de la columna en la cabecera de la tabla", +"sortable": "Clasificable", +"align": "Alineación", +"fixedColumn": "Columna fija", +"autoWidth": "Ancho automático", +"customColumn": "Columna personalizada", +"auto": "Coche", +"fixed": "Fijo", +"columnType": "Tipo de columna", +"dataMapping": "Cartografía de datos", +"numberStep": "Paso", +"numberStepTooltip": "El número al que aumenta o disminuye el valor actual. Puede ser un número entero o decimal", +"precision": "Precisión", +"float": "Flotador", +"prefix": "Prefijo", +"suffix": "Sufijo", +"avatars": "Avatares", +"avatarGroupAlignment": "Alineación de avatares", +"text": "Texto", +"number": "Número", +"link": "Enlace", +"links": "Enlaces", +"tag": "Etiqueta", +"select": "Seleccione", +"dropdown": "Desplegable", +"time": "Tiempo", +"date": "Fecha", +"dateTime": "Fecha Hora", +"badgeStatus": "Estado", +"button": "Botón", +"image": "Imagen", +"boolean": "Booleano", +"switch": "Interruptor", +"rating": "Clasificación", +"progress": "Progreso", +"option": "Operación", +"optionList": "Lista de operaciones", +"option1": "Operación 1", +"status": "Estado", +"statusTooltip": "Valores opcionales: Correcto, Error, Predeterminado, Advertencia, Procesando", +"primaryButton": "Principal", +"defaultButton": "Por defecto", +"type": "Tipo", +"tableSize": "Tamaño de la tabla", +"hideHeader": "Ocultar cabecera de tabla", +"hideToolbar": "Ocultar pie de página", +"fixedHeader": "Cabecera de tabla fija", +"fixedHeaderTooltip": "La cabecera será fija para la tabla desplazable verticalmente", +"fixedToolbar": "Barra de herramientas fija", +"fixedToolbarTooltip": "La barra de herramientas se fijará para la tabla desplazable verticalmente en función de la posición", +"hideBordered": "Mostrar asas de cambio de tamaño", +"showHeaderGridBorder": "Mostrar borde de cuadrícula de cabecera", +"showRowGridBorder": "Mostrar borde de cuadrícula de fila", +"showVerticalRowGridBorder": "Mostrar el borde vertical de la cuadrícula de filas", +"showHorizontalRowGridBorder": "Mostrar el borde horizontal de la cuadrícula de filas", +"deleteColumn": "Borrar columna", +"confirmDeleteColumn": "Confirme Borrar columna:", +"small": "S", +"middle": "M", +"large": "L", +"refreshButtonTooltip": "Los Datos Actuales Cambian, Pulse para Regenerar la Columna.", +"changeSetDesc": "Un Objeto que Representa Cambios en una Tabla Editable, Sólo Contiene la Celda Cambiada. Las filas van primero y las columnas después.", +"selectedRowDesc": "Proporciona datos para la fila seleccionada actualmente, indicando la fila que desencadena un evento de clic si el usuario hace clic en un botón/enlace de la fila.", +"selectedRowsDesc": "Útil en el modo de selección múltiple, igual que SelectedRow", +"pageNoDesc": "Página de visualización actual, empezando por 1", +"pageSizeDesc": "Cuántas filas por página", +"sortColumnDesc": "Nombre de la columna ordenada actualmente seleccionada", +"sortDesc": "Si la fila actual está en orden descendente", +"pageOffsetDesc": "El inicio actual de la paginación, utilizado para la paginación para obtener datos. Ejemplo: Select * from Usuarios Limite '{{table1.pageSize}}' Desplazamiento '{{table1.pageOffset}}'", +"displayDataDesc": "Datos mostrados en la tabla actual", +"selectedIndexDesc": "Índice seleccionado en los datos de visualización", +"filterDesc": "Parámetros de filtrado de tablas", +"dataDesc": "Los datos JSON de la tabla", +"saveChanges": "Guardar cambios", +"cancelChanges": "Cancelar cambios", +"rowSelectChange": "Cambio de selección de fila", +"rowClick": "Fila Click", +"rowExpand": "Fila Ampliar", +"rowShrink": "Reducción de filas", +"search": "Buscar en", +"download": "Descargar", +"columnEdited": "Columna editada", +"filterChange": "Cambio de filtro", +"sortChange": "Ordenar Cambio", +"pageChange": "Cambio de página", +"refresh": "Actualizar", +"rowColor": "Color de fila condicional", +"rowColorDesc": "Establece Condicionalmente el Color de la Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", +"rowHeight": "Alto de línea condicional", +"rowHeightDesc": "Establece Condicionalmente el Alto de Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", +"cellColor": "Color de celda condicional", +"cellColorDesc": "Establezca Condicionalmente el Color de la Celda Basado en el Valor de la Celda Usando CurrentCell. Por ejemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", +"saveChangesNotBind": "No hay ningún manejador de eventos configurado para guardar cambios. Vincule al menos un controlador de eventos antes de hacer clic.", +"dynamicColumn": "Utilizar la visibilidad dinámica de columnas", +"dynamicColumnConfig": "Columnas visibles", +"dynamicColumnConfigDesc": "Visibilidad dinámica de columnas. Acepta un array de nombres de columnas. Todas las columnas son visibles por defecto. Ejemplo: [\"id\", \"nombre\"]", +"position": "Posición", +"showDataLoadSpinner": "Mostrar indicador de carga", +"showValue": "Mostrar valor", +"expandable": "Ampliable", +"configExpandedView": "Configurar vista ampliada", +"toUpdateRowsDesc": "Una Matriz de Objetos para Filas a Actualizar en Tablas Editables.", +"selectedCellDesc": "Célula seleccionada", +"empty": "Vacío", +"falseValues": "Texto en falso", +"iconTrue": "Icono Cuando es verdadero", +"iconFalse": "Icono en falso", +"iconNull": "Icono A cero", +"allColumn": "Todos", +"visibleColumn": "Visible", +"emptyColumns": "Actualmente no hay columnas visibles", +"showSummary": "Mostrar fila(s) de resumen", +"totalSummaryRows": "Total de filas", +"inlineAddNewRow": "Inline Añadir nueva(s) fila(s)", +"editMode": "Modo Edición", +"singleClick": "Un solo clic", +"doubleClick": "Doble clic", +"showUpdateButtons": "Mostrar botones Guardar/Cancelar", +}, +"image": { + ...en.image, + +"src": "Fuente de la imagen", +"srcDesc": "Fuente de la imagen. Puede ser una URL, una ruta o una cadena Base64. Por ejemplo: data:image/png;base64, AAA... CCC", +"supportPreview": "Soporte Click Preview (zoom)", +"supportPreviewTip": "Efectivo cuando la fuente de la imagen es válida", +"previewSrc": "Fuente de imágenes de alta resolución", +"clipPath": "Recorte de imagen", +"clipPathTip": "Utilice clip-path para definir una forma personalizada para su elemento basada en la definición CSS, haciendo referencia a una máscara SVG (a través de la URL de origen) o utilizando formas predefinidas como circle(), ellipse(), polygon(), o inset() para el recorte.", +"enableOverflow": "Activar desbordamiento", +"enableOverflowTip": "Permite que la imagen desborde su contenedor, posibilitando el recorte más allá de los límites del contenedor. Resulta útil para mantener el enfoque en partes específicas de la imagen.", +"overflow": "Comportamiento de desbordamiento (CSS)", +"overflowTip": "Define cómo debe comportarse el contenido cuando desborda el contenedor. Opciones como \"oculto\", \"desplazamiento\" o \"visible\" determinan la visibilidad del contenido recortado.", +"positionX": "Posición horizontal", +"positionXTip": "Especifica la alineación horizontal de la imagen dentro de su contenedor. Ejemplos: 'izquierda', 'centro', 'derecha', o valores porcentuales.", +"positionY": "Posición vertical", +"positionYTip": "Especifica la alineación vertical de la imagen dentro de su contenedor. Ejemplos: 'arriba', 'centro', 'abajo', o valores porcentuales.", +"aspectRatio": "Relación de aspecto (CSS)", +"aspectRatioTip": "Mantiene una relación anchura-altura coherente para la imagen, como \"16/9\" para pantalla panorámica o \"1/1\" para cuadrada. Déjelo en blanco para las dimensiones naturales de la imagen.", +"placement": "Colocación de imágenes", +"placementTip": "Determina dónde y cómo se muestra la imagen dentro del diseño o contenedor. Las opciones incluyen una lógica específica de alineación o colocación.", +}, +"progress": { + ...en.progress, + +"value": "Valor", +"valueTooltip": "El Porcentaje Completo como valor entre 0 y 100", +"showInfo": "Mostrar valor", +"valueDesc": "Valor de progreso actual, de 0 a 100", +"showInfoDesc": "Mostrar o no el valor de progreso actual", +}, +"fileViewer": { + ...en.fileViewer, + +"invalidURL": "Introduzca una URL válida o una cadena Base64", +"src": "Archivos URI", +"srcTooltip": "Vista previa del contenido del enlace proporcionado mediante la incrustación de HTML, también se pueden admitir datos codificados en Base64, por ejemplo: data:application/pdf; base64,AAA... CCC", +"srcDesc": "URI del archivo", +}, +"divider": { + ...en.divider, + +"title": "Título", +"align": "Alineación", +"dashed": "Dashed", +"type": "Tipo vertical", +"dashedDesc": "Utilizar o no línea discontinua", +"titleDesc": "Título del divisor", +"alignDesc": "Alineación del título del divisor", +}, +"QRCode": { + ...en.QRCode, + +"value": "Valor del contenido del código QR", +"valueTooltip": "El valor contiene un máximo de 2953 caracteres. El valor del código QR puede codificar varios tipos de datos, incluidos mensajes de texto, URL, detalles de contacto (VCard/meCard), credenciales de inicio de sesión Wi-Fi, direcciones de correo electrónico, números de teléfono, mensajes SMS, coordenadas de geolocalización, detalles de eventos de calendario, información de pago, direcciones de criptomonedas y enlaces de descarga de aplicaciones.", +"valueDesc": "El valor del contenido del código QR", +"level": "Nivel de tolerancia a fallos", +"levelTooltip": "Se refiere a la capacidad del código QR para ser escaneado incluso si una parte del mismo está bloqueada. Cuanto más alto es el nivel, más complejo es el código.", +"includeMargin": "Mostrar margen", +"image": "Mostrar imagen en el centro", +"L": "L (Bajo)", +"M": "M (Medio)", +"Q": "Q (Cuartil)", +"H": "H (Alto)", +"maxLength": "El contenido es demasiado largo. Ajuste la longitud a menos de 2953 caracteres", +}, +"jsonExplorer": { + ...en.jsonExplorer, + +"indent": "Sangría de cada nivel", +"expandToggle": "Expandir árbol JSON", +"theme": "Tema de color", +"valueDesc": "Datos JSON actuales", +"default": "Por defecto", +"defaultDark": "Por defecto Oscuro", +"neutralLight": "Luz neutra", +"neutralDark": "Neutro Oscuro", +"azure": "Azure", +"darkBlue": "Azul oscuro", +}, +"audio": { + ...en.audio, + +"src": "URI de la fuente de audio o cadena Base64", +"defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", +"autoPlay": "Reproducción automática", +"loop": "Bucle", +"srcDesc": "URI de audio actual o cadena Base64 como data:audio/mpeg;base64,AAA... CCC", +"play": "Jugar", +"playDesc": "Se activa cuando se reproduce audio", +"pause": "Pausa", +"pauseDesc": "Se activa cuando se pausa el audio", +"ended": "Finalizado", +"endedDesc": "Se activa cuando el audio termina de reproducirse", +}, +"video": { + ...en.video, + +"src": "URI de la fuente de vídeo o cadena Base64", +"defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", +"poster": "URL del póster", +"defaultPosterUrl": "", +"autoPlay": "Reproducción automática", +"loop": "Bucle", +"controls": "Ocultar controles", +"volume": "Volumen", +"playbackRate": "Velocidad de reproducción", +"posterTooltip": "El valor por defecto es el primer fotograma del vídeo", +"autoPlayTooltip": "Después de cargar el vídeo, se reproducirá automáticamente. Si cambia este valor de True a False, el vídeo se pausará. (Si se configura un póster, se reproducirá con el botón de póster).", +"controlsTooltip": "Ocultar controles de reproducción de vídeo. Puede no ser totalmente compatible con todas las fuentes de vídeo.", +"volumeTooltip": "Ajustar el volumen del reproductor, entre 0 y 1", +"playbackRateTooltip": "Ajustar la velocidad del reproductor, entre 1 y 2", +"srcDesc": "URI de audio actual o cadena Base64 como data:video/mp4;base64, AAA... CCC", +"play": "Jugar", +"playDesc": "Se activa cuando se reproduce el vídeo", +"pause": "Pausa", +"pauseDesc": "Se activa al pausar el vídeo", +"load": "Carga", +"loadDesc": "Se activa cuando el recurso de vídeo ha terminado de cargarse", +"ended": "Finalizado", +"endedDesc": "Se activa cuando el vídeo termina de reproducirse", +"currentTimeStamp": "Posición actual de reproducción del vídeo en segundos", +"duration": "La duración total del vídeo en segundos", +}, +"media": { + ...en.media, + +"playDesc": "Inicia la reproducción del medio.", +"pauseDesc": "Pone en pausa la reproducción multimedia.", +"loadDesc": "Restablece el medio al principio y reinicia Seleccionando el recurso multimedia.", +"seekTo": "Buscar hasta el número de segundos dado, o fracción si la cantidad está entre 0 y 1", +"seekToAmount": "Número de segundos, o fracción si está entre 0 y 1", +"showPreview": "Avance del espectáculo", +}, +"rangeSlider": { + ...en.rangeSlider, + +"start": "Valor inicial", +"end": "Valor final", +"step": "Tamaño del escalón", +"stepTooltip": "Granularidad del control deslizante, el valor debe ser mayor que 0 y divisible por (Max-Min)", +}, +"iconControl": { + ...en.iconControl, + +"selectIcon": "Seleccione un icono", +"searchIcon": "Buscar un icono", +"searchAnimation": "Buscar una animación", +"searchIllustration": "Buscar una ilustración", +"insertIcon": "Insertar un icono", +"insertImage": "Insertar una imagen o", +}, +"shapeControl": { + ...en.shapeControl, + +"selectShape": "Seleccione una forma", +"insertShape": "Insertar una forma", +"insertImage": "Insertar una imagen o", +}, +"millisecondsControl": { + ...en.millisecondsControl, + +"timeoutTypeError": "Por favor, introduzca el período de tiempo de espera correcto en ms, la entrada actual es: ___MARCADOR0___", +"timeoutLessThanMinError": "La entrada debe ser mayor que {left}, la entrada actual es: {value}", +}, +"selectionControl": { + ...en.selectionControl, + +"single": "Único", +"multiple": "Múltiples", +"close": "Cerrar", +"mode": "Modo de selección de filas", +}, +"container": { + ...en.container, + +"title": "Título del contenedor mostrado", +"titleTooltip": "Título del contenedor", +"flowWidth": "Anchura del contenido", +"floatType": "Texto Tipo flotante", +}, +"drawer": { + ...en.drawer, + +"closePosition": "Colocación del botón Cerrar", +"placement": "Colocación de cajones", +"size": "Talla", +"top": "Top", +"right": "Derecha", +"center": "Centro", +"bottom": "Fondo", +"left": "Izquierda", +"title": "Título del cajón", +"titleAlign": "Alineación de títulos", +"widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", +"heightTooltip": "Píxel, por ejemplo 378", +"openDrawerDesc": "Cajón abierto", +"closeDrawerDesc": "Cerrar cajón", +"width": "Ancho del cajón", +"height": "Altura del cajón", +}, +"meeting": { + ...en.meeting, + +"logLevel": "Nivel de registro de Agora SDK", +"placement": "Colocación de cajones para reuniones", +"meeting": "Configuración de la reunión", +"cameraView": "Ver habitación", +"cameraViewDesc": "Vista de cámara del usuario local (host)", +"screenShared": "Pantalla compartida", +"screenSharedDesc": "Pantalla compartida por el usuario local (host)", +"audioUnmuted": "Audio sin silenciar", +"audioMuted": "Audio silenciado", +"videoClicked": "Vídeo pulsado", +"videoOff": "Video Off", +"videoOn": "Vídeo", +"size": "Talla", +"top": "Top", +"host": "Anfitrión de la sala de reuniones. Deberá gestionar el anfitrión como una aplicación lógica propia.", +"participants": "Participantes en la sala de reuniones", +"shareScreen": "Pantalla compartida por el usuario local", +"appid": "ID de la aplicación Agora", +"meetingName": "Nombre de la reunión", +"localUserID": "ID de usuario de host", +"userName": "Nombre de usuario del host", +"rtmToken": "Ficha Agora RTM", +"rtcToken": "Ficha Agora RTC", +"noVideo": "Sin vídeo", +"profileImageUrl": "URL de la imagen del perfil", +"right": "Derecha", +"bottom": "Fondo", +"videoId": "ID de secuencia de vídeo", +"audioStatus": "Estado de audio", +"left": "Izquierda", +"widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", +"heightTooltip": "Píxel, por ejemplo 378", +"openDrawerDesc": "Cajón abierto", +"closeDrawerDesc": "Cerrar cajón", +"width": "Ancho del cajón", +"height": "Altura del cajón", +"actionBtnDesc": "Botón de acción", +"broadCast": "Difusión de mensajes", +"title": "Título de la reunión", +"meetingCompName": "Controlador de reuniones Agora", +"sharingCompName": "Compartir pantalla Stream", +"videoCompName": "Flujo de cámara", +"videoSharingCompName": "Compartir pantalla Stream", +"meetingControlCompName": "Botón Icono", +"meetingCompDesc": "Componente de reunión", +"meetingCompControls": "Control de reuniones", +"meetingCompKeywords": "Agora Meeting, Web Meeting, Colaboración", +"iconSize": "Tamaño del icono", +"userId": "ID de usuario de host", +"roomId": "ID de habitación", +"meetingActive": "Reunión en curso", +"messages": "Mensajes difundidos", +}, +"settings": { + ...en.settings, + +"title": "Ajustes", +"userGroups": "Grupos de usuarios", +"organization": "Espacios de trabajo", +"subscription": "Suscripciones", +"audit": "Registros de auditoría", +"theme": "Temas", +"plugin": "Plugins", +"advanced": "Avanzado", +"apiDocs": "Documentos API", +"lab": "Laboratorio", +"branding": "Marca", +"oauthProviders": "Autenticación de usuarios", +"appUsage": "Registros de uso de aplicaciones", +"environments": "Entornos", +"premium": "Premium", +}, +"enterprise": { + ...en.enterprise, + +"AuditLogTitle": "Registro de auditoría Dasboard", +"AuditLogOverview": "Filtro de registro", +"USER_LOGIN": "Inicio de sesión de usuario", +"USER_LOGOUT": "Cierre de sesión de usuario", +"APPLICATION_VIEW": "Ver solicitud", +"APPLICATION_CREATE": "Crear aplicación", +"APPLICATION_DELETE": "Eliminar aplicación", +"APPLICATION_UPDATE": "Actualizar solicitud", +"APPLICATION_MOVE": "Solicitud de traslado", +"APPLICATION_RECYCLED": "Aplicación de reciclaje", +"APPLICATION_RESTORE": "Restaurar aplicación", +"APPLICATION_PUBLISH": "Publicación de aplicaciones", +"APPLICATION_VERSION_CHANGE": "Actualización de la versión de la aplicación", +"APPLICATION_SHARING_CHANGE": "Cambio en el uso compartido de aplicaciones", +"APPLICATION_PERMISSION_CHANGE": "Solicitud Permiso Cambio", +"FOLDER_CREATE": "Crear carpeta", +"FOLDER_DELETE": "Eliminar carpeta", +"FOLDER_UPDATE": "Carpeta de actualización", +"QUERY_EXECUTION": "Ejecutar consulta", +"GROUP_CREATE": "Crear grupo", +"GROUP_UPDATE": "Grupo de actualización", +"GROUP_DELETE": "Borrar grupo", +"GROUP_MEMBER_ADD": "Añadir miembro del grupo", +"GROUP_MEMBER_ROLE_UPDATE": "Actualizar la función de los miembros del grupo", +"GROUP_MEMBER_LEAVE": "Dejar Grupo", +"GROUP_MEMBER_REMOVE": "Eliminar miembro del grupo", +"SERVER_START_UP": "Inicio del servidor", +"SERVER_INFO": "Ver información del servidor", +"DATA_SOURCE_CREATE": "Crear fuente de datos", +"DATA_SOURCE_UPDATE": "Actualizar fuente de datos", +"DATA_SOURCE_DELETE": "Borrar fuente de datos", +"DATA_SOURCE_PERMISSION_GRANT": "Conceder permiso de fuente de datos", +"DATA_SOURCE_PERMISSION_UPDATE": "Actualizar permiso de fuente de datos", +"DATA_SOURCE_PERMISSION_DELETE": "Borrar fuente de datos Permiso", +"LIBRARY_QUERY_CREATE": "Crear consulta de biblioteca", +"LIBRARY_QUERY_UPDATE": "Actualizar consulta de biblioteca", +"LIBRARY_QUERY_DELETE": "Borrar consulta de biblioteca", +"LIBRARY_QUERY_PUBLISH": "Publicar consulta de biblioteca", +"API_CALL_EVENT": "Evento de llamada a la API", +"logFilter": "Filtro de registro", +"noLogsFound": "No se han encontrado registros. Ajusta los filtros e inténtalo de nuevo.", +"usageLogUserEngagement": "Participación de los usuarios por región", +"usageLogAppViews": "Uso de la aplicación a lo largo del tiempo", +"usageLogTopTen": "Las 10 mejores aplicaciones", +"usageLogAnonymousKNown": "Usuarios anónimos/conocidos", +"usageLogDevices": "Desglose de dispositivos/OS", +"usageLogBrowsers": "Desglose del navegador/motor de diseño", +"premiumFeaturesNotice": "Todas las características Premium están disponibles en la Edición Enterprise de Lowcoder.", +"requestLicense": "Solicitar licencias de Enterprise Edition", +"requestLicensesBtton": "Solicitar acceso para empresas", +"AuditLogsTitle": "Registros de auditoría", +"AuditLogsIntroTitle": "Potente visibilidad de la actividad de su espacio de trabajo", +"AuditLogsIntro1": "Los registros de auditoría permiten a los administradores hacer un seguimiento exacto de lo que ocurre en toda la plataforma Lowcoder. Desde los inicios de sesión de los usuarios hasta las modificaciones de las aplicaciones, todas las acciones relevantes se capturan y almacenan.", +"AuditLogsIntro2": "Incluimos metadatos detallados como geolocalización, tipo de dispositivo, navegador y sistema operativo para cada evento.", +"AuditLogsIntro3": "Esta transparencia le permite supervisar la actividad en todos los entornos conectados, proporcionando una sólida pista de auditoría para apoyar el cumplimiento, la seguridad y la visión operativa.", +"AuditLogsEventsTitle": "¿Qué eventos se rastrean?", +"AuditLogsEventsIntro": "Las siguientes acciones del usuario se registran en tiempo real:", +"SignIn": "Iniciar sesión", +"Logout": "Cierre de sesión", +"ViewApp": "Ver aplicación", +"CreateApp": "Crear una nueva aplicación", +"DeleteApp": "Eliminar aplicación", +"UpdateApp": "Actualizar la aplicación", +"MoveToFolder": "Mover a carpeta", +"MoveToTrash": "Mover a la papelera", +"RestoreApp": "Restaurar aplicación", +"CreateFolder": "Crear nueva carpeta", +"DeleteFolder": "Eliminar carpeta", +"UpdateFolder": "Actualizar carpeta", +"ExecuteDataQuery": "Ejecutar la consulta de datos", +"CreateUserGroup": "Crear un nuevo grupo de usuarios", +"UpdateUserGroup": "Actualizar grupo de usuarios", +"DeleteUserGroup": "Eliminar grupo de usuarios", +"AddGroupMember": "Añadir un miembro al grupo de usuarios", +"UpdateGroupMemberRole": "Actualizar el rol de un miembro del grupo de usuarios", +"LeaveUserGroup": "Dejar grupo de usuarios", +"RemoveGroupMember": "Eliminar miembro del grupo de usuarios", +"ServerStartup": "Inicio del servidor", +"CreateDataSource": "Crear fuente de datos", +"UpdateDataSource": "Actualizar fuente de datos", +"DeleteDataSource": "Borrar fuente de datos", +"GrantUpdateDeletePermission": "Conceder o actualizar permisos", +"LibraryQueryActions": "Crear / Actualizar / Borrar consultas de biblioteca", +"PublishLibraryQuery": "Publicar consulta de biblioteca", +"AuditLogsPreviewTitle": "Vista previa del registro de auditoría en acción (haga clic para ampliar)", +"ScreenshotPlaceholder1": "[ Captura de pantalla 1 Marcador de posición ]", +"ScreenshotPlaceholder2": "[ Captura de pantalla 2 Marcador de posición ]", +"ScreenshotPlaceholder3": "[ Captura de pantalla 3 Marcador de posición ]", +"PricingTitle": "Precios de la edición Enterprise", +"PricingIntro": "Ofrecemos precios flexibles para organizaciones de cualquier tamaño, adaptados a su modelo de uso:", +"FlatRateTitle": "Opción 1: Tarifa plana por instancia - 169 $ / mes", +"FlatRateDesc": "Una instancia es un entorno Lowcoder completo (base de metadatos + tiempo de ejecución) que puede desplegarse de forma independiente. Esto incluye:", +"FlatRatePoint1": "Un almacén de metadatos MongoDB dedicado", +"FlatRatePoint2": "Uno o varios tiempos de ejecución de aplicaciones (contenedores \"Api-Service\" y/o \"Node-Service\")", +"UsagePricingTitle": "Opción 2: Precios basados en el uso - 0,001 $ por llamada API", +"UsagePricingDesc": "Alternativamente, cada instancia puede licenciarse en función del uso de la API. Ofrecemos paquetes de prepago:", +"API100k": "100.000 llamadas API - 100", +"API1M": "1.000.000 de llamadas API - 1.000 $.", +"API10M": "10.000.000 de llamadas API - 10.000 dólares", +"UsageOverrunDesc": "Cuando su paquete API se agote, le avisaremos. Una vez consumido el paquete, su instancia seguirá funcionando, pero lo hará a una velocidad reducida para evitar abusos y mantener la equidad.", +"UsageTopUpInfo": "Puede añadir paquetes adicionales en cualquier momento para garantizar un acceso rápido y continuo, sin interrupciones del servicio.", +"AppUsageTitle": "Registros de uso de aplicaciones", +"AppUsageIntroTitle": "Entender cómo se utilizan sus aplicaciones", +"AppUsageIntro1": "Los registros de uso de aplicaciones le ofrecen información detallada sobre cómo se consumen sus aplicaciones Lowcoder publicadas.", +"AppUsageIntro2": "Esta funcionalidad funciona como una versión integrada y simplificada de Google Analytics, pero totalmente privada y limitada a su instancia de Lowcoder.", +"AppUsageIntro3": "Los administradores pueden analizar cómo se accede a las aplicaciones a lo largo del tiempo, cuáles son las más utilizadas y desde dónde se conectan los usuarios.", +"AppUsageMetricsTitle": "Métricas de las que puede hacer un seguimiento...", +"AppUsageMetricsIntro": "Estos análisis le ayudan a tomar decisiones informadas sobre la participación y el uso de la plataforma:", +"MetricActiveUsers": "Vistas de la aplicación por día / semana / mes (según el filtro de tiempo)", +"MetricViewsPerApp": "Las 10 mejores aplicaciones", +"MetricDevices": "Acceso por dispositivo (ordenador, tableta, móvil)", +"MetricBrowsers": "Acceso por navegador y sistema operativo", +"MetricCountries": "Origen geográfico de los usuarios", +"AppUsageScreenshotsTitle": "App Usage Analytics en acción (haga clic para ampliar)", +"AppUsageScreenshot1": "[ Captura de pantalla del panel de control de uso de aplicaciones ]", +"AppUsageScreenshot2": "[Gráfico de visitas por aplicación]", +"AppUsageScreenshot3": "[Mapa de distribución geográfica]", +"BrandingIntroTitle": "Marca personalizada y marca blanca", +"BrandingIntro1": "Con la configuración de Lowcoders Branding, puede elevar la experiencia del producto para sus usuarios ofreciendo una marca totalmente personalizable.", +"BrandingIntro2": "Permita que sus clientes o equipos internos utilicen la plataforma como si fuera suya: logotipo, colores, fuentes y páginas personalizadas incluidos.", +"BrandingIntro3": "O necesita una solución totalmente de marca blanca y reforzar su identidad de marca en cada punto de contacto.", +"BrandingColorsIntro1": "Puede establecer su propio esquema de colores para que coincida con su identidad corporativa, incluidos los elementos primarios de la interfaz de usuario y las barras de navegación.", +"BrandingColorsIntro2": "Personalice los destacados de la barra lateral, las secciones de cabecera e incluso el contraste del texto para mejorar la experiencia del usuario y la accesibilidad.", +"BrandingFontsIntro": "Selecciona una de las fuentes de Google para que tu aplicación sea realmente tuya, tanto en estilo como en legibilidad.", +"BrandingLogosIntro": "Naturalmente, también puedes subir tus propios logotipos -rectangulares y cuadrados- para que aparezcan en cabeceras, cuadros de mando y pantallas de inicio de sesión. Mantén la coherencia de tu marca en todos los dispositivos y pantallas.", +"BrandingPagesIntro1": "Añada texto y elementos visuales personalizados a sus páginas de error, flujos de registro y mensajes de cierre de sesión.", +"BrandingPagesIntro2": "Estos puntos de contacto ayudan a ofrecer una experiencia de marca completa incluso en situaciones inesperadas o transiciones de cuentas.", +"BrandingMetaIntro": "Defina metadatos estándar como el título y la descripción de la página para mejorar su presencia SEO y el mensaje de la marca.", +"BrandingHelpLinksIntro": "Añada enlaces a documentación contextual directamente dentro de la aplicación, proporcionando ayuda en tiempo real a sus usuarios.", +"BrandingWhatsNewIntro": "Active la sección \"Novedades\" para destacar las actualizaciones y los anuncios de productos de forma visible y con su marca.", +"EnvironmentsIntroTitle": "Puesta en escena Lowcoder", +"EnvironmentsTitle": "Infraestructura multientorno", +"EnvironmentsIntro1": "Los entornos Lowcoder le permiten separar las fases de desarrollo, prueba y producción de forma limpia y segura.", +"EnvironmentsIntro2": "Los equipos empresariales se benefician de flujos de trabajo de publicación estructurados, procesos de aprobación y estabilidad de la versión en todas las fases.", +"EnvironmentsIntro3": "Con la función Entornos, los administradores pueden controlar qué se despliega, cuándo y dónde, todo desde una única interfaz.", +"EnvironmentsIntro4": "Lowcoder incluye múltiples tipos de objetos como espacios de trabajo, fuentes de datos, consultas de datos y aplicaciones. Dado que muchos de estos objetos están interconectados (por ejemplo, una fuente de datos puede compartirse a través de múltiples aplicaciones), una exportación basada puramente en Git no capturaría todas las dependencias de forma coherente. En su lugar, Lowcoder ofrece un mecanismo de despliegue selectivo e integrado directamente dentro de la interfaz de usuario. Las aplicaciones, las fuentes de datos y las consultas pueden gestionarse de forma selectiva y desplegarse en distintos entornos. Los objetos gestionados garantizan la seguridad y el control de las versiones de producción y puesta en escena.", +"yourDeploymentID": "Su ID de despliegue", +"EnvironmentsFeaturePreviewTitle": "Entornos y despliegue en acción (haga clic para ampliar)", +"EnvironmentsUseCasesTitle": "¿Por qué utilizar entornos? (Puesta en escena)", +"EnvironmentsUseCase1": "Evite cambios involuntarios en producción probando las aplicaciones en entornos dedicados de desarrollo o control de calidad.", +"EnvironmentsUseCase2": "Alinearse con la gobernanza corporativa de TI mediante la implementación de despliegues escalonados con seguimiento listo para auditoría.", +"EnvironmentsUseCase3": "Permita a los equipos construir con confianza con configuraciones, datos e integraciones específicas del entorno.", +"EnvironmentsFeaturesTitle": "Lo que obtiene", +"EnvironmentsFeature1": "Panel de control centralizado para ver y gestionar todos los entornos Lowcoder.", +"EnvironmentsFeature2": "Despliegue de aplicaciones, fuentes de datos y configuraciones entre entornos, directamente desde la interfaz de usuario sin necesidad de herramientas adicionales de CI/CD.", +"EnvironmentsFeature3": "Controles de acceso y reglas de visibilidad específicos del entorno.", +"EnvironmentsFeature5": "Separación clara de preocupaciones para las operaciones de puesta en escena, sandbox y producción.", +"apiUsage": "Llamadas a la API.", +"loadingApiUsage": "Cargando datos de uso de la API...", +}, +"environments": { + ...en.environments, + +"title": "Entornos", +"search": "Buscar en", +"refresh": "Actualizar", +"addEnvironment": "Añadir medio ambiente", +"errorLoadingEnvironments": "Error al cargar entornos", +"noEnvironmentsFoundMatching": "No se ha encontrado ningún entorno que coincida con \"{searchText}\"", +"noEnvironmentsFound": "No se ha encontrado ningún entorno. Crea tu primer entorno para empezar.", +"environmentsTypeLabel": "{type} Entornos", +"showingAllEnvironments": "Mostrando todos los entornos {count}.", +"unnamedEnvironment": "Entorno sin nombre", +"masterEnvironment": "Entorno maestro", +"viewAuditLogs": "Ver registros de auditoría", +"id": "ID", +"domain": "Dominio", +"master": "Maestro", +"license": "Licencia", +"apiCalls": "Llamadas a la API", +"yes": "Sí", +"no": "No", +"copyId": "Copiar ID", +"copied": "¡Copiado!", +"percentUsed": "{percent}% utilizado", +"licenseStatus_checking": "Comprobando...", +"licenseStatus_licensed": "Licencia", +"licenseStatus_unlicensed": "Licencia necesaria", +"licenseStatus_error": "Configuración necesaria", +"licenseStatus_unknown": "Desconocido", +"detail_environmentNotFound": "Entorno no encontrado", +"detail_returnToEnvironmentsList": "Volver a la lista de entornos", +"detail_environmentDetail": "Medio ambiente Detalle", +"detail_environmentOverview": "Medio ambiente", +"detail_noDomainSet": "Ningún dominio establecido", +"detail_environmentId": "Identificación del entorno", +"detail_licenseStatus": "Estado de la licencia", +"detail_licenseNeeded": "Licencia necesaria", +"detail_setupRequired": "Configuración necesaria", +"detail_created": "Creado", +"detail_unknown": "Desconocido", +"detail_licenseDetails": "Detalles de la licencia", +"detail_apiCallsRemaining": "Llamadas API restantes", +"detail_totalApiCallsLimit": "Límite total de llamadas API", +"detail_enterpriseEdition": "Edición para empresas", +"detail_active": "Activo", +"detail_inactive": "Inactivo", +"detail_licenseInformation": "Información sobre la licencia", +"detail_calls": "llama a", +"detail_licenses": "Licencias", +"detail_license": "Licencia", +"detail_workspaces": "Espacios de trabajo", +"detail_userGroups": "Grupos de usuarios", +"detail_type": "Tipo", +"detail_status": "Estado", +"detail_licensed": "Licencia", +"detail_unlicensed": "Sin licencia", +"detail_apiKey": "Clave API", +"detail_configured": "Configurado", +"detail_notSet": "No fijado", +"detail_masterEnv": "Master Env", +"unlicensed_unlicensedDescription": "Este entorno necesita una licencia válida para desbloquear todas sus capacidades y características. Asegúrese de que la URL del servicio API está correctamente configurada y de que el plugin está instalado.", +"unlicensed_errorDescription": "Hemos encontrado un problema al comprobar la licencia. Por favor, revise los ajustes de configuración.", +"unlicensed_defaultDescription": "Este entorno requiere la configuración de la licencia para proceder.", +"unlicensed_contactLowcoderTeam": "Contactar con el equipo de Lowcoder", +"unlicensed_editEnvironment": "Editar entorno", +"unlicensed_backToEnvironments": "Volver a Entornos", +"unlicensed_helpText": "¿Necesita ayuda? Póngase en contacto con nuestro equipo de asistencia sobre licencias o edite la configuración del entorno para resolver este problema.", +"unlicensed_type": "Tipo", +"unlicensed_status": "Estado", +"unlicensed_masterEnv": "Master Env", +"unlicensed_licenseIssue": "Problema de licencia", +"unlicensed_error": "Error", +"unlicensed_missing": "Falta", +"error_itemNotFound": "El artículo que buscas no existe o no tienes permiso para verlo.", +"modal_createNewEnvironment": "Crear nuevo entorno", +"modal_editEnvironment": "Editar entorno", +"modal_cancel": "Cancelar", +"modal_createEnvironment": "Crear un entorno", +"modal_saveChanges": "Guardar cambios", +"modal_environmentName": "Nombre del entorno", +"modal_pleaseEnterName": "Introduzca un nombre", +"modal_nameMinLength": "El nombre debe tener al menos 2 caracteres", +"modal_enterEnvironmentName": "Introduzca el nombre del entorno", +"modal_description": "Descripción", +"modal_enterDescription": "Introducir descripción", +"modal_stage": "Escenario", +"modal_pleaseSelectStage": "Seleccione una etapa", +"modal_selectStage": "Seleccionar etapa", +"modal_development": "Desarrollo (DEV)", +"modal_testing": "Pruebas (TEST)", +"modal_preProduction": "Preproducción (PREPROD)", +"modal_production": "Producción (PROD)", +"modal_frontendUrl": "URL del frontend", +"modal_pleaseEnterValidUrl": "Introduzca una URL válida", +"modal_apiServiceUrl": "URL del servicio API", +"modal_nodeServiceUrl": "Nodo URL de servicio", +"modal_apiKey": "Clave API", +"modal_enterApiKey": "Introduzca la clave API", +"modal_masterEnvironment": "Entorno maestro", +"modal_alreadyMasterEnvironment": "{name} ya es el entorno Maestro", +"modal_willBeMaster": "Será Maestro", +"modal_currentlyMaster": "Actualmente Maestro", +"modal_configurationRequirements": "Requisitos de configuración", +"modal_configurationRequirementsDesc": "Asegúrese de que la URL del servicio API está configurada y es correcta, la clave API es válida y, para la verificación de la licencia, asegúrese de que tanto la licencia como el plugin están correctamente instalados.", +"workspaces_title": "Espacios de trabajo", +"workspaces_subtitle": "Gestionar espacios de trabajo en este entorno", +"workspaces_refresh": "Actualizar", +"workspaces_errorLoadingWorkspaces": "Error al cargar los espacios de trabajo", +"workspaces_configurationIssue": "Problema de configuración", +"workspaces_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", +"workspaces_totalWorkspaces": "Total de espacios de trabajo", +"workspaces_managedWorkspaces": "Espacios de trabajo gestionados", +"workspaces_unmanagedWorkspaces": "Espacios de trabajo no gestionados", +"workspaces_workspace": "Espacio de trabajo", +"workspaces_role": "Papel", +"workspaces_status": "Estado", +"workspaces_managed": "Gestionado", +"workspaces_unmanaged": "Sin gestión", +"workspaces_actions": "Acciones", +"workspaces_viewAuditLogs": "Ver registros de auditoría", +"workspaces_audit": "Auditoría", +"workspaces_searchWorkspaces": "Buscar espacios de trabajo por nombre o ID", +"workspaces_showAll": "Mostrar todo", +"workspaces_managedOnly": "Sólo gestionado", +"workspaces_showingResults": "Mostrando {count} de {total} espacios de trabajo", +"workspaces_paginationTotal": "{start}-{end} de {total} espacios de trabajo", +"workspaces_noWorkspacesFound": "No se han encontrado espacios de trabajo en este entorno", +"userGroups_title": "Grupos de usuarios", +"userGroups_subtitle": "Gestionar grupos de usuarios en este entorno", +"userGroups_refresh": "Actualizar", +"userGroups_errorLoadingUserGroups": "Error al cargar grupos de usuarios", +"userGroups_configurationIssue": "Problema de configuración", +"userGroups_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", +"userGroups_totalGroups": "Total Grupos", +"userGroups_allUsersGroups": "Todos los grupos de usuarios", +"userGroups_developerGroups": "Grupos de desarrolladores", +"userGroups_customGroups": "Grupos personalizados", +"userGroups_userGroup": "Grupo de usuarios", +"userGroups_type": "Tipo", +"userGroups_allUsers": "Todos los usuarios", +"userGroups_developers": "Desarrolladores", +"userGroups_custom": "A medida", +"userGroups_members": "Miembros", +"userGroups_adminMembers": "Admin Miembros", +"userGroups_created": "Creado", +"userGroups_totalMembersTooltip": "Número total de miembros de este grupo", +"userGroups_adminMembersTooltip": "Número de usuarios administradores en este grupo", +"userGroups_searchUserGroups": "Buscar grupos de usuarios por nombre o ID", +"userGroups_showingResults": "Mostrando grupos de usuarios {count} de {total}.", +"userGroups_paginationTotal": "{start}-{end} de {total} grupos de usuarios", +"userGroups_noUserGroupsFound": "No se han encontrado grupos de usuarios en este entorno", +"apps_title": "Aplicaciones", +"apps_subtitle": "Gestionar las aplicaciones del espacio de trabajo", +"apps_refresh": "Actualizar", +"apps_errorLoadingApps": "Error al cargar aplicaciones", +"apps_configurationIssue": "Problema de configuración", +"apps_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", +"apps_totalApps": "Total de aplicaciones", +"apps_publishedApps": "Aplicaciones publicadas", +"apps_managedApps": "Aplicaciones gestionadas", +"apps_unmanagedApps": "Aplicaciones no gestionadas", +"apps_app": "Aplicación", +"apps_status": "Estado", +"apps_published": "Publicado en", +"apps_draft": "Borrador", +"apps_managed": "Gestionado", +"apps_unmanaged": "Sin gestión", +"apps_deploy": "Despliegue", +"apps_audit": "Auditoría", +"apps_appMustBeManagedToDeploy": "La aplicación debe gestionarse antes de implantarse", +"apps_deployThisApp": "Despliegue esta aplicación en otro entorno", +"apps_viewAuditLogs": "Ver registros de auditoría", +"apps_searchApps": "Buscar aplicaciones por nombre o ID", +"apps_showAll": "Mostrar todo", +"apps_managedOnly": "Sólo gestionado", +"apps_showingResults": "Mostrando aplicaciones {count} de {total}.", +"apps_paginationTotal": "{start}-{end} de {total} aplicaciones", +"apps_noAppsFound": "No se han encontrado aplicaciones en este espacio de trabajo", +"apps_appRecycled": "Esta aplicación se ha movido a la papelera de reciclaje", +"apps_managedSuccess": "{name} está ahora Gestionado", +"apps_unmanagedSuccess": "{name} ahora no está gestionado", +"apps_managedError": "Error al cambiar el estado de gestión de {name}.", +"dataSources_title": "Fuentes de datos", +"dataSources_subtitle": "Gestionar las conexiones de datos del espacio de trabajo", +"dataSources_refresh": "Actualizar", +"dataSources_errorLoadingDataSources": "Error al cargar fuentes de datos", +"dataSources_configurationIssue": "Problema de configuración", +"dataSources_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", +"dataSources_totalDataSources": "Total de fuentes de datos", +"dataSources_availableTypes": "Tipos disponibles", +"dataSources_managed": "Gestionado", +"dataSources_unmanaged": "Sin gestión", +"dataSources_dataSource": "Fuente de datos", +"dataSources_type": "Tipo", +"dataSources_status": "Estado", +"dataSources_deploy": "Despliegue", +"dataSources_audit": "Auditoría", +"dataSources_dataSourceMustBeManagedToDeploy": "La fuente de datos debe gestionarse antes de su despliegue", +"dataSources_deployThisDataSource": "Despliegue esta fuente de datos en otro entorno", +"dataSources_viewAuditLogs": "Ver registros de auditoría", +"dataSources_searchDataSources": "Buscar fuentes de datos por nombre o ID", +"dataSources_showAll": "Mostrar todo", +"dataSources_managedOnly": "Sólo gestionado", +"dataSources_showingResults": "Mostrando {count} de {total} fuentes de datos", +"dataSources_paginationTotal": "{start}-{end} de {total} fuentes de datos", +"dataSources_noDataSourcesFound": "No se han encontrado fuentes de datos en este espacio de trabajo", +"dataSources_managedSuccess": "{name} está ahora Gestionado", +"dataSources_unmanagedSuccess": "{name} ahora no está gestionado", +"dataSources_managedError": "Error al cambiar el estado de gestión de {name}.", +"queries_title": "Consultas", +"queries_subtitle": "Gestionar las consultas a la API del espacio de trabajo", +"queries_refresh": "Actualizar", +"queries_errorLoadingQueries": "Error al cargar consultas", +"queries_configurationIssue": "Problema de configuración", +"queries_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", +"queries_totalQueries": "Total Queries", +"queries_managed": "Gestionado", +"queries_unmanaged": "Sin gestión", +"queries_query": "Consulta", +"queries_creator": "Creador", +"queries_status": "Estado", +"queries_deploy": "Despliegue", +"queries_audit": "Auditoría", +"queries_queryMustBeManagedToDeploy": "La consulta debe gestionarse antes de poder desplegarse", +"queries_deployThisQuery": "Despliegue esta consulta en otro entorno", +"queries_viewAuditLogs": "Ver registros de auditoría", +"queries_searchQueries": "Consultas de búsqueda por nombre o ID", +"queries_showAll": "Mostrar todo", +"queries_managedOnly": "Sólo gestionado", +"queries_showingResults": "Mostrando consultas {count} de {total}.", +"queries_paginationTotal": "{start}-{end} de {total} consultas", +"queries_noQueriesFound": "No se han encontrado consultas en este espacio de trabajo", +"queries_managedSuccess": "{name} está ahora Gestionado", +"queries_unmanagedSuccess": "{name} ahora no está gestionado", +"queries_managedError": "Error al cambiar el estado de gestión de {name}.", +"deployModal_deployTitle": "Despliega {singularLabel}: {name}", +"deployModal_loadingEnvironments": "Cargando entornos...", +"deployModal_sourceEnvironment": "Fuente Medio ambiente", +"deployModal_targetEnvironment": "Entorno objetivo", +"deployModal_selectTargetEnvironment": "Seleccione el entorno de destino", +"deployModal_selectTargetEnvironmentValidation": "Seleccione un entorno de destino", +"deployModal_confirmed": "Confirmado", +"deployModal_cancel": "Cancelar", +"deployModal_deploy": "Despliegue", +"deployModal_targetEnvironmentNotFound": "Entorno de destino no encontrado", +"deployModal_confirmCredentialOverwrite": "Por favor, confirme la sobreescritura de credenciales antes de desplegar", +"deployModal_deploySuccess": "Desplegado con éxito {name} en el entorno de destino", +"deployModal_deployFailed": "Error al desplegar {singularLabel}.", +"deployModal_selectFieldValidation": "Por favor, seleccione {label}.", +"deployModal_selectFieldPlaceholder": "Seleccione {label}.", +"deployModal_inputFieldValidation": "Por favor, introduzca {label}.", +"deployModal_inputFieldPlaceholder": "Introduzca {label}.", +"contactLowcoder_title": "Contactar con el equipo de Lowcoder", +"contactLowcoder_environmentLabel": "Medio ambiente:", +"contactLowcoder_environmentIdLabel": "ID de entorno:", +"contactLowcoder_deploymentIdLabel": "ID de despliegue:", +"contactLowcoder_loading": "Cargando...", +"contactLowcoder_notAvailable": "No disponible", +"contactLowcoder_unnamedEnvironment": "Entorno sin nombre", +"contactLowcoder_fetchingDeploymentInfo": "Obtención de información de despliegue...", +"contactLowcoder_unableToLoadContactForm": "No se puede cargar el formulario de contacto", +"contactLowcoder_apiConfigurationError": "URL del servicio API de entorno o clave API no configurada", +"contactLowcoder_failedToFetchDeploymentId": "Error al recuperar el ID de despliegue", +"contactLowcoder_ensureProperConfiguration": "Asegúrese de que el entorno está correctamente configurado para ponerse en contacto con el servicio de asistencia.", +"credentialConfirmations_firstConfirmation_title": "Aviso de sobrescritura de credenciales", +"credentialConfirmations_firstConfirmation_message": "Esta acción sobrescribirá las credenciales existentes en el entorno de destino.", +"credentialConfirmations_firstConfirmation_description": "Se trata de una operación grave que puede afectar a otras aplicaciones y usuarios.", +"credentialConfirmations_firstConfirmation_question": "¿Estás seguro de que quieres continuar?", +"credentialConfirmations_firstConfirmation_continueButton": "Continúe en", +"credentialConfirmations_firstConfirmation_cancelButton": "Cancelar", +"credentialConfirmations_secondConfirmation_title": "Confirmación final requerida", +"credentialConfirmations_secondConfirmation_message": "Advertencia final: Sobrescritura de credenciales", +"credentialConfirmations_secondConfirmation_description": "Está a punto de sobrescribir credenciales en el entorno de destino. Esta acción no se puede deshacer y puede romper las integraciones existentes.", +"credentialConfirmations_secondConfirmation_confirmOnceMore": "Por favor, confirme una vez más.", +"credentialConfirmations_secondConfirmation_finalQuestion": "¿Estás completamente seguro de que quieres sobrescribir las credenciales?", +"credentialConfirmations_secondConfirmation_confirmButton": "Sí, sobrescribir credenciales", +"credentialConfirmations_secondConfirmation_cancelButton": "Cancelar", +"config_singularLabels_app": "Aplicación", +"config_singularLabels_dataSource": "Fuente de datos", +"config_singularLabels_query": "Consulta", +"config_singularLabels_workspace": "Espacio de trabajo", +"config_fields_updateDependenciesIfNeeded": "Actualice las dependencias si es necesario", +"config_fields_publishOnTarget": "Publicar en el blanco", +"config_fields_publicToAll": "Público A Todos", +"config_fields_publicToMarketplace": "Del público al mercado", +"config_fields_overwriteCredentials": "Sobrescribir credenciales", +"services_environments_missingEnvironmentId": "Falta el ID de entorno", +"services_environments_failedToUpdateEnvironment": "Error al actualizar el entorno", +"services_environments_environmentCreatedSuccessfully": "Entorno creado con éxito", +"services_environments_failedToCreateEnvironment": "Error al crear el entorno", +"services_environments_failedToFetchEnvironments": "Error en la búsqueda de entornos", +"services_environments_failedToFetchEnvironment": "Fallo al recuperar el entorno", +"services_environments_environmentIdRequired": "Se requiere ID de entorno", +"services_environments_apiKeyRequiredForWorkspaces": "La clave API es necesaria para recuperar los espacios de trabajo", +"services_environments_apiServiceUrlRequiredForWorkspaces": "La URL del servicio API es necesaria para recuperar los espacios de trabajo", +"services_environments_failedToFetchWorkspaces": "Error al recuperar espacios de trabajo", +"services_environments_apiKeyRequiredForUserGroups": "La clave API es necesaria para obtener los grupos de usuarios", +"services_environments_apiServiceUrlRequiredForUserGroups": "La URL del servicio API es necesaria para obtener los grupos de usuarios", +"services_environments_failedToFetchUserGroups": "Error al recuperar grupos de usuarios", +"services_environments_workspaceIdRequired": "Se requiere ID de espacio de trabajo", +"services_environments_apiKeyRequiredForApps": "La clave API es necesaria para obtener aplicaciones", +"services_environments_apiServiceUrlRequiredForApps": "La URL del servicio API es necesaria para obtener aplicaciones", +"services_environments_failedToFetchWorkspaceApps": "Fallo al recuperar aplicaciones del espacio de trabajo", +"services_environments_apiKeyRequiredForDataSources": "La clave API es necesaria para obtener fuentes de datos", +"services_environments_apiServiceUrlRequiredForDataSources": "La URL del servicio API es necesaria para obtener fuentes de datos", +"services_environments_failedToFetchWorkspaceDataSources": "Fallo al recuperar las fuentes de datos del área de trabajo", +"services_environments_apiKeyRequiredForQueries": "La clave API es necesaria para realizar consultas", +"services_environments_apiServiceUrlRequiredForQueries": "La URL del servicio API es necesaria para obtener consultas", +"services_environments_failedToFetchWorkspaceQueries": "Fallo al recuperar consultas del área de trabajo", +"services_environments_apiServiceUrlNotConfigured": "URL de servicio API no configurada", +"services_environments_licenseCheckFailed": "Comprobación de licencia fallida", +"services_environments_apiKeyRequiredForDeploymentId": "La clave API es necesaria para obtener el ID de despliegue", +"services_environments_failedToFetchDeploymentId": "Error al recuperar el ID de despliegue", +"services_enterprise_missingEnvironmentId": "Falta el ID de entorno", +"services_enterprise_failedToFetchManagedWorkspaces": "Error al recuperar espacios de trabajo gestionados", +"services_enterprise_missingRequiredParamsToConnectOrg": "Faltan parámetros necesarios para conectar el espacio de trabajo", +"services_enterprise_failedToConnectOrg": "Error al conectar el espacio de trabajo", +"services_enterprise_missingOrgGidToUnconnectWorkspace": "Falta el GID del espacio de trabajo para desconectar el espacio de trabajo", +"services_enterprise_failedToUnconnectOrg": "Error al desconectar el espacio de trabajo", +"services_enterprise_failedToConnectApp": "Error al conectar la aplicación", +"services_enterprise_failedToUnconnectApp": "Error al desconectar la aplicación", +"services_enterprise_failedToFetchDataSources": "Fallo al recuperar fuentes de datos", +"services_enterprise_failedToDeployDataSource": "Error al desplegar la fuente de datos", +"services_enterprise_failedToDisconnectManagedDataSource": "Error al desconectar la fuente de datos gestionada", +"services_enterprise_environmentIdRequired": "Se requiere ID de entorno", +"services_enterprise_failedToFetchQueries": "Fallo en la obtención de consultas", +"services_enterprise_environmentIdAndQueryGidRequired": "El ID de entorno y el GID de consulta son obligatorios", +"services_enterprise_failedToDeployQuery": "Error al desplegar la consulta", +"services_enterprise_queryGidRequired": "Se requiere GID de consulta", +"services_enterprise_failedToDisconnectQuery": "Error al desconectar la consulta", +"services_apps_failedToFetchApps": "Fallo al buscar aplicaciones", +"services_apps_failedToDeployApp": "Error al desplegar la aplicación", +"services_datasources_workspaceIdRequired": "Se requiere ID de espacio de trabajo", +"services_datasources_apiKeyRequiredToFetchDataSources": "La clave API es necesaria para obtener fuentes de datos", +"services_datasources_apiServiceUrlRequiredToFetchDataSources": "La URL del servicio API es necesaria para obtener fuentes de datos", +"services_datasources_failedToFetchDataSources": "Fallo al recuperar fuentes de datos", +"services_datasources_failedToDeployDataSource": "Error al desplegar la fuente de datos", +"services_workspace_failedToFetchWorkspaces": "Error al recuperar espacios de trabajo", +"services_workspace_failedToDeployWorkspace": "Error al desplegar el espacio de trabajo", +"services_managedObjects_missingRequiredParameters": "Faltan parámetros obligatorios", +"services_managedObjects_failedToCheckManagedStatus": "No se ha podido comprobar el estado de la gestión", +"services_managedObjects_failedToSetAsManaged": "Error al establecer {{objType}} como administrado", +"services_managedObjects_failedToRemoveFromManaged": "No se ha podido eliminar {{objType}} de la gestión", +"services_managedObjects_missingEnvironmentId": "Falta el ID de entorno", +"services_managedObjects_failedToFetchManagedObjects": "Error al recuperar objetos gestionados", +"services_managedObjects_failedToFetchManagedObject": "Error al recuperar el objeto gestionado", +"services_managedObjects_managedObjectNotFound": "Objeto gestionado no encontrado para objGid: {{objGid}}", +"services_license_apiServiceUrlRequired": "Se requiere la URL del servicio API", +"services_license_licenseInformationUnavailable": "Información de licencia no disponible", +"services_license_licenseCheckTookTooLong": "La comprobación de la licencia tardó demasiado", +"services_license_licenseServiceNotAvailable": "Servicio de licencias no disponible", +"services_license_authenticationRequired": "Autenticación necesaria - compruebe la clave API", +"services_license_licenseServiceTemporarilyUnavailable": "Servicio de licencias temporalmente no disponible", +"services_license_remainingAPICalls": "{{remaining}} restante ({{used}}/{{total}} utilizado, {{percentage}}%)", +}, +"subscription": { + ...en.subscription, + +"details": "Detalles de la suscripción", +"productDetails": "Detalles del producto", +"productName": "Nombre del producto", +"productDescription": "Descripción del producto", +"productPrice": "Precio del producto", +"subscriptionDetails": "Detalles de la suscripción", +"status": "Estado", +"startDate": "Fecha de inicio", +"currentPeriodEnd": "Fin del período actual", +"customerId": "Identificación del cliente", +"subscriptionItems": "Artículos de suscripción", +"itemId": "Número de artículo", +"plan": "Plan", +"quantity": "Cantidad", +"product": "Producto", +"invoices": "Facturas", +"invoiceNumber": "Número de factura", +"date": "Fecha", +"amount": "Importe", +"link": "Enlace", +"viewInvoice": "Ver factura", +"downloadPDF": "Descargar PDF", +"billingReason": "Motivo de facturación", +"subscriptionCycle": "Suscripción mensual", +"customer": "Cliente", +"links": "Enlaces", +"paid": "Pagado", +"unpaid": "Sin pagar", +"noInvoices": "No hay facturas disponibles", +"costVolumeDevelopment": "Evolución de costes y volúmenes", +"noUsageRecords": "No se dispone de registros de uso", +"itemDescription": "Descripción del artículo", +"periodStart": "Inicio del período", +"periodEnd": "Fin de periodo", +"billingReason.subscription_cycle": "Ciclo de suscripción", +"billingReason.subscription_create": "Creación de suscripciones", +"billingReason.manual": "Facturación manual", +"billingReason.upcoming": "Próxima facturación", +"billingReason.subscription_threshold": "Umbral de suscripción", +"billingReason.subscription_update": "Actualización de la suscripción", +"backToSubscriptions": "Volver a Suscripciones", +"manageSubscription": "Gestione sus suscripciones", +"subscriptionHelp": "Ayuda para la suscripción", +"subscriptionHelpDescription": "Si tiene alguna duda, póngase en contacto con nosotros. Estaremos encantados de ayudarle. service@lowcoder.cloud", +"success": "Éxito de pagos y suscripciones", +"successTitle": "¡Gracias por unirte a la familia Lowcoder!", +"successThankYou": "Estamos encantados de tenerte a bordo. Tu confianza en Lowcoder lo es todo para nosotros y nos comprometemos a ofrecerte una experiencia excepcional desde el primer día.\n\nEn Lowcoder, no eres sólo un cliente, sino que formas parte de una comunidad que impulsa la innovación y el crecimiento. Nuestra misión es ayudarte a alcanzar tus objetivos con facilidad, ya sea resolviendo retos rápidamente, creando soluciones innovadoras o estando ahí siempre que necesites ayuda.\n\nEsto es lo que le espera:\n\n- Asistencia de primera: Nuestro equipo está preparado para ayudarle en cada paso.\n- Innovación continua: Siempre estamos mejorando para ofrecerle las mejores herramientas y funciones.\n- Una asociación para el éxito: Su éxito es nuestra prioridad.\n\nGracias por inspirarnos para superar los límites y buscar la excelencia cada día. Estamos impacientes por ver lo que construiremos juntos.\n\nBienvenido a bordo. Hagamos que ocurran cosas extraordinarias.", +"successLowcoderTeam": "El equipo de Lowcoder", +}, +"subscriptionError": { + ...en.subscriptionError, + +"fetchProductDetails": "Error al obtener los detalles del producto.", +"fetchSubscriptionDetails": "Error al obtener los detalles de la suscripción.", +"fetchInvoices": "Error al recuperar facturas.", +}, +"auditLog": { + ...en.auditLog, + +"title": "Detalle del registro de auditoría", +"geoLocation": "Geolocalización", +"browserData": "Navegador / Metadatos del sistema", +"browser": "Navegador", +"OS": "OS", +"device": "Dispositivo", +"deviceType": "Tipo de dispositivo", +"engine": "Motor", +"webview": "Vista web", +"eventDetail": "Detalle del evento", +}, +"memberSettings": { + ...en.memberSettings, + +"admin": "Admin", +"superAdmin": "Súper administrador", +"adminGroupRoleInfo": "El administrador puede gestionar los miembros y recursos del grupo", +"adminOrgRoleInfo": "Los administradores son propietarios de todos los recursos y pueden gestionar grupos.", +"member": "Miembro", +"memberGroupRoleInfo": "Los miembros pueden ver a los miembros del grupo", +"memberOrgRoleInfo": "Los miembros sólo pueden utilizar o visitar los recursos a los que tienen acceso.", +"title": "Miembros", +"createGroup": "Crear grupo", +"newGroupPrefix": "Nuevo Grupo", +"allMembers": "Todos los diputados", +"deleteModalTitle": "Borrar este grupo", +"deleteModalContent": "No se puede restaurar el grupo eliminado. Está seguro de eliminar el grupo?", +"addMember": "Añadir miembros", +"nameColumn": "Nombre de usuario", +"joinTimeColumn": "Hora de incorporación", +"actionColumn": "Operación", +"roleColumn": "Papel", +"exitGroup": "Grupo de salida", +"moveOutGroup": "Eliminar del Grupo", +"inviteUser": "Invitar a miembros", +"exitOrg": "Deja", +"exitOrgDesc": "¿Estás seguro de que quieres dejar este espacio de trabajo.", +"moveOutOrg": "Eliminar", +"moveOutOrgDescSaasMode": "¿Está seguro de que desea eliminar al usuario {name} de este espacio de trabajo?", +"moveOutOrgDesc": "¿Está seguro de que desea eliminar al usuario {name}? Esta acción no se puede recuperar.", +"devGroupTip": "Los miembros del grupo de desarrolladores tienen privilegios para crear aplicaciones y fuentes de datos.", +"lastAdminQuit": "El último administrador no puede salir.", +"organizationNotExist": "El espacio de trabajo actual no existe", +"inviteUserHelp": "Puede copiar el enlace de invitación para enviarlo al usuario", +"inviteUserLabel": "Enlace de invitación:", +"inviteCopyLink": "Copiar enlace", +"inviteText": "{userName} le invita a unirse al espacio de trabajo \"{organization}\", haga clic en el enlace para unirse: {inviteLink}", +"inviteByEmailHelp": "Puede introducir una o varias direcciones de correo electrónico para enviar enlaces de invitación", +"inviteByEmailLabel": "Introduzca los correos electrónicos:", +"inviteByEmailButton": "Enviar invitaciones", +"inviteByEmailSuccess": "Invitaciones enviadas con éxito", +"inviteByEmailError": "Algo ha ido mal al enviar las invitaciones. Por favor, inténtelo de nuevo.", +"noValidEmails": "No se han encontrado correos electrónicos válidos", +"groupName": "Nombre del grupo", +"createTime": "Crear tiempo", +"manageBtn": "Gestione", +"userDetail": "Detalle", +"syncDeleteTip": "Este grupo ha sido eliminado de la libreta de direcciones Fuente", +"syncGroupTip": "Este grupo es un grupo de sincronización de la libreta de direcciones y no se puede editar", +}, +"orgSettings": { + ...en.orgSettings, + +"newOrg": "Nuevo espacio de trabajo (Organización)", +"title": "Espacio de trabajo", +"createOrg": "Crear espacio de trabajo (Organización)", +"deleteModalTitle": "¿Está seguro de eliminar este espacio de trabajo?", +"deleteModalContent": "Está a punto de eliminar este espacio de trabajo {permanentlyDelete}. Una vez eliminado, el espacio de trabajo {notRestored}.", +"permanentlyDelete": "Permanentemente", +"notRestored": "No se puede restaurar", +"deleteModalLabel": "Introduzca el nombre del espacio de trabajo {name} para confirmar la operación:", +"deleteModalTip": "Introduzca el nombre del espacio de trabajo", +"deleteModalErr": "El nombre del espacio de trabajo es incorrecto", +"deleteModalBtn": "Borrar", +"editOrgTitle": "Editar la información del espacio de trabajo", +"orgNameLabel": "Nombre del espacio de trabajo:", +"orgNameCheckMsg": "El nombre del espacio de trabajo no puede estar vacío", +"orgLogo": "Logotipo del espacio de trabajo:", +"logoModify": "Modificar imagen", +"inviteSuccessMessage": "Unirse con éxito al espacio de trabajo", +"inviteFailMessage": "Error al unirse al espacio de trabajo", +"uploadErrorMessage": "Error de carga", +"orgName": "Nombre del espacio de trabajo", +}, +"freeLimit": "Prueba gratuita", +"tabbedContainer": { + ...en.tabbedContainer, + +"switchTab": "Pestaña Switch", +"switchTabDesc": "Se activa al cambiar de pestaña", +"tab": "Fichas", +"atLeastOneTabError": "El contenedor de fichas guarda al menos una ficha", +"selectedTabKeyDesc": "Pestaña Actualmente Seleccionado", +"iconPosition": "Icono Posición", +"placement": "Colocación de pestañas", +"showTabs": "Mostrar pestañas", +"gutter": "Brecha", +"gutterTooltip": "La distancia entre pestañas en px", +"tabsCentered": "Pestañas centradas", +"destroyInactiveTab": "Destruir TabPane inactivo", +}, +"formComp": { + ...en.formComp, + +"containerPlaceholder": "Arrastrar componentes desde el panel derecho o", +"openDialogButton": "Generar un formulario a partir de una de sus fuentes de datos", +"resetAfterSubmit": "Restablecer tras envío correcto", +"initialData": "Datos iniciales", +"disableSubmit": "Desactivar Enviar", +"success": "Formulario generado correctamente", +"selectCompType": "Seleccione el tipo de componente", +"dataSource": "Fuente de datos:", +"invalidFormMessage": "Mensaje personalizado de formulario no válido", +"selectSource": "Seleccionar fuente", +"table": "Mesa:", +"selectTable": "Seleccionar tabla", +"columnName": "Nombre de la columna", +"dataType": "Tipo de datos", +"compType": "Tipo de componente", +"required": "Requerido", +"generateForm": "Generar formulario", +"compSelectionError": "Tipo de columna no configurada", +"compTypeNameError": "No se ha podido obtener el nombre del tipo de componente", +"noDataSourceSelected": "No se ha seleccionado ninguna fuente de datos", +"noTableSelected": "Ninguna mesa seleccionada", +"noColumn": "Sin columna", +"noColumnSelected": "Sin columna seleccionada", +"noDataSourceFound": "No se ha encontrado ninguna fuente de datos compatible. Crear una nueva fuente de datos", +"noTableFound": "No se encontraron tablas en esta fuente de datos, por favor seleccione otra fuente de datos", +"noColumnFound": "No se ha encontrado ninguna columna compatible en esta tabla. Seleccione otra tabla", +"formTitle": "Título del formulario", +"name": "Nombre", +"nameTooltip": "El nombre del atributo en los datos del formulario, cuando se deja en blanco, es por defecto el nombre del componente", +"notSupportMethod": "Métodos no admitidos:", +"notValidForm": "El formulario no es válido", +"resetDesc": "Restablecer el valor predeterminado de los datos del formulario", +"clearDesc": "Borrar datos del formulario", +"setDataDesc": "Establecer datos del formulario", +"valuesLengthError": "Número de parámetro Error", +"valueTypeError": "Parámetro Tipo Error", +"dataDesc": "Datos del formulario actual", +"loadingDesc": "¿Se está cargando el formulario?", +}, +"modalComp": { + ...en.modalComp, + +"open": "Abrir", +"openDesc": "Se activa al abrir el cuadro de diálogo modal", +"close": "Cerrar", +"closeDesc": "Se activa al cerrar el cuadro de diálogo modal", +"openModalDesc": "Abrir el cuadro de diálogo", +"closeModalDesc": "Cerrar el cuadro de diálogo", +"visibleDesc": "¿Es visible? Si es verdadero, aparecerá el cuadro de diálogo actual", +"title": "Título del cajón", +"titleAlign": "Alineación de títulos", +"modalHeight": "Altura modal", +"modalHeightTooltip": "Pixel, Ejemplo: 222", +"modalWidth": "Anchura modal", +"modalWidthTooltip": "Número o porcentaje, Ejemplo: 520, 60%", +}, +"listView": { + ...en.listView, + +"noOfRows": "Recuento de filas", +"noOfRowsTooltip": "Número de filas de la lista - Suele establecerse en una variable (por ejemplo, '{{query1.data.length}}') para presentar los resultados de la consulta", +"noOfColumns": "Recuento de columnas", +"itemIndexName": "Elemento de datos Índice Nombre", +"itemIndexNameDesc": "El nombre de la variable que hace referencia al índice del artículo, por defecto {default}.", +"itemDataName": "Elemento de datos Nombre del objeto", +"itemDataNameDesc": "El nombre de la variable que se refiere al objeto de datos del artículo, por defecto {default}.", +"itemsDesc": "Exposición de datos de componentes en lista", +"dataDesc": "Los datos JSON utilizados en la lista actual", +"dataTooltip": "Si sólo establece un número, este campo se considerará como recuento de filas y los datos se considerarán vacíos.", +"enableSorting": "Permitir la clasificación", +}, +"navigation": { + ...en.navigation, + +"addText": "Añadir elemento de submenú", +"logoURL": "Navegación Logo URL", +"horizontalAlignment": "Alineación horizontal", +"logoURLDesc": "Puede mostrar un logotipo en el lado izquierdo introduciendo un valor URI o una cadena Base64 como data:image/png;base64,AAA... CCC", +"itemsDesc": "Elementos del menú de navegación jerárquica", +}, +"droppadbleMenuItem": { + ...en.droppadbleMenuItem, + +"subMenu": "Submenú {number}", +}, +"navItemComp": { + ...en.navItemComp, + +"active": "Activo", +}, +"iframe": { + ...en.iframe, + +"URLDesc": "La URL de origen para el contenido IFrame. Asegúrese de que la URL es HTTPS o localhost. Asegúrese también de que la URL no esté bloqueada por la Política de seguridad de contenidos (CSP) del navegador. El encabezado \"X-Frame-Options\" no debe tener el valor \"DENY\" o \"SAMEORIGIN\".", +"allowDownload": "Permitir descargas", +"allowSubmitForm": "Permitir enviar formulario", +"allowMicrophone": "Permitir micrófono", +"allowCamera": "Permitir cámara", +"allowPopup": "Permitir ventanas emergentes", +}, +"switchComp": { + ...en.switchComp, + +"defaultValue": "Valor booleano por defecto", +"open": "En", +"close": "Fuera de", +"openDesc": "Se activa al encender el interruptor", +"closeDesc": "Se activa cuando el interruptor está apagado", +"valueDesc": "Estado actual del interruptor", +}, +"signature": { + ...en.signature, + +"tips": "Texto de sugerencia", +"signHere": "Firme aquí", +"showUndo": "Mostrar Deshacer", +"showClear": "Mostrar claro", +}, +"localStorageComp": { + ...en.localStorageComp, + +"valueDesc": "Todos los datos almacenados actualmente", +"setItemDesc": "Añadir un artículo", +"removeItemDesc": "Eliminar un artículo", +"clearItemDesc": "Borrar todos los artículos", +}, +"utilsComp": { + ...en.utilsComp, + +"openUrl": "Abrir URL", +"openApp": "Aplicación abierta", +"copyToClipboard": "Copiar al portapapeles", +"downloadFile": "Descargar archivo", +"logoutUser": "Cerrar sesión de usuario", +"resetPassword": "Restablecer contraseña", +}, +"messageComp": { + ...en.messageComp, + +"info": "Enviar una notificación", +"loading": "Enviar una notificación de carga", +"success": "Enviar una notificación de éxito", +"warn": "Enviar una notificación de advertencia", +"error": "Enviar una notificación de error", +}, +"toastComp": { + ...en.toastComp, + +"destroy": "cerrar una notificación", +"info": "Enviar una notificación", +"loading": "Enviar una notificación de carga", +"success": "Enviar una notificación de éxito", +"warn": "Enviar una notificación de advertencia", +"error": "Enviar una notificación de error", +}, +"themeComp": { + ...en.themeComp, + +"switchTo": "Cambiar tema", +}, +"transformer": { + ...en.transformer, + +"preview": "Vista previa", +"docLink": "Leer más sobre Transformers...", +"previewSuccess": "Vista previa Éxito", +"previewFail": "Vista previa Fracaso", +"deleteMessage": "Borrar Transformador con éxito. Puede utilizar {undoKey} para deshacer.", +"documentationText": "Los Transformadores están diseñados para la transformación de datos y la reutilización de su código JavaScript multilínea. Utilice los transformadores para adaptar los datos de consultas o componentes a las necesidades de su aplicación local. A diferencia de las consultas de JavaScript, los transformadores están diseñados para realizar operaciones de sólo lectura, lo que significa que no se puede activar una consulta o actualizar un estado temporal dentro de un transformador.", +}, +"temporaryState": { + ...en.temporaryState, + +"value": "Valor Init", +"valueTooltip": "El valor inicial almacenado en el estado temporal puede ser un booleano, una cadena, un número o cualquier valor JSON válido.", +"docLink": "Más información sobre los Estados temporales...", +"pathTypeError": "La ruta debe ser una cadena o una matriz de valores", +"unStructuredError": "Los datos no estructurados {prev} no pueden ser actualizados por {path}", +"valueDesc": "Valor temporal del Estado", +"deleteMessage": "El estado temporal se ha eliminado correctamente. Puede utilizar {undoKey} para deshacer.", +"documentationText": "Los estados temporales son una potente característica utilizada para gestionar variables complejas que actualizan dinámicamente el estado de los componentes de tu aplicación. Estos estados actúan como almacenamiento intermedio o transitorio de datos que pueden cambiar con el tiempo debido a interacciones del usuario u otros procesos.", +}, +"dataResponder": { + ...en.dataResponder, + +"data": "Datos", +"dataDesc": "Datos del respondedor de datos actual", +"dataTooltip": "Cuando se modifiquen estos datos, se desencadenarán acciones posteriores.", +"docLink": "Más información sobre los respondedores de datos...", +"deleteMessage": "El Data Responder se ha borrado correctamente. Puede utilizar {undoKey} para deshacer.", +"documentationText": "Al desarrollar una aplicación, puede asignar eventos a los componentes para controlar los cambios en datos específicos. Por ejemplo, un componente Tabla puede tener eventos como \"Cambio de selección de fila\", \"Cambio de filtro\", \"Cambio de ordenación\" y \"Cambio de página\" para controlar los cambios en la propiedad selectedRow. Sin embargo, para los cambios en estados temporales, transformadores o resultados de consultas, en los que no se dispone de eventos estándar, se utilizan los respondedores de datos. Permiten detectar y reaccionar ante cualquier modificación de los datos.", +}, +"theme": { + ...en.theme, + +"title": "Temas", +"createTheme": "Crear tema", +"themeName": "Nombre del tema:", +"themeNamePlaceholder": "Introduzca un nombre para el tema", +"defaultThemeTip": "Tema por defecto:", +"createdThemeTip": "El tema que ha creado:", +"option": "Option{index}", +"input": "Entrada", +"confirm": "Ok", +"emptyTheme": "No hay temas disponibles", +"click": "", +"toCreate": "", +"nameColumn": "Nombre", +"defaultTip": "Por defecto", +"updateTimeColumn": "Hora de actualización", +"edit": "Editar", +"cancelDefaultTheme": "Desactivar tema por defecto", +"setDefaultTheme": "Establecer como tema predeterminado", +"copyTheme": "Tema duplicado", +"setSuccessMsg": "Ajuste superado", +"cancelSuccessMsg": "Desestabilización lograda", +"deleteSuccessMsg": "Supresión Efectuada", +"checkDuplicateNames": "El nombre del tema ya existe, vuelva a introducirlo", +"copySuffix": " Copia", +"saveSuccessMsg": "Guardado correctamente", +"leaveTipTitle": "Consejos", +"leaveTipContent": "Aún no ha ahorrado, ¿confirma su marcha?", +"leaveTipOkText": "Deja", +"goList": "Volver a la lista", +"saveBtn": "Guardar", +"mainColor": "Colores principales", +"text": "Colores del texto", +"layout": "Configuración del diseño", +"fonts": "Configuración de fuentes", +"components": "Plantillas de componentes", +"charts": "Definición de eCharts", +"defaultTheme": "Por defecto", +"yellow": "Amarillo", +"green": "Verde", +"previewTitle": "Vista previa del tema\nComponentes de ejemplo que utilizan los colores de su tema", +"dateColumn": "Fecha", +"emailColumn": "Correo electrónico", +"phoneColumn": "Teléfono", +"subTitle": "Título", +"linkLabel": "Enlace", +"linkUrl": "app.lowcoder.cloud", +"progressLabel": "Progreso", +"sliderLabel": "Deslizador", +"radioLabel": "Radio", +"checkboxLabel": "Casilla de verificación", +"buttonLabel": "Botón de formulario", +"switch": "Interruptor", +"previewDate": "16/10/2022", +"previewEmail1": "ted.com", +"previewEmail2": "skype.com", +"previewEmail3": "imgur.com", +"previewEmail4": "globo.com", +"previewPhone1": "+63-317-333-0093", +"previewPhone2": "+30-668-580-6521", +"previewPhone3": "+86-369-925-2071", +"previewPhone4": "+7-883-227-8093", +"chartPreviewTitle": "Vista previa del estilo de gráfico", +"chartSpending": "Gasto", +"chartBudget": "Presupuesto", +"chartAdmin": "Administración", +"chartFinance": "Finanzas", +"chartSales": "Sales", +"chartFunnel": "Gráfico de embudo", +"chartShow": "Mostrar", +"chartClick": "Haga clic en", +"chartVisit": "Visite", +"chartQuery": "Consulta", +"chartBuy": "Comprar", +"canvas": "Configuración del lienzo", +}, +"themeDetail": { + ...en.themeDetail, + +"primary": "Color de la marca", +"primaryDesc": "Color primario por defecto utilizado por la mayoría de los componentes", +"textDark": "Color de texto oscuro", +"textDarkDesc": "Se utiliza cuando el color de fondo es claro", +"textLight": "Color de texto claro", +"textLightDesc": "Se utiliza cuando el color de fondo es oscuro", +"canvas": "Canvas Color", +"canvasDesc": "Color de fondo por defecto de la aplicación", +"primarySurface": "Color del contenedor", +"primarySurfaceDesc": "Color de fondo por defecto para componentes como tablas", +"borders": "Estilos de bordes", +"spacing": "Estilos de espaciado", +"font": "Estilos de fuente", +"fonts": "Fuentes", +"borderRadius": "Radio del borde", +"borderRadiusDesc": "Radio del borde por defecto utilizado por la mayoría de los componentes", +"borderColor": "Color del borde", +"borderColorDesc": "Color de borde por defecto utilizado por la mayoría de los componentes", +"borderWidth": "Anchura del borde", +"borderWidthDesc": "Ancho de borde por defecto utilizado por la mayoría de los componentes", +"borderStyle": "Estilo de borde", +"borderStyleDesc": "Estilo de borde por defecto utilizado por la mayoría de los componentes", +"fontFamily": "Familia de fuentes", +"fontFamilyDesc": "Familia de fuentes por defecto utilizada por la mayoría de los componentes", +"chart": "Estilo de gráfico", +"chartDesc": "Aquí puede colocar eCharts Theme JSON para definir el estilo de sus gráficos en todos los Detalles.", +"echartsJson": "Puede utilizar aquí el Generador de JSON del Tema. Copie el JSON del Generador y péguelo aquí.", +"margin": "Margen", +"marginDesc": "Margen por defecto utilizado normalmente para la mayoría de los componentes", +"padding": "Acolchado", +"paddingDesc": "Relleno por defecto utilizado normalmente para la mayoría de los componentes", +"containerHeaderPadding": "Relleno de cabecera", +"containerheaderpaddingDesc": "Relleno de cabecera por defecto utilizado normalmente para la mayoría de los componentes.", +"gridColumns": "Columnas de cuadrícula de lienzo", +"gridColumnsDesc": "Número predeterminado de columnas utilizado normalmente para la mayoría de los contenedores", +"loadingIndicators": "Indicadores de carga", +"showComponentLoadingIndicators": "Mostrar indicadores de carga cuando se carga el componente", +"showDataLoadingIndicators": "Mostrar indicadores de carga al cargar los datos", +"dataLoadingIndicator": "Indicador de carga de datos", +"background": "Estilos de fondo", +"gridSettings": "Ajustes de cuadrícula", +"gridRowHeight": "Altura de la fila de la cuadrícula", +"gridRowHeightDesc": "Altura de cada fila de la cuadrícula", +"gridRowCount": "Recuento de filas de la cuadrícula", +"gridRowCountDesc": "Número máximo de filas en la cuadrícula", +"gridPaddingX": "Acolchado horizontal", +"gridPaddingXDesc": "Relleno horizontal del lienzo", +"gridPaddingY": "Acolchado vertical", +"gridPaddingYDesc": "Relleno vertical del lienzo", +"gridBgImage": "Imagen de fondo", +"gridBgImageDesc": "Imagen de fondo del lienzo", +"gridBgImageRepeat": "Repetición de la imagen de fondo", +"gridBgImageRepeatDesc": "Repetición de la imagen de fondo del lienzo", +"gridBgImageSize": "Tamaño de la imagen de fondo", +"gridBgImageSizeDesc": "Tamaño de la imagen de fondo del lienzo", +"gridBgImagePosition": "Posición de la imagen de fondo", +"gridBgImagePositionDesc": "Posición de la imagen de fondo del lienzo", +"gridBgImageOrigin": "Origen de la imagen de fondo", +"gridBgImageOriginDesc": "Origen de la imagen de fondo del lienzo", +}, +"pluginSetting": { + ...en.pluginSetting, + +"title": "Plugins", +"npmPluginTitle": "plugins npm", +"npmPluginDesc": "Configurar plugins npm para todas las aplicaciones en el espacio de trabajo actual.", +"npmPluginEmpty": "No se han añadido plugins npm.", +"npmPluginAddButton": "Añadir un plugin npm", +"saveSuccess": "Guardado correctamente", +}, +"advanced": { + ...en.advanced, + +"title": "Avanzado", +"defaultHomeTitle": "Página de inicio por defecto", +"defaultHomeHelp": "La página de inicio es la aplicación que todos los no desarrolladores verán por defecto cuando inicien sesión. Nota: Asegúrese de que la aplicación seleccionada es accesible para los no desarrolladores.", +"defaultHomePlaceholder": "Seleccione la página de inicio por defecto", +"saveBtn": "Guardar", +"preloadJSTitle": "Precargar JavaScript", +"preloadJSHelp": "Configurar código JavaScript precargado para todas las aplicaciones del área de trabajo actual.", +"preloadCSSTitle": "Precargar CSS", +"preloadCSSHelp": "Configurar código CSS precargado para todas las aplicaciones del área de trabajo actual.", +"preloadCSSApply": "Aplicar a la página de inicio del espacio de trabajo", +"preloadLibsTitle": "Biblioteca JavaScript", +"preloadLibsHelp": "Configure bibliotecas JavaScript precargadas para todas las aplicaciones en el espacio de trabajo actual, y el sistema tiene lodash, day.js, uuid, numbro incorporados para uso directo. Las bibliotecas JavaScript se cargan antes de que se inicialice la aplicación, por lo que se produce un cierto impacto en el rendimiento de la aplicación.", +"preloadLibsEmpty": "No se han añadido bibliotecas JavaScript", +"preloadLibsAddBtn": "Añadir una biblioteca", +"saveSuccess": "Guardado correctamente", +"AuthOrgTitle": "Pantalla de bienvenida al espacio de trabajo", +"AuthOrgDescrition": "La URL para que sus usuarios inicien sesión en el espacio de trabajo actual.", +"APIConsumption": "Consumo de API", +"APIConsumptionDescription": "Aquí puede ver el consumo de API para todas las aplicaciones en el área de trabajo actual.", +"overallAPIConsumption": "Consumo global de API en este espacio de trabajo hasta ahora", +"lastMonthAPIConsumption": "Consumo de API del último mes, en este espacio de trabajo", +"npmRegistryTitle": "Registro NPM personalizado", +"npmRegistryHelp": "Configurar un Registro NPM personalizado para permitir la obtención de plugins de un registro NPM privado.", +"showHeaderInPublicApps": "Mostrar cabecera en vista pública", +"showHeaderInPublicAppsHelp": "Fijar la visibilidad de la cabecera en la vista pública para todas las aplicaciones", +}, +"branding": { + ...en.branding, + +"title": "Configuraciones de Marca", +"general": "Ajustes generales", +"selectWorkspace": "Seleccionar espacio de trabajo", +"brandingName": "Nombre de la marca", +"brandingNamePlaceholder": "Introduzca el nombre de la marca", +"brandingDescription": "Descripción de la marca", +"brandingDescriptionPlaceholder": "Introduzca la descripción de la marca", +"logoSection": "Logotipos", +"logo": "Logotipo", +"logoHelp": "Sube el logotipo de tu empresa en formato SVG o PNG.", +"logoUrlHelp": "Proporcione una url de imagen válida para el logotipo.", +"logoUrlPlaceholder": "URL de la imagen del proveedor para el logotipo", +"squareLogo": "Logotipo Cuadrado", +"squareLogoHelp": "Sube una versión cuadrada de tu logotipo en formato SVG o PNG.", +"squareLogoUrlHelp": "Proporcione una url de imagen válida para el logotipo cuadrado.", +"squareLogoUrlPlaceholder": "Proporcionar url para el logotipo cuadrado.", +"colorFontSection": "Colores y Fuentes", +"mainBrandingColor": "Color Principal de la Marca", +"mainBrandingColorHelp": "Selecciona el color principal para tu marca.", +"editorHeaderColor": "Color del Encabezado del Editor", +"editorHeaderColorHelp": "Selecciona el color del encabezado del editor.", +"adminSidebarColor": "Color de la Barra Lateral del Administrador", +"adminSidebarColorHelp": "Selecciona el color de la barra lateral del administrador.", +"adminSidebarFontColor": "Admin Sidebar Font Color", +"adminSidebarFontColorHelp": "Elija el color de la fuente para la barra lateral del administrador.", +"adminSidebarActiveBgColor": "Color de fondo del elemento seleccionado en Admin Sidebar", +"adminSidebarActiveBgColorHelp": "Elija el color de fondo del elemento seleccionado para la barra lateral del administrador.", +"adminSidebarActiveFontColor": "Color de fuente del elemento seleccionado en Admin Sidebar", +"adminSidebarActiveFontColorHelp": "Elija el color de fuente del elemento seleccionado para la barra lateral del administrador.", +"editorSidebarColor": "Color de la Barra Lateral del Editor", +"editorSidebarColorHelp": "Selecciona el color de la barra lateral del editor.", +"editorSidebarFontColor": "Color de la fuente de la barra lateral del editor", +"editorSidebarFontColorHelp": "Elija el color de la fuente para la barra lateral del editor.", +"editorSidebarActiveBgColor": "Color de fondo del elemento seleccionado de la barra lateral del editor", +"editorSidebarActiveBgColorHelp": "Elija el color de fondo del elemento seleccionado para la barra lateral del editor.", +"editorSidebarActiveFontColor": "Color de fuente del elemento seleccionado de la barra lateral del editor", +"editorSidebarActiveFontColorHelp": "Elija el color de fuente del elemento seleccionado para la barra lateral del editor.", +"font": "Fuente", +"fontHelp": "Selecciona una fuente de Google Fonts para tu aplicación.", +"textSection": "Textos y Páginas", +"errorPage": "Texto de la Página de Error", +"errorPageHelp": "Introduce el texto que se mostrará en la página de error.", +"signUpPage": "Texto de la Página de Registro", +"signUpPageHelp": "Introduce el texto que se mostrará en la página de registro.", +"loggedOutPage": "Texto de la Página de Cierre de Sesión", +"loggedOutPageHelp": "Introduce el texto que se mostrará en la página de cierre de sesión.", +"standardDescription": "Descripción Estándar", +"standardDescriptionHelp": "Introduce la descripción estándar para la información meta de SEO.", +"standardTitle": "Título Estándar", +"standardTitleHelp": "Introduce el título estándar para la información meta de SEO.", +"showDocumentation": "Mostrar Documentación", +"submitIssue": "Permitir Enviar Problema", +"whatsNew": "Habilitar \"Novedades\"", +"saveButton": "Guardar Configuraciones", +"errorPageImage": "Sube una imagen para la página de error en formato SVG o PNG.", +"errorPageImageUrl": "URL de la imagen de la página de error", +"errorPageImageUrlPlaceholder": "URL de la imagen del proveedor para la página de error", +"errorPageImageUrlHelp": "Proveedor de una imagen válida url para mostrar en la página de error.", +"signUpPageImage": "Sube una imagen para la página de registro en formato SVG o PNG.", +"signUpPageImageUrl": "URL de la imagen para la página de inscripción", +"signUpPageImageUrlPlaceholder": "URL de la imagen del proveedor para la página de registro", +"signUpPageImageUrlHelp": "Proveedor de una imagen válida url para mostrar en la página de registro.", +"loggedOutPageImage": "Sube una imagen para la página de cierre de sesión en formato SVG o PNG.", +"showDocumentationSection": "Configuración del enlace a la documentación", +"showWhatsNewSection": "Novedades Configuración de enlaces", +"documentationLink": "Enlace a la documentación", +"documentationLinkPlaceholder": "Introduce la URL de tu documentación...", +"documentationLinkHelp": "Proporciona una URL válida que los usuarios puedan visitar para la documentación.", +"whatsNewSection": "Configuraciones de documentación", +"whatsNewLink": "Enlace a la documentación", +"whatsNewLinkPlaceholder": "Introduce la URL de tu documentación...", +"whatsNewLinkHelp": "Proporciona una URL válida que los usuarios puedan visitar para conocer las novedades.", +"deleteBranding": "Eliminar marca", +"deleteBrandingContent": "¿Está seguro de que desea eliminar la marca \"{orgName}\"?", +"fetchBrandingError": "Se ha producido un error al obtener los datos de la marca. Por favor, inténtelo de nuevo.", +"upload": "Cargar", +}, +"networkMessage": { + ...en.networkMessage, + +"0": "No se ha podido conectar con el servidor, compruebe la red.", +"200": "Éxito", +"201": "Creado", +"204": "Sin contenido", +"400": "Mala petición", +"401": "Autenticación fallida, por favor conéctese de nuevo", +"403": "Sin permiso, póngase en contacto con el administrador para obtener autorización", +"404": "No se ha encontrado", +"500": "Servicio ocupado, inténtelo más tarde", +"timeout": "Tiempo de espera de la solicitud", +}, +"share": { + ...en.share, + +"title": "Compartir", +"viewer": "Visor", +"editor": "Editor", +"owner": "Propietario", +"datasourceViewer": "Puede utilizar", +"datasourceOwner": "Puede gestionar", +}, +"debug": { + ...en.debug, + +"title": "Título", +"switch": "Componente del interruptor:", +}, +"module": { + ...en.module, + +"folderNotEmpty": "La carpeta no está vacía", +"emptyText": "Sin datos", +"docLink": "Más información sobre los módulos...", +"documentationText": "Los módulos son aplicaciones completas que pueden incluirse y repetirse en otras aplicaciones y que funcionan como un único componente. Como los módulos pueden ser incrustados, necesitan ser capaces de interactuar con sus aplicaciones externas o sitios web. Estas cuatro opciones ayudan a mantener la comunicación con un módulo.", +"circularReference": "Referencia circular, ¡no se puede utilizar el módulo/aplicación actual!", +"emptyTestInput": "El módulo actual no tiene ninguna entrada que comprobar", +"emptyTestMethod": "El módulo actual no tiene método de prueba", +"name": "Nombre", +"input": "Entrada", +"params": "Parámetros", +"emptyParams": "No se ha añadido ningún parámetro", +"emptyInput": "No se ha añadido ninguna entrada", +"emptyMethod": "No se ha añadido ningún método", +"emptyOutput": "No se ha añadido ninguna salida", +"data": "Datos", +"string": "Cadena", +"number": "Número", +"array": "Matriz", +"boolean": "Booleano", +"query": "Consulta", +"autoScaleCompHeight": "Balanzas de altura de componentes con contenedor", +"excuteMethod": "Ejecutar método {name}", +"method": "Método", +"action": "Acción", +"output": "Salida", +"nameExists": "Nombre {name} Ya existe", +"eventTriggered": "Se activa el evento {name}.", +"globalPromptWhenEventTriggered": "Muestra un aviso global cuando se activa un evento", +"emptyEventTest": "El módulo actual no tiene eventos que probar", +"emptyEvent": "No se ha añadido ningún evento", +"event": "Evento", +}, +"resultPanel": { + ...en.resultPanel, + +"returnFunction": "El valor de retorno es una función.", +"consume": "___TITULAR0___", +"JSON": "Mostrar JSON", +}, +"createAppButton": { + ...en.createAppButton, + +"creating": "Crear...", +"created": "Crear {name}", +}, +"apiMessage": { + ...en.apiMessage, + +"authenticationFail": "La autenticación de usuario ha fallado, por favor inicie sesión de nuevo", +"verifyAccount": "Necesidad de verificar la cuenta", +"functionNotSupported": "La versión actual no soporta esta función. Póngase en contacto con el equipo de Lowcoder Business para actualizar su cuenta.", +}, +"globalErrorMessage": { + ...en.globalErrorMessage, + +"createCompFail": "Crear componente {comp} Fallido", +"notHandledError": "{method} Método no ejecutado", +}, +"aggregation": { + ...en.aggregation, + +"navLayout": "Barra de navegación", +"chooseApp": "Elegir aplicación", +"iconTooltip": "Soporta Image src Link o Base64 String como data:image/png;base64,AAA... CCC", +"hideWhenNoPermission": "Oculto para usuarios no autorizados", +"queryParam": "Parámetros de consulta de URL", +"hashParam": "Parámetros hash de URL", +"tabBar": "Barra de pestañas", +"emptyTabTooltip": "Configurar esta página en el panel derecho", +}, +"appSetting": { + ...en.appSetting, + +"450": "450px (Teléfono)", +"800": "800px (Tableta)", +"1440": "1440px (portátil)", +"1920": "1920px (pantalla ancha)", +"3200": "3200px (pantalla supergrande)", +"title": "Configuración general de la aplicación", +"autofill": "Autorrelleno", +"userDefined": "A medida", +"default": "Por defecto", +"tooltip": "Cerrar la ventana emergente después de la configuración", +"canvasMaxWidth": "Ancho máximo del lienzo para esta aplicación", +"userDefinedMaxWidth": "Anchura máxima personalizada", +"inputUserDefinedPxValue": "Introduzca un valor de píxel personalizado", +"maxWidthTip": "La anchura máxima debe ser mayor o igual a 350", +"themeSetting": "Tema de estilo aplicado", +"themeSettingDefault": "Por defecto", +"themeCreate": "Crear tema", +"appTitle": "Título", +"appDescription": "Descripción", +"appCategory": "Categoría", +"showPublicHeader": "Mostrar cabecera en vista pública", +"canvas": "Configuración del lienzo", +"gridColumns": "Columnas de cuadrícula", +"gridRowHeight": "Altura de la fila de la cuadrícula", +"gridRowCount": "Recuento de filas de la cuadrícula", +"gridPaddingX": "Acolchado horizontal del lienzo", +"gridPaddingY": "Acolchado vertical del lienzo", +"gridBgImage": "Imagen de fondo", +"gridBgImageRepeat": "Repetición de la imagen de fondo", +"gridBgImageSize": "Tamaño de la imagen de fondo", +"gridBgImagePosition": "Posición de la imagen de fondo", +"gridBgImageOrigin": "Origen de la imagen de fondo", +}, +"customShortcut": { + ...en.customShortcut, + +"title": "Atajos personalizados", +"shortcut": "Atajo", +"action": "Acción", +"empty": "Sin atajos", +"placeholder": "Pulsar acceso directo", +"otherPlatform": "Otros", +"space": "Espacio", +}, +"profile": { + ...en.profile, + +"orgSettings": "Configuración del espacio de trabajo", +"switchOrg": "Cambiar de espacio de trabajo", +"joinedOrg": "Mis espacios de trabajo", +"createOrg": "Crear espacio de trabajo", +"logout": "Cerrar sesión", +"personalInfo": "Mi perfil", +"bindingSuccess": "Vinculación {sourceName} Éxito", +"uploadError": "Error de carga", +"editProfilePicture": "Modifique", +"saveUserNameTooltip": "Pulsa Enter para guardar tu nuevo NicName. Si ves tu Email, significa que acabamos de secuestrarlo como Nombre de Usuario y puedes cambiarlo por uno mejor. Tu Email como nombre de usuario técnico permanece intacto.", +"changeAvatarTooltip": "Puede cargar archivos PNG o JPG", +"nameCheck": "El nombre no puede estar vacío", +"name": "Nombre:", +"namePlaceholder": "Introduzca su nombre", +"toBind": "Encuadernar", +"binding": "Es vinculante", +"bindError": "Parameter Error, Currently Not Supported Binding.", +"bindName": "Enlazar {name}", +"loginAfterBind": "Tras la vinculación, puede utilizar {name} para iniciar sesión", +"bindEmail": "Vincular correo electrónico:", +"email": "Correo electrónico", +"emailCheck": "Introduzca una dirección de correo electrónico válida", +"emailPlaceholder": "Introduzca su dirección de correo electrónico", +"submit": "Enviar", +"bindEmailSuccess": "Éxito de la encuadernación por correo electrónico", +"passwordModifiedSuccess": "Contraseña cambiada con éxito", +"passwordSetSuccess": "Contraseña establecida correctamente", +"oldPassword": "Contraseña antigua:", +"inputCurrentPassword": "Introduzca su contraseña actual", +"newPassword": "Nueva contraseña:", +"inputNewPassword": "Introduzca su nueva contraseña", +"confirmNewPassword": "Confirme la nueva contraseña:", +"inputNewPasswordAgain": "Vuelva a introducir su nueva contraseña", +"password": "Contraseña:", +"modifyPassword": "Modificar contraseña", +"setPassword": "Establecer contraseña", +"alreadySetPassword": "Conjunto de contraseñas", +"setPassPlaceholder": "Puede iniciar sesión con contraseña", +"setPassAfterBind": "Puede establecer la contraseña después de vincular la cuenta", +"socialConnections": "Conexiones sociales", +"changeAvatar": "Cambiar avatar", +"about": "Acerca de", +"userId": "ID de usuario", +"createdAt": "Creado en", +"currentOrg": "Organización actual", +"settings": "Ajustes", +"uiLanguage": "Lenguaje de interfaz de usuario", +"info": "Información", +"createdApps": "Sus aplicaciones creadas", +"createdModules": "Sus módulos creados", +"sharedApps": "Aplicaciones compartidas con usted", +"sharedModules": "Módulos compartidos con usted", +"onMarketplace": "En el mercado", +"howToPublish": "Cómo publicar en Marketplace", +"memberOfOrgs": "Espacios de trabajo Afiliación", +"apiKeys": "Claves API", +"createApiKey": "Crear clave API", +"apiKeyInfo": "Asegúrate de copiar tu nueva clave API ahora. No podrás volver a verla.", +"apiKeyName": "Nombre", +"apiKeyDescription": "Descripción", +"apiKeyCopy": "Haga clic en la clave Api para obtener el valor en su portapapeles", +"apiKey": "Clave API", +"deleteApiKey": "Borrar clave API", +"deleteApiKeyContent": "¿Está seguro de que desea eliminar esta clave API?", +"deleteApiKeyError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", +}, +"shortcut": { + ...en.shortcut, + +"shortcutList": "Atajos de teclado", +"click": "Haga clic en", +"global": "Global", +"toggleShortcutList": "Alternar atajos de teclado", +"editor": "Editor", +"toggleLeftPanel": "Alternar panel izquierdo", +"toggleBottomPanel": "Alternar panel inferior", +"toggleRightPanel": "Alternar panel derecho", +"toggleAllPanels": "Conmutar todos los paneles", +"preview": "Vista previa", +"undo": "Deshacer", +"redo": "Rehacer", +"showGrid": "Mostrar cuadrícula", +"component": "Componente", +"multiSelect": "Seleccionar varios", +"selectAll": "Seleccionar todo", +"copy": "Copia", +"cut": "Corte", +"paste": "Pegar", +"move": "Mover", +"zoom": "Cambie el tamaño de", +"delete": "Borrar", +"deSelect": "Desmarque", +"queryEditor": "Editor de consultas", +"excuteQuery": "Ejecutar consulta actual", +"editBox": "Editor de texto", +"formatting": "Formato", +"openInLeftPanel": "Abrir en el panel izquierdo", +}, +"help": { + ...en.help, + +"videoText": "Visión general", +"onBtnText": "OK", +"permissionDenyTitle": "💡 ¿No se puede crear una nueva aplicación o fuente de datos?", +"permissionDenyContent": "No tiene permiso para crear la aplicación y la fuente de datos. Póngase en contacto con el administrador para unirse al grupo de desarrolladores.", +"appName": "Aplicación tutorial", +"chat": "Chatea con nosotros", +"docs": "Ver documentación", +"editorTutorial": "Editor de tutoriales", +"update": "¿Qué hay de nuevo?", +"version": "Versión", +"versionWithColon": "Versión:", +"submitIssue": "Presentar un asunto", +}, +"header": { + ...en.header, + +"nameCheckMessage": "El nombre no puede estar vacío", +"viewOnly": "Ver sólo", +"recoverAppSnapshotTitle": "¿Restaurar esta versión?", +"recoverAppSnapshotContent": "Restaurar la aplicación actual a la versión creada en {time}.", +"recoverAppSnapshotMessage": "Restaurar esta versión", +"returnEdit": "Volver al editor", +"deploy": "Publique", +"export": "Exportar a JSON", +"editName": "Editar nombre", +"duplicate": "Duplicar {type}", +"snapshot": "Historia", +"scriptsAndStyles": "Guiones y estilo", +"appSettings": "Configuración de la aplicación", +"preview": "Vista previa", +"editError": "Modo de vista previa de la historia, no se admite ninguna operación.", +"clone": "Clon", +"editorMode_layout": "Diseño", +"editorMode_logic": "Lógica", +"editorMode_both": "Ambos", +"editorMode_layout_tooltip": "Personalice la apariencia y el diseño del componente en la ventana derecha. Ajusta su aspecto, estilo y animación.", +"editorMode_logic_tooltip": "Configure el funcionamiento y la interacción de su componente, en la ventana adecuada. Gestione su contenido y sus comportamientos interactivos.", +"AppEditingBlocked": "Edición de la App bloqueada para:", +"AppEditingBlockedHint": "Los cambios no se guardarán mientras otro usuario esté editando esta aplicación.", +"AppEditingBlockedMessage": "Por favor, espere antes de verificar el estado de edición de la aplicación.", +"AppEditingBlockedCheckStatus": "Verificar estado de la aplicación", +"AppEditingBlockedSomeone": "Alguien", +"AppEditingBlockedMessageSnipped": "está editando esta aplicación", +}, +"userAuth": { + ...en.userAuth, + +"registerByEmail": "Inscribirse", +"email": "Correo electrónico:", +"inputEmail": "Introduzca su dirección de correo electrónico", +"inputValidEmail": "Introduzca una dirección de correo electrónico válida", +"forgotPassword": "Contraseña olvidada", +"forgotPasswordInfo": "Introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.", +"forgotPasswordSuccess": "Consulta tu correo electrónico para ver el enlace para restablecer la contraseña.", +"forgotPasswordError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", +"register": "Inscribirse", +"userLogin": "Iniciar sesión", +"login": "Iniciar sesión", +"bind": "Encuadernación", +"passwordCheckLength": "Al menos {min} Caracteres", +"passwordCheckContainsNumberAndLetter": "Debe contener letras y números", +"passwordCheckSpace": "No puede contener espacios en blanco", +"welcomeTitle": "Bienvenido a {productName}", +"inviteWelcomeTitle": "{username} le invita a trabajar juntos", +"terms": "Términos", +"privacy": "Política de privacidad", +"registerHint": "He leído y acepto la", +"chooseAccount": "Elija su cuenta", +"signInLabel": "Iniciar sesión con {name}", +"bindAccount": "Vincular cuenta", +"scanQrCode": "Escanee el código QR con {name}.", +"invalidThirdPartyParam": "Parámetros de terceros no válidos", +"account": "Cuenta", +"inputAccount": "Introduzca su cuenta", +"ldapLogin": "Inicio de sesión LDAP", +"resetPassword": "Restablecer contraseña", +"resetPasswordDesc": "Restablecer la contraseña del usuario {name}. Se generará una nueva contraseña después del restablecimiento.", +"resetSuccess": "Reinicio efectuado", +"resetSuccessDesc": "Se ha restablecido la contraseña. La nueva contraseña es: {password}.", +"resetLostPasswordSuccess": "Se ha restablecido la contraseña. Vuelva a iniciar sesión.", +"copyPassword": "Copiar contraseña", +"poweredByLowcoder": "Desarrollado por: Lowcoder.cloud", +"continue": "Continúe en", +"enterPassword": "Introduzca su contraseña", +"selectAuthProvider": "Seleccionar proveedor de autenticación", +"selectWorkspace": "Seleccione su espacio de trabajo", +"userNotFound": "Usuario no encontrado. Asegúrese de haber introducido el correo electrónico correcto.", +}, +"preLoad": { + ...en.preLoad, + +"jsLibraryHelpText": "Añada bibliotecas JavaScript a su aplicación actual a través de direcciones URL. lodash, day.js, uuid, numbro están integradas en el sistema para su uso inmediato. Las bibliotecas JavaScript se cargan antes de inicializar la aplicación, lo que puede afectar al rendimiento de la misma.", +"exportedAs": "Exportado como", +"urlTooltip": "Dirección URL de la biblioteca JavaScript, se recomienda [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/)", +"externalLibsHelperText": "Sólo son compatibles las bibliotecas que utilizan el método UMD (Universal Module Definition). Más información: https://github.com/umdjs/umd", +"recommended": "Recomendado", +"viewJSLibraryDocument": "Documento", +"jsLibraryURLError": "URL no válida", +"jsLibraryExist": "La biblioteca JavaScript ya existe", +"jsLibraryEmptyContent": "No se han añadido bibliotecas JavaScript", +"jsLibraryDownloadError": "Error de descarga de la biblioteca JavaScript", +"jsLibraryInstallSuccess": "Biblioteca JavaScript instalada correctamente", +"jsLibraryInstallFailed": "Fallo en la instalación de la biblioteca JavaScript", +"jsLibraryInstallFailedCloud": "Puede que la biblioteca no esté disponible en el Sandbox, [Documentación](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", +"jsLibraryInstallFailedHost": "___TITULAR0___", +"add": "Añadir nuevo", +"jsHelpText": "Añadir un Método o Variable Global a la Aplicación Actual.", +"cssHelpText": "Añadir Estilos a la Aplicación Actual. La estructura DOM puede cambiar a medida que el sistema itera. Intente Modificar Estilos a Través de Propiedades de Componentes.", +"scriptsAndStyles": "Guiones y estilos", +"jsLibrary": "Biblioteca JavaScript", +}, +"editorTutorials": { + ...en.editorTutorials, + +"component": "Componente", +"componentContent": "El Panel de Componentes Derecho le ofrece muchos Bloques de Aplicación (Componentes) ya hechos. Estos pueden ser arrastrados al lienzo para su uso. También puede crear sus propios componentes con un poco de conocimiento de codificación.", +"canvas": "Lienzo", +"canvasContent": "Construye tus aplicaciones en Canvas con el método \"lo que ves es lo que hay\". Basta con arrastrar y soltar los componentes para diseñar el diseño, y utilizar los atajos de teclado para realizar ediciones rápidas como borrar, copiar y pegar. Una vez seleccionado un componente, puede ajustar todos los detalles, desde el estilo y el diseño hasta la vinculación de datos y el comportamiento lógico. Además, disfrute de la ventaja añadida del diseño adaptable, que garantiza que sus aplicaciones se vean perfectamente en cualquier dispositivo.", +"queryData": "Consultar datos", +"queryDataContent": "Puede crear consultas de datos aquí y conectarse a su MySQL, MongoDB, Redis, Airtable, y muchas otras fuentes de datos. Después de configurar la consulta, haga clic en \"Ejecutar\" para obtener los datos y continuar con el tutorial.", +"compProperties": "Propiedades de los componentes", +"interactiveDemo": "Demostración interactiva", +"interactiveDemoToolTip": "Haga clic para iniciar una demostración interactiva de esta función", +}, +"supademos": { + ...en.supademos, + +"transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", +"dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", +"temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", +"dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", +"restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", +"jsQuery": "", +"streamApiQuery": "", +"mongodbQuery": "", +"libraryQuery": "", +"googleSheets": "", +"graphqlQuery": "", +"snowflakeQuery": "", +}, +"homeTutorials": { + ...en.homeTutorials, + +"createAppContent": "Bienvenido Haga clic en 'App' y comience a crear su primera solicitud.", +"createAppTitle": "Crear aplicación", +}, +"npmRegistry": { + ...en.npmRegistry, + +"npmRegistryEnable": "Habilitar el Registro NPM personalizado", +"npmRegistryUrl": "Url del registro del MNP", +"npmRegistryUrlRequired": "Introduzca la URL del registro", +"npmRegistryUrlInvalid": "Introduzca una URL válida", +"npmRegistryScope": "Alcance del paquete", +"npmRegistryPattern": "Patrón", +"npmRegistryPatternInvalid": "Por favor, introduzca un patrón válido (empezando por @ para organizaciones).", +"npmRegistryAuth": "Autenticación", +"npmRegistryAuthType": "Tipo de autenticación", +"npmRegistryAuthCredentials": "Credenciales de autenticación", +"npmRegistryAuthCredentialsRequired": "Introduzca las credenciales de registro", +"npmRegistryAuthCredentialsHelp": "Para la autenticación básica, proporcione el nombre de usuario y la contraseña codificados en base64 con el formato 'base64(nombredeusuario:contraseña)'; para la autenticación por token, proporcione el token.", +}, +"history": { + ...en.history, + +"layout": "{0}' ajuste de diseño", +"upgrade": "Actualizar '{0}'", +"delete": "Borrar '{0}'", +"add": "Añadir \"{0}\".", +"modify": "Modificar '{0}'", +"rename": "Cambie el nombre de \"{1}\" a \"{0}\".", +"recover": "Recuperar la versión '{2}", +"recoverVersion": "Recuperar versión", +"andSoOn": "etc.", +"timeFormat": "MM DD a las hh:mm A", +"emptyHistory": "Sin antecedentes", +"currentVersionWithBracket": " (Actual)", +"currentVersion": "Versión actual", +"justNow": "Ahora mismo", +"history": "Historia", +}, +"home": { + ...en.home, + +"profile": "Su perfil", +"news": "Noticias", +"newsLoading": "Se cargará unos segundos.", +"orgHome": "Página de inicio (Org)", +"yourOrg": "Su organización", +"orgHomeTitle": "Página de inicio de la organización", +"appMarketplace": "Mercado de aplicaciones", +"allApplications": "Tus aplicaciones", +"allModules": "Sus módulos", +"allFolders": "Sus carpetas", +"yourFolders": "Sus carpetas", +"modules": "Módulos", +"module": "Módulo", +"api": "API Lowcoder", +"trash": "Trash", +"marketplace": "Mercado", +"allCategories": "Todas las categorías", +"queryLibrary": "Biblioteca de consultas", +"datasource": "Fuentes de datos", +"selectDatasourceType": "Seleccione el tipo de fuente de datos", +"home": "Inicio", +"all": "Todos", +"app": "Aplicación", +"navigation": "Navegación", +"navLayout": "Navegación por PC", +"navLayoutDesc": "Menú a la izquierda para facilitar la navegación.", +"mobileTabLayout": "Navegación móvil", +"mobileTabLayoutDesc": "Barra de navegación inferior para una navegación móvil fluida.", +"folders": "Carpetas", +"folder": "Carpeta", +"rootFolder": "Raíz", +"import": "Importar", +"export": "Exportar a JSON", +"show": "Mostrar", +"inviteUser": "Invitar a miembros", +"createFolder": "Crear carpeta", +"createFolderSubTitle": "Nombre de la carpeta:", +"moveToFolder": "Mover a carpeta", +"moveToTrash": "Mover a la basura", +"moveToFolderSubTitle": "Mueve \"{name}\" a:", +"folderName": "Nombre de la carpeta:", +"resCardSubTitle": "{time} por {creator}", +"trashEmpty": "La papelera está vacía.", +"projectEmpty": "Aquí no hay nada.", +"projectEmptyCanAdd": "Aún no tienes ninguna aplicación. Haz clic en Nueva para empezar.", +"name": "Nombre", +"type": "Tipo", +"creator": "Creado por", +"lastModified": "Última modificación", +"deleteTime": "Borrar hora", +"createTime": "Crear tiempo", +"datasourceName": "Nombre de la fuente de datos", +"databaseName": "Nombre de la base de datos", +"nameCheckMessage": "El nombre no puede estar vacío", +"deleteElementTitle": "Borrar permanentemente", +"moveToTrashSubTitle": "{type} {name} se trasladará a la papelera.", +"deleteElementSubTitle": "Borre {type} {name} permanentemente, no se puede recuperar.", +"deleteSuccessMsg": "Eliminado con éxito", +"deleteErrorMsg": "Error borrado", +"recoverSuccessMsg": "Recuperado con éxito", +"newDatasource": "Nueva fuente de datos", +"creating": "Crear...", +"chooseDataSourceType": "Elija el tipo de fuente de datos", +"folderAlreadyExists": "La carpeta ya existe", +"newNavLayout": "{userName}'s {name}", +"newApp": "El nuevo {userName} de {name}", +"importError": "Error de importación, {message}", +"exportError": "Error de exportación, {message}", +"importSuccess": "Éxito de la importación", +"fileUploadError": "Error de carga de archivos", +"fileFormatError": "Error de formato de archivo", +"groupWithSquareBrackets": "[Grupo]", +"allPermissions": "Propietario", +"appSharingDialogueTitle": "Compartir aplicaciones y permisos", +"appSocialSharing": "Comparta su aplicación y su experiencia en:", +"appSocialSharingMessage": "Hice esta aplicación con Lowcoder, ¡échale un vistazo!", +"socialShare": "Compartir en", +"shareLink": "Compartir enlace:", +"copyLink": "Copiar enlace", +"appPublicMessage": "Haz pública la aplicación. Cualquiera puede verla.", +"modulePublicMessage": "Haz público el módulo. Cualquiera puede verlo.", +"marketplaceURL": "https://api-service.lowcoder.cloud", +"appMarketplaceMessage": "Publica tu aplicación en el Mercado Público. Cualquiera podrá verla y copiarla desde allí.", +"moduleMarketplaceMessage": "Publica tu Módulo en el Mercado Público. Cualquiera puede verlo y copiarlo desde allí.", +"marketplaceGoodPublishing": "Asegúrate de que tu aplicación tiene un buen nombre y es fácil de usar. Elimina cualquier información sensible antes de publicarla. Además, elimine las fuentes de datos locales y sustitúyalas por datos temporales estáticos integrados.", +"noMarketplaceApps": "Aún no hay aplicaciones en el mercado", +"errorMarketplaceApps": "Error al cargar Marketplace Apps", +"localMarketplaceTitle": "Mercado local", +"globalMarketplaceTitle": "Mercado público", +"memberPermissionList": "Permisos de los miembros:", +"orgName": "{orgName} admins", +"addMember": "Añadir miembros", +"addPermissionPlaceholder": "Introduzca un nombre para buscar miembros", +"searchMemberOrGroup": "Buscar miembros o grupos:", +"addPermissionErrorMessage": "Fallo al añadir permiso, {message}", +"copyModalTitle": "Clonar \"{name}\"", +"copyNameLabel": "{type} nombre", +"copyModalfolderLabel": "Añadir a la carpeta", +"copyNamePlaceholder": "Por favor, introduzca un nombre {type}.", +"chooseNavType": "Elija el tipo de navegación", +"createNavigation": "Crear navegación", +"howToUseAPI": "Cómo utilizar la API Rest abierta", +"support": "Ayuda", +}, +"support": { + ...en.support, + +"selfUser": "Usted", +"supportTitle": "Soporte Lowcoder", +"supportContent": "Si tiene alguna pregunta o necesita ayuda, utilice el sistema de tickets para resolver su problema rápidamente.", +"newSupportTicket": "Nuevo ticket de soporte", +"ticketTitle": "Título", +"priority": "Prioridad", +"assignee": "Cesionario", +"status": "Estado del billete", +"updatedTime": "Hora de actualización", +"active": "Activo", +"inactive": "Inactivo", +"noEmail": "No Email", +"details": "Detalles", +"reloadTickets": "Entradas Reload", +"createdDate": "Fecha de creación", +"updatedDate": "Fecha de actualización", +"description": "Descripción del problema", +"subtasks": "Subtareas", +"subtasksProgress": "Progreso de todas las subtareas", +"attachments": "Emisión de anexos", +"comments": "Comentarios", +"addComment": "Añadir comentario", +"addAttachment": "Añadir anexo", +"edit": "Editar descripción del ticket", +"save": "Guardar billete Descripción", +"cancel": "Cancelar", +"submitComment": "Enviar comentario", +"upload": "Enviar anexo", +"selectFile": "Seleccionar archivo", +"ticketDescriptionUpdated": "Descripción de la entrada actualizada correctamente", +"ticketDescriptionUpdateFailed": "Error al actualizar la descripción del ticket.", +"writeComment": "Escribe un comentario...", +"ticketCommentAdded": "¡Comentario añadido correctamente!", +"ticketCommentFailed": "No se ha podido añadir el comentario.", +"ticketCommentEmpty": "Por favor, escriba un comentario antes de enviarlo.", +"ticketAttachmentUploaded": "El archivo adjunto se ha cargado correctamente.", +"ticketAttachmentFailed": "No se ha podido cargar el archivo adjunto.", +"ticketAttachmentEmpty": "Seleccione un archivo para cargar.", +"ticketFetchError": "Error al cargar el ticket.", +"ticketNotFound": "Billete no encontrado.", +"addAttachmentFileSize": "El archivo debe pesar menos de 5 MB.", +"goBack": "Volver atrás", +"noDescription": "No hay descripción disponible.", +"createTicket": "Crear un nuevo Ticket de Soporte", +"createTicketTitlePlaceholder": "Introduzca el título (máx. 150 caracteres)", +"createTicketDescriptionTitle": "Describa su problema: cuantos más detalles, mejor:", +"createTicketDescriptionPlaceholder": "Describa el problema en detalle, incluyendo 1) Pasos para reproducir el problema, 2) Comportamiento esperado frente a comportamiento real, 3) Fragmentos de código, si procede, 4) Cualquier componente, API o configuración específicos afectados.", +"createTicketSubmit": "Enviar billete", +"createTicketInfoText": "Una vez creado el billete, puede añadir capturas de pantalla y comentarios en la sección \"Detalles\".", +}, +"carousel": { + ...en.carousel, + +"dotPosition": "Posición de los puntos de navegación", +"autoPlay": "Reproducción automática", +"showDots": "Mostrar puntos de navegación", +}, +"npm": { + ...en.npm, + +"invalidNpmPackageName": "Nombre de paquete npm o URL no válidos.", +"pluginExisted": "Este plugin npm ya existía", +"compNotFound": "Componente {compName} No encontrado.", +"addPluginModalTitle": "Añadir plugin desde un repositorio npm", +"pluginNameLabel": "URL o nombre del paquete npm", +"noCompText": "Sin componentes.", +"compsLoading": "Cargando...", +"removePluginBtnText": "Eliminar", +"addPluginBtnText": "Añadir plugin npm", +}, +"toggleButton": { + ...en.toggleButton, + +"valueDesc": "El Valor por Defecto del Botón Alternar, Por Ejemplo: Falso", +"trueDefaultText": "Ocultar", +"falseDefaultText": "Mostrar", +"trueLabel": "Texto para True", +"falseLabel": "Texto para Falso", +"trueIconLabel": "Icono de True", +"falseIconLabel": "Icono de Falso", +"iconPosition": "Icono Posición", +"showText": "Mostrar texto", +"alignment": "Alineación", +"showBorder": "Mostrar borde", +}, +"componentDoc": { + ...en.componentDoc, + +"markdownDemoText": "**Lowcoder** | Cree aplicaciones de software para su empresa y sus clientes con un mínimo de experiencia en programación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", +"demoText": "Lowcoder | Cree aplicaciones de software para su Empresa y sus Clientes con mínima experiencia en codificación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", +"submit": "Enviar", +"style": "Estilo", +"danger": "Peligro", +"warning": "Advertencia", +"success": "Éxito", +"menu": "Menú", +"link": "Enlace", +"customAppearance": "Apariencia personalizada", +"search": "Buscar en", +"pleaseInputNumber": "Introduzca un número", +"mostValue": "Más valor", +"maxRating": "Clasificación máxima", +"notSelect": "No seleccionado", +"halfSelect": "Media selección", +"pleaseSelect": "Seleccione una opción", +"title": "Título", +"content": "Contenido", +"componentNotFound": "El componente no existe", +"example": "Ejemplos", +"defaultMethodDesc": "Establecer el valor de la propiedad {name}.", +"propertyUsage": "Puede leer información relacionada con los componentes accediendo a las propiedades de los componentes por nombre de componente en cualquier lugar donde pueda escribir JavaScript.", +"property": "Propiedades", +"propertyName": "Nombre de la propiedad", +"propertyType": "Tipo", +"propertyDesc": "Descripción", +"event": "Eventos", +"eventName": "Nombre del evento", +"eventDesc": "Descripción", +"mehtod": "Métodos", +"methodUsage": "Tiene la capacidad de interactuar con los componentes a través de sus respectivos métodos, a los que se puede acceder por sus nombres designados dentro de cualquier segmento en el que se utilice JavaScript. Además, estos componentes pueden activarse a través de la acción \"Componente de control\", que se activa en respuesta a eventos específicos.", +"methodName": "Nombre del método", +"methodDesc": "Descripción", +"showBorder": "Mostrar borde", +"haveTry": "Pruébelo usted mismo", +"settings": "Configuración", +"settingValues": "Valor de ajuste", +"defaultValue": "Valor por defecto", +"time": "Tiempo", +"date": "Fecha", +"noValue": "Ninguno", +"xAxisType": "Tipo de eje X", +"hAlignType": "Alineación horizontal", +"leftLeftAlign": "Alineación izquierda-izquierda", +"leftRightAlign": "Alineación izquierda-derecha", +"topLeftAlign": "Alineación superior izquierda", +"topRightAlign": "Alineación superior derecha", +"validation": "Validación", +"required": "Requerido", +"defaultStartDateValue": "Fecha de inicio por defecto", +"defaultEndDateValue": "Fecha de finalización por defecto", +"basicUsage": "Uso básico", +"basicDemoDescription": "Los siguientes ejemplos muestran el uso básico del componente.", +"noDefaultValue": "Sin valor por defecto", +"forbid": "Prohibido", +"placeholder": "Marcador de posición", +"pleaseInputPassword": "Introduzca una contraseña", +"password": "Contraseña", +"textAlign": "Alineación del texto", +"length": "Longitud", +"top": "Top", +"pleaseInputName": "Introduzca su nombre", +"userName": "Nombre", +"fixed": "Fijo", +"responsive": "Respuesta", +"workCount": "Recuento de palabras", +"cascaderOptions": "Opciones de Cascader", +"pleaseSelectCity": "Seleccione una ciudad", +"advanced": "Avanzado", +"showClearIcon": "Mostrar icono de borrado", +"appleOptionLabel": "🍎 Manzana", +"waterMelonOptionLabel": "🍉 Sandía", +"berryOptionLabel": "🍓 Fresa", +"lemonOptionLabel": "🍋 Limón", +"coconutOptionLabel": "🥥 Coco", +"likedFruits": "Favoritos", +"option": "Opción", +"singleFileUpload": "Carga de un solo archivo", +"multiFileUpload": "Carga múltiple de archivos", +"folderUpload": "Cargar carpeta", +"multiFile": "Varios archivos", +"folder": "Carpeta", +"open": "Abrir", +"favoriteFruits": "Frutas favoritas", +"pleaseSelectOneFruit": "Seleccione una fruta", +"notComplete": "No Completo", +"complete": "Complete", +"echart": "EChart", +"lineChart": "Gráfico lineal", +"basicLineChart": "Gráfico de líneas básico", +"lineChartType": "Tipo de gráfico de líneas", +"stackLineChart": "Línea apilada", +"areaLineChart": "Línea de área", +"scatterChart": "Gráfico de dispersión", +"scatterShape": "Forma de dispersión", +"scatterShapeCircle": "Círculo", +"scatterShapeRect": "Rectángulo", +"scatterShapeTri": "Triángulo", +"scatterShapeDiamond": "Diamante", +"scatterShapePin": "Chincheta", +"scatterShapeArrow": "Flecha", +"pieChart": "Gráfico circular", +"basicPieChart": "Gráfico circular básico", +"pieChatType": "Tipo de gráfico circular", +"pieChartTypeCircle": "Gráfico de donuts", +"pieChartTypeRose": "Gráfico de rosas", +"titleAlign": "Título Cargo", +"color": "Color", +"dashed": "Dashed", +"imADivider": "Soy una línea divisoria", +"tableSize": "Tamaño de la tabla", +"subMenuItem": "Submenú {num}", +"menuItem": "Menú {num}", +"labelText": "Etiqueta", +"labelPosition": "Etiqueta - Posición", +"labelAlign": "Etiqueta - Alinear", +"optionsOptionType": "Método de configuración", +"styleBackgroundColor": "Color de fondo", +"styleBorderColor": "Color del borde", +"styleColor": "Color de fuente", +"selectionMode": "Modo de selección de filas", +"paginationSetting": "Configuración de la paginación", +"paginationShowSizeChanger": "Ayuda a los usuarios para modificar el número de entradas por página", +"paginationShowSizeChangerButton": "Botón de cambio de talla", +"paginationShowQuickJumper": "Mostrar Quick Jumper", +"paginationHideOnSinglePage": "Ocultar cuando sólo hay una página", +"paginationPageSizeOptions": "Tamaño de página", +"chartConfigCompType": "Tipo de gráfico", +"xConfigType": "Tipo de eje X", +"loading": "Cargando", +"disabled": "Discapacitados", +"minLength": "Longitud mínima", +"maxLength": "Longitud máxima", +"showCount": "Mostrar recuento de palabras", +"autoHeight": "Altura", +"thousandsSeparator": "Separador de miles", +"precision": "Posiciones decimales", +"value": "Valor por defecto", +"formatter": "Formato", +"min": "Valor mínimo", +"max": "Valor máximo", +"step": "Tamaño del escalón", +"start": "Hora de inicio", +"end": "Fin de los tiempos", +"allowHalf": "Permitir media selección", +"filetype": "Tipo de archivo", +"showUploadList": "Mostrar lista de cargas", +"uploadType": "Tipo de carga", +"allowClear": "Mostrar icono de borrado", +"minSize": "Tamaño mínimo del archivo", +"maxSize": "Tamaño máximo del archivo", +"maxFiles": "Número máximo de archivos cargados", +"format": "Formato", +"minDate": "Fecha mínima", +"maxDate": "Fecha máxima", +"minTime": "Tiempo mínimo", +"maxTime": "Tiempo máximo", +"text": "Texto", +"type": "Tipo", +"hideHeader": "Ocultar cabecera", +"hideBordered": "Ocultar frontera", +"src": "URL de la imagen", +"showInfo": "Mostrar valor", +"mode": "Modo", +"onlyMenu": "Sólo Menú", +"horizontalAlignment": "Alineación horizontal", +"row": "Izquierda", +"column": "Top", +"leftAlign": "Alineación izquierda", +"rightAlign": "Alineación correcta", +"percent": "Porcentaje", +"fixedHeight": "Altura fija", +"auto": "Adaptable", +"directory": "Carpeta", +"multiple": "Varios archivos", +"singleFile": "Archivo único", +"manual": "Manual", +"default": "Por defecto", +"small": "Pequeño", +"middle": "Medio", +"large": "Grande", +"single": "Único", +"multi": "Múltiples", +"close": "Cerrar", +"ui": "Modo IU", +"line": "Gráfico lineal", +"scatter": "Gráfico de dispersión", +"pie": "Gráfico circular", +"basicLine": "Gráfico de líneas básico", +"stackedLine": "Gráfico de líneas apiladas", +"areaLine": "Mapa de la zona", +"basicPie": "Gráfico circular básico", +"doughnutPie": "Gráfico de donuts", +"rosePie": "Gráfico de rosas", +"category": "Categoría Eje", +"circle": "Círculo", +"rect": "Rectángulo", +"triangle": "Triángulo", +"diamond": "Diamante", +"pin": "Chincheta", +"arrow": "Flecha", +"left": "Izquierda", +"right": "Derecha", +"center": "Centro", +"bottom": "Fondo", +"justify": "Justificar ambos extremos", +}, +"playground": { + ...en.playground, + +"url": "https://app.lowcoder.cloud/playground/{compType}/1", +"data": "Estado actual de los datos", +"preview": "Vista previa", +"property": "Propiedades", +"console": "Consola Visual Script", +"executeMethods": "Ejecutar métodos", +"noMethods": "Sin métodos.", +"methodParams": "Parámetros del método", +"methodParamsHelp": "Parámetros del método de entrada usando JSON. Por ejemplo, puede establecer los parámetros de setValue con: [1] o 1", +}, +"calendar": { + ...en.calendar, + +"headerBtnBackground": "Botón Fondo", +"btnText": "Texto del botón", +"title": "Título", +"selectBackground": "Antecedentes", +}, +"idSource": { + ...en.idSource, + +"title": "Proveedor de autenticación de usuarios", +"form": "Correo electrónico", +"pay": "Premium", +"enable": "Activar", +"unEnable": "No activado", +"loginType": "Tipo de conexión", +"status": "Estado", +"desc": "Descripción", +"manual": "Libreta de direcciones:", +"syncManual": "Sincronizar libreta de direcciones", +"syncManualSuccess": "Sincronización realizada", +"enableRegister": "Permitir el registro", +"saveBtn": "Guardar y activar", +"save": "Guardar", +"none": "Ninguno", +"formPlaceholder": "Por favor, introduzca {label}", +"formSelectPlaceholder": "Por favor, seleccione el {label}", +"saveSuccess": "Guardado correctamente", +"dangerLabel": "Zona de peligro", +"dangerTip": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Proceda con precaución.", +"lastEnabledConfig": "No se puede deshabilitar/borrar la configuración ya que es la única configuración habilitada.", +"disable": "Desactivar", +"disableSuccess": "Desactivado correctamente", +"encryptedServer": "-------- Cifrado en el lado del servidor --------", +"disableTip": "Consejos", +"disableContent": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Está seguro de continuar?", +"manualTip": "", +"lockTip": "El contenido está bloqueado. Para realizar cambios, haga clic en {icon} para desbloquear.", +"lockModalContent": "La modificación del campo \"Atributo ID\" puede tener repercusiones importantes en la identificación del usuario. Por favor, confirme que entiende las implicaciones de este cambio antes de proceder.", +"payUserTag": "Premium", +"source": "Fuente", +"sourceName": "Nombre del proveedor de autenticación", +"sourceDescription": "Descripción del proveedor de autenticación", +"sourceIcon": "Icono de proveedor de autenticación", +"sourceCategory": "Categoría de proveedor de autenticación", +"souceIssuerURI": "URI del emisor del proveedor de autenticación", +"souceAuthorizationEndpoint": "Proveedor de autenticación Punto final de autorización", +"souceTokenEndpoint": "Punto final del token del proveedor de autenticación", +"souceUserInfoEndpoint": "Proveedor de autenticación Información de usuario Punto final", +"userInfoIntrospection": "Utilizar la introspección de usuarios de OpenID", +"userCanSelectAccounts": "El usuario puede seleccionar una cuenta", +"sourceCategoryEnterprise": "Identidad empresarial", +"sourceCategoryCloud": "Servicios en la nube", +"sourceCategorySocial": "Social Media", +"sourceCategoryDevelopment": "Desarrollo", +"sourceCategoryTools": "Herramientas y productividad", +}, +"slotControl": { + ...en.slotControl, + +"configSlotView": "Configurar vista de ranura", +}, +"jsonLottie": { + ...en.jsonLottie, + +"lottieJson": "Lottie JSON", +"searchAnimation": "Buscar animación", +"speed": "Velocidad", +"width": "Anchura", +"height": "Altura", +"backgroundColor": "Color de fondo", +"animationStart": "Inicio de la animación", +"valueDesc": "Datos JSON actuales", +"loop": "Bucle", +"auto": "Coche", +"onHover": "Al pasar el ratón", +"onTrigger": "Al activarse", +"singlePlay": "Juego individual", +"endlessLoop": "Bucle sin fin", +"keepLastFrame": "Mantener visualizado el último fotograma", +"fit": "Ajuste", +"align": "Alinear", +"load": "En carga", +"play": "En juego", +"pause": "En pausa", +"stop": "En Stop", +"complete": "En Completo", +}, +"timeLine": { + ...en.timeLine, + +"titleColor": "Título Color", +"subTitleColor": "Color del subtítulo", +"labelColor": "Color de la etiqueta", +"value": "Datos cronológicos", +"mode": "Orden de visualización", +"left": "Derecho de contenido", +"right": "Contenido Izquierda", +"alternate": "Orden alternativo de los contenidos", +"modeTooltip": "Configurar el contenido para que aparezca a izquierda/derecha o alternativamente en ambos lados de la línea de tiempo", +"reverse": "Eventos más recientes primero", +"pending": "Texto de nodo pendiente", +"pendingDescription": "Si se establece, se mostrará un último nodo con el texto y un indicador de espera.", +"defaultPending": "Mejora continua", +"clickTitleEvent": "Haga clic en Título Evento", +"clickTitleEventDesc": "Haga clic en Título Evento", +"Introduction": "Introducción Claves", +"helpTitle": "Título del cronograma (obligatorio)", +"helpsubTitle": "Subtítulo de la cronología", +"helpLabel": "Etiqueta de la línea de tiempo, utilizada para mostrar fechas", +"helpColor": "Indica el color del nodo de la línea de tiempo", +"helpDot": "Representación de nodos de la línea de tiempo como iconos de diseño de Ant", +"helpTitleColor": "Controlar individualmente el color del título del nodo", +"helpSubTitleColor": "Controlar individualmente el color del subtítulo del nodo", +"helpLabelColor": "Control individual del color del icono de nodo", +"valueDesc": "Datos de la cronología", +"clickedObjectDesc": "Datos del artículo seleccionado", +"clickedIndexDesc": "Índice de elementos pulsados", +}, +"comment": { + ...en.comment, + +"value": "Cómo listar datos", +"showSendButton": "Permitir comentarios", +"title": "Título", +"titledDefaultValue": "%d Comentario en total", +"placeholder": "Mayúsculas + Intro para comentar; @ o # para entrada rápida", +"placeholderDec": "Marcador de posición", +"buttonTextDec": "Botón Título", +"buttonText": "Cómo", +"mentionList": "Datos de la lista de menciones", +"mentionListDec": "Palabras clave con mención clave; datos de la lista con mención de valor", +"userInfo": "Información del usuario", +"dateErr": "Error de fecha", +"commentList": "Cómo hacer una lista", +"deletedItem": "Elemento suprimido", +"submitedItem": "Artículo presentado", +"deleteAble": "Mostrar botón Eliminar", +"Introduction": "Introducción Claves", +"helpUser": "Información del usuario (obligatoria)", +"helpname": "Nombre de usuario (obligatorio)", +"helpavatar": "Avatar URL (Alta prioridad)", +"helpdisplayName": "Nombre para mostrar (prioridad baja)", +"helpvalue": "Contenido", +"helpcreatedAt": "Fecha de creación", +}, +"mention": { + ...en.mention, + +"mentionList": "Datos de la lista de menciones", +}, +"autoComplete": { + ...en.autoComplete, + +"value": "Auto Complete Value", +"checkedValueFrom": "Valor comprobado De", +"ignoreCase": "Buscar Ignorar caso", +"searchLabelOnly": "Buscar sólo etiqueta", +"searchFirstPY": "Buscar First Pinyin", +"searchCompletePY": "Buscar Pinyin completo", +"searchText": "Buscar texto", +"SectionDataName": "Autocompletar datos", +"valueInItems": "Valor en artículos", +"type": "Tipo", +"antDesign": "AntDesign", +"normal": "Normal", +"selectKey": "Clave", +"selectLable": "Etiqueta", +"ComponentType": "Tipo de componente", +"colorIcon": "Azul", +"grewIcon": "Gris", +"noneIcon": "Ninguno", +"small": "Pequeño", +"large": "Grande", +"componentSize": "Tamaño del componente", +"Introduction": "Introducción Claves", +"helpLabel": "Etiqueta", +"helpValue": "Valor", +}, +"responsiveLayout": { + ...en.responsiveLayout, + +"column": "Columnas", +"addColumn": "Añadir columna", +"columnDefinition": "Definición de columna", +"rowDefinition": "Definición de fila", +"columnGap": "Hueco entre columnas", +"rowGap": "Hueco entre filas", +"atLeastOneColumnError": "El diseño adaptable mantiene al menos una columna", +"columnsPerRow": "Columnas por fila", +"columnsSpacing": "Espacio entre columnas (px)", +"horizontal": "Horizontal", +"vertical": "Vertical", +"mobile": "Móvil", +"tablet": "Tableta", +"desktop": "Escritorio", +"rowStyle": "Estilo Fila", +"columnStyle": "Estilo columna", +"minWidth": "Mín. Anchura", +"rowBreak": "Row Break", +"useComponentWidth": "Usar tamaño propio", +"useComponentWidthDesc": "Usa el ancho del contenedor en lugar del ancho de la aplicación", +"matchColumnsHeight": "Igualar la altura de las columnas", +"rowLayout": "Disposición de filas", +"columnsLayout": "Disposición de las columnas", +"columnsDefinitionTooltip": "Las columnas pueden definirse libremente basándose en las propiedades CSS de las columnas. Por ejemplo, 'auto auto' creará dos columnas con la misma anchura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-columns", +"rowsDefinitionTooltip": "Las filas pueden definirse libremente basándose en las propiedades CSS de las filas. Por ejemplo, 'auto auto' creará dos filas con la misma altura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-rows", +}, +"splitLayout": { + ...en.splitLayout, + +"column": "Ver zonas", +"addColumn": "Añadir áreas", +"columnDefinition": "Definición del área", +"atLeastOneColumnError": "El diseño adaptable mantiene al menos una columna", +"horizontal": "Horizontal", +"vertical": "Vertical", +"areaStyle": "Estilo columna", +"minWidth": "Mín. Anchura", +"maxWidth": "Máx. Anchura", +"width": "Anchura", +"collapsible": "¿El área es plegable?", +"matchColumnsHeight": "Zonas de partido Altura", +"orientation": "Orientación de Splitlayout", +"orientationTooltip": "El orden visual en el que se alinean las áreas. También puede añadir Componentes Splitlayout dentro de Componentes Splitlayout para conseguir diseños complejos.", +}, +"navLayout": { + ...en.navLayout, + +"mode": "Modo", +"modeInline": "En línea", +"modeVertical": "Vertical", +"modeHorizontal": "Horizontal", +"width": "Anchura", +"widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", +"navStyle": "Menú de estilo", +"navItemStyle": "Estilo del elemento de menú", +"navBackground": "Imagen de fondo", +"mobileNavVerticalOrientation": "Orientación vertical", +"mobileNavVerticalMaxWidth": "Anchura máxima", +"mobileNavBarHeight": "Altura de la barra de navegación", +"mobileNavVerticalShowSeparator": "Mostrar separador", +"mobileNavIconSize": "Tamaño del icono", +}, +"timeZone": { + ...en.timeZone, + +"UTC-12:00": "(UTC-12:00) Línea de fecha internacional W", +"UTC-11:00": "(UTC-11:00) UTC-11", +"UTC-10:00": "(UTC-10:00) Hawai", +"UTC-09:00": "(UTC-09:00) Alaska", +"UTC-08:00": "(UTC-08:00) Baja CA", +"UTC-07:00": "(UTC-07:00) Hora del Pacífico (EE.UU.)", +"UTC-06:00": "(UTC-06:00) Hora central (EE.UU.)", +"UTC-05:00": "(UTC-05:00) Hora del Este (EE.UU.)", +"UTC-04:00": "(UTC-04:00) Hora del Atlántico", +"UTC-03:00": "(UTC-03:00) Buenos Aires", +"UTC-02:00": "(UTC-02:00) UTC-02", +"UTC-01:00": "(UTC-01:00) Cabo Verde", +"UTC+00:00": "(UTC 00:00) UTC", +"UTC+01:00": "(UTC+01:00) Berlín, Roma", +"UTC+02:00": "(UTC+02:00) Atenas, Bucarest", +"UTC+03:00": "(UTC+03:00) Moscú", +"UTC+04:00": "(UTC+04:00) Dubai, Mascate", +"UTC+05:00": "(UTC+05:00) Karachi", +"UTC+05:30": "(UTC+05:30) Nueva Delhi", +"UTC+05:45": "(UTC+05:45) Katmandú", +"UTC+06:00": "(UTC+06:00) Dacca", +"UTC+06:30": "(UTC+06:30) Yangón", +"UTC+07:00": "(UTC+07:00) Bangkok", +"UTC+08:00": "(UTC+08:00) Pekín, HK", +"UTC+09:00": "(UTC+09:00) Tokio, Seúl", +"UTC+09:30": "(UTC+09:30) Adelaida, Darwin", +"UTC+10:00": "(UTC+10:00) Sídney", +"UTC+11:00": "(UTC+11:00) Islas Salomón, Nueva Caledonia", +"UTC+12:00": "(UTC+12:00) Auckland, Fiyi", +"UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", +"UserChoice": "Elección de usuario", +}, +"tour": { + ...en.tour, + +"section1Title": "Pasos", +"section1Subtitle": "Pasos", +"tooltipExampleHeader": "Ejemplo:", +"tooltipSignatureHeader": "Firma:", +"options": { + ...en.tour.options, + +"title": { + ...en.tour.options.title, + +"label": "Título", +"placeholder": "Bienvenido", +"tooltip": "El título del paso. Cualquier HTML es válido aquí.", +}, +"description": { + ...en.tour.options.description, + +"label": "Descripción", +"placeholder": "¡Bienvenido a lowcoder!", +"tooltip": "La descripción del paso. Cualquier HTML es válido aquí.", +}, +"mask": { + ...en.tour.options.mask, + +"label": "Máscara", +"tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar props personalizados, por defecto sigue la propiedad `mask` de Tour.", +"tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", +}, +"arrow": { + ...en.tour.options.arrow, + +"label": "Flecha", +"tooltip": "Activa y desactiva la flecha o la mueve para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente.", +"tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.options.type, + +"label": "Tipo", +"tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores pueden ser controlados con la sección de estilo del tour principal.", +}, +"target": { + ...en.tour.options.target, + +"label": "Componente", +"tooltip": "El componente en el que quieres poner el tooltip, o déjalo vacío si simplemente quieres un modal en medio de la pantalla.", +}, +"coverImage": { + ...en.tour.options.coverImage, + +"label": "URI de la imagen de portada", +"tooltip": "Un URI para una imagen que desea mostrar con el paso", +}, +}, +"indicatorsRender": { + ...en.tour.indicatorsRender, + +"label": "Indicadores Render", +"tooltip": "Proporciona un indicador personalizado para saber en qué paso se encuentra", +"tooltipValidTypes": "Format es una función que acepta dos args, `current` y `total` y devuelve un ReactNode", +"tooltipFunctionSignatureHeader": "Firma:", +"tooltipFunctionSignature": "(actual: número, total: número) => ReactNode", +"tooltipExampleHeader": "Ejemplo:", +}, +"disabledInteraction": { + ...en.tour.disabledInteraction, + +"label": "Desactivar la interacción", +"tooltip": "Desactiva la interacción en la zona resaltada.", +}, +"mask": { + ...en.tour.mask, + +"label": "Máscara", +"tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar accesorios personalizados, el valor predeterminado sigue la propiedad `mask` de Tour. Se puede anular a nivel de paso.", +"tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", +}, +"placement": { + ...en.tour.placement, + +"label": "Colocación", +"tooltip": "Posición de la tarjeta guía respecto al elemento de destino. Puede anularse en el nivel de paso.", +"tooltipValidOptions": "Opciones válidas", +"tooltipValidOptionsAbove": "Por encima del componente:", +"tooltipValidOptionsLeft": "A la izquierda del componente:", +"tooltipValidOptionsRight": "A la derecha del componente:", +"tooltipValidOptionsBelow": "Debajo del componente:", +"tooltipValidOptionsOnTop": "Encima del componente:", +}, +"arrow": { + ...en.tour.arrow, + +"label": "Flecha", +"tooltip": "Activa y desactiva la flecha o la desplaza para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente. Se puede anular en el nivel de paso.", +"tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.type, + +"label": "Tipo", +"tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores se pueden controlar con la sección de estilo del recorrido principal. Se puede anular a nivel de paso.", +}, +}, +"docUrls": { + ...en.docUrls, + +"docHome": "https://docs.lowcoder.cloud/", +"apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", +"components": "https://app.lowcoder.cloud/components/{compType}", +"module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", +"optionList": "", +"terms": "https://lowcoder.cloud/terms", +"privacy": "https://lowcoder.cloud/privacy", +"aboutUs": "https://lowcoder.cloud/about", +"changeLog": "https://github.com/lowcoder-org/lowcoder/releases", +"introVideo": "", +"devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", +"devNpmPluginText": "Cómo desarrollar un plugin npm", +"useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", +"eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", +"thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", +"thirdLibUrlText": "Utilizar bibliotecas de terceros", +}, +"datasourceTutorial": { + ...en.datasourceTutorial, + +"mysql": "", +"mongodb": "", +"postgres": "", +"redis": "", +"es": "", +"smtp": "", +"clickHouse": "", +}, +"queryTutorial": { + ...en.queryTutorial, + +"js": "", +"transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", +"tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", +"dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", +}, +"customComponent": { + ...en.customComponent, + +"entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", +}, +"template": { + ...en.template, + +"cloneUrl": "/apps/plantilla-import/", +}, +"lowcoderUrl": { + ...en.lowcoderUrl, + +"createIssue": "https://github.com/lowcoder-org/lowcoder/issues", +"discord": "https://discord.com/invite/qMG9uTmAx2", +}, +"iconScout": { + ...en.iconScout, + +"searchImage": "Buscar imagen", +"searchAnimation": "Buscar animación", +"searchIcon": "Icono de búsqueda", +"noResults": "No se han encontrado resultados.", +"buySubscriptionTitle": "Desbloquear activos premium", +"buySubscriptionContent": "Este recurso es exclusivo para suscriptores de Media Package. Suscríbase a Media Package y descargue recursos de alta calidad sin límites.", +"buySubscriptionButton": "Suscríbase ahora", +}, }; diff --git a/client/packages/lowcoder/src/i18n/locales/it.ts b/client/packages/lowcoder/src/i18n/locales/it.ts index 2c0b869e4c..bb2833901e 100644 --- a/client/packages/lowcoder/src/i18n/locales/it.ts +++ b/client/packages/lowcoder/src/i18n/locales/it.ts @@ -1,4031 +1,4844 @@ import { en } from "./en"; export const it = { - ...en, - - "productName": "Lowcoder", - "productDesc": "Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è un'eccellente alternativa a Retool, Appsmith e Tooljet.", - "notSupportedBrowser": "Il browser in uso potrebbe presentare problemi di compatibilità. Per un'esperienza d'uso ottimale, utilizzare l'ultima versione di Chrome.", - "create": "Creare", - "move": "Muoversi", - "addItem": "Aggiungi", - "newItem": "Nuovo", - "copy": "Copia", - "rename": "Rinominare", - "delete": "Cancellare", - "deletePermanently": "Cancellare definitivamente", - "remove": "Rimuovere", - "recover": "Recupero", - "edit": "Modifica", - "view": "Vista", - "value": "Valore", - "data": "Dati", - "information": "Informazioni", - "success": "Il successo", - "warning": "Avvertenze", - "error": "Errore", - "reference": "Riferimento", - "text": "Testo", - "basic": "Base", - "label": "Etichetta", - "layout": "Layout", - "color": "Colore", - "form": "Forma", - "menu": "Menu", - "menuItem": "Voce di menu", - "ok": "OK", - "cancel": "Annulla", - "finish": "Finitura", - "reset": "Reset", - "icon": "Icona", - "code": "Codice", - "title": "Titolo", - "emptyContent": "Contenuto vuoto", - "more": "Di più", - "search": "Ricerca", - "back": "Indietro", - "accessControl": "Controllo degli accessi", - "copySuccess": "Copiato con successo", - "copyError": "Errore di copia", - "api": { - ...en.api, - - "publishSuccess": "Pubblicato con successo", - "recoverFailed": "Recupero fallito", - "needUpdate": "La versione attuale è obsoleta. Si prega di aggiornare alla versione più recente.", - }, - "codeEditor": { - ...en.codeEditor, - - "notSupportAutoFormat": "L'editor di codice attuale non supporta la formattazione automatica.", - "fold": "Piegare", - }, - "exportMethod": { - ...en.exportMethod, - - "setDesc": "Impostare la proprietà: {property}", - "clearDesc": "Proprietà libera: {property}", - "resetDesc": "Ripristinare la proprietà: {property} al valore predefinito", - }, - "method": { - ...en.method, - - "focus": "Impostare la messa a fuoco", - "focusOptions": "Opzioni di messa a fuoco. Vedere HTMLElement.focus()", - "blur": "Rimuovere la messa a fuoco", - "click": "Cliccare", - "select": "Seleziona tutto il testo", - "setSelectionRange": "Impostare le posizioni iniziali e finali della selezione di testo", - "selectionStart": "Indice basato su 0 del primo carattere selezionato", - "selectionEnd": "Indice basato su 0 del carattere successivo all'ultimo carattere selezionato", - "setRangeText": "Sostituire l'intervallo di testo", - "replacement": "Stringa da inserire", - "replaceStart": "Indice basato su 0 del primo carattere da sostituire", - "replaceEnd": "Indice basato su 0 del carattere dopo l'ultimo carattere da sostituire", - }, - "errorBoundary": { - ...en.errorBoundary, - - "encounterError": "Il caricamento del componente non è riuscito. Controllare la configurazione.", - "clickToReload": "Fare clic per ricaricare", - "errorMsg": "Errore:", - }, - "imgUpload": { - ...en.imgUpload, - - "notSupportError": "Supporta solo i tipi di immagine {types}.", - "exceedSizeError": "Le dimensioni dell'immagine non devono superare {size}.", - }, - "gridCompOperator": { - ...en.gridCompOperator, - - "notSupport": "Non supportato", - "selectAtLeastOneComponent": "Selezionare almeno un componente", - "selectCompFirst": "Selezionare i componenti prima di copiare", - "noContainerSelected": "[Bug] Nessun contenitore selezionato", - "deleteCompsSuccess": "Eliminato con successo. Premere {undoKey} per annullare.", - "deleteCompsTitle": "Eliminazione dei componenti", - "deleteCompsBody": "Siete sicuri di voler eliminare {compNum} componenti selezionati?", - "cutCompsSuccess": "Tagliare con successo. Premere {pasteKey} per incollare o {undoKey} per annullare.", - }, - "leftPanel": { - ...en.leftPanel, - - "queries": "Query di dati nella vostra applicazione", - "globals": "Variabili di dati globali", - "propTipsArr": "{num} Articoli", - "propTips": "{num} Chiavi", - "propTipArr": "{num} Oggetto", - "propTip": "{num} Chiave", - "stateTab": "Stato", - "settingsTab": "Impostazioni", - "toolbarTitle": "Individualizzazione", - "toolbarPreload": "Script e stili", - "components": "Componenti attivi", - "modals": "modali in-app", - "expandTip": "Fare clic per mostrare i dati di {component}", - "collapseTip": "Fare clic per nascondere i dati di {component}.", - "layers": "Strati", - "activatelayers": "Utilizzare i livelli dinamici", - "selectedComponents": "Componenti selezionati...", - "displayComponents": "controllo Display", - "lockComponents": "controllo Posizione", - }, - "bottomPanel": { - ...en.bottomPanel, - - "title": "Data Queries", - "run": "Correre", - "noSelectedQuery": "Nessuna query selezionata", - "metaData": "Metadati della fonte di dati", - "noMetadata": "Nessun metadato disponibile", - "metaSearchPlaceholder": "Ricerca metadati", - "allData": "Tutti i tavoli", - }, - "rightPanel": { - ...en.rightPanel, - - "propertyTab": "Proprietà", - "noSelectedComps": "Nessun componente selezionato. Fare clic su un componente per visualizzarne le proprietà.", - "createTab": "Inserire", - "searchPlaceHolder": "Ricerca di componenti o moduli", - "uiComponentTab": "Componenti", - "extensionTab": "Estensioni", - "modulesTab": "Moduli", - "moduleListTitle": "Moduli", - "pluginListTitle": "Plugin", - "emptyModules": "I moduli sono Mikro-App riutilizzabili. Possono essere incorporati nella vostra App.", - "searchNotFound": "Non riuscite a trovare il componente giusto?", - "emptyPlugins": "Nessun plugin aggiunto", - "contactUs": "Contatto", - "issueHere": "qui.", - }, - "prop": { - ...en.prop, - - "expand": "Espandi", - "columns": "Colonne", - "videokey": "Chiave video", - "rowSelection": "Selezione della riga", - "toolbar": "Barra degli strumenti", - "pagination": "Paginazione", - "logo": "Logo", - "style": "Stile", - "inputs": "Ingressi", - "meta": "Metadati", - "data": "Dati", - "hide": "Nascondere", - "loading": "Caricamento", - "disabled": "Disabili", - "placeholder": "Segnaposto", - "showClear": "Mostra il pulsante Cancella", - "showSearch": "Ricercabile", - "defaultValue": "Valore predefinito", - "required": "Campo obbligatorio", - "readOnly": "Solo lettura", - "readOnlyTooltip": "I componenti di sola lettura appaiono normali ma non possono essere modificati.", - "minimum": "Minimo", - "maximum": "Massimo", - "regex": "Regex", - "minLength": "Lunghezza minima", - "maxLength": "Lunghezza massima", - "height": "Altezza", - "width": "Larghezza", - "selectApp": "Selezionare l'applicazione", - "showCount": "Mostra il conteggio", - "textType": "Tipo di testo", - "customRule": "Regola personalizzata", - "customRuleTooltip": "Una stringa non vuota indica un errore; vuota o nulla significa che la convalida è stata superata. Esempio:", - "manual": "Manuale", - "map": "Mappa", - "json": "JSON", - "use12Hours": "Utilizzare il formato a 12 ore", - "hourStep": "Ora Passo", - "minuteStep": "Passo di un minuto", - "secondStep": "Secondo passo", - "minDate": "Data minima", - "maxDate": "Data massima", - "minTime": "Tempo minimo", - "maxTime": "Tempo massimo", - "type": "Tipo", - "showLabel": "Mostra etichetta", - "showHeader": "Mostra intestazione", - "showBody": "Mostra il corpo", - "showSider": "Mostra Sider", - "innerSider": "Pagine interne", - "showFooter": "Mostra piè di pagina", - "maskClosable": "Fare clic su Fuori per chiudere", - "toggleClose": "Abilita il pulsante di chiusura", - "showMask": "Mostra maschera", - "textOverflow": "Overflow del testo", - "scrollbar": "Mostra barre di scorrimento", - "siderScrollbar": "Mostra le barre di scorrimento in Sider", - "siderRight": "Show sider a destra", - "siderWidth": "Larghezza Sider", - "siderWidthTooltip": "La larghezza del cursore supporta percentuali (%) e pixel (px).", - "siderCollapsedWidth": "Sider Larghezza collassata", - "siderCollapsedWidthTooltip": "La larghezza collassata del cursore supporta percentuali (%) e pixel (px).", - "siderCollapsible": "Sider pieghevole", - "siderCollapsed": "Sider è crollato", - "contentScrollbar": "Mostra le barre di scorrimento nel contenuto", - "appID": "Id dell'applicazione", - "showApp": "Mostrare un'applicazione nell'area dei contenuti", - "showAppTooltip": "È possibile visualizzare intere applicazioni nell'area dei contenuti. Si tenga presente che per i moduli non sono supportati gli eventi e i metodi di input e output.", - "baseURL": "API Base URL", - "horizontal": "Orizzontale", - "minHorizontalWidth": "Larghezza orizzontale minima", - "component": "Identificatori di componenti propri", - "className": "Nome della classe CSS", - "dataTestId": "ID individuale", - "preventOverwriting": "Impedire la sovrascrittura degli stili", - "color": "Colore", - "horizontalGridCells": "Celle della griglia orizzontale", - "verticalGridCells": "Celle della griglia verticale", - "showHorizontalScrollbar": "Show Horizontal Scrollbar", - "showVerticalScrollbar": "Mostra barra di scorrimento verticale", - "timeZone": "Fuso orario", - }, - "autoHeightProp": { - ...en.autoHeightProp, - - "auto": "Auto", - "fixed": "Fisso", - }, - "textOverflowProp": { - ...en.textOverflowProp, - - "ellipsis": "Passaggio del mouse", - "wrap": "Avvolgimento", - }, - "labelProp": { - ...en.labelProp, - - "text": "Etichetta", - "tooltip": "Tooltip", - "position": "Posizione", - "collapse": "Crollo", - "left": "A sinistra", - "right": "Diritto", - "top": "In alto", - "align": "Allineamento", - "width": "Larghezza", - "widthTooltip": "La larghezza dell'etichetta supporta le percentuali (%) e i pixel (px).", - }, - "eventHandler": { - ...en.eventHandler, - - "eventHandlers": "Gestori di eventi", - "emptyEventHandlers": "Nessun gestore di eventi", - "incomplete": "Selezione incompleta", - "inlineEventTitle": "Su {eventName}", - "event": "Evento", - "action": "Azione", - "noSelect": "Nessuna selezione", - "runQuery": "Run a Data Query", - "selectQuery": "Selezionare la query di dati", - "controlComp": "Controllo di un componente", - "runScript": "Eseguire JavaScript", - "runScriptPlaceHolder": "Scrivere qui il codice", - "component": "Component", - "method": "Metodo", - "setTempState": "Impostare un valore di Stato temporaneo", - "state": "Stato", - "triggerModuleEvent": "Attivare un evento del modulo", - "moduleEvent": "Modulo Evento", - "goToApp": "Vai a un'altra applicazione", - "queryParams": "Parametri della query", - "hashParams": "Parametri Hash", - "showNotification": "Mostra una notifica", - "text": "Testo", - "level": "Livello", - "duration": "Durata", - "notifyDurationTooltip": "L'unità di tempo può essere 's' (secondo, default) o 'ms' (millisecondo). La durata massima è di {max} secondi", - "goToURL": "Aprire un URL", - "openInNewTab": "Aprire in una nuova scheda", - "copyToClipboard": "Copiare un valore negli Appunti", - "copyToClipboardValue": "Valore", - "export": "Esportazione dei dati", - "exportNoFileType": "Nessuna selezione (opzionale)", - "fileName": "Nome del file", - "fileNameTooltip": "Includere l'estensione per specificare il tipo di file, ad esempio 'image.png'.", - "fileType": "Tipo di file", - "condition": "Eseguire solo quando...", - "conditionTooltip": "Eseguire il gestore dell'evento solo quando la condizione è valutata 'true'.", - "debounce": "Debounce per", - "throttle": "Acceleratore per", - "slowdownTooltip": "Utilizzare il debounce o il throttle per controllare la frequenza di attivazione delle azioni. L'unità di tempo può essere 'ms' (millisecondo, default) o 's' (secondo).", - "notHandledError": "Non gestito", - "currentApp": "Attuale", - "inputEventHandlers": "Gestori di eventi di ingresso", - "inputEventHandlersDesc": "Gestori di eventi relativi all'input dell'utente", - "buttonEventHandlers": "Gestori di eventi dei pulsanti", - "buttonEventHandlersDesc": "Gestori di eventi relativi ai clic dei pulsanti", - "changeEventHandlers": "Modifica dei gestori di eventi", - "changeEventHandlersDesc": "Gestori di eventi relativi a modifiche del valore", - "editedEventHandlers": "Modifica dei gestori di eventi", - "editedEventHandlersDesc": "Gestori di eventi relativi allo stato modificato degli elementi", - "clickEventHandlers": "Gestori di eventi di clic", - "clickEventHandlersDesc": "Gestori di eventi relativi ai clic", - "keyDownEventHandlers": "Gestori di eventi di abbassamento dei tasti", - "keyDownEventHandlersDesc": "Gestori di eventi relativi agli eventi di abbassamento dei tasti", - "checkboxEventHandlers": "Gestori di eventi di caselle di controllo", - "checkboxEventHandlersDesc": "Gestori di eventi relativi alle modifiche delle caselle di controllo", - "dragEventHandlers": "Gestori di eventi di trascinamento", - "dragEventHandlersDesc": "Gestori di eventi relativi agli eventi di trascinamento", - "elementEventHandlers": "Gestori di elementi", - "elementEventHandlersDesc": "Gestori di eventi relativi agli eventi generici degli elementi di dati", - "mediaEventHandlers": "Gestori di eventi multimediali", - "mediaEventHandlersDesc": "Gestori di eventi relativi agli eventi multimediali", - "scannerEventHandlers": "Gestori di eventi dello scanner", - "scannerEventHandlersDesc": "Gestori di eventi relativi agli eventi dello scanner", - "chartEventHandlers": "Gestori di eventi del grafico", - "chartEventHandlersDesc": "Gestori di eventi relativi agli eventi dei grafici", - "geoMapEventHandlers": "Gestori di eventi della mappa geografica", - "geoMapEventHandlersDesc": "Gestori di eventi relativi agli eventi delle mappe geografiche", - "stepEventHandlers": "Gestori di eventi di passo", - "stepEventHandlersDesc": "Gestori di eventi relativi agli eventi dell'interfaccia utente a gradini", - "shareEventHandlers": "Condividere i gestori di eventi", - "shareEventHandlersDesc": "Gestori di eventi correlati agli eventi di condivisione", - "selectEventHandlers": "Selezionare i gestori di eventi", - "selectEventHandlersDesc": "Gestori di eventi correlati a Seleziona eventi", - "meetingEventHandlers": "Gestori di eventi di riunione", - "meetingEventHandlersDesc": "Gestori di eventi relativi agli eventi di riunione", - "collaborationEventHandlers": "Gestori di eventi di collaborazione", - "collaborationEventHandlersDesc": "Gestori di eventi relativi agli eventi di collaborazione", - "set": "Set", - "clear": "Libero", - "reset": "Reset", - "messageType": "Tipo di messaggio", - "placement": "Posizionamento", - "description": "Descrizione", - }, - "event": { - ...en.event, - - "submit": "Invia", - "submitDesc": "Trigger su Submit", - "change": "Cambiamento", - "changeDesc": "Trigger su variazioni di valore", - "focus": "Focus", - "focusDesc": "Trigger su Focus", - "blur": "Sfocatura", - "blurDesc": "Trigger su Blur", - "click": "Cliccare", - "clickDesc": "Trigger su clic", - "doubleClick": "Doppio clic", - "doubleClickDesc": "Trigger su doppio clic", - "rightClick": "Cliccare con il tasto destro del mouse", - "rightClickDesc": "Trigger su clic destro", - "keyDown": "Tasto giù", - "keyDownDesc": "Trigger a tasto abbassato", - "select": "Selezionare", - "selectDesc": "Trigger su selezione", - "checked": "Controllato", - "checkedDesc": "Trigger quando una casella di controllo è selezionata", - "unchecked": "Non controllato", - "uncheckedDesc": "Trigger quando una casella di controllo è deselezionata", - "drag": "Trascinamento", - "dragDesc": "Trigger su trascinamento", - "drop": "Goccia", - "dropDesc": "Trigger su caduta", - "open": "Aperto", - "openDesc": "Trigger all'apertura", - "mute": "Muto", - "muteDesc": "Trigger su Mute di un microfono", - "unmute": "Disattivare l'audio", - "unmuteDesc": "Trigger di disattivazione di un microfono", - "showCamera": "Mostra telecamera", - "showCameraDesc": "Si attiva quando Show Camera è attivo", - "hideCamera": "Nascondere la telecamera", - "hideCameraDesc": "Si attiva quando Show Camera è disattivato", - "shareScreen": "Schermo di condivisione", - "shareScreenDesc": "Trigger nella schermata di condivisione", - "shareScreenEnd": "Condividi schermo Fine", - "shareScreenEndDesc": "Trigger su Share Screen End", - "shareControl": "Controllo delle azioni", - "shareControlDesc": "Trigger sul controllo delle azioni", - "shareControlEnd": "Controllo delle azioni Fine", - "shareControlEndDesc": "Trigger su Share Control End", - "shareContent": "Condividi il contenuto", - "shareContentDesc": "Trigger su Condividi contenuto", - "shareContentEnd": "Condividi il contenuto Fine", - "shareContentEndDesc": "Trigger su Share Content End", - "stopShare": "Stop alla quota", - "stopShareDesc": "Trigger su Stop Share", - "meetingStart": "Inizio della riunione", - "meetingStartDesc": "Trigger all'avvio della riunione", - "meetingEnd": "Fine della riunione", - "meetingEndDesc": "Trigger a fine riunione", - "meetingJoin": "Riunione Partecipa", - "meetingJoinDesc": "Trigger all'iscrizione alla riunione", - "meetingLeave": "Congedo per riunioni", - "meetingLeaveDesc": "Fattori scatenanti del congedo per riunioni", - "play": "Gioco", - "playDesc": "Trigger in gioco", - "pause": "Pausa", - "pauseDesc": "Trigger in pausa", - "ended": "Terminato", - "endedDesc": "Trigger su Ended", - "step": "Passo", - "stepDesc": "Trigger su Step", - "next": "Avanti", - "nextDesc": "Trigger su Next", - "finished": "Finito", - "finishedDesc": "Trigger su Finito", - "saved": "Salvati", - "savedDesc": "Trigger quando un elemento viene salvato", - "edited": "Modificato", - "editedDesc": "Trigger quando un elemento viene modificato", - "geoMapMove": "Spostamento della mappa geografica", - "geoMapMoveDesc": "Trigger quando gli utenti spostano la mappa geografica", - "geoMapZoom": "Zoom mappa geografica", - "geoMapZoomDesc": "Trigger quando gli utenti ingrandiscono la mappa", - "geoMapSelect": "Selezione della mappa geografica", - "geoMapSelectDesc": "Trigger quando gli utenti selezionano un elemento sulla mappa geografica", - "scannerSuccess": "Successo dello scanner", - "scannerSuccessDesc": "Si attiva quando uno scanner esegue una scansione con successo", - "scannerError": "Errore dello scanner", - "scannerErrorDesc": "Si attiva quando uno scanner non riesce a eseguire la scansione", - "chartZoom": "Zoom del grafico", - "chartZoomDesc": "Trigger sullo zoom del grafico", - "chartHover": "Grafico Hover", - "chartHoverDesc": "Trigger al passaggio del mouse sul grafico", - "chartSelect": "Selezione del grafico", - "chartSelectDesc": "Trigger su selezione del grafico", - "chartDeselect": "Deselezione del grafico", - "chartDeselectDesc": "Deselezione dei trigger sul grafico", - "close": "Chiudere", - "closeDesc": "Trigger su chiusura", - "parse": "Parse", - "parseDesc": "Trigger su Parse", - "success": "Il successo", - "successDesc": "I trigger del successo", - "delete": "Cancellare", - "deleteDesc": "Trigger su cancellazione", - "mention": "Menzione", - "mentionDesc": "Trigger su menzione", - "search": "Ricerca", - "searchDesc": "Trigger di ricerca", - "selectedChange": "Cambio di selezione", - "selectedChangeDesc": "Trigger su selezione modificata", - "clickExtra": "Fare clic su Azione", - "clickExtraDesc": "Trigger al clic su un elemento extra", - "start": "Inizio", - "startDesc": "Trigger all'avvio", - "resume": "Il curriculum", - "resumeDesc": "Trigger sul curriculum", - "countdown": "Conto alla rovescia", - "countdownDesc": "Trigger al termine del conto alla rovescia", - "reset": "Fine del reset", - "resetDesc": "Trigger su timer di reset", - "refresh": "Aggiornare", - "refreshDesc": "Trigger su aggiornamento", - }, - "style": { - ...en.style, - - "boxShadowColor": "Colore dell'ombra", - "boxShadow": "Box Shadow", - "opacity": "Opacità", - "animation": "Animazione", - "animationIterationCount": "Conteggio delle iterazioni dell'animazione", - "animationDelay": "Ritardo dell'animazione", - "animationDuration": "Durata dell'animazione", - "resetTooltip": "Azzeramento degli stili. Deselezionare il campo di immissione per reimpostare uno stile individuale.", - "textColor": "Colore del testo", - "contrastText": "Colore del testo a contrasto", - "generated": "Generato", - "customize": "Personalizzare", - "staticText": "Testo statico", - "accent": "Accento", - "validate": "Messaggio di convalida", - "border": "Colore del bordo", - "borderRadius": "Raggio del bordo", - "borderWidth": "Larghezza del bordo", - "borderStyle": "Stile del bordo", - "background": "Colore di sfondo", - "headerBackground": "Colore di sfondo dell'intestazione", - "siderBackground": "Colore di sfondo di Sider", - "footerBackground": "Colore di sfondo del piè di pagina", - "fill": "Riempimento", - "track": "Traccia", - "links": "Collegamenti", - "thumb": "Pollice", - "thumbBorder": "Bordo del pollice", - "checked": "Controllato", - "unchecked": "Non controllato", - "handle": "Maniglia", - "tags": "Tag", - "tagsText": "Tag Testo", - "multiIcon": "Icona Multiselezione", - "tabText": "Testo della scheda", - "tabAccent": "Scheda Accento", - "checkedBackground": "Colore di sfondo controllato", - "uncheckedBackground": "Colore di sfondo non controllato", - "uncheckedBorder": "Colore del bordo non selezionato", - "indicatorBackground": "Colore di sfondo dell'indicatore", - "tableCellText": "Testo cellulare", - "selectedRowBackground": "Colore di sfondo della riga selezionata", - "hoverRowBackground": "Colore di sfondo della riga Hover", - "hoverBackground": "Colore di sfondo Hover", - "textTransform": "Trasformazione del testo", - "textDecoration": "Decorazione del testo", - "alternateRowBackground": "Colore di sfondo della riga alternativa", - "tableHeaderBackground": "Colore di sfondo dell'intestazione", - "tableHeaderText": "Testo dell'intestazione", - "toolbarBackground": "Colore di sfondo della barra degli strumenti", - "toolbarText": "Testo della barra degli strumenti", - "pen": "Penna", - "footerIcon": "Icona Piè di pagina", - "tips": "Suggerimenti", - "margin": "Margine", - "padding": "Imbottitura", - "marginLeft": "Margine sinistro", - "marginRight": "Margine destro", - "marginTop": "Margine superiore", - "marginBottom": "Margine inferiore", - "containerHeaderPadding": "Imbottitura della testata", - "containerFooterPadding": "Imbottitura del piè di pagina", - "containerSiderPadding": "Imbottitura Sider", - "containerBodyPadding": "Imbottitura del corpo", - "minWidth": "Larghezza minima", - "aspectRatio": "Rapporto d'aspetto", - "text": "Testo", - "textSize": "Dimensione del testo", - "textWeight": "Peso del testo", - "fontFamily": "Famiglia di caratteri", - "fontStyle": "Stile del carattere", - "backgroundImage": "Immagine di sfondo", - "backgroundImageRepeat": "Ripetizione dello sfondo", - "backgroundImageSize": "Dimensione dello sfondo", - "backgroundImagePosition": "Posizione di fondo", - "backgroundImageOrigin": "Origine dello sfondo", - "headerBackgroundImage": "Immagine di sfondo", - "headerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", - "headerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", - "headerBackgroundImagePosition": "Posizione dell'immagine di sfondo", - "headerBackgroundImageOrigin": "Origine dell'immagine di sfondo", - "footerBackgroundImage": "Immagine di sfondo", - "footerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", - "footerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", - "footerBackgroundImagePosition": "Posizione dell'immagine di sfondo", - "footerBackgroundImageOrigin": "Origine dell'immagine di sfondo", - "rotation": "Rotazione", - "alternateBackground": "Colore di sfondo alternativo", - "headerText": "Colore del testo dell'intestazione", - "labelColor": "Colore dell'etichetta", - "label": "Colore dell'etichetta", - "lineHeight": "Altezza della linea", - "subTitleColor": "Colore del sottotitolo", - "titleText": "Titolo Colore", - "success": "Colore di successo", - "siderBackgroundImage": "Immagine di sfondo di Sider", - "siderBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo di Sider", - "siderBackgroundImageSize": "Dimensioni dell'immagine di sfondo di Sider", - "siderBackgroundImagePosition": "Posizione dell'immagine di sfondo Sider", - "siderBackgroundImageOrigin": "Origine dell'immagine di sfondo Sider", - "activeBackground": "Colore di sfondo attivo", - "labelBackground": "Colore di sfondo dell'etichetta", - - "radiusTip": "Specifica il raggio degli angoli dell'elemento. Esempio: 5px, 50% o 1em.", - "gapTip": "Specifica lo spazio tra righe e colonne in un contenitore a griglia o flessibile. Esempio: 10px, 1rem o 5%.", - "cardRadiusTip": "Definisce il raggio degli angoli per i componenti della carta. Esempio: 10px, 15px.", - "borderWidthTip": "Specifica la larghezza del bordo dell'elemento. Esempio: 1px, 0.5em o sottile.", - "borderStyleTip": "Imposta lo stile del bordo. Esempio: solido, tratteggiato, puntinato o nessuno.", - "marginTip": "Definisce il margine esterno intorno a un elemento. Esempio: 10px, 2em o auto. Può essere combinato: 0px 20px o separato per 4 direzioni: 0px 1px 5px 2px.", - "directionTip": "Specifica la direzione del layout. Esempio: row, column o row-reverse.", - "detailSizeTip": "Definisce la dimensione di dettagli specifici nel layout. Esempio: 10px, 2em o 80%.", - "chartOpacityTip": "Specifica l'opacità del grafico. Esempio: 1 (opaco), 0.5 (50% trasparente).", - "chartBoxShadowTip": "Definisce l'ombra proiettata dal grafico. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3).", - "chartBorderStyleTip": "Imposta lo stile del bordo del grafico. Esempio: solido, tratteggiato, puntinato.", - "chartBorderRadiusTip": "Specifica il raggio degli angoli del bordo del grafico. Esempio: 10px, 20%.", - "chartBorderWidthTip": "Specifica la larghezza del bordo del grafico. Esempio: 2px, 0.5em.", - "chartTextSizeTip": "Specifica la dimensione del testo del grafico. Esempio: 16px, 1em, 120%.", - "chartTextWeightTip": "Specifica lo spessore del testo del grafico. Esempio: normale, grassetto, o 700.", - "chartFontFamilyTip": "Specifica il carattere tipografico del testo del grafico. Esempio: Arial, Helvetica, o 'Times New Roman'.", - "chartFontStyleTip": "Specifica lo stile del carattere del testo del grafico. Esempio: normale, corsivo o obliquo.", - "animationIterationCountTip": "Definisce quante volte deve essere eseguita un'animazione. Esempio: infinito, 1, o 3.", - "opacityTip": "Imposta il livello di trasparenza dell'elemento. Esempio: 1 (opaco), 0.5 (50% trasparente), 0 (invisibile).", - "boxShadowColorTip": "Definisce il colore dell'ombra del box. Esempio: rgba(0, 0, 0, 0.3), #FF5733.", - "chartBackgroundColorTip": "Imposta il colore di sfondo del grafico. Esempio: #FFFFFF, rgba(255, 255, 255, 0.8).", - "chartGradientColorTip": "Definisce i colori del gradiente per lo sfondo del grafico. Esempio: linear-gradient(to right, #ff7e5f, #feb47b).", - "chartShadowColorTip": "Specifica il colore dell'ombra del grafico. Esempio: rgba(0, 0, 0, 0.2), #333333.", - "chartBorderColorTip": "Definisce il colore del bordo del grafico. Esempio: #000000, rgba(0, 0, 0, 0.5).", - "chartTextColorTip": "Imposta il colore del testo del grafico. Esempio: #333333, rgba(51, 51, 51, 1).", - "boxShadowTip": "Definisce l'ombra proiettata da un elemento. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", - "animationDelayTip": "Specifica il ritardo prima dell'inizio dell'animazione. Esempio: 1s, 500ms, 0.", - "animationDurationTip": "Imposta la durata dell'animazione. Esempio: 2s, 3s, 500ms.", - "paddingTip": "Definisce lo spazio interno all'interno di un elemento. Esempio: 10px, 2em, 5%. Può essere combinato: 0px 20px o separato per tutte e 4 le direzioni: 10px 21px 5px 20px.", - "containerHeaderPaddingTip": "Definisce lo spazio interno per l'intestazione del contenitore. Esempio: 10px, 1rem.", - "containerSiderPaddingTip": "Definisce lo spazio interno per la barra laterale del contenitore. Esempio: 8px, 1em.", - "containerFooterPaddingTip": "Definisce lo spazio interno per il piè di pagina del contenitore. Esempio: 12px, 1rem.", - "containerBodyPaddingTip": "Definisce lo spazio interno per il corpo del contenitore. Esempio: 15px, 2em.", - "textSizeTip": "Specifica la dimensione del testo. Esempio: 14px, 1.2em, 110%.", - "textWeightTip": "Definisce lo spessore del testo. Esempio: normale, grassetto, 400.", - "fontFamilyTip": "Specifica il carattere tipografico del testo. Esempio: Arial, Verdana, 'Courier New'.", - "textDecorationTip": "Definisce la decorazione del testo. Esempio: sottolineato, barrato, nessuno.", - "textTransformTip": "Imposta la capitalizzazione del testo. Esempio: maiuscolo, minuscolo, prima lettera maiuscola.", - "fontStyleTip": "Definisce lo stile del carattere del testo. Esempio: normale, corsivo, obliquo.", - "backgroundImageTip": "Specifica l'immagine di sfondo di un elemento. Esempio: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", - "headerBackgroundImageTip": "Specifica l'immagine di sfondo per l'intestazione. Esempio: url('header.jpg').", - "footerBackgroundImageTip": "Specifica l'immagine di sfondo per il piè di pagina. Esempio: url('footer.jpg').", - "backgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo. Esempio: no-repeat, repeat-x, repeat-y.", - "headerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo dell'intestazione. Esempio: repeat-x, no-repeat.", - "footerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo del piè di pagina. Esempio: repeat-y, no-repeat.", - "backgroundImageSizeTip": "Definisce la dimensione dell'immagine di sfondo. Esempio: cover, contain, 50% 50%.", - "backgroundImagePositionTip": "Imposta la posizione dell'immagine di sfondo. Esempio: center, top right, 10% 20%.", - "backgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo. Esempio: padding-box, border-box, content-box.", - "headerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo dell'intestazione. Esempio: padding-box, border-box, content-box.", - "footerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo del piè di pagina. Esempio: padding-box, border-box, content-box.", - "rotationTip": "Specifica l'angolo di rotazione dell'elemento. Esempio: 45deg, 90deg, -180deg.", - "lineHeightTip": "Definisce l'altezza di una riga di testo. Esempio: 1.5, 2, 120%." - - }, - "export": { - ...en.export, - - "hiddenDesc": "Se vero, il componente è nascosto", - "disabledDesc": "Se vero, il componente è disattivato e non interattivo.", - "visibleDesc": "Se vero, il componente è visibile", - "inputValueDesc": "Valore attuale dell'ingresso", - "invalidDesc": "Indica se il valore non è valido", - "placeholderDesc": "Testo segnaposto quando non è impostato alcun valore", - "requiredDesc": "Se vero, è richiesto un valore valido", - "submitDesc": "Invia il modulo", - "richTextEditorValueDesc": "Valore attuale dell'editor", - "richTextEditorReadOnlyDesc": "Se true, l'editor è di sola lettura", - "richTextEditorHideToolBarDesc": "Se vero, la barra degli strumenti viene nascosta", - "jsonEditorDesc": "Dati JSON correnti", - "sliderValueDesc": "Valore attualmente selezionato", - "sliderMaxValueDesc": "Valore massimo del cursore", - "sliderMinValueDesc": "Valore minimo del cursore", - "sliderStartDesc": "Valore del punto di partenza selezionato", - "sliderEndDesc": "Valore del punto finale selezionato", - "ratingValueDesc": "Valutazione attualmente selezionata", - "ratingMaxDesc": "Valore nominale massimo", - "datePickerValueDesc": "Data attualmente selezionata", - "datePickerFormattedValueDesc": "Formattazione della data selezionata", - "datePickerTimestampDesc": "Timestamp della data selezionata", - "dateRangeStartDesc": "Data di inizio dell'intervallo", - "dateRangeEndDesc": "Data di fine dell'intervallo", - "dateRangeStartTimestampDesc": "Timestamp della data di inizio", - "dateRangeEndTimestampDesc": "Timestamp della data finale", - "dateRangeFormattedValueDesc": "Intervallo di date formattato", - "dateRangeFormattedStartValueDesc": "Data di inizio formattata", - "dateRangeFormattedEndValueDesc": "Data finale formattata", - "timePickerValueDesc": "L'ora attualmente selezionata", - "timePickerFormattedValueDesc": "Formattazione dell'ora selezionata", - "timeRangeStartDesc": "Ora di inizio dell'intervallo", - "timeRangeEndDesc": "Ora di fine dell'intervallo", - "timeRangeFormattedValueDesc": "Intervallo di tempo formattato", - "timeRangeFormattedStartValueDesc": "Ora di inizio formattata", - "timeRangeFormattedEndValueDesc": "Ora finale formattata", - "timeZone": "Fuso orario", - "timeZoneDesc": "Fuso orario della data selezionata", - }, - "validationDesc": { - ...en.validationDesc, - - "email": "Inserire un indirizzo e-mail valido", - "url": "Inserire un URL valido", - "regex": "Corrispondere al modello specificato", - "maxLength": "Troppi caratteri, corrente: {length}, massimo: {maxLength}", - "minLength": "Caratteri insufficienti, corrente: {length}, minimo: {minLength}", - "maxValue": "Il valore supera il massimo, corrente: {value}, massimo: {max}", - "minValue": "Valore inferiore al minimo, corrente: {value}, minimo: {min}", - "maxTime": "Il tempo supera il massimo, corrente: {time}, massimo: {maxTime}", - "minTime": "Tempo inferiore al minimo, corrente: {time}, minimo: {minTime}", - "maxDate": "La data supera il massimo, attuale: {date}, massimo: {maxDate}", - "minDate": "Data inferiore al minimo, attuale: {date}, minimo: ___POSSESSORE1___", - }, - "query": { - ...en.query, - - "noQueries": "Non sono disponibili query di dati.", - "queryTutorialButton": "Visualizzare i documenti di {value}", - "datasource": "Le vostre fonti di dati", - "newDatasource": "Nuova fonte di dati", - "generalTab": "Generale", - "notificationTab": "Notifica", - "advancedTab": "Avanzato", - "showFailNotification": "Mostra notifica in caso di fallimento", - "failCondition": "Condizioni di guasto", - "failConditionTooltip1": "Personalizzare le condizioni di guasto e le relative notifiche.", - "failConditionTooltip2": "Se una condizione risulta vera, la query viene contrassegnata come fallita e viene attivata la notifica corrispondente.", - "showSuccessNotification": "Mostra la notifica di successo", - "successMessageLabel": "Messaggio di successo", - "successMessage": "Esecuzione riuscita", - "notifyDuration": "Durata", - "notifyDurationTooltip": "Durata della notifica. L'unità di tempo può essere 's' (secondo, valore predefinito) o 'ms' (millisecondo). Il valore predefinito è {default}s. Il massimo è {max}s.", - "successMessageWithName": "{name} esecuzione riuscita", - "failMessageWithName": "{name} esecuzione fallita: {result}", - "showConfirmationModal": "Mostra la maschera di conferma prima dell'esecuzione", - "confirmationMessageLabel": "Messaggio di conferma", - "confirmationMessage": "È sicuro di voler eseguire questa query di dati?", - "newQuery": "New Data Query", - "newFolder": "Nuova cartella", - "recentlyUsed": "Usato di recente", - "folder": "Cartella", - "folderNotEmpty": "La cartella non è vuota", - "dataResponder": "Data Responder", - "tempState": "Stato temporaneo", - "transformer": "Trasformatore", - "quickRestAPI": "Query REST", - "quickStreamAPI": "Interrogazione del flusso", - "quickGraphql": "Query GraphQL", - "lowcoderAPI": "API Lowcoder", - "executeJSCode": "Eseguire il codice JavaScript", - "importFromQueryLibrary": "Importazione da Query Library", - "importFromFile": "Importazione da file", - "triggerType": "Attivato quando...", - "triggerTypeAuto": "Quando gli input cambiano o dopo il caricamento dell'applicazione (pagina)", - "triggerTypePageLoad": "Dopo il caricamento dell'applicazione (pagina)", - "triggerTypeManual": "Solo quando lo attivi manualmente", - "triggerTypeInputChange": "Quando cambiano gli input", - "triggerTypeQueryExec": "Dopo l'esecuzione della query", - "triggerTypeTimeout": "Dopo il caricamento dell'applicazione (pagina) e il timeout", - "delayTime": "Tempo di ritardo", - "chooseDataSource": "Scegliere l'origine dei dati", - "method": "Metodo", - "updateExceptionDataSourceTitle": "Aggiornamento dell'origine dati non funzionante", - "updateExceptionDataSourceContent": "Aggiornare la query seguente con la stessa origine dati in errore:", - "update": "Aggiornamento", - "disablePreparedStatement": "Disabilitare le dichiarazioni preparate", - "disablePreparedStatementTooltip": "La disabilitazione delle istruzioni preparate può generare SQL dinamico, ma aumenta il rischio di SQL injection.", - "timeout": "Timeout dopo", - "timeoutTooltip": "Unità predefinita: ms. Unità di input supportate: ms, s. Valore predefinito: {defaultSeconds} secondi. Valore massimo: {maxSeconds} secondi. Ad esempio, 300 (cioè 300 ms), 800 ms, 5 s.", - "periodic": "Eseguire periodicamente questa query di dati", - "periodicTime": "Periodo", - "periodicTimeTooltip": "Periodo tra esecuzioni successive. Unità predefinita: ms. Unità di input supportate: ms, s. Valore minimo: 100 ms. L'esecuzione periodica è disabilitata per valori inferiori a 100ms. Ad esempio, 300 (cioè 300ms), 800ms, 5s.", - "cancelPrevious": "Ignorare i risultati delle precedenti esecuzioni non completate", - "cancelPreviousTooltip": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e queste esecuzioni ignorate non attivano l'elenco di eventi della query.", - "dataSourceStatusError": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e le esecuzioni ignorate non attivano l'elenco di eventi della query.", - "success": "Il successo", - "fail": "Fallimento", - "successDesc": "Attivato quando l'esecuzione ha successo", - "failDesc": "Attivato quando l'esecuzione fallisce", - "fixedDelayError": "Query non eseguita", - "execSuccess": "Esecuzione riuscita", - "execFail": "Esecuzione fallita", - "execIgnored": "I risultati di questa interrogazione sono stati ignorati", - "deleteSuccessMessage": "Eliminato con successo. È possibile utilizzare {undoKey} per annullare l'operazione.", - "dataExportDesc": "Dati ottenuti dalla query corrente", - "codeExportDesc": "Codice di stato dell'interrogazione corrente", - "successExportDesc": "Se la query corrente è stata eseguita con successo", - "messageExportDesc": "Informazioni restituite dalla query corrente", - "extraExportDesc": "Altri dati nella query corrente", - "isFetchingExportDesc": "È la query corrente nella richiesta", - "runTimeExportDesc": "Tempo di esecuzione della query corrente (ms)", - "latestEndTimeExportDesc": "Ultimo tempo di funzionamento", - "triggerTypeExportDesc": "Tipo di innesco", - "chooseResource": "Scegliere una risorsa", - "createDataSource": "Creare una nuova origine dati", - "editDataSource": "Modifica", - "datasourceName": "Nome", - "datasourceNameRuleMessage": "Inserire un nome di origine dati", - "generalSetting": "Impostazioni generali", - "advancedSetting": "Impostazioni avanzate", - "port": "Porto", - "portRequiredMessage": "Inserire una porta", - "portErrorMessage": "Inserire una porta corretta", - "connectionType": "Tipo di connessione", - "regular": "Regolare", - "host": "Ospite", - "hostRequiredMessage": "Inserire un nome di dominio host o un indirizzo IP", - "userName": "Nome utente", - "password": "Password", - "encryptedServer": "-------- Crittografato sul lato server --------", - "uriRequiredMessage": "Inserire un URI", - "urlRequiredMessage": "Inserire un URL", - "uriErrorMessage": "Inserire un URI corretto", - "urlErrorMessage": "Inserire un URL corretto", - "httpRequiredMessage": "Inserire http:// o https://", - "databaseName": "Nome del database", - "databaseNameRequiredMessage": "Inserire il nome del database", - "useSSL": "Utilizzare SSL", - "userNameRequiredMessage": "Inserire il proprio nome", - "passwordRequiredMessage": "Inserire la password", - "authentication": "Autenticazione", - "authenticationType": "Tipo di autenticazione", - "sslCertVerificationType": "Verifica del certificato SSL", - "sslCertVerificationTypeDefault": "Verifica della certificazione CA", - "sslCertVerificationTypeSelf": "Verifica della certificazione autofirmata", - "sslCertVerificationTypeDisabled": "Disabili", - "selfSignedCert": "Certificato autofirmato", - "selfSignedCertRequireMsg": "Inserire il proprio certificato", - "enableTurnOffPreparedStatement": "Abilita l'alternanza delle dichiarazioni preparate per le query", - "enableTurnOffPreparedStatementTooltip": "È possibile attivare o disattivare le istruzioni preparate nella scheda Avanzate della query.", - "serviceName": "Nome del servizio", - "serviceNameRequiredMessage": "Inserire il nome del servizio", - "useSID": "Utilizzare il SID", - "connectSuccessfully": "Connessione riuscita", - "saveSuccessfully": "Salvato con successo", - "database": "Database", - "cloudHosting": "Lowcoder ospitato nel cloud non può accedere ai servizi locali utilizzando 127.0.0.1 o localhost. Provare a collegarsi a fonti di dati della rete pubblica o utilizzare un reverse proxy per i servizi privati.", - "notCloudHosting": "Per la distribuzione ospitata da docker, Lowcoder utilizza reti ponte, quindi 127.0.0.1 e localhost non sono validi come indirizzi host. Per accedere alle fonti di dati della macchina locale, fare riferimento a", - "howToAccessHostDocLink": "Come accedere all'API/DB dell'host", - "returnList": "Ritorno", - "chooseDatasourceType": "Scegliere il tipo di sorgente dati", - "viewDocuments": "Visualizza i documenti", - "testConnection": "Collegamento di prova", - "save": "Risparmiare", - "whitelist": "Elenco dei permessi", - "whitelistTooltip": "Aggiungete gli indirizzi IP di Lowcoder all'elenco dei permessi della vostra fonte di dati, se necessario.", - "address": "Indirizzo:", - "nameExists": "Nome {name} già esistente", - "jsQueryDocLink": "Informazioni sulla query JavaScript", - "dynamicDataSourceConfigLoadingText": "Caricamento configurazione sorgente dati extra...", - "dynamicDataSourceConfigErrText": "Impossibile caricare la configurazione della fonte di dati extra.", - "retry": "Riprova", - "categoryDatabase": "Database", - "categoryBigdata": "Big Data", - "categoryAi": "IA", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Sviluppo App", - "categoryWorkflow": "Flusso di lavoro", - "categoryMessaging": "Messaggistica", - "categoryAssets": "Asset & Archiviazione", - "categoryProjectManagement": "Gestione Progetti", - "categoryCrm": "CRM", - "categoryEcommerce": "E-commerce", - "categoryWebscrapers": "Web Scrapers & Open Data", - "categoryDocumentHandling": "Generazione Report e Documenti", - "categoryRPA": "Automazione Robotica dei Processi", - "componentsUsingQueryTitle": "Utilizzo della Query", - "componentsUsingQuery": "Dove viene utilizzata questa query", - "variables": "Variabili" - }, - "sqlQuery": { - ...en.sqlQuery, - - "keyValuePairs": "Coppie chiave-valore", - "object": "Oggetto", - "allowMultiModify": "Consentire la modifica di più righe", - "allowMultiModifyTooltip": "Se selezionato, tutte le righe che soddisfano le condizioni vengono gestite. Altrimenti, viene gestita solo la prima riga che soddisfa le condizioni.", - "array": "Array", - "insertList": "Inserisci elenco", - "insertListTooltip": "Valori inseriti quando non esistono", - "filterRule": "Regola del filtro", - "updateList": "Elenco degli aggiornamenti", - "updateListTooltip": "I valori aggiornati in corso d'opera possono essere sovrascritti dagli stessi valori dell'elenco di inserimento.", - "sqlMode": "Modalità SQL", - "guiMode": "Modalità GUI", - "operation": "Funzionamento", - "insert": "Inserire", - "upsert": "Inserire, ma aggiornare se c'è un conflitto", - "update": "Aggiornamento", - "delete": "Cancellare", - "bulkInsert": "Inserto sfuso", - "bulkUpdate": "Aggiornamento di massa", - "table": "Tabella", - "primaryKeyColumn": "Colonna chiave primaria", - }, - "EsQuery": { - ...en.EsQuery, - - "rawCommand": "Comando grezzo", - "queryTutorialButton": "Visualizza i documenti API Elasticsearch", - "request": "Richiesta", - }, - "googleSheets": { - ...en.googleSheets, - - "rowIndex": "Indice delle righe", - "spreadsheetId": "ID del foglio di calcolo", - "sheetName": "Nome del foglio", - "readData": "Leggi i dati", - "appendData": "Aggiungi riga", - "updateData": "Fila di aggiornamento", - "deleteData": "Elimina riga", - "clearData": "Fila libera", - "serviceAccountRequireMessage": "Inserire il proprio account di servizio", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Ordinamento", - "sortPlaceholder": "Nome", - }, - "queryLibrary": { - ...en.queryLibrary, - - "export": "Esportazione in JSON", - "noInput": "La query corrente non ha input", - "inputName": "Nome", - "inputDesc": "Descrizione", - "emptyInputs": "Nessun ingresso", - "clickToAdd": "Aggiungi", - "chooseQuery": "Scegliere la query", - "viewQuery": "Visualizza la domanda", - "chooseVersion": "Scegliere la versione", - "latest": "Ultime novità", - "publish": "Pubblicare", - "historyVersion": "Storia Versione", - "deleteQueryLabel": "Eliminare la query", - "deleteQueryContent": "La query non può essere recuperata dopo l'eliminazione. Cancellare la query?", - "run": "Correre", - "readOnly": "Solo lettura", - "exit": "Uscita", - "recoverAppSnapshotContent": "Ripristinare la query corrente alla versione {version}.", - "searchPlaceholder": "Query di ricerca", - "allQuery": "All Queries", - "deleteQueryTitle": "Eliminare la query", - "unnamed": "Senza nome", - "publishNewVersion": "Pubblicare la nuova versione", - "publishSuccess": "Pubblicato con successo", - "version": "Versione", - "desc": "Descrizione", - }, - "snowflake": { - ...en.snowflake, - - "accountIdentifierTooltip": "Vedi", - "extParamsTooltip": "Configurare altri parametri di connessione", - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - - "queryOrgUsers": "Interrogare gli utenti dell'area di lavoro", - }, - "redisQuery": { - ...en.redisQuery, - - "rawCommand": "Comando grezzo", - "command": "Comando", - "queryTutorial": "Visualizza la documentazione sui comandi di Redis", - }, - "httpQuery": { - ...en.httpQuery, - - "bodyFormDataTooltip": "Se si seleziona {type}, il formato del valore deve essere {object}. Esempio: {example}", - "text": "Testo", - "file": "File", - "extraBodyTooltip": "I valori chiave nell'Extra Body saranno aggiunti al body con i tipi di dati JSON o Form.", - "forwardCookies": "Biscotti di andata", - "forwardAllCookies": "Inoltrare tutti i cookie", - }, - "smtpQuery": { - ...en.smtpQuery, - - "attachment": "Allegato", - "attachmentTooltip": "Può essere utilizzato con il componente di caricamento file, i dati devono essere convertiti in:", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Trasmettitore", - "recipient": "Destinatario", - "carbonCopy": "Copia carbone", - "blindCarbonCopy": "Copia carbone cieca", - "subject": "Oggetto", - "content": "Content", - "contentTooltip": "Supporta l'inserimento di testo o HTML", - }, - "uiCompCategory": { - ...en.uiCompCategory, - - "dashboards": "Cruscotti e reportistica", - "layout": "Layout e navigazione", - "forms": "Raccolta dati e moduli", - "collaboration": "Riunioni e collaborazione", - "projectmanagement": "Gestione del progetto", - "scheduling": "Calendario e programmazione", - "documents": "Gestione di documenti e file", - "itemHandling": "Gestione dell'articolo e della firma", - "multimedia": "Multimedia e animazione", - "integration": "Integrazione ed estensione", - }, - "uiComp": { - ...en.uiComp, - - "autoCompleteCompName": "Auto Complete", - "autoCompleteCompDesc": "Un campo di immissione che fornisce suggerimenti durante la digitazione, migliorando l'esperienza dell'utente e la precisione.", - "autoCompleteCompKeywords": "suggerimenti, completamento automatico, digitazione, input", - "inputCompName": "Ingresso", - "inputCompDesc": "Un campo di input di testo di base che consente agli utenti di inserire e modificare il testo.", - "inputCompKeywords": "testo, input, campo, modifica", - "textAreaCompName": "Area di testo", - "textAreaCompDesc": "Un input di testo a più righe per contenuti più lunghi, come commenti o descrizioni.", - "textAreaCompKeywords": "multilinea, textarea, input, testo", - "passwordCompName": "Password", - "passwordCompDesc": "Un campo sicuro per l'inserimento della password, che maschera i caratteri per garantire la privacy.", - "passwordCompKeywords": "password, sicurezza, input, nascosto", - "richTextEditorCompName": "Editor di testo ricco", - "richTextEditorCompDesc": "Un editor di testo avanzato che supporta ricche opzioni di formattazione come grassetto, corsivo ed elenchi.", - "richTextEditorCompKeywords": "editor, testo, formattazione, contenuto ricco", - "numberInputCompName": "Numero Ingresso", - "numberInputCompDesc": "Un campo specifico per l'immissione di dati numerici, con controlli per l'incremento e il decremento dei valori.", - "numberInputCompKeywords": "numero, ingresso, incremento, decremento", - "sliderCompName": "Cursore", - "sliderCompDesc": "Un componente grafico a scorrimento per selezionare un valore o un intervallo all'interno di una scala definita.", - "sliderCompKeywords": "cursore, intervallo, ingresso, grafico", - "rangeSliderCompName": "Cursore di gamma", - "rangeSliderCompDesc": "Un cursore a doppia maniglia per selezionare un intervallo di valori, utile per filtrare o impostare limiti.", - "rangeSliderCompKeywords": "gamma, cursore, doppia impugnatura, filtro", - "ratingCompName": "Valutazione", - "ratingCompDesc": "Un componente per catturare le valutazioni degli utenti, visualizzate come stelle.", - "ratingCompKeywords": "valutazione, stelle, feedback, input", - "switchCompName": "Interruttore", - "switchCompDesc": "Un interruttore a levetta per decisioni di tipo on/off o sì/no.", - "switchCompKeywords": "a levetta, interruttore, on/off, controllo", - "selectCompName": "Selezionare", - "selectCompDesc": "Un menu a discesa per selezionare un elenco di opzioni.", - "selectCompKeywords": "a discesa, selezionare, opzioni, menu", - "multiSelectCompName": "Multiselezione", - "multiSelectCompDesc": "Un componente che consente di selezionare più elementi da un elenco a discesa.", - "multiSelectCompKeywords": "multiselezione, multipla, a discesa, scelte", - "cascaderCompName": "Cascader", - "cascaderCompDesc": "Una tendina a più livelli per la selezione gerarchica dei dati, come ad esempio la selezione di una località.", - "cascaderCompKeywords": "a cascata, gerarchico, a discesa, a livelli", - "checkboxCompName": "Casella di controllo", - "checkboxCompDesc": "Una casella di controllo standard per le opzioni che possono essere selezionate o deselezionate.", - "checkboxCompKeywords": "casella di controllo, opzioni, selezionare, alternare", - "radioCompName": "Radio", - "radioCompDesc": "Pulsanti di opzione per selezionare un'opzione da un insieme, dove è consentita una sola scelta.", - "radioCompKeywords": "radio, pulsanti, selezione, scelta singola", - "segmentedControlCompName": "Controllo segmentato", - "segmentedControlCompDesc": "Un controllo con opzioni segmentate per passare rapidamente da una scelta all'altra.", - "segmentedControlCompKeywords": "segmentato, controllo, selezione, opzioni", - "stepControlCompName": "Controllo dei passi", - "stepControlCompDesc": "Un controllo con opzioni di passo per offrire passi guidati visivamente per applicazioni come moduli o procedure guidate.", - "stepControlCompKeywords": "passi, controllo, selezione, opzioni", - "fileUploadCompName": "Caricamento dei file", - "fileUploadCompDesc": "Un componente per il caricamento dei file, con supporto per il drag-and-drop e la selezione dei file.", - "fileUploadCompKeywords": "file, caricamento, trascinamento, selezione", - "dateCompName": "Data", - "dateCompDesc": "Un componente per la selezione di date da un'interfaccia di calendario.", - "dateCompKeywords": "data, picker, calendario, selezione", - "dateRangeCompName": "Intervallo di date", - "dateRangeCompDesc": "Un componente per selezionare un intervallo di date, utile per i sistemi di prenotazione o per i filtri.", - "dateRangeCompKeywords": "daterange, selezionare, prenotare, filtrare", - "timeCompName": "Tempo", - "timeCompDesc": "Un componente di selezione dell'ora per scegliere orari specifici della giornata.", - "timeCompKeywords": "tempo, picker, selezionare, orologio", - "timeRangeCompName": "Intervallo di tempo", - "timeRangeCompDesc": "Un componente per la selezione di un intervallo di tempo, spesso utilizzato nelle applicazioni di pianificazione.", - "timeRangeCompKeywords": "timerange, selezionare, programmazione, durata", - "buttonCompName": "Pulsante del modulo", - "buttonCompDesc": "Un componente versatile per l'invio di moduli, l'attivazione di azioni o la navigazione.", - "buttonCompKeywords": "pulsante, invio, azione, navigazione", - "meetingControlCompName": "Icon Button", - "meetingCompDesc": "Un pulsante per controllare funzioni come l'avvio, la fine, il silenziamento o la condivisione.", - "meetingCompKeywords": "controllo, pulsante, inizio, fine", - "linkCompName": "Collegamento a", - "linkCompDesc": "Un componente di visualizzazione di collegamenti ipertestuali per la navigazione o il collegamento a risorse esterne.", - "linkCompKeywords": "link, collegamento ipertestuale, navigazione, esterno", - "scannerCompName": "Scanner", - "scannerCompDesc": "Un componente per la scansione di codici a barre, codici QR e altri dati simili.", - "scannerCompKeywords": "scanner, codice a barre, codice QR, scansione", - "dropdownCompName": "A discesa", - "dropdownCompDesc": "Un menu a discesa per visualizzare in modo compatto un elenco di opzioni.", - "dropdownCompKeywords": "a discesa, menu, opzioni, selezionare", - "toggleButtonCompName": "Pulsante di commutazione", - "toggleButtonCompDesc": "Un pulsante che può passare tra due stati o opzioni.", - "toggleButtonCompKeywords": "toggle, pulsante, interruttore, stato", - "textCompName": "Visualizzazione del testo", - "textCompDesc": "Un semplice componente per visualizzare contenuti testuali statici o dinamici comprensivi di formattazione Markdown.", - "textCompKeywords": "testo, visualizzazione, statico, dinamico", - "tableCompName": "Tabella", - "tableCompDesc": "Un componente ricco di tabelle per la visualizzazione di dati in un formato tabellare strutturato, con opzioni di ordinamento e filtraggio, visualizzazione di dati ad albero e righe estensibili.", - "tableCompKeywords": "tabella, dati, ordinamento, filtraggio", - "imageCompName": "Immagine", - "imageCompDesc": "Un componente per la visualizzazione di immagini, che supporta vari formati basati su URI o dati Base64.", - "imageCompKeywords": "immagine, visualizzazione, media, Base64", - "progressCompName": "Progressi", - "progressCompDesc": "Indicatore visivo di avanzamento, in genere utilizzato per mostrare lo stato di completamento di un'attività.", - "progressCompKeywords": "progresso, indicatore, stato, compito", - "progressCircleCompName": "Cerchio del progresso", - "progressCircleCompDesc": "Un indicatore di avanzamento circolare, spesso utilizzato per il caricamento di stati o di attività a tempo.", - "progressCircleCompKeywords": "cerchio, progresso, indicatore, caricamento", - "fileViewerCompName": "Visualizzatore di file", - "fileViewerCompDesc": "Un componente per la visualizzazione di vari tipi di file, compresi documenti e immagini.", - "fileViewerCompKeywords": "file, visualizzatore, documento, immagine", - "dividerCompName": "Divisore", - "dividerCompDesc": "Un componente divisorio visivo, usato per separare il contenuto o le sezioni in un layout.", - "dividerCompKeywords": "divisore, separatore, layout, design", - "qrCodeCompName": "Codice QR", - "qrCodeCompDesc": "Un componente per la visualizzazione di codici QR, utile per la scansione rapida e il trasferimento di informazioni.", - "qrCodeCompKeywords": "Codice QR, scansione, codice a barre, informazioni", - "formCompName": "Forma", - "formCompDesc": "Un componente contenitore per costruire moduli strutturati con vari tipi di input.", - "formCompKeywords": "modulo, input, contenitore, struttura", - "jsonSchemaFormCompName": "Schema JSON", - "jsonSchemaFormCompDesc": "Un componente di modulo dinamico generato sulla base di uno schema JSON.", - "jsonSchemaFormCompKeywords": "JSON, schema, modulo, dinamico", - "containerCompName": "Contenitore", - "containerCompDesc": "Un contenitore generico per il layout e l'organizzazione degli elementi dell'interfaccia utente.", - "containerCompKeywords": "contenitore, layout, organizzazione, UI", - "floatTextContainerCompName": "Contenitore di testo fluttuante", - "floatTextContainerCompDesc": "Componente Contenitore di testo fluttuante", - "floatTextContainerCompKeywords": "contenitore, layout, testo, flusso", - "collapsibleContainerCompName": "Contenitore pieghevole", - "collapsibleContainerCompDesc": "Un contenitore che può essere espanso o chiuso, ideale per gestire la visibilità dei contenuti.", - "collapsibleContainerCompKeywords": "pieghevole, contenitore, espandere, collassare", - "tabbedContainerCompName": "Contenitore a schede", - "tabbedContainerCompDesc": "Un contenitore con navigazione a schede per organizzare i contenuti in pannelli separati.", - "tabbedContainerCompKeywords": "a schede, contenitore, navigazione, pannelli", - "pageLayoutCompName": "Layout di pagina", - "pageLayoutCompDesc": "Un contenitore che offre la possibilità di creare un layout con intestazione, intestazione, piè di pagina e aree di contenuto principale.", - "pageLayoutCompKeywords": "layout, contenitore, navigazione, pagine", - "modalCompName": "Modale", - "modalCompDesc": "Un componente modale a comparsa per la visualizzazione di contenuti, avvisi o moduli a fuoco.", - "modalCompKeywords": "modale, popup, avviso, modulo", - "listViewCompName": "Vista elenco", - "listViewCompDesc": "Un componente per la visualizzazione di un elenco di elementi o dati, in cui è possibile inserire altri componenti. Come un ripetitore.", - "listViewCompKeywords": "elenco, vista, visualizzazione, ripetitore", - "gridCompName": "Griglia", - "gridCompDesc": "Un componente griglia flessibile per creare layout strutturati con righe e colonne, come estensione del componente List View.", - "gridCompKeywords": "griglia, layout, righe, colonne", - "navigationCompName": "Navigazione", - "navigationCompDesc": "Un componente di navigazione per creare menu, briciole di pane o schede per la navigazione del sito.", - "navigationCompKeywords": "navigazione, menu, briciole di pane, schede", - "iframeCompName": "IFrame", - "iframeCompDesc": "Un componente frame inline per incorporare pagine web e applicazioni o contenuti esterni all'interno dell'applicazione.", - "iframeCompKeywords": "iframe, embed, pagina web, contenuto", - "customCompName": "Componente personalizzato", - "customCompDesc": "Un componente flessibile e programmabile per creare elementi dell'interfaccia utente unici e definiti dall'utente, adatti alle vostre esigenze specifiche.", - "customCompKeywords": "personalizzato, definito dall'utente, flessibile, programmabile", - "moduleCompName": "Modulo", - "moduleCompDesc": "Utilizzate i moduli per creare micro-app progettate per incapsulare funzionalità o caratteristiche specifiche. I moduli possono essere incorporati e riutilizzati in tutte le applicazioni.", - "moduleCompKeywords": "modulo, micro-app, funzionalità, riutilizzabile", - "jsonExplorerCompName": "Esploratore JSON", - "jsonExplorerCompDesc": "Un componente per esplorare visivamente e interagire con le strutture di dati JSON.", - "jsonExplorerCompKeywords": "JSON, esploratore, dati, struttura", - "jsonEditorCompName": "JSON Editor", - "jsonEditorCompDesc": "Un componente editor per la creazione e la modifica di dati JSON con convalida ed evidenziazione della sintassi.", - "jsonEditorCompKeywords": "JSON, editor, modifica, convalida", - "treeCompName": "Albero", - "treeCompDesc": "Un componente di struttura ad albero per la visualizzazione di dati gerarchici, come file system o organigrammi.", - "treeCompKeywords": "albero, gerarchico, dati, struttura", - "treeSelectCompName": "Selezione dell'albero", - "treeSelectCompDesc": "Un componente di selezione che presenta le opzioni in un formato gerarchico ad albero, consentendo selezioni organizzate e annidate.", - "treeSelectCompKeywords": "albero, selezionare, gerarchico, annidato", - "audioCompName": "Audio", - "audioCompDesc": "Un componente per incorporare contenuti audio, con controlli per la riproduzione e la regolazione del volume.", - "audioCompKeywords": "audio, riproduzione, suono, musica", - "videoCompName": "Video", - "videoCompDesc": "Un componente multimediale per incorporare e riprodurre contenuti video, con supporto per vari formati.", - "videoCompKeywords": "video, multimedia, riproduzione, incorporazione", - "drawerCompName": "Cassetto", - "drawerCompDesc": "Un componente a pannello scorrevole che può essere utilizzato per la navigazione o la visualizzazione di contenuti aggiuntivi, in genere emergendo dal bordo dello schermo.", - "drawerCompKeywords": "cassetto, scorrevole, pannello, navigazione", - "chartCompName": "Grafico", - "chartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", - "chartCompKeywords": "grafico, grafico, dati, visualizzazione", - "carouselCompName": "Carosello di immagini", - "carouselCompDesc": "Un componente carosello rotante per mostrare immagini, banner o slide di contenuto.", - "carouselCompKeywords": "carosello, immagini, rotazione, vetrina", - "imageEditorCompName": "Editor di immagini", - "imageEditorCompDesc": "Un componente interattivo per l'editing e la manipolazione delle immagini, che offre vari strumenti e filtri.", - "imageEditorCompKeywords": "immagine, editor, manipolazione, strumenti", - "mermaidCompName": "Grafico delle sirene", - "mermaidCompDesc": "Un componente per il rendering di diagrammi complessi e diagrammi di flusso basati sulla sintassi Mermaid.", - "mermaidCompKeywords": "sirena, grafici, diagrammi, diagrammi di flusso", - "calendarCompName": "Calendario", - "calendarCompDesc": "Un componente calendario per la visualizzazione di date ed eventi, con opzioni di visualizzazione per mese, settimana o giorno.", - "calendarCompKeywords": "calendario, date, eventi, programmazione", - "signatureCompName": "Firma", - "signatureCompDesc": "Un componente per l'acquisizione di firme digitali, utile per i processi di approvazione e verifica.", - "signatureCompKeywords": "firma, digitale, approvazione, verifica", - "jsonLottieCompName": "Animazione Lottie", - "jsonLottieCompDesc": "Un componente per la visualizzazione delle animazioni Lottie, che fornisce animazioni leggere e scalabili basate su dati JSON.", - "jsonLottieCompKeywords": "lottie, animazione, JSON, scalabile", - "timelineCompName": "Linea temporale", - "timelineCompDesc": "Un componente per la visualizzazione di eventi o azioni in ordine cronologico, rappresentati visivamente lungo una linea temporale lineare.", - "timelineCompKeywords": "linea del tempo, eventi, cronologico, storia", - "commentCompName": "Come", - "commentCompDesc": "Un componente per l'aggiunta e la visualizzazione dei commenti degli utenti, che supporta le risposte in thread e l'interazione con gli utenti.", - "commentCompKeywords": "commento, discussione, interazione con l'utente, feedback", - "mentionCompName": "Menzione", - "mentionCompDesc": "Un componente che supporta la menzione di utenti o tag all'interno di contenuti testuali, tipicamente utilizzato nei social media o nelle piattaforme collaborative.", - "mentionCompKeywords": "menzione, tag, utente, social media", - "responsiveLayoutCompName": "Layout reattivo", - "responsiveLayoutCompDesc": "Un componente di layout progettato per adattarsi e rispondere alle diverse dimensioni dello schermo e dei dispositivi, garantendo un'esperienza utente coerente.", - "responsiveLayoutCompKeywords": "responsive, layout, adattarsi, dimensioni dello schermo", - "iconCompName": "Icone", - "iconCompDesc": "Utilizzate varie icone per migliorare l'aspetto visivo e l'esperienza utente della vostra applicazione.", - "iconCompKeywords": "Icone, pittogrammi, simboli, forme", - "tourCompName": "Tour", - "tourCompDesc": "Un tour del prodotto per guidare gli utenti.", - "tourCompKeywords": "tour, tour del prodotto, walkthrough, walkthrough interattivo", - "hillchartCompName": "Grafico della collina", - "hillchartCompDesc": "Un componente di visualizzazione che permette di visualizzare i dati sullo stato della gestione del progetto in un formato di grafico a colline.", - "hillchartCompKeywords": "gestione del progetto, diagramma a colline, visualizzazione, dati", - "openLayersGeoMapCompName": "Geomappa Openlayers", - "openLayersGeoMapCompDesc": "Un componente per la visualizzazione di mappe interattive utilizzando OpenLayers, con il supporto di vari livelli e caratteristiche della mappa.", - "openLayersGeoMapCompKeywords": "openlayers, mappa geografica, interattiva, strati di mappa", - "chartsGeoMapCompName": "Grafici geografici", - "chartsGeoMapCompDesc": "Un componente per la visualizzazione di dati geografici su mappe interattive con grafici dinamici", - "chartsGeoMapCompKeywords": "mappa geografica, grafici, visualizzazione, dati geografici", - "bpmnEditorCompName": "Editor BPMN", - "bpmnEditorCompDesc": "Un componente per la visualizzazione, la creazione e la modifica di diagrammi BPMN, che supporta vari elementi e funzioni BPMN.", - "bpmnEditorCompKeywords": "BPMN, editor, diagrammi, elementi, flussi di lavoro", - "turnstileCaptchaCompName": "Captcha a tornello", - "turnstileCaptchaCompDesc": "Un componente captcha per verificare gli utenti contro i bot.", - "turnstileCaptchaCompKeywords": "captcha, verifica, identità, sicurezza", - "pivotTableCompName": "Tabella pivot", - "pivotTableCompDesc": "Uno strumento di sintesi e analisi dei dati per organizzare e aggregare i dati in formato tabellare.", - "pivotTableCompKeywords": "Tabella pivot, dati, analisi, aggregazione", - "funnelChartCompName": "Grafico a imbuto", - "funnelChartCompDesc": "Uno strumento di visualizzazione che permette di visualizzare la progressiva riduzione dei dati attraverso le fasi.", - "funnelChartCompKeywords": "grafico a imbuto, vendite, conversioni, processo", - "gaugeChartCompName": "Grafico del calibro", - "gaugeChartCompDesc": "Un grafico che visualizza i dati come lettura su un quadrante, utile per indicare lo stato o il livello di qualcosa.", - "gaugeChartCompKeywords": "grafico di misura, metriche, prestazioni, stato", - "sankeyChartCompName": "Grafico Sankey", - "sankeyChartCompDesc": "Un diagramma di flusso in cui l'ampiezza delle frecce è proporzionale alla portata, utilizzato per mostrare i trasferimenti di energia, materiali o costi.", - "sankeyChartCompKeywords": "diagramma di Sankey, flusso, energia, costi", - "candleStickChartCompName": "Grafico a candele", - "candleStickChartCompDesc": "Stile di grafico finanziario utilizzato per descrivere i movimenti di prezzo di un titolo, di un derivato o di una valuta.", - "candleStickChartCompKeywords": "grafico a candele, azioni, trading, finanza", - "radarChartCompName": "Grafico radar", - "radarChartCompDesc": "Metodo grafico per la visualizzazione di dati multivariati sotto forma di grafico bidimensionale di tre o più variabili quantitative.", - "radarChartCompKeywords": "grafico radar, multivariato, analisi delle prestazioni", - "heatmapChartCompName": "Grafico Heatmap", - "heatmapChartCompDesc": "Una rappresentazione grafica dei dati in cui i singoli valori sono rappresentati come colori.", - "heatmapChartCompKeywords": "heatmap, visualizzazione dei dati, intensità", - "graphChartCompName": "Grafico", - "graphChartCompDesc": "Un diagramma che rappresenta una rete di nodi collegati da spigoli, utile per mostrare interconnessioni e relazioni.", - "graphChartCompKeywords": "grafico, reti, relazioni, nodi", - "treeChartCompName": "Grafico ad albero", - "treeChartCompDesc": "Un diagramma che rappresenta visivamente la gerarchia in una struttura ad albero, mostrando le relazioni tra i vari nodi.", - "treeChartCompKeywords": "diagramma ad albero, gerarchia, organizzazione", - "treemapChartCompName": "Grafico a mappa di alberi", - "treemapChartCompDesc": "Un grafico che utilizza rettangoli annidati per rappresentare in modo proporzionale i dati gerarchici.", - "treemapChartCompKeywords": "mappa a tre, gerarchia, visualizzazione dei dati", - "sunburstChartCompName": "Grafico Sunburst", - "sunburstChartCompDesc": "Una tecnica di visualizzazione a riempimento radiale dello spazio che illustra le relazioni gerarchiche attraverso gli strati di un cerchio.", - "sunburstChartCompKeywords": "Grafico a raggiera, radiale, gerarchia", - "themeriverChartCompName": "Grafico del fiume a tema", - "themeriverChartCompDesc": "Una visualizzazione che assomiglia a un grafico a flusso che mostra i cambiamenti di un insieme di dati nel corso del tempo tra le varie categorie.", - "themeriverChartCompKeywords": "tema fiume, serie temporali, tendenze", - "basicChartCompName": "Grafico di base", - "basicChartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", - "basicChartCompKeywords": "grafico, grafico, dati, visualizzazione", - "shapeCompName": "Forme", - "shapeCompDesc": "Una raccolta di forme geometriche da utilizzare per diagrammi, illustrazioni e visualizzazioni.", - "shapeCompKeywords": "forme, geometriche, diagrammi, illustrazioni", - "ganttChartCompName": "Grafico di Gantt", - "ganttChartCompDesc": "Un grafico che illustra la pianificazione di un progetto, mostrando le date di inizio e fine degli elementi e le dipendenze.", - "ganttChartCompKeywords": "diagramma di gantt, gestione del progetto, pianificazione", - "kanbanCompName" : "Kanban Board (preview!)", - "kanbanCompDesc" : "Un componente per la visualizzazione e la gestione delle attività in un flusso di lavoro Kanban, con colonne per le fasi di lavoro e le schede per le attività.", - "kanbanCompKeywords" : "kanban, board, workflow, tasks", - "colorPickerCompName": "Picker di colori", - "colorPickerCompDesc": "Selezione intuitiva dei colori per la personalizzazione.", - "colorPickerCompKeywords": "colore, selezionatore, personalizzazione", - "floatButtonCompName": "Pulsante di galleggiamento", - "floatButtonCompDesc": "Un pulsante di azione fluttuante per azioni rapide e di rilievo.", - "floatButtonCompKeywords": "pulsante flottante, azione, rapido", - "avatarCompName": "Avatar", - "avatarCompDesc": "Visualizza gli avatar degli utenti o le immagini del profilo per un'identificazione personalizzata.", - "avatarCompKeywords": "avatar, immagine del profilo, identificazione dell'utente", - "avatarGroupCompName": "Gruppo Avatar", - "avatarGroupCompDesc": "Un gruppo di avatar per rappresentare più utenti o entità in modo compatto e visivamente accattivante.", - "avatarGroupCompKeywords": "gruppo avatar, utenti, entità, compatto", - "transferName": "Trasferimento", - "transferDesc": "Facilita il trasferimento dei dati tra due elenchi con la funzione di trascinamento.", - "transferKeywords": "trasferimento, dati, drag-and-drop", - "cardCompName": "Scheda Contenuto", - "cardCompDesc": "Un componente di scheda per la visualizzazione di informazioni o contenuti organizzati in modo strutturato.", - "cardCompKeywords": "scheda, informazione, contenuto, visualizzazione", - "timerCompName": "Timer", - "timerCompDesc": "Un componente che visualizza un conto alla rovescia o un tempo trascorso, utile per tracciare durate e scadenze.", - "timerCompKeywords": "timer, conto alla rovescia, tempo trascorso, tracciamento, durate, scadenze", - }, - "comp": { - ...en.comp, - - "menuViewDocs": "Visualizza la documentazione", - "menuViewPlayground": "Visualizza il parco giochi interattivo", - "menuUpgradeToLatest": "Aggiornamento alla versione più recente", - "nameNotEmpty": "Non può essere vuoto", - "nameRegex": "Deve iniziare con una lettera e contenere solo lettere, cifre e trattini (_).", - "nameJSKeyword": "Non può essere una parola chiave JavaScript", - "nameGlobalVariable": "Non può essere un nome di variabile globale", - "nameExists": "Nome {name} Già esistente", - "getLatestVersionMetaError": "Impossibile recuperare la versione più recente, riprovare più tardi.", - "needNotUpgrade": "La versione attuale è già la più recente.", - "compNotFoundInLatestVersion": "Componente corrente non trovato nella versione più recente.", - "upgradeSuccess": "Aggiornato con successo all'ultima versione.", - "searchProp": "Ricerca", - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - - "retry": "Riprova", - "resetAfterSubmit": "Reimpostazione dopo l'invio del modulo", - "jsonSchema": "Schema JSON", - "uiSchema": "Schema UI", - "schemaTooltip": "Vedi", - "defaultData": "Dati del modulo precompilati", - "dataDesc": "Dati del modulo corrente", - "required": "Richiesto", - "maximum": "Il valore massimo è {value}.", - "minimum": "Il valore minimo è {value}.", - "exclusiveMaximum": "Dovrebbe essere minore di {value}", - "exclusiveMinimum": "Dovrebbe essere maggiore di {value}", - "multipleOf": "Dovrebbe essere un multiplo di {value}", - "minLength": "Almeno {value} Caratteri", - "maxLength": "Al massimo {value} Caratteri", - "pattern": "Dovrebbe corrispondere al modello {value}", - "format": "Dovrebbe corrispondere al formato {value}", - }, - "select": { - ...en.select, - - "inputValueDesc": "Ingresso Valore di ricerca", - }, - "customComp": { - ...en.customComp, - - "text": "È un buon giorno.", - "triggerQuery": "Query di attivazione", - "updateData": "Aggiornamento dei dati", - "updateText": "Sono anche dell'umore giusto per sviluppare ora il mio componente personalizzato con Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Dati da passare al componente personalizzato", - "code": "Codice del componente personalizzato", - }, - "tree": { - ...en.tree, - - "placeholder": "Selezionare", - "selectType": "Selezionare il tipo", - "noSelect": "Non selezionare", - "singleSelect": "Selezione singola", - "multiSelect": "Selezione multipla", - "checkbox": "Casella di controllo", - "checkedStrategy": "Strategia controllata", - "showAll": "Tutti i nodi", - "showParent": "Solo i nodi parentali", - "showChild": "Nodi figli unici", - "autoExpandParent": "Espansione automatica genitore", - "checkStrictly": "Controllare rigorosamente", - "checkStrictlyTooltip": "Controllare con precisione il TreeNode; il TreeNode genitore e i TreeNode figli non sono associati", - "treeData": "Dati dell'albero", - "treeDataDesc": "Dati attuali dell'albero", - "value": "Valori predefiniti", - "valueDesc": "Valori attuali", - "expanded": "Valori ampliati", - "expandedDesc": "Valori attuali ampliati", - "defaultExpandAll": "Predefinito Espandi tutti i nodi", - "showLine": "Linea spettacolo", - "showLeafIcon": "Mostra l'icona Foglia", - "treeDataAsia": "Asia", - "treeDataChina": "Cina", - "treeDataBeijing": "Pechino", - "treeDataShanghai": "Shanghai", - "treeDataJapan": "Giappone", - "treeDataEurope": "Europa", - "treeDataEngland": "Inghilterra", - "treeDataFrance": "Francia", - "treeDataGermany": "Germania", - "treeDataNorthAmerica": "Nord America", - "helpLabel": "Etichetta del nodo", - "helpValue": "Valore unico del nodo nell'albero", - "helpChildren": "Nodi figli", - "helpDisabled": "Disabilita il nodo", - "helpSelectable": "Se il nodo è selezionabile (tipo di selezione singola/multi)", - "helpCheckable": "Visualizzazione o meno della casella di controllo (tipo di casella di controllo)", - "helpDisableCheckbox": "Disabilita la casella di controllo (tipo casella di controllo)", - }, - "moduleContainer": { - ...en.moduleContainer, - - "eventTest": "Test dell'evento", - "methodTest": "Metodo Test", - "inputTest": "Test di ingresso", - }, - "password": { - ...en.password, - - "label": "Password", - "placeholder": "Inserire la password", - "conformLabel": "Conferma la password", - "conformPlaceholder": "Confermare la password", - "visibilityToggle": "Alterna la visibilità", - }, - "richTextEditor": { - ...en.richTextEditor, - - "toolbar": "Personalizzare la barra degli strumenti", - "toolbarDescription": "È possibile personalizzare la barra degli strumenti. Per maggiori dettagli, consultare: https://quilljs.com/docs/modules/toolbar/.", - "placeholder": "Inserisci...", - "hideToolbar": "Nascondere la barra degli strumenti", - "content": "Content", - "title": "Titolo", - "save": "Risparmiare", - "link": "Link:", - "edit": "Modifica", - "remove": "Rimuovere", - "defaultValue": "Contenuto di base", - }, - "floatButton": { - ...en.floatButton, - - "custom": "Personalizzato", - "backTop": "Indietro Top", - "buttonType": "Tipo di pulsante", - "buttonShape": "Forma del pulsante", - "square": "Quadrato", - "circle": "Cerchio", - "description": "Descrizione", - "badge": "Distintivo", - "primary": "Primario", - "default": "Predefinito", - "buttonTheme": "Tema dei pulsanti", - "badgeColor": "Colore del badge", - "dot": "Distintivo come punto", - "hidden": "Nascosto", - "visibilityHeight": "Altezza di visibilità", - "visibilityHeightDesc": "Scorrere fino a una certa altezza prima di visualizzare il pulsante di ritorno all'inizio, 0 è sempre visualizzato, la modalità di modifica non può visualizzare l'anteprima in tempo reale", - }, - "colorPicker": { - ...en.colorPicker, - - "trigger": "Evento Trigger", - "click": "Cliccare", - "hover": "Hover", - "disabledAlpha": "Disabilita la selezione alfa", - "recommended": "Consigliato", - "showPresets": "Mostra le preimpostazioni di colore", - }, - "badge": { - ...en.badge, - - "showCloseButton": "Mostra il pulsante di chiusura", - "Type": "Tipo di badge", - "Count": "Conteggio dei badge", - "Size": "Dimensione del badge", - "SizeDefault": "predefinito", - "SizeSmall": "Piccolo", - "overflowCount": "Conteggio dell'overflow", - "Title": "Titolo del distintivo", - "dot": "Punto", - "number": "Numero", - "tooltip": "Tooltip", - }, - "gantt": { - ...en.gantt, - - "key": "Chiave", - "title": "Titolo", - "project": "Progetto", - "from": "Da", - "minute": "minuto", - "hour": "Ora", - "day": "Giorno", - "week": "Settimana", - "month": "Mese", - "year": "Anno", - "quarter": "Trimestre", - "tasks": "Dati sulle attività", - "level": "livello", - "durationUnit": "Unità di durata", - "duration": "Durata", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Settimana #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "albero", - "ColumnsData": "Colonne Dati", - "allowChangeTask": "Attività DbClick", - "allowAddLink": "Aggiungi collegamento", - "allowLinkDelete": "Cancellazione del link", - "allowProgressDrag": "Trascinamento del progresso", - "allowTaskDrag": "Trascinamento dell'attività", - "links": "Dati sui link", - "dataFormat": "Data parse Format", - "handleDateChange": "Gestire la modifica dell'attività", - "handleTaskChange": "Gestire la modifica dell'attività", - "handleAddedLink": "Maniglia Link aggiunto", - "handleDeletedLink": "Gestire il link cancellato", - "handleProgressDrag": "Gestire il trascinamento dell'avanzamento", - "showTodayMark": "Mostra Oggi Mark", - "resize": "Ridimensionamento", - "otherEvents": "Altri eventi", - "openAllBranchInit": "Aprire tutte le filiali", - "date": "Data", - "text": "Testo", - "progress": "progresso", - "width": "Larghezza", - "ColumnsType": "Tipo di cloumns", - "currentId": "ID corrente", - "currentObject": "Oggetto corrente", - "addTask": "Aggiungi attività", - "taskObject": "Oggetto dell'attività", - "taskObjectDesc": "Supporta array di task o singoli oggetti task", - "linkID": "ID collegamento", - "linkIDDesc": "Supporta array di ID di collegamenti o singoli oggetti di collegamento.", - "removeTask": "Rimuovere l'attività", - "taskID": "ID compito", - "taskIDDesc": "Supporta array di ID o ID singolo", - "add": "Aggiungi", - "expandingAll": "Espansione di tutti", - "collapsingAll": "Crollo di tutti", - "addTaskFail": "L'operazione di aggiunta non è riuscita e il tipo di parametro deve essere un oggetto o un oggetto array.", - "addLinkFail": "Il collegamento di aggiunta non è riuscito e il tipo di parametro deve essere un oggetto o un oggetto array.", - "removeTaskFail": "L'attività di eliminazione non è riuscita e il tipo di parametro deve essere stringa o array di stringhe.", - "removeLinkFail": "I collegamenti di cancellazione non sono riusciti e il tipo di parametro deve essere un array di stringhe.", - "otherData": "Altri dati{i}", - "projectText": "Progetto #{i}", - "taskText": "Compito #{i}", - "AutoCalculateProgress": "Avanzamento del calcolo automatico", - "allowProjectDrag": "Consentire il trascinamento del progetto", - "showColumns": "Mostra colonne", - "exportToPNG": "Esportazione in PNG", - "exportToPDF": "Esportazione in PDF", - "exportToExcel": "Esportazione in Excel", - "progressLowBg": "Basso BgColor", - "progressLowColor": "Colore di avanzamento basso", - "progressMediumBg": "Medio BgColor", - "progressMediumColor": "Colore Medio Progresso", - "progressHighBg": "Altezza BgColor", - "progressHighColor": "Colore di avanzamento alto", - "progresscompletedColor": "Colore di avanzamento completato", - "lowProgressLine": "Linea di avanzamento bassa", - "mediumProgressLine": "Linea di avanzamento media", - "SegmentedColor": "Progresso Colore segmentato", - "link_f2s": "Collegamento F2S", - "link_s2s": "Collegamento S2S", - "link_f2f": "Collegamento F2F", - "link_s2f": "Collegamento S2F", - "weekScale": "#{i},", - "showHolidays": "Mostra Vacanze", - "StatutoryHolidays": "Dati sulle ferie legali", - "skipOffTime": "Nasconde il tempo non lavorativo", - "weekend": "Fine settimana", - "weekendSelected": "Fine settimana selezionato", - "noWorkHour": "Nessun orario di lavoro", - "noWorkHourSelected": "nessun orario di lavoro selezionato", - "showWorkTimes": "Mostra Tempi di lavoro", - "workTimeData": "Dati sui tempi di lavoro", - "fit": "in forma", - "manual": "manuale", - "scaleMode": "Scale Mode", - "startDate": "Data di inizio", - "endDate": "Data di fine", - "addLink": "Aggiungi link", - "linkObject": "link Oggetto", - "removeLink": "rimuovere il link", - "allowSort": "Consenti ordinamento", - "showTask": "Mostra attività", - "toggleOnDBClick": "Attivare DBClick", - "sortOptions": "Opzioni di ordinamento iniziali", - "rowHeight": "Altezza della fila", - "showTooltip": "Mostra la descrizione degli strumenti", - "tooltipTemplates": "Modello di tooltip", - "allowResizeTask": "Consentire il ridimensionamento dell'attività", - "projectColor": "Progetto Colore", - "projectColorBg": "Progetto BgColor", - "taskColor": "Colore dell'attività", - "taskColorBg": "Attività BgColor", - "milestoneColor": "Colore della pietra miliare", - "highlightOverdue": "Evidenziare gli arretrati", - "overdueColor": "Overdue Color", - "overdueBgColor": "Overdue BgColor", - "projectCompletedBgColor": "Progetto completato BgColor", - "projectCompletedColor": "Progetto completato Colore", - "tag": "tag", - "tasksTableWidth": "Larghezza della tabella delle attività", - "allowErrorMessage": "Consentire il messaggio di errore", - "currentProjectId": "Id progetto attuale", - "currentProjectLastTask": "Progetto corrente Ultimo compito", - "onlySortProject": "Solo progetto di ordinamento", - }, - "transfer": { - ...en.transfer, - - "sourceTitle": "Dati sorgente", - "targetTitle": "Dati di destinazione", - "content": "Contenuto {i}", - "items": "Articoli", - "targetKeys": "Chiavi selezionate", - "oneWay": "Un modo", - "pagination": "Paginazione", - "pageSize": "Dimensione della pagina", - "allowSearch": "Consenti la ricerca", - "selectedKeys": "Chiavi selezionate", - "searchInfo": "Ricerca Info", - "targerObject": "Oggetto Targer", - }, - "avatarGroup": { - ...en.avatarGroup, - - "maxCount": "Conteggio massimo", - "avatarSize": "Dimensione dell'avatar", - "autoColor": "Auto Color", - "alignment": "Allineamento", - "currentAvatar": "Avatar corrente", - }, - "avatarComp": { - ...en.avatarComp, - - "square": "piazza", - "circle": "cerchio", - "icon": "icona", - "shape": "forma", - "counts": "Distintivo", - "title": "titolo", - "src": "src", - "avatarCompTooltip": "La priorità di visualizzazione è: immagine -> caratteri -> icona. A seconda di ciò che è disponibile per primo.", - "iconSize": "Dimensione dell'icona", - "avatarBackground": "Sfondo", - "label": "Etichetta", - "caption": "Didascalia", - "labelPosition": "Posizione", - "alignmentPosition": "allineamento", - "text": "Testo", - "enableDropDown": "Abilitazione della tendina", - "containerBackground": "Sfondo", - }, - "card": { - ...en.card, - - "cardType": "Tipo di carta", - "common": "comune", - "custom": "personalizzato", - "default": "predefinito", - "small": "piccolo", - "showTitle": "Mostra il titolo", - "title": "Titolo", - "more": "Di più", - "extraTitle": "Invito all'azione", - "CoverImg": "Immagine di copertina", - "imgSrc": "Fonte immagine", - "showMeta": "Mostra il contenuto", - "metaTitle": "Titolo del contenuto", - "metaDesc": "Descrizione del contenuto", - "imgHeight": "Altezza immagine", - "showActionIcon": "Mostra opzioni di azione", - "actionOptions": "Opzioni di azione", - "menu": "Menu {i}", - "hoverColor": "hover Colore", - "IconColor": "Icona Colore", - "titleSize": "Titolo Dimensione", - }, - "timer": { - ...en.timer, - - "timerState": "Stato del timer", - "elapsedTime": "Tempo trascorso", - "timer": "Timer", - "countdown": "Conto alla rovescia", - "defaultValue": "Valore predefinito", - "timerType": "Tipo di timer", - "start": "Inizio", - "pause": "Pausa", - "resume": "Il curriculum", - "reset": "Reset", - "startPause": "Avvio/Pausa", - "hideButton": "Pulsante Nascondi", - "fontColor": "Colore del carattere", - }, - "iconComp": { - ...en.iconComp, - - "icon": "Icona", - "autoSize": "Icona Ridimensionamento automatico", - "iconSize": "Dimensione dell'icona", - }, - "numberInput": { - ...en.numberInput, - - "formatter": "Formato", - "precision": "Precisione", - "allowNull": "Consentire il valore nullo", - "thousandsSeparator": "Mostra separatore di migliaia", - "controls": "Mostra pulsanti di incremento/decremento", - "step": "Passo", - "standard": "Standard", - "percent": "Percentuale", - }, - "slider": { - ...en.slider, - - "step": "Passo", - "stepTooltip": "Il valore deve essere maggiore di 0 e divisibile per (Max-Min)", - "vertical": "Orientamento verticale", - }, - "rating": { - ...en.rating, - - "max": "Valutazione massima", - "allowHalf": "Consentire la metà dei punti di valutazione", - }, - "optionsControl": { - ...en.optionsControl, - - "optionList": "Opzioni", - "option": "Opzione", - "optionI": "Opzione {i}", - "viewDocs": "Visualizza i documenti", - "tip": "Le variabili 'item' e 'i' rappresentano il valore e l'indice di ciascun elemento dell'array di dati.", - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - - "value": "Valore / Chiave", - "valueTooltip": "Il valore del passo deve essere un numero. Per il primo passo, deve essere uguale al valore iniziale. I numeri devono essere in ordine crescente e coerente.", - "title": "Titolo del passo", - "subTitle": "Sottotitolo del passo", - "description": "Descrizione del passo", - "status": "Stato dei passi", - "icon": "Icona Passo", - }, - "step": { - ...en.step, - - "initialValue": "Numeri di partenza a", - "initialValueTooltip": "Dove iniziare la numerazione visiva. Deve essere 1 o superiore.", - "valueDesc": "Valore attuale", - "size": "Dimensione dei passi", - "sizeSmall": "Piccolo", - "sizeDefault": "Predefinito", - "percent": "Passi Percentuale", - "type": "Tipo di passo", - "typeDefault": "Standard", - "typeNavigation": "Navigazione", - "typeInline": "In linea", - "direction": "Direzione dei passi", - "directionVertical": "Verticale", - "directionHorizontal": "Orizzontale", - "labelPlacement": "Passi Posizionamento dell'etichetta", - "status": "Stato dei passi", - "statusWait": "Attendere", - "statusProcess": "Processo", - "statusFinish": "Finitura", - "statusError": "Errore", - "showDots": "Mostra punti invece di simboli", - "showIcons": "Mostra icone invece di simboli", - "responsive": "Reattivo", - "selectable": "Selezionabile", - }, - "coloredTagOptionControl": { - ...en.coloredTagOptionControl, - - "tag": "Testo del tag", - "color": "Colore", - "icon": "Icona", - }, - "radio": { - ...en.radio, - - "options": "Opzioni", - "horizontal": "Orizzontale", - "horizontalTooltip": "Il layout orizzontale si avvolge su se stesso quando finisce lo spazio a disposizione", - "vertical": "Verticale", - "verticalTooltip": "Il layout verticale verrà sempre visualizzato in una singola colonna", - "autoColumns": "Colonna automatica", - "autoColumnsTooltip": "Il layout a colonne automatico riordina automaticamente l'ordine in base allo spazio disponibile e lo visualizza come colonne multiple.", - }, - "cascader": { - ...en.cascader, - - "options": "Dati JSON per mostrare selezioni a cascata", - }, - "selectInput": { - ...en.selectInput, - - "valueDesc": "Valore attualmente selezionato", - "selectedIndexDesc": "L'indice del valore attualmente selezionato o -1 se non è selezionato alcun valore.", - "selectedLabelDesc": "L'etichetta del valore attualmente selezionato", - }, - "file": { - ...en.file, - - "typeErrorMsg": "Deve essere un numero con un'unità di dimensione del file valida o un numero di byte senza unità.", - "fileEmptyErrorMsg": "Caricamento fallito. La dimensione del file è vuota.", - "fileSizeExceedErrorMsg": "Caricamento fallito. La dimensione del file supera il limite.", - "minSize": "Dimensione minima", - "minSizeTooltip": "La dimensione minima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", - "maxSize": "Dimensione massima", - "maxSizeTooltip": "La dimensione massima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", - "single": "Singolo", - "multiple": "Multiplo", - "directory": "Elenco", - "upload": "Sfogliare", - "fileType": "Tipi di file", - "reference": "Fare riferimento a", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Specificatori unici del tipo di file", - "uploadType": "Tipo di caricamento", - "showUploadList": "Mostra elenco di caricamento", - "maxFiles": "File max", - "filesValueDesc": "Il contenuto del file attualmente caricato è codificato Base64", - "filesDesc": "Elenco dei file attualmente caricati. Per i dettagli, fare riferimento a", - "clearValueDesc": "Cancella tutti i file", - "parseFiles": "Analizzare i file", - "parsedValueTooltip1": "Se parseFiles è vero, i file di caricamento verranno analizzati come oggetti, array o stringhe. È possibile accedere ai dati analizzati tramite la matrice parsedValue.", - "parsedValueTooltip2": "Supporta file Excel, JSON, CSV e di testo. Altri formati restituiranno un valore nullo.", - }, - "date": { - ...en.date, - - "format": "Formato", - "formatTip": "Supporto: YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", - "reference": "Fare riferimento a", - "showTime": "Orario dello spettacolo", - "start": "Data di inizio", - "end": "Data di fine", - "year": "Anno", - "quarter": "Trimestre", - "month": "Mese", - "week": "Settimana", - "date": "Data", - "clearAllDesc": "Cancella tutto", - "resetAllDesc": "Azzeramento di tutti", - "placeholder": "Selezionare la data", - "placeholderText": "Segnaposto", - "startDate": "Data di inizio", - "endDate": "Data di fine", - }, - "time": { - ...en.time, - - "start": "Ora di inizio", - "end": "Tempo della fine", - "formatTip": "Supporto: 'HH:mm:ss', 'Timestamp'", - "format": "Formato", - "placeholder": "Selezionare l'ora", - "placeholderText": "Segnaposto", - "startTime": "Ora di inizio", - "endTime": "Tempo della fine", - }, - "button": { - ...en.button, - - "prefixIcon": "Icona Prefisso", - "prefixText": "Prefisso Testo", - "suffixIcon": "Icona Suffisso", - "icon": "Icona", - "iconSize": "Dimensione dell'icona", - "button": "Pulsante del modulo", - "formToSubmit": "Modulo da inviare", - "default": "Predefinito", - "submit": "Invia", - "textDesc": "Testo attualmente visualizzato sul pulsante", - "loadingDesc": "Il pulsante è in stato di caricamento? Se è vero, il pulsante corrente sta caricando", - "formButtonEvent": "Evento", - }, - "link": { - ...en.link, - - "link": "Collegamento a", - "textDesc": "Testo attualmente visualizzato sul link", - "loadingDesc": "Il collegamento è in stato di caricamento? Se è vero, il collegamento corrente è in fase di caricamento", - }, - "scanner": { - ...en.scanner, - - "text": "Fare clic su Scansione", - "camera": "Macchina fotografica {index}", - "changeCamera": "Telecamera Switch", - "continuous": "Scansione continua", - "uniqueData": "Ignore Duplicate Data", - "maskClosable": "Fare clic sulla Maschera per chiudere", - "errTip": "Si prega di utilizzare questo componente sotto HTTPS o Localhost", - }, - "dropdown": { - ...en.dropdown, - - "onlyMenu": "Display con sola etichetta", - "textDesc": "Testo attualmente visualizzato sul pulsante", - "triggerMode": "Modalità di attivazione" - }, - "textShow": { - ...en.textShow, - - "text": "### 👋 Hello, {name}", - "valueTooltip": "Markdown supporta la maggior parte dei tag e degli attributi HTML. iframe, Script e altri tag sono disabilitati per motivi di sicurezza.", - "verticalAlignment": "Allineamento verticale", - "horizontalAlignment": "Allineamento orizzontale", - "textDesc": "Testo visualizzato nella casella di testo corrente", - }, - "table": { - ...en.table, - - "editable": "Modificabile", - "columnNum": "Colonne", - "viewModeResizable": "Larghezza della colonna regolata dall'utente", - "viewModeResizableTooltip": "Se gli utenti possono regolare la larghezza delle colonne.", - "visibleResizables": "Mostra le maniglie di ridimensionamento", - "visibleResizablesTooltip": "Visualizza le maniglie di ridimensionamento visibili nell'intestazione della tabella.", - "showFilter": "Pulsante Mostra filtro", - "showRefresh": "Mostra il pulsante di aggiornamento", - "showDownload": "Mostra il pulsante di download", - "columnSeparator": "Separatore a colonna", - "columnSeparatorTooltip": "Separatore di colonna (\"delimitatore\") nel file CSV scaricato.\n\nRaccomandazioni:\n- Virgola (,)\n- Punto e virgola (;)\n- Tubo (|)\n- Tab (\\t)", - "columnSetting": "Pulsante di visibilità delle colonne", - "searchText": "Testo di ricerca", - "searchTextTooltip": "Cercare e filtrare i dati attualmente presenti nella tabella. Si tratta di una ricerca solo di facciata e non influisce sulla query di origine dei dati).", - "showQuickJumper": "Mostra Quick Jumper", - "hideOnSinglePage": "Nascondi su pagina singola", - "showSizeChanger": "Pulsante Mostra cambio formato", - "pageSizeOptions": "Opzioni di formato pagina", - "pageSize": "Dimensione della pagina", - "total": "Conteggio totale delle righe", - "totalTooltip": "Il valore predefinito è il numero di elementi di dati correnti che possono essere ottenuti dalla query, ad esempio: '{{query1.data[0].count}}'.", - "filter": "Filtri", - "filterRule": "Regola del filtro", - "chooseColumnName": "Scegliere la colonna", - "chooseCondition": "Scegliere la condizione", - "clear": "Libero", - "columnShows": "Colonna Mostra", - "selectAll": "Seleziona tutti", - "and": "E", - "or": "Oppure", - "contains": "Contiene", - "notContain": "Non contiene", - "equals": "Pari", - "isNotEqual": "Non è uguale", - "isEmpty": "È vuoto", - "isNotEmpty": "Non è vuoto", - "greater": "Maggiore di", - "greaterThanOrEquals": "Maggiore o uguale", - "lessThan": "Meno di", - "lessThanOrEquals": "Meno di o uguale", - "action": "Azione", - "columnValue": "Valore della colonna", - "columnValueTooltip": "'{{currentCell}}': Dati cella corrente\n '{{currentRow}}': Dati riga corrente\n '{{currentIndex}}': Indice dei dati correnti (a partire da 0)\n Esempio: '{{currentCell * 5}}' Mostra 5 volte il valore originale Dati.", - "columnTooltip": "Tooltip di colonna", - "imageSrc": "Fonte immagine", - "imageSize": "Dimensione dell'immagine", - "columnTitle": "Titolo", - "columnTitleTooltip": "Tooltip del titolo", - "showTitle": "Mostra il titolo", - "showTitleTooltip": "Mostra/nascondi il titolo della colonna nell'intestazione della tabella", - "sortable": "Ordinabile", - "align": "Allineamento", - "fixedColumn": "Colonna fissa", - "autoWidth": "Larghezza automatica", - "customColumn": "Colonna personalizzata", - "auto": "Auto", - "fixed": "Fisso", - "columnType": "Tipo di colonna", - "dataMapping": "Mappatura dei dati", - "numberStep": "Passo", - "numberStepTooltip": "Il numero a cui viene aumentato o diminuito il valore corrente. Può essere un numero intero o decimale", - "precision": "Precisione", - "float": "Galleggiante", - "prefix": "Prefisso", - "suffix": "Suffisso", - "avatars": "Avatars", - "avatarGroupAlignment": "Allineamento degli avatar", - "text": "Testo", - "number": "Numero", - "link": "Collegamento a", - "links": "Collegamenti", - "tag": "Tag", - "select": "Selezionare", - "dropdown": "A discesa", - "date": "Data", - "dateTime": "Data Ora", - "badgeStatus": "Stato", - "button": "Button", - "image": "Immagine", - "boolean": "Booleano", - "switch": "Interruttore", - "rating": "Valutazione", - "progress": "Progressi", - "option": "Funzionamento", - "optionList": "Elenco delle operazioni", - "option1": "Operazione 1", - "status": "Stato", - "statusTooltip": "Valori opzionali: Successo, Errore, Predefinito, Avviso, Elaborazione", - "primaryButton": "Primario", - "defaultButton": "Predefinito", - "type": "Tipo", - "tableSize": "Dimensione della tabella", - "hideHeader": "Nascondere l'intestazione della tabella", - "hideToolbar": "Nascondere Piè di pagina", - "fixedHeader": "Intestazione fissa della tabella", - "fixedHeaderTooltip": "L'intestazione sarà fissa per la tabella a scorrimento verticale", - "fixedToolbar": "Barra degli strumenti fissa", - "fixedToolbarTooltip": "La barra degli strumenti sarà fissa per la tabella a scorrimento verticale in base alla posizione", - "hideBordered": "Mostra le maniglie di ridimensionamento", - "showHeaderGridBorder": "Mostra il bordo della griglia dell'intestazione", - "showRowGridBorder": "Mostra il bordo della griglia delle righe", - "showVerticalRowGridBorder": "Mostra il bordo verticale della griglia delle righe", - "showHorizontalRowGridBorder": "Mostra il bordo della griglia delle righe orizzontali", - "deleteColumn": "Cancellare la colonna", - "confirmDeleteColumn": "Confermare la colonna Elimina:", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "I dati correnti cambiano, fare clic per rigenerare la colonna.", - "changeSetDesc": "Un oggetto che rappresenta le modifiche a una tabella modificabile, contiene solo la cella modificata. Le righe vanno per prime e le colonne per seconde.", - "selectedRowDesc": "Fornisce i dati per la riga attualmente selezionata, indicando la riga che attiva un evento di clic se l'utente fa clic su un pulsante/collegamento nella riga.", - "selectedRowsDesc": "Utile nella modalità di selezione multipla, come SelectedRow", - "pageNoDesc": "Pagina di visualizzazione corrente, a partire da 1", - "pageSizeDesc": "Quante righe per pagina", - "sortColumnDesc": "Il nome della colonna ordinata attualmente selezionata", - "sortDesc": "Se la riga corrente è in ordine decrescente", - "pageOffsetDesc": "L'inizio corrente del Paging, utilizzato per il Paging per ottenere i dati. Esempio: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", - "displayDataDesc": "Dati visualizzati nella tabella corrente", - "selectedIndexDesc": "Indice selezionato nei dati di visualizzazione", - "filterDesc": "Parametri di filtraggio della tabella", - "dataDesc": "I dati JSON della tabella", - "saveChanges": "Salvare le modifiche", - "cancelChanges": "Annulla modifiche", - "rowSelectChange": "Selezione riga Modifica", - "rowClick": "Riga Fare clic", - "rowExpand": "Espandi riga", - "rowShrink": "Restringimento della fila", - "search": "Ricerca", - "download": "Scaricare", - "columnEdited": "Colonna modificata", - "filterChange": "Sostituzione del filtro", - "sortChange": "Ordinamento Cambiamento", - "pageChange": "Cambio pagina", - "refresh": "Aggiornare", - "rowColor": "Colore condizionale della riga", - "rowColorDesc": "Imposta in modo condizionale il colore della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"green\" : \"red\" }}\".", - "rowHeight": "Altezza di riga condizionale", - "rowHeightDesc": "Imposta in modo condizionale l'altezza della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}\".", - "cellColor": "Colore della cella condizionale", - "cellColorDesc": "Impostare in modo condizionale il colore della cella in base al valore della cella utilizzando CurrentCell. Ad esempio: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "Nessun gestore eventi configurato per il salvataggio delle modifiche. Associa almeno un gestore di eventi prima del clic.", - "dynamicColumn": "Utilizzare la visibilità dinamica delle colonne", - "dynamicColumnConfig": "Colonne visibili", - "dynamicColumnConfigDesc": "Visibilità dinamica delle colonne. Accetta un array di nomi di colonne. Tutte le colonne sono visibili per impostazione predefinita. Esempio: [\"id\", \"nome\"].", - "position": "Posizione", - "showDataLoadSpinner": "Mostra indicatore di caricamento", - "showValue": "Mostra valore", - "expandable": "Espandibile", - "configExpandedView": "Configurare la vista espansa", - "toUpdateRowsDesc": "Un array di oggetti per le righe da aggiornare nelle tabelle modificabili.", - "selectedCellDesc": "Cellula selezionata", - "empty": "Vuoto", - "falseValues": "Testo quando è falso", - "iconTrue": "Icona Quando è vero", - "iconFalse": "Icona Quando falso", - "iconNull": "Icona Quando zero", - "allColumn": "Tutti", - "visibleColumn": "Visibile", - "emptyColumns": "Nessuna colonna è attualmente visibile", - "showSummary": "Mostra righe di riepilogo", - "totalSummaryRows": "Totale righe", - "inlineAddNewRow": "Aggiungi nuova riga in linea", - "editMode": "Modalità di modifica", - "singleClick": "Singolo clic", - "doubleClick": "Doppio clic", - "showUpdateButtons": "Mostra i pulsanti Salva/Annulla", - }, - "image": { - ...en.image, - - "src": "Fonte immagine", - "srcDesc": "L'origine dell'immagine. Può essere un URL, un percorso o una stringa Base64. per esempio: data:image/png;base64, AAA... CCC", - "supportPreview": "Supporto Fare clic sull'anteprima (zoom)", - "supportPreviewTip": "Efficace quando la fonte dell'immagine è valida", - "previewSrc" : "Fonte immagine ad alta risoluzione" - }, - "progress": { - ...en.progress, - - "value": "Valore", - "valueTooltip": "La percentuale di completamento come valore compreso tra 0 e 100", - "showInfo": "Mostra valore", - "valueDesc": "Valore di avanzamento corrente, compreso tra 0 e 100", - "showInfoDesc": "Visualizzazione o meno del valore di avanzamento corrente", - }, - "fileViewer": { - ...en.fileViewer, - - "invalidURL": "Inserire un URL valido o una stringa Base64", - "src": "File URI", - "srcTooltip": "Anteprima del contenuto del link fornito tramite l'incorporazione di HTML, possono essere supportati anche dati codificati Base64, ad esempio: data:application/pdf; base64,AAA... CCC", - "srcDesc": "The File URI", - }, - "divider": { - ...en.divider, - - "title": "Titolo", - "align": "Allineamento", - "dashed": "Tratteggiato", - "type": "Tipo verticale", - "dashedDesc": "Utilizzo o meno della linea tratteggiata", - "titleDesc": "Titolo del divisore", - "alignDesc": "Allineamento del titolo del divisore", - }, - "QRCode": { - ...en.QRCode, - - "value": "Codice QR Valore del contenuto", - "valueTooltip": "Il valore contiene un massimo di 2953 caratteri. Il valore del codice QR può codificare vari tipi di dati, tra cui messaggi di testo, URL, dettagli di contatto (VCard/meCard), credenziali di accesso al Wi-Fi, indirizzi e-mail, numeri di telefono, messaggi SMS, coordinate di geolocalizzazione, dettagli di eventi del calendario, informazioni di pagamento, indirizzi di criptovalute e link per il download di app.", - "valueDesc": "Il valore del contenuto del codice QR", - "level": "Livello di tolleranza ai guasti", - "levelTooltip": "Si riferisce alla capacità del codice QR di essere scansionato anche se una parte di esso è bloccata. Più alto è il livello, più complesso è il codice.", - "includeMargin": "Mostra il margine", - "image": "Visualizzazione dell'immagine al centro", - "L": "L (Basso)", - "M": "M (Medio)", - "Q": "Q (quartile)", - "H": "H (Alto)", - "maxLength": "Il contenuto è troppo lungo. Impostare la lunghezza a meno di 2953 caratteri.", - }, - "jsonExplorer": { - ...en.jsonExplorer, - - "indent": "Rientro di ogni livello", - "expandToggle": "Espandere la struttura JSON", - "theme": "Tema del colore", - "valueDesc": "Dati JSON correnti", - "default": "Predefinito", - "defaultDark": "Predefinito Scuro", - "neutralLight": "Luce neutra", - "neutralDark": "Neutro scuro", - "azure": "Azzurro", - "darkBlue": "Blu scuro", - }, - "audio": { - ...en.audio, - - "src": "URI della sorgente audio o stringa Base64", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Autoplay", - "loop": "Anello", - "srcDesc": "URI audio corrente o stringa Base64 come data:audio/mpeg;base64,AAA... CCC", - "play": "Gioco", - "playDesc": "Attivato quando viene riprodotto l'audio", - "pause": "Pausa", - "pauseDesc": "Attivato quando l'audio è in pausa", - "ended": "Terminato", - "endedDesc": "Attivato quando l'audio finisce di essere riprodotto", - }, - "video": { - ...en.video, - - "src": "URI sorgente video o stringa Base64", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "URL del poster", - "defaultPosterUrl": "", - "autoPlay": "Autoplay", - "loop": "Anello", - "controls": "Nascondere i controlli", - "volume": "Volume", - "playbackRate": "Velocità di riproduzione", - "posterTooltip": "Il valore predefinito è il primo fotogramma del video.", - "autoPlayTooltip": "Dopo il caricamento del video, la riproduzione avverrà automaticamente. Se si modifica questo valore da Vero a Falso, il video viene messo in pausa. (Se è impostato un poster, verrà riprodotto dal pulsante Poster).", - "controlsTooltip": "Nascondere i controlli di riproduzione video. Potrebbe non essere completamente supportato da tutte le sorgenti video.", - "volumeTooltip": "Impostazione del volume del lettore, tra 0 e 1", - "playbackRateTooltip": "Impostare la frequenza del lettore, tra 1 e 2", - "srcDesc": "URI audio corrente o stringa Base64 come data:video/mp4;base64, AAA... CCC", - "play": "Gioco", - "playDesc": "Attivato quando viene riprodotto un video", - "pause": "Pausa", - "pauseDesc": "Attivato quando il video è in pausa", - "load": "Carico", - "loadDesc": "Attivato al termine del caricamento della risorsa video", - "ended": "Terminato", - "endedDesc": "Attivato al termine della riproduzione del video", - "currentTimeStamp": "Posizione di riproduzione corrente del video in secondi", - "duration": "La durata totale del video in secondi", - }, - "media": { - ...en.media, - - "playDesc": "Inizia la riproduzione del supporto.", - "pauseDesc": "Mette in pausa la riproduzione multimediale.", - "loadDesc": "Ripristina il supporto all'inizio e riavvia Selezionando la risorsa multimediale.", - "seekTo": "Cerca fino al numero di secondi indicato, o alla frazione se la quantità è compresa tra 0 e 1", - "seekToAmount": "Numero di secondi o frazione se è compreso tra 0 e 1", - "showPreview": "Anteprima dello spettacolo", - }, - "rangeSlider": { - ...en.rangeSlider, - - "start": "Valore iniziale", - "end": "Valore finale", - "step": "Dimensione del passo", - "stepTooltip": "Granularità del cursore, il valore deve essere maggiore di 0 e divisibile per (Max-Min)", - }, - "iconControl": { - ...en.iconControl, - - "selectIcon": "Selezionare un'icona", - "insertIcon": "Inserire un'icona", - "insertImage": "Inserire un'immagine o", - }, - "shapeControl": { - ...en.shapeControl, - - "selectShape": "Selezionare una forma", - "insertShape": "Inserire una forma", - "insertImage": "Inserire un'immagine o", - }, - "millisecondsControl": { - ...en.millisecondsControl, - - "timeoutTypeError": "Inserire il periodo di timeout corretto in ms, l'ingresso attuale è: {value}", - "timeoutLessThanMinError": "L'ingresso deve essere maggiore di {left}, l'ingresso corrente è: {value}", - }, - "selectionControl": { - ...en.selectionControl, - - "single": "Singolo", - "multiple": "Multiplo", - "close": "Chiudere", - "mode": "Modalità di selezione della riga", - }, - "container": { - ...en.container, - - "title": "Titolo del contenitore visualizzato", - "titleTooltip": "Il titolo del contenitore", - "flowWidth": "Larghezza del contenuto", - "floatType": "Testo Tipo fluttuante", - }, - "drawer": { - ...en.drawer, - - "closePosition": "Posizionamento del pulsante di chiusura", - "placement": "Posizionamento dei cassetti", - "size": "Dimensione", - "top": "In alto", - "right": "Diritto", - "center": "Centro", - "bottom": "Bottom", - "left": "A sinistra", - "title": "Titolo del cassetto", - "titleAlign": "Allineamento dei titoli", - "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", - "heightTooltip": "Pixel, ad esempio 378", - "openDrawerDesc": "Cassetto aperto", - "closeDrawerDesc": "Chiudere il cassetto", - "width": "Larghezza cassetto", - "height": "Altezza cassetto", - }, - "meeting": { - ...en.meeting, - - "logLevel": "Livello di registro dell'SDK Agora", - "placement": "Posizionamento dei cassetti per le riunioni", - "meeting": "Impostazioni della riunione", - "cameraView": "Camera View", - "cameraViewDesc": "Vista della telecamera dell'utente locale (Host)", - "screenShared": "Schermo condiviso", - "screenSharedDesc": "Schermo condiviso dall'utente locale (Host)", - "audioUnmuted": "Audio non silenziato", - "audioMuted": "Audio disattivato", - "videoClicked": "Video cliccato", - "videoOff": "Video Off", - "videoOn": "Video On", - "size": "Dimensione", - "top": "In alto", - "host": "Host della sala riunioni. È necessario gestire l'host come propria applicazione logica.", - "participants": "Partecipanti alla sala riunioni", - "shareScreen": "Schermo condiviso dall'utente locale", - "appid": "ID applicazione Agora", - "meetingName": "Nome della riunione", - "localUserID": "ID utente host", - "userName": "Nome utente host", - "rtmToken": "Gettone Agora RTM", - "rtcToken": "Gettone Agora RTC", - "noVideo": "Nessun video", - "profileImageUrl": "URL dell'immagine del profilo", - "right": "Diritto", - "bottom": "Bottom", - "videoId": "ID flusso video", - "audioStatus": "Audio Status", - "left": "A sinistra", - "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", - "heightTooltip": "Pixel, ad esempio 378", - "openDrawerDesc": "Cassetto aperto", - "closeDrawerDesc": "Chiudere il cassetto", - "width": "Larghezza cassetto", - "height": "Altezza cassetto", - "actionBtnDesc": "Pulsante di azione", - "broadCast": "Messaggi di trasmissione", - "title": "Titolo della riunione", - "meetingCompName": "Controllore di riunioni Agora", - "sharingCompName": "Schermo Condividi Stream", - "videoCompName": "Camera Stream", - "videoSharingCompName": "Schermo Condividi Stream", - "meetingControlCompName": "Icon Button", - "meetingCompDesc": "Componente della riunione", - "meetingCompControls": "Controllo delle riunioni", - "meetingCompKeywords": "Agorà Meeting, Web Meeting, Collaborazione", - "iconSize": "Dimensione dell'icona", - "userId": "ID utente host", - "roomId": "ID camera", - "meetingActive": "Riunione in corso", - "messages": "Messaggi trasmessi", - }, - "settings": { - ...en.settings, - - "title": "Impostazioni", - "userGroups": "Gruppi di utenti", - "organization": "Spazi di lavoro", - "subscription": "Abbonamenti", - "audit": "Registri di controllo", - "theme": "Temi", - "plugin": "Plugin", - "advanced": "Avanzato", - "apiDocs": "Documenti API", - "lab": "Laboratorio", - "branding": "Branding", - "oauthProviders": "Autenticazione utente", - "appUsage": "Registri di utilizzo delle app", - "environments": "Ambienti", - "premium": "Premio", - "AppUsage": "Utilizzo globale delle app", - }, - "memberSettings": { - ...en.memberSettings, - - "admin": "Admin", - "superAdmin": "Super amministratore", - "adminGroupRoleInfo": "L'amministratore può gestire i membri e le risorse del gruppo", - "adminOrgRoleInfo": "Gli amministratori possiedono tutte le risorse e possono gestire i gruppi.", - "member": "Membro", - "memberGroupRoleInfo": "Il membro può vedere i membri del gruppo", - "memberOrgRoleInfo": "I membri possono utilizzare o visitare solo le risorse a cui hanno accesso.", - "title": "Membri", - "createGroup": "Crea gruppo", - "newGroupPrefix": "Nuovo Gruppo", - "allMembers": "Tutti i membri", - "deleteModalTitle": "Cancellare questo gruppo", - "deleteModalContent": "Il gruppo eliminato non può essere ripristinato. Siete sicuri di voler eliminare il gruppo?", - "addMember": "Aggiungi membri", - "nameColumn": "Nome utente", - "joinTimeColumn": "Tempo di adesione", - "actionColumn": "Funzionamento", - "roleColumn": "Ruolo", - "exitGroup": "Gruppo di uscita", - "moveOutGroup": "Rimuovere dal gruppo", - "inviteUser": "Invitare i membri", - "exitOrg": "Lasciare", - "exitOrgDesc": "Siete sicuri di voler lasciare questo spazio di lavoro?", - "moveOutOrg": "Rimuovere", - "moveOutOrgDescSaasMode": "Siete sicuri di voler rimuovere l'utente {name} da questo spazio di lavoro?", - "moveOutOrgDesc": "Siete sicuri di voler rimuovere l'utente {name}? Questa azione non può essere recuperata.", - "devGroupTip": "I membri del gruppo di sviluppatori hanno i privilegi per creare applicazioni e fonti di dati.", - "lastAdminQuit": "L'ultimo amministratore non può uscire.", - "organizationNotExist": "L'area di lavoro corrente non esiste", - "inviteUserHelp": "È possibile copiare il link di invito da inviare all'utente", - "inviteUserLabel": "Link per l'invito:", - "inviteCopyLink": "Copiare il link", - "inviteText": "{userName} vi invita a unirvi allo spazio di lavoro \"{organization}\", cliccate sul link per unirvi: {inviteLink}", - "groupName": "Nome del gruppo", - "createTime": "Creare tempo", - "manageBtn": "Gestire", - "userDetail": "Dettaglio", - "syncDeleteTip": "Questo gruppo è stato eliminato dalla rubrica.", - "syncGroupTip": "Questo gruppo è un gruppo di sincronizzazione della rubrica e non può essere modificato.", - }, - "orgSettings": { - ...en.orgSettings, - - "newOrg": "Nuovo spazio di lavoro (organizzazione)", - "title": "Spazio di lavoro", - "createOrg": "Crea spazio di lavoro (organizzazione)", - "deleteModalTitle": "Siete sicuri di voler eliminare questo spazio di lavoro?", - "deleteModalContent": "Si sta per eliminare l'area di lavoro {permanentlyDelete}. Una volta eliminato, lo spazio di lavoro {notRestored}.", - "permanentlyDelete": "In modo permanente", - "notRestored": "Non può essere ripristinato", - "deleteModalLabel": "Inserire il nome dell'area di lavoro {name} per confermare l'operazione:", - "deleteModalTip": "Inserire il nome dell'area di lavoro", - "deleteModalErr": "Il nome dell'area di lavoro non è corretto", - "deleteModalBtn": "Cancellare", - "editOrgTitle": "Modifica delle informazioni sullo spazio di lavoro", - "orgNameLabel": "Nome dell'area di lavoro:", - "orgNameCheckMsg": "Il nome dell'area di lavoro non può essere vuoto", - "orgLogo": "Logo dello spazio di lavoro:", - "logoModify": "Modificare l'immagine", - "inviteSuccessMessage": "Partecipare con successo all'area di lavoro", - "inviteFailMessage": "Impossibile unirsi allo spazio di lavoro", - "uploadErrorMessage": "Errore di caricamento", - "orgName": "Nome dell'area di lavoro", - }, - "freeLimit": "Prova gratuita", - "tabbedContainer": { - ...en.tabbedContainer, - - "switchTab": "Scheda interruttore", - "switchTabDesc": "Attivato quando si passa da una scheda all'altra", - "tab": "Schede", - "atLeastOneTabError": "Il contenitore delle schede contiene almeno una scheda", - "selectedTabKeyDesc": "Scheda attualmente selezionata", - "iconPosition": "Icona Posizione", - "placement": "Posizionamento delle schede", - "showTabs": "Mostra schede", - "gutter": "Gap", - "gutterTooltip": "La distanza tra le schede in px", - "tabsCentered": "Schede centrate", - }, - "formComp": { - ...en.formComp, - - "containerPlaceholder": "Trascinare i componenti dal riquadro destro o", - "openDialogButton": "Generare un modulo da una fonte di dati", - "resetAfterSubmit": "Reimpostazione dopo l'invio riuscito", - "initialData": "Dati iniziali", - "disableSubmit": "Disattivare l'invio", - "success": "Modulo generato con successo", - "selectCompType": "Selezionare il tipo di componente", - "dataSource": "Fonte dei dati:", - "selectSource": "Seleziona la fonte", - "table": "Tabella:", - "selectTable": "Selezionare la tabella", - "columnName": "Nome della colonna", - "dataType": "Tipo di dati", - "compType": "Tipo di componente", - "required": "Richiesto", - "generateForm": "Generare un modulo", - "compSelectionError": "Tipo di colonna non configurato", - "compTypeNameError": "Impossibile ottenere il nome del tipo di componente", - "noDataSourceSelected": "Nessuna fonte di dati selezionata", - "noTableSelected": "Nessun tavolo selezionato", - "noColumn": "Nessuna colonna", - "noColumnSelected": "Nessuna colonna selezionata", - "noDataSourceFound": "Non è stata trovata alcuna origine dati supportata. Creare una nuova origine dati", - "noTableFound": "Non sono state trovate tabelle in questa fonte di dati, si prega di selezionare un'altra fonte di dati.", - "noColumnFound": "Non è stata trovata alcuna colonna supportata in questa tabella. Selezionare un'altra tabella", - "formTitle": "Titolo del modulo", - "name": "Nome", - "nameTooltip": "Il nome dell'attributo nei dati del modulo, se lasciato vuoto, è predefinito con il nome del componente.", - "notSupportMethod": "Non supportato Metodi:", - "notValidForm": "Il modulo non è valido", - "resetDesc": "Ripristino dei dati del modulo al valore predefinito", - "clearDesc": "Cancella i dati del modulo", - "setDataDesc": "Impostare i dati del modulo", - "valuesLengthError": "Numero di parametro Errore", - "valueTypeError": "Parametro Tipo Errore", - "dataDesc": "Dati del modulo corrente", - "loadingDesc": "Se il modulo è in fase di caricamento?", - }, - "modalComp": { - ...en.modalComp, - - "open": "Aperto", - "openDesc": "Attivato all'apertura della finestra di dialogo modale", - "close": "Chiudere", - "closeDesc": "Attivato quando la finestra di dialogo modale viene chiusa", - "openModalDesc": "Aprire la finestra di dialogo", - "closeModalDesc": "Chiudere la finestra di dialogo", - "visibleDesc": "È visibile? Se è vero, viene visualizzata la finestra di dialogo corrente.", - "title": "Titolo del cassetto", - "titleAlign": "Allineamento dei titoli", - "modalHeight": "Altezza modale", - "modalHeightTooltip": "Pixel, Esempio: 222", - "modalWidth": "Larghezza modale", - "modalWidthTooltip": "Numero o percentuale, esempio: 520, 60%", - }, - "listView": { - ...en.listView, - - "noOfRows": "Conteggio delle righe", - "noOfRowsTooltip": "Numero di righe nell'elenco - di solito impostato su una variabile (ad es., '{{query1.data.length}}') per presentare i risultati della query.", - "noOfColumns": "Conteggio colonne", - "itemIndexName": "Voce di dati Nome dell'indice", - "itemIndexNameDesc": "Il nome della variabile che si riferisce all'indice dell'elemento, predefinito come {default}.", - "itemDataName": "Voce di dati Nome dell'oggetto", - "itemDataNameDesc": "Il nome della variabile che si riferisce all'oggetto dati dell'elemento, predefinito come {default}.", - "itemsDesc": "Esporre i dati dei componenti nell'elenco", - "dataDesc": "I dati JSON utilizzati nell'elenco corrente", - "dataTooltip": "Se si imposta solo un numero, questo campo verrà considerato come conteggio delle righe e i dati verranno considerati vuoti.", - }, - "navigation": { - ...en.navigation, - - "addText": "Aggiungi voce di sottomenu", - "logoURL": "Navigazione Logo URL", - "horizontalAlignment": "Allineamento orizzontale", - "logoURLDesc": "È possibile visualizzare un logo sul lato sinistro inserendo un valore URI o una stringa Base64 come data:image/png;base64,AAA... CCC", - "itemsDesc": "Voci del menu di navigazione gerarchico", - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - - "subMenu": "Sottomenu {number}", - }, - "navItemComp": { - ...en.navItemComp, - - "active": "Attivo", - }, - "iframe": { - ...en.iframe, - - "URLDesc": "L'URL di origine del contenuto dell'IFrame. Assicurarsi che l'URL sia HTTPS o localhost. Assicurarsi inoltre che l'URL non sia bloccato dalla Content Security Policy (CSP) del browser. L'intestazione \"X-Frame-Options\" non deve essere impostata su \"DENY\" o \"SAMEORIGIN\".", - "allowDownload": "Consentire il download", - "allowSubmitForm": "Consentire l'invio del modulo", - "allowMicrophone": "Consentire il microfono", - "allowCamera": "Consentire l'uso della fotocamera", - "allowPopup": "Consentire i popup", - }, - "switchComp": { - ...en.switchComp, - - "defaultValue": "Valore booleano predefinito", - "open": "Su", - "close": "Spento", - "openDesc": "Attivato all'accensione dell'interruttore", - "closeDesc": "Attivato quando l'interruttore è spento", - "valueDesc": "Stato attuale dell'interruttore", - }, - "signature": { - ...en.signature, - - "tips": "Testo del suggerimento", - "signHere": "Firma qui", - "showUndo": "Mostra Annullamento", - "showClear": "Mostra chiaro", - }, - "localStorageComp": { - ...en.localStorageComp, - - "valueDesc": "Tutti gli elementi di dati attualmente memorizzati", - "setItemDesc": "Aggiungere un elemento", - "removeItemDesc": "Rimuovere un elemento", - "clearItemDesc": "Cancella tutti gli articoli", - }, - "utilsComp": { - ...en.utilsComp, - - "openUrl": "URL aperto", - "openApp": "App aperta", - "copyToClipboard": "Copia negli Appunti", - "downloadFile": "Scarica il file", - }, - "messageComp": { - ...en.messageComp, - - "info": "Inviare una notifica", - "loading": "Inviare una notifica di caricamento", - "success": "Inviare una notifica di successo", - "warn": "Inviare una notifica di avviso", - "error": "Inviare una notifica di errore", - }, - "toastComp": { - ...en.toastComp, - - "destroy": "chiudere una notifica", - "info": "Inviare una notifica", - "loading": "Inviare una notifica di caricamento", - "success": "Inviare una notifica di successo", - "warn": "Inviare una notifica di avviso", - "error": "Inviare una notifica di errore", - }, - "themeComp": { - ...en.themeComp, - - "switchTo": "Tema dell'interruttore", - }, - "transformer": { - ...en.transformer, - - "preview": "Anteprima", - "docLink": "Per saperne di più sui Transformers...", - "previewSuccess": "Anteprima del successo", - "previewFail": "Anteprima Bocciata", - "deleteMessage": "Eliminazione del trasformatore riuscita. È possibile utilizzare {undoKey} per annullare.", - "documentationText": "I trasformatori sono progettati per la trasformazione dei dati e il riutilizzo del codice JavaScript multilinea. I trasformatori possono essere utilizzati per adattare i dati provenienti da query o componenti alle esigenze dell'applicazione locale. A differenza delle query JavaScript, i trasformatori sono progettati per eseguire operazioni di sola lettura, il che significa che non è possibile attivare una query o aggiornare uno stato temporaneo all'interno di un trasformatore.", - }, - "temporaryState": { - ...en.temporaryState, - - "value": "Valore iniziale", - "valueTooltip": "Il valore iniziale memorizzato nello stato temporaneo può essere un booleano, una stringa, un numero o qualsiasi valore JSON valido.", - "docLink": "Per saperne di più sugli Stati temporanei...", - "pathTypeError": "Il percorso deve essere una stringa o una matrice di valori", - "unStructuredError": "I dati non strutturati {prev} non possono essere aggiornati da {path}.", - "valueDesc": "Valore di Stato temporaneo", - "deleteMessage": "Lo stato temporaneo è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", - "documentationText": "Gli stati temporanei sono una potente funzione utilizzata per gestire variabili complesse che aggiornano dinamicamente lo stato dei componenti dell'applicazione. Questi stati fungono da memoria intermedia o transitoria per i dati che possono cambiare nel tempo a causa delle interazioni dell'utente o di altri processi.", - }, - "dataResponder": { - ...en.dataResponder, - - "data": "Dati", - "dataDesc": "Dati dell'attuale risponditore dei dati", - "dataTooltip": "Quando questi dati vengono modificati, si attivano le azioni successive.", - "docLink": "Per saperne di più sui Data Responder...", - "deleteMessage": "Il risponditore dati è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", - "documentationText": "Quando si sviluppa un'applicazione, è possibile assegnare eventi ai componenti per monitorare le modifiche di dati specifici. Ad esempio, un componente Table può avere eventi come \"Row select change\", \"Filter change\", \"Sort change\" e \"Page change\" per monitorare i cambiamenti nella proprietà selectedRow. Tuttavia, per le modifiche agli stati temporanei, ai trasformatori o ai risultati delle query, dove gli eventi standard non sono disponibili, si utilizzano i risponditori di dati. Essi consentono di rilevare e reagire a qualsiasi modifica dei dati.", - }, - "theme": { - ...en.theme, - - "title": "Temi", - "createTheme": "Creare il tema", - "themeName": "Nome del tema:", - "themeNamePlaceholder": "Inserire il nome del tema", - "defaultThemeTip": "Tema predefinito:", - "createdThemeTip": "Il tema che avete creato:", - "option": "Option{index}", - "input": "Ingresso", - "confirm": "Ok", - "emptyTheme": "Nessun tema disponibile", - "click": "", - "toCreate": "", - "nameColumn": "Nome", - "defaultTip": "Predefinito", - "updateTimeColumn": "Tempo di aggiornamento", - "edit": "Modifica", - "cancelDefaultTheme": "Tema predefinito non impostato", - "setDefaultTheme": "Imposta come tema predefinito", - "copyTheme": "Tema duplicato", - "setSuccessMsg": "Impostazione riuscita", - "cancelSuccessMsg": "Disassemblaggio Riuscito", - "deleteSuccessMsg": "Cancellazione riuscita", - "checkDuplicateNames": "Il nome del tema esiste già, inserirlo nuovamente", - "copySuffix": " Copia", - "saveSuccessMsg": "Salvato con successo", - "leaveTipTitle": "Suggerimenti", - "leaveTipContent": "Non hai ancora salvato, confermi la partenza?", - "leaveTipOkText": "Lasciare", - "goList": "Torna all'elenco", - "saveBtn": "Risparmiare", - "mainColor": "Colori principali", - "text": "Colori del testo", - "layout": "Impostazioni di layout", - "fonts": "Impostazioni dei caratteri", - "components": "Modelli di componenti", - "charts": "Definizione di eCharts", - "defaultTheme": "Predefinito", - "yellow": "Giallo", - "green": "Verde", - "previewTitle": "Anteprima del tema\nEsempi di componenti che utilizzano i colori del tema", - "dateColumn": "Data", - "emailColumn": "Email", - "phoneColumn": "Telefono", - "subTitle": "Titolo", - "linkLabel": "Collegamento a", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Progressi", - "sliderLabel": "Cursore", - "radioLabel": "Radio", - "checkboxLabel": "Casella di controllo", - "buttonLabel": "Pulsante del modulo", - "switch": "Interruttore", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "palloncino.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Anteprima dello stile del grafico", - "chartSpending": "Spesa", - "chartBudget": "Bilancio", - "chartAdmin": "Amministrazione", - "chartFinance": "Finanza", - "chartSales": "Vendite", - "chartFunnel": "Grafico a imbuto", - "chartShow": "Mostra", - "chartClick": "Cliccare", - "chartVisit": "Visita", - "chartQuery": "Interrogazione", - "chartBuy": "Acquista", - }, - "themeDetail": { - ...en.themeDetail, - - "primary": "Colore del marchio", - "primaryDesc": "Colore primario predefinito utilizzato dalla maggior parte dei componenti", - "textDark": "Colore del testo scuro", - "textDarkDesc": "Utilizzato quando il colore di sfondo è chiaro", - "textLight": "Colore del testo chiaro", - "textLightDesc": "Utilizzato quando il colore di sfondo è scuro", - "canvas": "Colore della tela", - "canvasDesc": "Colore di sfondo predefinito dell'applicazione", - "primarySurface": "Colore del contenitore", - "primarySurfaceDesc": "Colore di sfondo predefinito per componenti come le tabelle", - "borders": "Stili di bordo", - "spacing": "Stili di spaziatura", - "font": "Stili di carattere", - "fonts": "Caratteri", - "borderRadius": "Raggio del bordo", - "borderRadiusDesc": "Raggio del bordo predefinito utilizzato dalla maggior parte dei componenti", - "borderColor": "Colore del bordo", - "borderColorDesc": "Colore predefinito del bordo utilizzato dalla maggior parte dei componenti", - "borderWidth": "Larghezza del bordo", - "borderWidthDesc": "Larghezza predefinita del bordo utilizzata dalla maggior parte dei componenti", - "borderStyle": "Stile del bordo", - "borderStyleDesc": "Stile di bordo predefinito utilizzato dalla maggior parte dei componenti", - "fontFamily": "Famiglia di caratteri", - "fontFamilyDesc": "Famiglia di caratteri predefinita utilizzata dalla maggior parte dei componenti", - "chart": "Stile del grafico", - "chartDesc": "Qui è possibile inserire il tema JSON di eCharts per definire lo stile dei grafici in tutti i dettagli.", - "echartsJson": "È possibile utilizzare il Generatore JSON del tema. Copiare il JSON dal generatore e incollarlo qui.", - "margin": "Margine", - "marginDesc": "Margine predefinito tipicamente utilizzato per la maggior parte dei componenti", - "padding": "Imbottitura", - "paddingDesc": "Imbottitura predefinita tipicamente utilizzata per la maggior parte dei componenti", - "containerHeaderPadding": "Imbottitura della testata", - "containerheaderpaddingDesc": "Imbottitura predefinita dell'intestazione, tipicamente utilizzata per la maggior parte dei componenti.", - "gridColumns": "Colonne della griglia della tela", - "gridColumnsDesc": "Numero predefinito di colonne, tipicamente utilizzato per la maggior parte dei contenitori.", - "loadingIndicators": "Indicatori di carico", - "showComponentLoadingIndicators": "Mostra gli indicatori di caricamento quando il componente viene caricato", - "showDataLoadingIndicators": "Mostra indicatori di caricamento durante il caricamento dei dati", - "showIndicatorsDuringDataLoading": "Mostra indicatori durante il caricamento dei dati", - "dataLoadingIndicator": "Indicatore di caricamento dei dati" - }, - "pluginSetting": { - ...en.pluginSetting, - - "title": "Plugin", - "npmPluginTitle": "plugin npm", - "npmPluginDesc": "Impostare i plugin npm per tutte le applicazioni dell'area di lavoro corrente.", - "npmPluginEmpty": "Non sono stati aggiunti plugin npm.", - "npmPluginAddButton": "Aggiungere un plugin npm", - "saveSuccess": "Salvato con successo", - }, - "advanced": { - ...en.advanced, - - "title": "Avanzato", - "defaultHomeTitle": "Homepage predefinita", - "defaultHomeHelp": "La homepage è l'app che tutti i non sviluppatori vedranno per impostazione predefinita quando accedono. Nota: assicurarsi che l'app selezionata sia accessibile ai non sviluppatori.", - "defaultHomePlaceholder": "Selezionare la pagina iniziale predefinita", - "saveBtn": "Risparmiare", - "preloadJSTitle": "Precaricare JavaScript", - "preloadJSHelp": "Impostare il codice JavaScript precaricato per tutte le applicazioni nell'area di lavoro corrente.", - "preloadCSSTitle": "Precaricare i CSS", - "preloadCSSHelp": "Impostare il codice CSS precaricato per tutte le applicazioni nell'area di lavoro corrente.", - "preloadCSSApply": "Applicare alla homepage dell'area di lavoro", - "preloadLibsTitle": "Libreria JavaScript", - "preloadLibsHelp": "Impostazione di librerie JavaScript precaricate per tutte le applicazioni nell'area di lavoro corrente; il sistema ha integrato lodash, day.js, uuid, numbro per l'uso diretto. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione e quindi hanno un certo impatto sulle prestazioni dell'applicazione.", - "preloadLibsEmpty": "Non sono state aggiunte librerie JavaScript", - "preloadLibsAddBtn": "Aggiungere una biblioteca", - "saveSuccess": "Salvato con successo", - "AuthOrgTitle": "Schermata di benvenuto dell'area di lavoro", - "AuthOrgDescrition": "L'URL per l'accesso degli utenti all'area di lavoro corrente.", - "APIConsumption": "Consumo di API", - "APIConsumptionDescription": "Qui si può vedere il consumo di API per tutte le applicazioni nell'area di lavoro corrente.", - "overallAPIConsumption": "Consumo complessivo di API in questo spazio di lavoro fino ad ora", - "lastMonthAPIConsumption": "Consumo API dell'ultimo mese, in questo spazio di lavoro", - "npmRegistryTitle": "Registro NPM personalizzato", - "npmRegistryHelp": "Impostare un registro NPM personalizzato per consentire il recupero dei plugin da un registro NPM privato.", - "showHeaderInPublicApps": "Mostra intestazione nella vista pubblica", - "showHeaderInPublicAppsHelp": "Impostare la visibilità dell'intestazione nella vista pubblica per tutte le applicazioni", - }, - "branding": { - ...en.branding, - - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": "Solo .JPG, .SVG o .PNG", - "faviconTitle": "Favicon", - "faviconHelp": "Solo .JPG, .SVG o .PNG", - "brandNameTitle": "Nome del marchio", - "headColorTitle": "Colore della testa", - "save": "Risparmiare", - "saveSuccessMsg": "Salvato con successo", - "upload": "Fare clic per caricare", - }, - "networkMessage": { - ...en.networkMessage, - - "0": "Impossibile connettersi al server, controllare la rete", - "200": "Il successo", - "201": "Creato", - "204": "Nessun contenuto", - "400": "Brutta richiesta", - "401": "Autenticazione fallita, accedere di nuovo", - "403": "Nessun permesso, contattare l'amministratore per l'autorizzazione", - "404": "Non trovato", - "500": "Servizio occupato, riprovare più tardi", - "timeout": "Timeout della richiesta", - }, - "share": { - ...en.share, - - "title": "Condividi", - "viewer": "Visualizzatore", - "editor": "Editor", - "owner": "Proprietario", - "datasourceViewer": "Può essere utilizzato", - "datasourceOwner": "Può gestire", - }, - "debug": { - ...en.debug, - - "title": "Titolo", - "switch": "Componente dell'interruttore:", - }, - "module": { - ...en.module, - - "emptyText": "Nessun dato", - "docLink": "Per saperne di più sui moduli...", - "documentationText": "I moduli sono applicazioni complete che possono essere incluse e ripetute in altre applicazioni e funzionano come un singolo componente. Poiché i moduli possono essere incorporati, devono essere in grado di interagire con le applicazioni o i siti web esterni. Queste quattro impostazioni aiutano a supportare la comunicazione con un modulo.", - "circularReference": "Riferimento circolare, il modulo/applicazione corrente non può essere utilizzato!", - "emptyTestInput": "Il modulo corrente non ha ingressi da testare", - "emptyTestMethod": "Il modulo attuale non ha un metodo di verifica", - "name": "Nome", - "input": "Ingresso", - "params": "Parametri", - "emptyParams": "Non è stato aggiunto alcun parametro", - "emptyInput": "Non è stato aggiunto alcun input", - "emptyMethod": "Non è stato aggiunto alcun metodo", - "emptyOutput": "Non è stata aggiunta alcuna uscita", - "data": "Dati", - "string": "Stringa", - "number": "Numero", - "array": "Array", - "boolean": "Booleano", - "query": "Interrogazione", - "autoScaleCompHeight": "Bilance di altezza per componenti con contenitore", - "excuteMethod": "Eseguire il metodo {name}", - "method": "Metodo", - "action": "Azione", - "output": "Uscita", - "nameExists": "Nome {name} Già esistente", - "eventTriggered": "L'evento {name} viene attivato", - "globalPromptWhenEventTriggered": "Visualizza un prompt globale quando viene attivato un evento", - "emptyEventTest": "Il modulo corrente non ha eventi da testare", - "emptyEvent": "Non è stato aggiunto alcun evento", - "event": "Evento", - }, - "resultPanel": { - ...en.resultPanel, - - "returnFunction": "Il valore di ritorno è una funzione.", - "consume": "{time}", - "JSON": "Mostra JSON", - }, - "createAppButton": { - ...en.createAppButton, - - "creating": "Creare...", - "created": "Creare {name}", - }, - "apiMessage": { - ...en.apiMessage, - - "authenticationFail": "Autenticazione utente fallita, accedere di nuovo", - "verifyAccount": "Necessità di verificare l'account", - "functionNotSupported": "La versione attuale non supporta questa funzione. Contatta il team commerciale di Lowcoder per aggiornare il tuo account.", - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - - "createCompFail": "Creazione del componente {comp} fallita", - "notHandledError": "{method} Metodo non eseguito", - }, - "aggregation": { - ...en.aggregation, - - "navLayout": "Barra di navigazione", - "chooseApp": "Scegliere l'applicazione", - "iconTooltip": "Supporta il link src dell'immagine o la stringa Base64 come data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Nascosto agli utenti non autorizzati", - "queryParam": "Parametri della query URL", - "hashParam": "Parametri URL Hash", - "tabBar": "Barra delle schede", - "emptyTabTooltip": "Configurare questa pagina nel riquadro destro", - }, - "appSetting": { - ...en.appSetting, - - "450": "450px (Telefono)", - "800": "800px (Tablet)", - "1440": "1440px (Laptop)", - "1920": "1920px (schermo panoramico)", - "3200": "3200px (schermo super grande)", - "title": "Impostazioni generali dell'app", - "autofill": "Autofill", - "userDefined": "Personalizzato", - "default": "Predefinito", - "tooltip": "Chiudere il Popover dopo l'impostazione", - "canvasMaxWidth": "Larghezza massima della tela per questa applicazione", - "userDefinedMaxWidth": "Larghezza massima personalizzata", - "inputUserDefinedPxValue": "Inserire un valore Pixel personalizzato", - "maxWidthTip": "La larghezza massima deve essere maggiore o uguale a 350.", - "themeSetting": "Tema di stile applicato", - "themeSettingDefault": "Predefinito", - "themeCreate": "Creare il tema", - "appTitle": "Titolo", - "appDescription": "Descrizione", - "appCategory": "Categoria", - "showPublicHeader": "Mostra l'intestazione nella vista pubblica", - }, - "customShortcut": { - ...en.customShortcut, - - "title": "Scorciatoie personalizzate", - "shortcut": "Scorciatoia", - "action": "Azione", - "empty": "Niente scorciatoie", - "placeholder": "Premere la scorciatoia", - "otherPlatform": "Altro", - "space": "Spazio", - }, - "profile": { - ...en.profile, - - "orgSettings": "Impostazioni dello spazio di lavoro", - "switchOrg": "Cambia spazio di lavoro", - "joinedOrg": "I miei spazi di lavoro", - "createOrg": "Crea spazio di lavoro", - "logout": "Disconnettersi", - "personalInfo": "Il mio profilo", - "bindingSuccess": "Legame {sourceName} Successo", - "uploadError": "Errore di caricamento", - "editProfilePicture": "Modificare", - "saveUserNameTooltip": "Premere Invio per salvare il nuovo nome utente. Se vedete la vostra e-mail, significa che l'abbiamo appena dirottata come nome utente e potete cambiarla con una migliore. L'e-mail come nome utente tecnico rimane inalterata.", - "changeAvatarTooltip": "È possibile caricare file PNG o JPG", - "nameCheck": "Il nome non può essere vuoto", - "name": "Nome:", - "namePlaceholder": "Inserire il proprio nome", - "toBind": "Per legare", - "binding": "È vincolante", - "bindError": "Errore di parametro, attualmente non supportato Legame.", - "bindName": "Legare {name}", - "loginAfterBind": "Dopo il collegamento, è possibile utilizzare {name} per accedere.", - "bindEmail": "Legare l'e-mail:", - "email": "Email", - "emailCheck": "Inserire un'e-mail valida", - "emailPlaceholder": "Inserisci il tuo indirizzo e-mail", - "submit": "Invia", - "bindEmailSuccess": "Successo della rilegatura via e-mail", - "passwordModifiedSuccess": "Password modificata con successo", - "passwordSetSuccess": "Password impostata con successo", - "oldPassword": "Vecchia password:", - "inputCurrentPassword": "Inserire la password attuale", - "newPassword": "Nuova password:", - "inputNewPassword": "Inserire la nuova password", - "confirmNewPassword": "Confermare la nuova password:", - "inputNewPasswordAgain": "Inserire nuovamente la nuova password", - "password": "Password:", - "modifyPassword": "Modifica della password", - "setPassword": "Impostare la password", - "alreadySetPassword": "Set di password", - "setPassPlaceholder": "È possibile accedere con la password", - "setPassAfterBind": "È possibile impostare la password dopo il collegamento dell'account", - "socialConnections": "Connessioni sociali", - "changeAvatar": "Cambia Avatar", - "about": "Circa", - "userId": "ID utente", - "createdAt": "Creato a", - "currentOrg": "Organizzazione attuale", - "settings": "Impostazioni", - "uiLanguage": "Lingua UI", - "info": "Info", - "createdApps": "Le vostre applicazioni create", - "createdModules": "I moduli creati", - "sharedApps": "Applicazioni condivise con voi", - "sharedModules": "Moduli condivisi con voi", - "onMarketplace": "Sul mercato", - "howToPublish": "Come pubblicare su Marketplace", - "memberOfOrgs": "Spazi di lavoro Soci", - "apiKeys": "Chiavi API", - "createApiKey": "Creare la chiave API", - "apiKeyName": "Nome", - "apiKeyDescription": "Descrizione", - "apiKeyCopy": "Fare clic sulla chiave Api per ottenere il valore negli appunti.", - "apiKey": "Chiave API", - "deleteApiKey": "Cancellare la chiave API", - "deleteApiKeyContent": "È sicuro di voler eliminare questa chiave API?", - "deleteApiKeyError": "Qualcosa è andato storto. Riprovare.", - }, - "shortcut": { - ...en.shortcut, - - "shortcutList": "Scorciatoie da tastiera", - "click": "Cliccare", - "global": "Globale", - "toggleShortcutList": "Alternare le scorciatoie da tastiera", - "editor": "Editor", - "toggleLeftPanel": "Alterna il riquadro sinistro", - "toggleBottomPanel": "Alterna il riquadro inferiore", - "toggleRightPanel": "Alterna il riquadro destro", - "toggleAllPanels": "Alterna tutti i riquadri", - "preview": "Anteprima", - "undo": "Undo", - "redo": "Rifare", - "showGrid": "Mostra griglia", - "component": "Component", - "multiSelect": "Seleziona multiplo", - "selectAll": "Seleziona tutti", - "copy": "Copia", - "cut": "Tagliare", - "paste": "Incolla", - "move": "Muoversi", - "zoom": "Ridimensionamento", - "delete": "Cancellare", - "deSelect": "Deselezionare", - "queryEditor": "Editor di query", - "excuteQuery": "Eseguire la query corrente", - "editBox": "Editor di testo", - "formatting": "Formato", - "openInLeftPanel": "Aprire nel riquadro sinistro", - }, - "help": { - ...en.help, - - "videoText": "Panoramica", - "onBtnText": "OK", - "permissionDenyTitle": "💡 Impossibile creare una nuova applicazione o origine dati?", - "permissionDenyContent": "Non si ha l'autorizzazione a creare l'applicazione e l'origine dati. Contattare l'amministratore per unirsi al gruppo di sviluppatori.", - "appName": "Applicazione tutorial", - "chat": "Chatta con noi", - "docs": "Visualizza la documentazione", - "editorTutorial": "Editor di tutorial", - "update": "Cosa c'è di nuovo?", - "version": "Versione", - "versionWithColon": "Versione:", - "submitIssue": "Invia un problema", - }, - "header": { - ...en.header, - - "nameCheckMessage": "Il nome non può essere vuoto", - "viewOnly": "Solo vista", - "recoverAppSnapshotTitle": "Ripristinare questa versione?", - "recoverAppSnapshotContent": "Ripristinare l'applicazione corrente alla versione creata in {time}.", - "recoverAppSnapshotMessage": "Ripristinare questa versione", - "returnEdit": "Ritorno all'editore", - "deploy": "Pubblicare", - "export": "Esportazione in JSON", - "editName": "Modifica nome", - "duplicate": "Duplicato {type}", - "snapshot": "La storia", - "scriptsAndStyles": "Sceneggiature e stile", - "appSettings": "Impostazioni dell'app", - "preview": "Anteprima", - "editError": "Modalità Anteprima storia, non è supportata alcuna operazione.", - "clone": "Clone", - "editorMode_layout": "Layout", - "editorMode_logic": "Logica", - "editorMode_both": "Entrambi", - "editorMode_layout_tooltip": "Personalizzare l'aspetto e il layout del componente, nella finestra di destra. Regolate l'aspetto, gli stili e le animazioni.", - "editorMode_logic_tooltip": "Impostate il funzionamento e l'interazione del vostro componente, nella finestra giusta. Gestite il suo contenuto e i suoi comportamenti interattivi.", - "AppEditingBlocked": "Modifica dell'app bloccata per:", - "AppEditingBlockedHint": "Le modifiche non verranno salvate mentre un altro utente sta modificando questa app.", - "AppEditingBlockedMessage": "Attendere prima di controllare lo stato di modifica dell'app.", - "AppEditingBlockedCheckStatus": "Controlla lo stato dell'app", - "AppEditingBlockedSomeone": "Qualcuno", - "AppEditingBlockedMessageSnipped": "sta modificando questa app", - }, - "userAuth": { - ...en.userAuth, - - "registerByEmail": "Iscriviti", - "email": "E-mail:", - "inputEmail": "Inserisci il tuo indirizzo e-mail", - "inputValidEmail": "Inserire un'e-mail valida", - "forgotPassword": "Password dimenticata", - "forgotPasswordInfo": "Inserisci la tua e-mail e ti invieremo un link per reimpostare la tua password.", - "forgotPasswordSuccess": "Controllare l'e-mail per il link di reimpostazione della password.", - "forgotPasswordError": "Qualcosa è andato storto. Riprovare.", - "register": "Iscriviti", - "userLogin": "Accedi", - "login": "Accedi", - "bind": "Rilegatura", - "passwordCheckLength": "Almeno {min} Caratteri", - "passwordCheckContainsNumberAndLetter": "Deve contenere lettere e numeri", - "passwordCheckSpace": "Non può contenere caratteri di spazi bianchi", - "welcomeTitle": "Benvenuti a {productName}", - "inviteWelcomeTitle": "{username} vi invita a lavorare insieme", - "terms": "Termini", - "privacy": "Informativa sulla privacy", - "registerHint": "Ho letto e accetto il", - "chooseAccount": "Scegliere il proprio account", - "signInLabel": "Accesso con {name}", - "bindAccount": "Legare il conto", - "scanQrCode": "Scansionare il codice QR con {name}", - "invalidThirdPartyParam": "Param di terze parti non validi", - "account": "Conto", - "inputAccount": "Inserisci il tuo account", - "ldapLogin": "LDAP Sign In", - "resetPassword": "Reimpostare la password", - "resetPasswordDesc": "Reimpostare la password dell'utente {name}. Dopo la reimpostazione verrà generata una nuova password.", - "resetSuccess": "Azzeramento riuscito", - "resetSuccessDesc": "La reimpostazione della password è riuscita. La nuova password è: {password}", - "resetLostPasswordSuccess": "La reimpostazione della password è riuscita. Effettuare nuovamente il login.", - "copyPassword": "Copia della password", - "poweredByLowcoder": "Alimentato da: Lowcoder.cloud", - }, - "preLoad": { - ...en.preLoad, - - "jsLibraryHelpText": "Aggiungere librerie JavaScript all'applicazione corrente tramite indirizzi URL. lodash, day.js, uuid, numbro sono integrati nel sistema per un uso immediato. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione, il che può avere un impatto sulle prestazioni dell'applicazione.", - "exportedAs": "Esportato come", - "urlTooltip": "Indirizzo URL della libreria JavaScript, [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/) è raccomandato.", - "externalLibsHelperText": "Sono supportate solo le librerie che utilizzano l'approccio UMD (Universal Module Definition). Per saperne di più: https://github.com/umdjs/umd", - "recommended": "Consigliato", - "viewJSLibraryDocument": "Documento", - "jsLibraryURLError": "URL non valido", - "jsLibraryExist": "La libreria JavaScript esiste già", - "jsLibraryEmptyContent": "Nessuna libreria JavaScript aggiunta", - "jsLibraryDownloadError": "Errore nel download della libreria JavaScript", - "jsLibraryInstallSuccess": "Libreria JavaScript installata con successo", - "jsLibraryInstallFailed": "Installazione della libreria JavaScript non riuscita", - "jsLibraryInstallFailedCloud": "Forse la libreria non è disponibile nella Sandbox, [Documentazione](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{message}", - "add": "Aggiungi nuovo", - "jsHelpText": "Aggiungere un metodo o una variabile globale all'applicazione corrente.", - "cssHelpText": "Aggiungere stili all'applicazione corrente. La struttura del DOM può cambiare durante l'iterazione del sistema. Cercare di modificare gli stili attraverso le proprietà dei componenti.", - "scriptsAndStyles": "Script e stili", - "jsLibrary": "Libreria JavaScript", - }, - "editorTutorials": { - ...en.editorTutorials, - - "component": "Component", - "componentContent": "Il pannello dei componenti destro offre molti blocchi di applicazioni (componenti) già pronti. Questi possono essere trascinati sulla tela per essere utilizzati. È anche possibile creare i propri componenti con un po' di conoscenze di codifica.", - "canvas": "Tela", - "canvasContent": "Costruite le vostre applicazioni su Canvas con un approccio \"What You See Is What You Get\". È sufficiente trascinare e rilasciare i componenti per progettare il layout e utilizzare le scorciatoie da tastiera per una rapida modifica, come cancellare, copiare e incollare. Una volta selezionato un componente, è possibile mettere a punto ogni dettaglio, dallo stile al layout, dal binding dei dati al comportamento logico. In più, potete usufruire del vantaggio del design reattivo, che garantisce che le vostre app siano perfette su qualsiasi dispositivo.", - "queryData": "Interrogazione dei dati", - "queryDataContent": "Qui è possibile creare query di dati e collegarsi a MySQL, MongoDB, Redis, Airtable e molte altre fonti di dati. Dopo aver configurato la query, fare clic su 'Esegui' per ottenere i dati e continuare l'esercitazione.", - "compProperties": "Proprietà dei componenti", - "interactiveDemo": "Demo interattiva", - "interactiveDemoToolTip": "Fare clic per avviare una dimostrazione interattiva di questa funzione", - }, - "supademos": { - ...en.supademos, - - "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", - }, - "homeTutorials": { - ...en.homeTutorials, - - "createAppContent": "Benvenuti! Fate clic su \"App\" e iniziate a creare la vostra prima applicazione.", - "createAppTitle": "Creare un'applicazione", - }, - "npmRegistry": { - ...en.npmRegistry, - - "npmRegistryEnable": "Abilitare il registro NPM personalizzato", - "npmRegistryUrl": "URL del registro NPM", - "npmRegistryUrlRequired": "Inserire l'URL del registro", - "npmRegistryUrlInvalid": "Inserire un URL valido", - "npmRegistryScope": "Ambito di applicazione del pacchetto", - "npmRegistryPattern": "Pattern", - "npmRegistryPatternInvalid": "Inserire un modello valido (che inizia con @ per le organizzazioni).", - "npmRegistryAuth": "Autenticazione", - "npmRegistryAuthType": "Tipo di autenticazione", - "npmRegistryAuthCredentials": "Credenziali di autenticazione", - "npmRegistryAuthCredentialsRequired": "Inserire le credenziali del registro", - "npmRegistryAuthCredentialsHelp": "Per l'autenticazione di base, fornire il nome utente e la password codificati in base64 nel formato 'base64(nome utente:password)', mentre per l'autenticazione tramite token fornire il token.", - }, - "history": { - ...en.history, - - "layout": "'{0}' Adattamento del layout", - "upgrade": "Aggiornamento '{0}'", - "delete": "Cancellare '{0}'.", - "add": "Aggiungere \"{0}\".", - "modify": "Modificare '{0}'", - "rename": "Rinominare '{1}' in '{0}'.", - "recover": "Recuperare la versione \"{2}\".", - "recoverVersion": "Recupera la versione", - "andSoOn": "e così via", - "timeFormat": "MM GG alle hh:mm A", - "emptyHistory": "Nessuna storia", - "currentVersionWithBracket": " (Attuale)", - "currentVersion": "Versione attuale", - "justNow": "Solo ora", - "history": "La storia", - }, - "home": { - ...en.home, - - "profile": "Il vostro profilo", - "news": "Notizie", - "newsLoading": "Il caricamento avverrà in pochi secondi.", - "orgHome": "Homepage (Org)", - "yourOrg": "La vostra organizzazione", - "orgHomeTitle": "Homepage dell'organizzazione", - "appMarketplace": "Mercato delle applicazioni", - "allApplications": "Le vostre applicazioni", - "allModules": "I vostri moduli", - "allFolders": "Le vostre cartelle", - "yourFolders": "Le vostre cartelle", - "modules": "Moduli", - "module": "Modulo", - "api": "API Lowcoder", - "trash": "Rifiuti", - "marketplace": "Mercato", - "allCategories": "Tutte le categorie", - "queryLibrary": "Libreria di query", - "datasource": "Fonti dei dati", - "selectDatasourceType": "Selezionare il tipo di sorgente dati", - "home": "Casa", - "all": "Tutti", - "app": "App", - "navigation": "Navigazione", - "navLayout": "Navigazione su PC", - "navLayoutDesc": "Menu a sinistra per facilitare la navigazione sul desktop.", - "mobileTabLayout": "Navigazione mobile", - "mobileTabLayoutDesc": "Barra di navigazione inferiore per una navigazione mobile fluida.", - "folders": "Cartelle", - "folder": "Cartella", - "rootFolder": "Radice", - "import": "Importazione", - "export": "Esportazione in JSON", - "show": "Mostra", - "inviteUser": "Invitare i membri", - "createFolder": "Crea cartella", - "createFolderSubTitle": "Nome della cartella:", - "moveToFolder": "Sposta nella cartella", - "moveToTrash": "Spostarsi nella spazzatura", - "moveToFolderSubTitle": "Spostare \"{name}\" in:", - "folderName": "Nome della cartella:", - "resCardSubTitle": "{time} da {creator}", - "trashEmpty": "Il cestino è vuoto.", - "projectEmpty": "Non c'è niente qui.", - "projectEmptyCanAdd": "Non avete ancora nessuna applicazione. Fare clic su Nuovo per iniziare.", - "name": "Nome", - "type": "Tipo", - "creator": "Creato da", - "lastModified": "Ultima modifica", - "deleteTime": "Cancellare il tempo", - "createTime": "Creare tempo", - "datasourceName": "Nome dell'origine dati", - "databaseName": "Nome del database", - "nameCheckMessage": "Il nome non può essere vuoto", - "deleteElementTitle": "Cancellare definitivamente", - "moveToTrashSubTitle": "{type} {name} sarà spostato nella spazzatura.", - "deleteElementSubTitle": "Eliminare {type} {name} in modo permanente, non può essere recuperato.", - "deleteSuccessMsg": "Eliminato con successo", - "deleteErrorMsg": "Errore eliminato", - "recoverSuccessMsg": "Recuperato con successo", - "newDatasource": "Nuova fonte di dati", - "creating": "Creare...", - "chooseDataSourceType": "Scegliere il tipo di origine dati", - "folderAlreadyExists": "La cartella esiste già", - "newNavLayout": "{userName}'s {name}", - "newApp": "Il nuovo {userName} di {name}", - "importError": "Errore di importazione, {message}", - "exportError": "Errore di esportazione, {message}", - "importSuccess": "Successo dell'importazione", - "fileUploadError": "Errore nel caricamento dei file", - "fileFormatError": "Errore di formato del file", - "groupWithSquareBrackets": "[Gruppo]", - "allPermissions": "Proprietario", - "shareLink": "Condividi il link:", - "copyLink": "Copiare il link", - "appPublicMessage": "Rendere pubblica l'applicazione. Chiunque può visualizzarla.", - "modulePublicMessage": "Rendere pubblico il modulo. Chiunque può vederlo.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Pubblicate la vostra applicazione sul Marketplace pubblico. Chiunque può visualizzarla e copiarla da lì.", - "moduleMarketplaceMessage": "Pubblicate il vostro modulo sul Mercato pubblico. Chiunque può visualizzarlo e copiarlo da lì.", - "marketplaceGoodPublishing": "Assicuratevi che la vostra applicazione abbia un buon nome e sia facile da usare. Rimuovere tutte le informazioni sensibili prima di pubblicarle. Inoltre, rimuovete le fonti di dati locali e sostituitele con dati temporanei statici integrati.", - "noMarketplaceApps": "Non ci sono ancora applicazioni sul mercato", - "errorMarketplaceApps": "Errore durante il caricamento delle applicazioni del Marketplace", - "localMarketplaceTitle": "Mercato locale", - "globalMarketplaceTitle": "Mercato pubblico", - "memberPermissionList": "Permessi per i membri:", - "orgName": "{orgName} admins", - "addMember": "Aggiungi membri", - "addPermissionPlaceholder": "Inserire un nome per cercare i membri", - "searchMemberOrGroup": "Ricerca di membri o gruppi:", - "addPermissionErrorMessage": "Impossibile aggiungere l'autorizzazione, {message}", - "copyModalTitle": "Clonare \"{name}\".", - "copyNameLabel": "{type} nome", - "copyModalfolderLabel": "Aggiungi alla cartella", - "copyNamePlaceholder": "Inserire il nome di un {type}.", - "chooseNavType": "Scegliere il tipo di navigazione", - "createNavigation": "Crea navigazione", - "howToUseAPI": "Come utilizzare l'API Open Rest", - "support": "Supporto", - }, - "support": { - ...en.support, - - "supportTitle": "Supporto Lowcoder", - "supportContent": "Se hai domande o hai bisogno di aiuto, usa il sistema di ticket per risolvere il problema rapidamente.", - "newSupportTicket": "Nuovo Ticket di Supporto", - "ticketTitle": "Titolo", - "priority": "Priorità", - "assignee": "Assegnatario", - "status": "Stato del Ticket", - "updatedTime": "Tempo Aggiornato", - "active": "Attivo", - "inactive": "Inattivo", - "noEmail": "Nessuna E-mail", - "details": "Dettagli", - "reloadTickets": "Ricarica Ticket", - "createdDate": "Data di Creazione", - "updatedDate": "Data di Aggiornamento", - "description": "Descrizione del Problema", - "subtasks": "Sottoattività", - "subtasksProgress": "Avanzamento di tutte le Sottoattività", - "attachments": "Allegati al Problema", - "comments": "Commenti", - "addComment": "Aggiungi Commento", - "addAttachment": "Aggiungi Allegato", - "edit": "Modifica Descrizione Ticket", - "save": "Salva Descrizione Ticket", - "cancel": "Annulla", - "submitComment": "Invia Commento", - "upload": "Invia Allegato", - "selectFile": "Seleziona File", - "ticketDescriptionUpdated": "Descrizione del ticket aggiornata con successo!", - "ticketDescriptionUpdateFailed": "Aggiornamento della descrizione del ticket non riuscito.", - "writeComment": "Scrivi un commento...", - "ticketCommentAdded": "Commento aggiunto con successo!", - "ticketCommentFailed": "Impossibile aggiungere il commento.", - "ticketCommentEmpty": "Si prega di scrivere un commento prima di inviare.", - "ticketAttachmentUploaded": "Allegato caricato con successo!", - "ticketAttachmentFailed": "Caricamento dell'allegato non riuscito.", - "ticketAttachmentEmpty": "Seleziona un file da caricare.", - "ticketFetchError": "Caricamento del ticket fallito.", - "ticketNotFound": "Ticket non trovato.", - "addAttachmentFileSize": "Il file deve essere inferiore a 5MB!", - "goBack": "Torna Indietro", - "noDescription": "Nessuna descrizione disponibile.", - "createTicket": "Crea un nuovo Ticket di Supporto", - "createTicketTitlePlaceholder": "Inserisci il Titolo (max 150 caratteri)", - "createTicketDescriptionTitle": "Descrivi il tuo problema - più dettagli, meglio è:", - "createTicketDescriptionPlaceholder": "Descrivi il problema in dettaglio, includendo: 1) Passaggi per riprodurre il problema, 2) Comportamento previsto rispetto al comportamento reale, 3) Frammenti di codice, se applicabile, 4) Componenti, API o configurazioni specifiche interessate", - "createTicketSubmit": "Invia Ticket", - "createTicketInfoText": "Una volta creato il Ticket, potrai aggiungere Screenshot e Commenti nella sezione 'Dettagli'.", - }, - "carousel": { - ...en.carousel, - - "dotPosition": "Posizione dei punti di navigazione", - "autoPlay": "AutoPlay", - "showDots": "Mostra punti di navigazione", - }, - "npm": { - ...en.npm, - - "invalidNpmPackageName": "Nome o URL del pacchetto npm non valido.", - "pluginExisted": "Questo plugin npm esisteva già", - "compNotFound": "Il componente {compName} non è stato trovato.", - "addPluginModalTitle": "Aggiungere un plugin da un repository npm", - "pluginNameLabel": "URL o nome del pacchetto npm", - "noCompText": "Nessun componente.", - "compsLoading": "Caricamento...", - "removePluginBtnText": "Rimuovere", - "addPluginBtnText": "Aggiungere il plugin npm", - }, - "toggleButton": { - ...en.toggleButton, - - "valueDesc": "Il valore predefinito del pulsante di attivazione, ad esempio: Falso", - "trueDefaultText": "Nascondere", - "falseDefaultText": "Mostra", - "trueLabel": "Testo per Vero", - "falseLabel": "Testo per Falso", - "trueIconLabel": "Icona per Vero", - "falseIconLabel": "Icona per Falso", - "iconPosition": "Icona Posizione", - "showText": "Mostra testo", - "alignment": "Allineamento", - "showBorder": "Mostra il confine", - }, - "componentDoc": { - ...en.componentDoc, - - "markdownDemoText": "**Lowcoder** | Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", - "demoText": "Lowcoder | Crea applicazioni software per la tua azienda e i tuoi clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", - "submit": "Invia", - "style": "Stile", - "danger": "Pericolo", - "warning": "Avvertenze", - "success": "Il successo", - "menu": "Menu", - "link": "Collegamento a", - "customAppearance": "Aspetto personalizzato", - "search": "Ricerca", - "pleaseInputNumber": "Inserire un numero", - "mostValue": "Più valore", - "maxRating": "Valutazione massima", - "notSelect": "Non selezionato", - "halfSelect": "Mezza selezione", - "pleaseSelect": "Selezionare", - "title": "Titolo", - "content": "Content", - "componentNotFound": "Il componente non esiste", - "example": "Esempi", - "defaultMethodDesc": "Impostare il valore della proprietà {name}", - "propertyUsage": "È possibile leggere le informazioni relative al componente accedendo alle proprietà del componente in base al suo nome ovunque si possa scrivere JavaScript.", - "property": "Proprietà", - "propertyName": "Nome della proprietà", - "propertyType": "Tipo", - "propertyDesc": "Descrizione", - "event": "Eventi", - "eventName": "Nome dell'evento", - "eventDesc": "Descrizione", - "mehtod": "Metodi", - "methodUsage": "L'utente ha la possibilità di interagire con i componenti tramite i loro rispettivi metodi, ai quali si può accedere con i nomi designati all'interno di qualsiasi segmento in cui si utilizza JavaScript. Inoltre, questi componenti possono essere attivati attraverso l'azione 'Control Component', che viene attivata in risposta a eventi specifici.", - "methodName": "Nome del metodo", - "methodDesc": "Descrizione", - "showBorder": "Mostra il confine", - "haveTry": "Provate voi stessi", - "settings": "Impostazione", - "settingValues": "Impostazione Valore", - "defaultValue": "Valore predefinito", - "time": "Tempo", - "date": "Data", - "noValue": "Nessuno", - "xAxisType": "Tipo di asse X", - "hAlignType": "Allineamento orizzontale", - "leftLeftAlign": "Allineamento a sinistra", - "leftRightAlign": "Allineamento sinistra-destra", - "topLeftAlign": "Allineamento in alto a sinistra", - "topRightAlign": "Allineamento in alto a destra", - "validation": "Convalida", - "required": "Richiesto", - "defaultStartDateValue": "Data di inizio predefinita", - "defaultEndDateValue": "Data di fine predefinita", - "basicUsage": "Uso di base", - "basicDemoDescription": "I seguenti esempi mostrano l'uso di base del componente.", - "noDefaultValue": "Nessun valore predefinito", - "forbid": "Vietato", - "placeholder": "Segnaposto", - "pleaseInputPassword": "Inserire una password", - "password": "Password", - "textAlign": "Allineamento del testo", - "length": "Lunghezza", - "top": "In alto", - "pleaseInputName": "Inserire il proprio nome", - "userName": "Nome", - "fixed": "Fisso", - "responsive": "Reattivo", - "workCount": "Conteggio delle parole", - "cascaderOptions": "Opzioni Cascader", - "pleaseSelectCity": "Selezionare una città", - "advanced": "Avanzato", - "showClearIcon": "Mostra l'icona Cancella", - /* eslint-disable only-ascii/only-ascii */ - "appleOptionLabel": "🍎 Mela", - "waterMelonOptionLabel": "🍉 Anguria", - "berryOptionLabel": "🍓 Fragola", - "lemonOptionLabel": "🍋 Limone", - "coconutOptionLabel": "🥥 Noce di cocco", - /* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Preferiti", - "option": "Opzione", - "singleFileUpload": "Caricamento di un singolo file", - "multiFileUpload": "Caricamento multiplo di file", - "folderUpload": "Caricamento cartelle", - "multiFile": "File multipli", - "folder": "Cartella", - "open": "Aperto", - "favoriteFruits": "Frutti preferiti", - "pleaseSelectOneFruit": "Selezionare un frutto", - "notComplete": "Non completo", - "complete": "Completo", - "echart": "Grafico elettronico", - "lineChart": "Grafico a linee", - "basicLineChart": "Grafico a linee di base", - "lineChartType": "Tipo di grafico a linee", - "stackLineChart": "Linea impilata", - "areaLineChart": "Linea d'area", - "scatterChart": "Grafico a dispersione", - "scatterShape": "Forma dello spargimento", - "scatterShapeCircle": "Cerchio", - "scatterShapeRect": "Rettangolo", - "scatterShapeTri": "Triangolo", - "scatterShapeDiamond": "Diamante", - "scatterShapePin": "Perno", - "scatterShapeArrow": "Freccia", - "pieChart": "Grafico a torta", - "basicPieChart": "Grafico a torta di base", - "pieChatType": "Tipo di grafico a torta", - "pieChartTypeCircle": "Tabella delle ciambelle", - "pieChartTypeRose": "Grafico delle rose", - "titleAlign": "Titolo Posizione", - "color": "Colore", - "dashed": "Tratteggiato", - "imADivider": "Io sono una linea di demarcazione", - "tableSize": "Dimensione della tabella", - "subMenuItem": "Sottomenu {num}", - "menuItem": "Menu {num}", - "labelText": "Etichetta", - "labelPosition": "Etichetta - Posizione", - "labelAlign": "Etichetta - Allineamento", - "optionsOptionType": "Metodo di configurazione", - "styleBackgroundColor": "Colore di sfondo", - "styleBorderColor": "Colore del bordo", - "styleColor": "Colore del carattere", - "selectionMode": "Modalità di selezione delle righe", - "paginationSetting": "Impostazione della paginazione", - "paginationShowSizeChanger": "Supporto agli utenti per la modifica del numero di voci per pagina", - "paginationShowSizeChangerButton": "Pulsante Mostra cambio formato", - "paginationShowQuickJumper": "Mostra Quick Jumper", - "paginationHideOnSinglePage": "Nascondere quando c'è una sola pagina", - "paginationPageSizeOptions": "Dimensione della pagina", - "chartConfigCompType": "Tipo di grafico", - "xConfigType": "Tipo di asse X", - "loading": "Caricamento", - "disabled": "Disabili", - "minLength": "Lunghezza minima", - "maxLength": "Lunghezza massima", - "showCount": "Mostra il conteggio delle parole", - "autoHeight": "Altezza", - "thousandsSeparator": "Separatore di migliaia", - "precision": "Posizioni decimali", - "value": "Valore predefinito", - "formatter": "Formato", - "min": "Valore minimo", - "max": "Valore massimo", - "step": "Dimensione del passo", - "start": "Ora di inizio", - "end": "Tempo della fine", - "allowHalf": "Consentire la selezione della metà", - "filetype": "Tipo di file", - "showUploadList": "Mostra elenco di caricamento", - "uploadType": "Tipo di caricamento", - "allowClear": "Mostra l'icona Cancella", - "minSize": "Dimensione minima del file", - "maxSize": "Dimensione massima del file", - "maxFiles": "Numero massimo di file caricati", - "format": "Formato", - "minDate": "Data minima", - "maxDate": "Data massima", - "minTime": "Tempo minimo", - "maxTime": "Tempo massimo", - "text": "Testo", - "type": "Tipo", - "hideHeader": "Nascondi intestazione", - "hideBordered": "Nascondi bordo", - "src": "URL immagine", - "showInfo": "Valore di visualizzazione", - "mode": "Modalità", - "onlyMenu": "Solo menu", - "horizontalAlignment": "Allineamento orizzontale", - "row": "A sinistra", - "column": "In alto", - "leftAlign": "Allineamento a sinistra", - "rightAlign": "Allineamento a destra", - "percent": "Percentuale", - "fixedHeight": "Altezza fissa", - "auto": "Adattivo", - "directory": "Cartella", - "multiple": "File multipli", - "singleFile": "File singolo", - "manual": "Manuale", - "default": "Predefinito", - "small": "Piccolo", - "middle": "Medio", - "large": "Grande", - "single": "Singolo", - "multi": "Multiplo", - "close": "Chiudere", - "ui": "Modalità UI", - "line": "Grafico a linee", - "scatter": "Grafico di dispersione", - "pie": "Grafico a torta", - "basicLine": "Grafico a linee di base", - "stackedLine": "Grafico a linee sovrapposte", - "areaLine": "Mappa dell'area", - "basicPie": "Grafico a torta di base", - "doughnutPie": "Tabella delle ciambelle", - "rosePie": "Grafico delle rose", - "category": "Categoria Asse", - "circle": "Cerchio", - "rect": "Rettangolo", - "triangle": "Triangolo", - "diamond": "Diamante", - "pin": "Perno", - "arrow": "Freccia", - "left": "A sinistra", - "right": "Diritto", - "center": "Centro", - "bottom": "Bottom", - "justify": "Giustificare entrambi i fini", - }, - "playground": { - ...en.playground, - - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Stato attuale dei dati", - "preview": "Anteprima", - "property": "Proprietà", - "console": "Console Visual Script", - "executeMethods": "Metodi di esecuzione", - "noMethods": "Nessun metodo.", - "methodParams": "Parametri del metodo", - "methodParamsHelp": "Parametri del metodo di input tramite JSON. Ad esempio, è possibile impostare i parametri di setValue con: [1] o 1", - }, - "calendar": { - ...en.calendar, - - "headerBtnBackground": "Sfondo del pulsante", - "btnText": "Testo del pulsante", - "title": "Titolo", - "selectBackground": "Un contesto selezionato", - }, - "idSource": { - ...en.idSource, - - "title": "Provider di autenticazione utente", - "form": "Email", - "pay": "Premio", - "enable": "Abilitazione", - "unEnable": "Non abilitato", - "loginType": "Tipo di accesso", - "status": "Stato", - "desc": "Descrizione", - "manual": "Rubrica:", - "syncManual": "Sincronizzazione della rubrica", - "syncManualSuccess": "Sincronizzazione riuscita", - "enableRegister": "Consentire la registrazione", - "saveBtn": "Salva e abilita", - "save": "Risparmiare", - "none": "Nessuno", - "formPlaceholder": "Inserire {label}", - "formSelectPlaceholder": "Selezionare il {label}.", - "saveSuccess": "Salvato con successo", - "dangerLabel": "Zona di pericolo", - "dangerTip": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Procedere con cautela.", - "disable": "Disattivare", - "disableSuccess": "Disattivato con successo", - "encryptedServer": "-------- Crittografato sul lato server --------", - "disableTip": "Suggerimenti", - "disableContent": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Siete sicuri di voler procedere?", - "manualTip": "", - "lockTip": "Il contenuto è bloccato. Per apportare modifiche, fare clic su {icon} per sbloccare.", - "lockModalContent": "La modifica del campo \"Attributo ID\" può avere un impatto significativo sull'identificazione degli utenti. Prima di procedere, accertarsi di aver compreso le implicazioni di questa modifica.", - "payUserTag": "Premio", - "source": "Fonte", - "sourceName": "Nome del fornitore di autorizzazione", - "sourceDescription": "Descrizione del fornitore di autorizzazioni", - "sourceIcon": "Icona Provider di autorizzazione", - "sourceCategory": "Categoria del fornitore di autorizzazioni", - "souceIssuerURI": "URI dell'emittente del fornitore di autorizzazioni", - "souceAuthorizationEndpoint": "Provider di autorizzazione Endpoint di autorizzazione", - "souceTokenEndpoint": "Provider di autorizzazione Punto finale del token", - "souceUserInfoEndpoint": "Provider di autorizzazione Info utente Endpoint", - "userInfoIntrospection": "Utilizzare l'introspezione dell'utente OpenID", - "userCanSelectAccounts": "L'utente può selezionare i conti", - "sourceCategoryEnterprise": "Identità aziendale", - "sourceCategoryCloud": "Servizi cloud", - "sourceCategorySocial": "Media sociali", - "sourceCategoryDevelopment": "Sviluppo", - "sourceCategoryTools": "Strumenti e produttività", - }, - "slotControl": { - ...en.slotControl, - - "configSlotView": "Configurazione della vista slot", - }, - "jsonLottie": { - ...en.jsonLottie, - - "lottieJson": "Lottie JSON", - "speed": "Velocità", - "width": "Larghezza", - "height": "Altezza", - "backgroundColor": "Colore di sfondo", - "animationStart": "Inizio dell'animazione", - "valueDesc": "Dati JSON correnti", - "loop": "Anello", - "auto": "Auto", - "onHover": "Su Hover", - "singlePlay": "Gioco singolo", - "endlessLoop": "Anello infinito", - "keepLastFrame": "Mantenere visualizzato l'ultimo fotogramma", - }, - "timeLine": { - ...en.timeLine, - - "titleColor": "Titolo Colore", - "subTitleColor": "Colore dei sottotitoli", - "labelColor": "Colore dell'etichetta", - "value": "Dati sulla linea del tempo", - "mode": "Ordine di visualizzazione", - "left": "Diritto al contenuto", - "right": "Contenuto Sinistra", - "alternate": "Ordine alternativo dei contenuti", - "modeTooltip": "Impostare il contenuto in modo che appaia a destra/sinistra o alternativamente su entrambi i lati della timeline.", - "reverse": "Prima gli eventi più recenti", - "pending": "Testo del nodo in attesa", - "pendingDescription": "Se impostato, viene visualizzato un ultimo nodo con il testo e un indicatore di attesa.", - "defaultPending": "Miglioramento continuo", - "clickTitleEvent": "Fare clic su Titolo evento", - "clickTitleEventDesc": "Fare clic su Titolo evento", - "Introduction": "Tasti di introduzione", - "helpTitle": "Titolo della linea temporale (obbligatorio)", - "helpsubTitle": "Sottotitolo della linea temporale", - "helpLabel": "Etichetta della linea temporale, utilizzata per visualizzare le date", - "helpColor": "Indica il colore del nodo della linea temporale", - "helpDot": "Rendering dei nodi della timeline come icone di design Ant", - "helpTitleColor": "Controllo individuale del colore del titolo del nodo", - "helpSubTitleColor": "Controllo individuale del colore del sottotitolo del nodo", - "helpLabelColor": "Controllo individuale del colore dell'icona del nodo", - "valueDesc": "Dati della linea temporale", - "clickedObjectDesc": "Dati dell'elemento cliccato", - "clickedIndexDesc": "Indice degli elementi cliccati", - }, - "comment": { - ...en.comment, - - "value": "Come elencare i dati", - "showSendButton": "Consentire i commenti", - "title": "Titolo", - "titledDefaultValue": "%d Commento in totale", - "placeholder": "Maiusc + Invio per commentare; inserire @ o # per l'immissione rapida.", - "placeholderDec": "Segnaposto", - "buttonTextDec": "Titolo del pulsante", - "buttonText": "Come", - "mentionList": "Dati dell'elenco delle menzioni", - "mentionListDec": "Parole chiave-menzione; dati dell'elenco delle menzioni-valore", - "userInfo": "Info utente", - "dateErr": "Errore di data", - "commentList": "Come elencare", - "deletedItem": "Voce cancellata", - "submitedItem": "Articolo presentato", - "deleteAble": "Mostra il pulsante Elimina", - "Introduction": "Tasti di introduzione", - "helpUser": "Informazioni sull'utente (obbligatorio)", - "helpname": "Nome utente (obbligatorio)", - "helpavatar": "URL dell'avatar (alta priorità)", - "helpdisplayName": "Nome visualizzato (priorità bassa)", - "helpvalue": "Come il contenuto", - "helpcreatedAt": "Data di creazione", - }, - "mention": { - ...en.mention, - - "mentionList": "Dati dell'elenco delle menzioni", - }, - "autoComplete": { - ...en.autoComplete, - - "value": "Auto Complete Value", - "checkedValueFrom": "Valore controllato Da", - "ignoreCase": "Ricerca Ignorare il caso", - "searchLabelOnly": "Cerca solo nell'etichetta", - "searchFirstPY": "Cerca il primo Pinyin", - "searchCompletePY": "Ricerca Pinyin completo", - "searchText": "Testo di ricerca", - "SectionDataName": "Dati di completamento automatico", - "valueInItems": "Valore in articoli", - "type": "Tipo", - "antDesign": "AntDesign", - "normal": "Normale", - "selectKey": "Chiave", - "selectLable": "Etichetta", - "ComponentType": "Tipo di componente", - "colorIcon": "Blu", - "grewIcon": "Grigio", - "noneIcon": "Nessuno", - "small": "Piccolo", - "large": "Grande", - "componentSize": "Dimensione del componente", - "Introduction": "Tasti di introduzione", - "helpLabel": "Etichetta", - "helpValue": "Valore", - }, - "responsiveLayout": { - ...en.responsiveLayout, - - "column": "Colonne", - "addColumn": "Aggiungi colonna", - "columnDefinition": "Definizione della colonna", - "rowDefinition": "Definizione di riga", - "columnGap": "Spazio tra le colonne", - "rowGap": "Distanza tra le file", - "atLeastOneColumnError": "Il layout reattivo mantiene almeno una colonna", - "columnsPerRow": "Colonne per riga", - "columnsSpacing": "Spaziatura delle colonne (px)", - "horizontal": "Orizzontale", - "vertical": "Verticale", - "mobile": "Mobile", - "tablet": "Tavoletta", - "desktop": "Desktop", - "rowStyle": "Stile della fila", - "columnStyle": "Stile colonna", - "minWidth": "Min. Larghezza", - "rowBreak": "Interruzione della fila", - "useComponentWidth": "Usa dimensione propria", - "useComponentWidthDesc": "Utilizza la larghezza del contenitore invece della larghezza dell'app", - "matchColumnsHeight": "Abbinare l'altezza delle colonne", - "rowLayout": "Disposizione delle file", - "columnsLayout": "Layout delle colonne", - "columnsDefinitionTooltip": "Le colonne possono essere definite liberamente in base alle proprietà delle colonne CSS. Ad esempio, 'auto auto' creerà due colonne di uguale larghezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "Le righe possono essere definite liberamente in base alle proprietà CSS delle righe. Ad esempio, 'auto auto' creerà due righe di uguale altezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, - "navLayout": { - ...en.navLayout, - - "mode": "Modalità", - "modeInline": "In linea", - "modeVertical": "Verticale", - "modeHorizontal": "Orizzontale", - "width": "Larghezza", - "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", - "navStyle": "Menu stile", - "navItemStyle": "Stile della voce di menu", - "navBackground": "Immagine di sfondo", - "mobileNavVerticalOrientation": "Orientamento verticale", - "mobileNavVerticalMaxWidth": "Larghezza massima", - "mobileNavBarHeight": "Altezza della barra di navigazione", - "mobileNavVerticalShowSeparator": "Mostra separatore", - "mobileNavIconSize": "Dimensione dell'icona", - }, - "timeZone": { - ...en.timeZone, - - "UTC-12:00": "(UTC-12:00) Linea di data internazionale W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Hawaii", - "UTC-09:00": "(UTC-09:00) Alaska", - "UTC-08:00": "(UTC-08:00) Baja CA", - "UTC-07:00": "(UTC-07:00) Ora del Pacifico (USA)", - "UTC-06:00": "(UTC-06:00) Ora centrale (USA)", - "UTC-05:00": "(UTC-05:00) Ora orientale (USA)", - "UTC-04:00": "(UTC-04:00) Ora dell'Atlantico", - "UTC-03:00": "(UTC-03:00) Buenos Aires", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Capo Verde", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Berlino, Roma", - "UTC+02:00": "(UTC+02:00) Atene, Bucarest", - "UTC+03:00": "(UTC+03:00) Mosca", - "UTC+04:00": "(UTC+04:00) Dubai, Muscat", - "UTC+05:00": "(UTC+05:00) Karachi", - "UTC+05:30": "(UTC+05:30) Nuova Delhi", - "UTC+05:45": "(UTC+05:45) Kathmandu", - "UTC+06:00": "(UTC+06:00) Dhaka", - "UTC+06:30": "(UTC+06:30) Yangon", - "UTC+07:00": "(UTC+07:00) Bangkok", - "UTC+08:00": "(UTC+08:00) Pechino, HK", - "UTC+09:00": "(UTC+09:00) Tokyo, Seul", - "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", - "UTC+10:00": "(UTC+10:00) Sydney", - "UTC+11:00": "(UTC+11:00) Isole Salomone, Nuova Caledonia", - "UTC+12:00": "(UTC+12:00) Auckland, Fiji", - "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", - "UserChoice": "Scelta dell'utente", - }, - "tour": { - ...en.tour, - - "section1Title": "Passi", - "section1Subtitle": "Passi", - "tooltipExampleHeader": "Esempio:", - "tooltipSignatureHeader": "Firma:", - "options": { - ...en.tour.options, - - "title": { - ...en.tour.options.title, - - "label": "Titolo", - "placeholder": "Benvenuti", - "tooltip": "Il titolo del passo. Qui è valido qualsiasi HTML.", - }, - "description": { - ...en.tour.options.description, - - "label": "Descrizione", - "placeholder": "Benvenuto su lowcoder!", - "tooltip": "La descrizione del passo. Qui è valido qualsiasi HTML.", - }, - "mask": { - ...en.tour.options.mask, - - "label": "Maschera", - "tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour.", - "tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", - }, - "arrow": { - ...en.tour.options.arrow, - - "label": "Freccia", - "tooltip": "Attiva e disattiva la freccia o la sposta al centro del componente, se lo si desidera; in caso contrario, la freccia sarà sempre rivolta verso la parte superiore del componente.", - "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.options.type, - - "label": "Tipo", - "tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour.", - }, - "target": { - ...en.tour.options.target, - - "label": "Component", - "tooltip": "Il componente su cui si vuole inserire il tooltip, oppure lasciarlo vuoto se si vuole semplicemente un modal al centro dello schermo.", - }, - "coverImage": { - ...en.tour.options.coverImage, - - "label": "URI dell'immagine di copertina", - "tooltip": "Un URI per un'immagine che si desidera visualizzare con il passaggio", - }, - }, - "indicatorsRender": { - ...en.tour.indicatorsRender, - - "label": "Indicatori Render", - "tooltip": "Fornisce un indicatore personalizzato della fase in cui ci si trova", - "tooltipValidTypes": "Format è una funzione che accetta due argomenti, `current` e `total` e restituisce un ReactNode", - "tooltipFunctionSignatureHeader": "Firma:", - "tooltipFunctionSignature": "(corrente: numero, totale: numero) => ReactNode", - "tooltipExampleHeader": "Esempio:", - }, - "disabledInteraction": { - ...en.tour.disabledInteraction, - - "label": "Disattivare l'interazione", - "tooltip": "Disabilita l'interazione nell'area evidenziata.", - }, - "mask": { - ...en.tour.mask, - - "label": "Maschera", - "tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour. Può essere sovrascritto a livello di passo.", - "tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", - }, - "placement": { - ...en.tour.placement, - - "label": "Posizionamento", - "tooltip": "Posizione della carta guida rispetto all'elemento di destinazione. Può essere sovrascritta a livello di passo.", - "tooltipValidOptions": "Opzioni valide", - "tooltipValidOptionsAbove": "Sopra il componente:", - "tooltipValidOptionsLeft": "A sinistra del componente:", - "tooltipValidOptionsRight": "A destra del componente:", - "tooltipValidOptionsBelow": "Sotto il componente:", - "tooltipValidOptionsOnTop": "In cima al componente:", - }, - "arrow": { - ...en.tour.arrow, - - "label": "Freccia", - "tooltip": "Attiva e disattiva la freccia o la sposta in modo che punti al centro del componente, se lo si desidera, altrimenti la freccia punterà sempre vicino alla parte superiore del componente. Può essere sovrascritto a livello di passo.", - "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.type, - - "label": "Tipo", - "tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour. Può essere sovrascritto a livello di passo.", - }, - }, - "docUrls": { - ...en.docUrls, - - "docHome": "https://docs.lowcoder.cloud/", - "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - "components": "https://app.lowcoder.cloud/components/{compType}", - "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - "optionList": "", - "terms": "https://lowcoder.cloud/terms", - "privacy": "https://lowcoder.cloud/privacy", - "aboutUs": "https://lowcoder.cloud/about", - "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", - "introVideo": "", - "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - "devNpmPluginText": "Come sviluppare un plugin npm", - "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - "thirdLibUrlText": "Utilizzare librerie di terze parti", - }, - "datasourceTutorial": { - ...en.datasourceTutorial, - - "mysql": "", - "mongodb": "", - "postgres": "", - "redis": "", - "es": "", - "smtp": "", - "clickHouse": "", - }, - "queryTutorial": { - ...en.queryTutorial, - - "js": "", - "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - "customComponent": { - ...en.customComponent, - - "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", - }, - "template": { - ...en.template, - - "cloneUrl": "/apps/template-import/", - }, - "lowcoderUrl": { - ...en.lowcoderUrl, - - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", - }, - -}; + ...en, + +"productName": "Lowcoder", +"productDesc": "Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è un'eccellente alternativa a Retool, Appsmith e Tooljet.", +"notSupportedBrowser": "Il browser in uso potrebbe presentare problemi di compatibilità. Per un'esperienza d'uso ottimale, utilizzare l'ultima versione di Chrome.", +"create": "Creare", +"move": "Muoversi", +"addItem": "Aggiungi", +"newItem": "Nuovo", +"copy": "Copia", +"rename": "Rinominare", +"delete": "Cancellare", +"deletePermanently": "Cancellare definitivamente", +"remove": "Rimuovere", +"recover": "Recupero", +"edit": "Modifica", +"view": "Vista", +"value": "Valore", +"data": "Dati", +"information": "Informazioni", +"success": "Il successo", +"warning": "Avvertenze", +"error": "Errore", +"reference": "Riferimento", +"text": "Testo", +"basic": "Base", +"label": "Etichetta", +"layout": "Layout", +"color": "Colore", +"form": "Forma", +"menu": "Menu", +"menuItem": "Voce di menu", +"ok": "OK", +"cancel": "Annulla", +"finish": "Finitura", +"reset": "Reset", +"icon": "Icona", +"code": "Codice", +"title": "Titolo", +"emptyContent": "Contenuto vuoto", +"more": "Di più", +"search": "Ricerca", +"back": "Indietro", +"accessControl": "Controllo degli accessi", +"copySuccess": "Copiato con successo", +"copyError": "Errore di copia", +"api": { + ...en.api, + +"publishSuccess": "Pubblicato con successo", +"recoverFailed": "Recupero fallito", +"needUpdate": "La versione attuale è obsoleta. Si prega di aggiornare alla versione più recente.", +}, +"codeEditor": { + ...en.codeEditor, + +"notSupportAutoFormat": "L'editor di codice attuale non supporta la formattazione automatica.", +"fold": "Piegare", +}, +"exportMethod": { + ...en.exportMethod, + +"setDesc": "Impostare la proprietà: {property}", +"clearDesc": "Proprietà libera: {property}", +"resetDesc": "Ripristinare la proprietà: {property} al valore predefinito", +}, +"method": { + ...en.method, + +"focus": "Impostare la messa a fuoco", +"focusOptions": "Opzioni di messa a fuoco. Vedere HTMLElement.focus()", +"blur": "Rimuovere la messa a fuoco", +"click": "Cliccare", +"select": "Seleziona tutto il testo", +"setSelectionRange": "Impostare le posizioni iniziali e finali della selezione di testo", +"selectionStart": "Indice basato su 0 del primo carattere selezionato", +"selectionEnd": "Indice basato su 0 del carattere successivo all'ultimo carattere selezionato", +"setRangeText": "Sostituire l'intervallo di testo", +"replacement": "Stringa da inserire", +"replaceStart": "Indice basato su 0 del primo carattere da sostituire", +"replaceEnd": "Indice basato su 0 del carattere dopo l'ultimo carattere da sostituire", +}, +"errorBoundary": { + ...en.errorBoundary, + +"encounterError": "Il caricamento del componente non è riuscito. Controllare la configurazione.", +"clickToReload": "Fare clic per ricaricare", +"errorMsg": "Errore:", +}, +"imgUpload": { + ...en.imgUpload, + +"notSupportError": "Supporta solo i tipi di immagine {types}.", +"exceedSizeError": "Le dimensioni dell'immagine non devono superare {size}.", +}, +"gridCompOperator": { + ...en.gridCompOperator, + +"notSupport": "Non supportato", +"selectAtLeastOneComponent": "Selezionare almeno un componente", +"selectCompFirst": "Selezionare i componenti prima di copiare", +"noContainerSelected": "[Bug] Nessun contenitore selezionato", +"deleteCompsSuccess": "Eliminato con successo. Premere {undoKey} per annullare.", +"deleteCompsTitle": "Eliminazione dei componenti", +"deleteCompsBody": "Siete sicuri di voler eliminare {compNum} componenti selezionati?", +"cutCompsSuccess": "Tagliare con successo. Premere {pasteKey} per incollare o {undoKey} per annullare.", +}, +"leftPanel": { + ...en.leftPanel, + +"queries": "Query di dati nella vostra applicazione", +"globals": "Variabili di dati globali", +"propTipsArr": "{num} Articoli", +"propTips": "{num} Chiavi", +"propTipArr": "{num} Oggetto", +"propTip": "{num} Chiave", +"stateTab": "Stato", +"settingsTab": "Impostazioni", +"toolbarTitle": "Individualizzazione", +"toolbarPreload": "Script e stili", +"components": "Componenti attivi", +"modals": "modali in-app", +"expandTip": "Fare clic per mostrare i dati di {component}", +"collapseTip": "Fare clic per nascondere i dati di {component}.", +"layers": "Strati", +"activatelayers": "Utilizzare i livelli dinamici", +"selectedComponents": "Componenti selezionati...", +"displayComponents": "controllo Display", +"lockComponents": "controllo Posizione", +}, +"bottomPanel": { + ...en.bottomPanel, + +"title": "Data Queries", +"run": "Correre", +"noSelectedQuery": "Nessuna query selezionata", +"metaData": "Metadati della fonte di dati", +"noMetadata": "Nessun metadato disponibile", +"metaSearchPlaceholder": "Ricerca metadati", +"allData": "Tutti i tavoli", +}, +"rightPanel": { + ...en.rightPanel, + +"propertyTab": "Proprietà", +"noSelectedComps": "Nessun componente selezionato. Fare clic su un componente per visualizzarne le proprietà.", +"createTab": "Inserire", +"searchPlaceHolder": "Ricerca di componenti o moduli", +"uiComponentTab": "Componenti", +"extensionTab": "Estensioni", +"modulesTab": "Moduli", +"moduleListTitle": "Moduli", +"pluginListTitle": "Plugin", +"emptyModules": "I moduli sono Mikro-App riutilizzabili. Possono essere incorporati nella vostra App.", +"searchNotFound": "Non riuscite a trovare il componente giusto?", +"emptyPlugins": "Nessun plugin aggiunto", +"contactUs": "Contatto", +"issueHere": "qui.", +"folderListTitle": "Cartelle", +}, +"prop": { + ...en.prop, + +"expand": "Espandi", +"columns": "Colonne", +"videokey": "Chiave video", +"rowSelection": "Selezione della riga", +"toolbar": "Barra degli strumenti", +"pagination": "Paginazione", +"logo": "Logo", +"style": "Stile", +"inputs": "Ingressi", +"meta": "Metadati", +"data": "Dati", +"hide": "Nascondere", +"loading": "Caricamento", +"disabled": "Disabili", +"placeholder": "Segnaposto", +"showClear": "Mostra il pulsante Cancella", +"showSearch": "Ricercabile", +"defaultValue": "Valore predefinito", +"required": "Campo obbligatorio", +"showEmptyValidation": "Mostra convalida su vuoto/ripristino", +"readOnly": "Solo lettura", +"readOnlyTooltip": "I componenti di sola lettura appaiono normali ma non possono essere modificati.", +"minimum": "Minimo", +"maximum": "Massimo", +"regex": "Regex", +"minLength": "Lunghezza minima", +"maxLength": "Lunghezza massima", +"height": "Altezza", +"width": "Larghezza", +"selectApp": "Selezionare l'applicazione", +"showCount": "Mostra il conteggio", +"tabIndex": "Scheda Indice", +"textType": "Tipo di testo", +"customRule": "Regola personalizzata", +"customRuleTooltip": "Una stringa non vuota indica un errore; vuota o nulla significa che la convalida è stata superata. Esempio:", +"manual": "Manuale", +"map": "Mappa", +"json": "JSON", +"use12Hours": "Utilizzare il formato a 12 ore", +"hourStep": "Ora Passo", +"minuteStep": "Passo di un minuto", +"secondStep": "Secondo passo", +"minDate": "Data minima", +"maxDate": "Data massima", +"minTime": "Tempo minimo", +"maxTime": "Tempo massimo", +"type": "Tipo", +"showLabel": "Mostra etichetta", +"showHeader": "Mostra intestazione", +"showBody": "Mostra il corpo", +"showSider": "Mostra Sider", +"innerSider": "Pagine interne", +"showFooter": "Mostra piè di pagina", +"maskClosable": "Fare clic su Fuori per chiudere", +"escapeClose": "Abilita la chiusura con il tasto Escape", +"toggleClose": "Abilita il pulsante di chiusura", +"showMask": "Mostra maschera", +"textOverflow": "Overflow del testo", +"scrollbar": "Mostra barre di scorrimento", +"showVerticalScrollbar": "Mostra barra di scorrimento verticale", +"showHorizontalScrollbar": "Show Horizontal Scrollbar", +"siderScrollbar": "Mostra le barre di scorrimento in Sider", +"mainScrollbar": "Mostra le barre di scorrimento nel contenuto principale", +"modalScrollbar": "Mostra le barre di scorrimento nella finestra modale", +"drawerScrollbar": "Mostra le barre di scorrimento nel cassetto", +"textAreaScrollBar": "Mostra le barre di scorrimento nell'area di testo", +"siderRight": "Show sider a destra", +"siderWidth": "Larghezza Sider", +"siderWidthTooltip": "La larghezza del cursore supporta percentuali (%) e pixel (px).", +"siderCollapsedWidth": "Sider Larghezza collassata", +"siderCollapsedWidthTooltip": "La larghezza collassata del cursore supporta percentuali (%) e pixel (px).", +"siderCollapsible": "Sider pieghevole", +"siderCollapsed": "Sider è crollato", +"contentScrollbar": "Mostra le barre di scorrimento nel contenuto", +"appID": "Id dell'applicazione", +"showApp": "Mostrare un'applicazione nell'area dei contenuti", +"showAppTooltip": "È possibile visualizzare intere applicazioni nell'area dei contenuti. Si tenga presente che per i moduli non sono supportati gli eventi e i metodi di input e output.", +"baseURL": "API Base URL", +"horizontal": "Orizzontale", +"minHorizontalWidth": "Larghezza orizzontale minima", +"component": "Identificatori di componenti propri", +"className": "Nome della classe CSS", +"dataTestId": "ID individuale", +"preventOverwriting": "Impedire la sovrascrittura degli stili", +"color": "Colore", +"horizontalGridCells": "Celle della griglia orizzontale", +"verticalGridCells": "Celle della griglia verticale", +"timeZone": "Fuso orario", +"pickerMode": "Modalità Picker", +}, +"autoHeightProp": { + ...en.autoHeightProp, + +"auto": "Auto", +"fixed": "Fisso", +}, +"textOverflowProp": { + ...en.textOverflowProp, + +"ellipsis": "Passaggio del mouse", +"wrap": "Avvolgimento", +}, +"labelProp": { + ...en.labelProp, + +"text": "Etichetta", +"tooltip": "Tooltip", +"position": "Posizione", +"collapse": "Crollo", +"left": "A sinistra", +"right": "Diritto", +"top": "In alto", +"align": "Allineamento", +"width": "Larghezza", +"widthTooltip": "La larghezza dell'etichetta supporta le percentuali (%) e i pixel (px).", +}, +"eventHandler": { + ...en.eventHandler, + +"eventHandlers": "Gestori di eventi", +"emptyEventHandlers": "Nessun gestore di eventi", +"incomplete": "Selezione incompleta", +"inlineEventTitle": "Su {eventName}", +"event": "Evento", +"action": "Azione", +"noSelect": "Nessuna selezione", +"runQuery": "Run a Data Query", +"selectQuery": "Selezionare la query di dati", +"controlComp": "Controllo di un componente", +"runScript": "Eseguire JavaScript", +"runScriptPlaceHolder": "Scrivere qui il codice", +"component": "Component", +"method": "Metodo", +"setTempState": "Impostare un valore di Stato temporaneo", +"state": "Stato", +"triggerModuleEvent": "Attivare un evento del modulo", +"moduleEvent": "Modulo Evento", +"goToApp": "Vai a un'altra applicazione", +"queryParams": "Parametri della query", +"queryVariables": "Variabili della query", +"hashParams": "Parametri Hash", +"showNotification": "Mostra una notifica", +"text": "Testo", +"level": "Livello", +"duration": "Durata", +"notifyDurationTooltip": "L'unità di tempo può essere 's' (secondo, default) o 'ms' (millisecondo). La durata massima è di {max} secondi", +"goToURL": "Aprire un URL", +"openInNewTab": "Aprire in una nuova scheda", +"copyToClipboard": "Copiare un valore negli Appunti", +"copyToClipboardValue": "Valore", +"export": "Esportazione dei dati", +"exportNoFileType": "Nessuna selezione (opzionale)", +"fileName": "Nome del file", +"fileNameTooltip": "Includere l'estensione per specificare il tipo di file, ad esempio 'image.png'.", +"fileType": "Tipo di file", +"condition": "Eseguire solo quando...", +"conditionTooltip": "Eseguire il gestore dell'evento solo quando la condizione è valutata 'true'.", +"debounce": "Debounce per", +"throttle": "Acceleratore per", +"slowdownTooltip": "Utilizzare il debounce o il throttle per controllare la frequenza di attivazione delle azioni. L'unità di tempo può essere 'ms' (millisecondo, default) o 's' (secondo).", +"notHandledError": "Non gestito", +"currentApp": "Attuale", +"inputEventHandlers": "Gestori di eventi di ingresso", +"inputEventHandlersDesc": "Gestori di eventi relativi all'input dell'utente", +"buttonEventHandlers": "Gestori di eventi dei pulsanti", +"buttonEventHandlersDesc": "Gestori di eventi relativi ai clic dei pulsanti", +"changeEventHandlers": "Modifica dei gestori di eventi", +"changeEventHandlersDesc": "Gestori di eventi relativi a modifiche del valore", +"editedEventHandlers": "Modifica dei gestori di eventi", +"editedEventHandlersDesc": "Gestori di eventi relativi allo stato modificato degli elementi", +"clickEventHandlers": "Gestori di eventi di clic", +"clickEventHandlersDesc": "Gestori di eventi relativi ai clic", +"keyDownEventHandlers": "Gestori di eventi di abbassamento dei tasti", +"keyDownEventHandlersDesc": "Gestori di eventi relativi agli eventi di abbassamento dei tasti", +"checkboxEventHandlers": "Gestori di eventi di caselle di controllo", +"checkboxEventHandlersDesc": "Gestori di eventi relativi alle modifiche delle caselle di controllo", +"dragEventHandlers": "Gestori di eventi di trascinamento", +"dragEventHandlersDesc": "Gestori di eventi relativi agli eventi di trascinamento", +"elementEventHandlers": "Gestori di elementi", +"elementEventHandlersDesc": "Gestori di eventi relativi agli eventi generici degli elementi di dati", +"mediaEventHandlers": "Gestori di eventi multimediali", +"mediaEventHandlersDesc": "Gestori di eventi relativi agli eventi multimediali", +"scannerEventHandlers": "Gestori di eventi dello scanner", +"scannerEventHandlersDesc": "Gestori di eventi relativi agli eventi dello scanner", +"chartEventHandlers": "Gestori di eventi del grafico", +"chartEventHandlersDesc": "Gestori di eventi relativi agli eventi dei grafici", +"geoMapEventHandlers": "Gestori di eventi della mappa geografica", +"geoMapEventHandlersDesc": "Gestori di eventi relativi agli eventi delle mappe geografiche", +"stepEventHandlers": "Gestori di eventi di passo", +"stepEventHandlersDesc": "Gestori di eventi relativi agli eventi dell'interfaccia utente a gradini", +"shareEventHandlers": "Condividere i gestori di eventi", +"shareEventHandlersDesc": "Gestori di eventi correlati agli eventi di condivisione", +"selectEventHandlers": "Selezionare i gestori di eventi", +"selectEventHandlersDesc": "Gestori di eventi correlati a Seleziona eventi", +"meetingEventHandlers": "Gestori di eventi di riunione", +"meetingEventHandlersDesc": "Gestori di eventi relativi agli eventi di riunione", +"collaborationEventHandlers": "Gestori di eventi di collaborazione", +"collaborationEventHandlersDesc": "Gestori di eventi relativi agli eventi di collaborazione", +"set": "Set", +"clear": "Libero", +"reset": "Reset", +"messageType": "Tipo di messaggio", +"placement": "Posizionamento", +"description": "Descrizione", +}, +"event": { + ...en.event, + +"submit": "Invia", +"submitDesc": "Trigger su Submit", +"change": "Cambiamento", +"changeDesc": "Trigger su variazioni di valore", +"focus": "Focus", +"focusDesc": "Trigger su Focus", +"blur": "Sfocatura", +"blurDesc": "Trigger su Blur", +"click": "Cliccare", +"clickDesc": "Trigger su clic", +"doubleClick": "Doppio clic", +"doubleClickDesc": "Trigger su doppio clic", +"rightClick": "Cliccare con il tasto destro del mouse", +"rightClickDesc": "Trigger su clic destro", +"keyDown": "Tasto giù", +"keyDownDesc": "Trigger a tasto abbassato", +"select": "Selezionare", +"selectDesc": "Trigger su selezione", +"checked": "Controllato", +"checkedDesc": "Trigger quando una casella di controllo è selezionata", +"unchecked": "Non controllato", +"uncheckedDesc": "Trigger quando una casella di controllo è deselezionata", +"drag": "Trascinamento", +"dragDesc": "Trigger su trascinamento", +"drop": "Goccia", +"dropDesc": "Trigger su caduta", +"open": "Aperto", +"openDesc": "Trigger all'apertura", +"mute": "Muto", +"muteDesc": "Trigger su Mute di un microfono", +"unmute": "Disattivare l'audio", +"unmuteDesc": "Trigger di disattivazione di un microfono", +"showCamera": "Mostra telecamera", +"showCameraDesc": "Si attiva quando Show Camera è attivo", +"hideCamera": "Nascondere la telecamera", +"hideCameraDesc": "Si attiva quando Show Camera è disattivato", +"shareScreen": "Schermo di condivisione", +"shareScreenDesc": "Trigger nella schermata di condivisione", +"shareScreenEnd": "Condividi schermo Fine", +"shareScreenEndDesc": "Trigger su Share Screen End", +"shareControl": "Controllo delle azioni", +"shareControlDesc": "Trigger sul controllo delle azioni", +"shareControlEnd": "Controllo delle azioni Fine", +"shareControlEndDesc": "Trigger su Share Control End", +"shareContent": "Condividi il contenuto", +"shareContentDesc": "Trigger su Condividi contenuto", +"shareContentEnd": "Condividi il contenuto Fine", +"shareContentEndDesc": "Trigger su Share Content End", +"stopShare": "Stop alla quota", +"stopShareDesc": "Trigger su Stop Share", +"meetingStart": "Inizio della riunione", +"meetingStartDesc": "Trigger all'avvio della riunione", +"meetingEnd": "Fine della riunione", +"meetingEndDesc": "Trigger a fine riunione", +"meetingJoin": "Riunione Partecipa", +"meetingJoinDesc": "Trigger all'iscrizione alla riunione", +"meetingLeave": "Congedo per riunioni", +"meetingLeaveDesc": "Fattori scatenanti del congedo per riunioni", +"play": "Gioco", +"playDesc": "Trigger in gioco", +"pause": "Pausa", +"pauseDesc": "Trigger in pausa", +"ended": "Terminato", +"endedDesc": "Trigger su Ended", +"step": "Passo", +"stepDesc": "Trigger su Step", +"next": "Avanti", +"nextDesc": "Trigger su Next", +"finished": "Finito", +"finishedDesc": "Trigger su Finito", +"saved": "Salvati", +"savedDesc": "Trigger quando un elemento viene salvato", +"edited": "Modificato", +"editedDesc": "Trigger quando un elemento viene modificato", +"geoMapMove": "Spostamento della mappa geografica", +"geoMapMoveDesc": "Trigger quando gli utenti spostano la mappa geografica", +"geoMapZoom": "Zoom mappa geografica", +"geoMapZoomDesc": "Trigger quando gli utenti ingrandiscono la mappa", +"geoMapSelect": "Selezione della mappa geografica", +"geoMapSelectDesc": "Trigger quando gli utenti selezionano un elemento sulla mappa geografica", +"scannerSuccess": "Successo dello scanner", +"scannerSuccessDesc": "Si attiva quando uno scanner esegue una scansione con successo", +"scannerError": "Errore dello scanner", +"scannerErrorDesc": "Si attiva quando uno scanner non riesce a eseguire la scansione", +"chartZoom": "Zoom del grafico", +"chartZoomDesc": "Trigger sullo zoom del grafico", +"chartHover": "Grafico Hover", +"chartHoverDesc": "Trigger al passaggio del mouse sul grafico", +"chartSelect": "Selezione del grafico", +"chartSelectDesc": "Trigger su selezione del grafico", +"chartDeselect": "Deselezione del grafico", +"chartDeselectDesc": "Deselezione dei trigger sul grafico", +"close": "Chiudere", +"closeDesc": "Trigger su chiusura", +"parse": "Parse", +"parseDesc": "Trigger su Parse", +"success": "Il successo", +"successDesc": "I trigger del successo", +"delete": "Cancellare", +"deleteDesc": "Trigger su cancellazione", +"mention": "Menzione", +"mentionDesc": "Trigger su menzione", +"search": "Ricerca", +"searchDesc": "Trigger di ricerca", +"selectedChange": "Cambio di selezione", +"selectedChangeDesc": "Trigger su selezione modificata", +"clickExtra": "Fare clic su Azione", +"clickExtraDesc": "Trigger al clic su un elemento extra", +"start": "Inizio", +"startDesc": "Trigger all'avvio", +"resume": "Il curriculum", +"resumeDesc": "Trigger sul curriculum", +"countdown": "Conto alla rovescia", +"countdownDesc": "Trigger al termine del conto alla rovescia", +"reset": "Fine del reset", +"resetDesc": "Trigger su timer di reset", +"refresh": "Aggiornare", +"refreshDesc": "Trigger su aggiornamento", +"sortChange": "Ordinamento Cambiamento", +"sortChangeDesc": "Trigger sulle modifiche all'ordinamento", +}, +"style": { + ...en.style, + +"boxShadowColor": "Colore dell'ombra", +"boxShadow": "Box Shadow", +"opacity": "Opacità", +"animation": "Animazione", +"animationIterationCount": "Conteggio delle iterazioni dell'animazione", +"animationDelay": "Ritardo dell'animazione", +"animationDuration": "Durata dell'animazione", +"resetTooltip": "Azzeramento degli stili. Deselezionare il campo di immissione per reimpostare uno stile individuale.", +"textColor": "Colore del testo", +"contrastText": "Colore del testo a contrasto", +"generated": "Generato", +"customize": "Personalizzare", +"staticText": "Testo statico", +"accent": "Accento", +"validate": "Messaggio di convalida", +"border": "Colore del bordo", +"borderRadius": "Raggio del bordo", +"borderWidth": "Larghezza del bordo", +"borderStyle": "Stile del bordo", +"background": "Colore di sfondo", +"headerBackground": "Colore di sfondo dell'intestazione", +"siderBackground": "Colore di sfondo di Sider", +"footerBackground": "Colore di sfondo del piè di pagina", +"fill": "Riempimento", +"track": "Traccia", +"links": "Collegamenti", +"thumb": "Pollice", +"thumbBorder": "Bordo del pollice", +"checked": "Controllato", +"unchecked": "Non controllato", +"handle": "Maniglia", +"tags": "Tag", +"tagsText": "Tag Testo", +"multiIcon": "Icona Multiselezione", +"tabText": "Testo della scheda", +"tabAccent": "Scheda Accento", +"checkedBackground": "Colore di sfondo controllato", +"uncheckedBackground": "Colore di sfondo non controllato", +"uncheckedBorder": "Colore del bordo non selezionato", +"indicatorBackground": "Colore di sfondo dell'indicatore", +"tableCellText": "Testo cellulare", +"selectedRowBackground": "Colore di sfondo della riga selezionata", +"hoverRowBackground": "Colore di sfondo della riga Hover", +"hoverBackground": "Colore di sfondo Hover", +"textTransform": "Trasformazione del testo", +"textDecoration": "Decorazione del testo", +"alternateRowBackground": "Colore di sfondo della riga alternativa", +"tableHeaderBackground": "Colore di sfondo dell'intestazione", +"tableHeaderText": "Testo dell'intestazione", +"toolbarBackground": "Colore di sfondo della barra degli strumenti", +"toolbarText": "Testo della barra degli strumenti", +"pen": "Penna", +"footerIcon": "Icona Piè di pagina", +"tips": "Suggerimenti", +"margin": "Margine", +"padding": "Imbottitura", +"marginLeft": "Margine sinistro", +"marginRight": "Margine destro", +"marginTop": "Margine superiore", +"marginBottom": "Margine inferiore", +"containerHeaderPadding": "Imbottitura della testata", +"containerFooterPadding": "Imbottitura del piè di pagina", +"containerSiderPadding": "Imbottitura Sider", +"containerBodyPadding": "Imbottitura del corpo", +"minWidth": "Larghezza minima", +"aspectRatio": "Rapporto d'aspetto", +"text": "Testo", +"textSize": "Dimensione del testo", +"textWeight": "Peso del testo", +"fontFamily": "Famiglia di caratteri", +"fontStyle": "Stile del carattere", +"backgroundImage": "Immagine di sfondo", +"backgroundImageRepeat": "Ripetizione dello sfondo", +"backgroundImageSize": "Dimensione dello sfondo", +"backgroundImagePosition": "Posizione di fondo", +"backgroundImageOrigin": "Origine dello sfondo", +"headerBackgroundImage": "Immagine di sfondo", +"headerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", +"headerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", +"headerBackgroundImagePosition": "Posizione dell'immagine di sfondo", +"headerBackgroundImageOrigin": "Origine dell'immagine di sfondo", +"footerBackgroundImage": "Immagine di sfondo", +"footerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", +"footerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", +"footerBackgroundImagePosition": "Posizione dell'immagine di sfondo", +"footerBackgroundImageOrigin": "Origine dell'immagine di sfondo", +"rotation": "Rotazione", +"alternateBackground": "Colore di sfondo alternativo", +"headerText": "Colore del testo dell'intestazione", +"labelColor": "Colore dell'etichetta", +"label": "Colore dell'etichetta", +"lineHeight": "Altezza della linea", +"subTitleColor": "Colore del sottotitolo", +"titleText": "Titolo Colore", +"success": "Colore di successo", +"siderBackgroundImage": "Immagine di sfondo di Sider", +"siderBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo di Sider", +"siderBackgroundImageSize": "Dimensioni dell'immagine di sfondo di Sider", +"siderBackgroundImagePosition": "Posizione dell'immagine di sfondo Sider", +"siderBackgroundImageOrigin": "Origine dell'immagine di sfondo Sider", +"activeBackground": "Colore di sfondo attivo", +"labelBackground": "Colore di sfondo dell'etichetta", +"gradientBackground": "Colore di sfondo gradiente", +"direction": "Direzione", +"chartOpacity": "Opacità", +"chartBoxShadow": "Box Shadow", +"chartBorderStyle": "Stile del bordo", +"chartBorderRadius": "Raggio del bordo", +"chartBorderWidth": "Larghezza del bordo", +"chartTextSize": "Dimensione del testo", +"chartTextWeight": "Peso del testo", +"chartFontFamily": "Famiglia di caratteri", +"chartFontStyle": "Stile del carattere", +"chartBackgroundColor": "Colore di sfondo", +"chartGradientColor": "Colore sfumato", +"chartShadowColor": "Colore dell'ombra", +"chartBorderColor": "Colore del bordo", +"chartTextColor": "Colore del testo", +"detailSize": "Dettaglio Dimensioni", +"radiusTip": "Specifica il raggio degli angoli dell'elemento. Esempio: 5px, 50% o 1em.", +"gapTip": "Specifica lo spazio tra righe e colonne in un contenitore a griglia o flessibile. Esempio: 10px, 1rem o 5%.", +"cardRadiusTip": "Definisce il raggio degli angoli per i componenti della carta. Esempio: 10px, 15px.", +"borderWidthTip": "Specifica la larghezza del bordo dell'elemento. Esempio: 1px, 0.5em o sottile.", +"borderStyleTip": "Imposta lo stile del bordo. Esempio: solido, tratteggiato, puntinato o nessuno.", +"marginTip": "Definisce il margine esterno intorno a un elemento. Esempio: 10px, 2em o auto. Può essere combinato: 0px 20px o separato per 4 direzioni: 0px 1px 5px 2px.", +"directionTip": "Specifica la direzione del layout. Esempio: row, column o row-reverse.", +"detailSizeTip": "Definisce la dimensione di dettagli specifici nel layout. Esempio: 10px, 2em o 80%.", +"chartOpacityTip": "Specifica l'opacità del grafico. Esempio: 1 (opaco), 0.5 (50% trasparente).", +"chartBoxShadowTip": "Definisce l'ombra proiettata dal grafico. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3).", +"chartBorderStyleTip": "Imposta lo stile del bordo del grafico. Esempio: solido, tratteggiato, puntinato.", +"chartBorderRadiusTip": "Specifica il raggio degli angoli del bordo del grafico. Esempio: 10px, 20%.", +"chartBorderWidthTip": "Specifica la larghezza del bordo del grafico. Esempio: 2px, 0.5em.", +"chartTextSizeTip": "Specifica la dimensione del testo del grafico. Esempio: 16px, 1em, 120%.", +"chartTextWeightTip": "Specifica lo spessore del testo del grafico. Esempio: normale, grassetto, o 700.", +"chartFontFamilyTip": "Specifica il carattere tipografico del testo del grafico. Esempio: Arial, Helvetica, o 'Times New Roman'.", +"chartFontStyleTip": "Specifica lo stile del carattere del testo del grafico. Esempio: normale, corsivo o obliquo.", +"animationIterationCountTip": "Definisce quante volte deve essere eseguita un'animazione. Esempio: infinito, 1, o 3.", +"opacityTip": "Imposta il livello di trasparenza dell'elemento. Esempio: 1 (opaco), 0.5 (50% trasparente), 0 (invisibile).", +"boxShadowColorTip": "Definisce il colore dell'ombra del box. Esempio: rgba(0, 0, 0, 0.3), #FF5733.", +"chartBackgroundColorTip": "Imposta il colore di sfondo del grafico. Esempio: #FFFFFF, rgba(255, 255, 255, 0.8).", +"chartGradientColorTip": "Definisce i colori del gradiente per lo sfondo del grafico. Esempio: linear-gradient(to right, #ff7e5f, #feb47b).", +"chartShadowColorTip": "Specifica il colore dell'ombra del grafico. Esempio: rgba(0, 0, 0, 0.2), #333333.", +"chartBorderColorTip": "Definisce il colore del bordo del grafico. Esempio: #000000, rgba(0, 0, 0, 0.5).", +"chartTextColorTip": "Imposta il colore del testo del grafico. Esempio: #333333, rgba(51, 51, 51, 1).", +"boxShadowTip": "Definisce l'ombra proiettata da un elemento. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", +"animationDelayTip": "Specifica il ritardo prima dell'inizio dell'animazione. Esempio: 1s, 500ms, 0.", +"animationDurationTip": "Imposta la durata dell'animazione. Esempio: 2s, 3s, 500ms.", +"paddingTip": "Definisce lo spazio interno all'interno di un elemento. Esempio: 10px, 2em, 5%. Può essere combinato: 0px 20px o separato per tutte e 4 le direzioni: 10px 21px 5px 20px.", +"containerHeaderPaddingTip": "Definisce lo spazio interno per l'intestazione del contenitore. Esempio: 10px, 1rem.", +"containerSiderPaddingTip": "Definisce lo spazio interno per la barra laterale del contenitore. Esempio: 8px, 1em.", +"containerFooterPaddingTip": "Definisce lo spazio interno per il piè di pagina del contenitore. Esempio: 12px, 1rem.", +"containerBodyPaddingTip": "Definisce lo spazio interno per il corpo del contenitore. Esempio: 15px, 2em.", +"textSizeTip": "Specifica la dimensione del testo. Esempio: 14px, 1.2em, 110%.", +"textWeightTip": "Definisce lo spessore del testo. Esempio: normale, grassetto, 400.", +"fontFamilyTip": "Specifica il carattere tipografico del testo. Esempio: Arial, Verdana, 'Courier New'.", +"textDecorationTip": "Definisce la decorazione del testo. Esempio: sottolineato, barrato, nessuno.", +"textTransformTip": "Imposta la capitalizzazione del testo. Esempio: maiuscolo, minuscolo, prima lettera maiuscola.", +"fontStyleTip": "Definisce lo stile del carattere del testo. Esempio: normale, corsivo, obliquo.", +"backgroundImageTip": "Specifica l'immagine di sfondo di un elemento. Esempio: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", +"headerBackgroundImageTip": "Specifica l'immagine di sfondo per l'intestazione. Esempio: url('header.jpg').", +"footerBackgroundImageTip": "Specifica l'immagine di sfondo per il piè di pagina. Esempio: url('footer.jpg').", +"backgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo. Esempio: no-repeat, repeat-x, repeat-y.", +"headerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo dell'intestazione. Esempio: repeat-x, no-repeat.", +"footerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo del piè di pagina. Esempio: repeat-y, no-repeat.", +"backgroundImageSizeTip": "Definisce la dimensione dell'immagine di sfondo. Esempio: cover, contain, 50% 50%.", +"backgroundImagePositionTip": "Imposta la posizione dell'immagine di sfondo. Esempio: center, top right, 10% 20%.", +"backgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo. Esempio: padding-box, border-box, content-box.", +"headerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo dell'intestazione. Esempio: padding-box, border-box, content-box.", +"footerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo del piè di pagina. Esempio: padding-box, border-box, content-box.", +"rotationTip": "Specifica l'angolo di rotazione dell'elemento. Esempio: 45deg, 90deg, -180deg.", +"lineHeightTip": "Definisce l'altezza di una riga di testo. Esempio: 1.5, 2, 120%.", +}, +"export": { + ...en.export, + +"hiddenDesc": "Se vero, il componente è nascosto", +"disabledDesc": "Se vero, il componente è disattivato e non interattivo.", +"visibleDesc": "Se vero, il componente è visibile", +"inputValueDesc": "Valore attuale dell'ingresso", +"invalidDesc": "Indica se il valore non è valido", +"placeholderDesc": "Testo segnaposto quando non è impostato alcun valore", +"requiredDesc": "Se vero, è richiesto un valore valido", +"submitDesc": "Invia il modulo", +"richTextEditorValueDesc": "Valore attuale dell'editor", +"richTextEditorReadOnlyDesc": "Se true, l'editor è di sola lettura", +"richTextEditorHideToolBarDesc": "Se vero, la barra degli strumenti viene nascosta", +"jsonEditorDesc": "Dati JSON correnti", +"sliderValueDesc": "Valore attualmente selezionato", +"sliderMaxValueDesc": "Valore massimo del cursore", +"sliderMinValueDesc": "Valore minimo del cursore", +"sliderStartDesc": "Valore del punto di partenza selezionato", +"sliderEndDesc": "Valore del punto finale selezionato", +"ratingValueDesc": "Valutazione attualmente selezionata", +"ratingMaxDesc": "Valore nominale massimo", +"datePickerValueDesc": "Data attualmente selezionata", +"datePickerFormattedValueDesc": "Formattazione della data selezionata", +"datePickerTimestampDesc": "Timestamp della data selezionata", +"dateRangeStartDesc": "Data di inizio dell'intervallo", +"dateRangeEndDesc": "Data di fine dell'intervallo", +"dateRangeStartTimestampDesc": "Timestamp della data di inizio", +"dateRangeEndTimestampDesc": "Timestamp della data finale", +"dateRangeFormattedValueDesc": "Intervallo di date formattato", +"dateRangeFormattedStartValueDesc": "Data di inizio formattata", +"dateRangeFormattedEndValueDesc": "Data finale formattata", +"timePickerValueDesc": "L'ora attualmente selezionata", +"timePickerFormattedValueDesc": "Formattazione dell'ora selezionata", +"timeRangeStartDesc": "Ora di inizio dell'intervallo", +"timeRangeEndDesc": "Ora di fine dell'intervallo", +"timeRangeFormattedValueDesc": "Intervallo di tempo formattato", +"timeRangeFormattedStartValueDesc": "Ora di inizio formattata", +"timeRangeFormattedEndValueDesc": "Ora finale formattata", +"timeZone": "Fuso orario", +"timeZoneDesc": "Fuso orario della data selezionata", +}, +"validationDesc": { + ...en.validationDesc, + +"email": "Inserire un indirizzo e-mail valido", +"url": "Inserire un URL valido", +"regex": "Corrispondere al modello specificato", +"maxLength": "Troppi caratteri, corrente: {length}, massimo: {maxLength}", +"minLength": "Caratteri insufficienti, corrente: {length}, minimo: {minLength}", +"maxValue": "Il valore supera il massimo, corrente: {value}, massimo: {max}", +"minValue": "Valore inferiore al minimo, corrente: {value}, minimo: {min}", +"maxTime": "Il tempo supera il massimo, corrente: {time}, massimo: {maxTime}", +"minTime": "Tempo inferiore al minimo, corrente: {time}, minimo: {minTime}", +"maxDate": "La data supera il massimo, attuale: {date}, massimo: {maxDate}", +"minDate": "Data inferiore al minimo, attuale: {date}, minimo: ___POSSESSORE1___", +}, +"query": { + ...en.query, + +"noQueries": "Non sono disponibili query di dati.", +"queryTutorialButton": "Visualizzare i documenti di {value}", +"datasource": "Le vostre fonti di dati", +"newDatasource": "Nuova fonte di dati", +"generalTab": "Generale", +"notificationTab": "Notifica", +"variablesTab": "Variabili", +"advancedTab": "Avanzato", +"showFailNotification": "Mostra notifica in caso di fallimento", +"failCondition": "Condizioni di guasto", +"failConditionTooltip1": "Personalizzare le condizioni di guasto e le relative notifiche.", +"failConditionTooltip2": "Se una condizione risulta vera, la query viene contrassegnata come fallita e viene attivata la notifica corrispondente.", +"showSuccessNotification": "Mostra la notifica di successo", +"successMessageLabel": "Messaggio di successo", +"successMessage": "Esecuzione riuscita", +"notifyDuration": "Durata", +"notifyDurationTooltip": "Durata della notifica. L'unità di tempo può essere 's' (secondo, valore predefinito) o 'ms' (millisecondo). Il valore predefinito è {default}s. Il massimo è {max}s.", +"successMessageWithName": "{name} esecuzione riuscita", +"failMessageWithName": "{name} esecuzione fallita: {result}", +"showConfirmationModal": "Mostra la maschera di conferma prima dell'esecuzione", +"confirmationMessageLabel": "Messaggio di conferma", +"confirmationMessage": "È sicuro di voler eseguire questa query di dati?", +"newQuery": "New Data Query", +"newFolder": "Nuova cartella", +"recentlyUsed": "Usato di recente", +"folder": "Cartella", +"folderNotEmpty": "La cartella non è vuota", +"dataResponder": "Data Responder", +"tempState": "Stato temporaneo", +"transformer": "Trasformatore", +"quickRestAPI": "Query REST", +"quickStreamAPI": "Interrogazione del flusso", +"quickGraphql": "Query GraphQL", +"quickAlasql": "Query SQL locale", +"databaseType": "Tipo di database", +"chooseDatabase": "Scegliere il database", +"lowcoderAPI": "API Lowcoder", +"executeJSCode": "Eseguire il codice JavaScript", +"importFromQueryLibrary": "Importazione da Query Library", +"preparedDataQueries": "Le query di dati preparate", +"adHocDataQueries": "Query di dati Qick (senza query o origine dati preparate)", +"queryResultTransformer": "Manipolare una risposta alla query per trasformare i dati prima del binding", +"queryResultReactor": "Reagire a qualsiasi modifica di un valore dinamico dei dati", +"importFromFile": "Importazione da file", +"triggerType": "Attivato quando...", +"triggerTypeAuto": "Quando gli input cambiano o dopo il caricamento dell'applicazione (pagina)", +"triggerTypePageLoad": "Dopo il caricamento dell'applicazione (pagina)", +"triggerTypeManual": "Solo quando lo attivi manualmente", +"triggerTypeInputChange": "Quando cambiano gli input", +"triggerTypeQueryExec": "Dopo l'esecuzione della query", +"triggerTypeTimeout": "Dopo il caricamento dell'applicazione (pagina) e il timeout", +"delayTime": "Tempo di ritardo", +"chooseDataSource": "Scegliere l'origine dei dati", +"method": "Metodo", +"updateExceptionDataSourceTitle": "Aggiornamento dell'origine dati non funzionante", +"updateExceptionDataSourceContent": "Aggiornare la query seguente con la stessa origine dati in errore:", +"update": "Aggiornamento", +"disablePreparedStatement": "Disabilitare le dichiarazioni preparate", +"disablePreparedStatementTooltip": "La disabilitazione delle istruzioni preparate può generare SQL dinamico, ma aumenta il rischio di SQL injection.", +"timeout": "Timeout dopo", +"timeoutTooltip": "Unità predefinita: ms. Unità di input supportate: ms, s. Valore predefinito: {defaultSeconds} secondi. Valore massimo: {maxSeconds} secondi. Ad esempio, 300 (cioè 300 ms), 800 ms, 5 s.", +"periodic": "Eseguire periodicamente questa query di dati", +"periodicTime": "Periodo", +"periodicTimeTooltip": "Periodo tra esecuzioni successive. Unità predefinita: ms. Unità di input supportate: ms, s. Valore minimo: 100 ms. L'esecuzione periodica è disabilitata per valori inferiori a 100ms. Ad esempio, 300 (cioè 300ms), 800ms, 5s.", +"cancelPrevious": "Ignorare i risultati delle precedenti esecuzioni non completate", +"cancelPreviousTooltip": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e queste esecuzioni ignorate non attivano l'elenco di eventi della query.", +"dataSourceStatusError": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e le esecuzioni ignorate non attivano l'elenco di eventi della query.", +"success": "Il successo", +"fail": "Fallimento", +"successDesc": "Attivato quando l'esecuzione ha successo", +"failDesc": "Attivato quando l'esecuzione fallisce", +"fixedDelayError": "Query non eseguita", +"execSuccess": "Esecuzione riuscita", +"execFail": "Esecuzione fallita", +"execIgnored": "I risultati di questa interrogazione sono stati ignorati", +"deleteSuccessMessage": "Eliminato con successo. È possibile utilizzare {undoKey} per annullare l'operazione.", +"dataExportDesc": "Dati ottenuti dalla query corrente", +"codeExportDesc": "Codice di stato dell'interrogazione corrente", +"successExportDesc": "Se la query corrente è stata eseguita con successo", +"messageExportDesc": "Informazioni restituite dalla query corrente", +"extraExportDesc": "Altri dati nella query corrente", +"isFetchingExportDesc": "È la query corrente nella richiesta", +"runTimeExportDesc": "Tempo di esecuzione della query corrente (ms)", +"latestEndTimeExportDesc": "Ultimo tempo di funzionamento", +"triggerTypeExportDesc": "Tipo di innesco", +"chooseResource": "Scegliere una risorsa", +"createDataSource": "Creare una nuova origine dati", +"editDataSource": "Modifica", +"datasourceName": "Nome", +"datasourceNameRuleMessage": "Inserire un nome di origine dati", +"generalSetting": "Impostazioni generali", +"advancedSetting": "Impostazioni avanzate", +"port": "Porto", +"portRequiredMessage": "Inserire una porta", +"portErrorMessage": "Inserire una porta corretta", +"connectionType": "Tipo di connessione", +"regular": "Regolare", +"host": "Ospite", +"hostRequiredMessage": "Inserire un nome di dominio host o un indirizzo IP", +"userName": "Nome utente", +"password": "Password", +"encryptedServer": "-------- Crittografato sul lato server --------", +"uriRequiredMessage": "Inserire un URI", +"urlRequiredMessage": "Inserire un URL", +"uriErrorMessage": "Inserire un URI corretto", +"urlErrorMessage": "Inserire un URL corretto", +"httpRequiredMessage": "Inserire http:// o https://", +"databaseName": "Nome del database", +"databaseNameRequiredMessage": "Inserire il nome del database", +"useSSL": "Utilizzare SSL", +"userNameRequiredMessage": "Inserire il proprio nome", +"passwordRequiredMessage": "Inserire la password", +"authentication": "Autenticazione", +"authenticationType": "Tipo di autenticazione", +"sslCertVerificationType": "Verifica del certificato SSL", +"sslCertVerificationTypeDefault": "Verifica della certificazione CA", +"sslCertVerificationTypeSelf": "Verifica della certificazione autofirmata", +"sslCertVerificationTypeDisabled": "Disabili", +"selfSignedCert": "Certificato autofirmato", +"selfSignedCertRequireMsg": "Inserire il proprio certificato", +"enableTurnOffPreparedStatement": "Abilita l'alternanza delle dichiarazioni preparate per le query", +"enableTurnOffPreparedStatementTooltip": "È possibile attivare o disattivare le istruzioni preparate nella scheda Avanzate della query.", +"serviceName": "Nome del servizio", +"serviceNameRequiredMessage": "Inserire il nome del servizio", +"useSID": "Utilizzare il SID", +"connectSuccessfully": "Connessione riuscita", +"saveSuccessfully": "Salvato con successo", +"database": "Database", +"cloudHosting": "Lowcoder ospitato nel cloud non può accedere ai servizi locali utilizzando 127.0.0.1 o localhost. Provare a collegarsi a fonti di dati della rete pubblica o utilizzare un reverse proxy per i servizi privati.", +"notCloudHosting": "Per la distribuzione ospitata da docker, Lowcoder utilizza reti ponte, quindi 127.0.0.1 e localhost non sono validi come indirizzi host. Per accedere alle fonti di dati della macchina locale, fare riferimento a", +"howToAccessHostDocLink": "Come accedere all'API/DB dell'host", +"returnList": "Ritorno", +"chooseDatasourceType": "Scegliere il tipo di sorgente dati", +"viewDocuments": "Visualizza i documenti", +"testConnection": "Collegamento di prova", +"save": "Risparmiare", +"whitelist": "Elenco dei permessi", +"whitelistTooltip": "Aggiungete gli indirizzi IP di Lowcoder all'elenco dei permessi della vostra fonte di dati, se necessario.", +"address": "Indirizzo:", +"nameExists": "Nome {name} già esistente", +"jsQueryDocLink": "Informazioni sulla query JavaScript", +"dynamicDataSourceConfigLoadingText": "Caricamento configurazione sorgente dati extra...", +"dynamicDataSourceConfigErrText": "Impossibile caricare la configurazione della fonte di dati extra.", +"retry": "Riprova", +"categoryDatabase": "Database", +"categoryBigdata": "Grandi dati", +"categoryAi": "IA", +"categoryDevops": "DevOps", +"categoryAppdevelopment": "Sviluppo App", +"categoryWorkflow": "Flusso di lavoro", +"categoryMessaging": "Messaggistica", +"categoryAssets": "Asset & Archiviazione", +"categoryProjectManagement": "Gestione Progetti", +"categoryCrm": "CRM", +"categoryEcommerce": "Commercio elettronico", +"categoryWebscrapers": "Web Scrapers & Open Data", +"categoryDocumentHandling": "Generazione Report e Documenti", +"categoryRPA": "Automazione Robotica dei Processi", +"componentsUsingQueryTitle": "Utilizzo della Query", +"componentsUsingQuery": "Dove viene utilizzata questa query", +"variables": "Variabili", +}, +"sqlQuery": { + ...en.sqlQuery, + +"keyValuePairs": "Coppie chiave-valore", +"object": "Oggetto", +"allowMultiModify": "Consentire la modifica di più righe", +"allowMultiModifyTooltip": "Se selezionato, tutte le righe che soddisfano le condizioni vengono gestite. Altrimenti, viene gestita solo la prima riga che soddisfa le condizioni.", +"array": "Array", +"insertList": "Inserisci elenco", +"insertListTooltip": "Valori inseriti quando non esistono", +"filterRule": "Regola del filtro", +"updateList": "Elenco degli aggiornamenti", +"updateListTooltip": "I valori aggiornati in corso d'opera possono essere sovrascritti dagli stessi valori dell'elenco di inserimento.", +"sqlMode": "Modalità SQL", +"guiMode": "Modalità GUI", +"operation": "Funzionamento", +"insert": "Inserire", +"upsert": "Inserire, ma aggiornare se c'è un conflitto", +"update": "Aggiornamento", +"delete": "Cancellare", +"bulkInsert": "Inserto sfuso", +"bulkUpdate": "Aggiornamento di massa", +"table": "Tabella", +"primaryKeyColumn": "Colonna chiave primaria", +}, +"EsQuery": { + ...en.EsQuery, + +"rawCommand": "Comando grezzo", +"queryTutorialButton": "Visualizza i documenti API Elasticsearch", +"request": "Richiesta", +}, +"googleSheets": { + ...en.googleSheets, + +"rowIndex": "Indice delle righe", +"spreadsheetId": "ID del foglio di calcolo", +"sheetName": "Nome del foglio", +"readData": "Leggi i dati", +"appendData": "Aggiungi riga", +"updateData": "Fila di aggiornamento", +"deleteData": "Elimina riga", +"clearData": "Fila libera", +"serviceAccountRequireMessage": "Inserire il proprio account di servizio", +"ASC": "ASC", +"DESC": "DESC", +"sort": "Ordinamento", +"sortPlaceholder": "Nome", +}, +"queryLibrary": { + ...en.queryLibrary, + +"export": "Esportazione in JSON", +"noInput": "La query corrente non ha input", +"inputName": "Nome", +"inputDesc": "Descrizione", +"emptyInputs": "Nessun ingresso", +"clickToAdd": "Aggiungi", +"chooseQuery": "Scegliere la query", +"viewQuery": "Visualizza la domanda", +"chooseVersion": "Scegliere la versione", +"latest": "Ultime novità", +"publish": "Pubblicare", +"historyVersion": "Storia Versione", +"deleteQueryLabel": "Eliminare la query", +"deleteQueryContent": "La query non può essere recuperata dopo l'eliminazione. Cancellare la query?", +"run": "Correre", +"readOnly": "Solo lettura", +"exit": "Uscita", +"recoverAppSnapshotContent": "Ripristinare la query corrente alla versione {version}.", +"searchPlaceholder": "Query di ricerca", +"allQuery": "All Queries", +"deleteQueryTitle": "Eliminare la query", +"unnamed": "Senza nome", +"publishNewVersion": "Pubblicare la nuova versione", +"publishSuccess": "Pubblicato con successo", +"version": "Versione", +"desc": "Descrizione", +}, +"snowflake": { + ...en.snowflake, + +"accountIdentifierTooltip": "Vedi", +"extParamsTooltip": "Configurare altri parametri di connessione", +}, +"lowcoderQuery": { + ...en.lowcoderQuery, + +"queryOrgUsers": "Interrogare gli utenti dell'area di lavoro", +}, +"redisQuery": { + ...en.redisQuery, + +"rawCommand": "Comando grezzo", +"command": "Comando", +"queryTutorial": "Visualizza la documentazione sui comandi di Redis", +}, +"httpQuery": { + ...en.httpQuery, + +"bodyFormDataTooltip": "Se si seleziona {type}, il formato del valore deve essere {object}. Esempio: {example}", +"text": "Testo", +"file": "File", +"extraBodyTooltip": "I valori chiave nell'Extra Body saranno aggiunti al body con i tipi di dati JSON o Form.", +"forwardCookies": "Biscotti di andata", +"forwardAllCookies": "Inoltrare tutti i cookie", +}, +"smtpQuery": { + ...en.smtpQuery, + +"attachment": "Allegato", +"attachmentTooltip": "Può essere utilizzato con il componente di caricamento file, i dati devono essere convertiti in:", +"MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", +"sender": "Trasmettitore", +"recipient": "Destinatario", +"carbonCopy": "Copia carbone", +"blindCarbonCopy": "Copia carbone cieca", +"subject": "Oggetto", +"content": "Content", +"contentTooltip": "Supporta l'inserimento di testo o HTML", +}, +"uiCompCategory": { + ...en.uiCompCategory, + +"dashboards": "Cruscotti e reportistica", +"layout": "Layout e navigazione", +"forms": "Raccolta dati e moduli", +"collaboration": "Riunioni e collaborazione", +"projectmanagement": "Gestione del progetto", +"scheduling": "Calendario e programmazione", +"documents": "Gestione di documenti e file", +"itemHandling": "Gestione dell'articolo e della firma", +"multimedia": "Multimedia e animazione", +"integration": "Integrazione ed estensione", +"legacy": "Preesistenti e deprecati", +}, +"uiComp": { + ...en.uiComp, + +"autoCompleteCompName": "Auto Complete", +"autoCompleteCompDesc": "Un campo di immissione che fornisce suggerimenti durante la digitazione, migliorando l'esperienza dell'utente e la precisione.", +"autoCompleteCompKeywords": "suggerimenti, completamento automatico, digitazione, input", +"inputCompName": "Ingresso", +"inputCompDesc": "Un campo di input di testo di base che consente agli utenti di inserire e modificare il testo.", +"inputCompKeywords": "testo, input, campo, modifica", +"textAreaCompName": "Area di testo", +"textAreaCompDesc": "Un input di testo a più righe per contenuti più lunghi, come commenti o descrizioni.", +"textAreaCompKeywords": "multilinea, textarea, input, testo", +"passwordCompName": "Password", +"passwordCompDesc": "Un campo sicuro per l'inserimento della password, che maschera i caratteri per garantire la privacy.", +"passwordCompKeywords": "password, sicurezza, input, nascosto", +"richTextEditorCompName": "Editor di testo ricco", +"richTextEditorCompDesc": "Un editor di testo avanzato che supporta ricche opzioni di formattazione come grassetto, corsivo ed elenchi.", +"richTextEditorCompKeywords": "editor, testo, formattazione, contenuto ricco", +"numberInputCompName": "Numero Ingresso", +"numberInputCompDesc": "Un campo specifico per l'immissione di dati numerici, con controlli per l'incremento e il decremento dei valori.", +"numberInputCompKeywords": "numero, ingresso, incremento, decremento", +"sliderCompName": "Cursore", +"sliderCompDesc": "Un componente grafico a scorrimento per selezionare un valore o un intervallo all'interno di una scala definita.", +"sliderCompKeywords": "cursore, intervallo, ingresso, grafico", +"rangeSliderCompName": "Cursore di gamma", +"rangeSliderCompDesc": "Un cursore a doppia maniglia per selezionare un intervallo di valori, utile per filtrare o impostare limiti.", +"rangeSliderCompKeywords": "gamma, cursore, doppia impugnatura, filtro", +"ratingCompName": "Valutazione", +"ratingCompDesc": "Un componente per catturare le valutazioni degli utenti, visualizzate come stelle.", +"ratingCompKeywords": "valutazione, stelle, feedback, input", +"switchCompName": "Interruttore", +"switchCompDesc": "Un interruttore a levetta per decisioni di tipo on/off o sì/no.", +"switchCompKeywords": "a levetta, interruttore, on/off, controllo", +"selectCompName": "Selezionare", +"selectCompDesc": "Un menu a discesa per selezionare un elenco di opzioni.", +"selectCompKeywords": "a discesa, selezionare, opzioni, menu", +"multiSelectCompName": "Multiselezione", +"multiSelectCompDesc": "Un componente che consente di selezionare più elementi da un elenco a discesa.", +"multiSelectCompKeywords": "multiselezione, multipla, a discesa, scelte", +"cascaderCompName": "Cascader", +"cascaderCompDesc": "Una tendina a più livelli per la selezione gerarchica dei dati, come ad esempio la selezione di una località.", +"cascaderCompKeywords": "a cascata, gerarchico, a discesa, a livelli", +"checkboxCompName": "Casella di controllo", +"checkboxCompDesc": "Una casella di controllo standard per le opzioni che possono essere selezionate o deselezionate.", +"checkboxCompKeywords": "casella di controllo, opzioni, selezionare, alternare", +"radioCompName": "Radio", +"radioCompDesc": "Pulsanti di opzione per selezionare un'opzione da un insieme, dove è consentita una sola scelta.", +"radioCompKeywords": "radio, pulsanti, selezione, scelta singola", +"segmentedControlCompName": "Controllo segmentato", +"segmentedControlCompDesc": "Un controllo con opzioni segmentate per passare rapidamente da una scelta all'altra.", +"segmentedControlCompKeywords": "segmentato, controllo, selezione, opzioni", +"stepControlCompName": "Controllo dei passi", +"stepControlCompDesc": "Un controllo con opzioni di passo per offrire passi guidati visivamente per applicazioni come moduli o procedure guidate.", +"stepControlCompKeywords": "passi, controllo, selezione, opzioni", +"fileUploadCompName": "Caricamento dei file", +"fileUploadCompDesc": "Un componente per il caricamento dei file, con supporto per il drag-and-drop e la selezione dei file.", +"fileUploadCompKeywords": "file, caricamento, trascinamento, selezione", +"dateCompName": "Data", +"dateCompDesc": "Un componente per la selezione di date da un'interfaccia di calendario.", +"dateCompKeywords": "data, picker, calendario, selezione", +"dateRangeCompName": "Intervallo di date", +"dateRangeCompDesc": "Un componente per selezionare un intervallo di date, utile per i sistemi di prenotazione o per i filtri.", +"dateRangeCompKeywords": "daterange, selezionare, prenotare, filtrare", +"timeCompName": "Tempo", +"timeCompDesc": "Un componente di selezione dell'ora per scegliere orari specifici della giornata.", +"timeCompKeywords": "tempo, picker, selezionare, orologio", +"timeRangeCompName": "Intervallo di tempo", +"timeRangeCompDesc": "Un componente per la selezione di un intervallo di tempo, spesso utilizzato nelle applicazioni di pianificazione.", +"timeRangeCompKeywords": "timerange, selezionare, programmazione, durata", +"buttonCompName": "Pulsante del modulo", +"buttonCompDesc": "Un componente versatile per l'invio di moduli, l'attivazione di azioni o la navigazione.", +"buttonCompKeywords": "pulsante, invio, azione, navigazione", +"meetingControlCompName": "Icon Button", +"meetingCompDesc": "Un pulsante per controllare funzioni come l'avvio, la fine, il silenziamento o la condivisione.", +"meetingCompKeywords": "controllo, pulsante, inizio, fine", +"linkCompName": "Collegamento a", +"linkCompDesc": "Un componente di visualizzazione di collegamenti ipertestuali per la navigazione o il collegamento a risorse esterne.", +"linkCompKeywords": "link, collegamento ipertestuale, navigazione, esterno", +"scannerCompName": "Scanner", +"scannerCompDesc": "Un componente per la scansione di codici a barre, codici QR e altri dati simili.", +"scannerCompKeywords": "scanner, codice a barre, codice QR, scansione", +"dropdownCompName": "A discesa", +"dropdownCompDesc": "Un menu a discesa per visualizzare in modo compatto un elenco di opzioni.", +"dropdownCompKeywords": "a discesa, menu, opzioni, selezionare", +"toggleButtonCompName": "Pulsante di commutazione", +"toggleButtonCompDesc": "Un pulsante che può passare tra due stati o opzioni.", +"toggleButtonCompKeywords": "toggle, pulsante, interruttore, stato", +"textCompName": "Visualizzazione del testo", +"textCompDesc": "Un semplice componente per visualizzare contenuti testuali statici o dinamici comprensivi di formattazione Markdown.", +"textCompKeywords": "testo, visualizzazione, statico, dinamico", +"tableCompName": "Tabella", +"tableCompDesc": "Un componente ricco di tabelle per la visualizzazione di dati in un formato tabellare strutturato, con opzioni di ordinamento e filtraggio, visualizzazione di dati ad albero e righe estensibili.", +"tableCompKeywords": "tabella, dati, ordinamento, filtraggio", +"imageCompName": "Immagine", +"imageCompDesc": "Un componente per la visualizzazione di immagini, che supporta vari formati basati su URI o dati Base64.", +"imageCompKeywords": "immagine, visualizzazione, media, Base64", +"progressCompName": "Progressi", +"progressCompDesc": "Indicatore visivo di avanzamento, in genere utilizzato per mostrare lo stato di completamento di un'attività.", +"progressCompKeywords": "progresso, indicatore, stato, compito", +"progressCircleCompName": "Cerchio del progresso", +"progressCircleCompDesc": "Un indicatore di avanzamento circolare, spesso utilizzato per il caricamento di stati o di attività a tempo.", +"progressCircleCompKeywords": "cerchio, progresso, indicatore, caricamento", +"fileViewerCompName": "Visualizzatore di file", +"fileViewerCompDesc": "Un componente per la visualizzazione di vari tipi di file, compresi documenti e immagini.", +"fileViewerCompKeywords": "file, visualizzatore, documento, immagine", +"dividerCompName": "Divisore", +"dividerCompDesc": "Un componente divisorio visivo, usato per separare il contenuto o le sezioni in un layout.", +"dividerCompKeywords": "divisore, separatore, layout, design", +"qrCodeCompName": "Codice QR", +"qrCodeCompDesc": "Un componente per la visualizzazione di codici QR, utile per la scansione rapida e il trasferimento di informazioni.", +"qrCodeCompKeywords": "Codice QR, scansione, codice a barre, informazioni", +"formCompName": "Forma", +"formCompDesc": "Un componente contenitore per costruire moduli strutturati con vari tipi di input.", +"formCompKeywords": "modulo, input, contenitore, struttura", +"jsonSchemaFormCompName": "Schema JSON", +"jsonSchemaFormCompDesc": "Un componente di modulo dinamico generato sulla base di uno schema JSON.", +"jsonSchemaFormCompKeywords": "JSON, schema, modulo, dinamico", +"containerCompName": "Contenitore", +"containerCompDesc": "Un contenitore generico per il layout e l'organizzazione degli elementi dell'interfaccia utente.", +"containerCompKeywords": "contenitore, layout, organizzazione, UI", +"floatTextContainerCompName": "Contenitore di testo fluttuante", +"floatTextContainerCompDesc": "Componente Contenitore di testo fluttuante", +"floatTextContainerCompKeywords": "contenitore, layout, testo, flusso", +"collapsibleContainerCompName": "Contenitore pieghevole", +"collapsibleContainerCompDesc": "Un contenitore che può essere espanso o chiuso, ideale per gestire la visibilità dei contenuti.", +"collapsibleContainerCompKeywords": "pieghevole, contenitore, espandere, collassare", +"tabbedContainerCompName": "Contenitore a schede", +"tabbedContainerCompDesc": "Un contenitore con navigazione a schede per organizzare i contenuti in pannelli separati.", +"tabbedContainerCompKeywords": "a schede, contenitore, navigazione, pannelli", +"pageLayoutCompName": "Layout di pagina", +"pageLayoutCompDesc": "Un contenitore che offre la possibilità di creare un layout con intestazione, intestazione, piè di pagina e aree di contenuto principale.", +"pageLayoutCompKeywords": "layout, contenitore, navigazione, pagine", +"modalCompName": "Modale", +"modalCompDesc": "Un componente modale a comparsa per la visualizzazione di contenuti, avvisi o moduli a fuoco.", +"modalCompKeywords": "modale, popup, avviso, modulo", +"listViewCompName": "Vista elenco", +"listViewCompDesc": "Un componente per la visualizzazione di un elenco di elementi o dati, in cui è possibile inserire altri componenti. Come un ripetitore.", +"listViewCompKeywords": "elenco, vista, visualizzazione, ripetitore", +"gridCompName": "Griglia", +"gridCompDesc": "Un componente griglia flessibile per creare layout strutturati con righe e colonne, come estensione del componente List View.", +"gridCompKeywords": "griglia, layout, righe, colonne", +"navigationCompName": "Navigazione", +"navigationCompDesc": "Un componente di navigazione per creare menu, briciole di pane o schede per la navigazione del sito.", +"navigationCompKeywords": "navigazione, menu, briciole di pane, schede", +"iframeCompName": "IFrame", +"iframeCompDesc": "Un componente frame inline per incorporare pagine web e applicazioni o contenuti esterni all'interno dell'applicazione.", +"iframeCompKeywords": "iframe, embed, pagina web, contenuto", +"customCompName": "Componente personalizzato", +"customCompDesc": "Un componente flessibile e programmabile per creare elementi dell'interfaccia utente unici e definiti dall'utente, adatti alle vostre esigenze specifiche.", +"customCompKeywords": "personalizzato, definito dall'utente, flessibile, programmabile", +"moduleCompName": "Modulo", +"moduleCompDesc": "Utilizzate i moduli per creare micro-app progettate per incapsulare funzionalità o caratteristiche specifiche. I moduli possono essere incorporati e riutilizzati in tutte le applicazioni.", +"moduleCompKeywords": "modulo, micro-app, funzionalità, riutilizzabile", +"jsonExplorerCompName": "Esploratore JSON", +"jsonExplorerCompDesc": "Un componente per esplorare visivamente e interagire con le strutture di dati JSON.", +"jsonExplorerCompKeywords": "JSON, esploratore, dati, struttura", +"jsonEditorCompName": "JSON Editor", +"jsonEditorCompDesc": "Un componente editor per la creazione e la modifica di dati JSON con convalida ed evidenziazione della sintassi.", +"jsonEditorCompKeywords": "JSON, editor, modifica, convalida", +"treeCompName": "Albero", +"treeCompDesc": "Un componente di struttura ad albero per la visualizzazione di dati gerarchici, come file system o organigrammi.", +"treeCompKeywords": "albero, gerarchico, dati, struttura", +"treeSelectCompName": "Selezione dell'albero", +"treeSelectCompDesc": "Un componente di selezione che presenta le opzioni in un formato gerarchico ad albero, consentendo selezioni organizzate e annidate.", +"treeSelectCompKeywords": "albero, selezionare, gerarchico, annidato", +"audioCompName": "Audio", +"audioCompDesc": "Un componente per incorporare contenuti audio, con controlli per la riproduzione e la regolazione del volume.", +"audioCompKeywords": "audio, riproduzione, suono, musica", +"videoCompName": "Video", +"videoCompDesc": "Un componente multimediale per incorporare e riprodurre contenuti video, con supporto per vari formati.", +"videoCompKeywords": "video, multimedia, riproduzione, incorporazione", +"drawerCompName": "Cassetto", +"drawerCompDesc": "Un componente a pannello scorrevole che può essere utilizzato per la navigazione o la visualizzazione di contenuti aggiuntivi, in genere emergendo dal bordo dello schermo.", +"drawerCompKeywords": "cassetto, scorrevole, pannello, navigazione", +"chartCompName": "Grafico", +"chartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", +"chartCompKeywords": "grafico, grafico, dati, visualizzazione", +"carouselCompName": "Carosello di immagini", +"carouselCompDesc": "Un componente carosello rotante per mostrare immagini, banner o slide di contenuto.", +"carouselCompKeywords": "carosello, immagini, rotazione, vetrina", +"imageEditorCompName": "Editor di immagini", +"imageEditorCompDesc": "Un componente interattivo per l'editing e la manipolazione delle immagini, che offre vari strumenti e filtri.", +"imageEditorCompKeywords": "immagine, editor, manipolazione, strumenti", +"mermaidCompName": "Grafico delle sirene", +"mermaidCompDesc": "Un componente per il rendering di diagrammi complessi e diagrammi di flusso basati sulla sintassi Mermaid.", +"mermaidCompKeywords": "sirena, grafici, diagrammi, diagrammi di flusso", +"calendarCompName": "Calendario", +"calendarCompDesc": "Un componente calendario per la visualizzazione di date ed eventi, con opzioni di visualizzazione per mese, settimana o giorno.", +"calendarCompKeywords": "calendario, date, eventi, programmazione", +"signatureCompName": "Firma", +"signatureCompDesc": "Un componente per l'acquisizione di firme digitali, utile per i processi di approvazione e verifica.", +"signatureCompKeywords": "firma, digitale, approvazione, verifica", +"jsonLottieCompName": "Animazione Lottie", +"jsonLottieCompDesc": "Un componente per la visualizzazione delle animazioni Lottie, che fornisce animazioni leggere e scalabili basate su dati JSON.", +"jsonLottieCompKeywords": "lottie, animazione, JSON, scalabile", +"timelineCompName": "Linea temporale", +"timelineCompDesc": "Un componente per la visualizzazione di eventi o azioni in ordine cronologico, rappresentati visivamente lungo una linea temporale lineare.", +"timelineCompKeywords": "linea del tempo, eventi, cronologico, storia", +"commentCompName": "Come", +"commentCompDesc": "Un componente per l'aggiunta e la visualizzazione dei commenti degli utenti, che supporta le risposte in thread e l'interazione con gli utenti.", +"commentCompKeywords": "commento, discussione, interazione con l'utente, feedback", +"mentionCompName": "Menzione", +"mentionCompDesc": "Un componente che supporta la menzione di utenti o tag all'interno di contenuti testuali, tipicamente utilizzato nei social media o nelle piattaforme collaborative.", +"mentionCompKeywords": "menzione, tag, utente, social media", +"responsiveLayoutCompName": "Layout reattivo", +"responsiveLayoutCompDesc": "Un componente di layout progettato per adattarsi e rispondere alle diverse dimensioni dello schermo e dei dispositivi, garantendo un'esperienza utente coerente.", +"responsiveLayoutCompKeywords": "responsive, layout, adattarsi, dimensioni dello schermo", +"splitLayoutCompName": "Layout diviso", +"splitLayoutCompDesc": "Un componente di layout per organizzare aree di visualizzazione multiple e aree separate orizzontalmente o verticalmente. Offre all'utente la possibilità di adattare la larghezza o l'altezza delle aree di visualizzazione mediante trascinamento.", +"splitLayoutCompKeywords": "dividere, dividere, layout, adattare, dimensione dello schermo", +"iconCompName": "Icone", +"iconCompDesc": "Utilizzate varie icone per migliorare l'aspetto visivo e l'esperienza utente della vostra applicazione.", +"iconCompKeywords": "Icone, pittogrammi, simboli, forme", +"tourCompName": "Tour", +"tourCompDesc": "Un tour del prodotto per guidare gli utenti.", +"tourCompKeywords": "tour, tour del prodotto, walkthrough, walkthrough interattivo", +"hillchartCompName": "Grafico della collina", +"hillchartCompDesc": "Un componente di visualizzazione che permette di visualizzare i dati sullo stato della gestione del progetto in un formato di grafico a colline.", +"hillchartCompKeywords": "gestione del progetto, diagramma a colline, visualizzazione, dati", +"openLayersGeoMapCompName": "Geomappa Openlayers", +"openLayersGeoMapCompDesc": "Un componente per la visualizzazione di mappe interattive utilizzando OpenLayers, con il supporto di vari livelli e caratteristiche della mappa.", +"openLayersGeoMapCompKeywords": "openlayers, mappa geografica, interattiva, strati di mappa", +"chartsGeoMapCompName": "Grafici geografici", +"chartsGeoMapCompDesc": "Un componente per la visualizzazione di dati geografici su mappe interattive con grafici dinamici", +"chartsGeoMapCompKeywords": "mappa geografica, grafici, visualizzazione, dati geografici", +"bpmnEditorCompName": "Editor BPMN", +"bpmnEditorCompDesc": "Un componente per la visualizzazione, la creazione e la modifica di diagrammi BPMN, che supporta vari elementi e funzioni BPMN.", +"bpmnEditorCompKeywords": "BPMN, editor, diagrammi, elementi, flussi di lavoro", +"turnstileCaptchaCompName": "Captcha a tornello", +"turnstileCaptchaCompDesc": "Un componente captcha per verificare gli utenti contro i bot.", +"turnstileCaptchaCompKeywords": "captcha, verifica, identità, sicurezza", +"pivotTableCompName": "Tabella pivot", +"pivotTableCompDesc": "Uno strumento di sintesi e analisi dei dati per organizzare e aggregare i dati in formato tabellare.", +"pivotTableCompKeywords": "Tabella pivot, dati, analisi, aggregazione", +"funnelChartCompName": "Grafico a imbuto", +"funnelChartCompDesc": "Uno strumento di visualizzazione che permette di visualizzare la progressiva riduzione dei dati attraverso le fasi.", +"funnelChartCompKeywords": "grafico a imbuto, vendite, conversioni, processo", +"gaugeChartCompName": "Grafico del calibro", +"gaugeChartCompDesc": "Un grafico che visualizza i dati come lettura su un quadrante, utile per indicare lo stato o il livello di qualcosa.", +"gaugeChartCompKeywords": "grafico di misura, metriche, prestazioni, stato", +"sankeyChartCompName": "Grafico Sankey", +"sankeyChartCompDesc": "Un diagramma di flusso in cui l'ampiezza delle frecce è proporzionale alla portata, utilizzato per mostrare i trasferimenti di energia, materiali o costi.", +"sankeyChartCompKeywords": "diagramma di Sankey, flusso, energia, costi", +"candleStickChartCompName": "Grafico a candele", +"candleStickChartCompDesc": "Stile di grafico finanziario utilizzato per descrivere i movimenti di prezzo di un titolo, di un derivato o di una valuta.", +"candleStickChartCompKeywords": "grafico a candele, azioni, trading, finanza", +"radarChartCompName": "Grafico radar", +"radarChartCompDesc": "Metodo grafico per la visualizzazione di dati multivariati sotto forma di grafico bidimensionale di tre o più variabili quantitative.", +"radarChartCompKeywords": "grafico radar, multivariato, analisi delle prestazioni", +"heatmapChartCompName": "Grafico Heatmap", +"heatmapChartCompDesc": "Una rappresentazione grafica dei dati in cui i singoli valori sono rappresentati come colori.", +"heatmapChartCompKeywords": "heatmap, visualizzazione dei dati, intensità", +"graphChartCompName": "Grafico", +"graphChartCompDesc": "Un diagramma che rappresenta una rete di nodi collegati da spigoli, utile per mostrare interconnessioni e relazioni.", +"graphChartCompKeywords": "grafico, reti, relazioni, nodi", +"treeChartCompName": "Grafico ad albero", +"treeChartCompDesc": "Un diagramma che rappresenta visivamente la gerarchia in una struttura ad albero, mostrando le relazioni tra i vari nodi.", +"treeChartCompKeywords": "diagramma ad albero, gerarchia, organizzazione", +"treemapChartCompName": "Grafico a mappa di alberi", +"treemapChartCompDesc": "Un grafico che utilizza rettangoli annidati per rappresentare in modo proporzionale i dati gerarchici.", +"treemapChartCompKeywords": "mappa a tre, gerarchia, visualizzazione dei dati", +"sunburstChartCompName": "Grafico Sunburst", +"sunburstChartCompDesc": "Una tecnica di visualizzazione a riempimento radiale dello spazio che illustra le relazioni gerarchiche attraverso gli strati di un cerchio.", +"sunburstChartCompKeywords": "Grafico a raggiera, radiale, gerarchia", +"themeriverChartCompName": "Grafico del fiume a tema", +"themeriverChartCompDesc": "Una visualizzazione che assomiglia a un grafico a flusso che mostra i cambiamenti di un insieme di dati nel corso del tempo tra le varie categorie.", +"themeriverChartCompKeywords": "tema fiume, serie temporali, tendenze", +"basicChartCompName": "Grafico di base", +"basicChartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", +"basicChartCompKeywords": "grafico, grafico, dati, visualizzazione", +"shapeCompName": "Forme", +"shapeCompDesc": "Una raccolta di forme geometriche da utilizzare per diagrammi, illustrazioni e visualizzazioni.", +"shapeCompKeywords": "forme, geometriche, diagrammi, illustrazioni", +"ganttChartCompName": "Grafico di Gantt", +"ganttChartCompDesc": "Un grafico che illustra la pianificazione di un progetto, mostrando le date di inizio e fine degli elementi e le dipendenze.", +"ganttChartCompKeywords": "diagramma di gantt, gestione del progetto, pianificazione", +"kanbanCompName": "Lavagna Kanban (anteprima!)", +"kanbanCompDesc": "Un componente per la visualizzazione e la gestione delle attività in un flusso di lavoro Kanban, con colonne per le fasi di lavoro e le schede per le attività.", +"kanbanCompKeywords": "kanban, scheda, flusso di lavoro, attività", +"pieChartCompName": "Grafico a torta", +"pieChartCompDesc": "Un componente versatile per la visualizzazione dei dati con i grafici a torta.", +"pieChartCompKeywords": "grafico, dati, visualizzazione", +"lineChartCompName": "Grafico a linee", +"lineChartCompDesc": "Un componente versatile per la visualizzazione dei dati con i grafici a linee.", +"lineChartCompKeywords": "grafico, dati, visualizzazione", +"barChartCompName": "Grafico a barre", +"barChartCompDesc": "Un componente versatile per la visualizzazione dei dati con grafici a barre.", +"barChartCompKeywords": "grafico, dati, visualizzazione", +"scatterChartCompName": "Grafico a dispersione", +"scatterChartCompDesc": "Un componente versatile per la visualizzazione dei dati con i grafici di dispersione.", +"scatterChartCompKeywords": "grafico, dati, visualizzazione", +"colorPickerCompName": "Picker di colori", +"colorPickerCompDesc": "Selezione intuitiva dei colori per la personalizzazione.", +"colorPickerCompKeywords": "colore, selezionatore, personalizzazione", +"floatButtonCompName": "Pulsante di galleggiamento", +"floatButtonCompDesc": "Un pulsante di azione fluttuante per azioni rapide e di rilievo.", +"floatButtonCompKeywords": "pulsante flottante, azione, rapido", +"avatarCompName": "Avatar", +"avatarCompDesc": "Visualizza gli avatar degli utenti o le immagini del profilo per un'identificazione personalizzata.", +"avatarCompKeywords": "avatar, immagine del profilo, identificazione dell'utente", +"avatarGroupCompName": "Gruppo Avatar", +"avatarGroupCompDesc": "Un gruppo di avatar per rappresentare più utenti o entità in modo compatto e visivamente accattivante.", +"avatarGroupCompKeywords": "gruppo avatar, utenti, entità, compatto", +"transferName": "Trasferimento", +"transferDesc": "Facilita il trasferimento dei dati tra due elenchi con la funzione di trascinamento.", +"transferKeywords": "trasferimento, dati, drag-and-drop", +"cardCompName": "Scheda Contenuto", +"cardCompDesc": "Un componente di scheda per la visualizzazione di informazioni o contenuti organizzati in modo strutturato.", +"cardCompKeywords": "scheda, informazione, contenuto, visualizzazione", +"timerCompName": "Timer", +"timerCompDesc": "Un componente che visualizza un conto alla rovescia o un tempo trascorso, utile per tracciare durate e scadenze.", +"timerCompKeywords": "timer, conto alla rovescia, tempo trascorso, tracciamento, durate, scadenze", +}, +"comp": { + ...en.comp, + +"menuViewDocs": "Visualizza la documentazione", +"menuViewPlayground": "Visualizza il parco giochi interattivo", +"menuUpgradeToLatest": "Aggiornamento alla versione più recente", +"nameNotEmpty": "Non può essere vuoto", +"nameRegex": "Deve iniziare con una lettera e contenere solo lettere, cifre e trattini (_).", +"nameJSKeyword": "Non può essere una parola chiave JavaScript", +"nameGlobalVariable": "Non può essere un nome di variabile globale", +"nameExists": "Nome {name} Già esistente", +"getLatestVersionMetaError": "Impossibile recuperare la versione più recente, riprovare più tardi.", +"needNotUpgrade": "La versione attuale è già la più recente.", +"compNotFoundInLatestVersion": "Componente corrente non trovato nella versione più recente.", +"upgradeSuccess": "Aggiornato con successo all'ultima versione.", +"searchProp": "Ricerca", +}, +"jsonSchemaForm": { + ...en.jsonSchemaForm, + +"retry": "Riprova", +"resetAfterSubmit": "Reimpostazione dopo l'invio del modulo", +"jsonSchema": "Schema JSON", +"uiSchema": "Schema UI", +"schemaTooltip": "Vedi", +"defaultData": "Dati del modulo precompilati", +"dataDesc": "Dati del modulo corrente", +"required": "Richiesto", +"maximum": "Il valore massimo è {value}.", +"minimum": "Il valore minimo è {value}.", +"exclusiveMaximum": "Dovrebbe essere minore di {value}", +"exclusiveMinimum": "Dovrebbe essere maggiore di {value}", +"multipleOf": "Dovrebbe essere un multiplo di {value}", +"minLength": "Almeno {value} Caratteri", +"maxLength": "Al massimo {value} Caratteri", +"pattern": "Dovrebbe corrispondere al modello {value}", +"format": "Dovrebbe corrispondere al formato {value}", +}, +"select": { + ...en.select, + +"inputValueDesc": "Ingresso Valore di ricerca", +}, +"customComp": { + ...en.customComp, + +"text": "È un buon giorno.", +"triggerQuery": "Query di attivazione", +"updateData": "Aggiornamento dei dati", +"updateText": "Sono anche dell'umore giusto per sviluppare ora il mio componente personalizzato con Lowcoder!", +"sdkGlobalVarName": "Lowcoder", +"data": "Dati da passare al componente personalizzato", +"code": "Codice del componente personalizzato", +}, +"tree": { + ...en.tree, + +"placeholder": "Selezionare", +"selectType": "Selezionare il tipo", +"noSelect": "Non selezionare", +"singleSelect": "Selezione singola", +"multiSelect": "Selezione multipla", +"checkbox": "Casella di controllo", +"checkedStrategy": "Strategia controllata", +"showAll": "Tutti i nodi", +"showParent": "Solo i nodi parentali", +"showChild": "Nodi figli unici", +"autoExpandParent": "Espansione automatica genitore", +"checkStrictly": "Controllare rigorosamente", +"checkStrictlyTooltip": "Controllare con precisione il TreeNode; il TreeNode genitore e i TreeNode figli non sono associati", +"treeData": "Dati dell'albero", +"treeDataDesc": "Dati attuali dell'albero", +"value": "Valori predefiniti", +"valueDesc": "Valori attuali", +"expanded": "Valori ampliati", +"expandedDesc": "Valori attuali ampliati", +"defaultExpandAll": "Predefinito Espandi tutti i nodi", +"showLine": "Linea spettacolo", +"showLeafIcon": "Mostra l'icona Foglia", +"treeDataAsia": "Asia", +"treeDataChina": "Cina", +"treeDataBeijing": "Pechino", +"treeDataShanghai": "Shanghai", +"treeDataJapan": "Giappone", +"treeDataEurope": "Europa", +"treeDataEngland": "Inghilterra", +"treeDataFrance": "Francia", +"treeDataGermany": "Germania", +"treeDataNorthAmerica": "Nord America", +"helpLabel": "Etichetta del nodo", +"helpValue": "Valore unico del nodo nell'albero", +"helpChildren": "Nodi figli", +"helpDisabled": "Disabilita il nodo", +"helpSelectable": "Se il nodo è selezionabile (tipo di selezione singola/multi)", +"helpCheckable": "Visualizzazione o meno della casella di controllo (tipo di casella di controllo)", +"helpDisableCheckbox": "Disabilita la casella di controllo (tipo casella di controllo)", +}, +"moduleContainer": { + ...en.moduleContainer, + +"eventTest": "Test dell'evento", +"methodTest": "Metodo Test", +"inputTest": "Test di ingresso", +}, +"password": { + ...en.password, + +"label": "Password", +"placeholder": "Inserire la password", +"conformLabel": "Conferma la password", +"conformPlaceholder": "Confermare la password", +"visibilityToggle": "Alterna la visibilità", +}, +"richTextEditor": { + ...en.richTextEditor, + +"toolbar": "Personalizzare la barra degli strumenti", +"toolbarDescription": "È possibile personalizzare la barra degli strumenti. Per maggiori dettagli, consultare: https://quilljs.com/docs/modules/toolbar/.", +"placeholder": "Inserisci...", +"hideToolbar": "Nascondere la barra degli strumenti", +"content": "Content", +"title": "Titolo", +"save": "Risparmiare", +"link": "Link:", +"edit": "Modifica", +"remove": "Rimuovere", +"defaultValue": "Contenuto di base", +}, +"floatButton": { + ...en.floatButton, + +"custom": "Personalizzato", +"backTop": "Indietro Top", +"buttonType": "Tipo di pulsante", +"buttonShape": "Forma del pulsante", +"square": "Quadrato", +"circle": "Cerchio", +"description": "Descrizione", +"badge": "Distintivo", +"primary": "Primario", +"default": "Predefinito", +"buttonTheme": "Tema dei pulsanti", +"badgeColor": "Colore del badge", +"dot": "Distintivo come punto", +"hidden": "Nascosto", +"visibilityHeight": "Altezza di visibilità", +"visibilityHeightDesc": "Scorrere fino a una certa altezza prima di visualizzare il pulsante di ritorno all'inizio, 0 è sempre visualizzato, la modalità di modifica non può visualizzare l'anteprima in tempo reale", +}, +"colorPicker": { + ...en.colorPicker, + +"trigger": "Evento Trigger", +"click": "Cliccare", +"hover": "Hover", +"disabledAlpha": "Disabilita la selezione alfa", +"recommended": "Consigliato", +"showPresets": "Mostra le preimpostazioni di colore", +}, +"badge": { + ...en.badge, + +"showCloseButton": "Mostra il pulsante di chiusura", +"Type": "Tipo di badge", +"Count": "Conteggio dei badge", +"Size": "Dimensione del badge", +"SizeDefault": "predefinito", +"SizeSmall": "Piccolo", +"overflowCount": "Conteggio dell'overflow", +"Title": "Titolo del distintivo", +"dot": "Punto", +"number": "Numero", +"tooltip": "Tooltip", +}, +"gantt": { + ...en.gantt, + +"key": "Chiave", +"title": "Titolo", +"project": "Progetto", +"from": "Da", +"minute": "minuto", +"hour": "Ora", +"day": "Giorno", +"week": "Settimana", +"month": "Mese", +"year": "Anno", +"quarter": "Trimestre", +"tasks": "Dati sulle attività", +"level": "livello", +"durationUnit": "Unità di durata", +"duration": "Durata", +"hourScalesFormat": "%F %d", +"dayScalesFormat": "%d %M", +"weekScalesFormat1": "%d %M", +"weekScalesFormat2": "%j %D", +"monthScalesFormat1": "%F, %Y", +"monthScalesFormat2": "Settimana #%W", +"quarterScalesFormat": "{y} Q{i}", +"yearScalesFormat": "%Y", +"tree": "albero", +"ColumnsData": "Colonne Dati", +"allowChangeTask": "Attività DbClick", +"allowAddLink": "Aggiungi collegamento", +"allowLinkDelete": "Cancellazione del link", +"allowProgressDrag": "Trascinamento del progresso", +"allowTaskDrag": "Trascinamento dell'attività", +"links": "Dati sui link", +"dataFormat": "Data parse Format", +"handleDateChange": "Gestire la modifica dell'attività", +"handleTaskChange": "Gestire la modifica dell'attività", +"handleAddedLink": "Maniglia Link aggiunto", +"handleDeletedLink": "Gestire il link cancellato", +"handleProgressDrag": "Gestire il trascinamento dell'avanzamento", +"showTodayMark": "Mostra Oggi Mark", +"resize": "Ridimensionamento", +"otherEvents": "Altri eventi", +"openAllBranchInit": "Aprire tutte le filiali", +"date": "Data", +"text": "Testo", +"progress": "progresso", +"width": "Larghezza", +"ColumnsType": "Tipo di cloumns", +"currentId": "ID corrente", +"currentObject": "Oggetto corrente", +"addTask": "Aggiungi attività", +"taskObject": "Oggetto dell'attività", +"taskObjectDesc": "Supporta array di task o singoli oggetti task", +"linkID": "ID collegamento", +"linkIDDesc": "Supporta array di ID di collegamenti o singoli oggetti di collegamento.", +"removeTask": "Rimuovere l'attività", +"taskID": "ID compito", +"taskIDDesc": "Supporta array di ID o ID singolo", +"add": "Aggiungi", +"expandingAll": "Espansione di tutti", +"collapsingAll": "Crollo di tutti", +"addTaskFail": "L'operazione di aggiunta non è riuscita e il tipo di parametro deve essere un oggetto o un oggetto array.", +"addLinkFail": "Il collegamento di aggiunta non è riuscito e il tipo di parametro deve essere un oggetto o un oggetto array.", +"removeTaskFail": "L'attività di eliminazione non è riuscita e il tipo di parametro deve essere stringa o array di stringhe.", +"removeLinkFail": "I collegamenti di cancellazione non sono riusciti e il tipo di parametro deve essere un array di stringhe.", +"otherData": "Altri dati{i}", +"projectText": "Progetto #{i}", +"taskText": "Compito #{i}", +"AutoCalculateProgress": "Avanzamento del calcolo automatico", +"allowProjectDrag": "Consentire il trascinamento del progetto", +"showColumns": "Mostra colonne", +"exportToPNG": "Esportazione in PNG", +"exportToPDF": "Esportazione in PDF", +"exportToExcel": "Esportazione in Excel", +"progressLowBg": "Basso BgColor", +"progressLowColor": "Colore di avanzamento basso", +"progressMediumBg": "Medio BgColor", +"progressMediumColor": "Colore Medio Progresso", +"progressHighBg": "Altezza BgColor", +"progressHighColor": "Colore di avanzamento alto", +"progresscompletedColor": "Colore di avanzamento completato", +"lowProgressLine": "Linea di avanzamento bassa", +"mediumProgressLine": "Linea di avanzamento media", +"SegmentedColor": "Progresso Colore segmentato", +"link_f2s": "Collegamento F2S", +"link_s2s": "Collegamento S2S", +"link_f2f": "Collegamento F2F", +"link_s2f": "Collegamento S2F", +"weekScale": "#{i},", +"showHolidays": "Mostra Vacanze", +"StatutoryHolidays": "Dati sulle ferie legali", +"skipOffTime": "Nasconde il tempo non lavorativo", +"weekend": "Fine settimana", +"weekendSelected": "Fine settimana selezionato", +"noWorkHour": "Nessun orario di lavoro", +"noWorkHourSelected": "nessun orario di lavoro selezionato", +"showWorkTimes": "Mostra Tempi di lavoro", +"workTimeData": "Dati sui tempi di lavoro", +"fit": "in forma", +"manual": "manuale", +"scaleMode": "Scale Mode", +"startDate": "Data di inizio", +"endDate": "Data di fine", +"addLink": "Aggiungi link", +"linkObject": "link Oggetto", +"removeLink": "rimuovere il link", +"allowSort": "Consenti ordinamento", +"showTask": "Mostra attività", +"toggleOnDBClick": "Attivare DBClick", +"sortOptions": "Opzioni di ordinamento iniziali", +"rowHeight": "Altezza della fila", +"showTooltip": "Mostra la descrizione degli strumenti", +"tooltipTemplates": "Modello di tooltip", +"allowResizeTask": "Consentire il ridimensionamento dell'attività", +"projectColor": "Progetto Colore", +"projectColorBg": "Progetto BgColor", +"taskColor": "Colore dell'attività", +"taskColorBg": "Attività BgColor", +"milestoneColor": "Colore della pietra miliare", +"highlightOverdue": "Evidenziare gli arretrati", +"overdueColor": "Overdue Color", +"overdueBgColor": "Overdue BgColor", +"projectCompletedBgColor": "Progetto completato BgColor", +"projectCompletedColor": "Progetto completato Colore", +"tag": "tag", +"tasksTableWidth": "Larghezza della tabella delle attività", +"allowErrorMessage": "Consentire il messaggio di errore", +"currentProjectId": "Id progetto attuale", +"currentProjectLastTask": "Progetto corrente Ultimo compito", +"onlySortProject": "Solo progetto di ordinamento", +}, +"transfer": { + ...en.transfer, + +"sourceTitle": "Dati sorgente", +"targetTitle": "Dati di destinazione", +"content": "Contenuto {i}", +"items": "Articoli", +"targetKeys": "Chiavi selezionate", +"oneWay": "Un modo", +"pagination": "Paginazione", +"pageSize": "Dimensione della pagina", +"allowSearch": "Consenti la ricerca", +"selectedKeys": "Chiavi selezionate", +"searchInfo": "Ricerca Info", +"targerObject": "Oggetto Targer", +}, +"avatarGroup": { + ...en.avatarGroup, + +"maxCount": "Conteggio massimo", +"avatarSize": "Dimensione dell'avatar", +"autoColor": "Auto Color", +"alignment": "Allineamento", +"currentAvatar": "Avatar corrente", +}, +"avatarComp": { + ...en.avatarComp, + +"square": "piazza", +"circle": "cerchio", +"icon": "icona", +"shape": "forma", +"counts": "Distintivo", +"title": "titolo", +"src": "src", +"avatarCompTooltip": "La priorità di visualizzazione è: immagine -> caratteri -> icona. A seconda di ciò che è disponibile per primo.", +"iconSize": "Dimensione dell'icona", +"avatarBackground": "Sfondo", +"label": "Etichetta", +"caption": "Didascalia", +"labelPosition": "Posizione", +"alignmentPosition": "allineamento", +"text": "Testo", +"enableDropDown": "Abilitazione della tendina", +"containerBackground": "Sfondo", +}, +"card": { + ...en.card, + +"cardType": "Tipo di carta", +"common": "comune", +"custom": "personalizzato", +"default": "predefinito", +"small": "piccolo", +"showTitle": "Mostra il titolo", +"title": "Titolo", +"more": "Di più", +"extraTitle": "Invito all'azione", +"CoverImg": "Immagine di copertina", +"imgSrc": "Fonte immagine", +"showMeta": "Mostra il contenuto", +"metaTitle": "Titolo del contenuto", +"metaDesc": "Descrizione del contenuto", +"imgHeight": "Altezza immagine", +"showActionIcon": "Mostra opzioni di azione", +"actionOptions": "Opzioni di azione", +"menu": "Menu {i}", +"hoverColor": "hover Colore", +"IconColor": "Icona Colore", +"titleSize": "Titolo Dimensione", +}, +"timer": { + ...en.timer, + +"timerState": "Stato del timer", +"elapsedTime": "Tempo trascorso", +"timer": "Timer", +"countdown": "Conto alla rovescia", +"defaultValue": "Valore predefinito", +"timerType": "Tipo di timer", +"start": "Inizio", +"pause": "Pausa", +"resume": "Il curriculum", +"reset": "Reset", +"startPause": "Avvio/Pausa", +"hideButton": "Pulsante Nascondi", +"fontColor": "Colore del carattere", +}, +"iconComp": { + ...en.iconComp, + +"icon": "Icona", +"autoSize": "Icona Ridimensionamento automatico", +"iconSize": "Dimensione dell'icona", +}, +"numberInput": { + ...en.numberInput, + +"formatter": "Formato", +"precision": "Precisione", +"allowNull": "Consentire il valore nullo", +"thousandsSeparator": "Mostra separatore di migliaia", +"controls": "Mostra pulsanti di incremento/decremento", +"step": "Passo", +"standard": "Standard", +"percent": "Percentuale", +}, +"slider": { + ...en.slider, + +"step": "Passo", +"stepTooltip": "Il valore deve essere maggiore di 0 e divisibile per (Max-Min)", +"vertical": "Orientamento verticale", +}, +"rating": { + ...en.rating, + +"max": "Valutazione massima", +"allowHalf": "Consentire la metà dei punti di valutazione", +}, +"optionsControl": { + ...en.optionsControl, + +"optionList": "Opzioni", +"option": "Opzione", +"optionI": "Opzione {i}", +"viewDocs": "Visualizza i documenti", +"tip": "Le variabili 'item' e 'i' rappresentano il valore e l'indice di ciascun elemento dell'array di dati.", +}, +"stepOptionsControl": { + ...en.stepOptionsControl, + +"value": "Valore / Chiave", +"valueTooltip": "Il valore del passo deve essere un numero. Per il primo passo, deve essere uguale al valore iniziale. I numeri devono essere in ordine crescente e coerente.", +"title": "Titolo del passo", +"subTitle": "Sottotitolo del passo", +"description": "Descrizione del passo", +"status": "Stato dei passi", +"icon": "Icona Passo", +}, +"step": { + ...en.step, + +"initialValue": "Numeri di partenza a", +"initialValueTooltip": "Dove iniziare la numerazione visiva. Deve essere 1 o superiore.", +"valueDesc": "Valore attuale", +"size": "Dimensione dei passi", +"sizeSmall": "Piccolo", +"sizeDefault": "Predefinito", +"percent": "Passi Percentuale", +"type": "Tipo di passo", +"typeDefault": "Standard", +"typeNavigation": "Navigazione", +"typeInline": "In linea", +"direction": "Direzione dei passi", +"directionVertical": "Verticale", +"directionHorizontal": "Orizzontale", +"labelPlacement": "Passi Posizionamento dell'etichetta", +"status": "Stato dei passi", +"statusWait": "Attendere", +"statusProcess": "Processo", +"statusFinish": "Finitura", +"statusError": "Errore", +"showDots": "Mostra punti invece di simboli", +"showIcons": "Mostra icone invece di simboli", +"responsive": "Reattivo", +"selectable": "Selezionabile", +}, +"coloredTagOptionControl": { + ...en.coloredTagOptionControl, + +"tag": "Testo del tag", +"color": "Colore", +"icon": "Icona", +}, +"radio": { + ...en.radio, + +"options": "Opzioni", +"horizontal": "Orizzontale", +"horizontalTooltip": "Il layout orizzontale si avvolge su se stesso quando finisce lo spazio a disposizione", +"vertical": "Verticale", +"verticalTooltip": "Il layout verticale verrà sempre visualizzato in una singola colonna", +"autoColumns": "Colonna automatica", +"autoColumnsTooltip": "Il layout a colonne automatico riordina automaticamente l'ordine in base allo spazio disponibile e lo visualizza come colonne multiple.", +}, +"cascader": { + ...en.cascader, + +"options": "Dati JSON per mostrare selezioni a cascata", +}, +"selectInput": { + ...en.selectInput, + +"valueDesc": "Valore attualmente selezionato", +"selectedIndexDesc": "L'indice del valore attualmente selezionato o -1 se non è selezionato alcun valore.", +"selectedLabelDesc": "L'etichetta del valore attualmente selezionato", +}, +"file": { + ...en.file, + +"typeErrorMsg": "Deve essere un numero con un'unità di dimensione del file valida o un numero di byte senza unità.", +"fileEmptyErrorMsg": "Caricamento fallito. La dimensione del file è vuota.", +"fileSizeExceedErrorMsg": "Caricamento fallito. La dimensione del file supera il limite.", +"minSize": "Dimensione minima", +"minSizeTooltip": "La dimensione minima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", +"maxSize": "Dimensione massima", +"maxSizeTooltip": "La dimensione massima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", +"single": "Singolo", +"multiple": "Multiplo", +"directory": "Elenco", +"upload": "Sfogliare", +"fileType": "Tipi di file", +"reference": "Fare riferimento a", +"fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", +"fileTypeTooltip": "Specificatori unici del tipo di file", +"uploadType": "Tipo di caricamento", +"showUploadList": "Mostra elenco di caricamento", +"maxFiles": "File max", +"filesValueDesc": "Il contenuto del file attualmente caricato è codificato Base64", +"filesDesc": "Elenco dei file attualmente caricati. Per i dettagli, fare riferimento a", +"clearValueDesc": "Cancella tutti i file", +"parseFiles": "Analizzare i file", +"parsedValueTooltip1": "Se parseFiles è vero, i file di caricamento verranno analizzati come oggetti, array o stringhe. È possibile accedere ai dati analizzati tramite la matrice parsedValue.", +"parsedValueTooltip2": "Supporta file Excel, JSON, CSV e di testo. Altri formati restituiranno un valore nullo.", +"forceCapture": "Forza di cattura", +"forceCaptureTooltip": "Invece di caricare, catturare l'immagine dalla fotocamera", +"usePhoto": "Usa foto", +"retakePhoto": "Retake Photo", +"capture": "Cattura", +}, +"date": { + ...en.date, + +"format": "Formato", +"inputFormat": "Formato di ingresso", +"formatTip": "Supporto: YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", +"reference": "Fare riferimento a", +"showTime": "Orario dello spettacolo", +"start": "Data di inizio", +"end": "Data di fine", +"year": "Anno", +"quarter": "Trimestre", +"month": "Mese", +"week": "Settimana", +"date": "Data", +"clearAllDesc": "Cancella tutto", +"resetAllDesc": "Azzeramento di tutti", +"placeholder": "Selezionare la data", +"placeholderText": "Segnaposto", +"startDate": "Data di inizio", +"endDate": "Data di fine", +}, +"time": { + ...en.time, + +"start": "Ora di inizio", +"end": "Tempo della fine", +"formatTip": "Supporto: 'HH:mm:ss', 'Timestamp'", +"format": "Formato", +"placeholder": "Selezionare l'ora", +"placeholderText": "Segnaposto", +"startTime": "Ora di inizio", +"endTime": "Tempo della fine", +}, +"button": { + ...en.button, + +"prefixIcon": "Icona Prefisso", +"prefixText": "Prefisso Testo", +"suffixIcon": "Icona Suffisso", +"icon": "Icona", +"iconSize": "Dimensione dell'icona", +"button": "Pulsante del modulo", +"formToSubmit": "Modulo da inviare", +"default": "Predefinito", +"submit": "Invia", +"textDesc": "Testo attualmente visualizzato sul pulsante", +"loadingDesc": "Il pulsante è in stato di caricamento? Se è vero, il pulsante corrente sta caricando", +"formButtonEvent": "Evento", +}, +"link": { + ...en.link, + +"link": "Collegamento a", +"textDesc": "Testo attualmente visualizzato sul link", +"loadingDesc": "Il collegamento è in stato di caricamento? Se è vero, il collegamento corrente è in fase di caricamento", +}, +"scanner": { + ...en.scanner, + +"text": "Fare clic su Scansione", +"camera": "Macchina fotografica {index}", +"changeCamera": "Telecamera Switch", +"continuous": "Scansione continua", +"uniqueData": "Ignore Duplicate Data", +"maskClosable": "Fare clic sulla Maschera per chiudere", +"errTip": "Si prega di utilizzare questo componente sotto HTTPS o Localhost", +}, +"dropdown": { + ...en.dropdown, + +"onlyMenu": "Display con sola etichetta", +"textDesc": "Testo attualmente visualizzato sul pulsante", +"triggerMode": "Modalità di attivazione", +}, +"textShow": { + ...en.textShow, + +"text": "### 👋 Hello, {name}", +"valueTooltip": "Markdown supporta la maggior parte dei tag e degli attributi HTML. iframe, Script e altri tag sono disabilitati per motivi di sicurezza.", +"verticalAlignment": "Allineamento verticale", +"horizontalAlignment": "Allineamento orizzontale", +"textDesc": "Testo visualizzato nella casella di testo corrente", +}, +"table": { + ...en.table, + +"editable": "Modificabile", +"columnNum": "Colonne", +"viewModeResizable": "Larghezza della colonna regolata dall'utente", +"viewModeResizableTooltip": "Se gli utenti possono regolare la larghezza delle colonne.", +"visibleResizables": "Mostra le maniglie di ridimensionamento", +"visibleResizablesTooltip": "Visualizza le maniglie di ridimensionamento visibili nell'intestazione della tabella.", +"showFilter": "Pulsante Mostra filtro", +"showRefresh": "Mostra il pulsante di aggiornamento", +"showDownload": "Mostra il pulsante di download", +"columnSeparator": "Separatore a colonna", +"columnSeparatorTooltip": "Separatore di colonna (\"delimitatore\") nel file CSV scaricato.\n\nRaccomandazioni:\n- Virgola (,)\n- Punto e virgola (;)\n- Tubo (|)\n- Tab (\\t)", +"columnSetting": "Pulsante di visibilità delle colonne", +"searchText": "Testo di ricerca", +"searchTextTooltip": "Cercare e filtrare i dati attualmente presenti nella tabella. Si tratta di una ricerca solo di facciata e non influisce sulla query di origine dei dati).", +"showQuickJumper": "Mostra Quick Jumper", +"hideOnSinglePage": "Nascondi su pagina singola", +"showSizeChanger": "Pulsante Mostra cambio formato", +"pageSizeOptions": "Opzioni di formato pagina", +"pageSize": "Dimensione della pagina", +"total": "Conteggio totale delle righe", +"totalTooltip": "Il valore predefinito è il numero di elementi di dati correnti che possono essere ottenuti dalla query, ad esempio: '{{query1.data[0].count}}'.", +"filter": "Filtri", +"filterRule": "Regola del filtro", +"chooseColumnName": "Scegliere la colonna", +"chooseCondition": "Scegliere la condizione", +"clear": "Libero", +"columnShows": "Colonna Mostra", +"selectAll": "Seleziona tutti", +"and": "E", +"or": "Oppure", +"contains": "Contiene", +"notContain": "Non contiene", +"equals": "Pari", +"isNotEqual": "Non è uguale", +"isEmpty": "È vuoto", +"isNotEmpty": "Non è vuoto", +"greater": "Maggiore di", +"greaterThanOrEquals": "Maggiore o uguale", +"lessThan": "Meno di", +"lessThanOrEquals": "Meno di o uguale", +"action": "Azione", +"columnValue": "Valore della colonna", +"columnValueTooltip": "'{{currentCell}}': Dati cella corrente\n '{{currentRow}}': Dati riga corrente\n '{{currentIndex}}': Indice dei dati correnti (a partire da 0)\n Esempio: '{{currentCell * 5}}' Mostra 5 volte il valore originale Dati.", +"columnTooltip": "Tooltip di colonna", +"imageSrc": "Fonte immagine", +"imageSize": "Dimensione dell'immagine", +"columnTitle": "Titolo", +"columnTitleTooltip": "Tooltip del titolo", +"showTitle": "Mostra il titolo", +"showTitleTooltip": "Mostra/nascondi il titolo della colonna nell'intestazione della tabella", +"sortable": "Ordinabile", +"align": "Allineamento", +"fixedColumn": "Colonna fissa", +"autoWidth": "Larghezza automatica", +"customColumn": "Colonna personalizzata", +"auto": "Auto", +"fixed": "Fisso", +"columnType": "Tipo di colonna", +"dataMapping": "Mappatura dei dati", +"numberStep": "Passo", +"numberStepTooltip": "Il numero a cui viene aumentato o diminuito il valore corrente. Può essere un numero intero o decimale", +"precision": "Precisione", +"float": "Galleggiante", +"prefix": "Prefisso", +"suffix": "Suffisso", +"avatars": "Avatars", +"avatarGroupAlignment": "Allineamento degli avatar", +"text": "Testo", +"number": "Numero", +"link": "Collegamento a", +"links": "Collegamenti", +"tag": "Tag", +"select": "Selezionare", +"dropdown": "A discesa", +"time": "Tempo", +"date": "Data", +"dateTime": "Data Ora", +"badgeStatus": "Stato", +"button": "Button", +"image": "Immagine", +"boolean": "Booleano", +"switch": "Interruttore", +"rating": "Valutazione", +"progress": "Progressi", +"option": "Funzionamento", +"optionList": "Elenco delle operazioni", +"option1": "Operazione 1", +"status": "Stato", +"statusTooltip": "Valori opzionali: Successo, Errore, Predefinito, Avviso, Elaborazione", +"primaryButton": "Primario", +"defaultButton": "Predefinito", +"type": "Tipo", +"tableSize": "Dimensione della tabella", +"hideHeader": "Nascondere l'intestazione della tabella", +"hideToolbar": "Nascondere Piè di pagina", +"fixedHeader": "Intestazione fissa della tabella", +"fixedHeaderTooltip": "L'intestazione sarà fissa per la tabella a scorrimento verticale", +"fixedToolbar": "Barra degli strumenti fissa", +"fixedToolbarTooltip": "La barra degli strumenti sarà fissa per la tabella a scorrimento verticale in base alla posizione", +"hideBordered": "Mostra le maniglie di ridimensionamento", +"showHeaderGridBorder": "Mostra il bordo della griglia dell'intestazione", +"showRowGridBorder": "Mostra il bordo della griglia delle righe", +"showVerticalRowGridBorder": "Mostra il bordo verticale della griglia delle righe", +"showHorizontalRowGridBorder": "Mostra il bordo della griglia delle righe orizzontali", +"deleteColumn": "Cancellare la colonna", +"confirmDeleteColumn": "Confermare la colonna Elimina:", +"small": "S", +"middle": "M", +"large": "L", +"refreshButtonTooltip": "I dati correnti cambiano, fare clic per rigenerare la colonna.", +"changeSetDesc": "Un oggetto che rappresenta le modifiche a una tabella modificabile, contiene solo la cella modificata. Le righe vanno per prime e le colonne per seconde.", +"selectedRowDesc": "Fornisce i dati per la riga attualmente selezionata, indicando la riga che attiva un evento di clic se l'utente fa clic su un pulsante/collegamento nella riga.", +"selectedRowsDesc": "Utile nella modalità di selezione multipla, come SelectedRow", +"pageNoDesc": "Pagina di visualizzazione corrente, a partire da 1", +"pageSizeDesc": "Quante righe per pagina", +"sortColumnDesc": "Il nome della colonna ordinata attualmente selezionata", +"sortDesc": "Se la riga corrente è in ordine decrescente", +"pageOffsetDesc": "L'inizio corrente del Paging, utilizzato per il Paging per ottenere i dati. Esempio: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", +"displayDataDesc": "Dati visualizzati nella tabella corrente", +"selectedIndexDesc": "Indice selezionato nei dati di visualizzazione", +"filterDesc": "Parametri di filtraggio della tabella", +"dataDesc": "I dati JSON della tabella", +"saveChanges": "Salvare le modifiche", +"cancelChanges": "Annulla modifiche", +"rowSelectChange": "Selezione riga Modifica", +"rowClick": "Riga Fare clic", +"rowExpand": "Espandi riga", +"rowShrink": "Restringimento della fila", +"search": "Ricerca", +"download": "Scaricare", +"columnEdited": "Colonna modificata", +"filterChange": "Sostituzione del filtro", +"sortChange": "Ordinamento Cambiamento", +"pageChange": "Cambio pagina", +"refresh": "Aggiornare", +"rowColor": "Colore condizionale della riga", +"rowColorDesc": "Imposta in modo condizionale il colore della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"green\" : \"red\" }}\".", +"rowHeight": "Altezza di riga condizionale", +"rowHeightDesc": "Imposta in modo condizionale l'altezza della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}\".", +"cellColor": "Colore della cella condizionale", +"cellColorDesc": "Impostare in modo condizionale il colore della cella in base al valore della cella utilizzando CurrentCell. Ad esempio: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", +"saveChangesNotBind": "Nessun gestore eventi configurato per il salvataggio delle modifiche. Associa almeno un gestore di eventi prima del clic.", +"dynamicColumn": "Utilizzare la visibilità dinamica delle colonne", +"dynamicColumnConfig": "Colonne visibili", +"dynamicColumnConfigDesc": "Visibilità dinamica delle colonne. Accetta un array di nomi di colonne. Tutte le colonne sono visibili per impostazione predefinita. Esempio: [\"id\", \"nome\"].", +"position": "Posizione", +"showDataLoadSpinner": "Mostra indicatore di caricamento", +"showValue": "Mostra valore", +"expandable": "Espandibile", +"configExpandedView": "Configurare la vista espansa", +"toUpdateRowsDesc": "Un array di oggetti per le righe da aggiornare nelle tabelle modificabili.", +"selectedCellDesc": "Cellula selezionata", +"empty": "Vuoto", +"falseValues": "Testo quando è falso", +"iconTrue": "Icona Quando è vero", +"iconFalse": "Icona Quando falso", +"iconNull": "Icona Quando zero", +"allColumn": "Tutti", +"visibleColumn": "Visibile", +"emptyColumns": "Nessuna colonna è attualmente visibile", +"showSummary": "Mostra righe di riepilogo", +"totalSummaryRows": "Totale righe", +"inlineAddNewRow": "Aggiungi nuova riga in linea", +"editMode": "Modalità di modifica", +"singleClick": "Singolo clic", +"doubleClick": "Doppio clic", +"showUpdateButtons": "Mostra i pulsanti Salva/Annulla", +}, +"image": { + ...en.image, + +"src": "Fonte immagine", +"srcDesc": "L'origine dell'immagine. Può essere un URL, un percorso o una stringa Base64. per esempio: data:image/png;base64, AAA... CCC", +"supportPreview": "Supporto Fare clic sull'anteprima (zoom)", +"supportPreviewTip": "Efficace quando la fonte dell'immagine è valida", +"previewSrc": "Fonte immagine ad alta risoluzione", +"clipPath": "Percorso di ritaglio dell'immagine", +"clipPathTip": "Utilizzare clip-path per definire una forma personalizzata per l'elemento in base a una definizione CSS, facendo riferimento a una maschera SVG (tramite l'URL di origine) o utilizzando forme predefinite come cerchio(), ellisse(), poligono() o inset() per il ritaglio.", +"enableOverflow": "Abilita l'overflow", +"enableOverflowTip": "Permette all'immagine di traboccare dal suo contenitore, consentendo il ritaglio oltre i limiti del contenitore. Utile per mantenere l'attenzione su parti specifiche dell'immagine.", +"overflow": "Comportamento del trabocco (CSS)", +"overflowTip": "Definisce il comportamento del contenuto quando trabocca dal contenitore. Opzioni come 'hidden', 'scroll' o 'visible' determinano la visibilità del contenuto ritagliato.", +"positionX": "Posizione orizzontale", +"positionXTip": "Specifica l'allineamento orizzontale dell'immagine all'interno del suo contenitore. Esempi: 'sinistra', 'centro', 'destra' o valori percentuali.", +"positionY": "Posizione verticale", +"positionYTip": "Specifica l'allineamento verticale dell'immagine all'interno del suo contenitore. Esempi: 'superiore', 'centrale', 'inferiore' o valori percentuali.", +"aspectRatio": "Rapporto di aspetto (CSS)", +"aspectRatioTip": "Mantiene un rapporto larghezza/altezza coerente per l'immagine, come ad esempio '16/9' per il widescreen o '1/1' per il quadrato. Lasciare vuoto per le dimensioni naturali dell'immagine.", +"placement": "Posizionamento dell'immagine", +"placementTip": "Determina dove e come l'immagine viene visualizzata all'interno del layout o del contenitore. Le opzioni includono una logica specifica di allineamento o posizionamento.", +}, +"progress": { + ...en.progress, + +"value": "Valore", +"valueTooltip": "La percentuale di completamento come valore compreso tra 0 e 100", +"showInfo": "Mostra valore", +"valueDesc": "Valore di avanzamento corrente, compreso tra 0 e 100", +"showInfoDesc": "Visualizzazione o meno del valore di avanzamento corrente", +}, +"fileViewer": { + ...en.fileViewer, + +"invalidURL": "Inserire un URL valido o una stringa Base64", +"src": "File URI", +"srcTooltip": "Anteprima del contenuto del link fornito tramite l'incorporazione di HTML, possono essere supportati anche dati codificati Base64, ad esempio: data:application/pdf; base64,AAA... CCC", +"srcDesc": "The File URI", +}, +"divider": { + ...en.divider, + +"title": "Titolo", +"align": "Allineamento", +"dashed": "Tratteggiato", +"type": "Tipo verticale", +"dashedDesc": "Utilizzo o meno della linea tratteggiata", +"titleDesc": "Titolo del divisore", +"alignDesc": "Allineamento del titolo del divisore", +}, +"QRCode": { + ...en.QRCode, + +"value": "Codice QR Valore del contenuto", +"valueTooltip": "Il valore contiene un massimo di 2953 caratteri. Il valore del codice QR può codificare vari tipi di dati, tra cui messaggi di testo, URL, dettagli di contatto (VCard/meCard), credenziali di accesso al Wi-Fi, indirizzi e-mail, numeri di telefono, messaggi SMS, coordinate di geolocalizzazione, dettagli di eventi del calendario, informazioni di pagamento, indirizzi di criptovalute e link per il download di app.", +"valueDesc": "Il valore del contenuto del codice QR", +"level": "Livello di tolleranza ai guasti", +"levelTooltip": "Si riferisce alla capacità del codice QR di essere scansionato anche se una parte di esso è bloccata. Più alto è il livello, più complesso è il codice.", +"includeMargin": "Mostra il margine", +"image": "Visualizzazione dell'immagine al centro", +"L": "L (Basso)", +"M": "M (Medio)", +"Q": "Q (quartile)", +"H": "H (Alto)", +"maxLength": "Il contenuto è troppo lungo. Impostare la lunghezza a meno di 2953 caratteri.", +}, +"jsonExplorer": { + ...en.jsonExplorer, + +"indent": "Rientro di ogni livello", +"expandToggle": "Espandere la struttura JSON", +"theme": "Tema del colore", +"valueDesc": "Dati JSON correnti", +"default": "Predefinito", +"defaultDark": "Predefinito Scuro", +"neutralLight": "Luce neutra", +"neutralDark": "Neutro scuro", +"azure": "Azzurro", +"darkBlue": "Blu scuro", +}, +"audio": { + ...en.audio, + +"src": "URI della sorgente audio o stringa Base64", +"defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", +"autoPlay": "Autoplay", +"loop": "Anello", +"srcDesc": "URI audio corrente o stringa Base64 come data:audio/mpeg;base64,AAA... CCC", +"play": "Gioco", +"playDesc": "Attivato quando viene riprodotto l'audio", +"pause": "Pausa", +"pauseDesc": "Attivato quando l'audio è in pausa", +"ended": "Terminato", +"endedDesc": "Attivato quando l'audio finisce di essere riprodotto", +}, +"video": { + ...en.video, + +"src": "URI sorgente video o stringa Base64", +"defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", +"poster": "URL del poster", +"defaultPosterUrl": "", +"autoPlay": "Autoplay", +"loop": "Anello", +"controls": "Nascondere i controlli", +"volume": "Volume", +"playbackRate": "Velocità di riproduzione", +"posterTooltip": "Il valore predefinito è il primo fotogramma del video.", +"autoPlayTooltip": "Dopo il caricamento del video, la riproduzione avverrà automaticamente. Se si modifica questo valore da Vero a Falso, il video viene messo in pausa. (Se è impostato un poster, verrà riprodotto dal pulsante Poster).", +"controlsTooltip": "Nascondere i controlli di riproduzione video. Potrebbe non essere completamente supportato da tutte le sorgenti video.", +"volumeTooltip": "Impostazione del volume del lettore, tra 0 e 1", +"playbackRateTooltip": "Impostare la frequenza del lettore, tra 1 e 2", +"srcDesc": "URI audio corrente o stringa Base64 come data:video/mp4;base64, AAA... CCC", +"play": "Gioco", +"playDesc": "Attivato quando viene riprodotto un video", +"pause": "Pausa", +"pauseDesc": "Attivato quando il video è in pausa", +"load": "Carico", +"loadDesc": "Attivato al termine del caricamento della risorsa video", +"ended": "Terminato", +"endedDesc": "Attivato al termine della riproduzione del video", +"currentTimeStamp": "Posizione di riproduzione corrente del video in secondi", +"duration": "La durata totale del video in secondi", +}, +"media": { + ...en.media, + +"playDesc": "Inizia la riproduzione del supporto.", +"pauseDesc": "Mette in pausa la riproduzione multimediale.", +"loadDesc": "Ripristina il supporto all'inizio e riavvia Selezionando la risorsa multimediale.", +"seekTo": "Cerca fino al numero di secondi indicato, o alla frazione se la quantità è compresa tra 0 e 1", +"seekToAmount": "Numero di secondi o frazione se è compreso tra 0 e 1", +"showPreview": "Anteprima dello spettacolo", +}, +"rangeSlider": { + ...en.rangeSlider, + +"start": "Valore iniziale", +"end": "Valore finale", +"step": "Dimensione del passo", +"stepTooltip": "Granularità del cursore, il valore deve essere maggiore di 0 e divisibile per (Max-Min)", +}, +"iconControl": { + ...en.iconControl, + +"selectIcon": "Selezionare un'icona", +"searchIcon": "Cercare un'icona", +"searchAnimation": "Ricerca di un'animazione", +"searchIllustration": "Ricerca di un'illustrazione", +"insertIcon": "Inserire un'icona", +"insertImage": "Inserire un'immagine o", +}, +"shapeControl": { + ...en.shapeControl, + +"selectShape": "Selezionare una forma", +"insertShape": "Inserire una forma", +"insertImage": "Inserire un'immagine o", +}, +"millisecondsControl": { + ...en.millisecondsControl, + +"timeoutTypeError": "Inserire il periodo di timeout corretto in ms, l'ingresso attuale è: {value}", +"timeoutLessThanMinError": "L'ingresso deve essere maggiore di {left}, l'ingresso corrente è: {value}", +}, +"selectionControl": { + ...en.selectionControl, + +"single": "Singolo", +"multiple": "Multiplo", +"close": "Chiudere", +"mode": "Modalità di selezione della riga", +}, +"container": { + ...en.container, + +"title": "Titolo del contenitore visualizzato", +"titleTooltip": "Il titolo del contenitore", +"flowWidth": "Larghezza del contenuto", +"floatType": "Testo Tipo fluttuante", +}, +"drawer": { + ...en.drawer, + +"closePosition": "Posizionamento del pulsante di chiusura", +"placement": "Posizionamento dei cassetti", +"size": "Dimensione", +"top": "In alto", +"right": "Diritto", +"center": "Centro", +"bottom": "Bottom", +"left": "A sinistra", +"title": "Titolo del cassetto", +"titleAlign": "Allineamento dei titoli", +"widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", +"heightTooltip": "Pixel, ad esempio 378", +"openDrawerDesc": "Cassetto aperto", +"closeDrawerDesc": "Chiudere il cassetto", +"width": "Larghezza cassetto", +"height": "Altezza cassetto", +}, +"meeting": { + ...en.meeting, + +"logLevel": "Livello di registro dell'SDK Agora", +"placement": "Posizionamento dei cassetti per le riunioni", +"meeting": "Impostazioni della riunione", +"cameraView": "Camera View", +"cameraViewDesc": "Vista della telecamera dell'utente locale (Host)", +"screenShared": "Schermo condiviso", +"screenSharedDesc": "Schermo condiviso dall'utente locale (Host)", +"audioUnmuted": "Audio non silenziato", +"audioMuted": "Audio disattivato", +"videoClicked": "Video cliccato", +"videoOff": "Video Off", +"videoOn": "Video On", +"size": "Dimensione", +"top": "In alto", +"host": "Host della sala riunioni. È necessario gestire l'host come propria applicazione logica.", +"participants": "Partecipanti alla sala riunioni", +"shareScreen": "Schermo condiviso dall'utente locale", +"appid": "ID applicazione Agora", +"meetingName": "Nome della riunione", +"localUserID": "ID utente host", +"userName": "Nome utente host", +"rtmToken": "Gettone Agora RTM", +"rtcToken": "Gettone Agora RTC", +"noVideo": "Nessun video", +"profileImageUrl": "URL dell'immagine del profilo", +"right": "Diritto", +"bottom": "Bottom", +"videoId": "ID flusso video", +"audioStatus": "Audio Status", +"left": "A sinistra", +"widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", +"heightTooltip": "Pixel, ad esempio 378", +"openDrawerDesc": "Cassetto aperto", +"closeDrawerDesc": "Chiudere il cassetto", +"width": "Larghezza cassetto", +"height": "Altezza cassetto", +"actionBtnDesc": "Pulsante di azione", +"broadCast": "Messaggi di trasmissione", +"title": "Titolo della riunione", +"meetingCompName": "Controllore di riunioni Agora", +"sharingCompName": "Schermo Condividi Stream", +"videoCompName": "Camera Stream", +"videoSharingCompName": "Schermo Condividi Stream", +"meetingControlCompName": "Icon Button", +"meetingCompDesc": "Componente della riunione", +"meetingCompControls": "Controllo delle riunioni", +"meetingCompKeywords": "Agorà Meeting, Web Meeting, Collaborazione", +"iconSize": "Dimensione dell'icona", +"userId": "ID utente host", +"roomId": "ID camera", +"meetingActive": "Riunione in corso", +"messages": "Messaggi trasmessi", +}, +"settings": { + ...en.settings, + +"title": "Impostazioni", +"userGroups": "Gruppi di utenti", +"organization": "Spazi di lavoro", +"subscription": "Abbonamenti", +"audit": "Registri di controllo", +"theme": "Temi", +"plugin": "Plugin", +"advanced": "Avanzato", +"apiDocs": "Documenti API", +"lab": "Laboratorio", +"branding": "Branding", +"oauthProviders": "Autenticazione utente", +"appUsage": "Registri di utilizzo delle app", +"environments": "Ambienti", +"premium": "Premio", +}, +"enterprise": { + ...en.enterprise, + +"AuditLogTitle": "Registro di controllo Dasboard", +"AuditLogOverview": "Filtro di registro", +"USER_LOGIN": "Accesso utente", +"USER_LOGOUT": "Disconnessione dell'utente", +"APPLICATION_VIEW": "Visualizza applicazione", +"APPLICATION_CREATE": "Crea applicazione", +"APPLICATION_DELETE": "Cancellare l'applicazione", +"APPLICATION_UPDATE": "Aggiornamento dell'applicazione", +"APPLICATION_MOVE": "Spostare la domanda", +"APPLICATION_RECYCLED": "Applicazione di riciclo", +"APPLICATION_RESTORE": "Ripristino dell'applicazione", +"APPLICATION_PUBLISH": "Pubblicazione di applicazioni", +"APPLICATION_VERSION_CHANGE": "Aggiornamento della versione dell'applicazione", +"APPLICATION_SHARING_CHANGE": "Modifica della condivisione delle applicazioni", +"APPLICATION_PERMISSION_CHANGE": "Modifica del permesso di applicazione", +"FOLDER_CREATE": "Crea cartella", +"FOLDER_DELETE": "Elimina cartella", +"FOLDER_UPDATE": "Cartella di aggiornamento", +"QUERY_EXECUTION": "Eseguire la query", +"GROUP_CREATE": "Crea gruppo", +"GROUP_UPDATE": "Gruppo di aggiornamento", +"GROUP_DELETE": "Cancellare il gruppo", +"GROUP_MEMBER_ADD": "Aggiungi un membro del gruppo", +"GROUP_MEMBER_ROLE_UPDATE": "Aggiornare il ruolo di membro del gruppo", +"GROUP_MEMBER_LEAVE": "Gruppo di congedo", +"GROUP_MEMBER_REMOVE": "Rimuovere un membro del gruppo", +"SERVER_START_UP": "Avvio del server", +"SERVER_INFO": "Visualizza informazioni sul server", +"DATA_SOURCE_CREATE": "Creare una fonte di dati", +"DATA_SOURCE_UPDATE": "Aggiornare la fonte di dati", +"DATA_SOURCE_DELETE": "Eliminare la fonte di dati", +"DATA_SOURCE_PERMISSION_GRANT": "Concessione dell'autorizzazione alla fonte di dati", +"DATA_SOURCE_PERMISSION_UPDATE": "Aggiornare l'autorizzazione della fonte di dati", +"DATA_SOURCE_PERMISSION_DELETE": "Autorizzazione di cancellazione della sorgente dati", +"LIBRARY_QUERY_CREATE": "Creare una query di biblioteca", +"LIBRARY_QUERY_UPDATE": "Aggiornare la query della biblioteca", +"LIBRARY_QUERY_DELETE": "Eliminare la query della biblioteca", +"LIBRARY_QUERY_PUBLISH": "Pubblicare la query della biblioteca", +"API_CALL_EVENT": "Evento di chiamata API", +"logFilter": "Filtro di registro", +"noLogsFound": "Non sono stati trovati registri. Regolare i filtri e riprovare.", +"usageLogUserEngagement": "Coinvolgimento degli utenti per regione", +"usageLogAppViews": "Utilizzo dell'app nel tempo", +"usageLogTopTen": "Top 10 delle applicazioni", +"usageLogAnonymousKNown": "Utenti anonimi/conosciuti", +"usageLogDevices": "Ripartizione dispositivi/OS", +"usageLogBrowsers": "Browser/Motore di layout", +"premiumFeaturesNotice": "Tutte le funzioni Premium sono disponibili nell'edizione Enterprise di Lowcoder.", +"requestLicense": "Richiesta di licenze Enterprise Edition", +"requestLicensesBtton": "Richiesta di accesso aziendale", +"AuditLogsTitle": "Registri di controllo", +"AuditLogsIntroTitle": "Potente visibilità sull'attività del vostro spazio di lavoro", +"AuditLogsIntro1": "I registri di audit consentono agli amministratori di tracciare esattamente ciò che accade nell'intera piattaforma Lowcoder. Dall'accesso degli utenti alle modifiche delle app, ogni azione rilevante viene catturata e memorizzata.", +"AuditLogsIntro2": "Per ogni evento includiamo metadati dettagliati come la geolocalizzazione, il tipo di dispositivo, il browser e il sistema operativo.", +"AuditLogsIntro3": "Questa trasparenza consente di monitorare l'attività in tutti gli ambienti connessi, fornendo una solida traccia di audit per supportare la conformità, la sicurezza e la comprensione operativa.", +"AuditLogsEventsTitle": "Quali eventi vengono monitorati?", +"AuditLogsEventsIntro": "Le seguenti azioni dell'utente vengono registrate in tempo reale:", +"SignIn": "Accedi", +"Logout": "Disconnessione", +"ViewApp": "Visualizza l'applicazione", +"CreateApp": "Creare una nuova applicazione", +"DeleteApp": "Eliminare l'applicazione", +"UpdateApp": "Aggiornamento app", +"MoveToFolder": "Sposta nella cartella", +"MoveToTrash": "Sposta nel cestino", +"RestoreApp": "Restore app", +"CreateFolder": "Creare una nuova cartella", +"DeleteFolder": "Cancellare la cartella", +"UpdateFolder": "Cartella di aggiornamento", +"ExecuteDataQuery": "Execute data query", +"CreateUserGroup": "Creare un nuovo gruppo di utenti", +"UpdateUserGroup": "Aggiornare il gruppo di utenti", +"DeleteUserGroup": "Cancellare il gruppo di utenti", +"AddGroupMember": "Aggiungere un membro del gruppo di utenti", +"UpdateGroupMemberRole": "Aggiornare il ruolo di un membro del gruppo di utenti", +"LeaveUserGroup": "Lasciare il gruppo utente", +"RemoveGroupMember": "Rimuovere il membro di un gruppo di utenti", +"ServerStartup": "Avvio del server", +"CreateDataSource": "Creare l'origine dati", +"UpdateDataSource": "Aggiornare l'origine dati", +"DeleteDataSource": "Delete data source", +"GrantUpdateDeletePermission": "Concedere o aggiornare le autorizzazioni", +"LibraryQueryActions": "Creare / aggiornare / cancellare le query della biblioteca", +"PublishLibraryQuery": "Pubblicare la query della biblioteca", +"AuditLogsPreviewTitle": "Anteprima del Registro di controllo in azione (fare clic per ingrandire)", +"ScreenshotPlaceholder1": "[ Screenshot 1 Placeholder ]", +"ScreenshotPlaceholder2": "[ Screenshot 2 Placeholder ]", +"ScreenshotPlaceholder3": "[ Segnaposto screenshot 3 ]", +"PricingTitle": "Prezzi dell'edizione Enterprise", +"PricingIntro": "Offriamo prezzi flessibili per organizzazioni di qualsiasi dimensione, adattati al vostro modello di utilizzo:", +"FlatRateTitle": "Opzione 1: tariffa forfettaria per istanza - $169 / mese", +"FlatRateDesc": "Un'istanza è un ambiente Lowcoder completo (database dei metadati + runtime) che può essere distribuito in modo indipendente. Questo include:", +"FlatRatePoint1": "Un archivio di metadati MongoDB dedicato", +"FlatRatePoint2": "Una o più app runtime (contenitori \"Api-Service\" e/o \"Node-Service\")", +"UsagePricingTitle": "Opzione 2: Prezzo basato sull'uso - $0,001 per chiamata API", +"UsagePricingDesc": "In alternativa, ogni istanza può essere concessa in licenza in base all'utilizzo delle API. Offriamo pacchetti prepagati:", +"API100k": "100.000 chiamate API - $100", +"API1M": "1.000.000 di chiamate API - $1.000", +"API10M": "10.000.000 di chiamate API - $10.000", +"UsageOverrunDesc": "Quando il vostro pacchetto API si esaurisce, vi avvisiamo. Una volta consumato il pacchetto, l'istanza rimane funzionante ma funzionerà a velocità ridotta per evitare abusi e mantenere la correttezza.", +"UsageTopUpInfo": "È possibile aggiungere pacchetti aggiuntivi in qualsiasi momento per garantire un accesso continuo e veloce, senza interruzioni del servizio.", +"AppUsageTitle": "Registri di utilizzo delle app", +"AppUsageIntroTitle": "Capire come vengono utilizzate le vostre app", +"AppUsageIntro1": "I registri di utilizzo delle app forniscono informazioni approfondite sul consumo delle applicazioni Lowcoder pubblicate.", +"AppUsageIntro2": "Questa funzionalità funziona come una versione integrata e semplificata di Google Analytics, ma completamente privata e limitata alla vostra istanza Lowcoder.", +"AppUsageIntro3": "Gli amministratori possono analizzare l'accesso alle app nel tempo, quali sono le più utilizzate e da dove gli utenti si connettono.", +"AppUsageMetricsTitle": "Metriche da tenere sotto controllo...", +"AppUsageMetricsIntro": "Queste analisi aiutano a prendere decisioni informate sul coinvolgimento e sull'utilizzo della piattaforma:", +"MetricActiveUsers": "Visualizzazioni dell'app per giorno / settimana / mese (in base al filtro temporale)", +"MetricViewsPerApp": "Top 10 delle applicazioni", +"MetricDevices": "Accesso per dispositivo (desktop, tablet, mobile)", +"MetricBrowsers": "Accesso per browser e sistema operativo", +"MetricCountries": "Origine geografica degli utenti", +"AppUsageScreenshotsTitle": "App Usage Analytics in azione (clicca per ingrandire)", +"AppUsageScreenshot1": "[ Schermata del cruscotto di utilizzo delle app ]", +"AppUsageScreenshot2": "[ Grafico delle visualizzazioni per app ]", +"AppUsageScreenshot3": "[ Mappa di distribuzione geografica ]", +"BrandingIntroTitle": "Marchio personalizzato e White-Labeling", +"BrandingIntro1": "Con le impostazioni di branding di Lowcoders, potete elevare l'esperienza del prodotto per i vostri utenti offrendo un branding completamente personalizzabile.", +"BrandingIntro2": "Date ai vostri clienti o ai team interni la possibilità di utilizzare la piattaforma come se fosse la loro: logo, colori, font e pagine personalizzate sono inclusi.", +"BrandingIntro3": "Oppure avete bisogno di una soluzione completamente white-label e di rafforzare l'identità del vostro marchio in ogni punto di contatto.", +"BrandingColorsIntro1": "È possibile impostare la propria combinazione di colori in base all'identità aziendale, compresi gli elementi primari dell'interfaccia utente e le barre di navigazione.", +"BrandingColorsIntro2": "Personalizzate le evidenziazioni della barra laterale, le sezioni dell'intestazione e persino il contrasto del testo per migliorare l'esperienza dell'utente e l'accessibilità.", +"BrandingFontsIntro": "Scegliete tra i font curati di Google per rendere la vostra applicazione veramente vostra sia in termini di stile che di leggibilità.", +"BrandingLogosIntro": "Naturalmente, è possibile caricare i propri loghi, rettangolari e quadrati, da inserire nelle intestazioni, nelle dashboard e nelle schermate di login. Mantenete la coerenza del marchio su tutti i dispositivi e gli schermi.", +"BrandingPagesIntro1": "Aggiungete testo e immagini personalizzate alle pagine di errore, ai flussi di iscrizione e ai messaggi di logout.", +"BrandingPagesIntro2": "Questi punti di contatto contribuiscono a fornire un'esperienza completamente brandizzata anche in caso di scenari imprevisti o di transizioni di account.", +"BrandingMetaIntro": "Definire metadati standard come titolo e descrizione della pagina per migliorare la presenza SEO e la comunicazione del marchio.", +"BrandingHelpLinksIntro": "Aggiungete collegamenti alla documentazione sensibili al contesto direttamente all'interno dell'applicazione, fornendo un aiuto just-in-time ai vostri utenti.", +"BrandingWhatsNewIntro": "Attivate la sezione \"Cosa c'è di nuovo\" per evidenziare gli aggiornamenti e gli annunci di prodotto in modo visibile e di marca.", +"EnvironmentsIntroTitle": "Stabilizzazione Lowcoder", +"EnvironmentsTitle": "Infrastruttura multi-ambiente", +"EnvironmentsIntro1": "Gli ambienti Lowcoder consentono di separare le fasi di sviluppo, test e produzione in modo pulito e sicuro.", +"EnvironmentsIntro2": "I team aziendali beneficiano di flussi di lavoro di rilascio strutturati, processi di approvazione e stabilità delle versioni in tutte le fasi.", +"EnvironmentsIntro3": "Con la funzione Ambienti, gli amministratori possono controllare cosa viene distribuito, quando e dove, il tutto da un'unica interfaccia.", +"EnvironmentsIntro4": "Lowcoder include diversi tipi di oggetti come spazi di lavoro, fonti di dati, query di dati e applicazioni. Poiché molti di questi oggetti sono interconnessi (ad esempio, una fonte di dati può essere condivisa da più applicazioni), un'esportazione puramente basata su Git non riuscirebbe a catturare tutte le dipendenze in modo coerente. Lowcoder offre invece un meccanismo di distribuzione selettiva e integrata direttamente all'interno dell'interfaccia utente. Le applicazioni, le fonti di dati e le query possono essere gestite e distribuite in modo selettivo in tutti gli ambienti. Gli oggetti gestiti garantiscono rilasci sicuri e controllati in fase di staging e di produzione.", +"yourDeploymentID": "Il vostro ID di schieramento", +"EnvironmentsFeaturePreviewTitle": "Ambienti e distribuzione in azione (fare clic per ingrandire)", +"EnvironmentsUseCasesTitle": "Perché usare gli ambienti? (Messa in scena)", +"EnvironmentsUseCase1": "Prevenite le modifiche involontarie in produzione testando le applicazioni in ambienti Dev o QA dedicati.", +"EnvironmentsUseCase2": "Allineatevi alla governance IT aziendale implementando distribuzioni graduali con tracciamento pronto per l'audit.", +"EnvironmentsUseCase3": "Consentite ai team di costruire con fiducia con configurazioni, dati e integrazioni specifiche dell'ambiente.", +"EnvironmentsFeaturesTitle": "Cosa si ottiene", +"EnvironmentsFeature1": "Cruscotto centralizzato per visualizzare e gestire tutti gli ambienti Lowcoder.", +"EnvironmentsFeature2": "Distribuzione di applicazioni, fonti di dati e configurazioni tra ambienti, direttamente dall'interfaccia utente, senza la necessità di strumenti CI/CD aggiuntivi.", +"EnvironmentsFeature3": "Controlli di accesso e regole di visibilità specifici per l'ambiente.", +"EnvironmentsFeature5": "Chiara separazione delle attività di staging, sandbox e produzione.", +"apiUsage": "Chiamate API.", +"loadingApiUsage": "Caricamento dei dati di utilizzo dell'API...", +}, +"environments": { + ...en.environments, + +"title": "Ambienti", +"search": "Ricerca", +"refresh": "Aggiornare", +"addEnvironment": "Aggiungi ambiente", +"errorLoadingEnvironments": "Errore nel caricamento degli ambienti", +"noEnvironmentsFoundMatching": "Nessun ambiente trovato corrispondente a \"{searchText}\".", +"noEnvironmentsFound": "Nessun ambiente trovato. Creare il primo ambiente per iniziare.", +"environmentsTypeLabel": "{type} Ambienti", +"showingAllEnvironments": "Mostra tutti gli ambienti {count}", +"unnamedEnvironment": "Ambiente senza nome", +"masterEnvironment": "Ambiente Master", +"viewAuditLogs": "Visualizzazione dei registri di audit", +"id": "ID", +"domain": "Dominio", +"master": "Maestro", +"license": "Licenza", +"apiCalls": "Chiamate API", +"yes": "Sì", +"no": "No", +"copyId": "Copia ID", +"copied": "Copiato!", +"percentUsed": "{percent}% utilizzato", +"licenseStatus_checking": "Controllo...", +"licenseStatus_licensed": "Licenza", +"licenseStatus_unlicensed": "Licenza richiesta", +"licenseStatus_error": "Configurazione richiesta", +"licenseStatus_unknown": "Sconosciuto", +"detail_environmentNotFound": "Ambiente non trovato", +"detail_returnToEnvironmentsList": "Ritorno all'elenco degli ambienti", +"detail_environmentDetail": "Dettaglio ambiente", +"detail_environmentOverview": "Panoramica dell'ambiente", +"detail_noDomainSet": "Nessun dominio impostato", +"detail_environmentId": "ID ambiente", +"detail_licenseStatus": "Stato della licenza", +"detail_licenseNeeded": "Licenza necessaria", +"detail_setupRequired": "Configurazione richiesta", +"detail_created": "Creato", +"detail_unknown": "Sconosciuto", +"detail_licenseDetails": "Dettagli della licenza", +"detail_apiCallsRemaining": "Chiamate API rimanenti", +"detail_totalApiCallsLimit": "Limite totale di chiamate API", +"detail_enterpriseEdition": "Edizione Enterprise", +"detail_active": "Attivo", +"detail_inactive": "Inattivo", +"detail_licenseInformation": "Informazioni sulla licenza", +"detail_calls": "chiamate", +"detail_licenses": "Licenze", +"detail_license": "Licenza", +"detail_workspaces": "Spazi di lavoro", +"detail_userGroups": "Gruppi di utenti", +"detail_type": "Tipo", +"detail_status": "Stato", +"detail_licensed": "Licenza", +"detail_unlicensed": "Senza licenza", +"detail_apiKey": "Chiave API", +"detail_configured": "Configurato", +"detail_notSet": "Non impostato", +"detail_masterEnv": "Master Env", +"unlicensed_unlicensedDescription": "Questo ambiente necessita di una licenza valida per sbloccare tutte le sue capacità e caratteristiche. Assicurarsi che l'URL del servizio API sia configurato correttamente e che il plugin sia installato.", +"unlicensed_errorDescription": "Si è verificato un problema durante la verifica della licenza. Rivedere le impostazioni di configurazione.", +"unlicensed_defaultDescription": "Questo ambiente richiede la configurazione della licenza per procedere.", +"unlicensed_contactLowcoderTeam": "Contatta il team Lowcoder", +"unlicensed_editEnvironment": "Modifica dell'ambiente", +"unlicensed_backToEnvironments": "Torna a Ambienti", +"unlicensed_helpText": "Avete bisogno di assistenza? Contattate il nostro team per ricevere assistenza sulle licenze o modificate la configurazione dell'ambiente per risolvere il problema.", +"unlicensed_type": "Tipo", +"unlicensed_status": "Stato", +"unlicensed_masterEnv": "Master Env", +"unlicensed_licenseIssue": "Problema di licenza", +"unlicensed_error": "Errore", +"unlicensed_missing": "Mancante", +"error_itemNotFound": "L'articolo che state cercando non esiste o non avete i permessi per visualizzarlo.", +"modal_createNewEnvironment": "Creare un nuovo ambiente", +"modal_editEnvironment": "Modifica dell'ambiente", +"modal_cancel": "Annullamento", +"modal_createEnvironment": "Creare un ambiente", +"modal_saveChanges": "Salva le modifiche", +"modal_environmentName": "Nome dell'ambiente", +"modal_pleaseEnterName": "Inserire un nome", +"modal_nameMinLength": "Il nome deve essere composto da almeno 2 caratteri", +"modal_enterEnvironmentName": "Inserire il nome dell'ambiente", +"modal_description": "Descrizione", +"modal_enterDescription": "Inserire la descrizione", +"modal_stage": "Palcoscenico", +"modal_pleaseSelectStage": "Selezionare una fase", +"modal_selectStage": "Selezionare la fase", +"modal_development": "Sviluppo (DEV)", +"modal_testing": "Test (TEST)", +"modal_preProduction": "Pre-produzione (PREPROD)", +"modal_production": "Produzione (PROD)", +"modal_frontendUrl": "URL del frontend", +"modal_pleaseEnterValidUrl": "Inserire un URL valido", +"modal_apiServiceUrl": "URL del servizio API", +"modal_nodeServiceUrl": "URL del servizio del nodo", +"modal_apiKey": "Chiave API", +"modal_enterApiKey": "Inserire la chiave API", +"modal_masterEnvironment": "Ambiente Master", +"modal_alreadyMasterEnvironment": "{name} è già l'ambiente Master", +"modal_willBeMaster": "Sarà Maestro", +"modal_currentlyMaster": "Attualmente Master", +"modal_configurationRequirements": "Requisiti di configurazione", +"modal_configurationRequirementsDesc": "Assicurarsi che l'URL del servizio API sia configurato e corretto, che la chiave API sia valida e, per la verifica della licenza, assicurarsi che la licenza e il plugin siano installati correttamente.", +"workspaces_title": "Spazi di lavoro", +"workspaces_subtitle": "Gestire gli spazi di lavoro in questo ambiente", +"workspaces_refresh": "Aggiornare", +"workspaces_errorLoadingWorkspaces": "Errore nel caricamento degli spazi di lavoro", +"workspaces_configurationIssue": "Problema di configurazione", +"workspaces_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", +"workspaces_totalWorkspaces": "Totale spazi di lavoro", +"workspaces_managedWorkspaces": "Spazi di lavoro gestiti", +"workspaces_unmanagedWorkspaces": "Spazi di lavoro non gestiti", +"workspaces_workspace": "Spazio di lavoro", +"workspaces_role": "Ruolo", +"workspaces_status": "Stato", +"workspaces_managed": "Gestito", +"workspaces_unmanaged": "Non gestito", +"workspaces_actions": "Azioni", +"workspaces_viewAuditLogs": "Visualizzazione dei registri di audit", +"workspaces_audit": "Audit", +"workspaces_searchWorkspaces": "Ricerca degli spazi di lavoro per nome o ID", +"workspaces_showAll": "Mostra tutto", +"workspaces_managedOnly": "Solo gestito", +"workspaces_showingResults": "Mostra {count} di {total} spazi di lavoro", +"workspaces_paginationTotal": "{start}-{end} di {total} spazi di lavoro", +"workspaces_noWorkspacesFound": "Non sono stati trovati spazi di lavoro in questo ambiente", +"userGroups_title": "Gruppi di utenti", +"userGroups_subtitle": "Gestire i gruppi di utenti in questo ambiente", +"userGroups_refresh": "Aggiornare", +"userGroups_errorLoadingUserGroups": "Errore nel caricamento dei gruppi di utenti", +"userGroups_configurationIssue": "Problema di configurazione", +"userGroups_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", +"userGroups_totalGroups": "Totale gruppi", +"userGroups_allUsersGroups": "Tutti i gruppi di utenti", +"userGroups_developerGroups": "Gruppi di sviluppatori", +"userGroups_customGroups": "Gruppi personalizzati", +"userGroups_userGroup": "Gruppo di utenti", +"userGroups_type": "Tipo", +"userGroups_allUsers": "Tutti gli utenti", +"userGroups_developers": "Sviluppatori", +"userGroups_custom": "Personalizzato", +"userGroups_members": "Membri", +"userGroups_adminMembers": "Membri dell'amministrazione", +"userGroups_created": "Creato", +"userGroups_totalMembersTooltip": "Numero totale di membri del gruppo", +"userGroups_adminMembersTooltip": "Numero di utenti amministratori in questo gruppo", +"userGroups_searchUserGroups": "Ricerca di gruppi di utenti per nome o ID", +"userGroups_showingResults": "Mostra {count} di {total} gruppi di utenti", +"userGroups_paginationTotal": "{start}-{end} di {total} gruppi di utenti", +"userGroups_noUserGroupsFound": "Nessun gruppo di utenti trovato in questo ambiente", +"apps_title": "Applicazioni", +"apps_subtitle": "Gestire le applicazioni dello spazio di lavoro", +"apps_refresh": "Aggiornare", +"apps_errorLoadingApps": "Errore nel caricamento delle applicazioni", +"apps_configurationIssue": "Problema di configurazione", +"apps_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", +"apps_totalApps": "Totale applicazioni", +"apps_publishedApps": "Applicazioni pubblicate", +"apps_managedApps": "Applicazioni gestite", +"apps_unmanagedApps": "Applicazioni non gestite", +"apps_app": "App", +"apps_status": "Stato", +"apps_published": "Pubblicato", +"apps_draft": "Bozza", +"apps_managed": "Gestito", +"apps_unmanaged": "Non gestito", +"apps_deploy": "Distribuire", +"apps_audit": "Audit", +"apps_appMustBeManagedToDeploy": "L'applicazione deve essere gestita prima di essere distribuita", +"apps_deployThisApp": "Distribuire l'applicazione in un altro ambiente", +"apps_viewAuditLogs": "Visualizzazione dei registri di audit", +"apps_searchApps": "Cercare le app per nome o ID", +"apps_showAll": "Mostra tutto", +"apps_managedOnly": "Solo gestito", +"apps_showingResults": "Mostra {count} di {total} applicazioni", +"apps_paginationTotal": "{start}-{end} di {total} apps", +"apps_noAppsFound": "Nessuna applicazione trovata in questo spazio di lavoro", +"apps_appRecycled": "Questa applicazione è stata spostata nel cestino", +"apps_managedSuccess": "{name} è ora Gestito", +"apps_unmanagedSuccess": "{name} è ora Non gestito", +"apps_managedError": "Impossibile modificare lo stato gestito per {name}.", +"dataSources_title": "Fonti dei dati", +"dataSources_subtitle": "Gestire le connessioni ai dati dell'area di lavoro", +"dataSources_refresh": "Aggiornare", +"dataSources_errorLoadingDataSources": "Errore nel caricamento delle fonti di dati", +"dataSources_configurationIssue": "Problema di configurazione", +"dataSources_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", +"dataSources_totalDataSources": "Totale fonti di dati", +"dataSources_availableTypes": "Tipi disponibili", +"dataSources_managed": "Gestito", +"dataSources_unmanaged": "Non gestito", +"dataSources_dataSource": "Fonte dei dati", +"dataSources_type": "Tipo", +"dataSources_status": "Stato", +"dataSources_deploy": "Distribuire", +"dataSources_audit": "Audit", +"dataSources_dataSourceMustBeManagedToDeploy": "L'origine dati deve essere gestita prima di essere distribuita", +"dataSources_deployThisDataSource": "Distribuire questa origine dati in un altro ambiente", +"dataSources_viewAuditLogs": "Visualizzazione dei registri di audit", +"dataSources_searchDataSources": "Ricerca delle fonti di dati per nome o ID", +"dataSources_showAll": "Mostra tutto", +"dataSources_managedOnly": "Solo gestito", +"dataSources_showingResults": "Mostra {count} di {total} fonti di dati", +"dataSources_paginationTotal": "{start}-{end} di {total} fonti di dati", +"dataSources_noDataSourcesFound": "Nessuna fonte di dati trovata in questo spazio di lavoro", +"dataSources_managedSuccess": "{name} è ora Gestito", +"dataSources_unmanagedSuccess": "{name} è ora Non gestito", +"dataSources_managedError": "Impossibile modificare lo stato gestito per {name}.", +"queries_title": "Domande", +"queries_subtitle": "Gestire le query API dell'area di lavoro", +"queries_refresh": "Aggiornare", +"queries_errorLoadingQueries": "Errore nel caricamento delle query", +"queries_configurationIssue": "Problema di configurazione", +"queries_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", +"queries_totalQueries": "Totale interrogazioni", +"queries_managed": "Gestito", +"queries_unmanaged": "Non gestito", +"queries_query": "Interrogazione", +"queries_creator": "Creatore", +"queries_status": "Stato", +"queries_deploy": "Distribuire", +"queries_audit": "Audit", +"queries_queryMustBeManagedToDeploy": "La query deve essere gestita prima di essere distribuita", +"queries_deployThisQuery": "Distribuire questa query in un altro ambiente", +"queries_viewAuditLogs": "Visualizzazione dei registri di audit", +"queries_searchQueries": "Ricerca per nome o ID", +"queries_showAll": "Mostra tutto", +"queries_managedOnly": "Solo gestito", +"queries_showingResults": "Mostrando {count} di {total} query", +"queries_paginationTotal": "{start}-{end} di {total} interrogazioni", +"queries_noQueriesFound": "Nessuna query trovata in questo spazio di lavoro", +"queries_managedSuccess": "{name} è ora Gestito", +"queries_unmanagedSuccess": "{name} è ora Non gestito", +"queries_managedError": "Impossibile modificare lo stato gestito per {name}.", +"deployModal_deployTitle": "Distribuire {singularLabel}: {name}", +"deployModal_loadingEnvironments": "Caricamento degli ambienti...", +"deployModal_sourceEnvironment": "Fonte Ambiente", +"deployModal_targetEnvironment": "Ambiente target", +"deployModal_selectTargetEnvironment": "Selezionare l'ambiente di destinazione", +"deployModal_selectTargetEnvironmentValidation": "Selezionare un ambiente di destinazione", +"deployModal_confirmed": "Confermato", +"deployModal_cancel": "Annullamento", +"deployModal_deploy": "Distribuire", +"deployModal_targetEnvironmentNotFound": "Ambiente di destinazione non trovato", +"deployModal_confirmCredentialOverwrite": "Confermare la sovrascrittura delle credenziali prima di eseguire la distribuzione", +"deployModal_deploySuccess": "Distribuito con successo {name} nell'ambiente di destinazione", +"deployModal_deployFailed": "Impossibile distribuire {singularLabel}", +"deployModal_selectFieldValidation": "Si prega di selezionare {label}", +"deployModal_selectFieldPlaceholder": "Selezionare {label}", +"deployModal_inputFieldValidation": "Si prega di inserire {label}", +"deployModal_inputFieldPlaceholder": "Inserire {label}", +"contactLowcoder_title": "Contatta il team Lowcoder", +"contactLowcoder_environmentLabel": "Ambiente:", +"contactLowcoder_environmentIdLabel": "ID ambiente:", +"contactLowcoder_deploymentIdLabel": "ID di schieramento:", +"contactLowcoder_loading": "Caricamento...", +"contactLowcoder_notAvailable": "Non disponibile", +"contactLowcoder_unnamedEnvironment": "Ambiente senza nome", +"contactLowcoder_fetchingDeploymentInfo": "Recupero delle informazioni sulla distribuzione...", +"contactLowcoder_unableToLoadContactForm": "Impossibile caricare il modulo di contatto", +"contactLowcoder_apiConfigurationError": "URL del servizio API ambiente o chiave API non configurata", +"contactLowcoder_failedToFetchDeploymentId": "Impossibile recuperare l'ID dell'installazione client", +"contactLowcoder_ensureProperConfiguration": "Assicurarsi che l'ambiente sia configurato correttamente per contattare l'assistenza.", +"credentialConfirmations_firstConfirmation_title": "Avviso di sovrascrittura delle credenziali", +"credentialConfirmations_firstConfirmation_message": "Questa azione sovrascrive le credenziali esistenti nell'ambiente di destinazione.", +"credentialConfirmations_firstConfirmation_description": "Si tratta di un'operazione grave che può avere ripercussioni su altre applicazioni e utenti.", +"credentialConfirmations_firstConfirmation_question": "È sicuro di voler procedere?", +"credentialConfirmations_firstConfirmation_continueButton": "Continua", +"credentialConfirmations_firstConfirmation_cancelButton": "Annullamento", +"credentialConfirmations_secondConfirmation_title": "Richiesta di conferma finale", +"credentialConfirmations_secondConfirmation_message": "Avviso finale: Sovrascrittura delle credenziali", +"credentialConfirmations_secondConfirmation_description": "Si stanno per sovrascrivere le credenziali nell'ambiente di destinazione. Questa azione non può essere annullata e può interrompere le integrazioni esistenti.", +"credentialConfirmations_secondConfirmation_confirmOnceMore": "Si prega di confermare ancora una volta.", +"credentialConfirmations_secondConfirmation_finalQuestion": "Si è assolutamente certi di voler sovrascrivere le credenziali?", +"credentialConfirmations_secondConfirmation_confirmButton": "Sì, sovrascrivere le credenziali", +"credentialConfirmations_secondConfirmation_cancelButton": "Annullamento", +"config_singularLabels_app": "App", +"config_singularLabels_dataSource": "Fonte dei dati", +"config_singularLabels_query": "Interrogazione", +"config_singularLabels_workspace": "Spazio di lavoro", +"config_fields_updateDependenciesIfNeeded": "Aggiornare le dipendenze se necessario", +"config_fields_publishOnTarget": "Pubblicare sull'obiettivo", +"config_fields_publicToAll": "Pubblico A Tutti", +"config_fields_publicToMarketplace": "Dal pubblico al mercato", +"config_fields_overwriteCredentials": "Sovrascrivere le credenziali", +"services_environments_missingEnvironmentId": "ID ambiente mancante", +"services_environments_failedToUpdateEnvironment": "Impossibile aggiornare l'ambiente", +"services_environments_environmentCreatedSuccessfully": "Ambiente creato con successo", +"services_environments_failedToCreateEnvironment": "Impossibile creare l'ambiente", +"services_environments_failedToFetchEnvironments": "Impossibile recuperare gli ambienti", +"services_environments_failedToFetchEnvironment": "Impossibile recuperare l'ambiente", +"services_environments_environmentIdRequired": "È richiesto l'ID dell'ambiente", +"services_environments_apiKeyRequiredForWorkspaces": "La chiave API è necessaria per recuperare gli spazi di lavoro.", +"services_environments_apiServiceUrlRequiredForWorkspaces": "L'URL del servizio API è necessario per recuperare gli spazi di lavoro.", +"services_environments_failedToFetchWorkspaces": "Impossibile recuperare gli spazi di lavoro", +"services_environments_apiKeyRequiredForUserGroups": "La chiave API è necessaria per recuperare i gruppi di utenti", +"services_environments_apiServiceUrlRequiredForUserGroups": "L'URL del servizio API è necessario per recuperare i gruppi di utenti.", +"services_environments_failedToFetchUserGroups": "Impossibile recuperare i gruppi di utenti", +"services_environments_workspaceIdRequired": "L'ID dell'area di lavoro è necessario", +"services_environments_apiKeyRequiredForApps": "La chiave API è necessaria per recuperare le applicazioni", +"services_environments_apiServiceUrlRequiredForApps": "L'URL del servizio API è necessario per recuperare le applicazioni", +"services_environments_failedToFetchWorkspaceApps": "Impossibile recuperare le applicazioni dello spazio di lavoro", +"services_environments_apiKeyRequiredForDataSources": "La chiave API è necessaria per recuperare le fonti di dati", +"services_environments_apiServiceUrlRequiredForDataSources": "L'URL del servizio API è necessario per recuperare le fonti di dati.", +"services_environments_failedToFetchWorkspaceDataSources": "Impossibile recuperare le fonti di dati dell'area di lavoro", +"services_environments_apiKeyRequiredForQueries": "La chiave API è necessaria per recuperare le query", +"services_environments_apiServiceUrlRequiredForQueries": "L'URL del servizio API è necessario per recuperare le query.", +"services_environments_failedToFetchWorkspaceQueries": "Impossibile recuperare le query dello spazio di lavoro", +"services_environments_apiServiceUrlNotConfigured": "URL del servizio API non configurato", +"services_environments_licenseCheckFailed": "Controllo della licenza fallito", +"services_environments_apiKeyRequiredForDeploymentId": "La chiave API è necessaria per ottenere l'ID dell'installazione.", +"services_environments_failedToFetchDeploymentId": "Impossibile recuperare l'ID dell'installazione client", +"services_enterprise_missingEnvironmentId": "ID ambiente mancante", +"services_enterprise_failedToFetchManagedWorkspaces": "Impossibile recuperare gli spazi di lavoro gestiti", +"services_enterprise_missingRequiredParamsToConnectOrg": "Mancano i parametri richiesti per collegare l'area di lavoro", +"services_enterprise_failedToConnectOrg": "Impossibile connettere l'area di lavoro", +"services_enterprise_missingOrgGidToUnconnectWorkspace": "GID dello spazio di lavoro mancante per scollegare lo spazio di lavoro", +"services_enterprise_failedToUnconnectOrg": "Impossibile scollegare l'area di lavoro", +"services_enterprise_failedToConnectApp": "Impossibile collegare l'applicazione", +"services_enterprise_failedToUnconnectApp": "Impossibile scollegare l'applicazione", +"services_enterprise_failedToFetchDataSources": "Impossibile recuperare le fonti di dati", +"services_enterprise_failedToDeployDataSource": "Impossibile distribuire l'origine dati", +"services_enterprise_failedToDisconnectManagedDataSource": "Impossibile disconnettere l'origine dati gestita", +"services_enterprise_environmentIdRequired": "È richiesto l'ID dell'ambiente", +"services_enterprise_failedToFetchQueries": "Impossibile recuperare le query", +"services_enterprise_environmentIdAndQueryGidRequired": "Sono richiesti l'ID ambiente e il GID della query", +"services_enterprise_failedToDeployQuery": "Impossibile distribuire la query", +"services_enterprise_queryGidRequired": "Il GID della query è necessario", +"services_enterprise_failedToDisconnectQuery": "Disconnessione della query fallita", +"services_apps_failedToFetchApps": "Impossibile recuperare le applicazioni", +"services_apps_failedToDeployApp": "Impossibile distribuire l'applicazione", +"services_datasources_workspaceIdRequired": "L'ID dell'area di lavoro è necessario", +"services_datasources_apiKeyRequiredToFetchDataSources": "La chiave API è necessaria per recuperare le fonti di dati", +"services_datasources_apiServiceUrlRequiredToFetchDataSources": "L'URL del servizio API è necessario per recuperare le fonti di dati.", +"services_datasources_failedToFetchDataSources": "Impossibile recuperare le fonti di dati", +"services_datasources_failedToDeployDataSource": "Impossibile distribuire l'origine dati", +"services_workspace_failedToFetchWorkspaces": "Impossibile recuperare gli spazi di lavoro", +"services_workspace_failedToDeployWorkspace": "Impossibile distribuire lo spazio di lavoro", +"services_managedObjects_missingRequiredParameters": "Mancano i parametri richiesti", +"services_managedObjects_failedToCheckManagedStatus": "Impossibile verificare lo stato di gestione", +"services_managedObjects_failedToSetAsManaged": "Non è stato possibile impostare {{objType}} come gestito.", +"services_managedObjects_failedToRemoveFromManaged": "Impossibile rimuovere {{objType}} da managed", +"services_managedObjects_missingEnvironmentId": "ID ambiente mancante", +"services_managedObjects_failedToFetchManagedObjects": "Impossibile recuperare gli oggetti gestiti", +"services_managedObjects_failedToFetchManagedObject": "Impossibile recuperare l'oggetto gestito", +"services_managedObjects_managedObjectNotFound": "Oggetto gestito non trovato per objGid: {{objGid}}", +"services_license_apiServiceUrlRequired": "L'URL del servizio API è necessario", +"services_license_licenseInformationUnavailable": "Informazioni sulla licenza non disponibili", +"services_license_licenseCheckTookTooLong": "Il controllo della patente ha richiesto troppo tempo", +"services_license_licenseServiceNotAvailable": "Servizio di licenza non disponibile", +"services_license_authenticationRequired": "È richiesta l'autenticazione - verificare la chiave API", +"services_license_licenseServiceTemporarilyUnavailable": "Servizio di licenza temporaneamente non disponibile", +"services_license_remainingAPICalls": "{{remaining}} rimanenti ({{used}}/{{total}} utilizzati, {{percentage}}%)", +}, +"subscription": { + ...en.subscription, + +"details": "Dettagli sull'abbonamento", +"productDetails": "Dettagli del prodotto", +"productName": "Nome del prodotto", +"productDescription": "Descrizione del prodotto", +"productPrice": "Prezzo del prodotto", +"subscriptionDetails": "Dettagli sull'abbonamento", +"status": "Stato", +"startDate": "Data di inizio", +"currentPeriodEnd": "Fine periodo corrente", +"customerId": "ID cliente", +"subscriptionItems": "Articoli in abbonamento", +"itemId": "ID articolo", +"plan": "Piano", +"quantity": "Quantità", +"product": "Prodotto", +"invoices": "Fatture", +"invoiceNumber": "Numero di fattura", +"date": "Data", +"amount": "Importo", +"link": "Collegamento a", +"viewInvoice": "Visualizza fattura", +"downloadPDF": "Scaricare PDF", +"billingReason": "Motivo della fatturazione", +"subscriptionCycle": "Abbonamento mensile", +"customer": "Cliente", +"links": "Collegamenti", +"paid": "Pagato", +"unpaid": "Non pagato", +"noInvoices": "Non sono disponibili fatture", +"costVolumeDevelopment": "Sviluppo costi/volumi", +"noUsageRecords": "Non sono disponibili registri di utilizzo", +"itemDescription": "Descrizione dell'articolo", +"periodStart": "Inizio periodo", +"periodEnd": "Fine periodo", +"billingReason.subscription_cycle": "Ciclo di abbonamento", +"billingReason.subscription_create": "Creazione di abbonamenti", +"billingReason.manual": "Fatturazione manuale", +"billingReason.upcoming": "Prossima fatturazione", +"billingReason.subscription_threshold": "Soglia di sottoscrizione", +"billingReason.subscription_update": "Aggiornamento dell'abbonamento", +"backToSubscriptions": "Torna a Abbonamenti", +"manageSubscription": "Gestire gli abbonamenti", +"subscriptionHelp": "Aiuto per l'abbonamento", +"subscriptionHelpDescription": "Se avete domande, contattateci. Saremo lieti di aiutarvi. service@lowcoder.cloud", +"success": "Successo del pagamento e dell'abbonamento", +"successTitle": "Grazie per essere entrato a far parte della famiglia Lowcoder!", +"successThankYou": "Siamo entusiasti di averti a bordo! La sua fiducia in Lowcoder significa tutto per noi e ci impegniamo a offrire un'esperienza eccezionale fin dal primo giorno.\n\nIn Lowcoder non sei solo un cliente, ma fai parte di una comunità che promuove l'innovazione e la crescita. La nostra missione è aiutarvi a raggiungere i vostri obiettivi con facilità, sia che ciò significhi risolvere rapidamente le sfide, costruire soluzioni innovative o essere presenti ogni volta che avete bisogno di supporto.\n\nEcco cosa vi aspetta:\n\n- Assistenza di prim'ordine: Il nostro team è pronto ad assistervi in ogni fase.\n- Innovazione continua: Miglioriamo continuamente per offrirvi gli strumenti e le funzionalità migliori.\n- Una partnership per il successo: Il vostro successo è la nostra priorità.\n\nGrazie per averci ispirato a superare i limiti e a cercare l'eccellenza ogni giorno. Non vediamo l'ora di vedere cosa costruiremo insieme.\n\nBenvenuti a bordo! Facciamo accadere cose straordinarie.", +"successLowcoderTeam": "Il team Lowcoder", +}, +"subscriptionError": { + ...en.subscriptionError, + +"fetchProductDetails": "Errore nell'acquisizione dei dettagli del prodotto.", +"fetchSubscriptionDetails": "Errore nel recupero dei dettagli dell'abbonamento.", +"fetchInvoices": "Errore nell'acquisizione delle fatture.", +}, +"auditLog": { + ...en.auditLog, + +"title": "Dettaglio registro di audit", +"geoLocation": "Posizione geografica", +"browserData": "Metadati del browser/sistema", +"browser": "Browser", +"OS": "OS", +"device": "Dispositivo", +"deviceType": "Tipo di dispositivo", +"engine": "Motore", +"webview": "Vista sul web", +"eventDetail": "Dettaglio evento", +}, +"memberSettings": { + ...en.memberSettings, + +"admin": "Admin", +"superAdmin": "Super amministratore", +"adminGroupRoleInfo": "L'amministratore può gestire i membri e le risorse del gruppo", +"adminOrgRoleInfo": "Gli amministratori possiedono tutte le risorse e possono gestire i gruppi.", +"member": "Membro", +"memberGroupRoleInfo": "Il membro può vedere i membri del gruppo", +"memberOrgRoleInfo": "I membri possono utilizzare o visitare solo le risorse a cui hanno accesso.", +"title": "Membri", +"createGroup": "Crea gruppo", +"newGroupPrefix": "Nuovo Gruppo", +"allMembers": "Tutti i membri", +"deleteModalTitle": "Cancellare questo gruppo", +"deleteModalContent": "Il gruppo eliminato non può essere ripristinato. Siete sicuri di voler eliminare il gruppo?", +"addMember": "Aggiungi membri", +"nameColumn": "Nome utente", +"joinTimeColumn": "Tempo di adesione", +"actionColumn": "Funzionamento", +"roleColumn": "Ruolo", +"exitGroup": "Gruppo di uscita", +"moveOutGroup": "Rimuovere dal gruppo", +"inviteUser": "Invitare i membri", +"exitOrg": "Lasciare", +"exitOrgDesc": "Siete sicuri di voler lasciare questo spazio di lavoro?", +"moveOutOrg": "Rimuovere", +"moveOutOrgDescSaasMode": "Siete sicuri di voler rimuovere l'utente {name} da questo spazio di lavoro?", +"moveOutOrgDesc": "Siete sicuri di voler rimuovere l'utente {name}? Questa azione non può essere recuperata.", +"devGroupTip": "I membri del gruppo di sviluppatori hanno i privilegi per creare applicazioni e fonti di dati.", +"lastAdminQuit": "L'ultimo amministratore non può uscire.", +"organizationNotExist": "L'area di lavoro corrente non esiste", +"inviteUserHelp": "È possibile copiare il link di invito da inviare all'utente", +"inviteUserLabel": "Link per l'invito:", +"inviteCopyLink": "Copiare il link", +"inviteText": "{userName} vi invita a unirvi allo spazio di lavoro \"{organization}\", cliccate sul link per unirvi: {inviteLink}", +"inviteByEmailHelp": "È possibile inserire uno o più indirizzi e-mail per inviare i link di invito.", +"inviteByEmailLabel": "Inserire i messaggi di posta elettronica:", +"inviteByEmailButton": "Inviare gli inviti", +"inviteByEmailSuccess": "Inviti inviati con successo!", +"inviteByEmailError": "Qualcosa è andato storto durante l'invio degli inviti. Si prega di riprovare.", +"noValidEmails": "Non sono state trovate e-mail valide", +"groupName": "Nome del gruppo", +"createTime": "Creare tempo", +"manageBtn": "Gestire", +"userDetail": "Dettaglio", +"syncDeleteTip": "Questo gruppo è stato eliminato dalla rubrica.", +"syncGroupTip": "Questo gruppo è un gruppo di sincronizzazione della rubrica e non può essere modificato.", +}, +"orgSettings": { + ...en.orgSettings, + +"newOrg": "Nuovo spazio di lavoro (organizzazione)", +"title": "Spazio di lavoro", +"createOrg": "Crea spazio di lavoro (organizzazione)", +"deleteModalTitle": "Siete sicuri di voler eliminare questo spazio di lavoro?", +"deleteModalContent": "Si sta per eliminare l'area di lavoro {permanentlyDelete}. Una volta eliminato, lo spazio di lavoro {notRestored}.", +"permanentlyDelete": "In modo permanente", +"notRestored": "Non può essere ripristinato", +"deleteModalLabel": "Inserire il nome dell'area di lavoro {name} per confermare l'operazione:", +"deleteModalTip": "Inserire il nome dell'area di lavoro", +"deleteModalErr": "Il nome dell'area di lavoro non è corretto", +"deleteModalBtn": "Cancellare", +"editOrgTitle": "Modifica delle informazioni sullo spazio di lavoro", +"orgNameLabel": "Nome dell'area di lavoro:", +"orgNameCheckMsg": "Il nome dell'area di lavoro non può essere vuoto", +"orgLogo": "Logo dello spazio di lavoro:", +"logoModify": "Modificare l'immagine", +"inviteSuccessMessage": "Partecipare con successo all'area di lavoro", +"inviteFailMessage": "Impossibile unirsi allo spazio di lavoro", +"uploadErrorMessage": "Errore di caricamento", +"orgName": "Nome dell'area di lavoro", +}, +"freeLimit": "Prova gratuita", +"tabbedContainer": { + ...en.tabbedContainer, + +"switchTab": "Scheda interruttore", +"switchTabDesc": "Attivato quando si passa da una scheda all'altra", +"tab": "Schede", +"atLeastOneTabError": "Il contenitore delle schede contiene almeno una scheda", +"selectedTabKeyDesc": "Scheda attualmente selezionata", +"iconPosition": "Icona Posizione", +"placement": "Posizionamento delle schede", +"showTabs": "Mostra schede", +"gutter": "Divario", +"gutterTooltip": "La distanza tra le schede in px", +"tabsCentered": "Schede centrate", +"destroyInactiveTab": "Distruggi TabPane inattivo", +}, +"formComp": { + ...en.formComp, + +"containerPlaceholder": "Trascinare i componenti dal riquadro destro o", +"openDialogButton": "Generare un modulo da una fonte di dati", +"resetAfterSubmit": "Reimpostazione dopo l'invio riuscito", +"initialData": "Dati iniziali", +"disableSubmit": "Disattivare l'invio", +"success": "Modulo generato con successo", +"selectCompType": "Selezionare il tipo di componente", +"dataSource": "Fonte dei dati:", +"invalidFormMessage": "Messaggio personalizzato di modulo non valido", +"selectSource": "Seleziona la fonte", +"table": "Tabella:", +"selectTable": "Selezionare la tabella", +"columnName": "Nome della colonna", +"dataType": "Tipo di dati", +"compType": "Tipo di componente", +"required": "Richiesto", +"generateForm": "Generare un modulo", +"compSelectionError": "Tipo di colonna non configurato", +"compTypeNameError": "Impossibile ottenere il nome del tipo di componente", +"noDataSourceSelected": "Nessuna fonte di dati selezionata", +"noTableSelected": "Nessun tavolo selezionato", +"noColumn": "Nessuna colonna", +"noColumnSelected": "Nessuna colonna selezionata", +"noDataSourceFound": "Non è stata trovata alcuna origine dati supportata. Creare una nuova origine dati", +"noTableFound": "Non sono state trovate tabelle in questa fonte di dati, si prega di selezionare un'altra fonte di dati.", +"noColumnFound": "Non è stata trovata alcuna colonna supportata in questa tabella. Selezionare un'altra tabella", +"formTitle": "Titolo del modulo", +"name": "Nome", +"nameTooltip": "Il nome dell'attributo nei dati del modulo, se lasciato vuoto, è predefinito con il nome del componente.", +"notSupportMethod": "Non supportato Metodi:", +"notValidForm": "Il modulo non è valido", +"resetDesc": "Ripristino dei dati del modulo al valore predefinito", +"clearDesc": "Cancella i dati del modulo", +"setDataDesc": "Impostare i dati del modulo", +"valuesLengthError": "Numero di parametro Errore", +"valueTypeError": "Parametro Tipo Errore", +"dataDesc": "Dati del modulo corrente", +"loadingDesc": "Se il modulo è in fase di caricamento?", +}, +"modalComp": { + ...en.modalComp, + +"open": "Aperto", +"openDesc": "Attivato all'apertura della finestra di dialogo modale", +"close": "Chiudere", +"closeDesc": "Attivato quando la finestra di dialogo modale viene chiusa", +"openModalDesc": "Aprire la finestra di dialogo", +"closeModalDesc": "Chiudere la finestra di dialogo", +"visibleDesc": "È visibile? Se è vero, viene visualizzata la finestra di dialogo corrente.", +"title": "Titolo del cassetto", +"titleAlign": "Allineamento dei titoli", +"modalHeight": "Altezza modale", +"modalHeightTooltip": "Pixel, Esempio: 222", +"modalWidth": "Larghezza modale", +"modalWidthTooltip": "Numero o percentuale, esempio: 520, 60%", +}, +"listView": { + ...en.listView, + +"noOfRows": "Conteggio delle righe", +"noOfRowsTooltip": "Numero di righe nell'elenco - di solito impostato su una variabile (ad es., '{{query1.data.length}}') per presentare i risultati della query.", +"noOfColumns": "Conteggio colonne", +"itemIndexName": "Voce di dati Nome dell'indice", +"itemIndexNameDesc": "Il nome della variabile che si riferisce all'indice dell'elemento, predefinito come {default}.", +"itemDataName": "Voce di dati Nome dell'oggetto", +"itemDataNameDesc": "Il nome della variabile che si riferisce all'oggetto dati dell'elemento, predefinito come {default}.", +"itemsDesc": "Esporre i dati dei componenti nell'elenco", +"dataDesc": "I dati JSON utilizzati nell'elenco corrente", +"dataTooltip": "Se si imposta solo un numero, questo campo verrà considerato come conteggio delle righe e i dati verranno considerati vuoti.", +"enableSorting": "Consentire l'ordinamento", +}, +"navigation": { + ...en.navigation, + +"addText": "Aggiungi voce di sottomenu", +"logoURL": "Navigazione Logo URL", +"horizontalAlignment": "Allineamento orizzontale", +"logoURLDesc": "È possibile visualizzare un logo sul lato sinistro inserendo un valore URI o una stringa Base64 come data:image/png;base64,AAA... CCC", +"itemsDesc": "Voci del menu di navigazione gerarchico", +}, +"droppadbleMenuItem": { + ...en.droppadbleMenuItem, + +"subMenu": "Sottomenu {number}", +}, +"navItemComp": { + ...en.navItemComp, + +"active": "Attivo", +}, +"iframe": { + ...en.iframe, + +"URLDesc": "L'URL di origine del contenuto dell'IFrame. Assicurarsi che l'URL sia HTTPS o localhost. Assicurarsi inoltre che l'URL non sia bloccato dalla Content Security Policy (CSP) del browser. L'intestazione \"X-Frame-Options\" non deve essere impostata su \"DENY\" o \"SAMEORIGIN\".", +"allowDownload": "Consentire il download", +"allowSubmitForm": "Consentire l'invio del modulo", +"allowMicrophone": "Consentire il microfono", +"allowCamera": "Consentire l'uso della fotocamera", +"allowPopup": "Consentire i popup", +}, +"switchComp": { + ...en.switchComp, + +"defaultValue": "Valore booleano predefinito", +"open": "Su", +"close": "Spento", +"openDesc": "Attivato all'accensione dell'interruttore", +"closeDesc": "Attivato quando l'interruttore è spento", +"valueDesc": "Stato attuale dell'interruttore", +}, +"signature": { + ...en.signature, + +"tips": "Testo del suggerimento", +"signHere": "Firma qui", +"showUndo": "Mostra Annullamento", +"showClear": "Mostra chiaro", +}, +"localStorageComp": { + ...en.localStorageComp, + +"valueDesc": "Tutti gli elementi di dati attualmente memorizzati", +"setItemDesc": "Aggiungere un elemento", +"removeItemDesc": "Rimuovere un elemento", +"clearItemDesc": "Cancella tutti gli articoli", +}, +"utilsComp": { + ...en.utilsComp, + +"openUrl": "URL aperto", +"openApp": "App aperta", +"copyToClipboard": "Copia negli Appunti", +"downloadFile": "Scarica il file", +"logoutUser": "Disconnessione dell'utente", +"resetPassword": "Reimpostare la password", +}, +"messageComp": { + ...en.messageComp, + +"info": "Inviare una notifica", +"loading": "Inviare una notifica di caricamento", +"success": "Inviare una notifica di successo", +"warn": "Inviare una notifica di avviso", +"error": "Inviare una notifica di errore", +}, +"toastComp": { + ...en.toastComp, + +"destroy": "chiudere una notifica", +"info": "Inviare una notifica", +"loading": "Inviare una notifica di caricamento", +"success": "Inviare una notifica di successo", +"warn": "Inviare una notifica di avviso", +"error": "Inviare una notifica di errore", +}, +"themeComp": { + ...en.themeComp, + +"switchTo": "Tema dell'interruttore", +}, +"transformer": { + ...en.transformer, + +"preview": "Anteprima", +"docLink": "Per saperne di più sui Transformers...", +"previewSuccess": "Anteprima del successo", +"previewFail": "Anteprima Bocciata", +"deleteMessage": "Eliminazione del trasformatore riuscita. È possibile utilizzare {undoKey} per annullare.", +"documentationText": "I trasformatori sono progettati per la trasformazione dei dati e il riutilizzo del codice JavaScript multilinea. I trasformatori possono essere utilizzati per adattare i dati provenienti da query o componenti alle esigenze dell'applicazione locale. A differenza delle query JavaScript, i trasformatori sono progettati per eseguire operazioni di sola lettura, il che significa che non è possibile attivare una query o aggiornare uno stato temporaneo all'interno di un trasformatore.", +}, +"temporaryState": { + ...en.temporaryState, + +"value": "Valore iniziale", +"valueTooltip": "Il valore iniziale memorizzato nello stato temporaneo può essere un booleano, una stringa, un numero o qualsiasi valore JSON valido.", +"docLink": "Per saperne di più sugli Stati temporanei...", +"pathTypeError": "Il percorso deve essere una stringa o una matrice di valori", +"unStructuredError": "I dati non strutturati {prev} non possono essere aggiornati da {path}.", +"valueDesc": "Valore di Stato temporaneo", +"deleteMessage": "Lo stato temporaneo è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", +"documentationText": "Gli stati temporanei sono una potente funzione utilizzata per gestire variabili complesse che aggiornano dinamicamente lo stato dei componenti dell'applicazione. Questi stati fungono da memoria intermedia o transitoria per i dati che possono cambiare nel tempo a causa delle interazioni dell'utente o di altri processi.", +}, +"dataResponder": { + ...en.dataResponder, + +"data": "Dati", +"dataDesc": "Dati dell'attuale risponditore dei dati", +"dataTooltip": "Quando questi dati vengono modificati, si attivano le azioni successive.", +"docLink": "Per saperne di più sui Data Responder...", +"deleteMessage": "Il risponditore dati è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", +"documentationText": "Quando si sviluppa un'applicazione, è possibile assegnare eventi ai componenti per monitorare le modifiche di dati specifici. Ad esempio, un componente Table può avere eventi come \"Row select change\", \"Filter change\", \"Sort change\" e \"Page change\" per monitorare i cambiamenti nella proprietà selectedRow. Tuttavia, per le modifiche agli stati temporanei, ai trasformatori o ai risultati delle query, dove gli eventi standard non sono disponibili, si utilizzano i risponditori di dati. Essi consentono di rilevare e reagire a qualsiasi modifica dei dati.", +}, +"theme": { + ...en.theme, + +"title": "Temi", +"createTheme": "Creare il tema", +"themeName": "Nome del tema:", +"themeNamePlaceholder": "Inserire il nome del tema", +"defaultThemeTip": "Tema predefinito:", +"createdThemeTip": "Il tema che avete creato:", +"option": "Option{index}", +"input": "Ingresso", +"confirm": "Ok", +"emptyTheme": "Nessun tema disponibile", +"click": "", +"toCreate": "", +"nameColumn": "Nome", +"defaultTip": "Predefinito", +"updateTimeColumn": "Tempo di aggiornamento", +"edit": "Modifica", +"cancelDefaultTheme": "Tema predefinito non impostato", +"setDefaultTheme": "Imposta come tema predefinito", +"copyTheme": "Tema duplicato", +"setSuccessMsg": "Impostazione riuscita", +"cancelSuccessMsg": "Disassemblaggio Riuscito", +"deleteSuccessMsg": "Cancellazione riuscita", +"checkDuplicateNames": "Il nome del tema esiste già, inserirlo nuovamente", +"copySuffix": " Copia", +"saveSuccessMsg": "Salvato con successo", +"leaveTipTitle": "Suggerimenti", +"leaveTipContent": "Non hai ancora salvato, confermi la partenza?", +"leaveTipOkText": "Lasciare", +"goList": "Torna all'elenco", +"saveBtn": "Risparmiare", +"mainColor": "Colori principali", +"text": "Colori del testo", +"layout": "Impostazioni di layout", +"fonts": "Impostazioni dei caratteri", +"components": "Modelli di componenti", +"charts": "Definizione di eCharts", +"defaultTheme": "Predefinito", +"yellow": "Giallo", +"green": "Verde", +"previewTitle": "Anteprima del tema\nEsempi di componenti che utilizzano i colori del tema", +"dateColumn": "Data", +"emailColumn": "Email", +"phoneColumn": "Telefono", +"subTitle": "Titolo", +"linkLabel": "Collegamento a", +"linkUrl": "app.lowcoder.cloud", +"progressLabel": "Progressi", +"sliderLabel": "Cursore", +"radioLabel": "Radio", +"checkboxLabel": "Casella di controllo", +"buttonLabel": "Pulsante del modulo", +"switch": "Interruttore", +"previewDate": "16/10/2022", +"previewEmail1": "ted.com", +"previewEmail2": "skype.com", +"previewEmail3": "imgur.com", +"previewEmail4": "palloncino.com", +"previewPhone1": "+63-317-333-0093", +"previewPhone2": "+30-668-580-6521", +"previewPhone3": "+86-369-925-2071", +"previewPhone4": "+7-883-227-8093", +"chartPreviewTitle": "Anteprima dello stile del grafico", +"chartSpending": "Spesa", +"chartBudget": "Bilancio", +"chartAdmin": "Amministrazione", +"chartFinance": "Finanza", +"chartSales": "Vendite", +"chartFunnel": "Grafico a imbuto", +"chartShow": "Mostra", +"chartClick": "Cliccare", +"chartVisit": "Visita", +"chartQuery": "Interrogazione", +"chartBuy": "Acquista", +"canvas": "Impostazioni della tela", +}, +"themeDetail": { + ...en.themeDetail, + +"primary": "Colore del marchio", +"primaryDesc": "Colore primario predefinito utilizzato dalla maggior parte dei componenti", +"textDark": "Colore del testo scuro", +"textDarkDesc": "Utilizzato quando il colore di sfondo è chiaro", +"textLight": "Colore del testo chiaro", +"textLightDesc": "Utilizzato quando il colore di sfondo è scuro", +"canvas": "Colore della tela", +"canvasDesc": "Colore di sfondo predefinito dell'applicazione", +"primarySurface": "Colore del contenitore", +"primarySurfaceDesc": "Colore di sfondo predefinito per componenti come le tabelle", +"borders": "Stili di bordo", +"spacing": "Stili di spaziatura", +"font": "Stili di carattere", +"fonts": "Caratteri", +"borderRadius": "Raggio del bordo", +"borderRadiusDesc": "Raggio del bordo predefinito utilizzato dalla maggior parte dei componenti", +"borderColor": "Colore del bordo", +"borderColorDesc": "Colore predefinito del bordo utilizzato dalla maggior parte dei componenti", +"borderWidth": "Larghezza del bordo", +"borderWidthDesc": "Larghezza predefinita del bordo utilizzata dalla maggior parte dei componenti", +"borderStyle": "Stile del bordo", +"borderStyleDesc": "Stile di bordo predefinito utilizzato dalla maggior parte dei componenti", +"fontFamily": "Famiglia di caratteri", +"fontFamilyDesc": "Famiglia di caratteri predefinita utilizzata dalla maggior parte dei componenti", +"chart": "Stile del grafico", +"chartDesc": "Qui è possibile inserire il tema JSON di eCharts per definire lo stile dei grafici in tutti i dettagli.", +"echartsJson": "È possibile utilizzare il Generatore JSON del tema. Copiare il JSON dal generatore e incollarlo qui.", +"margin": "Margine", +"marginDesc": "Margine predefinito tipicamente utilizzato per la maggior parte dei componenti", +"padding": "Imbottitura", +"paddingDesc": "Imbottitura predefinita tipicamente utilizzata per la maggior parte dei componenti", +"containerHeaderPadding": "Imbottitura della testata", +"containerheaderpaddingDesc": "Imbottitura predefinita dell'intestazione, tipicamente utilizzata per la maggior parte dei componenti.", +"gridColumns": "Colonne della griglia della tela", +"gridColumnsDesc": "Numero predefinito di colonne, tipicamente utilizzato per la maggior parte dei contenitori.", +"loadingIndicators": "Indicatori di carico", +"showComponentLoadingIndicators": "Mostra gli indicatori di caricamento quando il componente viene caricato", +"showDataLoadingIndicators": "Mostra indicatori di caricamento durante il caricamento dei dati", +"dataLoadingIndicator": "Indicatore di caricamento dei dati", +"background": "Stili di sfondo", +"gridSettings": "Impostazioni della griglia", +"gridRowHeight": "Altezza della riga della griglia", +"gridRowHeightDesc": "Altezza di ogni riga della griglia", +"gridRowCount": "Conteggio delle righe della griglia", +"gridRowCountDesc": "Numero massimo di righe nella griglia", +"gridPaddingX": "Imbottitura orizzontale", +"gridPaddingXDesc": "Imbottitura orizzontale della tela", +"gridPaddingY": "Imbottitura verticale", +"gridPaddingYDesc": "Imbottitura verticale della tela", +"gridBgImage": "Immagine di sfondo", +"gridBgImageDesc": "Immagine di sfondo della tela", +"gridBgImageRepeat": "Ripetizione dell'immagine di sfondo", +"gridBgImageRepeatDesc": "Ripetizione dell'immagine di sfondo della tela", +"gridBgImageSize": "Dimensioni dell'immagine di sfondo", +"gridBgImageSizeDesc": "Dimensioni dell'immagine di sfondo della tela", +"gridBgImagePosition": "Posizione dell'immagine di sfondo", +"gridBgImagePositionDesc": "Posizione dell'immagine di sfondo della tela", +"gridBgImageOrigin": "Origine dell'immagine di sfondo", +"gridBgImageOriginDesc": "Origine dell'immagine di sfondo della tela", +}, +"pluginSetting": { + ...en.pluginSetting, + +"title": "Plugin", +"npmPluginTitle": "plugin npm", +"npmPluginDesc": "Impostare i plugin npm per tutte le applicazioni dell'area di lavoro corrente.", +"npmPluginEmpty": "Non sono stati aggiunti plugin npm.", +"npmPluginAddButton": "Aggiungere un plugin npm", +"saveSuccess": "Salvato con successo", +}, +"advanced": { + ...en.advanced, + +"title": "Avanzato", +"defaultHomeTitle": "Homepage predefinita", +"defaultHomeHelp": "La homepage è l'app che tutti i non sviluppatori vedranno per impostazione predefinita quando accedono. Nota: assicurarsi che l'app selezionata sia accessibile ai non sviluppatori.", +"defaultHomePlaceholder": "Selezionare la pagina iniziale predefinita", +"saveBtn": "Risparmiare", +"preloadJSTitle": "Precaricare JavaScript", +"preloadJSHelp": "Impostare il codice JavaScript precaricato per tutte le applicazioni nell'area di lavoro corrente.", +"preloadCSSTitle": "Precaricare i CSS", +"preloadCSSHelp": "Impostare il codice CSS precaricato per tutte le applicazioni nell'area di lavoro corrente.", +"preloadCSSApply": "Applicare alla homepage dell'area di lavoro", +"preloadLibsTitle": "Libreria JavaScript", +"preloadLibsHelp": "Impostazione di librerie JavaScript precaricate per tutte le applicazioni nell'area di lavoro corrente; il sistema ha integrato lodash, day.js, uuid, numbro per l'uso diretto. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione e quindi hanno un certo impatto sulle prestazioni dell'applicazione.", +"preloadLibsEmpty": "Non sono state aggiunte librerie JavaScript", +"preloadLibsAddBtn": "Aggiungere una biblioteca", +"saveSuccess": "Salvato con successo", +"AuthOrgTitle": "Schermata di benvenuto dell'area di lavoro", +"AuthOrgDescrition": "L'URL per l'accesso degli utenti all'area di lavoro corrente.", +"APIConsumption": "Consumo di API", +"APIConsumptionDescription": "Qui si può vedere il consumo di API per tutte le applicazioni nell'area di lavoro corrente.", +"overallAPIConsumption": "Consumo complessivo di API in questo spazio di lavoro fino ad ora", +"lastMonthAPIConsumption": "Consumo API dell'ultimo mese, in questo spazio di lavoro", +"npmRegistryTitle": "Registro NPM personalizzato", +"npmRegistryHelp": "Impostare un registro NPM personalizzato per consentire il recupero dei plugin da un registro NPM privato.", +"showHeaderInPublicApps": "Mostra intestazione nella vista pubblica", +"showHeaderInPublicAppsHelp": "Impostare la visibilità dell'intestazione nella vista pubblica per tutte le applicazioni", +}, +"branding": { + ...en.branding, + +"title": "Impostazioni del Branding", +"general": "Impostazioni generali", +"selectWorkspace": "Selezionare l'area di lavoro", +"brandingName": "Nome del marchio", +"brandingNamePlaceholder": "Inserire il nome del marchio", +"brandingDescription": "Descrizione del marchio", +"brandingDescriptionPlaceholder": "Inserire la descrizione del marchio", +"logoSection": "Loghi", +"logo": "Logo", +"logoHelp": "Carica il logo della tua azienda in formato SVG o PNG.", +"logoUrlHelp": "Fornire un'immagine valida per il logo.", +"logoUrlPlaceholder": "URL dell'immagine del fornitore per il logo", +"squareLogo": "Logo Quadrato", +"squareLogoHelp": "Carica una versione quadrata del tuo logo in formato SVG o PNG.", +"squareLogoUrlHelp": "Fornire un url di immagine valido per il logo quadrato.", +"squareLogoUrlPlaceholder": "Fornire l'url per il logo quadrato.", +"colorFontSection": "Colori e Font", +"mainBrandingColor": "Colore Principale del Branding", +"mainBrandingColorHelp": "Seleziona il colore principale per il tuo branding.", +"editorHeaderColor": "Colore dell'intestazione dell'editor", +"editorHeaderColorHelp": "Seleziona il colore dell'intestazione dell'editor.", +"adminSidebarColor": "Colore della barra laterale amministrativa", +"adminSidebarColorHelp": "Seleziona il colore della barra laterale amministrativa.", +"adminSidebarFontColor": "Colore del carattere della barra laterale dell'amministrazione", +"adminSidebarFontColorHelp": "Scegliere il colore dei caratteri per la barra laterale dell'amministratore.", +"adminSidebarActiveBgColor": "Colore di sfondo dell'elemento selezionato nella barra laterale dell'amministrazione", +"adminSidebarActiveBgColorHelp": "Scegliere il colore di sfondo dell'elemento selezionato per la barra laterale dell'amministratore.", +"adminSidebarActiveFontColor": "Colore del carattere dell'elemento selezionato della barra laterale dell'amministrazione", +"adminSidebarActiveFontColorHelp": "Scegliere il colore del carattere dell'elemento selezionato per la barra laterale dell'amministratore.", +"editorSidebarColor": "Colore della barra laterale dell'editor", +"editorSidebarColorHelp": "Seleziona il colore della barra laterale dell'editor.", +"editorSidebarFontColor": "Colore del carattere della barra laterale dell'editor", +"editorSidebarFontColorHelp": "Scegliere il colore dei caratteri per la barra laterale dell'editor.", +"editorSidebarActiveBgColor": "Colore di sfondo dell'elemento selezionato nella barra laterale dell'editor", +"editorSidebarActiveBgColorHelp": "Scegliere il colore di sfondo dell'elemento selezionato per la barra laterale dell'editor.", +"editorSidebarActiveFontColor": "Colore del carattere dell'elemento selezionato della barra laterale dell'editor", +"editorSidebarActiveFontColorHelp": "Scegliere il colore del carattere dell'elemento selezionato per la barra laterale dell'editor.", +"font": "Carattere", +"fontHelp": "Seleziona un font da Google Fonts per la tua applicazione.", +"textSection": "Testi e Pagine", +"errorPage": "Testo della pagina di errore", +"errorPageHelp": "Inserisci il testo visualizzato nella pagina di errore.", +"signUpPage": "Testo della pagina di registrazione", +"signUpPageHelp": "Inserisci il testo visualizzato nella pagina di registrazione.", +"loggedOutPage": "Testo della pagina di disconnessione", +"loggedOutPageHelp": "Inserisci il testo visualizzato nella pagina di disconnessione.", +"standardDescription": "Descrizione standard", +"standardDescriptionHelp": "Inserisci la descrizione standard per le informazioni meta SEO.", +"standardTitle": "Titolo standard", +"standardTitleHelp": "Inserisci il titolo standard per le informazioni meta SEO.", +"showDocumentation": "Mostra Documentazione", +"submitIssue": "Consenti invio problema", +"whatsNew": "Abilita \"Novità\"", +"saveButton": "Salva Impostazioni", +"errorPageImage": "Carica un'immagine per la pagina di errore in formato SVG o PNG.", +"errorPageImageUrl": "URL dell'immagine per la pagina di errore", +"errorPageImageUrlPlaceholder": "URL dell'immagine del provider per la pagina di errore", +"errorPageImageUrlHelp": "Fornire un'immagine valida da mostrare nella pagina di errore.", +"signUpPageImage": "Carica un'immagine per la pagina di registrazione in formato SVG o PNG.", +"signUpPageImageUrl": "URL dell'immagine per la pagina di iscrizione", +"signUpPageImageUrlPlaceholder": "URL dell'immagine del fornitore per la pagina di iscrizione", +"signUpPageImageUrlHelp": "Fornire un'immagine valida da mostrare nella pagina di iscrizione.", +"loggedOutPageImage": "Carica un'immagine per la pagina di disconnessione in formato SVG o PNG.", +"showDocumentationSection": "Impostazioni del collegamento alla documentazione", +"showWhatsNewSection": "Novità Impostazioni dei collegamenti", +"documentationLink": "Link alla documentazione", +"documentationLinkPlaceholder": "Inserisci l'URL della tua documentazione...", +"documentationLinkHelp": "Fornisci un URL valido che gli utenti possano visitare per la documentazione.", +"whatsNewSection": "Impostazioni documentazione", +"whatsNewLink": "Link alla documentazione", +"whatsNewLinkPlaceholder": "Inserisci l'URL della tua documentazione...", +"whatsNewLinkHelp": "Fornisci un URL valido che gli utenti possano visitare per le novità.", +"deleteBranding": "Cancellare il marchio", +"deleteBrandingContent": "Siete sicuri di voler eliminare il marchio \"{orgName}\"?", +"fetchBrandingError": "Qualcosa è andato storto durante il recupero dei dettagli del marchio. Riprovare.", +"upload": "Caricare", +}, +"networkMessage": { + ...en.networkMessage, + +"0": "Impossibile connettersi al server, controllare la rete", +"200": "Il successo", +"201": "Creato", +"204": "Nessun contenuto", +"400": "Brutta richiesta", +"401": "Autenticazione fallita, accedere di nuovo", +"403": "Nessun permesso, contattare l'amministratore per l'autorizzazione", +"404": "Non trovato", +"500": "Servizio occupato, riprovare più tardi", +"timeout": "Timeout della richiesta", +}, +"share": { + ...en.share, + +"title": "Condividi", +"viewer": "Visualizzatore", +"editor": "Editor", +"owner": "Proprietario", +"datasourceViewer": "Può essere utilizzato", +"datasourceOwner": "Può gestire", +}, +"debug": { + ...en.debug, + +"title": "Titolo", +"switch": "Componente dell'interruttore:", +}, +"module": { + ...en.module, + +"folderNotEmpty": "La cartella non è vuota", +"emptyText": "Nessun dato", +"docLink": "Per saperne di più sui moduli...", +"documentationText": "I moduli sono applicazioni complete che possono essere incluse e ripetute in altre applicazioni e funzionano come un singolo componente. Poiché i moduli possono essere incorporati, devono essere in grado di interagire con le applicazioni o i siti web esterni. Queste quattro impostazioni aiutano a supportare la comunicazione con un modulo.", +"circularReference": "Riferimento circolare, il modulo/applicazione corrente non può essere utilizzato!", +"emptyTestInput": "Il modulo corrente non ha ingressi da testare", +"emptyTestMethod": "Il modulo attuale non ha un metodo di verifica", +"name": "Nome", +"input": "Ingresso", +"params": "Parametri", +"emptyParams": "Non è stato aggiunto alcun parametro", +"emptyInput": "Non è stato aggiunto alcun input", +"emptyMethod": "Non è stato aggiunto alcun metodo", +"emptyOutput": "Non è stata aggiunta alcuna uscita", +"data": "Dati", +"string": "Stringa", +"number": "Numero", +"array": "Array", +"boolean": "Booleano", +"query": "Interrogazione", +"autoScaleCompHeight": "Bilance di altezza per componenti con contenitore", +"excuteMethod": "Eseguire il metodo {name}", +"method": "Metodo", +"action": "Azione", +"output": "Uscita", +"nameExists": "Nome {name} Già esistente", +"eventTriggered": "L'evento {name} viene attivato", +"globalPromptWhenEventTriggered": "Visualizza un prompt globale quando viene attivato un evento", +"emptyEventTest": "Il modulo corrente non ha eventi da testare", +"emptyEvent": "Non è stato aggiunto alcun evento", +"event": "Evento", +}, +"resultPanel": { + ...en.resultPanel, + +"returnFunction": "Il valore di ritorno è una funzione.", +"consume": "{time}", +"JSON": "Mostra JSON", +}, +"createAppButton": { + ...en.createAppButton, + +"creating": "Creare...", +"created": "Creare {name}", +}, +"apiMessage": { + ...en.apiMessage, + +"authenticationFail": "Autenticazione utente fallita, accedere di nuovo", +"verifyAccount": "Necessità di verificare l'account", +"functionNotSupported": "La versione attuale non supporta questa funzione. Contatta il team commerciale di Lowcoder per aggiornare il tuo account.", +}, +"globalErrorMessage": { + ...en.globalErrorMessage, + +"createCompFail": "Creazione del componente {comp} fallita", +"notHandledError": "{method} Metodo non eseguito", +}, +"aggregation": { + ...en.aggregation, + +"navLayout": "Barra di navigazione", +"chooseApp": "Scegliere l'applicazione", +"iconTooltip": "Supporta il link src dell'immagine o la stringa Base64 come data:image/png;base64,AAA... CCC", +"hideWhenNoPermission": "Nascosto agli utenti non autorizzati", +"queryParam": "Parametri della query URL", +"hashParam": "Parametri URL Hash", +"tabBar": "Barra delle schede", +"emptyTabTooltip": "Configurare questa pagina nel riquadro destro", +}, +"appSetting": { + ...en.appSetting, + +"450": "450px (Telefono)", +"800": "800px (Tablet)", +"1440": "1440px (Laptop)", +"1920": "1920px (schermo panoramico)", +"3200": "3200px (schermo super grande)", +"title": "Impostazioni generali dell'app", +"autofill": "Autofill", +"userDefined": "Personalizzato", +"default": "Predefinito", +"tooltip": "Chiudere il Popover dopo l'impostazione", +"canvasMaxWidth": "Larghezza massima della tela per questa applicazione", +"userDefinedMaxWidth": "Larghezza massima personalizzata", +"inputUserDefinedPxValue": "Inserire un valore Pixel personalizzato", +"maxWidthTip": "La larghezza massima deve essere maggiore o uguale a 350.", +"themeSetting": "Tema di stile applicato", +"themeSettingDefault": "Predefinito", +"themeCreate": "Creare il tema", +"appTitle": "Titolo", +"appDescription": "Descrizione", +"appCategory": "Categoria", +"showPublicHeader": "Mostra l'intestazione nella vista pubblica", +"canvas": "Impostazioni della tela", +"gridColumns": "Colonne della griglia", +"gridRowHeight": "Altezza della riga della griglia", +"gridRowCount": "Conteggio delle righe della griglia", +"gridPaddingX": "Imbottitura orizzontale della tela", +"gridPaddingY": "Imbottitura verticale della tela", +"gridBgImage": "Immagine di sfondo", +"gridBgImageRepeat": "Ripetizione dell'immagine di sfondo", +"gridBgImageSize": "Dimensioni dell'immagine di sfondo", +"gridBgImagePosition": "Posizione dell'immagine di sfondo", +"gridBgImageOrigin": "Origine dell'immagine di sfondo", +}, +"customShortcut": { + ...en.customShortcut, + +"title": "Scorciatoie personalizzate", +"shortcut": "Scorciatoia", +"action": "Azione", +"empty": "Niente scorciatoie", +"placeholder": "Premere la scorciatoia", +"otherPlatform": "Altro", +"space": "Spazio", +}, +"profile": { + ...en.profile, + +"orgSettings": "Impostazioni dello spazio di lavoro", +"switchOrg": "Cambia spazio di lavoro", +"joinedOrg": "I miei spazi di lavoro", +"createOrg": "Crea spazio di lavoro", +"logout": "Disconnettersi", +"personalInfo": "Il mio profilo", +"bindingSuccess": "Legame {sourceName} Successo", +"uploadError": "Errore di caricamento", +"editProfilePicture": "Modificare", +"saveUserNameTooltip": "Premere Invio per salvare il nuovo nome utente. Se vedete la vostra e-mail, significa che l'abbiamo appena dirottata come nome utente e potete cambiarla con una migliore. L'e-mail come nome utente tecnico rimane inalterata.", +"changeAvatarTooltip": "È possibile caricare file PNG o JPG", +"nameCheck": "Il nome non può essere vuoto", +"name": "Nome:", +"namePlaceholder": "Inserire il proprio nome", +"toBind": "Per legare", +"binding": "È vincolante", +"bindError": "Errore di parametro, attualmente non supportato Legame.", +"bindName": "Legare {name}", +"loginAfterBind": "Dopo il collegamento, è possibile utilizzare {name} per accedere.", +"bindEmail": "Legare l'e-mail:", +"email": "Email", +"emailCheck": "Inserire un'e-mail valida", +"emailPlaceholder": "Inserisci il tuo indirizzo e-mail", +"submit": "Invia", +"bindEmailSuccess": "Successo della rilegatura via e-mail", +"passwordModifiedSuccess": "Password modificata con successo", +"passwordSetSuccess": "Password impostata con successo", +"oldPassword": "Vecchia password:", +"inputCurrentPassword": "Inserire la password attuale", +"newPassword": "Nuova password:", +"inputNewPassword": "Inserire la nuova password", +"confirmNewPassword": "Confermare la nuova password:", +"inputNewPasswordAgain": "Inserire nuovamente la nuova password", +"password": "Password:", +"modifyPassword": "Modifica della password", +"setPassword": "Impostare la password", +"alreadySetPassword": "Set di password", +"setPassPlaceholder": "È possibile accedere con la password", +"setPassAfterBind": "È possibile impostare la password dopo il collegamento dell'account", +"socialConnections": "Connessioni sociali", +"changeAvatar": "Cambia Avatar", +"about": "Circa", +"userId": "ID utente", +"createdAt": "Creato a", +"currentOrg": "Organizzazione attuale", +"settings": "Impostazioni", +"uiLanguage": "Lingua UI", +"info": "Info", +"createdApps": "Le vostre applicazioni create", +"createdModules": "I moduli creati", +"sharedApps": "Applicazioni condivise con voi", +"sharedModules": "Moduli condivisi con voi", +"onMarketplace": "Sul mercato", +"howToPublish": "Come pubblicare su Marketplace", +"memberOfOrgs": "Spazi di lavoro Soci", +"apiKeys": "Chiavi API", +"createApiKey": "Creare la chiave API", +"apiKeyInfo": "Assicuratevi di copiare la nuova chiave API. Non sarà più possibile visualizzarla.", +"apiKeyName": "Nome", +"apiKeyDescription": "Descrizione", +"apiKeyCopy": "Fare clic sulla chiave Api per ottenere il valore negli appunti.", +"apiKey": "Chiave API", +"deleteApiKey": "Cancellare la chiave API", +"deleteApiKeyContent": "È sicuro di voler eliminare questa chiave API?", +"deleteApiKeyError": "Qualcosa è andato storto. Riprovare.", +}, +"shortcut": { + ...en.shortcut, + +"shortcutList": "Scorciatoie da tastiera", +"click": "Cliccare", +"global": "Globale", +"toggleShortcutList": "Alternare le scorciatoie da tastiera", +"editor": "Editor", +"toggleLeftPanel": "Alterna il riquadro sinistro", +"toggleBottomPanel": "Alterna il riquadro inferiore", +"toggleRightPanel": "Alterna il riquadro destro", +"toggleAllPanels": "Alterna tutti i riquadri", +"preview": "Anteprima", +"undo": "Undo", +"redo": "Rifare", +"showGrid": "Mostra griglia", +"component": "Component", +"multiSelect": "Seleziona multiplo", +"selectAll": "Seleziona tutti", +"copy": "Copia", +"cut": "Tagliare", +"paste": "Incolla", +"move": "Muoversi", +"zoom": "Ridimensionamento", +"delete": "Cancellare", +"deSelect": "Deselezionare", +"queryEditor": "Editor di query", +"excuteQuery": "Eseguire la query corrente", +"editBox": "Editor di testo", +"formatting": "Formato", +"openInLeftPanel": "Aprire nel riquadro sinistro", +}, +"help": { + ...en.help, + +"videoText": "Panoramica", +"onBtnText": "OK", +"permissionDenyTitle": "💡 Impossibile creare una nuova applicazione o origine dati?", +"permissionDenyContent": "Non si ha l'autorizzazione a creare l'applicazione e l'origine dati. Contattare l'amministratore per unirsi al gruppo di sviluppatori.", +"appName": "Applicazione tutorial", +"chat": "Chatta con noi", +"docs": "Visualizza la documentazione", +"editorTutorial": "Editor di tutorial", +"update": "Cosa c'è di nuovo?", +"version": "Versione", +"versionWithColon": "Versione:", +"submitIssue": "Invia un problema", +}, +"header": { + ...en.header, + +"nameCheckMessage": "Il nome non può essere vuoto", +"viewOnly": "Solo vista", +"recoverAppSnapshotTitle": "Ripristinare questa versione?", +"recoverAppSnapshotContent": "Ripristinare l'applicazione corrente alla versione creata in {time}.", +"recoverAppSnapshotMessage": "Ripristinare questa versione", +"returnEdit": "Ritorno all'editore", +"deploy": "Pubblicare", +"export": "Esportazione in JSON", +"editName": "Modifica nome", +"duplicate": "Duplicato {type}", +"snapshot": "La storia", +"scriptsAndStyles": "Sceneggiature e stile", +"appSettings": "Impostazioni dell'app", +"preview": "Anteprima", +"editError": "Modalità Anteprima storia, non è supportata alcuna operazione.", +"clone": "Clone", +"editorMode_layout": "Layout", +"editorMode_logic": "Logica", +"editorMode_both": "Entrambi", +"editorMode_layout_tooltip": "Personalizzare l'aspetto e il layout del componente, nella finestra di destra. Regolate l'aspetto, gli stili e le animazioni.", +"editorMode_logic_tooltip": "Impostate il funzionamento e l'interazione del vostro componente, nella finestra giusta. Gestite il suo contenuto e i suoi comportamenti interattivi.", +"AppEditingBlocked": "Modifica dell'app bloccata per:", +"AppEditingBlockedHint": "Le modifiche non verranno salvate mentre un altro utente sta modificando questa app.", +"AppEditingBlockedMessage": "Attendere prima di controllare lo stato di modifica dell'app.", +"AppEditingBlockedCheckStatus": "Controlla lo stato dell'app", +"AppEditingBlockedSomeone": "Qualcuno", +"AppEditingBlockedMessageSnipped": "sta modificando questa app", +}, +"userAuth": { + ...en.userAuth, + +"registerByEmail": "Iscriviti", +"email": "E-mail:", +"inputEmail": "Inserisci il tuo indirizzo e-mail", +"inputValidEmail": "Inserire un'e-mail valida", +"forgotPassword": "Password dimenticata", +"forgotPasswordInfo": "Inserisci la tua e-mail e ti invieremo un link per reimpostare la tua password.", +"forgotPasswordSuccess": "Controllare l'e-mail per il link di reimpostazione della password.", +"forgotPasswordError": "Qualcosa è andato storto. Riprovare.", +"register": "Iscriviti", +"userLogin": "Accedi", +"login": "Accedi", +"bind": "Rilegatura", +"passwordCheckLength": "Almeno {min} Caratteri", +"passwordCheckContainsNumberAndLetter": "Deve contenere lettere e numeri", +"passwordCheckSpace": "Non può contenere caratteri di spazi bianchi", +"welcomeTitle": "Benvenuti a {productName}", +"inviteWelcomeTitle": "{username} vi invita a lavorare insieme", +"terms": "Termini", +"privacy": "Informativa sulla privacy", +"registerHint": "Ho letto e accetto il", +"chooseAccount": "Scegliere il proprio account", +"signInLabel": "Accesso con {name}", +"bindAccount": "Legare il conto", +"scanQrCode": "Scansionare il codice QR con {name}", +"invalidThirdPartyParam": "Param di terze parti non validi", +"account": "Conto", +"inputAccount": "Inserisci il tuo account", +"ldapLogin": "LDAP Sign In", +"resetPassword": "Reimpostare la password", +"resetPasswordDesc": "Reimpostare la password dell'utente {name}. Dopo la reimpostazione verrà generata una nuova password.", +"resetSuccess": "Azzeramento riuscito", +"resetSuccessDesc": "La reimpostazione della password è riuscita. La nuova password è: {password}", +"resetLostPasswordSuccess": "La reimpostazione della password è riuscita. Effettuare nuovamente il login.", +"copyPassword": "Copia della password", +"poweredByLowcoder": "Alimentato da: Lowcoder.cloud", +"continue": "Continua", +"enterPassword": "Inserire la password", +"selectAuthProvider": "Selezionare il provider di autenticazione", +"selectWorkspace": "Selezionare l'area di lavoro", +"userNotFound": "Utente non trovato. Assicurarsi di aver inserito l'e-mail corretta.", +}, +"preLoad": { + ...en.preLoad, + +"jsLibraryHelpText": "Aggiungere librerie JavaScript all'applicazione corrente tramite indirizzi URL. lodash, day.js, uuid, numbro sono integrati nel sistema per un uso immediato. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione, il che può avere un impatto sulle prestazioni dell'applicazione.", +"exportedAs": "Esportato come", +"urlTooltip": "Indirizzo URL della libreria JavaScript, [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/) è raccomandato.", +"externalLibsHelperText": "Sono supportate solo le librerie che utilizzano l'approccio UMD (Universal Module Definition). Per saperne di più: https://github.com/umdjs/umd", +"recommended": "Consigliato", +"viewJSLibraryDocument": "Documento", +"jsLibraryURLError": "URL non valido", +"jsLibraryExist": "La libreria JavaScript esiste già", +"jsLibraryEmptyContent": "Nessuna libreria JavaScript aggiunta", +"jsLibraryDownloadError": "Errore nel download della libreria JavaScript", +"jsLibraryInstallSuccess": "Libreria JavaScript installata con successo", +"jsLibraryInstallFailed": "Installazione della libreria JavaScript non riuscita", +"jsLibraryInstallFailedCloud": "Forse la libreria non è disponibile nella Sandbox, [Documentazione](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", +"jsLibraryInstallFailedHost": "{message}", +"add": "Aggiungi nuovo", +"jsHelpText": "Aggiungere un metodo o una variabile globale all'applicazione corrente.", +"cssHelpText": "Aggiungere stili all'applicazione corrente. La struttura del DOM può cambiare durante l'iterazione del sistema. Cercare di modificare gli stili attraverso le proprietà dei componenti.", +"scriptsAndStyles": "Script e stili", +"jsLibrary": "Libreria JavaScript", +}, +"editorTutorials": { + ...en.editorTutorials, + +"component": "Component", +"componentContent": "Il pannello dei componenti destro offre molti blocchi di applicazioni (componenti) già pronti. Questi possono essere trascinati sulla tela per essere utilizzati. È anche possibile creare i propri componenti con un po' di conoscenze di codifica.", +"canvas": "Tela", +"canvasContent": "Costruite le vostre applicazioni su Canvas con un approccio \"What You See Is What You Get\". È sufficiente trascinare e rilasciare i componenti per progettare il layout e utilizzare le scorciatoie da tastiera per una rapida modifica, come cancellare, copiare e incollare. Una volta selezionato un componente, è possibile mettere a punto ogni dettaglio, dallo stile al layout, dal binding dei dati al comportamento logico. In più, potete usufruire del vantaggio del design reattivo, che garantisce che le vostre app siano perfette su qualsiasi dispositivo.", +"queryData": "Interrogazione dei dati", +"queryDataContent": "Qui è possibile creare query di dati e collegarsi a MySQL, MongoDB, Redis, Airtable e molte altre fonti di dati. Dopo aver configurato la query, fare clic su 'Esegui' per ottenere i dati e continuare l'esercitazione.", +"compProperties": "Proprietà dei componenti", +"interactiveDemo": "Demo interattiva", +"interactiveDemoToolTip": "Fare clic per avviare una dimostrazione interattiva di questa funzione", +}, +"supademos": { + ...en.supademos, + +"transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", +"dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", +"temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", +"dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", +"restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", +"jsQuery": "", +"streamApiQuery": "", +"mongodbQuery": "", +"libraryQuery": "", +"googleSheets": "", +"graphqlQuery": "", +"snowflakeQuery": "", +}, +"homeTutorials": { + ...en.homeTutorials, + +"createAppContent": "Benvenuti! Fate clic su \"App\" e iniziate a creare la vostra prima applicazione.", +"createAppTitle": "Creare un'applicazione", +}, +"npmRegistry": { + ...en.npmRegistry, + +"npmRegistryEnable": "Abilitare il registro NPM personalizzato", +"npmRegistryUrl": "URL del registro NPM", +"npmRegistryUrlRequired": "Inserire l'URL del registro", +"npmRegistryUrlInvalid": "Inserire un URL valido", +"npmRegistryScope": "Ambito di applicazione del pacchetto", +"npmRegistryPattern": "Pattern", +"npmRegistryPatternInvalid": "Inserire un modello valido (che inizia con @ per le organizzazioni).", +"npmRegistryAuth": "Autenticazione", +"npmRegistryAuthType": "Tipo di autenticazione", +"npmRegistryAuthCredentials": "Credenziali di autenticazione", +"npmRegistryAuthCredentialsRequired": "Inserire le credenziali del registro", +"npmRegistryAuthCredentialsHelp": "Per l'autenticazione di base, fornire il nome utente e la password codificati in base64 nel formato 'base64(nome utente:password)', mentre per l'autenticazione tramite token fornire il token.", +}, +"history": { + ...en.history, + +"layout": "'{0}' Adattamento del layout", +"upgrade": "Aggiornamento '{0}'", +"delete": "Cancellare '{0}'.", +"add": "Aggiungere \"{0}\".", +"modify": "Modificare '{0}'", +"rename": "Rinominare '{1}' in '{0}'.", +"recover": "Recuperare la versione \"{2}\".", +"recoverVersion": "Recupera la versione", +"andSoOn": "e così via", +"timeFormat": "MM GG alle hh:mm A", +"emptyHistory": "Nessuna storia", +"currentVersionWithBracket": " (Attuale)", +"currentVersion": "Versione attuale", +"justNow": "Solo ora", +"history": "La storia", +}, +"home": { + ...en.home, + +"profile": "Il vostro profilo", +"news": "Notizie", +"newsLoading": "Il caricamento avverrà in pochi secondi.", +"orgHome": "Homepage (Org)", +"yourOrg": "La vostra organizzazione", +"orgHomeTitle": "Homepage dell'organizzazione", +"appMarketplace": "Mercato delle applicazioni", +"allApplications": "Le vostre applicazioni", +"allModules": "I vostri moduli", +"allFolders": "Le vostre cartelle", +"yourFolders": "Le vostre cartelle", +"modules": "Moduli", +"module": "Modulo", +"api": "API Lowcoder", +"trash": "Rifiuti", +"marketplace": "Mercato", +"allCategories": "Tutte le categorie", +"queryLibrary": "Libreria di query", +"datasource": "Fonti dei dati", +"selectDatasourceType": "Selezionare il tipo di sorgente dati", +"home": "Casa", +"all": "Tutti", +"app": "App", +"navigation": "Navigazione", +"navLayout": "Navigazione su PC", +"navLayoutDesc": "Menu a sinistra per facilitare la navigazione sul desktop.", +"mobileTabLayout": "Navigazione mobile", +"mobileTabLayoutDesc": "Barra di navigazione inferiore per una navigazione mobile fluida.", +"folders": "Cartelle", +"folder": "Cartella", +"rootFolder": "Radice", +"import": "Importazione", +"export": "Esportazione in JSON", +"show": "Mostra", +"inviteUser": "Invitare i membri", +"createFolder": "Crea cartella", +"createFolderSubTitle": "Nome della cartella:", +"moveToFolder": "Sposta nella cartella", +"moveToTrash": "Spostarsi nella spazzatura", +"moveToFolderSubTitle": "Spostare \"{name}\" in:", +"folderName": "Nome della cartella:", +"resCardSubTitle": "{time} da {creator}", +"trashEmpty": "Il cestino è vuoto.", +"projectEmpty": "Non c'è niente qui.", +"projectEmptyCanAdd": "Non avete ancora nessuna applicazione. Fare clic su Nuovo per iniziare.", +"name": "Nome", +"type": "Tipo", +"creator": "Creato da", +"lastModified": "Ultima modifica", +"deleteTime": "Cancellare il tempo", +"createTime": "Creare tempo", +"datasourceName": "Nome dell'origine dati", +"databaseName": "Nome del database", +"nameCheckMessage": "Il nome non può essere vuoto", +"deleteElementTitle": "Cancellare definitivamente", +"moveToTrashSubTitle": "{type} {name} sarà spostato nella spazzatura.", +"deleteElementSubTitle": "Eliminare {type} {name} in modo permanente, non può essere recuperato.", +"deleteSuccessMsg": "Eliminato con successo", +"deleteErrorMsg": "Errore eliminato", +"recoverSuccessMsg": "Recuperato con successo", +"newDatasource": "Nuova fonte di dati", +"creating": "Creare...", +"chooseDataSourceType": "Scegliere il tipo di origine dati", +"folderAlreadyExists": "La cartella esiste già", +"newNavLayout": "{userName}'s {name}", +"newApp": "Il nuovo {userName} di {name}", +"importError": "Errore di importazione, {message}", +"exportError": "Errore di esportazione, {message}", +"importSuccess": "Successo dell'importazione", +"fileUploadError": "Errore nel caricamento dei file", +"fileFormatError": "Errore di formato del file", +"groupWithSquareBrackets": "[Gruppo]", +"allPermissions": "Proprietario", +"appSharingDialogueTitle": "Condivisione delle app e autorizzazioni", +"appSocialSharing": "Condividete la vostra applicazione e la vostra esperienza su:", +"appSocialSharingMessage": "Ho realizzato questa app con Lowcoder, guardatela!", +"socialShare": "Condividi su", +"shareLink": "Condividi il link:", +"copyLink": "Copiare il link", +"appPublicMessage": "Rendere pubblica l'applicazione. Chiunque può visualizzarla.", +"modulePublicMessage": "Rendere pubblico il modulo. Chiunque può vederlo.", +"marketplaceURL": "https://api-service.lowcoder.cloud", +"appMarketplaceMessage": "Pubblicate la vostra applicazione sul Marketplace pubblico. Chiunque può visualizzarla e copiarla da lì.", +"moduleMarketplaceMessage": "Pubblicate il vostro modulo sul Mercato pubblico. Chiunque può visualizzarlo e copiarlo da lì.", +"marketplaceGoodPublishing": "Assicuratevi che la vostra applicazione abbia un buon nome e sia facile da usare. Rimuovere tutte le informazioni sensibili prima di pubblicarle. Inoltre, rimuovete le fonti di dati locali e sostituitele con dati temporanei statici integrati.", +"noMarketplaceApps": "Non ci sono ancora applicazioni sul mercato", +"errorMarketplaceApps": "Errore durante il caricamento delle applicazioni del Marketplace", +"localMarketplaceTitle": "Mercato locale", +"globalMarketplaceTitle": "Mercato pubblico", +"memberPermissionList": "Permessi per i membri:", +"orgName": "{orgName} admins", +"addMember": "Aggiungi membri", +"addPermissionPlaceholder": "Inserire un nome per cercare i membri", +"searchMemberOrGroup": "Ricerca di membri o gruppi:", +"addPermissionErrorMessage": "Impossibile aggiungere l'autorizzazione, {message}", +"copyModalTitle": "Clonare \"{name}\".", +"copyNameLabel": "{type} nome", +"copyModalfolderLabel": "Aggiungi alla cartella", +"copyNamePlaceholder": "Inserire il nome di un {type}.", +"chooseNavType": "Scegliere il tipo di navigazione", +"createNavigation": "Crea navigazione", +"howToUseAPI": "Come utilizzare l'API Open Rest", +"support": "Supporto", +}, +"support": { + ...en.support, + +"selfUser": "Tu", +"supportTitle": "Supporto Lowcoder", +"supportContent": "Se hai domande o hai bisogno di aiuto, usa il sistema di ticket per risolvere il problema rapidamente.", +"newSupportTicket": "Nuovo Ticket di Supporto", +"ticketTitle": "Titolo", +"priority": "Priorità", +"assignee": "Assegnatario", +"status": "Stato del Ticket", +"updatedTime": "Tempo Aggiornato", +"active": "Attivo", +"inactive": "Inattivo", +"noEmail": "Nessuna E-mail", +"details": "Dettagli", +"reloadTickets": "Ricarica Ticket", +"createdDate": "Data di Creazione", +"updatedDate": "Data di Aggiornamento", +"description": "Descrizione del Problema", +"subtasks": "Sottoattività", +"subtasksProgress": "Avanzamento di tutte le Sottoattività", +"attachments": "Allegati al Problema", +"comments": "Commenti", +"addComment": "Aggiungi Commento", +"addAttachment": "Aggiungi Allegato", +"edit": "Modifica Descrizione Ticket", +"save": "Salva Descrizione Ticket", +"cancel": "Annulla", +"submitComment": "Invia Commento", +"upload": "Invia Allegato", +"selectFile": "Seleziona File", +"ticketDescriptionUpdated": "Descrizione del ticket aggiornata con successo!", +"ticketDescriptionUpdateFailed": "Aggiornamento della descrizione del ticket non riuscito.", +"writeComment": "Scrivi un commento...", +"ticketCommentAdded": "Commento aggiunto con successo!", +"ticketCommentFailed": "Impossibile aggiungere il commento.", +"ticketCommentEmpty": "Si prega di scrivere un commento prima di inviare.", +"ticketAttachmentUploaded": "Allegato caricato con successo!", +"ticketAttachmentFailed": "Caricamento dell'allegato non riuscito.", +"ticketAttachmentEmpty": "Seleziona un file da caricare.", +"ticketFetchError": "Caricamento del ticket fallito.", +"ticketNotFound": "Ticket non trovato.", +"addAttachmentFileSize": "Il file deve essere inferiore a 5MB!", +"goBack": "Torna Indietro", +"noDescription": "Nessuna descrizione disponibile.", +"createTicket": "Crea un nuovo Ticket di Supporto", +"createTicketTitlePlaceholder": "Inserisci il Titolo (max 150 caratteri)", +"createTicketDescriptionTitle": "Descrivi il tuo problema - più dettagli, meglio è:", +"createTicketDescriptionPlaceholder": "Descrivi il problema in dettaglio, includendo: 1) Passaggi per riprodurre il problema, 2) Comportamento previsto rispetto al comportamento reale, 3) Frammenti di codice, se applicabile, 4) Componenti, API o configurazioni specifiche interessate", +"createTicketSubmit": "Invia Ticket", +"createTicketInfoText": "Una volta creato il Ticket, potrai aggiungere Screenshot e Commenti nella sezione 'Dettagli'.", +}, +"carousel": { + ...en.carousel, + +"dotPosition": "Posizione dei punti di navigazione", +"autoPlay": "AutoPlay", +"showDots": "Mostra punti di navigazione", +}, +"npm": { + ...en.npm, + +"invalidNpmPackageName": "Nome o URL del pacchetto npm non valido.", +"pluginExisted": "Questo plugin npm esisteva già", +"compNotFound": "Il componente {compName} non è stato trovato.", +"addPluginModalTitle": "Aggiungere un plugin da un repository npm", +"pluginNameLabel": "URL o nome del pacchetto npm", +"noCompText": "Nessun componente.", +"compsLoading": "Caricamento...", +"removePluginBtnText": "Rimuovere", +"addPluginBtnText": "Aggiungere il plugin npm", +}, +"toggleButton": { + ...en.toggleButton, + +"valueDesc": "Il valore predefinito del pulsante di attivazione, ad esempio: Falso", +"trueDefaultText": "Nascondere", +"falseDefaultText": "Mostra", +"trueLabel": "Testo per Vero", +"falseLabel": "Testo per Falso", +"trueIconLabel": "Icona per Vero", +"falseIconLabel": "Icona per Falso", +"iconPosition": "Icona Posizione", +"showText": "Mostra testo", +"alignment": "Allineamento", +"showBorder": "Mostra il confine", +}, +"componentDoc": { + ...en.componentDoc, + +"markdownDemoText": "**Lowcoder** | Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", +"demoText": "Lowcoder | Crea applicazioni software per la tua azienda e i tuoi clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", +"submit": "Invia", +"style": "Stile", +"danger": "Pericolo", +"warning": "Avvertenze", +"success": "Il successo", +"menu": "Menu", +"link": "Collegamento a", +"customAppearance": "Aspetto personalizzato", +"search": "Ricerca", +"pleaseInputNumber": "Inserire un numero", +"mostValue": "Più valore", +"maxRating": "Valutazione massima", +"notSelect": "Non selezionato", +"halfSelect": "Mezza selezione", +"pleaseSelect": "Selezionare", +"title": "Titolo", +"content": "Content", +"componentNotFound": "Il componente non esiste", +"example": "Esempi", +"defaultMethodDesc": "Impostare il valore della proprietà {name}", +"propertyUsage": "È possibile leggere le informazioni relative al componente accedendo alle proprietà del componente in base al suo nome ovunque si possa scrivere JavaScript.", +"property": "Proprietà", +"propertyName": "Nome della proprietà", +"propertyType": "Tipo", +"propertyDesc": "Descrizione", +"event": "Eventi", +"eventName": "Nome dell'evento", +"eventDesc": "Descrizione", +"mehtod": "Metodi", +"methodUsage": "L'utente ha la possibilità di interagire con i componenti tramite i loro rispettivi metodi, ai quali si può accedere con i nomi designati all'interno di qualsiasi segmento in cui si utilizza JavaScript. Inoltre, questi componenti possono essere attivati attraverso l'azione 'Control Component', che viene attivata in risposta a eventi specifici.", +"methodName": "Nome del metodo", +"methodDesc": "Descrizione", +"showBorder": "Mostra il confine", +"haveTry": "Provate voi stessi", +"settings": "Impostazione", +"settingValues": "Impostazione Valore", +"defaultValue": "Valore predefinito", +"time": "Tempo", +"date": "Data", +"noValue": "Nessuno", +"xAxisType": "Tipo di asse X", +"hAlignType": "Allineamento orizzontale", +"leftLeftAlign": "Allineamento a sinistra", +"leftRightAlign": "Allineamento sinistra-destra", +"topLeftAlign": "Allineamento in alto a sinistra", +"topRightAlign": "Allineamento in alto a destra", +"validation": "Convalida", +"required": "Richiesto", +"defaultStartDateValue": "Data di inizio predefinita", +"defaultEndDateValue": "Data di fine predefinita", +"basicUsage": "Uso di base", +"basicDemoDescription": "I seguenti esempi mostrano l'uso di base del componente.", +"noDefaultValue": "Nessun valore predefinito", +"forbid": "Vietato", +"placeholder": "Segnaposto", +"pleaseInputPassword": "Inserire una password", +"password": "Password", +"textAlign": "Allineamento del testo", +"length": "Lunghezza", +"top": "In alto", +"pleaseInputName": "Inserire il proprio nome", +"userName": "Nome", +"fixed": "Fisso", +"responsive": "Reattivo", +"workCount": "Conteggio delle parole", +"cascaderOptions": "Opzioni Cascader", +"pleaseSelectCity": "Selezionare una città", +"advanced": "Avanzato", +"showClearIcon": "Mostra l'icona Cancella", +"appleOptionLabel": "🍎 Mela", +"waterMelonOptionLabel": "🍉 Anguria", +"berryOptionLabel": "🍓 Fragola", +"lemonOptionLabel": "🍋 Limone", +"coconutOptionLabel": "🥥 Noce di cocco", +"likedFruits": "Preferiti", +"option": "Opzione", +"singleFileUpload": "Caricamento di un singolo file", +"multiFileUpload": "Caricamento multiplo di file", +"folderUpload": "Caricamento cartelle", +"multiFile": "File multipli", +"folder": "Cartella", +"open": "Aperto", +"favoriteFruits": "Frutti preferiti", +"pleaseSelectOneFruit": "Selezionare un frutto", +"notComplete": "Non completo", +"complete": "Completo", +"echart": "Grafico elettronico", +"lineChart": "Grafico a linee", +"basicLineChart": "Grafico a linee di base", +"lineChartType": "Tipo di grafico a linee", +"stackLineChart": "Linea impilata", +"areaLineChart": "Linea d'area", +"scatterChart": "Grafico a dispersione", +"scatterShape": "Forma dello spargimento", +"scatterShapeCircle": "Cerchio", +"scatterShapeRect": "Rettangolo", +"scatterShapeTri": "Triangolo", +"scatterShapeDiamond": "Diamante", +"scatterShapePin": "Perno", +"scatterShapeArrow": "Freccia", +"pieChart": "Grafico a torta", +"basicPieChart": "Grafico a torta di base", +"pieChatType": "Tipo di grafico a torta", +"pieChartTypeCircle": "Tabella delle ciambelle", +"pieChartTypeRose": "Grafico delle rose", +"titleAlign": "Titolo Posizione", +"color": "Colore", +"dashed": "Tratteggiato", +"imADivider": "Io sono una linea di demarcazione", +"tableSize": "Dimensione della tabella", +"subMenuItem": "Sottomenu {num}", +"menuItem": "Menu {num}", +"labelText": "Etichetta", +"labelPosition": "Etichetta - Posizione", +"labelAlign": "Etichetta - Allineamento", +"optionsOptionType": "Metodo di configurazione", +"styleBackgroundColor": "Colore di sfondo", +"styleBorderColor": "Colore del bordo", +"styleColor": "Colore del carattere", +"selectionMode": "Modalità di selezione delle righe", +"paginationSetting": "Impostazione della paginazione", +"paginationShowSizeChanger": "Supporto agli utenti per la modifica del numero di voci per pagina", +"paginationShowSizeChangerButton": "Pulsante Mostra cambio formato", +"paginationShowQuickJumper": "Mostra Quick Jumper", +"paginationHideOnSinglePage": "Nascondere quando c'è una sola pagina", +"paginationPageSizeOptions": "Dimensione della pagina", +"chartConfigCompType": "Tipo di grafico", +"xConfigType": "Tipo di asse X", +"loading": "Caricamento", +"disabled": "Disabili", +"minLength": "Lunghezza minima", +"maxLength": "Lunghezza massima", +"showCount": "Mostra il conteggio delle parole", +"autoHeight": "Altezza", +"thousandsSeparator": "Separatore di migliaia", +"precision": "Posizioni decimali", +"value": "Valore predefinito", +"formatter": "Formato", +"min": "Valore minimo", +"max": "Valore massimo", +"step": "Dimensione del passo", +"start": "Ora di inizio", +"end": "Tempo della fine", +"allowHalf": "Consentire la selezione della metà", +"filetype": "Tipo di file", +"showUploadList": "Mostra elenco di caricamento", +"uploadType": "Tipo di caricamento", +"allowClear": "Mostra l'icona Cancella", +"minSize": "Dimensione minima del file", +"maxSize": "Dimensione massima del file", +"maxFiles": "Numero massimo di file caricati", +"format": "Formato", +"minDate": "Data minima", +"maxDate": "Data massima", +"minTime": "Tempo minimo", +"maxTime": "Tempo massimo", +"text": "Testo", +"type": "Tipo", +"hideHeader": "Nascondi intestazione", +"hideBordered": "Nascondi bordo", +"src": "URL immagine", +"showInfo": "Valore di visualizzazione", +"mode": "Modalità", +"onlyMenu": "Solo menu", +"horizontalAlignment": "Allineamento orizzontale", +"row": "A sinistra", +"column": "In alto", +"leftAlign": "Allineamento a sinistra", +"rightAlign": "Allineamento a destra", +"percent": "Percentuale", +"fixedHeight": "Altezza fissa", +"auto": "Adattivo", +"directory": "Cartella", +"multiple": "File multipli", +"singleFile": "File singolo", +"manual": "Manuale", +"default": "Predefinito", +"small": "Piccolo", +"middle": "Medio", +"large": "Grande", +"single": "Singolo", +"multi": "Multiplo", +"close": "Chiudere", +"ui": "Modalità UI", +"line": "Grafico a linee", +"scatter": "Grafico di dispersione", +"pie": "Grafico a torta", +"basicLine": "Grafico a linee di base", +"stackedLine": "Grafico a linee sovrapposte", +"areaLine": "Mappa dell'area", +"basicPie": "Grafico a torta di base", +"doughnutPie": "Tabella delle ciambelle", +"rosePie": "Grafico delle rose", +"category": "Categoria Asse", +"circle": "Cerchio", +"rect": "Rettangolo", +"triangle": "Triangolo", +"diamond": "Diamante", +"pin": "Perno", +"arrow": "Freccia", +"left": "A sinistra", +"right": "Diritto", +"center": "Centro", +"bottom": "Bottom", +"justify": "Giustificare entrambi i fini", +}, +"playground": { + ...en.playground, + +"url": "https://app.lowcoder.cloud/playground/{compType}/1", +"data": "Stato attuale dei dati", +"preview": "Anteprima", +"property": "Proprietà", +"console": "Console Visual Script", +"executeMethods": "Metodi di esecuzione", +"noMethods": "Nessun metodo.", +"methodParams": "Parametri del metodo", +"methodParamsHelp": "Parametri del metodo di input tramite JSON. Ad esempio, è possibile impostare i parametri di setValue con: [1] o 1", +}, +"calendar": { + ...en.calendar, + +"headerBtnBackground": "Sfondo del pulsante", +"btnText": "Testo del pulsante", +"title": "Titolo", +"selectBackground": "Un contesto selezionato", +}, +"idSource": { + ...en.idSource, + +"title": "Provider di autenticazione utente", +"form": "Email", +"pay": "Premio", +"enable": "Abilitazione", +"unEnable": "Non abilitato", +"loginType": "Tipo di accesso", +"status": "Stato", +"desc": "Descrizione", +"manual": "Rubrica:", +"syncManual": "Sincronizzazione della rubrica", +"syncManualSuccess": "Sincronizzazione riuscita", +"enableRegister": "Consentire la registrazione", +"saveBtn": "Salva e abilita", +"save": "Risparmiare", +"none": "Nessuno", +"formPlaceholder": "Inserire {label}", +"formSelectPlaceholder": "Selezionare il {label}.", +"saveSuccess": "Salvato con successo", +"dangerLabel": "Zona di pericolo", +"dangerTip": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Procedere con cautela.", +"lastEnabledConfig": "Non è possibile disabilitare/cancellare la configurazione, poiché è l'unica abilitata.", +"disable": "Disattivare", +"disableSuccess": "Disattivato con successo", +"encryptedServer": "-------- Crittografato sul lato server --------", +"disableTip": "Suggerimenti", +"disableContent": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Siete sicuri di voler procedere?", +"manualTip": "", +"lockTip": "Il contenuto è bloccato. Per apportare modifiche, fare clic su {icon} per sbloccare.", +"lockModalContent": "La modifica del campo \"Attributo ID\" può avere un impatto significativo sull'identificazione degli utenti. Prima di procedere, accertarsi di aver compreso le implicazioni di questa modifica.", +"payUserTag": "Premio", +"source": "Fonte", +"sourceName": "Nome del fornitore di autorizzazione", +"sourceDescription": "Descrizione del fornitore di autorizzazioni", +"sourceIcon": "Icona Provider di autorizzazione", +"sourceCategory": "Categoria del fornitore di autorizzazioni", +"souceIssuerURI": "URI dell'emittente del fornitore di autorizzazioni", +"souceAuthorizationEndpoint": "Provider di autorizzazione Endpoint di autorizzazione", +"souceTokenEndpoint": "Provider di autorizzazione Punto finale del token", +"souceUserInfoEndpoint": "Provider di autorizzazione Info utente Endpoint", +"userInfoIntrospection": "Utilizzare l'introspezione dell'utente OpenID", +"userCanSelectAccounts": "L'utente può selezionare i conti", +"sourceCategoryEnterprise": "Identità aziendale", +"sourceCategoryCloud": "Servizi cloud", +"sourceCategorySocial": "Media sociali", +"sourceCategoryDevelopment": "Sviluppo", +"sourceCategoryTools": "Strumenti e produttività", +}, +"slotControl": { + ...en.slotControl, + +"configSlotView": "Configurazione della vista slot", +}, +"jsonLottie": { + ...en.jsonLottie, + +"lottieJson": "Lottie JSON", +"searchAnimation": "Ricerca Animazione", +"speed": "Velocità", +"width": "Larghezza", +"height": "Altezza", +"backgroundColor": "Colore di sfondo", +"animationStart": "Inizio dell'animazione", +"valueDesc": "Dati JSON correnti", +"loop": "Anello", +"auto": "Auto", +"onHover": "Su Hover", +"onTrigger": "Su innesco", +"singlePlay": "Gioco singolo", +"endlessLoop": "Anello infinito", +"keepLastFrame": "Mantenere visualizzato l'ultimo fotogramma", +"fit": "In forma", +"align": "Allineare", +"load": "Su carico", +"play": "In gioco", +"pause": "In pausa", +"stop": "Su Stop", +"complete": "Su Completo", +}, +"timeLine": { + ...en.timeLine, + +"titleColor": "Titolo Colore", +"subTitleColor": "Colore dei sottotitoli", +"labelColor": "Colore dell'etichetta", +"value": "Dati sulla linea del tempo", +"mode": "Ordine di visualizzazione", +"left": "Diritto al contenuto", +"right": "Contenuto Sinistra", +"alternate": "Ordine alternativo dei contenuti", +"modeTooltip": "Impostare il contenuto in modo che appaia a destra/sinistra o alternativamente su entrambi i lati della timeline.", +"reverse": "Prima gli eventi più recenti", +"pending": "Testo del nodo in attesa", +"pendingDescription": "Se impostato, viene visualizzato un ultimo nodo con il testo e un indicatore di attesa.", +"defaultPending": "Miglioramento continuo", +"clickTitleEvent": "Fare clic su Titolo evento", +"clickTitleEventDesc": "Fare clic su Titolo evento", +"Introduction": "Tasti di introduzione", +"helpTitle": "Titolo della linea temporale (obbligatorio)", +"helpsubTitle": "Sottotitolo della linea temporale", +"helpLabel": "Etichetta della linea temporale, utilizzata per visualizzare le date", +"helpColor": "Indica il colore del nodo della linea temporale", +"helpDot": "Rendering dei nodi della timeline come icone di design Ant", +"helpTitleColor": "Controllo individuale del colore del titolo del nodo", +"helpSubTitleColor": "Controllo individuale del colore del sottotitolo del nodo", +"helpLabelColor": "Controllo individuale del colore dell'icona del nodo", +"valueDesc": "Dati della linea temporale", +"clickedObjectDesc": "Dati dell'elemento cliccato", +"clickedIndexDesc": "Indice degli elementi cliccati", +}, +"comment": { + ...en.comment, + +"value": "Come elencare i dati", +"showSendButton": "Consentire i commenti", +"title": "Titolo", +"titledDefaultValue": "%d Commento in totale", +"placeholder": "Maiusc + Invio per commentare; inserire @ o # per l'immissione rapida.", +"placeholderDec": "Segnaposto", +"buttonTextDec": "Titolo del pulsante", +"buttonText": "Come", +"mentionList": "Dati dell'elenco delle menzioni", +"mentionListDec": "Parole chiave-menzione; dati dell'elenco delle menzioni-valore", +"userInfo": "Info utente", +"dateErr": "Errore di data", +"commentList": "Come elencare", +"deletedItem": "Voce cancellata", +"submitedItem": "Articolo presentato", +"deleteAble": "Mostra il pulsante Elimina", +"Introduction": "Tasti di introduzione", +"helpUser": "Informazioni sull'utente (obbligatorio)", +"helpname": "Nome utente (obbligatorio)", +"helpavatar": "URL dell'avatar (alta priorità)", +"helpdisplayName": "Nome visualizzato (priorità bassa)", +"helpvalue": "Come il contenuto", +"helpcreatedAt": "Data di creazione", +}, +"mention": { + ...en.mention, + +"mentionList": "Dati dell'elenco delle menzioni", +}, +"autoComplete": { + ...en.autoComplete, + +"value": "Auto Complete Value", +"checkedValueFrom": "Valore controllato Da", +"ignoreCase": "Ricerca Ignorare il caso", +"searchLabelOnly": "Cerca solo nell'etichetta", +"searchFirstPY": "Cerca il primo Pinyin", +"searchCompletePY": "Ricerca Pinyin completo", +"searchText": "Testo di ricerca", +"SectionDataName": "Dati di completamento automatico", +"valueInItems": "Valore in articoli", +"type": "Tipo", +"antDesign": "AntDesign", +"normal": "Normale", +"selectKey": "Chiave", +"selectLable": "Etichetta", +"ComponentType": "Tipo di componente", +"colorIcon": "Blu", +"grewIcon": "Grigio", +"noneIcon": "Nessuno", +"small": "Piccolo", +"large": "Grande", +"componentSize": "Dimensione del componente", +"Introduction": "Tasti di introduzione", +"helpLabel": "Etichetta", +"helpValue": "Valore", +}, +"responsiveLayout": { + ...en.responsiveLayout, + +"column": "Colonne", +"addColumn": "Aggiungi colonna", +"columnDefinition": "Definizione della colonna", +"rowDefinition": "Definizione di riga", +"columnGap": "Spazio tra le colonne", +"rowGap": "Distanza tra le file", +"atLeastOneColumnError": "Il layout reattivo mantiene almeno una colonna", +"columnsPerRow": "Colonne per riga", +"columnsSpacing": "Spaziatura delle colonne (px)", +"horizontal": "Orizzontale", +"vertical": "Verticale", +"mobile": "Mobile", +"tablet": "Tavoletta", +"desktop": "Desktop", +"rowStyle": "Stile della fila", +"columnStyle": "Stile colonna", +"minWidth": "Min. Larghezza", +"rowBreak": "Interruzione della fila", +"useComponentWidth": "Usa dimensione propria", +"useComponentWidthDesc": "Utilizza la larghezza del contenitore invece della larghezza dell'app", +"matchColumnsHeight": "Abbinare l'altezza delle colonne", +"rowLayout": "Disposizione delle file", +"columnsLayout": "Layout delle colonne", +"columnsDefinitionTooltip": "Le colonne possono essere definite liberamente in base alle proprietà delle colonne CSS. Ad esempio, 'auto auto' creerà due colonne di uguale larghezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-columns", +"rowsDefinitionTooltip": "Le righe possono essere definite liberamente in base alle proprietà CSS delle righe. Ad esempio, 'auto auto' creerà due righe di uguale altezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-rows", +}, +"splitLayout": { + ...en.splitLayout, + +"column": "Visualizza le aree", +"addColumn": "Aggiungi aree", +"columnDefinition": "Definizione dell'area", +"atLeastOneColumnError": "Il layout responsivo mantiene almeno una colonna", +"horizontal": "Orizzontale", +"vertical": "Verticale", +"areaStyle": "Stile colonna", +"minWidth": "Min. Larghezza", +"maxWidth": "Max. Larghezza", +"width": "Larghezza", +"collapsible": "L'area è pieghevole?", +"matchColumnsHeight": "Aree di corrispondenza Altezza", +"orientation": "Orientamento del layout diviso", +"orientationTooltip": "L'ordine visivo di allineamento delle aree. Per ottenere layout complessi, è possibile inserire i componenti Splitlayout anche all'interno dei componenti Splitlayout.", +}, +"navLayout": { + ...en.navLayout, + +"mode": "Modalità", +"modeInline": "In linea", +"modeVertical": "Verticale", +"modeHorizontal": "Orizzontale", +"width": "Larghezza", +"widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", +"navStyle": "Menu stile", +"navItemStyle": "Stile della voce di menu", +"navBackground": "Immagine di sfondo", +"mobileNavVerticalOrientation": "Orientamento verticale", +"mobileNavVerticalMaxWidth": "Larghezza massima", +"mobileNavBarHeight": "Altezza della barra di navigazione", +"mobileNavVerticalShowSeparator": "Mostra separatore", +"mobileNavIconSize": "Dimensione dell'icona", +}, +"timeZone": { + ...en.timeZone, + +"UTC-12:00": "(UTC-12:00) Linea di data internazionale W", +"UTC-11:00": "(UTC-11:00) UTC-11", +"UTC-10:00": "(UTC-10:00) Hawaii", +"UTC-09:00": "(UTC-09:00) Alaska", +"UTC-08:00": "(UTC-08:00) Baja CA", +"UTC-07:00": "(UTC-07:00) Ora del Pacifico (USA)", +"UTC-06:00": "(UTC-06:00) Ora centrale (USA)", +"UTC-05:00": "(UTC-05:00) Ora orientale (USA)", +"UTC-04:00": "(UTC-04:00) Ora dell'Atlantico", +"UTC-03:00": "(UTC-03:00) Buenos Aires", +"UTC-02:00": "(UTC-02:00) UTC-02", +"UTC-01:00": "(UTC-01:00) Capo Verde", +"UTC+00:00": "(UTC 00:00) UTC", +"UTC+01:00": "(UTC+01:00) Berlino, Roma", +"UTC+02:00": "(UTC+02:00) Atene, Bucarest", +"UTC+03:00": "(UTC+03:00) Mosca", +"UTC+04:00": "(UTC+04:00) Dubai, Muscat", +"UTC+05:00": "(UTC+05:00) Karachi", +"UTC+05:30": "(UTC+05:30) Nuova Delhi", +"UTC+05:45": "(UTC+05:45) Kathmandu", +"UTC+06:00": "(UTC+06:00) Dhaka", +"UTC+06:30": "(UTC+06:30) Yangon", +"UTC+07:00": "(UTC+07:00) Bangkok", +"UTC+08:00": "(UTC+08:00) Pechino, HK", +"UTC+09:00": "(UTC+09:00) Tokyo, Seul", +"UTC+09:30": "(UTC+09:30) Adelaide, Darwin", +"UTC+10:00": "(UTC+10:00) Sydney", +"UTC+11:00": "(UTC+11:00) Isole Salomone, Nuova Caledonia", +"UTC+12:00": "(UTC+12:00) Auckland, Figi", +"UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", +"UserChoice": "Scelta dell'utente", +}, +"tour": { + ...en.tour, + +"section1Title": "Passi", +"section1Subtitle": "Passi", +"tooltipExampleHeader": "Esempio:", +"tooltipSignatureHeader": "Firma:", +"options": { + ...en.tour.options, + +"title": { + ...en.tour.options.title, + +"label": "Titolo", +"placeholder": "Benvenuti", +"tooltip": "Il titolo del passo. Qui è valido qualsiasi HTML.", +}, +"description": { + ...en.tour.options.description, + +"label": "Descrizione", +"placeholder": "Benvenuto su lowcoder!", +"tooltip": "La descrizione del passo. Qui è valido qualsiasi HTML.", +}, +"mask": { + ...en.tour.options.mask, + +"label": "Maschera", +"tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour.", +"tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", +}, +"arrow": { + ...en.tour.options.arrow, + +"label": "Freccia", +"tooltip": "Attiva e disattiva la freccia o la sposta al centro del componente, se lo si desidera; in caso contrario, la freccia sarà sempre rivolta verso la parte superiore del componente.", +"tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.options.type, + +"label": "Tipo", +"tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour.", +}, +"target": { + ...en.tour.options.target, + +"label": "Component", +"tooltip": "Il componente su cui si vuole inserire il tooltip, oppure lasciarlo vuoto se si vuole semplicemente un modal al centro dello schermo.", +}, +"coverImage": { + ...en.tour.options.coverImage, + +"label": "URI dell'immagine di copertina", +"tooltip": "Un URI per un'immagine che si desidera visualizzare con il passaggio", +}, +}, +"indicatorsRender": { + ...en.tour.indicatorsRender, + +"label": "Indicatori Render", +"tooltip": "Fornisce un indicatore personalizzato della fase in cui ci si trova", +"tooltipValidTypes": "Format è una funzione che accetta due argomenti, `current` e `total` e restituisce un ReactNode", +"tooltipFunctionSignatureHeader": "Firma:", +"tooltipFunctionSignature": "(corrente: numero, totale: numero) => ReactNode", +"tooltipExampleHeader": "Esempio:", +}, +"disabledInteraction": { + ...en.tour.disabledInteraction, + +"label": "Disattivare l'interazione", +"tooltip": "Disabilita l'interazione nell'area evidenziata.", +}, +"mask": { + ...en.tour.mask, + +"label": "Maschera", +"tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour. Può essere sovrascritto a livello di passo.", +"tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", +}, +"placement": { + ...en.tour.placement, + +"label": "Posizionamento", +"tooltip": "Posizione della carta guida rispetto all'elemento di destinazione. Può essere sovrascritta a livello di passo.", +"tooltipValidOptions": "Opzioni valide", +"tooltipValidOptionsAbove": "Sopra il componente:", +"tooltipValidOptionsLeft": "A sinistra del componente:", +"tooltipValidOptionsRight": "A destra del componente:", +"tooltipValidOptionsBelow": "Sotto il componente:", +"tooltipValidOptionsOnTop": "In cima al componente:", +}, +"arrow": { + ...en.tour.arrow, + +"label": "Freccia", +"tooltip": "Attiva e disattiva la freccia o la sposta in modo che punti al centro del componente, se lo si desidera, altrimenti la freccia punterà sempre vicino alla parte superiore del componente. Può essere sovrascritto a livello di passo.", +"tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.type, + +"label": "Tipo", +"tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour. Può essere sovrascritto a livello di passo.", +}, +}, +"docUrls": { + ...en.docUrls, + +"docHome": "https://docs.lowcoder.cloud/", +"apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", +"components": "https://app.lowcoder.cloud/components/{compType}", +"module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", +"optionList": "", +"terms": "https://lowcoder.cloud/terms", +"privacy": "https://lowcoder.cloud/privacy", +"aboutUs": "https://lowcoder.cloud/about", +"changeLog": "https://github.com/lowcoder-org/lowcoder/releases", +"introVideo": "", +"devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", +"devNpmPluginText": "Come sviluppare un plugin npm", +"useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", +"eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", +"thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", +"thirdLibUrlText": "Utilizzare librerie di terze parti", +}, +"datasourceTutorial": { + ...en.datasourceTutorial, + +"mysql": "", +"mongodb": "", +"postgres": "", +"redis": "", +"es": "", +"smtp": "", +"clickHouse": "", +}, +"queryTutorial": { + ...en.queryTutorial, + +"js": "", +"transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", +"tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", +"dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", +}, +"customComponent": { + ...en.customComponent, + +"entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", +}, +"template": { + ...en.template, + +"cloneUrl": "/apps/template-import/", +}, +"lowcoderUrl": { + ...en.lowcoderUrl, + +"createIssue": "https://github.com/lowcoder-org/lowcoder/issues", +"discord": "https://discord.com/invite/qMG9uTmAx2", +}, +"iconScout": { + ...en.iconScout, + +"searchImage": "Ricerca immagine", +"searchAnimation": "Ricerca Animazione", +"searchIcon": "Icona di ricerca", +"noResults": "Nessun risultato trovato.", +"buySubscriptionTitle": "Sbloccare le attività premium", +"buySubscriptionContent": "Questa risorsa è un'esclusiva degli abbonati a Media Package. Abbonati a Media Package e scarica asset di alta qualità senza limiti!", +"buySubscriptionButton": "Iscriviti ora", +}, + +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/pt.ts b/client/packages/lowcoder/src/i18n/locales/pt.ts index 643ffda314..a4d094bb76 100644 --- a/client/packages/lowcoder/src/i18n/locales/pt.ts +++ b/client/packages/lowcoder/src/i18n/locales/pt.ts @@ -1,4031 +1,4844 @@ import { en } from "./en"; export const pt = { - ...en, - - "productName": "Lowcoder", - "productDesc": "Crie aplicações de software para sua empresa e clientes com pouquíssima experiência de programação. Lowcoder é uma excelente alternativa para Retool, Appsmith e Tooljet.", - "notSupportedBrowser": "Seu navegador atual pode ter problemas de compatibilidade. Para uma experiência melhor, por favor, utilize a última versão do Chrome.", - "create": "Crie", - "move": "Mover", - "addItem": "Adicionar", - "newItem": "Novo", - "copy": "Copiar", - "rename": "Renomear", - "delete": "Remover", - "deletePermanently": "Remover Permanentemente", - "remove": "Remover", - "recover": "Recuperar", - "edit": "Editar", - "view": "Ver", - "value": "Valor", - "data": "Dados", - "information": "Informações", - "success": "Sucesso", - "warning": "Aviso", - "error": "Erro", - "reference": "Referência", - "text": "Texto", - "basic": "Básico", - "label": "Rótulo", - "layout": "Disposição", - "color": "Cor", - "form": "Formulário", - "menu": "Menu", - "menuItem": "Item do Menu", - "ok": "OK", - "cancel": "Cancelar", - "finish": "Terminar", - "reset": "Resetar", - "icon": "Ícone", - "code": "Código", - "title": "Título", - "emptyContent": "Conteúdo em Branco", - "more": "Mais", - "search": "Pesquisar", - "back": "Voltar", - "accessControl": "Controle de Acesso", - "copySuccess": "Copiado com Sucesso", - "copyError": "Erro ao copiar", - "api": { - ...en.api, - - "publishSuccess": "Publicado com Sucesso", - "recoverFailed": "Falha ao Recuperar", - "needUpdate": "Sua versão está desatualizada. Por favor, atualize para a nova versão.", - }, - "codeEditor": { - ...en.codeEditor, - - "notSupportAutoFormat": "O editor de código atual não suporta formatação automática", - "fold": "Dobrar", - }, - "exportMethod": { - ...en.exportMethod, - - "setDesc": "Definir Propriedade: {property}", - "clearDesc": "Limpar Propriedade: {property}", - "resetDesc": "Resetar Propriedade: {property} ao Valor Padrão", - }, - "method": { - ...en.method, - - "focus": "Definir Foco", - "focusOptions": "Opções de Foco. Veja HTMLElement.focus()", - "blur": "Remover Foco", - "click": "Clicar", - "select": "Selecionar o Texto Inteiro", - "setSelectionRange": "Definit Posição de Início e Fim da Seleção de Texto", - "selectionStart": "Índice de base 0 do Primeiro Caractere Selecionado", - "selectionEnd": "Índice de base 0 do Caractere Selecionado Após o Último Caractere", - "setRangeText": "Substituir Faixa de Texto", - "replacement": "String a Inserir", - "replaceStart": "Índice baseado em 0 do primeiro caractere a ser substituído", - "replaceEnd": "Índice de caractere baseado em 0 após o último caractere a ser substituído", - }, - "errorBoundary": { - ...en.errorBoundary, - - "encounterError": "Carregamento do component falhou. Por favor, cheque sua configuração.", - "clickToReload": "Clique para recarregar", - "errorMsg": "Erro: ", - }, - "imgUpload": { - ...en.imgUpload, - - "notSupportError": "Somente suporta imagens do tipo {types}", - "exceedSizeError": "Tamanho da imagem não deve passar de {size}", - }, - "gridCompOperator": { - ...en.gridCompOperator, - - "notSupport": "Não suportado", - "selectAtLeastOneComponent": "Por favor, selecione pelo menos um componente", - "selectCompFirst": "Selecione componentes antes de copiar", - "noContainerSelected": "[Bug] Nenhum container selecionado", - "deleteCompsSuccess": "Removido com sucesso. Pressione {undoKey} para reverter.", - "deleteCompsTitle": "Remover Componentes", - "deleteCompsBody": "Tem certeza que deseja remover {compNum} componentes selecionados?", - "cutCompsSuccess": "Corte realizado com sucesso. Pressione {pasteKey} para colar, ou {undoKey} para desfazer.", - }, - "leftPanel": { - ...en.leftPanel, - - "queries": "Queries de Dados em seu Aplicativo", - "globals": "Variavies de Dados Globais", - "propTipsArr": "{num} Itens", - "propTips": "{num} Teclas", - "propTipArr": "{num} Item", - "propTip": "{num} Tecla", - "stateTab": "Estado", - "settingsTab": "Configurações", - "toolbarTitle": "Individualização", - "toolbarPreload": "Scripts e Estilos", - "components": "Componentes ativos", - "modals": "Modais Dentro do App", - "expandTip": "Clique para expandir os dados do componente {component}", - "collapseTip": "Clique para minimizar os dados do componente {component}", - "layers": "Camadas", - "activatelayers": "Usar camadas dinâmicas", - "selectedComponents": "Componentes selecionados...", - "displayComponents": "Controlar Visão", - "lockComponents": "Controlar Posição", - }, - "bottomPanel": { - ...en.bottomPanel, - - "title": "Consultas de Dados", - "run": "Executar", - "noSelectedQuery": "Nenhuma Consulta Selecionada", - "metaData": "Metadados da Fonte de Dados", - "noMetadata": "Nenhum Metadado Disponível", - "metaSearchPlaceholder": "Buscar Metadados", - "allData": "Todas as Tabelas", - }, - "rightPanel": { - ...en.rightPanel, - - "propertyTab": "Propriedades", - "noSelectedComps": "Nenhum Componente selecionado. Clique em um Componente para visualizar suas Propriedades.", - "createTab": "Inserir", - "searchPlaceHolder": "Buscar Componentes ou Módulos", - "uiComponentTab": "Componentes", - "extensionTab": "Extensões", - "modulesTab": "Módulos", - "moduleListTitle": "Módulos", - "pluginListTitle": "Plugins", - "emptyModules": "Os Módulos são Mikro-Apps reutilizáveis. Você pode incorporá-los em seu App.", - "searchNotFound": "Não consegue encontrar o componente certo?", - "emptyPlugins": "Nenhum Plugin Adicionado", - "contactUs": "Entre em Contato", - "issueHere": "aqui.", - }, - "prop": { - ...en.prop, - - "expand": "Expandir", - "columns": "Colunas", - "videokey": "Chave do Vídeo", - "rowSelection": "Seleção de Linha", - "toolbar": "Barra de Ferramentas", - "pagination": "Paginação", - "logo": "Logotipo", - "style": "Estilo", - "inputs": "Entradas", - "meta": "Metadados", - "data": "Dados", - "hide": "Ocultar", - "loading": "Carregando", - "disabled": "Desabilitado", - "placeholder": "Espaço Reservado", - "showClear": "Mostrar Botão Limpar", - "showSearch": "Pesquisável", - "defaultValue": "Valor Padrão", - "required": "Campo Obrigatório", - "readOnly": "Somente Leitura", - "readOnlyTooltip": "Componentes somente leitura parecem normais, mas não podem ser modificados.", - "minimum": "Mínimo", - "maximum": "Máximo", - "regex": "Regex", - "minLength": "Comprimento Mínimo", - "maxLength": "Comprimento Máximo", - "height": "Altura", - "width": "Largura", - "selectApp": "Selecionar Aplicativo", - "showCount": "Mostrar Contagem", - "textType": "Tipo de Texto", - "customRule": "Regra Personalizada", - "customRuleTooltip": "Uma string não vazia indica um erro; vazio ou nulo significa validação aprovada. Exemplo:", - "manual": "Manual", - "map": "Mapa", - "json": "JSON", - "use12Hours": "Usar Formato de 12 Horas", - "hourStep": "Passo de Hora", - "minuteStep": "Passo de Minuto", - "secondStep": "Passo de Segundo", - "minDate": "Data Mínima", - "maxDate": "Data Máxima", - "minTime": "Tempo Mínimo", - "maxTime": "Tempo Máximo", - "type": "Tipo", - "showLabel": "Mostrar Etiqueta", - "showHeader": "Mostrar Cabeçalho", - "showBody": "Mostrar Corpo", - "showSider": "Mostrar Lateral", - "innerSider": "Lateral Interna", - "showFooter": "Mostrar Rodapé", - "maskClosable": "Clique Fora para Fechar", - "toggleClose": "Ativar o botão Fechar", - "showMask": "Mostrar Máscara", - "textOverflow": "Overflow de Texto", - "scrollbar": "Mostrar Barras de Rolagem", - "siderScrollbar": "Mostrar Barras de Rolagem na Lateral", - "siderRight": "Mostrar lateral à Direita", - "siderWidth": "Largura da Lateral", - "siderWidthTooltip": "A largura da lateral suporta porcentagens (%) e pixels (px).", - "siderCollapsedWidth": "Largura da Lateral Recolhida", - "siderCollapsedWidthTooltip": "A largura recolhida da lateral suporta porcentagens (%) e pixels (px).", - "siderCollapsible": "Lateral Recolhível", - "siderCollapsed": "Lateral Recolhida", - "contentScrollbar": "Mostrar Barras de Rolagem no Conteúdo", - "appID": "ID do Aplicativo", - "showApp": "Mostrar um Aplicativo na área de conteúdo", - "showAppTooltip": "Você pode exibir aplicativos inteiros na área de conteúdo. Por favor, observe que para Módulos não oferecemos suporte a Entradas, Saídas, Eventos e Métodos.", - "baseURL": "URL Base da API", - "horizontal": "Horizontal", - "minHorizontalWidth": "Largura Horizontal Mínima", - "component": "Identificadores de Componentes Próprios", - "className": "Nome da Classe CSS", - "dataTestId": "ID Individual", - "preventOverwriting": "Evitar a substituição de estilos", - "color": "Cor", - "horizontalGridCells": "Células de grade horizontal", - "verticalGridCells": "Células de grade vertical", - "showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", - "showVerticalScrollbar": "Mostrar barra de rolagem vertical", - "timeZone": "Fuso horário", - }, - "autoHeightProp": { - ...en.autoHeightProp, - - "auto": "Automóvel", - "fixed": "Fixa", - }, - "textOverflowProp": { - ...en.textOverflowProp, - - "ellipsis": "Passar o rato", - "wrap": "Quebra de Linha", - }, - "labelProp": { - ...en.labelProp, - - "text": "Rótulo", - "tooltip": "Dica de Ferramenta", - "position": "Posição", - "collapse": "Colapso", - "left": "Esquerda", - "right": "Direita", - "top": "Topo", - "align": "Alinhamento", - "width": "Largura", - "widthTooltip": "A largura do rótulo suporta porcentagens (%) e pixels (px).", - }, - "eventHandler": { - ...en.eventHandler, - - "eventHandlers": "Manipuladores de Eventos", - "emptyEventHandlers": "Nenhum Manipulador de Eventos", - "incomplete": "Seleção Incompleta", - "inlineEventTitle": "Em {eventName}", - "event": "Evento", - "action": "Ação", - "noSelect": "Nenhuma Seleção", - "runQuery": "Executar uma Consulta de Dados", - "selectQuery": "Selecionar Consulta de Dados", - "controlComp": "Controlar um Componente", - "runScript": "Executar JavaScript", - "runScriptPlaceHolder": "Escreva o Código Aqui", - "component": "Componente", - "method": "Método", - "setTempState": "Definir um Valor de Estado Temporário", - "state": "Estado", - "triggerModuleEvent": "Disparar um Evento de Módulo", - "moduleEvent": "Evento de Módulo", - "goToApp": "Ir para Outro Aplicativo", - "queryParams": "Parâmetros de Consulta", - "hashParams": "Parâmetros de Hash", - "showNotification": "Mostrar uma Notificação", - "text": "Texto", - "level": "Nível", - "duration": "Duração", - "notifyDurationTooltip": "A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). A duração máxima é de {max} segundos", - "goToURL": "Abrir uma URL", - "openInNewTab": "Abrir em Nova Guia", - "copyToClipboard": "Copiar um valor para a Área de Transferência", - "copyToClipboardValue": "Valor", - "export": "Exportar Dados", - "exportNoFileType": "Nenhuma Seleção (Opcional)", - "fileName": "Nome do Arquivo", - "fileNameTooltip": "Inclua a extensão para especificar o tipo de arquivo, por exemplo, 'imagem.png'", - "fileType": "Tipo de Arquivo", - "condition": "Executar Somente Quando...", - "conditionTooltip": "Execute o manipulador de eventos apenas quando esta condição for avaliada como 'verdadeira'", - "debounce": "Atraso para", - "throttle": "Controlar a frequência para", - "slowdownTooltip": "Use atraso ou controle de frequência para controlar a frequência dos gatilhos de ação. A unidade de tempo pode ser 'ms' (milissegundo, padrão) ou 's' (segundo).", - "notHandledError": "Não Manipulado", - "currentApp": "Atual", - "inputEventHandlers": "Manipuladores de Eventos de Entrada", - "inputEventHandlersDesc": "Manipuladores de Eventos relacionados à Entrada do Usuário", - "buttonEventHandlers": "Manipuladores de Eventos de Botão", - "buttonEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques de Botão", - "changeEventHandlers": "Manipuladores de Eventos de Mudança", - "changeEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Valor", - "editedEventHandlers": "Manipuladores de Eventos de Edição", - "editedEventHandlersDesc": "Manipuladores de Eventos relacionados ao estado editado de Elementos", - "clickEventHandlers": "Manipuladores de Eventos de Clique", - "clickEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques", - "keyDownEventHandlers": "Manipuladores de Eventos de Pressionar Tecla", - "keyDownEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Pressionar Tecla", - "checkboxEventHandlers": "Manipuladores de Eventos de Caixa de Seleção", - "checkboxEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Caixa de Seleção", - "dragEventHandlers": "Manipuladores de Eventos de Arrastar", - "dragEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Arrastar e Soltar", - "elementEventHandlers": "Manipuladores de Eventos de Elemento", - "elementEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos Genéricos de Elemento de Dados", - "mediaEventHandlers": "Manipuladores de Eventos de Mídia", - "mediaEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mídia", - "scannerEventHandlers": "Manipuladores de Eventos de Scanner", - "scannerEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Scanner", - "chartEventHandlers": "Manipuladores de Eventos de Gráfico", - "chartEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Gráfico", - "geoMapEventHandlers": "Manipuladores de Eventos de Mapa Geográfico", - "geoMapEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mapa Geográfico", - "stepEventHandlers": "Manipuladores de Eventos de Etapa", - "stepEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Interface de Etapa", - "shareEventHandlers": "Manipuladores de Eventos de Compartilhamento", - "shareEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Compartilhamento", - "selectEventHandlers": "Manipuladores de Eventos de Seleção", - "selectEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Seleção", - "meetingEventHandlers": "Manipuladores de Eventos de Reunião", - "meetingEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Reunião", - "collaborationEventHandlers": "Manipuladores de Eventos de Colaboração", - "collaborationEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Colaboração", - "set": "Definir", - "clear": "Limpar", - "reset": "Redefinir", - "messageType": "Tipo de Mensagem", - "placement": "Posição", - "description": "Descrição", - }, - "event": { - ...en.event, - - "submit": "Enviar", - "submitDesc": "Dispara ao Enviar", - "change": "Alterar", - "changeDesc": "Dispara nas Mudanças de Valor", - "focus": "Foco", - "focusDesc": "Dispara no Foco", - "blur": "Desfocar", - "blurDesc": "Dispara no Desfoque", - "click": "Clique", - "clickDesc": "Dispara no Clique", - "doubleClick": "Clique Duplo", - "doubleClickDesc": "Dispara no Duplo Clique", - "rightClick": "Clique Direito", - "rightClickDesc": "Dispara no Clique Direito", - "keyDown": "Tecla Pressionada", - "keyDownDesc": "Dispara na Pressão de Tecla", - "select": "Selecionar", - "selectDesc": "Dispara na Seleção", - "checked": "Marcado", - "checkedDesc": "Dispara quando uma caixa de seleção está Marcada", - "unchecked": "Desmarcado", - "uncheckedDesc": "Dispara quando uma caixa de seleção está Desmarcada", - "drag": "Arrastar", - "dragDesc": "Dispara no Arrastar", - "drop": "Soltar", - "dropDesc": "Dispara no Soltar", - "open": "Abrir", - "openDesc": "Dispara na Abertura", - "mute": "Mudo", - "muteDesc": "Dispara no Silêncio de um Microfone", - "unmute": "Ativar Som", - "unmuteDesc": "Dispara no Ativar Som de um Microfone", - "showCamera": "Mostrar Câmera", - "showCameraDesc": "Dispara quando Mostrar Câmera está ligado", - "hideCamera": "Ocultar Câmera", - "hideCameraDesc": "Dispara quando Mostrar Câmera está desligado", - "shareScreen": "Compartilhar Tela", - "shareScreenDesc": "Dispara ao Compartilhar Tela", - "shareScreenEnd": "Fim do Compartilhamento de Tela", - "shareScreenEndDesc": "Dispara ao Finalizar o Compartilhamento de Tela", - "shareControl": "Compartilhar Controle", - "shareControlDesc": "Dispara ao Compartilhar Controle", - "shareControlEnd": "Fim do Compartilhamento de Controle", - "shareControlEndDesc": "Dispara ao Finalizar o Compartilhamento de Controle", - "shareContent": "Compartilhar Conteúdo", - "shareContentDesc": "Dispara ao Compartilhar Conteúdo", - "shareContentEnd": "Fim do Compartilhamento de Conteúdo", - "shareContentEndDesc": "Dispara ao Finalizar o Compartilhamento de Conteúdo", - "stopShare": "Parar Compartilhamento", - "stopShareDesc": "Dispara ao Parar o Compartilhamento", - "meetingStart": "Início da Reunião", - "meetingStartDesc": "Dispara no Início da Reunião", - "meetingEnd": "Fim da Reunião", - "meetingEndDesc": "Dispara no Fim da Reunião", - "meetingJoin": "Participar da Reunião", - "meetingJoinDesc": "Dispara ao Participar da Reunião", - "meetingLeave": "Sair da Reunião", - "meetingLeaveDesc": "Dispara ao Sair da Reunião", - "play": "Reproduzir", - "playDesc": "Dispara na Reprodução", - "pause": "Pausar", - "pauseDesc": "Dispara na Pausa", - "ended": "Finalizado", - "endedDesc": "Dispara ao Finalizar", - "step": "Passo", - "stepDesc": "Dispara no Passo", - "next": "Próximo", - "nextDesc": "Dispara no Próximo", - "finished": "Finalizado", - "finishedDesc": "Dispara ao Finalizar", - "saved": "Salvo", - "savedDesc": "Dispara quando um elemento é Salvo", - "edited": "Editado", - "editedDesc": "Dispara quando um elemento é Editado", - "geoMapMove": "Mover Mapa Geográfico", - "geoMapMoveDesc": "Dispara quando os Usuários movem o Mapa Geográfico", - "geoMapZoom": "Zoom no Mapa Geográfico", - "geoMapZoomDesc": "Dispara quando os Usuários dão Zoom no Mapa Geográfico", - "geoMapSelect": "Seleção no Mapa Geográfico", - "geoMapSelectDesc": "Dispara quando os Usuários selecionam um Elemento no Mapa Geográfico", - "scannerSuccess": "Sucesso do Scanner", - "scannerSuccessDesc": "Dispara quando um Scanner escaneia com sucesso", - "scannerError": "Erro do Scanner", - "scannerErrorDesc": "Dispara quando um Scanner falha ao escanear", - "chartZoom": "Zoom no Gráfico", - "chartZoomDesc": "Dispara no Zoom do Gráfico", - "chartHover": "Hover no Gráfico", - "chartHoverDesc": "Dispara no Hover do Gráfico", - "chartSelect": "Seleção no Gráfico", - "chartSelectDesc": "Dispara na Seleção do Gráfico", - "chartDeselect": "Desseleção no Gráfico", - "chartDeselectDesc": "Dispara na Desseleção do Gráfico", - "close": "Fechar", - "closeDesc": "Dispara no Fechar", - "parse": "Analisar", - "parseDesc": "Dispara na Análise", - "success": "Sucesso", - "successDesc": "Dispara no Sucesso", - "delete": "Excluir", - "deleteDesc": "Dispara na Exclusão", - "mention": "Menção", - "mentionDesc": "Dispara na Menção", - "search": "Pesquisar", - "searchDesc": "Dispara na Pesquisa", - "selectedChange": "Alteração de Seleção", - "selectedChangeDesc": "Dispara na Alteração de Seleção", - "clickExtra": "Clique na Ação", - "clickExtraDesc": "Dispara no Clique em Elemento Extra", - "start": "Iniciar", - "startDesc": "Dispara no Início", - "resume": "Continuar", - "resumeDesc": "Dispara ao Continuar", - "countdown": "Contagem Regressiva", - "countdownDesc": "Dispara quando a contagem regressiva termina", - "reset": "Reiniciar", - "resetDesc": "Dispara ao reiniciar o temporizador", - "refresh": "Atualizar", - "refreshDesc": "Dispara ao atualizar", - }, - "style": { - ...en.style, - - "boxShadowColor": "Cor da sombra", - "boxShadow": "Caixa de sombra", - "opacity": "Opacidade", - "animation": "Animação", - "animationIterationCount": "Contagem de Iterações de Animação", - "animationDelay": "Atraso da animação", - "animationDuration": "Duração da animação", - "resetTooltip": "Redefinir estilos. Limpe o campo de entrada para redefinir um estilo individual.", - "textColor": "Cor do Texto", - "contrastText": "Cor do Texto de Contraste", - "generated": "Gerado", - "customize": "Personalizar", - "staticText": "Texto Estático", - "accent": "Acento", - "validate": "Mensagem de Validação", - "border": "Cor da Borda", - "borderRadius": "Raio da Borda", - "borderWidth": "Largura da Borda", - "borderStyle": "Estilo da Borda", - "background": "Fundo", - "headerBackground": "Fundo do Cabeçalho", - "siderBackground": "Fundo do Sider", - "footerBackground": "Fundo do Rodapé", - "fill": "Preenchimento", - "track": "Rastreamento", - "links": "Ligações", - "thumb": "Polegar", - "thumbBorder": "Borda do Polegar", - "checked": "Marcado", - "unchecked": "Desmarcado", - "handle": "Alça", - "tags": "Etiquetas", - "tagsText": "Texto das Tags", - "multiIcon": "Ícone de Seleção Múltipla", - "tabText": "Texto da Aba", - "tabAccent": "Acento da Aba", - "checkedBackground": "Fundo do Marcado", - "uncheckedBackground": "Fundo do Desmarcado", - "uncheckedBorder": "Borda do Desmarcado", - "indicatorBackground": "Fundo do Indicador", - "tableCellText": "Texto da Célula", - "selectedRowBackground": "Fundo da Linha Selecionada", - "hoverRowBackground": "Fundo da Linha em Destaque", - "hoverBackground": "Fundo em Destaque", - "textTransform": "Transformação de Texto", - "textDecoration": "Decoração do Texto", - "alternateRowBackground": "Fundo Alternado da Linha", - "tableHeaderBackground": "Fundo do Cabeçalho da Tabela", - "tableHeaderText": "Texto do Cabeçalho da Tabela", - "toolbarBackground": "Fundo da Barra de Ferramentas", - "toolbarText": "Texto da Barra de Ferramentas", - "pen": "Caneta", - "footerIcon": "Ícone do Rodapé", - "tips": "Dicas", - "margin": "Margem", - "padding": "Preenchimento", - "marginLeft": "Margem à Esquerda", - "marginRight": "Margem à Direita", - "marginTop": "Margem Superior", - "marginBottom": "Margem Inferior", - "containerHeaderPadding": "Preenchimento do Cabeçalho do Contêiner", - "containerFooterPadding": "Preenchimento do Rodapé do Contêiner", - "containerSiderPadding": "Preenchimento do Sider do Contêiner", - "containerBodyPadding": "Preenchimento do Corpo do Contêiner", - "minWidth": "Largura Mínima", - "aspectRatio": "Proporção", - "text": "Texto", - "textSize": "Tamanho do Texto", - "textWeight": "Peso do Texto", - "fontFamily": "Família da Fonte", - "fontStyle": "Estilo da Fonte", - "backgroundImage": "Imagem de Fundo", - "backgroundImageRepeat": "Repetição da Imagem de Fundo", - "backgroundImageSize": "Tamanho da Imagem de Fundo", - "backgroundImagePosition": "Posição da Imagem de Fundo", - "backgroundImageOrigin": "Origem da Imagem de Fundo", - "headerBackgroundImage": "Imagem de Fundo do Cabeçalho", - "headerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Cabeçalho", - "headerBackgroundImageSize": "Tamanho da Imagem de Fundo do Cabeçalho", - "headerBackgroundImagePosition": "Posição da Imagem de Fundo do Cabeçalho", - "headerBackgroundImageOrigin": "Origem da Imagem de Fundo do Cabeçalho", - "footerBackgroundImage": "Imagem de Fundo do Rodapé", - "footerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Rodapé", - "footerBackgroundImageSize": "Tamanho da Imagem de Fundo do Rodapé", - "footerBackgroundImagePosition": "Posição da Imagem de Fundo do Rodapé", - "footerBackgroundImageOrigin": "Origem da Imagem de Fundo do Rodapé", - "rotation": "Rotação", - "alternateBackground": "Cor de fundo alternativa", - "headerText": "Cor do texto do cabeçalho", - "labelColor": "Cor da etiqueta", - "label": "Cor da etiqueta", - "lineHeight": "Altura da linha", - "subTitleColor": "Cor do subtítulo", - "titleText": "Título Cor", - "success": "Cor do sucesso", - "siderBackgroundImage": "Imagem de fundo do Sider", - "siderBackgroundImageRepeat": "Repetição da imagem de fundo do Sider", - "siderBackgroundImageSize": "Tamanho da imagem de fundo do Sider", - "siderBackgroundImagePosition": "Posição da imagem de fundo do Sider", - "siderBackgroundImageOrigin": "Origem da imagem de fundo do Sider", - "activeBackground": "Cor de fundo ativa", - "labelBackground": "Cor de fundo da etiqueta", - - "radiusTip": "Especifica o raio dos cantos do elemento. Exemplo: 5px, 50% ou 1em.", - "gapTip": "Especifica o espaçamento entre linhas e colunas em um contêiner de grade ou flex. Exemplo: 10px, 1rem ou 5%.", - "cardRadiusTip": "Define o raio dos cantos para componentes de cartão. Exemplo: 10px, 15px.", - "borderWidthTip": "Especifica a largura da borda do elemento. Exemplo: 1px, 0.5em ou fina.", - "borderStyleTip": "Define o estilo da borda. Exemplo: sólido, tracejado, pontilhado ou nenhum.", - "marginTip": "Define a margem externa ao redor de um elemento. Exemplo: 10px, 2em ou auto. Pode ser combinado: 0px 20px ou separado para 4 direções: 0px 1px 5px 2px.", - "directionTip": "Especifica a direção do layout. Exemplo: row, column ou row-reverse.", - "detailSizeTip": "Define o tamanho de detalhes específicos no layout. Exemplo: 10px, 2em ou 80%.", - "chartOpacityTip": "Especifica a opacidade do gráfico. Exemplo: 1 (opaco), 0.5 (50% transparente).", - "chartBoxShadowTip": "Define a sombra projetada pelo gráfico. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", - "chartBorderStyleTip": "Define o estilo da borda do gráfico. Exemplo: sólido, tracejado ou pontilhado.", - "chartBorderRadiusTip": "Especifica o raio dos cantos da borda do gráfico. Exemplo: 10px, 20%.", - "chartBorderWidthTip": "Especifica a largura da borda do gráfico. Exemplo: 2px, 0.5em.", - "chartTextSizeTip": "Especifica o tamanho da fonte do texto do gráfico. Exemplo: 16px, 1em, 120%.", - "chartTextWeightTip": "Especifica o peso da fonte do texto do gráfico. Exemplo: normal, negrito, ou 700.", - "chartFontFamilyTip": "Especifica a família da fonte para o texto do gráfico. Exemplo: Arial, Helvetica ou 'Times New Roman'.", - "chartFontStyleTip": "Especifica o estilo da fonte do texto do gráfico. Exemplo: normal, itálico ou oblíquo.", - "animationIterationCountTip": "Define quantas vezes uma animação deve ser executada. Exemplo: infinito, 1 ou 3.", - "opacityTip": "Define o nível de transparência do elemento. Exemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisível).", - "boxShadowColorTip": "Define a cor da sombra da caixa. Exemplo: rgba(0, 0, 0, 0.3), #FF5733.", - "chartBackgroundColorTip": "Define a cor de fundo do gráfico. Exemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", - "chartGradientColorTip": "Especifica as cores do gradiente para o fundo do gráfico. Exemplo: linear-gradient(to right, #ff7e5f, #feb47b).", - "chartShadowColorTip": "Especifica a cor da sombra do gráfico. Exemplo: rgba(0, 0, 0, 0.2), #333333.", - "chartBorderColorTip": "Define a cor da borda do gráfico. Exemplo: #000000, rgba(0, 0, 0, 0.5).", - "chartTextColorTip": "Define a cor do texto do gráfico. Exemplo: #333333, rgba(51, 51, 51, 1).", - "boxShadowTip": "Define a sombra projetada por um elemento. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", - "animationDelayTip": "Especifica o atraso antes do início da animação. Exemplo: 1s, 500ms, 0.", - "animationDurationTip": "Define a duração da animação. Exemplo: 2s, 3s, 500ms.", - "paddingTip": "Define o espaço interno dentro de um elemento. Exemplo: 10px, 2em, 5%. Pode ser combinado: 0px 20px ou separado para todas as 4 direções: 10px 21px 5px 20px.", - "containerHeaderPaddingTip": "Define o espaço interno para o cabeçalho do contêiner. Exemplo: 10px, 1rem.", - "containerSiderPaddingTip": "Define o espaço interno para a barra lateral do contêiner. Exemplo: 8px, 1em.", - "containerFooterPaddingTip": "Define o espaço interno para o rodapé do contêiner. Exemplo: 12px, 1rem.", - "containerBodyPaddingTip": "Define o espaço interno para o corpo do contêiner. Exemplo: 15px, 2em.", - "textSizeTip": "Especifica o tamanho da fonte do texto. Exemplo: 14px, 1.2em, 110%.", - "textWeightTip": "Define o peso da fonte do texto. Exemplo: normal, negrito, 400.", - "fontFamilyTip": "Especifica a família da fonte do texto. Exemplo: Arial, Verdana, 'Courier New'.", - "textDecorationTip": "Define a decoração do texto. Exemplo: sublinhado, riscado, nenhum.", - "textTransformTip": "Define a capitalização do texto. Exemplo: maiúsculas, minúsculas, capitalizado.", - "fontStyleTip": "Define o estilo da fonte do texto. Exemplo: normal, itálico, oblíquo.", - "backgroundImageTip": "Especifica a imagem de fundo de um elemento. Exemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", - "headerBackgroundImageTip": "Especifica a imagem de fundo para o cabeçalho. Exemplo: url('header.jpg').", - "footerBackgroundImageTip": "Especifica a imagem de fundo para o rodapé. Exemplo: url('footer.jpg').", - "backgroundImageRepeatTip": "Define como a imagem de fundo é repetida. Exemplo: no-repeat, repeat-x, repeat-y.", - "headerBackgroundImageRepeatTip": "Define como a imagem de fundo do cabeçalho é repetida. Exemplo: repeat-x, no-repeat.", - "footerBackgroundImageRepeatTip": "Define como a imagem de fundo do rodapé é repetida. Exemplo: repeat-y, no-repeat.", - "backgroundImageSizeTip": "Define o tamanho da imagem de fundo. Exemplo: cover, contain, 50% 50%.", - "backgroundImagePositionTip": "Define a posição da imagem de fundo. Exemplo: center, top right, 10% 20%.", - "backgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo. Exemplo: padding-box, border-box, content-box.", - "headerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do cabeçalho. Exemplo: padding-box, border-box, content-box.", - "footerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do rodapé. Exemplo: padding-box, border-box, content-box.", - "rotationTip": "Especifica o ângulo de rotação do elemento. Exemplo: 45deg, 90deg, -180deg.", - "lineHeightTip": "Define a altura de uma linha de texto. Exemplo: 1.5, 2, 120%." - - }, - "export": { - ...en.export, - - "hiddenDesc": "Se verdadeiro, o componente está oculto", - "disabledDesc": "Se verdadeiro, o componente está desativado e não interativo", - "visibleDesc": "Se verdadeiro, o componente é visível", - "inputValueDesc": "Valor atual da entrada", - "invalidDesc": "Indica se o valor é inválido", - "placeholderDesc": "Texto de espaço reservado quando nenhum valor está definido", - "requiredDesc": "Se verdadeiro, um valor válido é necessário", - "submitDesc": "Enviar Formulário", - "richTextEditorValueDesc": "Valor atual do Editor", - "richTextEditorReadOnlyDesc": "Se verdadeiro, o Editor está somente leitura", - "richTextEditorHideToolBarDesc": "Se verdadeiro, a barra de ferramentas está oculta", - "jsonEditorDesc": "Dados JSON atuais", - "sliderValueDesc": "Valor atualmente selecionado", - "sliderMaxValueDesc": "Valor máximo do controle deslizante", - "sliderMinValueDesc": "Valor mínimo do controle deslizante", - "sliderStartDesc": "Valor do ponto inicial selecionado", - "sliderEndDesc": "Valor do ponto final selecionado", - "ratingValueDesc": "Classificação atualmente selecionada", - "ratingMaxDesc": "Valor máximo de classificação", - "datePickerValueDesc": "Data atualmente selecionada", - "datePickerFormattedValueDesc": "Data selecionada formatada", - "datePickerTimestampDesc": "Carimbo de data/hora da data selecionada", - "dateRangeStartDesc": "Data de início do intervalo", - "dateRangeEndDesc": "Data de término do intervalo", - "dateRangeStartTimestampDesc": "Carimbo de data/hora da data de início", - "dateRangeEndTimestampDesc": "Carimbo de data/hora da data de término", - "dateRangeFormattedValueDesc": "Intervalo de datas formatado", - "dateRangeFormattedStartValueDesc": "Data de início formatada", - "dateRangeFormattedEndValueDesc": "Data de término formatada", - "timePickerValueDesc": "Hora atualmente selecionada", - "timePickerFormattedValueDesc": "Hora selecionada formatada", - "timeRangeStartDesc": "Hora de início do intervalo", - "timeRangeEndDesc": "Hora de término do intervalo", - "timeRangeFormattedValueDesc": "Intervalo de horas formatado", - "timeRangeFormattedStartValueDesc": "Hora de início formatada", - "timeRangeFormattedEndValueDesc": "Hora de término formatada", - "timeZone": "Fuso horário", - "timeZoneDesc": "Fuso horário da data selecionada", - }, - "validationDesc": { - ...en.validationDesc, - - "email": "Por favor, insira um endereço de e-mail válido", - "url": "Por favor, insira uma URL válida", - "regex": "Por favor, corresponda ao padrão especificado", - "maxLength": "Muitos caracteres, atual: {length}, máximo: {maxLength}", - "minLength": "Não há caracteres suficientes, atual: {length}, mínimo: {minLength}", - "maxValue": "O valor excede o máximo, atual: {value}, máximo: {max}", - "minValue": "O valor está abaixo do mínimo, atual: {value}, mínimo: {min}", - "maxTime": "O tempo excede o máximo, atual: {time}, máximo: {maxTime}", - "minTime": "O tempo está abaixo do mínimo, atual: {time}, mínimo: {minTime}", - "maxDate": "A data excede o máximo, atual: {date}, máximo: {maxDate}", - "minDate": "A data está abaixo do mínimo, atual: {date}, mínimo: {minDate}", - }, - "query": { - ...en.query, - - "noQueries": "Não há consultas de dados disponíveis.", - "queryTutorialButton": "Ver {value} documentos", - "datasource": "Suas Fontes de Dados", - "newDatasource": "Nova Fonte de Dados", - "generalTab": "Geral", - "notificationTab": "Notificação", - "advancedTab": "Avançado", - "showFailNotification": "Mostrar Notificação em Caso de Falha", - "failCondition": "Condições de Falha", - "failConditionTooltip1": "Personalize as condições de falha e as notificações correspondentes.", - "failConditionTooltip2": "Se qualquer condição retornar verdadeira, a consulta será marcada como falha e acionará a notificação correspondente.", - "showSuccessNotification": "Mostrar Notificação em Caso de Sucesso", - "successMessageLabel": "Mensagem de Sucesso", - "successMessage": "Consulta Bem-sucedida", - "notifyDuration": "Duração", - "notifyDurationTooltip": "Duração da notificação. A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). O valor padrão é {default}s. O máximo é {max}s.", - "successMessageWithName": "{name} consulta bem-sucedida", - "failMessageWithName": "{name} consulta falhou: {result}", - "showConfirmationModal": "Mostrar Modal de Confirmação Antes de Executar", - "confirmationMessageLabel": "Mensagem de Confirmação", - "confirmationMessage": "Tem certeza de que deseja executar esta consulta de dados?", - "newQuery": "Nova Consulta de Dados", - "newFolder": "Nova Pasta", - "recentlyUsed": "Recentemente Utilizados", - "folder": "Pasta", - "folderNotEmpty": "A pasta não está vazia", - "dataResponder": "Respondedor de Dados", - "tempState": "Estado Temporário", - "transformer": "Transformador", - "quickRestAPI": "Consulta REST", - "quickStreamAPI": "Consulta de Fluxo", - "quickGraphql": "Consulta GraphQL", - "lowcoderAPI": "API Lowcoder", - "executeJSCode": "Executar Código JavaScript", - "importFromQueryLibrary": "Importar da Biblioteca de Consultas", - "importFromFile": "Importar de Arquivo", - "triggerType": "Disparado quando...", - "triggerTypeAuto": "Quando as entradas mudam ou após o carregamento da aplicação (página)", - "triggerTypePageLoad": "Após o carregamento da aplicação (página)", - "triggerTypeManual": "Somente quando você aciona manualmente", - "triggerTypeInputChange": "Quando as entradas mudam", - "triggerTypeQueryExec": "Após a execução da consulta", - "triggerTypeTimeout": "Após a aplicação (página) carregar e o tempo limite", - "delayTime": "Tempo de atraso", - "chooseDataSource": "Escolha uma Fonte de Dados", - "method": "Método", - "updateExceptionDataSourceTitle": "Atualizar Fonte de Dados com Falha", - "updateExceptionDataSourceContent": "Atualize a seguinte consulta com a mesma fonte de dados com falha:", - "update": "Atualizar", - "disablePreparedStatement": "Desativar Declarações Preparadas", - "disablePreparedStatementTooltip": "Desativar declarações preparadas pode gerar SQL dinâmico, mas aumenta o risco de injeção de SQL", - "timeout": "Tempo Limite Após", - "timeoutTooltip": "Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor padrão: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", - "periodic": "Executar Esta Consulta de Dados Periodicamente", - "periodicTime": "Período", - "periodicTimeTooltip": "Período entre execuções sucessivas. Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor mínimo: 100ms. A execução periódica é desativada para valores abaixo de 100ms. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", - "cancelPrevious": "Ignorar Resultados de Execuções Anteriores Não Concluídas", - "cancelPreviousTooltip": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se elas não foram concluídas, e essas execuções ignoradas não acionarão a lista de eventos da consulta.", - "dataSourceStatusError": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se as execuções anteriores não foram concluídas, e as execuções ignoradas não acionarão a lista de eventos da consulta.", - "success": "Sucesso", - "fail": "Falha", - "successDesc": "Acionado Quando a Execução é Bem-sucedida", - "failDesc": "Acionado Quando a Execução Falha", - "fixedDelayError": "Consulta Não Executada", - "execSuccess": "Execução Bem-sucedida", - "execFail": "Execução Falhou", - "execIgnored": "Os Resultados Dessa Consulta Foram Ignorados", - "deleteSuccessMessage": "Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer", - "dataExportDesc": "Dados Obtidos pela Consulta Atual", - "codeExportDesc": "Código de Status da Consulta Atual", - "successExportDesc": "Se a Consulta Atual Foi Executada com Sucesso", - "messageExportDesc": "Informação Retornada pela Consulta Atual", - "extraExportDesc": "Outros Dados na Consulta Atual", - "isFetchingExportDesc": "A Consulta Atual Está na Requisição", - "runTimeExportDesc": "Tempo de Execução da Consulta Atual (ms)", - "latestEndTimeExportDesc": "Última Hora de Execução", - "triggerTypeExportDesc": "Tipo de Gatilho", - "chooseResource": "Escolha um Recurso", - "createDataSource": "Criar uma Nova Fonte de Dados", - "editDataSource": "Editar", - "datasourceName": "Nome", - "datasourceNameRuleMessage": "Por Favor, Insira um Nome para a Fonte de Dados", - "generalSetting": "Configurações Gerais", - "advancedSetting": "Configurações Avançadas", - "port": "Porta", - "portRequiredMessage": "Por Favor, Insira uma Porta", - "portErrorMessage": "Por Favor, Insira uma Porta Correta", - "connectionType": "Tipo de Conexão", - "regular": "Regular", - "host": "Anfitrião", - "hostRequiredMessage": "Por Favor, Insira um Nome de Domínio de Host ou Endereço IP", - "userName": "Nome de Usuário", - "password": "Senha", - "encryptedServer": "-------- Criptografado no Lado do Servidor --------", - "uriRequiredMessage": "Por Favor, Insira uma URI", - "urlRequiredMessage": "Por Favor, Insira uma URL", - "uriErrorMessage": "Por Favor, Insira uma URI Correta", - "urlErrorMessage": "Por Favor, Insira uma URL Correta", - "httpRequiredMessage": "Por Favor, Insira http:// ou https://", - "databaseName": "Nome do Banco de Dados", - "databaseNameRequiredMessage": "Por Favor, Insira um Nome de Banco de Dados", - "useSSL": "Usar SSL", - "userNameRequiredMessage": "Por Favor, Insira Seu Nome", - "passwordRequiredMessage": "Por Favor, Insira Sua Senha", - "authentication": "Autenticação", - "authenticationType": "Tipo de Autenticação", - "sslCertVerificationType": "Verificação de Certificado SSL", - "sslCertVerificationTypeDefault": "Verificar Certificado CA", - "sslCertVerificationTypeSelf": "Verificar Certificado Autoassinado", - "sslCertVerificationTypeDisabled": "Desativado", - "selfSignedCert": "Certificado Autoassinado", - "selfSignedCertRequireMsg": "Por Favor, Insira Seu Certificado", - "enableTurnOffPreparedStatement": "Ativar Alternância de Declarações Preparadas para Consultas", - "enableTurnOffPreparedStatementTooltip": "Você pode ativar ou desativar declarações preparadas na guia Avançado da consulta", - "serviceName": "Nome do Serviço", - "serviceNameRequiredMessage": "Por Favor, Insira o Nome do Seu Serviço", - "useSID": "Usar SID", - "connectSuccessfully": "Conexão Bem-sucedida", - "saveSuccessfully": "Salvo com Sucesso", - "database": "Banco de Dados", - "cloudHosting": "Lowcoder hospedado na nuvem não pode acessar serviços locais usando 127.0.0.1 ou localhost. Tente se conectar a fontes de dados de rede pública ou use um proxy reverso para serviços privados.", - "notCloudHosting": "Para implantação hospedada em contêineres, o Lowcoder usa redes bridge, portanto, 127.0.0.1 e localhost são inválidos para endereços de host. Para acessar fontes de dados de máquina local, consulte", - "howToAccessHostDocLink": "Como Acessar API/Banco de Dados do Host", - "returnList": "Retornar", - "chooseDatasourceType": "Escolha o Tipo de Fonte de Dados", - "viewDocuments": "Ver Documentos", - "testConnection": "Testar Conexão", - "save": "Salvar", - "whitelist": "Lista de Permissões", - "whitelistTooltip": "Adicione os endereços IP do Lowcoder à lista de permissões da sua fonte de dados conforme necessário.", - "address": "Endereço: ", - "nameExists": "O nome {name} já existe", - "jsQueryDocLink": "Sobre Consulta JavaScript", - "dynamicDataSourceConfigLoadingText": "Carregando configuração extra da fonte de dados...", - "dynamicDataSourceConfigErrText": "Falha ao carregar configuração extra da fonte de dados.", - "retry": "Tentar Novamente", - "categoryDatabase": "Banco de Dados", - "categoryBigdata": "Big Data", - "categoryAi": "IA", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Desenvolvimento de Aplicativos", - "categoryWorkflow": "Fluxo de Trabalho", - "categoryMessaging": "Mensagens", - "categoryAssets": "Ativos e Armazenamento", - "categoryProjectManagement": "Gerenciamento de Projetos", - "categoryCrm": "CRM", - "categoryEcommerce": "Comércio Eletrônico", - "categoryWebscrapers": "Raspadores Web & Open Data", - "categoryDocumentHandling": "Geração de Relatórios e Documentos", - "categoryRPA": "Automação de Processos Robóticos", - "componentsUsingQueryTitle": "Uso da Consulta", - "componentsUsingQuery": "Onde esta consulta está em uso", - "variables": "Variáveis" - }, - "sqlQuery": { - ...en.sqlQuery, - - "keyValuePairs": "Pares Chave-Valor", - "object": "Objeto", - "allowMultiModify": "Permitir Modificação Múltipla de Linhas", - "allowMultiModifyTooltip": "Se selecionado, todas as linhas que atendem às condições serão operadas. Caso contrário, apenas a primeira linha que atende às condições será operada.", - "array": "Arranjo", - "insertList": "Inserir Lista", - "insertListTooltip": "Valores inseridos quando eles não existem", - "filterRule": "Regra de Filtro", - "updateList": "Atualizar Lista", - "updateListTooltip": "Valores atualizados conforme existem podem ser substituídos pelos mesmos valores da lista de inserção", - "sqlMode": "Modo SQL", - "guiMode": "Modo GUI", - "operation": "Operação", - "insert": "Inserir", - "upsert": "Inserir, mas Atualizar em Caso de Conflito", - "update": "Atualizar", - "delete": "Excluir", - "bulkInsert": "Inserção em Lote", - "bulkUpdate": "Atualização em Lote", - "table": "Tabela", - "primaryKeyColumn": "Coluna Chave Primária", - }, - "EsQuery": { - ...en.EsQuery, - - "rawCommand": "Comando Bruto", - "queryTutorialButton": "Ver Documentos da API do Elasticsearch", - "request": "Pedido", - }, - "googleSheets": { - ...en.googleSheets, - - "rowIndex": "Índice da Linha", - "spreadsheetId": "ID da Planilha", - "sheetName": "Nome da Planilha", - "readData": "Ler Dados", - "appendData": "Anexar Linha", - "updateData": "Atualizar Linha", - "deleteData": "Excluir Linha", - "clearData": "Limpar Linha", - "serviceAccountRequireMessage": "Por favor, insira sua Conta de Serviço", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Ordenar", - "sortPlaceholder": "Nome", - }, - "queryLibrary": { - ...en.queryLibrary, - - "export": "Exportar para JSON", - "noInput": "A Consulta Atual Não Possui Entrada", - "inputName": "Nome", - "inputDesc": "Descrição", - "emptyInputs": "Sem Entradas", - "clickToAdd": "Adicionar", - "chooseQuery": "Escolher Consulta", - "viewQuery": "Visualizar Consulta", - "chooseVersion": "Escolher Versão", - "latest": "Mais Recente", - "publish": "Publicar", - "historyVersion": "Versão Histórica", - "deleteQueryLabel": "Excluir Consulta", - "deleteQueryContent": "A consulta não pode ser recuperada após a exclusão. Excluir a consulta?", - "run": "Executar", - "readOnly": "Somente Leitura", - "exit": "Sair", - "recoverAppSnapshotContent": "Restaurar a consulta atual para a versão {version}", - "searchPlaceholder": "Pesquisar Consulta", - "allQuery": "Todas as Consultas", - "deleteQueryTitle": "Excluir Consulta", - "unnamed": "Sem Nome", - "publishNewVersion": "Publicar Nova Versão", - "publishSuccess": "Publicado com Sucesso", - "version": "Versão", - "desc": "Descrição", - }, - "snowflake": { - ...en.snowflake, - - "accountIdentifierTooltip": "Ver ", - "extParamsTooltip": "Configurar Parâmetros de Conexão Adicionais", - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - - "queryOrgUsers": "Consultar Usuários do Espaço de Trabalho", - }, - "redisQuery": { - ...en.redisQuery, - - "rawCommand": "Comando Bruto", - "command": "Comando", - "queryTutorial": "Visualizar Documentos de Comandos do Redis", - }, - "httpQuery": { - ...en.httpQuery, - - "bodyFormDataTooltip": "Se {type} for selecionado, o formato do valor deve ser {object}. Exemplo: {example}", - "text": "Texto", - "file": "Arquivo", - "extraBodyTooltip": "As chaves em Corpo Extra serão anexadas ao corpo com tipos JSON ou de Dados de Formulário", - "forwardCookies": "Encaminhar Cookies", - "forwardAllCookies": "Encaminhar Todos os Cookies", - }, - "smtpQuery": { - ...en.smtpQuery, - - "attachment": "Anexo", - "attachmentTooltip": "Pode ser usado com o componente de envio de arquivo, os dados precisam ser convertidos para:", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Remetente", - "recipient": "Destinatário", - "carbonCopy": "Cópia Carbono", - "blindCarbonCopy": "Cópia Carbono Oculta", - "subject": "Assunto", - "content": "Conteúdo", - "contentTooltip": "Suporta texto de entrada ou HTML", - }, - "uiCompCategory": { - ...en.uiCompCategory, - - "dashboards": "Dashboards e Relatórios", - "layout": "Layout e Navegação", - "forms": "Coleta de Dados e Formulários", - "collaboration": "Reuniões e Colaboração", - "projectmanagement": "Gerenciamento de Projetos", - "scheduling": "Calendário e Agendamento", - "documents": "Gerenciamento de Documentos e Arquivos", - "itemHandling": "Manipulação de Itens e Assinaturas", - "multimedia": "Multimídia e Animação", - "integration": "Integração e Extensão", - }, - "uiComp": { - ...en.uiComp, - - "autoCompleteCompName": "Auto Completar", - "autoCompleteCompDesc": "Um campo de entrada que fornece sugestões enquanto você digita, melhorando a experiência e a precisão do usuário.", - "autoCompleteCompKeywords": "sugestões, auto completar, digitação, entrada", - "inputCompName": "Entrada de Texto", - "inputCompDesc": "Um campo de entrada de texto básico que permite aos usuários inserir e editar texto.", - "inputCompKeywords": "texto, entrada, campo, editar", - "textAreaCompName": "Área de Texto", - "textAreaCompDesc": "Uma entrada de texto de várias linhas para conteúdo de formulário mais longo, como comentários ou descrições.", - "textAreaCompKeywords": "multilinha, área de texto, entrada, texto", - "passwordCompName": "Senha", - "passwordCompDesc": "Um campo seguro para entrada de senha, ocultando os caracteres para privacidade.", - "passwordCompKeywords": "senha, segurança, entrada, oculto", - "richTextEditorCompName": "Editor de Texto Rico", - "richTextEditorCompDesc": "Um editor de texto avançado que oferece opções de formatação ricas, como negrito, itálico e listas.", - "richTextEditorCompKeywords": "editor, texto, formatação, conteúdo rico", - "numberInputCompName": "Entrada Numérica", - "numberInputCompDesc": "Um campo específico para entrada numérica, com controles para incrementar e decrementar valores.", - "numberInputCompKeywords": "número, entrada, incrementar, decrementar", - "sliderCompName": "Controle Deslizante", - "sliderCompDesc": "Um componente gráfico deslizante para selecionar um valor ou intervalo dentro de uma escala definida.", - "sliderCompKeywords": "controle deslizante, intervalo, entrada, gráfico", - "rangeSliderCompName": "Controle Deslizante de Faixa", - "rangeSliderCompDesc": "Um controle deslizante com dois manipuladores para selecionar um intervalo de valores, útil para filtrar ou definir limites.", - "rangeSliderCompKeywords": "faixa, controle deslizante, manipulador duplo, filtro", - "ratingCompName": "Avaliação", - "ratingCompDesc": "Um componente para capturar avaliações do usuário, exibidas como estrelas.", - "ratingCompKeywords": "avaliação, estrelas, feedback, entrada", - "switchCompName": "Interruptor", - "switchCompDesc": "Um interruptor de alternância para decisões de ligar/desligar ou sim/não.", - "switchCompKeywords": "alternar, interruptor, ligar/desligar, controle", - "selectCompName": "Selecionar", - "selectCompDesc": "Um menu suspenso para selecionar de uma lista de opções.", - "selectCompKeywords": "menu suspenso, selecionar, opções, menu", - "multiSelectCompName": "Seleção Múltipla", - "multiSelectCompDesc": "Um componente que permite a seleção de vários itens em uma lista suspensa.", - "multiSelectCompKeywords": "seleção múltipla, múltiplo, menu suspenso, escolhas", - "cascaderCompName": "Cascata", - "cascaderCompDesc": "Um menu suspenso multinível para seleção de dados hierárquicos, como selecionar uma localização.", - "cascaderCompKeywords": "cascata, hierárquico, menu suspenso, níveis", - "checkboxCompName": "Caixa de Seleção", - "checkboxCompDesc": "Uma caixa de seleção padrão para opções que podem ser selecionadas ou desmarcadas.", - "checkboxCompKeywords": "caixa de seleção, opções, selecionar, alternar", - "radioCompName": "Botão de Rádio", - "radioCompDesc": "Botões de rádio para selecionar uma opção de um conjunto, onde apenas uma escolha é permitida.", - "radioCompKeywords": "botão de rádio, seleção, escolha única", - "segmentedControlCompName": "Controle Segmentado", - "segmentedControlCompDesc": "Um controle com opções segmentadas para alternar rapidamente entre várias escolhas.", - "segmentedControlCompKeywords": "segmentado, controle, alternar, opções", - "stepControlCompName": "Controle de Etapas", - "stepControlCompDesc": "Um controle com opções de etapas para oferecer etapas guiadas visualmente para aplicativos como formulários ou assistentes.", - "stepControlCompKeywords": "etapas, controle, alternar, opções", - "fileUploadCompName": "Upload de Arquivo", - "fileUploadCompDesc": "Um componente para fazer upload de arquivos, com suporte para arrastar e soltar e seleção de arquivos.", - "fileUploadCompKeywords": "arquivo, upload, arrastar e soltar, selecionar", - "dateCompName": "Data", - "dateCompDesc": "Um componente seletor de datas para selecionar datas a partir de uma interface de calendário.", - "dateCompKeywords": "data, seletor, calendário, selecionar", - "dateRangeCompName": "Intervalo de Datas", - "dateRangeCompDesc": "Um componente para selecionar um intervalo de datas, útil para sistemas de reserva ou filtros.", - "dateRangeCompKeywords": "intervalo de datas, selecionar, reserva, filtro", - "timeCompName": "Hora", - "timeCompDesc": "Um componente de seleção de hora para escolher horas específicas do dia.", - "timeCompKeywords": "hora, seletor, selecionar, relógio", - "timeRangeCompName": "Intervalo de Horário", - "timeRangeCompDesc": "Um componente para selecionar um intervalo de tempo, frequentemente usado em aplicativos de agendamento.", - "timeRangeCompKeywords": "intervalo de tempo, selecionar, agendamento, duração", - "buttonCompName": "Botão de Formulário", - "buttonCompDesc": "Um componente de botão versátil para enviar formulários, acionar ações ou navegar.", - "buttonCompKeywords": "botão, enviar, ação, navegar", - "meetingControlCompName": "Botão de Ícone", - "meetingCompDesc": "Um botão para controlar funções como iniciar, encerrar, silenciar ou compartilhar.", - "meetingCompKeywords": "controle, botão, iniciar, encerrar", - "linkCompName": "Ligação a", - "linkCompDesc": "Um componente de exibição de hyperlink para navegação ou vinculação a recursos externos.", - "linkCompKeywords": "link, hyperlink, navegação, externo", - "scannerCompName": "Scanner", - "scannerCompDesc": "Um componente para digitalizar códigos de barras, códigos QR e outros dados semelhantes.", - "scannerCompKeywords": "scanner, código de barras, código QR, digitalizar", - "dropdownCompName": "Menu Suspenso", - "dropdownCompDesc": "Um menu suspenso para exibir de forma compacta uma lista de opções.", - "dropdownCompKeywords": "menu suspenso, menu, opções, selecionar", - "toggleButtonCompName": "Botão de Alternância", - "toggleButtonCompDesc": "Um botão que pode alternar entre dois estados ou opções.", - "toggleButtonCompKeywords": "alternar, botão, mudar, estado", - "textCompName": "Exibição de Texto", - "textCompDesc": "Um componente simples para exibir conteúdo de texto estático ou dinâmico, incluindo formatação Markdown.", - "textCompKeywords": "texto, exibição, estático, dinâmico", - "tableCompName": "Tabela", - "tableCompDesc": "Um componente de tabela rico para exibir dados em um formato de tabela estruturada, com opções de ordenação e filtragem, exibição de dados em árvore e linhas extensíveis.", - "tableCompKeywords": "tabela, dados, ordenação, filtragem", - "imageCompName": "Imagem", - "imageCompDesc": "Um componente para exibir imagens, com suporte a vários formatos baseados em URI ou dados Base64.", - "imageCompKeywords": "imagem, exibição, mídia, Base64", - "progressCompName": "Progresso", - "progressCompDesc": "Um indicador visual de progresso, geralmente usado para mostrar o status de conclusão de uma tarefa.", - "progressCompKeywords": "progresso, indicador, status, tarefa", - "progressCircleCompName": "Círculo de Progresso", - "progressCircleCompDesc": "Um indicador de progresso circular, frequentemente usado para estados de carregamento ou tarefas com limite de tempo.", - "progressCircleCompKeywords": "círculo, progresso, indicador, carregamento", - "fileViewerCompName": "Visualizador de Arquivos", - "fileViewerCompDesc": "Um componente para visualizar vários tipos de arquivos, incluindo documentos e imagens.", - "fileViewerCompKeywords": "arquivo, visualizador, documento, imagem", - "dividerCompName": "Divisor", - "dividerCompDesc": "Um componente visual de divisão, usado para separar conteúdo ou seções em um layout.", - "dividerCompKeywords": "divisor, separador, layout, design", - "qrCodeCompName": "Código QR", - "qrCodeCompDesc": "Um componente para exibir códigos QR, útil para digitalização rápida e transferência de informações.", - "qrCodeCompKeywords": "código QR, digitalização, código de barras, informação", - "formCompName": "Formulário", - "formCompDesc": "Um componente contêiner para construir formulários estruturados com vários tipos de entrada.", - "formCompKeywords": "formulário, entrada, contêiner, estrutura", - "jsonSchemaFormCompName": "Formulário de Esquema JSON", - "jsonSchemaFormCompDesc": "Um componente de formulário dinâmico gerado com base em um esquema JSON.", - "jsonSchemaFormCompKeywords": "JSON, esquema, formulário, dinâmico", - "containerCompName": "Contêiner", - "containerCompDesc": "Um contêiner de uso geral para layout e organização de elementos de IU.", - "containerCompKeywords": "contêiner, layout, organização, IU", - "floatTextContainerCompName": "Contêiner de Texto Flutuante", - "floatTextContainerCompDesc": "Componente de Contêiner de Texto Flutuante", - "floatTextContainerCompKeywords": "contêiner, layout, texto, fluxo", - "collapsibleContainerCompName": "Contêiner Dobrável", - "collapsibleContainerCompDesc": "Um contêiner que pode ser expandido ou recolhido, ideal para gerenciar a visibilidade do conteúdo.", - "collapsibleContainerCompKeywords": "dobrável, contêiner, expandir, recolher", - "tabbedContainerCompName": "Contêiner com Abas", - "tabbedContainerCompDesc": "Um contêiner com navegação em abas para organizar o conteúdo em painéis separados.", - "tabbedContainerCompKeywords": "com abas, contêiner, navegação, painéis", - "pageLayoutCompName": "Layout de Página", - "pageLayoutCompDesc": "Um contêiner que oferece criar um layout com áreas de cabeçalho, lateral, rodapé e conteúdo principal", - "pageLayoutCompKeywords": "layout, contêiner, navegação, páginas", - "modalCompName": "Modal", - "modalCompDesc": "Um componente de modal pop-up para exibir conteúdo, alertas ou formulários em foco.", - "modalCompKeywords": "modal, pop-up, alerta, formulário", - "listViewCompName": "Visualização de Lista", - "listViewCompDesc": "Um componente para apresentar uma lista de itens ou dados, onde pode colocar outros componentes. Como um repetidor.", - "listViewCompKeywords": "lista, ver, exibir, repetidor", - "gridCompName": "Grade", - "gridCompDesc": "Um componente de grade flexível para criar layouts estruturados com linhas e colunas como uma extensão ao componente de Visualização de Lista.", - "gridCompKeywords": "grade, layout, linhas, colunas", - "navigationCompName": "Navegação", - "navigationCompDesc": "Um componente de navegação para criar menus, trilhas de navegação ou abas para navegação no site.", - "navigationCompKeywords": "navegação, menu, trilhas de navegação, abas", - "iframeCompName": "IFrame", - "iframeCompDesc": "Um componente de quadro inline para incorporar páginas da web e aplicativos externos ou conteúdo dentro do aplicativo.", - "iframeCompKeywords": "iframe, incorporar, página da web, conteúdo", - "customCompName": "Componente Personalizado", - "customCompDesc": "Um componente flexível e programável para criar elementos de IU exclusivos e definidos pelo usuário, adaptados às suas necessidades específicas.", - "customCompKeywords": "personalizado, definido pelo usuário, flexível, programável", - "moduleCompName": "Módulo", - "moduleCompDesc": "Use Módulos para criar Micro-Apps projetadas para encapsular funcionalidades ou recursos específicos. Os módulos podem então ser incorporados e reutilizados em todos os aplicativos.", - "moduleCompKeywords": "módulo, micro-app, funcionalidade, reutilizável", - "jsonExplorerCompName": "Explorador JSON", - "jsonExplorerCompDesc": "Um componente para explorar visualmente e interagir com estruturas de dados JSON.", - "jsonExplorerCompKeywords": "JSON, explorador, dados, estrutura", - "jsonEditorCompName": "Editor JSON", - "jsonEditorCompDesc": "Um componente editor para criar e modificar dados JSON com validação e destaque de sintaxe.", - "jsonEditorCompKeywords": "JSON, editor, modificar, validar", - "treeCompName": "Árvore", - "treeCompDesc": "Um componente de estrutura de árvore para exibir dados hierárquicos, como sistemas de arquivos ou organogramas.", - "treeCompKeywords": "árvore, hierárquico, dados, estrutura", - "treeSelectCompName": "Seleção de Árvore", - "treeSelectCompDesc": "Um componente de seleção que apresenta opções em um formato de árvore hierárquica, permitindo seleções organizadas e aninhadas.", - "treeSelectCompKeywords": "árvore, selecionar, hierárquica, aninhada", - "audioCompName": "Áudio", - "audioCompDesc": "Um componente para incorporar conteúdo de áudio, com controles para reprodução e ajuste de volume.", - "audioCompKeywords": "áudio, reprodução, som, música", - "videoCompName": "Vídeo", - "videoCompDesc": "Um componente multimídia para incorporar e reproduzir conteúdo de vídeo, com suporte para vários formatos.", - "videoCompKeywords": "vídeo, multimídia, reprodução, incorporar", - "drawerCompName": "Gaveta", - "drawerCompDesc": "Um componente de painel deslizante que pode ser usado para navegação adicional ou exibição de conteúdo, geralmente surgindo da borda da tela.", - "drawerCompKeywords": "gaveta, deslizante, painel, navegação", - "chartCompName": "Gráfico", - "chartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e diagramas.", - "chartCompKeywords": "gráfico, diagrama, dados, visualização", - "carouselCompName": "Carrossel de Imagens", - "carouselCompDesc": "Um componente de carrossel rotativo para exibir imagens, banners ou slides de conteúdo.", - "carouselCompKeywords": "carrossel, imagens, rotação, destaque", - "imageEditorCompName": "Editor de Imagens", - "imageEditorCompDesc": "Um componente interativo para edição e manipulação de imagens, oferecendo várias ferramentas e filtros.", - "imageEditorCompKeywords": "imagem, editor, manipular, ferramentas", - "mermaidCompName": "Gráfico Mermaid", - "mermaidCompDesc": "Um componente para renderizar diagramas complexos e fluxogramas com base na sintaxe Mermaid.", - "mermaidCompKeywords": "mermaid, gráficos, diagramas, fluxogramas", - "calendarCompName": "Calendário", - "calendarCompDesc": "Um componente de calendário para exibir datas e eventos, com opções para visualizações mensais, semanais ou diárias.", - "calendarCompKeywords": "calendário, datas, eventos, agendamento", - "signatureCompName": "Assinatura", - "signatureCompDesc": "Um componente para capturar assinaturas digitais, útil para processos de aprovação e verificação.", - "signatureCompKeywords": "assinatura, digital, aprovação, verificação", - "jsonLottieCompName": "Animação Lottie", - "jsonLottieCompDesc": "Um componente para exibir animações Lottie, fornecendo animações leves e escaláveis com base em dados JSON.", - "jsonLottieCompKeywords": "lottie, animação, JSON, escalável", - "timelineCompName": "Linha do Tempo", - "timelineCompDesc": "Um componente para exibir eventos ou ações em uma ordem cronológica, representados visualmente ao longo de uma linha do tempo linear.", - "timelineCompKeywords": "linha do tempo, eventos, cronológico, histórico", - "commentCompName": "Comentário", - "commentCompDesc": "Um componente para adicionar e exibir comentários de usuários, com suporte a respostas em tópicos e interação do usuário.", - "commentCompKeywords": "comentário, discussão, interação do usuário, feedback", - "mentionCompName": "Menção", - "mentionCompDesc": "Um componente que suporta mencionar usuários ou tags dentro do conteúdo de texto, geralmente usado em redes sociais ou plataformas colaborativas.", - "mentionCompKeywords": "menção, tag, usuário, redes sociais", - "responsiveLayoutCompName": "Layout Responsivo", - "responsiveLayoutCompDesc": "Um componente de layout projetado para se adaptar e responder a diferentes tamanhos de tela e dispositivos, garantindo uma experiência do usuário consistente.", - "responsiveLayoutCompKeywords": "responsivo, layout, adaptar, tamanho da tela", - "iconCompName": "Ícones", - "iconCompDesc": "Use vários ícones para melhorar o apelo visual e a experiência do usuário do seu aplicativo.", - "iconCompKeywords": "ícones, pictogramas, símbolos, formas", - "tourCompName": "Viagem", - "tourCompDesc": "Um tour de produto para orientar os usuários.", - "tourCompKeywords": "tour, tour do produto, passo a passo, passo a passo interativo", - "hillchartCompName": "Gráfico de Hill", - "hillchartCompDesc": "Um componente de visualização para exibir dados de estado de gerenciamento de projetos em um formato de gráfico de hill.", - "hillchartCompKeywords": "gerenciamento de projetos, gráfico de hill, visualização, dados", - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "Um componente para exibir mapas interativos usando OpenLayers, com suporte a várias camadas e recursos de mapa.", - "openLayersGeoMapCompKeywords": "openlayers, geomapa, interativo, camadas de mapa", - "chartsGeoMapCompName": "Gráficos de Mapas Geográficos", - "chartsGeoMapCompDesc": "Um componente para visualizar dados geográficos em mapas interativos com gráficos dinâmicos.", - "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualização, dados geográficos", - "bpmnEditorCompName": "Editor BPMN", - "bpmnEditorCompDesc": "Um componente para visualizar, criar e editar diagramas BPMN, com suporte a vários elementos e recursos BPMN.", - "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, fluxos de trabalho", - "turnstileCaptchaCompName": "Captcha de Catraca", - "turnstileCaptchaCompDesc": "Um componente de captcha para verificar usuários contra bots.", - "turnstileCaptchaCompKeywords": "captcha, verificação, identidade, segurança", - "pivotTableCompName": "Tabela Dinâmica", - "pivotTableCompDesc": "Uma ferramenta de sumarização e análise de dados para organizar e agregar dados em um formato de tabela.", - "pivotTableCompKeywords": "tabela dinâmica, dados, análise, agregação", - "funnelChartCompName": "Gráfico de Funil", - "funnelChartCompDesc": "Uma ferramenta de visualização para exibir a redução progressiva de dados à medida que passam por estágios.", - "funnelChartCompKeywords": "gráfico de funil, vendas, conversões, processo", - "gaugeChartCompName": "Gráfico de Medição", - "gaugeChartCompDesc": "Um gráfico que exibe dados como uma leitura em um mostrador, útil para indicar o status ou o nível de algo.", - "gaugeChartCompKeywords": "gráfico de medição, métricas, desempenho, status", - "sankeyChartCompName": "Gráfico Sankey", - "sankeyChartCompDesc": "Um diagrama de fluxo no qual a largura das setas é proporcional à taxa de fluxo, usado para mostrar transferências de energia, material ou custo.", - "sankeyChartCompKeywords": "gráfico sankey, fluxo, energia, custos", - "candleStickChartCompName": "Gráfico de Candlestick", - "candleStickChartCompDesc": "Um estilo de gráfico financeiro usado para descrever movimentos de preços de um título, derivado ou moeda.", - "candleStickChartCompKeywords": "gráfico de candlestick, ações, negociação, finanças", - "radarChartCompName": "Gráfico Radar", - "radarChartCompDesc": "Um método gráfico de exibir dados multivariados na forma de um gráfico bidimensional de três ou mais variáveis quantitativas.", - "radarChartCompKeywords": "gráfico radar, multivariado, análise de desempenho", - "heatmapChartCompName": "Gráfico de Mapa de Calor", - "heatmapChartCompDesc": "Uma representação gráfica de dados onde os valores individuais são representados como cores.", - "heatmapChartCompKeywords": "mapa de calor, visualização de dados, intensidade", - "graphChartCompName": "Gráfico de Rede", - "graphChartCompDesc": "Um diagrama que representa uma rede de nós conectados por arestas, útil para mostrar interconexões e relacionamentos.", - "graphChartCompKeywords": "gráfico de rede, redes, relacionamentos, nós", - "treeChartCompName": "Gráfico de Árvore", - "treeChartCompDesc": "Um diagrama que representa visualmente a hierarquia em uma estrutura semelhante a uma árvore, mostrando relacionamentos entre vários nós.", - "treeChartCompKeywords": "gráfico de árvore, hierarquia, organizacional", - "treemapChartCompName": "Gráfico de Árvore de Mosaico", - "treemapChartCompDesc": "Um gráfico que usa retângulos aninhados para representar dados hierárquicos proporcionalmente.", - "treemapChartCompKeywords": "treemap, hierarquia, visualização de dados", - "sunburstChartCompName": "Gráfico Sunburst", - "sunburstChartCompDesc": "Uma técnica de visualização radial que preenche o espaço e ilustra relações hierárquicas por meio de camadas de um círculo.", - "sunburstChartCompKeywords": "gráfico sunburst, radial, hierarquia", - "themeriverChartCompName": "Gráfico de Rio Temático", - "themeriverChartCompDesc": "Uma visualização que se assemelha a um gráfico de fluxo e mostra mudanças em um conjunto de dados ao longo do tempo e entre categorias.", - "themeriverChartCompKeywords": "rio temático, séries temporais, tendências", - "basicChartCompName": "Gráfico Básico", - "basicChartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e gráficos.", - "basicChartCompKeywords": "gráfico, gráfico, dados, visualização", - "shapeCompName": "Formas", - "shapeCompDesc": "Uma coleção de formas geométricas para uso em diagramas, ilustrações e visualizações.", - "shapeCompKeywords": "formas, geométrico, diagramas, ilustrações", - "ganttChartCompName": "Gráfico de Gantt", - "ganttChartCompDesc": "Um gráfico que ilustra o calendário de um projeto, mostrando as datas de início e de fim dos elementos e as dependências.", - "ganttChartCompKeywords": "gráfico de Gantt, gestão de projectos, calendário", - "kanbanCompName" : "Kanban Board (preview!)", - "kanbanCompDesc" : "Um quadro de kanban interativo para visualizar e gerenciar o fluxo de trabalho e as tarefas em um projeto.", - "kanbanCompKeywords" : "kanban, board, workflow, tasks", - "colorPickerCompName": "Seletor de Cores", - "colorPickerCompDesc": "Seleção intuitiva de cores para personalização.", - "colorPickerCompKeywords": "cor, seletor, personalização", - "floatButtonCompName": "Botão Flutuante", - "floatButtonCompDesc": "Um botão de ação flutuante para ações proeminentes e rápidas.", - "floatButtonCompKeywords": "botão flutuante, ação, rápida", - "avatarCompName": "Avatar", - "avatarCompDesc": "Exibe avatares de usuário ou imagens de perfil para identificação personalizada.", - "avatarCompKeywords": "avatar, imagem de perfil, identificação de usuário", - "avatarGroupCompName": "Grupo de Avatares", - "avatarGroupCompDesc": "Um grupo de avatares para representar vários usuários ou entidades de forma compacta e visualmente atraente.", - "avatarGroupCompKeywords": "grupo de avatares, usuários, entidades, compacto", - "transferName": "Transferência", - "transferDesc": "Facilita a transferência de dados entre duas listas com funcionalidade de arrastar e soltar.", - "transferKeywords": "transferência, dados, arrastar e soltar", - "cardCompName": "Cartão de Conteúdo", - "cardCompDesc": "Um componente de cartão para exibir informações ou conteúdo organizado de maneira estruturada.", - "cardCompKeywords": "cartão, informações, conteúdo, exibição", - "timerCompName": "Temporizador", - "timerCompDesc": "Um componente que exibe uma contagem regressiva ou tempo decorrido, útil para rastrear durações e prazos.", - "timerCompKeywords": "temporizador, contagem regressiva, tempo decorrido, rastreamento, durações, prazos", - }, - "comp": { - ...en.comp, - - "menuViewDocs": "Ver Documentação", - "menuViewPlayground": "Ver Playground Interativo", - "menuUpgradeToLatest": "Atualizar para a Última Versão", - "nameNotEmpty": "Não Pode Estar Vazio", - "nameRegex": "Deve Começar com uma Letra e Conter Apenas Letras, Dígitos e Underlines (_)", - "nameJSKeyword": "Não Pode Ser uma Palavra-chave JavaScript", - "nameGlobalVariable": "Não Pode Ser Nome de Variável Global", - "nameExists": "O Nome {name} Já Existe", - "getLatestVersionMetaError": "Falha ao Obter a Última Versão, Por Favor, Tente Mais Tarde.", - "needNotUpgrade": "A Versão Atual Já Está Atualizada.", - "compNotFoundInLatestVersion": "O Componente Atual Não Foi Encontrado na Última Versão.", - "upgradeSuccess": "Atualizado com Sucesso para a Última Versão.", - "searchProp": "Buscar", - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - - "retry": "Tentar Novamente", - "resetAfterSubmit": "Redefinir Após Envio Bem-sucedido do Formulário", - "jsonSchema": "Esquema JSON", - "uiSchema": "Esquema UI", - "schemaTooltip": "Ver", - "defaultData": "Dados do Formulário Pré-preenchidos", - "dataDesc": "Dados Atuais do Formulário", - "required": "Obrigatório", - "maximum": "O Valor Máximo é {value}", - "minimum": "O Valor Mínimo é {value}", - "exclusiveMaximum": "Deve Ser Menor Que {value}", - "exclusiveMinimum": "Deve Ser Maior Que {value}", - "multipleOf": "Deve Ser Múltiplo de {value}", - "minLength": "Pelo Menos {value} Caracteres", - "maxLength": "No Máximo {value} Caracteres", - "pattern": "Deve Coincidir com o Padrão {value}", - "format": "Deve Coincidir com o Formato {value}", - }, - "select": { - ...en.select, - - "inputValueDesc": "Valor de Pesquisa de Entrada", - }, - "customComp": { - ...en.customComp, - - "text": "É um bom dia.", - "triggerQuery": "Disparar Consulta", - "updateData": "Atualizar Dados", - "updateText": "Eu também estou de bom humor para desenvolver agora meu próprio componente personalizado com o Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Dados que você deseja passar para o componente personalizado", - "code": "Código do seu componente personalizado", - }, - "tree": { - ...en.tree, - - "placeholder": "Por favor, selecione", - "selectType": "Selecionar Tipo", - "noSelect": "Sem Seleção", - "singleSelect": "Seleção Única", - "multiSelect": "Seleção Múltipla", - "checkbox": "Caixa de Seleção", - "checkedStrategy": "Estratégia de Verificação", - "showAll": "Todos os Nós", - "showParent": "Somente Nós Pai", - "showChild": "Somente Nós Filho", - "autoExpandParent": "Expandir Nó Pai Automaticamente", - "checkStrictly": "Verificar Estritamente", - "checkStrictlyTooltip": "Verifique o TreeNode Precisamente; O TreeNode Pai e os TreeNode Filhos não estão Associados", - "treeData": "Dados da Árvore", - "treeDataDesc": "Dados da Árvore Atuais", - "value": "Valores Padrão", - "valueDesc": "Valores Atuais", - "expanded": "Valores Expandidos", - "expandedDesc": "Valores Atuais Expandidos", - "defaultExpandAll": "Expandir Todos os Nós por Padrão", - "showLine": "Mostrar Linha", - "showLeafIcon": "Mostrar Ícone de Folha", - "treeDataAsia": "Ásia", - "treeDataChina": "China", - "treeDataBeijing": "Pequim", - "treeDataShanghai": "Xangai", - "treeDataJapan": "Japão", - "treeDataEurope": "Europa", - "treeDataEngland": "Inglaterra", - "treeDataFrance": "França", - "treeDataGermany": "Alemanha", - "treeDataNorthAmerica": "América do Norte", - "helpLabel": "Rótulo do Nó", - "helpValue": "Valor Único do Nó na Árvore", - "helpChildren": "Nós Filhos", - "helpDisabled": "Desativa o Nó", - "helpSelectable": "Se o Nó é Selecionável (Tipo de Seleção Única/Múltipla)", - "helpCheckable": "Se exibir a Caixa de Seleção (Tipo de Caixa de Seleção)", - "helpDisableCheckbox": "Desativa a Caixa de Seleção (Tipo de Caixa de Seleção)", - }, - "moduleContainer": { - ...en.moduleContainer, - - "eventTest": "Teste de Evento", - "methodTest": "Teste de Método", - "inputTest": "Teste de Entrada", - }, - "password": { - ...en.password, - - "label": "Senha", - "placeholder": "Por favor, digite a senha", - "conformLabel": "Confirmar Senha", - "conformPlaceholder": "Por favor, confirme a senha", - "visibilityToggle": "Mostrar Alternância de Visibilidade", - }, - "richTextEditor": { - ...en.richTextEditor, - - "toolbar": "Personalizar Barra de Ferramentas", - "toolbarDescription": "Você pode personalizar a barra de ferramentas. Consulte: https://quilljs.com/docs/modules/toolbar/ para obter mais detalhes.", - "placeholder": "Por favor, insira...", - "hideToolbar": "Ocultar Barra de Ferramentas", - "content": "Conteúdo", - "title": "Título", - "save": "Salvar", - "link": "Ligação:", - "edit": "Editar", - "remove": "Remover", - "defaultValue": "Conteúdo Base", - }, - "floatButton": { - ...en.floatButton, - - "custom": "Personalizado", - "backTop": "Voltar ao Topo", - "buttonType": "Tipo de Botão", - "buttonShape": "Formato do Botão", - "square": "Quadrado", - "circle": "Círculo", - "description": "Descrição", - "badge": "Distintivo", - "primary": "Principal", - "default": "Padrão", - "buttonTheme": "Tema do Botão", - "badgeColor": "Cor do Distintivo", - "dot": "Distintivo como Ponto", - "hidden": "Oculto", - "visibilityHeight": "Altura de Visibilidade", - "visibilityHeightDesc": "Role até uma certa altura antes de exibir o botão de retorno ao topo, 0 é sempre exibido. O modo de edição não pode ser visualizado em tempo real", - }, - "colorPicker": { - ...en.colorPicker, - - "trigger": "Disparadores de Eventos", - "click": "Clique", - "hover": "Passar o Mouse", - "disabledAlpha": "Desativar Seleção de Alfa", - "recommended": "Recomendado", - "showPresets": "Mostrar Predefinições de Cor", - }, - "badge": { - ...en.badge, - - "showCloseButton": "Mostrar botão de fechar", - "Type": "Tipo de insígnia", - "Count": "Contagem da insígnia", - "Size": "Tamanho da insígnia", - "SizeDefault": "padrão", - "SizeSmall": "Pequeno", - "overflowCount": "Contagem de overflow", - "Title": "Título da insígnia", - "dot": "Ponto", - "number": "Número", - "tooltip": "Dica de ferramenta", - }, - "gantt": { - ...en.gantt, - - "key": "Chave", - "title": "Título", - "project": "Projeto", - "from": "De", - "minute": "Minuto", - "hour": "Hora", - "day": "Dia", - "week": "Semana", - "month": "Mês", - "year": "Ano", - "quarter": "Trimestre", - "tasks": "Dados de Tarefas", - "level": "Nível", - "durationUnit": "Unidade de Duração", - "duration": "Duração", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Semana #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "árvore", - "ColumnsData": "Dados das Colunas", - "allowChangeTask": "Clique duplo na Tarefa", - "allowAddLink": "Adicionar Link", - "allowLinkDelete": "Excluir Link", - "allowProgressDrag": "Arrastar Progresso", - "allowTaskDrag": "Arrastar Tarefa", - "links": "Dados de Links", - "dataFormat": "Formato de Análise de Dados", - "handleDateChange": "Lidar com a Mudança de Tarefa", - "handleTaskChange": "Lidar com a Mudança de Tarefa", - "handleAddedLink": "Lidar com Link Adicionado", - "handleDeletedLink": "Lidar com Link Excluído", - "handleProgressDrag": "Lidar com Arrastar de Progresso", - "showTodayMark": "Mostrar Marcação de Hoje", - "resize": "Redimensionar", - "otherEvents": "Outros Eventos", - "openAllBranchInit": "Abrir Todos os Ramos Iniciais", - "date": "Data", - "text": "Texto", - "progress": "progresso", - "width": "Largura", - "ColumnsType": "Tipo de Colunas", - "currentId": "ID Atual", - "currentObject": "Objeto Atual", - "addTask": "Adicionar Tarefa(s)", - "taskObject": "Objeto de Tarefa", - "taskObjectDesc": "Suporta arrays de Tarefas ou único Objeto de Tarefa", - "linkID": "ID do Link", - "linkIDDesc": "Suporta arrays de IDs de Links ou único Objeto de Link", - "removeTask": "Remover Tarefa", - "taskID": "ID da Tarefa", - "taskIDDesc": "Suporta arrays de IDs ou único ID", - "add": "Adicionar", - "expandingAll": "Expandindo Todos", - "collapsingAll": "Recolhendo Todos", - "addTaskFail": "A adição de tarefas falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", - "addLinkFail": "A adição de link falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", - "removeTaskFail": "A remoção de tarefas falhou, e o tipo de parâmetro deve ser string ou array de strings", - "removeLinkFail": "A remoção de links falhou, e o tipo de parâmetro deve ser array de strings", - "otherData": "Outros Dados{i}", - "projectText": "Projeto #{i}", - "taskText": "Tarefa #{i}", - "AutoCalculateProgress": "Calcular Progresso Automático", - "allowProjectDrag": "Permitir Arrastar Projeto", - "showColumns": "Mostrar Colunas", - "exportToPNG": "Exportar para PNG", - "exportToPDF": "Exportar para PDF", - "exportToExcel": "Exportar para Excel", - "progressLowBg": "Cor de Fundo Baixo", - "progressLowColor": "Cor de Progresso Baixo", - "progressMediumBg": "Cor de Fundo Médio", - "progressMediumColor": "Cor de Progresso Médio", - "progressHighBg": "Cor de Fundo Alto", - "progressHighColor": "Cor de Progresso Alto", - "progresscompletedColor": "Cor de Progresso Concluído", - "lowProgressLine": "Linha de Progresso Baixo", - "mediumProgressLine": "Linha de Progresso Médio", - "SegmentedColor": "Cor Segmentada de Progresso", - "link_f2s": "Ligação F2S", - "link_s2s": "Ligação S2S", - "link_f2f": "Ligação F2F", - "link_s2f": "Ligação S2F", - "weekScale": "#{i},", - "showHolidays": "Mostrar Feriados", - "StatutoryHolidays": "Dados de Feriados Legais", - "skipOffTime": "Ocultar Tempo Não Trabalhado", - "weekend": "Fim de Semana", - "weekendSelected": "Fim de Semana Selecionado", - "noWorkHour": "Sem Horário de Trabalho", - "noWorkHourSelected": "Sem Horário de Trabalho Selecionado", - "showWorkTimes": "Mostrar Horários de Trabalho", - "workTimeData": "Dados de Horário de Trabalho", - "fit": "ajustar", - "manual": "manual", - "scaleMode": "Modo de Escala", - "startDate": "Data de Início", - "endDate": "Data de Término", - "addLink": "Adicionar Link(s)", - "linkObject": "Objeto de Link", - "removeLink": "Remover Link", - "allowSort": "Permitir Ordenação", - "showTask": "Mostrar Tarefa", - "toggleOnDBClick": "Alternar no Duplo Clique", - "sortOptions": "Opções de Classificação Inicial", - "rowHeight": "Altura da Linha", - "showTooltip": "Mostrar Dica de Ferramenta", - "tooltipTemplates": "Modelo de Dica de Ferramenta", - "allowResizeTask": "Permitir Redimensionamento de Tarefa", - "projectColor": "Cor do Projeto", - "projectColorBg": "Cor de Fundo do Projeto", - "taskColor": "Cor da Tarefa", - "taskColorBg": "Cor de Fundo da Tarefa", - "milestoneColor": "Cor do Marco", - "highlightOverdue": "Destacar Atrasado", - "overdueColor": "Cor de Atrasado", - "overdueBgColor": "Cor de Fundo de Atrasado", - "projectCompletedBgColor": "Cor de Fundo de Projeto Concluído", - "projectCompletedColor": "Cor de Projeto Concluído", - "tag": "etiqueta", - "tasksTableWidth": "Largura da Tabela de Tarefas", - "allowErrorMessage": "Permitir Mensagem de Erro", - "currentProjectId": "ID do Projeto Atual", - "currentProjectLastTask": "Última Tarefa do Projeto Atual", - "onlySortProject": "Apenas Ordenar Projeto", - }, - "transfer": { - ...en.transfer, - - "sourceTitle": "Dados de Origem", - "targetTitle": "Dados de Destino", - "content": "Conteúdo {i}", - "items": "Itens", - "targetKeys": "Chaves Selecionadas", - "oneWay": "De Um Sentido", - "pagination": "Paginação", - "pageSize": "Tamanho da Página", - "allowSearch": "Permitir Busca", - "selectedKeys": "Chaves Selecionadas", - "searchInfo": "Informações de Busca", - "targerObject": "Objeto de Destino", - }, - "avatarGroup": { - ...en.avatarGroup, - - "maxCount": "Contagem Máxima", - "avatarSize": "Tamanho do Avatar", - "autoColor": "Cor Automática", - "alignment": "Alinhamento", - "currentAvatar": "Avatar Atual", - }, - "avatarComp": { - ...en.avatarComp, - - "square": "quadrado", - "circle": "círculo", - "icon": "ícone", - "shape": "forma", - "counts": "Insignia", - "title": "título", - "src": "src", - "avatarCompTooltip": "A prioridade de exibição é: imagem -> caracteres -> ícone. Dependendo do que estiver disponível primeiro.", - "iconSize": "Tamanho do Ícone", - "avatarBackground": "Fundo", - "label": "Rótulo", - "caption": "Legenda", - "labelPosition": "Posição do Rótulo", - "alignmentPosition": "alinhamento", - "text": "Texto", - "enableDropDown": "Ativar menu suspenso", - "containerBackground": "Fundo do Contêiner", - }, - "card": { - ...en.card, - - "cardType": "Tipo de Cartão", - "common": "comum", - "custom": "personalizado", - "default": "padrão", - "small": "pequeno", - "showTitle": "Mostrar título", - "title": "Título", - "more": "Mais", - "extraTitle": "Chamada para Ação", - "CoverImg": "Imagem de Capa", - "imgSrc": "Fonte da Imagem", - "showMeta": "Mostrar Conteúdo", - "metaTitle": "Título do Conteúdo", - "metaDesc": "Descrição do Conteúdo", - "imgHeight": "Altura da Imagem", - "showActionIcon": "Mostrar Opções de Ação", - "actionOptions": "Opções de Ação", - "menu": "Menu {i}", - "hoverColor": "Cor ao Passar o Mouse", - "IconColor": "Cor do Ícone", - "titleSize": "Tamanho do Título", - }, - "timer": { - ...en.timer, - - "timerState": "Estado do Temporizador", - "elapsedTime": "Tempo Decorrido", - "timer": "Temporizador", - "countdown": "Contagem Regressiva", - "defaultValue": "Valor Padrão", - "timerType": "Tipo de Temporizador", - "start": "Iniciar", - "pause": "Pausar", - "resume": "Continuar", - "reset": "Redefinir", - "startPause": "Iniciar/Pausar", - "hideButton": "Ocultar Botão", - "fontColor": "Cor da Fonte", - }, - "iconComp": { - ...en.iconComp, - - "icon": "Ícone", - "autoSize": "Tamanho Automático do Ícone", - "iconSize": "Tamanho do Ícone", - }, - "numberInput": { - ...en.numberInput, - - "formatter": "Formatar", - "precision": "Precisão", - "allowNull": "Permitir Valor Nulo", - "thousandsSeparator": "Mostrar Separador de Milhares", - "controls": "Mostrar Botões de Incremento/Decremento", - "step": "Passo", - "standard": "Padrão", - "percent": "Porcentagem", - }, - "slider": { - ...en.slider, - - "step": "Passo", - "stepTooltip": "O valor deve ser maior que 0 e divisível por (Máx-Mín)", - "vertical": "Orientação Vertical", - }, - "rating": { - ...en.rating, - - "max": "Avaliação Máxima", - "allowHalf": "Permitir Meias Pontuações", - }, - "optionsControl": { - ...en.optionsControl, - - "optionList": "Opções", - "option": "Opção", - "optionI": "Opção {i}", - "viewDocs": "Ver Documentação", - "tip": "As variáveis 'item' e 'i' representam o valor e o índice de cada item na matriz de dados", - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - - "value": "Valor / Chave", - "valueTooltip": "O valor do passo deve ser um número. Para o primeiro passo, deve ser igual ao valor inicial. Os números devem estar em ordem consistente e ascendente.", - "title": "Título do Passo", - "subTitle": "Subtítulo do Passo", - "description": "Descrição do Passo", - "status": "Status do Passo", - "icon": "Ícone do Passo", - }, - "step": { - ...en.step, - - "initialValue": "Começar Números em", - "initialValueTooltip": "Onde começar a numeração visual. Deve ser 1 ou maior.", - "valueDesc": "Valor Atual", - "size": "Tamanho dos Passos", - "sizeSmall": "Pequeno", - "sizeDefault": "Padrão", - "percent": "Percentual dos Passos", - "type": "Tipo de Passos", - "typeDefault": "Padrão", - "typeNavigation": "Navegação", - "typeInline": "Em Linha", - "direction": "Direção dos Passos", - "directionVertical": "Vertical", - "directionHorizontal": "Horizontal", - "labelPlacement": "Posição do Rótulo dos Passos", - "status": "Status dos Passos", - "statusWait": "Aguardar", - "statusProcess": "Processando", - "statusFinish": "Concluído", - "statusError": "Erro", - "showDots": "Mostrar Pontos em Vez de Símbolos", - "showIcons": "Mostrar Ícones em Vez de Símbolos", - "responsive": "Responsivo", - "selectable": "Selecionável", - }, - "coloredTagOptionControl": { - ...en.coloredTagOptionControl, - - "tag": "Texto da Tag", - "color": "Cor", - "icon": "Ícone", - }, - "radio": { - ...en.radio, - - "options": "Opções", - "horizontal": "Horizontal", - "horizontalTooltip": "O Layout Horizontal se Ajusta Quando Acaba o Espaço", - "vertical": "Vertical", - "verticalTooltip": "O Layout Vertical é Exibido em uma Única Coluna", - "autoColumns": "Coluna Automática", - "autoColumnsTooltip": "A Coluna Automática Rearranja a Ordem Automaticamente Conforme o Espaço Permitido e Exibe em Múltiplas Colunas", - }, - "cascader": { - ...en.cascader, - - "options": "Dados JSON para mostrar seleções em cascata", - }, - "selectInput": { - ...en.selectInput, - - "valueDesc": "Valor Atualmente Selecionado", - "selectedIndexDesc": "O Índice do Valor Atualmente Selecionado, ou -1 se Nenhum Valor Estiver Selecionado", - "selectedLabelDesc": "O Rótulo do Valor Atualmente Selecionado", - }, - "file": { - ...en.file, - - "typeErrorMsg": "Deve Ser um Número com uma Unidade de Tamanho de Arquivo Válida, ou um Número sem Unidade de Tamanho de Arquivo.", - "fileEmptyErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Está Vazio.", - "fileSizeExceedErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Excede o Limite.", - "minSize": "Tamanho Mínimo", - "minSizeTooltip": "O Tamanho Mínimo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", - "maxSize": "Tamanho Máximo", - "maxSizeTooltip": "O Tamanho Máximo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", - "single": "Único", - "multiple": "Múltiplo", - "directory": "Diretório", - "upload": "Procurar", - "fileType": "Tipos de Arquivo", - "reference": "Por Favor Consulte", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Especificadores de Tipo de Arquivo Únicos", - "uploadType": "Tipo de Envio", - "showUploadList": "Mostrar Lista de Envios", - "maxFiles": "Máximo de Arquivos", - "filesValueDesc": "O Conteúdo do Arquivo Enviado Atualmente Está Codificado em Base64", - "filesDesc": "Lista dos Arquivos Enviados Atualmente. Para Detalhes, Consulte", - "clearValueDesc": "Limpar Todos os Arquivos", - "parseFiles": "Analisar Arquivos", - "parsedValueTooltip1": "Se parseFiles for Verdadeiro, os Arquivos Enviados serão Analisados em Objeto, Array ou String. Os Dados Analisados Podem Ser Acessados através do Array parsedValue.", - "parsedValueTooltip2": "Suporta Arquivos Excel, JSON, CSV e de Texto. Outros Formatos Retornarão Nulo.", - }, - "date": { - ...en.date, - - "format": "Formato", - "formatTip": "Suporte: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", - "reference": "Por Favor Consulte", - "showTime": "Mostrar Hora", - "start": "Data de Início", - "end": "Data de Fim", - "year": "Ano", - "quarter": "Trimestre", - "month": "Mês", - "week": "Semana", - "date": "Data", - "clearAllDesc": "Limpar Tudo", - "resetAllDesc": "Redefinir Tudo", - "placeholder": "Selecionar Data", - "placeholderText": "Marcador de Posição", - "startDate": "Data de Início", - "endDate": "Data de Fim", - }, - "time": { - ...en.time, - - "start": "Hora de Início", - "end": "Hora de Término", - "formatTip": "Suporte: 'HH:mm:ss', 'Timestamp'", - "format": "Formato", - "placeholder": "Selecionar Hora", - "placeholderText": "Marcador de Posição", - "startTime": "Hora de Início", - "endTime": "Hora de Término", - }, - "button": { - ...en.button, - - "prefixIcon": "Ícone Prefixo", - "prefixText": "Texto Prefixo", - "suffixIcon": "Ícone Sufixo", - "icon": "Ícone", - "iconSize": "Tamanho do Ícone", - "button": "Botão do Formulário", - "formToSubmit": "Formulário para Envio", - "default": "Padrão", - "submit": "Enviar", - "textDesc": "Texto Atualmente Exibido no Botão", - "loadingDesc": "O Botão Está no Estado de Carregamento? Se Verdadeiro, o Botão Atual Está Carregando", - "formButtonEvent": "Evento", - }, - "link": { - ...en.link, - - "link": "Ligação a", - "textDesc": "Texto Atualmente Exibido no Link", - "loadingDesc": "O Link Está no Estado de Carregamento? Se Verdadeiro, o Link Atual Está Carregando", - }, - "scanner": { - ...en.scanner, - - "text": "Clique para Escanear", - "camera": "Câmera {index}", - "changeCamera": "Alternar Câmera", - "continuous": "Escaneamento Contínuo", - "uniqueData": "Ignorar Dados Duplicados", - "maskClosable": "Clique na Máscara para Fechar", - "errTip": "Por Favor, Utilize Este Componente Sob HTTPS ou Localhost", - }, - "dropdown": { - ...en.dropdown, - - "onlyMenu": "Exibir Apenas com Rótulo", - "textDesc": "Texto Atualmente Exibido no Botão", - "triggerMode": "Modo de disparo" - }, - "textShow": { - ...en.textShow, - - "text": "### 👋 Olá, {name}", - "valueTooltip": "Markdown Suporta a Maioria das Tags e Atributos HTML. Tags como iframe, Script e Outras Estão Desativadas por Motivos de Segurança.", - "verticalAlignment": "Alinhamento Vertical", - "horizontalAlignment": "Alinhamento Horizontal", - "textDesc": "Texto Exibido na Caixa de Texto Atual", - }, - "table": { - ...en.table, - - "editable": "Editável", - "columnNum": "Colunas", - "viewModeResizable": "Largura da Coluna Ajustada pelo Usuário", - "viewModeResizableTooltip": "Se os usuários podem ou não ajustar a largura da coluna.", - "visibleResizables": "Mostrar Alças de Redimensionamento", - "visibleResizablesTooltip": "Exibir alças de redimensionamento visíveis no cabeçalho da tabela.", - "showFilter": "Mostrar Botão de Filtro", - "showRefresh": "Mostrar Botão de Atualização", - "showDownload": "Mostrar Botão de Download", - "columnSeparator": "Separador de colunas", - "columnSeparatorTooltip": "Separador de colunas (\"delimitador\") no arquivo CSV baixado. \n\nRecomendações:\n- Vírgula (,)\n- Ponto e vírgula (;)\n- Barra vertical (|)\n- Tabulação (\\t)", - "columnSetting": "Mostrar Botão de Configuração de Coluna", - "searchText": "Texto de Busca", - "searchTextTooltip": "Pesquisar e filtrar os dados apresentados na tabela", - "showQuickJumper": "Mostrar Pulador Rápido", - "hideOnSinglePage": "Ocultar em Página Única", - "showSizeChanger": "Mostrar Botão de Alteração de Tamanho", - "pageSizeOptions": "Opções de Tamanho de Página", - "pageSize": "Tamanho de Página", - "total": "Contagem Total de Linhas", - "totalTooltip": "O valor padrão é o número de itens de dados atuais, que pode ser obtido da consulta, por exemplo: '{{query1.data[0].count}}'", - "filter": "Filtrar", - "filterRule": "Regra de Filtro", - "chooseColumnName": "Escolher Coluna", - "chooseCondition": "Escolher Condição", - "clear": "Limpar", - "columnShows": "Colunas Mostradas", - "selectAll": "Selecionar Tudo", - "and": "E", - "or": "Ou", - "contains": "Contém", - "notContain": "Não Contém", - "equals": "Igual a", - "isNotEqual": "Não é Igual a", - "isEmpty": "Está Vazio", - "isNotEmpty": "Não Está Vazio", - "greater": "Maior Que", - "greaterThanOrEquals": "Maior ou Igual a", - "lessThan": "Menor Que", - "lessThanOrEquals": "Menor ou Igual a", - "action": "Ação", - "columnValue": "Valor da Coluna", - "columnValueTooltip": "'{{currentCell}}': Dados da Célula Atual\n '{{currentRow}}': Dados da Linha Atual\n '{{currentIndex}}': Índice de Dados Atual (Começando de 0)\n Exemplo: '{{currentCell * 5}}' Mostra 5 Vezes o Valor Original dos Dados.", - "columnTooltip": "Dica de coluna", - "imageSrc": "Fonte da Imagem", - "imageSize": "Tamanho da Imagem", - "columnTitle": "Título", - "columnTitleTooltip": "Dica de título", - "showTitle": "Mostrar Título", - "showTitleTooltip": "Mostrar/Ocultar título da coluna no cabeçalho da tabela", - "sortable": "Classificável", - "align": "Alinhamento", - "fixedColumn": "Coluna Fixa", - "autoWidth": "Largura Automática", - "customColumn": "Coluna Personalizada", - "auto": "Automático", - "fixed": "Fixo", - "columnType": "Tipo de Coluna", - "dataMapping": "Mapeamento de Dados", - "numberStep": "Passo", - "numberStepTooltip": "O número para o qual o valor atual é aumentado ou diminuído. Pode ser um número inteiro ou decimal", - "precision": "Precisão", - "float": "Flutuante", - "prefix": "Prefixo", - "suffix": "Sufixo", - "avatars": "Avatares", - "avatarGroupAlignment": "Alinhamento dos Avatares", - "text": "Texto", - "number": "Número", - "link": "Ligação a", - "links": "Ligações", - "tag": "Etiqueta", - "select": "Seleção", - "dropdown": "Menu suspenso", - "date": "Data", - "dateTime": "Data e Hora", - "badgeStatus": "Estado", - "button": "Botão", - "image": "Imagem", - "boolean": "Booleano", - "switch": "Interruptor", - "rating": "Classificação", - "progress": "Progresso", - "option": "Operação", - "optionList": "Lista de Operações", - "option1": "Operação 1", - "status": "Estado", - "statusTooltip": "Valores Opcionais: Success, Error, Default, Warning, Processing", - "primaryButton": "Principal", - "defaultButton": "Padrão", - "type": "Tipo", - "tableSize": "Tamanho da Tabela", - "hideHeader": "Ocultar Cabeçalho da Tabela", - "hideToolbar": "Ocultar barra de ferramentas", - "fixedHeader": "Cabeçalho da Tabela Fixo", - "fixedHeaderTooltip": "O cabeçalho será fixado para tabelas com rolagem vertical", - "fixedToolbar": "Barra de Ferramentas Fixa", - "fixedToolbarTooltip": "A barra de ferramentas será fixada para tabelas com rolagem vertical com base na posição", - "hideBordered": "Mostrar Alças de Redimensionamento", - "showHeaderGridBorder": "Mostrar Borda do Grid do Cabeçalho", - "showRowGridBorder": "Mostrar Borda do Grid da Linha", - "showVerticalRowGridBorder": "Mostrar Borda do Grid da Linha Vertical", - "showHorizontalRowGridBorder": "Mostrar Borda do Grid da Linha Horizontal", - "deleteColumn": "Excluir Coluna", - "confirmDeleteColumn": "Confirmar Exclusão da Coluna: ", - "small": "P", - "middle": "M", - "large": "G", - "refreshButtonTooltip": "Os dados atuais mudaram. Clique para regenerar a coluna.", - "changeSetDesc": "Um objeto representando mudanças em uma tabela editável, contendo apenas a célula alterada. As linhas vêm primeiro e as colunas em seguida.", - "selectedRowDesc": "Fornece dados para a linha atualmente selecionada, indicando a linha que aciona um evento de clique se o usuário clicar em um botão/link na linha", - "selectedRowsDesc": "Útil no modo de seleção múltipla, igual a SelectedRow", - "pageNoDesc": "Página atual, começando em 1", - "pageSizeDesc": "Quantas linhas por página", - "sortColumnDesc": "O nome da coluna classificada atualmente selecionada", - "sortDesc": "Se a linha atual está em ordem decrescente", - "pageOffsetDesc": "O início atual da paginação, usado para paginação para obter dados. Exemplo: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", - "displayDataDesc": "Dados exibidos na tabela atual", - "selectedIndexDesc": "Índice selecionado em dados de exibição", - "filterDesc": "Parâmetros de filtragem da tabela", - "dataDesc": "Os dados JSON para a tabela", - "saveChanges": "Salvar Alterações", - "cancelChanges": "Cancelar Alterações", - "rowSelectChange": "Alteração na Seleção de Linha", - "rowClick": "Clique na Linha", - "rowExpand": "Expandir Linha", - "rowShrink": "Contrair Linha", - "search": "Buscar", - "download": "Descarregar", - "columnEdited": "Coluna Editada", - "filterChange": "Alteração de Filtro", - "sortChange": "Alteração de Classificação", - "pageChange": "Alteração de Página", - "refresh": "Atualizar", - "rowColor": "Cor da Linha Condicional", - "rowColorDesc": "Defina condicionalmente a cor da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - "rowHeight": "Altura da Linha Condicional", - "rowHeightDesc": "Defina condicionalmente a altura da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Cor da Célula Condicional", - "cellColorDesc": "Defina condicionalmente a cor da célula com base no valor da célula usando CurrentCell. Por exemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "Nenhum manipulador de eventos configurado para salvar alterações. Por favor, vincule pelo menos um manipulador de eventos antes de clicar.", - "dynamicColumn": "Usar Configuração de Coluna Dinâmica", - "dynamicColumnConfig": "Configuração de Coluna", - "dynamicColumnConfigDesc": "Configurações de coluna dinâmica. Aceita um array de nomes de colunas. Todas as colunas são visíveis por padrão. Exemplo: [\"id\", \"name\"]", - "position": "Posição", - "showDataLoadSpinner": "Mostrar indicador de carregamento", - "showValue": "Mostrar Valor", - "expandable": "Expansível", - "configExpandedView": "Configurar Visualização Expandida", - "toUpdateRowsDesc": "Um array de objetos para linhas a serem atualizadas em tabelas editáveis.", - "selectedCellDesc": "Célula selecionada", - "empty": "Vazio", - "falseValues": "Texto Quando Falso", - "iconTrue": "Ícone Quando Verdadeiro", - "iconFalse": "Ícone Quando Falso", - "iconNull": "Ícone Quando Nulo", - "allColumn": "Todas", - "visibleColumn": "Visível", - "emptyColumns": "Nenhuma coluna está atualmente visível", - "showSummary": "Mostrar linha(s) de resumo", - "totalSummaryRows": "Total de linhas", - "inlineAddNewRow": "Adicionar nova(s) linha(s) em linha", - "editMode": "Modo de edição", - "singleClick": "Clique Único", - "doubleClick": "Clique duplo", - "showUpdateButtons": "Mostrar botões Salvar/Cancelar", - }, - "image": { - ...en.image, - - "src": "Fonte da Imagem", - "srcDesc": "A fonte da imagem. Pode ser uma URL, um caminho ou uma string Base64. Por exemplo: data:image/png;base64, AAA... CCC", - "supportPreview": "Suporte para visualização clicável (zoom)", - "supportPreviewTip": "Efetivo quando a fonte da imagem é válida", - "previewSrc" : "Fonte da imagem de alta resolução" - }, - "progress": { - ...en.progress, - - "value": "Valor", - "valueTooltip": "A porcentagem concluída como um valor entre 0 e 100", - "showInfo": "Mostrar Valor", - "valueDesc": "Valor de progresso atual, variando de 0 a 100", - "showInfoDesc": "Se deve exibir o valor de progresso atual", - }, - "fileViewer": { - ...en.fileViewer, - - "invalidURL": "Por favor, insira uma URL válida ou uma string Base64", - "src": "URI do arquivo", - "srcTooltip": "Pré-visualização do conteúdo do link fornecido por meio da incorporação de HTML, dados codificados em Base64 também podem ser suportados, por exemplo: data:application/pdf;base64, AAA... CCC", - "srcDesc": "O URI do arquivo", - }, - "divider": { - ...en.divider, - - "title": "Título", - "align": "Alinhamento", - "dashed": "Tracejado", - "type": "Tipo vertical", - "dashedDesc": "Se deve usar linha tracejada", - "titleDesc": "Título do divisor", - "alignDesc": "Alinhamento do título do divisor", - }, - "QRCode": { - ...en.QRCode, - - "value": "Valor do Conteúdo do Código QR", - "valueTooltip": "O valor contém no máximo 2953 caracteres. O valor do código QR pode codificar vários tipos de dados, incluindo mensagens de texto, URLs, detalhes de contato (VCard/meCard), credenciais de login Wi-Fi, endereços de e-mail, números de telefone, mensagens SMS, coordenadas de geolocalização, detalhes de eventos de calendário, informações de pagamento, endereços de criptomoeda e links para download de aplicativos", - "valueDesc": "O valor do conteúdo do código QR", - "level": "Nível de Tolerância a Falhas", - "levelTooltip": "Refere-se à capacidade de o código QR ser escaneado mesmo que parte dele esteja bloqueada. Quanto maior o nível, mais complexo é o código.", - "includeMargin": "Mostrar Margem", - "image": "Exibir Imagem no Centro", - "L": "L (Baixo)", - "M": "M (Médio)", - "Q": "Q (Quartil)", - "H": "H (Alto)", - "maxLength": "O conteúdo é muito longo. Defina o comprimento como menos de 2953 caracteres", - }, - "jsonExplorer": { - ...en.jsonExplorer, - - "indent": "Indentação de cada nível", - "expandToggle": "Expandir Árvore JSON", - "theme": "Tema de Cores", - "valueDesc": "Dados JSON atuais", - "default": "Padrão", - "defaultDark": "Padrão Escuro", - "neutralLight": "Neutro Claro", - "neutralDark": "Neutro Escuro", - "azure": "Azul Claro", - "darkBlue": "Azul Escuro", - }, - "audio": { - ...en.audio, - - "src": "URI da Fonte de Áudio ou String Base64", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Reprodução Automática", - "loop": "Laço", - "srcDesc": "URI ou String Base64 atual de áudio como data:audio/mpeg;base64, AAA... CCC", - "play": "Reproduzir", - "playDesc": "Disparado quando o áudio é reproduzido", - "pause": "Pausa", - "pauseDesc": "Disparado quando o áudio é pausado", - "ended": "Finalizado", - "endedDesc": "Disparado quando o áudio termina de ser reproduzido", - }, - "video": { - ...en.video, - - "src": "URI da Fonte de Vídeo ou String Base64", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "URL do Pôster", - "defaultPosterUrl": "", - "autoPlay": "Reprodução Automática", - "loop": "Laço", - "controls": "Ocultar Controles", - "volume": "Volume", - "playbackRate": "Taxa de Reprodução", - "posterTooltip": "O Valor Padrão é o Primeiro Quadro do Vídeo", - "autoPlayTooltip": "Após o Vídeo ser Carregado, Ele Será Reproduzido Automaticamente. Alterar Este Valor de Verdadeiro para Falso Pausará o Vídeo. (Se um Pôster Estiver Definido, Ele Será Reproduzido pelo Botão do Pôster)", - "controlsTooltip": "Ocultar Controles de Reprodução do Vídeo. Pode Não Ser Totalmente Suportado por Cada Fonte de Vídeo.", - "volumeTooltip": "Defina o Volume do Player, Entre 0 e 1", - "playbackRateTooltip": "Defina a Taxa do Player, Entre 1 e 2", - "srcDesc": "URI ou String Base64 atual de vídeo como data:video/mp4;base64, AAA... CCC", - "play": "Reproduzir", - "playDesc": "Disparado quando o vídeo é reproduzido", - "pause": "Pausa", - "pauseDesc": "Disparado quando o vídeo é pausado", - "load": "Carregar", - "loadDesc": "Disparado quando o recurso de vídeo terminou de carregar", - "ended": "Finalizado", - "endedDesc": "Disparado quando o vídeo termina de ser reproduzido", - "currentTimeStamp": "A posição de reprodução atual do vídeo em segundos", - "duration": "A duração total do vídeo em segundos", - }, - "media": { - ...en.media, - - "playDesc": "Inicia a reprodução da mídia.", - "pauseDesc": "Pausa a reprodução da mídia.", - "loadDesc": "Redefine a mídia para o início e reinicia a seleção do recurso de mídia.", - "seekTo": "Avança para o número de segundos especificado, ou fração se o valor estiver entre 0 e 1", - "seekToAmount": "Número de segundos, ou fração se estiver entre 0 e 1", - "showPreview": "Mostrar pré-visualização", - }, - "rangeSlider": { - ...en.rangeSlider, - - "start": "Valor Inicial", - "end": "Valor Final", - "step": "Tamanho do Passo", - "stepTooltip": "A granularidade do controle deslizante, o valor deve ser maior que 0 e divisível por (Max-Min)", - }, - "iconControl": { - ...en.iconControl, - - "selectIcon": "Selecionar um Ícone", - "insertIcon": "Inserir um Ícone", - "insertImage": "Inserir uma Imagem ou ", - }, - "shapeControl": { - ...en.shapeControl, - - "selectShape": "Selecionar uma Forma", - "insertShape": "Inserir uma Forma", - "insertImage": "Inserir uma Imagem ou ", - }, - "millisecondsControl": { - ...en.millisecondsControl, - - "timeoutTypeError": "Por favor, insira o período de timeout correto em ms, o valor atual é: {value}", - "timeoutLessThanMinError": "A entrada deve ser maior que {left}, o valor atual é: {value}", - }, - "selectionControl": { - ...en.selectionControl, - - "single": "Único", - "multiple": "Múltiplo", - "close": "Fechar", - "mode": "Modo de Seleção", - }, - "container": { - ...en.container, - - "title": "Título do Container Exibido", - "titleTooltip": "O título do container", - "flowWidth": "Largura do conteúdo", - "floatType": "Tipo de Flutuação de Texto", - }, - "drawer": { - ...en.drawer, - - "closePosition": "Posição do Botão Fechar", - "placement": "Posição da Gaveta", - "size": "Tamanho", - "top": "Superior", - "right": "Direita", - "center": "Center", - "bottom": "Inferior", - "left": "Esquerda", - "title": "Título da gaveta", - "titleAlign": "Alinhamento do título", - "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", - "heightTooltip": "Pixel, ex: 378", - "openDrawerDesc": "Abrir Gaveta", - "closeDrawerDesc": "Fechar Gaveta", - "width": "Largura da Gaveta", - "height": "Altura da Gaveta", - }, - "meeting": { - ...en.meeting, - - "logLevel": "Nível de log do SDK da Agora", - "placement": "Posição da Gaveta de Reuniões", - "meeting": "Configurações de Reunião", - "cameraView": "Visualização da Câmera", - "cameraViewDesc": "Visualização da câmera do usuário local (anfitrião)", - "screenShared": "Compartilhamento de Tela", - "screenSharedDesc": "Tela compartilhada pelo usuário local (anfitrião)", - "audioUnmuted": "Áudio Ativado", - "audioMuted": "Áudio Desativado", - "videoClicked": "Vídeo Clicado", - "videoOff": "Vídeo Desativado", - "videoOn": "Vídeo Ativado", - "size": "Tamanho", - "top": "Superior", - "host": "Anfitrião da Sala de Reunião. Você precisaria gerenciar o anfitrião como sua lógica de aplicativo", - "participants": "Participantes da Sala de Reunião", - "shareScreen": "Exibir Tela Compartilhada pelo Usuário Local", - "appid": "ID do Aplicativo da Agora", - "meetingName": "Nome da Reunião", - "localUserID": "ID do Usuário Anfitrião", - "userName": "Nome do Usuário Anfitrião", - "rtmToken": "Token RTM da Agora", - "rtcToken": "Token RTC da Agora", - "noVideo": "Sem Vídeo", - "profileImageUrl": "URL da Imagem de Perfil", - "right": "Direita", - "bottom": "Inferior", - "videoId": "ID do Fluxo de Vídeo", - "audioStatus": "Status de Áudio", - "left": "Esquerda", - "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", - "heightTooltip": "Pixel, ex: 378", - "openDrawerDesc": "Abrir Gaveta", - "closeDrawerDesc": "Fechar Gaveta", - "width": "Largura da Gaveta", - "height": "Altura da Gaveta", - "actionBtnDesc": "Botão de Ação", - "broadCast": "Transmissão de Mensagens", - "title": "Título da Reunião", - "meetingCompName": "Controlador de Reunião da Agora", - "sharingCompName": "Transmissão de Tela", - "videoCompName": "Transmissão de Câmera", - "videoSharingCompName": "Transmissão de Tela", - "meetingControlCompName": "Botão de Ícone", - "meetingCompDesc": "Componente de Reunião", - "meetingCompControls": "Controle de Reunião", - "meetingCompKeywords": "Reunião da Agora, Reunião Web, Colaboração", - "iconSize": "Tamanho do Ícone", - "userId": "ID do Usuário Anfitrião", - "roomId": "ID da Sala", - "meetingActive": "Reunião em Andamento", - "messages": "Mensagens Transmitidas", - }, - "settings": { - ...en.settings, - - "title": "Configurações", - "userGroups": "Grupos de Usuários", - "organization": "Espaços de Trabalho", - "subscription": "Assinaturas", - "audit": "Registros de Auditoria", - "theme": "Temas", - "plugin": "Plug-ins", - "advanced": "Avançado", - "apiDocs": "Documentos da API", - "lab": "Laboratório", - "branding": "Marca", - "oauthProviders": "Autenticação de Usuário", - "appUsage": "Logs de Uso do Aplicativo", - "environments": "Ambientes", - "premium": "Prémio", - "AppUsage": "Uso Global do Aplicativo", - }, - "memberSettings": { - ...en.memberSettings, - - "admin": "Administrador", - "superAdmin": "Superadministrador", - "adminGroupRoleInfo": "O administrador pode gerenciar membros do grupo e recursos", - "adminOrgRoleInfo": "Os administradores possuem todos os recursos e podem gerenciar grupos.", - "member": "Membro", - "memberGroupRoleInfo": "O membro pode visualizar membros do grupo", - "memberOrgRoleInfo": "Os membros só podem usar ou acessar recursos aos quais têm acesso.", - "title": "Membros", - "createGroup": "Criar Grupo", - "newGroupPrefix": "Novo Grupo ", - "allMembers": "Todos os Membros", - "deleteModalTitle": "Excluir Este Grupo", - "deleteModalContent": "O grupo excluído não pode ser restaurado. Você tem certeza de que deseja excluir o grupo?", - "addMember": "Adicionar Membros", - "nameColumn": "Nome do Usuário", - "joinTimeColumn": "Tempo de Entrada", - "actionColumn": "Operação", - "roleColumn": "Função", - "exitGroup": "Sair do Grupo", - "moveOutGroup": "Remover do Grupo", - "inviteUser": "Convidar Membros", - "exitOrg": "Sair", - "exitOrgDesc": "Você tem certeza de que deseja sair deste espaço de trabalho.", - "moveOutOrg": "Remover", - "moveOutOrgDescSaasMode": "Você tem certeza de que deseja remover o usuário {name} deste espaço de trabalho?", - "moveOutOrgDesc": "Você tem certeza de que deseja remover o usuário {name}? Esta ação não pode ser recuperada.", - "devGroupTip": "Os membros do grupo de desenvolvedores têm privilégios para criar aplicativos e fontes de dados.", - "lastAdminQuit": "O último administrador não pode sair.", - "organizationNotExist": "O espaço de trabalho atual não existe", - "inviteUserHelp": "Você pode copiar o link de convite para enviar ao usuário", - "inviteUserLabel": "Link de Convite:", - "inviteCopyLink": "Copiar Link", - "inviteText": "{userName} convida você a ingressar no espaço de trabalho \"{organization}\", clique no link para ingressar: {inviteLink}", - "groupName": "Nome do Grupo", - "createTime": "Tempo de Criação", - "manageBtn": "Gerenciar", - "userDetail": "Detalhe", - "syncDeleteTip": "Este grupo foi excluído da fonte de catálogo de endereços", - "syncGroupTip": "Este grupo é um grupo de sincronização do catálogo de endereços e não pode ser editado", - }, - "orgSettings": { - ...en.orgSettings, - - "newOrg": "Novo Espaço de Trabalho (Organização)", - "title": "Espaço de Trabalho", - "createOrg": "Criar Espaço de Trabalho (Organização)", - "deleteModalTitle": "Tem certeza de que deseja excluir este espaço de trabalho?", - "deleteModalContent": "Você está prestes a excluir este espaço de trabalho {permanentlyDelete}. Uma vez excluído, o espaço de trabalho {notRestored}.", - "permanentlyDelete": "Permanentemente", - "notRestored": "Não pode ser restaurado", - "deleteModalLabel": "Por favor, digite o nome do espaço de trabalho {name} para confirmar a operação:", - "deleteModalTip": "Por favor, digite o nome do espaço de trabalho", - "deleteModalErr": "O nome do espaço de trabalho está incorreto", - "deleteModalBtn": "Excluir", - "editOrgTitle": "Editar Informações do Espaço de Trabalho", - "orgNameLabel": "Nome do Espaço de Trabalho:", - "orgNameCheckMsg": "O nome do espaço de trabalho não pode estar vazio", - "orgLogo": "Logo do Espaço de Trabalho:", - "logoModify": "Modificar Imagem", - "inviteSuccessMessage": "Junte-se ao Espaço de Trabalho com Sucesso", - "inviteFailMessage": "Falha ao Entrar no Espaço de Trabalho", - "uploadErrorMessage": "Erro ao Carregar", - "orgName": "Nome do Espaço de Trabalho", - }, - "freeLimit": "Teste Gratuito", - "tabbedContainer": { - ...en.tabbedContainer, - - "switchTab": "Alternar Aba", - "switchTabDesc": "Acionado ao Alternar Abas", - "tab": "Abas", - "atLeastOneTabError": "O Contêiner de Abas Deve Manter Pelo Menos Uma Aba", - "selectedTabKeyDesc": "Aba Atualmente Selecionada", - "iconPosition": "Posição do Ícone", - "placement": "Posicionamento das Abas", - "showTabs": "Mostrar Abas", - "gutter": "Espaçamento", - "gutterTooltip": "A distância entre as abas em px", - "tabsCentered": "Abas Centralizadas", - }, - "formComp": { - ...en.formComp, - - "containerPlaceholder": "Arraste Componentes do Painel à Direita ou", - "openDialogButton": "Gerar um Formulário a partir de uma de suas Fontes de Dados", - "resetAfterSubmit": "Redefinir Após Envio Bem-Sucedido", - "initialData": "Dados Iniciais", - "disableSubmit": "Desativar Envio", - "success": "Formulário Gerado com Sucesso", - "selectCompType": "Selecione o Tipo de Componente", - "dataSource": "Fonte de Dados: ", - "selectSource": "Selecionar Fonte", - "table": "Tabela: ", - "selectTable": "Selecionar Tabela", - "columnName": "Nome da Coluna", - "dataType": "Tipo de Dados", - "compType": "Tipo de Componente", - "required": "Obrigatório", - "generateForm": "Gerar Formulário", - "compSelectionError": "Tipo de Coluna Não Configurado", - "compTypeNameError": "Não foi Possível Obter o Nome do Tipo de Componente", - "noDataSourceSelected": "Nenhuma Fonte de Dados Selecionada", - "noTableSelected": "Nenhuma Tabela Selecionada", - "noColumn": "Nenhuma Coluna", - "noColumnSelected": "Nenhuma Coluna Selecionada", - "noDataSourceFound": "Nenhuma Fonte de Dados Suportada Encontrada. Crie uma Nova Fonte de Dados", - "noTableFound": "Nenhuma Tabela Foi Encontrada nesta Fonte de Dados, Por Favor, Selecione Outra Fonte de Dados", - "noColumnFound": "Nenhuma Coluna Suportada Foi Encontrada nesta Tabela. Por Favor, Selecione Outra Tabela", - "formTitle": "Título do Formulário", - "name": "Nome", - "nameTooltip": "O Nome do Atributo nos Dados do Formulário, Quando Deixado em Branco, Padrão para o Nome do Componente", - "notSupportMethod": "Métodos Não Suportados: ", - "notValidForm": "O Formulário Não é Válido", - "resetDesc": "Redefinir Dados do Formulário para o Valor Padrão", - "clearDesc": "Limpar Dados do Formulário", - "setDataDesc": "Definir Dados do Formulário", - "valuesLengthError": "Erro no Número de Parâmetros", - "valueTypeError": "Erro no Tipo de Parâmetro", - "dataDesc": "Dados Atuais do Formulário", - "loadingDesc": "O Formulário Está Carregando?", - }, - "modalComp": { - ...en.modalComp, - - "open": "Aberto", - "openDesc": "Acionado quando a caixa de diálogo modal é aberta", - "close": "Fechar", - "closeDesc": "Acionado Quando a Caixa de Diálogo Modal é Fechada", - "openModalDesc": "Abrir a Caixa de Diálogo", - "closeModalDesc": "Fechar a Caixa de Diálogo", - "visibleDesc": "Está Visível? Se Verdadeiro, a Caixa de Diálogo Atual Será Exibida", - "title": "Título da gaveta", - "titleAlign": "Alinhamento do título", - "modalHeight": "Altura da Modal", - "modalHeightTooltip": "Pixels, Exemplo: 222", - "modalWidth": "Largura da Modal", - "modalWidthTooltip": "Número ou Porcentagem, Exemplo: 520, 60%", - }, - "listView": { - ...en.listView, - - "noOfRows": "Contagem de Linhas", - "noOfRowsTooltip": "Número de Linhas na Lista - Normalmente Configurado para uma Variável (por exemplo, '{{query1.data.length}}') para Apresentar Resultados da Consulta", - "noOfColumns": "Contagem de Colunas", - "itemIndexName": "Nome do Índice do Item de Dados", - "itemIndexNameDesc": "O Nome da Variável Referente ao Índice do Item, Padrão como {default}", - "itemDataName": "Nome do Objeto de Dados do Item", - "itemDataNameDesc": "O Nome da Variável Referente ao Objeto de Dados do Item, Padrão como {default}", - "itemsDesc": "Expondo Dados dos Componentes na Lista", - "dataDesc": "Os Dados JSON Usados na Lista Atual", - "dataTooltip": "Se Você Apenas Definir um Número, Este Campo Será Considerado como Contagem de Linhas, e os Dados Serão Considerados como Vazios.", - }, - "navigation": { - ...en.navigation, - - "addText": "Adicionar Item de Submenu", - "logoURL": "URL do Logotipo da Navegação", - "horizontalAlignment": "Alinhamento Horizontal", - "logoURLDesc": "Você pode exibir um Logotipo no lado esquerdo inserindo um Valor de URI ou String Base64 como data:image/png;base64,AAA... CCC", - "itemsDesc": "Itens do Menu de Navegação Hierárquica", - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - - "subMenu": "Submenu {número}", - }, - "navItemComp": { - ...en.navItemComp, - - "active": "Ativo", - }, - "iframe": { - ...en.iframe, - - "URLDesc": "O URL de Origem para o Conteúdo do IFrame. Certifique-se de que o URL é HTTPS ou localhost. Além disso, certifique-se de que o URL não está bloqueado pela Política de Segurança de Conteúdo (CSP) do navegador. O cabeçalho 'X-Frame-Options' não deve ser definido como 'DENY' ou 'SAMEORIGIN'.", - "allowDownload": "Permitir Downloads", - "allowSubmitForm": "Permitir Envio de Formulário", - "allowMicrophone": "Permitir Microfone", - "allowCamera": "Permitir Câmera", - "allowPopup": "Permitir Pop-ups", - }, - "switchComp": { - ...en.switchComp, - - "defaultValue": "Valor Booleano Padrão", - "open": "Ligado", - "close": "Desligado", - "openDesc": "Acionado Quando o Interruptor é Ligado", - "closeDesc": "Acionado Quando o Interruptor é Desligado", - "valueDesc": "Status Atual do Interruptor", - }, - "signature": { - ...en.signature, - - "tips": "Texto de Dica", - "signHere": "Assine Aqui", - "showUndo": "Mostrar Desfazer", - "showClear": "Mostrar Limpar", - }, - "localStorageComp": { - ...en.localStorageComp, - - "valueDesc": "Todos os Itens de Dados Armazenados Atualmente", - "setItemDesc": "Adicionar um Item", - "removeItemDesc": "Remover um Item", - "clearItemDesc": "Limpar Todos os Itens", - }, - "utilsComp": { - ...en.utilsComp, - - "openUrl": "Abrir URL", - "openApp": "Abrir Aplicativo", - "copyToClipboard": "Copiar para a Área de Transferência", - "downloadFile": "Baixar Arquivo", - }, - "messageComp": { - ...en.messageComp, - - "info": "Enviar uma Notificação", - "loading": "Enviar uma Notificação de Carregamento", - "success": "Enviar uma Notificação de Sucesso", - "warn": "Enviar uma Notificação de Aviso", - "error": "Enviar uma Notificação de Erro", - }, - "toastComp": { - ...en.toastComp, - - "destroy": "Fechar uma Notificação", - "info": "Enviar uma Notificação", - "loading": "Enviar uma Notificação de Carregamento", - "success": "Enviar uma Notificação de Sucesso", - "warn": "Enviar uma Notificação de Aviso", - "error": "Enviar uma Notificação de Erro", - }, - "themeComp": { - ...en.themeComp, - - "switchTo": "Alterar Tema", - }, - "transformer": { - ...en.transformer, - - "preview": "Pré-Visualização", - "docLink": "Saiba Mais Sobre Transformadores...", - "previewSuccess": "Pré-Visualização Bem-Sucedida", - "previewFail": "Falha na Pré-Visualização", - "deleteMessage": "Transformador Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", - "documentationText": "Os transformadores são projetados para transformação de dados e reutilização do seu código JavaScript multi-linha. Use transformadores para adaptar dados de consultas ou componentes às necessidades de seu aplicativo local. Ao contrário da consulta JavaScript, o transformador é projetado para realizar operações somente de leitura, o que significa que você não pode acionar uma consulta ou atualizar um estado temporário dentro de um transformador.", - }, - "temporaryState": { - ...en.temporaryState, - - "value": "Valor Inicial", - "valueTooltip": "O Valor Inicial Armazenado no Estado Temporário Pode Ser Qualquer Valor JSON Válido.", - "docLink": "Saiba Mais Sobre Estados Temporários...", - "pathTypeError": "O Caminho Deve Ser uma String ou um Array de Valores", - "unStructuredError": "Dados Não Estruturados {prev} Não Podem Ser Atualizados por {path}", - "valueDesc": "Valor do Estado Temporário", - "deleteMessage": "O Estado Temporário Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", - "documentationText": "Os estados temporários são um recurso poderoso usado para gerenciar variáveis complexas que atualizam dinamicamente o estado dos componentes em seu aplicativo. Esses estados funcionam como armazenamento intermediário ou transitório para dados que podem mudar ao longo do tempo devido a interações do usuário ou outros processos.", - }, - "dataResponder": { - ...en.dataResponder, - - "data": "Dados", - "dataDesc": "Dados do Data Responder Atual", - "dataTooltip": "Quando Estes Dados São Alterados, Irão Acionar Ações Subsequentes.", - "docLink": "Saiba Mais Sobre os Data Responders...", - "deleteMessage": "O Data Responder Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", - "documentationText": "Ao desenvolver um aplicativo, você pode atribuir eventos a componentes para monitorar alterações em dados específicos. Por exemplo, um componente de Tabela pode ter eventos como \"Alteração de seleção de linha\", \"Alteração de filtro\", \"Alteração de ordenação\" e \"Alteração de página\" para rastrear alterações na propriedade selectedRow. No entanto, para alterações em estados temporários, transformadores ou resultados de consulta, onde eventos padrão não estão disponíveis, os Data Responders são utilizados. Eles permitem detectar e reagir a quaisquer modificações de dados.", - }, - "theme": { - ...en.theme, - - "title": "Temas", - "createTheme": "Criar Tema", - "themeName": "Nome do Tema:", - "themeNamePlaceholder": "Por favor, insira um nome para o tema", - "defaultThemeTip": "Tema Padrão:", - "createdThemeTip": "O Tema Que Você Criou:", - "option": "Opção {index}", - "input": "Entrada", - "confirm": "Ok", - "emptyTheme": "Nenhum Tema Disponível", - "click": "", - "toCreate": "", - "nameColumn": "Nome", - "defaultTip": "Padrão", - "updateTimeColumn": "Tempo de Atualização", - "edit": "Editar", - "cancelDefaultTheme": "Cancelar Tema Padrão", - "setDefaultTheme": "Definir como Tema Padrão", - "copyTheme": "Duplicar Tema", - "setSuccessMsg": "Configuração Bem-Sucedida", - "cancelSuccessMsg": "Cancelamento Bem-Sucedido", - "deleteSuccessMsg": "Exclusão Bem-Sucedida", - "checkDuplicateNames": "O Nome do Tema Já Existe, Por Favor, Reinsira-o", - "copySuffix": " Cópia", - "saveSuccessMsg": "Salvo com Sucesso", - "leaveTipTitle": "Dicas", - "leaveTipContent": "Você Ainda Não Salvou, Confirmar Saída?", - "leaveTipOkText": "Sair", - "goList": "Voltar para a Lista", - "saveBtn": "Salvar", - "mainColor": "Cores Principais", - "text": "Cores do Texto", - "layout": "Configurações de layout", - "fonts": "Definições do tipo de letra", - "components": "Modelos de componentes", - "charts": "Definição de eCharts", - "defaultTheme": "Padrão", - "yellow": "Amarelo", - "green": "Verde", - "previewTitle": "Pré-Visualização do Tema\nExemplo de Componentes que Utilizam as Cores do Seu Tema", - "dateColumn": "Data", - "emailColumn": "Correio eletrónico", - "phoneColumn": "Telefone", - "subTitle": "Título", - "linkLabel": "Ligação a", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Progresso", - "sliderLabel": "Controle Deslizante", - "radioLabel": "Botão de Opção", - "checkboxLabel": "Caixa de Seleção", - "buttonLabel": "Botão de Formulário", - "switch": "Interruptor", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "balão.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Pré-Visualização do Estilo do Gráfico", - "chartSpending": "Gastos", - "chartBudget": "Orçamento", - "chartAdmin": "Administração", - "chartFinance": "Finanças", - "chartSales": "Vendas", - "chartFunnel": "Gráfico de Funil", - "chartShow": "Mostrar", - "chartClick": "Clique", - "chartVisit": "Visita", - "chartQuery": "Consulta", - "chartBuy": "Comprar", - }, - "themeDetail": { - ...en.themeDetail, - - "primary": "Cor da Marca", - "primaryDesc": "Cor primária padrão usada pela maioria dos componentes", - "textDark": "Cor do Texto Escuro", - "textDarkDesc": "Usado quando a cor de fundo é clara", - "textLight": "Cor do Texto Claro", - "textLightDesc": "Usado quando a cor de fundo é escura", - "canvas": "Cor do Fundo", - "canvasDesc": "Cor de fundo padrão do aplicativo", - "primarySurface": "Cor do Contêiner", - "primarySurfaceDesc": "Cor de fundo padrão para componentes como tabelas", - "borders": "Estilos de fronteira", - "spacing": "Estilos de espaçamento", - "font": "Estilos de letra", - "fonts": "Fontes", - "borderRadius": "Raio da Borda", - "borderRadiusDesc": "Raio da borda padrão usado pela maioria dos componentes", - "borderColor": "Cor da fronteira", - "borderColorDesc": "Cor do contorno predefinida utilizada pela maioria dos componentes", - "borderWidth": "Largura da margem", - "borderWidthDesc": "Largura do limite predefinida utilizada pela maioria dos componentes", - "borderStyle": "Estilo de fronteira", - "borderStyleDesc": "Estilo de contorno predefinido utilizado pela maioria dos componentes", - "fontFamily": "Família de letras", - "fontFamilyDesc": "Família de tipos de letra predefinida utilizada pela maioria dos componentes", - "chart": "Estilo do Gráfico", - "chartDesc": "Entrada para Echarts", - "echartsJson": "Tema JSON", - "margin": "Margem", - "marginDesc": "Margem padrão normalmente usada para a maioria dos componentes", - "padding": "Preenchimento", - "paddingDesc": "Preenchimento padrão normalmente usado para a maioria dos componentes", - "containerHeaderPadding": "Preenchimento do Cabeçalho", - "containerheaderpaddingDesc": "Preenchimento padrão do cabeçalho normalmente usado para a maioria dos componentes", - "gridColumns": "Colunas da Grade", - "gridColumnsDesc": "Número padrão de colunas normalmente usado para a maioria dos contêineres", - "loadingIndicators": "Indicadores de carga", - "showComponentLoadingIndicators": "Mostrar indicadores de carregamento quando o componente é carregado", - "showDataLoadingIndicators": "Mostrar indicadores de carregamento durante o carregamento dos dados", - "showIndicatorsDuringDataLoading": "Mostrar indicadores durante o carregamento de dados", - "dataLoadingIndicator": "Indicador de carregamento de dados" - }, - "pluginSetting": { - ...en.pluginSetting, - - "title": "Plugins", - "npmPluginTitle": "Plugins do npm", - "npmPluginDesc": "Configure os plugins do npm para todas as aplicações no espaço de trabalho atual.", - "npmPluginEmpty": "Nenhum plugin do npm foi adicionado.", - "npmPluginAddButton": "Adicionar um plugin do npm", - "saveSuccess": "Salvo com sucesso", - }, - "advanced": { - ...en.advanced, - - "title": "Avançado", - "defaultHomeTitle": "Página Inicial Padrão", - "defaultHomeHelp": "A Página Inicial é a aplicação que todos os não desenvolvedores verão por padrão quando fizerem login. Observação: certifique-se de que a aplicação selecionada seja acessível aos não desenvolvedores.", - "defaultHomePlaceholder": "Selecione a Página Inicial Padrão", - "saveBtn": "Salvar", - "preloadJSTitle": "Pré-carregar JavaScript", - "preloadJSHelp": "Configure código JavaScript pré-carregado para todas as aplicações no espaço de trabalho atual.", - "preloadCSSTitle": "Pré-carregar CSS", - "preloadCSSHelp": "Configure código CSS pré-carregado para todas as aplicações no espaço de trabalho atual.", - "preloadCSSApply": "Aplicar à Página Inicial do Espaço de Trabalho", - "preloadLibsTitle": "Biblioteca JavaScript", - "preloadLibsHelp": "Configure bibliotecas JavaScript pré-carregadas para todas as aplicações no espaço de trabalho atual. O sistema possui lodash, day.js, uuid, numbro integrados para uso direto. As bibliotecas JavaScript são carregadas antes que a aplicação seja inicializada, portanto, há um certo impacto no desempenho da aplicação.", - "preloadLibsEmpty": "Nenhuma biblioteca JavaScript foi adicionada", - "preloadLibsAddBtn": "Adicionar uma biblioteca", - "saveSuccess": "Salvo com sucesso", - "AuthOrgTitle": "Tela de Boas-Vindas do Espaço de Trabalho", - "AuthOrgDescrition": "A URL para os seus usuários entrarem no espaço de trabalho atual.", - "APIConsumption": "Consumo de API", - "APIConsumptionDescription": "Aqui você pode ver o consumo de API para todas as aplicações no espaço de trabalho atual.", - "overallAPIConsumption": "Consumo geral de API neste espaço de trabalho até o momento", - "lastMonthAPIConsumption": "Consumo de API do último mês, neste espaço de trabalho", - "npmRegistryTitle": "Registo NPM personalizado", - "npmRegistryHelp": "Configurar um registo NPM personalizado para permitir a obtenção de plugins a partir de um registo NPM privado.", - "showHeaderInPublicApps": "Mostrar cabeçalho em exibição pública", - "showHeaderInPublicAppsHelp": "Defina a visibilidade do cabeçalho em exibição pública para todos os aplicativos", - }, - "branding": { - ...en.branding, - - "title": "Marca", - "logoTitle": "Logótipo", - "logoHelp": "Somente .JPG, .SVG ou .PNG", - "faviconTitle": "Favicon", - "faviconHelp": "Somente .JPG, .SVG ou .PNG", - "brandNameTitle": "Nome da Marca", - "headColorTitle": "Cor Principal", - "save": "Salvar", - "saveSuccessMsg": "Salvo com sucesso", - "upload": "Clique para Fazer Upload", - }, - "networkMessage": { - ...en.networkMessage, - - "0": "Falha ao Conectar ao Servidor, Por Favor, Verifique Sua Conexão de Rede", - "200": "Sucesso", - "201": "Criado", - "204": "Sem Conteúdo", - "400": "Solicitação Inválida", - "401": "Autenticação Falhou, Por Favor, Faça Login Novamente", - "403": "Sem Permissão, Por Favor, Contate o Administrador para Autorização", - "404": "Não Encontrado", - "500": "Serviço Ocupado, Por Favor, Tente Novamente Mais Tarde", - "timeout": "Tempo Limite da Solicitação", - }, - "share": { - ...en.share, - - "title": "Compartilhar", - "viewer": "Visualizador", - "editor": "Editor", - "owner": "Proprietário", - "datasourceViewer": "Pode Usar", - "datasourceOwner": "Pode Gerenciar", - }, - "debug": { - ...en.debug, - - "title": "Título", - "switch": "Alternar Componente: ", - }, - "module": { - ...en.module, - - "emptyText": "Sem Dados", - "docLink": "Saiba Mais Sobre Módulos...", - "documentationText": "Módulos são Aplicações completas, que podem ser incluídas e repetidas em outras Aplicações e funcionam como um único componente. Como os módulos podem ser incorporados, eles precisam ser capazes de interagir com suas aplicações ou sites externos. Essas quatro configurações ajudam a suportar a comunicação com um Módulo.", - "circularReference": "Referência Circular, o Módulo/Aplicação Atual Não Pode Ser Usado!", - "emptyTestInput": "O Módulo Atual Não Tem Entrada para Testar", - "emptyTestMethod": "O Módulo Atual Não Possui Método para Testar", - "name": "Nome", - "input": "Entrada", - "params": "Parâmetros", - "emptyParams": "Nenhum Parâmetro Foi Adicionado", - "emptyInput": "Nenhuma Entrada Foi Adicionada", - "emptyMethod": "Nenhum Método Foi Adicionado", - "emptyOutput": "Nenhuma Saída Foi Adicionada", - "data": "Dados", - "string": "Texto", - "number": "Número", - "array": "Arranjo", - "boolean": "Booleano", - "query": "Consulta", - "autoScaleCompHeight": "A Altura do Componente se Ajusta ao Contêiner", - "excuteMethod": "Executar Método {name}", - "method": "Método", - "action": "Ação", - "output": "Saída", - "nameExists": "O Nome {name} Já Existe", - "eventTriggered": "Evento {name} Acionado", - "globalPromptWhenEventTriggered": "Exibe um Alerta Global Quando um Evento é Acionado", - "emptyEventTest": "O Módulo Atual Não Possui Eventos para Testar", - "emptyEvent": "Nenhum Evento Foi Adicionado", - "event": "Evento", - }, - "resultPanel": { - ...en.resultPanel, - - "returnFunction": "O Valor de Retorno é uma Função.", - "consume": "{time}", - "JSON": "Mostrar JSON", - }, - "createAppButton": { - ...en.createAppButton, - - "creating": "Criando...", - "created": "Criar {name}", - }, - "apiMessage": { - ...en.apiMessage, - - "authenticationFail": "Falha na Autenticação do Usuário, Por Favor Faça Login Novamente", - "verifyAccount": "Necessário Verificar a Conta", - "functionNotSupported": "A Versão Atual Não Suporta Esta Função. Por Favor, Entre em Contato com a Equipe de Negócios da Lowcoder para Atualizar sua Conta", - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - - "createCompFail": "Falha ao Criar o Componente {comp}", - "notHandledError": "Erro Não Tratado no Método {method}", - }, - "aggregation": { - ...en.aggregation, - - "navLayout": "Barra de Navegação", - "chooseApp": "Escolher Aplicativo", - "iconTooltip": "Suporta Link de Imagem src ou String Base64 como data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Oculto para Usuários Não Autorizados", - "queryParam": "Parâmetros de Consulta da URL", - "hashParam": "Parâmetros de Hash da URL", - "tabBar": "Barra de Abas", - "emptyTabTooltip": "Configure Esta Página no Painel Direito", - }, - "appSetting": { - ...en.appSetting, - - "450": "450px (Celular)", - "800": "800px (Tablet)", - "1440": "1440px (Notebook)", - "1920": "1920px (Tela Larga)", - "3200": "3200px (Tela Super Grande)", - "title": "Configurações Gerais do Aplicativo", - "autofill": "Preenchimento Automático", - "userDefined": "Personalizado", - "default": "Padrão", - "tooltip": "Fechar a Popover Após Configuração", - "canvasMaxWidth": "Largura Máxima do Canvas para Este Aplicativo", - "userDefinedMaxWidth": "Largura Máxima Personalizada", - "inputUserDefinedPxValue": "Por Favor, Insira um Valor Personalizado em Pixels", - "maxWidthTip": "A Largura Máxima Deve Ser Maior ou Igual a 350", - "themeSetting": "Tema de Estilo Aplicado", - "themeSettingDefault": "Padrão", - "themeCreate": "Criar Tema", - "appTitle": "Título", - "appDescription": "Descrição", - "appCategory": "Categoria", - "showPublicHeader": "Mostrar cabeçalho na visualização pública", - }, - "customShortcut": { - ...en.customShortcut, - - "title": "Atalhos Personalizados", - "shortcut": "Atalho", - "action": "Ação", - "empty": "Nenhum Atalho", - "placeholder": "Pressione Atalho", - "otherPlatform": "Outro", - "space": "Espaço", - }, - "profile": { - ...en.profile, - - "orgSettings": "Configurações do Espaço de Trabalho", - "switchOrg": "Trocar Espaço de Trabalho", - "joinedOrg": "Meus Espaços de Trabalho", - "createOrg": "Criar Espaço de Trabalho", - "logout": "Sair", - "personalInfo": "Meu Perfil", - "bindingSuccess": "Vínculo {sourceName} Bem-Sucedido", - "uploadError": "Erro ao Fazer Upload", - "editProfilePicture": "Modificar", - "saveUserNameTooltip": "Pressione Enter para Salvar seu Novo NicName. Se você ver seu E-mail, significa que acabamos de assumi-lo como Nome de Usuário e você pode alterá-lo para um melhor. Seu E-mail como nome de usuário técnico permanece intocado.", - "changeAvatarTooltip": "Você Pode Fazer Upload de Arquivos PNG ou JPG", - "nameCheck": "O Nome Não Pode Estar Vazio", - "name": "Nome: ", - "namePlaceholder": "Por Favor, Insira Seu Nome", - "toBind": "Para Vincular", - "binding": "Está Vinculando", - "bindError": "Erro de Parâmetro, Vinculação Atualmente Não Suportada.", - "bindName": "Vincular {name}", - "loginAfterBind": "Após a Vinculação, Você Pode Usar {name} para Fazer Login", - "bindEmail": "Vincular E-mail:", - "email": "E-mail", - "emailCheck": "Por Favor, Insira um E-mail Válido", - "emailPlaceholder": "Por Favor, Insira Seu E-mail", - "submit": "Enviar", - "bindEmailSuccess": "Vinculação de E-mail Bem-Sucedida", - "passwordModifiedSuccess": "Senha Alterada com Sucesso", - "passwordSetSuccess": "Senha Definida com Sucesso", - "oldPassword": "Senha Antiga:", - "inputCurrentPassword": "Por Favor, Insira Sua Senha Atual", - "newPassword": "Nova Senha:", - "inputNewPassword": "Por Favor, Insira Sua Nova Senha", - "confirmNewPassword": "Confirmar Nova Senha:", - "inputNewPasswordAgain": "Por Favor, Insira Sua Nova Senha Novamente", - "password": "Senha:", - "modifyPassword": "Alterar Senha", - "setPassword": "Definir Senha", - "alreadySetPassword": "Senha Definida", - "setPassPlaceholder": "Você Pode Fazer Login com Senha", - "setPassAfterBind": "Você Pode Definir a Senha Após Vincular a Conta", - "socialConnections": "Conexões Sociais", - "changeAvatar": "Alterar Avatar", - "about": "Sobre", - "userId": "ID do Usuário", - "createdAt": "Criado Em", - "currentOrg": "Organização Atual", - "settings": "Configurações", - "uiLanguage": "Idioma da Interface do Usuário", - "info": "Informações", - "createdApps": "Seus Aplicativos Criados", - "createdModules": "Seus Módulos Criados", - "sharedApps": "Aplicativos Compartilhados com Você", - "sharedModules": "Módulos Compartilhados com Você", - "onMarketplace": "No Marketplace", - "howToPublish": "Como Publicar no Marketplace", - "memberOfOrgs": "Membro dos Espaços de Trabalho", - "apiKeys": "Chaves de API", - "createApiKey": "Criar Chave de API", - "apiKeyName": "Nome", - "apiKeyDescription": "Descrição", - "apiKeyCopy": "Clique na Chave de API para obter o valor no seu clipboard", - "apiKey": "Chave de API", - "deleteApiKey": "Excluir Chave de API", - "deleteApiKeyContent": "Tem certeza de que deseja excluir esta chave de API?", - "deleteApiKeyError": "Algo deu errado. Por favor, tente novamente.", - }, - "shortcut": { - ...en.shortcut, - - "shortcutList": "Atalhos do Teclado", - "click": "Clique", - "global": "Mundial", - "toggleShortcutList": "Alternar Atalhos do Teclado", - "editor": "Editor", - "toggleLeftPanel": "Alternar Painel Esquerdo", - "toggleBottomPanel": "Alternar Painel Inferior", - "toggleRightPanel": "Alternar Painel Direito", - "toggleAllPanels": "Alternar Todos os Painéis", - "preview": "Visualizar", - "undo": "Desfazer", - "redo": "Refazer", - "showGrid": "Mostrar Grade", - "component": "Componente", - "multiSelect": "Selecionar Múltiplos", - "selectAll": "Selecionar Todos", - "copy": "Copiar", - "cut": "Recortar", - "paste": "Colar", - "move": "Mover", - "zoom": "Redimensionar", - "delete": "Excluir", - "deSelect": "Desselecionar", - "queryEditor": "Editor de Consulta", - "excuteQuery": "Executar Consulta Atual", - "editBox": "Editor de Texto", - "formatting": "Formatar", - "openInLeftPanel": "Abrir no Painel Esquerdo", - }, - "help": { - ...en.help, - - "videoText": "Visão Geral", - "onBtnText": "OK", - "permissionDenyTitle": "💡 Não Consegue Criar um Novo Aplicativo ou Fonte de Dados?", - "permissionDenyContent": "Você não tem permissão para criar o aplicativo e a fonte de dados. Entre em contato com o administrador para se juntar ao grupo de desenvolvedores.", - "appName": "Tutorial do Aplicativo", - "chat": "Converse conosco", - "docs": "Ver Documentação", - "editorTutorial": "Tutorial do Editor", - "update": "O que há de novo?", - "version": "Versão", - "versionWithColon": "Versão: ", - "submitIssue": "Enviar um Problema", - }, - "header": { - ...en.header, - - "nameCheckMessage": "O Nome Não Pode Estar Vazio", - "viewOnly": "Somente Visualização", - "recoverAppSnapshotTitle": "Restaurar Esta Versão?", - "recoverAppSnapshotContent": "Restaurar o Aplicativo Atual para a Versão Criada em {time}.", - "recoverAppSnapshotMessage": "Restaurar Esta Versão", - "returnEdit": "Voltar para o Editor", - "deploy": "Publicar", - "export": "Exportar para JSON", - "editName": "Editar Nome", - "duplicate": "Duplicar {type}", - "snapshot": "Histórico", - "scriptsAndStyles": "Scripts e Estilos", - "appSettings": "Configurações do Aplicativo", - "preview": "Visualização", - "editError": "Modo de Pré-visualização do Histórico, Nenhuma Operação é Suportada.", - "clone": "Clonar", - "editorMode_layout": "Disposição", - "editorMode_logic": "Lógica", - "editorMode_both": "Ambos", - "editorMode_layout_tooltip": "Personalize a aparência e o layout do componente, na janela direita. Ajuste sua aparência, estilo e animação.", - "editorMode_logic_tooltip": "Configure como seu componente funciona e interage, na janela direita. Gerencie seu conteúdo e comportamentos interativos.", - "AppEditingBlocked": "Edição do aplicativo bloqueada para:", - "AppEditingBlockedHint": "As alterações não serão salvas enquanto outro usuário estiver editando este aplicativo.", - "AppEditingBlockedMessage": "Por favor, aguarde antes de verificar o status de edição do aplicativo.", - "AppEditingBlockedCheckStatus": "Verificar status do aplicativo", - "AppEditingBlockedSomeone": "Alguém", - "AppEditingBlockedMessageSnipped": "está editando este aplicativo", - }, - "userAuth": { - ...en.userAuth, - - "registerByEmail": "Registrar", - "email": "Correio eletrónico:", - "inputEmail": "Por favor, digite seu email", - "inputValidEmail": "Por favor, insira um email válido", - "forgotPassword": "Esqueceu a Senha", - "forgotPasswordInfo": "Digite seu email e enviaremos um link para redefinir sua senha.", - "forgotPasswordSuccess": "Por favor, verifique seu email para o link de redefinição de senha.", - "forgotPasswordError": "Algo deu errado. Por favor, tente novamente.", - "register": "Registrar", - "userLogin": "Entrar", - "login": "Entrar", - "bind": "Vincular", - "passwordCheckLength": "Pelo Menos {min} Caracteres", - "passwordCheckContainsNumberAndLetter": "Deve Conter Letras e Números", - "passwordCheckSpace": "Não Pode Conter Espaços", - "welcomeTitle": "Bem-vindo ao {productName}", - "inviteWelcomeTitle": "{username} convida você a trabalhar juntos", - "terms": "Termos", - "privacy": "Política de Privacidade", - "registerHint": "Li e concordo com os", - "chooseAccount": "Escolha sua Conta", - "signInLabel": "Entrar com {name}", - "bindAccount": "Vincular Conta", - "scanQrCode": "Escanear o Código QR com {name}", - "invalidThirdPartyParam": "Parâmetro de Terceiros Inválido", - "account": "Conta", - "inputAccount": "Por favor, insira sua conta", - "ldapLogin": "Entrar com LDAP", - "resetPassword": "Redefinir Senha", - "resetPasswordDesc": "Redefinir a senha do usuário {name}. Uma nova senha será gerada após a redefinição.", - "resetSuccess": "Redefinição Bem-sucedida", - "resetSuccessDesc": "Redefinição de senha bem-sucedida. A nova senha é: {password}", - "resetLostPasswordSuccess": "Redefinição de senha bem-sucedida. Por favor, faça login novamente.", - "copyPassword": "Copiar Senha", - "poweredByLowcoder": "Desenvolvido por: Lowcoder.cloud", - }, - "preLoad": { - ...en.preLoad, - - "jsLibraryHelpText": "Adicione bibliotecas JavaScript ao seu aplicativo atual por meio de endereços URL. lodash, day.js, uuid, numbro são integrados ao sistema para uso imediato. As bibliotecas JavaScript são carregadas antes que o aplicativo seja inicializado, o que pode impactar no desempenho do aplicativo.", - "exportedAs": "Exportado Como", - "urlTooltip": "Endereço URL da biblioteca JavaScript, [unpkg.com](https://unpkg.com/) ou [jsdelivr.net](https://www.jsdelivr.com/) são recomendados", - "externalLibsHelperText": "Apenas são suportadas as bibliotecas que utilizam a abordagem UMD (Universal Module Definition). Leia mais aqui: https://github.com/umdjs/umd", - "recommended": "Recomendado", - "viewJSLibraryDocument": "Documento", - "jsLibraryURLError": "URL Inválido", - "jsLibraryExist": "A biblioteca JavaScript já existe", - "jsLibraryEmptyContent": "Nenhuma biblioteca JavaScript adicionada", - "jsLibraryDownloadError": "Erro ao baixar a biblioteca JavaScript", - "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada com sucesso", - "jsLibraryInstallFailed": "Falha na instalação da biblioteca JavaScript", - "jsLibraryInstallFailedCloud": "Talvez a biblioteca não esteja disponível na Sandbox, [Documentação](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{mensagem}", - "add": "Adicionar Novo", - "jsHelpText": "Adicione um método ou variável global ao aplicativo atual.", - "cssHelpText": "Adicione estilos ao aplicativo atual. A estrutura DOM pode mudar à medida que o sistema itera. Tente modificar os estilos por meio das propriedades do componente.", - "scriptsAndStyles": "Scripts e Estilos", - "jsLibrary": "Biblioteca JavaScript", - }, - "editorTutorials": { - ...en.editorTutorials, - - "component": "Componente", - "componentContent": "O painel direito de componentes oferece muitos blocos de aplicativos prontos (componentes). Eles podem ser arrastados para o canvas para uso. Você também pode criar seus próprios componentes com um pouco de conhecimento de codificação.", - "canvas": "Tela", - "canvasContent": "Construa seus aplicativos no canvas com uma abordagem de 'O que você vê é o que você obtém'. Basta arrastar e soltar componentes para projetar seu layout e usar atalhos de teclado para edição rápida, como excluir, copiar e colar. Depois que um componente é selecionado, você pode ajustar todos os detalhes - desde estilos e layout até vinculação de dados e comportamento lógico. Além disso, desfrute do benefício adicional do design responsivo, garantindo que seus aplicativos tenham uma aparência ótima em qualquer dispositivo.", - "queryData": "Consultar Dados", - "queryDataContent": "Você pode criar consultas de dados aqui e conectar-se ao MySQL, MongoDB, Redis, Airtable e muitas outras fontes de dados. Após configurar a consulta, clique em 'Executar' para obter os dados e continuar o tutorial.", - "compProperties": "Propriedades do Componente", - "interactiveDemo": "Demonstração interactiva", - "interactiveDemoToolTip": "Clique para iniciar uma demonstração interactiva desta funcionalidade", - }, - "supademos": { - ...en.supademos, - - "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", - }, - "homeTutorials": { - ...en.homeTutorials, - - "createAppContent": "Bem-vindo! Clique em 'Aplicativo' e comece a criar seu primeiro aplicativo.", - "createAppTitle": "Criar Aplicativo", - }, - "npmRegistry": { - ...en.npmRegistry, - - "npmRegistryEnable": "Ativar o registo NPM personalizado", - "npmRegistryUrl": "URL do registo NPM", - "npmRegistryUrlRequired": "Introduza o URL do registo", - "npmRegistryUrlInvalid": "Introduza um URL válido", - "npmRegistryScope": "Âmbito do pacote", - "npmRegistryPattern": "Padrão", - "npmRegistryPatternInvalid": "Introduza um padrão válido (começando por @ para organizações).", - "npmRegistryAuth": "Autenticação", - "npmRegistryAuthType": "Tipo de autenticação", - "npmRegistryAuthCredentials": "Credenciais de autenticação", - "npmRegistryAuthCredentialsRequired": "Introduza as credenciais de registo", - "npmRegistryAuthCredentialsHelp": "Para a autenticação básica, forneça o nome de utilizador e a palavra-passe codificados em base64 no formato 'base64(nome de utilizador:palavra-passe)'; para a autenticação por token, forneça o token.", - }, - "history": { - ...en.history, - - "layout": "Ajuste de layout '{0}'", - "upgrade": "Atualização de '{0}'", - "delete": "Exclusão de '{0}'", - "add": "Adição de '{0}'", - "modify": "Modificação de '{0}'", - "rename": "Renomear '{1}' para '{0}'", - "recover": "Recuperar versão '{2}'", - "recoverVersion": "Recuperar versão", - "andSoOn": "e assim por diante", - "timeFormat": "MM DD às hh:mm A", - "emptyHistory": "Sem histórico", - "currentVersionWithBracket": " (Atual)", - "currentVersion": "Versão atual", - "justNow": "Agora mesmo", - "history": "Histórico", - }, - "home": { - ...en.home, - - "profile": "Seu Perfil", - "news": "Notícias", - "newsLoading": "Irá carregar alguns segundos.", - "orgHome": "Página Inicial (Org)", - "yourOrg": "Sua Organização", - "orgHomeTitle": "Página Inicial da Organização", - "appMarketplace": "Loja de Aplicativos", - "allApplications": "Seus Aplicativos", - "allModules": "Seus Módulos", - "allFolders": "Todas as Pastas", - "yourFolders": "Suas Pastas", - "modules": "Módulos", - "module": "Módulo", - "api": "API do Lowcoder", - "trash": "Lixeira", - "marketplace": "Mercado", - "allCategories": "Todas as Categorias", - "queryLibrary": "Biblioteca de Consultas", - "datasource": "Fontes de Dados", - "selectDatasourceType": "Selecione o Tipo de Fonte de Dados", - "home": "Início", - "all": "Todos", - "app": "Aplicativo", - "navigation": "Navegação", - "navLayout": "Navegação PC", - "navLayoutDesc": "Menu lateral para navegação fácil em desktop.", - "mobileTabLayout": "Navegação Móvel", - "mobileTabLayoutDesc": "Barra de navegação inferior para navegação móvel suave.", - "folders": "Pastas", - "folder": "Pasta", - "rootFolder": "Raiz", - "import": "Importar", - "export": "Exportar para JSON", - "show": "Mostrar", - "inviteUser": "Convidar membros", - "createFolder": "Criar Pasta", - "createFolderSubTitle": "Nome da pasta:", - "moveToFolder": "Mover para pasta", - "moveToTrash": "Mover para lixeira", - "moveToFolderSubTitle": "Mover \"{name}\" para:", - "folderName": "Nome da pasta:", - "resCardSubTitle": "{time} por {creator}", - "trashEmpty": "Lixeira vazia.", - "projectEmpty": "Nada aqui.", - "projectEmptyCanAdd": "Você ainda não tem nenhum aplicativo. Clique em Novo para começar.", - "name": "Nome", - "type": "Tipo", - "creator": "Criado por", - "lastModified": "Última modificação", - "deleteTime": "Hora da exclusão", - "createTime": "Hora da criação", - "datasourceName": "Nome da fonte de dados", - "databaseName": "Nome do banco de dados", - "nameCheckMessage": "O nome não pode estar vazio", - "deleteElementTitle": "Excluir permanentemente", - "moveToTrashSubTitle": "{type} {name} será movido para a lixeira.", - "deleteElementSubTitle": "Excluir {type} {name} permanentemente, não pode ser recuperado.", - "deleteSuccessMsg": "Excluído com sucesso", - "deleteErrorMsg": "Erro ao excluir", - "recoverSuccessMsg": "Recuperado com sucesso", - "newDatasource": "Nova fonte de dados", - "creating": "Criando...", - "chooseDataSourceType": "Escolha o tipo de fonte de dados", - "folderAlreadyExists": "A pasta já existe", - "newNavLayout": "{userName}'s {name}", - "newApp": "{userName}'s novo {name} ", - "importError": "Erro ao importar, {message}", - "exportError": "Erro ao exportar, {message}", - "importSuccess": "Importação bem-sucedida", - "fileUploadError": "Erro no envio do arquivo", - "fileFormatError": "Erro de formato de arquivo", - "groupWithSquareBrackets": "[Grupo] ", - "allPermissions": "Proprietário", - "shareLink": "Link de compartilhamento: ", - "copyLink": "Copiar link", - "appPublicMessage": "Torne o aplicativo público. Qualquer pessoa pode visualizá-lo.", - "modulePublicMessage": "Torne o módulo público. Qualquer pessoa pode visualizá-lo.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Publique seu aplicativo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", - "moduleMarketplaceMessage": "Publique seu Módulo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", - "marketplaceGoodPublishing": "Por favor, certifique-se de que seu aplicativo tenha um nome adequado e seja fácil de usar. Remova qualquer informação sensível antes de publicar. Além disso, remova fontes de dados locais e substitua por dados temporários estáticos integrados.", - "noMarketplaceApps": "Ainda não há aplicativos no mercado.", - "errorMarketplaceApps": "Erro ao carregar aplicativos do Mercado", - "localMarketplaceTitle": "Mercado Local", - "globalMarketplaceTitle": "Mercado Público", - "memberPermissionList": "Permissões dos membros: ", - "orgName": "{orgName} administradores", - "addMember": "Adicionar membros", - "addPermissionPlaceholder": "Por favor, insira um nome para pesquisar membros", - "searchMemberOrGroup": "Buscar membros ou grupos: ", - "addPermissionErrorMessage": "Falha ao adicionar permissão, {message}", - "copyModalTitle": "Clonar \"{name}\"", - "copyNameLabel": "Nome do {type}", - "copyModalfolderLabel": "Adicionar à pasta", - "copyNamePlaceholder": "Por favor, insira um nome de {type}", - "chooseNavType": "Por favor, escolha o tipo de navegação", - "createNavigation": "Criar Navegação", - "howToUseAPI": "Como usar a API Rest Aberta", - "support": "Apoio", - }, - "support": { - ...en.support, - - "supportTitle": "Suporte Lowcoder", - "supportContent": "Se você tiver dúvidas ou precisar de ajuda, use o sistema de tickets para resolver seu problema rapidamente.", - "newSupportTicket": "Novo Ticket de Suporte", - "ticketTitle": "Título", - "priority": "Prioridade", - "assignee": "Responsável", - "status": "Status do Ticket", - "updatedTime": "Horário Atualizado", - "active": "Ativo", - "inactive": "Inativo", - "noEmail": "Sem E-mail", - "details": "Detalhes", - "reloadTickets": "Recarregar Tickets", - "createdDate": "Data de Criação", - "updatedDate": "Data de Atualização", - "description": "Descrição do Problema", - "subtasks": "Subtarefas", - "subtasksProgress": "Progresso de todas as Subtarefas", - "attachments": "Anexos do Problema", - "comments": "Comentários", - "addComment": "Adicionar Comentário", - "addAttachment": "Adicionar Anexo", - "edit": "Editar Descrição do Ticket", - "save": "Salvar Descrição do Ticket", - "cancel": "Cancelar", - "submitComment": "Enviar Comentário", - "upload": "Enviar Anexo", - "selectFile": "Selecionar Arquivo", - "ticketDescriptionUpdated": "Descrição do ticket atualizada com sucesso!", - "ticketDescriptionUpdateFailed": "Falha ao atualizar a descrição do ticket.", - "writeComment": "Escreva um comentário...", - "ticketCommentAdded": "Comentário adicionado com sucesso!", - "ticketCommentFailed": "Falha ao adicionar o comentário.", - "ticketCommentEmpty": "Por favor, escreva um comentário antes de enviar.", - "ticketAttachmentUploaded": "Anexo carregado com sucesso!", - "ticketAttachmentFailed": "Falha ao carregar o anexo.", - "ticketAttachmentEmpty": "Por favor, selecione um arquivo para enviar.", - "ticketFetchError": "Falha ao carregar o ticket.", - "ticketNotFound": "Ticket não encontrado.", - "addAttachmentFileSize": "O arquivo deve ser menor que 5MB!", - "goBack": "Voltar", - "noDescription": "Nenhuma descrição disponível.", - "createTicket": "Criar um novo Ticket de Suporte", - "createTicketTitlePlaceholder": "Digite o Título (máx. 150 caracteres)", - "createTicketDescriptionTitle": "Descreva seu problema - quanto mais detalhes, melhor:", - "createTicketDescriptionPlaceholder": "Descreva o problema em detalhes, incluindo: 1) Passos para reproduzir o problema, 2) Comportamento esperado versus comportamento real, 3) Trechos de código, se aplicável, 4) Componentes específicos, APIs ou configurações afetadas", - "createTicketSubmit": "Enviar Ticket", - "createTicketInfoText": "Quando seu Ticket for criado, você poderá adicionar Capturas de Tela e Comentários na seção 'Detalhes'.", - }, - "carousel": { - ...en.carousel, - - "dotPosition": "Posição dos pontos de navegação", - "autoPlay": "Reprodução automática", - "showDots": "Mostrar pontos de navegação", - }, - "npm": { - ...en.npm, - - "invalidNpmPackageName": "Nome ou URL do Pacote npm Inválido.", - "pluginExisted": "Este plugin npm já existe", - "compNotFound": "Componente {compName} não encontrado.", - "addPluginModalTitle": "Adicionar Plugin de um Repositório npm", - "pluginNameLabel": "URL ou Nome do Pacote npm", - "noCompText": "Sem componentes.", - "compsLoading": "Carregando...", - "removePluginBtnText": "Remover", - "addPluginBtnText": "Adicionar Plugin npm", - }, - "toggleButton": { - ...en.toggleButton, - - "valueDesc": "O Valor Padrão do Botão de Alternância, Por Exemplo: Falso", - "trueDefaultText": "Ocultar", - "falseDefaultText": "Mostrar", - "trueLabel": "Texto para Verdadeiro", - "falseLabel": "Texto para Falso", - "trueIconLabel": "Ícone para Verdadeiro", - "falseIconLabel": "Ícone para Falso", - "iconPosition": "Posição do Ícone", - "showText": "Mostrar Texto", - "alignment": "Alinhamento", - "showBorder": "Mostrar Borda", - }, - "componentDoc": { - ...en.componentDoc, - - "markdownDemoText": "**Lowcoder** | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", - "demoText": "Lowcoder | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", - "submit": "Enviar", - "style": "Estilo", - "danger": "Perigo", - "warning": "Aviso", - "success": "Sucesso", - "menu": "Menu", - "link": "Ligação a", - "customAppearance": "Aparência Personalizada", - "search": "Buscar", - "pleaseInputNumber": "Por favor, insira um número", - "mostValue": "Valor Máximo", - "maxRating": "Classificação Máxima", - "notSelect": "Não Selecionado", - "halfSelect": "Seleção Parcial", - "pleaseSelect": "Por favor, selecione", - "title": "Título", - "content": "Conteúdo", - "componentNotFound": "Componente não encontrado", - "example": "Exemplos", - "defaultMethodDesc": "Defina o valor da propriedade {name}", - "propertyUsage": "Você pode ler informações relacionadas ao componente acessando as propriedades do componente pelo nome do componente em qualquer lugar em que possa escrever JavaScript.", - "property": "Propriedades", - "propertyName": "Nome da Propriedade", - "propertyType": "Tipo", - "propertyDesc": "Descrição", - "event": "Eventos", - "eventName": "Nome do Evento", - "eventDesc": "Descrição", - "mehtod": "Métodos", - "methodUsage": "Você tem a capacidade de interagir com os componentes por meio de seus respectivos métodos, que podem ser acessados por seus nomes designados em qualquer segmento onde o JavaScript é utilizado. Além disso, esses componentes podem ser ativados por meio da ação 'Controlar Componente', que é acionada em resposta a eventos específicos.", - "methodName": "Nome do Método", - "methodDesc": "Descrição", - "showBorder": "Mostrar Borda", - "haveTry": "Experimente você mesmo", - "settings": "Configurações", - "settingValues": "Valor da Configuração", - "defaultValue": "Valor Padrão", - "time": "Tempo", - "date": "Data", - "noValue": "Nenhum", - "xAxisType": "Tipo do Eixo X", - "hAlignType": "Alinhamento Horizontal", - "leftLeftAlign": "Alinhamento à Esquerda-Esquerda", - "leftRightAlign": "Alinhamento à Esquerda-Direita", - "topLeftAlign": "Alinhamento Superior-Esquerdo", - "topRightAlign": "Alinhamento Superior-Direito", - "validation": "Validação", - "required": "Obrigatório", - "defaultStartDateValue": "Data de Início Padrão", - "defaultEndDateValue": "Data de Fim Padrão", - "basicUsage": "Uso Básico", - "basicDemoDescription": "Os seguintes exemplos mostram o uso básico do componente.", - "noDefaultValue": "Sem Valor Padrão", - "forbid": "Proibido", - "placeholder": "Marcador de Posição", - "pleaseInputPassword": "Por favor, insira uma senha", - "password": "Senha", - "textAlign": "Alinhamento do Texto", - "length": "Comprimento", - "top": "Topo", - "pleaseInputName": "Por favor, insira seu nome", - "userName": "Nome", - "fixed": "Fixo", - "responsive": "Responsivo", - "workCount": "Contagem de Palavras", - "cascaderOptions": "Opções de Cascata", - "pleaseSelectCity": "Por favor, selecione uma cidade", - "advanced": "Avançado", - "showClearIcon": "Mostrar Ícone Limpar", - /* eslint-disable only-ascii/only-ascii */ - "appleOptionLabel": "🍎 Maçã", - "waterMelonOptionLabel": "🍉 Melancia", - "berryOptionLabel": "🍓 Morango", - "lemonOptionLabel": "🍋 Limão", - "coconutOptionLabel": "🥥 Coco", - /* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Favoritos", - "option": "Opção", - "singleFileUpload": "Upload de Arquivo Único", - "multiFileUpload": "Upload de Múltiplos Arquivos", - "folderUpload": "Upload de Pasta", - "multiFile": "Múltiplos Arquivos", - "folder": "Pasta", - "open": "Abrir", - "favoriteFruits": "Frutas Favoritas", - "pleaseSelectOneFruit": "Selecione uma Fruta", - "notComplete": "Não Completo", - "complete": "Completo", - "echart": "Gráfico eletrónico", - "lineChart": "Gráfico de Linha", - "basicLineChart": "Gráfico de Linha Básico", - "lineChartType": "Tipo de Gráfico de Linha", - "stackLineChart": "Linha Empilhada", - "areaLineChart": "Linha de Área", - "scatterChart": "Gráfico de Dispersão", - "scatterShape": "Forma de Dispersão", - "scatterShapeCircle": "Círculo", - "scatterShapeRect": "Retângulo", - "scatterShapeTri": "Triângulo", - "scatterShapeDiamond": "Diamante", - "scatterShapePin": "Alfinete", - "scatterShapeArrow": "Seta", - "pieChart": "Gráfico de Pizza", - "basicPieChart": "Gráfico de Pizza Básico", - "pieChatType": "Tipo de Gráfico de Pizza", - "pieChartTypeCircle": "Gráfico de Donut", - "pieChartTypeRose": "Gráfico de Rosa", - "titleAlign": "Posição do Título", - "color": "Cor", - "dashed": "Tracejado", - "imADivider": "Sou uma Linha de Divisão", - "tableSize": "Tamanho da Tabela", - "subMenuItem": "SubMenu {num}", - "menuItem": "Menu {num}", - "labelText": "Rótulo", - "labelPosition": "Posição do Rótulo", - "labelAlign": "Alinhamento do Rótulo", - "optionsOptionType": "Método de Configuração", - "styleBackgroundColor": "Cor de Fundo", - "styleBorderColor": "Cor da Borda", - "styleColor": "Cor da Fonte", - "selectionMode": "Modo de Seleção de Linha", - "paginationSetting": "Configuração de Paginação", - "paginationShowSizeChanger": "Suportar Usuários para Modificar o Número de Entradas por Página", - "paginationShowSizeChangerButton": "Mostrar Botão de Modificação de Tamanho", - "paginationShowQuickJumper": "Mostrar Pulo Rápido", - "paginationHideOnSinglePage": "Ocultar Quando Há Apenas uma Página", - "paginationPageSizeOptions": "Tamanho da Página", - "chartConfigCompType": "Tipo de Componente de Configuração de Gráfico", - "xConfigType": "Tipo de Eixo X", - "loading": "Carregando", - "disabled": "Desabilitado", - "minLength": "Comprimento Mínimo", - "maxLength": "Comprimento Máximo", - "showCount": "Mostrar Contagem de Palavras", - "autoHeight": "Altura Automática", - "thousandsSeparator": "Separador de Milhares", - "precision": "Casas Decimais", - "value": "Valor Padrão", - "formatter": "Formato", - "min": "Valor Mínimo", - "max": "Valor Máximo", - "step": "Tamanho do Passo", - "start": "Hora de Início", - "end": "Hora de Término", - "allowHalf": "Permitir Meia Seleção", - "filetype": "Tipo de Arquivo", - "showUploadList": "Mostrar Lista de Upload", - "uploadType": "Tipo de Upload", - "allowClear": "Mostrar Ícone de Limpar", - "minSize": "Tamanho Mínimo do Arquivo", - "maxSize": "Tamanho Máximo do Arquivo", - "maxFiles": "Número Máximo de Arquivos Enviados", - "format": "Formato", - "minDate": "Data Mínima", - "maxDate": "Data Máxima", - "minTime": "Tempo Mínimo", - "maxTime": "Tempo Máximo", - "text": "Texto", - "type": "Tipo", - "hideHeader": "Ocultar Cabeçalho", - "hideBordered": "Ocultar Borda", - "src": "URL da Imagem", - "showInfo": "Exibir Valor", - "mode": "Modo", - "onlyMenu": "Apenas Menu", - "horizontalAlignment": "Alinhamento Horizontal", - "row": "Linha", - "column": "Coluna", - "leftAlign": "Alinhamento à Esquerda", - "rightAlign": "Alinhamento à Direita", - "percent": "Porcentagem", - "fixedHeight": "Altura Fixa", - "auto": "Adaptativo", - "directory": "Pasta", - "multiple": "Múltiplos Arquivos", - "singleFile": "Arquivo Único", - "manual": "Manual", - "default": "Padrão", - "small": "Pequeno", - "middle": "Médio", - "large": "Grande", - "single": "Único", - "multi": "Múltiplo", - "close": "Fechar", - "ui": "Modo de UI", - "line": "Gráfico de Linha", - "scatter": "Gráfico de Dispersão", - "pie": "Gráfico de Pizza", - "basicLine": "Gráfico de Linha Básico", - "stackedLine": "Gráfico de Linha Empilhada", - "areaLine": "Mapa de Área", - "basicPie": "Gráfico de Pizza Básico", - "doughnutPie": "Gráfico de Donut", - "rosePie": "Gráfico de Rosa", - "category": "Eixo de Categoria", - "circle": "Círculo", - "rect": "Retângulo", - "triangle": "Triângulo", - "diamond": "Diamante", - "pin": "Alfinete", - "arrow": "Seta", - "left": "Esquerda", - "right": "Direita", - "center": "Centro", - "bottom": "Inferior", - "justify": "Justificar Ambos os Extremos", - }, - "playground": { - ...en.playground, - - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Estado Atual dos Dados", - "preview": "Visualizar", - "property": "Propriedades", - "console": "Console de Script Visual", - "executeMethods": "Executar Métodos", - "noMethods": "Sem Métodos.", - "methodParams": "Parâmetros do Método", - "methodParamsHelp": "Informe os Parâmetros do Método Usando JSON. Por Exemplo, Você Pode Definir os Parâmetros do setValue Com: [1] ou 1", - }, - "calendar": { - ...en.calendar, - - "headerBtnBackground": "Cor de Fundo do Botão", - "btnText": "Texto do Botão", - "title": "Título", - "selectBackground": "Fundo Selecionado", - }, - "idSource": { - ...en.idSource, - - "title": "Provedor de Autenticação do Usuário", - "form": "Correio eletrónico", - "pay": "Prémio", - "enable": "Habilitar", - "unEnable": "Não Habilitado", - "loginType": "Tipo de Login", - "status": "Estado", - "desc": "Descrição", - "manual": "Agenda de Endereços:", - "syncManual": "Sincronizar Agenda de Endereços", - "syncManualSuccess": "Sincronização Bem-Sucedida", - "enableRegister": "Permitir Registro", - "saveBtn": "Salvar e Habilitar", - "save": "Salvar", - "none": "Nenhum", - "formPlaceholder": "Por favor, informe {label}", - "formSelectPlaceholder": "Por favor, selecione {label}", - "saveSuccess": "Salvo com Sucesso", - "dangerLabel": "Zona de Perigo", - "dangerTip": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Prossiga com Cuidado.", - "disable": "Desabilitar", - "disableSuccess": "Desabilitado com Sucesso", - "encryptedServer": "-------- Criptografado no Lado do Servidor --------", - "disableTip": "Dicas", - "disableContent": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Você Tem Certeza de Que Deseja Prosseguir?", - "manualTip": "", - "lockTip": "O Conteúdo está Bloqueado. Para Fazer Alterações, Clique no {icon} para Desbloquear.", - "lockModalContent": "Alterar o Campo 'Atributo de ID' Pode Ter Impactos Significativos na Identificação do Usuário. Por Favor, Confirme Que Você Entende as Implicações Dessa Alteração Antes de Prosseguir.", - "payUserTag": "Prémio", - "source": "Fonte", - "sourceName": "Nome do fornecedor de autenticação", - "sourceDescription": "Fornecedor de autenticação Descrição", - "sourceIcon": "Ícone do fornecedor de autenticação", - "sourceCategory": "Categoria do fornecedor de autenticação", - "souceIssuerURI": "URI do emissor do fornecedor de autenticação", - "souceAuthorizationEndpoint": "Ponto final de autorização do fornecedor de autenticação", - "souceTokenEndpoint": "Ponto de extremidade do token do fornecedor de autenticação", - "souceUserInfoEndpoint": "Ponto final da informação do utilizador do fornecedor de autenticação", - "userInfoIntrospection": "Utilizar a introspeção do utilizador OpenID", - "userCanSelectAccounts": "O utilizador pode selecionar a partir de contas", - "sourceCategoryEnterprise": "Identidade empresarial", - "sourceCategoryCloud": "Serviços em nuvem", - "sourceCategorySocial": "Redes sociais", - "sourceCategoryDevelopment": "Desenvolvimento", - "sourceCategoryTools": "Ferramentas e produtividade", - }, - "slotControl": { - ...en.slotControl, - - "configSlotView": "Configurar Visualização de Slot", - }, - "jsonLottie": { - ...en.jsonLottie, - - "lottieJson": "JSON Lottie", - "speed": "Velocidade", - "width": "Largura", - "height": "Altura", - "backgroundColor": "Cor de Fundo", - "animationStart": "Início da Animação", - "valueDesc": "Dados JSON Atuais", - "loop": "Repetir", - "auto": "Automático", - "onHover": "Ao Passar o Mouse", - "singlePlay": "Reprodução Única", - "endlessLoop": "Loop Infinito", - "keepLastFrame": "Manter Último Quadro Exibido", - }, - "timeLine": { - ...en.timeLine, - - "titleColor": "Cor do Título", - "subTitleColor": "Cor do Subtítulo", - "labelColor": "Cor do Rótulo", - "value": "Dados da Linha do Tempo", - "mode": "Ordem de Exibição", - "left": "Conteúdo à Direita", - "right": "Conteúdo à Esquerda", - "alternate": "Ordem de Conteúdo Alternada", - "modeTooltip": "Defina o Conteúdo para Aparecer à Esquerda/Direita ou Alternadamente em Ambos os Lados da Linha do Tempo", - "reverse": "Eventos Mais Recentes Primeiro", - "pending": "Texto do Nó Pendente", - "pendingDescription": "Quando Definido, um Último Nó com o Texto e um Indicador de Espera Serão Exibidos.", - "defaultPending": "Melhoria Contínua", - "clickTitleEvent": "Clique em Evento de Título", - "clickTitleEventDesc": "Clique em Evento de Título", - "Introduction": "Chaves de Introdução", - "helpTitle": "Título da Linha do Tempo (Obrigatório)", - "helpsubTitle": "Subtítulo da Linha do Tempo", - "helpLabel": "Rótulo da Linha do Tempo, Usado para Exibir Datas", - "helpColor": "Indica a Cor do Nó da Linha do Tempo", - "helpDot": "Renderização de Nós da Linha do Tempo como Ícones Ant Design", - "helpTitleColor": "Controle Individual da Cor do Título do Nó", - "helpSubTitleColor": "Controle Individual da Cor do Subtítulo do Nó", - "helpLabelColor": "Controle Individual da Cor do Ícone do Nó", - "valueDesc": "Dados da Linha do Tempo", - "clickedObjectDesc": "Dados do Item Clicado", - "clickedIndexDesc": "Índice do Item Clicado", - }, - "comment": { - ...en.comment, - - "value": "Dados da Lista de Comentários", - "showSendButton": "Permitir Comentários", - "title": "Título", - "titledDefaultValue": "%d Comentário no Total", - "placeholder": "Shift + Enter para Comentar; Digite @ ou # para Entrada Rápida", - "placeholderDec": "Espaço reservado", - "buttonTextDec": "Título do Botão", - "buttonText": "Comentar", - "mentionList": "Dados da Lista de Menções", - "mentionListDec": "Chave-Palavras-Chave de Menção; Valor-Dados da Lista de Menções", - "userInfo": "Informações do Usuário", - "dateErr": "Erro de Data", - "commentList": "Lista de Comentários", - "deletedItem": "Item Excluído", - "submitedItem": "Item Enviado", - "deleteAble": "Mostrar Botão de Excluir", - "Introduction": "Chaves de Introdução", - "helpUser": "Informações do Usuário (Obrigatório)", - "helpname": "Nome de Usuário (Obrigatório)", - "helpavatar": "URL do Avatar (Alta Prioridade)", - "helpdisplayName": "Nome de Exibição (Baixa Prioridade)", - "helpvalue": "Conteúdo do Comentário", - "helpcreatedAt": "Data de Criação", - }, - "mention": { - ...en.mention, - - "mentionList": "Dados da Lista de Menções", - }, - "autoComplete": { - ...en.autoComplete, - - "value": "Valor de Autocompletar", - "checkedValueFrom": "Valor Verificado de", - "ignoreCase": "Ignorar Maiúsculas e Minúsculas na Busca", - "searchLabelOnly": "Buscar Somente no Rótulo", - "searchFirstPY": "Buscar Primeiro Pinyin", - "searchCompletePY": "Buscar Pinyin Completo", - "searchText": "Buscar Texto", - "SectionDataName": "Dados de Autocompletar", - "valueInItems": "Valor nos Itens", - "type": "Tipo", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Chave", - "selectLable": "Rótulo", - "ComponentType": "Tipo de Componente", - "colorIcon": "Azul", - "grewIcon": "Cinza", - "noneIcon": "Nenhum", - "small": "Pequeno", - "large": "Grande", - "componentSize": "Tamanho do Componente", - "Introduction": "Chaves de Introdução", - "helpLabel": "Rótulo", - "helpValue": "Valor", - }, - "responsiveLayout": { - ...en.responsiveLayout, - - "column": "Colunas", - "addColumn": "Adicionar coluna", - "columnDefinition": "Definição de coluna", - "rowDefinition": "Definição de linha", - "columnGap": "Diferença de coluna", - "rowGap": "Lacuna de linha", - "atLeastOneColumnError": "O Layout Responsivo Mantém Pelo Menos uma Coluna", - "columnsPerRow": "Colunas por Linha", - "columnsSpacing": "Espaçamento de Colunas (px)", - "horizontal": "Horizontal", - "vertical": "Vertical", - "mobile": "Móvel", - "tablet": "Tablet", - "desktop": "Ambiente de trabalho", - "rowStyle": "Estilo de Linha", - "columnStyle": "Estilo de Coluna", - "minWidth": "Largura Mín.", - "rowBreak": "Quebra de Linha", - "useComponentWidth": "Usar tamanho próprio", - "useComponentWidthDesc": "Use a largura do contêiner em vez da largura do aplicativo", - "matchColumnsHeight": "Corresponder Altura das Colunas", - "rowLayout": "Layout de Linha", - "columnsLayout": "Layout de Colunas", - "columnsDefinitionTooltip": "As colunas podem ser definidas livremente com base nas propriedades das colunas CSS. Por exemplo, \"auto auto\" criará duas colunas com a mesma largura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "As linhas podem ser definidas livremente com base nas propriedades das linhas CSS. Por exemplo, 'auto auto' criará duas linhas com a mesma altura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, - "navLayout": { - ...en.navLayout, - - "mode": "Modo", - "modeInline": "Em linha", - "modeVertical": "Vertical", - "modeHorizontal": "Horizontal", - "width": "Largura", - "widthTooltip": "Pixel ou Porcentagem, por exemplo, 520, 60%", - "navStyle": "Estilo do Menu", - "navItemStyle": "Estilo do Item de Menu", - "navBackground": "Imagem de fundo", - "mobileNavVerticalOrientation": "Orientação vertical", - "mobileNavVerticalMaxWidth": "Largura máxima", - "mobileNavBarHeight": "Altura da barra de navegação", - "mobileNavVerticalShowSeparator": "Mostrar separador", - "mobileNavIconSize": "Tamanho do ícone", - }, - "timeZone": { - ...en.timeZone, - - "UTC-12:00": "(UTC-12:00) Linha de Data Internacional W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Hawaii", - "UTC-09:00": "(UTC-09:00) Alasca", - "UTC-08:00": "(UTC-08:00) Baja CA", - "UTC-07:00": "(UTC-07:00) Hora do Pacífico (EUA)", - "UTC-06:00": "(UTC-06:00) Hora Central (EUA)", - "UTC-05:00": "(UTC-05:00) Hora do Leste (EUA)", - "UTC-04:00": "(UTC-04:00) Hora do Atlântico", - "UTC-03:00": "(UTC-03:00) Buenos Aires", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Cabo Verde", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Berlim, Roma", - "UTC+02:00": "(UTC+02:00) Athens, Bucharest", - "UTC+03:00": "(UTC+03:00) Moscovo", - "UTC+04:00": "(UTC+04:00) Dubai, Muscat", - "UTC+05:00": "(UTC+05:00) Karachi", - "UTC+05:30": "(UTC+05:30) Nova Deli", - "UTC+05:45": "(UTC+05:45) Kathmandu", - "UTC+06:00": "(UTC+06:00) Dhaka", - "UTC+06:30": "(UTC+06:30) Yangon", - "UTC+07:00": "(UTC+07:00) Banguecoque", - "UTC+08:00": "(UTC+08:00) Pequim, HK", - "UTC+09:00": "(UTC+09:00) Tóquio, Seul", - "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", - "UTC+10:00": "(UTC+10:00) Sydney", - "UTC+11:00": "(UTC+11:00) Ilhas Salomão, Nova Caledónia", - "UTC+12:00": "(UTC+12:00) Auckland, Fiji", - "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", - "UserChoice": "Escolha do utilizador", - }, - "tour": { - ...en.tour, - - "section1Title": "Passos", - "section1Subtitle": "Passos", - "tooltipExampleHeader": "Exemple:", - "tooltipSignatureHeader": "Assinatura:", - "options": { - ...en.tour.options, - - "title": { - ...en.tour.options.title, - - "label": "Título", - "placeholder": "Bem-vindo", - "tooltip": "O título do passo. Qualquer HTML é válido aqui.", - }, - "description": { - ...en.tour.options.description, - - "label": "Descrição", - "placeholder": "Bem-vindo ao Lowcoder!", - "tooltip": "O título do passo. Qualquer HTML é válido aqui.", - }, - "mask": { - ...en.tour.options.mask, - - "label": "Máscara", - "tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour.", - "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", - }, - "arrow": { - ...en.tour.options.arrow, - - "label": "Seta", - "tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente.", - "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.options.type, - - "label": "Tipo", - "tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal.", - }, - "target": { - ...en.tour.options.target, - - "label": "Componente", - "tooltip": "O componente no qual você deseja colocar a dica ou deixe-o vazio se simplesmente desejar um modal no centro da tela.", - }, - "coverImage": { - ...en.tour.options.coverImage, - - "label": "URI da Imagem de Capa", - "tooltip": "Um URI para uma imagem que você gostaria de exibir com o passo", - }, - }, - "indicatorsRender": { - ...en.tour.indicatorsRender, - - "label": "Renderização de Indicadores", - "tooltip": "Fornece um indicador personalizado para qual passo você está", - "tooltipValidTypes": "O formato é uma função que aceita dois argumentos, `current` e `total` e retorna um ReactNode", - "tooltipFunctionSignatureHeader": "Assinatura:", - "tooltipFunctionSignature": "(atual: número, total: número) => ReactNode", - "tooltipExampleHeader": "Exemplo:", - }, - "disabledInteraction": { - ...en.tour.disabledInteraction, - - "label": "Desativar Interação", - "tooltip": "Desativa a interação na área destacada.", - }, - "mask": { - ...en.tour.mask, - - "label": "Máscara", - "tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour. Pode ser substituído no nível do passo.", - "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", - }, - "placement": { - ...en.tour.placement, - - "label": "Posição", - "tooltip": "Posição do cartão guia em relação ao elemento de destino. Pode ser substituído no nível do passo.", - "tooltipValidOptions": "Opções válidas", - "tooltipValidOptionsAbove": "Acima do componente:", - "tooltipValidOptionsLeft": "À esquerda do componente:", - "tooltipValidOptionsRight": "À direita do componente:", - "tooltipValidOptionsBelow": "Abaixo do componente:", - "tooltipValidOptionsOnTop": "No topo do componente:", - }, - "arrow": { - ...en.tour.arrow, - - "label": "Seta", - "tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente. Pode ser substituído no nível do passo.", - "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.type, - - "label": "Tipo", - "tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal. Pode ser substituído no nível do passo.", - }, - }, - "docUrls": { - ...en.docUrls, - - "docHome": "https://docs.lowcoder.cloud/", - "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - "components": "https://app.lowcoder.cloud/components/{compType}", - "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - "optionList": "", - "terms": "https://lowcoder.cloud/terms", - "privacy": "https://lowcoder.cloud/privacy", - "aboutUs": "https://lowcoder.cloud/about", - "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", - "introVideo": "", - "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - "devNpmPluginText": "Como desenvolver um plug-in npm", - "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - "thirdLibUrlText": "Utilizar bibliotecas de terceiros", - }, - "datasourceTutorial": { - ...en.datasourceTutorial, - - "mysql": "", - "mongodb": "", - "postgres": "", - "redis": "", - "es": "", - "smtp": "", - "clickHouse": "", - }, - "queryTutorial": { - ...en.queryTutorial, - - "js": "", - "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - "customComponent": { - ...en.customComponent, - - "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", - }, - "template": { - ...en.template, - - "cloneUrl": "/apps/template-import/", - }, - "lowcoderUrl": { - ...en.lowcoderUrl, - - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", - }, - -}; + ...en, + +"productName": "Lowcoder", +"productDesc": "Crie aplicações de software para sua empresa e clientes com pouquíssima experiência de programação. Lowcoder é uma excelente alternativa para Retool, Appsmith e Tooljet.", +"notSupportedBrowser": "Seu navegador atual pode ter problemas de compatibilidade. Para uma experiência melhor, por favor, utilize a última versão do Chrome.", +"create": "Crie", +"move": "Mover", +"addItem": "Adicionar", +"newItem": "Novo", +"copy": "Copiar", +"rename": "Renomear", +"delete": "Remover", +"deletePermanently": "Remover Permanentemente", +"remove": "Remover", +"recover": "Recuperar", +"edit": "Editar", +"view": "Ver", +"value": "Valor", +"data": "Dados", +"information": "Informações", +"success": "Sucesso", +"warning": "Aviso", +"error": "Erro", +"reference": "Referência", +"text": "Texto", +"basic": "Básico", +"label": "Rótulo", +"layout": "Disposição", +"color": "Cor", +"form": "Formulário", +"menu": "Menu", +"menuItem": "Item do Menu", +"ok": "OK", +"cancel": "Cancelar", +"finish": "Terminar", +"reset": "Resetar", +"icon": "Ícone", +"code": "Código", +"title": "Título", +"emptyContent": "Conteúdo em Branco", +"more": "Mais", +"search": "Pesquisar", +"back": "Voltar", +"accessControl": "Controle de Acesso", +"copySuccess": "Copiado com Sucesso", +"copyError": "Erro ao copiar", +"api": { + ...en.api, + +"publishSuccess": "Publicado com Sucesso", +"recoverFailed": "Falha ao Recuperar", +"needUpdate": "Sua versão está desatualizada. Por favor, atualize para a nova versão.", +}, +"codeEditor": { + ...en.codeEditor, + +"notSupportAutoFormat": "O editor de código atual não suporta formatação automática", +"fold": "Dobrar", +}, +"exportMethod": { + ...en.exportMethod, + +"setDesc": "Definir Propriedade: {property}", +"clearDesc": "Limpar Propriedade: {property}", +"resetDesc": "Resetar Propriedade: {property} ao Valor Padrão", +}, +"method": { + ...en.method, + +"focus": "Definir Foco", +"focusOptions": "Opções de Foco. Veja HTMLElement.focus()", +"blur": "Remover Foco", +"click": "Clicar", +"select": "Selecionar o Texto Inteiro", +"setSelectionRange": "Definit Posição de Início e Fim da Seleção de Texto", +"selectionStart": "Índice de base 0 do Primeiro Caractere Selecionado", +"selectionEnd": "Índice de base 0 do Caractere Selecionado Após o Último Caractere", +"setRangeText": "Substituir Faixa de Texto", +"replacement": "String a Inserir", +"replaceStart": "Índice baseado em 0 do primeiro caractere a ser substituído", +"replaceEnd": "Índice de caractere baseado em 0 após o último caractere a ser substituído", +}, +"errorBoundary": { + ...en.errorBoundary, + +"encounterError": "Carregamento do component falhou. Por favor, cheque sua configuração.", +"clickToReload": "Clique para recarregar", +"errorMsg": "Erro: ", +}, +"imgUpload": { + ...en.imgUpload, + +"notSupportError": "Somente suporta imagens do tipo {types}", +"exceedSizeError": "Tamanho da imagem não deve passar de {size}", +}, +"gridCompOperator": { + ...en.gridCompOperator, + +"notSupport": "Não suportado", +"selectAtLeastOneComponent": "Por favor, selecione pelo menos um componente", +"selectCompFirst": "Selecione componentes antes de copiar", +"noContainerSelected": "[Bug] Nenhum container selecionado", +"deleteCompsSuccess": "Removido com sucesso. Pressione {undoKey} para reverter.", +"deleteCompsTitle": "Remover Componentes", +"deleteCompsBody": "Tem certeza que deseja remover {compNum} componentes selecionados?", +"cutCompsSuccess": "Corte realizado com sucesso. Pressione {pasteKey} para colar, ou {undoKey} para desfazer.", +}, +"leftPanel": { + ...en.leftPanel, + +"queries": "Queries de Dados em seu Aplicativo", +"globals": "Variavies de Dados Globais", +"propTipsArr": "{num} Itens", +"propTips": "{num} Teclas", +"propTipArr": "___LOCALIZADOR0___ Item", +"propTip": "{num} Tecla", +"stateTab": "Estado", +"settingsTab": "Configurações", +"toolbarTitle": "Individualização", +"toolbarPreload": "Scripts e Estilos", +"components": "Componentes ativos", +"modals": "Modais Dentro do App", +"expandTip": "Clique para expandir os dados do componente {component}", +"collapseTip": "Clique para minimizar os dados do componente {component}", +"layers": "Camadas", +"activatelayers": "Usar camadas dinâmicas", +"selectedComponents": "Componentes selecionados...", +"displayComponents": "Controlar Visão", +"lockComponents": "Controlar Posição", +}, +"bottomPanel": { + ...en.bottomPanel, + +"title": "Consultas de Dados", +"run": "Executar", +"noSelectedQuery": "Nenhuma Consulta Selecionada", +"metaData": "Metadados da Fonte de Dados", +"noMetadata": "Nenhum Metadado Disponível", +"metaSearchPlaceholder": "Buscar Metadados", +"allData": "Todas as Tabelas", +}, +"rightPanel": { + ...en.rightPanel, + +"propertyTab": "Propriedades", +"noSelectedComps": "Nenhum Componente selecionado. Clique em um Componente para visualizar suas Propriedades.", +"createTab": "Inserir", +"searchPlaceHolder": "Buscar Componentes ou Módulos", +"uiComponentTab": "Componentes", +"extensionTab": "Extensões", +"modulesTab": "Módulos", +"moduleListTitle": "Módulos", +"pluginListTitle": "Plugins", +"emptyModules": "Os Módulos são Mikro-Apps reutilizáveis. Você pode incorporá-los em seu App.", +"searchNotFound": "Não consegue encontrar o componente certo?", +"emptyPlugins": "Nenhum Plugin Adicionado", +"contactUs": "Entre em Contato", +"issueHere": "aqui.", +"folderListTitle": "Pastas", +}, +"prop": { + ...en.prop, + +"expand": "Expandir", +"columns": "Colunas", +"videokey": "Chave do Vídeo", +"rowSelection": "Seleção de Linha", +"toolbar": "Barra de Ferramentas", +"pagination": "Paginação", +"logo": "Logotipo", +"style": "Estilo", +"inputs": "Entradas", +"meta": "Metadados", +"data": "Dados", +"hide": "Ocultar", +"loading": "Carregando", +"disabled": "Desabilitado", +"placeholder": "Espaço Reservado", +"showClear": "Mostrar Botão Limpar", +"showSearch": "Pesquisável", +"defaultValue": "Valor Padrão", +"required": "Campo Obrigatório", +"showEmptyValidation": "Mostrar validação em vazio/reinicialização", +"readOnly": "Somente Leitura", +"readOnlyTooltip": "Componentes somente leitura parecem normais, mas não podem ser modificados.", +"minimum": "Mínimo", +"maximum": "Máximo", +"regex": "Regex", +"minLength": "Comprimento Mínimo", +"maxLength": "Comprimento Máximo", +"height": "Altura", +"width": "Largura", +"selectApp": "Selecionar Aplicativo", +"showCount": "Mostrar Contagem", +"tabIndex": "Separador Índice", +"textType": "Tipo de Texto", +"customRule": "Regra Personalizada", +"customRuleTooltip": "Uma string não vazia indica um erro; vazio ou nulo significa validação aprovada. Exemplo:", +"manual": "Manual", +"map": "Mapa", +"json": "JSON", +"use12Hours": "Usar Formato de 12 Horas", +"hourStep": "Passo de Hora", +"minuteStep": "Passo de Minuto", +"secondStep": "Passo de Segundo", +"minDate": "Data Mínima", +"maxDate": "Data Máxima", +"minTime": "Tempo Mínimo", +"maxTime": "Tempo Máximo", +"type": "Tipo", +"showLabel": "Mostrar Etiqueta", +"showHeader": "Mostrar Cabeçalho", +"showBody": "Mostrar Corpo", +"showSider": "Mostrar Lateral", +"innerSider": "Lateral Interna", +"showFooter": "Mostrar Rodapé", +"maskClosable": "Clique Fora para Fechar", +"escapeClose": "Ativar Fechar na tecla Escape", +"toggleClose": "Ativar o botão Fechar", +"showMask": "Mostrar Máscara", +"textOverflow": "Overflow de Texto", +"scrollbar": "Mostrar Barras de Rolagem", +"showVerticalScrollbar": "Mostrar barra de rolagem vertical", +"showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", +"siderScrollbar": "Mostrar Barras de Rolagem na Lateral", +"mainScrollbar": "Mostrar barras de deslocação no conteúdo principal", +"modalScrollbar": "Mostrar barras de deslocação no Modal", +"drawerScrollbar": "Mostrar barras de rolagem na gaveta", +"textAreaScrollBar": "Mostrar barras de rolagem na área de texto", +"siderRight": "Mostrar lateral à Direita", +"siderWidth": "Largura da Lateral", +"siderWidthTooltip": "A largura da lateral suporta porcentagens (%) e pixels (px).", +"siderCollapsedWidth": "Largura da Lateral Recolhida", +"siderCollapsedWidthTooltip": "A largura recolhida da lateral suporta porcentagens (%) e pixels (px).", +"siderCollapsible": "Lateral Recolhível", +"siderCollapsed": "Lateral Recolhida", +"contentScrollbar": "Mostrar Barras de Rolagem no Conteúdo", +"appID": "ID do Aplicativo", +"showApp": "Mostrar um Aplicativo na área de conteúdo", +"showAppTooltip": "Você pode exibir aplicativos inteiros na área de conteúdo. Por favor, observe que para Módulos não oferecemos suporte a Entradas, Saídas, Eventos e Métodos.", +"baseURL": "URL Base da API", +"horizontal": "Horizontal", +"minHorizontalWidth": "Largura Horizontal Mínima", +"component": "Identificadores de Componentes Próprios", +"className": "Nome da Classe CSS", +"dataTestId": "ID Individual", +"preventOverwriting": "Evitar a substituição de estilos", +"color": "Cor", +"horizontalGridCells": "Células de grade horizontal", +"verticalGridCells": "Células de grade vertical", +"timeZone": "Fuso horário", +"pickerMode": "Modo de seleção", +}, +"autoHeightProp": { + ...en.autoHeightProp, + +"auto": "Automóvel", +"fixed": "Fixa", +}, +"textOverflowProp": { + ...en.textOverflowProp, + +"ellipsis": "Passar o rato", +"wrap": "Quebra de Linha", +}, +"labelProp": { + ...en.labelProp, + +"text": "Rótulo", +"tooltip": "Dica de Ferramenta", +"position": "Posição", +"collapse": "Colapso", +"left": "Esquerda", +"right": "Direita", +"top": "Topo", +"align": "Alinhamento", +"width": "Largura", +"widthTooltip": "A largura do rótulo suporta porcentagens (%) e pixels (px).", +}, +"eventHandler": { + ...en.eventHandler, + +"eventHandlers": "Manipuladores de Eventos", +"emptyEventHandlers": "Nenhum Manipulador de Eventos", +"incomplete": "Seleção Incompleta", +"inlineEventTitle": "Em {eventName}", +"event": "Evento", +"action": "Ação", +"noSelect": "Nenhuma Seleção", +"runQuery": "Executar uma Consulta de Dados", +"selectQuery": "Selecionar Consulta de Dados", +"controlComp": "Controlar um Componente", +"runScript": "Executar JavaScript", +"runScriptPlaceHolder": "Escreva o Código Aqui", +"component": "Componente", +"method": "Método", +"setTempState": "Definir um Valor de Estado Temporário", +"state": "Estado", +"triggerModuleEvent": "Disparar um Evento de Módulo", +"moduleEvent": "Evento de Módulo", +"goToApp": "Ir para Outro Aplicativo", +"queryParams": "Parâmetros de Consulta", +"queryVariables": "Variáveis de consulta", +"hashParams": "Parâmetros de Hash", +"showNotification": "Mostrar uma Notificação", +"text": "Texto", +"level": "Nível", +"duration": "Duração", +"notifyDurationTooltip": "A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). A duração máxima é de {max} segundos", +"goToURL": "Abrir uma URL", +"openInNewTab": "Abrir em Nova Guia", +"copyToClipboard": "Copiar um valor para a Área de Transferência", +"copyToClipboardValue": "Valor", +"export": "Exportar Dados", +"exportNoFileType": "Nenhuma Seleção (Opcional)", +"fileName": "Nome do Arquivo", +"fileNameTooltip": "Inclua a extensão para especificar o tipo de arquivo, por exemplo, 'imagem.png'", +"fileType": "Tipo de Arquivo", +"condition": "Executar Somente Quando...", +"conditionTooltip": "Execute o manipulador de eventos apenas quando esta condição for avaliada como 'verdadeira'", +"debounce": "Atraso para", +"throttle": "Controlar a frequência para", +"slowdownTooltip": "Use atraso ou controle de frequência para controlar a frequência dos gatilhos de ação. A unidade de tempo pode ser 'ms' (milissegundo, padrão) ou 's' (segundo).", +"notHandledError": "Não Manipulado", +"currentApp": "Atual", +"inputEventHandlers": "Manipuladores de Eventos de Entrada", +"inputEventHandlersDesc": "Manipuladores de Eventos relacionados à Entrada do Usuário", +"buttonEventHandlers": "Manipuladores de Eventos de Botão", +"buttonEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques de Botão", +"changeEventHandlers": "Manipuladores de Eventos de Mudança", +"changeEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Valor", +"editedEventHandlers": "Manipuladores de Eventos de Edição", +"editedEventHandlersDesc": "Manipuladores de Eventos relacionados ao estado editado de Elementos", +"clickEventHandlers": "Manipuladores de Eventos de Clique", +"clickEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques", +"keyDownEventHandlers": "Manipuladores de Eventos de Pressionar Tecla", +"keyDownEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Pressionar Tecla", +"checkboxEventHandlers": "Manipuladores de Eventos de Caixa de Seleção", +"checkboxEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Caixa de Seleção", +"dragEventHandlers": "Manipuladores de Eventos de Arrastar", +"dragEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Arrastar e Soltar", +"elementEventHandlers": "Manipuladores de Eventos de Elemento", +"elementEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos Genéricos de Elemento de Dados", +"mediaEventHandlers": "Manipuladores de Eventos de Mídia", +"mediaEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mídia", +"scannerEventHandlers": "Manipuladores de Eventos de Scanner", +"scannerEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Scanner", +"chartEventHandlers": "Manipuladores de Eventos de Gráfico", +"chartEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Gráfico", +"geoMapEventHandlers": "Manipuladores de Eventos de Mapa Geográfico", +"geoMapEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mapa Geográfico", +"stepEventHandlers": "Manipuladores de Eventos de Etapa", +"stepEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Interface de Etapa", +"shareEventHandlers": "Manipuladores de Eventos de Compartilhamento", +"shareEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Compartilhamento", +"selectEventHandlers": "Manipuladores de Eventos de Seleção", +"selectEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Seleção", +"meetingEventHandlers": "Manipuladores de Eventos de Reunião", +"meetingEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Reunião", +"collaborationEventHandlers": "Manipuladores de Eventos de Colaboração", +"collaborationEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Colaboração", +"set": "Definir", +"clear": "Limpar", +"reset": "Redefinir", +"messageType": "Tipo de Mensagem", +"placement": "Posição", +"description": "Descrição", +}, +"event": { + ...en.event, + +"submit": "Enviar", +"submitDesc": "Dispara ao Enviar", +"change": "Alterar", +"changeDesc": "Dispara nas Mudanças de Valor", +"focus": "Foco", +"focusDesc": "Dispara no Foco", +"blur": "Desfocar", +"blurDesc": "Dispara no Desfoque", +"click": "Clique", +"clickDesc": "Dispara no Clique", +"doubleClick": "Clique Duplo", +"doubleClickDesc": "Dispara no Duplo Clique", +"rightClick": "Clique Direito", +"rightClickDesc": "Dispara no Clique Direito", +"keyDown": "Tecla Pressionada", +"keyDownDesc": "Dispara na Pressão de Tecla", +"select": "Selecionar", +"selectDesc": "Dispara na Seleção", +"checked": "Marcado", +"checkedDesc": "Dispara quando uma caixa de seleção está Marcada", +"unchecked": "Desmarcado", +"uncheckedDesc": "Dispara quando uma caixa de seleção está Desmarcada", +"drag": "Arrastar", +"dragDesc": "Dispara no Arrastar", +"drop": "Soltar", +"dropDesc": "Dispara no Soltar", +"open": "Abrir", +"openDesc": "Dispara na Abertura", +"mute": "Mudo", +"muteDesc": "Dispara no Silêncio de um Microfone", +"unmute": "Ativar Som", +"unmuteDesc": "Dispara no Ativar Som de um Microfone", +"showCamera": "Mostrar Câmera", +"showCameraDesc": "Dispara quando Mostrar Câmera está ligado", +"hideCamera": "Ocultar Câmera", +"hideCameraDesc": "Dispara quando Mostrar Câmera está desligado", +"shareScreen": "Compartilhar Tela", +"shareScreenDesc": "Dispara ao Compartilhar Tela", +"shareScreenEnd": "Fim do Compartilhamento de Tela", +"shareScreenEndDesc": "Dispara ao Finalizar o Compartilhamento de Tela", +"shareControl": "Compartilhar Controle", +"shareControlDesc": "Dispara ao Compartilhar Controle", +"shareControlEnd": "Fim do Compartilhamento de Controle", +"shareControlEndDesc": "Dispara ao Finalizar o Compartilhamento de Controle", +"shareContent": "Compartilhar Conteúdo", +"shareContentDesc": "Dispara ao Compartilhar Conteúdo", +"shareContentEnd": "Fim do Compartilhamento de Conteúdo", +"shareContentEndDesc": "Dispara ao Finalizar o Compartilhamento de Conteúdo", +"stopShare": "Parar Compartilhamento", +"stopShareDesc": "Dispara ao Parar o Compartilhamento", +"meetingStart": "Início da Reunião", +"meetingStartDesc": "Dispara no Início da Reunião", +"meetingEnd": "Fim da Reunião", +"meetingEndDesc": "Dispara no Fim da Reunião", +"meetingJoin": "Participar da Reunião", +"meetingJoinDesc": "Dispara ao Participar da Reunião", +"meetingLeave": "Sair da Reunião", +"meetingLeaveDesc": "Dispara ao Sair da Reunião", +"play": "Reproduzir", +"playDesc": "Dispara na Reprodução", +"pause": "Pausar", +"pauseDesc": "Dispara na Pausa", +"ended": "Finalizado", +"endedDesc": "Dispara ao Finalizar", +"step": "Passo", +"stepDesc": "Dispara no Passo", +"next": "Próximo", +"nextDesc": "Dispara no Próximo", +"finished": "Finalizado", +"finishedDesc": "Dispara ao Finalizar", +"saved": "Salvo", +"savedDesc": "Dispara quando um elemento é Salvo", +"edited": "Editado", +"editedDesc": "Dispara quando um elemento é Editado", +"geoMapMove": "Mover Mapa Geográfico", +"geoMapMoveDesc": "Dispara quando os Usuários movem o Mapa Geográfico", +"geoMapZoom": "Zoom no Mapa Geográfico", +"geoMapZoomDesc": "Dispara quando os Usuários dão Zoom no Mapa Geográfico", +"geoMapSelect": "Seleção no Mapa Geográfico", +"geoMapSelectDesc": "Dispara quando os Usuários selecionam um Elemento no Mapa Geográfico", +"scannerSuccess": "Sucesso do Scanner", +"scannerSuccessDesc": "Dispara quando um Scanner escaneia com sucesso", +"scannerError": "Erro do Scanner", +"scannerErrorDesc": "Dispara quando um Scanner falha ao escanear", +"chartZoom": "Zoom no Gráfico", +"chartZoomDesc": "Dispara no Zoom do Gráfico", +"chartHover": "Hover no Gráfico", +"chartHoverDesc": "Dispara no Hover do Gráfico", +"chartSelect": "Seleção no Gráfico", +"chartSelectDesc": "Dispara na Seleção do Gráfico", +"chartDeselect": "Desseleção no Gráfico", +"chartDeselectDesc": "Dispara na Desseleção do Gráfico", +"close": "Fechar", +"closeDesc": "Dispara no Fechar", +"parse": "Analisar", +"parseDesc": "Dispara na Análise", +"success": "Sucesso", +"successDesc": "Dispara no Sucesso", +"delete": "Excluir", +"deleteDesc": "Dispara na Exclusão", +"mention": "Menção", +"mentionDesc": "Dispara na Menção", +"search": "Pesquisar", +"searchDesc": "Dispara na Pesquisa", +"selectedChange": "Alteração de Seleção", +"selectedChangeDesc": "Dispara na Alteração de Seleção", +"clickExtra": "Clique na Ação", +"clickExtraDesc": "Dispara no Clique em Elemento Extra", +"start": "Iniciar", +"startDesc": "Dispara no Início", +"resume": "Continuar", +"resumeDesc": "Dispara ao Continuar", +"countdown": "Contagem Regressiva", +"countdownDesc": "Dispara quando a contagem regressiva termina", +"reset": "Reiniciar", +"resetDesc": "Dispara ao reiniciar o temporizador", +"refresh": "Atualizar", +"refreshDesc": "Dispara ao atualizar", +"sortChange": "Mudança de ordenação", +"sortChangeDesc": "Accionadores nas alterações de ordenação", +}, +"style": { + ...en.style, + +"boxShadowColor": "Cor da sombra", +"boxShadow": "Caixa de sombra", +"opacity": "Opacidade", +"animation": "Animação", +"animationIterationCount": "Contagem de Iterações de Animação", +"animationDelay": "Atraso da animação", +"animationDuration": "Duração da animação", +"resetTooltip": "Redefinir estilos. Limpe o campo de entrada para redefinir um estilo individual.", +"textColor": "Cor do Texto", +"contrastText": "Cor do Texto de Contraste", +"generated": "Gerado", +"customize": "Personalizar", +"staticText": "Texto Estático", +"accent": "Acento", +"validate": "Mensagem de Validação", +"border": "Cor da Borda", +"borderRadius": "Raio da Borda", +"borderWidth": "Largura da Borda", +"borderStyle": "Estilo da Borda", +"background": "Fundo", +"headerBackground": "Fundo do Cabeçalho", +"siderBackground": "Fundo do Sider", +"footerBackground": "Fundo do Rodapé", +"fill": "Preenchimento", +"track": "Rastreamento", +"links": "Ligações", +"thumb": "Polegar", +"thumbBorder": "Borda do Polegar", +"checked": "Marcado", +"unchecked": "Desmarcado", +"handle": "Alça", +"tags": "Etiquetas", +"tagsText": "Texto das Tags", +"multiIcon": "Ícone de Seleção Múltipla", +"tabText": "Texto da Aba", +"tabAccent": "Acento da Aba", +"checkedBackground": "Fundo do Marcado", +"uncheckedBackground": "Fundo do Desmarcado", +"uncheckedBorder": "Borda do Desmarcado", +"indicatorBackground": "Fundo do Indicador", +"tableCellText": "Texto da Célula", +"selectedRowBackground": "Fundo da Linha Selecionada", +"hoverRowBackground": "Fundo da Linha em Destaque", +"hoverBackground": "Fundo em Destaque", +"textTransform": "Transformação de Texto", +"textDecoration": "Decoração do Texto", +"alternateRowBackground": "Fundo Alternado da Linha", +"tableHeaderBackground": "Fundo do Cabeçalho da Tabela", +"tableHeaderText": "Texto do Cabeçalho da Tabela", +"toolbarBackground": "Fundo da Barra de Ferramentas", +"toolbarText": "Texto da Barra de Ferramentas", +"pen": "Caneta", +"footerIcon": "Ícone do Rodapé", +"tips": "Dicas", +"margin": "Margem", +"padding": "Preenchimento", +"marginLeft": "Margem à Esquerda", +"marginRight": "Margem à Direita", +"marginTop": "Margem Superior", +"marginBottom": "Margem Inferior", +"containerHeaderPadding": "Preenchimento do Cabeçalho do Contêiner", +"containerFooterPadding": "Preenchimento do Rodapé do Contêiner", +"containerSiderPadding": "Preenchimento do Sider do Contêiner", +"containerBodyPadding": "Preenchimento do Corpo do Contêiner", +"minWidth": "Largura Mínima", +"aspectRatio": "Proporção", +"text": "Texto", +"textSize": "Tamanho do Texto", +"textWeight": "Peso do Texto", +"fontFamily": "Família da Fonte", +"fontStyle": "Estilo da Fonte", +"backgroundImage": "Imagem de Fundo", +"backgroundImageRepeat": "Repetição da Imagem de Fundo", +"backgroundImageSize": "Tamanho da Imagem de Fundo", +"backgroundImagePosition": "Posição da Imagem de Fundo", +"backgroundImageOrigin": "Origem da Imagem de Fundo", +"headerBackgroundImage": "Imagem de Fundo do Cabeçalho", +"headerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Cabeçalho", +"headerBackgroundImageSize": "Tamanho da Imagem de Fundo do Cabeçalho", +"headerBackgroundImagePosition": "Posição da Imagem de Fundo do Cabeçalho", +"headerBackgroundImageOrigin": "Origem da Imagem de Fundo do Cabeçalho", +"footerBackgroundImage": "Imagem de Fundo do Rodapé", +"footerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Rodapé", +"footerBackgroundImageSize": "Tamanho da Imagem de Fundo do Rodapé", +"footerBackgroundImagePosition": "Posição da Imagem de Fundo do Rodapé", +"footerBackgroundImageOrigin": "Origem da Imagem de Fundo do Rodapé", +"rotation": "Rotação", +"alternateBackground": "Cor de fundo alternativa", +"headerText": "Cor do texto do cabeçalho", +"labelColor": "Cor da etiqueta", +"label": "Cor da etiqueta", +"lineHeight": "Altura da linha", +"subTitleColor": "Cor do subtítulo", +"titleText": "Título Cor", +"success": "Cor do sucesso", +"siderBackgroundImage": "Imagem de fundo do Sider", +"siderBackgroundImageRepeat": "Repetição da imagem de fundo do Sider", +"siderBackgroundImageSize": "Tamanho da imagem de fundo do Sider", +"siderBackgroundImagePosition": "Posição da imagem de fundo do Sider", +"siderBackgroundImageOrigin": "Origem da imagem de fundo do Sider", +"activeBackground": "Cor de fundo ativa", +"labelBackground": "Cor de fundo da etiqueta", +"gradientBackground": "Cor de fundo gradiente", +"direction": "Direção", +"chartOpacity": "Opacidade", +"chartBoxShadow": "Caixa de sombra", +"chartBorderStyle": "Estilo de fronteira", +"chartBorderRadius": "Raio de fronteira", +"chartBorderWidth": "Largura da margem", +"chartTextSize": "Tamanho do texto", +"chartTextWeight": "Peso do texto", +"chartFontFamily": "Família de letras", +"chartFontStyle": "Estilo de letra", +"chartBackgroundColor": "Cor de fundo", +"chartGradientColor": "Cor gradiente", +"chartShadowColor": "Cor da sombra", +"chartBorderColor": "Cor da fronteira", +"chartTextColor": "Cor do texto", +"detailSize": "Tamanho do pormenor", +"radiusTip": "Especifica o raio dos cantos do elemento. Exemplo: 5px, 50% ou 1em.", +"gapTip": "Especifica o espaçamento entre linhas e colunas em um contêiner de grade ou flex. Exemplo: 10px, 1rem ou 5%.", +"cardRadiusTip": "Define o raio dos cantos para componentes de cartão. Exemplo: 10px, 15px.", +"borderWidthTip": "Especifica a largura da borda do elemento. Exemplo: 1px, 0.5em ou fina.", +"borderStyleTip": "Define o estilo da borda. Exemplo: sólido, tracejado, pontilhado ou nenhum.", +"marginTip": "Define a margem externa ao redor de um elemento. Exemplo: 10px, 2em ou auto. Pode ser combinado: 0px 20px ou separado para 4 direções: 0px 1px 5px 2px.", +"directionTip": "Especifica a direção do layout. Exemplo: row, column ou row-reverse.", +"detailSizeTip": "Define o tamanho de detalhes específicos no layout. Exemplo: 10px, 2em ou 80%.", +"chartOpacityTip": "Especifica a opacidade do gráfico. Exemplo: 1 (opaco), 0.5 (50% transparente).", +"chartBoxShadowTip": "Define a sombra projetada pelo gráfico. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", +"chartBorderStyleTip": "Define o estilo da borda do gráfico. Exemplo: sólido, tracejado ou pontilhado.", +"chartBorderRadiusTip": "Especifica o raio dos cantos da borda do gráfico. Exemplo: 10px, 20%.", +"chartBorderWidthTip": "Especifica a largura da borda do gráfico. Exemplo: 2px, 0.5em.", +"chartTextSizeTip": "Especifica o tamanho da fonte do texto do gráfico. Exemplo: 16px, 1em, 120%.", +"chartTextWeightTip": "Especifica o peso da fonte do texto do gráfico. Exemplo: normal, negrito, ou 700.", +"chartFontFamilyTip": "Especifica a família da fonte para o texto do gráfico. Exemplo: Arial, Helvetica ou 'Times New Roman'.", +"chartFontStyleTip": "Especifica o estilo da fonte do texto do gráfico. Exemplo: normal, itálico ou oblíquo.", +"animationIterationCountTip": "Define quantas vezes uma animação deve ser executada. Exemplo: infinito, 1 ou 3.", +"opacityTip": "Define o nível de transparência do elemento. Exemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisível).", +"boxShadowColorTip": "Define a cor da sombra da caixa. Exemplo: rgba(0, 0, 0, 0.3), #FF5733.", +"chartBackgroundColorTip": "Define a cor de fundo do gráfico. Exemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", +"chartGradientColorTip": "Especifica as cores do gradiente para o fundo do gráfico. Exemplo: linear-gradient(to right, #ff7e5f, #feb47b).", +"chartShadowColorTip": "Especifica a cor da sombra do gráfico. Exemplo: rgba(0, 0, 0, 0.2), #333333.", +"chartBorderColorTip": "Define a cor da borda do gráfico. Exemplo: #000000, rgba(0, 0, 0, 0.5).", +"chartTextColorTip": "Define a cor do texto do gráfico. Exemplo: #333333, rgba(51, 51, 51, 1).", +"boxShadowTip": "Define a sombra projetada por um elemento. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", +"animationDelayTip": "Especifica o atraso antes do início da animação. Exemplo: 1s, 500ms, 0.", +"animationDurationTip": "Define a duração da animação. Exemplo: 2s, 3s, 500ms.", +"paddingTip": "Define o espaço interno dentro de um elemento. Exemplo: 10px, 2em, 5%. Pode ser combinado: 0px 20px ou separado para todas as 4 direções: 10px 21px 5px 20px.", +"containerHeaderPaddingTip": "Define o espaço interno para o cabeçalho do contêiner. Exemplo: 10px, 1rem.", +"containerSiderPaddingTip": "Define o espaço interno para a barra lateral do contêiner. Exemplo: 8px, 1em.", +"containerFooterPaddingTip": "Define o espaço interno para o rodapé do contêiner. Exemplo: 12px, 1rem.", +"containerBodyPaddingTip": "Define o espaço interno para o corpo do contêiner. Exemplo: 15px, 2em.", +"textSizeTip": "Especifica o tamanho da fonte do texto. Exemplo: 14px, 1.2em, 110%.", +"textWeightTip": "Define o peso da fonte do texto. Exemplo: normal, negrito, 400.", +"fontFamilyTip": "Especifica a família da fonte do texto. Exemplo: Arial, Verdana, 'Courier New'.", +"textDecorationTip": "Define a decoração do texto. Exemplo: sublinhado, riscado, nenhum.", +"textTransformTip": "Define a capitalização do texto. Exemplo: maiúsculas, minúsculas, capitalizado.", +"fontStyleTip": "Define o estilo da fonte do texto. Exemplo: normal, itálico, oblíquo.", +"backgroundImageTip": "Especifica a imagem de fundo de um elemento. Exemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", +"headerBackgroundImageTip": "Especifica a imagem de fundo para o cabeçalho. Exemplo: url('header.jpg').", +"footerBackgroundImageTip": "Especifica a imagem de fundo para o rodapé. Exemplo: url('footer.jpg').", +"backgroundImageRepeatTip": "Define como a imagem de fundo é repetida. Exemplo: no-repeat, repeat-x, repeat-y.", +"headerBackgroundImageRepeatTip": "Define como a imagem de fundo do cabeçalho é repetida. Exemplo: repeat-x, no-repeat.", +"footerBackgroundImageRepeatTip": "Define como a imagem de fundo do rodapé é repetida. Exemplo: repeat-y, no-repeat.", +"backgroundImageSizeTip": "Define o tamanho da imagem de fundo. Exemplo: cover, contain, 50% 50%.", +"backgroundImagePositionTip": "Define a posição da imagem de fundo. Exemplo: center, top right, 10% 20%.", +"backgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo. Exemplo: padding-box, border-box, content-box.", +"headerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do cabeçalho. Exemplo: padding-box, border-box, content-box.", +"footerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do rodapé. Exemplo: padding-box, border-box, content-box.", +"rotationTip": "Especifica o ângulo de rotação do elemento. Exemplo: 45deg, 90deg, -180deg.", +"lineHeightTip": "Define a altura de uma linha de texto. Exemplo: 1.5, 2, 120%.", +}, +"export": { + ...en.export, + +"hiddenDesc": "Se verdadeiro, o componente está oculto", +"disabledDesc": "Se verdadeiro, o componente está desativado e não interativo", +"visibleDesc": "Se verdadeiro, o componente é visível", +"inputValueDesc": "Valor atual da entrada", +"invalidDesc": "Indica se o valor é inválido", +"placeholderDesc": "Texto de espaço reservado quando nenhum valor está definido", +"requiredDesc": "Se verdadeiro, um valor válido é necessário", +"submitDesc": "Enviar Formulário", +"richTextEditorValueDesc": "Valor atual do Editor", +"richTextEditorReadOnlyDesc": "Se verdadeiro, o Editor está somente leitura", +"richTextEditorHideToolBarDesc": "Se verdadeiro, a barra de ferramentas está oculta", +"jsonEditorDesc": "Dados JSON atuais", +"sliderValueDesc": "Valor atualmente selecionado", +"sliderMaxValueDesc": "Valor máximo do controle deslizante", +"sliderMinValueDesc": "Valor mínimo do controle deslizante", +"sliderStartDesc": "Valor do ponto inicial selecionado", +"sliderEndDesc": "Valor do ponto final selecionado", +"ratingValueDesc": "Classificação atualmente selecionada", +"ratingMaxDesc": "Valor máximo de classificação", +"datePickerValueDesc": "Data atualmente selecionada", +"datePickerFormattedValueDesc": "Data selecionada formatada", +"datePickerTimestampDesc": "Carimbo de data/hora da data selecionada", +"dateRangeStartDesc": "Data de início do intervalo", +"dateRangeEndDesc": "Data de término do intervalo", +"dateRangeStartTimestampDesc": "Carimbo de data/hora da data de início", +"dateRangeEndTimestampDesc": "Carimbo de data/hora da data de término", +"dateRangeFormattedValueDesc": "Intervalo de datas formatado", +"dateRangeFormattedStartValueDesc": "Data de início formatada", +"dateRangeFormattedEndValueDesc": "Data de término formatada", +"timePickerValueDesc": "Hora atualmente selecionada", +"timePickerFormattedValueDesc": "Hora selecionada formatada", +"timeRangeStartDesc": "Hora de início do intervalo", +"timeRangeEndDesc": "Hora de término do intervalo", +"timeRangeFormattedValueDesc": "Intervalo de horas formatado", +"timeRangeFormattedStartValueDesc": "Hora de início formatada", +"timeRangeFormattedEndValueDesc": "Hora de término formatada", +"timeZone": "Fuso horário", +"timeZoneDesc": "Fuso horário da data selecionada", +}, +"validationDesc": { + ...en.validationDesc, + +"email": "Por favor, insira um endereço de e-mail válido", +"url": "Por favor, insira uma URL válida", +"regex": "Por favor, corresponda ao padrão especificado", +"maxLength": "Muitos caracteres, atual: {length}, máximo: {maxLength}", +"minLength": "Não há caracteres suficientes, atual: {length}, mínimo: {minLength}", +"maxValue": "O valor excede o máximo, atual: {value}, máximo: {max}", +"minValue": "O valor está abaixo do mínimo, atual: {value}, mínimo: {min}", +"maxTime": "O tempo excede o máximo, atual: {time}, máximo: {maxTime}", +"minTime": "O tempo está abaixo do mínimo, atual: {time}, mínimo: {minTime}", +"maxDate": "A data excede o máximo, atual: {date}, máximo: {maxDate}", +"minDate": "A data está abaixo do mínimo, atual: {date}, mínimo: {minDate}", +}, +"query": { + ...en.query, + +"noQueries": "Não há consultas de dados disponíveis.", +"queryTutorialButton": "Ver {value} documentos", +"datasource": "Suas Fontes de Dados", +"newDatasource": "Nova Fonte de Dados", +"generalTab": "Geral", +"notificationTab": "Notificação", +"variablesTab": "Variáveis", +"advancedTab": "Avançado", +"showFailNotification": "Mostrar Notificação em Caso de Falha", +"failCondition": "Condições de Falha", +"failConditionTooltip1": "Personalize as condições de falha e as notificações correspondentes.", +"failConditionTooltip2": "Se qualquer condição retornar verdadeira, a consulta será marcada como falha e acionará a notificação correspondente.", +"showSuccessNotification": "Mostrar Notificação em Caso de Sucesso", +"successMessageLabel": "Mensagem de Sucesso", +"successMessage": "Consulta Bem-sucedida", +"notifyDuration": "Duração", +"notifyDurationTooltip": "Duração da notificação. A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). O valor padrão é {default}s. O máximo é {max}s.", +"successMessageWithName": "{name} consulta bem-sucedida", +"failMessageWithName": "{name} consulta falhou: {result}", +"showConfirmationModal": "Mostrar Modal de Confirmação Antes de Executar", +"confirmationMessageLabel": "Mensagem de Confirmação", +"confirmationMessage": "Tem certeza de que deseja executar esta consulta de dados?", +"newQuery": "Nova Consulta de Dados", +"newFolder": "Nova Pasta", +"recentlyUsed": "Recentemente Utilizados", +"folder": "Pasta", +"folderNotEmpty": "A pasta não está vazia", +"dataResponder": "Respondedor de Dados", +"tempState": "Estado Temporário", +"transformer": "Transformador", +"quickRestAPI": "Consulta REST", +"quickStreamAPI": "Consulta de Fluxo", +"quickGraphql": "Consulta GraphQL", +"quickAlasql": "Consulta SQL local", +"databaseType": "Tipo de base de dados", +"chooseDatabase": "Selecionar base de dados", +"lowcoderAPI": "API Lowcoder", +"executeJSCode": "Executar Código JavaScript", +"importFromQueryLibrary": "Importar da Biblioteca de Consultas", +"preparedDataQueries": "As suas consultas de dados preparadas", +"adHocDataQueries": "Consultas de dados rápidas (sem consulta preparada ou fonte de dados)", +"queryResultTransformer": "Manipular uma resposta de consulta para transformar os dados antes da ligação", +"queryResultReactor": "Reagir a qualquer alteração de um valor de dados dinâmico", +"importFromFile": "Importar de Arquivo", +"triggerType": "Disparado quando...", +"triggerTypeAuto": "Quando as entradas mudam ou após o carregamento da aplicação (página)", +"triggerTypePageLoad": "Após o carregamento da aplicação (página)", +"triggerTypeManual": "Somente quando você aciona manualmente", +"triggerTypeInputChange": "Quando as entradas mudam", +"triggerTypeQueryExec": "Após a execução da consulta", +"triggerTypeTimeout": "Após a aplicação (página) carregar e o tempo limite", +"delayTime": "Tempo de atraso", +"chooseDataSource": "Escolha uma Fonte de Dados", +"method": "Método", +"updateExceptionDataSourceTitle": "Atualizar Fonte de Dados com Falha", +"updateExceptionDataSourceContent": "Atualize a seguinte consulta com a mesma fonte de dados com falha:", +"update": "Atualizar", +"disablePreparedStatement": "Desativar Declarações Preparadas", +"disablePreparedStatementTooltip": "Desativar declarações preparadas pode gerar SQL dinâmico, mas aumenta o risco de injeção de SQL", +"timeout": "Tempo Limite Após", +"timeoutTooltip": "Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor padrão: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", +"periodic": "Executar Esta Consulta de Dados Periodicamente", +"periodicTime": "Período", +"periodicTimeTooltip": "Período entre execuções sucessivas. Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor mínimo: 100ms. A execução periódica é desativada para valores abaixo de 100ms. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", +"cancelPrevious": "Ignorar Resultados de Execuções Anteriores Não Concluídas", +"cancelPreviousTooltip": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se elas não foram concluídas, e essas execuções ignoradas não acionarão a lista de eventos da consulta.", +"dataSourceStatusError": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se as execuções anteriores não foram concluídas, e as execuções ignoradas não acionarão a lista de eventos da consulta.", +"success": "Sucesso", +"fail": "Falha", +"successDesc": "Acionado Quando a Execução é Bem-sucedida", +"failDesc": "Acionado Quando a Execução Falha", +"fixedDelayError": "Consulta Não Executada", +"execSuccess": "Execução Bem-sucedida", +"execFail": "Execução Falhou", +"execIgnored": "Os Resultados Dessa Consulta Foram Ignorados", +"deleteSuccessMessage": "Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer", +"dataExportDesc": "Dados Obtidos pela Consulta Atual", +"codeExportDesc": "Código de Status da Consulta Atual", +"successExportDesc": "Se a Consulta Atual Foi Executada com Sucesso", +"messageExportDesc": "Informação Retornada pela Consulta Atual", +"extraExportDesc": "Outros Dados na Consulta Atual", +"isFetchingExportDesc": "A Consulta Atual Está na Requisição", +"runTimeExportDesc": "Tempo de Execução da Consulta Atual (ms)", +"latestEndTimeExportDesc": "Última Hora de Execução", +"triggerTypeExportDesc": "Tipo de Gatilho", +"chooseResource": "Escolha um Recurso", +"createDataSource": "Criar uma Nova Fonte de Dados", +"editDataSource": "Editar", +"datasourceName": "Nome", +"datasourceNameRuleMessage": "Por Favor, Insira um Nome para a Fonte de Dados", +"generalSetting": "Configurações Gerais", +"advancedSetting": "Configurações Avançadas", +"port": "Porta", +"portRequiredMessage": "Por Favor, Insira uma Porta", +"portErrorMessage": "Por Favor, Insira uma Porta Correta", +"connectionType": "Tipo de Conexão", +"regular": "Regular", +"host": "Anfitrião", +"hostRequiredMessage": "Por Favor, Insira um Nome de Domínio de Host ou Endereço IP", +"userName": "Nome de Usuário", +"password": "Senha", +"encryptedServer": "-------- Criptografado no Lado do Servidor --------", +"uriRequiredMessage": "Por Favor, Insira uma URI", +"urlRequiredMessage": "Por Favor, Insira uma URL", +"uriErrorMessage": "Por Favor, Insira uma URI Correta", +"urlErrorMessage": "Por Favor, Insira uma URL Correta", +"httpRequiredMessage": "Por Favor, Insira http:// ou https://", +"databaseName": "Nome do Banco de Dados", +"databaseNameRequiredMessage": "Por Favor, Insira um Nome de Banco de Dados", +"useSSL": "Usar SSL", +"userNameRequiredMessage": "Por Favor, Insira Seu Nome", +"passwordRequiredMessage": "Por Favor, Insira Sua Senha", +"authentication": "Autenticação", +"authenticationType": "Tipo de Autenticação", +"sslCertVerificationType": "Verificação de Certificado SSL", +"sslCertVerificationTypeDefault": "Verificar Certificado CA", +"sslCertVerificationTypeSelf": "Verificar Certificado Autoassinado", +"sslCertVerificationTypeDisabled": "Desativado", +"selfSignedCert": "Certificado Autoassinado", +"selfSignedCertRequireMsg": "Por Favor, Insira Seu Certificado", +"enableTurnOffPreparedStatement": "Ativar Alternância de Declarações Preparadas para Consultas", +"enableTurnOffPreparedStatementTooltip": "Você pode ativar ou desativar declarações preparadas na guia Avançado da consulta", +"serviceName": "Nome do Serviço", +"serviceNameRequiredMessage": "Por Favor, Insira o Nome do Seu Serviço", +"useSID": "Usar SID", +"connectSuccessfully": "Conexão Bem-sucedida", +"saveSuccessfully": "Salvo com Sucesso", +"database": "Banco de Dados", +"cloudHosting": "Lowcoder hospedado na nuvem não pode acessar serviços locais usando 127.0.0.1 ou localhost. Tente se conectar a fontes de dados de rede pública ou use um proxy reverso para serviços privados.", +"notCloudHosting": "Para implantação hospedada em contêineres, o Lowcoder usa redes bridge, portanto, 127.0.0.1 e localhost são inválidos para endereços de host. Para acessar fontes de dados de máquina local, consulte", +"howToAccessHostDocLink": "Como Acessar API/Banco de Dados do Host", +"returnList": "Retornar", +"chooseDatasourceType": "Escolha o Tipo de Fonte de Dados", +"viewDocuments": "Ver Documentos", +"testConnection": "Testar Conexão", +"save": "Salvar", +"whitelist": "Lista de Permissões", +"whitelistTooltip": "Adicione os endereços IP do Lowcoder à lista de permissões da sua fonte de dados conforme necessário.", +"address": "Endereço: ", +"nameExists": "O nome {name} já existe", +"jsQueryDocLink": "Sobre Consulta JavaScript", +"dynamicDataSourceConfigLoadingText": "Carregando configuração extra da fonte de dados...", +"dynamicDataSourceConfigErrText": "Falha ao carregar configuração extra da fonte de dados.", +"retry": "Tentar Novamente", +"categoryDatabase": "Banco de Dados", +"categoryBigdata": "Grandes volumes de dados", +"categoryAi": "IA", +"categoryDevops": "DevOps", +"categoryAppdevelopment": "Desenvolvimento de Aplicativos", +"categoryWorkflow": "Fluxo de Trabalho", +"categoryMessaging": "Mensagens", +"categoryAssets": "Ativos e Armazenamento", +"categoryProjectManagement": "Gerenciamento de Projetos", +"categoryCrm": "CRM", +"categoryEcommerce": "Comércio Eletrônico", +"categoryWebscrapers": "Raspadores Web & Open Data", +"categoryDocumentHandling": "Geração de Relatórios e Documentos", +"categoryRPA": "Automação de Processos Robóticos", +"componentsUsingQueryTitle": "Uso da Consulta", +"componentsUsingQuery": "Onde esta consulta está em uso", +"variables": "Variáveis", +}, +"sqlQuery": { + ...en.sqlQuery, + +"keyValuePairs": "Pares Chave-Valor", +"object": "Objeto", +"allowMultiModify": "Permitir Modificação Múltipla de Linhas", +"allowMultiModifyTooltip": "Se selecionado, todas as linhas que atendem às condições serão operadas. Caso contrário, apenas a primeira linha que atende às condições será operada.", +"array": "Arranjo", +"insertList": "Inserir Lista", +"insertListTooltip": "Valores inseridos quando eles não existem", +"filterRule": "Regra de Filtro", +"updateList": "Atualizar Lista", +"updateListTooltip": "Valores atualizados conforme existem podem ser substituídos pelos mesmos valores da lista de inserção", +"sqlMode": "Modo SQL", +"guiMode": "Modo GUI", +"operation": "Operação", +"insert": "Inserir", +"upsert": "Inserir, mas Atualizar em Caso de Conflito", +"update": "Atualizar", +"delete": "Excluir", +"bulkInsert": "Inserção em Lote", +"bulkUpdate": "Atualização em Lote", +"table": "Tabela", +"primaryKeyColumn": "Coluna Chave Primária", +}, +"EsQuery": { + ...en.EsQuery, + +"rawCommand": "Comando Bruto", +"queryTutorialButton": "Ver Documentos da API do Elasticsearch", +"request": "Pedido", +}, +"googleSheets": { + ...en.googleSheets, + +"rowIndex": "Índice da Linha", +"spreadsheetId": "ID da Planilha", +"sheetName": "Nome da Planilha", +"readData": "Ler Dados", +"appendData": "Anexar Linha", +"updateData": "Atualizar Linha", +"deleteData": "Excluir Linha", +"clearData": "Limpar Linha", +"serviceAccountRequireMessage": "Por favor, insira sua Conta de Serviço", +"ASC": "ASC", +"DESC": "DESC", +"sort": "Ordenar", +"sortPlaceholder": "Nome", +}, +"queryLibrary": { + ...en.queryLibrary, + +"export": "Exportar para JSON", +"noInput": "A Consulta Atual Não Possui Entrada", +"inputName": "Nome", +"inputDesc": "Descrição", +"emptyInputs": "Sem Entradas", +"clickToAdd": "Adicionar", +"chooseQuery": "Escolher Consulta", +"viewQuery": "Visualizar Consulta", +"chooseVersion": "Escolher Versão", +"latest": "Mais Recente", +"publish": "Publicar", +"historyVersion": "Versão Histórica", +"deleteQueryLabel": "Excluir Consulta", +"deleteQueryContent": "A consulta não pode ser recuperada após a exclusão. Excluir a consulta?", +"run": "Executar", +"readOnly": "Somente Leitura", +"exit": "Sair", +"recoverAppSnapshotContent": "Restaurar a consulta atual para a versão {version}", +"searchPlaceholder": "Pesquisar Consulta", +"allQuery": "Todas as Consultas", +"deleteQueryTitle": "Excluir Consulta", +"unnamed": "Sem Nome", +"publishNewVersion": "Publicar Nova Versão", +"publishSuccess": "Publicado com Sucesso", +"version": "Versão", +"desc": "Descrição", +}, +"snowflake": { + ...en.snowflake, + +"accountIdentifierTooltip": "Ver ", +"extParamsTooltip": "Configurar Parâmetros de Conexão Adicionais", +}, +"lowcoderQuery": { + ...en.lowcoderQuery, + +"queryOrgUsers": "Consultar Usuários do Espaço de Trabalho", +}, +"redisQuery": { + ...en.redisQuery, + +"rawCommand": "Comando Bruto", +"command": "Comando", +"queryTutorial": "Visualizar Documentos de Comandos do Redis", +}, +"httpQuery": { + ...en.httpQuery, + +"bodyFormDataTooltip": "Se {type} for selecionado, o formato do valor deve ser {object}. Exemplo: {example}", +"text": "Texto", +"file": "Arquivo", +"extraBodyTooltip": "As chaves em Corpo Extra serão anexadas ao corpo com tipos JSON ou de Dados de Formulário", +"forwardCookies": "Encaminhar Cookies", +"forwardAllCookies": "Encaminhar Todos os Cookies", +}, +"smtpQuery": { + ...en.smtpQuery, + +"attachment": "Anexo", +"attachmentTooltip": "Pode ser usado com o componente de envio de arquivo, os dados precisam ser convertidos para:", +"MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", +"sender": "Remetente", +"recipient": "Destinatário", +"carbonCopy": "Cópia Carbono", +"blindCarbonCopy": "Cópia Carbono Oculta", +"subject": "Assunto", +"content": "Conteúdo", +"contentTooltip": "Suporta texto de entrada ou HTML", +}, +"uiCompCategory": { + ...en.uiCompCategory, + +"dashboards": "Dashboards e Relatórios", +"layout": "Layout e Navegação", +"forms": "Coleta de Dados e Formulários", +"collaboration": "Reuniões e Colaboração", +"projectmanagement": "Gerenciamento de Projetos", +"scheduling": "Calendário e Agendamento", +"documents": "Gerenciamento de Documentos e Arquivos", +"itemHandling": "Manipulação de Itens e Assinaturas", +"multimedia": "Multimídia e Animação", +"integration": "Integração e Extensão", +"legacy": "Legado e obsoleto", +}, +"uiComp": { + ...en.uiComp, + +"autoCompleteCompName": "Auto Completar", +"autoCompleteCompDesc": "Um campo de entrada que fornece sugestões enquanto você digita, melhorando a experiência e a precisão do usuário.", +"autoCompleteCompKeywords": "sugestões, auto completar, digitação, entrada", +"inputCompName": "Entrada de Texto", +"inputCompDesc": "Um campo de entrada de texto básico que permite aos usuários inserir e editar texto.", +"inputCompKeywords": "texto, entrada, campo, editar", +"textAreaCompName": "Área de Texto", +"textAreaCompDesc": "Uma entrada de texto de várias linhas para conteúdo de formulário mais longo, como comentários ou descrições.", +"textAreaCompKeywords": "multilinha, área de texto, entrada, texto", +"passwordCompName": "Senha", +"passwordCompDesc": "Um campo seguro para entrada de senha, ocultando os caracteres para privacidade.", +"passwordCompKeywords": "senha, segurança, entrada, oculto", +"richTextEditorCompName": "Editor de Texto Rico", +"richTextEditorCompDesc": "Um editor de texto avançado que oferece opções de formatação ricas, como negrito, itálico e listas.", +"richTextEditorCompKeywords": "editor, texto, formatação, conteúdo rico", +"numberInputCompName": "Entrada Numérica", +"numberInputCompDesc": "Um campo específico para entrada numérica, com controles para incrementar e decrementar valores.", +"numberInputCompKeywords": "número, entrada, incrementar, decrementar", +"sliderCompName": "Controle Deslizante", +"sliderCompDesc": "Um componente gráfico deslizante para selecionar um valor ou intervalo dentro de uma escala definida.", +"sliderCompKeywords": "controle deslizante, intervalo, entrada, gráfico", +"rangeSliderCompName": "Controle Deslizante de Faixa", +"rangeSliderCompDesc": "Um controle deslizante com dois manipuladores para selecionar um intervalo de valores, útil para filtrar ou definir limites.", +"rangeSliderCompKeywords": "faixa, controle deslizante, manipulador duplo, filtro", +"ratingCompName": "Avaliação", +"ratingCompDesc": "Um componente para capturar avaliações do usuário, exibidas como estrelas.", +"ratingCompKeywords": "avaliação, estrelas, feedback, entrada", +"switchCompName": "Interruptor", +"switchCompDesc": "Um interruptor de alternância para decisões de ligar/desligar ou sim/não.", +"switchCompKeywords": "alternar, interruptor, ligar/desligar, controle", +"selectCompName": "Selecionar", +"selectCompDesc": "Um menu suspenso para selecionar de uma lista de opções.", +"selectCompKeywords": "menu suspenso, selecionar, opções, menu", +"multiSelectCompName": "Seleção Múltipla", +"multiSelectCompDesc": "Um componente que permite a seleção de vários itens em uma lista suspensa.", +"multiSelectCompKeywords": "seleção múltipla, múltiplo, menu suspenso, escolhas", +"cascaderCompName": "Cascata", +"cascaderCompDesc": "Um menu suspenso multinível para seleção de dados hierárquicos, como selecionar uma localização.", +"cascaderCompKeywords": "cascata, hierárquico, menu suspenso, níveis", +"checkboxCompName": "Caixa de Seleção", +"checkboxCompDesc": "Uma caixa de seleção padrão para opções que podem ser selecionadas ou desmarcadas.", +"checkboxCompKeywords": "caixa de seleção, opções, selecionar, alternar", +"radioCompName": "Botão de Rádio", +"radioCompDesc": "Botões de rádio para selecionar uma opção de um conjunto, onde apenas uma escolha é permitida.", +"radioCompKeywords": "botão de rádio, seleção, escolha única", +"segmentedControlCompName": "Controle Segmentado", +"segmentedControlCompDesc": "Um controle com opções segmentadas para alternar rapidamente entre várias escolhas.", +"segmentedControlCompKeywords": "segmentado, controle, alternar, opções", +"stepControlCompName": "Controle de Etapas", +"stepControlCompDesc": "Um controle com opções de etapas para oferecer etapas guiadas visualmente para aplicativos como formulários ou assistentes.", +"stepControlCompKeywords": "etapas, controle, alternar, opções", +"fileUploadCompName": "Upload de Arquivo", +"fileUploadCompDesc": "Um componente para fazer upload de arquivos, com suporte para arrastar e soltar e seleção de arquivos.", +"fileUploadCompKeywords": "arquivo, upload, arrastar e soltar, selecionar", +"dateCompName": "Data", +"dateCompDesc": "Um componente seletor de datas para selecionar datas a partir de uma interface de calendário.", +"dateCompKeywords": "data, seletor, calendário, selecionar", +"dateRangeCompName": "Intervalo de Datas", +"dateRangeCompDesc": "Um componente para selecionar um intervalo de datas, útil para sistemas de reserva ou filtros.", +"dateRangeCompKeywords": "intervalo de datas, selecionar, reserva, filtro", +"timeCompName": "Hora", +"timeCompDesc": "Um componente de seleção de hora para escolher horas específicas do dia.", +"timeCompKeywords": "hora, seletor, selecionar, relógio", +"timeRangeCompName": "Intervalo de Horário", +"timeRangeCompDesc": "Um componente para selecionar um intervalo de tempo, frequentemente usado em aplicativos de agendamento.", +"timeRangeCompKeywords": "intervalo de tempo, selecionar, agendamento, duração", +"buttonCompName": "Botão de Formulário", +"buttonCompDesc": "Um componente de botão versátil para enviar formulários, acionar ações ou navegar.", +"buttonCompKeywords": "botão, enviar, ação, navegar", +"meetingControlCompName": "Botão de Ícone", +"meetingCompDesc": "Um botão para controlar funções como iniciar, encerrar, silenciar ou compartilhar.", +"meetingCompKeywords": "controle, botão, iniciar, encerrar", +"linkCompName": "Ligação a", +"linkCompDesc": "Um componente de exibição de hyperlink para navegação ou vinculação a recursos externos.", +"linkCompKeywords": "link, hyperlink, navegação, externo", +"scannerCompName": "Scanner", +"scannerCompDesc": "Um componente para digitalizar códigos de barras, códigos QR e outros dados semelhantes.", +"scannerCompKeywords": "scanner, código de barras, código QR, digitalizar", +"dropdownCompName": "Menu Suspenso", +"dropdownCompDesc": "Um menu suspenso para exibir de forma compacta uma lista de opções.", +"dropdownCompKeywords": "menu suspenso, menu, opções, selecionar", +"toggleButtonCompName": "Botão de Alternância", +"toggleButtonCompDesc": "Um botão que pode alternar entre dois estados ou opções.", +"toggleButtonCompKeywords": "alternar, botão, mudar, estado", +"textCompName": "Exibição de Texto", +"textCompDesc": "Um componente simples para exibir conteúdo de texto estático ou dinâmico, incluindo formatação Markdown.", +"textCompKeywords": "texto, exibição, estático, dinâmico", +"tableCompName": "Tabela", +"tableCompDesc": "Um componente de tabela rico para exibir dados em um formato de tabela estruturada, com opções de ordenação e filtragem, exibição de dados em árvore e linhas extensíveis.", +"tableCompKeywords": "tabela, dados, ordenação, filtragem", +"imageCompName": "Imagem", +"imageCompDesc": "Um componente para exibir imagens, com suporte a vários formatos baseados em URI ou dados Base64.", +"imageCompKeywords": "imagem, exibição, mídia, Base64", +"progressCompName": "Progresso", +"progressCompDesc": "Um indicador visual de progresso, geralmente usado para mostrar o status de conclusão de uma tarefa.", +"progressCompKeywords": "progresso, indicador, status, tarefa", +"progressCircleCompName": "Círculo de Progresso", +"progressCircleCompDesc": "Um indicador de progresso circular, frequentemente usado para estados de carregamento ou tarefas com limite de tempo.", +"progressCircleCompKeywords": "círculo, progresso, indicador, carregamento", +"fileViewerCompName": "Visualizador de Arquivos", +"fileViewerCompDesc": "Um componente para visualizar vários tipos de arquivos, incluindo documentos e imagens.", +"fileViewerCompKeywords": "arquivo, visualizador, documento, imagem", +"dividerCompName": "Divisor", +"dividerCompDesc": "Um componente visual de divisão, usado para separar conteúdo ou seções em um layout.", +"dividerCompKeywords": "divisor, separador, layout, design", +"qrCodeCompName": "Código QR", +"qrCodeCompDesc": "Um componente para exibir códigos QR, útil para digitalização rápida e transferência de informações.", +"qrCodeCompKeywords": "código QR, digitalização, código de barras, informação", +"formCompName": "Formulário", +"formCompDesc": "Um componente contêiner para construir formulários estruturados com vários tipos de entrada.", +"formCompKeywords": "formulário, entrada, contêiner, estrutura", +"jsonSchemaFormCompName": "Formulário de Esquema JSON", +"jsonSchemaFormCompDesc": "Um componente de formulário dinâmico gerado com base em um esquema JSON.", +"jsonSchemaFormCompKeywords": "JSON, esquema, formulário, dinâmico", +"containerCompName": "Contêiner", +"containerCompDesc": "Um contêiner de uso geral para layout e organização de elementos de IU.", +"containerCompKeywords": "contêiner, layout, organização, IU", +"floatTextContainerCompName": "Contêiner de Texto Flutuante", +"floatTextContainerCompDesc": "Componente de Contêiner de Texto Flutuante", +"floatTextContainerCompKeywords": "contêiner, layout, texto, fluxo", +"collapsibleContainerCompName": "Contêiner Dobrável", +"collapsibleContainerCompDesc": "Um contêiner que pode ser expandido ou recolhido, ideal para gerenciar a visibilidade do conteúdo.", +"collapsibleContainerCompKeywords": "dobrável, contêiner, expandir, recolher", +"tabbedContainerCompName": "Contêiner com Abas", +"tabbedContainerCompDesc": "Um contêiner com navegação em abas para organizar o conteúdo em painéis separados.", +"tabbedContainerCompKeywords": "com abas, contêiner, navegação, painéis", +"pageLayoutCompName": "Layout de Página", +"pageLayoutCompDesc": "Um contêiner que oferece criar um layout com áreas de cabeçalho, lateral, rodapé e conteúdo principal", +"pageLayoutCompKeywords": "layout, contêiner, navegação, páginas", +"modalCompName": "Modal", +"modalCompDesc": "Um componente de modal pop-up para exibir conteúdo, alertas ou formulários em foco.", +"modalCompKeywords": "modal, pop-up, alerta, formulário", +"listViewCompName": "Visualização de Lista", +"listViewCompDesc": "Um componente para apresentar uma lista de itens ou dados, onde pode colocar outros componentes. Como um repetidor.", +"listViewCompKeywords": "lista, ver, exibir, repetidor", +"gridCompName": "Grade", +"gridCompDesc": "Um componente de grade flexível para criar layouts estruturados com linhas e colunas como uma extensão ao componente de Visualização de Lista.", +"gridCompKeywords": "grade, layout, linhas, colunas", +"navigationCompName": "Navegação", +"navigationCompDesc": "Um componente de navegação para criar menus, trilhas de navegação ou abas para navegação no site.", +"navigationCompKeywords": "navegação, menu, trilhas de navegação, abas", +"iframeCompName": "IFrame", +"iframeCompDesc": "Um componente de quadro inline para incorporar páginas da web e aplicativos externos ou conteúdo dentro do aplicativo.", +"iframeCompKeywords": "iframe, incorporar, página da web, conteúdo", +"customCompName": "Componente Personalizado", +"customCompDesc": "Um componente flexível e programável para criar elementos de IU exclusivos e definidos pelo usuário, adaptados às suas necessidades específicas.", +"customCompKeywords": "personalizado, definido pelo usuário, flexível, programável", +"moduleCompName": "Módulo", +"moduleCompDesc": "Use Módulos para criar Micro-Apps projetadas para encapsular funcionalidades ou recursos específicos. Os módulos podem então ser incorporados e reutilizados em todos os aplicativos.", +"moduleCompKeywords": "módulo, micro-app, funcionalidade, reutilizável", +"jsonExplorerCompName": "Explorador JSON", +"jsonExplorerCompDesc": "Um componente para explorar visualmente e interagir com estruturas de dados JSON.", +"jsonExplorerCompKeywords": "JSON, explorador, dados, estrutura", +"jsonEditorCompName": "Editor JSON", +"jsonEditorCompDesc": "Um componente editor para criar e modificar dados JSON com validação e destaque de sintaxe.", +"jsonEditorCompKeywords": "JSON, editor, modificar, validar", +"treeCompName": "Árvore", +"treeCompDesc": "Um componente de estrutura de árvore para exibir dados hierárquicos, como sistemas de arquivos ou organogramas.", +"treeCompKeywords": "árvore, hierárquico, dados, estrutura", +"treeSelectCompName": "Seleção de Árvore", +"treeSelectCompDesc": "Um componente de seleção que apresenta opções em um formato de árvore hierárquica, permitindo seleções organizadas e aninhadas.", +"treeSelectCompKeywords": "árvore, selecionar, hierárquica, aninhada", +"audioCompName": "Áudio", +"audioCompDesc": "Um componente para incorporar conteúdo de áudio, com controles para reprodução e ajuste de volume.", +"audioCompKeywords": "áudio, reprodução, som, música", +"videoCompName": "Vídeo", +"videoCompDesc": "Um componente multimídia para incorporar e reproduzir conteúdo de vídeo, com suporte para vários formatos.", +"videoCompKeywords": "vídeo, multimídia, reprodução, incorporar", +"drawerCompName": "Gaveta", +"drawerCompDesc": "Um componente de painel deslizante que pode ser usado para navegação adicional ou exibição de conteúdo, geralmente surgindo da borda da tela.", +"drawerCompKeywords": "gaveta, deslizante, painel, navegação", +"chartCompName": "Gráfico", +"chartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e diagramas.", +"chartCompKeywords": "gráfico, diagrama, dados, visualização", +"carouselCompName": "Carrossel de Imagens", +"carouselCompDesc": "Um componente de carrossel rotativo para exibir imagens, banners ou slides de conteúdo.", +"carouselCompKeywords": "carrossel, imagens, rotação, destaque", +"imageEditorCompName": "Editor de Imagens", +"imageEditorCompDesc": "Um componente interativo para edição e manipulação de imagens, oferecendo várias ferramentas e filtros.", +"imageEditorCompKeywords": "imagem, editor, manipular, ferramentas", +"mermaidCompName": "Gráfico Mermaid", +"mermaidCompDesc": "Um componente para renderizar diagramas complexos e fluxogramas com base na sintaxe Mermaid.", +"mermaidCompKeywords": "mermaid, gráficos, diagramas, fluxogramas", +"calendarCompName": "Calendário", +"calendarCompDesc": "Um componente de calendário para exibir datas e eventos, com opções para visualizações mensais, semanais ou diárias.", +"calendarCompKeywords": "calendário, datas, eventos, agendamento", +"signatureCompName": "Assinatura", +"signatureCompDesc": "Um componente para capturar assinaturas digitais, útil para processos de aprovação e verificação.", +"signatureCompKeywords": "assinatura, digital, aprovação, verificação", +"jsonLottieCompName": "Animação Lottie", +"jsonLottieCompDesc": "Um componente para exibir animações Lottie, fornecendo animações leves e escaláveis com base em dados JSON.", +"jsonLottieCompKeywords": "lottie, animação, JSON, escalável", +"timelineCompName": "Linha do Tempo", +"timelineCompDesc": "Um componente para exibir eventos ou ações em uma ordem cronológica, representados visualmente ao longo de uma linha do tempo linear.", +"timelineCompKeywords": "linha do tempo, eventos, cronológico, histórico", +"commentCompName": "Comentário", +"commentCompDesc": "Um componente para adicionar e exibir comentários de usuários, com suporte a respostas em tópicos e interação do usuário.", +"commentCompKeywords": "comentário, discussão, interação do usuário, feedback", +"mentionCompName": "Menção", +"mentionCompDesc": "Um componente que suporta mencionar usuários ou tags dentro do conteúdo de texto, geralmente usado em redes sociais ou plataformas colaborativas.", +"mentionCompKeywords": "menção, tag, usuário, redes sociais", +"responsiveLayoutCompName": "Layout Responsivo", +"responsiveLayoutCompDesc": "Um componente de layout projetado para se adaptar e responder a diferentes tamanhos de tela e dispositivos, garantindo uma experiência do usuário consistente.", +"responsiveLayoutCompKeywords": "responsivo, layout, adaptar, tamanho da tela", +"splitLayoutCompName": "Layout dividido", +"splitLayoutCompDesc": "Um componente de layout para organizar várias áreas de visualização e separar áreas horizontalmente ou verticalmente. Oferece ao utilizador a possibilidade de arrastar e largar a adaptação da largura ou altura das áreas de visualização.", +"splitLayoutCompKeywords": "dividir, divisor, layout, adaptar, tamanho do ecrã", +"iconCompName": "Ícones", +"iconCompDesc": "Use vários ícones para melhorar o apelo visual e a experiência do usuário do seu aplicativo.", +"iconCompKeywords": "ícones, pictogramas, símbolos, formas", +"tourCompName": "Viagem", +"tourCompDesc": "Um tour de produto para orientar os usuários.", +"tourCompKeywords": "tour, tour do produto, passo a passo, passo a passo interativo", +"hillchartCompName": "Gráfico de Hill", +"hillchartCompDesc": "Um componente de visualização para exibir dados de estado de gerenciamento de projetos em um formato de gráfico de hill.", +"hillchartCompKeywords": "gerenciamento de projetos, gráfico de hill, visualização, dados", +"openLayersGeoMapCompName": "Openlayers Geomap", +"openLayersGeoMapCompDesc": "Um componente para exibir mapas interativos usando OpenLayers, com suporte a várias camadas e recursos de mapa.", +"openLayersGeoMapCompKeywords": "openlayers, geomapa, interativo, camadas de mapa", +"chartsGeoMapCompName": "Gráficos de Mapas Geográficos", +"chartsGeoMapCompDesc": "Um componente para visualizar dados geográficos em mapas interativos com gráficos dinâmicos.", +"chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualização, dados geográficos", +"bpmnEditorCompName": "Editor BPMN", +"bpmnEditorCompDesc": "Um componente para visualizar, criar e editar diagramas BPMN, com suporte a vários elementos e recursos BPMN.", +"bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, fluxos de trabalho", +"turnstileCaptchaCompName": "Captcha de Catraca", +"turnstileCaptchaCompDesc": "Um componente de captcha para verificar usuários contra bots.", +"turnstileCaptchaCompKeywords": "captcha, verificação, identidade, segurança", +"pivotTableCompName": "Tabela Dinâmica", +"pivotTableCompDesc": "Uma ferramenta de sumarização e análise de dados para organizar e agregar dados em um formato de tabela.", +"pivotTableCompKeywords": "tabela dinâmica, dados, análise, agregação", +"funnelChartCompName": "Gráfico de Funil", +"funnelChartCompDesc": "Uma ferramenta de visualização para exibir a redução progressiva de dados à medida que passam por estágios.", +"funnelChartCompKeywords": "gráfico de funil, vendas, conversões, processo", +"gaugeChartCompName": "Gráfico de Medição", +"gaugeChartCompDesc": "Um gráfico que exibe dados como uma leitura em um mostrador, útil para indicar o status ou o nível de algo.", +"gaugeChartCompKeywords": "gráfico de medição, métricas, desempenho, status", +"sankeyChartCompName": "Gráfico Sankey", +"sankeyChartCompDesc": "Um diagrama de fluxo no qual a largura das setas é proporcional à taxa de fluxo, usado para mostrar transferências de energia, material ou custo.", +"sankeyChartCompKeywords": "gráfico sankey, fluxo, energia, custos", +"candleStickChartCompName": "Gráfico de Candlestick", +"candleStickChartCompDesc": "Um estilo de gráfico financeiro usado para descrever movimentos de preços de um título, derivado ou moeda.", +"candleStickChartCompKeywords": "gráfico de candlestick, ações, negociação, finanças", +"radarChartCompName": "Gráfico Radar", +"radarChartCompDesc": "Um método gráfico de exibir dados multivariados na forma de um gráfico bidimensional de três ou mais variáveis quantitativas.", +"radarChartCompKeywords": "gráfico radar, multivariado, análise de desempenho", +"heatmapChartCompName": "Gráfico de Mapa de Calor", +"heatmapChartCompDesc": "Uma representação gráfica de dados onde os valores individuais são representados como cores.", +"heatmapChartCompKeywords": "mapa de calor, visualização de dados, intensidade", +"graphChartCompName": "Gráfico de Rede", +"graphChartCompDesc": "Um diagrama que representa uma rede de nós conectados por arestas, útil para mostrar interconexões e relacionamentos.", +"graphChartCompKeywords": "gráfico de rede, redes, relacionamentos, nós", +"treeChartCompName": "Gráfico de Árvore", +"treeChartCompDesc": "Um diagrama que representa visualmente a hierarquia em uma estrutura semelhante a uma árvore, mostrando relacionamentos entre vários nós.", +"treeChartCompKeywords": "gráfico de árvore, hierarquia, organizacional", +"treemapChartCompName": "Gráfico de Árvore de Mosaico", +"treemapChartCompDesc": "Um gráfico que usa retângulos aninhados para representar dados hierárquicos proporcionalmente.", +"treemapChartCompKeywords": "treemap, hierarquia, visualização de dados", +"sunburstChartCompName": "Gráfico Sunburst", +"sunburstChartCompDesc": "Uma técnica de visualização radial que preenche o espaço e ilustra relações hierárquicas por meio de camadas de um círculo.", +"sunburstChartCompKeywords": "gráfico sunburst, radial, hierarquia", +"themeriverChartCompName": "Gráfico de Rio Temático", +"themeriverChartCompDesc": "Uma visualização que se assemelha a um gráfico de fluxo e mostra mudanças em um conjunto de dados ao longo do tempo e entre categorias.", +"themeriverChartCompKeywords": "rio temático, séries temporais, tendências", +"basicChartCompName": "Gráfico Básico", +"basicChartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e gráficos.", +"basicChartCompKeywords": "gráfico, gráfico, dados, visualização", +"shapeCompName": "Formas", +"shapeCompDesc": "Uma coleção de formas geométricas para uso em diagramas, ilustrações e visualizações.", +"shapeCompKeywords": "formas, geométrico, diagramas, ilustrações", +"ganttChartCompName": "Gráfico de Gantt", +"ganttChartCompDesc": "Um gráfico que ilustra o calendário de um projeto, mostrando as datas de início e de fim dos elementos e as dependências.", +"ganttChartCompKeywords": "gráfico de Gantt, gestão de projectos, calendário", +"kanbanCompName": "Quadro Kanban (pré-visualização!)", +"kanbanCompDesc": "Um quadro de kanban interativo para visualizar e gerenciar o fluxo de trabalho e as tarefas em um projeto.", +"kanbanCompKeywords": "kanban, quadro, fluxo de trabalho, tarefas", +"pieChartCompName": "Gráfico de pizza", +"pieChartCompDesc": "Um componente versátil para visualizar dados com gráficos de pizza.", +"pieChartCompKeywords": "gráfico, dados, visualização", +"lineChartCompName": "Gráfico de linhas", +"lineChartCompDesc": "Um componente versátil para visualizar dados com gráficos de linhas.", +"lineChartCompKeywords": "gráfico, dados, visualização", +"barChartCompName": "Gráfico de barras", +"barChartCompDesc": "Um componente versátil para visualizar dados com gráficos de barras.", +"barChartCompKeywords": "gráfico, dados, visualização", +"scatterChartCompName": "Gráfico de dispersão", +"scatterChartCompDesc": "Um componente versátil para visualizar dados com gráficos de dispersão.", +"scatterChartCompKeywords": "gráfico, dados, visualização", +"colorPickerCompName": "Seletor de Cores", +"colorPickerCompDesc": "Seleção intuitiva de cores para personalização.", +"colorPickerCompKeywords": "cor, seletor, personalização", +"floatButtonCompName": "Botão Flutuante", +"floatButtonCompDesc": "Um botão de ação flutuante para ações proeminentes e rápidas.", +"floatButtonCompKeywords": "botão flutuante, ação, rápida", +"avatarCompName": "Avatar", +"avatarCompDesc": "Exibe avatares de usuário ou imagens de perfil para identificação personalizada.", +"avatarCompKeywords": "avatar, imagem de perfil, identificação de usuário", +"avatarGroupCompName": "Grupo de Avatares", +"avatarGroupCompDesc": "Um grupo de avatares para representar vários usuários ou entidades de forma compacta e visualmente atraente.", +"avatarGroupCompKeywords": "grupo de avatares, usuários, entidades, compacto", +"transferName": "Transferência", +"transferDesc": "Facilita a transferência de dados entre duas listas com funcionalidade de arrastar e soltar.", +"transferKeywords": "transferência, dados, arrastar e soltar", +"cardCompName": "Cartão de Conteúdo", +"cardCompDesc": "Um componente de cartão para exibir informações ou conteúdo organizado de maneira estruturada.", +"cardCompKeywords": "cartão, informações, conteúdo, exibição", +"timerCompName": "Temporizador", +"timerCompDesc": "Um componente que exibe uma contagem regressiva ou tempo decorrido, útil para rastrear durações e prazos.", +"timerCompKeywords": "temporizador, contagem regressiva, tempo decorrido, rastreamento, durações, prazos", +}, +"comp": { + ...en.comp, + +"menuViewDocs": "Ver Documentação", +"menuViewPlayground": "Ver Playground Interativo", +"menuUpgradeToLatest": "Atualizar para a Última Versão", +"nameNotEmpty": "Não Pode Estar Vazio", +"nameRegex": "Deve Começar com uma Letra e Conter Apenas Letras, Dígitos e Underlines (_)", +"nameJSKeyword": "Não Pode Ser uma Palavra-chave JavaScript", +"nameGlobalVariable": "Não Pode Ser Nome de Variável Global", +"nameExists": "O Nome {name} Já Existe", +"getLatestVersionMetaError": "Falha ao Obter a Última Versão, Por Favor, Tente Mais Tarde.", +"needNotUpgrade": "A Versão Atual Já Está Atualizada.", +"compNotFoundInLatestVersion": "O Componente Atual Não Foi Encontrado na Última Versão.", +"upgradeSuccess": "Atualizado com Sucesso para a Última Versão.", +"searchProp": "Buscar", +}, +"jsonSchemaForm": { + ...en.jsonSchemaForm, + +"retry": "Tentar Novamente", +"resetAfterSubmit": "Redefinir Após Envio Bem-sucedido do Formulário", +"jsonSchema": "Esquema JSON", +"uiSchema": "Esquema UI", +"schemaTooltip": "Ver", +"defaultData": "Dados do Formulário Pré-preenchidos", +"dataDesc": "Dados Atuais do Formulário", +"required": "Obrigatório", +"maximum": "O Valor Máximo é {value}", +"minimum": "O Valor Mínimo é {value}", +"exclusiveMaximum": "Deve Ser Menor Que {value}", +"exclusiveMinimum": "Deve Ser Maior Que {value}", +"multipleOf": "Deve Ser Múltiplo de {value}", +"minLength": "Pelo Menos {value} Caracteres", +"maxLength": "No Máximo {value} Caracteres", +"pattern": "Deve Coincidir com o Padrão {value}", +"format": "Deve Coincidir com o Formato {value}", +}, +"select": { + ...en.select, + +"inputValueDesc": "Valor de Pesquisa de Entrada", +}, +"customComp": { + ...en.customComp, + +"text": "É um bom dia.", +"triggerQuery": "Disparar Consulta", +"updateData": "Atualizar Dados", +"updateText": "Eu também estou de bom humor para desenvolver agora meu próprio componente personalizado com o Lowcoder!", +"sdkGlobalVarName": "Lowcoder", +"data": "Dados que você deseja passar para o componente personalizado", +"code": "Código do seu componente personalizado", +}, +"tree": { + ...en.tree, + +"placeholder": "Por favor, selecione", +"selectType": "Selecionar Tipo", +"noSelect": "Sem Seleção", +"singleSelect": "Seleção Única", +"multiSelect": "Seleção Múltipla", +"checkbox": "Caixa de Seleção", +"checkedStrategy": "Estratégia de Verificação", +"showAll": "Todos os Nós", +"showParent": "Somente Nós Pai", +"showChild": "Somente Nós Filho", +"autoExpandParent": "Expandir Nó Pai Automaticamente", +"checkStrictly": "Verificar Estritamente", +"checkStrictlyTooltip": "Verifique o TreeNode Precisamente; O TreeNode Pai e os TreeNode Filhos não estão Associados", +"treeData": "Dados da Árvore", +"treeDataDesc": "Dados da Árvore Atuais", +"value": "Valores Padrão", +"valueDesc": "Valores Atuais", +"expanded": "Valores Expandidos", +"expandedDesc": "Valores Atuais Expandidos", +"defaultExpandAll": "Expandir Todos os Nós por Padrão", +"showLine": "Mostrar Linha", +"showLeafIcon": "Mostrar Ícone de Folha", +"treeDataAsia": "Ásia", +"treeDataChina": "China", +"treeDataBeijing": "Pequim", +"treeDataShanghai": "Xangai", +"treeDataJapan": "Japão", +"treeDataEurope": "Europa", +"treeDataEngland": "Inglaterra", +"treeDataFrance": "França", +"treeDataGermany": "Alemanha", +"treeDataNorthAmerica": "América do Norte", +"helpLabel": "Rótulo do Nó", +"helpValue": "Valor Único do Nó na Árvore", +"helpChildren": "Nós Filhos", +"helpDisabled": "Desativa o Nó", +"helpSelectable": "Se o Nó é Selecionável (Tipo de Seleção Única/Múltipla)", +"helpCheckable": "Se exibir a Caixa de Seleção (Tipo de Caixa de Seleção)", +"helpDisableCheckbox": "Desativa a Caixa de Seleção (Tipo de Caixa de Seleção)", +}, +"moduleContainer": { + ...en.moduleContainer, + +"eventTest": "Teste de Evento", +"methodTest": "Teste de Método", +"inputTest": "Teste de Entrada", +}, +"password": { + ...en.password, + +"label": "Senha", +"placeholder": "Por favor, digite a senha", +"conformLabel": "Confirmar Senha", +"conformPlaceholder": "Por favor, confirme a senha", +"visibilityToggle": "Mostrar Alternância de Visibilidade", +}, +"richTextEditor": { + ...en.richTextEditor, + +"toolbar": "Personalizar Barra de Ferramentas", +"toolbarDescription": "Você pode personalizar a barra de ferramentas. Consulte: https://quilljs.com/docs/modules/toolbar/ para obter mais detalhes.", +"placeholder": "Por favor, insira...", +"hideToolbar": "Ocultar Barra de Ferramentas", +"content": "Conteúdo", +"title": "Título", +"save": "Salvar", +"link": "Ligação:", +"edit": "Editar", +"remove": "Remover", +"defaultValue": "Conteúdo Base", +}, +"floatButton": { + ...en.floatButton, + +"custom": "Personalizado", +"backTop": "Voltar ao Topo", +"buttonType": "Tipo de Botão", +"buttonShape": "Formato do Botão", +"square": "Quadrado", +"circle": "Círculo", +"description": "Descrição", +"badge": "Distintivo", +"primary": "Principal", +"default": "Padrão", +"buttonTheme": "Tema do Botão", +"badgeColor": "Cor do Distintivo", +"dot": "Distintivo como Ponto", +"hidden": "Oculto", +"visibilityHeight": "Altura de Visibilidade", +"visibilityHeightDesc": "Role até uma certa altura antes de exibir o botão de retorno ao topo, 0 é sempre exibido. O modo de edição não pode ser visualizado em tempo real", +}, +"colorPicker": { + ...en.colorPicker, + +"trigger": "Disparadores de Eventos", +"click": "Clique", +"hover": "Passar o Mouse", +"disabledAlpha": "Desativar Seleção de Alfa", +"recommended": "Recomendado", +"showPresets": "Mostrar Predefinições de Cor", +}, +"badge": { + ...en.badge, + +"showCloseButton": "Mostrar botão de fechar", +"Type": "Tipo de insígnia", +"Count": "Contagem da insígnia", +"Size": "Tamanho da insígnia", +"SizeDefault": "padrão", +"SizeSmall": "Pequeno", +"overflowCount": "Contagem de overflow", +"Title": "Título da insígnia", +"dot": "Ponto", +"number": "Número", +"tooltip": "Dica de ferramenta", +}, +"gantt": { + ...en.gantt, + +"key": "Chave", +"title": "Título", +"project": "Projeto", +"from": "De", +"minute": "Minuto", +"hour": "Hora", +"day": "Dia", +"week": "Semana", +"month": "Mês", +"year": "Ano", +"quarter": "Trimestre", +"tasks": "Dados de Tarefas", +"level": "Nível", +"durationUnit": "Unidade de Duração", +"duration": "Duração", +"hourScalesFormat": "%F %d", +"dayScalesFormat": "%d %M", +"weekScalesFormat1": "%d %M", +"weekScalesFormat2": "%j %D", +"monthScalesFormat1": "%F, %Y", +"monthScalesFormat2": "Semana #%W", +"quarterScalesFormat": "{y} Q{i}", +"yearScalesFormat": "%Y", +"tree": "árvore", +"ColumnsData": "Dados das Colunas", +"allowChangeTask": "Clique duplo na Tarefa", +"allowAddLink": "Adicionar Link", +"allowLinkDelete": "Excluir Link", +"allowProgressDrag": "Arrastar Progresso", +"allowTaskDrag": "Arrastar Tarefa", +"links": "Dados de Links", +"dataFormat": "Formato de Análise de Dados", +"handleDateChange": "Lidar com a Mudança de Tarefa", +"handleTaskChange": "Lidar com a Mudança de Tarefa", +"handleAddedLink": "Lidar com Link Adicionado", +"handleDeletedLink": "Lidar com Link Excluído", +"handleProgressDrag": "Lidar com Arrastar de Progresso", +"showTodayMark": "Mostrar Marcação de Hoje", +"resize": "Redimensionar", +"otherEvents": "Outros Eventos", +"openAllBranchInit": "Abrir Todos os Ramos Iniciais", +"date": "Data", +"text": "Texto", +"progress": "progresso", +"width": "Largura", +"ColumnsType": "Tipo de Colunas", +"currentId": "ID Atual", +"currentObject": "Objeto Atual", +"addTask": "Adicionar Tarefa(s)", +"taskObject": "Objeto de Tarefa", +"taskObjectDesc": "Suporta arrays de Tarefas ou único Objeto de Tarefa", +"linkID": "ID do Link", +"linkIDDesc": "Suporta arrays de IDs de Links ou único Objeto de Link", +"removeTask": "Remover Tarefa", +"taskID": "ID da Tarefa", +"taskIDDesc": "Suporta arrays de IDs ou único ID", +"add": "Adicionar", +"expandingAll": "Expandindo Todos", +"collapsingAll": "Recolhendo Todos", +"addTaskFail": "A adição de tarefas falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", +"addLinkFail": "A adição de link falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", +"removeTaskFail": "A remoção de tarefas falhou, e o tipo de parâmetro deve ser string ou array de strings", +"removeLinkFail": "A remoção de links falhou, e o tipo de parâmetro deve ser array de strings", +"otherData": "Outros Dados{i}", +"projectText": "Projeto #{i}", +"taskText": "Tarefa #{i}", +"AutoCalculateProgress": "Calcular Progresso Automático", +"allowProjectDrag": "Permitir Arrastar Projeto", +"showColumns": "Mostrar Colunas", +"exportToPNG": "Exportar para PNG", +"exportToPDF": "Exportar para PDF", +"exportToExcel": "Exportar para Excel", +"progressLowBg": "Cor de Fundo Baixo", +"progressLowColor": "Cor de Progresso Baixo", +"progressMediumBg": "Cor de Fundo Médio", +"progressMediumColor": "Cor de Progresso Médio", +"progressHighBg": "Cor de Fundo Alto", +"progressHighColor": "Cor de Progresso Alto", +"progresscompletedColor": "Cor de Progresso Concluído", +"lowProgressLine": "Linha de Progresso Baixo", +"mediumProgressLine": "Linha de Progresso Médio", +"SegmentedColor": "Cor Segmentada de Progresso", +"link_f2s": "Ligação F2S", +"link_s2s": "Ligação S2S", +"link_f2f": "Ligação F2F", +"link_s2f": "Ligação S2F", +"weekScale": "#{i},", +"showHolidays": "Mostrar Feriados", +"StatutoryHolidays": "Dados de Feriados Legais", +"skipOffTime": "Ocultar Tempo Não Trabalhado", +"weekend": "Fim de Semana", +"weekendSelected": "Fim de Semana Selecionado", +"noWorkHour": "Sem Horário de Trabalho", +"noWorkHourSelected": "Sem Horário de Trabalho Selecionado", +"showWorkTimes": "Mostrar Horários de Trabalho", +"workTimeData": "Dados de Horário de Trabalho", +"fit": "ajustar", +"manual": "manual", +"scaleMode": "Modo de Escala", +"startDate": "Data de Início", +"endDate": "Data de Término", +"addLink": "Adicionar Link(s)", +"linkObject": "Objeto de Link", +"removeLink": "Remover Link", +"allowSort": "Permitir Ordenação", +"showTask": "Mostrar Tarefa", +"toggleOnDBClick": "Alternar no Duplo Clique", +"sortOptions": "Opções de Classificação Inicial", +"rowHeight": "Altura da Linha", +"showTooltip": "Mostrar Dica de Ferramenta", +"tooltipTemplates": "Modelo de Dica de Ferramenta", +"allowResizeTask": "Permitir Redimensionamento de Tarefa", +"projectColor": "Cor do Projeto", +"projectColorBg": "Cor de Fundo do Projeto", +"taskColor": "Cor da Tarefa", +"taskColorBg": "Cor de Fundo da Tarefa", +"milestoneColor": "Cor do Marco", +"highlightOverdue": "Destacar Atrasado", +"overdueColor": "Cor de Atrasado", +"overdueBgColor": "Cor de Fundo de Atrasado", +"projectCompletedBgColor": "Cor de Fundo de Projeto Concluído", +"projectCompletedColor": "Cor de Projeto Concluído", +"tag": "etiqueta", +"tasksTableWidth": "Largura da Tabela de Tarefas", +"allowErrorMessage": "Permitir Mensagem de Erro", +"currentProjectId": "ID do Projeto Atual", +"currentProjectLastTask": "Última Tarefa do Projeto Atual", +"onlySortProject": "Apenas Ordenar Projeto", +}, +"transfer": { + ...en.transfer, + +"sourceTitle": "Dados de Origem", +"targetTitle": "Dados de Destino", +"content": "Conteúdo {i}", +"items": "Itens", +"targetKeys": "Chaves Selecionadas", +"oneWay": "De Um Sentido", +"pagination": "Paginação", +"pageSize": "Tamanho da Página", +"allowSearch": "Permitir Busca", +"selectedKeys": "Chaves Selecionadas", +"searchInfo": "Informações de Busca", +"targerObject": "Objeto de Destino", +}, +"avatarGroup": { + ...en.avatarGroup, + +"maxCount": "Contagem Máxima", +"avatarSize": "Tamanho do Avatar", +"autoColor": "Cor Automática", +"alignment": "Alinhamento", +"currentAvatar": "Avatar Atual", +}, +"avatarComp": { + ...en.avatarComp, + +"square": "quadrado", +"circle": "círculo", +"icon": "ícone", +"shape": "forma", +"counts": "Insignia", +"title": "título", +"src": "src", +"avatarCompTooltip": "A prioridade de exibição é: imagem -> caracteres -> ícone. Dependendo do que estiver disponível primeiro.", +"iconSize": "Tamanho do Ícone", +"avatarBackground": "Fundo", +"label": "Rótulo", +"caption": "Legenda", +"labelPosition": "Posição do Rótulo", +"alignmentPosition": "alinhamento", +"text": "Texto", +"enableDropDown": "Ativar menu suspenso", +"containerBackground": "Fundo do Contêiner", +}, +"card": { + ...en.card, + +"cardType": "Tipo de Cartão", +"common": "comum", +"custom": "personalizado", +"default": "padrão", +"small": "pequeno", +"showTitle": "Mostrar título", +"title": "Título", +"more": "Mais", +"extraTitle": "Chamada para Ação", +"CoverImg": "Imagem de Capa", +"imgSrc": "Fonte da Imagem", +"showMeta": "Mostrar Conteúdo", +"metaTitle": "Título do Conteúdo", +"metaDesc": "Descrição do Conteúdo", +"imgHeight": "Altura da Imagem", +"showActionIcon": "Mostrar Opções de Ação", +"actionOptions": "Opções de Ação", +"menu": "Menu {i}", +"hoverColor": "Cor ao Passar o Mouse", +"IconColor": "Cor do Ícone", +"titleSize": "Tamanho do Título", +}, +"timer": { + ...en.timer, + +"timerState": "Estado do Temporizador", +"elapsedTime": "Tempo Decorrido", +"timer": "Temporizador", +"countdown": "Contagem Regressiva", +"defaultValue": "Valor Padrão", +"timerType": "Tipo de Temporizador", +"start": "Iniciar", +"pause": "Pausar", +"resume": "Continuar", +"reset": "Redefinir", +"startPause": "Iniciar/Pausar", +"hideButton": "Ocultar Botão", +"fontColor": "Cor da Fonte", +}, +"iconComp": { + ...en.iconComp, + +"icon": "Ícone", +"autoSize": "Tamanho Automático do Ícone", +"iconSize": "Tamanho do Ícone", +}, +"numberInput": { + ...en.numberInput, + +"formatter": "Formatar", +"precision": "Precisão", +"allowNull": "Permitir Valor Nulo", +"thousandsSeparator": "Mostrar Separador de Milhares", +"controls": "Mostrar Botões de Incremento/Decremento", +"step": "Passo", +"standard": "Padrão", +"percent": "Porcentagem", +}, +"slider": { + ...en.slider, + +"step": "Passo", +"stepTooltip": "O valor deve ser maior que 0 e divisível por (Máx-Mín)", +"vertical": "Orientação Vertical", +}, +"rating": { + ...en.rating, + +"max": "Avaliação Máxima", +"allowHalf": "Permitir Meias Pontuações", +}, +"optionsControl": { + ...en.optionsControl, + +"optionList": "Opções", +"option": "Opção", +"optionI": "Opção {i}", +"viewDocs": "Ver Documentação", +"tip": "As variáveis 'item' e 'i' representam o valor e o índice de cada item na matriz de dados", +}, +"stepOptionsControl": { + ...en.stepOptionsControl, + +"value": "Valor / Chave", +"valueTooltip": "O valor do passo deve ser um número. Para o primeiro passo, deve ser igual ao valor inicial. Os números devem estar em ordem consistente e ascendente.", +"title": "Título do Passo", +"subTitle": "Subtítulo do Passo", +"description": "Descrição do Passo", +"status": "Status do Passo", +"icon": "Ícone do Passo", +}, +"step": { + ...en.step, + +"initialValue": "Começar Números em", +"initialValueTooltip": "Onde começar a numeração visual. Deve ser 1 ou maior.", +"valueDesc": "Valor Atual", +"size": "Tamanho dos Passos", +"sizeSmall": "Pequeno", +"sizeDefault": "Padrão", +"percent": "Percentual dos Passos", +"type": "Tipo de Passos", +"typeDefault": "Padrão", +"typeNavigation": "Navegação", +"typeInline": "Em Linha", +"direction": "Direção dos Passos", +"directionVertical": "Vertical", +"directionHorizontal": "Horizontal", +"labelPlacement": "Posição do Rótulo dos Passos", +"status": "Status dos Passos", +"statusWait": "Aguardar", +"statusProcess": "Processando", +"statusFinish": "Concluído", +"statusError": "Erro", +"showDots": "Mostrar Pontos em Vez de Símbolos", +"showIcons": "Mostrar Ícones em Vez de Símbolos", +"responsive": "Responsivo", +"selectable": "Selecionável", +}, +"coloredTagOptionControl": { + ...en.coloredTagOptionControl, + +"tag": "Texto da Tag", +"color": "Cor", +"icon": "Ícone", +}, +"radio": { + ...en.radio, + +"options": "Opções", +"horizontal": "Horizontal", +"horizontalTooltip": "O Layout Horizontal se Ajusta Quando Acaba o Espaço", +"vertical": "Vertical", +"verticalTooltip": "O Layout Vertical é Exibido em uma Única Coluna", +"autoColumns": "Coluna Automática", +"autoColumnsTooltip": "A Coluna Automática Rearranja a Ordem Automaticamente Conforme o Espaço Permitido e Exibe em Múltiplas Colunas", +}, +"cascader": { + ...en.cascader, + +"options": "Dados JSON para mostrar seleções em cascata", +}, +"selectInput": { + ...en.selectInput, + +"valueDesc": "Valor Atualmente Selecionado", +"selectedIndexDesc": "O Índice do Valor Atualmente Selecionado, ou -1 se Nenhum Valor Estiver Selecionado", +"selectedLabelDesc": "O Rótulo do Valor Atualmente Selecionado", +}, +"file": { + ...en.file, + +"typeErrorMsg": "Deve Ser um Número com uma Unidade de Tamanho de Arquivo Válida, ou um Número sem Unidade de Tamanho de Arquivo.", +"fileEmptyErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Está Vazio.", +"fileSizeExceedErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Excede o Limite.", +"minSize": "Tamanho Mínimo", +"minSizeTooltip": "O Tamanho Mínimo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", +"maxSize": "Tamanho Máximo", +"maxSizeTooltip": "O Tamanho Máximo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", +"single": "Único", +"multiple": "Múltiplo", +"directory": "Diretório", +"upload": "Procurar", +"fileType": "Tipos de Arquivo", +"reference": "Por Favor Consulte", +"fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", +"fileTypeTooltip": "Especificadores de Tipo de Arquivo Únicos", +"uploadType": "Tipo de Envio", +"showUploadList": "Mostrar Lista de Envios", +"maxFiles": "Máximo de Arquivos", +"filesValueDesc": "O Conteúdo do Arquivo Enviado Atualmente Está Codificado em Base64", +"filesDesc": "Lista dos Arquivos Enviados Atualmente. Para Detalhes, Consulte", +"clearValueDesc": "Limpar Todos os Arquivos", +"parseFiles": "Analisar Arquivos", +"parsedValueTooltip1": "Se parseFiles for Verdadeiro, os Arquivos Enviados serão Analisados em Objeto, Array ou String. Os Dados Analisados Podem Ser Acessados através do Array parsedValue.", +"parsedValueTooltip2": "Suporta Arquivos Excel, JSON, CSV e de Texto. Outros Formatos Retornarão Nulo.", +"forceCapture": "Captura de força", +"forceCaptureTooltip": "Em vez de carregar, capturar a imagem da câmara", +"usePhoto": "Utilizar fotografia", +"retakePhoto": "Tirar uma nova fotografia", +"capture": "Captura", +}, +"date": { + ...en.date, + +"format": "Formato", +"inputFormat": "Formato de entrada", +"formatTip": "Suporte: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", +"reference": "Por Favor Consulte", +"showTime": "Mostrar Hora", +"start": "Data de Início", +"end": "Data de Fim", +"year": "Ano", +"quarter": "Trimestre", +"month": "Mês", +"week": "Semana", +"date": "Data", +"clearAllDesc": "Limpar Tudo", +"resetAllDesc": "Redefinir Tudo", +"placeholder": "Selecionar Data", +"placeholderText": "Marcador de Posição", +"startDate": "Data de Início", +"endDate": "Data de Fim", +}, +"time": { + ...en.time, + +"start": "Hora de Início", +"end": "Hora de Término", +"formatTip": "Suporte: 'HH:mm:ss', 'Timestamp'", +"format": "Formato", +"placeholder": "Selecionar Hora", +"placeholderText": "Marcador de Posição", +"startTime": "Hora de Início", +"endTime": "Hora de Término", +}, +"button": { + ...en.button, + +"prefixIcon": "Ícone Prefixo", +"prefixText": "Texto Prefixo", +"suffixIcon": "Ícone Sufixo", +"icon": "Ícone", +"iconSize": "Tamanho do Ícone", +"button": "Botão do Formulário", +"formToSubmit": "Formulário para Envio", +"default": "Padrão", +"submit": "Enviar", +"textDesc": "Texto Atualmente Exibido no Botão", +"loadingDesc": "O Botão Está no Estado de Carregamento? Se Verdadeiro, o Botão Atual Está Carregando", +"formButtonEvent": "Evento", +}, +"link": { + ...en.link, + +"link": "Ligação a", +"textDesc": "Texto Atualmente Exibido no Link", +"loadingDesc": "O Link Está no Estado de Carregamento? Se Verdadeiro, o Link Atual Está Carregando", +}, +"scanner": { + ...en.scanner, + +"text": "Clique para Escanear", +"camera": "Câmera {index}", +"changeCamera": "Alternar Câmera", +"continuous": "Escaneamento Contínuo", +"uniqueData": "Ignorar Dados Duplicados", +"maskClosable": "Clique na Máscara para Fechar", +"errTip": "Por Favor, Utilize Este Componente Sob HTTPS ou Localhost", +}, +"dropdown": { + ...en.dropdown, + +"onlyMenu": "Exibir Apenas com Rótulo", +"textDesc": "Texto Atualmente Exibido no Botão", +"triggerMode": "Modo de disparo", +}, +"textShow": { + ...en.textShow, + +"text": "### 👋 Olá, {name}", +"valueTooltip": "Markdown Suporta a Maioria das Tags e Atributos HTML. Tags como iframe, Script e Outras Estão Desativadas por Motivos de Segurança.", +"verticalAlignment": "Alinhamento Vertical", +"horizontalAlignment": "Alinhamento Horizontal", +"textDesc": "Texto Exibido na Caixa de Texto Atual", +}, +"table": { + ...en.table, + +"editable": "Editável", +"columnNum": "Colunas", +"viewModeResizable": "Largura da Coluna Ajustada pelo Usuário", +"viewModeResizableTooltip": "Se os usuários podem ou não ajustar a largura da coluna.", +"visibleResizables": "Mostrar Alças de Redimensionamento", +"visibleResizablesTooltip": "Exibir alças de redimensionamento visíveis no cabeçalho da tabela.", +"showFilter": "Mostrar Botão de Filtro", +"showRefresh": "Mostrar Botão de Atualização", +"showDownload": "Mostrar Botão de Download", +"columnSeparator": "Separador de colunas", +"columnSeparatorTooltip": "Separador de colunas (\"delimitador\") no arquivo CSV baixado. \n\nRecomendações:\n- Vírgula (,)\n- Ponto e vírgula (;)\n- Barra vertical (|)\n- Tabulação (\\t)", +"columnSetting": "Mostrar Botão de Configuração de Coluna", +"searchText": "Texto de Busca", +"searchTextTooltip": "Pesquisar e filtrar os dados apresentados na tabela", +"showQuickJumper": "Mostrar Pulador Rápido", +"hideOnSinglePage": "Ocultar em Página Única", +"showSizeChanger": "Mostrar Botão de Alteração de Tamanho", +"pageSizeOptions": "Opções de Tamanho de Página", +"pageSize": "Tamanho de Página", +"total": "Contagem Total de Linhas", +"totalTooltip": "O valor padrão é o número de itens de dados atuais, que pode ser obtido da consulta, por exemplo: '{{query1.data[0].count}}'", +"filter": "Filtrar", +"filterRule": "Regra de Filtro", +"chooseColumnName": "Escolher Coluna", +"chooseCondition": "Escolher Condição", +"clear": "Limpar", +"columnShows": "Colunas Mostradas", +"selectAll": "Selecionar Tudo", +"and": "E", +"or": "Ou", +"contains": "Contém", +"notContain": "Não Contém", +"equals": "Igual a", +"isNotEqual": "Não é Igual a", +"isEmpty": "Está Vazio", +"isNotEmpty": "Não Está Vazio", +"greater": "Maior Que", +"greaterThanOrEquals": "Maior ou Igual a", +"lessThan": "Menor Que", +"lessThanOrEquals": "Menor ou Igual a", +"action": "Ação", +"columnValue": "Valor da Coluna", +"columnValueTooltip": "'{{currentCell}}': Dados da Célula Atual\n '{{currentRow}}': Dados da Linha Atual\n '{{currentIndex}}': Índice de Dados Atual (Começando de 0)\n Exemplo: '{{currentCell * 5}}' Mostra 5 Vezes o Valor Original dos Dados.", +"columnTooltip": "Dica de coluna", +"imageSrc": "Fonte da Imagem", +"imageSize": "Tamanho da Imagem", +"columnTitle": "Título", +"columnTitleTooltip": "Dica de título", +"showTitle": "Mostrar Título", +"showTitleTooltip": "Mostrar/Ocultar título da coluna no cabeçalho da tabela", +"sortable": "Classificável", +"align": "Alinhamento", +"fixedColumn": "Coluna Fixa", +"autoWidth": "Largura Automática", +"customColumn": "Coluna Personalizada", +"auto": "Automático", +"fixed": "Fixo", +"columnType": "Tipo de Coluna", +"dataMapping": "Mapeamento de Dados", +"numberStep": "Passo", +"numberStepTooltip": "O número para o qual o valor atual é aumentado ou diminuído. Pode ser um número inteiro ou decimal", +"precision": "Precisão", +"float": "Flutuante", +"prefix": "Prefixo", +"suffix": "Sufixo", +"avatars": "Avatares", +"avatarGroupAlignment": "Alinhamento dos Avatares", +"text": "Texto", +"number": "Número", +"link": "Ligação a", +"links": "Ligações", +"tag": "Etiqueta", +"select": "Seleção", +"dropdown": "Menu suspenso", +"time": "Tempo", +"date": "Data", +"dateTime": "Data e Hora", +"badgeStatus": "Estado", +"button": "Botão", +"image": "Imagem", +"boolean": "Booleano", +"switch": "Interruptor", +"rating": "Classificação", +"progress": "Progresso", +"option": "Operação", +"optionList": "Lista de Operações", +"option1": "Operação 1", +"status": "Estado", +"statusTooltip": "Valores Opcionais: Success, Error, Default, Warning, Processing", +"primaryButton": "Principal", +"defaultButton": "Padrão", +"type": "Tipo", +"tableSize": "Tamanho da Tabela", +"hideHeader": "Ocultar Cabeçalho da Tabela", +"hideToolbar": "Ocultar barra de ferramentas", +"fixedHeader": "Cabeçalho da Tabela Fixo", +"fixedHeaderTooltip": "O cabeçalho será fixado para tabelas com rolagem vertical", +"fixedToolbar": "Barra de Ferramentas Fixa", +"fixedToolbarTooltip": "A barra de ferramentas será fixada para tabelas com rolagem vertical com base na posição", +"hideBordered": "Mostrar Alças de Redimensionamento", +"showHeaderGridBorder": "Mostrar Borda do Grid do Cabeçalho", +"showRowGridBorder": "Mostrar Borda do Grid da Linha", +"showVerticalRowGridBorder": "Mostrar Borda do Grid da Linha Vertical", +"showHorizontalRowGridBorder": "Mostrar Borda do Grid da Linha Horizontal", +"deleteColumn": "Excluir Coluna", +"confirmDeleteColumn": "Confirmar Exclusão da Coluna: ", +"small": "P", +"middle": "M", +"large": "G", +"refreshButtonTooltip": "Os dados atuais mudaram. Clique para regenerar a coluna.", +"changeSetDesc": "Um objeto representando mudanças em uma tabela editável, contendo apenas a célula alterada. As linhas vêm primeiro e as colunas em seguida.", +"selectedRowDesc": "Fornece dados para a linha atualmente selecionada, indicando a linha que aciona um evento de clique se o usuário clicar em um botão/link na linha", +"selectedRowsDesc": "Útil no modo de seleção múltipla, igual a SelectedRow", +"pageNoDesc": "Página atual, começando em 1", +"pageSizeDesc": "Quantas linhas por página", +"sortColumnDesc": "O nome da coluna classificada atualmente selecionada", +"sortDesc": "Se a linha atual está em ordem decrescente", +"pageOffsetDesc": "O início atual da paginação, usado para paginação para obter dados. Exemplo: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", +"displayDataDesc": "Dados exibidos na tabela atual", +"selectedIndexDesc": "Índice selecionado em dados de exibição", +"filterDesc": "Parâmetros de filtragem da tabela", +"dataDesc": "Os dados JSON para a tabela", +"saveChanges": "Salvar Alterações", +"cancelChanges": "Cancelar Alterações", +"rowSelectChange": "Alteração na Seleção de Linha", +"rowClick": "Clique na Linha", +"rowExpand": "Expandir Linha", +"rowShrink": "Contrair Linha", +"search": "Buscar", +"download": "Descarregar", +"columnEdited": "Coluna Editada", +"filterChange": "Alteração de Filtro", +"sortChange": "Alteração de Classificação", +"pageChange": "Alteração de Página", +"refresh": "Atualizar", +"rowColor": "Cor da Linha Condicional", +"rowColorDesc": "Defina condicionalmente a cor da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", +"rowHeight": "Altura da Linha Condicional", +"rowHeightDesc": "Defina condicionalmente a altura da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", +"cellColor": "Cor da Célula Condicional", +"cellColorDesc": "Defina condicionalmente a cor da célula com base no valor da célula usando CurrentCell. Por exemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", +"saveChangesNotBind": "Nenhum manipulador de eventos configurado para salvar alterações. Por favor, vincule pelo menos um manipulador de eventos antes de clicar.", +"dynamicColumn": "Usar Configuração de Coluna Dinâmica", +"dynamicColumnConfig": "Configuração de Coluna", +"dynamicColumnConfigDesc": "Configurações de coluna dinâmica. Aceita um array de nomes de colunas. Todas as colunas são visíveis por padrão. Exemplo: [\"id\", \"name\"]", +"position": "Posição", +"showDataLoadSpinner": "Mostrar indicador de carregamento", +"showValue": "Mostrar Valor", +"expandable": "Expansível", +"configExpandedView": "Configurar Visualização Expandida", +"toUpdateRowsDesc": "Um array de objetos para linhas a serem atualizadas em tabelas editáveis.", +"selectedCellDesc": "Célula selecionada", +"empty": "Vazio", +"falseValues": "Texto Quando Falso", +"iconTrue": "Ícone Quando Verdadeiro", +"iconFalse": "Ícone Quando Falso", +"iconNull": "Ícone Quando Nulo", +"allColumn": "Todas", +"visibleColumn": "Visível", +"emptyColumns": "Nenhuma coluna está atualmente visível", +"showSummary": "Mostrar linha(s) de resumo", +"totalSummaryRows": "Total de linhas", +"inlineAddNewRow": "Adicionar nova(s) linha(s) em linha", +"editMode": "Modo de edição", +"singleClick": "Clique Único", +"doubleClick": "Clique duplo", +"showUpdateButtons": "Mostrar botões Salvar/Cancelar", +}, +"image": { + ...en.image, + +"src": "Fonte da Imagem", +"srcDesc": "A fonte da imagem. Pode ser uma URL, um caminho ou uma string Base64. Por exemplo: data:image/png;base64, AAA... CCC", +"supportPreview": "Suporte para visualização clicável (zoom)", +"supportPreviewTip": "Efetivo quando a fonte da imagem é válida", +"previewSrc": "Fonte da imagem de alta resolução", +"clipPath": "Caminho de recorte de imagem", +"clipPathTip": "Utilize o clip-path para definir uma forma personalizada para o seu elemento com base na definição CSS, referenciando uma máscara SVG (através do URL de origem) ou utilizando formas predefinidas como circle(), ellipse(), polygon() ou inset() para recorte.", +"enableOverflow": "Ativar o transbordo", +"enableOverflowTip": "Permite que a imagem transborde o seu contentor, possibilitando o recorte para além dos limites do contentor. Útil para manter o foco em partes específicas da imagem.", +"overflow": "Comportamento de transbordo (CSS)", +"overflowTip": "Define como o conteúdo se deve comportar quando transborda o contentor. Opções como \"hidden\", \"scroll\" ou \"visible\" determinam a visibilidade do conteúdo recortado.", +"positionX": "Posição horizontal", +"positionXTip": "Especifica o alinhamento horizontal da imagem dentro do seu contentor. Exemplos: 'esquerda', 'centro', 'direita' ou valores percentuais.", +"positionY": "Posição vertical", +"positionYTip": "Especifica o alinhamento vertical da imagem dentro do seu contentor. Exemplos: 'top', 'center', 'bottom', ou valores percentuais.", +"aspectRatio": "Rácio de aspeto (CSS)", +"aspectRatioTip": "Mantém uma relação largura/altura consistente para a imagem, como \"16/9\" para ecrã panorâmico ou \"1/1\" para quadrado. Deixar em branco para as dimensões naturais da imagem.", +"placement": "Colocação de imagens", +"placementTip": "Determina onde e como a imagem é apresentada no esquema ou no contentor. As opções incluem alinhamento específico ou lógica de colocação.", +}, +"progress": { + ...en.progress, + +"value": "Valor", +"valueTooltip": "A porcentagem concluída como um valor entre 0 e 100", +"showInfo": "Mostrar Valor", +"valueDesc": "Valor de progresso atual, variando de 0 a 100", +"showInfoDesc": "Se deve exibir o valor de progresso atual", +}, +"fileViewer": { + ...en.fileViewer, + +"invalidURL": "Por favor, insira uma URL válida ou uma string Base64", +"src": "URI do arquivo", +"srcTooltip": "Pré-visualização do conteúdo do link fornecido por meio da incorporação de HTML, dados codificados em Base64 também podem ser suportados, por exemplo: data:application/pdf;base64, AAA... CCC", +"srcDesc": "O URI do arquivo", +}, +"divider": { + ...en.divider, + +"title": "Título", +"align": "Alinhamento", +"dashed": "Tracejado", +"type": "Tipo vertical", +"dashedDesc": "Se deve usar linha tracejada", +"titleDesc": "Título do divisor", +"alignDesc": "Alinhamento do título do divisor", +}, +"QRCode": { + ...en.QRCode, + +"value": "Valor do Conteúdo do Código QR", +"valueTooltip": "O valor contém no máximo 2953 caracteres. O valor do código QR pode codificar vários tipos de dados, incluindo mensagens de texto, URLs, detalhes de contato (VCard/meCard), credenciais de login Wi-Fi, endereços de e-mail, números de telefone, mensagens SMS, coordenadas de geolocalização, detalhes de eventos de calendário, informações de pagamento, endereços de criptomoeda e links para download de aplicativos", +"valueDesc": "O valor do conteúdo do código QR", +"level": "Nível de Tolerância a Falhas", +"levelTooltip": "Refere-se à capacidade de o código QR ser escaneado mesmo que parte dele esteja bloqueada. Quanto maior o nível, mais complexo é o código.", +"includeMargin": "Mostrar Margem", +"image": "Exibir Imagem no Centro", +"L": "L (Baixo)", +"M": "M (Médio)", +"Q": "Q (Quartil)", +"H": "H (Alto)", +"maxLength": "O conteúdo é muito longo. Defina o comprimento como menos de 2953 caracteres", +}, +"jsonExplorer": { + ...en.jsonExplorer, + +"indent": "Indentação de cada nível", +"expandToggle": "Expandir Árvore JSON", +"theme": "Tema de Cores", +"valueDesc": "Dados JSON atuais", +"default": "Padrão", +"defaultDark": "Padrão Escuro", +"neutralLight": "Neutro Claro", +"neutralDark": "Neutro Escuro", +"azure": "Azul Claro", +"darkBlue": "Azul Escuro", +}, +"audio": { + ...en.audio, + +"src": "URI da Fonte de Áudio ou String Base64", +"defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", +"autoPlay": "Reprodução Automática", +"loop": "Laço", +"srcDesc": "URI ou String Base64 atual de áudio como data:audio/mpeg;base64, AAA... CCC", +"play": "Reproduzir", +"playDesc": "Disparado quando o áudio é reproduzido", +"pause": "Pausa", +"pauseDesc": "Disparado quando o áudio é pausado", +"ended": "Finalizado", +"endedDesc": "Disparado quando o áudio termina de ser reproduzido", +}, +"video": { + ...en.video, + +"src": "URI da Fonte de Vídeo ou String Base64", +"defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", +"poster": "URL do Pôster", +"defaultPosterUrl": "", +"autoPlay": "Reprodução Automática", +"loop": "Laço", +"controls": "Ocultar Controles", +"volume": "Volume", +"playbackRate": "Taxa de Reprodução", +"posterTooltip": "O Valor Padrão é o Primeiro Quadro do Vídeo", +"autoPlayTooltip": "Após o Vídeo ser Carregado, Ele Será Reproduzido Automaticamente. Alterar Este Valor de Verdadeiro para Falso Pausará o Vídeo. (Se um Pôster Estiver Definido, Ele Será Reproduzido pelo Botão do Pôster)", +"controlsTooltip": "Ocultar Controles de Reprodução do Vídeo. Pode Não Ser Totalmente Suportado por Cada Fonte de Vídeo.", +"volumeTooltip": "Defina o Volume do Player, Entre 0 e 1", +"playbackRateTooltip": "Defina a Taxa do Player, Entre 1 e 2", +"srcDesc": "URI ou String Base64 atual de vídeo como data:video/mp4;base64, AAA... CCC", +"play": "Reproduzir", +"playDesc": "Disparado quando o vídeo é reproduzido", +"pause": "Pausa", +"pauseDesc": "Disparado quando o vídeo é pausado", +"load": "Carregar", +"loadDesc": "Disparado quando o recurso de vídeo terminou de carregar", +"ended": "Finalizado", +"endedDesc": "Disparado quando o vídeo termina de ser reproduzido", +"currentTimeStamp": "A posição de reprodução atual do vídeo em segundos", +"duration": "A duração total do vídeo em segundos", +}, +"media": { + ...en.media, + +"playDesc": "Inicia a reprodução da mídia.", +"pauseDesc": "Pausa a reprodução da mídia.", +"loadDesc": "Redefine a mídia para o início e reinicia a seleção do recurso de mídia.", +"seekTo": "Avança para o número de segundos especificado, ou fração se o valor estiver entre 0 e 1", +"seekToAmount": "Número de segundos, ou fração se estiver entre 0 e 1", +"showPreview": "Mostrar pré-visualização", +}, +"rangeSlider": { + ...en.rangeSlider, + +"start": "Valor Inicial", +"end": "Valor Final", +"step": "Tamanho do Passo", +"stepTooltip": "A granularidade do controle deslizante, o valor deve ser maior que 0 e divisível por (Max-Min)", +}, +"iconControl": { + ...en.iconControl, + +"selectIcon": "Selecionar um Ícone", +"searchIcon": "Procurar um ícone", +"searchAnimation": "Procurar uma animação", +"searchIllustration": "Procurar uma ilustração", +"insertIcon": "Inserir um Ícone", +"insertImage": "Inserir uma Imagem ou ", +}, +"shapeControl": { + ...en.shapeControl, + +"selectShape": "Selecionar uma Forma", +"insertShape": "Inserir uma Forma", +"insertImage": "Inserir uma Imagem ou ", +}, +"millisecondsControl": { + ...en.millisecondsControl, + +"timeoutTypeError": "Por favor, insira o período de timeout correto em ms, o valor atual é: {value}", +"timeoutLessThanMinError": "A entrada deve ser maior que {left}, o valor atual é: {value}", +}, +"selectionControl": { + ...en.selectionControl, + +"single": "Único", +"multiple": "Múltiplo", +"close": "Fechar", +"mode": "Modo de Seleção", +}, +"container": { + ...en.container, + +"title": "Título do Container Exibido", +"titleTooltip": "O título do container", +"flowWidth": "Largura do conteúdo", +"floatType": "Tipo de Flutuação de Texto", +}, +"drawer": { + ...en.drawer, + +"closePosition": "Posição do Botão Fechar", +"placement": "Posição da Gaveta", +"size": "Tamanho", +"top": "Superior", +"right": "Direita", +"center": "Center", +"bottom": "Inferior", +"left": "Esquerda", +"title": "Título da gaveta", +"titleAlign": "Alinhamento do título", +"widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", +"heightTooltip": "Pixel, ex: 378", +"openDrawerDesc": "Abrir Gaveta", +"closeDrawerDesc": "Fechar Gaveta", +"width": "Largura da Gaveta", +"height": "Altura da Gaveta", +}, +"meeting": { + ...en.meeting, + +"logLevel": "Nível de log do SDK da Agora", +"placement": "Posição da Gaveta de Reuniões", +"meeting": "Configurações de Reunião", +"cameraView": "Visualização da Câmera", +"cameraViewDesc": "Visualização da câmera do usuário local (anfitrião)", +"screenShared": "Compartilhamento de Tela", +"screenSharedDesc": "Tela compartilhada pelo usuário local (anfitrião)", +"audioUnmuted": "Áudio Ativado", +"audioMuted": "Áudio Desativado", +"videoClicked": "Vídeo Clicado", +"videoOff": "Vídeo Desativado", +"videoOn": "Vídeo Ativado", +"size": "Tamanho", +"top": "Superior", +"host": "Anfitrião da Sala de Reunião. Você precisaria gerenciar o anfitrião como sua lógica de aplicativo", +"participants": "Participantes da Sala de Reunião", +"shareScreen": "Exibir Tela Compartilhada pelo Usuário Local", +"appid": "ID do Aplicativo da Agora", +"meetingName": "Nome da Reunião", +"localUserID": "ID do Usuário Anfitrião", +"userName": "Nome do Usuário Anfitrião", +"rtmToken": "Token RTM da Agora", +"rtcToken": "Token RTC da Agora", +"noVideo": "Sem Vídeo", +"profileImageUrl": "URL da Imagem de Perfil", +"right": "Direita", +"bottom": "Inferior", +"videoId": "ID do Fluxo de Vídeo", +"audioStatus": "Status de Áudio", +"left": "Esquerda", +"widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", +"heightTooltip": "Pixel, ex: 378", +"openDrawerDesc": "Abrir Gaveta", +"closeDrawerDesc": "Fechar Gaveta", +"width": "Largura da Gaveta", +"height": "Altura da Gaveta", +"actionBtnDesc": "Botão de Ação", +"broadCast": "Transmissão de Mensagens", +"title": "Título da Reunião", +"meetingCompName": "Controlador de Reunião da Agora", +"sharingCompName": "Transmissão de Tela", +"videoCompName": "Transmissão de Câmera", +"videoSharingCompName": "Transmissão de Tela", +"meetingControlCompName": "Botão de Ícone", +"meetingCompDesc": "Componente de Reunião", +"meetingCompControls": "Controle de Reunião", +"meetingCompKeywords": "Reunião da Agora, Reunião Web, Colaboração", +"iconSize": "Tamanho do Ícone", +"userId": "ID do Usuário Anfitrião", +"roomId": "ID da Sala", +"meetingActive": "Reunião em Andamento", +"messages": "Mensagens Transmitidas", +}, +"settings": { + ...en.settings, + +"title": "Configurações", +"userGroups": "Grupos de Usuários", +"organization": "Espaços de Trabalho", +"subscription": "Assinaturas", +"audit": "Registros de Auditoria", +"theme": "Temas", +"plugin": "Plug-ins", +"advanced": "Avançado", +"apiDocs": "Documentos da API", +"lab": "Laboratório", +"branding": "Marca", +"oauthProviders": "Autenticação de Usuário", +"appUsage": "Logs de Uso do Aplicativo", +"environments": "Ambientes", +"premium": "Prémio", +}, +"enterprise": { + ...en.enterprise, + +"AuditLogTitle": "Painel de registo de auditoria", +"AuditLogOverview": "Filtro de registo", +"USER_LOGIN": "Início de sessão do utilizador", +"USER_LOGOUT": "Terminar sessão do utilizador", +"APPLICATION_VIEW": "Ver candidatura", +"APPLICATION_CREATE": "Criar aplicação", +"APPLICATION_DELETE": "Eliminar aplicação", +"APPLICATION_UPDATE": "Atualizar a aplicação", +"APPLICATION_MOVE": "Mover aplicação", +"APPLICATION_RECYCLED": "Aplicação de reciclagem", +"APPLICATION_RESTORE": "Restaurar a aplicação", +"APPLICATION_PUBLISH": "Publicação de aplicações", +"APPLICATION_VERSION_CHANGE": "Atualização da versão da aplicação", +"APPLICATION_SHARING_CHANGE": "Alteração da partilha de aplicações", +"APPLICATION_PERMISSION_CHANGE": "Alteração da autorização de candidatura", +"FOLDER_CREATE": "Criar pasta", +"FOLDER_DELETE": "Eliminar a pasta", +"FOLDER_UPDATE": "Atualizar a pasta", +"QUERY_EXECUTION": "Executar consulta", +"GROUP_CREATE": "Criar grupo", +"GROUP_UPDATE": "Grupo de Atualização", +"GROUP_DELETE": "Eliminar grupo", +"GROUP_MEMBER_ADD": "Adicionar membro do grupo", +"GROUP_MEMBER_ROLE_UPDATE": "Atualizar a função de membro do grupo", +"GROUP_MEMBER_LEAVE": "Grupo de férias", +"GROUP_MEMBER_REMOVE": "Remover membro do grupo", +"SERVER_START_UP": "Arranque do servidor", +"SERVER_INFO": "Ver informações do servidor", +"DATA_SOURCE_CREATE": "Criar fonte de dados", +"DATA_SOURCE_UPDATE": "Atualizar fonte de dados", +"DATA_SOURCE_DELETE": "Eliminar fonte de dados", +"DATA_SOURCE_PERMISSION_GRANT": "Conceder permissão de fonte de dados", +"DATA_SOURCE_PERMISSION_UPDATE": "Atualizar a permissão da fonte de dados", +"DATA_SOURCE_PERMISSION_DELETE": "Permissão de eliminação de fontes de dados", +"LIBRARY_QUERY_CREATE": "Criar Library Query", +"LIBRARY_QUERY_UPDATE": "Atualizar Library Query", +"LIBRARY_QUERY_DELETE": "Eliminar Library Query", +"LIBRARY_QUERY_PUBLISH": "Publicar consulta de biblioteca", +"API_CALL_EVENT": "Evento de chamada de API", +"logFilter": "Filtro de registo", +"noLogsFound": "Não foram encontrados registos. Ajuste os filtros e tente novamente.", +"usageLogUserEngagement": "Envolvimento dos utilizadores por região", +"usageLogAppViews": "Utilização da aplicação ao longo do tempo", +"usageLogTopTen": "As 10 melhores aplicações", +"usageLogAnonymousKNown": "Utilizadores anónimos/conhecidos", +"usageLogDevices": "Discriminação por dispositivo/SO", +"usageLogBrowsers": "Navegador/motor de apresentação", +"premiumFeaturesNotice": "Todas as funcionalidades Premium estão disponíveis na Enterprise Edition do Lowcoder.", +"requestLicense": "Solicitar licenças da Enterprise Edition", +"requestLicensesBtton": "Pedir acesso à empresa", +"AuditLogsTitle": "Registos de auditoria", +"AuditLogsIntroTitle": "Visibilidade poderosa da atividade do seu espaço de trabalho", +"AuditLogsIntro1": "Os registos de auditoria permitem aos administradores seguir exatamente o que acontece em toda a plataforma Lowcoder. Desde as entradas dos utilizadores até às modificações das aplicações, todas as acções relevantes são capturadas e armazenadas.", +"AuditLogsIntro2": "Incluímos metadados detalhados, como a geolocalização, o tipo de dispositivo, o navegador e o sistema operativo de cada evento.", +"AuditLogsIntro3": "Esta transparência permite-lhe monitorizar a atividade em todos os ambientes ligados, fornecendo uma pista de auditoria robusta para apoiar a conformidade, a segurança e a perceção operacional.", +"AuditLogsEventsTitle": "Que eventos são monitorizados?", +"AuditLogsEventsIntro": "As seguintes acções do utilizador são registadas em tempo real:", +"SignIn": "Iniciar sessão", +"Logout": "Terminar sessão", +"ViewApp": "Ver aplicação", +"CreateApp": "Criar nova aplicação", +"DeleteApp": "Eliminar a aplicação", +"UpdateApp": "Atualizar a aplicação", +"MoveToFolder": "Mover para a pasta", +"MoveToTrash": "Mover para o lixo", +"RestoreApp": "Restaurar a aplicação", +"CreateFolder": "Criar nova pasta", +"DeleteFolder": "Eliminar a pasta", +"UpdateFolder": "Atualizar pasta", +"ExecuteDataQuery": "Executar consulta de dados", +"CreateUserGroup": "Criar um novo grupo de utilizadores", +"UpdateUserGroup": "Atualizar o grupo de utilizadores", +"DeleteUserGroup": "Eliminar grupo de utilizadores", +"AddGroupMember": "Adicionar membro do grupo de utilizadores", +"UpdateGroupMemberRole": "Atualizar a função do membro do grupo de utilizadores", +"LeaveUserGroup": "Deixar grupo de utilizadores", +"RemoveGroupMember": "Remover membro do grupo de utilizadores", +"ServerStartup": "Arranque do servidor", +"CreateDataSource": "Criar fonte de dados", +"UpdateDataSource": "Atualizar a fonte de dados", +"DeleteDataSource": "Eliminar a fonte de dados", +"GrantUpdateDeletePermission": "Conceder ou atualizar permissões", +"LibraryQueryActions": "Criar / Atualizar / Eliminar consultas de biblioteca", +"PublishLibraryQuery": "Publicar consulta de biblioteca", +"AuditLogsPreviewTitle": "Pré-visualização do registo de auditoria em ação (clique para ampliar)", +"ScreenshotPlaceholder1": "[ Marcador de ecrã 1 ]", +"ScreenshotPlaceholder2": "[ Marcador de ecrã 2 ]", +"ScreenshotPlaceholder3": "[ Marcador de ecrã 3 ]", +"PricingTitle": "Preços da Enterprise Edition", +"PricingIntro": "Oferecemos preços flexíveis para organizações de qualquer dimensão, adaptados ao seu modelo de utilização:", +"FlatRateTitle": "Opção 1: Taxa fixa por instância - $169 / mês", +"FlatRateDesc": "Uma instância é um ambiente Lowcoder completo (base de dados de metadados + tempo de execução) que pode ser implementado de forma independente. Isto inclui:", +"FlatRatePoint1": "Um armazenamento de metadados MongoDB dedicado", +"FlatRatePoint2": "Um ou mais tempos de execução de aplicações (contentores \"Api-Service\" e/ou \"Node-Service\")", +"UsagePricingTitle": "Opção 2: Preços baseados na utilização - $0,001 por chamada API", +"UsagePricingDesc": "Em alternativa, cada instância pode ser licenciada com base na utilização da API. Oferecemos pacotes pré-pagos:", +"API100k": "100.000 chamadas API - $100", +"API1M": "1.000.000 de chamadas API - $1.000", +"API10M": "10.000.000 de chamadas API - $10.000", +"UsageOverrunDesc": "Quando o seu pacote API estiver a esgotar-se, será alertado. Assim que o pacote for consumido, a sua instância permanece funcional, mas funcionará a uma velocidade reduzida para evitar abusos e manter a equidade.", +"UsageTopUpInfo": "Pode adicionar facilmente pacotes adicionais em qualquer altura para garantir um acesso contínuo e rápido - sem interrupções de serviço.", +"AppUsageTitle": "Registos de utilização da aplicação", +"AppUsageIntroTitle": "Compreender como as suas aplicações são utilizadas", +"AppUsageIntro1": "Os Registos de Utilização da Aplicação dão-lhe uma visão profunda de como as suas aplicações Lowcoder publicadas são consumidas.", +"AppUsageIntro2": "Esta funcionalidade funciona como uma versão integrada e simplificada do Google Analytics - mas totalmente privada e limitada à sua instância Lowcoder.", +"AppUsageIntro3": "Os administradores podem analisar a forma como as aplicações são acedidas ao longo do tempo, quais são as mais utilizadas e a partir de onde os utilizadores se ligam.", +"AppUsageMetricsTitle": "Métricas que pode seguir...", +"AppUsageMetricsIntro": "Estas análises ajudam-no a tomar decisões informadas sobre o envolvimento e a utilização da plataforma:", +"MetricActiveUsers": "Visualizações da aplicação por dia / semana / mês (com base no filtro de tempo)", +"MetricViewsPerApp": "As 10 melhores aplicações", +"MetricDevices": "Acesso por dispositivo (computador, tablet, telemóvel)", +"MetricBrowsers": "Acesso por navegador e sistema operativo", +"MetricCountries": "Origem geográfica dos utilizadores", +"AppUsageScreenshotsTitle": "Análise de utilização da aplicação em ação (clique para ampliar)", +"AppUsageScreenshot1": "[ Captura de ecrã do painel de controlo da utilização da aplicação ]", +"AppUsageScreenshot2": "[ Gráfico de visualizações por aplicação ]", +"AppUsageScreenshot3": "[ Mapa de Distribuição Geo ]", +"BrandingIntroTitle": "Marca personalizada e etiqueta branca", +"BrandingIntro1": "Com as definições de marca da Lowcoders, pode elevar a experiência do produto para os seus utilizadores, oferecendo uma marca totalmente personalizável.", +"BrandingIntro2": "Permita que os seus clientes ou equipas internas utilizem a plataforma como se fosse sua - logótipo, cores, tipos de letra e páginas personalizadas incluídos.", +"BrandingIntro3": "Ou precisa de uma solução totalmente de marca branca e reforçar a identidade da sua marca em todos os pontos de contacto.", +"BrandingColorsIntro1": "Pode definir o seu próprio esquema de cores para corresponder à sua identidade empresarial, incluindo elementos primários da IU e barras de navegação.", +"BrandingColorsIntro2": "Personalize os destaques da barra lateral, as secções do cabeçalho e até o contraste do texto para melhorar a experiência do utilizador e a acessibilidade.", +"BrandingFontsIntro": "Selecione a partir de fontes selecionadas do Google Fonts para tornar a sua aplicação verdadeiramente sua, tanto em termos de estilo como de legibilidade.", +"BrandingLogosIntro": "Naturalmente, também pode carregar os seus próprios logótipos - rectangulares e quadrados - para aparecerem em cabeçalhos, painéis de controlo e ecrãs de início de sessão. Mantenha a consistência da marca em todos os dispositivos e ecrãs.", +"BrandingPagesIntro1": "Adicione texto e imagens personalizados às suas páginas de erro, fluxos de registo e mensagens de fim de sessão.", +"BrandingPagesIntro2": "Estes pontos de contacto ajudam a proporcionar uma experiência de marca completa, mesmo durante cenários inesperados ou transições de conta.", +"BrandingMetaIntro": "Defina metadados padrão como o título e a descrição da página para melhorar a sua presença SEO e a mensagem da marca.", +"BrandingHelpLinksIntro": "Adicione ligações de documentação sensíveis ao contexto diretamente dentro da aplicação, fornecendo ajuda imediata aos seus utilizadores.", +"BrandingWhatsNewIntro": "Active a secção \"Novidades\" para destacar actualizações e anúncios de produtos de uma forma visível e com a sua marca.", +"EnvironmentsIntroTitle": "Preparação do Lowcoder", +"EnvironmentsTitle": "Infraestrutura multi-ambiente", +"EnvironmentsIntro1": "Os ambientes Lowcoder permitem-lhe separar as fases de desenvolvimento, teste e produção de forma limpa e segura.", +"EnvironmentsIntro2": "As equipas empresariais beneficiam de fluxos de trabalho de lançamento estruturados, processos de aprovação e estabilidade de versões em todas as fases.", +"EnvironmentsIntro3": "Com a funcionalidade Ambientes, os administradores podem controlar o que é implementado, quando e onde - tudo a partir de uma única interface.", +"EnvironmentsIntro4": "A Lowcoder inclui vários tipos de objectos como Workspaces, Data Sources, Data Queries e Apps. Uma vez que muitos destes objectos estão interligados (por exemplo, uma Fonte de Dados pode ser partilhada por várias Apps), uma exportação puramente baseada em Git não capturaria todas as dependências de forma consistente. Em vez disso, a Lowcoder oferece um mecanismo de implementação seletivo e integrado diretamente no UI. As aplicações, as fontes de dados e as consultas podem ser geridas e implementadas seletivamente em ambientes. Os objectos geridos garantem lançamentos seguros e controlados de preparação e produção.", +"yourDeploymentID": "A sua ID de implantação", +"EnvironmentsFeaturePreviewTitle": "Ambientes e implementação em ação (clique para ampliar)", +"EnvironmentsUseCasesTitle": "Por que usar ambientes? (Encenação)", +"EnvironmentsUseCase1": "Evite alterações não intencionais na produção, testando as aplicações em ambientes dedicados de desenvolvimento ou de controlo de qualidade.", +"EnvironmentsUseCase2": "Alinhe-se com a governação de TI da empresa, implementando implementações faseadas com acompanhamento pronto para auditoria.", +"EnvironmentsUseCase3": "Permita que as equipas construam com confiança com configurações, dados e integrações específicas do ambiente.", +"EnvironmentsFeaturesTitle": "O que obtém", +"EnvironmentsFeature1": "Painel de controlo centralizado para visualizar e gerir todos os ambientes Lowcoder.", +"EnvironmentsFeature2": "Implementação de aplicações, fontes de dados e configurações entre ambientes, diretamente a partir da IU, sem necessidade de ferramentas adicionais de CI/CD.", +"EnvironmentsFeature3": "Controlos de acesso e regras de visibilidade específicos do ambiente.", +"EnvironmentsFeature5": "Separação clara de preocupações para operações de preparação, sandbox e produção.", +"apiUsage": "Chamadas API.", +"loadingApiUsage": "Carregando dados de uso da API...", +}, +"environments": { + ...en.environments, + +"title": "Ambientes", +"search": "Pesquisar", +"refresh": "Atualizar", +"addEnvironment": "Adicionar ambiente", +"errorLoadingEnvironments": "Erro ao carregar ambientes", +"noEnvironmentsFoundMatching": "Não foram encontrados ambientes correspondentes a \"{searchText}\"", +"noEnvironmentsFound": "Não foram encontrados ambientes. Crie o seu primeiro ambiente para começar.", +"environmentsTypeLabel": "{type} Ambientes", +"showingAllEnvironments": "Mostrar todos os ambientes {count}", +"unnamedEnvironment": "Ambiente sem nome", +"masterEnvironment": "Ambiente principal", +"viewAuditLogs": "Ver registos de auditoria", +"id": "ID", +"domain": "Domínio", +"master": "Mestre", +"license": "Licença", +"apiCalls": "Chamadas API", +"yes": "Sim", +"no": "Não", +"copyId": "ID de cópia", +"copied": "Copiado!", +"percentUsed": "{percent}% utilizado", +"licenseStatus_checking": "Verificação...", +"licenseStatus_licensed": "Licenciado", +"licenseStatus_unlicensed": "Licença necessária", +"licenseStatus_error": "Configuração necessária", +"licenseStatus_unknown": "Desconhecido", +"detail_environmentNotFound": "Ambiente não encontrado", +"detail_returnToEnvironmentsList": "Voltar à lista de ambientes", +"detail_environmentDetail": "Detalhe do ambiente", +"detail_environmentOverview": "Visão geral do ambiente", +"detail_noDomainSet": "Nenhum domínio definido", +"detail_environmentId": "ID do ambiente", +"detail_licenseStatus": "Estado da licença", +"detail_licenseNeeded": "Licença necessária", +"detail_setupRequired": "Configuração necessária", +"detail_created": "Criado", +"detail_unknown": "Desconhecido", +"detail_licenseDetails": "Detalhes da licença", +"detail_apiCallsRemaining": "Chamadas API restantes", +"detail_totalApiCallsLimit": "Limite total de chamadas API", +"detail_enterpriseEdition": "Edição para empresas", +"detail_active": "Ativo", +"detail_inactive": "Inativo", +"detail_licenseInformation": "Informações sobre a licença", +"detail_calls": "chamadas", +"detail_licenses": "Licenças", +"detail_license": "Licença", +"detail_workspaces": "Espaços de trabalho", +"detail_userGroups": "Grupos de utilizadores", +"detail_type": "Tipo", +"detail_status": "Estado", +"detail_licensed": "Licenciado", +"detail_unlicensed": "Não licenciado", +"detail_apiKey": "Chave API", +"detail_configured": "Configurado", +"detail_notSet": "Não definido", +"detail_masterEnv": "Mestre Env", +"unlicensed_unlicensedDescription": "Este ambiente necessita de uma licença válida para desbloquear todas as suas capacidades e funcionalidades. Certifique-se de que o URL do serviço API está corretamente configurado e que o plug-in está instalado.", +"unlicensed_errorDescription": "Encontrámos um problema ao verificar a licença. Reveja as definições de configuração.", +"unlicensed_defaultDescription": "Este ambiente requer a configuração da licença para prosseguir.", +"unlicensed_contactLowcoderTeam": "Contactar a equipa Lowcoder", +"unlicensed_editEnvironment": "Editar ambiente", +"unlicensed_backToEnvironments": "Voltar a Ambientes", +"unlicensed_helpText": "Precisa de ajuda? Contacte a nossa equipa para obter suporte de licenciamento ou edite a configuração do ambiente para resolver este problema.", +"unlicensed_type": "Tipo", +"unlicensed_status": "Estado", +"unlicensed_masterEnv": "Mestre Env", +"unlicensed_licenseIssue": "Emissão de licença", +"unlicensed_error": "Erro", +"unlicensed_missing": "Em falta", +"error_itemNotFound": "O item que procura não existe ou não tem permissão para o visualizar.", +"modal_createNewEnvironment": "Criar novo ambiente", +"modal_editEnvironment": "Editar ambiente", +"modal_cancel": "Cancel", +"modal_createEnvironment": "Criar ambiente", +"modal_saveChanges": "Guardar alterações", +"modal_environmentName": "Nome do ambiente", +"modal_pleaseEnterName": "Introduzir um nome", +"modal_nameMinLength": "O nome deve ter pelo menos 2 caracteres", +"modal_enterEnvironmentName": "Introduzir o nome do ambiente", +"modal_description": "Descrição", +"modal_enterDescription": "Introduzir descrição", +"modal_stage": "Estágio", +"modal_pleaseSelectStage": "Selecionar uma fase", +"modal_selectStage": "Selecionar a fase", +"modal_development": "Desenvolvimento (DEV)", +"modal_testing": "Testes (TEST)", +"modal_preProduction": "Pré-produção (PREPROD)", +"modal_production": "Produção (PROD)", +"modal_frontendUrl": "URL do Frontend", +"modal_pleaseEnterValidUrl": "Introduzir um URL válido", +"modal_apiServiceUrl": "URL do serviço API", +"modal_nodeServiceUrl": "URL do serviço de nó", +"modal_apiKey": "Chave API", +"modal_enterApiKey": "Introduzir chave API", +"modal_masterEnvironment": "Ambiente principal", +"modal_alreadyMasterEnvironment": "{name} já é o ambiente Master", +"modal_willBeMaster": "Será Mestre", +"modal_currentlyMaster": "Atualmente Mestre", +"modal_configurationRequirements": "Requisitos de configuração", +"modal_configurationRequirementsDesc": "Certifique-se de que o URL do serviço da API está configurado e correto, a chave da API é válida e, para a verificação da licença, certifique-se de que tem a licença e o plug-in corretamente instalados.", +"workspaces_title": "Espaços de trabalho", +"workspaces_subtitle": "Gerir espaços de trabalho neste ambiente", +"workspaces_refresh": "Atualizar", +"workspaces_errorLoadingWorkspaces": "Erro ao carregar espaços de trabalho", +"workspaces_configurationIssue": "Problema de configuração", +"workspaces_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", +"workspaces_totalWorkspaces": "Total de espaços de trabalho", +"workspaces_managedWorkspaces": "Espaços de trabalho geridos", +"workspaces_unmanagedWorkspaces": "Espaços de trabalho não geridos", +"workspaces_workspace": "Espaço de trabalho", +"workspaces_role": "Papel", +"workspaces_status": "Estado", +"workspaces_managed": "Gerido", +"workspaces_unmanaged": "Não gerido", +"workspaces_actions": "Acções", +"workspaces_viewAuditLogs": "Ver registos de auditoria", +"workspaces_audit": "Auditoria", +"workspaces_searchWorkspaces": "Procurar espaços de trabalho por nome ou ID", +"workspaces_showAll": "Mostrar tudo", +"workspaces_managedOnly": "Apenas gerido", +"workspaces_showingResults": "A mostrar ___LOCALIZADOR0___ de ___LOCALIZADOR1___ espaços de trabalho", +"workspaces_paginationTotal": "Espaços de trabalho {start}-{end} de {total}", +"workspaces_noWorkspacesFound": "Não foram encontrados espaços de trabalho neste ambiente", +"userGroups_title": "Grupos de utilizadores", +"userGroups_subtitle": "Gerir grupos de utilizadores neste ambiente", +"userGroups_refresh": "Atualizar", +"userGroups_errorLoadingUserGroups": "Erro ao carregar grupos de utilizadores", +"userGroups_configurationIssue": "Problema de configuração", +"userGroups_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", +"userGroups_totalGroups": "Total de grupos", +"userGroups_allUsersGroups": "Todos os grupos de utilizadores", +"userGroups_developerGroups": "Grupos de programadores", +"userGroups_customGroups": "Grupos personalizados", +"userGroups_userGroup": "Grupo de utilizadores", +"userGroups_type": "Tipo", +"userGroups_allUsers": "Todos os utilizadores", +"userGroups_developers": "Programadores", +"userGroups_custom": "Personalizado", +"userGroups_members": "Membros", +"userGroups_adminMembers": "Membros administradores", +"userGroups_created": "Criado", +"userGroups_totalMembersTooltip": "Número total de membros deste grupo", +"userGroups_adminMembersTooltip": "Número de utilizadores administradores neste grupo", +"userGroups_searchUserGroups": "Procurar grupos de utilizadores por nome ou ID", +"userGroups_showingResults": "Mostrar os grupos de utilizadores ___LOCALIZADOR0___ de ___LOCALIZADOR1___", +"userGroups_paginationTotal": "Grupos de utilizadores {start}-{end} de {total}", +"userGroups_noUserGroupsFound": "Não foram encontrados grupos de utilizadores neste ambiente", +"apps_title": "Aplicações", +"apps_subtitle": "Gerir aplicações do espaço de trabalho", +"apps_refresh": "Atualizar", +"apps_errorLoadingApps": "Erro ao carregar aplicações", +"apps_configurationIssue": "Problema de configuração", +"apps_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", +"apps_totalApps": "Total de aplicações", +"apps_publishedApps": "Aplicativos publicados", +"apps_managedApps": "Aplicações geridas", +"apps_unmanagedApps": "Aplicações não geridas", +"apps_app": "Aplicação", +"apps_status": "Estado", +"apps_published": "Publicado", +"apps_draft": "Projeto", +"apps_managed": "Gerido", +"apps_unmanaged": "Não gerido", +"apps_deploy": "Implantar", +"apps_audit": "Auditoria", +"apps_appMustBeManagedToDeploy": "A aplicação deve ser gerida antes de poder ser implementada", +"apps_deployThisApp": "Implementar esta aplicação noutro ambiente", +"apps_viewAuditLogs": "Ver registos de auditoria", +"apps_searchApps": "Procurar aplicações por nome ou ID", +"apps_showAll": "Mostrar tudo", +"apps_managedOnly": "Apenas gerido", +"apps_showingResults": "Mostrar ___LOCALIZADOR0___ de ___LOCALIZADOR1___ aplicações", +"apps_paginationTotal": "{start}-{end} de {total} aplicações", +"apps_noAppsFound": "Não foram encontradas aplicações neste espaço de trabalho", +"apps_appRecycled": "Esta aplicação foi movida para a reciclagem", +"apps_managedSuccess": "{name} é agora Gerido", +"apps_unmanagedSuccess": "{name} não é agora gerido", +"apps_managedError": "Falha ao alterar o estado gerido de {name}", +"dataSources_title": "Fontes de dados", +"dataSources_subtitle": "Gerir as ligações de dados do espaço de trabalho", +"dataSources_refresh": "Atualizar", +"dataSources_errorLoadingDataSources": "Erro ao carregar fontes de dados", +"dataSources_configurationIssue": "Problema de configuração", +"dataSources_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", +"dataSources_totalDataSources": "Total de fontes de dados", +"dataSources_availableTypes": "Tipos disponíveis", +"dataSources_managed": "Gerido", +"dataSources_unmanaged": "Não gerido", +"dataSources_dataSource": "Fonte de dados", +"dataSources_type": "Tipo", +"dataSources_status": "Estado", +"dataSources_deploy": "Implantar", +"dataSources_audit": "Auditoria", +"dataSources_dataSourceMustBeManagedToDeploy": "A fonte de dados deve ser gerida antes de poder ser implantada", +"dataSources_deployThisDataSource": "Implantar essa fonte de dados em outro ambiente", +"dataSources_viewAuditLogs": "Ver registos de auditoria", +"dataSources_searchDataSources": "Pesquisar fontes de dados por nome ou ID", +"dataSources_showAll": "Mostrar tudo", +"dataSources_managedOnly": "Apenas gerido", +"dataSources_showingResults": "Mostrando {count} de {total} fontes de dados", +"dataSources_paginationTotal": "{start}-{end} de {total} fontes de dados", +"dataSources_noDataSourcesFound": "Não foram encontradas fontes de dados neste espaço de trabalho", +"dataSources_managedSuccess": "{name} é agora Gerido", +"dataSources_unmanagedSuccess": "{name} não é agora gerido", +"dataSources_managedError": "Falha ao alterar o estado gerido de {name}", +"queries_title": "Consultas", +"queries_subtitle": "Gerir as consultas da API do espaço de trabalho", +"queries_refresh": "Atualizar", +"queries_errorLoadingQueries": "Erro ao carregar as consultas", +"queries_configurationIssue": "Problema de configuração", +"queries_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", +"queries_totalQueries": "Total de consultas", +"queries_managed": "Gerido", +"queries_unmanaged": "Não gerido", +"queries_query": "Consulta", +"queries_creator": "Criador", +"queries_status": "Estado", +"queries_deploy": "Implantar", +"queries_audit": "Auditoria", +"queries_queryMustBeManagedToDeploy": "A consulta deve ser gerida antes de poder ser implementada", +"queries_deployThisQuery": "Implantar essa consulta em outro ambiente", +"queries_viewAuditLogs": "Ver registos de auditoria", +"queries_searchQueries": "Consultas de pesquisa por nome ou ID", +"queries_showAll": "Mostrar tudo", +"queries_managedOnly": "Apenas gerido", +"queries_showingResults": "A mostrar ___LOCALIZADOR0___ de ___LOCALIZADOR1___ consultas", +"queries_paginationTotal": "{start}-{end} de {total} consultas", +"queries_noQueriesFound": "Não foram encontradas consultas neste espaço de trabalho", +"queries_managedSuccess": "{name} é agora Gerido", +"queries_unmanagedSuccess": "{name} não é agora gerido", +"queries_managedError": "Falha ao alterar o estado gerido de {name}", +"deployModal_deployTitle": "Implantar {singularLabel}: ___PLACEPLACEHOLDER1___", +"deployModal_loadingEnvironments": "Carregamento de ambientes...", +"deployModal_sourceEnvironment": "Fonte Ambiente", +"deployModal_targetEnvironment": "Ambiente alvo", +"deployModal_selectTargetEnvironment": "Selecionar o ambiente de destino", +"deployModal_selectTargetEnvironmentValidation": "Selecione um ambiente de destino", +"deployModal_confirmed": "Confirmado", +"deployModal_cancel": "Cancel", +"deployModal_deploy": "Implantar", +"deployModal_targetEnvironmentNotFound": "Ambiente de destino não encontrado", +"deployModal_confirmCredentialOverwrite": "Confirme a substituição de credenciais antes de implantar", +"deployModal_deploySuccess": "Implementado com sucesso {name} no ambiente de destino", +"deployModal_deployFailed": "Falha na implantação {singularLabel}", +"deployModal_selectFieldValidation": "Por favor, selecione {label}", +"deployModal_selectFieldPlaceholder": "Selecionar {label}", +"deployModal_inputFieldValidation": "Introduzir {label}", +"deployModal_inputFieldPlaceholder": "Introduzir {label}", +"contactLowcoder_title": "Contactar a equipa Lowcoder", +"contactLowcoder_environmentLabel": "Ambiente:", +"contactLowcoder_environmentIdLabel": "ID do ambiente:", +"contactLowcoder_deploymentIdLabel": "ID de implantação:", +"contactLowcoder_loading": "Carregando...", +"contactLowcoder_notAvailable": "Não disponível", +"contactLowcoder_unnamedEnvironment": "Ambiente sem nome", +"contactLowcoder_fetchingDeploymentInfo": "Obtenção de informações de implantação...", +"contactLowcoder_unableToLoadContactForm": "Não é possível carregar o formulário de contacto", +"contactLowcoder_apiConfigurationError": "URL do serviço API do ambiente ou chave API não configurada", +"contactLowcoder_failedToFetchDeploymentId": "Falha ao obter o ID do desenvolvimento", +"contactLowcoder_ensureProperConfiguration": "Certifique-se de que o ambiente está corretamente configurado para contactar o suporte.", +"credentialConfirmations_firstConfirmation_title": "Aviso de substituição de credenciais", +"credentialConfirmations_firstConfirmation_message": "Esta ação irá substituir as credenciais existentes no ambiente de destino.", +"credentialConfirmations_firstConfirmation_description": "Trata-se de uma operação grave que pode afetar outras aplicações e utilizadores.", +"credentialConfirmations_firstConfirmation_question": "Tens a certeza de que queres continuar?", +"credentialConfirmations_firstConfirmation_continueButton": "Continuar", +"credentialConfirmations_firstConfirmation_cancelButton": "Cancel", +"credentialConfirmations_secondConfirmation_title": "Confirmação final necessária", +"credentialConfirmations_secondConfirmation_message": "Aviso final: Substituição de credenciais", +"credentialConfirmations_secondConfirmation_description": "Está prestes a substituir as credenciais no ambiente de destino. Esta ação não pode ser desfeita e pode quebrar as integrações existentes.", +"credentialConfirmations_secondConfirmation_confirmOnceMore": "Por favor, confirme mais uma vez.", +"credentialConfirmations_secondConfirmation_finalQuestion": "Tem a certeza absoluta de que pretende substituir as credenciais?", +"credentialConfirmations_secondConfirmation_confirmButton": "Sim, Substituir Credenciais", +"credentialConfirmations_secondConfirmation_cancelButton": "Cancel", +"config_singularLabels_app": "Aplicação", +"config_singularLabels_dataSource": "Fonte de dados", +"config_singularLabels_query": "Consulta", +"config_singularLabels_workspace": "Espaço de trabalho", +"config_fields_updateDependenciesIfNeeded": "Atualizar dependências, se necessário", +"config_fields_publishOnTarget": "Publicar no destino", +"config_fields_publicToAll": "Público Para todos", +"config_fields_publicToMarketplace": "Do público para o mercado", +"config_fields_overwriteCredentials": "Substituir credenciais", +"services_environments_missingEnvironmentId": "ID de ambiente em falta", +"services_environments_failedToUpdateEnvironment": "Falha na atualização do ambiente", +"services_environments_environmentCreatedSuccessfully": "Ambiente criado com sucesso", +"services_environments_failedToCreateEnvironment": "Falha ao criar ambiente", +"services_environments_failedToFetchEnvironments": "Falha na busca de ambientes", +"services_environments_failedToFetchEnvironment": "Falha ao buscar o ambiente", +"services_environments_environmentIdRequired": "É necessária uma ID de ambiente", +"services_environments_apiKeyRequiredForWorkspaces": "É necessária uma chave API para obter espaços de trabalho", +"services_environments_apiServiceUrlRequiredForWorkspaces": "O URL do serviço API é necessário para obter espaços de trabalho", +"services_environments_failedToFetchWorkspaces": "Falha na busca de espaços de trabalho", +"services_environments_apiKeyRequiredForUserGroups": "É necessária uma chave API para obter grupos de utilizadores", +"services_environments_apiServiceUrlRequiredForUserGroups": "O URL do serviço API é necessário para ir buscar grupos de utilizadores", +"services_environments_failedToFetchUserGroups": "Falha na procura de grupos de utilizadores", +"services_environments_workspaceIdRequired": "É necessário o ID do espaço de trabalho", +"services_environments_apiKeyRequiredForApps": "É necessária uma chave API para obter aplicações", +"services_environments_apiServiceUrlRequiredForApps": "O URL do serviço API é necessário para ir buscar aplicações", +"services_environments_failedToFetchWorkspaceApps": "Falha ao obter aplicações do espaço de trabalho", +"services_environments_apiKeyRequiredForDataSources": "É necessária uma chave API para obter fontes de dados", +"services_environments_apiServiceUrlRequiredForDataSources": "O URL do serviço API é necessário para ir buscar fontes de dados", +"services_environments_failedToFetchWorkspaceDataSources": "Falha na obtenção de fontes de dados do espaço de trabalho", +"services_environments_apiKeyRequiredForQueries": "É necessária uma chave API para obter consultas", +"services_environments_apiServiceUrlRequiredForQueries": "O URL do serviço API é necessário para obter consultas", +"services_environments_failedToFetchWorkspaceQueries": "Falha ao obter consultas de espaços de trabalho", +"services_environments_apiServiceUrlNotConfigured": "URL do serviço API não configurado", +"services_environments_licenseCheckFailed": "O controlo da carta de condução falhou", +"services_environments_apiKeyRequiredForDeploymentId": "É necessária uma chave API para obter a ID de implantação", +"services_environments_failedToFetchDeploymentId": "Falha ao obter o ID do desenvolvimento", +"services_enterprise_missingEnvironmentId": "ID de ambiente em falta", +"services_enterprise_failedToFetchManagedWorkspaces": "Falha ao obter espaços de trabalho geridos", +"services_enterprise_missingRequiredParamsToConnectOrg": "Faltam os parâmetros necessários para ligar o espaço de trabalho", +"services_enterprise_failedToConnectOrg": "Falha ao ligar o espaço de trabalho", +"services_enterprise_missingOrgGidToUnconnectWorkspace": "GID do espaço de trabalho em falta para desconectar o espaço de trabalho", +"services_enterprise_failedToUnconnectOrg": "Falha ao desconectar o espaço de trabalho", +"services_enterprise_failedToConnectApp": "Falha ao ligar a aplicação", +"services_enterprise_failedToUnconnectApp": "Falha ao desconectar a aplicação", +"services_enterprise_failedToFetchDataSources": "Falha na obtenção de fontes de dados", +"services_enterprise_failedToDeployDataSource": "Falha ao implantar a fonte de dados", +"services_enterprise_failedToDisconnectManagedDataSource": "Falha ao desligar a fonte de dados gerida", +"services_enterprise_environmentIdRequired": "É necessária uma ID de ambiente", +"services_enterprise_failedToFetchQueries": "Falha na pesquisa de consultas", +"services_enterprise_environmentIdAndQueryGidRequired": "São necessários o ID de ambiente e o GID de consulta", +"services_enterprise_failedToDeployQuery": "Falha na implantação da consulta", +"services_enterprise_queryGidRequired": "É necessário o GID de consulta", +"services_enterprise_failedToDisconnectQuery": "Falha ao desligar a consulta", +"services_apps_failedToFetchApps": "Falha na obtenção de aplicações", +"services_apps_failedToDeployApp": "Falha ao implementar a aplicação", +"services_datasources_workspaceIdRequired": "É necessário o ID do espaço de trabalho", +"services_datasources_apiKeyRequiredToFetchDataSources": "É necessária uma chave API para obter fontes de dados", +"services_datasources_apiServiceUrlRequiredToFetchDataSources": "O URL do serviço API é necessário para ir buscar fontes de dados", +"services_datasources_failedToFetchDataSources": "Falha na obtenção de fontes de dados", +"services_datasources_failedToDeployDataSource": "Falha ao implantar a fonte de dados", +"services_workspace_failedToFetchWorkspaces": "Falha na busca de espaços de trabalho", +"services_workspace_failedToDeployWorkspace": "Falha ao implantar o espaço de trabalho", +"services_managedObjects_missingRequiredParameters": "Parâmetros necessários em falta", +"services_managedObjects_failedToCheckManagedStatus": "Falha na verificação do estado gerido", +"services_managedObjects_failedToSetAsManaged": "Falha ao definir {{objType}} como gerido", +"services_managedObjects_failedToRemoveFromManaged": "Falha ao remover {{objType}} do managed", +"services_managedObjects_missingEnvironmentId": "ID de ambiente em falta", +"services_managedObjects_failedToFetchManagedObjects": "Falha na obtenção de objectos geridos", +"services_managedObjects_failedToFetchManagedObject": "Falha ao obter o objeto gerido", +"services_managedObjects_managedObjectNotFound": "Objeto gerido não encontrado para objGid: {{objGid}}", +"services_license_apiServiceUrlRequired": "É necessário o URL do serviço API", +"services_license_licenseInformationUnavailable": "Informações sobre a licença não disponíveis", +"services_license_licenseCheckTookTooLong": "O controlo da carta de condução demorou demasiado tempo", +"services_license_licenseServiceNotAvailable": "Serviço de licença não disponível", +"services_license_authenticationRequired": "Autenticação necessária - verifique a chave da API", +"services_license_licenseServiceTemporarilyUnavailable": "Serviço de licenças temporariamente indisponível", +"services_license_remainingAPICalls": "{{remaining}} restante ({{used}}/{{total}} utilizado, {{percentage}}%)", +}, +"subscription": { + ...en.subscription, + +"details": "Detalhes da subscrição", +"productDetails": "Detalhes do produto", +"productName": "Nome do produto", +"productDescription": "Descrição do produto", +"productPrice": "Preço do produto", +"subscriptionDetails": "Detalhes da subscrição", +"status": "Estado", +"startDate": "Data de início", +"currentPeriodEnd": "Fim do período atual", +"customerId": "ID do cliente", +"subscriptionItems": "Itens de assinatura", +"itemId": "Item ID", +"plan": "Plano", +"quantity": "Quantidade", +"product": "Produto", +"invoices": "Facturas", +"invoiceNumber": "Número da fatura", +"date": "Data", +"amount": "Montante", +"link": "Ligação a", +"viewInvoice": "Ver fatura", +"downloadPDF": "Descarregar PDF", +"billingReason": "Motivo da faturação", +"subscriptionCycle": "Assinatura mensal", +"customer": "Cliente", +"links": "Ligações", +"paid": "Pago", +"unpaid": "Não pago", +"noInvoices": "Não há facturas disponíveis", +"costVolumeDevelopment": "Desenvolvimento de custo/volume", +"noUsageRecords": "Não há registos de utilização disponíveis", +"itemDescription": "Descrição do artigo", +"periodStart": "Início do período", +"periodEnd": "Fim do período", +"billingReason.subscription_cycle": "Ciclo de subscrição", +"billingReason.subscription_create": "Criação de assinaturas", +"billingReason.manual": "Faturação manual", +"billingReason.upcoming": "Próxima faturação", +"billingReason.subscription_threshold": "Limiar de subscrição", +"billingReason.subscription_update": "Atualização da subscrição", +"backToSubscriptions": "Voltar a Assinaturas", +"manageSubscription": "Gerir as suas subscrições", +"subscriptionHelp": "Ajuda da subscrição", +"subscriptionHelpDescription": "Se tiver alguma dúvida, contacte-nos. Teremos todo o gosto em ajudá-lo. service@lowcoder.cloud", +"success": "Sucesso do pagamento e da subscrição", +"successTitle": "Obrigado por se juntar à família Lowcoder!", +"successThankYou": "Estamos muito contentes por o ter a bordo! A sua confiança na Lowcoder significa tudo para nós, e estamos empenhados em proporcionar uma experiência excecional desde o primeiro dia.\n\nNa Lowcoder, não é apenas um cliente, mas faz parte de uma comunidade que impulsiona a inovação e o crescimento. A nossa missão é ajudá-lo a atingir os seus objectivos com facilidade, quer isso signifique resolver desafios rapidamente, criar soluções inovadoras ou estar presente sempre que precisar de apoio.\n\nEis o que pode esperar:\n\n- Suporte de primeira linha: A nossa equipa está pronta para o ajudar em cada passo.\n- Inovação contínua: Estamos sempre a melhorar para lhe oferecer as melhores ferramentas e funcionalidades.\n- Uma parceria para o sucesso: O seu sucesso é a nossa prioridade.\n\nObrigado por nos inspirar a ultrapassar os limites e a procurar a excelência todos os dias. Mal podemos esperar para ver o que vamos construir juntos.\n\nBem-vindo a bordo! Vamos fazer com que coisas extraordinárias aconteçam.", +"successLowcoderTeam": "A equipa Lowcoder", +}, +"subscriptionError": { + ...en.subscriptionError, + +"fetchProductDetails": "Erro ao obter detalhes do produto.", +"fetchSubscriptionDetails": "Erro ao obter detalhes da subscrição.", +"fetchInvoices": "Erro na obtenção de facturas.", +}, +"auditLog": { + ...en.auditLog, + +"title": "Detalhe do registo de auditoria", +"geoLocation": "Localização geográfica", +"browserData": "Metadados do navegador/sistema", +"browser": "Navegador", +"OS": "SO", +"device": "Dispositivo", +"deviceType": "Tipo de dispositivo", +"engine": "Motor", +"webview": "Visualização na Web", +"eventDetail": "Detalhe do evento", +}, +"memberSettings": { + ...en.memberSettings, + +"admin": "Administrador", +"superAdmin": "Superadministrador", +"adminGroupRoleInfo": "O administrador pode gerenciar membros do grupo e recursos", +"adminOrgRoleInfo": "Os administradores possuem todos os recursos e podem gerenciar grupos.", +"member": "Membro", +"memberGroupRoleInfo": "O membro pode visualizar membros do grupo", +"memberOrgRoleInfo": "Os membros só podem usar ou acessar recursos aos quais têm acesso.", +"title": "Membros", +"createGroup": "Criar Grupo", +"newGroupPrefix": "Novo Grupo ", +"allMembers": "Todos os Membros", +"deleteModalTitle": "Excluir Este Grupo", +"deleteModalContent": "O grupo excluído não pode ser restaurado. Você tem certeza de que deseja excluir o grupo?", +"addMember": "Adicionar Membros", +"nameColumn": "Nome do Usuário", +"joinTimeColumn": "Tempo de Entrada", +"actionColumn": "Operação", +"roleColumn": "Função", +"exitGroup": "Sair do Grupo", +"moveOutGroup": "Remover do Grupo", +"inviteUser": "Convidar Membros", +"exitOrg": "Sair", +"exitOrgDesc": "Você tem certeza de que deseja sair deste espaço de trabalho.", +"moveOutOrg": "Remover", +"moveOutOrgDescSaasMode": "Você tem certeza de que deseja remover o usuário {name} deste espaço de trabalho?", +"moveOutOrgDesc": "Você tem certeza de que deseja remover o usuário {name}? Esta ação não pode ser recuperada.", +"devGroupTip": "Os membros do grupo de desenvolvedores têm privilégios para criar aplicativos e fontes de dados.", +"lastAdminQuit": "O último administrador não pode sair.", +"organizationNotExist": "O espaço de trabalho atual não existe", +"inviteUserHelp": "Você pode copiar o link de convite para enviar ao usuário", +"inviteUserLabel": "Link de Convite:", +"inviteCopyLink": "Copiar Link", +"inviteText": "{userName} convida você a ingressar no espaço de trabalho \"{organization}\", clique no link para ingressar: {inviteLink}", +"inviteByEmailHelp": "Pode introduzir um ou mais endereços de correio eletrónico para enviar ligações de convite", +"inviteByEmailLabel": "Introduzir e-mails:", +"inviteByEmailButton": "Enviar convites", +"inviteByEmailSuccess": "Os convites foram enviados com sucesso!", +"inviteByEmailError": "Algo correu mal durante o envio dos convites. Por favor, tente novamente.", +"noValidEmails": "Não foram encontradas mensagens de correio eletrónico válidas", +"groupName": "Nome do Grupo", +"createTime": "Tempo de Criação", +"manageBtn": "Gerenciar", +"userDetail": "Detalhe", +"syncDeleteTip": "Este grupo foi excluído da fonte de catálogo de endereços", +"syncGroupTip": "Este grupo é um grupo de sincronização do catálogo de endereços e não pode ser editado", +}, +"orgSettings": { + ...en.orgSettings, + +"newOrg": "Novo Espaço de Trabalho (Organização)", +"title": "Espaço de Trabalho", +"createOrg": "Criar Espaço de Trabalho (Organização)", +"deleteModalTitle": "Tem certeza de que deseja excluir este espaço de trabalho?", +"deleteModalContent": "Você está prestes a excluir este espaço de trabalho {permanentlyDelete}. Uma vez excluído, o espaço de trabalho {notRestored}.", +"permanentlyDelete": "Permanentemente", +"notRestored": "Não pode ser restaurado", +"deleteModalLabel": "Por favor, digite o nome do espaço de trabalho {name} para confirmar a operação:", +"deleteModalTip": "Por favor, digite o nome do espaço de trabalho", +"deleteModalErr": "O nome do espaço de trabalho está incorreto", +"deleteModalBtn": "Excluir", +"editOrgTitle": "Editar Informações do Espaço de Trabalho", +"orgNameLabel": "Nome do Espaço de Trabalho:", +"orgNameCheckMsg": "O nome do espaço de trabalho não pode estar vazio", +"orgLogo": "Logo do Espaço de Trabalho:", +"logoModify": "Modificar Imagem", +"inviteSuccessMessage": "Junte-se ao Espaço de Trabalho com Sucesso", +"inviteFailMessage": "Falha ao Entrar no Espaço de Trabalho", +"uploadErrorMessage": "Erro ao Carregar", +"orgName": "Nome do Espaço de Trabalho", +}, +"freeLimit": "Teste Gratuito", +"tabbedContainer": { + ...en.tabbedContainer, + +"switchTab": "Alternar Aba", +"switchTabDesc": "Acionado ao Alternar Abas", +"tab": "Abas", +"atLeastOneTabError": "O Contêiner de Abas Deve Manter Pelo Menos Uma Aba", +"selectedTabKeyDesc": "Aba Atualmente Selecionada", +"iconPosition": "Posição do Ícone", +"placement": "Posicionamento das Abas", +"showTabs": "Mostrar Abas", +"gutter": "Espaçamento", +"gutterTooltip": "A distância entre as abas em px", +"tabsCentered": "Abas Centralizadas", +"destroyInactiveTab": "Destruir TabPane inativo", +}, +"formComp": { + ...en.formComp, + +"containerPlaceholder": "Arraste Componentes do Painel à Direita ou", +"openDialogButton": "Gerar um Formulário a partir de uma de suas Fontes de Dados", +"resetAfterSubmit": "Redefinir Após Envio Bem-Sucedido", +"initialData": "Dados Iniciais", +"disableSubmit": "Desativar Envio", +"success": "Formulário Gerado com Sucesso", +"selectCompType": "Selecione o Tipo de Componente", +"dataSource": "Fonte de Dados: ", +"invalidFormMessage": "Mensagem personalizada de formulário inválido", +"selectSource": "Selecionar Fonte", +"table": "Tabela: ", +"selectTable": "Selecionar Tabela", +"columnName": "Nome da Coluna", +"dataType": "Tipo de Dados", +"compType": "Tipo de Componente", +"required": "Obrigatório", +"generateForm": "Gerar Formulário", +"compSelectionError": "Tipo de Coluna Não Configurado", +"compTypeNameError": "Não foi Possível Obter o Nome do Tipo de Componente", +"noDataSourceSelected": "Nenhuma Fonte de Dados Selecionada", +"noTableSelected": "Nenhuma Tabela Selecionada", +"noColumn": "Nenhuma Coluna", +"noColumnSelected": "Nenhuma Coluna Selecionada", +"noDataSourceFound": "Nenhuma Fonte de Dados Suportada Encontrada. Crie uma Nova Fonte de Dados", +"noTableFound": "Nenhuma Tabela Foi Encontrada nesta Fonte de Dados, Por Favor, Selecione Outra Fonte de Dados", +"noColumnFound": "Nenhuma Coluna Suportada Foi Encontrada nesta Tabela. Por Favor, Selecione Outra Tabela", +"formTitle": "Título do Formulário", +"name": "Nome", +"nameTooltip": "O Nome do Atributo nos Dados do Formulário, Quando Deixado em Branco, Padrão para o Nome do Componente", +"notSupportMethod": "Métodos Não Suportados: ", +"notValidForm": "O Formulário Não é Válido", +"resetDesc": "Redefinir Dados do Formulário para o Valor Padrão", +"clearDesc": "Limpar Dados do Formulário", +"setDataDesc": "Definir Dados do Formulário", +"valuesLengthError": "Erro no Número de Parâmetros", +"valueTypeError": "Erro no Tipo de Parâmetro", +"dataDesc": "Dados Atuais do Formulário", +"loadingDesc": "O Formulário Está Carregando?", +}, +"modalComp": { + ...en.modalComp, + +"open": "Aberto", +"openDesc": "Acionado quando a caixa de diálogo modal é aberta", +"close": "Fechar", +"closeDesc": "Acionado Quando a Caixa de Diálogo Modal é Fechada", +"openModalDesc": "Abrir a Caixa de Diálogo", +"closeModalDesc": "Fechar a Caixa de Diálogo", +"visibleDesc": "Está Visível? Se Verdadeiro, a Caixa de Diálogo Atual Será Exibida", +"title": "Título da gaveta", +"titleAlign": "Alinhamento do título", +"modalHeight": "Altura da Modal", +"modalHeightTooltip": "Pixels, Exemplo: 222", +"modalWidth": "Largura da Modal", +"modalWidthTooltip": "Número ou Porcentagem, Exemplo: 520, 60%", +}, +"listView": { + ...en.listView, + +"noOfRows": "Contagem de Linhas", +"noOfRowsTooltip": "Número de Linhas na Lista - Normalmente Configurado para uma Variável (por exemplo, '{{query1.data.length}}') para Apresentar Resultados da Consulta", +"noOfColumns": "Contagem de Colunas", +"itemIndexName": "Nome do Índice do Item de Dados", +"itemIndexNameDesc": "O Nome da Variável Referente ao Índice do Item, Padrão como {default}", +"itemDataName": "Nome do Objeto de Dados do Item", +"itemDataNameDesc": "O Nome da Variável Referente ao Objeto de Dados do Item, Padrão como {default}", +"itemsDesc": "Expondo Dados dos Componentes na Lista", +"dataDesc": "Os Dados JSON Usados na Lista Atual", +"dataTooltip": "Se Você Apenas Definir um Número, Este Campo Será Considerado como Contagem de Linhas, e os Dados Serão Considerados como Vazios.", +"enableSorting": "Permitir a ordenação", +}, +"navigation": { + ...en.navigation, + +"addText": "Adicionar Item de Submenu", +"logoURL": "URL do Logotipo da Navegação", +"horizontalAlignment": "Alinhamento Horizontal", +"logoURLDesc": "Você pode exibir um Logotipo no lado esquerdo inserindo um Valor de URI ou String Base64 como data:image/png;base64,AAA... CCC", +"itemsDesc": "Itens do Menu de Navegação Hierárquica", +}, +"droppadbleMenuItem": { + ...en.droppadbleMenuItem, + +"subMenu": "Submenu {número}", +}, +"navItemComp": { + ...en.navItemComp, + +"active": "Ativo", +}, +"iframe": { + ...en.iframe, + +"URLDesc": "O URL de Origem para o Conteúdo do IFrame. Certifique-se de que o URL é HTTPS ou localhost. Além disso, certifique-se de que o URL não está bloqueado pela Política de Segurança de Conteúdo (CSP) do navegador. O cabeçalho 'X-Frame-Options' não deve ser definido como 'DENY' ou 'SAMEORIGIN'.", +"allowDownload": "Permitir Downloads", +"allowSubmitForm": "Permitir Envio de Formulário", +"allowMicrophone": "Permitir Microfone", +"allowCamera": "Permitir Câmera", +"allowPopup": "Permitir Pop-ups", +}, +"switchComp": { + ...en.switchComp, + +"defaultValue": "Valor Booleano Padrão", +"open": "Ligado", +"close": "Desligado", +"openDesc": "Acionado Quando o Interruptor é Ligado", +"closeDesc": "Acionado Quando o Interruptor é Desligado", +"valueDesc": "Status Atual do Interruptor", +}, +"signature": { + ...en.signature, + +"tips": "Texto de Dica", +"signHere": "Assine Aqui", +"showUndo": "Mostrar Desfazer", +"showClear": "Mostrar Limpar", +}, +"localStorageComp": { + ...en.localStorageComp, + +"valueDesc": "Todos os Itens de Dados Armazenados Atualmente", +"setItemDesc": "Adicionar um Item", +"removeItemDesc": "Remover um Item", +"clearItemDesc": "Limpar Todos os Itens", +}, +"utilsComp": { + ...en.utilsComp, + +"openUrl": "Abrir URL", +"openApp": "Abrir Aplicativo", +"copyToClipboard": "Copiar para a Área de Transferência", +"downloadFile": "Baixar Arquivo", +"logoutUser": "Terminar sessão do utilizador", +"resetPassword": "Redefinir a palavra-passe", +}, +"messageComp": { + ...en.messageComp, + +"info": "Enviar uma Notificação", +"loading": "Enviar uma Notificação de Carregamento", +"success": "Enviar uma Notificação de Sucesso", +"warn": "Enviar uma Notificação de Aviso", +"error": "Enviar uma Notificação de Erro", +}, +"toastComp": { + ...en.toastComp, + +"destroy": "Fechar uma Notificação", +"info": "Enviar uma Notificação", +"loading": "Enviar uma Notificação de Carregamento", +"success": "Enviar uma Notificação de Sucesso", +"warn": "Enviar uma Notificação de Aviso", +"error": "Enviar uma Notificação de Erro", +}, +"themeComp": { + ...en.themeComp, + +"switchTo": "Alterar Tema", +}, +"transformer": { + ...en.transformer, + +"preview": "Pré-Visualização", +"docLink": "Saiba Mais Sobre Transformadores...", +"previewSuccess": "Pré-Visualização Bem-Sucedida", +"previewFail": "Falha na Pré-Visualização", +"deleteMessage": "Transformador Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", +"documentationText": "Os transformadores são projetados para transformação de dados e reutilização do seu código JavaScript multi-linha. Use transformadores para adaptar dados de consultas ou componentes às necessidades de seu aplicativo local. Ao contrário da consulta JavaScript, o transformador é projetado para realizar operações somente de leitura, o que significa que você não pode acionar uma consulta ou atualizar um estado temporário dentro de um transformador.", +}, +"temporaryState": { + ...en.temporaryState, + +"value": "Valor Inicial", +"valueTooltip": "O Valor Inicial Armazenado no Estado Temporário Pode Ser Qualquer Valor JSON Válido.", +"docLink": "Saiba Mais Sobre Estados Temporários...", +"pathTypeError": "O Caminho Deve Ser uma String ou um Array de Valores", +"unStructuredError": "Dados Não Estruturados {prev} Não Podem Ser Atualizados por {path}", +"valueDesc": "Valor do Estado Temporário", +"deleteMessage": "O Estado Temporário Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", +"documentationText": "Os estados temporários são um recurso poderoso usado para gerenciar variáveis complexas que atualizam dinamicamente o estado dos componentes em seu aplicativo. Esses estados funcionam como armazenamento intermediário ou transitório para dados que podem mudar ao longo do tempo devido a interações do usuário ou outros processos.", +}, +"dataResponder": { + ...en.dataResponder, + +"data": "Dados", +"dataDesc": "Dados do Data Responder Atual", +"dataTooltip": "Quando Estes Dados São Alterados, Irão Acionar Ações Subsequentes.", +"docLink": "Saiba Mais Sobre os Data Responders...", +"deleteMessage": "O Data Responder Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", +"documentationText": "Ao desenvolver um aplicativo, você pode atribuir eventos a componentes para monitorar alterações em dados específicos. Por exemplo, um componente de Tabela pode ter eventos como \"Alteração de seleção de linha\", \"Alteração de filtro\", \"Alteração de ordenação\" e \"Alteração de página\" para rastrear alterações na propriedade selectedRow. No entanto, para alterações em estados temporários, transformadores ou resultados de consulta, onde eventos padrão não estão disponíveis, os Data Responders são utilizados. Eles permitem detectar e reagir a quaisquer modificações de dados.", +}, +"theme": { + ...en.theme, + +"title": "Temas", +"createTheme": "Criar Tema", +"themeName": "Nome do Tema:", +"themeNamePlaceholder": "Por favor, insira um nome para o tema", +"defaultThemeTip": "Tema Padrão:", +"createdThemeTip": "O Tema Que Você Criou:", +"option": "Opção {index}", +"input": "Entrada", +"confirm": "Ok", +"emptyTheme": "Nenhum Tema Disponível", +"click": "", +"toCreate": "", +"nameColumn": "Nome", +"defaultTip": "Padrão", +"updateTimeColumn": "Tempo de Atualização", +"edit": "Editar", +"cancelDefaultTheme": "Cancelar Tema Padrão", +"setDefaultTheme": "Definir como Tema Padrão", +"copyTheme": "Duplicar Tema", +"setSuccessMsg": "Configuração Bem-Sucedida", +"cancelSuccessMsg": "Cancelamento Bem-Sucedido", +"deleteSuccessMsg": "Exclusão Bem-Sucedida", +"checkDuplicateNames": "O Nome do Tema Já Existe, Por Favor, Reinsira-o", +"copySuffix": " Cópia", +"saveSuccessMsg": "Salvo com Sucesso", +"leaveTipTitle": "Dicas", +"leaveTipContent": "Você Ainda Não Salvou, Confirmar Saída?", +"leaveTipOkText": "Sair", +"goList": "Voltar para a Lista", +"saveBtn": "Salvar", +"mainColor": "Cores Principais", +"text": "Cores do Texto", +"layout": "Configurações de layout", +"fonts": "Definições do tipo de letra", +"components": "Modelos de componentes", +"charts": "Definição de eCharts", +"defaultTheme": "Padrão", +"yellow": "Amarelo", +"green": "Verde", +"previewTitle": "Pré-Visualização do Tema\nExemplo de Componentes que Utilizam as Cores do Seu Tema", +"dateColumn": "Data", +"emailColumn": "Correio eletrónico", +"phoneColumn": "Telefone", +"subTitle": "Título", +"linkLabel": "Ligação a", +"linkUrl": "app.lowcoder.cloud", +"progressLabel": "Progresso", +"sliderLabel": "Controle Deslizante", +"radioLabel": "Botão de Opção", +"checkboxLabel": "Caixa de Seleção", +"buttonLabel": "Botão de Formulário", +"switch": "Interruptor", +"previewDate": "16/10/2022", +"previewEmail1": "ted.com", +"previewEmail2": "skype.com", +"previewEmail3": "imgur.com", +"previewEmail4": "balão.com", +"previewPhone1": "+63-317-333-0093", +"previewPhone2": "+30-668-580-6521", +"previewPhone3": "+86-369-925-2071", +"previewPhone4": "+7-883-227-8093", +"chartPreviewTitle": "Pré-Visualização do Estilo do Gráfico", +"chartSpending": "Gastos", +"chartBudget": "Orçamento", +"chartAdmin": "Administração", +"chartFinance": "Finanças", +"chartSales": "Vendas", +"chartFunnel": "Gráfico de Funil", +"chartShow": "Mostrar", +"chartClick": "Clique", +"chartVisit": "Visita", +"chartQuery": "Consulta", +"chartBuy": "Comprar", +"canvas": "Definições do ecrã", +}, +"themeDetail": { + ...en.themeDetail, + +"primary": "Cor da Marca", +"primaryDesc": "Cor primária padrão usada pela maioria dos componentes", +"textDark": "Cor do Texto Escuro", +"textDarkDesc": "Usado quando a cor de fundo é clara", +"textLight": "Cor do Texto Claro", +"textLightDesc": "Usado quando a cor de fundo é escura", +"canvas": "Cor do Fundo", +"canvasDesc": "Cor de fundo padrão do aplicativo", +"primarySurface": "Cor do Contêiner", +"primarySurfaceDesc": "Cor de fundo padrão para componentes como tabelas", +"borders": "Estilos de fronteira", +"spacing": "Estilos de espaçamento", +"font": "Estilos de letra", +"fonts": "Fontes", +"borderRadius": "Raio da Borda", +"borderRadiusDesc": "Raio da borda padrão usado pela maioria dos componentes", +"borderColor": "Cor da fronteira", +"borderColorDesc": "Cor do contorno predefinida utilizada pela maioria dos componentes", +"borderWidth": "Largura da margem", +"borderWidthDesc": "Largura do limite predefinida utilizada pela maioria dos componentes", +"borderStyle": "Estilo de fronteira", +"borderStyleDesc": "Estilo de contorno predefinido utilizado pela maioria dos componentes", +"fontFamily": "Família de letras", +"fontFamilyDesc": "Família de tipos de letra predefinida utilizada pela maioria dos componentes", +"chart": "Estilo do Gráfico", +"chartDesc": "Entrada para Echarts", +"echartsJson": "Tema JSON", +"margin": "Margem", +"marginDesc": "Margem padrão normalmente usada para a maioria dos componentes", +"padding": "Preenchimento", +"paddingDesc": "Preenchimento padrão normalmente usado para a maioria dos componentes", +"containerHeaderPadding": "Preenchimento do Cabeçalho", +"containerheaderpaddingDesc": "Preenchimento padrão do cabeçalho normalmente usado para a maioria dos componentes", +"gridColumns": "Colunas da Grade", +"gridColumnsDesc": "Número padrão de colunas normalmente usado para a maioria dos contêineres", +"loadingIndicators": "Indicadores de carga", +"showComponentLoadingIndicators": "Mostrar indicadores de carregamento quando o componente é carregado", +"showDataLoadingIndicators": "Mostrar indicadores de carregamento durante o carregamento dos dados", +"dataLoadingIndicator": "Indicador de carregamento de dados", +"background": "Estilos de fundo", +"gridSettings": "Definições da grelha", +"gridRowHeight": "Altura da linha da grelha", +"gridRowHeightDesc": "Altura de cada linha na grelha", +"gridRowCount": "Contagem de linhas da grelha", +"gridRowCountDesc": "Número máximo de linhas na grelha", +"gridPaddingX": "Preenchimento horizontal", +"gridPaddingXDesc": "Preenchimento horizontal da tela", +"gridPaddingY": "Acolchoamento vertical", +"gridPaddingYDesc": "Preenchimento vertical da tela", +"gridBgImage": "Imagem de fundo", +"gridBgImageDesc": "Imagem de fundo do ecrã", +"gridBgImageRepeat": "Repetição da imagem de fundo", +"gridBgImageRepeatDesc": "Repetição da imagem de fundo do ecrã", +"gridBgImageSize": "Tamanho da imagem de fundo", +"gridBgImageSizeDesc": "Tamanho da imagem de fundo do ecrã", +"gridBgImagePosition": "Posição da imagem de fundo", +"gridBgImagePositionDesc": "Posição da imagem de fundo do ecrã", +"gridBgImageOrigin": "Origem da imagem de fundo", +"gridBgImageOriginDesc": "Origem da imagem de fundo do ecrã", +}, +"pluginSetting": { + ...en.pluginSetting, + +"title": "Plugins", +"npmPluginTitle": "Plugins do npm", +"npmPluginDesc": "Configure os plugins do npm para todas as aplicações no espaço de trabalho atual.", +"npmPluginEmpty": "Nenhum plugin do npm foi adicionado.", +"npmPluginAddButton": "Adicionar um plugin do npm", +"saveSuccess": "Salvo com sucesso", +}, +"advanced": { + ...en.advanced, + +"title": "Avançado", +"defaultHomeTitle": "Página Inicial Padrão", +"defaultHomeHelp": "A Página Inicial é a aplicação que todos os não desenvolvedores verão por padrão quando fizerem login. Observação: certifique-se de que a aplicação selecionada seja acessível aos não desenvolvedores.", +"defaultHomePlaceholder": "Selecione a Página Inicial Padrão", +"saveBtn": "Salvar", +"preloadJSTitle": "Pré-carregar JavaScript", +"preloadJSHelp": "Configure código JavaScript pré-carregado para todas as aplicações no espaço de trabalho atual.", +"preloadCSSTitle": "Pré-carregar CSS", +"preloadCSSHelp": "Configure código CSS pré-carregado para todas as aplicações no espaço de trabalho atual.", +"preloadCSSApply": "Aplicar à Página Inicial do Espaço de Trabalho", +"preloadLibsTitle": "Biblioteca JavaScript", +"preloadLibsHelp": "Configure bibliotecas JavaScript pré-carregadas para todas as aplicações no espaço de trabalho atual. O sistema possui lodash, day.js, uuid, numbro integrados para uso direto. As bibliotecas JavaScript são carregadas antes que a aplicação seja inicializada, portanto, há um certo impacto no desempenho da aplicação.", +"preloadLibsEmpty": "Nenhuma biblioteca JavaScript foi adicionada", +"preloadLibsAddBtn": "Adicionar uma biblioteca", +"saveSuccess": "Salvo com sucesso", +"AuthOrgTitle": "Tela de Boas-Vindas do Espaço de Trabalho", +"AuthOrgDescrition": "A URL para os seus usuários entrarem no espaço de trabalho atual.", +"APIConsumption": "Consumo de API", +"APIConsumptionDescription": "Aqui você pode ver o consumo de API para todas as aplicações no espaço de trabalho atual.", +"overallAPIConsumption": "Consumo geral de API neste espaço de trabalho até o momento", +"lastMonthAPIConsumption": "Consumo de API do último mês, neste espaço de trabalho", +"npmRegistryTitle": "Registo NPM personalizado", +"npmRegistryHelp": "Configurar um registo NPM personalizado para permitir a obtenção de plugins a partir de um registo NPM privado.", +"showHeaderInPublicApps": "Mostrar cabeçalho em exibição pública", +"showHeaderInPublicAppsHelp": "Defina a visibilidade do cabeçalho em exibição pública para todos os aplicativos", +}, +"branding": { + ...en.branding, + +"title": "Configurações de Marca", +"general": "Definições gerais", +"selectWorkspace": "Selecionar espaço de trabalho", +"brandingName": "Nome da marca", +"brandingNamePlaceholder": "Introduzir o nome da marca", +"brandingDescription": "Descrição da marca", +"brandingDescriptionPlaceholder": "Introduzir a descrição da marca", +"logoSection": "Logotipos", +"logo": "Logotipo", +"logoHelp": "Envie o logotipo da sua empresa em formato SVG ou PNG.", +"logoUrlHelp": "Forneça o URL de uma imagem válida para o logótipo.", +"logoUrlPlaceholder": "URL da imagem do fornecedor para o logótipo", +"squareLogo": "Logotipo Quadrado", +"squareLogoHelp": "Envie uma versão quadrada do seu logotipo em formato SVG ou PNG.", +"squareLogoUrlHelp": "Forneça o URL de uma imagem válida para o logótipo quadrado.", +"squareLogoUrlPlaceholder": "Fornecer url para o logótipo quadrado.", +"colorFontSection": "Cores e Fontes", +"mainBrandingColor": "Cor Principal da Marca", +"mainBrandingColorHelp": "Selecione a cor principal para a sua marca.", +"editorHeaderColor": "Cor do Cabeçalho do Editor", +"editorHeaderColorHelp": "Selecione a cor do cabeçalho do editor.", +"adminSidebarColor": "Cor da Barra Lateral do Administrador", +"adminSidebarColorHelp": "Selecione a cor da barra lateral do administrador.", +"adminSidebarFontColor": "Cor do tipo de letra da barra lateral do administrador", +"adminSidebarFontColorHelp": "Escolha a cor do tipo de letra para a barra lateral do administrador.", +"adminSidebarActiveBgColor": "Cor do fundo do item selecionado na barra lateral do administrador", +"adminSidebarActiveBgColorHelp": "Escolha a cor de fundo do item selecionado para a barra lateral do administrador.", +"adminSidebarActiveFontColor": "Cor do tipo de letra do item selecionado da barra lateral do administrador", +"adminSidebarActiveFontColorHelp": "Escolha a cor da fonte do item selecionado para a barra lateral do administrador.", +"editorSidebarColor": "Cor da Barra Lateral do Editor", +"editorSidebarColorHelp": "Selecione a cor da barra lateral do editor.", +"editorSidebarFontColor": "Cor do tipo de letra da barra lateral do editor", +"editorSidebarFontColorHelp": "Escolha a cor do tipo de letra para a barra lateral do editor.", +"editorSidebarActiveBgColor": "Cor de fundo do item selecionado na barra lateral do editor", +"editorSidebarActiveBgColorHelp": "Escolha a cor de fundo do item selecionado para a barra lateral do editor.", +"editorSidebarActiveFontColor": "Cor do tipo de letra do item selecionado da barra lateral do editor", +"editorSidebarActiveFontColorHelp": "Escolha a cor do tipo de letra do item selecionado para a barra lateral do editor.", +"font": "Fonte", +"fontHelp": "Selecione uma fonte do Google Fonts para o seu aplicativo.", +"textSection": "Textos e Páginas", +"errorPage": "Texto da Página de Erro", +"errorPageHelp": "Insira o texto exibido na página de erro.", +"signUpPage": "Texto da Página de Cadastro", +"signUpPageHelp": "Insira o texto exibido na página de cadastro.", +"loggedOutPage": "Texto da Página de Logout", +"loggedOutPageHelp": "Insira o texto exibido na página de logout.", +"standardDescription": "Descrição Padrão", +"standardDescriptionHelp": "Insira a descrição padrão para as informações meta de SEO.", +"standardTitle": "Título Padrão", +"standardTitleHelp": "Insira o título padrão para as informações meta de SEO.", +"showDocumentation": "Exibir Documentação", +"submitIssue": "Permitir Enviar Problema", +"whatsNew": "Ativar \"Novidades\"", +"saveButton": "Salvar Configurações", +"errorPageImage": "Envie uma imagem para a página de erro no formato SVG ou PNG.", +"errorPageImageUrl": "URL da imagem para a página de erro", +"errorPageImageUrlPlaceholder": "URL da imagem do fornecedor para a página de erro", +"errorPageImageUrlHelp": "Fornecer um url de imagem válido para mostrar na página de erro.", +"signUpPageImage": "Envie uma imagem para a página de cadastro no formato SVG ou PNG.", +"signUpPageImageUrl": "URL da imagem para a página de registo", +"signUpPageImageUrlPlaceholder": "URL da imagem do fornecedor para a página de registo", +"signUpPageImageUrlHelp": "Fornecer um url de imagem válido para mostrar na página de registo.", +"loggedOutPageImage": "Envie uma imagem para a página de saída no formato SVG ou PNG.", +"showDocumentationSection": "Definições da ligação de documentação", +"showWhatsNewSection": "O que há de novo Definições de ligação", +"documentationLink": "Link da documentação", +"documentationLinkPlaceholder": "Insira o URL da sua documentação...", +"documentationLinkHelp": "Forneça um URL válido que os usuários possam visitar para acessar a documentação.", +"whatsNewSection": "Configurações de documentação", +"whatsNewLink": "Link da documentação", +"whatsNewLinkPlaceholder": "Insira o URL da sua documentação...", +"whatsNewLinkHelp": "Forneça um URL válido que os usuários possam visitar para acessar as novidades.", +"deleteBranding": "Eliminar a marca", +"deleteBrandingContent": "Tem a certeza de que pretende apagar a marca \"{orgName}\"?", +"fetchBrandingError": "Algo correu mal durante a obtenção dos detalhes da marca. Por favor, tente novamente.", +"upload": "Carregar", +}, +"networkMessage": { + ...en.networkMessage, + +"0": "Falha ao Conectar ao Servidor, Por Favor, Verifique Sua Conexão de Rede", +"200": "Sucesso", +"201": "Criado", +"204": "Sem Conteúdo", +"400": "Solicitação Inválida", +"401": "Autenticação Falhou, Por Favor, Faça Login Novamente", +"403": "Sem Permissão, Por Favor, Contate o Administrador para Autorização", +"404": "Não Encontrado", +"500": "Serviço Ocupado, Por Favor, Tente Novamente Mais Tarde", +"timeout": "Tempo Limite da Solicitação", +}, +"share": { + ...en.share, + +"title": "Compartilhar", +"viewer": "Visualizador", +"editor": "Editor", +"owner": "Proprietário", +"datasourceViewer": "Pode Usar", +"datasourceOwner": "Pode Gerenciar", +}, +"debug": { + ...en.debug, + +"title": "Título", +"switch": "Alternar Componente: ", +}, +"module": { + ...en.module, + +"folderNotEmpty": "A pasta não está vazia", +"emptyText": "Sem Dados", +"docLink": "Saiba Mais Sobre Módulos...", +"documentationText": "Módulos são Aplicações completas, que podem ser incluídas e repetidas em outras Aplicações e funcionam como um único componente. Como os módulos podem ser incorporados, eles precisam ser capazes de interagir com suas aplicações ou sites externos. Essas quatro configurações ajudam a suportar a comunicação com um Módulo.", +"circularReference": "Referência Circular, o Módulo/Aplicação Atual Não Pode Ser Usado!", +"emptyTestInput": "O Módulo Atual Não Tem Entrada para Testar", +"emptyTestMethod": "O Módulo Atual Não Possui Método para Testar", +"name": "Nome", +"input": "Entrada", +"params": "Parâmetros", +"emptyParams": "Nenhum Parâmetro Foi Adicionado", +"emptyInput": "Nenhuma Entrada Foi Adicionada", +"emptyMethod": "Nenhum Método Foi Adicionado", +"emptyOutput": "Nenhuma Saída Foi Adicionada", +"data": "Dados", +"string": "Texto", +"number": "Número", +"array": "Arranjo", +"boolean": "Booleano", +"query": "Consulta", +"autoScaleCompHeight": "A Altura do Componente se Ajusta ao Contêiner", +"excuteMethod": "Executar Método {name}", +"method": "Método", +"action": "Ação", +"output": "Saída", +"nameExists": "O Nome {name} Já Existe", +"eventTriggered": "Evento {name} Acionado", +"globalPromptWhenEventTriggered": "Exibe um Alerta Global Quando um Evento é Acionado", +"emptyEventTest": "O Módulo Atual Não Possui Eventos para Testar", +"emptyEvent": "Nenhum Evento Foi Adicionado", +"event": "Evento", +}, +"resultPanel": { + ...en.resultPanel, + +"returnFunction": "O Valor de Retorno é uma Função.", +"consume": "___SERVIDOR DE LUGAR0___", +"JSON": "Mostrar JSON", +}, +"createAppButton": { + ...en.createAppButton, + +"creating": "Criando...", +"created": "Criar {name}", +}, +"apiMessage": { + ...en.apiMessage, + +"authenticationFail": "Falha na Autenticação do Usuário, Por Favor Faça Login Novamente", +"verifyAccount": "Necessário Verificar a Conta", +"functionNotSupported": "A Versão Atual Não Suporta Esta Função. Por Favor, Entre em Contato com a Equipe de Negócios da Lowcoder para Atualizar sua Conta", +}, +"globalErrorMessage": { + ...en.globalErrorMessage, + +"createCompFail": "Falha ao Criar o Componente {comp}", +"notHandledError": "Erro Não Tratado no Método {method}", +}, +"aggregation": { + ...en.aggregation, + +"navLayout": "Barra de Navegação", +"chooseApp": "Escolher Aplicativo", +"iconTooltip": "Suporta Link de Imagem src ou String Base64 como data:image/png;base64,AAA... CCC", +"hideWhenNoPermission": "Oculto para Usuários Não Autorizados", +"queryParam": "Parâmetros de Consulta da URL", +"hashParam": "Parâmetros de Hash da URL", +"tabBar": "Barra de Abas", +"emptyTabTooltip": "Configure Esta Página no Painel Direito", +}, +"appSetting": { + ...en.appSetting, + +"450": "450px (Celular)", +"800": "800px (Tablet)", +"1440": "1440px (Notebook)", +"1920": "1920px (Tela Larga)", +"3200": "3200px (Tela Super Grande)", +"title": "Configurações Gerais do Aplicativo", +"autofill": "Preenchimento Automático", +"userDefined": "Personalizado", +"default": "Padrão", +"tooltip": "Fechar a Popover Após Configuração", +"canvasMaxWidth": "Largura Máxima do Canvas para Este Aplicativo", +"userDefinedMaxWidth": "Largura Máxima Personalizada", +"inputUserDefinedPxValue": "Por Favor, Insira um Valor Personalizado em Pixels", +"maxWidthTip": "A Largura Máxima Deve Ser Maior ou Igual a 350", +"themeSetting": "Tema de Estilo Aplicado", +"themeSettingDefault": "Padrão", +"themeCreate": "Criar Tema", +"appTitle": "Título", +"appDescription": "Descrição", +"appCategory": "Categoria", +"showPublicHeader": "Mostrar cabeçalho na visualização pública", +"canvas": "Definições do ecrã", +"gridColumns": "Colunas da grelha", +"gridRowHeight": "Altura da linha da grelha", +"gridRowCount": "Contagem de linhas da grelha", +"gridPaddingX": "Preenchimento horizontal da tela", +"gridPaddingY": "Preenchimento vertical da tela", +"gridBgImage": "Imagem de fundo", +"gridBgImageRepeat": "Repetição da imagem de fundo", +"gridBgImageSize": "Tamanho da imagem de fundo", +"gridBgImagePosition": "Posição da imagem de fundo", +"gridBgImageOrigin": "Origem da imagem de fundo", +}, +"customShortcut": { + ...en.customShortcut, + +"title": "Atalhos Personalizados", +"shortcut": "Atalho", +"action": "Ação", +"empty": "Nenhum Atalho", +"placeholder": "Pressione Atalho", +"otherPlatform": "Outro", +"space": "Espaço", +}, +"profile": { + ...en.profile, + +"orgSettings": "Configurações do Espaço de Trabalho", +"switchOrg": "Trocar Espaço de Trabalho", +"joinedOrg": "Meus Espaços de Trabalho", +"createOrg": "Criar Espaço de Trabalho", +"logout": "Sair", +"personalInfo": "Meu Perfil", +"bindingSuccess": "Vínculo {sourceName} Bem-Sucedido", +"uploadError": "Erro ao Fazer Upload", +"editProfilePicture": "Modificar", +"saveUserNameTooltip": "Pressione Enter para Salvar seu Novo NicName. Se você ver seu E-mail, significa que acabamos de assumi-lo como Nome de Usuário e você pode alterá-lo para um melhor. Seu E-mail como nome de usuário técnico permanece intocado.", +"changeAvatarTooltip": "Você Pode Fazer Upload de Arquivos PNG ou JPG", +"nameCheck": "O Nome Não Pode Estar Vazio", +"name": "Nome: ", +"namePlaceholder": "Por Favor, Insira Seu Nome", +"toBind": "Para Vincular", +"binding": "Está Vinculando", +"bindError": "Erro de Parâmetro, Vinculação Atualmente Não Suportada.", +"bindName": "Vincular {name}", +"loginAfterBind": "Após a Vinculação, Você Pode Usar {name} para Fazer Login", +"bindEmail": "Vincular E-mail:", +"email": "E-mail", +"emailCheck": "Por Favor, Insira um E-mail Válido", +"emailPlaceholder": "Por Favor, Insira Seu E-mail", +"submit": "Enviar", +"bindEmailSuccess": "Vinculação de E-mail Bem-Sucedida", +"passwordModifiedSuccess": "Senha Alterada com Sucesso", +"passwordSetSuccess": "Senha Definida com Sucesso", +"oldPassword": "Senha Antiga:", +"inputCurrentPassword": "Por Favor, Insira Sua Senha Atual", +"newPassword": "Nova Senha:", +"inputNewPassword": "Por Favor, Insira Sua Nova Senha", +"confirmNewPassword": "Confirmar Nova Senha:", +"inputNewPasswordAgain": "Por Favor, Insira Sua Nova Senha Novamente", +"password": "Senha:", +"modifyPassword": "Alterar Senha", +"setPassword": "Definir Senha", +"alreadySetPassword": "Senha Definida", +"setPassPlaceholder": "Você Pode Fazer Login com Senha", +"setPassAfterBind": "Você Pode Definir a Senha Após Vincular a Conta", +"socialConnections": "Conexões Sociais", +"changeAvatar": "Alterar Avatar", +"about": "Sobre", +"userId": "ID do Usuário", +"createdAt": "Criado Em", +"currentOrg": "Organização Atual", +"settings": "Configurações", +"uiLanguage": "Idioma da Interface do Usuário", +"info": "Informações", +"createdApps": "Seus Aplicativos Criados", +"createdModules": "Seus Módulos Criados", +"sharedApps": "Aplicativos Compartilhados com Você", +"sharedModules": "Módulos Compartilhados com Você", +"onMarketplace": "No Marketplace", +"howToPublish": "Como Publicar no Marketplace", +"memberOfOrgs": "Membro dos Espaços de Trabalho", +"apiKeys": "Chaves de API", +"createApiKey": "Criar Chave de API", +"apiKeyInfo": "Certifique-se de que copia a sua nova chave API agora. Não a poderá voltar a ver.", +"apiKeyName": "Nome", +"apiKeyDescription": "Descrição", +"apiKeyCopy": "Clique na Chave de API para obter o valor no seu clipboard", +"apiKey": "Chave de API", +"deleteApiKey": "Excluir Chave de API", +"deleteApiKeyContent": "Tem certeza de que deseja excluir esta chave de API?", +"deleteApiKeyError": "Algo deu errado. Por favor, tente novamente.", +}, +"shortcut": { + ...en.shortcut, + +"shortcutList": "Atalhos do Teclado", +"click": "Clique", +"global": "Mundial", +"toggleShortcutList": "Alternar Atalhos do Teclado", +"editor": "Editor", +"toggleLeftPanel": "Alternar Painel Esquerdo", +"toggleBottomPanel": "Alternar Painel Inferior", +"toggleRightPanel": "Alternar Painel Direito", +"toggleAllPanels": "Alternar Todos os Painéis", +"preview": "Visualizar", +"undo": "Desfazer", +"redo": "Refazer", +"showGrid": "Mostrar Grade", +"component": "Componente", +"multiSelect": "Selecionar Múltiplos", +"selectAll": "Selecionar Todos", +"copy": "Copiar", +"cut": "Recortar", +"paste": "Colar", +"move": "Mover", +"zoom": "Redimensionar", +"delete": "Excluir", +"deSelect": "Desselecionar", +"queryEditor": "Editor de Consulta", +"excuteQuery": "Executar Consulta Atual", +"editBox": "Editor de Texto", +"formatting": "Formatar", +"openInLeftPanel": "Abrir no Painel Esquerdo", +}, +"help": { + ...en.help, + +"videoText": "Visão Geral", +"onBtnText": "OK", +"permissionDenyTitle": "💡 Não Consegue Criar um Novo Aplicativo ou Fonte de Dados?", +"permissionDenyContent": "Você não tem permissão para criar o aplicativo e a fonte de dados. Entre em contato com o administrador para se juntar ao grupo de desenvolvedores.", +"appName": "Tutorial do Aplicativo", +"chat": "Converse conosco", +"docs": "Ver Documentação", +"editorTutorial": "Tutorial do Editor", +"update": "O que há de novo?", +"version": "Versão", +"versionWithColon": "Versão: ", +"submitIssue": "Enviar um Problema", +}, +"header": { + ...en.header, + +"nameCheckMessage": "O Nome Não Pode Estar Vazio", +"viewOnly": "Somente Visualização", +"recoverAppSnapshotTitle": "Restaurar Esta Versão?", +"recoverAppSnapshotContent": "Restaurar o Aplicativo Atual para a Versão Criada em {time}.", +"recoverAppSnapshotMessage": "Restaurar Esta Versão", +"returnEdit": "Voltar para o Editor", +"deploy": "Publicar", +"export": "Exportar para JSON", +"editName": "Editar Nome", +"duplicate": "Duplicar {type}", +"snapshot": "Histórico", +"scriptsAndStyles": "Scripts e Estilos", +"appSettings": "Configurações do Aplicativo", +"preview": "Visualização", +"editError": "Modo de Pré-visualização do Histórico, Nenhuma Operação é Suportada.", +"clone": "Clonar", +"editorMode_layout": "Disposição", +"editorMode_logic": "Lógica", +"editorMode_both": "Ambos", +"editorMode_layout_tooltip": "Personalize a aparência e o layout do componente, na janela direita. Ajuste sua aparência, estilo e animação.", +"editorMode_logic_tooltip": "Configure como seu componente funciona e interage, na janela direita. Gerencie seu conteúdo e comportamentos interativos.", +"AppEditingBlocked": "Edição do aplicativo bloqueada para:", +"AppEditingBlockedHint": "As alterações não serão salvas enquanto outro usuário estiver editando este aplicativo.", +"AppEditingBlockedMessage": "Por favor, aguarde antes de verificar o status de edição do aplicativo.", +"AppEditingBlockedCheckStatus": "Verificar status do aplicativo", +"AppEditingBlockedSomeone": "Alguém", +"AppEditingBlockedMessageSnipped": "está editando este aplicativo", +}, +"userAuth": { + ...en.userAuth, + +"registerByEmail": "Registrar", +"email": "Correio eletrónico:", +"inputEmail": "Por favor, digite seu email", +"inputValidEmail": "Por favor, insira um email válido", +"forgotPassword": "Esqueceu a Senha", +"forgotPasswordInfo": "Digite seu email e enviaremos um link para redefinir sua senha.", +"forgotPasswordSuccess": "Por favor, verifique seu email para o link de redefinição de senha.", +"forgotPasswordError": "Algo deu errado. Por favor, tente novamente.", +"register": "Registrar", +"userLogin": "Entrar", +"login": "Entrar", +"bind": "Vincular", +"passwordCheckLength": "Pelo Menos {min} Caracteres", +"passwordCheckContainsNumberAndLetter": "Deve Conter Letras e Números", +"passwordCheckSpace": "Não Pode Conter Espaços", +"welcomeTitle": "Bem-vindo ao {productName}", +"inviteWelcomeTitle": "{username} convida você a trabalhar juntos", +"terms": "Termos", +"privacy": "Política de Privacidade", +"registerHint": "Li e concordo com os", +"chooseAccount": "Escolha sua Conta", +"signInLabel": "Entrar com {name}", +"bindAccount": "Vincular Conta", +"scanQrCode": "Escanear o Código QR com {name}", +"invalidThirdPartyParam": "Parâmetro de Terceiros Inválido", +"account": "Conta", +"inputAccount": "Por favor, insira sua conta", +"ldapLogin": "Entrar com LDAP", +"resetPassword": "Redefinir Senha", +"resetPasswordDesc": "Redefinir a senha do usuário {name}. Uma nova senha será gerada após a redefinição.", +"resetSuccess": "Redefinição Bem-sucedida", +"resetSuccessDesc": "Redefinição de senha bem-sucedida. A nova senha é: {password}", +"resetLostPasswordSuccess": "Redefinição de senha bem-sucedida. Por favor, faça login novamente.", +"copyPassword": "Copiar Senha", +"poweredByLowcoder": "Desenvolvido por: Lowcoder.cloud", +"continue": "Continuar", +"enterPassword": "Introduza a sua palavra-passe", +"selectAuthProvider": "Selecionar o fornecedor de autenticação", +"selectWorkspace": "Selecione o seu espaço de trabalho", +"userNotFound": "Utilizador não encontrado. Certifique-se de que introduziu o e-mail correto.", +}, +"preLoad": { + ...en.preLoad, + +"jsLibraryHelpText": "Adicione bibliotecas JavaScript ao seu aplicativo atual por meio de endereços URL. lodash, day.js, uuid, numbro são integrados ao sistema para uso imediato. As bibliotecas JavaScript são carregadas antes que o aplicativo seja inicializado, o que pode impactar no desempenho do aplicativo.", +"exportedAs": "Exportado Como", +"urlTooltip": "Endereço URL da biblioteca JavaScript, [unpkg.com](https://unpkg.com/) ou [jsdelivr.net](https://www.jsdelivr.com/) são recomendados", +"externalLibsHelperText": "Apenas são suportadas as bibliotecas que utilizam a abordagem UMD (Universal Module Definition). Leia mais aqui: https://github.com/umdjs/umd", +"recommended": "Recomendado", +"viewJSLibraryDocument": "Documento", +"jsLibraryURLError": "URL Inválido", +"jsLibraryExist": "A biblioteca JavaScript já existe", +"jsLibraryEmptyContent": "Nenhuma biblioteca JavaScript adicionada", +"jsLibraryDownloadError": "Erro ao baixar a biblioteca JavaScript", +"jsLibraryInstallSuccess": "Biblioteca JavaScript instalada com sucesso", +"jsLibraryInstallFailed": "Falha na instalação da biblioteca JavaScript", +"jsLibraryInstallFailedCloud": "Talvez a biblioteca não esteja disponível na Sandbox, [Documentação](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", +"jsLibraryInstallFailedHost": "{mensagem}", +"add": "Adicionar Novo", +"jsHelpText": "Adicione um método ou variável global ao aplicativo atual.", +"cssHelpText": "Adicione estilos ao aplicativo atual. A estrutura DOM pode mudar à medida que o sistema itera. Tente modificar os estilos por meio das propriedades do componente.", +"scriptsAndStyles": "Scripts e Estilos", +"jsLibrary": "Biblioteca JavaScript", +}, +"editorTutorials": { + ...en.editorTutorials, + +"component": "Componente", +"componentContent": "O painel direito de componentes oferece muitos blocos de aplicativos prontos (componentes). Eles podem ser arrastados para o canvas para uso. Você também pode criar seus próprios componentes com um pouco de conhecimento de codificação.", +"canvas": "Tela", +"canvasContent": "Construa seus aplicativos no canvas com uma abordagem de 'O que você vê é o que você obtém'. Basta arrastar e soltar componentes para projetar seu layout e usar atalhos de teclado para edição rápida, como excluir, copiar e colar. Depois que um componente é selecionado, você pode ajustar todos os detalhes - desde estilos e layout até vinculação de dados e comportamento lógico. Além disso, desfrute do benefício adicional do design responsivo, garantindo que seus aplicativos tenham uma aparência ótima em qualquer dispositivo.", +"queryData": "Consultar Dados", +"queryDataContent": "Você pode criar consultas de dados aqui e conectar-se ao MySQL, MongoDB, Redis, Airtable e muitas outras fontes de dados. Após configurar a consulta, clique em 'Executar' para obter os dados e continuar o tutorial.", +"compProperties": "Propriedades do Componente", +"interactiveDemo": "Demonstração interactiva", +"interactiveDemoToolTip": "Clique para iniciar uma demonstração interactiva desta funcionalidade", +}, +"supademos": { + ...en.supademos, + +"transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", +"dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", +"temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", +"dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", +"restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", +"jsQuery": "", +"streamApiQuery": "", +"mongodbQuery": "", +"libraryQuery": "", +"googleSheets": "", +"graphqlQuery": "", +"snowflakeQuery": "", +}, +"homeTutorials": { + ...en.homeTutorials, + +"createAppContent": "Bem-vindo! Clique em 'Aplicativo' e comece a criar seu primeiro aplicativo.", +"createAppTitle": "Criar Aplicativo", +}, +"npmRegistry": { + ...en.npmRegistry, + +"npmRegistryEnable": "Ativar o registo NPM personalizado", +"npmRegistryUrl": "URL do registo NPM", +"npmRegistryUrlRequired": "Introduza o URL do registo", +"npmRegistryUrlInvalid": "Introduza um URL válido", +"npmRegistryScope": "Âmbito do pacote", +"npmRegistryPattern": "Padrão", +"npmRegistryPatternInvalid": "Introduza um padrão válido (começando por @ para organizações).", +"npmRegistryAuth": "Autenticação", +"npmRegistryAuthType": "Tipo de autenticação", +"npmRegistryAuthCredentials": "Credenciais de autenticação", +"npmRegistryAuthCredentialsRequired": "Introduza as credenciais de registo", +"npmRegistryAuthCredentialsHelp": "Para a autenticação básica, forneça o nome de utilizador e a palavra-passe codificados em base64 no formato 'base64(nome de utilizador:palavra-passe)'; para a autenticação por token, forneça o token.", +}, +"history": { + ...en.history, + +"layout": "Ajuste de layout '{0}'", +"upgrade": "Atualização de '{0}'", +"delete": "Exclusão de '{0}'", +"add": "Adição de '{0}'", +"modify": "Modificação de '{0}'", +"rename": "Renomear '{1}' para '{0}'", +"recover": "Recuperar versão '{2}'", +"recoverVersion": "Recuperar versão", +"andSoOn": "e assim por diante", +"timeFormat": "MM DD às hh:mm A", +"emptyHistory": "Sem histórico", +"currentVersionWithBracket": " (Atual)", +"currentVersion": "Versão atual", +"justNow": "Agora mesmo", +"history": "Histórico", +}, +"home": { + ...en.home, + +"profile": "Seu Perfil", +"news": "Notícias", +"newsLoading": "Irá carregar alguns segundos.", +"orgHome": "Página Inicial (Org)", +"yourOrg": "Sua Organização", +"orgHomeTitle": "Página Inicial da Organização", +"appMarketplace": "Loja de Aplicativos", +"allApplications": "Seus Aplicativos", +"allModules": "Seus Módulos", +"allFolders": "Todas as Pastas", +"yourFolders": "Suas Pastas", +"modules": "Módulos", +"module": "Módulo", +"api": "API do Lowcoder", +"trash": "Lixeira", +"marketplace": "Mercado", +"allCategories": "Todas as Categorias", +"queryLibrary": "Biblioteca de Consultas", +"datasource": "Fontes de Dados", +"selectDatasourceType": "Selecione o Tipo de Fonte de Dados", +"home": "Início", +"all": "Todos", +"app": "Aplicativo", +"navigation": "Navegação", +"navLayout": "Navegação PC", +"navLayoutDesc": "Menu lateral para navegação fácil em desktop.", +"mobileTabLayout": "Navegação Móvel", +"mobileTabLayoutDesc": "Barra de navegação inferior para navegação móvel suave.", +"folders": "Pastas", +"folder": "Pasta", +"rootFolder": "Raiz", +"import": "Importar", +"export": "Exportar para JSON", +"show": "Mostrar", +"inviteUser": "Convidar membros", +"createFolder": "Criar Pasta", +"createFolderSubTitle": "Nome da pasta:", +"moveToFolder": "Mover para pasta", +"moveToTrash": "Mover para lixeira", +"moveToFolderSubTitle": "Mover \"{name}\" para:", +"folderName": "Nome da pasta:", +"resCardSubTitle": "{time} por {creator}", +"trashEmpty": "Lixeira vazia.", +"projectEmpty": "Nada aqui.", +"projectEmptyCanAdd": "Você ainda não tem nenhum aplicativo. Clique em Novo para começar.", +"name": "Nome", +"type": "Tipo", +"creator": "Criado por", +"lastModified": "Última modificação", +"deleteTime": "Hora da exclusão", +"createTime": "Hora da criação", +"datasourceName": "Nome da fonte de dados", +"databaseName": "Nome do banco de dados", +"nameCheckMessage": "O nome não pode estar vazio", +"deleteElementTitle": "Excluir permanentemente", +"moveToTrashSubTitle": "{type} {name} será movido para a lixeira.", +"deleteElementSubTitle": "Excluir {type} {name} permanentemente, não pode ser recuperado.", +"deleteSuccessMsg": "Excluído com sucesso", +"deleteErrorMsg": "Erro ao excluir", +"recoverSuccessMsg": "Recuperado com sucesso", +"newDatasource": "Nova fonte de dados", +"creating": "Criando...", +"chooseDataSourceType": "Escolha o tipo de fonte de dados", +"folderAlreadyExists": "A pasta já existe", +"newNavLayout": "{userName}'s {name}", +"newApp": "{userName}'s novo {name} ", +"importError": "Erro ao importar, {message}", +"exportError": "Erro ao exportar, {message}", +"importSuccess": "Importação bem-sucedida", +"fileUploadError": "Erro no envio do arquivo", +"fileFormatError": "Erro de formato de arquivo", +"groupWithSquareBrackets": "[Grupo] ", +"allPermissions": "Proprietário", +"appSharingDialogueTitle": "Partilha de aplicações e permissões", +"appSocialSharing": "Partilhe a sua aplicação e experiência em:", +"appSocialSharingMessage": "Criei esta aplicação com o Lowcoder, vê só!", +"socialShare": "Partilhar", +"shareLink": "Link de compartilhamento: ", +"copyLink": "Copiar link", +"appPublicMessage": "Torne o aplicativo público. Qualquer pessoa pode visualizá-lo.", +"modulePublicMessage": "Torne o módulo público. Qualquer pessoa pode visualizá-lo.", +"marketplaceURL": "https://api-service.lowcoder.cloud", +"appMarketplaceMessage": "Publique seu aplicativo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", +"moduleMarketplaceMessage": "Publique seu Módulo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", +"marketplaceGoodPublishing": "Por favor, certifique-se de que seu aplicativo tenha um nome adequado e seja fácil de usar. Remova qualquer informação sensível antes de publicar. Além disso, remova fontes de dados locais e substitua por dados temporários estáticos integrados.", +"noMarketplaceApps": "Ainda não há aplicativos no mercado.", +"errorMarketplaceApps": "Erro ao carregar aplicativos do Mercado", +"localMarketplaceTitle": "Mercado Local", +"globalMarketplaceTitle": "Mercado Público", +"memberPermissionList": "Permissões dos membros: ", +"orgName": "{orgName} administradores", +"addMember": "Adicionar membros", +"addPermissionPlaceholder": "Por favor, insira um nome para pesquisar membros", +"searchMemberOrGroup": "Buscar membros ou grupos: ", +"addPermissionErrorMessage": "Falha ao adicionar permissão, {message}", +"copyModalTitle": "Clonar \"{name}\"", +"copyNameLabel": "Nome do {type}", +"copyModalfolderLabel": "Adicionar à pasta", +"copyNamePlaceholder": "Por favor, insira um nome de {type}", +"chooseNavType": "Por favor, escolha o tipo de navegação", +"createNavigation": "Criar Navegação", +"howToUseAPI": "Como usar a API Rest Aberta", +"support": "Apoio", +}, +"support": { + ...en.support, + +"selfUser": "Você", +"supportTitle": "Suporte Lowcoder", +"supportContent": "Se você tiver dúvidas ou precisar de ajuda, use o sistema de tickets para resolver seu problema rapidamente.", +"newSupportTicket": "Novo Ticket de Suporte", +"ticketTitle": "Título", +"priority": "Prioridade", +"assignee": "Responsável", +"status": "Status do Ticket", +"updatedTime": "Horário Atualizado", +"active": "Ativo", +"inactive": "Inativo", +"noEmail": "Sem E-mail", +"details": "Detalhes", +"reloadTickets": "Recarregar Tickets", +"createdDate": "Data de Criação", +"updatedDate": "Data de Atualização", +"description": "Descrição do Problema", +"subtasks": "Subtarefas", +"subtasksProgress": "Progresso de todas as Subtarefas", +"attachments": "Anexos do Problema", +"comments": "Comentários", +"addComment": "Adicionar Comentário", +"addAttachment": "Adicionar Anexo", +"edit": "Editar Descrição do Ticket", +"save": "Salvar Descrição do Ticket", +"cancel": "Cancelar", +"submitComment": "Enviar Comentário", +"upload": "Enviar Anexo", +"selectFile": "Selecionar Arquivo", +"ticketDescriptionUpdated": "Descrição do ticket atualizada com sucesso!", +"ticketDescriptionUpdateFailed": "Falha ao atualizar a descrição do ticket.", +"writeComment": "Escreva um comentário...", +"ticketCommentAdded": "Comentário adicionado com sucesso!", +"ticketCommentFailed": "Falha ao adicionar o comentário.", +"ticketCommentEmpty": "Por favor, escreva um comentário antes de enviar.", +"ticketAttachmentUploaded": "Anexo carregado com sucesso!", +"ticketAttachmentFailed": "Falha ao carregar o anexo.", +"ticketAttachmentEmpty": "Por favor, selecione um arquivo para enviar.", +"ticketFetchError": "Falha ao carregar o ticket.", +"ticketNotFound": "Ticket não encontrado.", +"addAttachmentFileSize": "O arquivo deve ser menor que 5MB!", +"goBack": "Voltar", +"noDescription": "Nenhuma descrição disponível.", +"createTicket": "Criar um novo Ticket de Suporte", +"createTicketTitlePlaceholder": "Digite o Título (máx. 150 caracteres)", +"createTicketDescriptionTitle": "Descreva seu problema - quanto mais detalhes, melhor:", +"createTicketDescriptionPlaceholder": "Descreva o problema em detalhes, incluindo: 1) Passos para reproduzir o problema, 2) Comportamento esperado versus comportamento real, 3) Trechos de código, se aplicável, 4) Componentes específicos, APIs ou configurações afetadas", +"createTicketSubmit": "Enviar Ticket", +"createTicketInfoText": "Quando seu Ticket for criado, você poderá adicionar Capturas de Tela e Comentários na seção 'Detalhes'.", +}, +"carousel": { + ...en.carousel, + +"dotPosition": "Posição dos pontos de navegação", +"autoPlay": "Reprodução automática", +"showDots": "Mostrar pontos de navegação", +}, +"npm": { + ...en.npm, + +"invalidNpmPackageName": "Nome ou URL do Pacote npm Inválido.", +"pluginExisted": "Este plugin npm já existe", +"compNotFound": "Componente {compName} não encontrado.", +"addPluginModalTitle": "Adicionar Plugin de um Repositório npm", +"pluginNameLabel": "URL ou Nome do Pacote npm", +"noCompText": "Sem componentes.", +"compsLoading": "Carregando...", +"removePluginBtnText": "Remover", +"addPluginBtnText": "Adicionar Plugin npm", +}, +"toggleButton": { + ...en.toggleButton, + +"valueDesc": "O Valor Padrão do Botão de Alternância, Por Exemplo: Falso", +"trueDefaultText": "Ocultar", +"falseDefaultText": "Mostrar", +"trueLabel": "Texto para Verdadeiro", +"falseLabel": "Texto para Falso", +"trueIconLabel": "Ícone para Verdadeiro", +"falseIconLabel": "Ícone para Falso", +"iconPosition": "Posição do Ícone", +"showText": "Mostrar Texto", +"alignment": "Alinhamento", +"showBorder": "Mostrar Borda", +}, +"componentDoc": { + ...en.componentDoc, + +"markdownDemoText": "**Lowcoder** | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", +"demoText": "Lowcoder | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", +"submit": "Enviar", +"style": "Estilo", +"danger": "Perigo", +"warning": "Aviso", +"success": "Sucesso", +"menu": "Menu", +"link": "Ligação a", +"customAppearance": "Aparência Personalizada", +"search": "Buscar", +"pleaseInputNumber": "Por favor, insira um número", +"mostValue": "Valor Máximo", +"maxRating": "Classificação Máxima", +"notSelect": "Não Selecionado", +"halfSelect": "Seleção Parcial", +"pleaseSelect": "Por favor, selecione", +"title": "Título", +"content": "Conteúdo", +"componentNotFound": "Componente não encontrado", +"example": "Exemplos", +"defaultMethodDesc": "Defina o valor da propriedade {name}", +"propertyUsage": "Você pode ler informações relacionadas ao componente acessando as propriedades do componente pelo nome do componente em qualquer lugar em que possa escrever JavaScript.", +"property": "Propriedades", +"propertyName": "Nome da Propriedade", +"propertyType": "Tipo", +"propertyDesc": "Descrição", +"event": "Eventos", +"eventName": "Nome do Evento", +"eventDesc": "Descrição", +"mehtod": "Métodos", +"methodUsage": "Você tem a capacidade de interagir com os componentes por meio de seus respectivos métodos, que podem ser acessados por seus nomes designados em qualquer segmento onde o JavaScript é utilizado. Além disso, esses componentes podem ser ativados por meio da ação 'Controlar Componente', que é acionada em resposta a eventos específicos.", +"methodName": "Nome do Método", +"methodDesc": "Descrição", +"showBorder": "Mostrar Borda", +"haveTry": "Experimente você mesmo", +"settings": "Configurações", +"settingValues": "Valor da Configuração", +"defaultValue": "Valor Padrão", +"time": "Tempo", +"date": "Data", +"noValue": "Nenhum", +"xAxisType": "Tipo do Eixo X", +"hAlignType": "Alinhamento Horizontal", +"leftLeftAlign": "Alinhamento à Esquerda-Esquerda", +"leftRightAlign": "Alinhamento à Esquerda-Direita", +"topLeftAlign": "Alinhamento Superior-Esquerdo", +"topRightAlign": "Alinhamento Superior-Direito", +"validation": "Validação", +"required": "Obrigatório", +"defaultStartDateValue": "Data de Início Padrão", +"defaultEndDateValue": "Data de Fim Padrão", +"basicUsage": "Uso Básico", +"basicDemoDescription": "Os seguintes exemplos mostram o uso básico do componente.", +"noDefaultValue": "Sem Valor Padrão", +"forbid": "Proibido", +"placeholder": "Marcador de Posição", +"pleaseInputPassword": "Por favor, insira uma senha", +"password": "Senha", +"textAlign": "Alinhamento do Texto", +"length": "Comprimento", +"top": "Topo", +"pleaseInputName": "Por favor, insira seu nome", +"userName": "Nome", +"fixed": "Fixo", +"responsive": "Responsivo", +"workCount": "Contagem de Palavras", +"cascaderOptions": "Opções de Cascata", +"pleaseSelectCity": "Por favor, selecione uma cidade", +"advanced": "Avançado", +"showClearIcon": "Mostrar Ícone Limpar", +"appleOptionLabel": "🍎 Maçã", +"waterMelonOptionLabel": "🍉 Melancia", +"berryOptionLabel": "🍓 Morango", +"lemonOptionLabel": "🍋 Limão", +"coconutOptionLabel": "🥥 Coco", +"likedFruits": "Favoritos", +"option": "Opção", +"singleFileUpload": "Upload de Arquivo Único", +"multiFileUpload": "Upload de Múltiplos Arquivos", +"folderUpload": "Upload de Pasta", +"multiFile": "Múltiplos Arquivos", +"folder": "Pasta", +"open": "Abrir", +"favoriteFruits": "Frutas Favoritas", +"pleaseSelectOneFruit": "Selecione uma Fruta", +"notComplete": "Não Completo", +"complete": "Completo", +"echart": "Gráfico eletrónico", +"lineChart": "Gráfico de Linha", +"basicLineChart": "Gráfico de Linha Básico", +"lineChartType": "Tipo de Gráfico de Linha", +"stackLineChart": "Linha Empilhada", +"areaLineChart": "Linha de Área", +"scatterChart": "Gráfico de Dispersão", +"scatterShape": "Forma de Dispersão", +"scatterShapeCircle": "Círculo", +"scatterShapeRect": "Retângulo", +"scatterShapeTri": "Triângulo", +"scatterShapeDiamond": "Diamante", +"scatterShapePin": "Alfinete", +"scatterShapeArrow": "Seta", +"pieChart": "Gráfico de Pizza", +"basicPieChart": "Gráfico de Pizza Básico", +"pieChatType": "Tipo de Gráfico de Pizza", +"pieChartTypeCircle": "Gráfico de Donut", +"pieChartTypeRose": "Gráfico de Rosa", +"titleAlign": "Posição do Título", +"color": "Cor", +"dashed": "Tracejado", +"imADivider": "Sou uma Linha de Divisão", +"tableSize": "Tamanho da Tabela", +"subMenuItem": "SubMenu {num}", +"menuItem": "Menu {num}", +"labelText": "Rótulo", +"labelPosition": "Posição do Rótulo", +"labelAlign": "Alinhamento do Rótulo", +"optionsOptionType": "Método de Configuração", +"styleBackgroundColor": "Cor de Fundo", +"styleBorderColor": "Cor da Borda", +"styleColor": "Cor da Fonte", +"selectionMode": "Modo de Seleção de Linha", +"paginationSetting": "Configuração de Paginação", +"paginationShowSizeChanger": "Suportar Usuários para Modificar o Número de Entradas por Página", +"paginationShowSizeChangerButton": "Mostrar Botão de Modificação de Tamanho", +"paginationShowQuickJumper": "Mostrar Pulo Rápido", +"paginationHideOnSinglePage": "Ocultar Quando Há Apenas uma Página", +"paginationPageSizeOptions": "Tamanho da Página", +"chartConfigCompType": "Tipo de Componente de Configuração de Gráfico", +"xConfigType": "Tipo de Eixo X", +"loading": "Carregando", +"disabled": "Desabilitado", +"minLength": "Comprimento Mínimo", +"maxLength": "Comprimento Máximo", +"showCount": "Mostrar Contagem de Palavras", +"autoHeight": "Altura Automática", +"thousandsSeparator": "Separador de Milhares", +"precision": "Casas Decimais", +"value": "Valor Padrão", +"formatter": "Formato", +"min": "Valor Mínimo", +"max": "Valor Máximo", +"step": "Tamanho do Passo", +"start": "Hora de Início", +"end": "Hora de Término", +"allowHalf": "Permitir Meia Seleção", +"filetype": "Tipo de Arquivo", +"showUploadList": "Mostrar Lista de Upload", +"uploadType": "Tipo de Upload", +"allowClear": "Mostrar Ícone de Limpar", +"minSize": "Tamanho Mínimo do Arquivo", +"maxSize": "Tamanho Máximo do Arquivo", +"maxFiles": "Número Máximo de Arquivos Enviados", +"format": "Formato", +"minDate": "Data Mínima", +"maxDate": "Data Máxima", +"minTime": "Tempo Mínimo", +"maxTime": "Tempo Máximo", +"text": "Texto", +"type": "Tipo", +"hideHeader": "Ocultar Cabeçalho", +"hideBordered": "Ocultar Borda", +"src": "URL da Imagem", +"showInfo": "Exibir Valor", +"mode": "Modo", +"onlyMenu": "Apenas Menu", +"horizontalAlignment": "Alinhamento Horizontal", +"row": "Linha", +"column": "Coluna", +"leftAlign": "Alinhamento à Esquerda", +"rightAlign": "Alinhamento à Direita", +"percent": "Porcentagem", +"fixedHeight": "Altura Fixa", +"auto": "Adaptativo", +"directory": "Pasta", +"multiple": "Múltiplos Arquivos", +"singleFile": "Arquivo Único", +"manual": "Manual", +"default": "Padrão", +"small": "Pequeno", +"middle": "Médio", +"large": "Grande", +"single": "Único", +"multi": "Múltiplo", +"close": "Fechar", +"ui": "Modo de UI", +"line": "Gráfico de Linha", +"scatter": "Gráfico de Dispersão", +"pie": "Gráfico de Pizza", +"basicLine": "Gráfico de Linha Básico", +"stackedLine": "Gráfico de Linha Empilhada", +"areaLine": "Mapa de Área", +"basicPie": "Gráfico de Pizza Básico", +"doughnutPie": "Gráfico de Donut", +"rosePie": "Gráfico de Rosa", +"category": "Eixo de Categoria", +"circle": "Círculo", +"rect": "Retângulo", +"triangle": "Triângulo", +"diamond": "Diamante", +"pin": "Alfinete", +"arrow": "Seta", +"left": "Esquerda", +"right": "Direita", +"center": "Centro", +"bottom": "Inferior", +"justify": "Justificar Ambos os Extremos", +}, +"playground": { + ...en.playground, + +"url": "https://app.lowcoder.cloud/playground/{compType}/1", +"data": "Estado Atual dos Dados", +"preview": "Visualizar", +"property": "Propriedades", +"console": "Console de Script Visual", +"executeMethods": "Executar Métodos", +"noMethods": "Sem Métodos.", +"methodParams": "Parâmetros do Método", +"methodParamsHelp": "Informe os Parâmetros do Método Usando JSON. Por Exemplo, Você Pode Definir os Parâmetros do setValue Com: [1] ou 1", +}, +"calendar": { + ...en.calendar, + +"headerBtnBackground": "Cor de Fundo do Botão", +"btnText": "Texto do Botão", +"title": "Título", +"selectBackground": "Fundo Selecionado", +}, +"idSource": { + ...en.idSource, + +"title": "Provedor de Autenticação do Usuário", +"form": "Correio eletrónico", +"pay": "Prémio", +"enable": "Habilitar", +"unEnable": "Não Habilitado", +"loginType": "Tipo de Login", +"status": "Estado", +"desc": "Descrição", +"manual": "Agenda de Endereços:", +"syncManual": "Sincronizar Agenda de Endereços", +"syncManualSuccess": "Sincronização Bem-Sucedida", +"enableRegister": "Permitir Registro", +"saveBtn": "Salvar e Habilitar", +"save": "Salvar", +"none": "Nenhum", +"formPlaceholder": "Por favor, informe {label}", +"formSelectPlaceholder": "Por favor, selecione {label}", +"saveSuccess": "Salvo com Sucesso", +"dangerLabel": "Zona de Perigo", +"dangerTip": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Prossiga com Cuidado.", +"lastEnabledConfig": "Não é possível desativar/eliminar a configuração, uma vez que esta é a única configuração activada.", +"disable": "Desabilitar", +"disableSuccess": "Desabilitado com Sucesso", +"encryptedServer": "-------- Criptografado no Lado do Servidor --------", +"disableTip": "Dicas", +"disableContent": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Você Tem Certeza de Que Deseja Prosseguir?", +"manualTip": "", +"lockTip": "O Conteúdo está Bloqueado. Para Fazer Alterações, Clique no {icon} para Desbloquear.", +"lockModalContent": "Alterar o Campo 'Atributo de ID' Pode Ter Impactos Significativos na Identificação do Usuário. Por Favor, Confirme Que Você Entende as Implicações Dessa Alteração Antes de Prosseguir.", +"payUserTag": "Prémio", +"source": "Fonte", +"sourceName": "Nome do fornecedor de autenticação", +"sourceDescription": "Fornecedor de autenticação Descrição", +"sourceIcon": "Ícone do fornecedor de autenticação", +"sourceCategory": "Categoria do fornecedor de autenticação", +"souceIssuerURI": "URI do emissor do fornecedor de autenticação", +"souceAuthorizationEndpoint": "Ponto final de autorização do fornecedor de autenticação", +"souceTokenEndpoint": "Ponto de extremidade do token do fornecedor de autenticação", +"souceUserInfoEndpoint": "Ponto final da informação do utilizador do fornecedor de autenticação", +"userInfoIntrospection": "Utilizar a introspeção do utilizador OpenID", +"userCanSelectAccounts": "O utilizador pode selecionar a partir de contas", +"sourceCategoryEnterprise": "Identidade empresarial", +"sourceCategoryCloud": "Serviços em nuvem", +"sourceCategorySocial": "Redes sociais", +"sourceCategoryDevelopment": "Desenvolvimento", +"sourceCategoryTools": "Ferramentas e produtividade", +}, +"slotControl": { + ...en.slotControl, + +"configSlotView": "Configurar Visualização de Slot", +}, +"jsonLottie": { + ...en.jsonLottie, + +"lottieJson": "JSON Lottie", +"searchAnimation": "Pesquisar animação", +"speed": "Velocidade", +"width": "Largura", +"height": "Altura", +"backgroundColor": "Cor de Fundo", +"animationStart": "Início da Animação", +"valueDesc": "Dados JSON Atuais", +"loop": "Repetir", +"auto": "Automático", +"onHover": "Ao Passar o Mouse", +"onTrigger": "No acionamento", +"singlePlay": "Reprodução Única", +"endlessLoop": "Loop Infinito", +"keepLastFrame": "Manter Último Quadro Exibido", +"fit": "Em forma", +"align": "Alinhar", +"load": "Em carga", +"play": "Em jogo", +"pause": "Em pausa", +"stop": "Na paragem", +"complete": "Em Completo", +}, +"timeLine": { + ...en.timeLine, + +"titleColor": "Cor do Título", +"subTitleColor": "Cor do Subtítulo", +"labelColor": "Cor do Rótulo", +"value": "Dados da Linha do Tempo", +"mode": "Ordem de Exibição", +"left": "Conteúdo à Direita", +"right": "Conteúdo à Esquerda", +"alternate": "Ordem de Conteúdo Alternada", +"modeTooltip": "Defina o Conteúdo para Aparecer à Esquerda/Direita ou Alternadamente em Ambos os Lados da Linha do Tempo", +"reverse": "Eventos Mais Recentes Primeiro", +"pending": "Texto do Nó Pendente", +"pendingDescription": "Quando Definido, um Último Nó com o Texto e um Indicador de Espera Serão Exibidos.", +"defaultPending": "Melhoria Contínua", +"clickTitleEvent": "Clique em Evento de Título", +"clickTitleEventDesc": "Clique em Evento de Título", +"Introduction": "Chaves de Introdução", +"helpTitle": "Título da Linha do Tempo (Obrigatório)", +"helpsubTitle": "Subtítulo da Linha do Tempo", +"helpLabel": "Rótulo da Linha do Tempo, Usado para Exibir Datas", +"helpColor": "Indica a Cor do Nó da Linha do Tempo", +"helpDot": "Renderização de Nós da Linha do Tempo como Ícones Ant Design", +"helpTitleColor": "Controle Individual da Cor do Título do Nó", +"helpSubTitleColor": "Controle Individual da Cor do Subtítulo do Nó", +"helpLabelColor": "Controle Individual da Cor do Ícone do Nó", +"valueDesc": "Dados da Linha do Tempo", +"clickedObjectDesc": "Dados do Item Clicado", +"clickedIndexDesc": "Índice do Item Clicado", +}, +"comment": { + ...en.comment, + +"value": "Dados da Lista de Comentários", +"showSendButton": "Permitir Comentários", +"title": "Título", +"titledDefaultValue": "%d Comentário no Total", +"placeholder": "Shift + Enter para Comentar; Digite @ ou # para Entrada Rápida", +"placeholderDec": "Espaço reservado", +"buttonTextDec": "Título do Botão", +"buttonText": "Comentar", +"mentionList": "Dados da Lista de Menções", +"mentionListDec": "Chave-Palavras-Chave de Menção; Valor-Dados da Lista de Menções", +"userInfo": "Informações do Usuário", +"dateErr": "Erro de Data", +"commentList": "Lista de Comentários", +"deletedItem": "Item Excluído", +"submitedItem": "Item Enviado", +"deleteAble": "Mostrar Botão de Excluir", +"Introduction": "Chaves de Introdução", +"helpUser": "Informações do Usuário (Obrigatório)", +"helpname": "Nome de Usuário (Obrigatório)", +"helpavatar": "URL do Avatar (Alta Prioridade)", +"helpdisplayName": "Nome de Exibição (Baixa Prioridade)", +"helpvalue": "Conteúdo do Comentário", +"helpcreatedAt": "Data de Criação", +}, +"mention": { + ...en.mention, + +"mentionList": "Dados da Lista de Menções", +}, +"autoComplete": { + ...en.autoComplete, + +"value": "Valor de Autocompletar", +"checkedValueFrom": "Valor Verificado de", +"ignoreCase": "Ignorar Maiúsculas e Minúsculas na Busca", +"searchLabelOnly": "Buscar Somente no Rótulo", +"searchFirstPY": "Buscar Primeiro Pinyin", +"searchCompletePY": "Buscar Pinyin Completo", +"searchText": "Buscar Texto", +"SectionDataName": "Dados de Autocompletar", +"valueInItems": "Valor nos Itens", +"type": "Tipo", +"antDesign": "AntDesign", +"normal": "Normal", +"selectKey": "Chave", +"selectLable": "Rótulo", +"ComponentType": "Tipo de Componente", +"colorIcon": "Azul", +"grewIcon": "Cinza", +"noneIcon": "Nenhum", +"small": "Pequeno", +"large": "Grande", +"componentSize": "Tamanho do Componente", +"Introduction": "Chaves de Introdução", +"helpLabel": "Rótulo", +"helpValue": "Valor", +}, +"responsiveLayout": { + ...en.responsiveLayout, + +"column": "Colunas", +"addColumn": "Adicionar coluna", +"columnDefinition": "Definição de coluna", +"rowDefinition": "Definição de linha", +"columnGap": "Diferença de coluna", +"rowGap": "Lacuna de linha", +"atLeastOneColumnError": "O Layout Responsivo Mantém Pelo Menos uma Coluna", +"columnsPerRow": "Colunas por Linha", +"columnsSpacing": "Espaçamento de Colunas (px)", +"horizontal": "Horizontal", +"vertical": "Vertical", +"mobile": "Móvel", +"tablet": "Tablet", +"desktop": "Ambiente de trabalho", +"rowStyle": "Estilo de Linha", +"columnStyle": "Estilo de Coluna", +"minWidth": "Largura Mín.", +"rowBreak": "Quebra de Linha", +"useComponentWidth": "Usar tamanho próprio", +"useComponentWidthDesc": "Use a largura do contêiner em vez da largura do aplicativo", +"matchColumnsHeight": "Corresponder Altura das Colunas", +"rowLayout": "Layout de Linha", +"columnsLayout": "Layout de Colunas", +"columnsDefinitionTooltip": "As colunas podem ser definidas livremente com base nas propriedades das colunas CSS. Por exemplo, \"auto auto\" criará duas colunas com a mesma largura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-columns", +"rowsDefinitionTooltip": "As linhas podem ser definidas livremente com base nas propriedades das linhas CSS. Por exemplo, 'auto auto' criará duas linhas com a mesma altura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-rows", +}, +"splitLayout": { + ...en.splitLayout, + +"column": "Ver áreas", +"addColumn": "Adicionar áreas", +"columnDefinition": "Definição da área", +"atLeastOneColumnError": "O layout responsivo mantém pelo menos uma coluna", +"horizontal": "Horizontal", +"vertical": "Vertical", +"areaStyle": "Estilo de coluna", +"minWidth": "Min. Largura", +"maxWidth": "Máximo. Largura", +"width": "Largura", +"collapsible": "A área é rebatível?", +"matchColumnsHeight": "Áreas de jogo Altura", +"orientation": "Orientação do Splitlayout", +"orientationTooltip": "A ordem visual em que as áreas estão alinhadas. Também pode colocar componentes Splitlayout dentro de componentes Splitlayout para obter layouts complexos.", +}, +"navLayout": { + ...en.navLayout, + +"mode": "Modo", +"modeInline": "Em linha", +"modeVertical": "Vertical", +"modeHorizontal": "Horizontal", +"width": "Largura", +"widthTooltip": "Pixel ou Porcentagem, por exemplo, 520, 60%", +"navStyle": "Estilo do Menu", +"navItemStyle": "Estilo do Item de Menu", +"navBackground": "Imagem de fundo", +"mobileNavVerticalOrientation": "Orientação vertical", +"mobileNavVerticalMaxWidth": "Largura máxima", +"mobileNavBarHeight": "Altura da barra de navegação", +"mobileNavVerticalShowSeparator": "Mostrar separador", +"mobileNavIconSize": "Tamanho do ícone", +}, +"timeZone": { + ...en.timeZone, + +"UTC-12:00": "(UTC-12:00) Linha de Data Internacional W", +"UTC-11:00": "(UTC-11:00) UTC-11", +"UTC-10:00": "(UTC-10:00) Hawaii", +"UTC-09:00": "(UTC-09:00) Alasca", +"UTC-08:00": "(UTC-08:00) Baja CA", +"UTC-07:00": "(UTC-07:00) Hora do Pacífico (EUA)", +"UTC-06:00": "(UTC-06:00) Hora Central (EUA)", +"UTC-05:00": "(UTC-05:00) Hora do Leste (EUA)", +"UTC-04:00": "(UTC-04:00) Hora do Atlântico", +"UTC-03:00": "(UTC-03:00) Buenos Aires", +"UTC-02:00": "(UTC-02:00) UTC-02", +"UTC-01:00": "(UTC-01:00) Cabo Verde", +"UTC+00:00": "(UTC 00:00) UTC", +"UTC+01:00": "(UTC+01:00) Berlim, Roma", +"UTC+02:00": "(UTC+02:00) Athens, Bucharest", +"UTC+03:00": "(UTC+03:00) Moscovo", +"UTC+04:00": "(UTC+04:00) Dubai, Muscat", +"UTC+05:00": "(UTC+05:00) Karachi", +"UTC+05:30": "(UTC+05:30) Nova Deli", +"UTC+05:45": "(UTC+05:45) Kathmandu", +"UTC+06:00": "(UTC+06:00) Dhaka", +"UTC+06:30": "(UTC+06:30) Yangon", +"UTC+07:00": "(UTC+07:00) Banguecoque", +"UTC+08:00": "(UTC+08:00) Pequim, HK", +"UTC+09:00": "(UTC+09:00) Tóquio, Seul", +"UTC+09:30": "(UTC+09:30) Adelaide, Darwin", +"UTC+10:00": "(UTC+10:00) Sydney", +"UTC+11:00": "(UTC+11:00) Ilhas Salomão, Nova Caledónia", +"UTC+12:00": "(UTC+12:00) Auckland, Fiji", +"UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", +"UserChoice": "Escolha do utilizador", +}, +"tour": { + ...en.tour, + +"section1Title": "Passos", +"section1Subtitle": "Passos", +"tooltipExampleHeader": "Exemple:", +"tooltipSignatureHeader": "Assinatura:", +"options": { + ...en.tour.options, + +"title": { + ...en.tour.options.title, + +"label": "Título", +"placeholder": "Bem-vindo", +"tooltip": "O título do passo. Qualquer HTML é válido aqui.", +}, +"description": { + ...en.tour.options.description, + +"label": "Descrição", +"placeholder": "Bem-vindo ao Lowcoder!", +"tooltip": "O título do passo. Qualquer HTML é válido aqui.", +}, +"mask": { + ...en.tour.options.mask, + +"label": "Máscara", +"tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour.", +"tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", +}, +"arrow": { + ...en.tour.options.arrow, + +"label": "Seta", +"tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente.", +"tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.options.type, + +"label": "Tipo", +"tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal.", +}, +"target": { + ...en.tour.options.target, + +"label": "Componente", +"tooltip": "O componente no qual você deseja colocar a dica ou deixe-o vazio se simplesmente desejar um modal no centro da tela.", +}, +"coverImage": { + ...en.tour.options.coverImage, + +"label": "URI da Imagem de Capa", +"tooltip": "Um URI para uma imagem que você gostaria de exibir com o passo", +}, +}, +"indicatorsRender": { + ...en.tour.indicatorsRender, + +"label": "Renderização de Indicadores", +"tooltip": "Fornece um indicador personalizado para qual passo você está", +"tooltipValidTypes": "O formato é uma função que aceita dois argumentos, `current` e `total` e retorna um ReactNode", +"tooltipFunctionSignatureHeader": "Assinatura:", +"tooltipFunctionSignature": "(atual: número, total: número) => ReactNode", +"tooltipExampleHeader": "Exemplo:", +}, +"disabledInteraction": { + ...en.tour.disabledInteraction, + +"label": "Desativar Interação", +"tooltip": "Desativa a interação na área destacada.", +}, +"mask": { + ...en.tour.mask, + +"label": "Máscara", +"tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour. Pode ser substituído no nível do passo.", +"tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", +}, +"placement": { + ...en.tour.placement, + +"label": "Posição", +"tooltip": "Posição do cartão guia em relação ao elemento de destino. Pode ser substituído no nível do passo.", +"tooltipValidOptions": "Opções válidas", +"tooltipValidOptionsAbove": "Acima do componente:", +"tooltipValidOptionsLeft": "À esquerda do componente:", +"tooltipValidOptionsRight": "À direita do componente:", +"tooltipValidOptionsBelow": "Abaixo do componente:", +"tooltipValidOptionsOnTop": "No topo do componente:", +}, +"arrow": { + ...en.tour.arrow, + +"label": "Seta", +"tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente. Pode ser substituído no nível do passo.", +"tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.type, + +"label": "Tipo", +"tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal. Pode ser substituído no nível do passo.", +}, +}, +"docUrls": { + ...en.docUrls, + +"docHome": "https://docs.lowcoder.cloud/", +"apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", +"components": "https://app.lowcoder.cloud/components/{compType}", +"module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", +"optionList": "", +"terms": "https://lowcoder.cloud/terms", +"privacy": "https://lowcoder.cloud/privacy", +"aboutUs": "https://lowcoder.cloud/about", +"changeLog": "https://github.com/lowcoder-org/lowcoder/releases", +"introVideo": "", +"devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", +"devNpmPluginText": "Como desenvolver um plug-in npm", +"useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", +"eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", +"thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", +"thirdLibUrlText": "Utilizar bibliotecas de terceiros", +}, +"datasourceTutorial": { + ...en.datasourceTutorial, + +"mysql": "", +"mongodb": "", +"postgres": "", +"redis": "", +"es": "", +"smtp": "", +"clickHouse": "", +}, +"queryTutorial": { + ...en.queryTutorial, + +"js": "", +"transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", +"tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", +"dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", +}, +"customComponent": { + ...en.customComponent, + +"entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", +}, +"template": { + ...en.template, + +"cloneUrl": "/apps/template-import/", +}, +"lowcoderUrl": { + ...en.lowcoderUrl, + +"createIssue": "https://github.com/lowcoder-org/lowcoder/issues", +"discord": "https://discord.com/invite/qMG9uTmAx2", +}, +"iconScout": { + ...en.iconScout, + +"searchImage": "Pesquisar imagem", +"searchAnimation": "Pesquisar animação", +"searchIcon": "Ícone de pesquisa", +"noResults": "Não foram encontrados resultados.", +"buySubscriptionTitle": "Desbloquear Activos Premium", +"buySubscriptionContent": "Este ativo é exclusivo para os subscritores do Pacote multimédia. Subscreva o Pacote Multimédia e transfira activos de alta qualidade sem limites!", +"buySubscriptionButton": "Subscrever agora", +}, + +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/ru.ts b/client/packages/lowcoder/src/i18n/locales/ru.ts index 7f7c09c24f..806eea60ee 100644 --- a/client/packages/lowcoder/src/i18n/locales/ru.ts +++ b/client/packages/lowcoder/src/i18n/locales/ru.ts @@ -1,4031 +1,4844 @@ import { en } from "./en"; export const ru = { - ...en, - - "productName": "Lowcoder", - "productDesc": "Создавайте программные приложения для своей компании и клиентов с минимальным опытом кодирования. Lowcoder - отличная альтернатива Retool, Appsmith и Tooljet.", - "notSupportedBrowser": "Ваш текущий браузер может иметь проблемы с совместимостью. Для оптимальной работы используйте последнюю версию браузера Chrome.", - "create": "Создать", - "move": "Переместить", - "addItem": "Добавить", - "newItem": "Новый", - "copy": "Копировать", - "rename": "Переименовать", - "delete": "Удалить", - "deletePermanently": "Удалить навсегда", - "remove": "Удалить", - "recover": "Восстановить", - "edit": "Редактировать", - "view": "Посмотреть", - "value": "Значение", - "data": "Данные", - "information": "Информация", - "success": "Успех", - "warning": "Внимание", - "error": "Ошибка", - "reference": "Ссылка", - "text": "Текст", - "basic": "Основные", - "label": "Этикетка", - "layout": "Макет", - "color": "Цвет", - "form": "Форма", - "menu": "Меню", - "menuItem": "Пункт меню", - "ok": "OK", - "cancel": "Отмена", - "finish": "Отделка", - "reset": "Сброс", - "icon": "Икона", - "code": "Код", - "title": "Название", - "emptyContent": "Пустое содержимое", - "more": "Подробнее", - "search": "Поиск", - "back": "Назад", - "accessControl": "Контроль доступа", - "copySuccess": "Успешно скопировано", - "copyError": "Ошибка копирования", - "api": { - ...en.api, - - "publishSuccess": "Успешная публикация", - "recoverFailed": "Восстановление не удалось", - "needUpdate": "Ваша текущая версия устарела. Пожалуйста, обновите ее до последней версии.", - }, - "codeEditor": { - ...en.codeEditor, - - "notSupportAutoFormat": "Текущий редактор кода не поддерживает автоформатирование.", - "fold": "Сложите", - }, - "exportMethod": { - ...en.exportMethod, - - "setDesc": "Установить свойство: {property}", - "clearDesc": "Очистить имущество: {property}", - "resetDesc": "Сбросить значение свойства: {property} в значение по умолчанию", - }, - "method": { - ...en.method, - - "focus": "Установите фокус", - "focusOptions": "Параметры фокуса. См. HTMLElement.focus()", - "blur": "Убрать фокус", - "click": "Нажмите", - "select": "Выделить весь текст", - "setSelectionRange": "Установка начальной и конечной позиций выделения текста", - "selectionStart": "Индекс первого выбранного символа на основе 0", - "selectionEnd": "Индекс символа после последнего выбранного символа, основанный на 0", - "setRangeText": "Заменить диапазон текста", - "replacement": "Строка для вставки", - "replaceStart": "Индекс первого заменяемого символа, основанный на 0", - "replaceEnd": "0-базированный индекс символа после последнего символа для замены", - }, - "errorBoundary": { - ...en.errorBoundary, - - "encounterError": "Не удалось загрузить компонент. Пожалуйста, проверьте конфигурацию.", - "clickToReload": "Нажмите, чтобы перезагрузить", - "errorMsg": "Ошибка:", - }, - "imgUpload": { - ...en.imgUpload, - - "notSupportError": "Поддерживаются только типы изображений {types}.", - "exceedSizeError": "Размер изображения не должен превышать {size}", - }, - "gridCompOperator": { - ...en.gridCompOperator, - - "notSupport": "Не поддерживается", - "selectAtLeastOneComponent": "Пожалуйста, выберите хотя бы один компонент", - "selectCompFirst": "Выбор компонентов перед копированием", - "noContainerSelected": "[Ошибка] Не выбран контейнер", - "deleteCompsSuccess": "Удаление прошло успешно. Нажмите {undoKey}, чтобы отменить удаление.", - "deleteCompsTitle": "Удалить компоненты", - "deleteCompsBody": "Вы уверены, что хотите удалить {compNum} выбранных компонентов?", - "cutCompsSuccess": "Вырезание прошло успешно. Нажмите {pasteKey}, чтобы вставить, или {undoKey}, чтобы отменить.", - }, - "leftPanel": { - ...en.leftPanel, - - "queries": "Запросы данных в вашем приложении", - "globals": "Глобальные переменные данных", - "propTipsArr": "{num} Предметы", - "propTips": "{num} Ключи", - "propTipArr": "{num} Артикул", - "propTip": "{num} Ключ", - "stateTab": "Государство", - "settingsTab": "Настройки", - "toolbarTitle": "Индивидуализация", - "toolbarPreload": "Сценарии и стили", - "components": "Активные компоненты", - "modals": "модалы в приложении", - "expandTip": "Нажмите, чтобы показать данные {component}", - "collapseTip": "Нажмите, чтобы скрыть данные {component}", - "layers": "Слои", - "activatelayers": "Используйте динамические слои", - "selectedComponents": "Избранные компоненты...", - "displayComponents": "управление Дисплей", - "lockComponents": "управление Положение", - }, - "bottomPanel": { - ...en.bottomPanel, - - "title": "Запросы данных", - "run": "Запускайте", - "noSelectedQuery": "Запрос не выбран", - "metaData": "Метаданные источника данных", - "noMetadata": "Метаданные отсутствуют", - "metaSearchPlaceholder": "Поиск метаданных", - "allData": "Все столы", - }, - "rightPanel": { - ...en.rightPanel, - - "propertyTab": "Свойства", - "noSelectedComps": "Компоненты не выбраны. Щелкните компонент, чтобы просмотреть его свойства.", - "createTab": "Вставка", - "searchPlaceHolder": "Поиск компонентов или модулей", - "uiComponentTab": "Компоненты", - "extensionTab": "Удлинители", - "modulesTab": "Модули", - "moduleListTitle": "Модули", - "pluginListTitle": "Плагины", - "emptyModules": "Модули - это многократно используемые приложения Mikro-Apps. Вы можете внедрить их в свое приложение.", - "searchNotFound": "Не можете найти нужный компонент?", - "emptyPlugins": "Плагины не добавлены", - "contactUs": "Свяжитесь с нами", - "issueHere": "здесь.", - }, - "prop": { - ...en.prop, - - "expand": "Развернуть", - "columns": "Колонны", - "videokey": "Видеоключ", - "rowSelection": "Выбор строки", - "toolbar": "Панель инструментов", - "pagination": "Пагинация", - "logo": "Логотип", - "style": "Стиль", - "inputs": "Входы", - "meta": "Метаданные", - "data": "Данные", - "hide": "Скрыть", - "loading": "Загрузка", - "disabled": "Инвалид", - "placeholder": "Место для размещения", - "showClear": "Показать кнопку Очистить", - "showSearch": "С возможностью поиска", - "defaultValue": "Значение по умолчанию", - "required": "Обязательное поле", - "readOnly": "Только чтение", - "readOnlyTooltip": "Компоненты, доступные только для чтения, отображаются нормально, но не могут быть изменены.", - "minimum": "Минимум", - "maximum": "Максимальный", - "regex": "Regex", - "minLength": "Минимальная длина", - "maxLength": "Максимальная длина", - "height": "Высота", - "width": "Ширина", - "selectApp": "Выберите приложение", - "showCount": "Показать счет", - "textType": "Тип текста", - "customRule": "Пользовательское правило", - "customRuleTooltip": "Непустая строка указывает на ошибку; пустая или нулевая означает, что проверка пройдена. Пример:", - "manual": "Руководство", - "map": "Карта", - "json": "JSON", - "use12Hours": "Используйте 12-часовой формат", - "hourStep": "Часовой шаг", - "minuteStep": "Минутный шаг", - "secondStep": "Второй шаг", - "minDate": "Минимальная дата", - "maxDate": "Максимальная дата", - "minTime": "Минимальное время", - "maxTime": "Максимальное время", - "type": "Тип", - "showLabel": "Показать ярлык", - "showHeader": "Показать заголовок", - "showBody": "Показать тело", - "showSider": "Шоу Сайдер", - "innerSider": "Внутренние страницы", - "showFooter": "Показать нижний колонтитул", - "maskClosable": "Нажмите \"Снаружи\", чтобы закрыть", - "toggleClose": "Включить кнопку закрытия", - "showMask": "Показать маску", - "textOverflow": "Переполнение текста", - "scrollbar": "Показать полосы прокрутки", - "siderScrollbar": "Показать полосы прокрутки в сайдере", - "siderRight": "Сидящий справа", - "siderWidth": "Ширина сидера", - "siderWidthTooltip": "Ширина сайдера поддерживает проценты (%) и пиксели (px).", - "siderCollapsedWidth": "Развернутая ширина Sider", - "siderCollapsedWidthTooltip": "Ширина свернутого сидера поддерживает проценты (%) и пиксели (px).", - "siderCollapsible": "Sider Collapsible", - "siderCollapsed": "Сайдер рухнул", - "contentScrollbar": "Показать полосы прокрутки в содержимом", - "appID": "App Id", - "showApp": "Покажите приложение в области содержания", - "showAppTooltip": "Вы можете отображать целые приложения в области содержимого. Обратите внимание, что для модулей мы не поддерживаем входы, выходы, события и методы.", - "baseURL": "Базовый URL-адрес API", - "horizontal": "Горизонтальный", - "minHorizontalWidth": "Минимальная горизонтальная ширина", - "component": "Собственные идентификаторы компонентов", - "className": "Имя класса CSS", - "dataTestId": "Индивидуальный идентификатор", - "preventOverwriting": "Предотвращение перезаписи стилей", - "color": "Цвет", - "horizontalGridCells": "Ячейки горизонтальной сетки", - "verticalGridCells": "Вертикальные ячейки сетки", - "showHorizontalScrollbar": "Показать горизонтальную полосу прокрутки", - "showVerticalScrollbar": "Показать вертикальную полосу прокрутки", - "timeZone": "TimeZone", - }, - "autoHeightProp": { - ...en.autoHeightProp, - - "auto": "Автомобиль", - "fixed": "Исправлено", - }, - "textOverflowProp": { - ...en.textOverflowProp, - - "ellipsis": "Наведение мыши", - "wrap": "Обертывание", - }, - "labelProp": { - ...en.labelProp, - - "text": "Этикетка", - "tooltip": "Всплывающая подсказка", - "position": "Позиция", - "collapse": "Свернуть", - "left": "Слева", - "right": "Справа", - "top": "Топ", - "align": "Выравнивание", - "width": "Ширина", - "widthTooltip": "Ширина этикетки поддерживает проценты (%) и пиксели (px).", - }, - "eventHandler": { - ...en.eventHandler, - - "eventHandlers": "Обработчики событий", - "emptyEventHandlers": "Нет обработчиков событий", - "incomplete": "Неполный выбор", - "inlineEventTitle": "На {eventName}", - "event": "Событие", - "action": "Действие", - "noSelect": "Нет выбора", - "runQuery": "Запуск запроса данных", - "selectQuery": "Выберите запрос данных", - "controlComp": "Управление компонентом", - "runScript": "Выполнить JavaScript", - "runScriptPlaceHolder": "Введите код здесь", - "component": "Компонент", - "method": "Метод", - "setTempState": "Установите значение временного состояния", - "state": "Государство", - "triggerModuleEvent": "Запуск события модуля", - "moduleEvent": "Модуль Событие", - "goToApp": "Перейти к другому приложению", - "queryParams": "Параметры запроса", - "hashParams": "Параметры хэша", - "showNotification": "Показать уведомление", - "text": "Текст", - "level": "Уровень", - "duration": "Продолжительность", - "notifyDurationTooltip": "Единицей времени может быть 's' (секунда, по умолчанию) или 'ms' (миллисекунда). Максимальная продолжительность - {max} секунд", - "goToURL": "Открыть URL-адрес", - "openInNewTab": "Открыть в новой вкладке", - "copyToClipboard": "Копирование значения в буфер обмена", - "copyToClipboardValue": "Значение", - "export": "Экспортные данные", - "exportNoFileType": "Без выбора (необязательно)", - "fileName": "Имя файла", - "fileNameTooltip": "Включите расширение, чтобы указать тип файла, например, 'image.png'.", - "fileType": "Тип файла", - "condition": "Бегите только тогда, когда...", - "conditionTooltip": "Запускайте обработчик события только тогда, когда это условие оценивается как 'true'", - "debounce": "Отсрочка для", - "throttle": "Дроссель для", - "slowdownTooltip": "Используйте дебафф или дроссель для управления частотой срабатывания действий. Единицей времени может быть 'ms' (миллисекунда, по умолчанию) или 's' (секунда).", - "notHandledError": "Не обрабатывается", - "currentApp": "Текущий", - "inputEventHandlers": "Обработчики событий ввода", - "inputEventHandlersDesc": "Обработчики событий, связанных с пользовательским вводом", - "buttonEventHandlers": "Обработчики событий кнопок", - "buttonEventHandlersDesc": "Обработчики событий, связанных с нажатием кнопок", - "changeEventHandlers": "Изменение обработчиков событий", - "changeEventHandlersDesc": "Обработчики событий, связанных с изменением значений", - "editedEventHandlers": "Обработчики событий редактирования", - "editedEventHandlersDesc": "Обработчики событий, связанных с редактированием состояния элементов", - "clickEventHandlers": "Обработчики событий щелчка мыши", - "clickEventHandlersDesc": "Обработчики событий, связанные с кликами", - "keyDownEventHandlers": "Обработчики событий нажатия клавиш", - "keyDownEventHandlersDesc": "Обработчики событий, связанные с событиями нажатия клавиш", - "checkboxEventHandlers": "Обработчики событий флажка", - "checkboxEventHandlersDesc": "Обработчики событий, связанные с изменением флажка", - "dragEventHandlers": "Обработчики событий перетаскивания", - "dragEventHandlersDesc": "Обработчики событий, связанные с событиями перетаскивания", - "elementEventHandlers": "Обработчики событий элементов", - "elementEventHandlersDesc": "Обработчики событий, связанные с общими событиями элементов данных", - "mediaEventHandlers": "Обработчики медиасобытий", - "mediaEventHandlersDesc": "Обработчики событий, связанных с медиасобытиями", - "scannerEventHandlers": "Обработчики событий сканера", - "scannerEventHandlersDesc": "Обработчики событий, связанные с событиями сканера", - "chartEventHandlers": "Обработчики событий диаграммы", - "chartEventHandlersDesc": "Обработчики событий, связанные с событиями диаграммы", - "geoMapEventHandlers": "Обработчики событий геокарты", - "geoMapEventHandlersDesc": "Обработчики событий, связанные с событиями геокарты", - "stepEventHandlers": "Обработчики событий шагов", - "stepEventHandlersDesc": "Обработчики событий, связанные с событиями пользовательского интерфейса Step", - "shareEventHandlers": "Общие обработчики событий", - "shareEventHandlersDesc": "Обработчики событий, связанные с событиями совместного доступа", - "selectEventHandlers": "Выберите обработчики событий", - "selectEventHandlersDesc": "Обработчики событий, связанные с событиями выбора", - "meetingEventHandlers": "Обработчики событий встречи", - "meetingEventHandlersDesc": "Обработчики событий, связанные с событиями встреч", - "collaborationEventHandlers": "Обработчики событий совместной работы", - "collaborationEventHandlersDesc": "Обработчики событий, связанные с событиями совместной работы", - "set": "Установите", - "clear": "Очистить", - "reset": "Сброс", - "messageType": "Тип сообщения", - "placement": "Размещение", - "description": "Описание", - }, - "event": { - ...en.event, - - "submit": "Отправить", - "submitDesc": "Триггеры при отправке", - "change": "Изменить", - "changeDesc": "Триггеры при изменении значений", - "focus": "Фокус", - "focusDesc": "Триггеры на фокусе", - "blur": "Пятно", - "blurDesc": "Триггеры на размытии", - "click": "Нажмите", - "clickDesc": "Триггеры при нажатии", - "doubleClick": "Двойной щелчок", - "doubleClickDesc": "Триггеры при двойном щелчке", - "rightClick": "Щелкните правой кнопкой мыши", - "rightClickDesc": "Триггеры при нажатии правой кнопки мыши", - "keyDown": "Ключ вниз", - "keyDownDesc": "Триггеры при нажатии клавиш", - "select": "Выберите", - "selectDesc": "Триггеры на выбор", - "checked": "Проверено", - "checkedDesc": "Триггеры при установке флажка", - "unchecked": "Непроверенные", - "uncheckedDesc": "Триггеры при снятии флажка", - "drag": "Drag", - "dragDesc": "Триггеры при перетаскивании", - "drop": "Капля", - "dropDesc": "Триггеры при падении", - "open": "Открыть", - "openDesc": "Триггеры при открытии", - "mute": "Отключить звук", - "muteDesc": "Триггеры при отключении микрофона", - "unmute": "Отключить", - "unmuteDesc": "Триггеры при отключении микрофона", - "showCamera": "Показать камеру", - "showCameraDesc": "Срабатывает при включении функции \"Показать камеру\".", - "hideCamera": "Спрятать камеру", - "hideCameraDesc": "Срабатывает при выключении функции \"Показать камеру\".", - "shareScreen": "Экран акций", - "shareScreenDesc": "Триггеры на экране обмена", - "shareScreenEnd": "Поделиться \"Экранный конец", - "shareScreenEndDesc": "Триггеры на конце экрана обмена", - "shareControl": "Контроль акций", - "shareControlDesc": "Триггеры по контролю над акциями", - "shareControlEnd": "Контроль акций Конец", - "shareControlEndDesc": "Триггеры на конце управления акциями", - "shareContent": "Поделиться содержимым", - "shareContentDesc": "Триггеры при совместном использовании контента", - "shareContentEnd": "Поделиться контентом Конец", - "shareContentEndDesc": "Триггеры на конце общего контента", - "stopShare": "Остановить акцию", - "stopShareDesc": "Триггеры при остановке акции", - "meetingStart": "Начало встречи", - "meetingStartDesc": "Триггеры при начале совещания", - "meetingEnd": "Окончание встречи", - "meetingEndDesc": "Триггеры на стороне встречи", - "meetingJoin": "Встреча Присоединяйтесь", - "meetingJoinDesc": "Триггеры при присоединении к собранию", - "meetingLeave": "Отпуск на совещании", - "meetingLeaveDesc": "Триггеры на время отпуска", - "play": "Играть", - "playDesc": "Триггеры в игре", - "pause": "Пауза", - "pauseDesc": "Триггеры на паузе", - "ended": "Окончание", - "endedDesc": "Триггеры на Ended", - "step": "Шаг", - "stepDesc": "Триггеры на шаге", - "next": "Следующий", - "nextDesc": "Триггеры на следующей", - "finished": "Готовые", - "finishedDesc": "Триггеры на готовом", - "saved": "Сохранено", - "savedDesc": "Триггеры при сохранении элемента", - "edited": "Отредактировано", - "editedDesc": "Триггеры при редактировании элемента", - "geoMapMove": "Перемещение по географической карте", - "geoMapMoveDesc": "Триггеры при перемещении пользователем геокарты", - "geoMapZoom": "Масштаб геокарты", - "geoMapZoomDesc": "Триггеры при изменении масштаба геокарты", - "geoMapSelect": "Выбор географической карты", - "geoMapSelectDesc": "Триггеры при выборе пользователем элемента на геокарте", - "scannerSuccess": "Успех сканера", - "scannerSuccessDesc": "Срабатывает при успешном сканировании сканером", - "scannerError": "Ошибка сканера", - "scannerErrorDesc": "Триггеры, когда сканер не может выполнить сканирование", - "chartZoom": "Масштаб диаграммы", - "chartZoomDesc": "Триггеры при масштабировании графика", - "chartHover": "Наведение диаграммы", - "chartHoverDesc": "Триггеры при наведении диаграммы", - "chartSelect": "Выбор диаграммы", - "chartSelectDesc": "Триггеры при выборе графика", - "chartDeselect": "Отмена выбора диаграммы", - "chartDeselectDesc": "Триггеры на графике Отмена выбора", - "close": "Закрыть", - "closeDesc": "Триггеры при закрытии", - "parse": "Разбор", - "parseDesc": "Триггеры при разборе", - "success": "Успех", - "successDesc": "Триггеры успеха", - "delete": "Удалить", - "deleteDesc": "Триггеры при удалении", - "mention": "Упоминание", - "mentionDesc": "Триггеры при упоминании", - "search": "Поиск", - "searchDesc": "Триггеры в поиске", - "selectedChange": "Изменение выбора", - "selectedChangeDesc": "Триггеры при измененном выборе", - "clickExtra": "Нажмите на Действие", - "clickExtraDesc": "Триггеры при щелчке на дополнительном элементе", - "start": "Начало", - "startDesc": "Триггеры при запуске", - "resume": "Резюме", - "resumeDesc": "Триггеры в резюме", - "countdown": "Обратный отсчет", - "countdownDesc": "Триггеры по окончании обратного отсчета", - "reset": "Сброс заканчивается", - "resetDesc": "Срабатывания по таймеру сброса", - "refresh": "Обновить", - "refreshDesc": "Триггеры при обновлении", - }, - "style": { - ...en.style, - - "boxShadowColor": "Цвет теней", - "boxShadow": "Тень от коробки", - "opacity": "Непрозрачность", - "animation": "Анимация", - "animationIterationCount": "Количество итераций анимации", - "animationDelay": "Задержка анимации", - "animationDuration": "Продолжительность анимации", - "resetTooltip": "Сброс стилей. Очистите поле ввода, чтобы сбросить индивидуальный стиль.", - "textColor": "Цвет текста", - "contrastText": "Контрастный цвет текста", - "generated": "Создано", - "customize": "Настроить", - "staticText": "Статический текст", - "accent": "Акцент", - "validate": "Сообщение о проверке", - "border": "Цвет границы", - "borderRadius": "Радиус границы", - "borderWidth": "Ширина границы", - "borderStyle": "Пограничный стиль", - "background": "Цвет фона", - "headerBackground": "Цвет фона заголовка", - "siderBackground": "Цвет фона сидера", - "footerBackground": "Цвет фона нижнего колонтитула", - "fill": "Наполнение", - "track": "Трек", - "links": "Ссылки", - "thumb": "Большой палец", - "thumbBorder": "Граница большого пальца", - "checked": "Проверено", - "unchecked": "Непроверенные", - "handle": "Ручка", - "tags": "Теги", - "tagsText": "Теги Текст", - "multiIcon": "Значок мультиселектора", - "tabText": "Вкладка Текст", - "tabAccent": "Вкладка Акцент", - "checkedBackground": "Проверено Цвет фона", - "uncheckedBackground": "Цвет фона не отмечен", - "uncheckedBorder": "Цвет границы не отмечен", - "indicatorBackground": "Цвет фона индикатора", - "tableCellText": "Текст для сотового телефона", - "selectedRowBackground": "Цвет фона выделенной строки", - "hoverRowBackground": "Цвет фона наведенной строки", - "hoverBackground": "Цвет фона при наведении", - "textTransform": "Преобразование текста", - "textDecoration": "Украшение текста", - "alternateRowBackground": "Цвет фона альтернативной строки", - "tableHeaderBackground": "Цвет фона заголовка", - "tableHeaderText": "Текст заголовка", - "toolbarBackground": "Цвет фона панели инструментов", - "toolbarText": "Текст панели инструментов", - "pen": "Ручка", - "footerIcon": "Значок нижнего колонтитула", - "tips": "Советы", - "margin": "Маржа", - "padding": "Набивка", - "marginLeft": "Левое поле", - "marginRight": "Маржа справа", - "marginTop": "Маргинальный верх", - "marginBottom": "Маржа нижняя", - "containerHeaderPadding": "Подшивка заголовков", - "containerFooterPadding": "Нижний колонтитул", - "containerSiderPadding": "Набивка сидера", - "containerBodyPadding": "Набивка корпуса", - "minWidth": "Минимальная ширина", - "aspectRatio": "Соотношение сторон", - "text": "Текст", - "textSize": "Размер текста", - "textWeight": "Вес текста", - "fontFamily": "Семейство шрифтов", - "fontStyle": "Стиль шрифта", - "backgroundImage": "Фоновое изображение", - "backgroundImageRepeat": "Повторение фона", - "backgroundImageSize": "Размер фона", - "backgroundImagePosition": "Фоновая позиция", - "backgroundImageOrigin": "Происхождение фона", - "headerBackgroundImage": "Фоновое изображение", - "headerBackgroundImageRepeat": "Повтор фонового изображения", - "headerBackgroundImageSize": "Размер фонового изображения", - "headerBackgroundImagePosition": "Положение фонового изображения", - "headerBackgroundImageOrigin": "Происхождение фонового изображения", - "footerBackgroundImage": "Фоновое изображение", - "footerBackgroundImageRepeat": "Повтор фонового изображения", - "footerBackgroundImageSize": "Размер фонового изображения", - "footerBackgroundImagePosition": "Положение фонового изображения", - "footerBackgroundImageOrigin": "Происхождение фонового изображения", - "rotation": "Вращение", - "alternateBackground": "Альтернативный цвет фона", - "headerText": "Цвет текста заголовка", - "labelColor": "Цвет этикетки", - "label": "Цвет этикетки", - "lineHeight": "Высота линии", - "subTitleColor": "Цвет подзаголовка", - "titleText": "Цвет названия", - "success": "Цвет успеха", - "siderBackgroundImage": "Фоновое изображение сидера", - "siderBackgroundImageRepeat": "Повтор фонового изображения в сидере", - "siderBackgroundImageSize": "Размер фонового изображения Sider", - "siderBackgroundImagePosition": "Положение фонового изображения в сайдере", - "siderBackgroundImageOrigin": "Происхождение фонового изображения Sider", - "activeBackground": "Активный цвет фона", - "labelBackground": "Цвет фона этикетки", - - "radiusTip": "Указывает радиус углов элемента. Пример: 5px, 50% или 1em.", - "gapTip": "Указывает расстояние между строками и столбцами в сетке или flex-контейнере. Пример: 10px, 1rem или 5%.", - "cardRadiusTip": "Определяет радиус углов для карточных компонентов. Пример: 10px, 15px.", - "borderWidthTip": "Указывает ширину границы элемента. Пример: 1px, 0.5em или тонкая.", - "borderStyleTip": "Определяет стиль границы. Пример: solid, dashed, dotted или none.", - "marginTip": "Определяет внешний отступ вокруг элемента. Пример: 10px, 2em или auto. Можно комбинировать: 0px 20px или указать для всех 4 сторон: 0px 1px 5px 2px.", - "directionTip": "Указывает направление макета. Пример: row, column или row-reverse.", - "detailSizeTip": "Указывает размер определенных элементов в макете. Пример: 10px, 2em или 80%.", - "chartOpacityTip": "Указывает прозрачность диаграммы. Пример: 1 (непрозрачный), 0.5 (50% прозрачный).", - "chartBoxShadowTip": "Определяет тень, отбрасываемую диаграммой. Пример: 0px 4px 8px rgba(0, 0, 0, 0.3).", - "chartBorderStyleTip": "Определяет стиль границы диаграммы. Пример: solid, dashed, dotted.", - "chartBorderRadiusTip": "Указывает радиус углов границы диаграммы. Пример: 10px, 20%.", - "chartBorderWidthTip": "Указывает ширину границы диаграммы. Пример: 2px, 0.5em.", - "chartTextSizeTip": "Указывает размер шрифта текста диаграммы. Пример: 16px, 1em, 120%.", - "chartTextWeightTip": "Указывает насыщенность текста диаграммы. Пример: normal, bold или 700.", - "chartFontFamilyTip": "Указывает семейство шрифтов для текста диаграммы. Пример: Arial, Helvetica или 'Times New Roman'.", - "chartFontStyleTip": "Указывает стиль шрифта текста диаграммы. Пример: normal, italic или oblique.", - "animationIterationCountTip": "Указывает, сколько раз должна выполняться анимация. Пример: infinite, 1 или 3.", - "opacityTip": "Указывает уровень прозрачности элемента. Пример: 1 (непрозрачный), 0.5 (50% прозрачный), 0 (невидимый).", - "boxShadowColorTip": "Указывает цвет тени. Пример: rgba(0, 0, 0, 0.3), #FF5733.", - "chartBackgroundColorTip": "Указывает цвет фона диаграммы. Пример: #FFFFFF, rgba(255, 255, 255, 0.8).", - "chartGradientColorTip": "Указывает цвета градиента для фона диаграммы. Пример: linear-gradient(to right, #ff7e5f, #feb47b).", - "chartShadowColorTip": "Указывает цвет тени диаграммы. Пример: rgba(0, 0, 0, 0.2), #333333.", - "chartBorderColorTip": "Указывает цвет границы диаграммы. Пример: #000000, rgba(0, 0, 0, 0.5).", - "chartTextColorTip": "Указывает цвет текста диаграммы. Пример: #333333, rgba(51, 51, 51, 1).", - "boxShadowTip": "Определяет тень, отбрасываемую элементом. Пример: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", - "animationDelayTip": "Указывает задержку перед началом анимации. Пример: 1s, 500ms, 0.", - "animationDurationTip": "Указывает продолжительность анимации. Пример: 2s, 3s, 500ms.", - "paddingTip": "Определяет внутренний отступ элемента. Пример: 10px, 2em, 5%. Можно комбинировать: 0px 20px или указать для всех 4 сторон: 10px 21px 5px 20px.", - "containerHeaderPaddingTip": "Указывает внутренний отступ для заголовка контейнера. Пример: 10px, 1rem.", - "containerSiderPaddingTip": "Указывает внутренний отступ для боковой панели контейнера. Пример: 8px, 1em.", - "containerFooterPaddingTip": "Указывает внутренний отступ для нижнего колонтитула контейнера. Пример: 12px, 1rem.", - "containerBodyPaddingTip": "Указывает внутренний отступ для содержимого контейнера. Пример: 15px, 2em.", - "textSizeTip": "Указывает размер текста. Пример: 14px, 1.2em, 110%.", - "textWeightTip": "Указывает насыщенность текста. Пример: normal, bold, 400.", - "fontFamilyTip": "Указывает семейство шрифтов текста. Пример: Arial, Verdana, 'Courier New'.", - "textDecorationTip": "Определяет оформление текста. Пример: underline, line-through, none.", - "textTransformTip": "Указывает регистр текста. Пример: uppercase, lowercase, capitalize.", - "fontStyleTip": "Указывает стиль шрифта текста. Пример: normal, italic, oblique.", - "backgroundImageTip": "Указывает фоновое изображение элемента. Пример: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", - "headerBackgroundImageTip": "Указывает фоновое изображение для заголовка. Пример: url('header.jpg').", - "footerBackgroundImageTip": "Указывает фоновое изображение для нижнего колонтитула. Пример: url('footer.jpg').", - "backgroundImageRepeatTip": "Указывает, как повторяется фоновое изображение. Пример: no-repeat, repeat-x, repeat-y.", - "headerBackgroundImageRepeatTip": "Указывает, как повторяется фоновое изображение заголовка. Пример: repeat-x, no-repeat.", - "footerBackgroundImageRepeatTip": "Указывает, как повторяется фоновое изображение нижнего колонтитула. Пример: repeat-y, no-repeat.", - "backgroundImageSizeTip": "Указывает размер фонового изображения. Пример: cover, contain, 50% 50%.", - "backgroundImagePositionTip": "Указывает позицию фонового изображения. Пример: center, top right, 10% 20%.", - "backgroundImageOriginTip": "Указывает область размещения фонового изображения. Пример: padding-box, border-box, content-box.", - "headerBackgroundImageOriginTip": "Указывает область размещения фонового изображения заголовка. Пример: padding-box, border-box, content-box.", - "footerBackgroundImageOriginTip": "Указывает область размещения фонового изображения нижнего колонтитула. Пример: padding-box, border-box, content-box.", - "rotationTip": "Указывает угол поворота элемента. Пример: 45deg, 90deg, -180deg.", - "lineHeightTip": "Указывает высоту строки текста. Пример: 1.5, 2, 120%." - - }, - "export": { - ...en.export, - - "hiddenDesc": "Если true, компонент будет скрыт", - "disabledDesc": "Если true, компонент отключен и неинтерактивен.", - "visibleDesc": "Если true, то компонент виден", - "inputValueDesc": "Текущее значение входа", - "invalidDesc": "Указывает, является ли значение недействительным", - "placeholderDesc": "Текст-заглушка, когда значение не задано", - "requiredDesc": "Если true, необходимо ввести действительное значение", - "submitDesc": "Отправить форму", - "richTextEditorValueDesc": "Текущее значение редактора", - "richTextEditorReadOnlyDesc": "Если true, редактор доступен только для чтения", - "richTextEditorHideToolBarDesc": "Если true, панель инструментов будет скрыта", - "jsonEditorDesc": "Текущие данные в формате JSON", - "sliderValueDesc": "Текущее выбранное значение", - "sliderMaxValueDesc": "Максимальное значение ползунка", - "sliderMinValueDesc": "Минимальное значение ползунка", - "sliderStartDesc": "Значение выбранной начальной точки", - "sliderEndDesc": "Значение выбранной конечной точки", - "ratingValueDesc": "Текущий выбранный рейтинг", - "ratingMaxDesc": "Максимальное номинальное значение", - "datePickerValueDesc": "Текущая выбранная дата", - "datePickerFormattedValueDesc": "Форматирование выбранной даты", - "datePickerTimestampDesc": "Временная метка выбранной даты", - "dateRangeStartDesc": "Дата начала диапазона", - "dateRangeEndDesc": "Дата окончания диапазона", - "dateRangeStartTimestampDesc": "Временная метка даты начала", - "dateRangeEndTimestampDesc": "Временная метка даты окончания", - "dateRangeFormattedValueDesc": "Форматированный диапазон дат", - "dateRangeFormattedStartValueDesc": "Отформатированная дата начала", - "dateRangeFormattedEndValueDesc": "Форматированная дата окончания", - "timePickerValueDesc": "Текущее выбранное время", - "timePickerFormattedValueDesc": "Форматированное выбранное время", - "timeRangeStartDesc": "Время начала диапазона", - "timeRangeEndDesc": "Время окончания диапазона", - "timeRangeFormattedValueDesc": "Форматированный диапазон времени", - "timeRangeFormattedStartValueDesc": "Форматированное время начала", - "timeRangeFormattedEndValueDesc": "Форматированное время окончания", - "timeZone": "Часовой пояс", - "timeZoneDesc": "Часовой пояс выбранной даты", - }, - "validationDesc": { - ...en.validationDesc, - - "email": "Пожалуйста, введите действительный адрес электронной почты", - "url": "Пожалуйста, введите действительный URL-адрес", - "regex": "Пожалуйста, сопоставьте указанный образец", - "maxLength": "Слишком много символов, текущий: {length}, максимальный: {maxLength}", - "minLength": "Недостаточно символов, текущий: {length}, минимальный: {minLength}", - "maxValue": "Значение превышает максимальное, текущее: {value}, максимум: {max}", - "minValue": "Значение ниже минимального, текущее: {value}, минимальное: {min}", - "maxTime": "Время превышает максимальное, текущее: {time}, максимум: ___МЕСТОДЕРЖАТЕЛЬ1___", - "minTime": "Время ниже минимального, текущее: {time}, минимум: ___МЕСТОДЕРЖАТЕЛЬ1___", - "maxDate": "Дата превышает максимум, текущая: {date}, максимум: {maxDate}", - "minDate": "Дата ниже минимальной, текущая: {date}, минимальный: ___МЕСТОДЕРЖАТЕЛЬ1___", - }, - "query": { - ...en.query, - - "noQueries": "Запросы данных недоступны.", - "queryTutorialButton": "Просмотреть документы {value}", - "datasource": "Ваши источники данных", - "newDatasource": "Новый источник данных", - "generalTab": "Общие сведения", - "notificationTab": "Уведомление", - "advancedTab": "Расширенный", - "showFailNotification": "Показать уведомление о неудаче", - "failCondition": "Условия отказа", - "failConditionTooltip1": "Настройте условия отказа и соответствующие уведомления.", - "failConditionTooltip2": "Если какое-либо условие возвращается к истине, запрос помечается как неудачный и вызывает соответствующее уведомление.", - "showSuccessNotification": "Показать уведомление об успехе", - "successMessageLabel": "Сообщение об успехе", - "successMessage": "Успешный запуск", - "notifyDuration": "Продолжительность", - "notifyDurationTooltip": "Длительность уведомления. Единицей времени может быть 's' (секунда, по умолчанию) или 'ms' (миллисекунда). Значение по умолчанию - {default}s. Максимальное значение - {max}s.", - "successMessageWithName": "{name} выполнение успешно", - "failMessageWithName": "{name} выполнить не удалось: {result}", - "showConfirmationModal": "Показать модальное окно подтверждения перед запуском", - "confirmationMessageLabel": "Подтверждающее сообщение", - "confirmationMessage": "Вы уверены, что хотите запустить этот запрос данных?", - "newQuery": "Новый запрос данных", - "newFolder": "Новая папка", - "recentlyUsed": "Недавно использованные", - "folder": "Папка", - "folderNotEmpty": "Папка не пуста", - "dataResponder": "Ответчик данных", - "tempState": "Временное состояние", - "transformer": "Трансформатор", - "quickRestAPI": "Запрос REST", - "quickStreamAPI": "Запрос потока", - "quickGraphql": "Запрос на GraphQL", - "lowcoderAPI": "Lowcoder API", - "executeJSCode": "Выполнение кода JavaScript", - "importFromQueryLibrary": "Импорт из библиотеки запросов", - "importFromFile": "Импорт из файла", - "triggerType": "Срабатывает, когда...", - "triggerTypeAuto": "При изменении входных данных или после загрузки приложения (страницы)", - "triggerTypePageLoad": "После загрузки приложения (страницы)", - "triggerTypeManual": "Только при ручном запуске", - "triggerTypeInputChange": "Когда изменяются входные данные", - "triggerTypeQueryExec": "После выполнения запроса", - "triggerTypeTimeout": "После загрузки приложения (страницы) и таймаута", - "delayTime": "Время задержки", - "chooseDataSource": "Выберите источник данных", - "method": "Метод", - "updateExceptionDataSourceTitle": "Обновление неработающего источника данных", - "updateExceptionDataSourceContent": "Обновите следующий запрос с тем же источником данных:", - "update": "Обновление", - "disablePreparedStatement": "Отключение подготовленных отчетов", - "disablePreparedStatementTooltip": "Отключение подготовленных операторов позволяет генерировать динамический SQL, но увеличивает риск SQL-инъекций", - "timeout": "Тайм-аут после", - "timeoutTooltip": "Единица измерения по умолчанию: мс. Поддерживаемые единицы ввода: мс, с. Значение по умолчанию: {defaultSeconds} секунд. Максимальное значение: {maxSeconds} секунд. Например, 300 (т.е. 300 мс), 800 мс, 5 с.", - "periodic": "Периодически выполняйте этот запрос данных", - "periodicTime": "Период", - "periodicTimeTooltip": "Период между последовательными выполнениями. Единица по умолчанию: мс. Поддерживаемые единицы ввода: мс, с. Минимальное значение: 100 мс. Периодическое выполнение отключается при значениях менее 100 мс. Например, 300 (т. е. 300 мс), 800 мс, 5 с.", - "cancelPrevious": "Игнорировать результаты предыдущих незавершенных казней", - "cancelPreviousTooltip": "Если запускается новое выполнение, то результаты предыдущих незавершенных выполнений будут проигнорированы, если они не завершились, и эти проигнорированные выполнения не будут вызывать список событий запроса.", - "dataSourceStatusError": "Если запускается новое выполнение, то результат предыдущих незавершенных выполнений будет проигнорирован, а проигнорированные выполнения не будут вызывать список событий запроса.", - "success": "Успех", - "fail": "Отказ", - "successDesc": "Срабатывает при успешном выполнении", - "failDesc": "Срабатывает при неудачном выполнении", - "fixedDelayError": "Запрос не выполняется", - "execSuccess": "Успешный запуск", - "execFail": "Запуск не удался", - "execIgnored": "Результаты этого запроса были проигнорированы", - "deleteSuccessMessage": "Успешно удалено. Вы можете использовать {undoKey}, чтобы отменить удаление", - "dataExportDesc": "Данные, полученные в текущем запросе", - "codeExportDesc": "Код состояния текущего запроса", - "successExportDesc": "Успешно ли был выполнен текущий запрос", - "messageExportDesc": "Информация, полученная по текущему запросу", - "extraExportDesc": "Другие данные в текущем запросе", - "isFetchingExportDesc": "Является ли текущий запрос запросом", - "runTimeExportDesc": "Текущее время выполнения запроса (мс)", - "latestEndTimeExportDesc": "Последнее время работы", - "triggerTypeExportDesc": "Тип триггера", - "chooseResource": "Выберите ресурс", - "createDataSource": "Создайте новый источник данных", - "editDataSource": "Редактировать", - "datasourceName": "Имя", - "datasourceNameRuleMessage": "Введите имя источника данных", - "generalSetting": "Общие настройки", - "advancedSetting": "Дополнительные настройки", - "port": "Порт", - "portRequiredMessage": "Пожалуйста, введите порт", - "portErrorMessage": "Пожалуйста, введите правильный порт", - "connectionType": "Тип соединения", - "regular": "Обычный", - "host": "Хозяин", - "hostRequiredMessage": "Введите доменное имя или IP-адрес хоста", - "userName": "Имя пользователя", - "password": "Пароль", - "encryptedServer": "-------- Зашифровано на стороне сервера --------", - "uriRequiredMessage": "Пожалуйста, введите URI", - "urlRequiredMessage": "Пожалуйста, введите URL", - "uriErrorMessage": "Пожалуйста, введите правильный URI", - "urlErrorMessage": "Пожалуйста, введите правильный URL-адрес", - "httpRequiredMessage": "Пожалуйста, введите http:// или https://", - "databaseName": "Имя базы данных", - "databaseNameRequiredMessage": "Введите имя базы данных", - "useSSL": "Используйте SSL", - "userNameRequiredMessage": "Пожалуйста, введите ваше имя", - "passwordRequiredMessage": "Пожалуйста, введите пароль", - "authentication": "Аутентификация", - "authenticationType": "Тип аутентификации", - "sslCertVerificationType": "Проверка сертификата SSL", - "sslCertVerificationTypeDefault": "Проверка сертификата ЦС", - "sslCertVerificationTypeSelf": "Проверка самоподписного сертификата", - "sslCertVerificationTypeDisabled": "Инвалид", - "selfSignedCert": "Самоподписанный сертификат", - "selfSignedCertRequireMsg": "Пожалуйста, введите ваш сертификат", - "enableTurnOffPreparedStatement": "Включение переключения подготовленных сообщений для запросов", - "enableTurnOffPreparedStatementTooltip": "Включить или отключить подготовленные операторы можно на вкладке \"Дополнительно\" запроса.", - "serviceName": "Название услуги", - "serviceNameRequiredMessage": "Пожалуйста, введите название вашей службы", - "useSID": "Используйте SID", - "connectSuccessfully": "Подключение успешно", - "saveSuccessfully": "Сохранено успешно", - "database": "База данных", - "cloudHosting": "Облачный хостинг Lowcoder не может получить доступ к локальным службам, используя 127.0.0.1 или localhost. Попробуйте подключиться к общедоступным сетевым источникам данных или используйте обратный прокси-сервер для частных сервисов.", - "notCloudHosting": "При развертывании на докер-хосте Lowcoder использует мостовые сети, поэтому 127.0.0.1 и localhost не подходят для адресов хостов. Для доступа к источникам данных на локальной машине см.", - "howToAccessHostDocLink": "Как получить доступ к API/БД хоста", - "returnList": "Возврат", - "chooseDatasourceType": "Выберите тип источника данных", - "viewDocuments": "Посмотреть документы", - "testConnection": "Тестовое подключение", - "save": "Сохранить", - "whitelist": "Список разрешений", - "whitelistTooltip": "При необходимости добавьте IP-адреса Lowcoder в список разрешенных источников данных.", - "address": "Адрес:", - "nameExists": "Имя {name} уже существует", - "jsQueryDocLink": "О запросе JavaScript", - "dynamicDataSourceConfigLoadingText": "Загрузка дополнительной конфигурации источника данных...", - "dynamicDataSourceConfigErrText": "Не удалось загрузить дополнительную конфигурацию источника данных.", - "retry": "Повторная попытка", - "categoryDatabase": "База данных", - "categoryBigdata": "Большие данные", - "categoryAi": "ИИ", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "Разработка приложений", - "categoryWorkflow": "Рабочий процесс", - "categoryMessaging": "Сообщения", - "categoryAssets": "Активы и Хранилище", - "categoryProjectManagement": "Управление проектами", - "categoryCrm": "CRM", - "categoryEcommerce": "Электронная коммерция", - "categoryWebscrapers": "Веб-скраперы", - "categoryDocumentHandling": "Создание отчетов и документов", - "categoryRPA": "Роботизированная автоматизация процессов", - "componentsUsingQueryTitle": "Использование запроса", - "componentsUsingQuery": "Где используется этот запрос", - "variables": "Переменные" - }, - "sqlQuery": { - ...en.sqlQuery, - - "keyValuePairs": "Пары ключ-значение", - "object": "Объект", - "allowMultiModify": "Разрешить модификацию нескольких рядов", - "allowMultiModifyTooltip": "Если выбрано, то обрабатываются все строки, удовлетворяющие условиям. В противном случае будет обработана только первая строка, удовлетворяющая условиям.", - "array": "Массив", - "insertList": "Список вставок", - "insertListTooltip": "Значения вставляются, если они не существуют", - "filterRule": "Правило фильтрации", - "updateList": "Список обновлений", - "updateListTooltip": "Значения, обновляемые по мере их существования, могут быть отменены теми же значениями списка вставки", - "sqlMode": "Режим SQL", - "guiMode": "Режим графического интерфейса", - "operation": "Операция", - "insert": "Вставка", - "upsert": "Вставка, но обновление при конфликте", - "update": "Обновление", - "delete": "Удалить", - "bulkInsert": "Объемная вставка", - "bulkUpdate": "Обновление объема", - "table": "Таблица", - "primaryKeyColumn": "Колонка первичного ключа", - }, - "EsQuery": { - ...en.EsQuery, - - "rawCommand": "Сырая команда", - "queryTutorialButton": "Просмотр документов API Elasticsearch", - "request": "Запрос", - }, - "googleSheets": { - ...en.googleSheets, - - "rowIndex": "Индекс строки", - "spreadsheetId": "Идентификатор электронной таблицы", - "sheetName": "Название листа", - "readData": "Чтение данных", - "appendData": "Добавить строку", - "updateData": "Обновить ряд", - "deleteData": "Удалить строку", - "clearData": "Чистый ряд", - "serviceAccountRequireMessage": "Пожалуйста, введите учетную запись", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Сортировать", - "sortPlaceholder": "Имя", - }, - "queryLibrary": { - ...en.queryLibrary, - - "export": "Экспорт в JSON", - "noInput": "Текущий запрос не имеет входа", - "inputName": "Имя", - "inputDesc": "Описание", - "emptyInputs": "Нет входов", - "clickToAdd": "Добавить", - "chooseQuery": "Выберите запрос", - "viewQuery": "Просмотр запроса", - "chooseVersion": "Выберите версию", - "latest": "Последние", - "publish": "Опубликовать", - "historyVersion": "Историческая версия", - "deleteQueryLabel": "Удалить запрос", - "deleteQueryContent": "Запрос нельзя восстановить после удаления. Удалить запрос?", - "run": "Запускайте", - "readOnly": "Только чтение", - "exit": "Выход", - "recoverAppSnapshotContent": "Восстановите текущий запрос до версии {version}", - "searchPlaceholder": "Поисковый запрос", - "allQuery": "Все запросы", - "deleteQueryTitle": "Удалить запрос", - "unnamed": "Безымянный", - "publishNewVersion": "Опубликовать новую версию", - "publishSuccess": "Успешная публикация", - "version": "Версия", - "desc": "Описание", - }, - "snowflake": { - ...en.snowflake, - - "accountIdentifierTooltip": "См.", - "extParamsTooltip": "Настройка дополнительных параметров подключения", - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - - "queryOrgUsers": "Запрос пользователей рабочей области", - }, - "redisQuery": { - ...en.redisQuery, - - "rawCommand": "Сырая команда", - "command": "Команда", - "queryTutorial": "Просмотр документов по командам Redis", - }, - "httpQuery": { - ...en.httpQuery, - - "bodyFormDataTooltip": "Если выбрано {type}, формат значения должен быть {object}. Пример: {example}", - "text": "Текст", - "file": "Файл", - "extraBodyTooltip": "Ключевые значения в Extra Body будут добавлены к телу с типом данных JSON или Form Data", - "forwardCookies": "Forward Cookies", - "forwardAllCookies": "Переслать все файлы cookie", - }, - "smtpQuery": { - ...en.smtpQuery, - - "attachment": "Вложение", - "attachmentTooltip": "Может использоваться с компонентом загрузки файлов, данные должны быть преобразованы в:", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Передатчик", - "recipient": "Получатель", - "carbonCopy": "Углеродная копия", - "blindCarbonCopy": "Слепая копия", - "subject": "Тема", - "content": "Содержание", - "contentTooltip": "Поддерживает ввод текста или HTML", - }, - "uiCompCategory": { - ...en.uiCompCategory, - - "dashboards": "Приборные панели и отчетность", - "layout": "Макет и навигация", - "forms": "Сбор данных и формы", - "collaboration": "Встречи и сотрудничество", - "projectmanagement": "Управление проектами", - "scheduling": "Календарь и планирование", - "documents": "Управление документами и файлами", - "itemHandling": "Обработка предметов и подписей", - "multimedia": "Мультимедиа и анимация", - "integration": "Интеграция и расширение", - }, - "uiComp": { - ...en.uiComp, - - "autoCompleteCompName": "Автокомплект", - "autoCompleteCompDesc": "Поле ввода, которое выдает подсказки по мере ввода, повышая удобство и точность.", - "autoCompleteCompKeywords": "предложения, автозаполнение, набор текста, ввод", - "inputCompName": "Вход", - "inputCompDesc": "Основное поле ввода текста, позволяющее пользователям вводить и редактировать текст.", - "inputCompKeywords": "текст, ввод, поле, редактирование", - "textAreaCompName": "Текстовая область", - "textAreaCompDesc": "Многострочный текст для ввода более длинного содержимого, например, комментариев или описаний.", - "textAreaCompKeywords": "многострочный, textarea, ввод, текст", - "passwordCompName": "Пароль", - "passwordCompDesc": "Защищенное поле для ввода пароля, маскирующее символы для обеспечения конфиденциальности.", - "passwordCompKeywords": "пароль, безопасность, ввод, скрытый", - "richTextEditorCompName": "Редактор насыщенного текста", - "richTextEditorCompDesc": "Продвинутый текстовый редактор с богатыми возможностями форматирования, такими как жирный шрифт, курсив и списки.", - "richTextEditorCompKeywords": "редактор, текст, форматирование, богатый контент", - "numberInputCompName": "Ввод номера", - "numberInputCompDesc": "Поле, предназначенное для ввода числовых данных, с элементами управления для увеличения и уменьшения значений.", - "numberInputCompKeywords": "число, ввод, инкремент, декремент", - "sliderCompName": "Слайдер", - "sliderCompDesc": "Графический компонент ползунка для выбора значения или диапазона в пределах определенной шкалы.", - "sliderCompKeywords": "ползунок, диапазон, ввод, графический", - "rangeSliderCompName": "Слайдер диапазона", - "rangeSliderCompDesc": "Ползунок с двумя ручками для выбора диапазона значений, полезный для фильтрации или установки границ.", - "rangeSliderCompKeywords": "диапазон, слайдер, двойная ручка, фильтр", - "ratingCompName": "Рейтинг", - "ratingCompDesc": "Компонент для сбора оценок пользователей, отображаемых в виде звезд.", - "ratingCompKeywords": "рейтинг, звезды, отзывы, вклад", - "switchCompName": "Переключатель", - "switchCompDesc": "Тумблер для принятия решений типа \"вкл/выкл\" или \"да/нет\".", - "switchCompKeywords": "тумблер, переключатель, вкл/выкл, управление", - "selectCompName": "Выберите", - "selectCompDesc": "Выпадающее меню для выбора из списка опций.", - "selectCompKeywords": "выпадающее, выбор, опции, меню", - "multiSelectCompName": "Multiselect", - "multiSelectCompDesc": "Компонент, позволяющий выбирать несколько элементов из выпадающего списка.", - "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", - "cascaderCompName": "Каскадер", - "cascaderCompDesc": "Многоуровневый выпадающий список для иерархического выбора данных, например, для выбора местоположения.", - "cascaderCompKeywords": "каскадный, иерархический, выпадающий, уровни", - "checkboxCompName": "Флажок", - "checkboxCompDesc": "Стандартный флажок для опций, которые можно выбрать или отменить.", - "checkboxCompKeywords": "флажок, опции, выбор, переключение", - "radioCompName": "Радио", - "radioCompDesc": "Радиокнопки для выбора одного варианта из набора, где допускается только один выбор.", - "radioCompKeywords": "радио, кнопки, выбор, единственный выбор", - "segmentedControlCompName": "Сегментированный контроль", - "segmentedControlCompDesc": "Элемент управления с сегментированными опциями для быстрого переключения между несколькими вариантами.", - "segmentedControlCompKeywords": "сегментированный, управление, переключение, опции", - "stepControlCompName": "Ступенчатое управление", - "stepControlCompDesc": "Элемент управления с опциями шагов, предлагающий визуальные шаги для таких приложений, как формы или мастера.", - "stepControlCompKeywords": "шаги, управление, переключение, опции", - "fileUploadCompName": "Загрузка файлов", - "fileUploadCompDesc": "Компонент для загрузки файлов с поддержкой перетаскивания и выбора файлов.", - "fileUploadCompKeywords": "файл, загрузка, перетаскивание, выбор", - "dateCompName": "Дата", - "dateCompDesc": "Компонент для выбора даты из интерфейса календаря.", - "dateCompKeywords": "дата, подборщик, календарь, выбрать", - "dateRangeCompName": "Диапазон дат", - "dateRangeCompDesc": "Компонент для выбора диапазона дат, полезный для систем бронирования или фильтров.", - "dateRangeCompKeywords": "daterange, выбор, бронирование, фильтр", - "timeCompName": "Время", - "timeCompDesc": "Компонент выбора времени для выбора определенного времени суток.", - "timeCompKeywords": "время, подборщик, выбрать, часы", - "timeRangeCompName": "Диапазон времени", - "timeRangeCompDesc": "Компонент для выбора диапазона времени, часто используемый в приложениях для составления расписаний.", - "timeRangeCompKeywords": "timerange, select, scheduling, duration", - "buttonCompName": "Кнопка формы", - "buttonCompDesc": "Универсальный компонент кнопки для отправки форм, запуска действий или навигации.", - "buttonCompKeywords": "кнопка, отправка, действие, навигация", - "meetingControlCompName": "Кнопка со значком", - "meetingCompDesc": "Кнопка для управления такими функциями, как начало, завершение, отключение звука или общий доступ.", - "meetingCompKeywords": "управление, кнопка, начало, конец", - "linkCompName": "Ссылка на", - "linkCompDesc": "Компонент отображения гиперссылок для навигации или ссылок на внешние ресурсы.", - "linkCompKeywords": "ссылка, гиперссылка, навигация, внешний", - "scannerCompName": "Сканер", - "scannerCompDesc": "Компонент для сканирования штрих-кодов, QR-кодов и других подобных данных.", - "scannerCompKeywords": "сканер, штрих-код, QR-код, сканирование", - "dropdownCompName": "Dropdown", - "dropdownCompDesc": "Выпадающее меню для компактного отображения списка опций.", - "dropdownCompKeywords": "выпадающее, меню, опции, выбор", - "toggleButtonCompName": "Кнопка переключения", - "toggleButtonCompDesc": "Кнопка, которая может переключаться между двумя состояниями или опциями.", - "toggleButtonCompKeywords": "тумблер, кнопка, переключатель, состояние", - "textCompName": "Отображение текста", - "textCompDesc": "Простой компонент для отображения статического или динамического текстового контента с учетом форматирования Markdown.", - "textCompKeywords": "текст, дисплей, статический, динамический", - "tableCompName": "Таблица", - "tableCompDesc": "Компонент таблицы для отображения данных в формате структурированной таблицы, с возможностью сортировки и фильтрации, древовидным отображением данных и расширяемыми строками.", - "tableCompKeywords": "таблица, данные, сортировка, фильтрация", - "imageCompName": "Изображение", - "imageCompDesc": "Компонент для отображения изображений, поддерживающий различные форматы на основе URI или данных Base64.", - "imageCompKeywords": "изображение, отображение, медиа, Base64", - "progressCompName": "Прогресс", - "progressCompDesc": "Визуальный индикатор прогресса, обычно используемый для отображения статуса завершения задачи.", - "progressCompKeywords": "прогресс, индикатор, статус, задача", - "progressCircleCompName": "Круг прогресса", - "progressCircleCompDesc": "Круговой индикатор выполнения, часто используемый для состояния загрузки или задач, ограниченных по времени.", - "progressCircleCompKeywords": "круг, прогресс, индикатор, загрузка", - "fileViewerCompName": "Просмотрщик файлов", - "fileViewerCompDesc": "Компонент для просмотра различных типов файлов, включая документы и изображения.", - "fileViewerCompKeywords": "файл, просмотрщик, документ, изображение", - "dividerCompName": "Разделитель", - "dividerCompDesc": "Визуальный компонент-разделитель, используемый для разделения содержимого или разделов в макете.", - "dividerCompKeywords": "разделитель, разделитель, макет, дизайн", - "qrCodeCompName": "QR-код", - "qrCodeCompDesc": "Компонент для отображения QR-кодов, полезных для быстрого сканирования и передачи информации.", - "qrCodeCompKeywords": "QR-код, сканирование, штрих-код, информация", - "formCompName": "Форма", - "formCompDesc": "Контейнерный компонент для создания структурированных форм с различными типами ввода.", - "formCompKeywords": "форма, ввод, контейнер, структура", - "jsonSchemaFormCompName": "Форма схемы JSON", - "jsonSchemaFormCompDesc": "Компонент динамической формы, созданный на основе схемы JSON.", - "jsonSchemaFormCompKeywords": "JSON, схема, форма, динамический", - "containerCompName": "Контейнер", - "containerCompDesc": "Контейнер общего назначения для компоновки и организации элементов пользовательского интерфейса.", - "containerCompKeywords": "контейнер, макет, организация, пользовательский интерфейс", - "floatTextContainerCompName": "Плавающий текстовый контейнер", - "floatTextContainerCompDesc": "Компонент с плавающим текстовым контейнером", - "floatTextContainerCompKeywords": "контейнер, макет, текст, поток", - "collapsibleContainerCompName": "Складной контейнер", - "collapsibleContainerCompDesc": "Контейнер, который можно разворачивать или сворачивать, идеально подходит для управления видимостью содержимого.", - "collapsibleContainerCompKeywords": "Складной, контейнер, расширяться, сворачиваться", - "tabbedContainerCompName": "Контейнер с вкладками", - "tabbedContainerCompDesc": "Контейнер с навигацией по вкладкам для организации содержимого в отдельные панели.", - "tabbedContainerCompKeywords": "вкладка, контейнер, навигация, панели", - "pageLayoutCompName": "Макет страницы", - "pageLayoutCompDesc": "Контейнер, который предлагает создать макет с хедером, сайдером, футером и областью основного содержимого.", - "pageLayoutCompKeywords": "макет, контейнер, навигация, страницы", - "modalCompName": "Модальный", - "modalCompDesc": "Всплывающий модальный компонент для отображения содержимого, предупреждений или форм в фокусе.", - "modalCompKeywords": "модальный, всплывающий, оповещение, форма", - "listViewCompName": "Просмотр списка", - "listViewCompDesc": "Компонент для отображения списка элементов или данных, внутри которого можно разместить другие компоненты. Например, ретранслятор.", - "listViewCompKeywords": "список, просмотр, отображение, ретранслятор", - "gridCompName": "Сетка", - "gridCompDesc": "Гибкий компонент сетки для создания структурированных макетов со строками и столбцами в качестве расширения компонента List View.", - "gridCompKeywords": "сетка, макет, строки, столбцы", - "navigationCompName": "Навигация", - "navigationCompDesc": "Навигационный компонент для создания меню, хлебных крошек или вкладок для навигации по сайту.", - "navigationCompKeywords": "навигация, меню, хлебные крошки, вкладки", - "iframeCompName": "IFrame", - "iframeCompDesc": "Встроенный компонент-фрейм для встраивания внешних веб-страниц и приложений или контента в приложение.", - "iframeCompKeywords": "iframe, встраивание, веб-страница, содержимое", - "customCompName": "Пользовательский компонент", - "customCompDesc": "Гибкий, программируемый компонент для создания уникальных, определяемых пользователем элементов пользовательского интерфейса, отвечающих вашим конкретным потребностям.", - "customCompKeywords": "пользовательские, определяемые пользователем, гибкие, программируемые", - "moduleCompName": "Модуль", - "moduleCompDesc": "Используйте модули для создания микроприложений, предназначенных для инкапсуляции определенных функций или возможностей. Модули можно встраивать и повторно использовать во всех приложениях.", - "moduleCompKeywords": "модуль, микроприложение, функциональность, многоразовое использование", - "jsonExplorerCompName": "JSON Explorer", - "jsonExplorerCompDesc": "Компонент для визуального изучения и взаимодействия со структурами данных JSON.", - "jsonExplorerCompKeywords": "JSON, проводник, данные, структура", - "jsonEditorCompName": "Редактор JSON", - "jsonEditorCompDesc": "Компонент редактора для создания и изменения JSON-данных с проверкой и подсветкой синтаксиса.", - "jsonEditorCompKeywords": "JSON, редактор, изменение, проверка", - "treeCompName": "Дерево", - "treeCompDesc": "Компонент древовидной структуры для отображения иерархических данных, таких как файловые системы или организационные диаграммы.", - "treeCompKeywords": "дерево, иерархический, данные, структура", - "treeSelectCompName": "Выбор дерева", - "treeSelectCompDesc": "Компонент выбора, который представляет опции в формате иерархического дерева, позволяя организовывать и встраивать выборки.", - "treeSelectCompKeywords": "дерево, выбрать, иерархический, вложенный", - "audioCompName": "Аудио", - "audioCompDesc": "Компонент для встраивания аудиоконтента с элементами управления воспроизведением и регулировкой громкости.", - "audioCompKeywords": "аудио, воспроизведение, звук, музыка", - "videoCompName": "Видео", - "videoCompDesc": "Мультимедийный компонент для встраивания и воспроизведения видеоконтента с поддержкой различных форматов.", - "videoCompKeywords": "видео, мультимедиа, воспроизведение, встраивание", - "drawerCompName": "Ящик", - "drawerCompDesc": "Выдвижной компонент панели, который может использоваться для дополнительной навигации или отображения контента, обычно выступая за край экрана.", - "drawerCompKeywords": "ящик, раздвижной, панель, навигация", - "chartCompName": "График", - "chartCompDesc": "Универсальный компонент для визуализации данных с помощью различных типов графиков и диаграмм.", - "chartCompKeywords": "диаграмма, график, данные, визуализация", - "carouselCompName": "Карусель изображений", - "carouselCompDesc": "Компонент вращающейся карусели для демонстрации изображений, баннеров или слайдов контента.", - "carouselCompKeywords": "Карусель, изображения, вращение, витрина", - "imageEditorCompName": "Редактор изображений", - "imageEditorCompDesc": "Интерактивный компонент для редактирования и работы с изображениями, предлагающий различные инструменты и фильтры.", - "imageEditorCompKeywords": "изображение, редактор, манипулировать, инструменты", - "mermaidCompName": "Диаграмма русалки", - "mermaidCompDesc": "Компонент для визуализации сложных диаграмм и блок-схем на основе синтаксиса Mermaid.", - "mermaidCompKeywords": "русалка, диаграммы, схемы, блок-схемы", - "calendarCompName": "Календарь", - "calendarCompDesc": "Компонент календаря для отображения дат и событий, с возможностью просмотра месяца, недели или дня.", - "calendarCompKeywords": "календарь, даты, события, планирование", - "signatureCompName": "Подпись", - "signatureCompDesc": "Компонент для сбора цифровых подписей, полезный для процессов утверждения и проверки.", - "signatureCompKeywords": "подпись, цифровая, одобрение, проверка", - "jsonLottieCompName": "Лотти Анимация", - "jsonLottieCompDesc": "Компонент для отображения анимации Lottie, обеспечивающий легкие и масштабируемые анимации на основе данных JSON.", - "jsonLottieCompKeywords": "лотти, анимация, JSON, масштабируемость", - "timelineCompName": "Временная шкала", - "timelineCompDesc": "Компонент для отображения событий или действий в хронологическом порядке, визуально представленном в виде линейной шкалы времени.", - "timelineCompKeywords": "хронология, события, хронологический, история", - "commentCompName": "Как", - "commentCompDesc": "Компонент для добавления и отображения комментариев пользователей, поддерживающий потоковые ответы и взаимодействие с пользователями.", - "commentCompKeywords": "комментарий, обсуждение, взаимодействие с пользователем, обратная связь", - "mentionCompName": "Упоминание", - "mentionCompDesc": "Компонент, поддерживающий упоминание пользователей или тегов в текстовом контенте, обычно используется в социальных сетях или платформах для совместной работы.", - "mentionCompKeywords": "упоминание, тег, пользователь, социальные сети", - "responsiveLayoutCompName": "Отзывчивый макет", - "responsiveLayoutCompDesc": "Компонент макета, разработанный для адаптации и реагирования на различные размеры экранов и устройств, обеспечивая постоянный пользовательский опыт.", - "responsiveLayoutCompKeywords": "отзывчивый, макет, адаптация, размер экрана", - "iconCompName": "Иконы", - "iconCompDesc": "Используйте различные значки, чтобы повысить визуальную привлекательность и удобство использования вашего приложения.", - "iconCompKeywords": "Значки, пиктограммы, символы, фигуры", - "tourCompName": "Тур", - "tourCompDesc": "Экскурсия по продукту для пользователей-гидов.", - "tourCompKeywords": "экскурсия, экскурсия по продукту, прогулка, интерактивная прогулка", - "hillchartCompName": "Hillchart", - "hillchartCompDesc": "Компонент визуализации для отображения данных о состоянии управления проектом в формате холмистой диаграммы.", - "hillchartCompKeywords": "управление проектами, диаграмма холма, визуализация, данные", - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "Компонент для отображения интерактивных карт с использованием OpenLayers, с поддержкой различных слоев и возможностей карты.", - "openLayersGeoMapCompKeywords": "openlayers, геокарта, интерактивная, слои карты", - "chartsGeoMapCompName": "Картосхемы географических карт", - "chartsGeoMapCompDesc": "Компонент для визуализации географических данных на интерактивных картах с динамическими графиками", - "chartsGeoMapCompKeywords": "Геокарта, диаграммы, визуализация, географические данные", - "bpmnEditorCompName": "Редактор BPMN", - "bpmnEditorCompDesc": "Компонент для просмотра, создания и редактирования BPMN-диаграмм, поддерживающий различные элементы и возможности BPMN.", - "bpmnEditorCompKeywords": "BPMN, редактор, диаграммы, элементы, рабочие процессы", - "turnstileCaptchaCompName": "Турникет Captcha", - "turnstileCaptchaCompDesc": "Компонент captcha для проверки пользователей от ботов.", - "turnstileCaptchaCompKeywords": "captcha, проверка, идентификация, безопасность", - "pivotTableCompName": "Поворотная таблица", - "pivotTableCompDesc": "Инструмент для обобщения и анализа данных, позволяющий организовать и объединить данные в табличном формате.", - "pivotTableCompKeywords": "pivot table, данные, анализ, агрегирование", - "funnelChartCompName": "Диаграмма воронки", - "funnelChartCompDesc": "Инструмент визуализации для отображения постепенного сокращения данных при прохождении этапов.", - "funnelChartCompKeywords": "диаграмма воронки, продажи, конверсия, процесс", - "gaugeChartCompName": "Таблица манометров", - "gaugeChartCompDesc": "График, отображающий данные в виде показаний на циферблате, полезен для индикации состояния или уровня чего-либо.", - "gaugeChartCompKeywords": "диаграмма, показатели, производительность, состояние", - "sankeyChartCompName": "Диаграмма Санки", - "sankeyChartCompDesc": "Диаграмма потока, в которой ширина стрелок пропорциональна скорости потока, используется для отображения передачи энергии, материалов или затрат.", - "sankeyChartCompKeywords": "диаграмма санки, поток, энергия, затраты", - "candleStickChartCompName": "Свечной график", - "candleStickChartCompDesc": "Стиль финансового графика, используемый для описания движения цены ценной бумаги, дериватива или валюты.", - "candleStickChartCompKeywords": "свечной график, акции, торговля, финансы", - "radarChartCompName": "Радарная диаграмма", - "radarChartCompDesc": "Графический метод отображения многомерных данных в виде двумерной диаграммы трех или более количественных переменных.", - "radarChartCompKeywords": "радарная диаграмма, многомерность, анализ производительности", - "heatmapChartCompName": "Тепловая карта", - "heatmapChartCompDesc": "Графическое представление данных, в котором отдельные значения представлены в виде цветов.", - "heatmapChartCompKeywords": "тепловая карта, визуализация данных, интенсивность", - "graphChartCompName": "График Диаграмма", - "graphChartCompDesc": "Диаграмма, представляющая собой сеть узлов, соединенных ребрами, полезная для отображения взаимосвязей и отношений.", - "graphChartCompKeywords": "Граф-схема, сети, отношения, узлы", - "treeChartCompName": "Диаграмма деревьев", - "treeChartCompDesc": "Диаграмма, которая визуально представляет иерархию в виде древовидной структуры, показывая взаимосвязи между различными узлами.", - "treeChartCompKeywords": "древовидная диаграмма, иерархия, организационная", - "treemapChartCompName": "Трехмерная диаграмма", - "treemapChartCompDesc": "Диаграмма, в которой используются вложенные прямоугольники для пропорционального представления иерархических данных.", - "treemapChartCompKeywords": "карта, иерархия, визуализация данных", - "sunburstChartCompName": "Диаграмма солнечных лучей", - "sunburstChartCompDesc": "Техника визуализации с радиальным заполнением пространства, которая иллюстрирует иерархические отношения через слои круга.", - "sunburstChartCompKeywords": "диаграмма солнечных лучей, радиальная, иерархическая", - "themeriverChartCompName": "Тематическая карта реки", - "themeriverChartCompDesc": "Визуализация, напоминающая потоковый график, которая показывает изменения в наборе данных с течением времени по категориям.", - "themeriverChartCompKeywords": "тематическая река, временные ряды, тенденции", - "basicChartCompName": "Основная диаграмма", - "basicChartCompDesc": "Универсальный компонент для визуализации данных с помощью различных типов графиков и диаграмм.", - "basicChartCompKeywords": "диаграмма, график, данные, визуализация", - "shapeCompName": "Формы", - "shapeCompDesc": "Коллекция геометрических фигур для использования в диаграммах, иллюстрациях и визуализациях.", - "shapeCompKeywords": "фигуры, геометрические, диаграммы, иллюстрации", - "ganttChartCompName": "Диаграмма Ганта", - "ganttChartCompDesc": "Диаграмма, иллюстрирующая график проекта и показывающая даты начала и завершения элементов и зависимостей.", - "ganttChartCompKeywords": "диаграмма Ганта, управление проектами, расписание", - "kanbanCompName" : "Kanban Board (preview!)", - "kanbanCompDesc" : "Компонент доски Kanban для управления рабочим процессом и задачами, используемый в методологии управления проектами Kanban.", - "kanbanCompKeywords" : "kanban, board, workflow, tasks", - "colorPickerCompName": "Подборщик цветов", - "colorPickerCompDesc": "Интуитивно понятный выбор цвета для персонализации.", - "colorPickerCompKeywords": "цвет, подборщик, настройка", - "floatButtonCompName": "Кнопка поплавка", - "floatButtonCompDesc": "Плавающая кнопка действий для заметных и быстрых действий.", - "floatButtonCompKeywords": "плавающая кнопка, действие, быстро", - "avatarCompName": "Аватар", - "avatarCompDesc": "Отображение аватаров пользователей или изображений профиля для персонализированной идентификации.", - "avatarCompKeywords": "аватар, изображение профиля, идентификация пользователя", - "avatarGroupCompName": "Группа \"Аватар", - "avatarGroupCompDesc": "Группа аватаров для компактного и визуально привлекательного представления нескольких пользователей или сущностей.", - "avatarGroupCompKeywords": "группа аватаров, пользователи, сущности, компактность", - "transferName": "Передача", - "transferDesc": "Облегчает перенос данных между двумя списками с помощью функции перетаскивания.", - "transferKeywords": "передача, данные, перетаскивание", - "cardCompName": "Карта содержания", - "cardCompDesc": "Компонент карты для отображения упорядоченной информации или контента в структурированном виде.", - "cardCompKeywords": "карта, информация, содержание, дисплей", - "timerCompName": "Таймер", - "timerCompDesc": "Компонент, отображающий обратный отсчет или прошедшее время, полезный для отслеживания продолжительности и сроков.", - "timerCompKeywords": "таймер, обратный отсчет, прошедшее время, отслеживание, продолжительность, сроки", - }, - "comp": { - ...en.comp, - - "menuViewDocs": "Посмотреть документацию", - "menuViewPlayground": "Посмотреть интерактивную игровую площадку", - "menuUpgradeToLatest": "Обновление до последней версии", - "nameNotEmpty": "Не может быть пустым", - "nameRegex": "Должен начинаться с буквы и содержать только буквы, цифры и символы подчеркивания (_)", - "nameJSKeyword": "Не может быть ключевым словом JavaScript", - "nameGlobalVariable": "Не может быть глобальным именем переменной", - "nameExists": "Имя {name} Уже существует", - "getLatestVersionMetaError": "Не удалось получить последнюю версию, попробуйте позже.", - "needNotUpgrade": "Текущая версия уже является последней.", - "compNotFoundInLatestVersion": "Текущий компонент не найден в последней версии.", - "upgradeSuccess": "Успешно обновлено до последней версии.", - "searchProp": "Поиск", - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - - "retry": "Повторная попытка", - "resetAfterSubmit": "Сброс после успешной отправки формы", - "jsonSchema": "JSON-схема", - "uiSchema": "Схема пользовательского интерфейса", - "schemaTooltip": "См.", - "defaultData": "Предварительно заполненные данные формы", - "dataDesc": "Данные текущей формы", - "required": "Требуется", - "maximum": "Максимальное значение - {value}.", - "minimum": "Минимальное значение - {value}.", - "exclusiveMaximum": "Должно быть меньше, чем {value}", - "exclusiveMinimum": "Должно быть больше, чем {value}", - "multipleOf": "Должно быть кратно {value}", - "minLength": "Не менее {value} символов", - "maxLength": "Не более {value} символов", - "pattern": "Должен соответствовать шаблону {value}", - "format": "Должен соответствовать формату {value}", - }, - "select": { - ...en.select, - - "inputValueDesc": "Входное значение поиска", - }, - "customComp": { - ...en.customComp, - - "text": "Это хороший день.", - "triggerQuery": "Запрос триггера", - "updateData": "Обновление данных", - "updateText": "Я также в хорошем настроении, чтобы разработать теперь свой собственный пользовательский компонент с Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Данные, которые вы хотите передать в пользовательский компонент", - "code": "Код вашего пользовательского компонента", - }, - "tree": { - ...en.tree, - - "placeholder": "Пожалуйста, выберите", - "selectType": "Выберите тип", - "noSelect": "Нет выбора", - "singleSelect": "Одиночный выбор", - "multiSelect": "Мультивыбор", - "checkbox": "Флажок", - "checkedStrategy": "Проверенная стратегия", - "showAll": "Все узлы", - "showParent": "Только родительские узлы", - "showChild": "Только дочерние узлы", - "autoExpandParent": "Авторазвертывание Родитель", - "checkStrictly": "Проверьте строго", - "checkStrictlyTooltip": "Проверьте узел дерева точно; родительский узел дерева и дочерние узлы дерева не связаны", - "treeData": "Данные о деревьях", - "treeDataDesc": "Текущие данные о деревьях", - "value": "Значения по умолчанию", - "valueDesc": "Текущие значения", - "expanded": "Расширенные значения", - "expandedDesc": "Текущие расширенные значения", - "defaultExpandAll": "По умолчанию Развернуть все узлы", - "showLine": "Показать линию", - "showLeafIcon": "Показать значок листа", - "treeDataAsia": "Азия", - "treeDataChina": "Китай", - "treeDataBeijing": "Пекин", - "treeDataShanghai": "Шанхай", - "treeDataJapan": "Япония", - "treeDataEurope": "Европа", - "treeDataEngland": "Англия", - "treeDataFrance": "Франция", - "treeDataGermany": "Германия", - "treeDataNorthAmerica": "Северная Америка", - "helpLabel": "Ярлык узла", - "helpValue": "Уникальное значение узла в дереве", - "helpChildren": "Дети Узлы", - "helpDisabled": "Отключение узла", - "helpSelectable": "Является ли узел выбираемым (тип одиночного/множественного выбора)", - "helpCheckable": "Отображать ли флажок (тип флажка)", - "helpDisableCheckbox": "Отключение флажка (тип флажка)", - }, - "moduleContainer": { - ...en.moduleContainer, - - "eventTest": "Испытание событием", - "methodTest": "Метод испытания", - "inputTest": "Входной тест", - }, - "password": { - ...en.password, - - "label": "Пароль", - "placeholder": "Пожалуйста, введите пароль", - "conformLabel": "Подтвердите пароль", - "conformPlaceholder": "Пожалуйста, подтвердите пароль", - "visibilityToggle": "Тумблер \"Показать видимость", - }, - "richTextEditor": { - ...en.richTextEditor, - - "toolbar": "Настройка панели инструментов", - "toolbarDescription": "Вы можете настроить панель инструментов. Более подробную информацию см. на сайте: https://quilljs.com/docs/modules/toolbar/.", - "placeholder": "Пожалуйста, введите...", - "hideToolbar": "Скрыть панель инструментов", - "content": "Содержание", - "title": "Название", - "save": "Сохранить", - "link": "Ссылка:", - "edit": "Редактировать", - "remove": "Удалить", - "defaultValue": "Базовое содержание", - }, - "floatButton": { - ...en.floatButton, - - "custom": "Пользовательское", - "backTop": "Назад Вверх", - "buttonType": "Тип кнопки", - "buttonShape": "Форма пуговицы", - "square": "Квадрат", - "circle": "Круг", - "description": "Описание", - "badge": "Бейдж", - "primary": "Главная", - "default": "По умолчанию", - "buttonTheme": "Кнопочная тема", - "badgeColor": "Цвет значка", - "dot": "Значок в виде точки", - "hidden": "Скрытый", - "visibilityHeight": "Высота видимости", - "visibilityHeightDesc": "Прокрутка до определенной высоты перед отображением кнопки возврата к началу, 0 отображается всегда, режим редактирования не может осуществлять предварительный просмотр в режиме реального времени", - }, - "colorPicker": { - ...en.colorPicker, - - "trigger": "Триггеры Событие", - "click": "Нажмите", - "hover": "наведение", - "disabledAlpha": "Отключить выбор альфы", - "recommended": "Рекомендуем", - "showPresets": "Показать предустановки цвета", - }, - "badge": { - ...en.badge, - - "showCloseButton": "Показать кнопку закрытия", - "Type": "Тип значка", - "Count": "Количество значков", - "Size": "Размер значка", - "SizeDefault": "по умолчанию", - "SizeSmall": "Маленький", - "overflowCount": "Счетчик переполнения", - "Title": "Название значка", - "dot": "Точка", - "number": "Номер", - "tooltip": "Всплывающая подсказка", - }, - "gantt": { - ...en.gantt, - - "key": "Ключ", - "title": "Название", - "project": "Проект", - "from": "С сайта", - "minute": "минута", - "hour": "Час", - "day": "День", - "week": "Неделя", - "month": "Месяц", - "year": "Год", - "quarter": "Квартал", - "tasks": "Данные о задачах", - "level": "уровень", - "durationUnit": "Единица измерения продолжительности", - "duration": "Продолжительность", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Неделя #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "дерево", - "ColumnsData": "Данные столбцов", - "allowChangeTask": "Задача DbClick", - "allowAddLink": "Добавить ссылку", - "allowLinkDelete": "Ссылка Удалить", - "allowProgressDrag": "Перетаскивание прогресса", - "allowTaskDrag": "Перетаскивание задач", - "links": "Данные о ссылках", - "dataFormat": "Разбор данных Формат", - "handleDateChange": "Справиться с изменением задачи", - "handleTaskChange": "Справиться с изменением задачи", - "handleAddedLink": "Ручка Добавлена ссылка", - "handleDeletedLink": "Обработка удаленной ссылки", - "handleProgressDrag": "Перетаскивание прогресса", - "showTodayMark": "Показать сегодня Марк", - "resize": "Изменить размер", - "otherEvents": "Другие события", - "openAllBranchInit": "Открыть все филиалы", - "date": "Дата", - "text": "Текст", - "progress": "прогресс", - "width": "Ширина", - "ColumnsType": "Тип Cloumns", - "currentId": "Текущий идентификатор", - "currentObject": "Текущий объект", - "addTask": "Добавить задачу(и)", - "taskObject": "Объект задачи", - "taskObjectDesc": "Поддержка массивов задач или одного объекта задачи", - "linkID": "идентификатор ссылки", - "linkIDDesc": "Поддерживает массивы идентификаторов ссылок или одиночные объекты ссылок", - "removeTask": "Удалить задачу", - "taskID": "Идентификатор задачи", - "taskIDDesc": "Поддерживает массивы идентификаторов или один идентификатор", - "add": "Добавить", - "expandingAll": "Расширяя все", - "collapsingAll": "Все рушится", - "addTaskFail": "Задача добавления завершилась неудачно, а тип параметра должен быть объектом или объектом массива", - "addLinkFail": "Ссылка на добавление не удалась, а тип параметра должен быть объектом или объектом массива", - "removeTaskFail": "Задача удаления завершилась неудачей, и тип параметра должен быть строкой или массивом строк", - "removeLinkFail": "Ссылки на удаление не удались, и тип параметра должен быть строковым массивом", - "otherData": "Другие данные{i}", - "projectText": "Проект №{i}", - "taskText": "Задание №{i}", - "AutoCalculateProgress": "Ход автоматического расчета", - "allowProjectDrag": "Разрешить перетаскивание проектов", - "showColumns": "Показать столбцы", - "exportToPNG": "Экспорт в PNG", - "exportToPDF": "Экспорт в PDF", - "exportToExcel": "Экспорт в Excel", - "progressLowBg": "Низкий BgColor", - "progressLowColor": "Цвет низкого прогресса", - "progressMediumBg": "Средний BgColor", - "progressMediumColor": "Средний цвет прогресса", - "progressHighBg": "Высота BgColor", - "progressHighColor": "Цвет прогресса", - "progresscompletedColor": "Цвет завершенного прогресса", - "lowProgressLine": "Низкая линия прогресса", - "mediumProgressLine": "Средняя линия прогресса", - "SegmentedColor": "Прогресс Сегментированный цвет", - "link_f2s": "Ссылка F2S", - "link_s2s": "Ссылка S2S", - "link_f2f": "Ссылка F2F", - "link_s2f": "Ссылка S2F", - "weekScale": "#{i},", - "showHolidays": "Показать праздники", - "StatutoryHolidays": "Данные об обязательных праздничных днях", - "skipOffTime": "Скрывает нерабочее время", - "weekend": "Выходные", - "weekendSelected": "Выбранные выходные", - "noWorkHour": "Нерабочий час", - "noWorkHourSelected": "не выбран рабочий час", - "showWorkTimes": "Показать время работы", - "workTimeData": "Данные о рабочем времени", - "fit": "подходит", - "manual": "руководство", - "scaleMode": "Режим шкалы", - "startDate": "Дата начала", - "endDate": "Дата окончания", - "addLink": "Добавить ссылку(и)", - "linkObject": "ссылка Объект", - "removeLink": "удалить ссылку", - "allowSort": "Разрешить сортировку", - "showTask": "Показать задание", - "toggleOnDBClick": "Включить DBClick", - "sortOptions": "Первоначальные параметры сортировки", - "rowHeight": "Высота ряда", - "showTooltip": "Показать всплывающую подсказку", - "tooltipTemplates": "Шаблон всплывающей подсказки", - "allowResizeTask": "Разрешить изменение размера задачи", - "projectColor": "Цвет проекта", - "projectColorBg": "Проект BgColor", - "taskColor": "Цвет задачи", - "taskColorBg": "Задача BgColor", - "milestoneColor": "Цвет вехи", - "highlightOverdue": "Выделить Просроченные", - "overdueColor": "Просроченный цвет", - "overdueBgColor": "Просроченный BgColor", - "projectCompletedBgColor": "Проект завершен BgColor", - "projectCompletedColor": "Цвет завершенного проекта", - "tag": "тег", - "tasksTableWidth": "Ширина таблицы задач", - "allowErrorMessage": "Разрешить сообщение об ошибке", - "currentProjectId": "Текущий идентификатор проекта", - "currentProjectLastTask": "Текущий проект Последняя задача", - "onlySortProject": "Только сортировка проекта", - }, - "transfer": { - ...en.transfer, - - "sourceTitle": "Исходные данные", - "targetTitle": "Целевые данные", - "content": "Содержание {i}", - "items": "Товары", - "targetKeys": "Выбранные ключи", - "oneWay": "Один путь", - "pagination": "Пагинация", - "pageSize": "Размер страницы", - "allowSearch": "Разрешить поиск", - "selectedKeys": "Выбранные ключи", - "searchInfo": "Информация для поиска", - "targerObject": "Объект Таргера", - }, - "avatarGroup": { - ...en.avatarGroup, - - "maxCount": "Максимальное количество", - "avatarSize": "Размер аватара", - "autoColor": "Автоцвет", - "alignment": "Выравнивание", - "currentAvatar": "Текущий аватар", - }, - "avatarComp": { - ...en.avatarComp, - - "square": "квадрат", - "circle": "круг", - "icon": "икона", - "shape": "форма", - "counts": "Бейдж", - "title": "название", - "src": "src", - "avatarCompTooltip": "Приоритет отображения следующий: изображение -> символы -> значок. В зависимости от того, что доступно первым.", - "iconSize": "Размер значка", - "avatarBackground": "Фон", - "label": "Этикетка", - "caption": "Надпись", - "labelPosition": "Позиция", - "alignmentPosition": "выравнивание", - "text": "Текст", - "enableDropDown": "Включить выпадающий список", - "containerBackground": "Фон", - }, - "card": { - ...en.card, - - "cardType": "Тип карты", - "common": "общий", - "custom": "на заказ", - "default": "по умолчанию", - "small": "маленький", - "showTitle": "Показать название", - "title": "Название", - "more": "Подробнее", - "extraTitle": "Призыв к действию", - "CoverImg": "Изображение на обложке", - "imgSrc": "Источник изображения", - "showMeta": "Показать содержимое", - "metaTitle": "Содержание Заголовок", - "metaDesc": "Описание содержания", - "imgHeight": "Высота изображения", - "showActionIcon": "Показать параметры действия", - "actionOptions": "Варианты действий", - "menu": "Меню {i}", - "hoverColor": "hover Цвет", - "IconColor": "Цвет значка", - "titleSize": "Размер названия", - }, - "timer": { - ...en.timer, - - "timerState": "Состояние таймера", - "elapsedTime": "Прошедшее время", - "timer": "Таймер", - "countdown": "Обратный отсчет", - "defaultValue": "Значение по умолчанию", - "timerType": "Тип таймера", - "start": "Начало", - "pause": "Пауза", - "resume": "Резюме", - "reset": "Сброс", - "startPause": "Старт/Пауза", - "hideButton": "Скрыть кнопку", - "fontColor": "Цвет шрифта", - }, - "iconComp": { - ...en.iconComp, - - "icon": "Икона", - "autoSize": "Иконка Авторазмер", - "iconSize": "Размер значка", - }, - "numberInput": { - ...en.numberInput, - - "formatter": "Формат", - "precision": "Точность", - "allowNull": "Разрешить нулевое значение", - "thousandsSeparator": "Показать разделитель тысяч", - "controls": "Показать кнопки увеличения/уменьшения", - "step": "Шаг", - "standard": "Стандарт", - "percent": "Процент", - }, - "slider": { - ...en.slider, - - "step": "Шаг", - "stepTooltip": "Значение должно быть больше 0 и делиться на (Max-Min)", - "vertical": "Вертикальная ориентация", - }, - "rating": { - ...en.rating, - - "max": "Максимальная оценка", - "allowHalf": "Разрешить половину рейтинговых очков", - }, - "optionsControl": { - ...en.optionsControl, - - "optionList": "Опции", - "option": "Вариант", - "optionI": "Вариант {i}", - "viewDocs": "Просмотр документов", - "tip": "Переменные 'item' и 'i' представляют значение и индекс каждого элемента в массиве данных", - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - - "value": "Значение / Ключ", - "valueTooltip": "Значение шага должно быть числом. Для первого Шага оно должно быть равно начальному значению. Числа должны быть расположены в последовательном и возрастающем порядке", - "title": "Название шага", - "subTitle": "Шаг субтитров", - "description": "Описание шага", - "status": "Статус шага", - "icon": "Значок шага", - }, - "step": { - ...en.step, - - "initialValue": "Начальные числа в", - "initialValueTooltip": "С чего начать визуальную нумерацию. Должно быть 1 или выше.", - "valueDesc": "Текущая стоимость", - "size": "Размер шагов", - "sizeSmall": "Маленький", - "sizeDefault": "По умолчанию", - "percent": "Шаги Процент", - "type": "Тип шагов", - "typeDefault": "Стандарт", - "typeNavigation": "Навигация", - "typeInline": "Inline", - "direction": "Направление шагов", - "directionVertical": "Вертикальный", - "directionHorizontal": "Горизонтальный", - "labelPlacement": "Шаги Размещение этикеток", - "status": "Статус шагов", - "statusWait": "Подождите", - "statusProcess": "Процесс", - "statusFinish": "Отделка", - "statusError": "Ошибка", - "showDots": "Показать точки вместо символов", - "showIcons": "Показать значки вместо символов", - "responsive": "Отзывчивый", - "selectable": "Выбираемый", - }, - "coloredTagOptionControl": { - ...en.coloredTagOptionControl, - - "tag": "Текст тега", - "color": "Цвет", - "icon": "Икона", - }, - "radio": { - ...en.radio, - - "options": "Опции", - "horizontal": "Горизонтальный", - "horizontalTooltip": "Горизонтальный макет сворачивается, когда заканчивается место", - "vertical": "Вертикальный", - "verticalTooltip": "Вертикальный макет всегда будет отображаться в один столбец", - "autoColumns": "Автоколонка", - "autoColumnsTooltip": "Макет \"Автоколонка\" автоматически перестраивает порядок, если позволяет место, и отображает в виде нескольких колонок", - }, - "cascader": { - ...en.cascader, - - "options": "Данные JSON для отображения каскадного выбора", - }, - "selectInput": { - ...en.selectInput, - - "valueDesc": "Текущее выбранное значение", - "selectedIndexDesc": "Индекс текущего выбранного значения или -1, если значение не выбрано", - "selectedLabelDesc": "Метка текущего выбранного значения", - }, - "file": { - ...en.file, - - "typeErrorMsg": "Должно быть числом с допустимой единицей размера файла или числом байт без единицы измерения.", - "fileEmptyErrorMsg": "Загрузка не удалась. Размер файла пуст.", - "fileSizeExceedErrorMsg": "Загрузка не удалась. Размер файла превышает лимит.", - "minSize": "Минимальный размер", - "minSizeTooltip": "Минимальный размер загружаемых файлов с необязательными единицами измерения размера файла (например, '5kb', '10 MB'). Если единица измерения не указана, значение будет считаться числом байт.", - "maxSize": "Максимальный размер", - "maxSizeTooltip": "Максимальный размер загружаемых файлов с необязательными единицами измерения размера файла (например, '5kb', '10 MB'). Если единица измерения не указана, значение будет считаться числом байт.", - "single": "Одиночка", - "multiple": "Множество", - "directory": "Каталог", - "upload": "Просмотреть", - "fileType": "Типы файлов", - "reference": "Пожалуйста, обратитесь к", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Уникальные спецификаторы типа файла", - "uploadType": "Тип загрузки", - "showUploadList": "Показать список загрузок", - "maxFiles": "Max Files", - "filesValueDesc": "Содержимое загружаемого в данный момент файла закодировано в Base64", - "filesDesc": "Список текущих загруженных файлов. Для получения подробной информации см.", - "clearValueDesc": "Очистить все файлы", - "parseFiles": "Разбор файлов", - "parsedValueTooltip1": "Если параметр parseFiles равен True, файлы загрузки будут разобраны до объекта, массива или строки. Доступ к разобранным данным можно получить через массив parsedValue.", - "parsedValueTooltip2": "Поддерживаются файлы Excel, JSON, CSV и текстовые файлы. Другие форматы возвращают Null.", - }, - "date": { - ...en.date, - - "format": "Формат", - "formatTip": "Поддерживаются: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", - "reference": "Пожалуйста, обратитесь к", - "showTime": "Время показа", - "start": "Дата начала", - "end": "Дата окончания", - "year": "Год", - "quarter": "Квартал", - "month": "Месяц", - "week": "Неделя", - "date": "Дата", - "clearAllDesc": "Очистить все", - "resetAllDesc": "Сбросить все", - "placeholder": "Выберите дату", - "placeholderText": "Место для размещения", - "startDate": "Дата начала", - "endDate": "Дата окончания", - }, - "time": { - ...en.time, - - "start": "Время начала", - "end": "Конец времени", - "formatTip": "Поддержка: 'HH:mm:ss', 'Timestamp'", - "format": "Формат", - "placeholder": "Выберите время", - "placeholderText": "Место для размещения", - "startTime": "Время начала", - "endTime": "Конец времени", - }, - "button": { - ...en.button, - - "prefixIcon": "Значок префикса", - "prefixText": "Префиксный текст", - "suffixIcon": "Значок суффикса", - "icon": "Икона", - "iconSize": "Размер значка", - "button": "Кнопка формы", - "formToSubmit": "Форма для отправки", - "default": "По умолчанию", - "submit": "Отправить", - "textDesc": "Текст, отображаемый в данный момент на кнопке", - "loadingDesc": "Находится ли кнопка в состоянии загрузки? Если True, то текущая кнопка загружается", - "formButtonEvent": "Событие", - }, - "link": { - ...en.link, - - "link": "Ссылка на", - "textDesc": "Текст, отображаемый в настоящее время на ссылке", - "loadingDesc": "Находится ли ссылка в состоянии загрузки? Если True, то текущая ссылка загружается", - }, - "scanner": { - ...en.scanner, - - "text": "Нажмите кнопку Сканировать", - "camera": "Камера {index}", - "changeCamera": "Переключить камеру", - "continuous": "Непрерывное сканирование", - "uniqueData": "Игнорирование дублирующихся данных", - "maskClosable": "Нажмите на маску, чтобы закрыть", - "errTip": "Пожалуйста, используйте этот компонент под HTTPS или Localhost", - }, - "dropdown": { - ...en.dropdown, - - "onlyMenu": "Дисплей только с этикеткой", - "textDesc": "Текст, отображаемый в данный момент на кнопке", - "triggerMode": "Режим триггера" - }, - "textShow": { - ...en.textShow, - - "text": "### 👋 Здравствуйте, {name}.", - "valueTooltip": "Markdown поддерживает большинство тегов и атрибутов HTML. iframe, Script и другие теги отключены по соображениям безопасности.", - "verticalAlignment": "Вертикальное выравнивание", - "horizontalAlignment": "Горизонтальное выравнивание", - "textDesc": "Текст, отображаемый в текущем текстовом поле", - }, - "table": { - ...en.table, - - "editable": "Редактируемый", - "columnNum": "Колонны", - "viewModeResizable": "Ширина колонки настраивается пользователем", - "viewModeResizableTooltip": "Могут ли пользователи регулировать ширину столбцов.", - "visibleResizables": "Показать ручки изменения размера", - "visibleResizablesTooltip": "Отображение видимых ручек изменения размера в заголовке таблицы.", - "showFilter": "Кнопка \"Показать фильтр", - "showRefresh": "Показать кнопку обновления", - "showDownload": "Показать кнопку загрузки", - "columnSeparator": "Сепаратор колонн", - "columnSeparatorTooltip": "Разделитель столбцов (\"delimiter\") в загруженном CSV-файле.\n\nРекомендации:\n- Запятая (,)\n- Точка с запятой (;)\n- Труба (|)\n- Табуляция (\\t)", - "columnSetting": "Кнопка \"Показать видимость столбцов", - "searchText": "Текст для поиска", - "searchTextTooltip": "Поиск и фильтрация данных, которые в данный момент представлены в таблице. Это только фронтальный поиск и не влияет на запрос к источнику данных).", - "showQuickJumper": "Показать Быстрый джемпер", - "hideOnSinglePage": "Скрыть на одной странице", - "showSizeChanger": "Показать кнопку изменения размера", - "pageSizeOptions": "Параметры размера страницы", - "pageSize": "Размер страницы", - "total": "Общее количество строк", - "totalTooltip": "Значение по умолчанию - количество текущих элементов данных, которые можно получить из запроса, например: '{{query1.data[0].count}}'.", - "filter": "Фильтры", - "filterRule": "Правило фильтрации", - "chooseColumnName": "Выберите колонку", - "chooseCondition": "Выберите условие", - "clear": "Очистить", - "columnShows": "Колонна показывает", - "selectAll": "Выбрать все", - "and": "И", - "or": "Или", - "contains": "Содержит", - "notContain": "Не содержит", - "equals": "Равняется", - "isNotEqual": "Не равны", - "isEmpty": "Пустой", - "isNotEmpty": "Не пустой", - "greater": "Больше, чем", - "greaterThanOrEquals": "Больше, чем или равно", - "lessThan": "Меньше, чем", - "lessThanOrEquals": "Меньше, чем или равно", - "action": "Действие", - "columnValue": "Значение столбца", - "columnValueTooltip": "'{{currentCell}}': Данные текущей ячейки\n '{{currentRow}}': Данные текущей строки\n '{{currentIndex}}': Индекс текущих данных (начиная с 0)\n Пример: '{{currentCell * 5}}' Показать данные, в 5 раз превышающие исходное значение.", - "columnTooltip": "Всплывающая подсказка столбца", - "imageSrc": "Источник изображения", - "imageSize": "Размер изображения", - "columnTitle": "Название", - "columnTitleTooltip": "Всплывающая подсказка заголовка", - "showTitle": "Показать название", - "showTitleTooltip": "Показать/скрыть заголовок столбца в заголовке таблицы", - "sortable": "Сортировка", - "align": "Выравнивание", - "fixedColumn": "Фиксированная колонна", - "autoWidth": "Автоматическая ширина", - "customColumn": "Пользовательская колонка", - "auto": "Автомобиль", - "fixed": "Исправлено", - "columnType": "Тип колонки", - "dataMapping": "Сопоставление данных", - "numberStep": "Шаг", - "numberStepTooltip": "Число, на которое увеличивается или уменьшается текущее значение. Это может быть целое число или десятичная дробь", - "precision": "Точность", - "float": "Поплавок", - "prefix": "Префикс", - "suffix": "Суффикс", - "avatars": "Аватары", - "avatarGroupAlignment": "Выравнивание аватаров", - "text": "Текст", - "number": "Номер", - "link": "Ссылка на", - "links": "Ссылки", - "tag": "Тег", - "select": "Выберите", - "dropdown": "Dropdown", - "date": "Дата", - "dateTime": "Дата Время", - "badgeStatus": "Статус", - "button": "Кнопка", - "image": "Изображение", - "boolean": "Булево", - "switch": "Переключатель", - "rating": "Рейтинг", - "progress": "Прогресс", - "option": "Операция", - "optionList": "Список операций", - "option1": "Операция 1", - "status": "Статус", - "statusTooltip": "Необязательные значения: Успех, Ошибка, По умолчанию, Предупреждение, Обработка", - "primaryButton": "Главная", - "defaultButton": "По умолчанию", - "type": "Тип", - "tableSize": "Размер стола", - "hideHeader": "Скрыть заголовок таблицы", - "hideToolbar": "Скрыть нижний колонтитул", - "fixedHeader": "Фиксированный заголовок таблицы", - "fixedHeaderTooltip": "Заголовок будет фиксированным для вертикально прокручиваемой таблицы", - "fixedToolbar": "Исправленная панель инструментов", - "fixedToolbarTooltip": "Панель инструментов будет фиксированной для вертикально прокручиваемой таблицы на основе позиции", - "hideBordered": "Показать ручки изменения размера", - "showHeaderGridBorder": "Показать границы сетки заголовка", - "showRowGridBorder": "Показать границы сетки строк", - "showVerticalRowGridBorder": "Показать вертикальную границу сетки строк", - "showHorizontalRowGridBorder": "Показать горизонтальную границу сетки строк", - "deleteColumn": "Удалить колонку", - "confirmDeleteColumn": "Подтвердите удаление колонки:", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "Текущие данные изменились, нажмите, чтобы перегенерировать столбец.", - "changeSetDesc": "Объект, представляющий изменения в редактируемой таблице, содержит только измененную ячейку. Строки идут первыми, а столбцы - вторыми.", - "selectedRowDesc": "Предоставляет данные для текущей выделенной строки, указывая на строку, которая вызывает событие щелчка, если пользователь нажимает кнопку/ссылку в строке", - "selectedRowsDesc": "Используется в режиме множественного выбора, аналогично SelectedRow", - "pageNoDesc": "Текущая страница дисплея, начиная с 1", - "pageSizeDesc": "Сколько строк на странице", - "sortColumnDesc": "Имя выбранного в данный момент отсортированного столбца", - "sortDesc": "Находится ли текущая строка в нисходящем порядке", - "pageOffsetDesc": "Текущее начало листания, используется для листания с целью получения данных. Пример: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", - "displayDataDesc": "Данные, отображаемые в текущей таблице", - "selectedIndexDesc": "Выбранный индекс в отображаемых данных", - "filterDesc": "Параметры фильтрации таблиц", - "dataDesc": "Данные JSON для таблицы", - "saveChanges": "Сохранить изменения", - "cancelChanges": "Отменить изменения", - "rowSelectChange": "Изменение выбора строки", - "rowClick": "Щелчок по строке", - "rowExpand": "Ряд Развернуть", - "rowShrink": "Сокращение рядов", - "search": "Поиск", - "download": "Скачать", - "columnEdited": "Колонка отредактирована", - "filterChange": "Замена фильтра", - "sortChange": "Изменение сортировки", - "pageChange": "Изменение страницы", - "refresh": "Обновить", - "rowColor": "Условный цвет строки", - "rowColorDesc": "Условная установка цвета строки на основе необязательных переменных: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Например: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - "rowHeight": "Условная высота строки", - "rowHeightDesc": "Условная установка высоты строки на основе необязательных переменных: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Например: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Условный цвет ячеек", - "cellColorDesc": "Условно установите цвет ячейки на основе значения ячейки с помощью CurrentCell. Например: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "Не настроен обработчик событий для сохранения изменений. Пожалуйста, привяжите хотя бы один обработчик событий перед нажатием.", - "dynamicColumn": "Использование динамической видимости столбцов", - "dynamicColumnConfig": "Видимые столбцы", - "dynamicColumnConfigDesc": "Динамическая видимость столбцов. Принимает массив имен столбцов. По умолчанию все столбцы видны. Пример: [\"id\", \"name\"].", - "position": "Позиция", - "showDataLoadSpinner": "Показать индикатор загрузки", - "showValue": "Показать значение", - "expandable": "Расширяемый", - "configExpandedView": "Настройка расширенного вида", - "toUpdateRowsDesc": "Массив объектов для обновляемых строк в редактируемых таблицах.", - "selectedCellDesc": "Выбранная ячейка", - "empty": "Пустой", - "falseValues": "Текст при ложном значении", - "iconTrue": "Значок, когда истинно", - "iconFalse": "Значок, когда ложь", - "iconNull": "Значок При нуле", - "allColumn": "Все", - "visibleColumn": "Видимый", - "emptyColumns": "В настоящее время ни один столбец не виден", - "showSummary": "Показать итоговую строку (строки)", - "totalSummaryRows": "Всего строк", - "inlineAddNewRow": "Добавить новую строку (строки)", - "editMode": "Режим редактирования", - "singleClick": "Один клик", - "doubleClick": "Двойной щелчок", - "showUpdateButtons": "Показать кнопки сохранения/отмены", - }, - "image": { - ...en.image, - - "src": "Источник изображения", - "srcDesc": "Источник изображения. Может быть URL, путь или строка Base64. например: data:image/png;base64, AAA... CCC", - "supportPreview": "Поддержка предварительного просмотра по щелчку (масштабирование)", - "supportPreviewTip": "Эффективно, если источник изображения достоверен", - "previewSrc" : "Источник изображений HighRes" - }, - "progress": { - ...en.progress, - - "value": "Значение", - "valueTooltip": "Процент завершения как значение от 0 до 100", - "showInfo": "Показать значение", - "valueDesc": "Текущее значение прогресса, в диапазоне от 0 до 100", - "showInfoDesc": "Отображать ли текущее значение прогресса", - }, - "fileViewer": { - ...en.fileViewer, - - "invalidURL": "Пожалуйста, введите правильный URL или строку Base64", - "src": "Файлы URI", - "srcTooltip": "Предварительный просмотр содержимого ссылки путем вставки HTML, также поддерживаются данные в кодировке Base64, например: data:application/pdf; base64,AAA... CCC", - "srcDesc": "URI файла", - }, - "divider": { - ...en.divider, - - "title": "Название", - "align": "Выравнивание", - "dashed": "Пунктир", - "type": "Вертикальный тип", - "dashedDesc": "Использовать ли пунктирную линию", - "titleDesc": "Название разделителя", - "alignDesc": "Выравнивание заголовка разделителя", - }, - "QRCode": { - ...en.QRCode, - - "value": "Значение содержимого QR-кода", - "valueTooltip": "Значение содержит максимум 2953 символа. Значение QR-кода может кодировать различные типы данных, включая текстовые сообщения, URL, контактные данные (VCard/meCard), данные для входа в Wi-Fi, адреса электронной почты, номера телефонов, SMS-сообщения, координаты геолокации, данные о событиях календаря, платежную информацию, адреса криптовалют и ссылки для загрузки приложений.", - "valueDesc": "Значение содержимого QR-кода", - "level": "Уровень отказоустойчивости", - "levelTooltip": "Означает способность QR-кода быть отсканированным, даже если его часть заблокирована. Чем выше уровень, тем сложнее код.", - "includeMargin": "Показать маржу", - "image": "Отображение изображения в центре", - "L": "L (Низкий)", - "M": "M (средний)", - "Q": "Q (квартиль)", - "H": "H (высокий)", - "maxLength": "Содержание слишком длинное. Установите длину менее 2953 символов", - }, - "jsonExplorer": { - ...en.jsonExplorer, - - "indent": "Отступ каждого уровня", - "expandToggle": "Развернуть дерево JSON", - "theme": "Цветная тема", - "valueDesc": "Текущие данные в формате JSON", - "default": "По умолчанию", - "defaultDark": "По умолчанию Темный", - "neutralLight": "Нейтральный свет", - "neutralDark": "Нейтральный темный", - "azure": "Лазурь", - "darkBlue": "Темно-синий", - }, - "audio": { - ...en.audio, - - "src": "URI источника звука или строка Base64", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Автоигра", - "loop": "Петля", - "srcDesc": "Текущий URI аудио или строка Base64, например data:audio/mpeg;base64,AAA... CCC", - "play": "Играть", - "playDesc": "Срабатывает при воспроизведении звука", - "pause": "Пауза", - "pauseDesc": "Срабатывает при приостановке звука", - "ended": "Окончание", - "endedDesc": "Срабатывает при завершении воспроизведения аудиозаписи", - }, - "video": { - ...en.video, - - "src": "URI источника видео или строка Base64", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "URL-адрес плаката", - "defaultPosterUrl": "", - "autoPlay": "Автоигра", - "loop": "Петля", - "controls": "Скрыть элементы управления", - "volume": "Объем", - "playbackRate": "Скорость воспроизведения", - "posterTooltip": "Значение по умолчанию - первый кадр видео.", - "autoPlayTooltip": "После загрузки видео оно будет воспроизводиться автоматически. Изменение этого значения с True на False приостановит воспроизведение видео. (Если установлен постер, он будет воспроизводиться кнопкой Poster)", - "controlsTooltip": "Скрыть элементы управления воспроизведением видео. Может поддерживаться не всеми источниками видео.", - "volumeTooltip": "Установка громкости проигрывателя, от 0 до 1", - "playbackRateTooltip": "Установите скорость игрока, между 1 и 2", - "srcDesc": "Текущий URI аудиофайла или строка Base64, например data:video/mp4;base64, AAA... CCC", - "play": "Играть", - "playDesc": "Срабатывает при воспроизведении видео", - "pause": "Пауза", - "pauseDesc": "Срабатывает, когда видео приостанавливается", - "load": "Загрузить", - "loadDesc": "Срабатывает после завершения загрузки видеоресурса", - "ended": "Окончание", - "endedDesc": "Срабатывает по окончании воспроизведения видео", - "currentTimeStamp": "Текущая позиция воспроизведения видео в секундах", - "duration": "Общая продолжительность видео в секундах", - }, - "media": { - ...en.media, - - "playDesc": "Начинает воспроизведение носителя.", - "pauseDesc": "Приостанавливает воспроизведение мультимедиа.", - "loadDesc": "Сброс носителя на начало и перезапуск Выбор медиаресурса.", - "seekTo": "Ищите до заданного количества секунд или долей, если количество от 0 до 1", - "seekToAmount": "Количество секунд или дробь, если она от 0 до 1", - "showPreview": "Предварительный просмотр", - }, - "rangeSlider": { - ...en.rangeSlider, - - "start": "Начальное значение", - "end": "Конечное значение", - "step": "Размер шага", - "stepTooltip": "Зернистость ползунка, значение должно быть больше 0 и делиться на (Max-Min)", - }, - "iconControl": { - ...en.iconControl, - - "selectIcon": "Выберите значок", - "insertIcon": "Вставить значок", - "insertImage": "Вставить изображение или", - }, - "shapeControl": { - ...en.shapeControl, - - "selectShape": "Выберите форму", - "insertShape": "Вставить фигуру", - "insertImage": "Вставить изображение или", - }, - "millisecondsControl": { - ...en.millisecondsControl, - - "timeoutTypeError": "Пожалуйста, введите правильный период тайм-аута в мс, текущий входной сигнал: {value}", - "timeoutLessThanMinError": "Вход должен быть больше, чем {left}, текущий вход составляет: {value}", - }, - "selectionControl": { - ...en.selectionControl, - - "single": "Одиночка", - "multiple": "Множество", - "close": "Закрыть", - "mode": "Режим выбора строк", - }, - "container": { - ...en.container, - - "title": "Отображаемое название контейнера", - "titleTooltip": "Название контейнера", - "flowWidth": "Ширина содержимого", - "floatType": "Текст Тип поплавка", - }, - "drawer": { - ...en.drawer, - - "closePosition": "Размещение кнопки закрытия", - "placement": "Размещение ящиков", - "size": "Размер", - "top": "Топ", - "right": "Справа", - "center": "Центр", - "bottom": "Дно", - "left": "Слева", - "title": "Название ящика", - "titleAlign": "Согласование названий", - "widthTooltip": "Пиксель или процент, например, 520, 60%", - "heightTooltip": "Пиксель, например, 378", - "openDrawerDesc": "Открытый ящик", - "closeDrawerDesc": "Закрыть ящик", - "width": "Ширина ящика", - "height": "Высота ящика", - }, - "meeting": { - ...en.meeting, - - "logLevel": "Уровень журнала Agora SDK", - "placement": "Размещение ящиков для совещаний", - "meeting": "Настройки совещаний", - "cameraView": "Посмотреть номер", - "cameraViewDesc": "Вид с камеры на локального пользователя (хост)", - "screenShared": "Общий экран", - "screenSharedDesc": "Экран, разделяемый локальным пользователем (хостом)", - "audioUnmuted": "Аудио без звука", - "audioMuted": "Приглушение звука", - "videoClicked": "Видео нажато", - "videoOff": "Видео выключено", - "videoOn": "Видео на", - "size": "Размер", - "top": "Топ", - "host": "Хост переговорной комнаты. Вам нужно будет управлять хостом как собственным Application Logic", - "participants": "Участники совещания", - "shareScreen": "Экран, совместно используемый локальным пользователем", - "appid": "Идентификатор приложения Agora", - "meetingName": "Название встречи", - "localUserID": "Идентификатор пользователя хоста", - "userName": "Имя пользователя хоста", - "rtmToken": "Токен Agora RTM", - "rtcToken": "Токен Agora RTC", - "noVideo": "Нет видео", - "profileImageUrl": "URL-адрес изображения профиля", - "right": "Справа", - "bottom": "Дно", - "videoId": "Идентификатор видеопотока", - "audioStatus": "Состояние звука", - "left": "Слева", - "widthTooltip": "Пиксель или процент, например, 520, 60%", - "heightTooltip": "Пиксель, например, 378", - "openDrawerDesc": "Открытый ящик", - "closeDrawerDesc": "Закрыть ящик", - "width": "Ширина ящика", - "height": "Высота ящика", - "actionBtnDesc": "Кнопка действия", - "broadCast": "Широковещательные сообщения", - "title": "Название встречи", - "meetingCompName": "Agora Meeting Controller", - "sharingCompName": "Screen Share Stream", - "videoCompName": "Поток камер", - "videoSharingCompName": "Screen Share Stream", - "meetingControlCompName": "Кнопка со значком", - "meetingCompDesc": "Компонент встречи", - "meetingCompControls": "Управление совещаниями", - "meetingCompKeywords": "Agora Meeting, веб-совещания, совместная работа", - "iconSize": "Размер значка", - "userId": "Идентификатор пользователя хоста", - "roomId": "ID комнаты", - "meetingActive": "Текущая встреча", - "messages": "Передаваемые сообщения", - }, - "settings": { - ...en.settings, - - "title": "Настройки", - "userGroups": "Группы пользователей", - "organization": "Рабочие места", - "subscription": "Подписки", - "audit": "Журналы аудита", - "theme": "Темы", - "plugin": "Плагины", - "advanced": "Расширенный", - "apiDocs": "Документы API", - "lab": "Лаборатория", - "branding": "Брендинг", - "oauthProviders": "Аутентификация пользователей", - "appUsage": "Журналы использования приложений", - "environments": "Окружающая среда", - "premium": "Премиум", - "AppUsage": "Глобальное использование приложений", - }, - "memberSettings": { - ...en.memberSettings, - - "admin": "Администратор", - "superAdmin": "Суперадминистратор", - "adminGroupRoleInfo": "Администратор может управлять членами группы и ресурсами", - "adminOrgRoleInfo": "Администраторы владеют всеми ресурсами и могут управлять группами.", - "member": "Член", - "memberGroupRoleInfo": "Участник может просматривать членов группы", - "memberOrgRoleInfo": "Участники могут использовать или посещать только те ресурсы, к которым у них есть доступ.", - "title": "Члены", - "createGroup": "Создать группу", - "newGroupPrefix": "Новая группа", - "allMembers": "Все члены", - "deleteModalTitle": "Удалить эту группу", - "deleteModalContent": "Удаленная группа не может быть восстановлена. Вы уверены, что удалите группу?", - "addMember": "Добавить участников", - "nameColumn": "Имя пользователя", - "joinTimeColumn": "Время присоединения", - "actionColumn": "Операция", - "roleColumn": "Роль", - "exitGroup": "Группа \"Выход", - "moveOutGroup": "Удалить из группы", - "inviteUser": "Пригласить участников", - "exitOrg": "Оставить", - "exitOrgDesc": "Вы уверены, что хотите покинуть это рабочее место?", - "moveOutOrg": "Удалить", - "moveOutOrgDescSaasMode": "Вы уверены, что хотите удалить пользователя {name} из этого рабочего пространства?", - "moveOutOrgDesc": "Вы уверены, что хотите удалить пользователя {name}? Это действие не может быть восстановлено.", - "devGroupTip": "Члены группы разработчиков имеют привилегии на создание приложений и источников данных.", - "lastAdminQuit": "Последний администратор не может выйти.", - "organizationNotExist": "Текущая рабочая область не существует", - "inviteUserHelp": "Вы можете скопировать ссылку на приглашение, чтобы отправить его пользователю", - "inviteUserLabel": "Ссылка на приглашение:", - "inviteCopyLink": "Копировать ссылку", - "inviteText": "{userName} приглашает вас присоединиться к рабочему пространству \"{organization}\", нажмите на ссылку, чтобы присоединиться: {inviteLink}", - "groupName": "Название группы", - "createTime": "Создать время", - "manageBtn": "Управление", - "userDetail": "Деталь", - "syncDeleteTip": "Эта группа была удалена из источника адресной книги", - "syncGroupTip": "Эта группа является группой синхронизации адресной книги и не может быть отредактирована", - }, - "orgSettings": { - ...en.orgSettings, - - "newOrg": "Новое рабочее пространство (Организация)", - "title": "Рабочее пространство", - "createOrg": "Создать рабочее пространство (организация)", - "deleteModalTitle": "Вы уверены, что хотите удалить это рабочее пространство?", - "deleteModalContent": "Вы собираетесь удалить это рабочее пространство {permanentlyDelete}. После удаления рабочее пространство {notRestored}.", - "permanentlyDelete": "Постоянно", - "notRestored": "Невозможно восстановить", - "deleteModalLabel": "Введите имя рабочей области {name}, чтобы подтвердить операцию:", - "deleteModalTip": "Введите имя рабочей области", - "deleteModalErr": "Неверное имя рабочей области", - "deleteModalBtn": "Удалить", - "editOrgTitle": "Редактирование информации о рабочей области", - "orgNameLabel": "Имя рабочего пространства:", - "orgNameCheckMsg": "Имя рабочей области не может быть пустым", - "orgLogo": "Логотип рабочего пространства:", - "logoModify": "Изменить изображение", - "inviteSuccessMessage": "Успешное присоединение к рабочему пространству", - "inviteFailMessage": "Не удалось присоединиться к рабочему пространству", - "uploadErrorMessage": "Ошибка загрузки", - "orgName": "Имя рабочей области", - }, - "freeLimit": "Бесплатная пробная версия", - "tabbedContainer": { - ...en.tabbedContainer, - - "switchTab": "Вкладка \"Переключение", - "switchTabDesc": "Срабатывает при переключении вкладок", - "tab": "Табы", - "atLeastOneTabError": "В контейнере для вкладок хранится как минимум одна вкладка", - "selectedTabKeyDesc": "Выбранная вкладка", - "iconPosition": "Положение значка", - "placement": "Размещение вкладок", - "showTabs": "Показать вкладки", - "gutter": "Gap", - "gutterTooltip": "Расстояние между вкладками в px", - "tabsCentered": "Вкладки по центру", - }, - "formComp": { - ...en.formComp, - - "containerPlaceholder": "Перетащите компоненты с правой панели или", - "openDialogButton": "Создайте форму на основе одного из источников данных", - "resetAfterSubmit": "Сброс после успешной отправки", - "initialData": "Исходные данные", - "disableSubmit": "Отключить отправку", - "success": "Форма сгенерирована успешно", - "selectCompType": "Выберите тип компонента", - "dataSource": "Источник данных:", - "selectSource": "Выберите источник", - "table": "Таблица:", - "selectTable": "Выберите таблицу", - "columnName": "Имя колонки", - "dataType": "Тип данных", - "compType": "Тип компонента", - "required": "Требуется", - "generateForm": "Создать форму", - "compSelectionError": "Тип ненастроенного столбца", - "compTypeNameError": "Не удалось получить имя типа компонента", - "noDataSourceSelected": "Источник данных не выбран", - "noTableSelected": "Нет выбранного стола", - "noColumn": "Нет колонки", - "noColumnSelected": "Колонка не выбрана", - "noDataSourceFound": "Не найден поддерживаемый источник данных. Создайте новый источник данных", - "noTableFound": "В этом источнике данных не найдено таблиц, выберите другой источник данных", - "noColumnFound": "В этой таблице не найдено поддерживаемых столбцов. Пожалуйста, выберите другую таблицу", - "formTitle": "Название формы", - "name": "Имя", - "nameTooltip": "Имя атрибута в данных формы, оставленное пустым, по умолчанию соответствует имени компонента", - "notSupportMethod": "Методы не поддерживаются:", - "notValidForm": "Форма недействительна", - "resetDesc": "Сброс данных формы на значение по умолчанию", - "clearDesc": "Очистить данные формы", - "setDataDesc": "Установить данные формы", - "valuesLengthError": "Номер параметра Ошибка", - "valueTypeError": "Тип параметра Ошибка", - "dataDesc": "Данные текущей формы", - "loadingDesc": "Загружается ли форма?", - }, - "modalComp": { - ...en.modalComp, - - "open": "Открыть", - "openDesc": "Срабатывает при открытии модального диалогового окна", - "close": "Закрыть", - "closeDesc": "Срабатывает при закрытии модального диалогового окна", - "openModalDesc": "Откройте диалоговое окно", - "closeModalDesc": "Закрыть диалоговое окно", - "visibleDesc": "Видима ли она? Если да, появится текущее диалоговое окно", - "title": "Название ящика", - "titleAlign": "Согласование названий", - "modalHeight": "Модальная высота", - "modalHeightTooltip": "Пиксель, пример: 222", - "modalWidth": "Ширина модала", - "modalWidthTooltip": "Число или процент, Пример: 520, 60%", - }, - "listView": { - ...en.listView, - - "noOfRows": "Счетчик строк", - "noOfRowsTooltip": "Количество строк в списке - обычно задается переменной (например, '{{query1.data.length}}') для представления результатов запроса", - "noOfColumns": "Счетчик колонок", - "itemIndexName": "Имя индекса элемента данных", - "itemIndexNameDesc": "Имя переменной, относящееся к индексу элемента, по умолчанию {default}", - "itemDataName": "Имя объекта элемента данных", - "itemDataNameDesc": "Имя переменной, относящееся к объекту данных элемента, по умолчанию {default}", - "itemsDesc": "Раскрытие данных компонентов в списке", - "dataDesc": "Данные JSON, используемые в текущем списке", - "dataTooltip": "Если вы просто зададите число, это поле будет рассматриваться как Row Count, а данные будут считаться пустыми.", - }, - "navigation": { - ...en.navigation, - - "addText": "Добавить элемент подменю", - "logoURL": "Навигация Логотип URL", - "horizontalAlignment": "Горизонтальное выравнивание", - "logoURLDesc": "Вы можете отобразить логотип в левой части, введя значение URI или строку Base64, например data:image/png;base64,AAA... CCC", - "itemsDesc": "Элементы иерархического навигационного меню", - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - - "subMenu": "Подменю {number}", - }, - "navItemComp": { - ...en.navItemComp, - - "active": "Активный", - }, - "iframe": { - ...en.iframe, - - "URLDesc": "URL-адрес источника содержимого IFrame. Убедитесь, что URL-адрес является HTTPS или localhost. Также убедитесь, что URL не заблокирован политикой безопасности содержимого (CSP) браузера. Заголовок 'X-Frame-Options' не должен быть установлен на 'DENY' или 'SAMEORIGIN'.", - "allowDownload": "Разрешить загрузку", - "allowSubmitForm": "Разрешить отправку формы", - "allowMicrophone": "Разрешить микрофон", - "allowCamera": "Разрешить камеру", - "allowPopup": "Разрешить всплывающие окна", - }, - "switchComp": { - ...en.switchComp, - - "defaultValue": "Булево значение по умолчанию", - "open": "На сайте", - "close": "С сайта", - "openDesc": "Срабатывает при включении выключателя", - "closeDesc": "Срабатывает при выключении выключателя", - "valueDesc": "Текущее состояние переключателя", - }, - "signature": { - ...en.signature, - - "tips": "Текст подсказки", - "signHere": "Подпишитесь здесь", - "showUndo": "Показать отмену", - "showClear": "Показать чистоту", - }, - "localStorageComp": { - ...en.localStorageComp, - - "valueDesc": "Все элементы данных, хранящиеся в данный момент", - "setItemDesc": "Добавить элемент", - "removeItemDesc": "Удалить элемент", - "clearItemDesc": "Очистить все элементы", - }, - "utilsComp": { - ...en.utilsComp, - - "openUrl": "Открытый URL", - "openApp": "Открытое приложение", - "copyToClipboard": "Копировать в буфер обмена", - "downloadFile": "Скачать файл", - }, - "messageComp": { - ...en.messageComp, - - "info": "Отправить уведомление", - "loading": "Отправить уведомление о загрузке", - "success": "Отправить уведомление об успехе", - "warn": "Отправить уведомление о предупреждении", - "error": "Отправить уведомление об ошибке", - }, - "toastComp": { - ...en.toastComp, - - "destroy": "закрыть уведомление", - "info": "Отправить уведомление", - "loading": "Отправить уведомление о загрузке", - "success": "Отправить уведомление об успехе", - "warn": "Отправить уведомление о предупреждении", - "error": "Отправить уведомление об ошибке", - }, - "themeComp": { - ...en.themeComp, - - "switchTo": "Switch Theme", - }, - "transformer": { - ...en.transformer, - - "preview": "Предварительный просмотр", - "docLink": "Подробнее о трансформерах...", - "previewSuccess": "Предварительный просмотр Успех", - "previewFail": "Предварительный просмотр Неудача", - "deleteMessage": "Удаление трансформера успешно. Вы можете использовать {undoKey} для отмены.", - "documentationText": "Трансформаторы предназначены для преобразования данных и повторного использования вашего многострочного кода JavaScript. Используйте трансформаторы для адаптации данных из запросов или компонентов к потребностям вашего локального приложения. В отличие от JavaScript-запросов, трансформатор предназначен для выполнения операций только для чтения, что означает, что вы не можете запустить запрос или обновить временное состояние внутри трансформатора.", - }, - "temporaryState": { - ...en.temporaryState, - - "value": "Начальное значение", - "valueTooltip": "Начальное значение, хранящееся во временном состоянии, может быть булевым, строковым, числовым или любым другим допустимым значением JSON.", - "docLink": "Подробнее о временных штатах...", - "pathTypeError": "Путь должен быть либо строкой, либо массивом значений", - "unStructuredError": "Неструктурированные данные {prev} не могут быть обновлены {path}", - "valueDesc": "Временное государственное значение", - "deleteMessage": "Временное состояние удалено успешно. Вы можете использовать {undoKey} для отмены.", - "documentationText": "Временные состояния - это мощная функция, используемая для управления сложными переменными, которые динамически обновляют состояние компонентов в вашем приложении. Эти состояния выступают в качестве промежуточного или переходного хранилища для данных, которые могут изменяться со временем из-за взаимодействия с пользователем или других процессов.", - }, - "dataResponder": { - ...en.dataResponder, - - "data": "Данные", - "dataDesc": "Данные текущего респондента", - "dataTooltip": "Когда эти данные изменятся, это послужит толчком к последующим действиям.", - "docLink": "Подробнее о респондентах...", - "deleteMessage": "Ответчик данных успешно удален. Вы можете использовать {undoKey} для отмены.", - "documentationText": "При разработке приложения вы можете назначать события компонентам для отслеживания изменений в определенных данных. Например, компонент Table может иметь такие события, как \"Изменение выбора строки\", \"Изменение фильтра\", \"Изменение сортировки\" и \"Изменение страницы\", чтобы отслеживать изменения в свойстве selectedRow. Однако для изменений во временных состояниях, трансформаторах или результатах запросов, когда стандартные события недоступны, используются ответчики данных. Они позволяют обнаруживать и реагировать на любые изменения данных.", - }, - "theme": { - ...en.theme, - - "title": "Темы", - "createTheme": "Создать тему", - "themeName": "Название темы:", - "themeNamePlaceholder": "Пожалуйста, введите название темы", - "defaultThemeTip": "Тема по умолчанию:", - "createdThemeTip": "Тема, которую вы создали:", - "option": "Option{index}", - "input": "Вход", - "confirm": "Хорошо", - "emptyTheme": "Темы не доступны", - "click": "", - "toCreate": "", - "nameColumn": "Имя", - "defaultTip": "По умолчанию", - "updateTimeColumn": "Время обновления", - "edit": "Редактировать", - "cancelDefaultTheme": "Неустановленная тема по умолчанию", - "setDefaultTheme": "Установите тему по умолчанию", - "copyTheme": "Дублирование темы", - "setSuccessMsg": "Установка удалась", - "cancelSuccessMsg": "Унсеттинг преуспел", - "deleteSuccessMsg": "Удаление прошло успешно", - "checkDuplicateNames": "Название темы уже существует, пожалуйста, введите его заново", - "copySuffix": " Копировать", - "saveSuccessMsg": "Сохранено успешно", - "leaveTipTitle": "Советы", - "leaveTipContent": "Вы еще не сохранились, подтверждаете уход?", - "leaveTipOkText": "Оставить", - "goList": "Назад к списку", - "saveBtn": "Сохранить", - "mainColor": "Основные цвета", - "text": "Цвета текста", - "layout": "Настройки макета", - "fonts": "Настройки шрифта", - "components": "Шаблоны компонентов", - "charts": "Определение eCharts", - "defaultTheme": "По умолчанию", - "yellow": "Желтый", - "green": "Зеленый", - "previewTitle": "Предварительный просмотр темы\nПримеры компонентов, использующих цвета вашей темы", - "dateColumn": "Дата", - "emailColumn": "Электронная почта", - "phoneColumn": "Телефон", - "subTitle": "Название", - "linkLabel": "Ссылка на", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Прогресс", - "sliderLabel": "Слайдер", - "radioLabel": "Радио", - "checkboxLabel": "Флажок", - "buttonLabel": "Кнопка формы", - "switch": "Переключатель", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "balloon.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Предварительный просмотр стиля диаграммы", - "chartSpending": "Расходы", - "chartBudget": "Бюджет", - "chartAdmin": "Администрация", - "chartFinance": "Финансы", - "chartSales": "Продажи", - "chartFunnel": "Диаграмма воронки", - "chartShow": "Показать", - "chartClick": "Нажмите", - "chartVisit": "Посетите", - "chartQuery": "Запрос", - "chartBuy": "Купить", - }, - "themeDetail": { - ...en.themeDetail, - - "primary": "Фирменный цвет", - "primaryDesc": "Основной цвет по умолчанию, используемый большинством компонентов", - "textDark": "Темный цвет текста", - "textDarkDesc": "Используется, когда цвет фона светлый", - "textLight": "Светлый цвет текста", - "textLightDesc": "Используется, когда цвет фона темный", - "canvas": "Цвет холста", - "canvasDesc": "Цвет фона приложения по умолчанию", - "primarySurface": "Цвет контейнера", - "primarySurfaceDesc": "Цвет фона по умолчанию для таких компонентов, как таблицы", - "borders": "Пограничные стили", - "spacing": "Стили интервалов", - "font": "Стили шрифтов", - "fonts": "Шрифты", - "borderRadius": "Радиус границы", - "borderRadiusDesc": "Радиус границы по умолчанию, используемый большинством компонентов", - "borderColor": "Цвет границы", - "borderColorDesc": "Цвет границы по умолчанию, используемый большинством компонентов", - "borderWidth": "Ширина границы", - "borderWidthDesc": "Ширина границы по умолчанию, используемая большинством компонентов", - "borderStyle": "Пограничный стиль", - "borderStyleDesc": "Стиль границы по умолчанию, используемый большинством компонентов", - "fontFamily": "Семейство шрифтов", - "fontFamilyDesc": "Семейство шрифтов по умолчанию, используемое большинством компонентов", - "chart": "Стиль диаграммы", - "chartDesc": "Здесь вы можете разместить eCharts Theme JSON, чтобы определить стиль ваших диаграмм во всех деталях.", - "echartsJson": "Вы можете воспользоваться Генератором JSON темы. Скопируйте JSON из генератора и вставьте его сюда.", - "margin": "Маржа", - "marginDesc": "Маржа по умолчанию, обычно используемая для большинства компонентов", - "padding": "Набивка", - "paddingDesc": "Подкладка по умолчанию, обычно используемая для большинства компонентов", - "containerHeaderPadding": "Подшивка заголовков", - "containerheaderpaddingDesc": "Подложка заголовка по умолчанию, обычно используемая для большинства компонентов", - "gridColumns": "Колонки сетки холста", - "gridColumnsDesc": "Количество столбцов по умолчанию, обычно используемое для большинства контейнеров", - "loadingIndicators": "Индикаторы загрузки", - "showComponentLoadingIndicators": "Показывайте индикаторы загрузки при загрузке компонента", - "showDataLoadingIndicators": "Показывайте индикаторы загрузки при загрузке данных", - "showIndicatorsDuringDataLoading": "Показывать индикаторы во время загрузки данных", - "dataLoadingIndicator": "Индикатор загрузки данных" - }, - "pluginSetting": { - ...en.pluginSetting, - - "title": "Плагины", - "npmPluginTitle": "плагины npm", - "npmPluginDesc": "Установите плагины npm для всех приложений в текущем рабочем пространстве.", - "npmPluginEmpty": "Плагины npm не были добавлены.", - "npmPluginAddButton": "Добавьте плагин npm", - "saveSuccess": "Сохранено успешно", - }, - "advanced": { - ...en.advanced, - - "title": "Расширенный", - "defaultHomeTitle": "Домашняя страница по умолчанию", - "defaultHomeHelp": "Домашняя страница - это приложение, которое все пользователи, не являющиеся разработчиками, будут видеть по умолчанию при входе в систему. Примечание: Убедитесь, что выбранное приложение доступно для пользователей, не являющихся разработчиками.", - "defaultHomePlaceholder": "Выберите домашнюю страницу по умолчанию", - "saveBtn": "Сохранить", - "preloadJSTitle": "Предварительная загрузка JavaScript", - "preloadJSHelp": "Установите предварительно загруженный код JavaScript для всех приложений в текущей рабочей области.", - "preloadCSSTitle": "Предварительная загрузка CSS", - "preloadCSSHelp": "Установите предварительно загруженный код CSS для всех приложений в текущей рабочей области.", - "preloadCSSApply": "Применить к домашней странице рабочей области", - "preloadLibsTitle": "Библиотека JavaScript", - "preloadLibsHelp": "Установите предварительно загруженные библиотеки JavaScript для всех приложений в текущем рабочем пространстве, и система имеет встроенные lodash, day.js, uuid, numbro для прямого использования. Библиотеки JavaScript загружаются до инициализации приложения, поэтому это оказывает определенное влияние на производительность приложения.", - "preloadLibsEmpty": "Библиотеки JavaScript не были добавлены", - "preloadLibsAddBtn": "Добавить библиотеку", - "saveSuccess": "Сохранено успешно", - "AuthOrgTitle": "Экран приветствия рабочей области", - "AuthOrgDescrition": "URL-адрес для входа ваших пользователей в текущее рабочее пространство.", - "APIConsumption": "Потребление API", - "APIConsumptionDescription": "Здесь вы можете увидеть потребление API для всех приложений в текущем рабочем пространстве.", - "overallAPIConsumption": "Общее потребление API в этой рабочей области до настоящего времени", - "lastMonthAPIConsumption": "Потребление API за последний месяц в данной рабочей области", - "npmRegistryTitle": "Пользовательский реестр NPM", - "npmRegistryHelp": "Настройте пользовательский реестр NPM, чтобы обеспечить получение плагинов из частного реестра NPM.", - "showHeaderInPublicApps": "Показать заголовок в публичном представлении", - "showHeaderInPublicAppsHelp": "Настройка видимости заголовка в публичном представлении для всех приложений", - }, - "branding": { - ...en.branding, - - "title": "Брендинг", - "logoTitle": "Логотип", - "logoHelp": "Только .JPG, .SVG или .PNG", - "faviconTitle": "Фавикон", - "faviconHelp": "Только .JPG, .SVG или .PNG", - "brandNameTitle": "Название бренда", - "headColorTitle": "Цвет головы", - "save": "Сохранить", - "saveSuccessMsg": "Сохранено успешно", - "upload": "Нажмите, чтобы загрузить", - }, - "networkMessage": { - ...en.networkMessage, - - "0": "Не удалось подключиться к серверу, проверьте сеть", - "200": "Успех", - "201": "Создано", - "204": "Нет содержания", - "400": "Плохая просьба", - "401": "Аутентификация не прошла, пожалуйста, войдите снова", - "403": "Нет разрешения, обратитесь к администратору для получения разрешения", - "404": "Не найдено", - "500": "Служба занята, повторите попытку позже", - "timeout": "Таймаут запроса", - }, - "share": { - ...en.share, - - "title": "Поделиться", - "viewer": "Просмотрщик", - "editor": "Редактор", - "owner": "Владелец", - "datasourceViewer": "Можно использовать", - "datasourceOwner": "Может управлять", - }, - "debug": { - ...en.debug, - - "title": "Название", - "switch": "Компонент переключателя:", - }, - "module": { - ...en.module, - - "emptyText": "Нет данных", - "docLink": "Подробнее о модулях...", - "documentationText": "Модули - это полноценные приложения, которые могут включаться и повторяться в других приложениях и функционировать так же, как отдельный компонент. Поскольку модули могут быть встроены, они должны иметь возможность взаимодействовать с внешними приложениями или веб-сайтами. Эти четыре параметра помогают поддерживать взаимодействие с модулем.", - "circularReference": "Круговая ссылка, текущий модуль/приложение не может быть использован!", - "emptyTestInput": "Текущий модуль не имеет входа для тестирования", - "emptyTestMethod": "Текущий модуль не имеет метода тестирования", - "name": "Имя", - "input": "Вход", - "params": "Params", - "emptyParams": "Никакие параметры не были добавлены", - "emptyInput": "Ввод не был добавлен", - "emptyMethod": "Метод не был добавлен", - "emptyOutput": "Выходные данные не были добавлены", - "data": "Данные", - "string": "Строка", - "number": "Номер", - "array": "Массив", - "boolean": "Булево", - "query": "Запрос", - "autoScaleCompHeight": "Весы для измерения высоты компонентов с контейнером", - "excuteMethod": "Выполнить метод {name}", - "method": "Метод", - "action": "Действие", - "output": "Выход", - "nameExists": "Имя {name} Уже существует", - "eventTriggered": "Срабатывает событие {name}", - "globalPromptWhenEventTriggered": "Отображение глобальной подсказки при срабатывании события", - "emptyEventTest": "Текущий модуль не имеет событий для тестирования", - "emptyEvent": "Событие не было добавлено", - "event": "Событие", - }, - "resultPanel": { - ...en.resultPanel, - - "returnFunction": "Возвращаемое значение - это функция.", - "consume": "{time}", - "JSON": "Показать JSON", - }, - "createAppButton": { - ...en.createAppButton, - - "creating": "Создание...", - "created": "Создайте {name}", - }, - "apiMessage": { - ...en.apiMessage, - - "authenticationFail": "Аутентификация пользователя не прошла, пожалуйста, войдите снова", - "verifyAccount": "Необходимо подтвердить учетную запись", - "functionNotSupported": "Текущая версия не поддерживает эту функцию. Пожалуйста, свяжитесь с командой Lowcoder Business Team, чтобы обновить ваш аккаунт", - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - - "createCompFail": "Создать компонент {comp} Не удалось", - "notHandledError": "{method} Метод не выполнен", - }, - "aggregation": { - ...en.aggregation, - - "navLayout": "Панель навигации", - "chooseApp": "Выберите приложение", - "iconTooltip": "Поддержка ссылки на src изображения или строки Base64, например data:image/png;base64, AAA... CCC", - "hideWhenNoPermission": "Скрыт для неавторизованных пользователей", - "queryParam": "Параметры запроса URL", - "hashParam": "Параметры хэша URL", - "tabBar": "Панель вкладок", - "emptyTabTooltip": "Настройте эту страницу на правой панели", - }, - "appSetting": { - ...en.appSetting, - - "450": "450px (Телефон)", - "800": "800px (планшет)", - "1440": "1440px (ноутбук)", - "1920": "1920px (широкий экран)", - "3200": "3200px (сверхбольшой экран)", - "title": "Общие настройки приложения", - "autofill": "Автозаполнение", - "userDefined": "Пользовательское", - "default": "По умолчанию", - "tooltip": "Закройте всплывающее окно после установки", - "canvasMaxWidth": "Максимальная ширина холста для этого приложения", - "userDefinedMaxWidth": "Пользовательская максимальная ширина", - "inputUserDefinedPxValue": "Введите пользовательское значение пикселя", - "maxWidthTip": "Максимальная ширина должна быть больше или равна 350", - "themeSetting": "Прикладной стиль Тема", - "themeSettingDefault": "По умолчанию", - "themeCreate": "Создать тему", - "appTitle": "Название", - "appDescription": "Описание", - "appCategory": "Категория", - "showPublicHeader": "Показать заголовок в открытом виде", - }, - "customShortcut": { - ...en.customShortcut, - - "title": "Пользовательские ярлыки", - "shortcut": "Ярлык", - "action": "Действие", - "empty": "Никаких недомолвок", - "placeholder": "Нажмите клавишу быстрого доступа", - "otherPlatform": "Другие", - "space": "Космос", - }, - "profile": { - ...en.profile, - - "orgSettings": "Настройки рабочей области", - "switchOrg": "Переключение рабочего пространства", - "joinedOrg": "Мои рабочие места", - "createOrg": "Создать рабочее пространство", - "logout": "Выйти из системы", - "personalInfo": "Мой профиль", - "bindingSuccess": "Привязка {sourceName} Успех", - "uploadError": "Ошибка загрузки", - "editProfilePicture": "Изменить", - "saveUserNameTooltip": "Нажмите Enter, чтобы сохранить новое имя пользователя. Если вы видите свой Email, это означает, что мы просто захватили его в качестве имени пользователя, и вы можете изменить его на более подходящий. Ваш Email в качестве технического имени пользователя останется нетронутым.", - "changeAvatarTooltip": "Вы можете загружать файлы PNG или JPG", - "nameCheck": "Имя не может быть пустым", - "name": "Имя:", - "namePlaceholder": "Пожалуйста, введите ваше имя", - "toBind": "Связать", - "binding": "Обязательно", - "bindError": "Ошибка параметра, в настоящее время не поддерживается Привязка.", - "bindName": "Связать {name}", - "loginAfterBind": "После привязки вы можете использовать {name} для входа в систему", - "bindEmail": "Привязать электронную почту:", - "email": "Электронная почта", - "emailCheck": "Пожалуйста, введите действительный адрес электронной почты", - "emailPlaceholder": "Пожалуйста, введите ваш e-mail", - "submit": "Отправить", - "bindEmailSuccess": "Успех переплетения электронных писем", - "passwordModifiedSuccess": "Пароль успешно изменен", - "passwordSetSuccess": "Пароль установлен успешно", - "oldPassword": "Старый пароль:", - "inputCurrentPassword": "Пожалуйста, введите ваш текущий пароль", - "newPassword": "Новый пароль:", - "inputNewPassword": "Пожалуйста, введите новый пароль", - "confirmNewPassword": "Подтвердите новый пароль:", - "inputNewPasswordAgain": "Пожалуйста, введите новый пароль еще раз", - "password": "Пароль:", - "modifyPassword": "Изменить пароль", - "setPassword": "Установить пароль", - "alreadySetPassword": "Установка пароля", - "setPassPlaceholder": "Вы можете войти в систему с помощью пароля", - "setPassAfterBind": "Вы можете установить пароль после привязки учетной записи", - "socialConnections": "Социальные связи", - "changeAvatar": "Изменить аватар", - "about": "О сайте", - "userId": "Идентификатор пользователя", - "createdAt": "Создано в", - "currentOrg": "Действующая организация", - "settings": "Настройки", - "uiLanguage": "Язык пользовательского интерфейса", - "info": "Информация", - "createdApps": "Созданные вами приложения", - "createdModules": "Созданные вами модули", - "sharedApps": "Приложения, которыми вы поделились с друзьями", - "sharedModules": "Модули, переданные вам", - "onMarketplace": "На рынке", - "howToPublish": "Как опубликовать на Marketplace", - "memberOfOrgs": "Членство в клубе Workspaces", - "apiKeys": "Ключи API", - "createApiKey": "Создайте ключ API", - "apiKeyName": "Имя", - "apiKeyDescription": "Описание", - "apiKeyCopy": "Нажмите на ключ Api, чтобы получить значение в буфере обмена", - "apiKey": "Ключ API", - "deleteApiKey": "Удалить ключ API", - "deleteApiKeyContent": "Вы уверены, что хотите удалить этот ключ API?", - "deleteApiKeyError": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.", - }, - "shortcut": { - ...en.shortcut, - - "shortcutList": "Ярлыки клавиатуры", - "click": "Нажмите", - "global": "Глобальная", - "toggleShortcutList": "Переключение сочетаний клавиш", - "editor": "Редактор", - "toggleLeftPanel": "Переключение левой панели", - "toggleBottomPanel": "Переключение нижней панели", - "toggleRightPanel": "Переключение правой панели", - "toggleAllPanels": "Переключить все панели", - "preview": "Предварительный просмотр", - "undo": "Отменить", - "redo": "Redo", - "showGrid": "Показать сетку", - "component": "Компонент", - "multiSelect": "Выберите несколько", - "selectAll": "Выбрать все", - "copy": "Копировать", - "cut": "Разрез", - "paste": "Паста", - "move": "Переместить", - "zoom": "Изменить размер", - "delete": "Удалить", - "deSelect": "Отмените выбор", - "queryEditor": "Редактор запросов", - "excuteQuery": "Выполнить текущий запрос", - "editBox": "Текстовый редактор", - "formatting": "Формат", - "openInLeftPanel": "Открыть в левой панели", - }, - "help": { - ...en.help, - - "videoText": "Обзор", - "onBtnText": "OK", - "permissionDenyTitle": "💡 Не удается создать новое приложение или источник данных?", - "permissionDenyContent": "У вас нет прав на создание приложения и источника данных. Обратитесь к администратору, чтобы присоединиться к группе разработчиков.", - "appName": "Учебное приложение", - "chat": "Пообщайтесь с нами", - "docs": "Посмотреть документацию", - "editorTutorial": "Учебный редактор", - "update": "Что нового?", - "version": "Версия", - "versionWithColon": "Версия:", - "submitIssue": "Подать заявку на выпуск", - }, - "header": { - ...en.header, - - "nameCheckMessage": "Имя не может быть пустым", - "viewOnly": "Только просмотр", - "recoverAppSnapshotTitle": "Восстановить эту версию?", - "recoverAppSnapshotContent": "Восстановите текущее приложение до версии, созданной в {time}.", - "recoverAppSnapshotMessage": "Восстановить эту версию", - "returnEdit": "Вернуться к редактору", - "deploy": "Опубликовать", - "export": "Экспорт в JSON", - "editName": "Редактировать имя", - "duplicate": "Дубликат {type}", - "snapshot": "История", - "scriptsAndStyles": "Сценарии и стиль", - "appSettings": "Настройки приложения", - "preview": "Предварительный просмотр", - "editError": "Режим предварительного просмотра истории, операция не поддерживается.", - "clone": "Клон", - "editorMode_layout": "Макет", - "editorMode_logic": "Логика", - "editorMode_both": "Оба", - "editorMode_layout_tooltip": "Настройте внешний вид и расположение компонента в правом окне. Настройте его внешний вид, стили и анимацию.", - "editorMode_logic_tooltip": "Настройте работу и взаимодействие вашего компонента в нужном окне. Управляйте его содержимым и интерактивным поведением.", - "AppEditingBlocked": "Редактирование приложения заблокировано для:", - "AppEditingBlockedHint": "Изменения не будут сохранены, пока другой пользователь редактирует это приложение.", - "AppEditingBlockedMessage": "Пожалуйста, подождите, прежде чем проверить статус редактирования приложения.", - "AppEditingBlockedCheckStatus": "Проверить статус приложения", - "AppEditingBlockedSomeone": "Кто-то", - "AppEditingBlockedMessageSnipped": "редактирует это приложение", - }, - "userAuth": { - ...en.userAuth, - - "registerByEmail": "Зарегистрироваться", - "email": "Электронная почта:", - "inputEmail": "Пожалуйста, введите свой адрес электронной почты", - "inputValidEmail": "Пожалуйста, введите действительный адрес электронной почты", - "forgotPassword": "Забыли пароль", - "forgotPasswordInfo": "Введите свой e-mail, и мы вышлем вам ссылку для сброса пароля.", - "forgotPasswordSuccess": "Пожалуйста, проверьте свою электронную почту, чтобы получить ссылку на сброс пароля.", - "forgotPasswordError": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.", - "register": "Зарегистрироваться", - "userLogin": "Войти", - "login": "Войти", - "bind": "Переплет", - "passwordCheckLength": "Не менее {min} символов", - "passwordCheckContainsNumberAndLetter": "Должны содержать буквы и цифры", - "passwordCheckSpace": "Не может содержать пробельные символы", - "welcomeTitle": "Добро пожаловать в {productName}", - "inviteWelcomeTitle": "___ЗНАКОМЕЦ0___ приглашает вас к совместной работе", - "terms": "Условия", - "privacy": "Политика конфиденциальности", - "registerHint": "Я прочитал и согласен с", - "chooseAccount": "Выберите свой аккаунт", - "signInLabel": "Войти с помощью {name}", - "bindAccount": "Привязать аккаунт", - "scanQrCode": "Отсканируйте QR-код с помощью {name}.", - "invalidThirdPartyParam": "Недействительный параметр третьей стороны", - "account": "Счет", - "inputAccount": "Пожалуйста, введите ваш счет", - "ldapLogin": "Вход в систему LDAP", - "resetPassword": "Сброс пароля", - "resetPasswordDesc": "Сбросьте пароль пользователя {name}. После сброса будет сгенерирован новый пароль.", - "resetSuccess": "Сброс прошел успешно", - "resetSuccessDesc": "Сброс пароля прошел успешно. Новый пароль: {password}", - "resetLostPasswordSuccess": "Сброс пароля прошел успешно. Пожалуйста, войдите снова.", - "copyPassword": "Копирование пароля", - "poweredByLowcoder": "Работает от: Lowcoder.cloud", - }, - "preLoad": { - ...en.preLoad, - - "jsLibraryHelpText": "Добавляйте библиотеки JavaScript в текущее приложение через URL-адреса. lodash, day.js, uuid, numbro встроены в систему для немедленного использования. Библиотеки JavaScript загружаются до инициализации приложения, что может повлиять на его производительность.", - "exportedAs": "Экспортировано как", - "urlTooltip": "URL-адрес библиотеки JavaScript, рекомендуется [unpkg.com](https://unpkg.com/) или [jsdelivr.net](https://www.jsdelivr.com/)", - "externalLibsHelperText": "Поддерживаются только библиотеки, использующие подход UMD (Universal Module Definition). Подробнее здесь: https://github.com/umdjs/umd", - "recommended": "Рекомендуем", - "viewJSLibraryDocument": "Документ", - "jsLibraryURLError": "Недопустимый URL", - "jsLibraryExist": "Библиотека JavaScript уже существует", - "jsLibraryEmptyContent": "Библиотеки JavaScript не добавлены", - "jsLibraryDownloadError": "Ошибка загрузки библиотеки JavaScript", - "jsLibraryInstallSuccess": "Библиотека JavaScript успешно установлена", - "jsLibraryInstallFailed": "Не удалось установить библиотеку JavaScript", - "jsLibraryInstallFailedCloud": "Возможно, библиотека недоступна в песочнице, [Документация](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{message}", - "add": "Добавить новый", - "jsHelpText": "Добавьте глобальный метод или переменную в текущее приложение.", - "cssHelpText": "Добавьте стили в текущее приложение. Структура DOM может меняться по мере итерации системы. Попытайтесь изменить стили через свойства компонента.", - "scriptsAndStyles": "Сценарии и стили", - "jsLibrary": "Библиотека JavaScript", - }, - "editorTutorials": { - ...en.editorTutorials, - - "component": "Компонент", - "componentContent": "Правая панель компонентов предлагает вам множество готовых блоков приложений (компонентов). Их можно перетаскивать на холст для использования. Вы также можете создавать собственные компоненты, обладая небольшими знаниями в области кодирования.", - "canvas": "Холст", - "canvasContent": "Создавайте свои приложения на холсте по принципу \"что видишь, то и получаешь\". Просто перетаскивайте компоненты для создания макета и используйте сочетания клавиш для быстрого редактирования, например, удаления, копирования и вставки. Выбрав компонент, вы можете точно настроить каждую деталь - от стиля и макета до привязки данных и логического поведения. Кроме того, вы можете воспользоваться дополнительными преимуществами отзывчивого дизайна, благодаря которому ваши приложения будут отлично смотреться на любом устройстве.", - "queryData": "Данные запроса", - "queryDataContent": "Здесь вы можете создавать запросы данных и подключаться к MySQL, MongoDB, Redis, Airtable и многим другим источникам данных. После настройки запроса нажмите кнопку \"Выполнить\", чтобы получить данные и продолжить обучение.", - "compProperties": "Свойства компонентов", - "interactiveDemo": "Интерактивная демонстрация", - "interactiveDemoToolTip": "Нажмите, чтобы начать интерактивную демонстрацию этой функции", - }, - "supademos": { - ...en.supademos, - - "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", - }, - "homeTutorials": { - ...en.homeTutorials, - - "createAppContent": "Добро пожаловать! Нажмите \"App\" и начните создавать свое первое приложение.", - "createAppTitle": "Создать приложение", - }, - "npmRegistry": { - ...en.npmRegistry, - - "npmRegistryEnable": "Включите пользовательский реестр NPM", - "npmRegistryUrl": "Урл реестра NPM", - "npmRegistryUrlRequired": "Пожалуйста, введите URL-адрес реестра", - "npmRegistryUrlInvalid": "Пожалуйста, введите действительный URL-адрес", - "npmRegistryScope": "Объем пакета", - "npmRegistryPattern": "Узор", - "npmRegistryPatternInvalid": "Пожалуйста, введите правильный шаблон (начиная с @ для организаций).", - "npmRegistryAuth": "Аутентификация", - "npmRegistryAuthType": "Тип аутентификации", - "npmRegistryAuthCredentials": "Учетные данные для аутентификации", - "npmRegistryAuthCredentialsRequired": "Введите учетные данные реестра", - "npmRegistryAuthCredentialsHelp": "Для базового аутентификатора укажите имя пользователя и пароль в формате base64(username:password), для токен-аута - токен.", - }, - "history": { - ...en.history, - - "layout": "Настройка макета '{0}'", - "upgrade": "Обновление '{0}'", - "delete": "Удалить '{0}'", - "add": "Добавьте '{0}'", - "modify": "Изменить '{0}'", - "rename": "Переименуйте '{1}' в '{0}'.", - "recover": "Восстановить версию '{2}'", - "recoverVersion": "Восстановить версию", - "andSoOn": "и так далее", - "timeFormat": "ММ ДД в чч:мм A", - "emptyHistory": "Нет истории", - "currentVersionWithBracket": " (Текущий)", - "currentVersion": "Текущая версия", - "justNow": "Только что", - "history": "История", - }, - "home": { - ...en.home, - - "profile": "Ваш профиль", - "news": "Новости", - "newsLoading": "Он будет загружаться несколько секунд.", - "orgHome": "Домашняя страница (Org)", - "yourOrg": "Ваша организация", - "orgHomeTitle": "Домашняя страница организации", - "appMarketplace": "Рынок приложений", - "allApplications": "Ваши приложения", - "allModules": "Ваши модули", - "allFolders": "Ваши папки", - "yourFolders": "Ваши папки", - "modules": "Модули", - "module": "Модуль", - "api": "Lowcoder API", - "trash": "Мусор", - "marketplace": "Рынок", - "allCategories": "Все категории", - "queryLibrary": "Библиотека запросов", - "datasource": "Источники данных", - "selectDatasourceType": "Выберите тип источника данных", - "home": "Главная", - "all": "Все", - "app": "Приложение", - "navigation": "Навигация", - "navLayout": "Навигация по ПК", - "navLayoutDesc": "Левостороннее меню для удобной навигации по рабочему столу.", - "mobileTabLayout": "Мобильная навигация", - "mobileTabLayoutDesc": "Нижняя навигационная панель для плавного просмотра страниц на мобильных устройствах.", - "folders": "Папки", - "folder": "Папка", - "rootFolder": "Корень", - "import": "Импорт", - "export": "Экспорт в JSON", - "show": "Показать", - "inviteUser": "Пригласить участников", - "createFolder": "Создать папку", - "createFolderSubTitle": "Имя папки:", - "moveToFolder": "Переместить в папку", - "moveToTrash": "Переместить в мусор", - "moveToFolderSubTitle": "Переместите \"{name}\" в:", - "folderName": "Имя папки:", - "resCardSubTitle": "{time} от {creator}", - "trashEmpty": "Корзина пуста.", - "projectEmpty": "Здесь ничего нет.", - "projectEmptyCanAdd": "У вас еще нет приложений. Нажмите \"Новое\", чтобы начать.", - "name": "Имя", - "type": "Тип", - "creator": "Создано", - "lastModified": "Последнее изменение", - "deleteTime": "Время удаления", - "createTime": "Создать время", - "datasourceName": "Имя источника данных", - "databaseName": "Имя базы данных", - "nameCheckMessage": "Имя не может быть пустым", - "deleteElementTitle": "Удалить навсегда", - "moveToTrashSubTitle": "{type} {name} будет перемещен в мусор.", - "deleteElementSubTitle": "Удалите {type} {name} навсегда, его невозможно восстановить.", - "deleteSuccessMsg": "Удалено успешно", - "deleteErrorMsg": "Удаленная ошибка", - "recoverSuccessMsg": "Восстановлено успешно", - "newDatasource": "Новый источник данных", - "creating": "Создание...", - "chooseDataSourceType": "Выберите тип источника данных", - "folderAlreadyExists": "Папка уже существует", - "newNavLayout": "{userName}'s {name}", - "newApp": "Новый {userName} от {name}", - "importError": "Ошибка импорта, {message}", - "exportError": "Ошибка экспорта, {message}", - "importSuccess": "Успех импорта", - "fileUploadError": "Ошибка загрузки файла", - "fileFormatError": "Ошибка формата файла", - "groupWithSquareBrackets": "[Группа]", - "allPermissions": "Владелец", - "shareLink": "Поделиться ссылкой:", - "copyLink": "Копировать ссылку", - "appPublicMessage": "Сделайте приложение общедоступным. Любой желающий сможет посмотреть.", - "modulePublicMessage": "Сделайте модуль общедоступным. Любой желающий сможет просмотреть его.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Опубликуйте свое приложение на публичной торговой площадке. Любой желающий сможет просмотреть и скопировать его оттуда.", - "moduleMarketplaceMessage": "Опубликуйте свой модуль на Публичной торговой площадке. Любой желающий может просмотреть и скопировать его оттуда.", - "marketplaceGoodPublishing": "Убедитесь, что ваше приложение имеет хорошее название и простое в использовании. Перед публикацией удалите всю конфиденциальную информацию. Также удалите локальные источники данных и замените их статическими встроенными временными данными.", - "noMarketplaceApps": "Пока нет приложений на рынке", - "errorMarketplaceApps": "Ошибка при загрузке приложений Marketplace", - "localMarketplaceTitle": "Местный рынок", - "globalMarketplaceTitle": "Общественный рынок", - "memberPermissionList": "Разрешения членов:", - "orgName": "{orgName} admins", - "addMember": "Добавить участников", - "addPermissionPlaceholder": "Пожалуйста, введите имя для поиска участников", - "searchMemberOrGroup": "Поиск участников или групп:", - "addPermissionErrorMessage": "Не удалось добавить разрешение, {message}", - "copyModalTitle": "Клонировать \"{name}\"", - "copyNameLabel": "Имя {type}", - "copyModalfolderLabel": "Добавить в папку", - "copyNamePlaceholder": "Пожалуйста, укажите имя {type}", - "chooseNavType": "Пожалуйста, выберите тип навигации", - "createNavigation": "Создать навигацию", - "howToUseAPI": "Как использовать открытый Rest API", - "support": "Поддержка", - }, - "support": { - ...en.support, - - "supportTitle": "Поддержка Lowcoder", - "supportContent": "Если у вас есть вопросы или вам нужна помощь, воспользуйтесь системой тикетов, чтобы быстро решить вашу проблему.", - "newSupportTicket": "Новый тикет поддержки", - "ticketTitle": "Название", - "priority": "Приоритет", - "assignee": "Назначение", - "status": "Статус билета", - "updatedTime": "Обновленное время", - "active": "Активный", - "inactive": "Неактивный", - "noEmail": "Нет электронной почты", - "details": "Подробности", - "reloadTickets": "Билеты на перезагрузку", - "createdDate": "Дата создания", - "updatedDate": "Дата обновления", - "description": "Описание выпуска", - "subtasks": "Подзадачи", - "subtasksProgress": "Выполнение всех подзадач", - "attachments": "Приложения к изданию", - "comments": "Комментарии", - "addComment": "Добавить комментарий", - "addAttachment": "Добавить вложение", - "edit": "Редактировать описание билета", - "save": "Сохранить билет Описание", - "cancel": "Отмена", - "submitComment": "Отправить комментарий", - "upload": "Отправить вложение", - "selectFile": "Выберите файл", - "ticketDescriptionUpdated": "Описание билета успешно обновлено!", - "ticketDescriptionUpdateFailed": "Не удалось обновить описание билета.", - "writeComment": "Написать комментарий...", - "ticketCommentAdded": "Комментарий успешно добавлен!", - "ticketCommentFailed": "Не удалось добавить комментарий.", - "ticketCommentEmpty": "Пожалуйста, напишите комментарий перед отправкой.", - "ticketAttachmentUploaded": "Вложение успешно загружено!", - "ticketAttachmentFailed": "Не удалось загрузить вложение.", - "ticketAttachmentEmpty": "Пожалуйста, выберите файл для загрузки.", - "ticketFetchError": "Не удалось загрузить билет.", - "ticketNotFound": "Билет не найден.", - "addAttachmentFileSize": "Файл должен быть меньше 5 МБ!", - "goBack": "Вернуться", - "noDescription": "Описание отсутствует.", - "createTicket": "Создайте новый тикет поддержки", - "createTicketTitlePlaceholder": "Введите название (не более 150 символов)", - "createTicketDescriptionTitle": "Опишите свою проблему - чем больше деталей, тем лучше:", - "createTicketDescriptionPlaceholder": "Подробно опишите проблему, включая: 1) шаги по воспроизведению проблемы, 2) ожидаемое поведение по сравнению с фактическим, 3) фрагменты кода, если применимо, 4) любые конкретные компоненты, API или конфигурации, затронутые проблемой.", - "createTicketSubmit": "Отправить билет", - "createTicketInfoText": "Когда билет создан, вы можете добавить скриншоты и комментарии в разделе \"Подробности\".", - }, - "carousel": { - ...en.carousel, - - "dotPosition": "Положение навигационных точек", - "autoPlay": "Автоигра", - "showDots": "Показать навигационные точки", - }, - "npm": { - ...en.npm, - - "invalidNpmPackageName": "Неверное имя пакета npm или URL.", - "pluginExisted": "Этот плагин npm уже существовал", - "compNotFound": "Компонент {compName} не найден.", - "addPluginModalTitle": "Добавление плагина из репозитория npm", - "pluginNameLabel": "URL или имя пакета npm", - "noCompText": "Компоненты отсутствуют.", - "compsLoading": "Загрузка...", - "removePluginBtnText": "Удалить", - "addPluginBtnText": "Добавьте плагин npm", - }, - "toggleButton": { - ...en.toggleButton, - - "valueDesc": "Значение по умолчанию для кнопки переключения, например: False", - "trueDefaultText": "Скрыть", - "falseDefaultText": "Показать", - "trueLabel": "Текст для True", - "falseLabel": "Текст для Ложь", - "trueIconLabel": "Значок \"Истина", - "falseIconLabel": "Значок \"Ложь", - "iconPosition": "Положение значка", - "showText": "Показать текст", - "alignment": "Выравнивание", - "showBorder": "Показать границу", - }, - "componentDoc": { - ...en.componentDoc, - - "markdownDemoText": "**Lowcoder** | Создавайте программные приложения для вашей компании и ваших клиентов с минимальным опытом кодирования. Lowcoder - это лучшая альтернатива Retool, Appsmith или Tooljet.", - "demoText": "Lowcoder | Создавайте программные приложения для вашей компании и ваших клиентов с минимальным опытом кодирования. Lowcoder - это лучшая альтернатива Retool, Appsmith или Tooljet.", - "submit": "Отправить", - "style": "Стиль", - "danger": "Опасность", - "warning": "Внимание", - "success": "Успех", - "menu": "Меню", - "link": "Ссылка на", - "customAppearance": "Пользовательский внешний вид", - "search": "Поиск", - "pleaseInputNumber": "Пожалуйста, введите номер", - "mostValue": "Наибольшая ценность", - "maxRating": "Максимальная оценка", - "notSelect": "Не выбрано", - "halfSelect": "Половина выбора", - "pleaseSelect": "Пожалуйста, выберите", - "title": "Название", - "content": "Содержание", - "componentNotFound": "Компонент не существует", - "example": "Примеры", - "defaultMethodDesc": "Установите значение свойства {name}", - "propertyUsage": "Вы можете читать информацию, связанную с компонентом, обращаясь к свойствам компонента по имени компонента везде, где можно писать JavaScript.", - "property": "Свойства", - "propertyName": "Название недвижимости", - "propertyType": "Тип", - "propertyDesc": "Описание", - "event": "События", - "eventName": "Название события", - "eventDesc": "Описание", - "mehtod": "Методы", - "methodUsage": "Вы можете взаимодействовать с компонентами с помощью соответствующих методов, доступ к которым можно получить по их именам в любом сегменте, где используется JavaScript. Кроме того, эти компоненты можно активировать с помощью действия 'Control Component', которое запускается в ответ на определенные события", - "methodName": "Название метода", - "methodDesc": "Описание", - "showBorder": "Показать границу", - "haveTry": "Попробуйте сами", - "settings": "Настройка", - "settingValues": "Значение настройки", - "defaultValue": "Значение по умолчанию", - "time": "Время", - "date": "Дата", - "noValue": "Нет", - "xAxisType": "Тип оси X", - "hAlignType": "Горизонтальное выравнивание", - "leftLeftAlign": "Выравнивание по левому краю", - "leftRightAlign": "Выравнивание влево-вправо", - "topLeftAlign": "Выравнивание по левому краю", - "topRightAlign": "Выравнивание вправо-вверх", - "validation": "Валидация", - "required": "Требуется", - "defaultStartDateValue": "Дата начала по умолчанию", - "defaultEndDateValue": "Дата окончания по умолчанию", - "basicUsage": "Базовое использование", - "basicDemoDescription": "В следующих примерах показано базовое использование компонента.", - "noDefaultValue": "Нет Значение по умолчанию", - "forbid": "Запрещенный", - "placeholder": "Место для размещения", - "pleaseInputPassword": "Пожалуйста, введите пароль", - "password": "Пароль", - "textAlign": "Выравнивание текста", - "length": "Длина", - "top": "Топ", - "pleaseInputName": "Пожалуйста, введите ваше имя", - "userName": "Имя", - "fixed": "Исправлено", - "responsive": "Отзывчивый", - "workCount": "Количество слов", - "cascaderOptions": "Опции каскадера", - "pleaseSelectCity": "Пожалуйста, выберите город", - "advanced": "Расширенный", - "showClearIcon": "Показать значок очистки", - /* eslint-disable only-ascii/only-ascii */ - "appleOptionLabel": "🍎 Apple", - "waterMelonOptionLabel": "🍉 Арбуз", - "berryOptionLabel": "🍓 Клубника", - "lemonOptionLabel": "🍋 Лимон", - "coconutOptionLabel": "🥥 Кокосовый орех", - "likedFruits": "Избранное", - /* eslint-enable only-ascii/only-ascii */ - "option": "Вариант", - "singleFileUpload": "Загрузка одного файла", - "multiFileUpload": "Многократная загрузка файлов", - "folderUpload": "Загрузка папок", - "multiFile": "Несколько файлов", - "folder": "Папка", - "open": "Открыть", - "favoriteFruits": "Любимые фрукты", - "pleaseSelectOneFruit": "Выберите фрукт", - "notComplete": "Не завершено", - "complete": "Полный", - "echart": "EChart", - "lineChart": "Линейная диаграмма", - "basicLineChart": "Основная линейная диаграмма", - "lineChartType": "Тип линейной диаграммы", - "stackLineChart": "Сложенная линия", - "areaLineChart": "Зональная линия", - "scatterChart": "Диаграмма рассеяния", - "scatterShape": "Форма россыпи", - "scatterShapeCircle": "Круг", - "scatterShapeRect": "Прямоугольник", - "scatterShapeTri": "Треугольник", - "scatterShapeDiamond": "Алмаз", - "scatterShapePin": "Pushpin", - "scatterShapeArrow": "Стрела", - "pieChart": "Круговая диаграмма", - "basicPieChart": "Основные круговые диаграммы", - "pieChatType": "Тип круговой диаграммы", - "pieChartTypeCircle": "Диаграмма пончиков", - "pieChartTypeRose": "Розовая диаграмма", - "titleAlign": "Название Должность", - "color": "Цвет", - "dashed": "Пунктир", - "imADivider": "Я - разделительная полоса", - "tableSize": "Размер стола", - "subMenuItem": "Подменю {num}", - "menuItem": "Меню {num}", - "labelText": "Этикетка", - "labelPosition": "Ярлык - Положение", - "labelAlign": "Этикетка - Выровнять", - "optionsOptionType": "Метод конфигурации", - "styleBackgroundColor": "Цвет фона", - "styleBorderColor": "Цвет границы", - "styleColor": "Цвет шрифта", - "selectionMode": "Режим выбора строк", - "paginationSetting": "Настройка пагинации", - "paginationShowSizeChanger": "Поддержка пользователей для изменения количества записей на странице", - "paginationShowSizeChangerButton": "Показать кнопку изменения размера", - "paginationShowQuickJumper": "Показать Быстрый джемпер", - "paginationHideOnSinglePage": "Скрыть, когда есть только одна страница", - "paginationPageSizeOptions": "Размер страницы", - "chartConfigCompType": "Тип диаграммы", - "xConfigType": "Тип оси X", - "loading": "Загрузка", - "disabled": "Инвалид", - "minLength": "Минимальная длина", - "maxLength": "Максимальная длина", - "showCount": "Показать количество слов", - "autoHeight": "Высота", - "thousandsSeparator": "Тысячи сепараторов", - "precision": "Десятичные знаки", - "value": "Значение по умолчанию", - "formatter": "Формат", - "min": "Минимальное значение", - "max": "Максимальное значение", - "step": "Размер шага", - "start": "Время начала", - "end": "Конец времени", - "allowHalf": "Разрешить выбор половины", - "filetype": "Тип файла", - "showUploadList": "Показать список загрузок", - "uploadType": "Тип загрузки", - "allowClear": "Показать значок очистки", - "minSize": "Минимальный размер файла", - "maxSize": "Максимальный размер файла", - "maxFiles": "Максимальное количество загружаемых файлов", - "format": "Формат", - "minDate": "Минимальная дата", - "maxDate": "Максимальная дата", - "minTime": "Минимальное время", - "maxTime": "Максимальное время", - "text": "Текст", - "type": "Тип", - "hideHeader": "Скрыть заголовок", - "hideBordered": "Скрыть границу", - "src": "URL-адрес изображения", - "showInfo": "Значение дисплея", - "mode": "Режим", - "onlyMenu": "Только меню", - "horizontalAlignment": "Горизонтальное выравнивание", - "row": "Слева", - "column": "Топ", - "leftAlign": "Выравнивание по левому краю", - "rightAlign": "Правильное выравнивание", - "percent": "Процент", - "fixedHeight": "Фиксированная высота", - "auto": "Адаптивный", - "directory": "Папка", - "multiple": "Несколько файлов", - "singleFile": "Один файл", - "manual": "Руководство", - "default": "По умолчанию", - "small": "Маленький", - "middle": "Средний", - "large": "Большой", - "single": "Одиночка", - "multi": "Множество", - "close": "Закрыть", - "ui": "Режим пользовательского интерфейса", - "line": "Линейная диаграмма", - "scatter": "Диаграмма рассеяния", - "pie": "Круговая диаграмма", - "basicLine": "Основная линейная диаграмма", - "stackedLine": "Линейная диаграмма со стеками", - "areaLine": "Карта района", - "basicPie": "Основные круговые диаграммы", - "doughnutPie": "Диаграмма пончиков", - "rosePie": "Розовая диаграмма", - "category": "Категория Ось", - "circle": "Круг", - "rect": "Прямоугольник", - "triangle": "Треугольник", - "diamond": "Алмаз", - "pin": "Pushpin", - "arrow": "Стрела", - "left": "Слева", - "right": "Справа", - "center": "Центр", - "bottom": "Дно", - "justify": "Оправдать оба конца", - }, - "playground": { - ...en.playground, - - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Текущее состояние данных", - "preview": "Предварительный просмотр", - "property": "Свойства", - "console": "Консоль визуальных сценариев", - "executeMethods": "Методы выполнения", - "noMethods": "Нет методов.", - "methodParams": "Параметры метода", - "methodParamsHelp": "Параметры метода ввода с помощью JSON. Например, вы можете задать параметры setValue с помощью: [1] или 1", - }, - "calendar": { - ...en.calendar, - - "headerBtnBackground": "Фон для кнопок", - "btnText": "Текст кнопки", - "title": "Название", - "selectBackground": "Избранная биография", - }, - "idSource": { - ...en.idSource, - - "title": "Поставщик аутентификации пользователей", - "form": "Электронная почта", - "pay": "Премиум", - "enable": "Включить", - "unEnable": "Не включено", - "loginType": "Тип входа в систему", - "status": "Статус", - "desc": "Описание", - "manual": "Адресная книга:", - "syncManual": "Синхронизация адресной книги", - "syncManualSuccess": "Синхронизация прошла успешно", - "enableRegister": "Разрешить регистрацию", - "saveBtn": "Сохранить и включить", - "save": "Сохранить", - "none": "Нет", - "formPlaceholder": "Пожалуйста, введите {label}", - "formSelectPlaceholder": "Пожалуйста, выберите {label}", - "saveSuccess": "Сохранено успешно", - "dangerLabel": "Опасная зона", - "dangerTip": "Отключение этого провайдера идентификаторов может привести к тому, что некоторые пользователи не смогут войти в систему. Действуйте с осторожностью.", - "disable": "Отключить", - "disableSuccess": "Успешно отключено", - "encryptedServer": "-------- Зашифровано на стороне сервера --------", - "disableTip": "Советы", - "disableContent": "Отключение этого поставщика идентификационных данных может привести к тому, что некоторые пользователи не смогут войти в систему. Вы уверены, что можете продолжать?", - "manualTip": "", - "lockTip": "Содержание заблокировано. Чтобы внести изменения, нажмите на {icon}, чтобы разблокировать.", - "lockModalContent": "Изменение поля 'ID Attribute' может оказать существенное влияние на идентификацию пользователей. Прежде чем приступить к работе, убедитесь, что вы понимаете последствия этого изменения.", - "payUserTag": "Премиум", - "source": "Источник", - "sourceName": "Имя провайдера авторизации", - "sourceDescription": "Описание поставщика авторизации", - "sourceIcon": "Значок провайдера авторизации", - "sourceCategory": "Категория поставщика прав доступа", - "souceIssuerURI": "URI эмитента провайдера аутентификации", - "souceAuthorizationEndpoint": "Конечная точка авторизации Auth Provider", - "souceTokenEndpoint": "Конечная точка токена поставщика аутентификации", - "souceUserInfoEndpoint": "Конечная точка информации о пользователе", - "userInfoIntrospection": "Использование интроспекции пользователей OpenID", - "userCanSelectAccounts": "Пользователь может выбирать из учетных записей", - "sourceCategoryEnterprise": "Идентификация предприятия", - "sourceCategoryCloud": "Облачные сервисы", - "sourceCategorySocial": "Социальные сети", - "sourceCategoryDevelopment": "Разработка", - "sourceCategoryTools": "Инструменты и продуктивность", - }, - "slotControl": { - ...en.slotControl, - - "configSlotView": "Настроить вид слота", - }, - "jsonLottie": { - ...en.jsonLottie, - - "lottieJson": "Lottie JSON", - "speed": "Скорость", - "width": "Ширина", - "height": "Высота", - "backgroundColor": "Цвет фона", - "animationStart": "Начало анимации", - "valueDesc": "Текущие данные в формате JSON", - "loop": "Петля", - "auto": "Автомобиль", - "onHover": "При наведении", - "singlePlay": "Одиночная игра", - "endlessLoop": "Бесконечная петля", - "keepLastFrame": "Сохранять отображение последнего кадра", - }, - "timeLine": { - ...en.timeLine, - - "titleColor": "Цвет названия", - "subTitleColor": "Цвет субтитров", - "labelColor": "Цвет этикетки", - "value": "Временные данные", - "mode": "Заказ дисплея", - "left": "Право на содержание", - "right": "Содержание Слева", - "alternate": "Альтернативный порядок содержания", - "modeTooltip": "Настройте отображение содержимого слева/справа или поочередно на обеих сторонах временной шкалы", - "reverse": "Самые новые события первыми", - "pending": "Текст ожидающего узла", - "pendingDescription": "При установке отображается последний узел с текстом и индикатором ожидания.", - "defaultPending": "Непрерывное совершенствование", - "clickTitleEvent": "Нажмите кнопку Название события", - "clickTitleEventDesc": "Нажмите кнопку Название события", - "Introduction": "Ключи для введения", - "helpTitle": "Название временной шкалы (обязательно)", - "helpsubTitle": "Подзаголовок временной шкалы", - "helpLabel": "Метка временной шкалы, используемая для отображения дат", - "helpColor": "Указывает цвет узла временной шкалы", - "helpDot": "Отображение узлов временной шкалы в виде значков Ant Design", - "helpTitleColor": "Индивидуальное управление цветом заголовка узла", - "helpSubTitleColor": "Индивидуальное управление цветом субтитров узла", - "helpLabelColor": "Индивидуальный контроль цвета значка узла", - "valueDesc": "Данные временной шкалы", - "clickedObjectDesc": "Данные о нажатом элементе", - "clickedIndexDesc": "Указатель нажатых элементов", - }, - "comment": { - ...en.comment, - - "value": "Как составить список данных", - "showSendButton": "Разрешение комментариев", - "title": "Название", - "titledDefaultValue": "%d Комментарий всего", - "placeholder": "Shift + Enter для комментария; введите @ или # для быстрого ввода", - "placeholderDec": "Место для размещения", - "buttonTextDec": "Название кнопки", - "buttonText": "Как", - "mentionList": "Данные списка упоминаний", - "mentionListDec": "Ключевые слова с ключевыми упоминаниями; данные списка с ценными упоминаниями", - "userInfo": "Информация о пользователе", - "dateErr": "Ошибка даты", - "commentList": "Как составить список", - "deletedItem": "Удаленный элемент", - "submitedItem": "Представленный предмет", - "deleteAble": "Показать кнопку удаления", - "Introduction": "Ключи для введения", - "helpUser": "Информация о пользователе (Обязательно)", - "helpname": "Имя пользователя (Обязательно)", - "helpavatar": "URL-адрес аватара (высокий приоритет)", - "helpdisplayName": "Отображаемое имя (низкий приоритет)", - "helpvalue": "Как содержание", - "helpcreatedAt": "Дата создания", - }, - "mention": { - ...en.mention, - - "mentionList": "Данные списка упоминаний", - }, - "autoComplete": { - ...en.autoComplete, - - "value": "Auto Complete Value", - "checkedValueFrom": "Проверенное значение От", - "ignoreCase": "Поиск игнорировать дело", - "searchLabelOnly": "Поиск только по ярлыку", - "searchFirstPY": "Поиск первого пиньина", - "searchCompletePY": "Поиск Полный пиньинь", - "searchText": "Текст для поиска", - "SectionDataName": "Автозаполнение данных", - "valueInItems": "Стоимость в предметах", - "type": "Тип", - "antDesign": "AntDesign", - "normal": "Нормальный", - "selectKey": "Ключ", - "selectLable": "Этикетка", - "ComponentType": "Тип компонента", - "colorIcon": "Голубой", - "grewIcon": "Серый", - "noneIcon": "Нет", - "small": "Маленький", - "large": "Большой", - "componentSize": "Размер компонента", - "Introduction": "Ключи для введения", - "helpLabel": "Этикетка", - "helpValue": "Значение", - }, - "responsiveLayout": { - ...en.responsiveLayout, - - "column": "Колонны", - "addColumn": "Добавить колонку", - "columnDefinition": "Определение столбца", - "rowDefinition": "Определение строки", - "columnGap": "Зазор между колоннами", - "rowGap": "Разрыв в ряду", - "atLeastOneColumnError": "Отзывчивый макет сохраняет хотя бы одну колонку", - "columnsPerRow": "Столбцы на строку", - "columnsSpacing": "Расстояние между столбцами (px)", - "horizontal": "Горизонтальный", - "vertical": "Вертикальный", - "mobile": "Мобильный", - "tablet": "Планшет", - "desktop": "Настольный компьютер", - "rowStyle": "Стиль ряда", - "columnStyle": "Стиль колонны", - "minWidth": "Мин. Ширина", - "rowBreak": "Перерыв между рядами", - "useComponentWidth": "Использовать собственный размер", - "useComponentWidthDesc": "Используйте ширину контейнера вместо ширины приложения", - "matchColumnsHeight": "Соответствие высоты столбцов", - "rowLayout": "Расположение рядов", - "columnsLayout": "Макет колонок", - "columnsDefinitionTooltip": "Колонки можно определять произвольно, основываясь на свойствах CSS columns. Например, 'auto auto' создаст две колонки с одинаковой шириной. Подробнее здесь: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "Строки могут быть определены произвольно на основе свойств CSS rows. Например, 'auto auto' создаст две строки с одинаковой высотой. Подробнее здесь: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, - "navLayout": { - ...en.navLayout, - - "mode": "Режим", - "modeInline": "Inline", - "modeVertical": "Вертикальный", - "modeHorizontal": "Горизонтальный", - "width": "Ширина", - "widthTooltip": "Пиксель или процент, например, 520, 60%", - "navStyle": "Меню стиля", - "navItemStyle": "Стиль пункта меню", - "navBackground": "Фоновое изображение", - "mobileNavVerticalOrientation": "Вертикальная ориентация", - "mobileNavVerticalMaxWidth": "Максимальная ширина", - "mobileNavBarHeight": "Высота панели навигации", - "mobileNavVerticalShowSeparator": "Показать разделитель", - "mobileNavIconSize": "Размер значка", - }, - "timeZone": { - ...en.timeZone, - - "UTC-12:00": "(UTC-12:00) Международная линия перемены даты W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Гавайи", - "UTC-09:00": "(UTC-09:00) Аляска", - "UTC-08:00": "(UTC-08:00) Баха Калифорния", - "UTC-07:00": "(UTC-07:00) Тихоокеанское время (США)", - "UTC-06:00": "(UTC-06:00) Центральное время (США)", - "UTC-05:00": "(UTC-05:00) Восточное время (США)", - "UTC-04:00": "(UTC-04:00) Атлантическое время", - "UTC-03:00": "(UTC-03:00) Буэнос-Айрес", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Кабо-Верде", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Берлин, Рим", - "UTC+02:00": "(UTC+02:00) Афины, Бухарест", - "UTC+03:00": "(UTC+03:00) Москва", - "UTC+04:00": "(UTC+04:00) Дубай, Маскат", - "UTC+05:00": "(UTC+05:00) Карачи", - "UTC+05:30": "(UTC+05:30) Нью-Дели", - "UTC+05:45": "(UTC+05:45) Катманду", - "UTC+06:00": "(UTC+06:00) Дакка", - "UTC+06:30": "(UTC+06:30) Янгон", - "UTC+07:00": "(UTC+07:00) Бангкок", - "UTC+08:00": "(UTC+08:00) Пекин, Гонконг", - "UTC+09:00": "(UTC+09:00) Токио, Сеул", - "UTC+09:30": "(UTC+09:30) Аделаида, Дарвин", - "UTC+10:00": "(UTC+10:00) Сидней", - "UTC+11:00": "(UTC+11:00) Соломоновы острова, Новая Каледония", - "UTC+12:00": "(UTC+12:00) Окленд, Фиджи", - "UTC+13:00": "(UTC+13:00) Нукуалофа, Самоа", - "UserChoice": "Выбор пользователя", - }, - "tour": { - ...en.tour, - - "section1Title": "Шаги", - "section1Subtitle": "Шаги", - "tooltipExampleHeader": "Пример:", - "tooltipSignatureHeader": "Подпись:", - "options": { - ...en.tour.options, - - "title": { - ...en.tour.options.title, - - "label": "Название", - "placeholder": "Добро пожаловать", - "tooltip": "Название шага. Здесь можно использовать любой HTML.", - }, - "description": { - ...en.tour.options.description, - - "label": "Описание", - "placeholder": "Добро пожаловать на Lowcoder!", - "tooltip": "Описание шага. Здесь может использоваться любой HTML.", - }, - "mask": { - ...en.tour.options.mask, - - "label": "Маска", - "tooltip": "Включать ли маскирование, изменять ли стиль маски и цвет заливки, передавая пользовательский реквизит, по умолчанию используется свойство `mask` в Tour.", - "tooltipValidTypes": "Допустимые типы ввода: `true`, `false`, empty, или JSON-объект, соответствующий схеме CSSProperties из Antd.", - }, - "arrow": { - ...en.tour.options.arrow, - - "label": "Стрела", - "tooltip": "Включает и выключает стрелку или перемещает ее в центр компонента, если это необходимо, в противном случае стрелка всегда будет указывать на верхнюю часть компонента.", - "tooltipFunctionSignature": "булево | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.options.type, - - "label": "Тип", - "tooltip": "Тип всплывающей подсказки, который влияет на цвет фона и цвет текста. Цветами можно управлять в разделе стилизации основного тура.", - }, - "target": { - ...en.tour.options.target, - - "label": "Компонент", - "tooltip": "Компонент, на который вы хотите поместить всплывающую подсказку, или оставьте его пустым, если вы просто хотите, чтобы модальное окно находилось в центре экрана.", - }, - "coverImage": { - ...en.tour.options.coverImage, - - "label": "URI изображения обложки", - "tooltip": "URI для изображения, которое вы хотите отобразить вместе с шагом", - }, - }, - "indicatorsRender": { - ...en.tour.indicatorsRender, - - "label": "Рендер индикаторов", - "tooltip": "Предоставляет пользовательский индикатор того, на каком этапе вы находитесь", - "tooltipValidTypes": "Format - это функция, которая принимает два аргумента, `current` и `total`, и возвращает ReactNode", - "tooltipFunctionSignatureHeader": "Подпись:", - "tooltipFunctionSignature": "(текущий: число, общий: число) => ReactNode", - "tooltipExampleHeader": "Пример:", - }, - "disabledInteraction": { - ...en.tour.disabledInteraction, - - "label": "Отключить взаимодействие", - "tooltip": "Отключите взаимодействие в выделенной области.", - }, - "mask": { - ...en.tour.mask, - - "label": "Маска", - "tooltip": "Включать ли маскирование, изменять ли стиль маски и цвет заливки при передаче пользовательского реквизита, по умолчанию используется свойство `mask` в Tour. Может быть переопределено на уровне шага.", - "tooltipValidTypes": "Допустимые типы ввода: `true`, `false`, empty, или JSON-объект, соответствующий схеме CSSProperties из Antd.", - }, - "placement": { - ...en.tour.placement, - - "label": "Размещение", - "tooltip": "Положение направляющей карты относительно целевого элемента. Может быть переопределено на уровне шага.", - "tooltipValidOptions": "Валидные опции", - "tooltipValidOptionsAbove": "Над компонентом:", - "tooltipValidOptionsLeft": "Слева от компонента:", - "tooltipValidOptionsRight": "Справа от компонента:", - "tooltipValidOptionsBelow": "Ниже компонента:", - "tooltipValidOptionsOnTop": "На верхней части компонента:", - }, - "arrow": { - ...en.tour.arrow, - - "label": "Стрела", - "tooltip": "Включает и выключает стрелку или перемещает ее так, чтобы она указывала на центр компонента, если это необходимо, в противном случае стрелка всегда будет указывать на верхнюю часть компонента. Может быть переопределено на уровне шага.", - "tooltipFunctionSignature": "булево | { pointAtCenter: boolean }", - }, - "type": { - ...en.tour.type, - - "label": "Тип", - "tooltip": "Тип всплывающей подсказки, который влияет на цвет фона и цвет текста. Цветами можно управлять в разделе стилизации основного тура. Их можно переопределить на уровне шагов.", - }, - }, - "docUrls": { - ...en.docUrls, - - "docHome": "https://docs.lowcoder.cloud/", - "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - "components": "https://app.lowcoder.cloud/components/{compType}", - "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - "optionList": "", - "terms": "https://lowcoder.cloud/terms", - "privacy": "https://lowcoder.cloud/privacy", - "aboutUs": "https://lowcoder.cloud/about", - "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", - "introVideo": "", - "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - "devNpmPluginText": "Как разработать npm-плагин", - "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - "thirdLibUrlText": "Используйте библиотеки сторонних разработчиков", - }, - "datasourceTutorial": { - ...en.datasourceTutorial, - - "mysql": "", - "mongodb": "", - "postgres": "", - "redis": "", - "es": "", - "smtp": "", - "clickHouse": "", - }, - "queryTutorial": { - ...en.queryTutorial, - - "js": "", - "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - "customComponent": { - ...en.customComponent, - - "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", - }, - "template": { - ...en.template, - - "cloneUrl": "/apps/template-import/", - }, - "lowcoderUrl": { - ...en.lowcoderUrl, - - "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", - "discord": "https://discord.com/invite/qMG9uTmAx2", - }, - -}; + ...en, + +"productName": "Lowcoder", +"productDesc": "Создавайте программные приложения для своей компании и клиентов с минимальным опытом кодирования. Lowcoder - отличная альтернатива Retool, Appsmith и Tooljet.", +"notSupportedBrowser": "Ваш текущий браузер может иметь проблемы с совместимостью. Для оптимальной работы используйте последнюю версию браузера Chrome.", +"create": "Создать", +"move": "Переместить", +"addItem": "Добавить", +"newItem": "Новый", +"copy": "Копировать", +"rename": "Переименовать", +"delete": "Удалить", +"deletePermanently": "Удалить навсегда", +"remove": "Удалить", +"recover": "Восстановить", +"edit": "Редактировать", +"view": "Посмотреть", +"value": "Значение", +"data": "Данные", +"information": "Информация", +"success": "Успех", +"warning": "Внимание", +"error": "Ошибка", +"reference": "Ссылка", +"text": "Текст", +"basic": "Основные", +"label": "Этикетка", +"layout": "Макет", +"color": "Цвет", +"form": "Форма", +"menu": "Меню", +"menuItem": "Пункт меню", +"ok": "OK", +"cancel": "Отмена", +"finish": "Отделка", +"reset": "Сброс", +"icon": "Икона", +"code": "Код", +"title": "Название", +"emptyContent": "Пустое содержимое", +"more": "Подробнее", +"search": "Поиск", +"back": "Назад", +"accessControl": "Контроль доступа", +"copySuccess": "Успешно скопировано", +"copyError": "Ошибка копирования", +"api": { + ...en.api, + +"publishSuccess": "Успешная публикация", +"recoverFailed": "Восстановление не удалось", +"needUpdate": "Ваша текущая версия устарела. Пожалуйста, обновите ее до последней версии.", +}, +"codeEditor": { + ...en.codeEditor, + +"notSupportAutoFormat": "Текущий редактор кода не поддерживает автоформатирование.", +"fold": "Сложите", +}, +"exportMethod": { + ...en.exportMethod, + +"setDesc": "Установить свойство: {property}", +"clearDesc": "Очистить имущество: {property}", +"resetDesc": "Сбросить значение свойства: {property} в значение по умолчанию", +}, +"method": { + ...en.method, + +"focus": "Установите фокус", +"focusOptions": "Параметры фокуса. См. HTMLElement.focus()", +"blur": "Убрать фокус", +"click": "Нажмите", +"select": "Выделить весь текст", +"setSelectionRange": "Установка начальной и конечной позиций выделения текста", +"selectionStart": "Индекс первого выбранного символа на основе 0", +"selectionEnd": "0-базированный индекс символа после последнего выбранного символа", +"setRangeText": "Заменить диапазон текста", +"replacement": "Строка для вставки", +"replaceStart": "Индекс первого заменяемого символа, основанный на 0", +"replaceEnd": "0-базированный индекс символа после последнего символа для замены", +}, +"errorBoundary": { + ...en.errorBoundary, + +"encounterError": "Не удалось загрузить компонент. Пожалуйста, проверьте конфигурацию.", +"clickToReload": "Нажмите, чтобы перезагрузить", +"errorMsg": "Ошибка:", +}, +"imgUpload": { + ...en.imgUpload, + +"notSupportError": "Поддерживаются только типы изображений {types}.", +"exceedSizeError": "Размер изображения не должен превышать {size}", +}, +"gridCompOperator": { + ...en.gridCompOperator, + +"notSupport": "Не поддерживается", +"selectAtLeastOneComponent": "Пожалуйста, выберите хотя бы один компонент", +"selectCompFirst": "Выбор компонентов перед копированием", +"noContainerSelected": "[Ошибка] Не выбран контейнер", +"deleteCompsSuccess": "Удаление прошло успешно. Нажмите {undoKey}, чтобы отменить удаление.", +"deleteCompsTitle": "Удалить компоненты", +"deleteCompsBody": "Вы уверены, что хотите удалить {compNum} выбранных компонентов?", +"cutCompsSuccess": "Вырезание прошло успешно. Нажмите {pasteKey}, чтобы вставить, или {undoKey}, чтобы отменить.", +}, +"leftPanel": { + ...en.leftPanel, + +"queries": "Запросы данных в вашем приложении", +"globals": "Глобальные переменные данных", +"propTipsArr": "{num} Предметы", +"propTips": "{num} Ключи", +"propTipArr": "{num} Артикул", +"propTip": "{num} Ключ", +"stateTab": "Государство", +"settingsTab": "Настройки", +"toolbarTitle": "Индивидуализация", +"toolbarPreload": "Сценарии и стили", +"components": "Активные компоненты", +"modals": "модалы в приложении", +"expandTip": "Нажмите, чтобы показать данные {component}", +"collapseTip": "Нажмите, чтобы скрыть данные {component}", +"layers": "Слои", +"activatelayers": "Используйте динамические слои", +"selectedComponents": "Избранные компоненты...", +"displayComponents": "управление Дисплей", +"lockComponents": "управление Положение", +}, +"bottomPanel": { + ...en.bottomPanel, + +"title": "Запросы данных", +"run": "Запускайте", +"noSelectedQuery": "Запрос не выбран", +"metaData": "Метаданные источника данных", +"noMetadata": "Метаданные отсутствуют", +"metaSearchPlaceholder": "Поиск метаданных", +"allData": "Все столы", +}, +"rightPanel": { + ...en.rightPanel, + +"propertyTab": "Свойства", +"noSelectedComps": "Компоненты не выбраны. Щелкните компонент, чтобы просмотреть его свойства.", +"createTab": "Вставка", +"searchPlaceHolder": "Поиск компонентов или модулей", +"uiComponentTab": "Компоненты", +"extensionTab": "Удлинители", +"modulesTab": "Модули", +"moduleListTitle": "Модули", +"pluginListTitle": "Плагины", +"emptyModules": "Модули - это многократно используемые приложения Mikro-Apps. Вы можете внедрить их в свое приложение.", +"searchNotFound": "Не можете найти нужный компонент?", +"emptyPlugins": "Плагины еще не добавлены. Добавьте плагины npm для улучшения вашего проекта.", +"contactUs": "Свяжитесь с нами", +"issueHere": "здесь.", +"folderListTitle": "Папки", +}, +"prop": { + ...en.prop, + +"expand": "Развернуть", +"columns": "Колонны", +"videokey": "Видеоключ", +"rowSelection": "Выбор строки", +"toolbar": "Панель инструментов", +"pagination": "Пагинация", +"logo": "Логотип", +"style": "Стиль", +"inputs": "Входы", +"meta": "Метаданные", +"data": "Данные", +"hide": "Скрыть", +"loading": "Загрузка", +"disabled": "Инвалид", +"placeholder": "Место для размещения", +"showClear": "Показать кнопку Очистить", +"showSearch": "С возможностью поиска", +"defaultValue": "Значение по умолчанию", +"required": "Обязательное поле", +"showEmptyValidation": "Показать проверку при опустошении/перезагрузке", +"readOnly": "Только чтение", +"readOnlyTooltip": "Компоненты, доступные только для чтения, отображаются нормально, но не могут быть изменены.", +"minimum": "Минимум", +"maximum": "Максимальный", +"regex": "Regex", +"minLength": "Минимальная длина", +"maxLength": "Максимальная длина", +"height": "Высота", +"width": "Ширина", +"selectApp": "Выберите приложение", +"showCount": "Показать счет", +"tabIndex": "Вкладка \"Индекс", +"textType": "Тип текста", +"customRule": "Пользовательское правило", +"customRuleTooltip": "Непустая строка указывает на ошибку", +"manual": "Руководство", +"map": "Карта", +"json": "JSON", +"use12Hours": "Используйте 12-часовой формат", +"hourStep": "Часовой шаг", +"minuteStep": "Минутный шаг", +"secondStep": "Второй шаг", +"minDate": "Минимальная дата", +"maxDate": "Максимальная дата", +"minTime": "Минимальное время", +"maxTime": "Максимальное время", +"type": "Тип", +"showLabel": "Показать ярлык", +"showHeader": "Показать заголовок", +"showBody": "Показать тело", +"showSider": "Шоу Сайдер", +"innerSider": "Внутренние страницы", +"showFooter": "Показать нижний колонтитул", +"maskClosable": "Нажмите \"Снаружи\", чтобы закрыть", +"escapeClose": "Включить закрытие при нажатии клавиши Escape", +"toggleClose": "Включить кнопку закрытия", +"showMask": "Показать маску", +"textOverflow": "Переполнение текста", +"scrollbar": "Показать полосы прокрутки", +"showVerticalScrollbar": "Показать вертикальную полосу прокрутки", +"showHorizontalScrollbar": "Показать горизонтальную полосу прокрутки", +"siderScrollbar": "Показать полосы прокрутки в сайдере", +"mainScrollbar": "Показать полосы прокрутки в основном содержимом", +"modalScrollbar": "Показать полосы прокрутки в модале", +"drawerScrollbar": "Показать полосы прокрутки в ящике", +"textAreaScrollBar": "Показать полосы прокрутки в текстовой области", +"siderRight": "Сидящий справа", +"siderWidth": "Ширина сидера", +"siderWidthTooltip": "Ширина сайдера поддерживает проценты (%) и пиксели (px).", +"siderCollapsedWidth": "Развернутая ширина Sider", +"siderCollapsedWidthTooltip": "Ширина свернутого сидера поддерживает проценты (%) и пиксели (px).", +"siderCollapsible": "Sider Collapsible", +"siderCollapsed": "Сайдер рухнул", +"contentScrollbar": "Показать полосы прокрутки в содержимом", +"appID": "App Id", +"showApp": "Покажите приложение в области содержания", +"showAppTooltip": "Вы можете отображать целые приложения в области содержимого. Обратите внимание, что для модулей мы не поддерживаем входы, выходы, события и методы.", +"baseURL": "Базовый URL-адрес API", +"horizontal": "Горизонтальный", +"minHorizontalWidth": "Минимальная горизонтальная ширина", +"component": "Собственные идентификаторы компонентов", +"className": "Имя класса CSS", +"dataTestId": "Индивидуальный идентификатор", +"preventOverwriting": "Предотвращение перезаписи стилей", +"color": "Цвет", +"horizontalGridCells": "Ячейки горизонтальной сетки", +"verticalGridCells": "Ячейки вертикальной сетки", +"timeZone": "TimeZone", +"pickerMode": "Режим подборщика", +}, +"autoHeightProp": { + ...en.autoHeightProp, + +"auto": "Автомобиль", +"fixed": "Исправлено", +}, +"textOverflowProp": { + ...en.textOverflowProp, + +"ellipsis": "Наведение мыши", +"wrap": "Обертывание", +}, +"labelProp": { + ...en.labelProp, + +"text": "Этикетка", +"tooltip": "Всплывающая подсказка", +"position": "Позиция", +"collapse": "Свернуть", +"left": "Слева", +"right": "Справа", +"top": "Топ", +"align": "Выравнивание", +"width": "Ширина", +"widthTooltip": "Ширина этикетки поддерживает проценты (%) и пиксели (px).", +}, +"eventHandler": { + ...en.eventHandler, + +"eventHandlers": "Обработчики событий", +"emptyEventHandlers": "Нет обработчиков событий", +"incomplete": "Неполный выбор", +"inlineEventTitle": "На {eventName}", +"event": "Событие", +"action": "Действие", +"noSelect": "Нет выбора", +"runQuery": "Запуск запроса данных", +"selectQuery": "Выберите запрос данных", +"controlComp": "Управление компонентом", +"runScript": "Выполнить JavaScript", +"runScriptPlaceHolder": "Введите код здесь", +"component": "Компонент", +"method": "Метод", +"setTempState": "Установите значение временного состояния", +"state": "Государство", +"triggerModuleEvent": "Запуск события модуля", +"moduleEvent": "Модуль Событие", +"goToApp": "Перейти к другому приложению", +"queryParams": "Параметры запроса", +"queryVariables": "Переменные запроса", +"hashParams": "Параметры хэша", +"showNotification": "Показать уведомление", +"text": "Текст", +"level": "Уровень", +"duration": "Продолжительность", +"notifyDurationTooltip": "Единицей времени может быть 's' (секунда, по умолчанию) или 'ms' (миллисекунда). Максимальная продолжительность - {max} секунд", +"goToURL": "Открыть URL-адрес", +"openInNewTab": "Открыть в новой вкладке", +"copyToClipboard": "Копирование значения в буфер обмена", +"copyToClipboardValue": "Значение", +"export": "Экспортные данные", +"exportNoFileType": "Без выбора (необязательно)", +"fileName": "Имя файла", +"fileNameTooltip": "Включите расширение, чтобы указать тип файла, например, 'image.png'.", +"fileType": "Тип файла", +"condition": "Бегите только тогда, когда...", +"conditionTooltip": "Запускайте обработчик события только тогда, когда это условие оценивается как 'true'", +"debounce": "Отсрочка для", +"throttle": "Дроссель для", +"slowdownTooltip": "Используйте дебафф или дроссель для управления частотой срабатывания действий. Единицей времени может быть 'ms' (миллисекунда, по умолчанию) или 's' (секунда).", +"notHandledError": "Не обрабатывается", +"currentApp": "Текущий", +"inputEventHandlers": "Обработчики событий ввода", +"inputEventHandlersDesc": "Обработчики событий, связанных с пользовательским вводом", +"buttonEventHandlers": "Обработчики событий кнопок", +"buttonEventHandlersDesc": "Обработчики событий, связанных с нажатием кнопок", +"changeEventHandlers": "Изменение обработчиков событий", +"changeEventHandlersDesc": "Обработчики событий, связанных с изменением значений", +"editedEventHandlers": "Обработчики событий редактирования", +"editedEventHandlersDesc": "Обработчики событий, связанных с редактированием состояния элементов", +"clickEventHandlers": "Обработчики событий щелчка мыши", +"clickEventHandlersDesc": "Обработчики событий, связанные с кликами", +"keyDownEventHandlers": "Обработчики событий нажатия клавиш", +"keyDownEventHandlersDesc": "Обработчики событий, связанные с событиями нажатия клавиш", +"checkboxEventHandlers": "Обработчики событий флажка", +"checkboxEventHandlersDesc": "Обработчики событий, связанные с изменением флажка", +"dragEventHandlers": "Обработчики событий перетаскивания", +"dragEventHandlersDesc": "Обработчики событий, связанные с событиями перетаскивания", +"elementEventHandlers": "Обработчики событий элементов", +"elementEventHandlersDesc": "Обработчики событий, связанные с общими событиями элементов данных", +"mediaEventHandlers": "Обработчики медиасобытий", +"mediaEventHandlersDesc": "Обработчики событий, связанных с медиасобытиями", +"scannerEventHandlers": "Обработчики событий сканера", +"scannerEventHandlersDesc": "Обработчики событий, связанные с событиями сканера", +"chartEventHandlers": "Обработчики событий диаграммы", +"chartEventHandlersDesc": "Обработчики событий, связанные с событиями диаграммы", +"geoMapEventHandlers": "Обработчики событий геокарты", +"geoMapEventHandlersDesc": "Обработчики событий, связанные с событиями геокарты", +"stepEventHandlers": "Обработчики событий шагов", +"stepEventHandlersDesc": "Обработчики событий, связанные с событиями пользовательского интерфейса Step", +"shareEventHandlers": "Общие обработчики событий", +"shareEventHandlersDesc": "Обработчики событий, связанные с событиями совместного доступа", +"selectEventHandlers": "Выберите обработчики событий", +"selectEventHandlersDesc": "Обработчики событий, связанные с событиями выбора", +"meetingEventHandlers": "Обработчики событий встречи", +"meetingEventHandlersDesc": "Обработчики событий, связанные с событиями встреч", +"collaborationEventHandlers": "Обработчики событий совместной работы", +"collaborationEventHandlersDesc": "Обработчики событий, связанные с событиями совместной работы", +"set": "Установите", +"clear": "Очистить", +"reset": "Сброс", +"messageType": "Тип сообщения", +"placement": "Размещение", +"description": "Описание", +}, +"event": { + ...en.event, + +"submit": "Отправить", +"submitDesc": "Триггеры при отправке", +"change": "Изменить", +"changeDesc": "Триггеры при изменении значений", +"focus": "Фокус", +"focusDesc": "Триггеры на фокусе", +"blur": "Пятно", +"blurDesc": "Триггеры на размытии", +"click": "Нажмите", +"clickDesc": "Триггеры при нажатии", +"doubleClick": "Двойной щелчок", +"doubleClickDesc": "Триггеры при двойном щелчке", +"rightClick": "Щелкните правой кнопкой мыши", +"rightClickDesc": "Триггеры при нажатии правой кнопки мыши", +"keyDown": "Ключ вниз", +"keyDownDesc": "Триггеры при нажатии клавиш", +"select": "Выберите", +"selectDesc": "Триггеры на выбор", +"checked": "Проверено", +"checkedDesc": "Триггеры при установке флажка", +"unchecked": "Непроверенные", +"uncheckedDesc": "Триггеры при снятии флажка", +"drag": "Drag", +"dragDesc": "Триггеры при перетаскивании", +"drop": "Капля", +"dropDesc": "Триггеры при падении", +"open": "Открыть", +"openDesc": "Триггеры при открытии", +"mute": "Отключить звук", +"muteDesc": "Триггеры при отключении микрофона", +"unmute": "Отключить", +"unmuteDesc": "Триггеры при отключении микрофона", +"showCamera": "Показать камеру", +"showCameraDesc": "Срабатывает при включении функции \"Показать камеру\".", +"hideCamera": "Спрятать камеру", +"hideCameraDesc": "Срабатывает при выключении функции \"Показать камеру\".", +"shareScreen": "Экран акций", +"shareScreenDesc": "Триггеры на экране обмена", +"shareScreenEnd": "Поделиться \"Экранный конец", +"shareScreenEndDesc": "Триггеры на конце экрана обмена", +"shareControl": "Контроль акций", +"shareControlDesc": "Триггеры по контролю над акциями", +"shareControlEnd": "Контроль акций Конец", +"shareControlEndDesc": "Триггеры на конце управления акциями", +"shareContent": "Поделиться содержимым", +"shareContentDesc": "Триггеры при совместном использовании контента", +"shareContentEnd": "Поделиться контентом Конец", +"shareContentEndDesc": "Триггеры на конце общего контента", +"stopShare": "Остановить акцию", +"stopShareDesc": "Триггеры при остановке акции", +"meetingStart": "Начало встречи", +"meetingStartDesc": "Триггеры при начале совещания", +"meetingEnd": "Окончание встречи", +"meetingEndDesc": "Триггеры на стороне встречи", +"meetingJoin": "Встреча Присоединяйтесь", +"meetingJoinDesc": "Триггеры при присоединении к собранию", +"meetingLeave": "Отпуск на совещании", +"meetingLeaveDesc": "Триггеры на время отпуска", +"play": "Играть", +"playDesc": "Триггеры в игре", +"pause": "Пауза", +"pauseDesc": "Триггеры на паузе", +"ended": "Окончание", +"endedDesc": "Триггеры на Ended", +"step": "Шаг", +"stepDesc": "Триггеры на шаге", +"next": "Следующий", +"nextDesc": "Триггеры на следующей", +"finished": "Готовые", +"finishedDesc": "Триггеры на готовом", +"saved": "Сохранено", +"savedDesc": "Триггеры при сохранении элемента", +"edited": "Отредактировано", +"editedDesc": "Триггеры при редактировании элемента", +"geoMapMove": "Перемещение по географической карте", +"geoMapMoveDesc": "Триггеры при перемещении пользователем геокарты", +"geoMapZoom": "Масштаб геокарты", +"geoMapZoomDesc": "Триггеры при изменении масштаба геокарты", +"geoMapSelect": "Выбор географической карты", +"geoMapSelectDesc": "Триггеры при выборе пользователем элемента на геокарте", +"scannerSuccess": "Успех сканера", +"scannerSuccessDesc": "Срабатывает при успешном сканировании сканером", +"scannerError": "Ошибка сканера", +"scannerErrorDesc": "Триггеры, когда сканер не может выполнить сканирование", +"chartZoom": "Масштаб диаграммы", +"chartZoomDesc": "Триггеры при масштабировании графика", +"chartHover": "Наведение диаграммы", +"chartHoverDesc": "Триггеры при наведении диаграммы", +"chartSelect": "Выбор диаграммы", +"chartSelectDesc": "Триггеры при выборе графика", +"chartDeselect": "Отмена выбора диаграммы", +"chartDeselectDesc": "Триггеры на графике Отмена выбора", +"close": "Закрыть", +"closeDesc": "Триггеры при закрытии", +"parse": "Разбор", +"parseDesc": "Триггеры при разборе", +"success": "Успех", +"successDesc": "Триггеры успеха", +"delete": "Удалить", +"deleteDesc": "Триггеры при удалении", +"mention": "Упоминание", +"mentionDesc": "Триггеры при упоминании", +"search": "Поиск", +"searchDesc": "Триггеры в поиске", +"selectedChange": "Изменение выбора", +"selectedChangeDesc": "Триггеры при измененном выборе", +"clickExtra": "Нажмите на Действие", +"clickExtraDesc": "Триггеры при щелчке на дополнительном элементе", +"start": "Начало", +"startDesc": "Триггеры при запуске", +"resume": "Резюме", +"resumeDesc": "Триггеры в резюме", +"countdown": "Обратный отсчет", +"countdownDesc": "Триггеры по окончании обратного отсчета", +"reset": "Сброс заканчивается", +"resetDesc": "Срабатывания по таймеру сброса", +"refresh": "Обновить", +"refreshDesc": "Триггеры при обновлении", +"sortChange": "Изменение сортировки", +"sortChangeDesc": "Триггеры при изменении сортировки", +}, +"style": { + ...en.style, + +"boxShadowColor": "Цвет теней", +"boxShadow": "Тень от коробки", +"opacity": "Непрозрачность", +"animation": "Анимация", +"animationIterationCount": "Количество итераций анимации", +"animationDelay": "Задержка анимации", +"animationDuration": "Продолжительность анимации", +"resetTooltip": "Сброс стилей. Очистите поле ввода, чтобы сбросить индивидуальный стиль.", +"textColor": "Цвет текста", +"contrastText": "Контрастный цвет текста", +"generated": "Создано", +"customize": "Настроить", +"staticText": "Статический текст", +"accent": "Акцент", +"validate": "Сообщение о проверке", +"border": "Цвет границы", +"borderRadius": "Радиус границы", +"borderWidth": "Ширина границы", +"borderStyle": "Пограничный стиль", +"background": "Цвет фона", +"headerBackground": "Цвет фона заголовка", +"siderBackground": "Цвет фона сидера", +"footerBackground": "Цвет фона нижнего колонтитула", +"fill": "Наполнение", +"track": "Трек", +"links": "Ссылки", +"thumb": "Большой палец", +"thumbBorder": "Граница большого пальца", +"checked": "Проверено", +"unchecked": "Непроверенные", +"handle": "Ручка", +"tags": "Теги", +"tagsText": "Теги Текст", +"multiIcon": "Значок мультиселектора", +"tabText": "Вкладка Текст", +"tabAccent": "Вкладка Акцент", +"checkedBackground": "Проверено Цвет фона", +"uncheckedBackground": "Цвет фона не отмечен", +"uncheckedBorder": "Цвет границы не отмечен", +"indicatorBackground": "Цвет фона индикатора", +"tableCellText": "Текст для сотового телефона", +"selectedRowBackground": "Цвет фона выделенной строки", +"hoverRowBackground": "Цвет фона наведенной строки", +"hoverBackground": "Цвет фона при наведении", +"textTransform": "Преобразование текста", +"textDecoration": "Украшение текста", +"alternateRowBackground": "Цвет фона альтернативной строки", +"tableHeaderBackground": "Цвет фона заголовка", +"tableHeaderText": "Текст заголовка", +"toolbarBackground": "Цвет фона панели инструментов", +"toolbarText": "Текст панели инструментов", +"pen": "Ручка", +"footerIcon": "Значок нижнего колонтитула", +"tips": "Советы", +"margin": "Маржа", +"padding": "Набивка", +"marginLeft": "Левое поле", +"marginRight": "Маржа справа", +"marginTop": "Маргинальный верх", +"marginBottom": "Маржа нижняя", +"containerHeaderPadding": "Подшивка заголовков", +"containerFooterPadding": "Нижний колонтитул", +"containerSiderPadding": "Набивка сидера", +"containerBodyPadding": "Набивка корпуса", +"minWidth": "Минимальная ширина", +"aspectRatio": "Соотношение сторон", +"text": "Текст", +"textSize": "Размер текста", +"textWeight": "Вес текста", +"fontFamily": "Семейство шрифтов", +"fontStyle": "Стиль шрифта", +"backgroundImage": "Фоновое изображение", +"backgroundImageRepeat": "Повторение фона", +"backgroundImageSize": "Размер фона", +"backgroundImagePosition": "Фоновая позиция", +"backgroundImageOrigin": "Происхождение фона", +"headerBackgroundImage": "Фоновое изображение", +"headerBackgroundImageRepeat": "Повтор фонового изображения", +"headerBackgroundImageSize": "Размер фонового изображения", +"headerBackgroundImagePosition": "Положение фонового изображения", +"headerBackgroundImageOrigin": "Происхождение фонового изображения", +"footerBackgroundImage": "Фоновое изображение", +"footerBackgroundImageRepeat": "Повтор фонового изображения", +"footerBackgroundImageSize": "Размер фонового изображения", +"footerBackgroundImagePosition": "Положение фонового изображения", +"footerBackgroundImageOrigin": "Происхождение фонового изображения", +"rotation": "Вращение", +"alternateBackground": "Альтернативный цвет фона", +"headerText": "Цвет текста заголовка", +"labelColor": "Цвет этикетки", +"label": "Цвет этикетки", +"lineHeight": "Высота линии", +"subTitleColor": "Цвет подзаголовка", +"titleText": "Цвет названия", +"success": "Цвет успеха", +"siderBackgroundImage": "Фоновое изображение сидера", +"siderBackgroundImageRepeat": "Повтор фонового изображения в сидере", +"siderBackgroundImageSize": "Размер фонового изображения Sider", +"siderBackgroundImagePosition": "Положение фонового изображения в сайдере", +"siderBackgroundImageOrigin": "Происхождение фонового изображения Sider", +"activeBackground": "Активный цвет фона", +"labelBackground": "Цвет фона этикетки", +"gradientBackground": "Градиентный цвет фона", +"direction": "Направление", +"chartOpacity": "Непрозрачность", +"chartBoxShadow": "Тень от коробки", +"chartBorderStyle": "Пограничный стиль", +"chartBorderRadius": "Радиус границы", +"chartBorderWidth": "Ширина границы", +"chartTextSize": "Размер текста", +"chartTextWeight": "Вес текста", +"chartFontFamily": "Семейство шрифтов", +"chartFontStyle": "Стиль шрифта", +"chartBackgroundColor": "Цвет фона", +"chartGradientColor": "Цвет градиента", +"chartShadowColor": "Цвет теней", +"chartBorderColor": "Цвет границы", +"chartTextColor": "Цвет текста", +"detailSize": "Размер детали", +"radiusTip": "Указывает радиус углов элемента. Пример: 5px, 50% или 1em.", +"gapTip": "Указывает промежуток между строками и столбцами в сетке или гибком контейнере. Пример: 10px, 1rem или 5%.", +"cardRadiusTip": "Определяет радиус угла для компонентов карты. Пример: 10px, 15px.", +"borderWidthTip": "Указывает ширину границы элемента. Пример: 1px, 0,5em или тонкая.", +"borderStyleTip": "Устанавливает стиль границы. Например: сплошная, пунктирная, точечная или нет.", +"marginTip": "Определяет внешнее поле вокруг элемента. Пример: 10px, 2em или auto. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 0px 1px 5px 2px", +"directionTip": "Указывает направление макета. Пример: строка, столбец или обратная строка.", +"detailSizeTip": "Определяет размер конкретных деталей в макете. Пример: 10px, 2em или 80%.", +"chartOpacityTip": "Задает непрозрачность графика. Пример: 1 (непрозрачный), 0,5 (50 % прозрачности).", +"chartBoxShadowTip": "Определяет тень, отбрасываемую рамкой графика. Пример: 0px 4px 8px rgba(0, 0, 0, 0, 0.3).", +"chartBorderStyleTip": "Устанавливает стиль границы графика. Пример: сплошная, пунктирная, точечная.", +"chartBorderRadiusTip": "Задает угловой радиус границы графика. Пример: 10px, 20%.", +"chartBorderWidthTip": "Задает ширину границы графика. Пример: 2px, 0.5em.", +"chartTextSizeTip": "Указывает размер шрифта для текста диаграммы. Пример: 16px, 1em или 120%.", +"chartTextWeightTip": "Указывает вес шрифта для текста графика. Пример: обычный, полужирный или 700.", +"chartFontFamilyTip": "Указывает семейство шрифтов для текста диаграммы. Пример: Arial, Helvetica или \"Times New Roman\".", +"chartFontStyleTip": "Определяет стиль шрифта для текста графика. Пример: обычный, курсив или наклонный.", +"animationIterationCountTip": "Определяет, сколько раз должна запускаться анимация. Пример: бесконечно, 1 или 3.", +"opacityTip": "Устанавливает уровень прозрачности элемента. Пример: 1 (непрозрачный), 0,5 (50 % прозрачности) или 0 (невидимый).", +"boxShadowColorTip": "Определяет цвет тени бокса. Пример: rgba(0, 0, 0, 0, 0.3), #FF5733.", +"chartBackgroundColorTip": "Устанавливает цвет фона графика. Пример: #FFFFFF, rgba(255, 255, 255, 0.8).", +"chartGradientColorTip": "Указывает цвета градиента для фона графика. Пример: linear-gradient(to right, #ff7e5f, #feb47b).", +"chartShadowColorTip": "Определяет цвет тени графика. Пример: rgba(0, 0, 0, 0, 0.2), #333333.", +"chartBorderColorTip": "Задает цвет границы графика. Пример: #000000, rgba(0, 0, 0, 0, 0.5).", +"chartTextColorTip": "Устанавливает цвет текста графика. Пример: #333333, rgba(51, 51, 51, 1).", +"boxShadowTip": "Определяет тень, отбрасываемую рамкой элемента. Пример: 0px 4px 8px rgba(0, 0, 0, 0, 0.3), вставка 0px 2px 5px rgba(255, 255, 255, 0.5).", +"animationDelayTip": "Указывает задержку перед началом анимации. Пример: 1 с, 500 мс, 0.", +"animationDurationTip": "Устанавливает продолжительность анимации. Пример: 2 с, 3 с, 500 мс.", +"paddingTip": "Определяет внутреннее пространство подложки внутри элемента. Пример: 10px, 2em, 5%. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", +"containerHeaderPaddingTip": "Определяет отступы для заголовка контейнера. Пример: 10px, 1rem. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", +"containerSiderPaddingTip": "Определяет отступы для сидера контейнера. Пример: 8px, 1em. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", +"containerFooterPaddingTip": "Определяет отступы для нижнего колонтитула контейнера. Пример: 12px, 1rem. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", +"containerBodyPaddingTip": "Определяет отступы для тела контейнера. Пример: 15px, 2em. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", +"textSizeTip": "Указывает размер шрифта текста. Пример: 14px, 1.2em, 110%.", +"textWeightTip": "Указывает вес шрифта в тексте. Пример: обычный, полужирный, 400.", +"fontFamilyTip": "Указывает семейство шрифтов текста. Пример: Arial, Verdana, 'Courier New'.", +"textDecorationTip": "Определяет оформление текста. Пример: подчеркивание, сквозная линия, нет.", +"textTransformTip": "Определяет капитализацию текста. Пример: верхний регистр, нижний регистр, капитализация.", +"fontStyleTip": "Устанавливает стиль шрифта текста. Пример: обычный, курсив, наклонный.", +"backgroundImageTip": "Указывает фоновое изображение элемента. Пример: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", +"headerBackgroundImageTip": "Указывает фоновое изображение для заголовка. Пример: url('header.jpg').", +"footerBackgroundImageTip": "Указывает фоновое изображение для нижнего колонтитула. Пример: url('footer.jpg').", +"backgroundImageRepeatTip": "Определяет, как будет повторяться фоновое изображение. Пример: no-repeat, repeat-x, repeat-y.", +"headerBackgroundImageRepeatTip": "Определяет, как будет повторяться фоновое изображение заголовка. Пример: repeat-x, no-repeat.", +"footerBackgroundImageRepeatTip": "Определяет, как будет повторяться фоновое изображение нижнего колонтитула. Пример: repeat-y, no-repeat.", +"backgroundImageSizeTip": "Определяет размер фонового изображения. Пример: обложка, содержать, 50% 50%.", +"backgroundImagePositionTip": "Определяет положение фонового изображения. Пример: по центру, справа вверху, 10 % 20 %.", +"backgroundImageOriginTip": "Определяет область позиционирования фонового изображения заголовка. Пример: padding-box, border-box, content-box.", +"headerBackgroundImageOriginTip": "Определяет область позиционирования фонового изображения заголовка. Пример: padding-box, border-box, content-box.", +"footerBackgroundImageOriginTip": "Указывает область позиционирования фонового изображения колонтитула. Пример: padding-box, border-box, content-box.", +"rotationTip": "Указывает угол поворота элемента. Пример: 45deg, 90deg, -180deg.", +"lineHeightTip": "Устанавливает высоту строки текста. Пример: 1,5, 2, 120 %.", +}, +"export": { + ...en.export, + +"hiddenDesc": "Если true, компонент будет скрыт", +"disabledDesc": "Если true, компонент отключен и неинтерактивен.", +"visibleDesc": "Если true, то компонент виден", +"inputValueDesc": "Текущее значение входа", +"invalidDesc": "Указывает, является ли значение недействительным", +"placeholderDesc": "Текст-заглушка, когда значение не задано", +"requiredDesc": "Если true, необходимо ввести действительное значение", +"submitDesc": "Отправить форму", +"richTextEditorValueDesc": "Текущее значение редактора", +"richTextEditorReadOnlyDesc": "Если true, редактор доступен только для чтения", +"richTextEditorHideToolBarDesc": "Если true, панель инструментов будет скрыта", +"jsonEditorDesc": "Текущие данные в формате JSON", +"sliderValueDesc": "Текущее выбранное значение", +"sliderMaxValueDesc": "Максимальное значение ползунка", +"sliderMinValueDesc": "Минимальное значение ползунка", +"sliderStartDesc": "Значение выбранной начальной точки", +"sliderEndDesc": "Значение выбранной конечной точки", +"ratingValueDesc": "Текущий выбранный рейтинг", +"ratingMaxDesc": "Максимальное номинальное значение", +"datePickerValueDesc": "Текущая выбранная дата", +"datePickerFormattedValueDesc": "Форматирование выбранной даты", +"datePickerTimestampDesc": "Временная метка выбранной даты", +"dateRangeStartDesc": "Дата начала диапазона", +"dateRangeEndDesc": "Дата окончания диапазона", +"dateRangeStartTimestampDesc": "Временная метка даты начала", +"dateRangeEndTimestampDesc": "Временная метка даты окончания", +"dateRangeFormattedValueDesc": "Форматированный диапазон дат", +"dateRangeFormattedStartValueDesc": "Отформатированная дата начала", +"dateRangeFormattedEndValueDesc": "Форматированная дата окончания", +"timePickerValueDesc": "Текущее выбранное время", +"timePickerFormattedValueDesc": "Форматированное выбранное время", +"timeRangeStartDesc": "Время начала диапазона", +"timeRangeEndDesc": "Время окончания диапазона", +"timeRangeFormattedValueDesc": "Форматированный диапазон времени", +"timeRangeFormattedStartValueDesc": "Форматированное время начала", +"timeRangeFormattedEndValueDesc": "Форматированное время окончания", +"timeZone": "Часовой пояс", +"timeZoneDesc": "Часовой пояс выбранной даты", +}, +"validationDesc": { + ...en.validationDesc, + +"email": "Пожалуйста, введите действительный адрес электронной почты", +"url": "Пожалуйста, введите действительный URL-адрес", +"regex": "Пожалуйста, сопоставьте указанный образец", +"maxLength": "Слишком много символов, текущий: {length}, максимальный: {maxLength}", +"minLength": "Недостаточно символов, текущий: {length}, минимальный: {minLength}", +"maxValue": "Значение превышает максимальное, текущее: {value}, максимум: {max}", +"minValue": "Значение ниже минимального, текущее: {value}, минимальное: {min}", +"maxTime": "Время превышает максимальное, текущее: {time}, максимум: ___МЕСТОДЕРЖАТЕЛЬ1___", +"minTime": "Время ниже минимального, текущее: {time}, минимум: ___МЕСТОДЕРЖАТЕЛЬ1___", +"maxDate": "Дата превышает максимум, текущая: {date}, максимум: {maxDate}", +"minDate": "Дата ниже минимальной, текущая: {date}, минимальный: ___МЕСТОДЕРЖАТЕЛЬ1___", +}, +"query": { + ...en.query, + +"noQueries": "Запросы данных недоступны.", +"queryTutorialButton": "Просмотреть документы {value}", +"datasource": "Ваши источники данных", +"newDatasource": "Новый источник данных", +"generalTab": "Общие сведения", +"notificationTab": "Уведомление", +"variablesTab": "Переменные", +"advancedTab": "Расширенный", +"showFailNotification": "Показать уведомление о неудаче", +"failCondition": "Условия отказа", +"failConditionTooltip1": "Настройте условия отказа и соответствующие уведомления.", +"failConditionTooltip2": "Если какое-либо условие возвращается к истине, запрос помечается как неудачный и вызывает соответствующее уведомление.", +"showSuccessNotification": "Показать уведомление об успехе", +"successMessageLabel": "Сообщение об успехе", +"successMessage": "Успешный запуск", +"notifyDuration": "Продолжительность", +"notifyDurationTooltip": "Длительность уведомления. Единицей времени может быть 's' (секунда, по умолчанию) или 'ms' (миллисекунда). Значение по умолчанию - {default}s. Максимальное значение - {max}s.", +"successMessageWithName": "{name} выполнение успешно", +"failMessageWithName": "{name} выполнить не удалось: {result}", +"showConfirmationModal": "Показать модальное окно подтверждения перед запуском", +"confirmationMessageLabel": "Подтверждающее сообщение", +"confirmationMessage": "Вы уверены, что хотите запустить этот запрос данных?", +"newQuery": "Новый запрос данных", +"newFolder": "Новая папка", +"recentlyUsed": "Недавно использованные", +"folder": "Папка", +"folderNotEmpty": "Папка не пуста", +"dataResponder": "Ответчик данных", +"tempState": "Временное состояние", +"transformer": "Трансформатор", +"quickRestAPI": "Запрос REST", +"quickStreamAPI": "Запрос потока", +"quickGraphql": "Запрос на GraphQL", +"quickAlasql": "Локальный SQL-запрос", +"databaseType": "Тип базы данных", +"chooseDatabase": "Выберите базу данных", +"lowcoderAPI": "Lowcoder API", +"executeJSCode": "Выполнение кода JavaScript", +"importFromQueryLibrary": "Запрос подготовленных данных", +"preparedDataQueries": "Ваши готовые запросы к данным", +"adHocDataQueries": "Запросы данных Qick (без подготовленного запроса или источника данных)", +"queryResultTransformer": "Манипулируйте ответом запроса для преобразования данных перед привязкой", +"queryResultReactor": "Реагируйте на любое изменение динамического значения данных", +"importFromFile": "Импорт из файла", +"triggerType": "Срабатывает, когда...", +"triggerTypeAuto": "При изменении входов или после загрузки приложения (страница)", +"triggerTypePageLoad": "После загрузки приложения (страницы)", +"triggerTypeManual": "Только когда вы запускаете его вручную", +"triggerTypeInputChange": "При изменении входных сигналов", +"triggerTypeQueryExec": "После выполнения запроса", +"triggerTypeTimeout": "После загрузки приложения (страницы) и таймаута", +"delayTime": "Время задержки", +"chooseDataSource": "Выберите источник данных", +"method": "Метод", +"updateExceptionDataSourceTitle": "Обновление неработающего источника данных", +"updateExceptionDataSourceContent": "Обновите следующий запрос с тем же источником данных:", +"update": "Обновление", +"disablePreparedStatement": "Отключение подготовленных отчетов", +"disablePreparedStatementTooltip": "Отключение подготовленных операторов позволяет генерировать динамический SQL, но увеличивает риск SQL-инъекций", +"timeout": "Тайм-аут после", +"timeoutTooltip": "Единица измерения по умолчанию: мс. Поддерживаемые единицы ввода: мс, с. Значение по умолчанию: {defaultSeconds} секунд. Максимальное значение: {maxSeconds} секунд. Например, 300 (т.е. 300 мс), 800 мс, 5 с.", +"periodic": "Периодически выполняйте этот запрос данных", +"periodicTime": "Период", +"periodicTimeTooltip": "Период между последовательными выполнениями. Единица по умолчанию: мс. Поддерживаемые единицы ввода: мс, с. Минимальное значение: 100 мс. Периодическое выполнение отключается при значениях менее 100 мс. Например, 300 (т. е. 300 мс), 800 мс, 5 с.", +"cancelPrevious": "Игнорировать результаты предыдущих незавершенных казней", +"cancelPreviousTooltip": "Если запускается новое выполнение, то результаты предыдущих незавершенных выполнений будут проигнорированы, если они не завершились, и эти проигнорированные выполнения не будут вызывать список событий запроса.", +"dataSourceStatusError": "Если запускается новое выполнение, то результат предыдущих незавершенных выполнений будет проигнорирован, а проигнорированные выполнения не будут вызывать список событий запроса.", +"success": "Успех", +"fail": "Отказ", +"successDesc": "Срабатывает при успешном выполнении", +"failDesc": "Срабатывает при неудачном выполнении", +"fixedDelayError": "Запрос не выполняется", +"execSuccess": "Успешный запуск", +"execFail": "Запуск не удался", +"execIgnored": "Результаты этого запроса были проигнорированы", +"deleteSuccessMessage": "Успешно удалено. Вы можете использовать {undoKey}, чтобы отменить удаление", +"dataExportDesc": "Данные, полученные в текущем запросе", +"codeExportDesc": "Код состояния текущего запроса", +"successExportDesc": "Успешно ли был выполнен текущий запрос", +"messageExportDesc": "Информация, полученная по текущему запросу", +"extraExportDesc": "Другие данные в текущем запросе", +"isFetchingExportDesc": "Является ли текущий запрос запросом", +"runTimeExportDesc": "Текущее время выполнения запроса (мс)", +"latestEndTimeExportDesc": "Последнее время работы", +"triggerTypeExportDesc": "Тип триггера", +"chooseResource": "Выберите ресурс", +"createDataSource": "Создайте новый источник данных", +"editDataSource": "Редактировать", +"datasourceName": "Имя", +"datasourceNameRuleMessage": "Введите имя источника данных", +"generalSetting": "Общие настройки", +"advancedSetting": "Дополнительные настройки", +"port": "Порт", +"portRequiredMessage": "Пожалуйста, введите порт", +"portErrorMessage": "Пожалуйста, введите правильный порт", +"connectionType": "Тип соединения", +"regular": "Обычный", +"host": "Хозяин", +"hostRequiredMessage": "Введите доменное имя или IP-адрес хоста", +"userName": "Имя пользователя", +"password": "Пароль", +"encryptedServer": "-------- Зашифровано на стороне сервера --------", +"uriRequiredMessage": "Пожалуйста, введите URI", +"urlRequiredMessage": "Пожалуйста, введите URL", +"uriErrorMessage": "Пожалуйста, введите правильный URI", +"urlErrorMessage": "Пожалуйста, введите правильный URL-адрес", +"httpRequiredMessage": "Пожалуйста, введите http:// или https://", +"databaseName": "Имя базы данных", +"databaseNameRequiredMessage": "Введите имя базы данных", +"useSSL": "Используйте SSL", +"userNameRequiredMessage": "Пожалуйста, введите ваше имя", +"passwordRequiredMessage": "Пожалуйста, введите пароль", +"authentication": "Аутентификация", +"authenticationType": "Тип аутентификации", +"sslCertVerificationType": "Проверка сертификата SSL", +"sslCertVerificationTypeDefault": "Проверка сертификата ЦС", +"sslCertVerificationTypeSelf": "Проверка самоподписного сертификата", +"sslCertVerificationTypeDisabled": "Инвалид", +"selfSignedCert": "Самоподписанный сертификат", +"selfSignedCertRequireMsg": "Пожалуйста, введите ваш сертификат", +"enableTurnOffPreparedStatement": "Включение переключения подготовленных сообщений для запросов", +"enableTurnOffPreparedStatementTooltip": "Включить или отключить подготовленные операторы можно на вкладке \"Дополнительно\" запроса.", +"serviceName": "Название услуги", +"serviceNameRequiredMessage": "Пожалуйста, введите название вашей службы", +"useSID": "Используйте SID", +"connectSuccessfully": "Подключение успешно", +"saveSuccessfully": "Сохранено успешно", +"database": "База данных", +"cloudHosting": "Облачный хостинг Lowcoder не может получить доступ к локальным службам, используя 127.0.0.1 или localhost. Попробуйте подключиться к общедоступным сетевым источникам данных или используйте обратный прокси-сервер для частных сервисов.", +"notCloudHosting": "При развертывании на докер-хосте Lowcoder использует мостовые сети, поэтому 127.0.0.1 и localhost не подходят для адресов хостов. Для доступа к источникам данных локальной машины см.", +"howToAccessHostDocLink": "Как получить доступ к API/БД хоста", +"returnList": "Возврат", +"chooseDatasourceType": "Выберите тип источника данных", +"viewDocuments": "Посмотреть документы", +"testConnection": "Тестовое подключение", +"save": "Сохранить", +"whitelist": "Список разрешений", +"whitelistTooltip": "При необходимости добавьте IP-адреса Lowcoder в список разрешенных источников данных.", +"address": "Адрес:", +"nameExists": "Имя {name} уже существует", +"jsQueryDocLink": "О запросе JavaScript", +"dynamicDataSourceConfigLoadingText": "Загрузка дополнительной конфигурации источника данных...", +"dynamicDataSourceConfigErrText": "Не удалось загрузить дополнительную конфигурацию источника данных.", +"retry": "Повторная попытка", +"categoryDatabase": "База данных", +"categoryBigdata": "Большие данные", +"categoryAi": "AI", +"categoryDevops": "DevOps", +"categoryAppdevelopment": "Разработка приложений", +"categoryWorkflow": "Рабочий процесс", +"categoryMessaging": "Передача сообщений", +"categoryAssets": "Активы и хранение", +"categoryProjectManagement": "Управление проектами", +"categoryCrm": "CRM", +"categoryEcommerce": "Электронная коммерция", +"categoryWebscrapers": "Вебскраперы и открытые данные", +"categoryDocumentHandling": "Создание отчетов и документов", +"categoryRPA": "Автоматизация роботизированных процессов", +"componentsUsingQueryTitle": "Использование запросов", +"componentsUsingQuery": "Где используется этот запрос", +"variables": "Переменные", +}, +"sqlQuery": { + ...en.sqlQuery, + +"keyValuePairs": "Пары ключ-значение", +"object": "Объект", +"allowMultiModify": "Разрешить модификацию нескольких рядов", +"allowMultiModifyTooltip": "Если выбрано, то обрабатываются все строки, удовлетворяющие условиям. В противном случае будет обработана только первая строка, удовлетворяющая условиям.", +"array": "Массив", +"insertList": "Список вставок", +"insertListTooltip": "Значения вставляются, если они не существуют", +"filterRule": "Правило фильтрации", +"updateList": "Список обновлений", +"updateListTooltip": "Значения, обновляемые по мере их существования, могут быть отменены теми же значениями списка вставки", +"sqlMode": "Режим SQL", +"guiMode": "Режим графического интерфейса", +"operation": "Операция", +"insert": "Вставка", +"upsert": "Вставка, но обновление при конфликте", +"update": "Обновление", +"delete": "Удалить", +"bulkInsert": "Объемная вставка", +"bulkUpdate": "Обновление объема", +"table": "Таблица", +"primaryKeyColumn": "Колонка первичного ключа", +}, +"EsQuery": { + ...en.EsQuery, + +"rawCommand": "Сырая команда", +"queryTutorialButton": "Просмотр документов API Elasticsearch", +"request": "Запрос", +}, +"googleSheets": { + ...en.googleSheets, + +"rowIndex": "Индекс строки", +"spreadsheetId": "Идентификатор электронной таблицы", +"sheetName": "Название листа", +"readData": "Чтение данных", +"appendData": "Добавить строку", +"updateData": "Обновить ряд", +"deleteData": "Удалить строку", +"clearData": "Чистый ряд", +"serviceAccountRequireMessage": "Пожалуйста, введите учетную запись", +"ASC": "ASC", +"DESC": "DESC", +"sort": "Сортировать", +"sortPlaceholder": "Имя", +}, +"queryLibrary": { + ...en.queryLibrary, + +"export": "Экспорт в JSON", +"noInput": "Текущий запрос не имеет входа", +"inputName": "Имя", +"inputDesc": "Описание", +"emptyInputs": "Нет входов", +"clickToAdd": "Добавить", +"chooseQuery": "Выберите запрос", +"viewQuery": "Просмотр запроса", +"chooseVersion": "Выберите версию", +"latest": "Последние", +"publish": "Опубликовать", +"historyVersion": "Историческая версия", +"deleteQueryLabel": "Удалить запрос", +"deleteQueryContent": "Запрос нельзя восстановить после удаления. Удалить запрос?", +"run": "Запускайте", +"readOnly": "Только чтение", +"exit": "Выход", +"recoverAppSnapshotContent": "Восстановите текущий запрос до версии {version}", +"searchPlaceholder": "Поисковый запрос", +"allQuery": "Все запросы", +"deleteQueryTitle": "Удалить запрос", +"unnamed": "Безымянный", +"publishNewVersion": "Опубликовать новую версию", +"publishSuccess": "Успешная публикация", +"version": "Версия", +"desc": "Описание", +}, +"snowflake": { + ...en.snowflake, + +"accountIdentifierTooltip": "См.", +"extParamsTooltip": "Настройка дополнительных параметров подключения", +}, +"lowcoderQuery": { + ...en.lowcoderQuery, + +"queryOrgUsers": "Запрос пользователей рабочей области", +}, +"redisQuery": { + ...en.redisQuery, + +"rawCommand": "Сырая команда", +"command": "Команда", +"queryTutorial": "Просмотр документов по командам Redis", +}, +"httpQuery": { + ...en.httpQuery, + +"bodyFormDataTooltip": "Если выбрано {type}, формат значения должен быть {object}. Пример: {example}", +"text": "Текст", +"file": "Файл", +"extraBodyTooltip": "Ключевые значения в Extra Body будут добавлены к телу с типом данных JSON или Form Data", +"forwardCookies": "Печенье Forward", +"forwardAllCookies": "Переслать все файлы cookie", +}, +"smtpQuery": { + ...en.smtpQuery, + +"attachment": "Вложение", +"attachmentTooltip": "Может использоваться с компонентом загрузки файлов, данные должны быть преобразованы в:", +"MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", +"sender": "Передатчик", +"recipient": "Получатель", +"carbonCopy": "Углеродная копия", +"blindCarbonCopy": "Слепая копия", +"subject": "Тема", +"content": "Содержание", +"contentTooltip": "Поддерживает ввод текста или HTML", +}, +"uiCompCategory": { + ...en.uiCompCategory, + +"dashboards": "Приборные панели и отчетность", +"layout": "Макет и навигация", +"forms": "Сбор данных и формы", +"collaboration": "Встречи и сотрудничество", +"projectmanagement": "Управление проектами", +"scheduling": "Календарь и планирование", +"documents": "Управление документами и файлами", +"itemHandling": "Обработка предметов и подписей", +"multimedia": "Мультимедиа и анимация", +"integration": "Интеграция и расширение", +"legacy": "Устаревшие и устаревшие", +}, +"uiComp": { + ...en.uiComp, + +"autoCompleteCompName": "Автокомплект", +"autoCompleteCompDesc": "Поле ввода, которое выдает подсказки по мере ввода, повышая удобство и точность.", +"autoCompleteCompKeywords": "предложения, автозаполнение, набор текста, ввод", +"inputCompName": "Вход", +"inputCompDesc": "Основное поле ввода текста, позволяющее пользователям вводить и редактировать текст.", +"inputCompKeywords": "текст, ввод, поле, редактирование", +"textAreaCompName": "Текстовая область", +"textAreaCompDesc": "Многострочный текст для ввода более длинного содержимого, например, комментариев или описаний.", +"textAreaCompKeywords": "многострочный, textarea, ввод, текст", +"passwordCompName": "Пароль", +"passwordCompDesc": "Защищенное поле для ввода пароля, маскирующее символы для обеспечения конфиденциальности.", +"passwordCompKeywords": "пароль, безопасность, ввод, скрытый", +"richTextEditorCompName": "Редактор насыщенного текста", +"richTextEditorCompDesc": "Продвинутый текстовый редактор с богатыми возможностями форматирования, такими как жирный шрифт, курсив и списки.", +"richTextEditorCompKeywords": "редактор, текст, форматирование, богатый контент", +"numberInputCompName": "Ввод номера", +"numberInputCompDesc": "Поле, предназначенное для ввода числовых данных, с элементами управления для увеличения и уменьшения значений.", +"numberInputCompKeywords": "число, ввод, инкремент, декремент", +"sliderCompName": "Слайдер", +"sliderCompDesc": "Графический компонент ползунка для выбора значения или диапазона в пределах определенной шкалы.", +"sliderCompKeywords": "ползунок, диапазон, ввод, графический", +"rangeSliderCompName": "Слайдер диапазона", +"rangeSliderCompDesc": "Ползунок с двумя ручками для выбора диапазона значений, полезный для фильтрации или установки границ.", +"rangeSliderCompKeywords": "диапазон, слайдер, двойная ручка, фильтр", +"ratingCompName": "Рейтинг", +"ratingCompDesc": "Компонент для сбора оценок пользователей, отображаемых в виде звезд.", +"ratingCompKeywords": "рейтинг, звезды, отзывы, вклад", +"switchCompName": "Переключатель", +"switchCompDesc": "Тумблер для принятия решений типа \"вкл/выкл\" или \"да/нет\".", +"switchCompKeywords": "тумблер, переключатель, вкл/выкл, управление", +"selectCompName": "Выберите", +"selectCompDesc": "Выпадающее меню для выбора из списка опций.", +"selectCompKeywords": "выпадающее, выбор, опции, меню", +"multiSelectCompName": "Multiselect", +"multiSelectCompDesc": "Компонент, позволяющий выбирать несколько элементов из выпадающего списка.", +"multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", +"cascaderCompName": "Каскадер", +"cascaderCompDesc": "Многоуровневый выпадающий список для иерархического выбора данных, например, для выбора местоположения.", +"cascaderCompKeywords": "каскадный, иерархический, выпадающий, уровни", +"checkboxCompName": "Флажок", +"checkboxCompDesc": "Стандартный флажок для опций, которые можно выбрать или отменить.", +"checkboxCompKeywords": "флажок, опции, выбор, переключение", +"radioCompName": "Радио", +"radioCompDesc": "Радиокнопки для выбора одного варианта из набора, где допускается только один выбор.", +"radioCompKeywords": "радио, кнопки, выбор, единственный выбор", +"segmentedControlCompName": "Сегментированный контроль", +"segmentedControlCompDesc": "Элемент управления с сегментированными опциями для быстрого переключения между несколькими вариантами.", +"segmentedControlCompKeywords": "сегментированный, управление, переключение, опции", +"stepControlCompName": "Ступенчатое управление", +"stepControlCompDesc": "Элемент управления с опциями шагов, предлагающий визуальные шаги для таких приложений, как формы или мастера.", +"stepControlCompKeywords": "шаги, управление, переключение, опции", +"fileUploadCompName": "Загрузка файлов", +"fileUploadCompDesc": "Компонент для загрузки файлов с поддержкой перетаскивания и выбора файлов.", +"fileUploadCompKeywords": "файл, загрузка, перетаскивание, выбор", +"dateCompName": "Дата", +"dateCompDesc": "Компонент для выбора даты из интерфейса календаря.", +"dateCompKeywords": "дата, подборщик, календарь, выбор", +"dateRangeCompName": "Диапазон дат", +"dateRangeCompDesc": "Компонент для выбора диапазона дат, полезный для систем бронирования или фильтров.", +"dateRangeCompKeywords": "daterange, выбор, бронирование, фильтр", +"timeCompName": "Время", +"timeCompDesc": "Компонент выбора времени для выбора определенного времени суток.", +"timeCompKeywords": "время, подборщик, выбрать, часы", +"timeRangeCompName": "Диапазон времени", +"timeRangeCompDesc": "Компонент для выбора диапазона времени, часто используемый в приложениях для составления расписаний.", +"timeRangeCompKeywords": "диапазон времени, выбор, планирование, продолжительность", +"buttonCompName": "Кнопка формы", +"buttonCompDesc": "Универсальный компонент кнопки для отправки форм, запуска действий или навигации.", +"buttonCompKeywords": "кнопка, отправка, действие, навигация", +"meetingControlCompName": "Кнопка со значком", +"meetingCompDesc": "Кнопка для управления такими функциями, как начало, завершение, отключение звука или общий доступ.", +"meetingCompKeywords": "управление, кнопка, начало, конец", +"linkCompName": "Ссылка на", +"linkCompDesc": "Компонент отображения гиперссылок для навигации или ссылок на внешние ресурсы.", +"linkCompKeywords": "ссылка, гиперссылка, навигация, внешний", +"scannerCompName": "Сканер", +"scannerCompDesc": "Компонент для сканирования штрих-кодов, QR-кодов и других подобных данных.", +"scannerCompKeywords": "сканер, штрих-код, QR-код, сканирование", +"dropdownCompName": "Dropdown", +"dropdownCompDesc": "Выпадающее меню для компактного отображения списка опций.", +"dropdownCompKeywords": "выпадающее, меню, опции, выбор", +"toggleButtonCompName": "Кнопка переключения", +"toggleButtonCompDesc": "Кнопка, которая может переключаться между двумя состояниями или опциями.", +"toggleButtonCompKeywords": "тумблер, кнопка, переключатель, состояние", +"textCompName": "Отображение текста", +"textCompDesc": "Простой компонент для отображения статического или динамического текстового контента с учетом форматирования Markdown.", +"textCompKeywords": "текст, дисплей, статический, динамический", +"tableCompName": "Таблица", +"tableCompDesc": "Компонент таблицы для отображения данных в формате структурированной таблицы, с возможностью сортировки и фильтрации, древовидным отображением данных и расширяемыми строками.", +"tableCompKeywords": "таблица, данные, сортировка, фильтрация", +"imageCompName": "Изображение", +"imageCompDesc": "Компонент для отображения изображений, поддерживающий различные форматы на основе URI или данных Base64.", +"imageCompKeywords": "изображение, отображение, медиа, Base64", +"progressCompName": "Прогресс", +"progressCompDesc": "Визуальный индикатор прогресса, обычно используемый для отображения статуса завершения задачи.", +"progressCompKeywords": "прогресс, индикатор, статус, задача", +"progressCircleCompName": "Круг прогресса", +"progressCircleCompDesc": "Круговой индикатор выполнения, часто используемый для состояния загрузки или задач, ограниченных по времени.", +"progressCircleCompKeywords": "круг, прогресс, индикатор, загрузка", +"fileViewerCompName": "Просмотрщик файлов", +"fileViewerCompDesc": "Компонент для просмотра различных типов файлов, включая документы и изображения.", +"fileViewerCompKeywords": "файл, просмотрщик, документ, изображение", +"dividerCompName": "Разделитель", +"dividerCompDesc": "Визуальный компонент-разделитель, используемый для разделения содержимого или разделов в макете.", +"dividerCompKeywords": "разделитель, разделитель, макет, дизайн", +"qrCodeCompName": "QR-код", +"qrCodeCompDesc": "Компонент для отображения QR-кодов, полезных для быстрого сканирования и передачи информации.", +"qrCodeCompKeywords": "QR-код, сканирование, штрих-код, информация", +"formCompName": "Форма", +"formCompDesc": "Контейнерный компонент для создания структурированных форм с различными типами ввода.", +"formCompKeywords": "форма, ввод, контейнер, структура", +"jsonSchemaFormCompName": "Форма схемы JSON", +"jsonSchemaFormCompDesc": "Компонент динамической формы, созданный на основе схемы JSON.", +"jsonSchemaFormCompKeywords": "JSON, схема, форма, динамический", +"containerCompName": "Контейнер", +"containerCompDesc": "Контейнер общего назначения для компоновки и организации элементов пользовательского интерфейса.", +"containerCompKeywords": "контейнер, макет, организация, пользовательский интерфейс", +"floatTextContainerCompName": "Плавающий текстовый контейнер", +"floatTextContainerCompDesc": "Компонент с плавающим текстовым контейнером", +"floatTextContainerCompKeywords": "контейнер, макет, текст, поток", +"collapsibleContainerCompName": "Складной контейнер", +"collapsibleContainerCompDesc": "Контейнер, который можно разворачивать или сворачивать, идеально подходит для управления видимостью содержимого.", +"collapsibleContainerCompKeywords": "Складной, контейнер, расширяться, сворачиваться", +"tabbedContainerCompName": "Контейнер с вкладками", +"tabbedContainerCompDesc": "Контейнер с навигацией по вкладкам для организации содержимого в отдельные панели.", +"tabbedContainerCompKeywords": "вкладка, контейнер, навигация, панели", +"pageLayoutCompName": "Макет страницы", +"pageLayoutCompDesc": "Контейнер, который предлагает создать макет с хедером, сайдером, футером и областью основного содержимого.", +"pageLayoutCompKeywords": "макет, контейнер, навигация, страницы", +"modalCompName": "Модальный", +"modalCompDesc": "Всплывающий модальный компонент для отображения содержимого, предупреждений или форм в фокусе.", +"modalCompKeywords": "модальный, всплывающий, оповещение, форма", +"listViewCompName": "Просмотр списка", +"listViewCompDesc": "Компонент для отображения списка элементов или данных, внутри которого можно разместить другие компоненты. Например, ретранслятор.", +"listViewCompKeywords": "список, просмотр, отображение, ретранслятор", +"gridCompName": "Сетка", +"gridCompDesc": "Гибкий компонент сетки для создания структурированных макетов со строками и столбцами в качестве расширения компонента List View.", +"gridCompKeywords": "сетка, макет, строки, столбцы", +"navigationCompName": "Навигация", +"navigationCompDesc": "Навигационный компонент для создания меню, хлебных крошек или вкладок для навигации по сайту.", +"navigationCompKeywords": "навигация, меню, хлебные крошки, вкладки", +"iframeCompName": "IFrame", +"iframeCompDesc": "Встроенный компонент-фрейм для встраивания внешних веб-страниц и приложений или контента в приложение.", +"iframeCompKeywords": "iframe, встраивание, веб-страница, содержимое", +"customCompName": "Пользовательский компонент", +"customCompDesc": "Гибкий, программируемый компонент для создания уникальных, определяемых пользователем элементов пользовательского интерфейса, отвечающих вашим конкретным потребностям.", +"customCompKeywords": "пользовательские, определяемые пользователем, гибкие, программируемые", +"moduleCompName": "Модуль", +"moduleCompDesc": "Используйте модули для создания микроприложений, предназначенных для инкапсуляции определенных функций или возможностей. Модули можно встраивать и повторно использовать во всех приложениях.", +"moduleCompKeywords": "модуль, микроприложение, функциональность, многоразовое использование", +"jsonExplorerCompName": "JSON Explorer", +"jsonExplorerCompDesc": "Компонент для визуального изучения и взаимодействия со структурами данных JSON.", +"jsonExplorerCompKeywords": "JSON, проводник, данные, структура", +"jsonEditorCompName": "Редактор JSON", +"jsonEditorCompDesc": "Компонент редактора для создания и изменения JSON-данных с проверкой и подсветкой синтаксиса.", +"jsonEditorCompKeywords": "JSON, редактор, изменение, проверка", +"treeCompName": "Дерево", +"treeCompDesc": "Компонент древовидной структуры для отображения иерархических данных, таких как файловые системы или организационные диаграммы.", +"treeCompKeywords": "дерево, иерархический, данные, структура", +"treeSelectCompName": "Выбор дерева", +"treeSelectCompDesc": "Компонент выбора, который представляет опции в формате иерархического дерева, позволяя организовывать и встраивать выборки.", +"treeSelectCompKeywords": "дерево, выбрать, иерархический, вложенный", +"audioCompName": "Аудио", +"audioCompDesc": "Компонент для встраивания аудиоконтента с элементами управления воспроизведением и регулировкой громкости.", +"audioCompKeywords": "аудио, воспроизведение, звук, музыка", +"videoCompName": "Видео", +"videoCompDesc": "Мультимедийный компонент для встраивания и воспроизведения видеоконтента с поддержкой различных форматов.", +"videoCompKeywords": "видео, мультимедиа, воспроизведение, встраивание", +"drawerCompName": "Ящик", +"drawerCompDesc": "Выдвижной компонент панели, который может использоваться для дополнительной навигации или отображения контента, обычно выступая за край экрана.", +"drawerCompKeywords": "ящик, раздвижной, панель, навигация", +"chartCompName": "Диаграмма (устаревшая)", +"chartCompDesc": "Универсальный компонент для визуализации данных с помощью различных типов графиков и диаграмм.", +"chartCompKeywords": "диаграмма, график, данные, визуализация", +"carouselCompName": "Карусель изображений", +"carouselCompDesc": "Компонент вращающейся карусели для демонстрации изображений, баннеров или слайдов контента.", +"carouselCompKeywords": "Карусель, изображения, вращение, витрина", +"imageEditorCompName": "Редактор изображений", +"imageEditorCompDesc": "Интерактивный компонент для редактирования и работы с изображениями, предлагающий различные инструменты и фильтры.", +"imageEditorCompKeywords": "изображение, редактор, манипулировать, инструменты", +"mermaidCompName": "Диаграмма русалки", +"mermaidCompDesc": "Компонент для визуализации сложных диаграмм и блок-схем на основе синтаксиса Mermaid.", +"mermaidCompKeywords": "русалка, диаграммы, схемы, блок-схемы", +"calendarCompName": "Календарь", +"calendarCompDesc": "Компонент календаря для отображения дат и событий, с возможностью просмотра месяца, недели или дня.", +"calendarCompKeywords": "календарь, даты, события, планирование", +"signatureCompName": "Подпись", +"signatureCompDesc": "Компонент для сбора цифровых подписей, полезный для процессов утверждения и проверки.", +"signatureCompKeywords": "подпись, цифровая, одобрение, проверка", +"jsonLottieCompName": "Лотти Анимация", +"jsonLottieCompDesc": "Компонент для отображения анимации Lottie, обеспечивающий легкие и масштабируемые анимации на основе данных JSON.", +"jsonLottieCompKeywords": "лотти, анимация, JSON, масштабируемость", +"timelineCompName": "Временная шкала", +"timelineCompDesc": "Компонент для отображения событий или действий в хронологическом порядке, визуально представленном в виде линейной шкалы времени.", +"timelineCompKeywords": "хронология, события, хронологический, история", +"commentCompName": "Как", +"commentCompDesc": "Компонент для добавления и отображения комментариев пользователей, поддерживающий потоковые ответы и взаимодействие с пользователями.", +"commentCompKeywords": "комментарий, обсуждение, взаимодействие с пользователем, обратная связь", +"mentionCompName": "Упоминание", +"mentionCompDesc": "Компонент, поддерживающий упоминание пользователей или тегов в текстовом контенте, обычно используется в социальных сетях или платформах для совместной работы.", +"mentionCompKeywords": "упоминание, тег, пользователь, социальные сети", +"responsiveLayoutCompName": "Отзывчивый макет", +"responsiveLayoutCompDesc": "Компонент макета, разработанный для адаптации и реагирования на различные размеры экранов и устройств, обеспечивая постоянный пользовательский опыт.", +"responsiveLayoutCompKeywords": "отзывчивый, макет, адаптация, размер экрана", +"splitLayoutCompName": "Раздельная планировка", +"splitLayoutCompDesc": "Компонент компоновки для организации нескольких областей просмотра и разделения областей по горизонтали или вертикали. Он предлагает пользователю адаптацию ширины и высоты областей просмотра с помощью перетаскивания.", +"splitLayoutCompKeywords": "разделить, разделитель, макет, адаптировать, размер экрана", +"iconCompName": "Иконы", +"iconCompDesc": "Используйте различные значки, чтобы повысить визуальную привлекательность и удобство использования вашего приложения.", +"iconCompKeywords": "Значки, пиктограммы, символы, фигуры", +"tourCompName": "Тур", +"tourCompDesc": "Экскурсия по продукту для пользователей-гидов.", +"tourCompKeywords": "экскурсия, экскурсия по продукту, прогулка, интерактивная прогулка", +"hillchartCompName": "Hillchart", +"hillchartCompDesc": "Компонент визуализации для отображения данных о состоянии управления проектом в формате холмистой диаграммы.", +"hillchartCompKeywords": "управление проектами, диаграмма холма, визуализация, данные", +"openLayersGeoMapCompName": "Openlayers Geomap", +"openLayersGeoMapCompDesc": "Компонент для отображения интерактивных карт с использованием OpenLayers, с поддержкой различных слоев и возможностей карты.", +"openLayersGeoMapCompKeywords": "openlayers, геокарта, интерактивная, слои карты", +"chartsGeoMapCompName": "Картосхемы географических карт", +"chartsGeoMapCompDesc": "Компонент для визуализации географических данных на интерактивных картах с динамическими графиками", +"chartsGeoMapCompKeywords": "Геокарта, диаграммы, визуализация, географические данные", +"bpmnEditorCompName": "Редактор BPMN", +"bpmnEditorCompDesc": "Компонент для просмотра, создания и редактирования BPMN-диаграмм, поддерживающий различные элементы и возможности BPMN.", +"bpmnEditorCompKeywords": "BPMN, редактор, диаграммы, элементы, рабочие процессы", +"turnstileCaptchaCompName": "Турникет Captcha", +"turnstileCaptchaCompDesc": "Компонент captcha для проверки пользователей от ботов.", +"turnstileCaptchaCompKeywords": "captcha, проверка, идентификация, безопасность", +"pivotTableCompName": "Поворотная таблица", +"pivotTableCompDesc": "Инструмент для обобщения и анализа данных, позволяющий организовать и объединить данные в табличном формате.", +"pivotTableCompKeywords": "pivot table, данные, анализ, агрегирование", +"funnelChartCompName": "Диаграмма воронки", +"funnelChartCompDesc": "Инструмент визуализации для отображения постепенного сокращения данных при прохождении этапов.", +"funnelChartCompKeywords": "диаграмма воронки, продажи, конверсия, процесс", +"gaugeChartCompName": "Таблица манометров", +"gaugeChartCompDesc": "График, отображающий данные в виде показаний на циферблате, полезен для индикации состояния или уровня чего-либо.", +"gaugeChartCompKeywords": "диаграмма, показатели, производительность, состояние", +"sankeyChartCompName": "Диаграмма Санки", +"sankeyChartCompDesc": "Диаграмма потока, в которой ширина стрелок пропорциональна скорости потока, используется для отображения передачи энергии, материалов или затрат.", +"sankeyChartCompKeywords": "диаграмма санки, поток, энергия, затраты", +"candleStickChartCompName": "Свечной график", +"candleStickChartCompDesc": "Стиль финансового графика, используемый для описания движения цены ценной бумаги, дериватива или валюты.", +"candleStickChartCompKeywords": "свечной график, акции, торговля, финансы", +"radarChartCompName": "Радарная диаграмма", +"radarChartCompDesc": "Графический метод отображения многомерных данных в виде двумерной диаграммы трех или более количественных переменных.", +"radarChartCompKeywords": "радарная диаграмма, многомерность, анализ производительности", +"heatmapChartCompName": "Тепловая карта", +"heatmapChartCompDesc": "Графическое представление данных, в котором отдельные значения представлены в виде цветов.", +"heatmapChartCompKeywords": "тепловая карта, визуализация данных, интенсивность", +"graphChartCompName": "График Диаграмма", +"graphChartCompDesc": "Диаграмма, представляющая собой сеть узлов, соединенных ребрами, полезная для отображения взаимосвязей и отношений.", +"graphChartCompKeywords": "Граф-схема, сети, отношения, узлы", +"treeChartCompName": "Диаграмма деревьев", +"treeChartCompDesc": "Диаграмма, которая визуально представляет иерархию в виде древовидной структуры, показывая взаимосвязи между различными узлами.", +"treeChartCompKeywords": "древовидная диаграмма, иерархия, организационная", +"treemapChartCompName": "Трехмерная диаграмма", +"treemapChartCompDesc": "Диаграмма, в которой используются вложенные прямоугольники для пропорционального представления иерархических данных.", +"treemapChartCompKeywords": "карта, иерархия, визуализация данных", +"sunburstChartCompName": "Диаграмма солнечных лучей", +"sunburstChartCompDesc": "Техника визуализации с радиальным заполнением пространства, которая иллюстрирует иерархические отношения через слои круга.", +"sunburstChartCompKeywords": "диаграмма солнечных лучей, радиальная, иерархическая", +"themeriverChartCompName": "Тематическая карта реки", +"themeriverChartCompDesc": "Визуализация, напоминающая потоковый график, которая показывает изменения в наборе данных с течением времени по категориям.", +"themeriverChartCompKeywords": "тематическая река, временные ряды, тенденции", +"basicChartCompName": "Многотиповая диаграмма", +"basicChartCompDesc": "Универсальный компонент для визуализации данных с помощью различных типов графиков и диаграмм.", +"basicChartCompKeywords": "диаграмма, график, данные, визуализация", +"shapeCompName": "Формы", +"shapeCompDesc": "Коллекция геометрических фигур для использования в диаграммах, иллюстрациях и визуализациях.", +"shapeCompKeywords": "фигуры, геометрические, диаграммы, иллюстрации", +"ganttChartCompName": "Диаграмма Ганта", +"ganttChartCompDesc": "Диаграмма, иллюстрирующая график проекта и показывающая даты начала и завершения элементов и зависимостей.", +"ganttChartCompKeywords": "диаграмма Ганта, управление проектами, расписание", +"kanbanCompName": "Канбан-доска (предварительный просмотр!)", +"kanbanCompDesc": "Доска для визуализации рабочего процесса, на которой столбцы представляют этапы работы, а карточки - задачи.", +"kanbanCompKeywords": "Канбан, доска, рабочий процесс, задачи", +"pieChartCompName": "Круговая диаграмма", +"pieChartCompDesc": "Универсальный компонент для визуализации данных с помощью круговых диаграмм.", +"pieChartCompKeywords": "диаграмма, данные, визуализация", +"lineChartCompName": "Линейная диаграмма", +"lineChartCompDesc": "Универсальный компонент для визуализации данных с помощью линейных диаграмм.", +"lineChartCompKeywords": "диаграмма, данные, визуализация", +"barChartCompName": "Гистограмма", +"barChartCompDesc": "Универсальный компонент для визуализации данных с помощью гистограмм.", +"barChartCompKeywords": "диаграмма, данные, визуализация", +"scatterChartCompName": "Диаграмма рассеяния", +"scatterChartCompDesc": "Универсальный компонент для визуализации данных с помощью диаграмм рассеяния.", +"scatterChartCompKeywords": "диаграмма, данные, визуализация", +"colorPickerCompName": "Подборщик цветов", +"colorPickerCompDesc": "Интуитивно понятный выбор цвета для персонализации.", +"colorPickerCompKeywords": "цвет, подборщик, настройка", +"floatButtonCompName": "Кнопка поплавка", +"floatButtonCompDesc": "Плавающая кнопка действий для заметных и быстрых действий.", +"floatButtonCompKeywords": "плавающая кнопка, действие, быстро", +"avatarCompName": "Аватар", +"avatarCompDesc": "Отображение аватаров пользователей или изображений профиля для персонализированной идентификации.", +"avatarCompKeywords": "аватар, изображение профиля, идентификация пользователя", +"avatarGroupCompName": "Группа \"Аватар", +"avatarGroupCompDesc": "Группа аватаров для компактного и визуально привлекательного представления нескольких пользователей или сущностей.", +"avatarGroupCompKeywords": "группа аватаров, пользователи, сущности, компактность", +"transferName": "Передача", +"transferDesc": "Облегчает перенос данных между двумя списками с помощью функции перетаскивания.", +"transferKeywords": "передача, данные, перетаскивание", +"cardCompName": "Карта содержания", +"cardCompDesc": "Компонент карты для отображения упорядоченной информации или контента в структурированном виде.", +"cardCompKeywords": "карта, информация, содержание, дисплей", +"timerCompName": "Таймер", +"timerCompDesc": "Компонент, отображающий обратный отсчет или прошедшее время, полезный для отслеживания продолжительности и сроков.", +"timerCompKeywords": "таймер, обратный отсчет, прошедшее время, отслеживание, продолжительность, сроки", +}, +"comp": { + ...en.comp, + +"menuViewDocs": "Посмотреть документацию", +"menuViewPlayground": "Посмотреть интерактивную игровую площадку", +"menuUpgradeToLatest": "Обновление до последней версии", +"nameNotEmpty": "Не может быть пустым", +"nameRegex": "Должен начинаться с буквы и содержать только буквы, цифры и символы подчеркивания (_)", +"nameJSKeyword": "Не может быть ключевым словом JavaScript", +"nameGlobalVariable": "Не может быть глобальным именем переменной", +"nameExists": "Имя {name} Уже существует", +"getLatestVersionMetaError": "Не удалось получить последнюю версию, попробуйте позже.", +"needNotUpgrade": "Текущая версия уже является последней.", +"compNotFoundInLatestVersion": "Текущий компонент не найден в последней версии.", +"upgradeSuccess": "Успешно обновлено до последней версии.", +"searchProp": "Поиск", +}, +"jsonSchemaForm": { + ...en.jsonSchemaForm, + +"retry": "Повторная попытка", +"resetAfterSubmit": "Сброс после успешной отправки формы", +"jsonSchema": "JSON-схема", +"uiSchema": "Схема пользовательского интерфейса", +"schemaTooltip": "См.", +"defaultData": "Предварительно заполненные данные формы", +"dataDesc": "Данные текущей формы", +"required": "Требуется", +"maximum": "Максимальное значение - {value}.", +"minimum": "Минимальное значение - {value}.", +"exclusiveMaximum": "Должно быть меньше, чем {value}", +"exclusiveMinimum": "Должно быть больше, чем {value}", +"multipleOf": "Должно быть кратно {value}", +"minLength": "Не менее {value} символов", +"maxLength": "Не более {value} символов", +"pattern": "Должен соответствовать шаблону {value}", +"format": "Должен соответствовать формату {value}", +}, +"select": { + ...en.select, + +"inputValueDesc": "Входное значение поиска", +}, +"customComp": { + ...en.customComp, + +"text": "Хороший день.", +"triggerQuery": "Запрос триггера", +"updateData": "Обновление данных", +"updateText": "Я также в хорошем настроении, чтобы разработать теперь свой собственный пользовательский компонент с Lowcoder!", +"sdkGlobalVarName": "Lowcoder", +"data": "Данные, которые вы хотите передать в пользовательский компонент", +"code": "Код вашего пользовательского компонента", +}, +"tree": { + ...en.tree, + +"placeholder": "Пожалуйста, выберите", +"selectType": "Выберите тип", +"noSelect": "Нет выбора", +"singleSelect": "Одиночный выбор", +"multiSelect": "Мультивыбор", +"checkbox": "Флажок", +"checkedStrategy": "Проверенная стратегия", +"showAll": "Все узлы", +"showParent": "Только родительские узлы", +"showChild": "Только дочерние узлы", +"autoExpandParent": "Авторазвертывание Родитель", +"checkStrictly": "Проверьте строго", +"checkStrictlyTooltip": "Точная проверка узла дерева", +"treeData": "Данные о деревьях", +"treeDataDesc": "Текущие данные о деревьях", +"value": "Значения по умолчанию", +"valueDesc": "Текущие значения", +"expanded": "Расширенные значения", +"expandedDesc": "Текущие расширенные значения", +"defaultExpandAll": "По умолчанию Развернуть все узлы", +"showLine": "Показать линию", +"showLeafIcon": "Показать значок листа", +"treeDataAsia": "Азия", +"treeDataChina": "Китай", +"treeDataBeijing": "Пекин", +"treeDataShanghai": "Шанхай", +"treeDataJapan": "Япония", +"treeDataEurope": "Европа", +"treeDataEngland": "Англия", +"treeDataFrance": "Франция", +"treeDataGermany": "Германия", +"treeDataNorthAmerica": "Северная Америка", +"helpLabel": "Ярлык узла", +"helpValue": "Уникальное значение узла в дереве", +"helpChildren": "Дети Узлы", +"helpDisabled": "Отключение узла", +"helpSelectable": "Является ли узел выбираемым (тип одиночного/множественного выбора)", +"helpCheckable": "Отображать ли флажок (тип флажка)", +"helpDisableCheckbox": "Отключение флажка (тип флажка)", +}, +"moduleContainer": { + ...en.moduleContainer, + +"eventTest": "Испытание событием", +"methodTest": "Метод испытания", +"inputTest": "Входной тест", +}, +"password": { + ...en.password, + +"label": "Пароль", +"placeholder": "Пожалуйста, введите пароль", +"conformLabel": "Подтвердите пароль", +"conformPlaceholder": "Пожалуйста, подтвердите пароль", +"visibilityToggle": "Тумблер \"Показать видимость", +}, +"richTextEditor": { + ...en.richTextEditor, + +"toolbar": "Настройка панели инструментов", +"toolbarDescription": "Вы можете настроить панель инструментов. Более подробную информацию см. на сайте: https://quilljs.com/docs/modules/toolbar/.", +"placeholder": "Пожалуйста, введите...", +"hideToolbar": "Скрыть панель инструментов", +"content": "Содержание", +"title": "Название", +"save": "Сохранить", +"link": "Ссылка:", +"edit": "Редактировать", +"remove": "Удалить", +"defaultValue": "Базовое содержание", +}, +"floatButton": { + ...en.floatButton, + +"custom": "Пользовательское", +"backTop": "Назад Вверх", +"buttonType": "Тип кнопки", +"buttonShape": "Форма пуговицы", +"square": "Квадрат", +"circle": "Круг", +"description": "Описание", +"badge": "Бейдж", +"primary": "Главная", +"default": "По умолчанию", +"buttonTheme": "Кнопочная тема", +"badgeColor": "Цвет значка", +"dot": "Значок в виде точки", +"hidden": "Скрытый", +"visibilityHeight": "Высота видимости", +"visibilityHeightDesc": "Прокрутка до определенной высоты перед отображением кнопки возврата к началу, 0 отображается всегда, режим редактирования не может осуществлять предварительный просмотр в режиме реального времени", +}, +"colorPicker": { + ...en.colorPicker, + +"trigger": "Триггеры Событие", +"click": "Нажмите", +"hover": "наведение", +"disabledAlpha": "Отключить выбор альфы", +"recommended": "Рекомендуем", +"showPresets": "Показать предустановки цвета", +}, +"badge": { + ...en.badge, + +"showCloseButton": "Показать кнопку закрытия", +"Type": "Тип значка", +"Count": "Количество значков", +"Size": "Размер значка", +"SizeDefault": "по умолчанию", +"SizeSmall": "Маленький", +"overflowCount": "Счетчик переполнения", +"Title": "Название значка", +"dot": "Точка", +"number": "Номер", +"tooltip": "Всплывающая подсказка", +}, +"gantt": { + ...en.gantt, + +"key": "Ключ", +"title": "Название", +"project": "Проект", +"from": "С сайта", +"minute": "минута", +"hour": "Час", +"day": "День", +"week": "Неделя", +"month": "Месяц", +"year": "Год", +"quarter": "Квартал", +"tasks": "Данные о задачах", +"level": "уровень", +"durationUnit": "Единица измерения продолжительности", +"duration": "Продолжительность", +"hourScalesFormat": "%F %d", +"dayScalesFormat": "%d %M", +"weekScalesFormat1": "%d %M", +"weekScalesFormat2": "%j %D", +"monthScalesFormat1": "%F, %Y", +"monthScalesFormat2": "Неделя #%W", +"quarterScalesFormat": "{y} Q{i}", +"yearScalesFormat": "%Y", +"tree": "дерево", +"ColumnsData": "Данные столбцов", +"allowChangeTask": "Задача DbClick", +"allowAddLink": "Добавить ссылку", +"allowLinkDelete": "Ссылка Удалить", +"allowProgressDrag": "Перетаскивание прогресса", +"allowTaskDrag": "Перетаскивание задач", +"links": "Данные о ссылках", +"dataFormat": "Разбор данных Формат", +"handleDateChange": "Справиться с изменением задачи", +"handleTaskChange": "Справиться с изменением задачи", +"handleAddedLink": "Ручка Добавлена ссылка", +"handleDeletedLink": "Обработка удаленной ссылки", +"handleProgressDrag": "Перетаскивание прогресса", +"showTodayMark": "Показать сегодня Марк", +"resize": "Изменить размер", +"otherEvents": "Другие события", +"openAllBranchInit": "Открыть все филиалы", +"date": "Дата", +"text": "Текст", +"progress": "прогресс", +"width": "Ширина", +"ColumnsType": "Тип Cloumns", +"currentId": "Текущий идентификатор", +"currentObject": "Текущий объект", +"addTask": "Добавить задачу(и)", +"taskObject": "Объект задачи", +"taskObjectDesc": "Поддержка массивов задач или одного объекта задачи", +"linkID": "идентификатор ссылки", +"linkIDDesc": "Поддерживает массивы идентификаторов ссылок или один объект ссылки", +"removeTask": "Удалить задачу", +"taskID": "Идентификатор задачи", +"taskIDDesc": "Поддерживает массивы идентификаторов или один идентификатор", +"add": "Добавить", +"expandingAll": "Расширяя все", +"collapsingAll": "Все рушится", +"addTaskFail": "Задача добавления завершилась неудачно, а тип параметра должен быть объектом или объектом массива", +"addLinkFail": "Ссылка на добавление не удалась, а тип параметра должен быть объектом или объектом массива", +"removeTaskFail": "Задача удаления завершилась неудачей, и тип параметра должен быть строкой или массивом строк", +"removeLinkFail": "Ссылки на удаление не удались, и тип параметра должен быть строковым массивом", +"otherData": "Другие данные{i}", +"projectText": "Проект №{i}", +"taskText": "Задание №{i}", +"AutoCalculateProgress": "Ход автоматического расчета", +"allowProjectDrag": "Разрешить перетаскивание проектов", +"showColumns": "Показать столбцы", +"exportToPNG": "Экспорт в PNG", +"exportToPDF": "Экспорт в PDF", +"exportToExcel": "Экспорт в Excel", +"progressLowBg": "Низкий BgColor", +"progressLowColor": "Цвет низкого прогресса", +"progressMediumBg": "Средний BgColor", +"progressMediumColor": "Средний цвет прогресса", +"progressHighBg": "Высота BgColor", +"progressHighColor": "Цвет прогресса", +"progresscompletedColor": "Цвет завершенного прогресса", +"lowProgressLine": "Низкая линия прогресса", +"mediumProgressLine": "Средняя линия прогресса", +"SegmentedColor": "Прогресс Сегментированный цвет", +"link_f2s": "Ссылка F2S", +"link_s2s": "Ссылка S2S", +"link_f2f": "Ссылка F2F", +"link_s2f": "Ссылка S2F", +"weekScale": "#{i},", +"showHolidays": "Показать праздники", +"StatutoryHolidays": "Данные об обязательных праздничных днях", +"skipOffTime": "Скрывает нерабочее время", +"weekend": "Выходные", +"weekendSelected": "Выбранные выходные", +"noWorkHour": "Нерабочий час", +"noWorkHourSelected": "не выбран рабочий час", +"showWorkTimes": "Показать время работы", +"workTimeData": "Данные о рабочем времени", +"fit": "подходит", +"manual": "руководство", +"scaleMode": "Режим шкалы", +"startDate": "Дата начала", +"endDate": "Дата окончания", +"addLink": "Добавить ссылку(и)", +"linkObject": "ссылка Объект", +"removeLink": "удалить ссылку", +"allowSort": "Разрешить сортировку", +"showTask": "Показать задание", +"toggleOnDBClick": "Включить DBClick", +"sortOptions": "Первоначальные параметры сортировки", +"rowHeight": "Высота ряда", +"showTooltip": "Показать всплывающую подсказку", +"tooltipTemplates": "Шаблон всплывающей подсказки", +"allowResizeTask": "Разрешить изменение размера задачи", +"projectColor": "Цвет проекта", +"projectColorBg": "Проект BgColor", +"taskColor": "Цвет задачи", +"taskColorBg": "Задача BgColor", +"milestoneColor": "Цвет вехи", +"highlightOverdue": "Выделить Просроченные", +"overdueColor": "Просроченный цвет", +"overdueBgColor": "Просроченный BgColor", +"projectCompletedBgColor": "Проект завершен BgColor", +"projectCompletedColor": "Цвет завершенного проекта", +"tag": "тег", +"tasksTableWidth": "Ширина таблицы задач", +"allowErrorMessage": "Разрешить сообщение об ошибке", +"currentProjectId": "Текущий идентификатор проекта", +"currentProjectLastTask": "Текущий проект Последняя задача", +"onlySortProject": "Только сортировка проекта", +}, +"transfer": { + ...en.transfer, + +"sourceTitle": "Исходные данные", +"targetTitle": "Целевые данные", +"content": "Содержание {i}", +"items": "Товары", +"targetKeys": "Выбранные ключи", +"oneWay": "Один путь", +"pagination": "Пагинация", +"pageSize": "Размер страницы", +"allowSearch": "Разрешить поиск", +"selectedKeys": "Выбранные ключи", +"searchInfo": "Поисковая информация", +"targerObject": "Объект Таргера", +}, +"avatarGroup": { + ...en.avatarGroup, + +"maxCount": "Максимальное количество", +"avatarSize": "Размер аватара", +"autoColor": "Автоцвет", +"alignment": "Выравнивание", +"currentAvatar": "Текущий аватар", +}, +"avatarComp": { + ...en.avatarComp, + +"square": "квадрат", +"circle": "круг", +"icon": "икона", +"shape": "форма", +"counts": "Бейдж", +"title": "название", +"src": "src", +"avatarCompTooltip": "Приоритет отображения следующий: изображение -> символы -> значок. В зависимости от того, что доступно первым.", +"iconSize": "Размер значка", +"avatarBackground": "Фон", +"label": "Этикетка", +"caption": "Надпись", +"labelPosition": "Позиция", +"alignmentPosition": "выравнивание", +"text": "Текст", +"enableDropDown": "Включить выпадающий список", +"containerBackground": "Фон", +}, +"card": { + ...en.card, + +"cardType": "Тип карты", +"common": "общий", +"custom": "на заказ", +"default": "по умолчанию", +"small": "маленький", +"showTitle": "Показать название", +"title": "Название", +"more": "Подробнее", +"extraTitle": "Призыв к действию", +"CoverImg": "Изображение на обложке", +"imgSrc": "Источник изображения", +"showMeta": "Показать содержимое", +"metaTitle": "Содержание Заголовок", +"metaDesc": "Описание содержания", +"imgHeight": "Высота изображения", +"showActionIcon": "Показать параметры действия", +"actionOptions": "Варианты действий", +"menu": "Меню {i}", +"hoverColor": "hover Цвет", +"IconColor": "Цвет значка", +"titleSize": "Размер названия", +}, +"timer": { + ...en.timer, + +"timerState": "Состояние таймера", +"elapsedTime": "Прошедшее время", +"timer": "Таймер", +"countdown": "Обратный отсчет", +"defaultValue": "Значение по умолчанию", +"timerType": "Тип таймера", +"start": "Начало", +"pause": "Пауза", +"resume": "Резюме", +"reset": "Сброс", +"startPause": "Старт/Пауза", +"hideButton": "Скрыть кнопку", +"fontColor": "Цвет шрифта", +}, +"iconComp": { + ...en.iconComp, + +"icon": "Икона", +"autoSize": "Иконка Авторазмер", +"iconSize": "Размер значка", +}, +"numberInput": { + ...en.numberInput, + +"formatter": "Формат", +"precision": "Точность", +"allowNull": "Разрешить нулевое значение", +"thousandsSeparator": "Показать разделитель тысяч", +"controls": "Показать кнопки увеличения/уменьшения", +"step": "Шаг", +"standard": "Стандарт", +"percent": "Процент", +}, +"slider": { + ...en.slider, + +"step": "Шаг", +"stepTooltip": "Значение должно быть больше 0 и делиться на (Max-Min)", +"vertical": "Вертикальная ориентация", +}, +"rating": { + ...en.rating, + +"max": "Максимальная оценка", +"allowHalf": "Разрешить половину рейтинговых очков", +}, +"optionsControl": { + ...en.optionsControl, + +"optionList": "Опции", +"option": "Вариант", +"optionI": "Вариант {i}", +"viewDocs": "Просмотр документов", +"tip": "Переменные 'item' и 'i' представляют значение и индекс каждого элемента в массиве данных", +}, +"stepOptionsControl": { + ...en.stepOptionsControl, + +"value": "Значение / Ключ", +"valueTooltip": "Значение шага должно быть числом. Для первого Шага оно должно быть равно начальному значению. Числа должны быть расположены в последовательном и возрастающем порядке", +"title": "Название шага", +"subTitle": "Шаг субтитров", +"description": "Описание шага", +"status": "Статус шага", +"icon": "Значок шага", +}, +"step": { + ...en.step, + +"initialValue": "Начальные числа в", +"initialValueTooltip": "С чего начать визуальную нумерацию. Должно быть 1 или выше.", +"valueDesc": "Текущая стоимость", +"size": "Размер шагов", +"sizeSmall": "Маленький", +"sizeDefault": "По умолчанию", +"percent": "Шаги Процент", +"type": "Тип шагов", +"typeDefault": "Стандарт", +"typeNavigation": "Навигация", +"typeInline": "Inline", +"direction": "Направление шагов", +"directionVertical": "Вертикальный", +"directionHorizontal": "Горизонтальный", +"labelPlacement": "Шаги Размещение этикеток", +"status": "Статус шагов", +"statusWait": "Подождите", +"statusProcess": "Процесс", +"statusFinish": "Отделка", +"statusError": "Ошибка", +"showDots": "Показать точки вместо символов", +"showIcons": "Показать значки вместо символов", +"responsive": "Отзывчивый", +"selectable": "Выбираемый", +}, +"coloredTagOptionControl": { + ...en.coloredTagOptionControl, + +"tag": "Текст тега", +"color": "Цвет", +"icon": "Икона", +}, +"radio": { + ...en.radio, + +"options": "Опции", +"horizontal": "Горизонтальный", +"horizontalTooltip": "Горизонтальный макет сворачивается, когда заканчивается место", +"vertical": "Вертикальный", +"verticalTooltip": "Вертикальный макет всегда будет отображаться в один столбец", +"autoColumns": "Автоколонка", +"autoColumnsTooltip": "Макет \"Автоколонка\" автоматически перестраивает порядок, если позволяет место, и отображает в виде нескольких колонок", +}, +"cascader": { + ...en.cascader, + +"options": "Данные JSON для отображения каскадного выбора", +}, +"selectInput": { + ...en.selectInput, + +"valueDesc": "Текущее выбранное значение", +"selectedIndexDesc": "Индекс текущего выбранного значения или -1, если значение не выбрано", +"selectedLabelDesc": "Метка текущего выбранного значения", +}, +"file": { + ...en.file, + +"typeErrorMsg": "Должно быть числом с допустимой единицей размера файла или числом байт без единицы измерения.", +"fileEmptyErrorMsg": "Загрузка не удалась. Размер файла пуст.", +"fileSizeExceedErrorMsg": "Загрузка не удалась. Размер файла превышает лимит.", +"minSize": "Минимальный размер", +"minSizeTooltip": "Минимальный размер загружаемых файлов с необязательными единицами измерения размера файла (например, '5kb', '10 MB'). Если единица измерения не указана, значение будет считаться числом байт.", +"maxSize": "Максимальный размер", +"maxSizeTooltip": "Максимальный размер загружаемых файлов с необязательными единицами измерения размера файла (например, '5kb', '10 MB'). Если единица измерения не указана, значение будет считаться числом байт.", +"single": "Одиночка", +"multiple": "Множество", +"directory": "Каталог", +"upload": "Просмотреть", +"fileType": "Типы файлов", +"reference": "Пожалуйста, обратитесь к", +"fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", +"fileTypeTooltip": "Уникальные спецификаторы типа файла", +"uploadType": "Тип загрузки", +"showUploadList": "Показать список загрузок", +"maxFiles": "Max Files", +"filesValueDesc": "Содержимое загружаемого в данный момент файла закодировано в Base64", +"filesDesc": "Список текущих загруженных файлов. Для получения подробной информации см.", +"clearValueDesc": "Очистить все файлы", +"parseFiles": "Разбор файлов", +"parsedValueTooltip1": "Если параметр parseFiles равен True, файлы загрузки будут разобраны до объекта, массива или строки. Доступ к разобранным данным можно получить через массив parsedValue.", +"parsedValueTooltip2": "Поддерживаются файлы Excel, JSON, CSV и текстовые файлы. Другие форматы возвращают Null.", +"forceCapture": "Силовой захват", +"forceCaptureTooltip": "Вместо загрузки сделайте снимок с камеры", +"usePhoto": "Используйте фотографию", +"retakePhoto": "Повторное фото", +"capture": "Захват", +}, +"date": { + ...en.date, + +"format": "Формат", +"inputFormat": "Формат ввода", +"formatTip": "Поддерживаются: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", +"reference": "Пожалуйста, обратитесь к", +"showTime": "Время показа", +"start": "Дата начала", +"end": "Дата окончания", +"year": "Год", +"quarter": "Квартал", +"month": "Месяц", +"week": "Неделя", +"date": "Дата", +"clearAllDesc": "Очистить все", +"resetAllDesc": "Сбросить все", +"placeholder": "Выберите дату", +"placeholderText": "Место для размещения", +"startDate": "Дата начала", +"endDate": "Дата окончания", +}, +"time": { + ...en.time, + +"start": "Время начала", +"end": "Конец времени", +"formatTip": "Поддержка: 'HH:mm:ss', 'Timestamp'", +"format": "Формат", +"placeholder": "Выберите время", +"placeholderText": "Место для размещения", +"startTime": "Время начала", +"endTime": "Конец времени", +}, +"button": { + ...en.button, + +"prefixIcon": "Значок префикса", +"prefixText": "Префиксный текст", +"suffixIcon": "Значок суффикса", +"icon": "Икона", +"iconSize": "Размер значка", +"button": "Кнопка формы", +"formToSubmit": "Форма для отправки", +"default": "По умолчанию", +"submit": "Отправить", +"textDesc": "Текст, отображаемый в данный момент на кнопке", +"loadingDesc": "Находится ли кнопка в состоянии загрузки? Если True, то текущая кнопка загружается", +"formButtonEvent": "Событие", +}, +"link": { + ...en.link, + +"link": "Ссылка на", +"textDesc": "Текст, отображаемый в настоящее время на ссылке", +"loadingDesc": "Находится ли ссылка в состоянии загрузки? Если True, то текущая ссылка загружается", +}, +"scanner": { + ...en.scanner, + +"text": "Нажмите кнопку Сканировать", +"camera": "Камера {index}", +"changeCamera": "Переключить камеру", +"continuous": "Непрерывное сканирование", +"uniqueData": "Игнорирование дублирующихся данных", +"maskClosable": "Нажмите на маску, чтобы закрыть", +"errTip": "Пожалуйста, используйте этот компонент под HTTPS или Localhost", +}, +"dropdown": { + ...en.dropdown, + +"onlyMenu": "Дисплей только с этикеткой", +"textDesc": "Текст, отображаемый в данный момент на кнопке", +"triggerMode": "Режим триггера", +}, +"textShow": { + ...en.textShow, + +"text": "### 👋 Здравствуйте, {name}.", +"valueTooltip": "Markdown поддерживает большинство тегов и атрибутов HTML. iframe, Script и другие теги отключены по соображениям безопасности.", +"verticalAlignment": "Вертикальное выравнивание", +"horizontalAlignment": "Горизонтальное выравнивание", +"textDesc": "Текст, отображаемый в текущем текстовом поле", +}, +"table": { + ...en.table, + +"editable": "Редактируемый", +"columnNum": "Колонны", +"viewModeResizable": "Ширина колонки настраивается пользователем", +"viewModeResizableTooltip": "Могут ли пользователи регулировать ширину столбцов.", +"visibleResizables": "Показать ручки изменения размера", +"visibleResizablesTooltip": "Отображение видимых ручек изменения размера в заголовке таблицы.", +"showFilter": "Кнопка \"Показать фильтр", +"showRefresh": "Показать кнопку обновления", +"showDownload": "Показать кнопку загрузки", +"columnSeparator": "Сепаратор колонн", +"columnSeparatorTooltip": "Разделитель столбцов (\"delimiter\") в загруженном CSV-файле.\n\nРекомендации:\n- Запятая (,)\n- точка с запятой (", +"columnSetting": "Кнопка \"Показать видимость столбцов", +"searchText": "Текст для поиска", +"searchTextTooltip": "Поиск и фильтрация данных, которые в данный момент представлены в таблице. Это только фронтальный поиск и не влияет на запрос к источнику данных).", +"showQuickJumper": "Показать Быстрый джемпер", +"hideOnSinglePage": "Скрыть на одной странице", +"showSizeChanger": "Показать кнопку изменения размера", +"pageSizeOptions": "Параметры размера страницы", +"pageSize": "Размер страницы", +"total": "Общее количество строк", +"totalTooltip": "Значение по умолчанию - количество текущих элементов данных, которые можно получить из запроса, например: '{{query1.data[0].count}}'.", +"filter": "Фильтры", +"filterRule": "Правило фильтрации", +"chooseColumnName": "Выберите колонку", +"chooseCondition": "Выберите условие", +"clear": "Очистить", +"columnShows": "Колонна показывает", +"selectAll": "Выбрать все", +"and": "И", +"or": "Или", +"contains": "Содержит", +"notContain": "Не содержит", +"equals": "Равняется", +"isNotEqual": "Не равны", +"isEmpty": "Пустой", +"isNotEmpty": "Не пустой", +"greater": "Больше, чем", +"greaterThanOrEquals": "Больше, чем или равно", +"lessThan": "Меньше, чем", +"lessThanOrEquals": "Меньше, чем или равно", +"action": "Действие", +"columnValue": "Значение столбца", +"columnValueTooltip": "'{{currentCell}}': Данные текущей ячейки\n '{{currentRow}}': Данные текущей строки\n '{{currentIndex}}': Индекс текущих данных (начиная с 0)\n Пример: '{{currentCell * 5}}' Показать данные, в 5 раз превышающие исходное значение.", +"columnTooltip": "Всплывающая подсказка столбца", +"imageSrc": "Источник изображения", +"imageSize": "Размер изображения", +"columnTitle": "Название", +"columnTitleTooltip": "Всплывающая подсказка заголовка", +"showTitle": "Показать название", +"showTitleTooltip": "Показать/скрыть заголовок столбца в заголовке таблицы", +"sortable": "Сортировка", +"align": "Выравнивание", +"fixedColumn": "Фиксированная колонна", +"autoWidth": "Автоматическая ширина", +"customColumn": "Пользовательская колонка", +"auto": "Автомобиль", +"fixed": "Исправлено", +"columnType": "Тип колонки", +"dataMapping": "Сопоставление данных", +"numberStep": "Шаг", +"numberStepTooltip": "Число, на которое увеличивается или уменьшается текущее значение. Это может быть целое число или десятичная дробь", +"precision": "Точность", +"float": "Поплавок", +"prefix": "Префикс", +"suffix": "Суффикс", +"avatars": "Аватары", +"avatarGroupAlignment": "Выравнивание аватаров", +"text": "Текст", +"number": "Номер", +"link": "Ссылка на", +"links": "Ссылки", +"tag": "Тег", +"select": "Выберите", +"dropdown": "Dropdown", +"time": "Время", +"date": "Дата", +"dateTime": "Дата Время", +"badgeStatus": "Статус", +"button": "Кнопка", +"image": "Изображение", +"boolean": "Булево", +"switch": "Переключатель", +"rating": "Рейтинг", +"progress": "Прогресс", +"option": "Операция", +"optionList": "Список операций", +"option1": "Операция 1", +"status": "Статус", +"statusTooltip": "Необязательные значения: Успех, Ошибка, По умолчанию, Предупреждение, Обработка", +"primaryButton": "Главная", +"defaultButton": "По умолчанию", +"type": "Тип", +"tableSize": "Размер стола", +"hideHeader": "Скрыть заголовок таблицы", +"hideToolbar": "Скрыть панель инструментов таблицы (нижний колонтитул)", +"fixedHeader": "Фиксированный заголовок таблицы", +"fixedHeaderTooltip": "Заголовок будет фиксированным для вертикально прокручиваемой таблицы", +"fixedToolbar": "Исправленная панель инструментов", +"fixedToolbarTooltip": "Панель инструментов будет фиксированной для вертикально прокручиваемой таблицы на основе позиции", +"hideBordered": "Показать ручки изменения размера", +"showHeaderGridBorder": "Показать границы сетки заголовка", +"showRowGridBorder": "Показать границы сетки строк", +"showVerticalRowGridBorder": "Показать вертикальную границу сетки строк", +"showHorizontalRowGridBorder": "Показать горизонтальную границу сетки строк", +"deleteColumn": "Удалить колонку", +"confirmDeleteColumn": "Подтвердите удаление колонки:", +"small": "S", +"middle": "M", +"large": "L", +"refreshButtonTooltip": "Текущие данные изменились, нажмите, чтобы перегенерировать столбец.", +"changeSetDesc": "Объект, представляющий изменения в редактируемой таблице, содержит только измененную ячейку. Строки идут первыми, а столбцы - вторыми.", +"selectedRowDesc": "Предоставляет данные для текущей выделенной строки, указывая на строку, которая вызывает событие щелчка, если пользователь нажимает кнопку/ссылку в строке", +"selectedRowsDesc": "Используется в режиме множественного выбора, аналогично SelectedRow", +"pageNoDesc": "Текущая страница дисплея, начиная с 1", +"pageSizeDesc": "Сколько строк на странице", +"sortColumnDesc": "Имя выбранного в данный момент отсортированного столбца", +"sortDesc": "Находится ли текущая строка в нисходящем порядке", +"pageOffsetDesc": "Текущее начало листания, используется для листания с целью получения данных. Пример: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", +"displayDataDesc": "Данные, отображаемые в текущей таблице", +"selectedIndexDesc": "Выбранный индекс в отображаемых данных", +"filterDesc": "Параметры фильтрации таблиц", +"dataDesc": "Данные JSON для таблицы", +"saveChanges": "Сохранить изменения", +"cancelChanges": "Отменить изменения", +"rowSelectChange": "Изменение выбора строки", +"rowClick": "Щелчок по строке", +"rowExpand": "Ряд Развернуть", +"rowShrink": "Сокращение рядов", +"search": "Поиск", +"download": "Скачать", +"columnEdited": "Колонка отредактирована", +"filterChange": "Замена фильтра", +"sortChange": "Изменение сортировки", +"pageChange": "Изменение страницы", +"refresh": "Обновить", +"rowColor": "Условный цвет строки", +"rowColorDesc": "Условная установка цвета строки на основе необязательных переменных: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Например: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", +"rowHeight": "Условная высота строки", +"rowHeightDesc": "Условная установка высоты строки на основе необязательных переменных: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Например: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", +"cellColor": "Условный цвет ячеек", +"cellColorDesc": "Условно установите цвет ячейки на основе значения ячейки с помощью CurrentCell. Например: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", +"saveChangesNotBind": "Не настроен обработчик событий для сохранения изменений. Пожалуйста, привяжите хотя бы один обработчик событий перед нажатием.", +"dynamicColumn": "Использование динамической видимости столбцов", +"dynamicColumnConfig": "Видимые столбцы", +"dynamicColumnConfigDesc": "Динамическая видимость столбцов. Принимает массив имен столбцов. По умолчанию все столбцы видны. Пример: [\"id\", \"name\"].", +"position": "Позиция", +"showDataLoadSpinner": "Показать индикатор загрузки", +"showValue": "Показать значение", +"expandable": "Расширяемый", +"configExpandedView": "Настройка расширенного вида", +"toUpdateRowsDesc": "Массив объектов для обновляемых строк в редактируемых таблицах.", +"selectedCellDesc": "Выбранная ячейка", +"empty": "Пустой", +"falseValues": "Текст при ложном значении", +"iconTrue": "Значок, когда истинно", +"iconFalse": "Значок, когда ложно", +"iconNull": "Значок При нуле", +"allColumn": "Все", +"visibleColumn": "Видимый", +"emptyColumns": "В настоящее время ни один столбец не виден", +"showSummary": "Показать итоговую строку (строки)", +"totalSummaryRows": "Всего строк", +"inlineAddNewRow": "Добавить новую строку (строки)", +"editMode": "Режим редактирования", +"singleClick": "Один клик", +"doubleClick": "Двойной щелчок", +"showUpdateButtons": "Показать кнопки сохранения/отмены", +}, +"image": { + ...en.image, + +"src": "Источник изображения", +"srcDesc": "Источник изображения. Может быть URL, путь или строка Base64. например: data:image/png", +"supportPreview": "Поддержка предварительного просмотра с масштабированием (при нажатии)", +"supportPreviewTip": "Эффективно, если источник изображения действителен", +"previewSrc": "Источник изображений в формате HighRes", +"clipPath": "Контур обрезки изображения", +"clipPathTip": "Используйте clip-path, чтобы определить пользовательскую форму для вашего элемента на основе определения CSS, ссылки на маску SVG (через URL источника) или используя предопределенные формы, такие как круг(), эллипс(), многоугольник() или вставка() для обрезки.", +"enableOverflow": "Включить переполнение", +"enableOverflowTip": "Позволяет изображению переполнять свой контейнер, что дает возможность обрезать его за пределами контейнера. Полезно для поддержания фокуса на определенных частях изображения.", +"overflow": "Поведение при переполнении (CSS)", +"overflowTip": "Определяет, как должно вести себя содержимое при переполнении контейнера. Такие параметры, как 'hidden', 'scroll' или 'visible', определяют видимость обрезанного содержимого.", +"positionX": "Горизонтальное положение", +"positionXTip": "Задает горизонтальное выравнивание изображения внутри его контейнера. Примеры: 'left', 'center', 'right' или процентные значения.", +"positionY": "Вертикальное положение", +"positionYTip": "Задает вертикальное выравнивание изображения внутри его контейнера. Примеры: 'top', 'center', 'bottom' или процентные значения.", +"aspectRatio": "Соотношение сторон (CSS)", +"aspectRatioTip": "Поддерживает постоянное соотношение ширины и высоты изображения, например, '16/9' для широкоэкранного или '1/1' для квадратного. Оставьте пустым для естественных размеров изображения.", +"placement": "Размещение изображений", +"placementTip": "Определяет, где и как будет отображаться изображение в макете или контейнере. Варианты включают определенное выравнивание или логику размещения.", +}, +"progress": { + ...en.progress, + +"value": "Значение", +"valueTooltip": "Процент завершения как значение от 0 до 100", +"showInfo": "Показать значение", +"valueDesc": "Текущее значение прогресса, в диапазоне от 0 до 100", +"showInfoDesc": "Отображать ли текущее значение прогресса", +}, +"fileViewer": { + ...en.fileViewer, + +"invalidURL": "Пожалуйста, введите правильный URL или строку Base64", +"src": "Файлы URI", +"srcTooltip": "Предварительный просмотр содержимого ссылки путем вставки HTML, также поддерживаются данные в кодировке Base64, например: data:application/pdf", +"srcDesc": "URI файла", +}, +"divider": { + ...en.divider, + +"title": "Название", +"align": "Выравнивание", +"dashed": "Пунктир", +"type": "Вертикальный тип", +"dashedDesc": "Использовать ли пунктирную линию", +"titleDesc": "Название разделителя", +"alignDesc": "Выравнивание заголовка разделителя", +}, +"QRCode": { + ...en.QRCode, + +"value": "Значение содержимого QR-кода", +"valueTooltip": "Значение содержит максимум 2953 символа. Значение QR-кода может кодировать различные типы данных, включая текстовые сообщения, URL, контактные данные (VCard/meCard), данные для входа в Wi-Fi, адреса электронной почты, номера телефонов, SMS-сообщения, координаты геолокации, данные о событиях календаря, платежную информацию, адреса криптовалют и ссылки для загрузки приложений.", +"valueDesc": "Значение содержимого QR-кода", +"level": "Уровень отказоустойчивости", +"levelTooltip": "Означает способность QR-кода быть отсканированным, даже если его часть заблокирована. Чем выше уровень, тем сложнее код.", +"includeMargin": "Показать маржу", +"image": "Отображение изображения в центре", +"L": "L (Низкий)", +"M": "M (средний)", +"Q": "Q (квартиль)", +"H": "H (высокий)", +"maxLength": "Содержание слишком длинное. Установите длину менее 2953 символов", +}, +"jsonExplorer": { + ...en.jsonExplorer, + +"indent": "Отступ каждого уровня", +"expandToggle": "Развернуть дерево JSON", +"theme": "Цветная тема", +"valueDesc": "Текущие данные в формате JSON", +"default": "По умолчанию", +"defaultDark": "По умолчанию Темный", +"neutralLight": "Нейтральный свет", +"neutralDark": "Нейтральный темный", +"azure": "Лазурь", +"darkBlue": "Темно-синий", +}, +"audio": { + ...en.audio, + +"src": "URI источника звука или строка Base64", +"defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", +"autoPlay": "Автоигра", +"loop": "Петля", +"srcDesc": "Текущий URI аудио или строка Base64, например data:audio/mpeg", +"play": "Играть", +"playDesc": "Срабатывает при воспроизведении звука", +"pause": "Пауза", +"pauseDesc": "Срабатывает при приостановке звука", +"ended": "Окончание", +"endedDesc": "Срабатывает при завершении воспроизведения аудиозаписи", +}, +"video": { + ...en.video, + +"src": "URI источника видео или строка Base64", +"defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", +"poster": "URL-адрес плаката", +"defaultPosterUrl": "", +"autoPlay": "Автоигра", +"loop": "Петля", +"controls": "Скрыть элементы управления", +"volume": "Объем", +"playbackRate": "Скорость воспроизведения", +"posterTooltip": "Значение по умолчанию - первый кадр видео.", +"autoPlayTooltip": "После загрузки видео оно будет воспроизводиться автоматически. Изменение этого значения с True на False приостановит воспроизведение видео. (Если установлен постер, он будет воспроизводиться кнопкой Poster)", +"controlsTooltip": "Скрыть элементы управления воспроизведением видео. Может поддерживаться не всеми источниками видео.", +"volumeTooltip": "Установка громкости проигрывателя, от 0 до 1", +"playbackRateTooltip": "Установите скорость игрока, между 1 и 2", +"srcDesc": "Текущий URI аудиофайла или строка Base64, например data:video/mp4", +"play": "Играть", +"playDesc": "Срабатывает при воспроизведении видео", +"pause": "Пауза", +"pauseDesc": "Срабатывает, когда видео приостанавливается", +"load": "Загрузить", +"loadDesc": "Срабатывает после завершения загрузки видеоресурса", +"ended": "Окончание", +"endedDesc": "Срабатывает по окончании воспроизведения видео", +"currentTimeStamp": "Текущая позиция воспроизведения видео в секундах", +"duration": "Общая продолжительность видео в секундах", +}, +"media": { + ...en.media, + +"playDesc": "Начинает воспроизведение носителя.", +"pauseDesc": "Приостанавливает воспроизведение мультимедиа.", +"loadDesc": "Сброс носителя на начало и перезапуск Выбор медиаресурса.", +"seekTo": "Ищите до заданного количества секунд или долей, если количество от 0 до 1", +"seekToAmount": "Количество секунд или дробь, если она от 0 до 1", +"showPreview": "Предварительный просмотр", +}, +"rangeSlider": { + ...en.rangeSlider, + +"start": "Начальное значение", +"end": "Конечное значение", +"step": "Размер шага", +"stepTooltip": "Зернистость ползунка, значение должно быть больше 0 и делиться на (Max-Min)", +}, +"iconControl": { + ...en.iconControl, + +"selectIcon": "Выберите значок", +"searchIcon": "Поиск значка", +"searchAnimation": "Поиск анимации", +"searchIllustration": "Поиск иллюстрации", +"insertIcon": "Вставить значок", +"insertImage": "Вставить изображение или", +}, +"shapeControl": { + ...en.shapeControl, + +"selectShape": "Выберите форму", +"insertShape": "Вставить фигуру", +"insertImage": "Вставить изображение или", +}, +"millisecondsControl": { + ...en.millisecondsControl, + +"timeoutTypeError": "Пожалуйста, введите правильный период тайм-аута в мс, текущий входной сигнал: {value}", +"timeoutLessThanMinError": "Вход должен быть больше, чем {left}, текущий вход составляет: {value}", +}, +"selectionControl": { + ...en.selectionControl, + +"single": "Одиночка", +"multiple": "Множество", +"close": "Закрыть", +"mode": "Режим выбора строк", +}, +"container": { + ...en.container, + +"title": "Отображаемое название контейнера", +"titleTooltip": "Название контейнера", +"flowWidth": "Ширина содержимого", +"floatType": "Текст Тип поплавка", +}, +"drawer": { + ...en.drawer, + +"closePosition": "Размещение кнопки закрытия", +"placement": "Размещение ящиков", +"size": "Размер", +"top": "Топ", +"right": "Справа", +"center": "Центр", +"bottom": "Дно", +"left": "Слева", +"title": "Название ящика", +"titleAlign": "Согласование названий", +"widthTooltip": "Пиксель или процент, например, 520, 60%", +"heightTooltip": "Пиксель, например, 378", +"openDrawerDesc": "Открытый ящик", +"closeDrawerDesc": "Закрыть ящик", +"width": "Ширина ящика", +"height": "Высота ящика", +}, +"meeting": { + ...en.meeting, + +"logLevel": "Уровень журнала Agora SDK", +"placement": "Размещение ящиков для совещаний", +"meeting": "Настройки совещаний", +"cameraView": "Посмотреть номер", +"cameraViewDesc": "Вид с камеры на локального пользователя (хост)", +"screenShared": "Общий экран", +"screenSharedDesc": "Экран, разделяемый локальным пользователем (хостом)", +"audioUnmuted": "Аудио без звука", +"audioMuted": "Приглушение звука", +"videoClicked": "Видео нажато", +"videoOff": "Видео выключено", +"videoOn": "Видео на", +"size": "Размер", +"top": "Топ", +"host": "Хост переговорной комнаты. Вам нужно будет управлять хостом как собственным Application Logic", +"participants": "Участники совещания", +"shareScreen": "Экран дисплея, разделяемый локальным пользователем", +"appid": "Идентификатор приложения Agora", +"meetingName": "Название встречи", +"localUserID": "Идентификатор пользователя хоста", +"userName": "Имя пользователя хоста", +"rtmToken": "Токен Agora RTM", +"rtcToken": "Токен Agora RTC", +"noVideo": "Нет видео", +"profileImageUrl": "URL-адрес изображения профиля", +"right": "Справа", +"bottom": "Дно", +"videoId": "Идентификатор видеопотока", +"audioStatus": "Состояние звука", +"left": "Слева", +"widthTooltip": "Пиксель или процент, например, 520, 60%", +"heightTooltip": "Пиксель, например, 378", +"openDrawerDesc": "Открытый ящик", +"closeDrawerDesc": "Закрыть ящик", +"width": "Ширина ящика", +"height": "Высота ящика", +"actionBtnDesc": "Кнопка действия", +"broadCast": "Широковещательные сообщения", +"title": "Название встречи", +"meetingCompName": "Agora Meeting Controller", +"sharingCompName": "Screen Share Stream", +"videoCompName": "Поток камер", +"videoSharingCompName": "Screen Share Stream", +"meetingControlCompName": "Кнопка со значком", +"meetingCompDesc": "Компонент встречи", +"meetingCompControls": "Управление совещаниями", +"meetingCompKeywords": "Agora Meeting, веб-совещания, совместная работа", +"iconSize": "Размер значка", +"userId": "Идентификатор пользователя хоста", +"roomId": "ID комнаты", +"meetingActive": "Текущая встреча", +"messages": "Передаваемые сообщения", +}, +"settings": { + ...en.settings, + +"title": "Настройки", +"userGroups": "Группы пользователей", +"organization": "Рабочие места", +"subscription": "Подписки", +"audit": "Журналы аудита", +"theme": "Темы", +"plugin": "Плагины", +"advanced": "Расширенный", +"apiDocs": "Документы API", +"lab": "Лаборатория", +"branding": "Брендинг", +"oauthProviders": "Аутентификация пользователей", +"appUsage": "Журналы использования приложений", +"environments": "Окружающая среда", +"premium": "Премиум", +}, +"enterprise": { + ...en.enterprise, + +"AuditLogTitle": "Журнал аудита Dasboard", +"AuditLogOverview": "Фильтр журнала", +"USER_LOGIN": "Вход в систему", +"USER_LOGOUT": "Выход пользователя из системы", +"APPLICATION_VIEW": "Посмотреть приложение", +"APPLICATION_CREATE": "Создать приложение", +"APPLICATION_DELETE": "Удалить приложение", +"APPLICATION_UPDATE": "Обновить приложение", +"APPLICATION_MOVE": "Переместить приложение", +"APPLICATION_RECYCLED": "Заявка на переработку", +"APPLICATION_RESTORE": "Восстановление приложения", +"APPLICATION_PUBLISH": "Издательство приложений", +"APPLICATION_VERSION_CHANGE": "Обновление версии приложения", +"APPLICATION_SHARING_CHANGE": "Изменение совместного использования приложений", +"APPLICATION_PERMISSION_CHANGE": "Разрешение на применение Изменение", +"FOLDER_CREATE": "Создать папку", +"FOLDER_DELETE": "Удалить папку", +"FOLDER_UPDATE": "Папка обновлений", +"QUERY_EXECUTION": "Выполнить запрос", +"GROUP_CREATE": "Создать группу", +"GROUP_UPDATE": "Группа обновления", +"GROUP_DELETE": "Удалить группу", +"GROUP_MEMBER_ADD": "Добавить члена группы", +"GROUP_MEMBER_ROLE_UPDATE": "Обновление роли члена группы", +"GROUP_MEMBER_LEAVE": "Группа отпусков", +"GROUP_MEMBER_REMOVE": "Удалить члена группы", +"SERVER_START_UP": "Запуск сервера", +"SERVER_INFO": "Просмотр информации о сервере", +"DATA_SOURCE_CREATE": "Создать источник данных", +"DATA_SOURCE_UPDATE": "Обновление источника данных", +"DATA_SOURCE_DELETE": "Удалить источник данных", +"DATA_SOURCE_PERMISSION_GRANT": "Предоставление разрешения на использование источника данных", +"DATA_SOURCE_PERMISSION_UPDATE": "Обновление разрешения источника данных", +"DATA_SOURCE_PERMISSION_DELETE": "Разрешение на удаление источника данных", +"LIBRARY_QUERY_CREATE": "Создать библиотечный запрос", +"LIBRARY_QUERY_UPDATE": "Обновление библиотечного запроса", +"LIBRARY_QUERY_DELETE": "Удалить библиотечный запрос", +"LIBRARY_QUERY_PUBLISH": "Опубликовать библиотечный запрос", +"API_CALL_EVENT": "Событие вызова API", +"logFilter": "Фильтр журнала", +"noLogsFound": "Журналы не найдены. Настройте фильтры и повторите попытку.", +"usageLogUserEngagement": "Вовлеченность пользователей по регионам", +"usageLogAppViews": "Использование приложений с течением времени", +"usageLogTopTen": "10 лучших приложений", +"usageLogAnonymousKNown": "Анонимные/известные пользователи", +"usageLogDevices": "Разбивка по устройствам/ОС", +"usageLogBrowsers": "Разбивка браузера/программного обеспечения", +"premiumFeaturesNotice": "Все премиум-функции доступны в корпоративной версии Lowcoder.", +"requestLicense": "Запрос лицензий Enterprise Edition", +"requestLicensesBtton": "Запрос доступа к предприятию", +"AuditLogsTitle": "Журналы аудита", +"AuditLogsIntroTitle": "Мощный обзор активности рабочего пространства", +"AuditLogsIntro1": "Журналы аудита позволяют администраторам отслеживать, что именно происходит на всей платформе Lowcoder. Каждое действие, от входа пользователя в систему до внесения изменений в приложение, фиксируется и сохраняется.", +"AuditLogsIntro2": "Мы включаем подробные метаданные, такие как геолокация, тип устройства, браузер и операционная система для каждого события.", +"AuditLogsIntro3": "Такая прозрачность позволяет отслеживать активность во всех подключенных средах, обеспечивая надежный аудиторский след для поддержки соответствия нормативным требованиям, безопасности и оперативной информации.", +"AuditLogsEventsTitle": "Какие события отслеживаются?", +"AuditLogsEventsIntro": "Следующие действия пользователя регистрируются в режиме реального времени:", +"SignIn": "Войти", +"Logout": "Выход из системы", +"ViewApp": "Посмотреть приложение", +"CreateApp": "Создайте новое приложение", +"DeleteApp": "Удалить приложение", +"UpdateApp": "Обновление приложения", +"MoveToFolder": "Переместить в папку", +"MoveToTrash": "Переместить в корзину", +"RestoreApp": "Восстановление приложения", +"CreateFolder": "Создайте новую папку", +"DeleteFolder": "Удалить папку", +"UpdateFolder": "Обновление папки", +"ExecuteDataQuery": "Выполнение запроса данных", +"CreateUserGroup": "Создайте новую группу пользователей", +"UpdateUserGroup": "Обновление группы пользователей", +"DeleteUserGroup": "Удалить группу пользователей", +"AddGroupMember": "Добавить члена группы пользователей", +"UpdateGroupMemberRole": "Обновление роли члена группы пользователей", +"LeaveUserGroup": "Оставить группу пользователей", +"RemoveGroupMember": "Удалить члена группы пользователей", +"ServerStartup": "Запуск сервера", +"CreateDataSource": "Создайте источник данных", +"UpdateDataSource": "Обновление источника данных", +"DeleteDataSource": "Удалить источник данных", +"GrantUpdateDeletePermission": "Предоставление или обновление разрешений", +"LibraryQueryActions": "Создание / обновление / удаление библиотечных запросов", +"PublishLibraryQuery": "Опубликовать библиотечный запрос", +"AuditLogsPreviewTitle": "Предварительный просмотр журнала аудита в действии (нажмите для увеличения)", +"ScreenshotPlaceholder1": "[ Скриншот 1 ]", +"ScreenshotPlaceholder2": "[ Скриншот 2 ]", +"ScreenshotPlaceholder3": "[ Скриншот 3 ]", +"PricingTitle": "Цены на корпоративную версию", +"PricingIntro": "Мы предлагаем гибкую ценовую политику для организаций любого размера, учитывающую вашу модель использования:", +"FlatRateTitle": "Вариант 1: фиксированная цена за экземпляр - $169 / месяц", +"FlatRateDesc": "Экземпляр - это полная среда Lowcoder (база метаданных + среда выполнения), которая может быть развернута независимо. Сюда входят:", +"FlatRatePoint1": "Специальное хранилище метаданных MongoDB", +"FlatRatePoint2": "Один или несколько режимов выполнения приложений (контейнеры \"Api-Service\" и/или \"Node-Service\")", +"UsagePricingTitle": "Вариант 2: ценообразование на основе использования - $0,001 за вызов API", +"UsagePricingDesc": "Каждый экземпляр может быть лицензирован в зависимости от использования API. Мы предлагаем пакеты с предоплатой:", +"API100k": "100 000 вызовов API - $100", +"API1M": "1 000 000 вызовов API - 1 000 долл.", +"API10M": "10 000 000 вызовов API - $10 000", +"UsageOverrunDesc": "Когда ваш пакет API закончится, мы предупредим вас об этом. Как только пакет будет израсходован, ваш экземпляр останется функциональным, но будет работать на пониженной скорости, чтобы предотвратить злоупотребления и сохранить справедливость.", +"UsageTopUpInfo": "Вы можете в любое время плавно добавлять дополнительные пакеты, чтобы обеспечить постоянный и быстрый доступ - без перебоев в обслуживании.", +"AppUsageTitle": "Журналы использования приложений", +"AppUsageIntroTitle": "Поймите, как используются ваши приложения", +"AppUsageIntro1": "Журналы использования приложений дают вам глубокое представление о том, как потребляются опубликованные вами приложения Lowcoder.", +"AppUsageIntro2": "Эта функциональность работает как встроенная, упрощенная версия Google Analytics - но полностью приватная и привязанная к вашему экземпляру Lowcoder.", +"AppUsageIntro3": "Администраторы могут проанализировать, как происходит обращение к приложениям с течением времени, какие из них используются чаще всего и откуда подключаются пользователи.", +"AppUsageMetricsTitle": "Показатели, которые вы можете отслеживать...", +"AppUsageMetricsIntro": "Эта аналитика поможет вам принимать обоснованные решения о вовлеченности и использовании платформы:", +"MetricActiveUsers": "Просмотры приложений в день / неделю / месяц (на основе временного фильтра)", +"MetricViewsPerApp": "10 лучших приложений", +"MetricDevices": "Доступ с разных устройств (настольных, планшетных, мобильных)", +"MetricBrowsers": "Доступ через браузер и ОС", +"MetricCountries": "Географическое происхождение пользователей", +"AppUsageScreenshotsTitle": "App Usage Analytics в действии (нажмите для увеличения)", +"AppUsageScreenshot1": "[ Снимок экрана App Usage Dashboard ].", +"AppUsageScreenshot2": "[ График просмотров приложений ]", +"AppUsageScreenshot3": "[ Географическая карта распространения ]", +"BrandingIntroTitle": "Индивидуальный брендинг и белая этикетка", +"BrandingIntro1": "С помощью настроек Lowcoders Branding вы можете повысить качество продукта для своих пользователей, предлагая полностью настраиваемый брендинг.", +"BrandingIntro2": "Дайте возможность вашим клиентам или внутренним командам использовать платформу как свою собственную - логотип, цвета, шрифты и пользовательские страницы включены.", +"BrandingIntro3": "Или вам нужно полностью белое решение и усиление фирменного стиля в каждой точке контакта.", +"BrandingColorsIntro1": "Вы можете задать собственную цветовую схему, соответствующую вашему фирменному стилю, включая основные элементы пользовательского интерфейса и навигационные панели.", +"BrandingColorsIntro2": "Настройте выделение боковых панелей, разделы заголовков и даже контрастность текста, чтобы повысить удобство использования и доступность.", +"BrandingFontsIntro": "Выбирайте шрифты Google, чтобы сделать ваше приложение по-настоящему стильным и удобным для чтения.", +"BrandingLogosIntro": "Естественно, вы можете загружать собственные логотипы - прямоугольные и квадратные - для отображения в заголовках, на приборных панелях и экранах входа в систему. Поддерживайте единообразие бренда на всех устройствах и экранах.", +"BrandingPagesIntro1": "Добавьте персонализированный текст и визуальные эффекты на страницы ошибок, потоки регистрации и сообщения о выходе из системы.", +"BrandingPagesIntro2": "Эти точки соприкосновения помогают обеспечить полностью брендированный опыт даже при неожиданных сценариях или переходе от одного аккаунта к другому.", +"BrandingMetaIntro": "Определите стандартные метаданные, такие как заголовок и описание страницы, чтобы улучшить SEO-присутствие и сообщение бренда.", +"BrandingHelpLinksIntro": "Добавляйте контекстно-зависимые ссылки на документацию прямо в приложение, предоставляя пользователям своевременную помощь.", +"BrandingWhatsNewIntro": "Активируйте раздел \"Что нового\", чтобы выделить обновления и анонсы продуктов в фирменном и заметном виде.", +"EnvironmentsIntroTitle": "Постановка лоукодера", +"EnvironmentsTitle": "Инфраструктура для нескольких сред", +"EnvironmentsIntro1": "Среды Lowcoder позволяют четко и безопасно разделить этапы Dev, Test и Prod.", +"EnvironmentsIntro2": "Корпоративные команды выигрывают от структурированных рабочих процессов выпуска, процессов утверждения и стабильности версий на всех этапах.", +"EnvironmentsIntro3": "С помощью функции Environments администраторы могут контролировать, что, когда и где будет развернуто - все из единого интерфейса.", +"EnvironmentsIntro4": "Lowcoder включает в себя множество типов объектов, таких как рабочие пространства, источники данных, запросы данных и приложения. Поскольку многие из этих объектов взаимосвязаны (например, источник данных может быть общим для нескольких приложений), чистый экспорт на основе Git не сможет последовательно отразить все зависимости. Вместо этого Lowcoder предлагает механизм выборочного, интегрированного развертывания непосредственно в пользовательском интерфейсе. Приложениями, источниками данных и запросами можно выборочно управлять и развертывать в разных средах. Управляемые объекты обеспечивают безопасное и контролируемое развертывание в средах.", +"yourDeploymentID": "Ваш идентификатор развертывания", +"EnvironmentsFeaturePreviewTitle": "Среды и развертывание в действии (нажмите для увеличения)", +"EnvironmentsUseCasesTitle": "Зачем использовать окружения? (Постановка)", +"EnvironmentsUseCase1": "Предотвратите непредвиденные изменения в производстве, тестируя приложения в специальных средах Dev или QA.", +"EnvironmentsUseCase2": "Приведите в соответствие с корпоративным ИТ-руководством поэтапное развертывание с возможностью отслеживания в ходе аудита.", +"EnvironmentsUseCase3": "Дайте возможность командам уверенно создавать конфигурации, данные и интеграции с учетом специфики среды.", +"EnvironmentsFeaturesTitle": "Что вы получите", +"EnvironmentsFeature1": "Централизованная приборная панель для просмотра и управления всеми средами Lowcoder.", +"EnvironmentsFeature2": "Развертывание приложений, источников данных и конфигураций между средами непосредственно из пользовательского интерфейса без использования дополнительных инструментов CI/CD.", +"EnvironmentsFeature3": "Контроль доступа и правила видимости для конкретной среды.", +"EnvironmentsFeature5": "Четкое разделение задач для стадийных, песочниц и производственных операций.", +"apiUsage": "Вызовы API.", +"loadingApiUsage": "Загрузка данных об использовании API...", +}, +"environments": { + ...en.environments, + +"title": "Окружающая среда", +"search": "Поиск", +"refresh": "Обновить", +"addEnvironment": "Добавить окружающую среду", +"errorLoadingEnvironments": "Ошибка при загрузке окружения", +"noEnvironmentsFoundMatching": "Не найдено окружений, соответствующих \"{searchText}\"", +"noEnvironmentsFound": "Среды не найдены. Создайте свое первое окружение, чтобы начать работу.", +"environmentsTypeLabel": "{type} Окружающая среда", +"showingAllEnvironments": "Показать все окружения {count}", +"unnamedEnvironment": "Неназванная среда", +"masterEnvironment": "Мастерская среда", +"viewAuditLogs": "Просмотр журналов аудита", +"id": "ID", +"domain": "Домен", +"master": "Мастер", +"license": "Лицензия", +"apiCalls": "Вызовы API", +"yes": "Да", +"no": "Нет", +"copyId": "Идентификатор копии", +"copied": "Скопировано!", +"percentUsed": "{percent}% используется", +"licenseStatus_checking": "Проверяем...", +"licenseStatus_licensed": "Лицензия", +"licenseStatus_unlicensed": "Требуется лицензия", +"licenseStatus_error": "Требуется установка", +"licenseStatus_unknown": "Неизвестный", +"detail_environmentNotFound": "Окружающая среда не найдена", +"detail_returnToEnvironmentsList": "Вернуться к списку сред", +"detail_environmentDetail": "Деталь окружающей среды", +"detail_environmentOverview": "Обзор окружающей среды", +"detail_noDomainSet": "Домен не установлен", +"detail_environmentId": "Идентификатор среды", +"detail_licenseStatus": "Статус лицензии", +"detail_licenseNeeded": "Необходима лицензия", +"detail_setupRequired": "Требуется установка", +"detail_created": "Создано", +"detail_unknown": "Неизвестный", +"detail_licenseDetails": "Подробности лицензии", +"detail_apiCallsRemaining": "Оставшиеся вызовы API", +"detail_totalApiCallsLimit": "Общий лимит вызовов API", +"detail_enterpriseEdition": "Enterprise Edition", +"detail_active": "Активный", +"detail_inactive": "Неактивный", +"detail_licenseInformation": "Информация о лицензии", +"detail_calls": "звонки", +"detail_licenses": "Лицензии", +"detail_license": "Лицензия", +"detail_workspaces": "Рабочие места", +"detail_userGroups": "Группы пользователей", +"detail_type": "Тип", +"detail_status": "Статус", +"detail_licensed": "Лицензия", +"detail_unlicensed": "Без лицензии", +"detail_apiKey": "Ключ API", +"detail_configured": "Настроенный", +"detail_notSet": "Не установлено", +"detail_masterEnv": "Мастер Энв", +"unlicensed_unlicensedDescription": "Для использования всех возможностей и функций этой среды необходима действующая лицензия. Убедитесь, что URL-адрес вашего API-сервиса правильно настроен, а плагин установлен.", +"unlicensed_errorDescription": "Мы столкнулись с проблемой при проверке лицензии. Пожалуйста, пересмотрите настройки конфигурации.", +"unlicensed_defaultDescription": "Для работы в этой среде требуется настройка лицензии.", +"unlicensed_contactLowcoderTeam": "Связаться с командой Lowcoder", +"unlicensed_editEnvironment": "Редактирование среды", +"unlicensed_backToEnvironments": "Назад к средам", +"unlicensed_helpText": "Нужна помощь? Свяжитесь с нашей командой для получения лицензионной поддержки или измените конфигурацию среды, чтобы решить эту проблему.", +"unlicensed_type": "Тип", +"unlicensed_status": "Статус", +"unlicensed_masterEnv": "Мастер Энв", +"unlicensed_licenseIssue": "Выдача лицензии", +"unlicensed_error": "Ошибка", +"unlicensed_missing": "Пропажа", +"error_itemNotFound": "Предмет, который вы ищете, не существует или у вас нет разрешения на его просмотр.", +"modal_createNewEnvironment": "Создать новую среду", +"modal_editEnvironment": "Редактирование среды", +"modal_cancel": "Отмена", +"modal_createEnvironment": "Создание среды", +"modal_saveChanges": "Сохранить изменения", +"modal_environmentName": "Название среды", +"modal_pleaseEnterName": "Пожалуйста, введите имя", +"modal_nameMinLength": "Имя должно состоять не менее чем из 2 символов", +"modal_enterEnvironmentName": "Введите имя среды", +"modal_description": "Описание", +"modal_enterDescription": "Введите описание", +"modal_stage": "Сцена", +"modal_pleaseSelectStage": "Пожалуйста, выберите этап", +"modal_selectStage": "Выберите этап", +"modal_development": "Развитие (DEV)", +"modal_testing": "Тестирование (TEST)", +"modal_preProduction": "Предварительное производство (PREPROD)", +"modal_production": "Производство (PROD)", +"modal_frontendUrl": "URL-адрес фронтенда", +"modal_pleaseEnterValidUrl": "Пожалуйста, введите действительный URL-адрес", +"modal_apiServiceUrl": "URL-адрес службы API", +"modal_nodeServiceUrl": "URL-адрес службы узла", +"modal_apiKey": "Ключ API", +"modal_enterApiKey": "Введите ключ API", +"modal_masterEnvironment": "Мастерская среда", +"modal_alreadyMasterEnvironment": "{name} уже является хозяином среды", +"modal_willBeMaster": "Будет мастером", +"modal_currentlyMaster": "В настоящее время мастер", +"modal_configurationRequirements": "Требования к конфигурации", +"modal_configurationRequirementsDesc": "Убедитесь, что URL-адрес службы API настроен и корректен, ключ API действителен, а для проверки лицензии убедитесь, что лицензия и плагин установлены правильно.", +"workspaces_title": "Рабочие места", +"workspaces_subtitle": "Управление рабочими пространствами в этой среде", +"workspaces_refresh": "Обновить", +"workspaces_errorLoadingWorkspaces": "Ошибка при загрузке рабочих пространств", +"workspaces_configurationIssue": "Проблема конфигурации", +"workspaces_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", +"workspaces_totalWorkspaces": "Всего рабочих мест", +"workspaces_managedWorkspaces": "Управляемые рабочие пространства", +"workspaces_unmanagedWorkspaces": "Неуправляемые рабочие места", +"workspaces_workspace": "Рабочее пространство", +"workspaces_role": "Роль", +"workspaces_status": "Статус", +"workspaces_managed": "Управляемый", +"workspaces_unmanaged": "Неуправляемый", +"workspaces_actions": "Действия", +"workspaces_viewAuditLogs": "Просмотр журналов аудита", +"workspaces_audit": "Аудит", +"workspaces_searchWorkspaces": "Поиск рабочих пространств по имени или идентификатору", +"workspaces_showAll": "Показать все", +"workspaces_managedOnly": "Только управляемые", +"workspaces_showingResults": "Показать {count} из {total} рабочих пространств", +"workspaces_paginationTotal": "{start}-{end} из {total} рабочих пространств", +"workspaces_noWorkspacesFound": "В этой среде не найдено ни одного рабочего пространства", +"userGroups_title": "Группы пользователей", +"userGroups_subtitle": "Управление группами пользователей в этой среде", +"userGroups_refresh": "Обновить", +"userGroups_errorLoadingUserGroups": "Ошибка при загрузке групп пользователей", +"userGroups_configurationIssue": "Проблема конфигурации", +"userGroups_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", +"userGroups_totalGroups": "Всего групп", +"userGroups_allUsersGroups": "Все группы пользователей", +"userGroups_developerGroups": "Группы разработчиков", +"userGroups_customGroups": "Пользовательские группы", +"userGroups_userGroup": "Группа пользователей", +"userGroups_type": "Тип", +"userGroups_allUsers": "Все пользователи", +"userGroups_developers": "Разработчики", +"userGroups_custom": "Пользовательское", +"userGroups_members": "Члены", +"userGroups_adminMembers": "Члены администрации", +"userGroups_created": "Создано", +"userGroups_totalMembersTooltip": "Общее количество участников в этой группе", +"userGroups_adminMembersTooltip": "Количество пользователей-администраторов в этой группе", +"userGroups_searchUserGroups": "Поиск групп пользователей по имени или идентификатору", +"userGroups_showingResults": "Показывает {count} из {total} групп пользователей", +"userGroups_paginationTotal": "{start}-{end} из {total} групп пользователей", +"userGroups_noUserGroupsFound": "В этой среде не найдено ни одной группы пользователей", +"apps_title": "Приложения", +"apps_subtitle": "Управление приложениями рабочего пространства", +"apps_refresh": "Обновить", +"apps_errorLoadingApps": "Ошибка при загрузке приложений", +"apps_configurationIssue": "Проблема конфигурации", +"apps_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", +"apps_totalApps": "Всего приложений", +"apps_publishedApps": "Опубликованные приложения", +"apps_managedApps": "Управляемые приложения", +"apps_unmanagedApps": "Неуправляемые приложения", +"apps_app": "Приложение", +"apps_status": "Статус", +"apps_published": "Опубликовано", +"apps_draft": "Проект", +"apps_managed": "Управляемый", +"apps_unmanaged": "Неуправляемый", +"apps_deploy": "Развернуть", +"apps_audit": "Аудит", +"apps_appMustBeManagedToDeploy": "Прежде чем развернуть приложение, им необходимо управлять", +"apps_deployThisApp": "Разверните это приложение в другой среде", +"apps_viewAuditLogs": "Просмотр журналов аудита", +"apps_searchApps": "Поиск приложений по имени или идентификатору", +"apps_showAll": "Показать все", +"apps_managedOnly": "Только управляемые", +"apps_showingResults": "Показать {count} из {total} приложений", +"apps_paginationTotal": "{start}-{end} из {total} приложений", +"apps_noAppsFound": "В этом рабочем пространстве не найдено ни одного приложения", +"apps_appRecycled": "Это приложение было перемещено в корзину", +"apps_managedSuccess": "{name} теперь управляется", +"apps_unmanagedSuccess": "{name} теперь неуправляемый", +"apps_managedError": "Не удалось изменить управляемый статус для {name}", +"dataSources_title": "Источники данных", +"dataSources_subtitle": "Управление соединениями данных рабочей области", +"dataSources_refresh": "Обновить", +"dataSources_errorLoadingDataSources": "Ошибка при загрузке источников данных", +"dataSources_configurationIssue": "Проблема конфигурации", +"dataSources_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", +"dataSources_totalDataSources": "Всего источников данных", +"dataSources_availableTypes": "Доступные типы", +"dataSources_managed": "Управляемый", +"dataSources_unmanaged": "Неуправляемый", +"dataSources_dataSource": "Источник данных", +"dataSources_type": "Тип", +"dataSources_status": "Статус", +"dataSources_deploy": "Развернуть", +"dataSources_audit": "Аудит", +"dataSources_dataSourceMustBeManagedToDeploy": "Перед развертыванием источника данных им необходимо управлять", +"dataSources_deployThisDataSource": "Разверните этот источник данных в другой среде", +"dataSources_viewAuditLogs": "Просмотр журналов аудита", +"dataSources_searchDataSources": "Поиск источников данных по имени или идентификатору", +"dataSources_showAll": "Показать все", +"dataSources_managedOnly": "Только управляемые", +"dataSources_showingResults": "Показывает {count} из {total} источников данных", +"dataSources_paginationTotal": "{start}-{end} из {total} источников данных", +"dataSources_noDataSourcesFound": "В этом рабочем пространстве не найдено ни одного источника данных", +"dataSources_managedSuccess": "{name} теперь управляется", +"dataSources_unmanagedSuccess": "{name} теперь неуправляемый", +"dataSources_managedError": "Не удалось изменить управляемый статус для {name}", +"queries_title": "Запросы", +"queries_subtitle": "Управление запросами API рабочего пространства", +"queries_refresh": "Обновить", +"queries_errorLoadingQueries": "Ошибка при загрузке запросов", +"queries_configurationIssue": "Проблема конфигурации", +"queries_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", +"queries_totalQueries": "Всего запросов", +"queries_managed": "Управляемый", +"queries_unmanaged": "Неуправляемый", +"queries_query": "Запрос", +"queries_creator": "Создатель", +"queries_status": "Статус", +"queries_deploy": "Развернуть", +"queries_audit": "Аудит", +"queries_queryMustBeManagedToDeploy": "Прежде чем развернуть запрос, им необходимо управлять", +"queries_deployThisQuery": "Разверните этот запрос в другой среде", +"queries_viewAuditLogs": "Просмотр журналов аудита", +"queries_searchQueries": "Поисковые запросы по имени или идентификатору", +"queries_showAll": "Показать все", +"queries_managedOnly": "Только управляемые", +"queries_showingResults": "Показывать {count} из {total} запросов", +"queries_paginationTotal": "{start}-{end} из {total} запросов", +"queries_noQueriesFound": "В этом рабочем пространстве не найдено ни одного запроса", +"queries_managedSuccess": "{name} теперь управляется", +"queries_unmanagedSuccess": "{name} теперь неуправляемый", +"queries_managedError": "Не удалось изменить управляемый статус для {name}", +"deployModal_deployTitle": "Разверните {singularLabel}: {name}", +"deployModal_loadingEnvironments": "Загрузка окружения...", +"deployModal_sourceEnvironment": "Источник Экология", +"deployModal_targetEnvironment": "Целевая среда", +"deployModal_selectTargetEnvironment": "Выберите целевую среду", +"deployModal_selectTargetEnvironmentValidation": "Пожалуйста, выберите целевую среду", +"deployModal_confirmed": "Подтверждено", +"deployModal_cancel": "Отмена", +"deployModal_deploy": "Развернуть", +"deployModal_targetEnvironmentNotFound": "Целевая среда не найдена", +"deployModal_confirmCredentialOverwrite": "Пожалуйста, подтвердите перезапись учетных данных перед развертыванием", +"deployModal_deploySuccess": "Успешное развертывание {name} в целевой среде", +"deployModal_deployFailed": "Не удалось развернуть {singularLabel}", +"deployModal_selectFieldValidation": "Пожалуйста, выберите {label}", +"deployModal_selectFieldPlaceholder": "Выберите {label}", +"deployModal_inputFieldValidation": "Пожалуйста, введите {label}", +"deployModal_inputFieldPlaceholder": "Введите {label}", +"contactLowcoder_title": "Связаться с командой Lowcoder", +"contactLowcoder_environmentLabel": "Окружающая среда:", +"contactLowcoder_environmentIdLabel": "ID среды:", +"contactLowcoder_deploymentIdLabel": "Идентификатор развертывания:", +"contactLowcoder_loading": "Загрузка...", +"contactLowcoder_notAvailable": "Нет в наличии", +"contactLowcoder_unnamedEnvironment": "Неназванная среда", +"contactLowcoder_fetchingDeploymentInfo": "Получение информации о развертывании...", +"contactLowcoder_unableToLoadContactForm": "Невозможно загрузить контактную форму", +"contactLowcoder_apiConfigurationError": "URL-адрес службы API среды или ключ API не настроены", +"contactLowcoder_failedToFetchDeploymentId": "Не удалось получить идентификатор развертывания", +"contactLowcoder_ensureProperConfiguration": "Чтобы связаться со службой поддержки, убедитесь, что среда настроена правильно.", +"credentialConfirmations_firstConfirmation_title": "Предупреждение о перезаписи учетных данных", +"credentialConfirmations_firstConfirmation_message": "Это действие перезапишет существующие учетные данные в целевой среде.", +"credentialConfirmations_firstConfirmation_description": "Это серьезная операция, которая может повлиять на другие приложения и пользователей.", +"credentialConfirmations_firstConfirmation_question": "Вы уверены, что хотите продолжить?", +"credentialConfirmations_firstConfirmation_continueButton": "Продолжить", +"credentialConfirmations_firstConfirmation_cancelButton": "Отмена", +"credentialConfirmations_secondConfirmation_title": "Требуется окончательное подтверждение", +"credentialConfirmations_secondConfirmation_message": "Последнее предупреждение: Перезапись учетных данных", +"credentialConfirmations_secondConfirmation_description": "Вы собираетесь перезаписать учетные данные в целевой среде. Это действие нельзя отменить, и оно может нарушить существующую интеграцию.", +"credentialConfirmations_secondConfirmation_confirmOnceMore": "Пожалуйста, подтвердите еще раз.", +"credentialConfirmations_secondConfirmation_finalQuestion": "Вы точно уверены, что хотите перезаписать учетные данные?", +"credentialConfirmations_secondConfirmation_confirmButton": "Да, перезапись учетных данных", +"credentialConfirmations_secondConfirmation_cancelButton": "Отмена", +"config_singularLabels_app": "Приложение", +"config_singularLabels_dataSource": "Источник данных", +"config_singularLabels_query": "Запрос", +"config_singularLabels_workspace": "Рабочее пространство", +"config_fields_updateDependenciesIfNeeded": "Обновление зависимостей при необходимости", +"config_fields_publishOnTarget": "Публикуйте в срок", +"config_fields_publicToAll": "Публично для всех", +"config_fields_publicToMarketplace": "От публики до рынка", +"config_fields_overwriteCredentials": "Перезапись учетных данных", +"services_environments_missingEnvironmentId": "Отсутствующий идентификатор среды", +"services_environments_failedToUpdateEnvironment": "Не удалось обновить среду", +"services_environments_environmentCreatedSuccessfully": "Среда создана успешно", +"services_environments_failedToCreateEnvironment": "Не удалось создать среду", +"services_environments_failedToFetchEnvironments": "Не удалось получить окружение", +"services_environments_failedToFetchEnvironment": "Не удалось получить информацию о среде", +"services_environments_environmentIdRequired": "Требуется идентификатор среды", +"services_environments_apiKeyRequiredForWorkspaces": "Для получения рабочих пространств требуется ключ API", +"services_environments_apiServiceUrlRequiredForWorkspaces": "Для получения рабочих пространств требуется URL-адрес службы API", +"services_environments_failedToFetchWorkspaces": "Не удалось получить рабочие пространства", +"services_environments_apiKeyRequiredForUserGroups": "Для получения информации о группах пользователей требуется ключ API", +"services_environments_apiServiceUrlRequiredForUserGroups": "URL-адрес службы API необходим для получения групп пользователей", +"services_environments_failedToFetchUserGroups": "Не удалось получить группы пользователей", +"services_environments_workspaceIdRequired": "Требуется идентификатор рабочей области", +"services_environments_apiKeyRequiredForApps": "Для получения приложений требуется ключ API", +"services_environments_apiServiceUrlRequiredForApps": "Для получения приложений требуется URL-адрес службы API", +"services_environments_failedToFetchWorkspaceApps": "Не удалось получить приложения рабочей области", +"services_environments_apiKeyRequiredForDataSources": "Для получения данных из источников требуется ключ API", +"services_environments_apiServiceUrlRequiredForDataSources": "URL-адрес службы API необходим для получения источников данных", +"services_environments_failedToFetchWorkspaceDataSources": "Не удалось получить источники данных рабочей области", +"services_environments_apiKeyRequiredForQueries": "Для получения запросов требуется ключ API", +"services_environments_apiServiceUrlRequiredForQueries": "URL-адрес службы API необходим для получения запросов", +"services_environments_failedToFetchWorkspaceQueries": "Не удалось получить запросы рабочей области", +"services_environments_apiServiceUrlNotConfigured": "URL-адрес службы API не настроен", +"services_environments_licenseCheckFailed": "Проверка лицензии не удалась", +"services_environments_apiKeyRequiredForDeploymentId": "Для получения идентификатора развертывания требуется ключ API", +"services_environments_failedToFetchDeploymentId": "Не удалось получить идентификатор развертывания", +"services_enterprise_missingEnvironmentId": "Отсутствующий идентификатор среды", +"services_enterprise_failedToFetchManagedWorkspaces": "Не удалось получить управляемые рабочие пространства", +"services_enterprise_missingRequiredParamsToConnectOrg": "Отсутствуют необходимые параметры для подключения рабочего пространства", +"services_enterprise_failedToConnectOrg": "Не удалось подключить рабочую область", +"services_enterprise_missingOrgGidToUnconnectWorkspace": "Отсутствие GID рабочей области для отключения рабочей области", +"services_enterprise_failedToUnconnectOrg": "Не удалось отсоединить рабочее пространство", +"services_enterprise_failedToConnectApp": "Не удалось подключить приложение", +"services_enterprise_failedToUnconnectApp": "Не удалось отключить приложение", +"services_enterprise_failedToFetchDataSources": "Не удалось получить источники данных", +"services_enterprise_failedToDeployDataSource": "Не удалось развернуть источник данных", +"services_enterprise_failedToDisconnectManagedDataSource": "Не удалось отключить управляемый источник данных", +"services_enterprise_environmentIdRequired": "Требуется идентификатор среды", +"services_enterprise_failedToFetchQueries": "Не удалось получить запросы", +"services_enterprise_environmentIdAndQueryGidRequired": "Требуется идентификатор среды и GID запроса", +"services_enterprise_failedToDeployQuery": "Не удалось развернуть запрос", +"services_enterprise_queryGidRequired": "Требуется GID запроса", +"services_enterprise_failedToDisconnectQuery": "Не удалось отключить запрос", +"services_apps_failedToFetchApps": "Не удалось получить приложения", +"services_apps_failedToDeployApp": "Не удалось развернуть приложение", +"services_datasources_workspaceIdRequired": "Требуется идентификатор рабочей области", +"services_datasources_apiKeyRequiredToFetchDataSources": "Для получения данных из источников требуется ключ API", +"services_datasources_apiServiceUrlRequiredToFetchDataSources": "URL-адрес службы API необходим для получения источников данных", +"services_datasources_failedToFetchDataSources": "Не удалось получить источники данных", +"services_datasources_failedToDeployDataSource": "Не удалось развернуть источник данных", +"services_workspace_failedToFetchWorkspaces": "Не удалось получить рабочие пространства", +"services_workspace_failedToDeployWorkspace": "Не удалось развернуть рабочее пространство", +"services_managedObjects_missingRequiredParameters": "Отсутствие необходимых параметров", +"services_managedObjects_failedToCheckManagedStatus": "Не удалось проверить состояние управления", +"services_managedObjects_failedToSetAsManaged": "Не удалось установить {{objType}} в качестве управляемого", +"services_managedObjects_failedToRemoveFromManaged": "Не удалось удалить {{objType}} из управляемых", +"services_managedObjects_missingEnvironmentId": "Отсутствующий идентификатор среды", +"services_managedObjects_failedToFetchManagedObjects": "Не удалось получить управляемые объекты", +"services_managedObjects_failedToFetchManagedObject": "Не удалось получить управляемый объект", +"services_managedObjects_managedObjectNotFound": "Управляемый объект не найден для objGid: {{objGid}}", +"services_license_apiServiceUrlRequired": "Требуется URL-адрес службы API", +"services_license_licenseInformationUnavailable": "Информация о лицензии недоступна", +"services_license_licenseCheckTookTooLong": "Проверка лицензии заняла слишком много времени", +"services_license_licenseServiceNotAvailable": "Лицензионная служба недоступна", +"services_license_authenticationRequired": "Требуется аутентификация - пожалуйста, проверьте ключ API", +"services_license_licenseServiceTemporarilyUnavailable": "Лицензионный сервис временно недоступен", +"services_license_remainingAPICalls": "Осталось {{remaining}} ({{used}}/{{total}} использовано, {{percentage}}%)", +}, +"subscription": { + ...en.subscription, + +"details": "Подробности подписки", +"productDetails": "Подробнее о продукте", +"productName": "Название продукта", +"productDescription": "Описание товара", +"productPrice": "Цена продукта", +"subscriptionDetails": "Подробности подписки", +"status": "Статус", +"startDate": "Дата начала", +"currentPeriodEnd": "Конец текущего периода", +"customerId": "Идентификатор клиента", +"subscriptionItems": "Предметы подписки", +"itemId": "ID предмета", +"plan": "План", +"quantity": "Количество", +"product": "Продукт", +"invoices": "Счета-фактуры", +"invoiceNumber": "Номер счета-фактуры", +"date": "Дата", +"amount": "Сумма", +"link": "Ссылка на", +"viewInvoice": "Просмотреть счет-фактуру", +"downloadPDF": "Скачать PDF", +"billingReason": "Причина выставления счета", +"subscriptionCycle": "ежемесячная Подписка", +"customer": "Клиент", +"links": "Ссылки", +"paid": "Оплачивается", +"unpaid": "Неоплаченный", +"noInvoices": "Счета-фактуры отсутствуют", +"costVolumeDevelopment": "Развитие затрат/объемов", +"noUsageRecords": "Записи об использовании отсутствуют", +"itemDescription": "Описание товара", +"periodStart": "Начало периода", +"periodEnd": "Конец периода", +"billingReason.subscription_cycle": "Цикл подписки", +"billingReason.subscription_create": "Создание подписки", +"billingReason.manual": "Выставление счетов вручную", +"billingReason.upcoming": "Предстоящее выставление счетов", +"billingReason.subscription_threshold": "Порог подписки", +"billingReason.subscription_update": "Обновление подписки", +"backToSubscriptions": "Назад к подпискам", +"manageSubscription": "Управление подписками", +"subscriptionHelp": "Помощь при подписке", +"subscriptionHelpDescription": "Если у вас возникли вопросы, пожалуйста, свяжитесь с нами. Мы будем рады помочь вам. service@lowcoder.cloud", +"success": "Успех оплаты и подписки", +"successTitle": "Спасибо, что присоединились к семье Lowcoder!", +"successThankYou": "Мы очень рады, что вы стали нашим сотрудником! Ваше доверие к Lowcoder значит для нас все, и мы стремимся обеспечить исключительный опыт с первого дня.\n\nВ Lowcoder вы не просто клиент, вы - часть сообщества, которое способствует инновациям и росту. Наша миссия - помочь вам легко достичь поставленных целей, будь то быстрое решение проблем, создание инновационных решений или поддержка в любой момент.\n\nВот на что вы можете рассчитывать:\n\n- Первоклассная поддержка: Наша команда готова помочь вам на каждом шагу.\n- Постоянные инновации: Мы постоянно совершенствуемся, чтобы предложить вам лучшие инструменты и функции.\n- Партнерство во имя успеха: Ваш успех - наш приоритет.\n\nСпасибо, что вдохновляете нас расширять границы и стремиться к совершенству каждый день. Нам не терпится увидеть, что мы построим вместе.\n\nДобро пожаловать на борт! Давайте делать необычные вещи.", +"successLowcoderTeam": "Команда Lowcoder", +}, +"subscriptionError": { + ...en.subscriptionError, + +"fetchProductDetails": "Ошибка при получении сведений о продукте.", +"fetchSubscriptionDetails": "Ошибка при получении данных о подписке.", +"fetchInvoices": "Ошибка при получении счетов-фактур.", +}, +"auditLog": { + ...en.auditLog, + +"title": "Детали журнала аудита", +"geoLocation": "Геолокация", +"browserData": "Метаданные браузера / системы", +"browser": "Браузер", +"OS": "OS", +"device": "Устройство", +"deviceType": "Тип устройства", +"engine": "Двигатель", +"webview": "Webview", +"eventDetail": "Деталь события", +}, +"memberSettings": { + ...en.memberSettings, + +"admin": "Администратор", +"superAdmin": "Супер-администратор", +"adminGroupRoleInfo": "Администратор может управлять членами группы и ресурсами", +"adminOrgRoleInfo": "Администраторы владеют всеми ресурсами и могут управлять группами.", +"member": "Член", +"memberGroupRoleInfo": "Участник может просматривать членов группы", +"memberOrgRoleInfo": "Участники могут использовать или посещать только те ресурсы, к которым у них есть доступ.", +"title": "Члены", +"createGroup": "Создать группу", +"newGroupPrefix": "Новая группа", +"allMembers": "Все члены", +"deleteModalTitle": "Удалить эту группу", +"deleteModalContent": "Удаленная группа не может быть восстановлена. Вы уверены, что удалите группу?", +"addMember": "Добавить участников", +"nameColumn": "Имя пользователя", +"joinTimeColumn": "Время присоединения", +"actionColumn": "Операция", +"roleColumn": "Роль", +"exitGroup": "Группа \"Выход", +"moveOutGroup": "Удалить из группы", +"inviteUser": "Пригласить участников", +"exitOrg": "Оставить", +"exitOrgDesc": "Вы уверены, что хотите покинуть это рабочее место?", +"moveOutOrg": "Удалить", +"moveOutOrgDescSaasMode": "Вы уверены, что хотите удалить пользователя {name} из этого рабочего пространства?", +"moveOutOrgDesc": "Вы уверены, что хотите удалить пользователя {name}? Это действие не может быть восстановлено.", +"devGroupTip": "Члены группы разработчиков имеют привилегии на создание приложений и источников данных.", +"lastAdminQuit": "Последний администратор не может выйти.", +"organizationNotExist": "Текущая рабочая область не существует", +"inviteUserHelp": "Вы можете скопировать ссылку на приглашение, чтобы отправить его пользователю", +"inviteUserLabel": "Ссылка на приглашение:", +"inviteCopyLink": "Копировать ссылку", +"inviteText": "{userName} приглашает вас присоединиться к рабочему пространству \"{organization}\", нажмите на ссылку, чтобы присоединиться: {inviteLink}", +"inviteByEmailHelp": "Вы можете ввести один или несколько адресов электронной почты для отправки ссылок на приглашения.", +"inviteByEmailLabel": "Введите электронную почту:", +"inviteByEmailButton": "Отправить приглашения", +"inviteByEmailSuccess": "Приглашения отправлены успешно!", +"inviteByEmailError": "При отправке приглашений что-то пошло не так. Пожалуйста, попробуйте еще раз.", +"noValidEmails": "Не найдено ни одного действительного электронного письма", +"groupName": "Название группы", +"createTime": "Создать время", +"manageBtn": "Управление", +"userDetail": "Деталь", +"syncDeleteTip": "Эта группа была удалена из источника адресной книги", +"syncGroupTip": "Эта группа является группой синхронизации адресной книги и не может быть отредактирована", +}, +"orgSettings": { + ...en.orgSettings, + +"newOrg": "Новое рабочее пространство (Организация)", +"title": "Рабочее пространство", +"createOrg": "Создать рабочее пространство (организация)", +"deleteModalTitle": "Вы уверены, что хотите удалить это рабочее пространство?", +"deleteModalContent": "Вы собираетесь удалить это рабочее пространство {permanentlyDelete}. После удаления рабочее пространство {notRestored}.", +"permanentlyDelete": "Постоянно", +"notRestored": "Невозможно восстановить", +"deleteModalLabel": "Введите имя рабочей области {name}, чтобы подтвердить операцию:", +"deleteModalTip": "Введите имя рабочей области", +"deleteModalErr": "Неверное имя рабочей области", +"deleteModalBtn": "Удалить", +"editOrgTitle": "Редактирование информации о рабочей области", +"orgNameLabel": "Имя рабочего пространства:", +"orgNameCheckMsg": "Имя рабочей области не может быть пустым", +"orgLogo": "Логотип рабочего пространства:", +"logoModify": "Изменить изображение", +"inviteSuccessMessage": "Успешное присоединение к рабочему пространству", +"inviteFailMessage": "Не удалось присоединиться к рабочему пространству", +"uploadErrorMessage": "Ошибка загрузки", +"orgName": "Имя рабочей области", +}, +"freeLimit": "Бесплатная пробная версия", +"tabbedContainer": { + ...en.tabbedContainer, + +"switchTab": "Вкладка \"Переключение", +"switchTabDesc": "Срабатывает при переключении вкладок", +"tab": "Табы", +"atLeastOneTabError": "В контейнере для вкладок хранится как минимум одна вкладка", +"selectedTabKeyDesc": "Выбранная вкладка", +"iconPosition": "Положение значка", +"placement": "Размещение вкладок", +"showTabs": "Показать вкладки", +"gutter": "Gap", +"gutterTooltip": "Расстояние между вкладками в px", +"tabsCentered": "Вкладки по центру", +"destroyInactiveTab": "Уничтожить неактивную панель вкладок", +}, +"formComp": { + ...en.formComp, + +"containerPlaceholder": "Перетащите компоненты с правой панели или", +"openDialogButton": "Создайте форму на основе одного из источников данных", +"resetAfterSubmit": "Сброс после успешной отправки", +"initialData": "Исходные данные", +"disableSubmit": "Отключить отправку", +"success": "Форма сгенерирована успешно", +"selectCompType": "Выберите тип компонента", +"dataSource": "Источник данных:", +"invalidFormMessage": "Пользовательское сообщение о неправильной форме", +"selectSource": "Выберите источник", +"table": "Таблица:", +"selectTable": "Выберите таблицу", +"columnName": "Имя колонки", +"dataType": "Тип данных", +"compType": "Тип компонента", +"required": "Требуется", +"generateForm": "Создать форму", +"compSelectionError": "Тип ненастроенного столбца", +"compTypeNameError": "Не удалось получить имя типа компонента", +"noDataSourceSelected": "Источник данных не выбран", +"noTableSelected": "Нет выбранного стола", +"noColumn": "Нет колонки", +"noColumnSelected": "Колонка не выбрана", +"noDataSourceFound": "Не найден поддерживаемый источник данных. Создайте новый источник данных", +"noTableFound": "В этом источнике данных не найдено таблиц, выберите другой источник данных", +"noColumnFound": "В этой таблице не найдено поддерживаемых столбцов. Пожалуйста, выберите другую таблицу", +"formTitle": "Название формы", +"name": "Имя", +"nameTooltip": "Имя атрибута в данных формы, оставленное пустым, по умолчанию соответствует имени компонента", +"notSupportMethod": "Методы не поддерживаются:", +"notValidForm": "Форма недействительна", +"resetDesc": "Сброс данных формы на значение по умолчанию", +"clearDesc": "Очистить данные формы", +"setDataDesc": "Установить данные формы", +"valuesLengthError": "Номер параметра Ошибка", +"valueTypeError": "Тип параметра Ошибка", +"dataDesc": "Данные текущей формы", +"loadingDesc": "Загружается ли форма?", +}, +"modalComp": { + ...en.modalComp, + +"open": "Открыть", +"openDesc": "Срабатывает при открытии модального диалогового окна", +"close": "Закрыть", +"closeDesc": "Срабатывает при закрытии модального диалогового окна", +"openModalDesc": "Откройте диалоговое окно", +"closeModalDesc": "Закрыть диалоговое окно", +"visibleDesc": "Видима ли она? Если да, появится текущее диалоговое окно", +"title": "Название ящика", +"titleAlign": "Выравнивание по названию", +"modalHeight": "Модальная высота", +"modalHeightTooltip": "Пиксель, пример: 222", +"modalWidth": "Ширина модала", +"modalWidthTooltip": "Число или процент, Пример: 520, 60%", +}, +"listView": { + ...en.listView, + +"noOfRows": "Счетчик строк", +"noOfRowsTooltip": "Количество строк в списке - обычно задается переменной (например, '{{query1.data.length}}') для представления результатов запроса", +"noOfColumns": "Счетчик колонок", +"itemIndexName": "Имя индекса элемента данных", +"itemIndexNameDesc": "Имя переменной, указывающее на индекс элемента, по умолчанию {default}", +"itemDataName": "Имя объекта элемента данных", +"itemDataNameDesc": "Имя переменной, относящееся к объекту данных элемента, по умолчанию {default}", +"itemsDesc": "Раскрытие данных компонентов в списке", +"dataDesc": "Данные JSON, используемые в текущем списке", +"dataTooltip": "Если вы просто зададите число, это поле будет рассматриваться как Row Count, а данные будут считаться пустыми.", +"enableSorting": "Разрешить сортировку", +}, +"navigation": { + ...en.navigation, + +"addText": "Добавить элемент подменю", +"logoURL": "Навигация Логотип URL", +"horizontalAlignment": "Горизонтальное выравнивание", +"logoURLDesc": "Вы можете отобразить логотип на левой стороне, введя значение URI или строку Base64, например data:image/png", +"itemsDesc": "Элементы иерархического навигационного меню", +}, +"droppadbleMenuItem": { + ...en.droppadbleMenuItem, + +"subMenu": "Подменю {number}", +}, +"navItemComp": { + ...en.navItemComp, + +"active": "Активный", +}, +"iframe": { + ...en.iframe, + +"URLDesc": "URL-адрес источника содержимого IFrame. Убедитесь, что URL-адрес является HTTPS или localhost. Также убедитесь, что URL не заблокирован политикой безопасности содержимого (CSP) браузера. Заголовок 'X-Frame-Options' не должен быть установлен на 'DENY' или 'SAMEORIGIN'.", +"allowDownload": "Разрешить загрузку", +"allowSubmitForm": "Разрешить отправку формы", +"allowMicrophone": "Разрешить микрофон", +"allowCamera": "Разрешить камеру", +"allowPopup": "Разрешить всплывающие окна", +}, +"switchComp": { + ...en.switchComp, + +"defaultValue": "Булево значение по умолчанию", +"open": "На сайте", +"close": "С сайта", +"openDesc": "Срабатывает при включении выключателя", +"closeDesc": "Срабатывает при выключении выключателя", +"valueDesc": "Текущее состояние переключателя", +}, +"signature": { + ...en.signature, + +"tips": "Текст подсказки", +"signHere": "Подпишитесь здесь", +"showUndo": "Показать отмену", +"showClear": "Показать чистоту", +}, +"localStorageComp": { + ...en.localStorageComp, + +"valueDesc": "Все элементы данных, хранящиеся в данный момент", +"setItemDesc": "Добавить элемент", +"removeItemDesc": "Удалить элемент", +"clearItemDesc": "Очистить все элементы", +}, +"utilsComp": { + ...en.utilsComp, + +"openUrl": "Открытый URL", +"openApp": "Открытое приложение", +"copyToClipboard": "Копировать в буфер обмена", +"downloadFile": "Скачать файл", +"logoutUser": "Выход пользователя из системы", +"resetPassword": "Сброс пароля", +}, +"messageComp": { + ...en.messageComp, + +"info": "Отправить уведомление", +"loading": "Отправить уведомление о загрузке", +"success": "Отправить уведомление об успехе", +"warn": "Отправить уведомление о предупреждении", +"error": "Отправить уведомление об ошибке", +}, +"toastComp": { + ...en.toastComp, + +"destroy": "закрыть уведомление", +"info": "Отправить уведомление", +"loading": "Отправить уведомление о загрузке", +"success": "Отправить уведомление об успехе", +"warn": "Отправить уведомление о предупреждении", +"error": "Отправить уведомление об ошибке", +}, +"themeComp": { + ...en.themeComp, + +"switchTo": "Switch Theme", +}, +"transformer": { + ...en.transformer, + +"preview": "Предварительный просмотр", +"docLink": "Подробнее о трансформерах...", +"previewSuccess": "Предварительный просмотр Успех", +"previewFail": "Предварительный просмотр Неудача", +"deleteMessage": "Удаление трансформера успешно. Вы можете использовать {undoKey} для отмены.", +"documentationText": "Трансформаторы предназначены для преобразования данных и повторного использования вашего многострочного кода JavaScript. Используйте трансформаторы для адаптации данных из запросов или компонентов к потребностям вашего локального приложения. В отличие от JavaScript-запросов, трансформатор предназначен для выполнения операций только для чтения, что означает, что вы не можете запустить запрос или обновить временное состояние внутри трансформатора.", +}, +"temporaryState": { + ...en.temporaryState, + +"value": "Начальное значение", +"valueTooltip": "Начальное значение, хранящееся во временном состоянии, может быть булевым, строковым, числовым или любым другим допустимым значением JSON.", +"docLink": "Подробнее о временных штатах...", +"pathTypeError": "Путь должен быть либо строкой, либо массивом значений", +"unStructuredError": "Неструктурированные данные {prev} не могут быть обновлены {path}", +"valueDesc": "Временное государственное значение", +"deleteMessage": "Временное состояние удалено успешно. Вы можете использовать {undoKey} для отмены.", +"documentationText": "Временные состояния - это мощная функция, используемая для управления сложными переменными, которые динамически обновляют состояние компонентов в вашем приложении. Эти состояния выступают в качестве промежуточного или переходного хранилища для данных, которые могут изменяться со временем из-за взаимодействия с пользователем или других процессов.", +}, +"dataResponder": { + ...en.dataResponder, + +"data": "Данные", +"dataDesc": "Данные текущего респондента", +"dataTooltip": "Когда эти данные изменятся, это послужит толчком к последующим действиям.", +"docLink": "Подробнее о респондентах...", +"deleteMessage": "Ответчик данных успешно удален. Вы можете использовать {undoKey} для отмены.", +"documentationText": "При разработке приложения вы можете назначать события компонентам, чтобы отслеживать изменения определенных данных. Например, компонент Table может иметь такие события, как \"Изменение выбора строки\", \"Изменение фильтра\", \"Изменение сортировки\" и \"Изменение страницы\" для отслеживания изменений в свойстве selectedRow. Однако для изменений во временных состояниях, трансформаторах или результатах запросов, когда стандартные события недоступны, используются ответчики данных. Они позволяют обнаруживать и реагировать на любые изменения данных.", +}, +"theme": { + ...en.theme, + +"title": "Темы", +"createTheme": "Создать тему", +"themeName": "Название темы:", +"themeNamePlaceholder": "Пожалуйста, введите название темы", +"defaultThemeTip": "Тема по умолчанию:", +"createdThemeTip": "Тема, которую вы создали:", +"option": "Option{index}", +"input": "Вход", +"confirm": "Хорошо", +"emptyTheme": "Темы не доступны", +"click": "", +"toCreate": "", +"nameColumn": "Имя", +"defaultTip": "По умолчанию", +"updateTimeColumn": "Время обновления", +"edit": "Редактировать", +"cancelDefaultTheme": "Неустановленная тема по умолчанию", +"setDefaultTheme": "Установите тему по умолчанию", +"copyTheme": "Дублирование темы", +"setSuccessMsg": "Установка удалась", +"cancelSuccessMsg": "Унсеттинг преуспел", +"deleteSuccessMsg": "Удаление прошло успешно", +"checkDuplicateNames": "Название темы уже существует, пожалуйста, введите его заново", +"copySuffix": " Копировать", +"saveSuccessMsg": "Сохранено успешно", +"leaveTipTitle": "Советы", +"leaveTipContent": "Вы еще не сохранились, подтверждаете уход?", +"leaveTipOkText": "Оставить", +"goList": "Назад к списку", +"saveBtn": "Сохранить", +"mainColor": "Основные цвета", +"text": "Цвета текста", +"layout": "Настройки макета", +"fonts": "Настройки шрифта", +"components": "Шаблоны компонентов", +"charts": "Определение eCharts", +"defaultTheme": "По умолчанию", +"yellow": "Желтый", +"green": "Зеленый", +"previewTitle": "Предварительный просмотр темы\nПримеры компонентов, использующих цвета вашей темы", +"dateColumn": "Дата", +"emailColumn": "Электронная почта", +"phoneColumn": "Телефон", +"subTitle": "Название", +"linkLabel": "Ссылка на", +"linkUrl": "app.lowcoder.cloud", +"progressLabel": "Прогресс", +"sliderLabel": "Слайдер", +"radioLabel": "Радио", +"checkboxLabel": "Флажок", +"buttonLabel": "Кнопка формы", +"switch": "Переключатель", +"previewDate": "16/10/2022", +"previewEmail1": "ted.com", +"previewEmail2": "skype.com", +"previewEmail3": "imgur.com", +"previewEmail4": "balloon.com", +"previewPhone1": "+63-317-333-0093", +"previewPhone2": "+30-668-580-6521", +"previewPhone3": "+86-369-925-2071", +"previewPhone4": "+7-883-227-8093", +"chartPreviewTitle": "Предварительный просмотр стиля диаграммы", +"chartSpending": "Расходы", +"chartBudget": "Бюджет", +"chartAdmin": "Администрация", +"chartFinance": "Финансы", +"chartSales": "Продажи", +"chartFunnel": "Диаграмма воронки", +"chartShow": "Показать", +"chartClick": "Нажмите", +"chartVisit": "Посетите", +"chartQuery": "Запрос", +"chartBuy": "Купить", +"canvas": "Настройки холста", +}, +"themeDetail": { + ...en.themeDetail, + +"primary": "Фирменный цвет", +"primaryDesc": "Основной цвет по умолчанию, используемый большинством компонентов", +"textDark": "Темный цвет текста", +"textDarkDesc": "Используется, когда цвет фона светлый", +"textLight": "Светлый цвет текста", +"textLightDesc": "Используется, когда цвет фона темный", +"canvas": "Цвет холста", +"canvasDesc": "Цвет фона приложения по умолчанию", +"primarySurface": "Цвет контейнера", +"primarySurfaceDesc": "Цвет фона по умолчанию для таких компонентов, как таблицы", +"borders": "Пограничные стили", +"spacing": "Стили интервалов", +"font": "Стили шрифтов", +"fonts": "Шрифты", +"borderRadius": "Радиус границы", +"borderRadiusDesc": "Радиус границы по умолчанию, используемый большинством компонентов", +"borderColor": "Цвет границы", +"borderColorDesc": "Цвет границы по умолчанию, используемый большинством компонентов", +"borderWidth": "Ширина границы", +"borderWidthDesc": "Ширина границы по умолчанию, используемая большинством компонентов", +"borderStyle": "Пограничный стиль", +"borderStyleDesc": "Стиль границы по умолчанию, используемый большинством компонентов", +"fontFamily": "Семейство шрифтов", +"fontFamilyDesc": "Семейство шрифтов по умолчанию, используемое большинством компонентов", +"chart": "Стиль диаграммы", +"chartDesc": "Здесь вы можете разместить eCharts Theme JSON, чтобы определить стиль ваших диаграмм во всех деталях.", +"echartsJson": "Вы можете воспользоваться Генератором JSON темы. Скопируйте JSON из генератора и вставьте его сюда.", +"margin": "Маржа", +"marginDesc": "Маржа по умолчанию, обычно используемая для большинства компонентов", +"padding": "Набивка", +"paddingDesc": "Подкладка по умолчанию, обычно используемая для большинства компонентов", +"containerHeaderPadding": "Подшивка заголовков", +"containerheaderpaddingDesc": "Подложка заголовка по умолчанию, обычно используемая для большинства компонентов", +"gridColumns": "Колонки сетки", +"gridColumnsDesc": "Количество столбцов по умолчанию, обычно используемое для большинства контейнеров", +"loadingIndicators": "Индикаторы загрузки", +"showComponentLoadingIndicators": "Показывайте индикаторы загрузки при загрузке компонента", +"showDataLoadingIndicators": "Отображение индикаторов во время загрузки данных", +"dataLoadingIndicator": "Индикатор загрузки данных", +"background": "Фоновые стили", +"gridSettings": "Настройки сетки", +"gridRowHeight": "Высота строки сетки", +"gridRowHeightDesc": "Высота каждого ряда в сетке", +"gridRowCount": "Счетчик строк сетки", +"gridRowCountDesc": "Максимальное количество строк в сетке", +"gridPaddingX": "Горизонтальная прокладка", +"gridPaddingXDesc": "Горизонтальная подложка холста", +"gridPaddingY": "Вертикальные прокладки", +"gridPaddingYDesc": "Вертикальная подложка холста", +"gridBgImage": "Фоновое изображение", +"gridBgImageDesc": "Фоновое изображение на холсте", +"gridBgImageRepeat": "Повтор фонового изображения", +"gridBgImageRepeatDesc": "Повторение фонового изображения на холсте", +"gridBgImageSize": "Размер фонового изображения", +"gridBgImageSizeDesc": "Размер фонового изображения на холсте", +"gridBgImagePosition": "Положение фонового изображения", +"gridBgImagePositionDesc": "Положение фонового изображения на холсте", +"gridBgImageOrigin": "Происхождение фонового изображения", +"gridBgImageOriginDesc": "Происхождение фонового изображения на холсте", +}, +"pluginSetting": { + ...en.pluginSetting, + +"title": "Плагины", +"npmPluginTitle": "плагины npm", +"npmPluginDesc": "Установите плагины npm для всех приложений в текущем рабочем пространстве.", +"npmPluginEmpty": "Плагины npm не были добавлены.", +"npmPluginAddButton": "Добавьте плагин npm", +"saveSuccess": "Сохранено успешно", +}, +"advanced": { + ...en.advanced, + +"title": "Расширенный", +"defaultHomeTitle": "Домашняя страница по умолчанию", +"defaultHomeHelp": "Домашняя страница - это приложение, которое все пользователи, не являющиеся разработчиками, будут видеть по умолчанию при входе в систему. Примечание: Убедитесь, что выбранное приложение доступно для пользователей, не являющихся разработчиками.", +"defaultHomePlaceholder": "Выберите домашнюю страницу по умолчанию", +"saveBtn": "Сохранить", +"preloadJSTitle": "Предварительная загрузка JavaScript", +"preloadJSHelp": "Установите предварительно загруженный код JavaScript для всех приложений в текущей рабочей области.", +"preloadCSSTitle": "Предварительная загрузка CSS", +"preloadCSSHelp": "Установите предварительно загруженный код CSS для всех приложений в текущей рабочей области.", +"preloadCSSApply": "Применить к домашней странице рабочей области", +"preloadLibsTitle": "Библиотека JavaScript", +"preloadLibsHelp": "Установите предварительно загруженные библиотеки JavaScript для всех приложений в текущем рабочем пространстве, и система имеет встроенные lodash, day.js, uuid, numbro для прямого использования. Библиотеки JavaScript загружаются до инициализации приложения, поэтому это оказывает определенное влияние на производительность приложения.", +"preloadLibsEmpty": "Библиотеки JavaScript не были добавлены", +"preloadLibsAddBtn": "Добавить библиотеку", +"saveSuccess": "Сохранено успешно", +"AuthOrgTitle": "Экран приветствия рабочей области", +"AuthOrgDescrition": "URL-адрес для входа ваших пользователей в текущее рабочее пространство.", +"APIConsumption": "Потребление API", +"APIConsumptionDescription": "Здесь вы можете увидеть потребление API для всех приложений в текущем рабочем пространстве.", +"overallAPIConsumption": "Общее потребление API в этой рабочей области до настоящего времени", +"lastMonthAPIConsumption": "Потребление API за последний месяц в данной рабочей области", +"npmRegistryTitle": "Пользовательский реестр NPM", +"npmRegistryHelp": "Настройте пользовательский реестр NPM, чтобы обеспечить получение плагинов из частного реестра NPM.", +"showHeaderInPublicApps": "Показать заголовок в публичном представлении", +"showHeaderInPublicAppsHelp": "Настройка видимости заголовка в публичном представлении для всех приложений", +}, +"branding": { + ...en.branding, + +"title": "Настройки брендинга", +"general": "Общие настройки", +"selectWorkspace": "Выберите рабочую область", +"brandingName": "Название бренда", +"brandingNamePlaceholder": "Введите название бренда", +"brandingDescription": "Описание брендинга", +"brandingDescriptionPlaceholder": "Введите описание брендинга", +"logoSection": "Логотипы", +"logo": "Логотип", +"logoHelp": "Загрузите логотип вашей компании в формате SVG или PNG.", +"logoUrlHelp": "Укажите правильный url изображения для логотипа.", +"logoUrlPlaceholder": "url изображения поставщика для логотипа", +"squareLogo": "Квадратный логотип", +"squareLogoHelp": "Загрузите квадратную версию вашего логотипа в формате SVG или PNG.", +"squareLogoUrlHelp": "Предоставьте правильный url изображения для логотипа Square.", +"squareLogoUrlPlaceholder": "Предоставьте url для логотипа Square.", +"colorFontSection": "Цвета и шрифты", +"mainBrandingColor": "Основной цвет брендинга", +"mainBrandingColorHelp": "Выберите основной цвет для своего брендинга.", +"editorHeaderColor": "Цвет заголовка приложения", +"editorHeaderColorHelp": "Выберите цвет для заголовка приложения.", +"adminSidebarColor": "Цвет боковой панели администратора", +"adminSidebarColorHelp": "Выберите цвет для боковой панели администратора.", +"adminSidebarFontColor": "Цвет шрифта боковой панели администратора", +"adminSidebarFontColorHelp": "Выберите цвет шрифта для боковой панели администратора.", +"adminSidebarActiveBgColor": "Цвет фона выбранного элемента боковой панели администратора", +"adminSidebarActiveBgColorHelp": "Выберите цвет фона выбранного элемента для боковой панели администратора.", +"adminSidebarActiveFontColor": "Цвет шрифта выбранного элемента боковой панели администратора", +"adminSidebarActiveFontColorHelp": "Выберите цвет шрифта выбранного элемента для боковой панели администратора.", +"editorSidebarColor": "Цвет боковой панели редактора", +"editorSidebarColorHelp": "Выберите цвет для боковой панели редактора.", +"editorSidebarFontColor": "Цвет шрифта боковой панели редактора", +"editorSidebarFontColorHelp": "Выберите цвет шрифта для боковой панели редактора.", +"editorSidebarActiveBgColor": "Цвет фона выбранного элемента боковой панели редактора", +"editorSidebarActiveBgColorHelp": "Выберите цвет фона выбранного элемента для боковой панели редактора.", +"editorSidebarActiveFontColor": "Цвет шрифта выбранного элемента боковой панели редактора", +"editorSidebarActiveFontColorHelp": "Выберите цвет шрифта выбранного элемента для боковой панели редактора.", +"font": "Шрифт", +"fontHelp": "Выберите шрифт из Google Fonts для своего приложения.", +"textSection": "Тексты и страницы", +"errorPage": "Текст страницы ошибки", +"errorPageHelp": "Введите текст, отображаемый на странице ошибки.", +"signUpPage": "Текст страницы регистрации", +"signUpPageHelp": "Введите текст, отображаемый на странице регистрации.", +"loggedOutPage": "Текст страницы, с которой вы вошли в систему", +"loggedOutPageHelp": "Введите текст, отображаемый на странице выхода из системы.", +"standardDescription": "Стандартное описание", +"standardDescriptionHelp": "Введите стандартное описание для метаинформации SEO.", +"standardTitle": "Стандартное название", +"standardTitleHelp": "Введите стандартный заголовок для метаинформации SEO.", +"showDocumentation": "Показать документацию", +"submitIssue": "Разрешить выдачу", +"whatsNew": "Включить Что нового", +"saveButton": "Сохранить настройки", +"errorPageImage": "Загрузите изображение для страницы ошибок в формате SVG или PNG.", +"errorPageImageUrl": "URL-адрес изображения для страницы ошибки", +"errorPageImageUrlPlaceholder": "url изображения провайдера для страницы ошибок", +"errorPageImageUrlHelp": "Предоставьте правильный url изображения для отображения на странице ошибки.", +"signUpPageImage": "Загрузите изображение для страницы регистрации в формате SVG или PNG.", +"signUpPageImageUrl": "URL-адрес изображения для страницы регистрации", +"signUpPageImageUrlPlaceholder": "url изображения поставщика для страницы регистрации", +"signUpPageImageUrlHelp": "Предоставьте правильный url изображения для отображения на странице регистрации.", +"loggedOutPageImage": "Загрузите изображение для страницы входа в систему в формате SVG или PNG.", +"showDocumentationSection": "Настройки ссылок на документацию", +"showWhatsNewSection": "Что нового Настройки ссылок", +"documentationLink": "Документация по ссылке", +"documentationLinkPlaceholder": "Введите URL-адрес вашей документации...", +"documentationLinkHelp": "Укажите действительный URL-адрес, который пользователи могут посетить для получения документации.", +"whatsNewSection": "Настройки документации", +"whatsNewLink": "Что нового Ссылка", +"whatsNewLinkPlaceholder": "Введите URL-адрес вашей документации...", +"whatsNewLinkHelp": "Укажите действительный URL-адрес, по которому пользователи смогут найти ваши новости.", +"deleteBranding": "Удалить брендинг", +"deleteBrandingContent": "Вы уверены, что хотите удалить бренд \"{orgName}\"?", +"fetchBrandingError": "Что-то пошло не так при получении данных о брендинге. Пожалуйста, попробуйте еще раз.", +"upload": "Загрузить", +}, +"networkMessage": { + ...en.networkMessage, + +"0": "Не удалось подключиться к серверу, проверьте сеть", +"200": "Успех", +"201": "Создано", +"204": "Нет содержания", +"400": "Плохая просьба", +"401": "Аутентификация не прошла, пожалуйста, войдите снова", +"403": "Нет разрешения, обратитесь к администратору для получения разрешения", +"404": "Не найдено", +"500": "Служба занята, повторите попытку позже", +"timeout": "Таймаут запроса", +}, +"share": { + ...en.share, + +"title": "Поделиться", +"viewer": "Просмотрщик", +"editor": "Редактор", +"owner": "Владелец", +"datasourceViewer": "Можно использовать", +"datasourceOwner": "Может управлять", +}, +"debug": { + ...en.debug, + +"title": "Название", +"switch": "Компонент переключателя:", +}, +"module": { + ...en.module, + +"folderNotEmpty": "Папка не пуста", +"emptyText": "Нет данных", +"docLink": "Подробнее о модулях...", +"documentationText": "Модули - это полноценные приложения, которые могут быть включены и повторены в других приложениях и функционировать так же, как и отдельный компонент. Поскольку модули могут быть встроены, они должны иметь возможность взаимодействовать с внешними приложениями или веб-сайтами. Эти четыре параметра помогают поддерживать взаимодействие с модулем.", +"circularReference": "Круговая ссылка, текущий модуль/приложение не может быть использован!", +"emptyTestInput": "Текущий модуль не имеет входа для тестирования", +"emptyTestMethod": "Текущий модуль не имеет метода тестирования", +"name": "Имя", +"input": "Вход", +"params": "Params", +"emptyParams": "Никакие параметры не были добавлены", +"emptyInput": "Ввод не был добавлен", +"emptyMethod": "Метод не был добавлен", +"emptyOutput": "Выходные данные не были добавлены", +"data": "Данные", +"string": "Строка", +"number": "Номер", +"array": "Массив", +"boolean": "Булево", +"query": "Запрос", +"autoScaleCompHeight": "Весы для измерения высоты компонентов с контейнером", +"excuteMethod": "Выполнить метод {name}", +"method": "Метод", +"action": "Действие", +"output": "Выход", +"nameExists": "Имя {name} Уже существует", +"eventTriggered": "Срабатывает событие {name}", +"globalPromptWhenEventTriggered": "Отображение глобальной подсказки при срабатывании события", +"emptyEventTest": "Текущий модуль не имеет событий для тестирования", +"emptyEvent": "Событие не было добавлено", +"event": "Событие", +}, +"resultPanel": { + ...en.resultPanel, + +"returnFunction": "Возвращаемое значение - это функция.", +"consume": "{time}", +"JSON": "Показать JSON", +}, +"createAppButton": { + ...en.createAppButton, + +"creating": "Создание...", +"created": "Создайте {name}", +}, +"apiMessage": { + ...en.apiMessage, + +"authenticationFail": "Аутентификация пользователя не прошла, пожалуйста, войдите снова", +"verifyAccount": "Необходимо подтвердить учетную запись", +"functionNotSupported": "Текущая версия не поддерживает эту функцию. Пожалуйста, свяжитесь с командой Lowcoder Business Team, чтобы обновить ваш аккаунт", +}, +"globalErrorMessage": { + ...en.globalErrorMessage, + +"createCompFail": "Создать компонент {comp} Не удалось", +"notHandledError": "{method} Метод не выполнен", +}, +"aggregation": { + ...en.aggregation, + +"navLayout": "Панель навигации", +"chooseApp": "Выберите приложение", +"iconTooltip": "Поддержка ссылки на src изображения или строки Base64, например data:image/png", +"hideWhenNoPermission": "Скрыт для неавторизованных пользователей", +"queryParam": "Параметры запроса URL", +"hashParam": "Параметры хэша URL", +"tabBar": "Панель вкладок", +"emptyTabTooltip": "Настройте эту страницу на правой панели", +}, +"appSetting": { + ...en.appSetting, + +"450": "450px (Телефон)", +"800": "800px (планшет)", +"1440": "1440px (ноутбук)", +"1920": "1920px (широкий экран)", +"3200": "3200px (сверхбольшой экран)", +"title": "Общие настройки приложения", +"autofill": "Автозаполнение", +"userDefined": "Пользовательское", +"default": "По умолчанию", +"tooltip": "Закройте всплывающее окно после установки", +"canvasMaxWidth": "Максимальная ширина холста для этого приложения", +"userDefinedMaxWidth": "Пользовательская максимальная ширина", +"inputUserDefinedPxValue": "Введите пользовательское значение пикселя", +"maxWidthTip": "Максимальная ширина должна быть больше или равна 350", +"themeSetting": "Прикладной стиль Тема", +"themeSettingDefault": "По умолчанию", +"themeCreate": "Создать тему", +"appTitle": "Название", +"appDescription": "Описание", +"appCategory": "Категория", +"showPublicHeader": "Показать заголовок в открытом виде", +"canvas": "Настройки холста", +"gridColumns": "Колонки сетки", +"gridRowHeight": "Высота строки сетки", +"gridRowCount": "Счетчик строк сетки", +"gridPaddingX": "Горизонтальная подложка холста", +"gridPaddingY": "Вертикальная подкладка для холста", +"gridBgImage": "Фоновое изображение", +"gridBgImageRepeat": "Повтор фонового изображения", +"gridBgImageSize": "Размер фонового изображения", +"gridBgImagePosition": "Положение фонового изображения", +"gridBgImageOrigin": "Происхождение фонового изображения", +}, +"customShortcut": { + ...en.customShortcut, + +"title": "Пользовательские ярлыки", +"shortcut": "Ярлык", +"action": "Действие", +"empty": "Никаких недомолвок", +"placeholder": "Нажмите клавишу быстрого доступа", +"otherPlatform": "Другие", +"space": "Космос", +}, +"profile": { + ...en.profile, + +"orgSettings": "Настройки рабочей области", +"switchOrg": "Переключение рабочего пространства", +"joinedOrg": "Мои рабочие места", +"createOrg": "Создать рабочее пространство", +"logout": "Выйти из системы", +"personalInfo": "Мой профиль", +"bindingSuccess": "Привязка {sourceName} Успех", +"uploadError": "Ошибка загрузки", +"editProfilePicture": "Изменить", +"saveUserNameTooltip": "Нажмите Enter, чтобы сохранить новое имя пользователя. Если вы видите свой Email, это означает, что мы просто захватили его в качестве имени пользователя, и вы можете изменить его на более подходящий. Ваш Email в качестве технического имени пользователя останется нетронутым.", +"changeAvatarTooltip": "Вы можете загружать файлы PNG или JPG", +"nameCheck": "Имя не может быть пустым", +"name": "Имя:", +"namePlaceholder": "Пожалуйста, введите ваше имя", +"toBind": "Связать", +"binding": "Обязательно", +"bindError": "Ошибка параметра, в настоящее время не поддерживается Привязка.", +"bindName": "Связать {name}", +"loginAfterBind": "После привязки вы можете использовать {name} для входа в систему", +"bindEmail": "Привязать электронную почту:", +"email": "Электронная почта", +"emailCheck": "Пожалуйста, введите действительный адрес электронной почты", +"emailPlaceholder": "Пожалуйста, введите ваш e-mail", +"submit": "Отправить", +"bindEmailSuccess": "Успех переплетения электронных писем", +"passwordModifiedSuccess": "Пароль успешно изменен", +"passwordSetSuccess": "Пароль установлен успешно", +"oldPassword": "Старый пароль:", +"inputCurrentPassword": "Пожалуйста, введите ваш текущий пароль", +"newPassword": "Новый пароль:", +"inputNewPassword": "Пожалуйста, введите новый пароль", +"confirmNewPassword": "Подтвердите новый пароль:", +"inputNewPasswordAgain": "Пожалуйста, введите новый пароль еще раз", +"password": "Пароль:", +"modifyPassword": "Изменить пароль", +"setPassword": "Установить пароль", +"alreadySetPassword": "Установка пароля", +"setPassPlaceholder": "Вы можете войти в систему с помощью пароля", +"setPassAfterBind": "Вы можете установить пароль после привязки учетной записи", +"socialConnections": "Социальные связи", +"changeAvatar": "Изменить аватар", +"about": "О сайте", +"userId": "Идентификатор пользователя", +"createdAt": "Создано в", +"currentOrg": "Действующая организация", +"settings": "Настройки", +"uiLanguage": "Язык пользовательского интерфейса", +"info": "Информация", +"createdApps": "Созданные вами приложения", +"createdModules": "Созданные вами модули", +"sharedApps": "Приложения, которыми вы поделились с друзьями", +"sharedModules": "Модули, переданные вам", +"onMarketplace": "На рынке", +"howToPublish": "Как опубликовать на Marketplace", +"memberOfOrgs": "Членство в клубе Workspaces", +"apiKeys": "Ключи API", +"createApiKey": "Создайте ключ API", +"apiKeyInfo": "Обязательно скопируйте свой новый API-ключ. Вы больше не сможете его увидеть.", +"apiKeyName": "Имя", +"apiKeyDescription": "Описание", +"apiKeyCopy": "Нажмите на Api Key, чтобы получить значение в буфере обмена", +"apiKey": "Ключ API", +"deleteApiKey": "Удалить ключ API", +"deleteApiKeyContent": "Вы уверены, что хотите удалить этот ключ API?", +"deleteApiKeyError": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.", +}, +"shortcut": { + ...en.shortcut, + +"shortcutList": "Ярлыки клавиатуры", +"click": "Нажмите", +"global": "Глобальная", +"toggleShortcutList": "Переключение сочетаний клавиш", +"editor": "Редактор", +"toggleLeftPanel": "Переключение левой панели", +"toggleBottomPanel": "Переключение нижней панели", +"toggleRightPanel": "Переключение правой панели", +"toggleAllPanels": "Переключить все панели", +"preview": "Предварительный просмотр", +"undo": "Отменить", +"redo": "Redo", +"showGrid": "Показать сетку", +"component": "Компонент", +"multiSelect": "Выберите несколько", +"selectAll": "Выбрать все", +"copy": "Копировать", +"cut": "Разрез", +"paste": "Паста", +"move": "Переместить", +"zoom": "Изменить размер", +"delete": "Удалить", +"deSelect": "Отменить выбор", +"queryEditor": "Редактор запросов", +"excuteQuery": "Выполнить текущий запрос", +"editBox": "Текстовый редактор", +"formatting": "Формат", +"openInLeftPanel": "Открыть в левой панели", +}, +"help": { + ...en.help, + +"videoText": "Обзор", +"onBtnText": "OK", +"permissionDenyTitle": "💡 Не удается создать новое приложение или источник данных?", +"permissionDenyContent": "У вас нет прав на создание приложения и источника данных. Обратитесь к администратору, чтобы присоединиться к группе разработчиков.", +"appName": "Учебное приложение", +"chat": "Пообщайтесь с нами", +"docs": "Посмотреть документацию", +"editorTutorial": "Учебный редактор", +"update": "Что нового?", +"version": "Версия", +"versionWithColon": "Версия:", +"submitIssue": "Подать заявку на выпуск", +}, +"header": { + ...en.header, + +"nameCheckMessage": "Имя не может быть пустым", +"viewOnly": "Только просмотр", +"recoverAppSnapshotTitle": "Восстановить эту версию?", +"recoverAppSnapshotContent": "Восстановите текущее приложение до версии, созданной в {time}.", +"recoverAppSnapshotMessage": "Восстановить эту версию", +"returnEdit": "Вернуться к редактору", +"deploy": "Опубликовать", +"export": "Экспорт в JSON", +"editName": "Редактировать имя", +"duplicate": "Дубликат {type}", +"snapshot": "История", +"scriptsAndStyles": "Сценарии и стиль", +"appSettings": "Настройки приложения", +"preview": "Предварительный просмотр", +"editError": "Режим предварительного просмотра истории, операция не поддерживается.", +"clone": "Клон", +"editorMode_layout": "Макет", +"editorMode_logic": "Логика", +"editorMode_both": "Оба", +"editorMode_layout_tooltip": "Настройте внешний вид и расположение компонента в правом окне. Настройте его внешний вид, стили и анимацию.", +"editorMode_logic_tooltip": "Настройте работу и взаимодействие вашего компонента в нужном окне. Управляйте его содержимым и интерактивным поведением.", +"AppEditingBlocked": "Редактирование приложений заблокировано для:", +"AppEditingBlockedHint": "Изменения не будут сохранены, пока другой пользователь редактирует это приложение.", +"AppEditingBlockedMessage": "Пожалуйста, подождите, прежде чем проверять статус редактирования приложения.", +"AppEditingBlockedCheckStatus": "Проверка состояния приложения", +"AppEditingBlockedSomeone": "Кто-то", +"AppEditingBlockedMessageSnipped": "редактирует это приложение", +}, +"userAuth": { + ...en.userAuth, + +"registerByEmail": "Зарегистрироваться", +"email": "Электронная почта:", +"inputEmail": "Пожалуйста, введите свой адрес электронной почты", +"inputValidEmail": "Пожалуйста, введите действительный адрес электронной почты", +"forgotPassword": "Забыли пароль", +"forgotPasswordInfo": "Введите свой e-mail, и мы вышлем вам ссылку для сброса пароля.", +"forgotPasswordSuccess": "Пожалуйста, проверьте свою электронную почту, чтобы получить ссылку на сброс пароля.", +"forgotPasswordError": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.", +"register": "Зарегистрироваться", +"userLogin": "Войти", +"login": "Войти", +"bind": "Переплет", +"passwordCheckLength": "Не менее {min} символов", +"passwordCheckContainsNumberAndLetter": "Должны содержать буквы и цифры", +"passwordCheckSpace": "Не может содержать пробельные символы", +"welcomeTitle": "Добро пожаловать в {productName}", +"inviteWelcomeTitle": "___ЗНАКОМЕЦ0___ приглашает вас к совместной работе", +"terms": "Условия", +"privacy": "Политика конфиденциальности", +"registerHint": "Я прочитал и согласен с", +"chooseAccount": "Выберите свой аккаунт", +"signInLabel": "Войти с помощью {name}", +"bindAccount": "Привязать аккаунт", +"scanQrCode": "Отсканируйте QR-код с помощью {name}.", +"invalidThirdPartyParam": "Недействительный параметр третьей стороны", +"account": "Счет", +"inputAccount": "Пожалуйста, введите ваш счет", +"ldapLogin": "Вход в систему LDAP", +"resetPassword": "Сброс пароля", +"resetPasswordDesc": "Сбросьте пароль пользователя {name}. После сброса будет сгенерирован новый пароль.", +"resetSuccess": "Сброс прошел успешно", +"resetSuccessDesc": "Сброс пароля прошел успешно. Новый пароль: {password}", +"resetLostPasswordSuccess": "Сброс пароля прошел успешно. Пожалуйста, войдите снова.", +"copyPassword": "Копирование пароля", +"poweredByLowcoder": "Работает от: Lowcoder.cloud", +"continue": "Продолжить", +"enterPassword": "Введите пароль", +"selectAuthProvider": "Выберите поставщика аутентификации", +"selectWorkspace": "Выберите рабочее пространство", +"userNotFound": "Пользователь не найден. Убедитесь, что вы ввели правильный адрес электронной почты.", +}, +"preLoad": { + ...en.preLoad, + +"jsLibraryHelpText": "Добавление библиотек JavaScript в текущее приложение через URL-адреса. lodash, day.js, uuid, numbro встроены в систему для немедленного использования. Библиотеки JavaScript загружаются до инициализации приложения, что может повлиять на его производительность.", +"exportedAs": "Экспортировано как", +"urlTooltip": "URL-адрес библиотеки JavaScript, рекомендуется [unpkg.com](https://unpkg.com/) или [jsdelivr.net](https://www.jsdelivr.com/)", +"externalLibsHelperText": "Поддерживаются только библиотеки, использующие подход UMD (Universal Module Definition). Подробнее здесь: https://github.com/umdjs/umd", +"recommended": "Рекомендуем", +"viewJSLibraryDocument": "Документ", +"jsLibraryURLError": "Недопустимый URL", +"jsLibraryExist": "Библиотека JavaScript уже существует", +"jsLibraryEmptyContent": "Библиотеки JavaScript не добавлены", +"jsLibraryDownloadError": "Ошибка загрузки библиотеки JavaScript", +"jsLibraryInstallSuccess": "Библиотека JavaScript успешно установлена", +"jsLibraryInstallFailed": "Не удалось установить библиотеку JavaScript", +"jsLibraryInstallFailedCloud": "Возможно, библиотека недоступна в песочнице, [Документация](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", +"jsLibraryInstallFailedHost": "{message}", +"add": "Добавить новый", +"jsHelpText": "Добавьте глобальный метод или переменную в текущее приложение.", +"cssHelpText": "Добавьте стили в текущее приложение. Структура DOM может меняться по мере итерации системы. Попытайтесь изменить стили через свойства компонента.", +"scriptsAndStyles": "Сценарии и стили", +"jsLibrary": "Библиотека JavaScript", +}, +"editorTutorials": { + ...en.editorTutorials, + +"component": "Компонент", +"componentContent": "Правая панель компонентов предлагает вам множество готовых блоков приложений (компонентов). Их можно перетаскивать на холст для использования. Вы также можете создавать собственные компоненты, обладая небольшими знаниями в области кодирования.", +"canvas": "Холст", +"canvasContent": "Создавайте свои приложения на холсте по принципу \"что видишь, то и получаешь\". Просто перетаскивайте компоненты для создания макета и используйте сочетания клавиш для быстрого редактирования, например, удаления, копирования и вставки. Выбрав компонент, вы можете точно настроить каждую деталь - от стиля и макета до привязки данных и логического поведения. Кроме того, вы можете воспользоваться дополнительными преимуществами отзывчивого дизайна, благодаря которому ваши приложения будут отлично смотреться на любом устройстве.", +"queryData": "Данные запроса", +"queryDataContent": "Здесь вы можете создавать запросы данных и подключаться к MySQL, MongoDB, Redis, Airtable и многим другим источникам данных. После настройки запроса нажмите кнопку \"Выполнить\", чтобы получить данные и продолжить обучение.", +"compProperties": "Свойства компонентов", +"interactiveDemo": "Интерактивная демонстрация", +"interactiveDemoToolTip": "Нажмите, чтобы начать интерактивную демонстрацию этой функции", +}, +"supademos": { + ...en.supademos, + +"transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", +"dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", +"temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", +"dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", +"restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", +"jsQuery": "", +"streamApiQuery": "", +"mongodbQuery": "", +"libraryQuery": "", +"googleSheets": "", +"graphqlQuery": "", +"snowflakeQuery": "", +}, +"homeTutorials": { + ...en.homeTutorials, + +"createAppContent": "Добро пожаловать! Нажмите \"App\" и начните создавать свое первое приложение.", +"createAppTitle": "Создать приложение", +}, +"npmRegistry": { + ...en.npmRegistry, + +"npmRegistryEnable": "Включите пользовательский реестр NPM", +"npmRegistryUrl": "Урл реестра NPM", +"npmRegistryUrlRequired": "Введите URL-адрес реестра", +"npmRegistryUrlInvalid": "Пожалуйста, введите действительный URL-адрес", +"npmRegistryScope": "Объем пакета", +"npmRegistryPattern": "Узор", +"npmRegistryPatternInvalid": "Пожалуйста, введите правильный шаблон (начиная с @ для организаций).", +"npmRegistryAuth": "Аутентификация", +"npmRegistryAuthType": "Тип аутентификации", +"npmRegistryAuthCredentials": "Учетные данные для аутентификации", +"npmRegistryAuthCredentialsRequired": "Введите учетные данные реестра", +"npmRegistryAuthCredentialsHelp": "Для базового аутентификатора укажите имя пользователя и пароль в формате base64(username:password), для токен-аута - токен.", +}, +"history": { + ...en.history, + +"layout": "Настройка макета '{0}'", +"upgrade": "Обновление '{0}'", +"delete": "Удалить '{0}'", +"add": "Добавьте '{0}'", +"modify": "Изменить '{0}'", +"rename": "Переименуйте '{1}' в '{0}'.", +"recover": "Восстановить версию '{2}'", +"recoverVersion": "Восстановить версию", +"andSoOn": "и так далее", +"timeFormat": "ММ ДД в чч:мм A", +"emptyHistory": "Нет истории", +"currentVersionWithBracket": " (Текущий)", +"currentVersion": "Текущая версия", +"justNow": "Только что", +"history": "История", +}, +"home": { + ...en.home, + +"profile": "Ваш профиль", +"news": "Новости", +"newsLoading": "Он будет загружаться несколько секунд.", +"orgHome": "Домашняя страница (Org)", +"yourOrg": "Ваша организация", +"orgHomeTitle": "Домашняя страница организации", +"appMarketplace": "Рынок приложений", +"allApplications": "Ваши приложения", +"allModules": "Ваши модули", +"allFolders": "Ваши папки", +"yourFolders": "Ваши папки", +"modules": "Модули", +"module": "Модуль", +"api": "Lowcoder API", +"trash": "Мусор", +"marketplace": "Рынок", +"allCategories": "Все категории", +"queryLibrary": "Запросы данных", +"datasource": "Источники данных", +"selectDatasourceType": "Выберите тип источника данных", +"home": "Главная", +"all": "Все", +"app": "Приложение", +"navigation": "Навигация", +"navLayout": "Навигация на ПК", +"navLayoutDesc": "Левостороннее меню для удобной навигации по рабочему столу.", +"mobileTabLayout": "Мобильная навигация", +"mobileTabLayoutDesc": "Нижняя навигационная панель для плавного просмотра страниц на мобильных устройствах.", +"folders": "Папки", +"folder": "Папка", +"rootFolder": "Корень", +"import": "Импорт", +"export": "Экспорт в JSON", +"show": "Показать", +"inviteUser": "Пригласить участников", +"createFolder": "Создать папку", +"createFolderSubTitle": "Имя папки:", +"moveToFolder": "Переместить в папку", +"moveToTrash": "Переместить в мусор", +"moveToFolderSubTitle": "Переместите \"{name}\" в:", +"folderName": "Имя папки:", +"resCardSubTitle": "{time} от {creator}", +"trashEmpty": "Корзина пуста.", +"projectEmpty": "Здесь ничего нет.", +"projectEmptyCanAdd": "У вас еще нет приложений. Нажмите \"Новое\", чтобы начать.", +"name": "Имя", +"type": "Тип", +"creator": "Создано", +"lastModified": "Последнее изменение", +"deleteTime": "Время удаления", +"createTime": "Создать время", +"datasourceName": "Имя источника данных", +"databaseName": "Имя базы данных", +"nameCheckMessage": "Имя не может быть пустым", +"deleteElementTitle": "Удалить навсегда", +"moveToTrashSubTitle": "{type} {name} будет перемещен в мусор.", +"deleteElementSubTitle": "Удалите {type} {name} навсегда, его невозможно восстановить.", +"deleteSuccessMsg": "Удалено успешно", +"deleteErrorMsg": "Удаленная ошибка", +"recoverSuccessMsg": "Восстановлено успешно", +"newDatasource": "Новый источник данных", +"creating": "Создание...", +"chooseDataSourceType": "Выберите тип источника данных", +"folderAlreadyExists": "Папка уже существует", +"newNavLayout": "{userName}'s {name}", +"newApp": "Новый {userName} от {name}", +"importError": "Ошибка импорта, {message}", +"exportError": "Ошибка экспорта, {message}", +"importSuccess": "Успех импорта", +"fileUploadError": "Ошибка загрузки файла", +"fileFormatError": "Ошибка формата файла", +"groupWithSquareBrackets": "[Группа]", +"allPermissions": "Владелец", +"appSharingDialogueTitle": "Совместное использование приложений и разрешения", +"appSocialSharing": "Поделитесь своим приложением и опытом на:", +"appSocialSharingMessage": "Я сделал это приложение с помощью Lowcoder, посмотрите!", +"socialShare": "Поделиться на", +"shareLink": "Поделиться ссылкой:", +"copyLink": "Копировать ссылку", +"appPublicMessage": "Сделайте приложение общедоступным. Любой желающий сможет посмотреть.", +"modulePublicMessage": "Сделайте модуль общедоступным. Любой желающий сможет просмотреть его.", +"marketplaceURL": "https://api-service.lowcoder.cloud", +"appMarketplaceMessage": "Опубликуйте свое приложение на публичной торговой площадке. Любой желающий сможет просмотреть и скопировать его оттуда.", +"moduleMarketplaceMessage": "Опубликуйте свой модуль на Публичной торговой площадке. Любой желающий может просмотреть и скопировать его оттуда.", +"marketplaceGoodPublishing": "Убедитесь, что ваше приложение имеет хорошее название и простое в использовании. Перед публикацией удалите всю конфиденциальную информацию. Также удалите локальные источники данных и замените их статическими встроенными временными данными.", +"noMarketplaceApps": "Пока нет приложений на рынке", +"errorMarketplaceApps": "Ошибка при загрузке приложений Marketplace", +"localMarketplaceTitle": "Местный рынок", +"globalMarketplaceTitle": "Общественный рынок", +"memberPermissionList": "Разрешения членов:", +"orgName": "{orgName} admins", +"addMember": "Добавить участников", +"addPermissionPlaceholder": "Пожалуйста, введите имя для поиска участников", +"searchMemberOrGroup": "Поиск участников или групп:", +"addPermissionErrorMessage": "Не удалось добавить разрешение, {message}", +"copyModalTitle": "Клонировать \"{name}\"", +"copyNameLabel": "Имя {type}", +"copyModalfolderLabel": "Добавить в папку", +"copyNamePlaceholder": "Пожалуйста, укажите имя {type}", +"chooseNavType": "Пожалуйста, выберите тип навигации", +"createNavigation": "Создать навигацию", +"howToUseAPI": "Как использовать открытый Rest API", +"support": "Поддержка", +}, +"support": { + ...en.support, + +"selfUser": "Вы", +"supportTitle": "Поддержка Lowcoder", +"supportContent": "Если у вас возникли вопросы или вам нужна помощь, воспользуйтесь системой тикетов, чтобы быстро решить вашу проблему.", +"newSupportTicket": "Новый тикет поддержки", +"ticketTitle": "Название", +"priority": "Приоритет", +"assignee": "Назначение", +"status": "Статус билета", +"updatedTime": "Обновленное время", +"active": "Активный", +"inactive": "Неактивный", +"noEmail": "Нет электронной почты", +"details": "Подробности", +"reloadTickets": "Билеты на перезагрузку", +"createdDate": "Дата создания", +"updatedDate": "Дата обновления", +"description": "Описание выпуска", +"subtasks": "Подзадачи", +"subtasksProgress": "Выполнение всех подзадач", +"attachments": "Приложения к изданию", +"comments": "Комментарии", +"addComment": "Добавить комментарий", +"addAttachment": "Добавить вложение", +"edit": "Редактировать описание билета", +"save": "Сохранить билет Описание", +"cancel": "Отмена", +"submitComment": "Отправить комментарий", +"upload": "Отправить вложение", +"selectFile": "Выберите файл", +"ticketDescriptionUpdated": "Описание билета успешно обновлено!", +"ticketDescriptionUpdateFailed": "Не удалось обновить описание билета.", +"writeComment": "Написать комментарий...", +"ticketCommentAdded": "Комментарий успешно добавлен!", +"ticketCommentFailed": "Не удалось добавить комментарий.", +"ticketCommentEmpty": "Пожалуйста, напишите комментарий перед отправкой.", +"ticketAttachmentUploaded": "Вложение успешно загружено!", +"ticketAttachmentFailed": "Не удалось загрузить вложение.", +"ticketAttachmentEmpty": "Пожалуйста, выберите файл для загрузки.", +"ticketFetchError": "Не удалось загрузить билет.", +"ticketNotFound": "Билет не найден.", +"addAttachmentFileSize": "Файл должен быть меньше 5 МБ!", +"goBack": "Вернуться", +"noDescription": "Описание отсутствует.", +"createTicket": "Создайте новый тикет поддержки", +"createTicketTitlePlaceholder": "Введите название (не более 150 символов)", +"createTicketDescriptionTitle": "Опишите свою проблему - чем больше деталей, тем лучше:", +"createTicketDescriptionPlaceholder": "Подробно опишите проблему, включая: 1) шаги по воспроизведению проблемы, 2) ожидаемое поведение по сравнению с фактическим, 3) фрагменты кода, если применимо, 4) любые конкретные компоненты, API или конфигурации, затронутые проблемой.", +"createTicketSubmit": "Отправить билет", +"createTicketInfoText": "Когда билет создан, вы можете добавить скриншоты и комментарии в разделе \"Подробности\".", +}, +"carousel": { + ...en.carousel, + +"dotPosition": "Положение навигационных точек", +"autoPlay": "Автоигра", +"showDots": "Показать навигационные точки", +}, +"npm": { + ...en.npm, + +"invalidNpmPackageName": "Неверное имя пакета npm или URL.", +"pluginExisted": "Этот плагин npm уже существовал", +"compNotFound": "Компонент {compName} не найден.", +"addPluginModalTitle": "Добавление плагина из репозитория npm", +"pluginNameLabel": "URL или имя пакета npm", +"noCompText": "Компоненты отсутствуют.", +"compsLoading": "Загрузка...", +"removePluginBtnText": "Удалить", +"addPluginBtnText": "Добавьте плагин npm", +}, +"toggleButton": { + ...en.toggleButton, + +"valueDesc": "Значение по умолчанию для кнопки переключения, например: False", +"trueDefaultText": "Скрыть", +"falseDefaultText": "Показать", +"trueLabel": "Текст для True", +"falseLabel": "Текст для Ложь", +"trueIconLabel": "Значок \"Истина", +"falseIconLabel": "Значок \"Ложь", +"iconPosition": "Положение значка", +"showText": "Показать текст", +"alignment": "Выравнивание", +"showBorder": "Показать границу", +}, +"componentDoc": { + ...en.componentDoc, + +"markdownDemoText": "**Lowcoder** | Создавайте программные приложения для вашей компании и ваших клиентов с минимальным опытом кодирования. Lowcoder - это лучшая альтернатива Retool, Appsmith или Tooljet.", +"demoText": "Lowcoder | Создавайте программные приложения для вашей компании и ваших клиентов с минимальным опытом кодирования. Lowcoder - это лучшая альтернатива Retool, Appsmith или Tooljet.", +"submit": "Отправить", +"style": "Стиль", +"danger": "Опасность", +"warning": "Внимание", +"success": "Успех", +"menu": "Меню", +"link": "Ссылка на", +"customAppearance": "Пользовательский внешний вид", +"search": "Поиск", +"pleaseInputNumber": "Пожалуйста, введите номер", +"mostValue": "Наибольшая ценность", +"maxRating": "Максимальная оценка", +"notSelect": "Не выбрано", +"halfSelect": "Половина выбора", +"pleaseSelect": "Пожалуйста, выберите", +"title": "Название", +"content": "Содержание", +"componentNotFound": "Компонент не существует", +"example": "Примеры", +"defaultMethodDesc": "Установите значение свойства {name}", +"propertyUsage": "Вы можете читать информацию, связанную с компонентом, обращаясь к свойствам компонента по имени компонента везде, где можно написать JavaScript.", +"property": "Свойства", +"propertyName": "Название недвижимости", +"propertyType": "Тип", +"propertyDesc": "Описание", +"event": "События", +"eventName": "Название события", +"eventDesc": "Описание", +"mehtod": "Методы", +"methodUsage": "Вы можете взаимодействовать с компонентами с помощью соответствующих методов, доступ к которым можно получить по их именам в любом сегменте, где используется JavaScript. Кроме того, эти компоненты можно активировать с помощью действия 'Control Component', которое запускается в ответ на определенные события", +"methodName": "Название метода", +"methodDesc": "Описание", +"showBorder": "Показать границу", +"haveTry": "Попробуйте сами", +"settings": "Настройка", +"settingValues": "Значение настройки", +"defaultValue": "Значение по умолчанию", +"time": "Время", +"date": "Дата", +"noValue": "Нет", +"xAxisType": "Тип оси X", +"hAlignType": "Горизонтальное выравнивание", +"leftLeftAlign": "Выравнивание по левому краю", +"leftRightAlign": "Выравнивание влево-вправо", +"topLeftAlign": "Выравнивание по левому краю", +"topRightAlign": "Выравнивание вправо-вверх", +"validation": "Валидация", +"required": "Требуется", +"defaultStartDateValue": "Дата начала по умолчанию", +"defaultEndDateValue": "Дата окончания по умолчанию", +"basicUsage": "Базовое использование", +"basicDemoDescription": "В следующих примерах показано базовое использование компонента.", +"noDefaultValue": "Нет Значение по умолчанию", +"forbid": "Запрещенный", +"placeholder": "Место для размещения", +"pleaseInputPassword": "Пожалуйста, введите пароль", +"password": "Пароль", +"textAlign": "Выравнивание текста", +"length": "Длина", +"top": "Топ", +"pleaseInputName": "Пожалуйста, введите ваше имя", +"userName": "Имя", +"fixed": "Исправлено", +"responsive": "Отзывчивый", +"workCount": "Количество слов", +"cascaderOptions": "Опции каскадера", +"pleaseSelectCity": "Пожалуйста, выберите город", +"advanced": "Расширенный", +"showClearIcon": "Показать значок очистки", +"appleOptionLabel": "Apple", +"waterMelonOptionLabel": "Арбуз", +"berryOptionLabel": "Клубника", +"lemonOptionLabel": "Лимон", +"coconutOptionLabel": "Кокосовый орех", +"likedFruits": "Избранное", +"option": "Вариант", +"singleFileUpload": "Загрузка одного файла", +"multiFileUpload": "Многократная загрузка файлов", +"folderUpload": "Загрузка папок", +"multiFile": "Несколько файлов", +"folder": "Папка", +"open": "Открыть", +"favoriteFruits": "Любимые фрукты", +"pleaseSelectOneFruit": "Выберите фрукт", +"notComplete": "Не завершено", +"complete": "Полный", +"echart": "EChart", +"lineChart": "Линейная диаграмма", +"basicLineChart": "Основная линейная диаграмма", +"lineChartType": "Тип линейной диаграммы", +"stackLineChart": "Сложенная линия", +"areaLineChart": "Зональная линия", +"scatterChart": "Диаграмма рассеяния", +"scatterShape": "Форма россыпи", +"scatterShapeCircle": "Круг", +"scatterShapeRect": "Прямоугольник", +"scatterShapeTri": "Треугольник", +"scatterShapeDiamond": "Алмаз", +"scatterShapePin": "Pushpin", +"scatterShapeArrow": "Стрела", +"pieChart": "Круговая диаграмма", +"basicPieChart": "Основные круговые диаграммы", +"pieChatType": "Тип круговой диаграммы", +"pieChartTypeCircle": "Диаграмма пончиков", +"pieChartTypeRose": "Розовая диаграмма", +"titleAlign": "Название Должность", +"color": "Цвет", +"dashed": "Пунктир", +"imADivider": "Я - разделительная полоса", +"tableSize": "Размер стола", +"subMenuItem": "Подменю {num}", +"menuItem": "Меню {num}", +"labelText": "Этикетка", +"labelPosition": "Ярлык - Положение", +"labelAlign": "Этикетка - Выровнять", +"optionsOptionType": "Метод конфигурации", +"styleBackgroundColor": "Цвет фона", +"styleBorderColor": "Цвет границы", +"styleColor": "Цвет шрифта", +"selectionMode": "Режим выбора строк", +"paginationSetting": "Настройка пагинации", +"paginationShowSizeChanger": "Поддержка пользователей для изменения количества записей на странице", +"paginationShowSizeChangerButton": "Показать кнопку изменения размера", +"paginationShowQuickJumper": "Показать Быстрый джемпер", +"paginationHideOnSinglePage": "Скрыть, когда есть только одна страница", +"paginationPageSizeOptions": "Размер страницы", +"chartConfigCompType": "Тип диаграммы", +"xConfigType": "Тип оси X", +"loading": "Загрузка", +"disabled": "Инвалид", +"minLength": "Минимальная длина", +"maxLength": "Максимальная длина", +"showCount": "Показать количество слов", +"autoHeight": "Высота", +"thousandsSeparator": "Тысячи сепараторов", +"precision": "Десятичные знаки", +"value": "Значение по умолчанию", +"formatter": "Формат", +"min": "Минимальное значение", +"max": "Максимальное значение", +"step": "Размер шага", +"start": "Время начала", +"end": "Конец времени", +"allowHalf": "Разрешить выбор половины", +"filetype": "Тип файла", +"showUploadList": "Показать список загрузок", +"uploadType": "Тип загрузки", +"allowClear": "Показать значок очистки", +"minSize": "Минимальный размер файла", +"maxSize": "Максимальный размер файла", +"maxFiles": "Максимальное количество загружаемых файлов", +"format": "Формат", +"minDate": "Минимальная дата", +"maxDate": "Максимальная дата", +"minTime": "Минимальное время", +"maxTime": "Максимальное время", +"text": "Текст", +"type": "Тип", +"hideHeader": "Скрыть заголовок", +"hideBordered": "Скрыть границу", +"src": "URL-адрес изображения", +"showInfo": "Значение дисплея", +"mode": "Режим", +"onlyMenu": "Только меню", +"horizontalAlignment": "Горизонтальное выравнивание", +"row": "Слева", +"column": "Топ", +"leftAlign": "Выравнивание по левому краю", +"rightAlign": "Правильное выравнивание", +"percent": "Процент", +"fixedHeight": "Фиксированная высота", +"auto": "Адаптивный", +"directory": "Папка", +"multiple": "Несколько файлов", +"singleFile": "Один файл", +"manual": "Руководство", +"default": "По умолчанию", +"small": "Маленький", +"middle": "Средний", +"large": "Большой", +"single": "Одиночка", +"multi": "Множество", +"close": "Закрыть", +"ui": "Режим пользовательского интерфейса", +"line": "Линейная диаграмма", +"scatter": "Диаграмма рассеяния", +"pie": "Круговая диаграмма", +"basicLine": "Основная линейная диаграмма", +"stackedLine": "Линейная диаграмма со стеками", +"areaLine": "Карта района", +"basicPie": "Основные круговые диаграммы", +"doughnutPie": "Диаграмма пончиков", +"rosePie": "Розовая диаграмма", +"category": "Категория Ось", +"circle": "Круг", +"rect": "Прямоугольник", +"triangle": "Треугольник", +"diamond": "Алмаз", +"pin": "Pushpin", +"arrow": "Стрела", +"left": "Слева", +"right": "Справа", +"center": "Центр", +"bottom": "Дно", +"justify": "Оправдать оба конца", +}, +"playground": { + ...en.playground, + +"url": "https://app.lowcoder.cloud/playground/{compType}/1", +"data": "Текущее состояние данных", +"preview": "Предварительный просмотр", +"property": "Свойства", +"console": "Консоль визуальных сценариев", +"executeMethods": "Методы выполнения", +"noMethods": "Нет методов.", +"methodParams": "Параметры метода", +"methodParamsHelp": "Параметры метода ввода с помощью JSON. Например, вы можете задать параметры setValue с помощью: [1] или 1", +}, +"calendar": { + ...en.calendar, + +"headerBtnBackground": "Фон для кнопок", +"btnText": "Текст кнопки", +"title": "Название", +"selectBackground": "Избранная биография", +}, +"idSource": { + ...en.idSource, + +"title": "Поставщик аутентификации пользователей", +"form": "Электронная почта", +"pay": "Премиум", +"enable": "Включить", +"unEnable": "Не включено", +"loginType": "Тип входа в систему", +"status": "Статус", +"desc": "Описание", +"manual": "Адресная книга:", +"syncManual": "Синхронизация адресной книги", +"syncManualSuccess": "Синхронизация прошла успешно", +"enableRegister": "Разрешить регистрацию", +"saveBtn": "Сохранить и включить", +"save": "Сохранить", +"none": "Нет", +"formPlaceholder": "Пожалуйста, введите {label}", +"formSelectPlaceholder": "Пожалуйста, выберите {label}", +"saveSuccess": "Сохранено успешно", +"dangerLabel": "Опасная зона", +"dangerTip": "Отключение или удаление этого идентификатора может привести к тому, что некоторые пользователи не смогут войти в систему. Действуйте с осторожностью.", +"lastEnabledConfig": "Вы не можете отключить/удалить конфигурацию, так как это единственная включенная конфигурация.", +"disable": "Отключить", +"disableSuccess": "Успешно отключено", +"encryptedServer": "-------- Зашифровано на стороне сервера --------", +"disableTip": "Советы", +"disableContent": "{action} В результате использования этого идентификатора некоторые пользователи не смогут войти в систему. Вы уверены, что можете продолжать?", +"manualTip": "", +"lockTip": "Содержание заблокировано. Чтобы внести изменения, нажмите на {icon}, чтобы разблокировать.", +"lockModalContent": "Изменение поля 'ID Attribute' может оказать существенное влияние на идентификацию пользователей. Прежде чем приступить к работе, убедитесь, что вы понимаете последствия этого изменения.", +"payUserTag": "Премиум", +"source": "Источник", +"sourceName": "Имя провайдера авторизации", +"sourceDescription": "Описание поставщика авторизации", +"sourceIcon": "Значок провайдера аутентификации", +"sourceCategory": "Категория поставщика прав доступа", +"souceIssuerURI": "URI эмитента провайдера аутентификации", +"souceAuthorizationEndpoint": "Конечная точка авторизации Auth Provider", +"souceTokenEndpoint": "Конечная точка токена поставщика аутентификации", +"souceUserInfoEndpoint": "Конечная точка информации о пользователе", +"userInfoIntrospection": "Использование интроспекции пользователей OpenID", +"userCanSelectAccounts": "Пользователь может выбирать из учетных записей", +"sourceCategoryEnterprise": "Идентификация предприятия", +"sourceCategoryCloud": "Облачные сервисы", +"sourceCategorySocial": "Социальные сети", +"sourceCategoryDevelopment": "Разработка", +"sourceCategoryTools": "Инструменты и продуктивность", +}, +"slotControl": { + ...en.slotControl, + +"configSlotView": "Настроить вид слота", +}, +"jsonLottie": { + ...en.jsonLottie, + +"lottieJson": "Lottie JSON", +"searchAnimation": "Поиск Анимация", +"speed": "Скорость", +"width": "Ширина", +"height": "Высота", +"backgroundColor": "Цвет фона", +"animationStart": "Начало анимации", +"valueDesc": "Текущие данные в формате JSON", +"loop": "Петля", +"auto": "Автомобиль", +"onHover": "При наведении", +"onTrigger": "При срабатывании", +"singlePlay": "Одиночная игра", +"endlessLoop": "Бесконечная петля", +"keepLastFrame": "Сохранять отображение последнего кадра", +"fit": "Fit", +"align": "Выровнять", +"load": "Нагрузка", +"play": "В игре", +"pause": "На паузе", +"stop": "На остановке", +"complete": "В комплекте", +}, +"timeLine": { + ...en.timeLine, + +"titleColor": "Цвет названия", +"subTitleColor": "Цвет субтитров", +"labelColor": "Цвет этикетки", +"value": "Временные данные", +"mode": "Заказ дисплея", +"left": "Право на содержание", +"right": "Содержание Слева", +"alternate": "Альтернативный порядок содержания", +"modeTooltip": "Настройте отображение содержимого слева/справа или поочередно на обеих сторонах временной шкалы", +"reverse": "Самые новые события первыми", +"pending": "Текст ожидающего узла", +"pendingDescription": "При установке отображается последний узел с текстом и индикатором ожидания.", +"defaultPending": "Непрерывное совершенствование", +"clickTitleEvent": "Нажмите кнопку Название события", +"clickTitleEventDesc": "Нажмите кнопку Название события", +"Introduction": "Вводные ключи", +"helpTitle": "Название временной шкалы (обязательно)", +"helpsubTitle": "Подзаголовок временной шкалы", +"helpLabel": "Метка временной шкалы, используемая для отображения дат", +"helpColor": "Указывает цвет узла временной шкалы", +"helpDot": "Отображение узлов временной шкалы в виде значков Ant Design", +"helpTitleColor": "Индивидуальное управление цветом заголовка узла", +"helpSubTitleColor": "Индивидуальное управление цветом субтитров узла", +"helpLabelColor": "Индивидуальный контроль цвета значка узла", +"valueDesc": "Данные временной шкалы", +"clickedObjectDesc": "Данные о нажатом элементе", +"clickedIndexDesc": "Указатель нажатых элементов", +}, +"comment": { + ...en.comment, + +"value": "Как составить список данных", +"showSendButton": "Разрешение комментариев", +"title": "Название", +"titledDefaultValue": "%d Комментарий всего", +"placeholder": "Shift + Enter для комментария", +"placeholderDec": "Место для размещения", +"buttonTextDec": "Название кнопки", +"buttonText": "Как", +"mentionList": "Данные списка упоминаний", +"mentionListDec": "Ключевые слова", +"userInfo": "Информация о пользователе", +"dateErr": "Ошибка даты", +"commentList": "Как составить список", +"deletedItem": "Удаленный элемент", +"submitedItem": "Представленный предмет", +"deleteAble": "Показать кнопку удаления", +"Introduction": "Ключи для введения", +"helpUser": "Информация о пользователе (Обязательно)", +"helpname": "Имя пользователя (Обязательно)", +"helpavatar": "URL-адрес аватара (высокий приоритет)", +"helpdisplayName": "Отображаемое имя (низкий приоритет)", +"helpvalue": "Как содержание", +"helpcreatedAt": "Дата создания", +}, +"mention": { + ...en.mention, + +"mentionList": "Данные списка упоминаний", +}, +"autoComplete": { + ...en.autoComplete, + +"value": "Auto Complete Value", +"checkedValueFrom": "Проверенное значение От", +"ignoreCase": "Поиск игнорировать дело", +"searchLabelOnly": "Поиск только по ярлыку", +"searchFirstPY": "Поиск первого пиньина", +"searchCompletePY": "Поиск Полный пиньинь", +"searchText": "Текст для поиска", +"SectionDataName": "Автозаполнение данных", +"valueInItems": "Стоимость в предметах", +"type": "Тип", +"antDesign": "AntDesign", +"normal": "Нормальный", +"selectKey": "Ключ", +"selectLable": "Этикетка", +"ComponentType": "Тип компонента", +"colorIcon": "Голубой", +"grewIcon": "Серый", +"noneIcon": "Нет", +"small": "Маленький", +"large": "Большой", +"componentSize": "Размер компонента", +"Introduction": "Вводные ключи", +"helpLabel": "Этикетка", +"helpValue": "Значение", +}, +"responsiveLayout": { + ...en.responsiveLayout, + +"column": "Колонны", +"addColumn": "Добавить колонку", +"columnDefinition": "Определение столбца", +"rowDefinition": "Определение строки", +"columnGap": "Зазор между колоннами", +"rowGap": "Разрыв в ряду", +"atLeastOneColumnError": "Отзывчивый макет сохраняет хотя бы одну колонку", +"columnsPerRow": "Столбцы на строку", +"columnsSpacing": "Расстояние между столбцами (px)", +"horizontal": "Горизонтальный", +"vertical": "Вертикальный", +"mobile": "Мобильный", +"tablet": "Планшет", +"desktop": "Настольный компьютер", +"rowStyle": "Стиль ряда", +"columnStyle": "Стиль колонны", +"minWidth": "Мин. Ширина", +"rowBreak": "Перерыв между рядами", +"useComponentWidth": "Использование собственного размера", +"useComponentWidthDesc": "Используйте ширину контейнера вместо ширины приложения", +"matchColumnsHeight": "Соответствие высоты столбцов", +"rowLayout": "Расположение рядов", +"columnsLayout": "Макет колонок", +"columnsDefinitionTooltip": "Колонки можно определять произвольно, основываясь на свойствах CSS columns. Например, 'auto auto' создаст две колонки с одинаковой шириной. Подробнее здесь: https://css-tricks.com/almanac/properties/g/grid-template-columns", +"rowsDefinitionTooltip": "Строки могут быть определены произвольно на основе свойств CSS rows. Например, 'auto auto' создаст две строки с одинаковой высотой. Подробнее здесь: https://css-tricks.com/almanac/properties/g/grid-template-rows", +}, +"splitLayout": { + ...en.splitLayout, + +"column": "Просмотр областей", +"addColumn": "Добавить области", +"columnDefinition": "Определение области", +"atLeastOneColumnError": "Отзывчивый макет сохраняет хотя бы одну колонку", +"horizontal": "Горизонтальный", +"vertical": "Вертикальный", +"areaStyle": "Стиль колонны", +"minWidth": "Мин. Ширина", +"maxWidth": "Макс. Ширина", +"width": "Ширина", +"collapsible": "Область является разборной?", +"matchColumnsHeight": "Соответствие площадей Высота", +"orientation": "Ориентация сплит-макета", +"orientationTooltip": "Визуальный порядок, в котором выстраиваются области. Для создания сложных макетов можно вставлять компоненты Splitlayout внутрь компонентов Splitlayout.", +}, +"navLayout": { + ...en.navLayout, + +"mode": "Режим", +"modeInline": "Inline", +"modeVertical": "Вертикальный", +"modeHorizontal": "Горизонтальный", +"width": "Ширина", +"widthTooltip": "Пиксель или процент, например, 520, 60%", +"navStyle": "Меню стиля", +"navItemStyle": "Стиль пункта меню", +"navBackground": "Фоновое изображение", +"mobileNavVerticalOrientation": "Вертикальная ориентация", +"mobileNavVerticalMaxWidth": "Максимальная ширина", +"mobileNavBarHeight": "Высота панели навигации", +"mobileNavVerticalShowSeparator": "Показать разделитель", +"mobileNavIconSize": "Размер значка", +}, +"timeZone": { + ...en.timeZone, + +"UTC-12:00": "(UTC-12:00) Международная линия перемены даты W", +"UTC-11:00": "(UTC-11:00) UTC-11", +"UTC-10:00": "(UTC-10:00) Гавайи", +"UTC-09:00": "(UTC-09:00) Аляска", +"UTC-08:00": "(UTC-08:00) Баха Калифорния", +"UTC-07:00": "(UTC-07:00) Тихоокеанское время (США)", +"UTC-06:00": "(UTC-06:00) Центральное время (США)", +"UTC-05:00": "(UTC-05:00) Восточное время (США)", +"UTC-04:00": "(UTC-04:00) Атлантическое время", +"UTC-03:00": "(UTC-03:00) Буэнос-Айрес", +"UTC-02:00": "(UTC-02:00) UTC-02", +"UTC-01:00": "(UTC-01:00) Кабо-Верде", +"UTC+00:00": "(UTC 00:00) UTC", +"UTC+01:00": "(UTC+01:00) Берлин, Рим", +"UTC+02:00": "(UTC+02:00) Афины, Бухарест", +"UTC+03:00": "(UTC+03:00) Москва", +"UTC+04:00": "(UTC+04:00) Дубай, Маскат", +"UTC+05:00": "(UTC+05:00) Карачи", +"UTC+05:30": "(UTC+05:30) Нью-Дели", +"UTC+05:45": "(UTC+05:45) Катманду", +"UTC+06:00": "(UTC+06:00) Дакка", +"UTC+06:30": "(UTC+06:30) Янгон", +"UTC+07:00": "(UTC+07:00) Бангкок", +"UTC+08:00": "(UTC+08:00) Пекин, Гонконг", +"UTC+09:00": "(UTC+09:00) Токио, Сеул", +"UTC+09:30": "(UTC+09:30) Аделаида, Дарвин", +"UTC+10:00": "(UTC+10:00) Сидней", +"UTC+11:00": "(UTC+11:00) Соломоновы острова, Новая Каледония", +"UTC+12:00": "(UTC+12:00) Окленд, Фиджи", +"UTC+13:00": "(UTC+13:00) Нукуалофа, Самоа", +"UserChoice": "Выбор пользователя", +}, +"tour": { + ...en.tour, + +"section1Title": "Шаги", +"section1Subtitle": "Шаги", +"tooltipExampleHeader": "Пример:", +"tooltipSignatureHeader": "Подпись:", +"options": { + ...en.tour.options, + +"title": { + ...en.tour.options.title, + +"label": "Название", +"placeholder": "Добро пожаловать", +"tooltip": "Название шага. Здесь можно использовать любой HTML.", +}, +"description": { + ...en.tour.options.description, + +"label": "Описание", +"placeholder": "Добро пожаловать на Lowcoder!", +"tooltip": "Описание шага. Здесь может использоваться любой HTML.", +}, +"mask": { + ...en.tour.options.mask, + +"label": "Маска", +"tooltip": "Включать ли маскирование, изменять ли стиль маски и цвет заливки, передавая пользовательский реквизит, по умолчанию используется свойство `mask` в Tour.", +"tooltipValidTypes": "Допустимые типы ввода: `true`, `false`, empty, или JSON-объект, соответствующий схеме CSSProperties из Antd.", +}, +"arrow": { + ...en.tour.options.arrow, + +"label": "Стрела", +"tooltip": "Включает и выключает стрелку или перемещает ее в центр компонента, если это необходимо, в противном случае стрелка всегда будет указывать на верхнюю часть компонента.", +"tooltipFunctionSignature": "булево | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.options.type, + +"label": "Тип", +"tooltip": "Тип всплывающей подсказки, который влияет на цвет фона и цвет текста. Цветами можно управлять в разделе стилизации основного тура.", +}, +"target": { + ...en.tour.options.target, + +"label": "Компонент", +"tooltip": "Компонент, на который вы хотите поместить всплывающую подсказку, или оставьте его пустым, если вы просто хотите, чтобы модальное окно находилось в центре экрана.", +}, +"coverImage": { + ...en.tour.options.coverImage, + +"label": "URI изображения обложки", +"tooltip": "URI для изображения, которое вы хотите отобразить вместе с шагом", +}, +}, +"indicatorsRender": { + ...en.tour.indicatorsRender, + +"label": "Рендер индикаторов", +"tooltip": "Предоставляет пользовательский индикатор того, на каком этапе вы находитесь", +"tooltipValidTypes": "Format - это функция, которая принимает два аргумента, `current` и `total`, и возвращает ReactNode", +"tooltipFunctionSignatureHeader": "Подпись:", +"tooltipFunctionSignature": "(текущий: число, общий: число) => ReactNode", +"tooltipExampleHeader": "Пример:", +}, +"disabledInteraction": { + ...en.tour.disabledInteraction, + +"label": "Отключить взаимодействие", +"tooltip": "Отключите взаимодействие в выделенной области.", +}, +"mask": { + ...en.tour.mask, + +"label": "Маска", +"tooltip": "Включать ли маскирование, изменять ли стиль маски и цвет заливки при передаче пользовательского реквизита, по умолчанию используется свойство `mask` в Tour. Может быть переопределено на уровне шага.", +"tooltipValidTypes": "Допустимые типы ввода: `true`, `false`, empty, или JSON-объект, соответствующий схеме CSSProperties из Antd.", +}, +"placement": { + ...en.tour.placement, + +"label": "Размещение", +"tooltip": "Положение направляющей карты относительно целевого элемента. Может быть переопределено на уровне шага.", +"tooltipValidOptions": "Валидные опции", +"tooltipValidOptionsAbove": "Над компонентом:", +"tooltipValidOptionsLeft": "Слева от компонента:", +"tooltipValidOptionsRight": "Справа от компонента:", +"tooltipValidOptionsBelow": "Ниже компонента:", +"tooltipValidOptionsOnTop": "На верхней части компонента:", +}, +"arrow": { + ...en.tour.arrow, + +"label": "Стрела", +"tooltip": "Включает и выключает стрелку или перемещает ее, чтобы она указывала на центр компонента, если это необходимо, в противном случае стрелка всегда будет указывать на верх компонента. Может быть переопределено на уровне шага.", +"tooltipFunctionSignature": "булево | { pointAtCenter: boolean }", +}, +"type": { + ...en.tour.type, + +"label": "Тип", +"tooltip": "Тип всплывающей подсказки, который влияет на цвет фона и цвет текста. Цветами можно управлять в разделе стилизации основного тура. Их можно переопределить на уровне шагов.", +}, +}, +"docUrls": { + ...en.docUrls, + +"docHome": "https://docs.lowcoder.cloud/", +"apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", +"components": "https://app.lowcoder.cloud/components/{compType}", +"module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", +"optionList": "", +"terms": "https://lowcoder.cloud/terms", +"privacy": "https://lowcoder.cloud/privacy", +"aboutUs": "https://lowcoder.cloud/about", +"changeLog": "https://github.com/lowcoder-org/lowcoder/releases", +"introVideo": "", +"devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", +"devNpmPluginText": "Как разработать npm-плагин", +"useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", +"eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", +"thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", +"thirdLibUrlText": "Используйте библиотеки сторонних разработчиков", +}, +"datasourceTutorial": { + ...en.datasourceTutorial, + +"mysql": "", +"mongodb": "", +"postgres": "", +"redis": "", +"es": "", +"smtp": "", +"clickHouse": "", +}, +"queryTutorial": { + ...en.queryTutorial, + +"js": "", +"transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", +"tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", +"dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", +}, +"customComponent": { + ...en.customComponent, + +"entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", +}, +"template": { + ...en.template, + +"cloneUrl": "/apps/template-import/", +}, +"lowcoderUrl": { + ...en.lowcoderUrl, + +"createIssue": "https://github.com/lowcoder-org/lowcoder/issues", +"discord": "https://discord.com/invite/qMG9uTmAx2", +}, +"iconScout": { + ...en.iconScout, + +"searchImage": "Поиск изображений", +"searchAnimation": "Поиск Анимация", +"searchIcon": "Значок поиска", +"noResults": "Результаты не найдены.", +"buySubscriptionTitle": "Разблокируйте премиальные активы", +"buySubscriptionContent": "Этот актив эксклюзивен для подписчиков Медиа Пакета. Подпишитесь на Media Package и скачивайте высококачественные активы без ограничений!", +"buySubscriptionButton": "Подписаться сейчас", +}, + +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/i18n/locales/zh.ts b/client/packages/lowcoder/src/i18n/locales/zh.ts index 5a0ea8d0f9..797ed9354f 100644 --- a/client/packages/lowcoder/src/i18n/locales/zh.ts +++ b/client/packages/lowcoder/src/i18n/locales/zh.ts @@ -1,549 +1,622 @@ // import table from "./componentDocExtra/table.md?url"; import { en } from "./en"; -export const zh: typeof en = { +export const zh = { ...en, - productName: "Lowcoder", - productDesc: "快速构建内部工具,无任何限制", - notSupportedBrowser: "您当前使用的浏览器可能存在兼容性问题.为了获得更好的用户体验,建议使用最新版本的Chrome浏览器", - create: "创建", - move: "移动", - addItem: "添加", - newItem: "新建", - copy: "复制", - rename: "重命名", - delete: "删除", - deletePermanently: "删除", - remove: "移除", - recover: "恢复", - edit: "编辑", - view: "查看", - value: "值", - data: "数据", - information: "信息", - success: "成功", - warning: "警告", - error: "错误", - reference: "参考", - text: "文本", - basic:"基础", - label: "标题", - layout:"布局", - color: "颜色", - form: "表单", - menu: "菜单", - menuItem: "菜单项", - ok: "确定", - cancel: "取消", - finish: "完成", - reset: "重置", - icon: "图标", - code: "代码", - title: "标题", - emptyContent: "空内容", - more: "更多", - search: "搜索", - back: "返回", - accessControl: "访问控制", - copySuccess: "已复制", - copyError: "复制错误", - api: { - ...en.api, - publishSuccess: "已发布", - recoverFailed: "恢复失败", - needUpdate: "您当前的版本过旧,请升级至最新版本." - }, - codeEditor: { - ...en.codeEditor, - notSupportAutoFormat: "当前的代码编辑器不支持自动格式化", - fold: "折叠" - }, - exportMethod: { - ...en.exportMethod, - setDesc: "设置属性:{property}", - clearDesc: "清除属性:{property}", - resetDesc: "重置属性:{property} 为默认值" - }, - method: { - ...en.method, - focus: "设置焦点", - focusOptions: "焦点选项,参考HTMLElement.focus()方法", - blur: "移除焦点", - click: "点击", - select: "选择所有文本", - setSelectionRange: "设置当前文本选择的起始和结束位置", - selectionStart: "从头选择字符.", - selectionEnd: "从倒数选择字符.", - setRangeText: "替换一段文本", - replacement: "要插入的字符串.", - replaceStart: "从头开始替换字符.", - replaceEnd: "从倒数开始替换字符." - }, - errorBoundary: { - ...en.errorBoundary, - encounterError: "加载组件失败,请检查您的配置.", - clickToReload: "点击重新加载", - errorMsg: "错误:", - }, - imgUpload: { - ...en.imgUpload, - notSupportError: "仅支持上传 {types} 类型的图像", - exceedSizeError: "图像大小不应超过 {size}" - }, - gridCompOperator: { - ...en.gridCompOperator, - notSupport: "不支持", - selectAtLeastOneComponent: "请至少选择一个组件", - selectCompFirst: "请在复制之前选择组件", - noContainerSelected: "[错误] 未选择容器", - deleteCompsSuccess: "删除成功,您可以使用 {undoKey} 撤销操作.", - deleteCompsTitle: "删除组件", - deleteCompsBody: "确定要删除所选的 {compNum} 个组件吗?", - cutCompsSuccess: "剪切成功!您可以使用 {pasteKey} 进行粘贴,或使用 {undoKey} 撤销操作." - }, - - leftPanel: { - ...en.leftPanel, - queries: "查询", - globals: "全局变量", - propTipsArr: "{num} 项", - propTips: "{num} 个键", - propTipArr: "{num} 项", - propTip: "{num} 个键", - stateTab: "状态", - settingsTab: "设置", - toolbarTitle: "其他", - toolbarPreload: "脚本和样式", - components: "组件", - modals: "对话框", - expandTip: "点击展开 {component} 的数据", - collapseTip: "点击折叠 {component} 的数据", - layers: "图层", - activatelayers: "激活图层", - selectedComponents: "已选组件", - }, - bottomPanel: { - ...en.bottomPanel, - title: "查询", - run: "运行", - noSelectedQuery: "未选择查询", - metaData: "元数据", - noMetadata: "无元数据", - metaSearchPlaceholder: "搜索元数据", - allData: "所有表" - }, - rightPanel: { - ...en.rightPanel, - propertyTab: "属性", - noSelectedComps: "未选择组件,点击以选择一个.", - createTab: "插入", - searchPlaceHolder: "搜索组件或模块", - uiComponentTab: "组件", - extensionTab: "扩展", - modulesTab: "模块", - moduleListTitle: "模块", - pluginListTitle: "插件", - emptyModules: "模块是可复用的组件和查询的组合.", - searchNotFound: "找不到合适的组件?提交一个新的想法", - emptyPlugins: "未添加插件.", - contactUs: "联系我们", - issueHere: "这里." - }, - prop: { - ...en.prop, - expand: "展开", - columns: "列", - rowSelection: "行选择", - toolbar: "工具栏", - pagination: "分页", - logo: "标志", - style: "样式", - inputs: "输入", - meta: "元数据", - hide: "隐藏", - loading: "加载中", - disabled: "禁用", - placeholder: "占位符", - showClear: "显示清除按钮", - showSearch: "可搜索", - defaultValue: "默认值", - required: "必填字段", - readOnly: "只读", - readOnlyTooltip: "只读组件外观与普通组件相同,可以获得焦点和选择,但不能修改", - minimum: "最小值", - maximum: "最大值", - regex: "正则表达式", - minLength: "最小长度", - maxLength: "最大长度", - height: "高度", - width: "宽度", - selectApp: "应用程序", - showCount: "显示计数", - textType: "文本类型", - customRule: "自定义规则", - customRuleTooltip: "如果结果是非空字符串,则为错误消息.如果为空或null,则验证通过.\n示例:", - manual: "手动", - map: "映射", - json: "JSON", - use12Hours: "使用12小时制", - hourStep: "小时步长", - minuteStep: "分钟步长", - secondStep: "秒步长", - minDate: "最小日期", - maxDate: "最大日期", - minTime: "最小时间", - maxTime: "最大时间", - type: "类型", - showLabel: "显示标签", - showHeader: "显示标题", - showBody: "显示表体", - showFooter: "显示表尾", - "showSider": "显示 Sider", - "innerSider" : "内部 Sider", - maskClosable: "点击蒙层关闭", - showMask: "显示蒙层", - scrollbar: "滚动条", - "textOverflow": "文本溢出", - "siderScrollbar" : "在 Sider 中显示滚动条", - "siderRight" : "右侧显示屏", - "siderWidth" : "凫水宽度", - "siderWidthTooltip" : "网格宽度支持百分比(%)和像素(px)。", - "siderCollapsedWidth" : "折叠宽度", - "siderCollapsedWidthTooltip" : "折叠宽度支持百分比(%)和像素(px)。", - "siderCollapsible" : "Sider 折叠式", - "siderCollapsed" : "Sider 崩溃", - "contentScrollbar" : "在内容中显示滚动条", - "appID": "应用程序 ID", - "showApp": "在内容区域显示应用程序", - "showAppTooltip": "您可以在内容区域显示整个 Lowcoder 应用程序。请注意,对于模块,我们不支持输入、输出事件和方法。", - "baseURL": "Lowcoder API 基本 URL", - "horizontal": "水平", - "minHorizontalWidth": "最小水平宽度", - "horizontalGridCells": "垂直网格单元", - "verticalGridCells": "Vertical Grid Cells", - "showHorizontalScrollbar": "显示水平滚动条", - "showVerticalScrollbar": "显示垂直滚动条", - }, - - autoHeightProp: { - ...en.autoHeightProp, - auto: "自动", - fixed: "固定", - }, - labelProp: { - ...en.labelProp, - text: "标题", - tooltip: "提示", - position: "位置", - left: "左", - top: "上", - align: "对齐", - width: "宽度", - widthTooltip: - "组件标题的宽度,支持百分比(%)和像素(px)为单位.", - }, - "textOverflowProp": { - ...en.textOverflowProp, - "ellipsis": "鼠标悬停", - "wrap": "包装" - }, - - eventHandler: { - ...en.eventHandler, - eventHandlers: "事件处理器", - emptyEventHandlers: "无事件处理器", - incomplete: "选择不完整", - inlineEventTitle: "在 {eventName} 时", - event: "事件", - action: "操作", - noSelect: "无选择", - runQuery: "运行查询", - selectQuery: "选择查询", - controlComp: "控制组件", - runScript: "运行JavaScript代码", - runScriptPlaceHolder: "在此处编写代码", - component: "组件", - method: "方法", - setTempState: "设置临时状态", - state: "状态", - triggerModuleEvent: "触发模块事件", - moduleEvent: "模块事件", - goToApp: "跳转到指定应用", - queryParams: "查询参数", - hashParams: "哈希参数", - showNotification: "显示通知", - text: "文本", - level: "级别", - duration: "持续时间", - notifyDurationTooltip: "时间单位可以是秒(默认为s)或毫秒(ms),最大持续时间为{max}秒", - goToURL: "跳转到URL链接", - openInNewTab: "在新标签页中打开", - copyToClipboard: "复制到剪贴板", - copyToClipboardValue: "值", - export: "导出数据", - exportNoFileType: "未选择(可选)", - fileName: "文件名", - fileNameTooltip: "支持使用扩展名指定文件类型,例如image.png.", - fileType: "文件类型", - condition: "满足条件时运行", - conditionTooltip: "只有当此条件评估为“true”时才运行事件处理器", - debounce: "防抖", - throttle: "节流", - slowdownTooltip: "使用防抖或节流控制操作触发的频率,时间单位可以是毫秒(默认为ms)或秒(s).", - notHandledError: "未处理", - currentApp: "当前应用程序", - }, - event: { - ...en.event, - submit: "提交", - submitDesc: "在提交时触发", - change: "更改", - changeDesc: "在值更改时触发", - focus: "聚焦", - focusDesc: "在聚焦时触发", - blur: "失焦", - blurDesc: "在失焦时触发", - click: "点击", - clickDesc: "在点击时触发", - "doubleClick": "双击", - "doubleClickDesc": "在双击时触发", - "rightClick": "右键点击", - "rightClickDesc": "在右键点击时触发", - "keyDown": "按键", - "keyDownDesc": "在按键时触发", - "select": "选择", - "selectDesc": "在选择时触发", - "checked": "已检查", - "checkedDesc": "在复选框被选中时触发", - "unchecked": "未检查", - "uncheckedDesc": "在复选框未选中时触发", - "drag": "拖拽", - "dragDesc": "在拖拽时触发", - "drop": "放置", - "dropDesc": "在放置时触发", - "open": "打开", - "openDesc": "在打开时触发", - "mute": "静音", - "muteDesc": "在静音时触发", - "unmute": "取消静音", - "unmuteDesc": "在取消静音时触发", - "showCamera": "显示摄像头", - "showCameraDesc": "在显示摄像头时触发", - "hideCamera": "隐藏摄像头", - "hideCameraDesc": "在隐藏摄像头时触发", - "shareScreen": "共享屏幕", - "shareScreenDesc": "在共享屏幕时触发", - "shareScreenEnd": "共享屏幕结束", - "shareScreenEndDesc": "在共享屏幕结束时触发", - "shareControl": "共享控制", - "shareControlDesc": "在共享控制时触发", - "shareControlEnd": "共享控制结束", - "shareControlEndDesc": "在共享控制结束时触发", - "shareContent": "共享内容", - "shareContentDesc": "在共享内容时触发", - "shareContentEnd": "共享内容结束", - "shareContentEndDesc": "在共享内容结束时触发", - "stopShare": "停止共享", - "stopShareDesc": "在停止共享时触发", - "play": "播放", - "playDesc": "在播放时触发", - "pause": "暂停", - "pauseDesc": "在暂停时触发", - "ended": "结束", - "endedDesc": "在结束时触发", - "step": "步骤", - "stepDesc": "在步骤时触发", - "next": "下一步", - "nextDesc": "在下一步时触发", - "finished": "完成", - "finishedDesc": "在完成时触发", - "saved": "保存", - "savedDesc": "在保存时触发", - "edited": "编辑", - "editedDesc": "在编辑时触发", - "meetingStart": "会议开始", - "meetingStartDesc": "在会议开始时触发", - "meetingEnd": "会议结束", - "meetingEndDesc": "在会议结束时触发", - "meetingJoin": "会议加入", - "meetingJoinDesc": "在会议加入时触发", - "meetingLeave": "会议离开", - "meetingLeaveDesc": "在会议离开时触发", - "geoMapMove": "地图移动", - "geoMapMoveDesc": "在地图移动时触发", - "geoMapZoom": "地图缩放", - "geoMapZoomDesc": "在地图缩放时触发", - "geoMapSelect": "地图选择", - "geoMapSelectDesc": "在地图选择时触发", - "scannerSuccess": "扫描成功", - "scannerSuccessDesc": "在扫描成功时触发", - "scannerError": "扫描失败", - "scannerErrorDesc": "在扫描失败时触发", - "chartZoom": "图表缩放", - "chartZoomDesc": "在图表缩放时触发", - "chartHover": "图表悬停", - "chartHoverDesc": "在图表悬停时触发", - "chartSelect": "图表选择", - "chartSelectDesc": "在图表选择时触发", - "chartDeselect": "图表取消选择", - "chartDeselectDesc": "在图表取消选择时触发", - close: "关闭", - closeDesc: "在关闭时触发", - parse: "解析", - parseDesc: "在解析时触发", - success: "成功", - successDesc: "在成功时触发", - delete: "删除", - deleteDesc: "在删除时触发", - mention: "提及", - mentionDesc: "在提及时触发", - }, - - themeDetail: { - ...en.themeDetail, - - "primary": "品牌颜色", - "primaryDesc": "大多数组件使用的默认主颜色", - "textDark": "深色文本颜色", - "textDarkDesc": "当背景颜色较浅时使用", - "textLight": "浅色文本颜色", - "textLightDesc": "当背景颜色较深时使用", - "canvas": "画布颜色", - "canvasDesc": "应用的默认背景颜色", - "primarySurface": "容器颜色", - "primarySurfaceDesc": "组件(如表格)的默认背景颜色", - "borders": "边框样式", - "spacing": "间距样式", - "font": "字体样式", - "fonts": "字体", - "borderRadius": "边框圆角", - "borderRadiusDesc": "大多数组件使用的默认边框圆角", - "borderColor": "边框颜色", - "borderColorDesc": "大多数组件使用的默认边框颜色", - "borderWidth": "边框宽度", - "borderWidthDesc": "大多数组件使用的默认边框宽度", - "borderStyle": "边框样式", - "borderStyleDesc": "大多数组件使用的默认边框样式", - "fontFamily": "字体系列", - "fontFamilyDesc": "大多数组件使用的默认字体系列", - "chart": "图表样式", - "chartDesc": "在此处放置 eCharts 的主题 JSON,以定义所有详细信息中图表的样式。", - "echartsJson": "您可以使用主题 JSON 生成器。将生成器中的 JSON 复制并粘贴到这里。", - "margin": "外边距", - "marginDesc": "大多数组件通常使用的默认外边距", - "padding": "内边距", - "paddingDesc": "大多数组件通常使用的默认内边距", - "containerHeaderPadding": "标题内边距", - "containerheaderpaddingDesc": "大多数组件通常使用的默认标题内边距", - "gridColumns": "网格列", - "gridColumnsDesc": "大多数容器通常使用的默认列数", - "loadingIndicators": "加载指示器", - "showComponentLoadingIndicators": "当组件加载时显示加载指示器", - "showDataLoadingIndicators": "在数据加载期间显示指示器", - "dataLoadingIndicator": "数据加载指示器", - "background": "背景样式", - "gridSettings": "网格设置", - "gridRowHeight": "网格行高", - "gridRowHeightDesc": "网格中每行的高度", - "gridRowCount": "网格行数", - "gridRowCountDesc": "网格中的最大行数", - "gridPaddingX": "水平内边距", - "gridPaddingXDesc": "画布的水平内边距", - "gridPaddingY": "垂直内边距", - "gridPaddingYDesc": "画布的垂直内边距", - "gridBgImage": "背景图片", - "gridBgImageDesc": "画布的背景图片", - "gridBgImageRepeat": "背景图片重复", - "gridBgImageRepeatDesc": "画布背景图片的重复方式", - "gridBgImageSize": "背景图片大小", - "gridBgImageSizeDesc": "画布背景图片的大小", - "gridBgImagePosition": "背景图片位置", - "gridBgImagePositionDesc": "画布背景图片的位置", - "gridBgImageOrigin": "背景图片起点", - "gridBgImageOriginDesc": "画布背景图片的起点" - }, - style: { - ...en.style, - resetTooltip: "重置样式.删除输入框的值以重置单个字段.", - textColor: "文字颜色", - contrastText: "对比文本颜色", - generated: "已生成", - customize: "自定义", - staticText: "静态文本", - accent: "强调色", - validate: "验证消息", - border: "边框颜色", - borderRadius: "边框半径", - borderWidth: "边框宽度", - borderStyle:"边框样式", - background: "背景", - headerBackground: "头部背景", - footerBackground: "底部背景", - "siderBackground": "Sider 背景", - fill: "填充", - track: "轨道", - links: "链接", - thumb: "滑块", - thumbBorder: "滑块边框", - checked: "已选中", - unchecked: "未选中", - handle: "手柄", - tags: "标签", - tagsText: "标签文本", - multiIcon: "多选图标", - tabText: "选项卡文本", - tabAccent: "选项卡强调色", - checkedBackground: "已选中背景", - uncheckedBackground: "未选中背景", - uncheckedBorder: "未选中边框", - indicatorBackground: "指示器背景", - tableCellText: "单元格文本", - selectedRowBackground: "选中行背景", - hoverRowBackground: "悬停行背景", - hoverBackground:"悬停背景", - textTransform:"文本变换", - textDecoration:"文字装饰", - alternateRowBackground: "交替行背景", - tableHeaderBackground: "表头背景", - tableHeaderText: "表头文本", - toolbarBackground: "工具栏背景", - toolbarText: "工具栏文本", - pen: "画笔", - footerIcon: "底部图标", - tips: "提示", - margin: "外边距", - padding: "内边距", - marginLeft: "左外边距", - marginRight: "右外边距", - marginTop: "上外边距", - marginBottom: "下外边距", - containerHeaderPadding: "上内边距", - containerFooterPadding: "下内边距", - containerBodyPadding: "内边距", - "containerSiderPadding": "Sider 衬垫", - minWidth: "最小宽度", - text: "文本", - textSize: "字体大小", - textWeight: "字体粗细", - "fontFamily": "字体", - "fontStyle": "字体风格", - "backgroundImage": "背景图片", - "backgroundImageRepeat" : "背景图片重复", - "backgroundImageSize" : "背景图片大小", - "backgroundImagePosition" : "背景图片位置", - "backgroundImageOrigin": "背景图片原点", - "headerBackgroundImage": "头部背景图片", - "headerBackgroundImageRepeat" : "头部背景图片重复", - "headerBackgroundImageSize" : "头部背景图片大小", - "headerBackgroundImagePosition" : "头部背景图片位置", - "headerBackgroundImageOrigin": "头部背景图片原点", - "footerBackgroundImage": "底部背景图片", - "footerBackgroundImageRepeat" : "底部背景图片重复", - "footerBackgroundImageSize" : "底部背景图片大小", - "footerBackgroundImagePosition" : "底部背景图片位置", - "footerBackgroundImageOrigin": "底部背景图片原点", - - "radiusTip": "指定元素角的半径。例如:5px,50%,或1em。", + + "productName": "低编码器", + "productDesc": "快速构建内部工具,无任何限制", + "notSupportedBrowser": "您当前使用的浏览器可能存在兼容性问题.为了获得更好的用户体验,建议使用最新版本的Chrome浏览器", + "create": "创建", + "move": "移动", + "addItem": "添加", + "newItem": "新建", + "copy": "复制", + "rename": "重命名", + "delete": "删除", + "deletePermanently": "删除", + "remove": "移除", + "recover": "恢复", + "edit": "编辑", + "view": "查看", + "value": "值", + "data": "数据", + "information": "信息", + "success": "成功", + "warning": "警告", + "error": "错误", + "reference": "参考", + "text": "文本", + "basic": "基础", + "label": "标题", + "layout": "布局", + "color": "颜色", + "form": "表单", + "menu": "菜单", + "menuItem": "菜单项", + "ok": "确定", + "cancel": "取消", + "finish": "完成", + "reset": "重置", + "icon": "图标", + "code": "代码", + "title": "标题", + "emptyContent": "空内容", + "more": "更多", + "search": "搜索", + "back": "返回", + "accessControl": "访问控制", + "copySuccess": "已复制", + "copyError": "复制错误", + "api": { + ...en.api, + + "publishSuccess": "已发布", + "recoverFailed": "恢复失败", + "needUpdate": "您当前的版本过旧,请升级至最新版本.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "当前的代码编辑器不支持自动格式化", + "fold": "折叠", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "设置属性:{property}", + "clearDesc": "清除属性:{property}", + "resetDesc": "重置属性:{property} 为默认值", + }, + "method": { + ...en.method, + + "focus": "设置焦点", + "focusOptions": "焦点选项,参考HTMLElement.focus()方法", + "blur": "移除焦点", + "click": "点击", + "select": "选择所有文本", + "setSelectionRange": "设置当前文本选择的起始和结束位置", + "selectionStart": "从头选择字符.", + "selectionEnd": "从倒数选择字符.", + "setRangeText": "替换一段文本", + "replacement": "要插入的字符串.", + "replaceStart": "从头开始替换字符.", + "replaceEnd": "从倒数开始替换字符.", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "加载组件失败,请检查您的配置.", + "clickToReload": "点击重新加载", + "errorMsg": "错误:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "仅支持上传 {types} 类型的图像", + "exceedSizeError": "图像大小不应超过 {size}", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "不支持", + "selectAtLeastOneComponent": "请至少选择一个组件", + "selectCompFirst": "请在复制之前选择组件", + "noContainerSelected": "[错误] 未选择容器", + "deleteCompsSuccess": "删除成功,您可以使用 {undoKey} 撤销操作.", + "deleteCompsTitle": "删除组件", + "deleteCompsBody": "确定要删除所选的 {compNum} 个组件吗?", + "cutCompsSuccess": "剪切成功!您可以使用 {pasteKey} 进行粘贴,或使用 {undoKey} 撤销操作.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "查询", + "globals": "全局变量", + "propTipsArr": "{num} 项", + "propTips": "{num} 个键", + "propTipArr": "{num} 项", + "propTip": "{num} 个键", + "stateTab": "状态", + "settingsTab": "设置", + "toolbarTitle": "其他", + "toolbarPreload": "脚本和样式", + "components": "组件", + "modals": "对话框", + "expandTip": "点击展开 {component} 的数据", + "collapseTip": "点击折叠 {component} 的数据", + "layers": "图层", + "activatelayers": "激活图层", + "selectedComponents": "已选组件", + "displayComponents": "控制显示屏", + "lockComponents": "控制位置", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "查询", + "run": "运行", + "noSelectedQuery": "未选择查询", + "metaData": "元数据", + "noMetadata": "无元数据", + "metaSearchPlaceholder": "搜索元数据", + "allData": "所有表", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "属性", + "noSelectedComps": "未选择组件,点击以选择一个.", + "createTab": "插入", + "searchPlaceHolder": "搜索组件或模块", + "uiComponentTab": "组件", + "extensionTab": "扩展", + "modulesTab": "模块", + "moduleListTitle": "模块", + "pluginListTitle": "插件", + "emptyModules": "模块是可复用的组件和查询的组合.", + "searchNotFound": "找不到合适的组件?提交一个新的想法", + "emptyPlugins": "未添加插件.", + "contactUs": "联系我们", + "issueHere": "这里.", + "folderListTitle": "文件夹", + }, + "prop": { + ...en.prop, + + "expand": "展开", + "columns": "列", + "videokey": "视频键", + "rowSelection": "行选择", + "toolbar": "工具栏", + "pagination": "分页", + "logo": "标志", + "style": "样式", + "inputs": "输入", + "meta": "元数据", + "data": "数据", + "hide": "隐藏", + "loading": "加载中", + "disabled": "禁用", + "placeholder": "占位符", + "showClear": "显示清除按钮", + "showSearch": "可搜索", + "defaultValue": "默认值", + "required": "必填字段", + "showEmptyValidation": "清空/重置时显示验证", + "readOnly": "只读", + "readOnlyTooltip": "只读组件外观与普通组件相同,可以获得焦点和选择,但不能修改", + "minimum": "最小值", + "maximum": "最大值", + "regex": "正则表达式", + "minLength": "最小长度", + "maxLength": "最大长度", + "height": "高度", + "width": "宽度", + "selectApp": "应用程序", + "showCount": "显示计数", + "tabIndex": "索引选项卡", + "textType": "文本类型", + "customRule": "自定义规则", + "customRuleTooltip": "如果结果是非空字符串,则为错误消息.如果为空或null,则验证通过.\n示例:", + "manual": "手动", + "map": "映射", + "json": "JSON", + "use12Hours": "使用12小时制", + "hourStep": "小时步长", + "minuteStep": "分钟步长", + "secondStep": "秒步长", + "minDate": "最小日期", + "maxDate": "最大日期", + "minTime": "最小时间", + "maxTime": "最大时间", + "type": "类型", + "showLabel": "显示标签", + "showHeader": "显示标题", + "showBody": "显示表体", + "showSider": "显示 Sider", + "innerSider": "内部 Sider", + "showFooter": "显示表尾", + "maskClosable": "点击蒙层关闭", + "escapeClose": "启用 Escape 键关闭功能", + "toggleClose": "启用关闭按钮", + "showMask": "显示蒙层", + "textOverflow": "文本溢出", + "scrollbar": "滚动条", + "showVerticalScrollbar": "显示垂直滚动条", + "showHorizontalScrollbar": "显示水平滚动条", + "siderScrollbar": "在 Sider 中显示滚动条", + "mainScrollbar": "在主要内容中显示滚动条", + "modalScrollbar": "在模态中显示滚动条", + "drawerScrollbar": "在抽屉中显示滚动条", + "textAreaScrollBar": "在文本区域显示滚动条", + "siderRight": "右侧显示屏", + "siderWidth": "凫水宽度", + "siderWidthTooltip": "网格宽度支持百分比(%)和像素(px)。", + "siderCollapsedWidth": "折叠宽度", + "siderCollapsedWidthTooltip": "折叠宽度支持百分比(%)和像素(px)。", + "siderCollapsible": "Sider 折叠式", + "siderCollapsed": "Sider 崩溃", + "contentScrollbar": "在内容中显示滚动条", + "appID": "应用程序 ID", + "showApp": "在内容区域显示应用程序", + "showAppTooltip": "您可以在内容区域显示整个 Lowcoder 应用程序。请注意,对于模块,我们不支持输入、输出事件和方法。", + "baseURL": "Lowcoder API 基本 URL", + "horizontal": "水平", + "minHorizontalWidth": "最小水平宽度", + "component": "自有组件标识符", + "className": "CSS 类名称", + "dataTestId": "个人 ID", + "preventOverwriting": "防止覆盖样式", + "color": "颜色", + "horizontalGridCells": "垂直网格单元", + "verticalGridCells": "垂直网格单元格", + "timeZone": "时区", + "pickerMode": "选取器模式", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "自动", + "fixed": "固定", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "鼠标悬停", + "wrap": "包装", + }, + "labelProp": { + ...en.labelProp, + + "text": "标题", + "tooltip": "提示", + "position": "位置", + "collapse": "崩溃", + "left": "左", + "right": "对", + "top": "上", + "align": "对齐", + "width": "宽度", + "widthTooltip": "组件标题的宽度,支持百分比(%)和像素(px)为单位.", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "事件处理器", + "emptyEventHandlers": "无事件处理器", + "incomplete": "选择不完整", + "inlineEventTitle": "在 {eventName} 时", + "event": "事件", + "action": "操作", + "noSelect": "无选择", + "runQuery": "运行查询", + "selectQuery": "选择查询", + "controlComp": "控制组件", + "runScript": "运行JavaScript代码", + "runScriptPlaceHolder": "在此处编写代码", + "component": "组件", + "method": "方法", + "setTempState": "设置临时状态", + "state": "状态", + "triggerModuleEvent": "触发模块事件", + "moduleEvent": "模块事件", + "goToApp": "跳转到指定应用", + "queryParams": "查询参数", + "queryVariables": "查询变量", + "hashParams": "哈希参数", + "showNotification": "显示通知", + "text": "文本", + "level": "级别", + "duration": "持续时间", + "notifyDurationTooltip": "时间单位可以是秒(默认为s)或毫秒(ms),最大持续时间为{max}秒", + "goToURL": "跳转到URL链接", + "openInNewTab": "在新标签页中打开", + "copyToClipboard": "复制到剪贴板", + "copyToClipboardValue": "值", + "export": "导出数据", + "exportNoFileType": "未选择(可选)", + "fileName": "文件名", + "fileNameTooltip": "支持使用扩展名指定文件类型,例如image.png.", + "fileType": "文件类型", + "condition": "满足条件时运行", + "conditionTooltip": "只有当此条件评估为“true”时才运行事件处理器", + "debounce": "防抖", + "throttle": "节流", + "slowdownTooltip": "使用防抖或节流控制操作触发的频率,时间单位可以是毫秒(默认为ms)或秒(s).", + "notHandledError": "未处理", + "currentApp": "当前应用程序", + "inputEventHandlers": "输入事件处理程序", + "inputEventHandlersDesc": "与用户输入有关的事件处理程序", + "buttonEventHandlers": "按钮事件处理程序", + "buttonEventHandlersDesc": "与按钮点击相关的事件处理程序", + "changeEventHandlers": "更改事件处理程序", + "changeEventHandlersDesc": "与数值更改相关的事件处理程序", + "editedEventHandlers": "编辑事件处理程序", + "editedEventHandlersDesc": "与元素编辑状态相关的事件处理程序", + "clickEventHandlers": "点击事件处理程序", + "clickEventHandlersDesc": "与点击有关的事件处理程序", + "keyDownEventHandlers": "按键下降事件处理程序", + "keyDownEventHandlersDesc": "与按键下降事件相关的事件处理程序", + "checkboxEventHandlers": "复选框事件处理程序", + "checkboxEventHandlersDesc": "与复选框更改相关的事件处理程序", + "dragEventHandlers": "拖动事件处理程序", + "dragEventHandlersDesc": "与拖放事件相关的事件处理程序", + "elementEventHandlers": "元素事件处理程序", + "elementEventHandlersDesc": "与通用数据元素事件相关的事件处理程序", + "mediaEventHandlers": "媒体事件处理程序", + "mediaEventHandlersDesc": "与媒体事件相关的事件处理程序", + "scannerEventHandlers": "扫描仪事件处理程序", + "scannerEventHandlersDesc": "与扫描仪事件相关的事件处理程序", + "chartEventHandlers": "图表事件处理程序", + "chartEventHandlersDesc": "与图表事件相关的事件处理程序", + "geoMapEventHandlers": "地理地图事件处理程序", + "geoMapEventHandlersDesc": "与地理地图事件相关的事件处理程序", + "stepEventHandlers": "步骤事件处理程序", + "stepEventHandlersDesc": "与步骤 UI 事件相关的事件处理程序", + "shareEventHandlers": "共享事件处理程序", + "shareEventHandlersDesc": "与共享事件相关的事件处理程序", + "selectEventHandlers": "选择事件处理程序", + "selectEventHandlersDesc": "与选择事件相关的事件处理程序", + "meetingEventHandlers": "会议活动处理程序", + "meetingEventHandlersDesc": "与会议活动相关的事件处理程序", + "collaborationEventHandlers": "协作事件处理程序", + "collaborationEventHandlersDesc": "与协作事件相关的事件处理程序", + "set": "设置", + "clear": "清晰", + "reset": "重置", + "messageType": "信息类型", + "placement": "安置", + "description": "说明", + }, + "event": { + ...en.event, + + "submit": "提交", + "submitDesc": "在提交时触发", + "change": "更改", + "changeDesc": "在值更改时触发", + "focus": "聚焦", + "focusDesc": "在聚焦时触发", + "blur": "失焦", + "blurDesc": "在失焦时触发", + "click": "点击", + "clickDesc": "在点击时触发", + "doubleClick": "双击", + "doubleClickDesc": "在双击时触发", + "rightClick": "右键点击", + "rightClickDesc": "在右键点击时触发", + "keyDown": "按键", + "keyDownDesc": "在按键时触发", + "select": "选择", + "selectDesc": "在选择时触发", + "checked": "已检查", + "checkedDesc": "在复选框被选中时触发", + "unchecked": "未检查", + "uncheckedDesc": "在复选框未选中时触发", + "drag": "拖拽", + "dragDesc": "在拖拽时触发", + "drop": "放置", + "dropDesc": "在放置时触发", + "open": "打开", + "openDesc": "在打开时触发", + "mute": "静音", + "muteDesc": "在静音时触发", + "unmute": "取消静音", + "unmuteDesc": "在取消静音时触发", + "showCamera": "显示摄像头", + "showCameraDesc": "在显示摄像头时触发", + "hideCamera": "隐藏摄像头", + "hideCameraDesc": "在隐藏摄像头时触发", + "shareScreen": "共享屏幕", + "shareScreenDesc": "在共享屏幕时触发", + "shareScreenEnd": "共享屏幕结束", + "shareScreenEndDesc": "在共享屏幕结束时触发", + "shareControl": "共享控制", + "shareControlDesc": "在共享控制时触发", + "shareControlEnd": "共享控制结束", + "shareControlEndDesc": "在共享控制结束时触发", + "shareContent": "共享内容", + "shareContentDesc": "在共享内容时触发", + "shareContentEnd": "共享内容结束", + "shareContentEndDesc": "在共享内容结束时触发", + "stopShare": "停止共享", + "stopShareDesc": "在停止共享时触发", + "meetingStart": "会议开始", + "meetingStartDesc": "在会议开始时触发", + "meetingEnd": "会议结束", + "meetingEndDesc": "在会议结束时触发", + "meetingJoin": "会议加入", + "meetingJoinDesc": "在会议加入时触发", + "meetingLeave": "会议离开", + "meetingLeaveDesc": "在会议离开时触发", + "play": "播放", + "playDesc": "在播放时触发", + "pause": "暂停", + "pauseDesc": "在暂停时触发", + "ended": "结束", + "endedDesc": "在结束时触发", + "step": "步骤", + "stepDesc": "在步骤时触发", + "next": "下一步", + "nextDesc": "在下一步时触发", + "finished": "完成", + "finishedDesc": "在完成时触发", + "saved": "保存", + "savedDesc": "在保存时触发", + "edited": "编辑", + "editedDesc": "在编辑时触发", + "geoMapMove": "地图移动", + "geoMapMoveDesc": "在地图移动时触发", + "geoMapZoom": "地图缩放", + "geoMapZoomDesc": "在地图缩放时触发", + "geoMapSelect": "地图选择", + "geoMapSelectDesc": "在地图选择时触发", + "scannerSuccess": "扫描成功", + "scannerSuccessDesc": "在扫描成功时触发", + "scannerError": "扫描失败", + "scannerErrorDesc": "在扫描失败时触发", + "chartZoom": "图表缩放", + "chartZoomDesc": "在图表缩放时触发", + "chartHover": "图表悬停", + "chartHoverDesc": "在图表悬停时触发", + "chartSelect": "图表选择", + "chartSelectDesc": "在图表选择时触发", + "chartDeselect": "图表取消选择", + "chartDeselectDesc": "在图表取消选择时触发", + "close": "关闭", + "closeDesc": "在关闭时触发", + "parse": "解析", + "parseDesc": "在解析时触发", + "success": "成功", + "successDesc": "在成功时触发", + "delete": "删除", + "deleteDesc": "在删除时触发", + "mention": "提及", + "mentionDesc": "在提及时触发", + "search": "搜索", + "searchDesc": "搜索触发器", + "selectedChange": "选择更改", + "selectedChangeDesc": "已更改选择的触发器", + "clickExtra": "点击行动", + "clickExtraDesc": "点击额外元素时的触发器", + "start": "开始", + "startDesc": "启动时的触发器", + "resume": "简历", + "resumeDesc": "简历中的触发因素", + "countdown": "倒计时", + "countdownDesc": "倒计时结束时的触发器", + "reset": "重置结束", + "resetDesc": "重置计时器触发器", + "refresh": "刷新", + "refreshDesc": "刷新时的触发器", + "sortChange": "排序变化", + "sortChangeDesc": "排序变化触发器", + }, + "style": { + ...en.style, + + "boxShadowColor": "阴影颜色", + "boxShadow": "盒影", + "opacity": "不透明度", + "animation": "动画", + "animationIterationCount": "动画迭代次数", + "animationDelay": "动画延迟", + "animationDuration": "动画时长", + "resetTooltip": "重置样式.删除输入框的值以重置单个字段.", + "textColor": "文字颜色", + "contrastText": "对比文本颜色", + "generated": "已生成", + "customize": "自定义", + "staticText": "静态文本", + "accent": "强调色", + "validate": "验证消息", + "border": "边框颜色", + "borderRadius": "边框半径", + "borderWidth": "边框宽度", + "borderStyle": "边框样式", + "background": "背景", + "headerBackground": "头部背景", + "siderBackground": "Sider 背景", + "footerBackground": "底部背景", + "fill": "填充", + "track": "轨道", + "links": "链接", + "thumb": "滑块", + "thumbBorder": "滑块边框", + "checked": "已选中", + "unchecked": "未选中", + "handle": "手柄", + "tags": "标签", + "tagsText": "标签文本", + "multiIcon": "多选图标", + "tabText": "选项卡文本", + "tabAccent": "选项卡强调色", + "checkedBackground": "已选中背景", + "uncheckedBackground": "未选中背景", + "uncheckedBorder": "未选中边框", + "indicatorBackground": "指示器背景", + "tableCellText": "单元格文本", + "selectedRowBackground": "选中行背景", + "hoverRowBackground": "悬停行背景", + "hoverBackground": "悬停背景", + "textTransform": "文本变换", + "textDecoration": "文字装饰", + "alternateRowBackground": "交替行背景", + "tableHeaderBackground": "表头背景", + "tableHeaderText": "表头文本", + "toolbarBackground": "工具栏背景", + "toolbarText": "工具栏文本", + "pen": "画笔", + "footerIcon": "底部图标", + "tips": "提示", + "margin": "外边距", + "padding": "内边距", + "marginLeft": "左外边距", + "marginRight": "右外边距", + "marginTop": "上外边距", + "marginBottom": "下外边距", + "containerHeaderPadding": "上内边距", + "containerFooterPadding": "下内边距", + "containerSiderPadding": "Sider 衬垫", + "containerBodyPadding": "内边距", + "minWidth": "最小宽度", + "aspectRatio": "宽高比", + "text": "文本", + "textSize": "字体大小", + "textWeight": "字体粗细", + "fontFamily": "字体", + "fontStyle": "字体风格", + "backgroundImage": "背景图片", + "backgroundImageRepeat": "背景图片重复", + "backgroundImageSize": "背景图片大小", + "backgroundImagePosition": "背景图片位置", + "backgroundImageOrigin": "背景图片原点", + "headerBackgroundImage": "头部背景图片", + "headerBackgroundImageRepeat": "头部背景图片重复", + "headerBackgroundImageSize": "头部背景图片大小", + "headerBackgroundImagePosition": "头部背景图片位置", + "headerBackgroundImageOrigin": "头部背景图片原点", + "footerBackgroundImage": "底部背景图片", + "footerBackgroundImageRepeat": "底部背景图片重复", + "footerBackgroundImageSize": "底部背景图片大小", + "footerBackgroundImagePosition": "底部背景图片位置", + "footerBackgroundImageOrigin": "底部背景图片原点", + "rotation": "旋转", + "alternateBackground": "备用背景色", + "headerText": "标题文字颜色", + "labelColor": "标签颜色", + "label": "标签颜色", + "lineHeight": "线条高度", + "subTitleColor": "副标题颜色", + "titleText": "标题颜色", + "success": "成功色彩", + "siderBackgroundImage": "Sider 背景图片", + "siderBackgroundImageRepeat": "Sider 背景图片重复", + "siderBackgroundImageSize": "滑块背景图像大小", + "siderBackgroundImagePosition": "选择背景图片位置", + "siderBackgroundImageOrigin": "Sider 背景图片来源", + "activeBackground": "活动背景颜色", + "labelBackground": "标签背景颜色", + "gradientBackground": "渐变背景色", + "direction": "方向", + "chartOpacity": "不透明度", + "chartBoxShadow": "盒影", + "chartBorderStyle": "边框样式", + "chartBorderRadius": "边界半径", + "chartBorderWidth": "边框宽度", + "chartTextSize": "文字大小", + "chartTextWeight": "文本重量", + "chartFontFamily": "字体家族", + "chartFontStyle": "字体样式", + "chartBackgroundColor": "背景颜色", + "chartGradientColor": "渐变色", + "chartShadowColor": "阴影颜色", + "chartBorderColor": "边框颜色", + "chartTextColor": "文字颜色", + "detailSize": "详细尺寸", + "radiusTip": "指定元素角的半径。例如:5px,50%,或1em。", "gapTip": "指定网格或弹性容器中行和列之间的间距。例如:10px,1rem,或5%。", "cardRadiusTip": "定义卡片组件的角半径。例如:10px,15px。", "borderWidthTip": "指定元素边框的宽度。例如:1px,0.5em,或thin。", @@ -594,2644 +667,4179 @@ export const zh: typeof en = { "headerBackgroundImageOriginTip": "指定标题背景图像的定位区域。例如:padding-box,border-box,content-box。", "footerBackgroundImageOriginTip": "指定页脚背景图像的定位区域。例如:padding-box,border-box,content-box。", "rotationTip": "指定元素的旋转角度。例如:45deg,90deg,-180deg。", - "lineHeightTip": "定义文字行高。例如:1.5,2,120%。" - - }, - - export: { - ...en.export, - hiddenDesc: "如果为true,则隐藏组件", - disabledDesc: "如果为true,则将组件置为灰色且不可交互", - visibleDesc: "如果为true,则组件可见", - inputValueDesc: "输入框的当前值", - invalidDesc: "值是否无效", - placeholderDesc: "未设置值时显示的文本", - requiredDesc: "如果为true,则必须提供有效值", - submitDesc: "提交表单", - richTextEditorValueDesc: "编辑器的当前值", - richTextEditorReadOnlyDesc: "如果为true,则编辑器为只读", - richTextEditorHideToolBarDesc: "如果为true,则隐藏工具栏", - jsonEditorDesc: "当前的JSON数据", - sliderValueDesc: "当前选定的值", - sliderMaxValueDesc: "当前区间的最大值", - sliderMinValueDesc: "当前区间的最小值", - sliderStartDesc: "当前选定起始点的值", - sliderEndDesc: "当前选定结束点的值", - ratingValueDesc: "当前选定的评分", - ratingMaxDesc: "当前设置的最大评分", - datePickerValueDesc: "当前选定的日期", - datePickerFormattedValueDesc: "根据指定的格式格式化的选定日期", - datePickerTimestampDesc: "日期的当前选定时间戳(秒)", - dateRangeStartDesc: "当前选定的起始日期", - dateRangeEndDesc: "当前选定的结束日期", - dateRangeStartTimestampDesc: "开始日期的当前选定时间戳(秒)", - dateRangeEndTimestampDesc: "结束日期的当前选定时间戳(秒)", - dateRangeFormattedValueDesc: "根据指定的格式格式化的选定日期", - dateRangeFormattedStartValueDesc: "根据指定的格式格式化的起始日期", - dateRangeFormattedEndValueDesc: "根据指定的格式格式化的结束日期", - timePickerValueDesc: "当前选定的时间", - timePickerFormattedValueDesc: "根据指定的格式格式化的选定时间", - timeRangeStartDesc: "当前选定的起始时间", - timeRangeEndDesc: "当前选定的结束时间", - timeRangeFormattedValueDesc: "根据指定的格式格式化的选定时间", - timeRangeFormattedStartValueDesc: "根据指定的格式格式化的起始时间", - timeRangeFormattedEndValueDesc: "根据指定的格式格式化的结束时间" - }, - validationDesc: { - ...en.validationDesc, - email: "请输入有效的电子邮件地址", - url: "请输入有效的URL链接", - regex: "请输入与正则表达式匹配的内容", - maxLength: "字符数过多,当前长度为{length},最大长度为{maxLength}", - minLength: "字符数不足,当前长度为{length},最小长度为{minLength}", - maxValue: "大于最大值,当前值为{value},最大值为{max}", - minValue: "小于最小值,当前值为{value},最小值为{min}", - maxTime: "大于最大时间,当前时间为{time},最大时间为{maxTime}", - minTime: "小于最小时间,当前时间为{time},最小时间为{minTime}", - maxDate: "大于最大日期,当前日期为{date},最大日期为{maxDate}", - minDate: "小于最小日期,当前日期为{date},最小日期为{minDate}" - }, - query: { - ...en.query, - noQueries: "没有可用的查询.", - queryTutorialButton: "查看{value}文档", - datasource: "数据源", - newDatasource: "新建数据源", - generalTab: "常规", - notificationTab: "通知", - advancedTab: "高级", - showFailNotification: "执行失败时显示通知", - failCondition: "失败条件", - failConditionTooltip1: "自定义失败条件和相应的通知.", - failConditionTooltip2: "如果任何条件返回true,则将查询标记为失败并触发相应的通知.", - showSuccessNotification: "执行成功时显示通知", - successMessageLabel: "成功消息", - successMessage: "执行成功", - notifyDuration: "持续时间", - notifyDurationTooltip: "通知持续时间.时间单位可以是秒(s,默认)或毫秒(ms).默认值为{default}s,最大值为{max}s.", - successMessageWithName: "{name}执行成功", - failMessageWithName: "{name}执行失败:{result}", - showConfirmationModal: "运行前显示确认对话框", - confirmationMessageLabel: "确认消息", - confirmationMessage: "您确定要运行此查询吗?", - newQuery: "新建查询", - newFolder: "新建文件夹", - recentlyUsed: "最近使用", - folder: "文件夹", - folderNotEmpty: "文件夹不为空", - dataResponder: "数据响应器", - tempState: "临时状态", - transformer: "转换器", - quickRestAPI: "REST查询", - quickStreamAPI: "Stream查询", - quickGraphql: "GraphQL查询", - lowcoderAPI: "Lowcoder API", - executeJSCode: "运行JavaScript代码", - importFromQueryLibrary: "从查询库导入", - importFromFile: "从文件导入", - "triggerType": "触发条件...", - "triggerTypeAuto": "当输入更改或应用程序(页面)加载后", - "triggerTypePageLoad": "应用程序(页面)加载后", - "triggerTypeManual": "仅当您手动触发时", - "triggerTypeInputChange": "当输入更改时", - "triggerTypeQueryExec": "查询执行后", - "triggerTypeTimeout": "应用程序(页面)加载后和超时", - "delayTime": "延迟时间", - chooseDataSource: "选择数据源", - method: "方法", - updateExceptionDataSourceTitle: "更新失败的数据源", - updateExceptionDataSourceContent: "使用相同的失败数据源更新以下查询:", - update: "更新", - disablePreparedStatement: "禁用预编译语句", - disablePreparedStatementTooltip: "禁用预编译语句可以动态生成SQL,但存在SQL注入的风险", - timeout: "超时时间", - timeoutTooltip: - "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n" + - "默认值:{defaultSeconds}秒\n" + - "最大值:{maxSeconds}秒.\n" + - "\n" + - "例如:300(即300毫秒),800毫秒,5秒.", - periodic: "定期运行此查询", - periodicTime: "周期", - periodicTimeTooltip: - "连续执行之间的时间间隔.\n" + - "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n" + - "最小值:100毫秒,低于此值将禁用周期性执行.\n" + - "\n" + - "例如:300(即300毫秒),800毫秒,5秒.", - cancelPrevious: "忽略上一次未完成的执行结果.", - cancelPreviousTooltip: "", - dataSourceStatusError: - "如果触发新的执行,将忽略之前未完成的执行结果(如果之前的执行未完成),被忽略的执行将不会触发查询的事件列表.", - success: "成功", - fail: "失败", - successDesc: "执行成功时触发", - failDesc: "执行失败时触发", - fixedDelayError: "查询未运行", - execSuccess: "执行成功", - execFail: "执行失败", - execIgnored: "忽略了此查询的结果.", - deleteSuccessMessage: "删除成功,您可以使用 {undoKey} 进行撤消.", - dataExportDesc: "当前查询获取的数据", - codeExportDesc: "当前查询状态代码", - successExportDesc: "当前查询是否成功执行", - messageExportDesc: "当前查询返回的信息", - extraExportDesc: "当前查询的其他数据", - isFetchingExportDesc: "当前查询是否在请求中", - runTimeExportDesc: "当前查询的执行时间(毫秒)", - latestEndTimeExportDesc: "最后运行时间", - triggerTypeExportDesc: "触发类型", - chooseResource: "选择资源", - createDataSource: "创建新的数据源", - editDataSource: "编辑", - datasourceName: "数据源名称", - datasourceNameRuleMessage: "请输入数据源名称", - generalSetting: "常规设置", - advancedSetting: "高级设置", - port: "端口", - portRequiredMessage: "请输入端口", - portErrorMessage: "请输入正确的端口", - connectionType: "连接类型", - regular: "常规", - host: "主机", - hostRequiredMessage: "请输入主机域名或IP地址", - userName: "用户名", - password: "密码", - encryptedServer: "-------- 服务器端加密 --------", - uriRequiredMessage: "请输入URL链接", - urlRequiredMessage: "请输入URL链接", - uriErrorMessage: "请输入正确的URL链接", - urlErrorMessage: "请输入正确的URL链接", - httpRequiredMessage: "请输入http://或https://", - databaseName: "数据库名称", - databaseNameRequiredMessage: "请输入数据库名称", - useSSL: "使用SSL", - userNameRequiredMessage: "请输入用户名", - passwordRequiredMessage: "请输入密码", - authentication: "身份验证", - authenticationType: "身份验证类型", - sslCertVerificationType: "SSL证书验证", - sslCertVerificationTypeDefault: "验证CA证书", - sslCertVerificationTypeSelf: "验证自签名证书", - sslCertVerificationTypeDisabled: "禁用", - selfSignedCert: "自签名证书", - selfSignedCertRequireMsg: "请提供您的证书", - enableTurnOffPreparedStatement: "启用切换查询的预编译语句", - enableTurnOffPreparedStatementTooltip: "您可以在查询的高级选项卡中启用或禁用预编译语句", - serviceName: "服务名称", - serviceNameRequiredMessage: "请输入您的服务名称", - useSID: "使用SID", - connectSuccessfully: "连接成功", - saveSuccessfully: "保存成功", - database: "数据库", - cloudHosting: - "云托管的Lowcoder无法访问您的本地服务,如使用127.0.0.1或localhost.请尝试连接公共网络数据源或使用反向代理来访问您的私有服务.", - notCloudHosting: - "对于Docker托管部署,Lowcoder使用桥接网络,因此对于主机地址,127.0.0.1和localhost是无效的.要访问本地机器上的数据源,请参考以下链接", - howToAccessHostDocLink: "如何访问主机API/数据库", - returnList: "返回列表", - chooseDatasourceType: "选择数据源类型", - viewDocuments: "文档", - testConnection: "测试连接", - save: "保存", - whitelist: "白名单", - whitelistTooltip: "当需要时,将以下Lowcoder的IP地址添加到数据源的白名单中.", - address: "地址:", - nameExists: "名称{name}已存在", - jsQueryDocLink: "关于JavaScript查询", - dynamicDataSourceConfigLoadingText: "加载额外数据源配置...", - dynamicDataSourceConfigErrText: "无法加载额外数据源配置.", - retry: "重试", - "categoryDatabase": "数据库", - "categoryBigdata": "大数据", - "categoryAi": "人工智能", - "categoryDevops": "开发运维", - "categoryAppdevelopment": "应用开发", - "categoryWorkflow": "工作流", - "categoryMessaging": "消息传递", - "categoryAssets": "资产与存储", - "categoryProjectManagement": "项目管理", - "categoryCrm": "客户关系管理", - "categoryEcommerce": "电子商务", - "categoryWebscrapers": "网络爬虫", - "categoryDocumentHandling": "报告与文档生成", - "categoryRPA": "机器人流程自动化", - "componentsUsingQueryTitle": "查询使用情况", - "componentsUsingQuery": "此查询在哪里使用", - "variables": "变量" - }, - - sqlQuery: { - ...en.sqlQuery, - keyValuePairs: "键值对", - object: "对象", - allowMultiModify: "允许修改多行", - allowMultiModifyTooltip: "如果选择此参数,将操作符合条件的所有行.否则,只会操作符合条件的第一行.", - array: "数组", - insertList: "插入列表", - insertListTooltip: "当值不存在时插入的值", - filterRule: "筛选规则", - updateList: "更新列表", - updateListTooltip: "已存在的值会被相同的插入列表值覆盖", - sqlMode: "SQL模式", - guiMode: "GUI模式", - operation: "操作", - insert: "插入", - upsert: "插入,冲突时更新", - update: "更新", - delete: "删除", - bulkInsert: "批量插入", - bulkUpdate: "批量更新", - table: "表", - primaryKeyColumn: "主键列", - }, - EsQuery: { - ...en.EsQuery, - rawCommand: "原始命令", - queryTutorialButton: "查看Elasticsearch API文档", - request: "请求", - }, - googleSheets: { - ...en.googleSheets, - rowIndex: "行索引", - spreadsheetId: "电子表格", - sheetName: "工作表名称", - readData: "读取数据", - appendData: "追加行", - updateData: "更新行", - deleteData: "删除行", - clearData: "清除行", - serviceAccountRequireMessage: "请输入您的服务账号", - ASC: "升序", - DESC: "降序", - sort: "排序", - sortPlaceholder: "名称", - }, - queryLibrary: { - ...en.queryLibrary, - export: "导出为JSON", - noInput: "当前查询没有输入", - inputName: "名称", - inputDesc: "描述", - emptyInputs: "无输入", - clickToAdd: "点击添加", - chooseQuery: "选择查询", - viewQuery: "查看查询", - chooseVersion: "选择版本", - latest: "最新", - publish: "发布", - historyVersion: "历史版本", - deleteQueryLabel: "删除查询", - deleteQueryContent: "删除后无法恢复查询.是否删除查询?", - run: "运行", - readOnly: "只读", - exit: "退出", - recoverAppSnapshotContent: "将当前查询恢复到版本 {version}", - searchPlaceholder: "搜索查询", - allQuery: "所有查询", - deleteQueryTitle: "删除查询", - unnamed: "未命名", - publishNewVersion: "发布新版本", - publishSuccess: "已发布", - version: "版本", - desc: "描述", - }, - snowflake: { - ...en.snowflake, - accountIdentifierTooltip: "请参考", - extParamsTooltip: "配置更多连接参数", - }, - lowcoderQuery: { - ...en.lowcoderQuery, - queryOrgUsers: "查询工作区用户", - }, - redisQuery: { - ...en.redisQuery, - rawCommand: "原始命令", - command: "命令", - queryTutorial: "查看Redis命令文档", - }, - httpQuery: { - ...en.httpQuery, - bodyFormDataTooltip: - "如果选择{type},值的格式应为{object}.示例:{example}", - text: "文本", - file: "文件", - extraBodyTooltip: - "额外的body中的键值对将与JSON或表单数据类型一起添加到body中", - forwardCookies: "转发cookies", - forwardAllCookies: "转发所有cookies", - }, - smtpQuery: { - ...en.smtpQuery, - attachment: "附件", - attachmentTooltip: "可与文件上传组件一起使用,需要将数据转换为:", - MIMETypeUrl: "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - sender: "发件人", - recipient: "收件人", - carbonCopy: "抄送", - blindCarbonCopy: "密送", - subject: "主题", - content: "内容", - contentTooltip: "支持输入文本或HTML", - }, - - // component Registry - - uiCompCategory: { - ...en.uiCompCategory, - "dashboards": "仪表板和报告", - "layout": "布局和导航", - "forms": "数据收集与表格", - "collaboration": "会议与合作", - "projectmanagement": "项目管理", - "scheduling": "日历和日程安排", - "documents": "文件和档案管理", - "itemHandling": "项目和签名处理", - "multimedia": "多媒体与动画", - "integration": "整合与扩展" - }, - uiComp: { - ...en.uiComp, - inputCompName: "输入框", - inputCompDesc: "输入框组件", - inputCompKeywords: "文本", - textAreaCompName: "多行文本", - textAreaCompDesc: "多行文本组件", - textAreaCompKeywords: "", - passwordCompName: "密码输入框", - passwordCompDesc: "密码输入框组件", - passwordCompKeywords: "", - richTextEditorCompName: "富文本", - richTextEditorCompDesc: "富文本编辑器组件", - richTextEditorCompKeywords: "", - numberInputCompName: "数字输入框", - numberInputCompDesc: "数字输入框组件", - numberInputCompKeywords: "", - sliderCompName: "滑块", - sliderCompDesc: "滑块组件", - sliderCompKeywords: "", - rangeSliderCompName: "范围滑块", - rangeSliderCompDesc: "范围滑块组件", - rangeSliderCompKeywords: "", - ratingCompName: "评分", - ratingCompDesc: "评分组件", - ratingCompKeywords: "", - switchCompName: "开关", - switchCompDesc: "开关组件", - switchCompKeywords: "", - selectCompName: "下拉单选", - selectCompDesc: "下拉单选组件", - selectCompKeywords: "", - multiSelectCompName: "下拉多选", - multiSelectCompDesc: "下拉多选组件", - multiSelectCompKeywords: "", - cascaderCompName: "级联选择", - cascaderCompDesc: "级联选择框组件", - cascaderCompKeywords: "", - checkboxCompName: "复选", - checkboxCompDesc: "复选框组件", - checkboxCompKeywords: "", - radioCompName: "单选", - radioCompDesc: "单选框组件", - radioCompKeywords: "", - segmentedControlCompName: "分段控件", - segmentedControlCompDesc: "分段控件组件", - segmentedControlCompKeywords: "", - fileUploadCompName: "附件", - fileUploadCompDesc: "文件上传组件", - fileUploadCompKeywords: "", - dateCompName: "日期", - dateCompDesc: "日期组件", - dateCompKeywords: "", - dateRangeCompName: "日期范围", - dateRangeCompDesc: "日期范围组件", - dateRangeCompKeywords: "", - timeCompName: "时间", - timeCompDesc: "时间组件", - timeCompKeywords: "", - timeRangeCompName: "时间范围", - timeRangeCompDesc: "时间范围组件", - timeRangeCompKeywords: "", - buttonCompName: "按钮", - buttonCompDesc: "按钮组件", - buttonCompKeywords: "", - linkCompName: "链接", - linkCompDesc: "链接组件", - linkCompKeywords: "", - scannerCompName: "扫码", - scannerCompDesc: "扫码组件", - scannerCompKeywords: "", - dropdownCompName: "下拉按钮组", - dropdownCompDesc: "下拉按钮组组件", - dropdownCompKeywords: "", - toggleButtonCompName: "切换按钮", - toggleButtonCompDesc: "切换按钮组件", - toggleButtonCompKeywords: "", - textCompName: "文本", - textCompDesc: "文本组件", - textCompKeywords: "", - tableCompName: "表格", - tableCompDesc: "表格组件", - tableCompKeywords: "", - imageCompName: "图片", - imageCompDesc: "图片组件", - imageCompKeywords: "", - progressCompName: "进度条", - progressCompDesc: "进度条组件", - progressCompKeywords: "", - progressCircleCompName: "圆形进度条", - progressCircleCompDesc: "圆形进度条组件", - progressCircleCompKeywords: "", - fileViewerCompName: "文件查看", - fileViewerCompDesc: "文件查看组件", - fileViewerCompKeywords: "", - dividerCompName: "分割线", - dividerCompDesc: "分割线组件", - dividerCompKeywords: "", - qrCodeCompName: "二维码", - qrCodeCompDesc: "二维码组件", - qrCodeCompKeywords: "", - formCompName: "表单", - formCompDesc: "表单组件", - formCompKeywords: "", - jsonSchemaFormCompName: "JSON表单", - jsonSchemaFormCompDesc: "JSON表单组件", - jsonSchemaFormCompKeywords: "", - containerCompName: "容器", - containerCompDesc: "容器组件", - containerCompKeywords: "", - floatTextContainerCompName: "浮动文本容器", - floatTextContainerCompDesc: "浮动文本容器组件", - floatTextContainerCompKeywords: "", - collapsibleContainerCompName: "可折叠容器", - collapsibleContainerCompDesc: "可折叠容器组件", - collapsibleContainerCompKeywords: "", - tabbedContainerCompName: "选项卡", - tabbedContainerCompDesc: "选项卡组件", - tabbedContainerCompKeywords: "", - modalCompName: "对话框", - modalCompDesc: "对话框组件", - modalCompKeywords: "", - listViewCompName: "列表视图", - listViewCompDesc: "列表视图组件", - listViewCompKeywords: "", - gridCompName: "网格", - gridCompDesc: "网格组件", - gridCompKeywords: "", - navigationCompName: "导航", - navigationCompDesc: "导航组件", - navigationCompKeywords: "", - iframeCompName: "嵌入网页", - iframeCompDesc: "iframe嵌入网页组件", - iframeCompKeywords: "", - customCompName: "自定义组件", - customCompDesc: "自定义组件", - customCompKeywords: "", - moduleCompName: "模块", - moduleCompDesc: "模块组件", - moduleCompKeywords: "", - jsonExplorerCompName: "JSON浏览", - jsonExplorerCompDesc: "JSON浏览组件", - jsonExplorerCompKeywords: "", - jsonEditorCompName: "JSON 编辑器", - jsonEditorCompDesc: "JSON 编辑器组件", - jsonEditorCompKeywords: "", - treeCompName: "树形组件", - treeCompDesc: "树形组件", - treeCompKeywords: "", - treeSelectCompName: "树形选择", - treeSelectCompDesc: "树形选择框组件", - treeSelectCompKeywords: "", - audioCompName: "音频", - audioCompDesc: "音频组件", - audioCompKeywords: "", - videoCompName: "视频", - videoCompDesc: "视频组件", - videoCompKeywords: "", - drawerCompName: "抽屉", - drawerCompDesc: "抽屉组件", - drawerCompKeywords: "", - chartCompName: "图表", - chartCompDesc: "图表组件", - chartCompKeywords: "", - carouselCompName: "轮播图", - carouselCompDesc: "轮播图组件", - carouselCompKeywords: "", - imageEditorCompName: "图片编辑器", - imageEditorCompDesc: "图片编辑器组件", - imageEditorCompKeywords: "", - mermaidCompName: "美人鱼图表", - mermaidCompDesc: "根据文本渲染美人鱼图表", - mermaidCompKeywords: "", - calendarCompName: "日历", - calendarCompDesc: "日历组件", - calendarCompKeywords: "", - signatureCompName: "签名", - signatureCompDesc: "签名组件", - signatureCompKeywords: "", - jsonLottieCompName: "Lottie动画", - jsonLottieCompDesc: "Lottie动画组件", - jsonLottieCompKeywords: "", - timelineCompName: "时间线", - timelineCompDesc: "时间线组件", - timelineCompKeywords: "sjx", - commentCompName: "评论", - commentCompDesc: "评论组件", - commentCompKeywords: "pl", - mentionCompName: "提及", - mentionCompDesc: "提及组件", - mentionCompKeywords: "tj", - autoCompleteCompName: "自动完成", - autoCompleteCompDesc: "自动完成", - autoCompleteCompKeywords: "zdwc", - responsiveLayoutCompName: "响应式布局", - responsiveLayoutCompDesc: "响应式布局", - responsiveLayoutCompKeywords: "", - iconCompName: "图标", - iconCompDesc: "图标", - iconCompKeywords: "tb", - "pageLayoutCompName": "布局容器", - "pageLayoutCompDesc": "一个容器,用于创建包含页眉、页脚和主要内容区域的布局", - "pageLayoutCompKeywords": "布局、容器、导航、页面", - "kanbanCompName" : "看板(预览!)", - "kanbanCompDesc" : "一个用于可视化工作流程的板,其中列代表工作阶段,卡片代表任务。", - "kanbanCompKeywords" : "看板、板、工作流程、任务", - }, - - comp: { - ...en.comp, - menuViewDocs: "查看文档", - menuViewPlayground: "查看组件游乐场", - menuUpgradeToLatest: "升级到最新版本", - nameNotEmpty: "不能为空", - nameRegex: "必须以字母开头,只能包含字母、数字和下划线(_)", - nameJSKeyword: "不能是 JavaScript 关键字", - nameGlobalVariable: "不能是全局变量名", - nameExists: "名称 {name} 已存在", - getLatestVersionMetaError: "获取最新版本失败,请稍后重试.", - needNotUpgrade: "当前版本已经是最新版本.", - compNotFoundInLatestVersion: "最新版本中找不到当前组件.", - upgradeSuccess: "成功升级到最新版本.", - searchProp: "搜索属性", - }, - "meeting": { - ...en.meeting, - "logLevel": "Agora SDK 日志级别", - "placement": "会议抽屉的摆放", - "meeting": "会议设置", - "cameraView": "摄像头视图", - "cameraViewDesc": "本地用户(主机)的摄像头视图", - "screenShared": "屏幕共享", - "screenSharedDesc": "本地用户(主机)共享的屏幕", - "audioUnmuted": "音频静音", - "audioMuted": "音频静音", - "videoClicked": "点击视频", - "videoOff": "关闭视频", - "videoOn": "视频", - "size": "尺寸", - "top": "返回顶部", - "host": "会议室主机。您需要将主机作为自己的应用程序逻辑进行管理", - "participants": "会议室与会者", - "shareScreen": "本地用户共享的显示屏幕", - "appid": "Agora 应用 ID", - "meetingName": "会议名称", - "localUserID": "主机用户 ID", - "userName": "主机用户名", - "rtmToken": "Agora RTM 代币", - "rtcToken": "Agora RTC 代币", - "noVideo": "无视频", - "profileImageUrl": "简介图片 URL", - "right": "对", - "bottom": "底部", - "videoId": "视频流 ID", - "audioStatus": "音频状态", - "left": "左侧", - "widthTooltip": "像素或百分比,例如 520、60", - "heightTooltip": "像素,例如 378", - "openDrawerDesc": "开放式抽屉", - "closeDrawerDesc": "关闭抽屉", - "width": "抽屉宽度", - "height": "抽屉高度", - "actionBtnDesc": "操作按钮", - "broadCast": "广播信息", - "title": "会议名称", - "meetingCompName": "Agora 会议控制器", - "sharingCompName": "屏幕共享流", - "videoCompName": "摄像机流", - "videoSharingCompName": "屏幕共享流", - "meetingControlCompName": "控制按钮", - "meetingCompDesc": "会议组成部分", - "meetingCompControls": "会议控制", - "meetingCompKeywords": "Agora 会议、网络会议、协作", - "iconSize": "图标大小", - "userId": "主机用户 ID", - "roomId": "房间 ID", - "meetingActive": "持续会议", - "messages": "广播信息" - }, - jsonSchemaForm: { - ...en.jsonSchemaForm, - retry: "重试", - resetAfterSubmit: "成功提交后重置", - jsonSchema: "JSON数据", - uiSchema: "UI数据", - schemaTooltip: "查看", - defaultData: "默认数据", - dataDesc: "当前表单数据", - required: "必填", - maximum: "最大值为 {value}", - minimum: "最小值为 {value}", - exclusiveMaximum: "应小于 {value}", - exclusiveMinimum: "应大于 {value}", - multipleOf: "应为 {value} 的倍数", - minLength: "至少 {value} 个字符", - maxLength: "最多 {value} 个字符", - pattern: "应匹配模式 {value}", - format: "应符合格式 {value}", - }, - select: { - ...en.select, - inputValueDesc: "输入搜索值", - }, - customComp: { - ...en.customComp, - text: "今天是个好日子.", - triggerQuery: "触发查询", - updateData: "更新数据", - updateText: "我也心情很好!", - sdkGlobalVarName: "Lowcoder", - }, - tree: { - ...en.tree, - selectType: "选择类型", - placeholder: "请选择", - noSelect: "无选择", - singleSelect: "单选", - multiSelect: "多选", - checkbox: "复选框", - checkedStrategy: "选择策略", - showAll: "显示所有节点", - showParent: "仅显示父节点", - showChild: "仅显示子节点", - autoExpandParent: "自动展开父节点", - checkStrictly: "严格勾选", - checkStrictlyTooltip: "准确选择树节点;父节点和子节点之间没有关联", - treeData: "结构", - treeDataDesc: "当前数据", - value: "默认值", - valueDesc: "当前值", - expanded: "展开节点", - expandedDesc: "当前展开的节点", - defaultExpandAll: "默认展开所有节点", - showLine: "显示连接线", - showLeafIcon: "显示叶子图标", - treeDataAsia: "亚洲", - treeDataChina: "中国", - treeDataBeijing: "北京", - treeDataShanghai: "上海", - treeDataJapan: "日本", - treeDataEurope: "欧洲", - treeDataEngland: "英格兰", - treeDataFrance: "法国", - treeDataGermany: "德国", - treeDataNorthAmerica: "北美洲", - helpLabel: "节点标题", - helpValue: "树中唯一的节点值", - helpChildren: "子节点", - helpDisabled: "禁用节点", - helpSelectable: "节点是否可选(单选/多选类型)", - helpCheckable: "是否显示复选框(复选框类型)", - helpDisableCheckbox: "禁用复选框(复选框类型)", - }, - moduleContainer: { - ...en.moduleContainer, - eventTest: "事件测试", - methodTest: "方法测试", - inputTest: "输入测试", - }, - password: { - ...en.password, - label: "密码", - visibilityToggle: "显示可见性切换", - }, - richTextEditor: { - ...en.richTextEditor, - placeholder: "请输入...", - hideToolbar: "隐藏工具栏", - content: "内容", - title: "标题", - save: "保存", - link: "链接:", - edit: "编辑", - remove: "移除", - }, - numberInput: { - ...en.numberInput, - formatter: "格式", - precision: "精度", - allowNull: "允许空值", - thousandsSeparator: "显示千位分隔符", - controls: "显示增加/减少按钮", - step: "步长", - standard: "标准", - percent: "百分比", - }, - slider: { - ...en.slider, - step: "步长", - stepTooltip: "该值必须大于0且可被(最大值-最小值)整除", - }, - rating: { - ...en.rating, - max: "最大评分", - allowHalf: "允许半颗星", - }, - optionsControl: { - ...en.optionsControl, - optionList: "选项列表", - option: "选项", - optionI: "选项 {i}", - viewDocs: "查看文档", - tip: '“item”和“i”变量代表数据数组中每个项的值和索引', - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - "title": "步骤", - "subTitle": "子标题", - "description": "描述", - "status": "状态", - }, - "step" : { - ...en.step, - "initialValue": "初始值", - "initialValueTooltip": "视觉编号的起始位置。必须是 1 或更高。", - "valueDesc": "当前价值", - "size" : "台阶大小", - "sizeSmall" : "小型", - "sizeDefault" : "默认值", - "percent" : "步骤 百分比", - "type" : "步骤类型", - "typeDefault" : "标准", - "typeNavigation" : "导航", - "typeInline" : "内联", - "direction" : "步骤 方向", - "directionVertical" : "垂直", - "directionHorizontal" : "横向", - "labelPlacement" : "步骤 标签放置", - "status" : "步骤状态", - "statusWait" : "等待", - "statusProcess" : "过程", - "statusFinish" : "完成", - "statusError" : "错误", - "showDots" : "用圆点代替数字", - "showIcons" : "显示图标而不是数字", - "responsive" : "响应式", - "selectable" : "可选择", - }, - radio: { - ...en.radio, - options: "选项", - horizontal: "水平", - horizontalTooltip: "水平布局在空间不足时自动换行", - vertical: "垂直", - verticalTooltip: "垂直布局始终以单列显示", - autoColumns: "自动列", - autoColumnsTooltip: "自动列布局根据空间自动调整顺序,以多列显示", - }, - cascader: { - ...en.cascader, - options: "结构", - }, - selectInput: { - ...en.selectInput, - valueDesc: "当前选择的值", - selectedIndexDesc: "当前选择的值的索引,如果未选择任何值则为-1", - selectedLabelDesc: "当前选择的值的标签", - }, - - file: { - ...en.file, - typeErrorMsg: "必须是一个带有有效文件大小单位的数字,或者是一个无单位的字节数.", - fileEmptyErrorMsg: "上传失败.文件大小为空.", - fileSizeExceedErrorMsg: "上传失败.文件大小超过限制.", - minSize: "最小大小", - minSizeTooltip: `上传文件的最小大小,可选择使用文件大小单位(例如:"5kb"、"10MB").如果没有提供单位,该值将被视为字节数.`, - maxSize: "最大大小", - maxSizeTooltip: `上传文件的最大大小,可选择使用文件大小单位(例如:"5kb"、"10MB").如果没有提供单位,该值将被视为字节数.`, - single: "单个", - multiple: "多个", - directory: "目录", - upload: "浏览", - fileType: "文件类型", - reference: "请参考", - fileTypeTooltipUrl: - "https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file", - fileTypeTooltip: "唯一的文件类型指定", - uploadType: "上传类型", - showUploadList: "显示上传列表", - maxFiles: "最大文件数", - filesValueDesc: "当前上传文件的内容以Base64编码", - filesDesc: "当前上传文件的列表.详细信息请参阅", - clearValueDesc: "清除所有文件", - parseFiles: "解析文件", - parsedValueTooltip1: - "如果解析文件解析成功,上传的文件将解析为对象、数组或字符串.解析后的数据可以通过parsedValue数组访问.", - parsedValueTooltip2: - "支持Excel、JSON、CSV和文本文件.其他格式将返回null.", - }, - date: { - ...en.date, - format: "格式", - formatTip: "支持:\n" + "YYYY-MM-DD HH:mm:ss\nYYYY-MM-DD\n时间戳", - reference: "请参考", - showTime: "显示时间", - start: "开始日期", - end: "结束日期", - year: "年", - quarter: "季度", - month: "月", - week: "周", - date: "日期", - clearAllDesc: "清除全部", - resetAllDesc: "重置全部", - placeholder: "选择日期", - startDate: "开始日期", - endDate: "结束日期", - }, - time: { - ...en.time, - start: "开始时间", - end: "结束时间", - formatTip: "支持格式:\n" + "HH:mm:ss\n时间戳", - placeholder: "选择时间", - startTime: "开始时间", - endTime: "结束时间", - }, - button: { - ...en.button, - prefixIcon: "前缀图标", - suffixIcon: "后缀图标", - button: "按钮", - formToSubmit: "要提交的表单", - default: "默认", - submit: "提交", - textDesc: "当前显示在按钮上的文本", - loadingDesc: "按钮是否处于加载状态?如果为true,则当前按钮正在加载", - formButtonEvent: "按钮事件", - }, - link: { - ...en.link, - link: "链接", - textDesc: "当前显示在链接上的文本", - loadingDesc: "链接是否处于加载状态?如果为true,则当前链接正在加载", - }, - scanner: { - text: "点击扫码", - camera: "摄像头{index}", - changeCamera: "切换摄像头", - continuous: "连续扫描", - uniqueData: "忽略重复数据", - maskClosable: "点击背景后关闭", - errTip: "请在HTTPS模式或本地主机模式下使用此组件", - }, - dropdown: { - onlyMenu: "仅菜单", - textDesc: "当前显示在按钮上的文本", - triggerMode: "触发方式" - }, - textShow: { - // eslint-disable-next-line only-ascii/only-ascii - text: "### 👋 你好,{name}", - valueTooltip: "Markdown支持大多数HTML标签和属性.出于安全原因,禁用了iframe、script和其他标签.", - verticalAlignment: "垂直对齐", - horizontalAlignment: "水平对齐", - textDesc: "在当前文本框中显示的文本", - }, - table: { - ...en.table, - editable: "可编辑", - columnNum: "列数", - viewModeResizable: "用户调整列宽", - viewModeResizableTooltip: "是否允许调整列宽.", - "visibleResizables": "显示调整大小句柄", - "visibleResizablesTooltip": "在表头显示可见的调整大小句柄", - showVerticalRowGridBorder: "显示垂直行网格边框", - showHorizontalRowGridBorder: "显示水平行网格边框", - showFilter: "显示筛选按钮", - showRefresh: "显示刷新按钮", - showDownload: "显示下载按钮", - columnSeparator: "柱分离器", - columnSeparatorTooltip: "下载的 CSV 文件中的列分隔符(\“分隔符\”)。 \n\n建议:\n- 逗号 (,)\n- 分号 (;)\n- 竖线 (|)\n- 制表符 (\\t)", - columnSetting: "显示列设置按钮", - searchText: "搜索文本", - searchTextTooltip: "搜索和筛选在表格中呈现的数据", - showQuickJumper: "显示快速跳转", - hideOnSinglePage: "只有一页时隐藏", - showSizeChanger: "显示分页大小切换按钮", - pageSizeOptions: "分页大小选项", - pageSize: "分页大小", - total: "总行数", - totalTooltip: "默认值为当前数据项的数量,可以从查询中获取,例如:'{{query1.data[0].count}}'", - filter: "筛选", - filterRule: "筛选规则", - chooseColumnName: "选择列", - chooseCondition: "选择条件", - clear: "清空", - columnShows: "显示字段", - selectAll: "全选", - and: "与", - or: "或", - contains: "包含", - notContain: "不包含", - equals: "等于", - isNotEqual: "不等于", - isEmpty: "为空", - isNotEmpty: "不为空", - greater: "大于", - greaterThanOrEquals: "大于等于", - lessThan: "小于", - lessThanOrEquals: "小于等于", - action: "操作", - columnValue: "列值", - columnValueTooltip: "'{{currentCell}}': 当前单元格数据\n" + "'{{currentRow}}': 当前行数据\n" + "'{{currentIndex}}': 当前数据索引(从0开始)\n" + "示例: '{{currentCell * 5}}' 显示原始值数据的5倍.", - columnTooltip: "列工具提示", - imageSrc: "图片链接", - imageSize: "图片尺寸", - columnTitle: "标题", - columnTitleTooltip: "标题工具提示", - dataMapping: "数据映射", - showTitle: "显示标题", - showTitleTooltip: "显示/隐藏表标题中的列标题", - sortable: "可排序", - align: "对齐方式", - fixedColumn: "固定列", - autoWidth: "自动宽度", - customColumn: "自定义列", - auto: "自动", - fixed: "固定", - columnType: "列类型", - numberStep: "步", - numberStepTooltip: "当前值增加或减少的数量。它可以是整数或小数", - precision: "精度", - float: "分数", - prefix: "字首", - suffix: "后缀", - text: "文本", - number: "数字", - link: "链接", - links: "多链接", - tag: "标签", - select: "下拉单选", - date: "日期", - dateTime: "日期时间", - badgeStatus: "状态", - button: "按钮", - image: "图片", - boolean: "布尔值", - rating: "评分", - progress: "进度", - option: "操作", - optionList: "操作列表", - option1: "操作1", - status: "状态", - statusTooltip: "可选值: success, error, default, warning, processing", - primaryButton: "主要", - defaultButton: "默认", - type: "类型", - tableSize: "表格尺寸", - hideHeader: "隐藏表头", - hideToolbar: "隐藏表工具栏(页脚)", - fixedHeader: "固定表头", - fixedHeaderTooltip: "垂直滚动表格的标题将被固定", - fixedToolbar: "固定工具栏", - fixedToolbarTooltip: "工具栏将根据位置固定在可垂直滚动的表格上", - hideBordered: "隐藏列边框", - "showHeaderGridBorder": "显示标题网格边框", - "showRowGridBorder": "显示行网格边框", - deleteColumn: "删除列", - confirmDeleteColumn: "确认删除列:", - small: "小", - middle: "中", - large: "大", - refreshButtonTooltip: "数据发生变化,点击重新生成列.", - changeSetDesc: "表示可编辑表格的更改的对象,仅包含已更改的单元格.行优先,列次之.", - selectedRowDesc: "提供当前选中行的数据,指示如果用户在行上点击按钮/链接时触发的行", - selectedRowsDesc: "在多选模式下有用,与selectedRow相同", - pageNoDesc: "当前显示的页码,从1开始", - pageSizeDesc: "每页显示的行数", - sortColumnDesc: "当前选中的排序列的名称", - sortDesc: "当前行是否按降序排列", - pageOffsetDesc: "当前分页的起始位置,用于分页获取数据.示例:select * from users limit '{{table1.pageSize}}' offset '{{table1.pageOffset}}'", - displayDataDesc: "当前表格中显示的数据", - selectedIndexDesc: "在显示数据中选中的索引", - filterDesc: "表格筛选参数", - dataDesc: "当前表格使用的原始数据", - saveChanges: "保存更改", - cancelChanges: "取消更改", - rowSelectChange: "行选中变化", - rowClick: "行点击", - rowExpand: "行展开", - rowShrink: "行收缩", - search: "搜索", - download: "下载", - columnEdited: "栏目已编辑", - filterChange: "筛选变化", - sortChange: "排序变化", - pageChange: "分页变化", - refresh: "刷新", - rowColor: "条件行颜色", - rowColorDesc: "基于可选变量条件设置行颜色:\n" + "currentRow, currentOriginalIndex, currentIndex, columnTitle.\n" + "例如:'{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - cellColor: "条件单元格颜色", - cellColorDesc: - "使用 currentCell 根据单元格值有条件地设置单元格颜色:\n" + - "例如:'{{ currentCell == 3 ? \"green\" : \"red\" }}'", - rowHeight : "条件行高度", - rowHeightDesc: "根据可选变量有条件地设置行高: CurrentRow、CurrentOriginalIndex、CurrentIndex、ColumnTitle。例如:'{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - saveChangesNotBind: "未配置保存更改的事件处理程序.请在点击之前绑定至少一个事件处理程序.", - dynamicColumn: "使用动态列设置", - dynamicColumnConfig: "列设置", - dynamicColumnConfigDesc: "动态列设置.接受一个列名的数组,默认情况下所有列都可见.\n" + `示例:["id", "name"]`, - position: "位置", - showDataLoadSpinner: "显示加载指示器", - showValue: "显示值", - expandable: "可展开", - configExpandedView: "配置展开视图", - toUpdateRowsDesc: "可编辑表格中要更新的行的对象数组.", - empty: "空", - falseValues: "false时的文本", - allColumn: "全部", - visibleColumn: "可见", - emptyColumns: "当前没有可见列", - showSummary: "显示摘要行", - totalSummaryRows: "总行数", - inlineAddNewRow: "内联添加新行", - editMode: "编辑模式", - singleClick: "单击", - doubleClick: "双击", - showUpdateButtons: "显示保存/取消按钮", - }, - image: { - ...en.image, - src: "图片链接", - srcDesc: "图片链接地址", - supportPreview: "支持点击预览", - supportPreviewTip: "仅在图片链接有效时生效", - previewSrc: "图片预览链接" - }, - progress: { - ...en.progress, - value: "进度值", - valueTooltip: "完成百分比,取值范围为0到100", - showInfo: "显示数值", - valueDesc: "当前的进度值,取值范围为0到100", - showInfoDesc: "是否显示当前的进度值", - }, - fileViewer: { - ...en.fileViewer, - invalidURL: "未提供有效的URL链接", - src: "文件链接", - srcTooltip: - "通过嵌入HTML预览提供的链接内容,也可以支持base64编码的数据,例如:data:application/pdf; base64,AAA... CCC", - srcDesc: "文件链接地址", - }, - divider: { - ...en.divider, - title: "标题", - align: "对齐方式", - dashed: "虚线", - dashedDesc: "是否使用虚线", - titleDesc: "分割线标题", - alignDesc: "分割线标题对齐方式", - }, - QRCode: { - ...en.QRCode, - value: "内容", - valueTooltip: "数值的最大长度为2953个字符", - level: "容错级别", - levelTooltip: "指的是二维码被遮挡的部分仍然能够被扫描出来的程度.级别越高,二维码越复杂、被遮挡的部分越多,仍然能够被扫描出来的可能性就越大", - includeMargin: "显示边距", - image: "图片", - valueDesc: "二维码的内容", - L: "L (低)", - M: "M (中)", - Q: "Q (四分之一)", - H: "H (高)", - maxLength: "内容过长,请将长度设置为2953个字符以下", - }, - jsonExplorer: { - ...en.jsonExplorer, - indent: "缩进", - expandToggle: "展开切换", - theme: "主题", - valueDesc: "当前的 JSON 数据", - default: "默认", - defaultDark: "默认暗色", - neutralLight: "中性浅色", - neutralDark: "中性暗色", - azure: "Azure", - darkBlue: "深蓝色", - }, - audio: { - ...en.audio, - src: "音频链接", - defaultSrcUrl: "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - autoPlay: "自动播放", - loop: "循环播放", - srcDesc: "当前音频链接", - play: "播放", - playDesc: "音频播放时触发", - pause: "暂停", - pauseDesc: "音频暂停时触发", - ended: "播放结束", - endedDesc: "音频播放结束时触发", - }, - video: { - ...en.video, - src: "视频链接", - defaultSrcUrl: "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - poster: "视频链接", - defaultPosterUrl: "", - autoPlay: "自动播放", - loop: "循环播放", - controls: "隐藏控件", - volume: "音量", - playbackRate: "播放速度", - posterTooltip: "默认值为视频的第一帧", - autoPlayTooltip: - "视频加载后自动播放.将该值从true更改为false将暂停视频播放.(如果设置了封面,将通过封面按钮播放)", - controlsTooltip: - "隐藏视频播放控件.可能不被所有视频源完全支持.", - volumeTooltip: "设置播放器的音量,介于0和1之间", - playbackRateTooltip: "设置播放器的速度,介于1和2之间", - srcDesc: "当前视频URL链接", - play: "播放", - playDesc: "视频播放时触发", - pause: "暂停", - pauseDesc: "视频暂停时触发", - load: "加载", - loadDesc: "视频资源加载完成时触发", - ended: "结束", - endedDesc: "视频播放结束时触发", - currentTimeStamp: "视频的当前播放位置(以秒为单位)", - duration: "视频的总时长(以秒为单位)", - }, - media: { - ...en.media, - playDesc: "开始播放媒体.", - pauseDesc: "暂停媒体播放.", - loadDesc: "将媒体重置到开头并重新选择媒体资源.", - seekTo: "跳转到给定的秒数或介于0和1之间的分数位置", - seekToAmount: "秒数或介于0和1之间的分数", - showPreview: "显示预览", - }, - rangeSlider: { - ...en.rangeSlider, - start: "起始值", - end: "结束值", - step: "步长", - stepTooltip: "滑块的精确度,值必须大于0\n且能被(最大值-最小值)整除", - }, - iconControl: { - ...en.iconControl, - selectIcon: "选择图标", - insertIcon: "插入图标", - insertImage: "插入图片或", - }, - millisecondsControl: { - ...en.millisecondsControl, - timeoutTypeError: "请输入正确的超时时间,当前输入为:{value}", - timeoutLessThanMinError: "输入必须大于 {left},当前输入为:{value}", - }, - selectionControl: { - ...en.selectionControl, - single: "单选", - multiple: "多选", - close: "关闭", - mode: "选择模式", - }, - container: { - ...en.container, - title: "容器标题", - "titleTooltip": "集装箱标题", - "flowWidth": "内容宽度", - "floatType": "文本浮动类型", - }, - drawer: { - ...en.drawer, - closePosition: "关闭位置", - placement: "抽屉位置", - size: "大小", - top: "顶部", - right: "右侧", - bottom: "底部", - left: "左侧", - widthTooltip: "数字或百分比,例如 520,60%", - heightTooltip: "数字,例如 378", - openDrawerDesc: "打开抽屉", - closeDrawerDesc: "关闭抽屉", - width: "抽屉宽度", - height: "抽屉高度", - }, - settings: { - ...en.settings, - title: "设置", - userGroups: "用户组", - organization: "工作空间", - audit: "审计日志", - theme: "主题", - plugin: "插件", - advanced: "高级", - lab: "实验室", - branding: "品牌", - oauthProviders: "User Authentication", - appUsage: "应用程序使用日志", - environments: "环境", - premium: "高级版", - "AppUsage": "全球应用程序使用情况", - }, - memberSettings: { - ...en.memberSettings, - admin: "管理员", - superAdmin: "超级管理员", - adminGroupRoleInfo: "管理员可以管理群组成员和资源", - adminOrgRoleInfo: "拥有所有资源并可以管理群组.", - member: "成员", - memberGroupRoleInfo: "成员可以查看群组成员", - memberOrgRoleInfo: "仅能使用或访问他们有权限的资源.", - title: "成员", - createGroup: "创建分组", - newGroupPrefix: "新分组 ", - allMembers: "所有成员", - deleteModalTitle: "删除该分组", - deleteModalContent: "删除的分组将无法恢复.确定要删除该分组吗?", - addMember: "添加成员", - nameColumn: "用户名", - joinTimeColumn: "加入时间", - actionColumn: "操作", - roleColumn: "角色", - exitGroup: "退出分组", - moveOutGroup: "从分组中移除", - inviteUser: "邀请成员", - exitOrg: "离开", - exitOrgDesc: "确定要离开该工作空间吗?", - moveOutOrg: "移除", - moveOutOrgDescSaasMode: "确定要将用户 {name} 从该工作空间中移除吗?", - moveOutOrgDesc: "确定要移除用户 {name} 吗?此操作无法恢复.", - devGroupTip: "开发者组的成员具有创建应用程序和数据源的权限.", - lastAdminQuit: "最后一个管理员不能退出.", - organizationNotExist: "当前工作空间不存在", - inviteUserHelp: "您可以复制邀请链接发送给所想邀请的用户", - inviteUserLabel: "邀请链接:", - inviteCopyLink: "复制链接", - inviteText: - '{userName} 邀请您加入工作空间 "{organization}",点击链接加入:{inviteLink}', - groupName: "群组名称", - createTime: "创建时间", - manageBtn: "管理", - userDetail: "详细信息", - syncDeleteTip: "该分组已从通讯录源中删除", - syncGroupTip: "该分组是一个通讯录同步分组,无法进行编辑", - }, - orgSettings: { - ...en.orgSettings, - newOrg: "新工作空间", - title: "工作空间", - createOrg: "创建工作空间", - deleteModalTitle: "确定要删除该工作空间吗?", - deleteModalContent: - "您即将删除该工作空间 {permanentlyDelete}.一旦删除,工作空间将{notRestored}.", - permanentlyDelete: "永久删除", - notRestored: "无法恢复", - deleteModalLabel: "请输入工作空间名称{name}以确认操作:", - deleteModalTip: "请输入工作空间名称", - deleteModalErr: "工作空间名称不正确", - deleteModalBtn: "删除", - editOrgTitle: "编辑工作空间信息", - orgNameLabel: "工作空间名称:", - orgNameCheckMsg: "工作空间名称不能为空", - orgLogo: "工作空间徽标:", - logoModify: "修改图片", - inviteSuccessMessage: "成功加入工作空间", - inviteFailMessage: "加入工作空间失败", - uploadErrorMessage: "上传错误", - orgName: "工作空间名称", - }, - freeLimit: "免费试用", - tabbedContainer: { - ...en.tabbedContainer, - switchTab: "切换选项卡", - switchTabDesc: "切换选项卡时触发", - tab: "选项卡", - atLeastOneTabError: "选项卡容器至少保留一个选项卡", - selectedTabKeyDesc: "当前选中的选项卡", - iconPosition: "图标位置", - placement: "位置", - showTabs: "显示选项卡", - gutter: "间距", - gutterTooltip: "标签页之间的距离,单位为 px", - tabsCentered: "居中标签" - }, - formComp: { - ...en.formComp, - containerPlaceholder: "从右侧窗格拖动组件或", - openDialogButton: "从数据生成表单", - resetAfterSubmit: "成功提交后重置", - initialData: "初始数据", - disableSubmit: "禁用提交", - success: "表单生成成功", - selectCompType: "选择组件类型", - dataSource: "数据源:", - selectSource: "选择数据源", - table: "表格:", - selectTable: "选择表格", - columnName: "列名", - dataType: "数据类型", - compType: "组件类型", - required: "必填", - generateForm: "生成表单", - compSelectionError: "未配置的列类型", - compTypeNameError: "无法获取组件类型名称", - noDataSourceSelected: "未选择数据源", - noTableSelected: "未选择表格", - noColumn: "没有这一列", - noColumnSelected: "未选择列", - noDataSourceFound: "未找到支持的数据源,创建新的数据源", - noTableFound: "在此数据源中未找到表格,请选择其他数据源", - noColumnFound: "在此表格中未找到支持的列,请选取其他表格", - formTitle: "表单标题", - name: "名称", - nameTooltip: "表单数据中的属性名称,如果留空默认为组件名称", - notSupportMethod: "不支持的方法:", - notValidForm: "表单无效", - resetDesc: "将表单数据重置为默认值", - clearDesc: "清除表单数据", - setDataDesc: "设置表单数据", - valuesLengthError: "参数数量错误", - valueTypeError: "参数类型错误", - dataDesc: "当前表单数据", - loadingDesc: "表单是否正在加载中?", - }, - modalComp: { - ...en.modalComp, - close: "关闭", - closeDesc: "对话框关闭时触发", - openModalDesc: "打开对话框", - closeModalDesc: "关闭对话框", - visibleDesc: "是否可见?如果为true,当前对话框将弹出", - modalHeight: "对话框高度", - modalHeightTooltip: "数字,例如:222", - modalWidth: "对话框宽度", - modalWidthTooltip: "数字或百分比,例如:520,60%", - }, - listView: { - ...en.listView, - noOfRows: "行数", - noOfRowsTooltip: "列表中的行数 - 如果您需要呈现查询结果,通常将其设置为变量(例如,'{{query1.data.length}}').", - noOfColumns: "列数", - itemIndexName: "项目索引名称", - itemIndexNameDesc: "指向项目索引的变量名称,默认为{default}", - itemDataName: "项目数据名称", - itemDataNameDesc: "指向项目数据对象的变量名称,默认为{default}", - itemsDesc: "在列表中公开组件的数据", - dataDesc: "当前列表中使用的原始数据", - dataTooltip: "如果将其计算为数字,此字段将被视为行数,并且数据将被视为空.", - }, - navigation: { - ...en.navigation, - addText: "添加子菜单项", - logoURL: "Logo链接", - horizontalAlignment: "水平对齐", - logoURLDesc: "Logo链接", - itemsDesc: "导航菜单项", - }, - iframe: { - ...en.iframe, - URLDesc: "iframe源链接", - allowDownload: "下载", - allowSubmitForm: "提交表单", - allowMicrophone: "麦克风", - allowCamera: "摄像头", - allowPopup: "弹出窗口", - }, - droppadbleMenuItem: { - ...en.droppadbleMenuItem, - subMenu: "子菜单 {number}", - }, - navItemComp: { - ...en.navItemComp, - active: "活动的", - }, - switchComp: { - ...en.switchComp, - open: "打开", - close: "关闭", - openDesc: "切换打开时触发", - closeDesc: "切换关闭时触发", - valueDesc: "当前开关状态", - }, - signature: { - ...en.signature, - tips: "提示", - signHere: "在此处签名", - showUndo: "显示撤消", - showClear: "显示清除", - }, - localStorageComp: { - ...en.localStorageComp, - valueDesc: "当前存储的所有数据项", - setItemDesc: "添加一个数据项", - removeItemDesc: "移除一个数据项", - clearItemDesc: "清除所有数据项", - }, - utilsComp: { - ...en.utilsComp, - openUrl: "打开链接", - openApp: "打开应用", - copyToClipboard: "复制到剪贴板", - downloadFile: "下载文件", - }, - messageComp: { - ...en.messageComp, - info: "发送通知", - loading: "发送加载通知", - success: "发送成功通知", - warn: "发送警告通知", - error: "发送错误通知", - }, - toastComp: { - ...en.toastComp, - info: "发送通知", - loading: "发送加载通知", - success: "发送成功通知", - warn: "发送警告通知", - error: "发送错误通知", - }, - themeComp: { - ...en.themeComp, - switchTo: "切换主题", - }, - transformer: { - ...en.transformer, - preview: "预览", - docLink: "关于转换器", - previewSuccess: "预览成功", - previewFail: "预览失败", - deleteMessage: "删除转换器成功.您可以使用 {undoKey} 进行撤销.", - }, - temporaryState: { - ...en.temporaryState, - value: "初始值", - valueTooltip: "存储在临时状态中的初始值可以是任何有效的 JSON 值.", - docLink: "关于临时状态", - pathTypeError: "路径必须是字符串或值数组", - unStructuredError: "无结构数据 {prev} 不能被 {path} 更新", - valueDesc: "临时状态值", - deleteMessage: "临时状态已成功删除.您可以使用 {undoKey} 进行撤销.", - }, - dataResponder: { - ...en.dataResponder, - data: "数据", - dataDesc: "当前数据响应器的数据", - dataTooltip: "当此数据发生变化时,将触发后续操作.", - docLink: "关于数据响应器", - deleteMessage: "数据响应器已成功删除.您可以使用 {undoKey} 进行撤销.", - }, - theme: { - ...en.theme, - title: "主题", - createTheme: "创建主题", - themeName: "主题名称:", - themeNamePlaceholder: "请输入主题名称", - defaultThemeTip: "默认主题:", - createdThemeTip: "您创建的主题:", - option: "选项{index}", - input: "输入", - confirm: "确定", - emptyTheme: "没有可用的主题", - click: "", - toCreate: "", - nameColumn: "名称", - defaultTip: "默认", - updateTimeColumn: "更新时间", - edit: "编辑", - cancelDefaultTheme: "取消默认主题", - setDefaultTheme: "设为默认主题", - copyTheme: "复制主题", - setSuccessMsg: "设置成功", - cancelSuccessMsg: "取消设置成功", - deleteSuccessMsg: "删除成功", - checkDuplicateNames: "主题名称已存在,请重新输入", - copySuffix: " 副本", - saveSuccessMsg: "保存成功", - leaveTipTitle: "提示", - leaveTipContent: "您还没有保存,确认离开吗?", - leaveTipOkText: "离开", - goList: "返回列表", - saveBtn: "保存", - mainColor: "主要颜色", - text: "文本颜色", - defaultTheme: "默认", - yellow: "黄色", - green: "绿色", - previewTitle: "主题预览\n使用您的主题颜色的示例组件", - dateColumn: "日期", - emailColumn: "电子邮件", - phoneColumn: "电话", - subTitle: "标题", - linkLabel: "链接", - linkUrl: "app.lowcoder.cloud", - progressLabel: "进度", - sliderLabel: "滑块", - radioLabel: "单选按钮", - checkboxLabel: "复选框", - buttonLabel: "按钮", - switch: "开关", - previewDate: "2022/10/16", - previewEmail1: "ted.com", - previewEmail2: "skype.com", - previewEmail3: "imgur.com", - previewEmail4: "globo.com", - previewPhone1: "+63-317-333-0093", - previewPhone2: "+30-668-580-6521", - previewPhone3: "+86-369-925-2071", - previewPhone4: "+7-883-227-8093", - chartPreviewTitle: "图表样式预览", - chartSpending: "支出", - chartBudget: "预算", - chartAdmin: "管理", - chartFinance: "财务", - chartSales: "销售", - chartFunnel: "漏斗图", - chartShow: "展示", - chartClick: "点击", - chartVisit: "访问", - chartQuery: "查询", - chartBuy: "购买", - }, - pluginSetting: { - ...en.pluginSetting, - title: "插件", - npmPluginTitle: "npm 插件", - npmPluginDesc: "为当前工作空间中的所有应用程序设置 npm 插件.", - npmPluginEmpty: "尚未添加 npm 插件.", - npmPluginAddButton: "添加 npm 插件", - saveSuccess: "保存成功", - }, - advanced: { - ...en.advanced, - title: "高级", - defaultHomeTitle: "默认首页", - defaultHomeHelp: - "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", - defaultHomePlaceholder: "选择默认首页", - saveBtn: "保存", - preloadJSTitle: "预加载 JavaScript", - preloadJSHelp: "为当前工作空间中的所有应用程序设置预加载的 JavaScript 代码.", - preloadCSSTitle: "预加载 CSS", - preloadCSSHelp: "为当前工作空间中的所有应用程序设置预加载的 CSS 代码.", - preloadCSSApply: "应用到工作空间的首页", - preloadLibsTitle: "JavaScript 库", - preloadLibsHelp: - "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", - preloadLibsEmpty: "尚未添加 JavaScript 库", - preloadLibsAddBtn: "添加库", - saveSuccess: "保存成功", - "APIConsumption": "API 消耗", - "APIConsumptionDescription": "API 消耗是指当前工作空间中所有应用程序的 API 消耗情况,包括调用次数和调用时间.", - "overallAPIConsumption": "总体 API 消耗", - "lastMonthAPIConsumption": "上个月 API 消耗", - "showHeaderInPublicApps": "在公共视图中显示标题", - "showHeaderInPublicAppsHelp": "设置所有应用程序的标题在公共视图中的可见性", - }, - branding: { - ...en.branding, - title: "品牌", - logoTitle: "Logo", - logoHelp: "仅支持 .JPG、.SVG 或 .PNG 格式", - faviconTitle: "Favicon", - faviconHelp: "仅支持 .JPG、.SVG 或 .PNG 格式", - brandNameTitle: "品牌名称", - headColorTitle: "头部颜色", - save: "保存", - saveSuccessMsg: "保存成功", - upload: "点击上传", - }, - networkMessage: { - ...en.networkMessage, - 400: "请求参数错误", - 200: "请求成功", - 404: "请求资源不存在", - 201: "请求成功,资源已创建", - 500: "服务器忙碌,请稍后重试", - 0: "无法连接到服务器,请检查您的网络", - 401: "身份验证失败,请重新登录", - 403: "没有权限,请联系管理员进行授权", - timeout: "请求超时", - }, - share: { - ...en.share, - title: "分享", - viewer: "可查看", - editor: "可编辑", - owner: "拥有者", - datasourceViewer: "可使用", - datasourceOwner: "可管理", - }, - debug: { - ...en.debug, - title: "标题", - switch: "切换组件: ", - }, - module: { - ...en.module, - emptyText: "无数据", - circularReference: "循环引用,当前模块/应用程序无法使用!", - emptyTestInput: "当前模块没有输入可以测试", - emptyTestMethod: "当前模块没有可测试的方法", - name: "名称", - input: "输入", - params: "参数", - emptyParams: "尚未添加参数", - emptyInput: "尚未添加输入", - emptyMethod: "尚未添加方法", - emptyOutput: "尚未添加输出", - data: "数据", - string: "字符串", - number: "数字", - array: "数组", - boolean: "布尔值", - query: "查询", - autoScaleCompHeight: "组件高度与容器自动调整", - excuteMethod: "执行方法 {name}", - method: "方法", - action: "动作", - output: "输出", - nameExists: "名称 {name} 已存在", - eventTriggered: "事件 {name} 被触发", - globalPromptWhenEventTriggered: "当事件被触发时显示全局提示", - emptyEventTest: "当前模块没有可测试的事件", - emptyEvent: "尚未添加事件", - event: "事件", - }, - resultPanel: { - ...en.resultPanel, - returnFunction: "返回值为函数.", - consume: "{time}", - JSON: "显示JSON", - }, - createAppButton: { - ...en.createAppButton, - creating: "创建中...", - created: "创建{name}", - }, - apiMessage: { - ...en.apiMessage, - authenticationFail: "用户身份验证失败,请重新登录", - verifyAccount: "需要验证账户", - functionNotSupported: "当前版本不支持此功能.请联系 Lowcoder 业务团队升级您的账户", - }, - globalErrorMessage: { - ...en.globalErrorMessage, - createCompFail: "创建组件{comp}失败", - notHandledError: "{method}方法未执行", - }, - aggregation: { - ...en.aggregation, - navLayout: "导航栏布局", - chooseApp: "选择应用", - iconTooltip: "支持图片链接或Base64", - hideWhenNoPermission: "未经授权的用户隐藏", - queryParam: "URL链接查询参数", - hashParam: "URL链接哈希参数", - tabBar: "选项卡栏", - emptyTabTooltip: "在右侧窗格上配置此页面", - }, - appSetting: { - ...en.appSetting, - title: "应用设置", - 450: "450px(手机)", - 800: "800px(平板)", - 1440: "1440px(笔记本电脑)", - 1920: "1920px(宽屏)", - 3200: "3200px(超大屏幕)", - autofill: "自动填充", - userDefined: "自定义", - default: "默认", - tooltip: "设置后关闭弹出框", - canvasMaxWidth: "最大画布宽度", - userDefinedMaxWidth: "自定义最大宽度", - inputUserDefinedPxValue: "请输入自定义像素值", - maxWidthTip: "最大宽度应大于或等于350", - themeSetting: "主题设置", - themeSettingDefault: "默认", - themeCreate: "创建主题", - appTitle: "标题", - appDescription: "描述", - appCategory: "类别", - }, - customShortcut: { - ...en.customShortcut, - title: "自定义快捷键", - shortcut: "快捷键", - action: "操作", - empty: "无快捷键", - placeholder: "按下快捷键", - otherPlatform: "其他", - space: "空格", - }, - profile: { - ...en.profile, - orgSettings: "工作区设置", - switchOrg: "切换工作区", - joinedOrg: "我的工作区", - createOrg: "创建工作区", - logout: "退出登录", - personalInfo: "个人信息", - bindingSuccess: "{sourceName}绑定成功", - uploadError: "上传出错", - editProfilePicture: "修改", - nameCheck: "名称不能为空", - name: "名称:", - namePlaceholder: "请输入您的名称", - toBind: "前往绑定", - binding: "正在绑定", - bindError: "参数错误,暂不支持绑定.", - bindName: "绑定{name}", - loginAfterBind: "绑定后,您可以使用{name}登录", - bindEmail: "绑定邮箱:", - email: "邮箱", - emailCheck: "请输入有效的邮箱", - emailPlaceholder: "请输入您的邮箱", - submit: "提交", - bindEmailSuccess: "邮箱绑定成功", - passwordModifiedSuccess: "密码修改成功", - passwordSetSuccess: "密码设置成功", - oldPassword: "旧密码:", - inputCurrentPassword: "请输入您的当前密码", - newPassword: "新密码:", - inputNewPassword: "请输入您的新密码", - confirmNewPassword: "确认新密码:", - inputNewPasswordAgain: "请再次输入您的新密码", - password: "密码:", - modifyPassword: "修改密码", - setPassword: "设置密码", - alreadySetPassword: "已设置密码", - setPassPlaceholder: "您可以使用密码登录", - setPassAfterBind: "账号绑定后,您可以设置密码", - socialConnections: "社交连接", - changeAvatar: "更改头像", - about: "关于", - userId: "用户身份", - createdAt: "创建于", - currentOrg: "当前组织", - settings: "设置", - uiLanguage: "用户界面语言", - info: "信息", - createdApps: "创建的应用程序", - createdModules: "创建的模块", - onMarketplace: "在市场上", - howToPublish: "如何在 Marketplace 上发布", - apiKeys: "API 密钥", - createApiKey: "创建 API 密钥", - apiKeyName: "姓名", - apiKeyDescription: "描述", - apiKey: "API密钥", - deleteApiKey: "删除 API 密钥", - deleteApiKeyContent: "您确定要删除此 API 密钥吗?", - deleteApiKeyError: "出了些问题。请再试一次。" - }, - shortcut: { - ...en.shortcut, - shortcutList: "键盘快捷键", - click: "点击", - global: "全局", - toggleShortcutList: "切换键盘快捷键", - editor: "编辑器", - toggleLeftPanel: "切换左侧面板", - toggleBottomPanel: "切换底部面板", - toggleRightPanel: "切换右侧面板", - toggleAllPanels: "切换所有面板", - preview: "预览", - undo: "撤销", - redo: "重做", - showGrid: "显示网格", - component: "组件", - multiSelect: "多选", - selectAll: "全选", - copy: "复制", - cut: "剪切", - paste: "粘贴", - move: "移动", - zoom: "调整大小", - delete: "删除", - deSelect: "取消选择", - queryEditor: "查询编辑器", - excuteQuery: "运行当前查询", - editBox: "文本编辑器", - formatting: "格式化", - openInLeftPanel: "在左侧面板中打开", - }, - help: { - ...en.help, - videoText: "概述", - onBtnText: "确定", - // eslint-disable-next-line only-ascii/only-ascii - permissionDenyTitle: "💡 无法创建新的应用程序或数据源?", - permissionDenyContent: - "您没有权限创建应用程序和数据源.请联系管理员加入开发者组.", - appName: "教程应用", - chat: "与我们聊天", - docs: "查看文档", - editorTutorial: "编辑器教程", - update: "有什么新功能?", - version: "版本", - versionWithColon: "版本:", - submitIssue: "提交问题", - }, - header: { - ...en.header, - nameCheckMessage: "名称不能为空", - viewOnly: "只读模式", - recoverAppSnapshotTitle: "恢复此版本?", - recoverAppSnapshotContent: "将当前应用程序恢复到 {time} 创建的版本.", - recoverAppSnapshotMessage: "恢复此版本", - returnEdit: "返回编辑器", - deploy: "发布", - export: "导出为 JSON", - editName: "编辑名称", - duplicate: "复制{type}", - snapshot: "历史", - scriptsAndStyles: "脚本和样式", - appSettings: "应用程序设置", - preview: "预览", - editError: "历史预览模式下,不支持任何操作.", - clone: "克隆", - editorMode_layout: "应用程序布局", - editorMode_logic: "应用程序逻辑", - editorMode_both: "两者", - editorMode_layout_tooltip: "在右侧窗口中自定义组件的外观和布局。调整它的外观、样式和动画。", - editorMode_logic_tooltip: "在右侧窗口中设置组件的工作和交互方式。管理其内容和交互行为。", - "AppEditingBlocked": "应用编辑已被阻止:", - "AppEditingBlockedHint": "在其他用户编辑此应用时,无法保存更改。", - "AppEditingBlockedMessage": "请稍候再检查应用的编辑状态。", - "AppEditingBlockedCheckStatus": "检查应用状态", - "AppEditingBlockedSomeone": "某人", - "AppEditingBlockedMessageSnipped": "正在编辑此应用", - }, - userAuth: { - ...en.userAuth, - registerByEmail: "通过电子邮件注册", - email: "电子邮件:", - inputEmail: "请输入您的电子邮件", - inputValidEmail: "请输入有效的电子邮件", - register: "注册", - userLogin: "用户登录", - login: "登录", - bind: "绑定", - passwordCheckLength: "至少 {min} 个字符", - passwordCheckContainsNumberAndLetter: "必须包含字母和数字", - passwordCheckSpace: "不能包含空格字符", - welcomeTitle: "🎉 欢迎使用 {productName} 🎉", - inviteWelcomeTitle: "{username} 邀请您登录 {productName}", - terms: "条款", - privacy: "隐私政策", - registerHint: "我已阅读并同意", - chooseAccount: "选择您的帐户", - signInLabel: "使用 {name} 登录", - bindAccount: "绑定帐户", - scanQrCode: "使用 {name} 扫描二维码", - invalidThirdPartyParam: "无效的第三方参数", - account: "帐户", - inputAccount: "请输入您的帐户", - ldapLogin: "LDAP登录", - resetPassword: "重置密码", - resetPasswordDesc: "重置用户 {name} 的密码.重置后将生成新密码.", - resetSuccess: "重置成功", - resetSuccessDesc: "密码重置成功.新密码为:{password}", - copyPassword: "复制密码", - poweredByLowcoder: "供电 Lowcoder.cloud" - }, - preLoad: { - ...en.preLoad, - jsLibraryHelpText: "通过URL链接向当前应用程序添加JavaScript库.lodash、day.js、uuid、numbro内置于系统中,可立即使用.JavaScript库在应用程序初始化之前加载,这可能会影响应用程序的性能.", - exportedAs: "导出为", - urlTooltip: "JavaScript库的URL链接,建议使用[unpkg.com](https://unpkg.com/)或[jsdelivr.net](https://www.jsdelivr.com/).", - recommended: "推荐", - viewJSLibraryDocument: "文档", - jsLibraryURLError: "无效的URL链接", - jsLibraryExist: "JavaScript库已存在", - jsLibraryEmptyContent: "未添加JavaScript库", - jsLibraryDownloadError: "JavaScript库下载错误", - jsLibraryInstallSuccess: "JavaScript库安装成功", - jsLibraryInstallFailed: "JavaScript库安装失败", - jsLibraryInstallFailedCloud: "可能该库在沙盒中不可用,[文档](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", - jsLibraryInstallFailedHost: "{message}", - add: "新增", - jsHelpText: "向当前应用程序添加全局方法或变量.", - cssHelpText: "向当前应用程序添加样式.由于系统进行迭代,DOM结构可能会发生变化.请尝试通过组件属性修改样式.", - scriptsAndStyles: "脚本和样式", - jsLibrary: "JavaScript库", - }, - editorTutorials: { - ...en.editorTutorials, - component: "组件", - componentContent: "右侧的组件区域拥有表格、按钮、输入框、选择器等组件,可以拖动到画布上进行使用.", - canvas: "画布", - canvasContent: "画布上所见即所得,您可以通过拖放来调整组件的布局和大小,使用键盘快捷键删除/复制/粘贴组件.", - queryData: "查询数据", - queryDataContent: `在此处创建新的查询,并连接到您的MySQL、PostgreSQL、MongoDB、Redis、Airtable等数据源.配置查询后,点击“运行”获取数据.`, - compProperties: "组件属性", - }, - homeTutorials: { - createAppContent: `🎉 欢迎使用{productName},点击“应用程序”开始创建您的第一个应用程序.`, - createAppTitle: "创建应用程序", - }, - history: { - ...en.history, - layout: "'{0}'布局调整", - upgrade: "升级'{0}'", - delete: "删除'{0}'", - add: "添加'{0}'", - modify: "修改'{0}'", - rename: "将'{1}'重命名为'{0}'", - recover: "恢复'{2}'的版本", - recoverVersion: "恢复版本", - andSoOn: "等等", - timeFormat: "MM DD HH:mm A", - emptyHistory: "无历史记录", - currentVersionWithBracket: "(当前)", - currentVersion: "当前版本", - justNow: "刚刚", - history: "历史记录", - }, - home: { - ...en.home, - profile: "你的个人资料", - allApplications: "所有应用", - allModules: "所有模块", - allFolders: "所有文件夹", - modules: "模块", - module: "模块", - trash: "回收站", - marketplace: "市场", - queryLibrary: "查询管理", - datasource: "数据源", - selectDatasourceType: "选择数据源类型", - home: "首页", - all: "全部", - app: "应用", - navigation: "导航", - navLayout: "桌面端导航", - navLayoutDesc: "便于桌面端设备导航的左侧菜单.", - mobileTabLayout: "移动端导航", - mobileTabLayoutDesc: "流畅的移动端设备浏览底部导航栏.", - folders: "文件夹", - folder: "文件夹", - rootFolder: "根目录", - import: "导入", - export: "导出为JSON", - inviteUser: "邀请成员", - createFolder: "创建文件夹", - createFolderSubTitle: "文件夹名称:", - moveToFolder: "移动到文件夹", - moveToTrash: "移动到回收站", - moveToFolderSubTitle: '将"{name}"移动到:', - folderName: "文件夹名称:", - resCardSubTitle: "{creator}于{time}创建", - trashEmpty: "回收站为空.", - projectEmpty: "这里没有内容.", - projectEmptyCanAdd: "您还没有任何应用程序.点击“新建”开始.", - name: "名称", - type: "类型", - creator: "创建者", - lastModified: "上次修改", - deleteTime: "删除时间", - createTime: "创建时间", - datasourceName: "数据源名称", - databaseName: "数据库名称", - nameCheckMessage: "名称不能为空", - deleteElementTitle: "永久删除", - moveToTrashSubTitle: "{type} {name} 将被移动到回收站.", - deleteElementSubTitle: "永久删除 {type} {name},无法恢复.", - deleteSuccessMsg: "删除成功", - deleteErrorMsg: "删除错误", - recoverSuccessMsg: "恢复成功", - newDatasource: "新建数据源", - creating: "创建中...", - chooseDataSourceType: "选择数据源类型", - folderAlreadyExists: "文件夹已存在", - newNavLayout: "{userName}的{name}", - newApp: "{userName}的新{name}", - importError: "导入错误,{message}", - exportError: "导出错误,{message}", - importSuccess: "导入成功", - fileUploadError: "文件上传错误", - fileFormatError: "文件格式错误", - groupWithSquareBrackets: "[组] ", - allPermissions: "所有者", - shareLink: "分享链接:", - copyLink: "复制链接", - appPublicMessage: "将应用设为公开,任何人都可以查看.", - modulePublicMessage: "将模块设为公开,任何人都可以查看.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "发布您的应用程序到Lowcoder市场.任何人都可以在那里查看和复制它.", - "moduleMarketplaceMessage": "发布您的模块到Lowcoder市场.任何人都可以在那里查看和复制它.", - "marketplaceGoodPublishing": "请确保您的应用程序命名准确、易于使用。发布前请删除任何敏感信息。此外,移除本地数据源,代之以静态内置临时数据", - "noMarketplaceApps": "市场上还没有应用程序", - "errorMarketplaceApps": "获取市场应用程序错误", - "localMarketplaceTitle": "本地市场", - "globalMarketplaceTitle": "Lowcoder 市场", - "allCategories": "所有类别", - memberPermissionList: "成员权限:", - orgName: "{orgName}管理员", - addMember: "添加成员", - addPermissionPlaceholder: "请输入姓名以搜索成员", - searchMemberOrGroup: "搜索成员或组:", - addPermissionErrorMessage: "添加权限失败,{message}", - copyModalTitle: '克隆"{name}"', - copyNameLabel: "{type}名称", - copyModalfolderLabel: "添加到文件夹", - copyNamePlaceholder: "请输入{type}名称", - chooseNavType: "请选择导航类型", - createNavigation: "创建导航", - }, - carousel: { - ...en.carousel, - dotPosition: "点位置", - autoPlay: "自动播放", - showDots: "显示点" - }, - - "support" : { - ...en.support, - "supportTitle": "Lowcoder 支持", - "supportContent": "如果您有任何疑问或需要帮助,请使用工单系统快速解决您的问题。", - "newSupportTicket": "新建支持工单", - "ticketTitle": "标题", - "priority": "优先级", - "assignee": "负责人", - "status": "工单状态", - "updatedTime": "更新时间", - "active": "激活", - "inactive": "未激活", - "noEmail": "没有邮箱", - "details": "详情", - "reloadTickets": "重新加载工单", - "createdDate": "创建日期", - "updatedDate": "更新日期", - "description": "问题描述", - "subtasks": "子任务", - "subtasksProgress": "所有子任务的进度", - "attachments": "问题附件", - "comments": "评论", - "addComment": "添加评论", - "addAttachment": "添加附件", - "edit": "编辑工单描述", - "save": "保存工单描述", - "cancel": "取消", - "submitComment": "提交评论", - "upload": "提交附件", - "selectFile": "选择文件", - "ticketDescriptionUpdated": "工单描述更新成功!", - "ticketDescriptionUpdateFailed": "更新工单描述失败。", - "writeComment": "写一条评论...", - "ticketCommentAdded": "评论添加成功!", - "ticketCommentFailed": "添加评论失败。", - "ticketCommentEmpty": "请先写评论再提交。", - "ticketAttachmentUploaded": "附件上传成功!", - "ticketAttachmentFailed": "附件上传失败。", - "ticketAttachmentEmpty": "请选择要上传的文件。", - "ticketFetchError": "加载工单失败。", - "ticketNotFound": "未找到工单。", - "addAttachmentFileSize": "文件必须小于5MB!", - "goBack": "返回", - "noDescription": "没有可用的描述。", - "createTicket": "创建新的支持工单", - "createTicketTitlePlaceholder": "输入标题(最多150个字符)", - "createTicketDescriptionTitle": "描述您的问题 - 详细信息越多越好:", - "createTicketDescriptionPlaceholder": "详细描述问题,包括:1)重现问题的步骤,2)预期行为与实际行为的差异,3)适用时的代码片段,4)受影响的具体组件、API 或配置", - "createTicketSubmit": "提交工单", - "createTicketInfoText": "当您的工单创建后,您可以在“详情”部分添加截图和评论。" - }, - + "lineHeightTip": "定义文字行高。例如:1.5,2,120%。", + }, + "export": { + ...en.export, + + "hiddenDesc": "如果为true,则隐藏组件", + "disabledDesc": "如果为true,则将组件置为灰色且不可交互", + "visibleDesc": "如果为true,则组件可见", + "inputValueDesc": "输入框的当前值", + "invalidDesc": "值是否无效", + "placeholderDesc": "未设置值时显示的文本", + "requiredDesc": "如果为true,则必须提供有效值", + "submitDesc": "提交表单", + "richTextEditorValueDesc": "编辑器的当前值", + "richTextEditorReadOnlyDesc": "如果为true,则编辑器为只读", + "richTextEditorHideToolBarDesc": "如果为true,则隐藏工具栏", + "jsonEditorDesc": "当前的JSON数据", + "sliderValueDesc": "当前选定的值", + "sliderMaxValueDesc": "当前区间的最大值", + "sliderMinValueDesc": "当前区间的最小值", + "sliderStartDesc": "当前选定起始点的值", + "sliderEndDesc": "当前选定结束点的值", + "ratingValueDesc": "当前选定的评分", + "ratingMaxDesc": "当前设置的最大评分", + "datePickerValueDesc": "当前选定的日期", + "datePickerFormattedValueDesc": "根据指定的格式格式化的选定日期", + "datePickerTimestampDesc": "日期的当前选定时间戳(秒)", + "dateRangeStartDesc": "当前选定的起始日期", + "dateRangeEndDesc": "当前选定的结束日期", + "dateRangeStartTimestampDesc": "开始日期的当前选定时间戳(秒)", + "dateRangeEndTimestampDesc": "结束日期的当前选定时间戳(秒)", + "dateRangeFormattedValueDesc": "根据指定的格式格式化的选定日期", + "dateRangeFormattedStartValueDesc": "根据指定的格式格式化的起始日期", + "dateRangeFormattedEndValueDesc": "根据指定的格式格式化的结束日期", + "timePickerValueDesc": "当前选定的时间", + "timePickerFormattedValueDesc": "根据指定的格式格式化的选定时间", + "timeRangeStartDesc": "当前选定的起始时间", + "timeRangeEndDesc": "当前选定的结束时间", + "timeRangeFormattedValueDesc": "根据指定的格式格式化的选定时间", + "timeRangeFormattedStartValueDesc": "根据指定的格式格式化的起始时间", + "timeRangeFormattedEndValueDesc": "根据指定的格式格式化的结束时间", + "timeZone": "时区", + "timeZoneDesc": "所选日期的时区", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "请输入有效的电子邮件地址", + "url": "请输入有效的URL链接", + "regex": "请输入与正则表达式匹配的内容", + "maxLength": "字符数过多,当前长度为{length},最大长度为{maxLength}", + "minLength": "字符数不足,当前长度为{length},最小长度为{minLength}", + "maxValue": "大于最大值,当前值为{value},最大值为{max}", + "minValue": "小于最小值,当前值为{value},最小值为{min}", + "maxTime": "大于最大时间,当前时间为{time},最大时间为{maxTime}", + "minTime": "小于最小时间,当前时间为{time},最小时间为{minTime}", + "maxDate": "大于最大日期,当前日期为{date},最大日期为{maxDate}", + "minDate": "小于最小日期,当前日期为{date},最小日期为{minDate}", + }, + "query": { + ...en.query, + + "noQueries": "没有可用的查询.", + "queryTutorialButton": "查看{value}文档", + "datasource": "数据源", + "newDatasource": "新建数据源", + "generalTab": "常规", + "notificationTab": "通知", + "variablesTab": "变量", + "advancedTab": "高级", + "showFailNotification": "执行失败时显示通知", + "failCondition": "失败条件", + "failConditionTooltip1": "自定义失败条件和相应的通知.", + "failConditionTooltip2": "如果任何条件返回true,则将查询标记为失败并触发相应的通知.", + "showSuccessNotification": "执行成功时显示通知", + "successMessageLabel": "成功消息", + "successMessage": "执行成功", + "notifyDuration": "持续时间", + "notifyDurationTooltip": "通知持续时间.时间单位可以是秒(s,默认)或毫秒(ms).默认值为{default}s,最大值为{max}s.", + "successMessageWithName": "{name}执行成功", + "failMessageWithName": "{name}执行失败:{result}", + "showConfirmationModal": "运行前显示确认对话框", + "confirmationMessageLabel": "确认消息", + "confirmationMessage": "您确定要运行此查询吗?", + "newQuery": "新建查询", + "newFolder": "新建文件夹", + "recentlyUsed": "最近使用", + "folder": "文件夹", + "folderNotEmpty": "文件夹不为空", + "dataResponder": "数据响应器", + "tempState": "临时状态", + "transformer": "转换器", + "quickRestAPI": "REST查询", + "quickStreamAPI": "Stream查询", + "quickGraphql": "GraphQL查询", + "quickAlasql": "本地 SQL 查询", + "databaseType": "数据库类型", + "chooseDatabase": "选择数据库", + "lowcoderAPI": "低编码器应用程序接口", + "executeJSCode": "运行JavaScript代码", + "importFromQueryLibrary": "从查询库导入", + "preparedDataQueries": "您准备的数据查询", + "adHocDataQueries": "Qick 数据查询(无需准备查询或数据源)", + "queryResultTransformer": "操作查询响应,在绑定前转换数据", + "queryResultReactor": "对动态数据值的任何变化做出反应", + "importFromFile": "从文件导入", + "triggerType": "触发条件...", + "triggerTypeAuto": "当输入更改或应用程序(页面)加载后", + "triggerTypePageLoad": "应用程序(页面)加载后", + "triggerTypeManual": "仅当您手动触发时", + "triggerTypeInputChange": "当输入更改时", + "triggerTypeQueryExec": "查询执行后", + "triggerTypeTimeout": "应用程序(页面)加载后和超时", + "delayTime": "延迟时间", + "chooseDataSource": "选择数据源", + "method": "方法", + "updateExceptionDataSourceTitle": "更新失败的数据源", + "updateExceptionDataSourceContent": "使用相同的失败数据源更新以下查询:", + "update": "更新", + "disablePreparedStatement": "禁用预编译语句", + "disablePreparedStatementTooltip": "禁用预编译语句可以动态生成SQL,但存在SQL注入的风险", + "timeout": "超时时间", + "timeoutTooltip": "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n默认值:{defaultSeconds}秒\n最大值:{maxSeconds}秒.\n\n例如:300(即300毫秒),800毫秒,5秒.", + "periodic": "定期运行此查询", + "periodicTime": "周期", + "periodicTimeTooltip": "连续执行之间的时间间隔.\n默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n最小值:100毫秒,低于此值将禁用周期性执行.\n\n例如:300(即300毫秒),800毫秒,5秒.", + "cancelPrevious": "忽略上一次未完成的执行结果.", + "cancelPreviousTooltip": "如果触发了新的执行,则之前未完成的执行结果将被忽略,这些被忽略的执行将不会触发查询的事件列表。", + "dataSourceStatusError": "如果触发新的执行,将忽略之前未完成的执行结果(如果之前的执行未完成),被忽略的执行将不会触发查询的事件列表.", + "success": "成功", + "fail": "失败", + "successDesc": "执行成功时触发", + "failDesc": "执行失败时触发", + "fixedDelayError": "查询未运行", + "execSuccess": "执行成功", + "execFail": "执行失败", + "execIgnored": "忽略了此查询的结果.", + "deleteSuccessMessage": "删除成功,您可以使用 {undoKey} 进行撤消.", + "dataExportDesc": "当前查询获取的数据", + "codeExportDesc": "当前查询状态代码", + "successExportDesc": "当前查询是否成功执行", + "messageExportDesc": "当前查询返回的信息", + "extraExportDesc": "当前查询的其他数据", + "isFetchingExportDesc": "当前查询是否在请求中", + "runTimeExportDesc": "当前查询的执行时间(毫秒)", + "latestEndTimeExportDesc": "最后运行时间", + "triggerTypeExportDesc": "触发类型", + "chooseResource": "选择资源", + "createDataSource": "创建新的数据源", + "editDataSource": "编辑", + "datasourceName": "数据源名称", + "datasourceNameRuleMessage": "请输入数据源名称", + "generalSetting": "常规设置", + "advancedSetting": "高级设置", + "port": "端口", + "portRequiredMessage": "请输入端口", + "portErrorMessage": "请输入正确的端口", + "connectionType": "连接类型", + "regular": "常规", + "host": "主机", + "hostRequiredMessage": "请输入主机域名或IP地址", + "userName": "用户名", + "password": "密码", + "encryptedServer": "-------- 服务器端加密 --------", + "uriRequiredMessage": "请输入URL链接", + "urlRequiredMessage": "请输入URL链接", + "uriErrorMessage": "请输入正确的URL链接", + "urlErrorMessage": "请输入正确的URL链接", + "httpRequiredMessage": "请输入http://或https://", + "databaseName": "数据库名称", + "databaseNameRequiredMessage": "请输入数据库名称", + "useSSL": "使用SSL", + "userNameRequiredMessage": "请输入用户名", + "passwordRequiredMessage": "请输入密码", + "authentication": "身份验证", + "authenticationType": "身份验证类型", + "sslCertVerificationType": "SSL证书验证", + "sslCertVerificationTypeDefault": "验证CA证书", + "sslCertVerificationTypeSelf": "验证自签名证书", + "sslCertVerificationTypeDisabled": "禁用", + "selfSignedCert": "自签名证书", + "selfSignedCertRequireMsg": "请提供您的证书", + "enableTurnOffPreparedStatement": "启用切换查询的预编译语句", + "enableTurnOffPreparedStatementTooltip": "您可以在查询的高级选项卡中启用或禁用预编译语句", + "serviceName": "服务名称", + "serviceNameRequiredMessage": "请输入您的服务名称", + "useSID": "使用SID", + "connectSuccessfully": "连接成功", + "saveSuccessfully": "保存成功", + "database": "数据库", + "cloudHosting": "云托管的Lowcoder无法访问您的本地服务,如使用127.0.0.1或localhost.请尝试连接公共网络数据源或使用反向代理来访问您的私有服务.", + "notCloudHosting": "对于Docker托管部署,Lowcoder使用桥接网络,因此对于主机地址,127.0.0.1和localhost是无效的.要访问本地机器上的数据源,请参考以下链接", + "howToAccessHostDocLink": "如何访问主机API/数据库", + "returnList": "返回列表", + "chooseDatasourceType": "选择数据源类型", + "viewDocuments": "文档", + "testConnection": "测试连接", + "save": "保存", + "whitelist": "白名单", + "whitelistTooltip": "当需要时,将以下Lowcoder的IP地址添加到数据源的白名单中.", + "address": "地址:", + "nameExists": "名称{name}已存在", + "jsQueryDocLink": "关于JavaScript查询", + "dynamicDataSourceConfigLoadingText": "加载额外数据源配置...", + "dynamicDataSourceConfigErrText": "无法加载额外数据源配置.", + "retry": "重试", + "categoryDatabase": "数据库", + "categoryBigdata": "大数据", + "categoryAi": "人工智能", + "categoryDevops": "开发运维", + "categoryAppdevelopment": "应用开发", + "categoryWorkflow": "工作流", + "categoryMessaging": "消息传递", + "categoryAssets": "资产与存储", + "categoryProjectManagement": "项目管理", + "categoryCrm": "客户关系管理", + "categoryEcommerce": "电子商务", + "categoryWebscrapers": "网络爬虫", + "categoryDocumentHandling": "报告与文档生成", + "categoryRPA": "机器人流程自动化", + "componentsUsingQueryTitle": "查询使用情况", + "componentsUsingQuery": "此查询在哪里使用", + "variables": "变量", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "键值对", + "object": "对象", + "allowMultiModify": "允许修改多行", + "allowMultiModifyTooltip": "如果选择此参数,将操作符合条件的所有行.否则,只会操作符合条件的第一行.", + "array": "数组", + "insertList": "插入列表", + "insertListTooltip": "当值不存在时插入的值", + "filterRule": "筛选规则", + "updateList": "更新列表", + "updateListTooltip": "已存在的值会被相同的插入列表值覆盖", + "sqlMode": "SQL模式", + "guiMode": "GUI模式", + "operation": "操作", + "insert": "插入", + "upsert": "插入,冲突时更新", + "update": "更新", + "delete": "删除", + "bulkInsert": "批量插入", + "bulkUpdate": "批量更新", + "table": "表", + "primaryKeyColumn": "主键列", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "原始命令", + "queryTutorialButton": "查看Elasticsearch API文档", + "request": "请求", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "行索引", + "spreadsheetId": "电子表格", + "sheetName": "工作表名称", + "readData": "读取数据", + "appendData": "追加行", + "updateData": "更新行", + "deleteData": "删除行", + "clearData": "清除行", + "serviceAccountRequireMessage": "请输入您的服务账号", + "ASC": "升序", + "DESC": "降序", + "sort": "排序", + "sortPlaceholder": "名称", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "导出为JSON", + "noInput": "当前查询没有输入", + "inputName": "名称", + "inputDesc": "描述", + "emptyInputs": "无输入", + "clickToAdd": "点击添加", + "chooseQuery": "选择查询", + "viewQuery": "查看查询", + "chooseVersion": "选择版本", + "latest": "最新", + "publish": "发布", + "historyVersion": "历史版本", + "deleteQueryLabel": "删除查询", + "deleteQueryContent": "删除后无法恢复查询.是否删除查询?", + "run": "运行", + "readOnly": "只读", + "exit": "退出", + "recoverAppSnapshotContent": "将当前查询恢复到版本 {version}", + "searchPlaceholder": "搜索查询", + "allQuery": "所有查询", + "deleteQueryTitle": "删除查询", + "unnamed": "未命名", + "publishNewVersion": "发布新版本", + "publishSuccess": "已发布", + "version": "版本", + "desc": "描述", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "请参考", + "extParamsTooltip": "配置更多连接参数", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "查询工作区用户", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "原始命令", + "command": "命令", + "queryTutorial": "查看Redis命令文档", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "如果选择{type},值的格式应为{object}.示例:{example}", + "text": "文本", + "file": "文件", + "extraBodyTooltip": "额外的body中的键值对将与JSON或表单数据类型一起添加到body中", + "forwardCookies": "转发cookies", + "forwardAllCookies": "转发所有cookies", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "附件", + "attachmentTooltip": "可与文件上传组件一起使用,需要将数据转换为:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "发件人", + "recipient": "收件人", + "carbonCopy": "抄送", + "blindCarbonCopy": "密送", + "subject": "主题", + "content": "内容", + "contentTooltip": "支持输入文本或HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "仪表板和报告", + "layout": "布局和导航", + "forms": "数据收集与表格", + "collaboration": "会议与合作", + "projectmanagement": "项目管理", + "scheduling": "日历和日程安排", + "documents": "文件和档案管理", + "itemHandling": "项目和签名处理", + "multimedia": "多媒体与动画", + "integration": "整合与扩展", + "legacy": "传统与过时", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "自动完成", + "autoCompleteCompDesc": "自动完成", + "autoCompleteCompKeywords": "zdwc", + "inputCompName": "输入框", + "inputCompDesc": "输入框组件", + "inputCompKeywords": "文本", + "textAreaCompName": "多行文本", + "textAreaCompDesc": "多行文本组件", + "textAreaCompKeywords": "多行、文本区域、输入、文本", + "passwordCompName": "密码输入框", + "passwordCompDesc": "密码输入框组件", + "passwordCompKeywords": "密码、安全、输入、隐藏", + "richTextEditorCompName": "富文本", + "richTextEditorCompDesc": "富文本编辑器组件", + "richTextEditorCompKeywords": "编辑器、文本、格式化、丰富内容", + "numberInputCompName": "数字输入框", + "numberInputCompDesc": "数字输入框组件", + "numberInputCompKeywords": "数字、输入、递增、递减", + "sliderCompName": "滑块", + "sliderCompDesc": "滑块组件", + "sliderCompKeywords": "滑块、范围、输入、图形", + "rangeSliderCompName": "范围滑块", + "rangeSliderCompDesc": "范围滑块组件", + "rangeSliderCompKeywords": "量程、滑块、双把手、过滤器", + "ratingCompName": "评分", + "ratingCompDesc": "评分组件", + "ratingCompKeywords": "评级、星级、反馈、意见", + "switchCompName": "开关", + "switchCompDesc": "开关组件", + "switchCompKeywords": "拨动、开关、开/关、控制", + "selectCompName": "下拉单选", + "selectCompDesc": "下拉单选组件", + "selectCompKeywords": "下拉、选择、选项、菜单", + "multiSelectCompName": "下拉多选", + "multiSelectCompDesc": "下拉多选组件", + "multiSelectCompKeywords": "多选、多重、下拉、选择", + "cascaderCompName": "级联选择", + "cascaderCompDesc": "级联选择框组件", + "cascaderCompKeywords": "级联、分层、下拉、层级", + "checkboxCompName": "复选", + "checkboxCompDesc": "复选框组件", + "checkboxCompKeywords": "复选框、选项、选择、切换", + "radioCompName": "单选", + "radioCompDesc": "单选框组件", + "radioCompKeywords": "单选、按钮、选择、单选", + "segmentedControlCompName": "分段控件", + "segmentedControlCompDesc": "分段控件组件", + "segmentedControlCompKeywords": "分段、控制、切换、选项", + "stepControlCompName": "步骤控制", + "stepControlCompDesc": "带有步骤选项的控件,可为表单或向导等应用程序提供可视化引导步骤。", + "stepControlCompKeywords": "步骤、控制、切换、选项", + "fileUploadCompName": "附件", + "fileUploadCompDesc": "文件上传组件", + "fileUploadCompKeywords": "文件、上传、拖放、选择", + "dateCompName": "日期", + "dateCompDesc": "日期组件", + "dateCompKeywords": "日期、选择器、日历、选择", + "dateRangeCompName": "日期范围", + "dateRangeCompDesc": "日期范围组件", + "dateRangeCompKeywords": "日期、选择、预订、筛选", + "timeCompName": "时间", + "timeCompDesc": "时间组件", + "timeCompKeywords": "时间、选择器、选择、时钟", + "timeRangeCompName": "时间范围", + "timeRangeCompDesc": "时间范围组件", + "timeRangeCompKeywords": "时间范围、选择、调度、持续时间", + "buttonCompName": "按钮", + "buttonCompDesc": "按钮组件", + "buttonCompKeywords": "按钮、提交、操作、导航", + "meetingControlCompName": "图标按钮", + "meetingCompDesc": "用于控制开始、结束、静音或共享等功能的按钮。", + "meetingCompKeywords": "控制、按钮、开始、结束", + "linkCompName": "链接", + "linkCompDesc": "链接组件", + "linkCompKeywords": "链接、超链接、导航、外部", + "scannerCompName": "扫码", + "scannerCompDesc": "扫码组件", + "scannerCompKeywords": "扫描仪、条形码、QR 码、扫描", + "dropdownCompName": "下拉按钮组", + "dropdownCompDesc": "下拉按钮组组件", + "dropdownCompKeywords": "下拉、菜单、选项、选择", + "toggleButtonCompName": "切换按钮", + "toggleButtonCompDesc": "切换按钮组件", + "toggleButtonCompKeywords": "切换、按钮、开关、状态", + "textCompName": "文本", + "textCompDesc": "文本组件", + "textCompKeywords": "文本、显示、静态、动态", + "tableCompName": "表格", + "tableCompDesc": "表格组件", + "tableCompKeywords": "表格、数据、排序、筛选", + "imageCompName": "图片", + "imageCompDesc": "图片组件", + "imageCompKeywords": "图像、显示、媒体、Base64", + "progressCompName": "进度条", + "progressCompDesc": "进度条组件", + "progressCompKeywords": "进度、指标、状态、任务", + "progressCircleCompName": "圆形进度条", + "progressCircleCompDesc": "圆形进度条组件", + "progressCircleCompKeywords": "圆圈、进度、指示器、加载", + "fileViewerCompName": "文件查看", + "fileViewerCompDesc": "文件查看组件", + "fileViewerCompKeywords": "文件、查看器、文档、图像", + "dividerCompName": "分割线", + "dividerCompDesc": "分割线组件", + "dividerCompKeywords": "分隔线、分隔符、布局、设计", + "qrCodeCompName": "二维码", + "qrCodeCompDesc": "二维码组件", + "qrCodeCompKeywords": "QR 码、扫描、条形码、信息", + "formCompName": "表单", + "formCompDesc": "表单组件", + "formCompKeywords": "表单、输入、容器、结构", + "jsonSchemaFormCompName": "JSON表单", + "jsonSchemaFormCompDesc": "JSON表单组件", + "jsonSchemaFormCompKeywords": "JSON、模式、表单、动态", + "containerCompName": "容器", + "containerCompDesc": "容器组件", + "containerCompKeywords": "容器、布局、组织、用户界面", + "floatTextContainerCompName": "浮动文本容器", + "floatTextContainerCompDesc": "浮动文本容器组件", + "floatTextContainerCompKeywords": "容器、布局、文本、流程", + "collapsibleContainerCompName": "可折叠容器", + "collapsibleContainerCompDesc": "可折叠容器组件", + "collapsibleContainerCompKeywords": "可折叠、容器、展开、折叠", + "tabbedContainerCompName": "选项卡", + "tabbedContainerCompDesc": "选项卡组件", + "tabbedContainerCompKeywords": "标签式、容器、导航、面板", + "pageLayoutCompName": "布局容器", + "pageLayoutCompDesc": "一个容器,用于创建包含页眉、页脚和主要内容区域的布局", + "pageLayoutCompKeywords": "布局、容器、导航、页面", + "modalCompName": "对话框", + "modalCompDesc": "对话框组件", + "modalCompKeywords": "模态、弹出、警报、表单", + "listViewCompName": "列表视图", + "listViewCompDesc": "列表视图组件", + "listViewCompKeywords": "列表、查看、显示、中继器", + "gridCompName": "网格", + "gridCompDesc": "网格组件", + "gridCompKeywords": "网格、布局、行、列", + "navigationCompName": "导航", + "navigationCompDesc": "导航组件", + "navigationCompKeywords": "导航、菜单、面包屑、标签", + "iframeCompName": "嵌入网页", + "iframeCompDesc": "iframe嵌入网页组件", + "iframeCompKeywords": "iframe、嵌入、网页、内容", + "customCompName": "自定义组件", + "customCompDesc": "自定义组件", + "customCompKeywords": "自定义、用户定义、灵活、可编程", + "moduleCompName": "模块", + "moduleCompDesc": "模块组件", + "moduleCompKeywords": "模块、微应用程序、功能、可重用", + "jsonExplorerCompName": "JSON浏览", + "jsonExplorerCompDesc": "JSON浏览组件", + "jsonExplorerCompKeywords": "JSON、资源管理器、数据、结构", + "jsonEditorCompName": "JSON 编辑器", + "jsonEditorCompDesc": "JSON 编辑器组件", + "jsonEditorCompKeywords": "JSON、编辑器、修改、验证", + "treeCompName": "树形组件", + "treeCompDesc": "树形组件", + "treeCompKeywords": "树、分层、数据、结构", + "treeSelectCompName": "树形选择", + "treeSelectCompDesc": "树形选择框组件", + "treeSelectCompKeywords": "树形、选择、分层、嵌套", + "audioCompName": "音频", + "audioCompDesc": "音频组件", + "audioCompKeywords": "音频、播放、声音、音乐", + "videoCompName": "视频", + "videoCompDesc": "视频组件", + "videoCompKeywords": "视频、多媒体、播放、嵌入", + "drawerCompName": "抽屉", + "drawerCompDesc": "抽屉组件", + "drawerCompKeywords": "抽屉、滑动、面板、导航", + "chartCompName": "图表", + "chartCompDesc": "图表组件", + "chartCompKeywords": "图表、图形、数据、可视化", + "carouselCompName": "轮播图", + "carouselCompDesc": "轮播图组件", + "carouselCompKeywords": "旋转木马、图像、旋转、展示", + "imageEditorCompName": "图片编辑器", + "imageEditorCompDesc": "图片编辑器组件", + "imageEditorCompKeywords": "图像、编辑器、操作、工具", + "mermaidCompName": "美人鱼图表", + "mermaidCompDesc": "根据文本渲染美人鱼图表", + "mermaidCompKeywords": "美人鱼、图表、示意图、流程图", + "calendarCompName": "日历", + "calendarCompDesc": "日历组件", + "calendarCompKeywords": "日历、日期、活动、日程安排", + "signatureCompName": "签名", + "signatureCompDesc": "签名组件", + "signatureCompKeywords": "签名、数字、批准、验证", + "jsonLottieCompName": "Lottie动画", + "jsonLottieCompDesc": "Lottie动画组件", + "jsonLottieCompKeywords": "lottie、动画、JSON、可扩展", + "timelineCompName": "时间线", + "timelineCompDesc": "时间线组件", + "timelineCompKeywords": "sjx", + "commentCompName": "评论", + "commentCompDesc": "评论组件", + "commentCompKeywords": "pl", + "mentionCompName": "提及", + "mentionCompDesc": "提及组件", + "mentionCompKeywords": "tj", + "responsiveLayoutCompName": "响应式布局", + "responsiveLayoutCompDesc": "响应式布局", + "responsiveLayoutCompKeywords": "响应、布局、适应、屏幕尺寸", + "splitLayoutCompName": "分割布局", + "splitLayoutCompDesc": "这是一个布局组件,用于组织多个视图区域和水平或垂直分隔区域。用户可通过拖放方式调整视图区域的宽度或高度。", + "splitLayoutCompKeywords": "分割、分割器、布局、适应、屏幕尺寸", + "iconCompName": "图标", + "iconCompDesc": "图标", + "iconCompKeywords": "tb", + "tourCompName": "旅游", + "tourCompDesc": "引导用户参观产品。", + "tourCompKeywords": "导览、产品导览、演练、互动演练", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "以山丘图格式显示项目管理状态数据的可视化组件。", + "hillchartCompKeywords": "项目管理、山丘图、可视化、数据", + "openLayersGeoMapCompName": "Openlayers 地理地图", + "openLayersGeoMapCompDesc": "使用 OpenLayers 显示交互式地图的组件,支持各种地图图层和功能。", + "openLayersGeoMapCompKeywords": "开放式图层、地理地图、交互式、地图图层", + "chartsGeoMapCompName": "地理地图图", + "chartsGeoMapCompDesc": "通过动态图表在交互式地图上实现地理数据可视化的组件", + "chartsGeoMapCompKeywords": "地理地图、图表、可视化、地理数据", + "bpmnEditorCompName": "BPMN 编辑器", + "bpmnEditorCompDesc": "用于查看、创建和编辑 BPMN 图表的组件,支持各种 BPMN 元素和功能。", + "bpmnEditorCompKeywords": "BPMN、编辑器、图表、元素、工作流程", + "turnstileCaptchaCompName": "转门验证码", + "turnstileCaptchaCompDesc": "验证码组件,用于验证用户是否为机器人。", + "turnstileCaptchaCompKeywords": "验证码、验证、身份、安全", + "pivotTableCompName": "透视表", + "pivotTableCompDesc": "数据汇总和分析工具,用于以表格形式组织和汇总数据。", + "pivotTableCompKeywords": "数据透视表、数据、分析、汇总", + "funnelChartCompName": "漏斗图", + "funnelChartCompDesc": "一种可视化工具,用于显示数据在经过各个阶段时的逐步缩减过程。", + "funnelChartCompKeywords": "漏斗图、销售、转换、流程", + "gaugeChartCompName": "仪表图表", + "gaugeChartCompDesc": "以刻度盘上的读数显示数据的图表,用于显示某物的状态或水平。", + "gaugeChartCompKeywords": "测量图、指标、性能、状态", + "sankeyChartCompName": "桑基图", + "sankeyChartCompDesc": "箭头宽度与流速成正比的流程图,用于显示能量、材料或成本的转移。", + "sankeyChartCompKeywords": "桑基图、流程、能源、成本", + "candleStickChartCompName": "蜡烛图", + "candleStickChartCompDesc": "一种金融图表样式,用于描述证券、衍生品或货币的价格走势。", + "candleStickChartCompKeywords": "蜡烛图、股票、交易、金融", + "radarChartCompName": "雷达图", + "radarChartCompDesc": "以三维或更多定量变量的二维图表形式显示多元数据的图形方法。", + "radarChartCompKeywords": "雷达图、多变量、性能分析", + "heatmapChartCompName": "热图", + "heatmapChartCompDesc": "数据的图形表示法,用颜色表示各个数值。", + "heatmapChartCompKeywords": "热图、数据可视化、强度", + "graphChartCompName": "图表", + "graphChartCompDesc": "表示由边连接的节点网络的图表,用于显示相互联系和关系。", + "graphChartCompKeywords": "图表、网络、关系、节点", + "treeChartCompName": "树形图", + "treeChartCompDesc": "以树状结构直观表示层次结构的图表,显示各节点之间的关系。", + "treeChartCompKeywords": "树状图、层次结构、组织结构", + "treemapChartCompName": "树状地图", + "treemapChartCompDesc": "使用嵌套矩形按比例表示分层数据的图表。", + "treemapChartCompKeywords": "树状图、层次结构、数据可视化", + "sunburstChartCompName": "旭日图", + "sunburstChartCompDesc": "一种径向空间填充可视化技术,通过圆的层次来说明等级关系。", + "sunburstChartCompKeywords": "旭日图、放射状、层次结构", + "themeriverChartCompName": "主题河图", + "themeriverChartCompDesc": "类似流图的可视化图表,显示数据集在不同类别中随着时间的推移而发生的变化。", + "themeriverChartCompKeywords": "主题河、时间序列、趋势", + "basicChartCompName": "多种语言图表", + "basicChartCompDesc": "这是一个多功能组件,可通过各种类型的图表和图形将数据可视化。", + "basicChartCompKeywords": "图表、图形、数据、可视化", + "shapeCompName": "形状", + "shapeCompDesc": "用于图表、插图和可视化的几何图形集。", + "shapeCompKeywords": "形状、几何、图表、插图", + "ganttChartCompName": "甘特图", + "ganttChartCompDesc": "说明项目进度的图表,显示各要素和依赖关系的开始和结束日期。", + "ganttChartCompKeywords": "甘特图、项目管理、时间表", + "kanbanCompName": "看板(预览!)", + "kanbanCompDesc": "一个用于可视化工作流程的板,其中列代表工作阶段,卡片代表任务。", + "kanbanCompKeywords": "看板、板、工作流程、任务", + "pieChartCompName": "饼图", + "pieChartCompDesc": "通过饼图实现数据可视化的多功能组件。", + "pieChartCompKeywords": "图表、数据、可视化", + "lineChartCompName": "折线图", + "lineChartCompDesc": "通过折线图实现数据可视化的多功能组件。", + "lineChartCompKeywords": "图表、数据、可视化", + "barChartCompName": "柱状图", + "barChartCompDesc": "通过条形图实现数据可视化的多功能组件。", + "barChartCompKeywords": "图表、数据、可视化", + "scatterChartCompName": "散点图", + "scatterChartCompDesc": "通过散点图实现数据可视化的多功能组件。", + "scatterChartCompKeywords": "图表、数据、可视化", + "colorPickerCompName": "颜色选择器", + "colorPickerCompDesc": "直观的颜色选择方便用户定制。", + "colorPickerCompKeywords": "颜色、选择器、定制", + "floatButtonCompName": "浮动按钮", + "floatButtonCompDesc": "浮动操作按钮,用于突出和快速操作。", + "floatButtonCompKeywords": "浮动按钮、动作、快速", + "avatarCompName": "阿凡达", + "avatarCompDesc": "显示用户头像或个人资料图像,以便进行个性化识别。", + "avatarCompKeywords": "头像、个人资料图像、用户标识", + "avatarGroupCompName": "阿凡达集团", + "avatarGroupCompDesc": "一组头像,以紧凑、视觉效果好的方式代表多个用户或实体。", + "avatarGroupCompKeywords": "头像组、用户、实体、紧凑", + "transferName": "转让", + "transferDesc": "通过拖放功能,方便两个列表之间的数据传输。", + "transferKeywords": "传输、数据、拖放", + "cardCompName": "内容卡", + "cardCompDesc": "卡片组件,用于以结构化方式显示有组织的信息或内容。", + "cardCompKeywords": "卡片、信息、内容、显示", + "timerCompName": "计时器", + "timerCompDesc": "显示倒计时或经过时间的组件,可用于跟踪工期和截止日期。", + "timerCompKeywords": "计时器、倒计时、经过时间、跟踪、持续时间、截止日期", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "查看文档", + "menuViewPlayground": "查看组件游乐场", + "menuUpgradeToLatest": "升级到最新版本", + "nameNotEmpty": "不能为空", + "nameRegex": "必须以字母开头,只能包含字母、数字和下划线(_)", + "nameJSKeyword": "不能是 JavaScript 关键字", + "nameGlobalVariable": "不能是全局变量名", + "nameExists": "名称 {name} 已存在", + "getLatestVersionMetaError": "获取最新版本失败,请稍后重试.", + "needNotUpgrade": "当前版本已经是最新版本.", + "compNotFoundInLatestVersion": "最新版本中找不到当前组件.", + "upgradeSuccess": "成功升级到最新版本.", + "searchProp": "搜索属性", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "重试", + "resetAfterSubmit": "成功提交后重置", + "jsonSchema": "JSON数据", + "uiSchema": "UI数据", + "schemaTooltip": "查看", + "defaultData": "默认数据", + "dataDesc": "当前表单数据", + "required": "必填", + "maximum": "最大值为 {value}", + "minimum": "最小值为 {value}", + "exclusiveMaximum": "应小于 {value}", + "exclusiveMinimum": "应大于 {value}", + "multipleOf": "应为 {value} 的倍数", + "minLength": "至少 {value} 个字符", + "maxLength": "最多 {value} 个字符", + "pattern": "应匹配模式 {value}", + "format": "应符合格式 {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "输入搜索值", + }, + "customComp": { + ...en.customComp, + + "text": "今天是个好日子.", + "triggerQuery": "触发查询", + "updateData": "更新数据", + "updateText": "我也心情很好!", + "sdkGlobalVarName": "低编码器", + "data": "要传递给自定义组件的数据", + "code": "自定义组件代码", + }, + "tree": { + ...en.tree, + + "placeholder": "请选择", + "selectType": "选择类型", + "noSelect": "无选择", + "singleSelect": "单选", + "multiSelect": "多选", + "checkbox": "复选框", + "checkedStrategy": "选择策略", + "showAll": "显示所有节点", + "showParent": "仅显示父节点", + "showChild": "仅显示子节点", + "autoExpandParent": "自动展开父节点", + "checkStrictly": "严格勾选", + "checkStrictlyTooltip": "准确选择树节点;父节点和子节点之间没有关联", + "treeData": "结构", + "treeDataDesc": "当前数据", + "value": "默认值", + "valueDesc": "当前值", + "expanded": "展开节点", + "expandedDesc": "当前展开的节点", + "defaultExpandAll": "默认展开所有节点", + "showLine": "显示连接线", + "showLeafIcon": "显示叶子图标", + "treeDataAsia": "亚洲", + "treeDataChina": "中国", + "treeDataBeijing": "北京", + "treeDataShanghai": "上海", + "treeDataJapan": "日本", + "treeDataEurope": "欧洲", + "treeDataEngland": "英格兰", + "treeDataFrance": "法国", + "treeDataGermany": "德国", + "treeDataNorthAmerica": "北美洲", + "helpLabel": "节点标题", + "helpValue": "树中唯一的节点值", + "helpChildren": "子节点", + "helpDisabled": "禁用节点", + "helpSelectable": "节点是否可选(单选/多选类型)", + "helpCheckable": "是否显示复选框(复选框类型)", + "helpDisableCheckbox": "禁用复选框(复选框类型)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "事件测试", + "methodTest": "方法测试", + "inputTest": "输入测试", + }, + "password": { + ...en.password, + + "label": "密码", + "placeholder": "请输入密码", + "conformLabel": "确认密码", + "conformPlaceholder": "请确认密码", + "visibilityToggle": "显示可见性切换", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "自定义工具栏", + "toolbarDescription": "您可以自定义工具栏。详情请参阅:https://quilljs.com/docs/modules/toolbar/。", + "placeholder": "请输入...", + "hideToolbar": "隐藏工具栏", + "content": "内容", + "title": "标题", + "save": "保存", + "link": "链接:", + "edit": "编辑", + "remove": "移除", + "defaultValue": "基础内容", + }, + "floatButton": { + ...en.floatButton, + + "custom": "定制", + "backTop": "返回顶部", + "buttonType": "按钮类型", + "buttonShape": "按钮形状", + "square": "方形", + "circle": "圆圈", + "description": "说明", + "badge": "徽章", + "primary": "小学", + "default": "默认值", + "buttonTheme": "按钮主题", + "badgeColor": "徽章颜色", + "dot": "徽章为圆点", + "hidden": "隐藏", + "visibilityHeight": "可见度高度", + "visibilityHeightDesc": "滚动到一定高度才显示返回顶部按钮,0 始终显示,编辑模式无法实时预览", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "触发事件", + "click": "点击", + "hover": "悬停", + "disabledAlpha": "禁用阿尔法选择", + "recommended": "推荐", + "showPresets": "显示颜色预设", + }, + "badge": { + ...en.badge, + + "showCloseButton": "显示关闭按钮", + "Type": "徽章类型", + "Count": "徽章计数", + "Size": "徽章尺寸", + "SizeDefault": "默认", + "SizeSmall": "小型", + "overflowCount": "溢出计数", + "Title": "徽章名称", + "dot": "圆点", + "number": "数量", + "tooltip": "工具提示", + }, + "gantt": { + ...en.gantt, + + "key": "钥匙", + "title": "标题", + "project": "项目", + "from": "来自", + "minute": "分钟", + "hour": "小时", + "day": "日", + "week": "周数", + "month": "月份", + "year": "年份", + "quarter": "季度", + "tasks": "任务数据", + "level": "夷为平地", + "durationUnit": "时间单位", + "duration": "持续时间", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "周 #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "树", + "ColumnsData": "列数据", + "allowChangeTask": "DbClick 任务", + "allowAddLink": "添加链接", + "allowLinkDelete": "删除链接", + "allowProgressDrag": "进度拖动", + "allowTaskDrag": "任务拖动", + "links": "链接数据", + "dataFormat": "数据解析格式", + "handleDateChange": "处理任务变更", + "handleTaskChange": "处理任务变更", + "handleAddedLink": "添加的手柄链接", + "handleDeletedLink": "处理已删除的链接", + "handleProgressDrag": "处理进度拖动", + "showTodayMark": "今日展示 马克", + "resize": "调整大小", + "otherEvents": "其他活动", + "openAllBranchInit": "打开所有分支机构的启动程序", + "date": "日期", + "text": "文本", + "progress": "进展", + "width": "宽度", + "ColumnsType": "云类型", + "currentId": "当前 ID", + "currentObject": "当前对象", + "addTask": "添加任务", + "taskObject": "任务对象", + "taskObjectDesc": "支持任务数组或单个任务对象", + "linkID": "链接 ID", + "linkIDDesc": "支持链接 ID 数组或单个链接对象", + "removeTask": "删除任务", + "taskID": "任务编号", + "taskIDDesc": "支持 ID 阵列或单一 ID", + "add": "添加", + "expandingAll": "扩展所有", + "collapsingAll": "全部崩溃", + "addTaskFail": "添加任务失败,参数类型应为对象或数组对象", + "addLinkFail": "添加链接失败,参数类型应为对象或数组对象", + "removeTaskFail": "删除任务失败,参数类型应为字符串或字符串数组", + "removeLinkFail": "删除链接失败,参数类型应为字符串数组", + "otherData": "其他数据_{i}_", + "projectText": "项目编号__{i}__", + "taskText": "任务编号__{i}__", + "AutoCalculateProgress": "自动计算进度", + "allowProjectDrag": "允许项目拖动", + "showColumns": "显示列", + "exportToPNG": "导出为 PNG", + "exportToPDF": "导出为 PDF", + "exportToExcel": "导出到 Excel", + "progressLowBg": "低 BgColor", + "progressLowColor": "低进度颜色", + "progressMediumBg": "中型 BgColor", + "progressMediumColor": "中进步色", + "progressHighBg": "高 BgColor", + "progressHighColor": "进度颜色", + "progresscompletedColor": "已完成进度颜色", + "lowProgressLine": "低进度线", + "mediumProgressLine": "中进度线", + "SegmentedColor": "进度分段颜色", + "link_f2s": "链接 F2S", + "link_s2s": "链接 S2S", + "link_f2f": "链接 F2F", + "link_s2f": "链接 S2F", + "weekScale": "#___placeholder0___、", + "showHolidays": "显示假期", + "StatutoryHolidays": "法定假日数据", + "skipOffTime": "隐藏非工作时间", + "weekend": "周末", + "weekendSelected": "周末精选", + "noWorkHour": "无工作时间", + "noWorkHourSelected": "未选择工时", + "showWorkTimes": "展会工作时间", + "workTimeData": "工作时间数据", + "fit": "合适", + "manual": "手册", + "scaleMode": "刻度模式", + "startDate": "开始日期", + "endDate": "结束日期", + "addLink": "添加链接", + "linkObject": "链接对象", + "removeLink": "删除链接", + "allowSort": "允许排序", + "showTask": "显示任务", + "toggleOnDBClick": "切换 DBClick", + "sortOptions": "初始排序选项", + "rowHeight": "行高", + "showTooltip": "显示工具提示", + "tooltipTemplates": "工具提示模板", + "allowResizeTask": "允许调整任务大小", + "projectColor": "项目颜色", + "projectColorBg": "项目 BgColor", + "taskColor": "任务颜色", + "taskColorBg": "任务 BgColor", + "milestoneColor": "里程碑颜色", + "highlightOverdue": "突出显示逾期", + "overdueColor": "过期颜色", + "overdueBgColor": "逾期 BgColor", + "projectCompletedBgColor": "项目已完成 BgColor", + "projectCompletedColor": "项目完成颜色", + "tag": "标签", + "tasksTableWidth": "任务表宽度", + "allowErrorMessage": "允许错误信息", + "currentProjectId": "当前项目编号", + "currentProjectLastTask": "当前项目 最后任务", + "onlySortProject": "仅分类项目", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "来源数据", + "targetTitle": "目标数据", + "content": "内容 {i}", + "items": "项目", + "targetKeys": "选定密钥", + "oneWay": "单程", + "pagination": "分页", + "pageSize": "页面大小", + "allowSearch": "允许搜索", + "selectedKeys": "选定密钥", + "searchInfo": "搜索信息", + "targerObject": "塔格物体", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "最大计数", + "avatarSize": "头像大小", + "autoColor": "自动色彩", + "alignment": "对齐", + "currentAvatar": "当前头像", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "方形", + "circle": "圆形", + "icon": "图标", + "shape": "形状", + "counts": "徽章", + "title": "标题", + "src": "来源", + "avatarCompTooltip": "显示优先级为:图像 -> 字符 -> 图标。取决于什么最先可用。", + "iconSize": "图标大小", + "avatarBackground": "背景介绍", + "label": "标签", + "caption": "标题", + "labelPosition": "职位", + "alignmentPosition": "路线", + "text": "文本", + "enableDropDown": "启用下拉菜单", + "containerBackground": "背景介绍", + }, + "card": { + ...en.card, + + "cardType": "卡片类型", + "common": "常见", + "custom": "风俗", + "default": "默认", + "small": "小", + "showTitle": "显示标题", + "title": "标题", + "more": "更多信息", + "extraTitle": "行动呼吁", + "CoverImg": "封面图片", + "imgSrc": "图片来源", + "showMeta": "显示内容", + "metaTitle": "内容标题", + "metaDesc": "内容说明", + "imgHeight": "图像高度", + "showActionIcon": "显示操作选项", + "actionOptions": "行动选项", + "menu": "菜单 {i}", + "hoverColor": "悬停颜色", + "IconColor": "图标颜色", + "titleSize": "标题大小", + }, + "timer": { + ...en.timer, + + "timerState": "定时器状态", + "elapsedTime": "所用时间", + "timer": "计时器", + "countdown": "倒计时", + "defaultValue": "默认值", + "timerType": "计时器类型", + "start": "开始", + "pause": "暂停", + "resume": "简历", + "reset": "重置", + "startPause": "开始/暂停", + "hideButton": "隐藏按钮", + "fontColor": "字体颜色", + }, + "iconComp": { + ...en.iconComp, + + "icon": "图标", + "autoSize": "图标自动大小", + "iconSize": "图标大小", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "格式", + "precision": "精度", + "allowNull": "允许空值", + "thousandsSeparator": "显示千位分隔符", + "controls": "显示增加/减少按钮", + "step": "步长", + "standard": "标准", + "percent": "百分比", + }, + "slider": { + ...en.slider, + + "step": "步长", + "stepTooltip": "该值必须大于0且可被(最大值-最小值)整除", + "vertical": "垂直方向", + }, + "rating": { + ...en.rating, + + "max": "最大评分", + "allowHalf": "允许半颗星", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "选项列表", + "option": "选项", + "optionI": "选项 {i}", + "viewDocs": "查看文档", + "tip": "“item”和“i”变量代表数据数组中每个项的值和索引", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "值/键", + "valueTooltip": "步骤值必须是一个数字。对于第一个步骤,它必须等于初始值。数字必须按升序一致排列", + "title": "步骤", + "subTitle": "子标题", + "description": "描述", + "status": "状态", + "icon": "步骤图标", + }, + "step": { + ...en.step, + + "initialValue": "初始值", + "initialValueTooltip": "视觉编号的起始位置。必须是 1 或更高。", + "valueDesc": "当前价值", + "size": "台阶大小", + "sizeSmall": "小型", + "sizeDefault": "默认值", + "percent": "步骤 百分比", + "type": "步骤类型", + "typeDefault": "标准", + "typeNavigation": "导航", + "typeInline": "内联", + "direction": "步骤 方向", + "directionVertical": "垂直", + "directionHorizontal": "横向", + "labelPlacement": "步骤 标签放置", + "status": "步骤状态", + "statusWait": "等待", + "statusProcess": "过程", + "statusFinish": "完成", + "statusError": "错误", + "showDots": "用圆点代替数字", + "showIcons": "显示图标而不是数字", + "responsive": "响应式", + "selectable": "可选择", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "标签文本", + "color": "颜色", + "icon": "图标", + }, + "radio": { + ...en.radio, + + "options": "选项", + "horizontal": "水平", + "horizontalTooltip": "水平布局在空间不足时自动换行", + "vertical": "垂直", + "verticalTooltip": "垂直布局始终以单列显示", + "autoColumns": "自动列", + "autoColumnsTooltip": "自动列布局根据空间自动调整顺序,以多列显示", + }, + "cascader": { + ...en.cascader, + + "options": "结构", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "当前选择的值", + "selectedIndexDesc": "当前选择的值的索引,如果未选择任何值则为-1", + "selectedLabelDesc": "当前选择的值的标签", + }, + "file": { + ...en.file, + + "typeErrorMsg": "必须是一个带有有效文件大小单位的数字,或者是一个无单位的字节数.", + "fileEmptyErrorMsg": "上传失败.文件大小为空.", + "fileSizeExceedErrorMsg": "上传失败.文件大小超过限制.", + "minSize": "最小大小", + "minSizeTooltip": "上传文件的最小大小,可选择使用文件大小单位(例如:\"5kb\"、\"10MB\").如果没有提供单位,该值将被视为字节数.", + "maxSize": "最大大小", + "maxSizeTooltip": "上传文件的最大大小,可选择使用文件大小单位(例如:\"5kb\"、\"10MB\").如果没有提供单位,该值将被视为字节数.", + "single": "单个", + "multiple": "多个", + "directory": "目录", + "upload": "浏览", + "fileType": "文件类型", + "reference": "请参考", + "fileTypeTooltipUrl": "https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file", + "fileTypeTooltip": "唯一的文件类型指定", + "uploadType": "上传类型", + "showUploadList": "显示上传列表", + "maxFiles": "最大文件数", + "filesValueDesc": "当前上传文件的内容以Base64编码", + "filesDesc": "当前上传文件的列表.详细信息请参阅", + "clearValueDesc": "清除所有文件", + "parseFiles": "解析文件", + "parsedValueTooltip1": "如果解析文件解析成功,上传的文件将解析为对象、数组或字符串.解析后的数据可以通过parsedValue数组访问.", + "parsedValueTooltip2": "支持Excel、JSON、CSV和文本文件.其他格式将返回null.", + "forceCapture": "武力捕获", + "forceCaptureTooltip": "用相机捕捉图像代替上传", + "usePhoto": "使用照片", + "retakePhoto": "重拍照片", + "capture": "捕获", + }, + "date": { + ...en.date, + + "format": "格式", + "inputFormat": "输入格式", + "formatTip": "支持:\nYYYY-MM-DD HH:mm:ss\nYYYY-MM-DD\n时间戳", + "reference": "请参考", + "showTime": "显示时间", + "start": "开始日期", + "end": "结束日期", + "year": "年", + "quarter": "季度", + "month": "月", + "week": "周", + "date": "日期", + "clearAllDesc": "清除全部", + "resetAllDesc": "重置全部", + "placeholder": "选择日期", + "placeholderText": "占位符", + "startDate": "开始日期", + "endDate": "结束日期", + }, + "time": { + ...en.time, + + "start": "开始时间", + "end": "结束时间", + "formatTip": "支持格式:\nHH:mm:ss\n时间戳", + "format": "格式", + "placeholder": "选择时间", + "placeholderText": "占位符", + "startTime": "开始时间", + "endTime": "结束时间", + }, + "button": { + ...en.button, + + "prefixIcon": "前缀图标", + "prefixText": "前缀文本", + "suffixIcon": "后缀图标", + "icon": "图标", + "iconSize": "图标大小", + "button": "按钮", + "formToSubmit": "要提交的表单", + "default": "默认", + "submit": "提交", + "textDesc": "当前显示在按钮上的文本", + "loadingDesc": "按钮是否处于加载状态?如果为true,则当前按钮正在加载", + "formButtonEvent": "按钮事件", + }, + "link": { + ...en.link, + + "link": "链接", + "textDesc": "当前显示在链接上的文本", + "loadingDesc": "链接是否处于加载状态?如果为true,则当前链接正在加载", + }, + "scanner": { + ...en.scanner, + + "text": "点击扫码", + "camera": "摄像头{index}", + "changeCamera": "切换摄像头", + "continuous": "连续扫描", + "uniqueData": "忽略重复数据", + "maskClosable": "点击背景后关闭", + "errTip": "请在HTTPS模式或本地主机模式下使用此组件", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "仅菜单", + "textDesc": "当前显示在按钮上的文本", + "triggerMode": "触发方式", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 你好,{name}", + "valueTooltip": "Markdown支持大多数HTML标签和属性.出于安全原因,禁用了iframe、script和其他标签.", + "verticalAlignment": "垂直对齐", + "horizontalAlignment": "水平对齐", + "textDesc": "在当前文本框中显示的文本", + }, + "table": { + ...en.table, + + "editable": "可编辑", + "columnNum": "列数", + "viewModeResizable": "用户调整列宽", + "viewModeResizableTooltip": "是否允许调整列宽.", + "visibleResizables": "显示调整大小句柄", + "visibleResizablesTooltip": "在表头显示可见的调整大小句柄", + "showFilter": "显示筛选按钮", + "showRefresh": "显示刷新按钮", + "showDownload": "显示下载按钮", + "columnSeparator": "柱分离器", + "columnSeparatorTooltip": "下载的 CSV 文件中的列分隔符(“分隔符”)。 \n\n建议:\n- 逗号 (,)\n- 分号 (;)\n- 竖线 (|)\n- 制表符 (\\t)", + "columnSetting": "显示列设置按钮", + "searchText": "搜索文本", + "searchTextTooltip": "搜索和筛选在表格中呈现的数据", + "showQuickJumper": "显示快速跳转", + "hideOnSinglePage": "只有一页时隐藏", + "showSizeChanger": "显示分页大小切换按钮", + "pageSizeOptions": "分页大小选项", + "pageSize": "分页大小", + "total": "总行数", + "totalTooltip": "默认值为当前数据项的数量,可以从查询中获取,例如:'{{query1.data[0].count}}'", + "filter": "筛选", + "filterRule": "筛选规则", + "chooseColumnName": "选择列", + "chooseCondition": "选择条件", + "clear": "清空", + "columnShows": "显示字段", + "selectAll": "全选", + "and": "与", + "or": "或", + "contains": "包含", + "notContain": "不包含", + "equals": "等于", + "isNotEqual": "不等于", + "isEmpty": "为空", + "isNotEmpty": "不为空", + "greater": "大于", + "greaterThanOrEquals": "大于等于", + "lessThan": "小于", + "lessThanOrEquals": "小于等于", + "action": "操作", + "columnValue": "列值", + "columnValueTooltip": "'{{currentCell}}': 当前单元格数据\n'{{currentRow}}': 当前行数据\n'{{currentIndex}}': 当前数据索引(从0开始)\n示例: '{{currentCell * 5}}' 显示原始值数据的5倍.", + "columnTooltip": "列工具提示", + "imageSrc": "图片链接", + "imageSize": "图片尺寸", + "columnTitle": "标题", + "columnTitleTooltip": "标题工具提示", + "showTitle": "显示标题", + "showTitleTooltip": "显示/隐藏表标题中的列标题", + "sortable": "可排序", + "align": "对齐方式", + "fixedColumn": "固定列", + "autoWidth": "自动宽度", + "customColumn": "自定义列", + "auto": "自动", + "fixed": "固定", + "columnType": "列类型", + "dataMapping": "数据映射", + "numberStep": "步", + "numberStepTooltip": "当前值增加或减少的数量。它可以是整数或小数", + "precision": "精度", + "float": "分数", + "prefix": "字首", + "suffix": "后缀", + "avatars": "头像", + "avatarGroupAlignment": "头像排列", + "text": "文本", + "number": "数字", + "link": "链接", + "links": "多链接", + "tag": "标签", + "select": "下拉单选", + "dropdown": "下拉式", + "time": "时间", + "date": "日期", + "dateTime": "日期时间", + "badgeStatus": "状态", + "button": "按钮", + "image": "图片", + "boolean": "布尔值", + "switch": "开关", + "rating": "评分", + "progress": "进度", + "option": "操作", + "optionList": "操作列表", + "option1": "操作1", + "status": "状态", + "statusTooltip": "可选值: success, error, default, warning, processing", + "primaryButton": "主要", + "defaultButton": "默认", + "type": "类型", + "tableSize": "表格尺寸", + "hideHeader": "隐藏表头", + "hideToolbar": "隐藏表工具栏(页脚)", + "fixedHeader": "固定表头", + "fixedHeaderTooltip": "垂直滚动表格的标题将被固定", + "fixedToolbar": "固定工具栏", + "fixedToolbarTooltip": "工具栏将根据位置固定在可垂直滚动的表格上", + "hideBordered": "隐藏列边框", + "showHeaderGridBorder": "显示标题网格边框", + "showRowGridBorder": "显示行网格边框", + "showVerticalRowGridBorder": "显示垂直行网格边框", + "showHorizontalRowGridBorder": "显示水平行网格边框", + "deleteColumn": "删除列", + "confirmDeleteColumn": "确认删除列:", + "small": "小", + "middle": "中", + "large": "大", + "refreshButtonTooltip": "数据发生变化,点击重新生成列.", + "changeSetDesc": "表示可编辑表格的更改的对象,仅包含已更改的单元格.行优先,列次之.", + "selectedRowDesc": "提供当前选中行的数据,指示如果用户在行上点击按钮/链接时触发的行", + "selectedRowsDesc": "在多选模式下有用,与selectedRow相同", + "pageNoDesc": "当前显示的页码,从1开始", + "pageSizeDesc": "每页显示的行数", + "sortColumnDesc": "当前选中的排序列的名称", + "sortDesc": "当前行是否按降序排列", + "pageOffsetDesc": "当前分页的起始位置,用于分页获取数据.示例:select * from users limit '{{table1.pageSize}}' offset '{{table1.pageOffset}}'", + "displayDataDesc": "当前表格中显示的数据", + "selectedIndexDesc": "在显示数据中选中的索引", + "filterDesc": "表格筛选参数", + "dataDesc": "当前表格使用的原始数据", + "saveChanges": "保存更改", + "cancelChanges": "取消更改", + "rowSelectChange": "行选中变化", + "rowClick": "行点击", + "rowExpand": "行展开", + "rowShrink": "行收缩", + "search": "搜索", + "download": "下载", + "columnEdited": "栏目已编辑", + "filterChange": "筛选变化", + "sortChange": "排序变化", + "pageChange": "分页变化", + "refresh": "刷新", + "rowColor": "条件行颜色", + "rowColorDesc": "基于可选变量条件设置行颜色:\ncurrentRow, currentOriginalIndex, currentIndex, columnTitle.\n例如:'{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "条件行高度", + "rowHeightDesc": "根据可选变量有条件地设置行高: CurrentRow、CurrentOriginalIndex、CurrentIndex、ColumnTitle。例如:'{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "条件单元格颜色", + "cellColorDesc": "使用 currentCell 根据单元格值有条件地设置单元格颜色:\n例如:'{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "未配置保存更改的事件处理程序.请在点击之前绑定至少一个事件处理程序.", + "dynamicColumn": "使用动态列设置", + "dynamicColumnConfig": "列设置", + "dynamicColumnConfigDesc": "动态列设置.接受一个列名的数组,默认情况下所有列都可见.\n示例:[\"id\", \"name\"]", + "position": "位置", + "showDataLoadSpinner": "显示加载指示器", + "showValue": "显示值", + "expandable": "可展开", + "configExpandedView": "配置展开视图", + "toUpdateRowsDesc": "可编辑表格中要更新的行的对象数组.", + "selectedCellDesc": "选定单元格", + "empty": "空", + "falseValues": "false时的文本", + "iconTrue": "图标 为真时", + "iconFalse": "图标为假时", + "iconNull": "图标 零时", + "allColumn": "全部", + "visibleColumn": "可见", + "emptyColumns": "当前没有可见列", + "showSummary": "显示摘要行", + "totalSummaryRows": "总行数", + "inlineAddNewRow": "内联添加新行", + "editMode": "编辑模式", + "singleClick": "单击", + "doubleClick": "双击", + "showUpdateButtons": "显示保存/取消按钮", + }, + "image": { + ...en.image, + + "src": "图片链接", + "srcDesc": "图片链接地址", + "supportPreview": "支持点击预览", + "supportPreviewTip": "仅在图片链接有效时生效", + "previewSrc": "图片预览链接", + "clipPath": "图像剪切路径", + "clipPathTip": "使用 clip-path 为元素定义基于 CSS 定义的自定义形状、引用 SVG 屏蔽(通过源 URL)或使用预定义形状(如圆形()、椭圆形()、多边形()或嵌入())进行剪切。", + "enableOverflow": "启用溢出", + "enableOverflowTip": "允许图像溢出其容器,使裁剪超出容器的边界。这对于保持图像特定部分的焦点非常有用。", + "overflow": "溢出行为(CSS)", + "overflowTip": "定义内容溢出容器时的行为方式。隐藏\"、\"滚动 \"或 \"可见 \"等选项决定了裁剪内容的可见性。", + "positionX": "水平位置", + "positionXTip": "指定图像在容器内的水平对齐方式。例如左\"、\"中\"、\"右 \"或百分比值。", + "positionY": "垂直位置", + "positionYTip": "指定图像在容器内的垂直对齐方式。例如顶部\"、\"中间\"、\"底部 \"或百分比值。", + "aspectRatio": "长宽比(CSS)", + "aspectRatioTip": "保持一致的图像宽高比例,如宽屏为 \"16/9\",正方形为 \"1/1\"。自然图像尺寸留空。", + "placement": "图像放置", + "placementTip": "决定图像在布局或容器中的显示位置和方式。选项包括特定的对齐或放置逻辑。", + }, + "progress": { + ...en.progress, + + "value": "进度值", + "valueTooltip": "完成百分比,取值范围为0到100", + "showInfo": "显示数值", + "valueDesc": "当前的进度值,取值范围为0到100", + "showInfoDesc": "是否显示当前的进度值", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "未提供有效的URL链接", + "src": "文件链接", + "srcTooltip": "通过嵌入HTML预览提供的链接内容,也可以支持base64编码的数据,例如:data:application/pdf; base64,AAA... CCC", + "srcDesc": "文件链接地址", + }, + "divider": { + ...en.divider, + + "title": "标题", + "align": "对齐方式", + "dashed": "虚线", + "type": "垂直型", + "dashedDesc": "是否使用虚线", + "titleDesc": "分割线标题", + "alignDesc": "分割线标题对齐方式", + }, + "QRCode": { + ...en.QRCode, + + "value": "内容", + "valueTooltip": "数值的最大长度为2953个字符", + "valueDesc": "二维码的内容", + "level": "容错级别", + "levelTooltip": "指的是二维码被遮挡的部分仍然能够被扫描出来的程度.级别越高,二维码越复杂、被遮挡的部分越多,仍然能够被扫描出来的可能性就越大", + "includeMargin": "显示边距", + "image": "图片", + "L": "L (低)", + "M": "M (中)", + "Q": "Q (四分之一)", + "H": "H (高)", + "maxLength": "内容过长,请将长度设置为2953个字符以下", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "缩进", + "expandToggle": "展开切换", + "theme": "主题", + "valueDesc": "当前的 JSON 数据", + "default": "默认", + "defaultDark": "默认暗色", + "neutralLight": "中性浅色", + "neutralDark": "中性暗色", + "azure": "天蓝色", + "darkBlue": "深蓝色", + }, + "audio": { + ...en.audio, + + "src": "音频链接", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "自动播放", + "loop": "循环播放", + "srcDesc": "当前音频链接", + "play": "播放", + "playDesc": "音频播放时触发", + "pause": "暂停", + "pauseDesc": "音频暂停时触发", + "ended": "播放结束", + "endedDesc": "音频播放结束时触发", + }, + "video": { + ...en.video, + + "src": "视频链接", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "视频链接", + "defaultPosterUrl": "", + "autoPlay": "自动播放", + "loop": "循环播放", + "controls": "隐藏控件", + "volume": "音量", + "playbackRate": "播放速度", + "posterTooltip": "默认值为视频的第一帧", + "autoPlayTooltip": "视频加载后自动播放.将该值从true更改为false将暂停视频播放.(如果设置了封面,将通过封面按钮播放)", + "controlsTooltip": "隐藏视频播放控件.可能不被所有视频源完全支持.", + "volumeTooltip": "设置播放器的音量,介于0和1之间", + "playbackRateTooltip": "设置播放器的速度,介于1和2之间", + "srcDesc": "当前视频URL链接", + "play": "播放", + "playDesc": "视频播放时触发", + "pause": "暂停", + "pauseDesc": "视频暂停时触发", + "load": "加载", + "loadDesc": "视频资源加载完成时触发", + "ended": "结束", + "endedDesc": "视频播放结束时触发", + "currentTimeStamp": "视频的当前播放位置(以秒为单位)", + "duration": "视频的总时长(以秒为单位)", + }, + "media": { + ...en.media, + + "playDesc": "开始播放媒体.", + "pauseDesc": "暂停媒体播放.", + "loadDesc": "将媒体重置到开头并重新选择媒体资源.", + "seekTo": "跳转到给定的秒数或介于0和1之间的分数位置", + "seekToAmount": "秒数或介于0和1之间的分数", + "showPreview": "显示预览", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "起始值", + "end": "结束值", + "step": "步长", + "stepTooltip": "滑块的精确度,值必须大于0\n且能被(最大值-最小值)整除", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "选择图标", + "searchIcon": "搜索图标", + "searchAnimation": "搜索动画", + "searchIllustration": "搜索插图", + "insertIcon": "插入图标", + "insertImage": "插入图片或", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "选择形状", + "insertShape": "插入形状", + "insertImage": "插入图像或", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "请输入正确的超时时间,当前输入为:{value}", + "timeoutLessThanMinError": "输入必须大于 {left},当前输入为:{value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "单选", + "multiple": "多选", + "close": "关闭", + "mode": "选择模式", + }, + "container": { + ...en.container, + + "title": "容器标题", + "titleTooltip": "集装箱标题", + "flowWidth": "内容宽度", + "floatType": "文本浮动类型", + }, + "drawer": { + ...en.drawer, + + "closePosition": "关闭位置", + "placement": "抽屉位置", + "size": "大小", + "top": "顶部", + "right": "右侧", + "center": "中心", + "bottom": "底部", + "left": "左侧", + "title": "抽屉标题", + "titleAlign": "标题调整", + "widthTooltip": "数字或百分比,例如 520,60%", + "heightTooltip": "数字,例如 378", + "openDrawerDesc": "打开抽屉", + "closeDrawerDesc": "关闭抽屉", + "width": "抽屉宽度", + "height": "抽屉高度", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Agora SDK 日志级别", + "placement": "会议抽屉的摆放", + "meeting": "会议设置", + "cameraView": "摄像头视图", + "cameraViewDesc": "本地用户(主机)的摄像头视图", + "screenShared": "屏幕共享", + "screenSharedDesc": "本地用户(主机)共享的屏幕", + "audioUnmuted": "音频静音", + "audioMuted": "音频静音", + "videoClicked": "点击视频", + "videoOff": "关闭视频", + "videoOn": "视频", + "size": "尺寸", + "top": "返回顶部", + "host": "会议室主机。您需要将主机作为自己的应用程序逻辑进行管理", + "participants": "会议室与会者", + "shareScreen": "本地用户共享的显示屏幕", + "appid": "Agora 应用 ID", + "meetingName": "会议名称", + "localUserID": "主机用户 ID", + "userName": "主机用户名", + "rtmToken": "Agora RTM 代币", + "rtcToken": "Agora RTC 代币", + "noVideo": "无视频", + "profileImageUrl": "简介图片 URL", + "right": "对", + "bottom": "底部", + "videoId": "视频流 ID", + "audioStatus": "音频状态", + "left": "左侧", + "widthTooltip": "像素或百分比,例如 520、60", + "heightTooltip": "像素,例如 378", + "openDrawerDesc": "开放式抽屉", + "closeDrawerDesc": "关闭抽屉", + "width": "抽屉宽度", + "height": "抽屉高度", + "actionBtnDesc": "操作按钮", + "broadCast": "广播信息", + "title": "会议名称", + "meetingCompName": "Agora 会议控制器", + "sharingCompName": "屏幕共享流", + "videoCompName": "摄像机流", + "videoSharingCompName": "屏幕共享流", + "meetingControlCompName": "控制按钮", + "meetingCompDesc": "会议组成部分", + "meetingCompControls": "会议控制", + "meetingCompKeywords": "Agora 会议、网络会议、协作", + "iconSize": "图标大小", + "userId": "主机用户 ID", + "roomId": "房间 ID", + "meetingActive": "持续会议", + "messages": "广播信息", + }, + "settings": { + ...en.settings, + + "title": "设置", + "userGroups": "用户组", + "organization": "工作空间", + "subscription": "订阅", + "audit": "审计日志", + "theme": "主题", + "plugin": "插件", + "advanced": "高级", + "apiDocs": "应用程序接口文档", + "lab": "实验室", + "branding": "品牌", + "oauthProviders": "用户认证", + "appUsage": "应用程序使用日志", + "environments": "环境", + "premium": "高级版", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "审计日志 Dasboard", + "AuditLogOverview": "日志过滤器", + "USER_LOGIN": "用户登录", + "USER_LOGOUT": "用户注销", + "APPLICATION_VIEW": "查看申请", + "APPLICATION_CREATE": "创建应用程序", + "APPLICATION_DELETE": "删除申请", + "APPLICATION_UPDATE": "更新申请", + "APPLICATION_MOVE": "移动申请", + "APPLICATION_RECYCLED": "回收申请", + "APPLICATION_RESTORE": "恢复应用程序", + "APPLICATION_PUBLISH": "应用出版", + "APPLICATION_VERSION_CHANGE": "应用程序版本更新", + "APPLICATION_SHARING_CHANGE": "应用程序共享更改", + "APPLICATION_PERMISSION_CHANGE": "申请许可变更", + "FOLDER_CREATE": "创建文件夹", + "FOLDER_DELETE": "删除文件夹", + "FOLDER_UPDATE": "更新文件夹", + "QUERY_EXECUTION": "执行查询", + "GROUP_CREATE": "创建组", + "GROUP_UPDATE": "更新小组", + "GROUP_DELETE": "删除组", + "GROUP_MEMBER_ADD": "添加组员", + "GROUP_MEMBER_ROLE_UPDATE": "更新小组成员角色", + "GROUP_MEMBER_LEAVE": "休假小组", + "GROUP_MEMBER_REMOVE": "删除组员", + "SERVER_START_UP": "服务器启动", + "SERVER_INFO": "查看服务器信息", + "DATA_SOURCE_CREATE": "创建数据源", + "DATA_SOURCE_UPDATE": "更新数据源", + "DATA_SOURCE_DELETE": "删除数据源", + "DATA_SOURCE_PERMISSION_GRANT": "授予数据源权限", + "DATA_SOURCE_PERMISSION_UPDATE": "更新数据源权限", + "DATA_SOURCE_PERMISSION_DELETE": "删除数据源权限", + "LIBRARY_QUERY_CREATE": "创建图书馆查询", + "LIBRARY_QUERY_UPDATE": "更新图书馆查询", + "LIBRARY_QUERY_DELETE": "删除图书馆查询", + "LIBRARY_QUERY_PUBLISH": "发布图书馆查询", + "API_CALL_EVENT": "API 调用事件", + "logFilter": "日志过滤器", + "noLogsFound": "未找到日志。调整过滤器后再试一次。", + "usageLogUserEngagement": "各地区用户参与情况", + "usageLogAppViews": "应用程序使用时间", + "usageLogTopTen": "十大应用程序", + "usageLogAnonymousKNown": "匿名/已知用户", + "usageLogDevices": "设备/操作系统明细", + "usageLogBrowsers": "浏览器/布局引擎细分", + "premiumFeaturesNotice": "Lowcoder 企业版可提供所有高级功能。", + "requestLicense": "申请企业版许可证", + "requestLicensesBtton": "申请企业访问权限", + "AuditLogsTitle": "审计日志", + "AuditLogsIntroTitle": "工作区活动的强大可见性", + "AuditLogsIntro1": "审计日志使管理员能够准确跟踪整个 Lowcoder 平台上发生的情况。从用户登录到应用程序修改,每个相关操作都会被捕获和存储。", + "AuditLogsIntro2": "我们包括每个事件的详细元数据,如地理位置、设备类型、浏览器和操作系统。", + "AuditLogsIntro3": "这种透明度使您能够监控所有连接环境中的活动,提供强大的审计跟踪,以支持合规性、安全性和运营洞察力。", + "AuditLogsEventsTitle": "跟踪哪些事件?", + "AuditLogsEventsIntro": "以下用户操作会被实时记录:", + "SignIn": "登录", + "Logout": "注销", + "ViewApp": "查看应用程序", + "CreateApp": "创建新应用程序", + "DeleteApp": "删除应用程序", + "UpdateApp": "更新应用程序", + "MoveToFolder": "移至文件夹", + "MoveToTrash": "移至垃圾桶", + "RestoreApp": "恢复应用程序", + "CreateFolder": "创建新文件夹", + "DeleteFolder": "删除文件夹", + "UpdateFolder": "更新文件夹", + "ExecuteDataQuery": "执行数据查询", + "CreateUserGroup": "创建新用户组", + "UpdateUserGroup": "更新用户组", + "DeleteUserGroup": "删除用户组", + "AddGroupMember": "添加用户组成员", + "UpdateGroupMemberRole": "更新用户组成员的角色", + "LeaveUserGroup": "离开用户组", + "RemoveGroupMember": "删除用户组成员", + "ServerStartup": "服务器启动", + "CreateDataSource": "创建数据源", + "UpdateDataSource": "更新数据源", + "DeleteDataSource": "删除数据源", + "GrantUpdateDeletePermission": "授予或更新权限", + "LibraryQueryActions": "创建/更新/删除图书馆查询", + "PublishLibraryQuery": "发布图书馆查询", + "AuditLogsPreviewTitle": "预览运行中的审计日志(点击放大)", + "ScreenshotPlaceholder1": "[ 截图 1 占位符 ]", + "ScreenshotPlaceholder2": "[ 截图 2 占位符 ]", + "ScreenshotPlaceholder3": "[ 截图 3 占位符 ]", + "PricingTitle": "企业版定价", + "PricingIntro": "我们根据您的使用模式,为任何规模的组织提供灵活的定价:", + "FlatRateTitle": "方案 1:每个实例统一收费 - 169 美元/月", + "FlatRateDesc": "实例是一个可独立部署的完整 Lowcoder 环境(元数据库+运行时)。其中包括", + "FlatRatePoint1": "专用的 MongoDB 元数据存储", + "FlatRatePoint2": "一个或多个应用程序运行时(\"Api-Service \"和/或 \"Node-Service \"容器)", + "UsagePricingTitle": "方案 2:按使用量定价--每次 API 调用 0.001 美元", + "UsagePricingDesc": "每个实例也可根据应用程序接口的使用情况进行许可。我们提供预付套餐:", + "API100k": "100,000 次 API 调用 - $100", + "API1M": "1,000,000 次 API 调用 - 1,000 美元", + "API10M": "10,000,000 次 API 调用 - $10,000", + "UsageOverrunDesc": "当您的 API 包耗尽时,我们会提醒您。一旦包耗尽,您的实例仍可正常运行,但运行速度会降低,以防止滥用并保持公平。", + "UsageTopUpInfo": "您可以随时无缝添加其他套餐,以确保持续、快速的访问--不会出现服务中断。", + "AppUsageTitle": "应用程序使用日志", + "AppUsageIntroTitle": "了解应用程序的使用方式", + "AppUsageIntro1": "应用程序使用日志可让您深入了解已发布的 Lowcoder 应用程序的使用情况。", + "AppUsageIntro2": "该功能的工作原理类似于内置的简化版 Google Analytics,但完全是私有的,并且只适用于您的 Lowcoder 实例。", + "AppUsageIntro3": "管理员可以分析一段时间内如何访问应用程序、哪些应用程序使用率最高以及用户从哪里连接。", + "AppUsageMetricsTitle": "您可以跟踪的指标...", + "AppUsageMetricsIntro": "这些分析有助于您就参与度和平台使用情况做出明智决策:", + "MetricActiveUsers": "应用程序每天/每周/每月的浏览量(基于时间过滤器)", + "MetricViewsPerApp": "十大应用程序", + "MetricDevices": "通过设备(台式电脑、平板电脑、手机)访问", + "MetricBrowsers": "通过浏览器和操作系统访问", + "MetricCountries": "用户的地理来源", + "AppUsageScreenshotsTitle": "运行中的应用程序使用分析(点击放大)", + "AppUsageScreenshot1": "[应用程序使用情况仪表板屏幕截图]", + "AppUsageScreenshot2": "[每个应用程序的浏览量图表]", + "AppUsageScreenshot3": "[ 地理分布图 ]", + "BrandingIntroTitle": "定制品牌和白标", + "BrandingIntro1": "使用 Lowcoders 品牌设置,您可以通过提供完全可定制的品牌来提升用户的产品体验。", + "BrandingIntro2": "让您的客户或内部团队能够像使用自己的平台一样使用该平台--包括徽标、颜色、字体和自定义页面。", + "BrandingIntro3": "或者,您需要一个完全白标解决方案,并在每个接触点强化您的品牌形象。", + "BrandingColorsIntro1": "您可以设置自己的配色方案,包括主要用户界面元素和导航栏,以匹配您的企业形象。", + "BrandingColorsIntro2": "自定义侧边栏亮点、标题部分甚至文本对比度,以增强用户体验和可访问性。", + "BrandingFontsIntro": "从精心挑选的 Google 字体中进行选择,让您的应用程序在风格和可读性方面都真正属于您自己。", + "BrandingLogosIntro": "当然,您也可以上传自己的长方形和正方形徽标,以显示在标题、仪表盘和登录屏幕中。跨设备和屏幕保持品牌一致性。", + "BrandingPagesIntro1": "在错误页面、注册流程和注销信息中添加个性化文本和视觉效果。", + "BrandingPagesIntro2": "这些接触点有助于提供完全品牌化的体验,即使是在意外情况或账户过渡期间也是如此。", + "BrandingMetaIntro": "定义页面标题和描述等标准元数据,以提高搜索引擎优化效果和品牌信息传递。", + "BrandingHelpLinksIntro": "直接在应用程序内添加上下文相关的文档链接,为用户提供及时帮助。", + "BrandingWhatsNewIntro": "激活 \"最新消息 \"版块,以品牌化的明显方式突出更新和产品公告。", + "EnvironmentsIntroTitle": "低编码器分期", + "EnvironmentsTitle": "多环境基础设施", + "EnvironmentsIntro1": "Lowcoder 环境允许您干净、安全地分离开发、测试和生产阶段。", + "EnvironmentsIntro2": "企业团队可从结构化的发布工作流程、审批流程和跨阶段的版本稳定性中获益。", + "EnvironmentsIntro3": "利用环境功能,管理员可以控制部署的内容、时间和地点,所有这些都可以从一个界面上完成。", + "EnvironmentsIntro4": "Lowcoder 包含多种对象类型,如工作区、数据源、数据查询和应用程序。由于其中许多对象是相互关联的(例如,一个数据源可以在多个应用程序中共享),因此纯粹基于 Git 的导出无法一致地捕获所有依赖关系。相反,Lowcoder 直接在用户界面中提供了一种选择性的集成部署机制。应用程序、数据源和查询可以有选择性地进行管理并跨环境部署。管理对象可确保安全、可控的暂存和生产版本。", + "yourDeploymentID": "您的部署 ID", + "EnvironmentsFeaturePreviewTitle": "运行中的环境与部署(点击放大)", + "EnvironmentsUseCasesTitle": "为什么要使用环境?(分阶段)", + "EnvironmentsUseCase1": "通过在专用开发或质量保证环境中测试应用程序,防止在生产过程中发生意外更改。", + "EnvironmentsUseCase2": "通过实施具有审计就绪跟踪功能的分阶段部署,与企业 IT 治理保持一致。", + "EnvironmentsUseCase3": "让团队能够自信地利用特定环境配置、数据和集成进行构建。", + "EnvironmentsFeaturesTitle": "您的收获", + "EnvironmentsFeature1": "中央控制面板,用于查看和管理所有 Lowcoder 环境。", + "EnvironmentsFeature2": "直接从用户界面在不同环境间部署应用程序、数据源和配置,无需额外的 CI/CD 工具。", + "EnvironmentsFeature3": "特定环境的访问控制和可见性规则。", + "EnvironmentsFeature5": "明确区分暂存、沙盒和生产操作的关注点。", + "apiUsage": "API 调用。", + "loadingApiUsage": "加载 API 使用数据...", + }, + "environments": { + ...en.environments, + + "title": "环境", + "search": "搜索", + "refresh": "刷新", + "addEnvironment": "添加环境", + "errorLoadingEnvironments": "加载环境出错", + "noEnvironmentsFoundMatching": "未找到与\"_{searchText}_\"匹配的环境", + "noEnvironmentsFound": "未找到环境。创建第一个环境,开始使用。", + "environmentsTypeLabel": "环境", + "showingAllEnvironments": "显示所有 {count} 环境", + "unnamedEnvironment": "未命名环境", + "masterEnvironment": "主环境", + "viewAuditLogs": "查看审计日志", + "id": "身份证", + "domain": "域名", + "master": "主人", + "license": "许可证", + "apiCalls": "API 调用", + "yes": "是", + "no": "没有", + "copyId": "复制 ID", + "copied": "已复制!", + "percentUsed": "{percent}% 已用", + "licenseStatus_checking": "检查...", + "licenseStatus_licensed": "特许", + "licenseStatus_unlicensed": "需要许可证", + "licenseStatus_error": "所需设置", + "licenseStatus_unknown": "未知", + "detail_environmentNotFound": "未找到环境", + "detail_returnToEnvironmentsList": "返回环境列表", + "detail_environmentDetail": "环境详情", + "detail_environmentOverview": "环境概述", + "detail_noDomainSet": "无域设置", + "detail_environmentId": "环境 ID", + "detail_licenseStatus": "许可证状态", + "detail_licenseNeeded": "所需许可证", + "detail_setupRequired": "所需设置", + "detail_created": "创建", + "detail_unknown": "未知", + "detail_licenseDetails": "许可证详细信息", + "detail_apiCallsRemaining": "剩余的 API 调用", + "detail_totalApiCallsLimit": "API 调用总数限制", + "detail_enterpriseEdition": "企业版", + "detail_active": "活跃", + "detail_inactive": "不活动", + "detail_licenseInformation": "许可证信息", + "detail_calls": "电话", + "detail_licenses": "许可证", + "detail_license": "许可证", + "detail_workspaces": "工作空间", + "detail_userGroups": "用户组", + "detail_type": "类型", + "detail_status": "现状", + "detail_licensed": "特许", + "detail_unlicensed": "无执照", + "detail_apiKey": "API 密钥", + "detail_configured": "已配置", + "detail_notSet": "未设置", + "detail_masterEnv": "主环境", + "unlicensed_unlicensedDescription": "该环境需要有效的许可证才能解锁其全部功能和特性。请确保正确配置了 API 服务 URL 并安装了插件。", + "unlicensed_errorDescription": "我们在检查许可证时遇到了一个问题。请查看配置设置。", + "unlicensed_defaultDescription": "该环境需要许可证配置才能继续。", + "unlicensed_contactLowcoderTeam": "联系 Lowcoder 团队", + "unlicensed_editEnvironment": "编辑环境", + "unlicensed_backToEnvironments": "返回环境", + "unlicensed_helpText": "需要帮助?请联系我们的团队获取许可支持,或编辑环境配置以解决此问题。", + "unlicensed_type": "类型", + "unlicensed_status": "现状", + "unlicensed_masterEnv": "主环境", + "unlicensed_licenseIssue": "许可证问题", + "unlicensed_error": "错误", + "unlicensed_missing": "失踪", + "error_itemNotFound": "您要查找的项目不存在,或者您没有权限查看该项目。", + "modal_createNewEnvironment": "创建新环境", + "modal_editEnvironment": "编辑环境", + "modal_cancel": "取消", + "modal_createEnvironment": "创建环境", + "modal_saveChanges": "保存更改", + "modal_environmentName": "环境名称", + "modal_pleaseEnterName": "请输入姓名", + "modal_nameMinLength": "姓名必须至少包含 2 个字符", + "modal_enterEnvironmentName": "输入环境名称", + "modal_description": "说明", + "modal_enterDescription": "输入描述", + "modal_stage": "舞台", + "modal_pleaseSelectStage": "请选择阶段", + "modal_selectStage": "选择阶段", + "modal_development": "开发 (DEV)", + "modal_testing": "测试 (TEST)", + "modal_preProduction": "前期制作(PREPROD)", + "modal_production": "生产 (PROD)", + "modal_frontendUrl": "前台 URL", + "modal_pleaseEnterValidUrl": "请输入有效的 URL", + "modal_apiServiceUrl": "应用程序接口服务 URL", + "modal_nodeServiceUrl": "节点服务 URL", + "modal_apiKey": "API 密钥", + "modal_enterApiKey": "输入 API 密钥", + "modal_masterEnvironment": "主环境", + "modal_alreadyMasterEnvironment": "_{name}_已是主环境", + "modal_willBeMaster": "将成为主人", + "modal_currentlyMaster": "现任主人", + "modal_configurationRequirements": "配置要求", + "modal_configurationRequirementsDesc": "确保 API 服务 URL 已配置且正确,API 密钥有效,并确保已正确安装许可证和插件以进行许可证验证。", + "workspaces_title": "工作空间", + "workspaces_subtitle": "管理该环境中的工作空间", + "workspaces_refresh": "刷新", + "workspaces_errorLoadingWorkspaces": "加载工作区出错", + "workspaces_configurationIssue": "配置问题", + "workspaces_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "workspaces_totalWorkspaces": "工作空间总数", + "workspaces_managedWorkspaces": "托管工作区", + "workspaces_unmanagedWorkspaces": "无人管理的工作空间", + "workspaces_workspace": "工作空间", + "workspaces_role": "角色", + "workspaces_status": "现状", + "workspaces_managed": "托管", + "workspaces_unmanaged": "无人管理", + "workspaces_actions": "行动", + "workspaces_viewAuditLogs": "查看审计日志", + "workspaces_audit": "审计", + "workspaces_searchWorkspaces": "按名称或 ID 搜索工作区", + "workspaces_showAll": "显示全部", + "workspaces_managedOnly": "仅管理", + "workspaces_showingResults": "显示 {count} 的 {total} 工作区", + "workspaces_paginationTotal": "工作空间 {start}-{end} 的 {total} 工作空间", + "workspaces_noWorkspacesFound": "此环境中未发现工作区", + "userGroups_title": "用户组", + "userGroups_subtitle": "管理该环境中的用户组", + "userGroups_refresh": "刷新", + "userGroups_errorLoadingUserGroups": "加载用户组时出错", + "userGroups_configurationIssue": "配置问题", + "userGroups_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "userGroups_totalGroups": "组别总数", + "userGroups_allUsersGroups": "所有用户组", + "userGroups_developerGroups": "开发人员小组", + "userGroups_customGroups": "自定义组", + "userGroups_userGroup": "用户组", + "userGroups_type": "类型", + "userGroups_allUsers": "所有用户", + "userGroups_developers": "开发人员", + "userGroups_custom": "定制", + "userGroups_members": "成员", + "userGroups_adminMembers": "行政成员", + "userGroups_created": "创建", + "userGroups_totalMembersTooltip": "该小组成员总数", + "userGroups_adminMembersTooltip": "该组中管理员用户的数量", + "userGroups_searchUserGroups": "按名称或 ID 搜索用户组", + "userGroups_showingResults": "显示 {count} 的 {total} 用户组", + "userGroups_paginationTotal": "用户组 {total} 的 {start}-{end} 用户组", + "userGroups_noUserGroupsFound": "此环境中未发现用户组", + "apps_title": "应用程序", + "apps_subtitle": "管理工作区应用程序", + "apps_refresh": "刷新", + "apps_errorLoadingApps": "加载应用程序出错", + "apps_configurationIssue": "配置问题", + "apps_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "apps_totalApps": "应用程序总数", + "apps_publishedApps": "已发布的应用程序", + "apps_managedApps": "托管应用程序", + "apps_unmanagedApps": "非托管应用程序", + "apps_app": "应用程序", + "apps_status": "现状", + "apps_published": "已出版", + "apps_draft": "草案", + "apps_managed": "托管", + "apps_unmanaged": "无人管理", + "apps_deploy": "部署", + "apps_audit": "审计", + "apps_appMustBeManagedToDeploy": "在部署应用程序之前必须对其进行管理", + "apps_deployThisApp": "将此应用程序部署到另一个环境", + "apps_viewAuditLogs": "查看审计日志", + "apps_searchApps": "按名称或 ID 搜索应用程序", + "apps_showAll": "显示全部", + "apps_managedOnly": "仅管理", + "apps_showingResults": "显示 {total} 应用程序中的 {count} 应用程序", + "apps_paginationTotal": "_{start}_-_{end}_的__{total}_应用程序", + "apps_noAppsFound": "该工作区没有发现应用程序", + "apps_appRecycled": "此应用程序已被移至回收站", + "apps_managedSuccess": "_{name}_现已托管", + "apps_unmanagedSuccess": "_{name}_现在处于非托管状态", + "apps_managedError": "更改 {name} 的托管状态失败", + "dataSources_title": "数据来源", + "dataSources_subtitle": "管理工作区数据连接", + "dataSources_refresh": "刷新", + "dataSources_errorLoadingDataSources": "加载数据源出错", + "dataSources_configurationIssue": "配置问题", + "dataSources_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "dataSources_totalDataSources": "数据源总数", + "dataSources_availableTypes": "可用类型", + "dataSources_managed": "托管", + "dataSources_unmanaged": "无人管理", + "dataSources_dataSource": "数据来源", + "dataSources_type": "类型", + "dataSources_status": "现状", + "dataSources_deploy": "部署", + "dataSources_audit": "审计", + "dataSources_dataSourceMustBeManagedToDeploy": "在部署数据源之前必须对其进行管理", + "dataSources_deployThisDataSource": "将此数据源部署到另一个环境", + "dataSources_viewAuditLogs": "查看审计日志", + "dataSources_searchDataSources": "按名称或 ID 搜索数据源", + "dataSources_showAll": "显示全部", + "dataSources_managedOnly": "仅管理", + "dataSources_showingResults": "显示 {total} 数据源中的 {count} 数据源", + "dataSources_paginationTotal": "_{start}_-_{end}_的__{total}_数据源", + "dataSources_noDataSourcesFound": "该工作区未发现数据源", + "dataSources_managedSuccess": "_{name}_现已托管", + "dataSources_unmanagedSuccess": "_{name}_现在处于非托管状态", + "dataSources_managedError": "更改 {name} 的托管状态失败", + "queries_title": "查询", + "queries_subtitle": "管理工作区 API 查询", + "queries_refresh": "刷新", + "queries_errorLoadingQueries": "加载查询出错", + "queries_configurationIssue": "配置问题", + "queries_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "queries_totalQueries": "查询总数", + "queries_managed": "托管", + "queries_unmanaged": "无人管理", + "queries_query": "查询", + "queries_creator": "创作者", + "queries_status": "现状", + "queries_deploy": "部署", + "queries_audit": "审计", + "queries_queryMustBeManagedToDeploy": "在部署查询之前必须对其进行管理", + "queries_deployThisQuery": "将此查询部署到另一个环境", + "queries_viewAuditLogs": "查看审计日志", + "queries_searchQueries": "按名称或 ID 搜索查询", + "queries_showAll": "显示全部", + "queries_managedOnly": "仅管理", + "queries_showingResults": "显示 {total} 查询的 {count}", + "queries_paginationTotal": "{total}的_{start}_-{end}_查询", + "queries_noQueriesFound": "在此工作区未发现查询", + "queries_managedSuccess": "_{name}_现已托管", + "queries_unmanagedSuccess": "_{name}_现在处于非托管状态", + "queries_managedError": "更改 {name} 的托管状态失败", + "deployModal_deployTitle": "部署{singularLabel}:", + "deployModal_loadingEnvironments": "加载环境...", + "deployModal_sourceEnvironment": "来源 环境", + "deployModal_targetEnvironment": "目标环境", + "deployModal_selectTargetEnvironment": "选择目标环境", + "deployModal_selectTargetEnvironmentValidation": "请选择目标环境", + "deployModal_confirmed": "已确认", + "deployModal_cancel": "取消", + "deployModal_deploy": "部署", + "deployModal_targetEnvironmentNotFound": "未找到目标环境", + "deployModal_confirmCredentialOverwrite": "请在部署前确认证书覆盖", + "deployModal_deploySuccess": "成功将 {name} 部署到目标环境中", + "deployModal_deployFailed": "部署{singularLabel}失败", + "deployModal_selectFieldValidation": "请选择 {label}", + "deployModal_selectFieldPlaceholder": "选择 {label}", + "deployModal_inputFieldValidation": "请输入{label}__。", + "deployModal_inputFieldPlaceholder": "输入 {label}", + "contactLowcoder_title": "联系 Lowcoder 团队", + "contactLowcoder_environmentLabel": "环境", + "contactLowcoder_environmentIdLabel": "环境 ID:", + "contactLowcoder_deploymentIdLabel": "部署编号:", + "contactLowcoder_loading": "正在加载...", + "contactLowcoder_notAvailable": "不详", + "contactLowcoder_unnamedEnvironment": "未命名环境", + "contactLowcoder_fetchingDeploymentInfo": "获取部署信息...", + "contactLowcoder_unableToLoadContactForm": "无法加载联系表单", + "contactLowcoder_apiConfigurationError": "未配置环境 API 服务 URL 或 API 密钥", + "contactLowcoder_failedToFetchDeploymentId": "获取部署 ID 失败", + "contactLowcoder_ensureProperConfiguration": "请确保环境配置正确,以便联系支持人员。", + "credentialConfirmations_firstConfirmation_title": "重写凭证警告", + "credentialConfirmations_firstConfirmation_message": "此操作将覆盖目标环境中的现有凭证。", + "credentialConfirmations_firstConfirmation_description": "这是一项严重的操作,可能会影响其他应用程序和用户。", + "credentialConfirmations_firstConfirmation_question": "你确定要继续吗?", + "credentialConfirmations_firstConfirmation_continueButton": "继续", + "credentialConfirmations_firstConfirmation_cancelButton": "取消", + "credentialConfirmations_secondConfirmation_title": "需要最终确认", + "credentialConfirmations_secondConfirmation_message": "最后警告:证书重写", + "credentialConfirmations_secondConfirmation_description": "您将覆盖目标环境中的凭证。此操作无法撤销,并可能破坏现有集成。", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "请再确认一次。", + "credentialConfirmations_secondConfirmation_finalQuestion": "您确定要覆盖证书吗?", + "credentialConfirmations_secondConfirmation_confirmButton": "是,重写证书", + "credentialConfirmations_secondConfirmation_cancelButton": "取消", + "config_singularLabels_app": "应用程序", + "config_singularLabels_dataSource": "数据来源", + "config_singularLabels_query": "查询", + "config_singularLabels_workspace": "工作空间", + "config_fields_updateDependenciesIfNeeded": "必要时更新依赖项", + "config_fields_publishOnTarget": "按目标出版", + "config_fields_publicToAll": "公众对所有人", + "config_fields_publicToMarketplace": "公众到市场", + "config_fields_overwriteCredentials": "重写证书", + "services_environments_missingEnvironmentId": "缺少环境 ID", + "services_environments_failedToUpdateEnvironment": "更新环境失败", + "services_environments_environmentCreatedSuccessfully": "成功创建环境", + "services_environments_failedToCreateEnvironment": "创建环境失败", + "services_environments_failedToFetchEnvironments": "获取环境失败", + "services_environments_failedToFetchEnvironment": "获取环境失败", + "services_environments_environmentIdRequired": "需要环境 ID", + "services_environments_apiKeyRequiredForWorkspaces": "获取工作区需要 API 密钥", + "services_environments_apiServiceUrlRequiredForWorkspaces": "获取工作区需要 API 服务 URL", + "services_environments_failedToFetchWorkspaces": "获取工作区失败", + "services_environments_apiKeyRequiredForUserGroups": "获取用户组需要 API 密钥", + "services_environments_apiServiceUrlRequiredForUserGroups": "获取用户组需要 API 服务 URL", + "services_environments_failedToFetchUserGroups": "获取用户组失败", + "services_environments_workspaceIdRequired": "需要工作区 ID", + "services_environments_apiKeyRequiredForApps": "获取应用程序需要 API 密钥", + "services_environments_apiServiceUrlRequiredForApps": "获取应用程序需要 API 服务 URL", + "services_environments_failedToFetchWorkspaceApps": "获取工作区应用程序失败", + "services_environments_apiKeyRequiredForDataSources": "获取数据源需要 API 密钥", + "services_environments_apiServiceUrlRequiredForDataSources": "获取数据源需要 API 服务 URL", + "services_environments_failedToFetchWorkspaceDataSources": "获取工作区数据源失败", + "services_environments_apiKeyRequiredForQueries": "获取查询需要 API 密钥", + "services_environments_apiServiceUrlRequiredForQueries": "获取查询需要 API 服务 URL", + "services_environments_failedToFetchWorkspaceQueries": "获取工作区查询失败", + "services_environments_apiServiceUrlNotConfigured": "未配置 API 服务 URL", + "services_environments_licenseCheckFailed": "许可证检查失败", + "services_environments_apiKeyRequiredForDeploymentId": "获取部署 ID 需要 API 密钥", + "services_environments_failedToFetchDeploymentId": "获取部署 ID 失败", + "services_enterprise_missingEnvironmentId": "缺少环境 ID", + "services_enterprise_failedToFetchManagedWorkspaces": "获取托管工作区失败", + "services_enterprise_missingRequiredParamsToConnectOrg": "缺少连接工作区所需的参数", + "services_enterprise_failedToConnectOrg": "连接工作区失败", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "缺少工作区 GID,无法连接工作区", + "services_enterprise_failedToUnconnectOrg": "取消连接工作区失败", + "services_enterprise_failedToConnectApp": "连接应用程序失败", + "services_enterprise_failedToUnconnectApp": "取消连接应用程序失败", + "services_enterprise_failedToFetchDataSources": "获取数据源失败", + "services_enterprise_failedToDeployDataSource": "部署数据源失败", + "services_enterprise_failedToDisconnectManagedDataSource": "断开受管数据源连接失败", + "services_enterprise_environmentIdRequired": "需要环境 ID", + "services_enterprise_failedToFetchQueries": "获取查询失败", + "services_enterprise_environmentIdAndQueryGidRequired": "需要环境 ID 和查询 GID", + "services_enterprise_failedToDeployQuery": "部署查询失败", + "services_enterprise_queryGidRequired": "需要查询 GID", + "services_enterprise_failedToDisconnectQuery": "断开查询失败", + "services_apps_failedToFetchApps": "获取应用程序失败", + "services_apps_failedToDeployApp": "部署应用程序失败", + "services_datasources_workspaceIdRequired": "需要工作区 ID", + "services_datasources_apiKeyRequiredToFetchDataSources": "获取数据源需要 API 密钥", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "获取数据源需要 API 服务 URL", + "services_datasources_failedToFetchDataSources": "获取数据源失败", + "services_datasources_failedToDeployDataSource": "部署数据源失败", + "services_workspace_failedToFetchWorkspaces": "获取工作区失败", + "services_workspace_failedToDeployWorkspace": "部署工作区失败", + "services_managedObjects_missingRequiredParameters": "缺少所需参数", + "services_managedObjects_failedToCheckManagedStatus": "检查托管状态失败", + "services_managedObjects_failedToSetAsManaged": "将 {{objType}} 设为托管失败", + "services_managedObjects_failedToRemoveFromManaged": "从托管中删除 {{objType}} 失败", + "services_managedObjects_missingEnvironmentId": "缺少环境 ID", + "services_managedObjects_failedToFetchManagedObjects": "获取托管对象失败", + "services_managedObjects_failedToFetchManagedObject": "获取托管对象失败", + "services_managedObjects_managedObjectNotFound": "未找到 objGid 的托管对象:___placeholder0___}", + "services_license_apiServiceUrlRequired": "需要 API 服务 URL", + "services_license_licenseInformationUnavailable": "许可证信息不可用", + "services_license_licenseCheckTookTooLong": "执照检查时间过长", + "services_license_licenseServiceNotAvailable": "许可证服务不可用", + "services_license_authenticationRequired": "需要验证 - 请检查 API 密钥", + "services_license_licenseServiceTemporarilyUnavailable": "许可证服务暂时不可用", + "services_license_remainingAPICalls": "剩余_{{remaining}_}(_{{used}_}/_{{total}_}已用,_{{percentage}_}%)。", + }, + "subscription": { + ...en.subscription, + + "details": "订阅详情", + "productDetails": "产品详情", + "productName": "产品名称", + "productDescription": "产品说明", + "productPrice": "产品价格", + "subscriptionDetails": "订阅详情", + "status": "现状", + "startDate": "开始日期", + "currentPeriodEnd": "本期末", + "customerId": "客户 ID", + "subscriptionItems": "订阅项目", + "itemId": "项目编号", + "plan": "计划", + "quantity": "数量", + "product": "产品", + "invoices": "发票", + "invoiceNumber": "发票号码", + "date": "日期", + "amount": "金额", + "link": "链接到", + "viewInvoice": "查看发票", + "downloadPDF": "下载 PDF", + "billingReason": "计费原因", + "subscriptionCycle": "每月订阅", + "customer": "客户", + "links": "链接", + "paid": "已付款", + "unpaid": "未支付", + "noInvoices": "无发票", + "costVolumeDevelopment": "成本/数量开发", + "noUsageRecords": "无使用记录", + "itemDescription": "项目说明", + "periodStart": "期间开始", + "periodEnd": "期末", + "billingReason.subscription_cycle": "订阅周期", + "billingReason.subscription_create": "创建订阅", + "billingReason.manual": "人工账单", + "billingReason.upcoming": "近期账单", + "billingReason.subscription_threshold": "订阅阈值", + "billingReason.subscription_update": "订阅更新", + "backToSubscriptions": "返回订阅", + "manageSubscription": "管理您的订阅", + "subscriptionHelp": "订阅帮助", + "subscriptionHelpDescription": "如有任何疑问,请联系我们。service@lowcoder.cloud", + "success": "付款和订阅成功", + "successTitle": "感谢您加入 Lowcoder 大家庭!", + "successThankYou": "我们很高兴您的加入!您对 Lowcoder 的信任对我们意义重大,我们致力于从第一天起就为您提供卓越的体验。\n\n在 Lowcoder,您不仅是我们的客户,还是推动创新和发展的社区的一员。我们的使命是帮助您轻松实现目标,无论是快速解决挑战、构建创新解决方案,还是随时为您提供支持。\n\n以下是您可以期待的:\n\n- 一流的支持:我们的团队随时准备为您提供帮助。\n- 不断创新:我们不断改进,为您提供最好的工具和功能。\n- 成功的合作伙伴关系:您的成功是我们的首要任务。\n\n感谢您激励我们不断超越自我,追求卓越。我们迫不及待地想看到我们共同打造的成果。\n\n欢迎加入我们!让我们一起创造非凡。", + "successLowcoderTeam": "Lowcoder 团队", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "获取产品详细信息时出错。", + "fetchSubscriptionDetails": "获取订阅详细信息时出错。", + "fetchInvoices": "获取发票时出错。", + }, + "auditLog": { + ...en.auditLog, + + "title": "审计日志详情", + "geoLocation": "地理位置", + "browserData": "浏览器/系统元数据", + "browser": "浏览器", + "OS": "操作系统", + "device": "设备", + "deviceType": "设备类型", + "engine": "发动机", + "webview": "网络视图", + "eventDetail": "活动详情", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "管理员", + "superAdmin": "超级管理员", + "adminGroupRoleInfo": "管理员可以管理群组成员和资源", + "adminOrgRoleInfo": "拥有所有资源并可以管理群组.", + "member": "成员", + "memberGroupRoleInfo": "成员可以查看群组成员", + "memberOrgRoleInfo": "仅能使用或访问他们有权限的资源.", + "title": "成员", + "createGroup": "创建分组", + "newGroupPrefix": "新分组 ", + "allMembers": "所有成员", + "deleteModalTitle": "删除该分组", + "deleteModalContent": "删除的分组将无法恢复.确定要删除该分组吗?", + "addMember": "添加成员", + "nameColumn": "用户名", + "joinTimeColumn": "加入时间", + "actionColumn": "操作", + "roleColumn": "角色", + "exitGroup": "退出分组", + "moveOutGroup": "从分组中移除", + "inviteUser": "邀请成员", + "exitOrg": "离开", + "exitOrgDesc": "确定要离开该工作空间吗?", + "moveOutOrg": "移除", + "moveOutOrgDescSaasMode": "确定要将用户 {name} 从该工作空间中移除吗?", + "moveOutOrgDesc": "确定要移除用户 {name} 吗?此操作无法恢复.", + "devGroupTip": "开发者组的成员具有创建应用程序和数据源的权限.", + "lastAdminQuit": "最后一个管理员不能退出.", + "organizationNotExist": "当前工作空间不存在", + "inviteUserHelp": "您可以复制邀请链接发送给所想邀请的用户", + "inviteUserLabel": "邀请链接:", + "inviteCopyLink": "复制链接", + "inviteText": "{userName} 邀请您加入工作空间 \"{organization}\",点击链接加入:{inviteLink}", + "inviteByEmailHelp": "您可以输入一个或多个电子邮件地址来发送邀请链接", + "inviteByEmailLabel": "输入电子邮件:", + "inviteByEmailButton": "发送邀请函", + "inviteByEmailSuccess": "邀请函已成功发送!", + "inviteByEmailError": "发送邀请时出了问题。请重试。", + "noValidEmails": "未找到有效电子邮件", + "groupName": "群组名称", + "createTime": "创建时间", + "manageBtn": "管理", + "userDetail": "详细信息", + "syncDeleteTip": "该分组已从通讯录源中删除", + "syncGroupTip": "该分组是一个通讯录同步分组,无法进行编辑", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "新工作空间", + "title": "工作空间", + "createOrg": "创建工作空间", + "deleteModalTitle": "确定要删除该工作空间吗?", + "deleteModalContent": "您即将删除该工作空间 {permanentlyDelete}.一旦删除,工作空间将{notRestored}.", + "permanentlyDelete": "永久删除", + "notRestored": "无法恢复", + "deleteModalLabel": "请输入工作空间名称{name}以确认操作:", + "deleteModalTip": "请输入工作空间名称", + "deleteModalErr": "工作空间名称不正确", + "deleteModalBtn": "删除", + "editOrgTitle": "编辑工作空间信息", + "orgNameLabel": "工作空间名称:", + "orgNameCheckMsg": "工作空间名称不能为空", + "orgLogo": "工作空间徽标:", + "logoModify": "修改图片", + "inviteSuccessMessage": "成功加入工作空间", + "inviteFailMessage": "加入工作空间失败", + "uploadErrorMessage": "上传错误", + "orgName": "工作空间名称", + }, + "freeLimit": "免费试用", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "切换选项卡", + "switchTabDesc": "切换选项卡时触发", + "tab": "选项卡", + "atLeastOneTabError": "选项卡容器至少保留一个选项卡", + "selectedTabKeyDesc": "当前选中的选项卡", + "iconPosition": "图标位置", + "placement": "位置", + "showTabs": "显示选项卡", + "gutter": "间距", + "gutterTooltip": "标签页之间的距离,单位为 px", + "tabsCentered": "居中标签", + "destroyInactiveTab": "销毁不活动的 TabPane", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "从右侧窗格拖动组件或", + "openDialogButton": "从数据生成表单", + "resetAfterSubmit": "成功提交后重置", + "initialData": "初始数据", + "disableSubmit": "禁用提交", + "success": "表单生成成功", + "selectCompType": "选择组件类型", + "dataSource": "数据源:", + "invalidFormMessage": "自定义无效表单信息", + "selectSource": "选择数据源", + "table": "表格:", + "selectTable": "选择表格", + "columnName": "列名", + "dataType": "数据类型", + "compType": "组件类型", + "required": "必填", + "generateForm": "生成表单", + "compSelectionError": "未配置的列类型", + "compTypeNameError": "无法获取组件类型名称", + "noDataSourceSelected": "未选择数据源", + "noTableSelected": "未选择表格", + "noColumn": "没有这一列", + "noColumnSelected": "未选择列", + "noDataSourceFound": "未找到支持的数据源,创建新的数据源", + "noTableFound": "在此数据源中未找到表格,请选择其他数据源", + "noColumnFound": "在此表格中未找到支持的列,请选取其他表格", + "formTitle": "表单标题", + "name": "名称", + "nameTooltip": "表单数据中的属性名称,如果留空默认为组件名称", + "notSupportMethod": "不支持的方法:", + "notValidForm": "表单无效", + "resetDesc": "将表单数据重置为默认值", + "clearDesc": "清除表单数据", + "setDataDesc": "设置表单数据", + "valuesLengthError": "参数数量错误", + "valueTypeError": "参数类型错误", + "dataDesc": "当前表单数据", + "loadingDesc": "表单是否正在加载中?", + }, + "modalComp": { + ...en.modalComp, + + "open": "开放", + "openDesc": "打开模态对话框时触发", + "close": "关闭", + "closeDesc": "对话框关闭时触发", + "openModalDesc": "打开对话框", + "closeModalDesc": "关闭对话框", + "visibleDesc": "是否可见?如果为true,当前对话框将弹出", + "title": "抽屉标题", + "titleAlign": "标题调整", + "modalHeight": "对话框高度", + "modalHeightTooltip": "数字,例如:222", + "modalWidth": "对话框宽度", + "modalWidthTooltip": "数字或百分比,例如:520,60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "行数", + "noOfRowsTooltip": "列表中的行数 - 如果您需要呈现查询结果,通常将其设置为变量(例如,'{{query1.data.length}}').", + "noOfColumns": "列数", + "itemIndexName": "项目索引名称", + "itemIndexNameDesc": "指向项目索引的变量名称,默认为{default}", + "itemDataName": "项目数据名称", + "itemDataNameDesc": "指向项目数据对象的变量名称,默认为{default}", + "itemsDesc": "在列表中公开组件的数据", + "dataDesc": "当前列表中使用的原始数据", + "dataTooltip": "如果将其计算为数字,此字段将被视为行数,并且数据将被视为空.", + "enableSorting": "允许排序", + }, + "navigation": { + ...en.navigation, + + "addText": "添加子菜单项", + "logoURL": "Logo链接", + "horizontalAlignment": "水平对齐", + "logoURLDesc": "Logo链接", + "itemsDesc": "导航菜单项", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "子菜单 {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "活动的", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "iframe源链接", + "allowDownload": "下载", + "allowSubmitForm": "提交表单", + "allowMicrophone": "麦克风", + "allowCamera": "摄像头", + "allowPopup": "弹出窗口", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "默认布尔值", + "open": "打开", + "close": "关闭", + "openDesc": "切换打开时触发", + "closeDesc": "切换关闭时触发", + "valueDesc": "当前开关状态", + }, + "signature": { + ...en.signature, + + "tips": "提示", + "signHere": "在此处签名", + "showUndo": "显示撤消", + "showClear": "显示清除", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "当前存储的所有数据项", + "setItemDesc": "添加一个数据项", + "removeItemDesc": "移除一个数据项", + "clearItemDesc": "清除所有数据项", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "打开链接", + "openApp": "打开应用", + "copyToClipboard": "复制到剪贴板", + "downloadFile": "下载文件", + "logoutUser": "注销用户", + "resetPassword": "重置密码", + }, + "messageComp": { + ...en.messageComp, + + "info": "发送通知", + "loading": "发送加载通知", + "success": "发送成功通知", + "warn": "发送警告通知", + "error": "发送错误通知", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "关闭通知", + "info": "发送通知", + "loading": "发送加载通知", + "success": "发送成功通知", + "warn": "发送警告通知", + "error": "发送错误通知", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "切换主题", + }, + "transformer": { + ...en.transformer, + + "preview": "预览", + "docLink": "关于转换器", + "previewSuccess": "预览成功", + "previewFail": "预览失败", + "deleteMessage": "删除转换器成功.您可以使用 {undoKey} 进行撤销.", + "documentationText": "转换器专为数据转换和重复使用多行 JavaScript 代码而设计。使用转换器可将来自查询或组件的数据调整为本地应用程序所需的数据。与 JavaScript 查询不同,转换器旨在执行只读操作,这意味着您不能在转换器内触发查询或更新临时状态。", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "初始值", + "valueTooltip": "存储在临时状态中的初始值可以是任何有效的 JSON 值.", + "docLink": "关于临时状态", + "pathTypeError": "路径必须是字符串或值数组", + "unStructuredError": "无结构数据 {prev} 不能被 {path} 更新", + "valueDesc": "临时状态值", + "deleteMessage": "临时状态已成功删除.您可以使用 {undoKey} 进行撤销.", + "documentationText": "临时状态是一种强大的功能,用于管理复杂的变量,动态更新应用程序中组件的状态。这些状态可作为数据的中间或临时存储,这些数据会随着用户交互或其他进程的变化而变化。", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "数据", + "dataDesc": "当前数据响应器的数据", + "dataTooltip": "当此数据发生变化时,将触发后续操作.", + "docLink": "关于数据响应器", + "deleteMessage": "数据响应器已成功删除.您可以使用 {undoKey} 进行撤销.", + "documentationText": "在开发应用程序时,您可以为组件分配事件,以监控特定数据的变化。例如,表格组件可能会有 \"行选择变化\"、\"过滤器变化\"、\"排序变化 \"和 \"页面变化 \"等事件,以跟踪 selectedRow 属性的变化。但是,对于临时状态、转换器或查询结果的变化,如果没有标准事件,则需要使用数据响应器。数据响应器能让你检测到任何数据修改并做出反应。", + }, + "theme": { + ...en.theme, + + "title": "主题", + "createTheme": "创建主题", + "themeName": "主题名称:", + "themeNamePlaceholder": "请输入主题名称", + "defaultThemeTip": "默认主题:", + "createdThemeTip": "您创建的主题:", + "option": "选项{index}", + "input": "输入", + "confirm": "确定", + "emptyTheme": "没有可用的主题", + "click": "", + "toCreate": "", + "nameColumn": "名称", + "defaultTip": "默认", + "updateTimeColumn": "更新时间", + "edit": "编辑", + "cancelDefaultTheme": "取消默认主题", + "setDefaultTheme": "设为默认主题", + "copyTheme": "复制主题", + "setSuccessMsg": "设置成功", + "cancelSuccessMsg": "取消设置成功", + "deleteSuccessMsg": "删除成功", + "checkDuplicateNames": "主题名称已存在,请重新输入", + "copySuffix": " 副本", + "saveSuccessMsg": "保存成功", + "leaveTipTitle": "提示", + "leaveTipContent": "您还没有保存,确认离开吗?", + "leaveTipOkText": "离开", + "goList": "返回列表", + "saveBtn": "保存", + "mainColor": "主要颜色", + "text": "文本颜色", + "layout": "布局设置", + "fonts": "字体设置", + "components": "组件模板", + "charts": "电子图表定义", + "defaultTheme": "默认", + "yellow": "黄色", + "green": "绿色", + "previewTitle": "主题预览\n使用您的主题颜色的示例组件", + "dateColumn": "日期", + "emailColumn": "电子邮件", + "phoneColumn": "电话", + "subTitle": "标题", + "linkLabel": "链接", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "进度", + "sliderLabel": "滑块", + "radioLabel": "单选按钮", + "checkboxLabel": "复选框", + "buttonLabel": "按钮", + "switch": "开关", + "previewDate": "2022/10/16", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "balloon.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "图表样式预览", + "chartSpending": "支出", + "chartBudget": "预算", + "chartAdmin": "管理", + "chartFinance": "财务", + "chartSales": "销售", + "chartFunnel": "漏斗图", + "chartShow": "展示", + "chartClick": "点击", + "chartVisit": "访问", + "chartQuery": "查询", + "chartBuy": "购买", + "canvas": "画布设置", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "品牌颜色", + "primaryDesc": "大多数组件使用的默认主颜色", + "textDark": "深色文本颜色", + "textDarkDesc": "当背景颜色较浅时使用", + "textLight": "浅色文本颜色", + "textLightDesc": "当背景颜色较深时使用", + "canvas": "画布颜色", + "canvasDesc": "应用的默认背景颜色", + "primarySurface": "容器颜色", + "primarySurfaceDesc": "组件(如表格)的默认背景颜色", + "borders": "边框样式", + "spacing": "间距样式", + "font": "字体样式", + "fonts": "字体", + "borderRadius": "边框圆角", + "borderRadiusDesc": "大多数组件使用的默认边框圆角", + "borderColor": "边框颜色", + "borderColorDesc": "大多数组件使用的默认边框颜色", + "borderWidth": "边框宽度", + "borderWidthDesc": "大多数组件使用的默认边框宽度", + "borderStyle": "边框样式", + "borderStyleDesc": "大多数组件使用的默认边框样式", + "fontFamily": "字体系列", + "fontFamilyDesc": "大多数组件使用的默认字体系列", + "chart": "图表样式", + "chartDesc": "在此处放置 eCharts 的主题 JSON,以定义所有详细信息中图表的样式。", + "echartsJson": "您可以使用主题 JSON 生成器。将生成器中的 JSON 复制并粘贴到这里。", + "margin": "外边距", + "marginDesc": "大多数组件通常使用的默认外边距", + "padding": "内边距", + "paddingDesc": "大多数组件通常使用的默认内边距", + "containerHeaderPadding": "标题内边距", + "containerheaderpaddingDesc": "大多数组件通常使用的默认标题内边距", + "gridColumns": "网格列", + "gridColumnsDesc": "大多数容器通常使用的默认列数", + "loadingIndicators": "加载指示器", + "showComponentLoadingIndicators": "当组件加载时显示加载指示器", + "showDataLoadingIndicators": "在数据加载期间显示指示器", + "dataLoadingIndicator": "数据加载指示器", + "background": "背景样式", + "gridSettings": "网格设置", + "gridRowHeight": "网格行高", + "gridRowHeightDesc": "网格中每行的高度", + "gridRowCount": "网格行数", + "gridRowCountDesc": "网格中的最大行数", + "gridPaddingX": "水平内边距", + "gridPaddingXDesc": "画布的水平内边距", + "gridPaddingY": "垂直内边距", + "gridPaddingYDesc": "画布的垂直内边距", + "gridBgImage": "背景图片", + "gridBgImageDesc": "画布的背景图片", + "gridBgImageRepeat": "背景图片重复", + "gridBgImageRepeatDesc": "画布背景图片的重复方式", + "gridBgImageSize": "背景图片大小", + "gridBgImageSizeDesc": "画布背景图片的大小", + "gridBgImagePosition": "背景图片位置", + "gridBgImagePositionDesc": "画布背景图片的位置", + "gridBgImageOrigin": "背景图片起点", + "gridBgImageOriginDesc": "画布背景图片的起点", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "插件", + "npmPluginTitle": "npm 插件", + "npmPluginDesc": "为当前工作空间中的所有应用程序设置 npm 插件.", + "npmPluginEmpty": "尚未添加 npm 插件.", + "npmPluginAddButton": "添加 npm 插件", + "saveSuccess": "保存成功", + }, + "advanced": { + ...en.advanced, + + "title": "高级", + "defaultHomeTitle": "默认首页", + "defaultHomeHelp": "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", + "defaultHomePlaceholder": "选择默认首页", + "saveBtn": "保存", + "preloadJSTitle": "预加载 JavaScript", + "preloadJSHelp": "为当前工作空间中的所有应用程序设置预加载的 JavaScript 代码.", + "preloadCSSTitle": "预加载 CSS", + "preloadCSSHelp": "为当前工作空间中的所有应用程序设置预加载的 CSS 代码.", + "preloadCSSApply": "应用到工作空间的首页", + "preloadLibsTitle": "JavaScript 库", + "preloadLibsHelp": "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", + "preloadLibsEmpty": "尚未添加 JavaScript 库", + "preloadLibsAddBtn": "添加库", + "saveSuccess": "保存成功", + "AuthOrgTitle": "工作区欢迎屏幕", + "AuthOrgDescrition": "用户登录当前工作区的 URL。", + "APIConsumption": "API 消耗", + "APIConsumptionDescription": "API 消耗是指当前工作空间中所有应用程序的 API 消耗情况,包括调用次数和调用时间.", + "overallAPIConsumption": "总体 API 消耗", + "lastMonthAPIConsumption": "上个月 API 消耗", + "npmRegistryTitle": "自定义 NPM 注册表", + "npmRegistryHelp": "设置自定义 NPM 注册表,以便从私有 NPM 注册表中获取插件。", + "showHeaderInPublicApps": "在公共视图中显示标题", + "showHeaderInPublicAppsHelp": "设置所有应用程序的标题在公共视图中的可见性", + }, + "branding": { + ...en.branding, + + "title": "品牌设置", + "general": "常规设置", + "selectWorkspace": "选择工作区", + "brandingName": "品牌名称", + "brandingNamePlaceholder": "输入品牌名称", + "brandingDescription": "品牌描述", + "brandingDescriptionPlaceholder": "输入品牌描述", + "logoSection": "标志", + "logo": "标志", + "logoHelp": "上传公司标志,支持 SVG 或 PNG 格式。", + "logoUrlHelp": "为徽标提供有效的图片链接。", + "logoUrlPlaceholder": "提供商徽标图像网址", + "squareLogo": "方形标志", + "squareLogoHelp": "上传方形版本的标志,支持 SVG 或 PNG 格式。", + "squareLogoUrlHelp": "提供方形徽标的有效图片链接地址。", + "squareLogoUrlPlaceholder": "提供方形徽标的网址。", + "colorFontSection": "颜色和字体", + "mainBrandingColor": "主品牌颜色", + "mainBrandingColorHelp": "选择品牌的主要颜色。", + "editorHeaderColor": "编辑器头部颜色", + "editorHeaderColorHelp": "选择编辑器头部的颜色。", + "adminSidebarColor": "管理员侧边栏颜色", + "adminSidebarColorHelp": "选择管理员侧边栏的颜色。", + "adminSidebarFontColor": "管理侧边栏字体颜色", + "adminSidebarFontColorHelp": "为管理员侧边栏选择字体颜色。", + "adminSidebarActiveBgColor": "管理侧边栏所选项目的背景颜色", + "adminSidebarActiveBgColorHelp": "为管理员侧边栏选择所选项目的背景颜色。", + "adminSidebarActiveFontColor": "管理侧边栏所选项目的字体颜色", + "adminSidebarActiveFontColorHelp": "为管理员侧边栏选择所选项目的字体颜色。", + "editorSidebarColor": "编辑器侧边栏颜色", + "editorSidebarColorHelp": "选择编辑器侧边栏的颜色。", + "editorSidebarFontColor": "编辑器侧边栏字体颜色", + "editorSidebarFontColorHelp": "为编辑器侧边栏选择字体颜色。", + "editorSidebarActiveBgColor": "编辑器侧边栏所选项目的背景颜色", + "editorSidebarActiveBgColorHelp": "为编辑器侧边栏选择所选项目的背景颜色。", + "editorSidebarActiveFontColor": "编辑器侧边栏所选项目的字体颜色", + "editorSidebarActiveFontColorHelp": "为编辑器侧边栏选择所选项目的字体颜色。", + "font": "字体", + "fontHelp": "从 Google Fonts 中选择您的应用字体。", + "textSection": "文本和页面", + "errorPage": "错误页面文本", + "errorPageHelp": "输入显示在错误页面上的文本。", + "signUpPage": "注册页面文本", + "signUpPageHelp": "输入显示在注册页面上的文本。", + "loggedOutPage": "注销页面文本", + "loggedOutPageHelp": "输入显示在注销页面上的文本。", + "standardDescription": "标准描述", + "standardDescriptionHelp": "输入 SEO 元信息的标准描述。", + "standardTitle": "标准标题", + "standardTitleHelp": "输入 SEO 元信息的标准标题。", + "showDocumentation": "显示文档", + "submitIssue": "允许提交问题", + "whatsNew": "启用“新功能”", + "saveButton": "保存设置", + "errorPageImage": "上传一个用于错误页面的SVG或PNG格式的图片。", + "errorPageImageUrl": "错误页面的图像 URL", + "errorPageImageUrlPlaceholder": "错误页面的提供程序图像网址", + "errorPageImageUrlHelp": "提供一个有效的图片 url 以显示在错误页面上。", + "signUpPageImage": "上传一个用于注册页面的SVG或PNG格式的图片。", + "signUpPageImageUrl": "注册页面的图片 URL", + "signUpPageImageUrlPlaceholder": "为注册页面提供图片网址", + "signUpPageImageUrlHelp": "提供有效的图片网址,以便在注册页面上显示。", + "loggedOutPageImage": "上传一个用于注销页面的SVG或PNG格式的图片。", + "showDocumentationSection": "文件链接设置", + "showWhatsNewSection": "新功能 链接设置", + "documentationLink": "文档链接", + "documentationLinkPlaceholder": "输入您的文档链接...", + "documentationLinkHelp": "提供一个有效的 URL 用户可以访问查看文档。", + "whatsNewSection": "文档设置", + "whatsNewLink": "文档链接", + "whatsNewLinkPlaceholder": "输入您的文档链接...", + "whatsNewLinkHelp": "提供一个有效的 URL 用户可以访问查看最新消息。", + "deleteBranding": "删除品牌", + "deleteBrandingContent": "您确定要删除\"{orgName}\"品牌吗?", + "fetchBrandingError": "在获取品牌详情时出了问题。请重试。", + "upload": "上传", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "无法连接到服务器,请检查您的网络", + "200": "请求成功", + "201": "请求成功,资源已创建", + "204": "无内容", + "400": "请求参数错误", + "401": "身份验证失败,请重新登录", + "403": "没有权限,请联系管理员进行授权", + "404": "请求资源不存在", + "500": "服务器忙碌,请稍后重试", + "timeout": "请求超时", + }, + "share": { + ...en.share, + + "title": "分享", + "viewer": "可查看", + "editor": "可编辑", + "owner": "拥有者", + "datasourceViewer": "可使用", + "datasourceOwner": "可管理", + }, + "debug": { + ...en.debug, + + "title": "标题", + "switch": "切换组件: ", + }, + "module": { + ...en.module, + + "folderNotEmpty": "文件夹不是空的", + "emptyText": "无数据", + "docLink": "了解更多有关模块的信息...", + "documentationText": "模块是完整的应用程序,可以包含在其他应用程序中并重复使用,其功能与单个组件无异。由于模块可以嵌入,因此需要能够与外部应用程序或网站进行交互。这四种设置有助于支持与模块的通信。", + "circularReference": "循环引用,当前模块/应用程序无法使用!", + "emptyTestInput": "当前模块没有输入可以测试", + "emptyTestMethod": "当前模块没有可测试的方法", + "name": "名称", + "input": "输入", + "params": "参数", + "emptyParams": "尚未添加参数", + "emptyInput": "尚未添加输入", + "emptyMethod": "尚未添加方法", + "emptyOutput": "尚未添加输出", + "data": "数据", + "string": "字符串", + "number": "数字", + "array": "数组", + "boolean": "布尔值", + "query": "查询", + "autoScaleCompHeight": "组件高度与容器自动调整", + "excuteMethod": "执行方法 {name}", + "method": "方法", + "action": "动作", + "output": "输出", + "nameExists": "名称 {name} 已存在", + "eventTriggered": "事件 {name} 被触发", + "globalPromptWhenEventTriggered": "当事件被触发时显示全局提示", + "emptyEventTest": "当前模块没有可测试的事件", + "emptyEvent": "尚未添加事件", + "event": "事件", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "返回值为函数.", + "consume": "___placeholder0___", + "JSON": "显示JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "创建中...", + "created": "创建{name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "用户身份验证失败,请重新登录", + "verifyAccount": "需要验证账户", + "functionNotSupported": "当前版本不支持此功能.请联系 Lowcoder 业务团队升级您的账户", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "创建组件{comp}失败", + "notHandledError": "{method}方法未执行", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "导航栏布局", + "chooseApp": "选择应用", + "iconTooltip": "支持图片链接或Base64", + "hideWhenNoPermission": "未经授权的用户隐藏", + "queryParam": "URL链接查询参数", + "hashParam": "URL链接哈希参数", + "tabBar": "选项卡栏", + "emptyTabTooltip": "在右侧窗格上配置此页面", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px(手机)", + "800": "800px(平板)", + "1440": "1440px(笔记本电脑)", + "1920": "1920px(宽屏)", + "3200": "3200px(超大屏幕)", + "title": "应用设置", + "autofill": "自动填充", + "userDefined": "自定义", + "default": "默认", + "tooltip": "设置后关闭弹出框", + "canvasMaxWidth": "最大画布宽度", + "userDefinedMaxWidth": "自定义最大宽度", + "inputUserDefinedPxValue": "请输入自定义像素值", + "maxWidthTip": "最大宽度应大于或等于350", + "themeSetting": "主题设置", + "themeSettingDefault": "默认", + "themeCreate": "创建主题", + "appTitle": "标题", + "appDescription": "描述", + "appCategory": "类别", + "showPublicHeader": "在公共视图中显示页眉", + "canvas": "画布设置", + "gridColumns": "网格列", + "gridRowHeight": "网格行高", + "gridRowCount": "网格行数", + "gridPaddingX": "帆布水平填充", + "gridPaddingY": "帆布垂直衬垫", + "gridBgImage": "背景图片", + "gridBgImageRepeat": "背景图像重复", + "gridBgImageSize": "背景图像大小", + "gridBgImagePosition": "背景图像位置", + "gridBgImageOrigin": "背景图片来源", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "自定义快捷键", + "shortcut": "快捷键", + "action": "操作", + "empty": "无快捷键", + "placeholder": "按下快捷键", + "otherPlatform": "其他", + "space": "空格", + }, + "profile": { + ...en.profile, + + "orgSettings": "工作区设置", + "switchOrg": "切换工作区", + "joinedOrg": "我的工作区", + "createOrg": "创建工作区", + "logout": "退出登录", + "personalInfo": "个人信息", + "bindingSuccess": "{sourceName}绑定成功", + "uploadError": "上传出错", + "editProfilePicture": "修改", + "saveUserNameTooltip": "点击 Enter 保存新的用户名。如果您看到您的电子邮件,这意味着我们刚刚劫持了它作为用户名,您可以将其更改为更好的用户名。作为技术用户名的电子邮件将保持不变。", + "changeAvatarTooltip": "您可以上传 PNG 或 JPG 文件", + "nameCheck": "名称不能为空", + "name": "名称:", + "namePlaceholder": "请输入您的名称", + "toBind": "前往绑定", + "binding": "正在绑定", + "bindError": "参数错误,暂不支持绑定.", + "bindName": "绑定{name}", + "loginAfterBind": "绑定后,您可以使用{name}登录", + "bindEmail": "绑定邮箱:", + "email": "邮箱", + "emailCheck": "请输入有效的邮箱", + "emailPlaceholder": "请输入您的邮箱", + "submit": "提交", + "bindEmailSuccess": "邮箱绑定成功", + "passwordModifiedSuccess": "密码修改成功", + "passwordSetSuccess": "密码设置成功", + "oldPassword": "旧密码:", + "inputCurrentPassword": "请输入您的当前密码", + "newPassword": "新密码:", + "inputNewPassword": "请输入您的新密码", + "confirmNewPassword": "确认新密码:", + "inputNewPasswordAgain": "请再次输入您的新密码", + "password": "密码:", + "modifyPassword": "修改密码", + "setPassword": "设置密码", + "alreadySetPassword": "已设置密码", + "setPassPlaceholder": "您可以使用密码登录", + "setPassAfterBind": "账号绑定后,您可以设置密码", + "socialConnections": "社交连接", + "changeAvatar": "更改头像", + "about": "关于", + "userId": "用户身份", + "createdAt": "创建于", + "currentOrg": "当前组织", + "settings": "设置", + "uiLanguage": "用户界面语言", + "info": "信息", + "createdApps": "创建的应用程序", + "createdModules": "创建的模块", + "sharedApps": "与您共享的应用程序", + "sharedModules": "与您共享的模块", + "onMarketplace": "在市场上", + "howToPublish": "如何在 Marketplace 上发布", + "memberOfOrgs": "工作空间会员", + "apiKeys": "API 密钥", + "createApiKey": "创建 API 密钥", + "apiKeyInfo": "请务必复制您的新 API 密钥。您将无法再次看到它。", + "apiKeyName": "姓名", + "apiKeyDescription": "描述", + "apiKeyCopy": "点击 Api 密钥,获取剪贴板中的值", + "apiKey": "API密钥", + "deleteApiKey": "删除 API 密钥", + "deleteApiKeyContent": "您确定要删除此 API 密钥吗?", + "deleteApiKeyError": "出了些问题。请再试一次。", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "键盘快捷键", + "click": "点击", + "global": "全局", + "toggleShortcutList": "切换键盘快捷键", + "editor": "编辑器", + "toggleLeftPanel": "切换左侧面板", + "toggleBottomPanel": "切换底部面板", + "toggleRightPanel": "切换右侧面板", + "toggleAllPanels": "切换所有面板", + "preview": "预览", + "undo": "撤销", + "redo": "重做", + "showGrid": "显示网格", + "component": "组件", + "multiSelect": "多选", + "selectAll": "全选", + "copy": "复制", + "cut": "剪切", + "paste": "粘贴", + "move": "移动", + "zoom": "调整大小", + "delete": "删除", + "deSelect": "取消选择", + "queryEditor": "查询编辑器", + "excuteQuery": "运行当前查询", + "editBox": "文本编辑器", + "formatting": "格式化", + "openInLeftPanel": "在左侧面板中打开", + }, + "help": { + ...en.help, + + "videoText": "概述", + "onBtnText": "确定", + "permissionDenyTitle": "💡 无法创建新的应用程序或数据源?", + "permissionDenyContent": "您没有权限创建应用程序和数据源.请联系管理员加入开发者组.", + "appName": "教程应用", + "chat": "与我们聊天", + "docs": "查看文档", + "editorTutorial": "编辑器教程", + "update": "有什么新功能?", + "version": "版本", + "versionWithColon": "版本:", + "submitIssue": "提交问题", + }, + "header": { + ...en.header, + + "nameCheckMessage": "名称不能为空", + "viewOnly": "只读模式", + "recoverAppSnapshotTitle": "恢复此版本?", + "recoverAppSnapshotContent": "将当前应用程序恢复到 {time} 创建的版本.", + "recoverAppSnapshotMessage": "恢复此版本", + "returnEdit": "返回编辑器", + "deploy": "发布", + "export": "导出为 JSON", + "editName": "编辑名称", + "duplicate": "复制{type}", + "snapshot": "历史", + "scriptsAndStyles": "脚本和样式", + "appSettings": "应用程序设置", + "preview": "预览", + "editError": "历史预览模式下,不支持任何操作.", + "clone": "克隆", + "editorMode_layout": "应用程序布局", + "editorMode_logic": "应用程序逻辑", + "editorMode_both": "两者", + "editorMode_layout_tooltip": "在右侧窗口中自定义组件的外观和布局。调整它的外观、样式和动画。", + "editorMode_logic_tooltip": "在右侧窗口中设置组件的工作和交互方式。管理其内容和交互行为。", + "AppEditingBlocked": "应用编辑已被阻止:", + "AppEditingBlockedHint": "在其他用户编辑此应用时,无法保存更改。", + "AppEditingBlockedMessage": "请稍候再检查应用的编辑状态。", + "AppEditingBlockedCheckStatus": "检查应用状态", + "AppEditingBlockedSomeone": "某人", + "AppEditingBlockedMessageSnipped": "正在编辑此应用", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "通过电子邮件注册", + "email": "电子邮件:", + "inputEmail": "请输入您的电子邮件", + "inputValidEmail": "请输入有效的电子邮件", + "forgotPassword": "忘记密码", + "forgotPasswordInfo": "输入您的电子邮件,我们将向您发送重置密码的链接。", + "forgotPasswordSuccess": "请查看电子邮件中的重置密码链接。", + "forgotPasswordError": "出错了。请重试。", + "register": "注册", + "userLogin": "用户登录", + "login": "登录", + "bind": "绑定", + "passwordCheckLength": "至少 {min} 个字符", + "passwordCheckContainsNumberAndLetter": "必须包含字母和数字", + "passwordCheckSpace": "不能包含空格字符", + "welcomeTitle": "🎉 欢迎使用 {productName} 🎉", + "inviteWelcomeTitle": "{username} 邀请您登录 {productName}", + "terms": "条款", + "privacy": "隐私政策", + "registerHint": "我已阅读并同意", + "chooseAccount": "选择您的帐户", + "signInLabel": "使用 {name} 登录", + "bindAccount": "绑定帐户", + "scanQrCode": "使用 {name} 扫描二维码", + "invalidThirdPartyParam": "无效的第三方参数", + "account": "帐户", + "inputAccount": "请输入您的帐户", + "ldapLogin": "LDAP登录", + "resetPassword": "重置密码", + "resetPasswordDesc": "重置用户 {name} 的密码.重置后将生成新密码.", + "resetSuccess": "重置成功", + "resetSuccessDesc": "密码重置成功.新密码为:{password}", + "resetLostPasswordSuccess": "密码重置成功。请重新登录。", + "copyPassword": "复制密码", + "poweredByLowcoder": "供电 Lowcoder.cloud", + "continue": "继续", + "enterPassword": "输入密码", + "selectAuthProvider": "选择身份验证提供程序", + "selectWorkspace": "选择工作区", + "userNotFound": "未找到用户。请确保您输入了正确的电子邮件。", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "通过URL链接向当前应用程序添加JavaScript库.lodash、day.js、uuid、numbro内置于系统中,可立即使用.JavaScript库在应用程序初始化之前加载,这可能会影响应用程序的性能.", + "exportedAs": "导出为", + "urlTooltip": "JavaScript库的URL链接,建议使用[unpkg.com](https://unpkg.com/)或[jsdelivr.net](https://www.jsdelivr.com/).", + "externalLibsHelperText": "仅支持使用 UMD(通用模块定义)方法的库。更多信息请点击: https://github.com/umdjs/umd", + "recommended": "推荐", + "viewJSLibraryDocument": "文档", + "jsLibraryURLError": "无效的URL链接", + "jsLibraryExist": "JavaScript库已存在", + "jsLibraryEmptyContent": "未添加JavaScript库", + "jsLibraryDownloadError": "JavaScript库下载错误", + "jsLibraryInstallSuccess": "JavaScript库安装成功", + "jsLibraryInstallFailed": "JavaScript库安装失败", + "jsLibraryInstallFailedCloud": "可能该库在沙盒中不可用,[文档](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "___placeholder0___", + "add": "新增", + "jsHelpText": "向当前应用程序添加全局方法或变量.", + "cssHelpText": "向当前应用程序添加样式.由于系统进行迭代,DOM结构可能会发生变化.请尝试通过组件属性修改样式.", + "scriptsAndStyles": "脚本和样式", + "jsLibrary": "JavaScript库", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "组件", + "componentContent": "右侧的组件区域拥有表格、按钮、输入框、选择器等组件,可以拖动到画布上进行使用.", + "canvas": "画布", + "canvasContent": "画布上所见即所得,您可以通过拖放来调整组件的布局和大小,使用键盘快捷键删除/复制/粘贴组件.", + "queryData": "查询数据", + "queryDataContent": "在此处创建新的查询,并连接到您的MySQL、PostgreSQL、MongoDB、Redis、Airtable等数据源.配置查询后,点击“运行”获取数据.", + "compProperties": "组件属性", + "interactiveDemo": "互动演示", + "interactiveDemoToolTip": "点击开始该功能的互动演示", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "🎉 欢迎使用{productName},点击“应用程序”开始创建您的第一个应用程序.", + "createAppTitle": "创建应用程序", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "启用自定义 NPM 注册表", + "npmRegistryUrl": "故宫博物院登记处网址", + "npmRegistryUrlRequired": "请输入注册表 URL", + "npmRegistryUrlInvalid": "请输入有效的 URL", + "npmRegistryScope": "包装范围", + "npmRegistryPattern": "图案", + "npmRegistryPatternInvalid": "请输入一个有效的模式(以 @ 开头表示组织)。", + "npmRegistryAuth": "认证", + "npmRegistryAuthType": "认证类型", + "npmRegistryAuthCredentials": "认证证书", + "npmRegistryAuthCredentialsRequired": "请输入注册表凭据", + "npmRegistryAuthCredentialsHelp": "对于基本授权,请提供格式为 \"base64(username:password) \"的 base64 编码用户名和密码;对于令牌授权,请提供令牌。", + }, + "history": { + ...en.history, + + "layout": "'{0}'布局调整", + "upgrade": "升级'{0}'", + "delete": "删除'{0}'", + "add": "添加'{0}'", + "modify": "修改'{0}'", + "rename": "将'{1}'重命名为'{0}'", + "recover": "恢复'{2}'的版本", + "recoverVersion": "恢复版本", + "andSoOn": "等等", + "timeFormat": "MM DD HH:mm A", + "emptyHistory": "无历史记录", + "currentVersionWithBracket": "(当前)", + "currentVersion": "当前版本", + "justNow": "刚刚", + "history": "历史记录", + }, + "home": { + ...en.home, + + "profile": "你的个人资料", + "news": "新闻", + "newsLoading": "它会加载几秒钟。", + "orgHome": "主页 (Org)", + "yourOrg": "您所在的组织", + "orgHomeTitle": "组织主页", + "appMarketplace": "应用市场", + "allApplications": "所有应用", + "allModules": "所有模块", + "allFolders": "所有文件夹", + "yourFolders": "您的文件夹", + "modules": "模块", + "module": "模块", + "api": "低编码器应用程序接口", + "trash": "回收站", + "marketplace": "市场", + "allCategories": "所有类别", + "queryLibrary": "查询管理", + "datasource": "数据源", + "selectDatasourceType": "选择数据源类型", + "home": "首页", + "all": "全部", + "app": "应用", + "navigation": "导航", + "navLayout": "桌面端导航", + "navLayoutDesc": "便于桌面端设备导航的左侧菜单.", + "mobileTabLayout": "移动端导航", + "mobileTabLayoutDesc": "流畅的移动端设备浏览底部导航栏.", + "folders": "文件夹", + "folder": "文件夹", + "rootFolder": "根目录", + "import": "导入", + "export": "导出为JSON", + "show": "显示", + "inviteUser": "邀请成员", + "createFolder": "创建文件夹", + "createFolderSubTitle": "文件夹名称:", + "moveToFolder": "移动到文件夹", + "moveToTrash": "移动到回收站", + "moveToFolderSubTitle": "将\"{name}\"移动到:", + "folderName": "文件夹名称:", + "resCardSubTitle": "{creator}于{time}创建", + "trashEmpty": "回收站为空.", + "projectEmpty": "这里没有内容.", + "projectEmptyCanAdd": "您还没有任何应用程序.点击“新建”开始.", + "name": "名称", + "type": "类型", + "creator": "创建者", + "lastModified": "上次修改", + "deleteTime": "删除时间", + "createTime": "创建时间", + "datasourceName": "数据源名称", + "databaseName": "数据库名称", + "nameCheckMessage": "名称不能为空", + "deleteElementTitle": "永久删除", + "moveToTrashSubTitle": "{type} {name} 将被移动到回收站.", + "deleteElementSubTitle": "永久删除 {type} {name},无法恢复.", + "deleteSuccessMsg": "删除成功", + "deleteErrorMsg": "删除错误", + "recoverSuccessMsg": "恢复成功", + "newDatasource": "新建数据源", + "creating": "创建中...", + "chooseDataSourceType": "选择数据源类型", + "folderAlreadyExists": "文件夹已存在", + "newNavLayout": "{userName}的{name}", + "newApp": "{userName}的新{name}", + "importError": "导入错误,{message}", + "exportError": "导出错误,{message}", + "importSuccess": "导入成功", + "fileUploadError": "文件上传错误", + "fileFormatError": "文件格式错误", + "groupWithSquareBrackets": "[组] ", + "allPermissions": "所有者", + "appSharingDialogueTitle": "应用程序共享和权限", + "appSocialSharing": "分享您的应用程序和体验:", + "appSocialSharingMessage": "我用 Lowcoder 制作了这个应用程序,快来看看吧!", + "socialShare": "分享到", + "shareLink": "分享链接:", + "copyLink": "复制链接", + "appPublicMessage": "将应用设为公开,任何人都可以查看.", + "modulePublicMessage": "将模块设为公开,任何人都可以查看.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "发布您的应用程序到Lowcoder市场.任何人都可以在那里查看和复制它.", + "moduleMarketplaceMessage": "发布您的模块到Lowcoder市场.任何人都可以在那里查看和复制它.", + "marketplaceGoodPublishing": "请确保您的应用程序命名准确、易于使用。发布前请删除任何敏感信息。此外,移除本地数据源,代之以静态内置临时数据", + "noMarketplaceApps": "市场上还没有应用程序", + "errorMarketplaceApps": "获取市场应用程序错误", + "localMarketplaceTitle": "本地市场", + "globalMarketplaceTitle": "Lowcoder 市场", + "memberPermissionList": "成员权限:", + "orgName": "{orgName}管理员", + "addMember": "添加成员", + "addPermissionPlaceholder": "请输入姓名以搜索成员", + "searchMemberOrGroup": "搜索成员或组:", + "addPermissionErrorMessage": "添加权限失败,{message}", + "copyModalTitle": "克隆\"{name}\"", + "copyNameLabel": "{type}名称", + "copyModalfolderLabel": "添加到文件夹", + "copyNamePlaceholder": "请输入{type}名称", + "chooseNavType": "请选择导航类型", + "createNavigation": "创建导航", + "howToUseAPI": "如何使用开放式 Rest API", + "support": "支持", + }, + "support": { + ...en.support, + + "selfUser": "你", + "supportTitle": "Lowcoder 支持", + "supportContent": "如果您有任何疑问或需要帮助,请使用工单系统快速解决您的问题。", + "newSupportTicket": "新建支持工单", + "ticketTitle": "标题", + "priority": "优先级", + "assignee": "负责人", + "status": "工单状态", + "updatedTime": "更新时间", + "active": "激活", + "inactive": "未激活", + "noEmail": "没有邮箱", + "details": "详情", + "reloadTickets": "重新加载工单", + "createdDate": "创建日期", + "updatedDate": "更新日期", + "description": "问题描述", + "subtasks": "子任务", + "subtasksProgress": "所有子任务的进度", + "attachments": "问题附件", + "comments": "评论", + "addComment": "添加评论", + "addAttachment": "添加附件", + "edit": "编辑工单描述", + "save": "保存工单描述", + "cancel": "取消", + "submitComment": "提交评论", + "upload": "提交附件", + "selectFile": "选择文件", + "ticketDescriptionUpdated": "工单描述更新成功!", + "ticketDescriptionUpdateFailed": "更新工单描述失败。", + "writeComment": "写一条评论...", + "ticketCommentAdded": "评论添加成功!", + "ticketCommentFailed": "添加评论失败。", + "ticketCommentEmpty": "请先写评论再提交。", + "ticketAttachmentUploaded": "附件上传成功!", + "ticketAttachmentFailed": "附件上传失败。", + "ticketAttachmentEmpty": "请选择要上传的文件。", + "ticketFetchError": "加载工单失败。", + "ticketNotFound": "未找到工单。", + "addAttachmentFileSize": "文件必须小于5MB!", + "goBack": "返回", + "noDescription": "没有可用的描述。", + "createTicket": "创建新的支持工单", + "createTicketTitlePlaceholder": "输入标题(最多150个字符)", + "createTicketDescriptionTitle": "描述您的问题 - 详细信息越多越好:", + "createTicketDescriptionPlaceholder": "详细描述问题,包括:1)重现问题的步骤,2)预期行为与实际行为的差异,3)适用时的代码片段,4)受影响的具体组件、API 或配置", + "createTicketSubmit": "提交工单", + "createTicketInfoText": "当您的工单创建后,您可以在“详情”部分添加截图和评论。", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "点位置", + "autoPlay": "自动播放", + "showDots": "显示点", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "无效的npm包名称或URL链接.", + "pluginExisted": "该npm插件已存在", + "compNotFound": "未找到组件 {compName}.", + "addPluginModalTitle": "添加npm插件", + "pluginNameLabel": "npm包的URL链接或名称", + "noCompText": "没有组件.", + "compsLoading": "加载中...", + "removePluginBtnText": "移除", + "addPluginBtnText": "添加npm插件", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "修改按钮的默认值,例如:false", + "trueDefaultText": "显示", + "falseDefaultText": "隐藏", + "trueLabel": "True 文本", + "falseLabel": "False文本", + "trueIconLabel": "True 图标", + "falseIconLabel": "False图标", + "iconPosition": "图标位置", + "showText": "显示文本", + "alignment": "对齐方式", + "showBorder": "显示边框", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用.", + "demoText": "Lowcoder 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用.", + "submit": "提交", + "style": "样式", + "danger": "危险", + "warning": "警告", + "success": "成功", + "menu": "菜单", + "link": "链接", + "customAppearance": "自定义外观", + "search": "搜索", + "pleaseInputNumber": "请输入一个数字", + "mostValue": "最大值", + "maxRating": "最大评级", + "notSelect": "未选择", + "halfSelect": "半选", + "pleaseSelect": "请选择", + "title": "标题", + "content": "内容", + "componentNotFound": "组件不存在", + "example": "示例", + "defaultMethodDesc": "设置属性 {name} 的默认值", + "propertyUsage": "您可以通过在任何可以编写 JavaScript 的地方访问组件属性来读取与组件相关的信息.", + "property": "属性", + "propertyName": "属性名称", + "propertyType": "类型", + "propertyDesc": "描述", + "event": "事件", + "eventName": "事件名称", + "eventDesc": "描述", + "mehtod": "方法", + "methodUsage": "您可以通过方法与组件进行交互,并且可以在任何可以编写 JavaScript 的地方通过它们的名称调用它们.或者您可以通过事件的“控制组件”操作来调用它们.", + "methodName": "方法名称", + "methodDesc": "描述", + "showBorder": "显示边框", + "haveTry": "自行尝试", + "settings": "设置", + "settingValues": "设置值", + "defaultValue": "默认值", + "time": "时间", + "date": "日期", + "noValue": "无", + "xAxisType": "X 轴类型", + "hAlignType": "水平对齐", + "leftLeftAlign": "左对齐", + "leftRightAlign": "右对齐", + "topLeftAlign": "上方靠左对齐", + "topRightAlign": "上方靠右对齐", + "validation": "验证", + "required": "必填", + "defaultStartDateValue": "默认起始日期", + "defaultEndDateValue": "默认结束日期", + "basicUsage": "基本用法", + "basicDemoDescription": "以下示例展示了组件的基本用法.", + "noDefaultValue": "无默认值", + "forbid": "禁止", + "placeholder": "占位符", + "pleaseInputPassword": "请输入密码", + "password": "密码", + "textAlign": "文本对齐", + "length": "长度", + "top": "顶部", + "pleaseInputName": "请输入您的姓名", + "userName": "姓名", + "fixed": "固定", + "responsive": "自适应", + "workCount": "字数统计", + "cascaderOptions": "[\n {\n \"value\": \"zhejiang\",\n \"label\": \"浙江\",\n \"children\": [\n {\n \"value\": \"hangzhou\",\n \"label\": \"杭州\",\n \"children\": [\n {\n \"value\": \"xihu\",\n \"label\": \"西湖\"\n }\n ]\n }\n ]\n },\n {\n \"value\": \"jiangsu\",\n \"label\": \"江苏\",\n \"children\": [\n {\n \"value\": \"nanjing\",\n \"label\": \"南京\",\n \"children\": [\n {\n \"value\": \"zhonghuamen\",\n \"label\": \"中华门\"\n }\n ]\n }\n ]\n }\n ]", + "pleaseSelectCity": "请选择一个城市", + "advanced": "高级", + "showClearIcon": "显示清除图标", + "appleOptionLabel": "🍎 苹果", + "waterMelonOptionLabel": "🍉 西瓜", + "berryOptionLabel": "🍓 草莓", + "lemonOptionLabel": "🍋 柠檬", + "coconutOptionLabel": "🥥 椰子", + "likedFruits": "喜爱的水果", + "option": "选项", + "singleFileUpload": "单个文件上传", + "multiFileUpload": "多个文件上传", + "folderUpload": "文件夹上传", + "multiFile": "多个文件", + "folder": "文件夹", + "open": "打开", + "favoriteFruits": "收藏的水果", + "pleaseSelectOneFruit": "请选择一个水果", + "notComplete": "未完成", + "complete": "完成", + "echart": "电子图表", + "lineChart": "折线图", + "basicLineChart": "基础折线图", + "lineChartType": "折线图类型", + "stackLineChart": "堆叠折线图", + "areaLineChart": "区域折线图", + "scatterChart": "散点图", + "scatterShape": "散点形状", + "scatterShapeCircle": "圆形", + "scatterShapeRect": "矩形", + "scatterShapeTri": "三角形", + "scatterShapeDiamond": "菱形", + "scatterShapePin": "图钉", + "scatterShapeArrow": "箭头", + "pieChart": "饼图", + "basicPieChart": "基础饼图", + "pieChatType": "饼图类型", + "pieChartTypeCircle": "环形图", + "pieChartTypeRose": "玫瑰图", + "titleAlign": "标题位置", + "color": "颜色", + "dashed": "虚线", + "imADivider": "我是一条分割线", + "tableSize": "表格尺寸", + "subMenuItem": "子菜单 {num}", + "menuItem": "菜单 {num}", + "labelText": "组件标题", + "labelPosition": "标题位置", + "labelAlign": "标题对齐方式", + "optionsOptionType": "配置方法", + "styleBackgroundColor": "背景颜色", + "styleBorderColor": "边框颜色", + "styleColor": "字体颜色", + "selectionMode": "行选择模式", + "paginationSetting": "分页设置", + "paginationShowSizeChanger": "支持用户修改每页条目数", + "paginationShowSizeChangerButton": "显示条目数选择按钮", + "paginationShowQuickJumper": "显示快速跳转", + "paginationHideOnSinglePage": "只有一页时隐藏", + "paginationPageSizeOptions": "每页条目数选项", + "chartConfigCompType": "图表类型", + "xConfigType": "X 轴类型", + "loading": "加载中", + "disabled": "禁用", + "minLength": "最小长度", + "maxLength": "最大长度", + "showCount": "显示字数统计", + "autoHeight": "自动高度", + "thousandsSeparator": "千位分隔符", + "precision": "小数位数", + "value": "默认值", + "formatter": "格式化", + "min": "最小值", + "max": "最大值", + "step": "步长", + "start": "开始时间", + "end": "结束时间", + "allowHalf": "允许半选", + "filetype": "文件类型", + "showUploadList": "显示上传列表", + "uploadType": "上传类型", + "allowClear": "显示清除图标", + "minSize": "最小文件大小", + "maxSize": "最大文件大小", + "maxFiles": "最大上传文件数", + "format": "格式", + "minDate": "最小日期", + "maxDate": "最大日期", + "minTime": "最小时间", + "maxTime": "最大时间", + "text": "文本", + "type": "类型", + "hideHeader": "隐藏标题", + "hideBordered": "隐藏边框", + "src": "图片链接", + "showInfo": "显示数值", + "mode": "模式", + "onlyMenu": "仅菜单", + "horizontalAlignment": "水平对齐", + "row": "左", + "column": "上", + "leftAlign": "左对齐", + "rightAlign": "右对齐", + "percent": "百分比", + "fixedHeight": "固定高度", + "auto": "自适应", + "directory": "文件夹", + "multiple": "多个文件", + "singleFile": "单个文件", + "manual": "手动", + "default": "默认", + "small": "小", + "middle": "中", + "large": "大", + "single": "单个", + "multi": "多个", + "close": "关闭", + "ui": "界面模式", + "line": "折线图", + "scatter": "散点图", + "pie": "饼图", + "basicLine": "基本折线图", + "stackedLine": "堆叠折线图", + "areaLine": "面积图", + "basicPie": "基本饼图", + "doughnutPie": "圆环图", + "rosePie": "玫瑰图", + "category": "分类轴", + "circle": "圆形", + "rect": "矩形", + "triangle": "三角形", + "diamond": "菱形", + "pin": "图钉", + "arrow": "箭头", + "left": "左", + "right": "右", + "center": "居中", + "bottom": "底部", + "justify": "两端对齐", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "数据", + "preview": "预览", + "property": "属性", + "console": "控制台", + "executeMethods": "执行方法", + "noMethods": "没有方法.", + "methodParams": "方法参数", + "methodParamsHelp": "输入方法参数使用 JSON,例如,可以使用 [1] 或 1 来设置 setValue 的参数.", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "按钮背景", + "btnText": "按钮文字", + "title": "标题", + "selectBackground": "选中背景", + }, + "idSource": { + ...en.idSource, + + "title": "用户认证提供商", + "form": "电子邮件", + "pay": "高级", + "enable": "启用", + "unEnable": "未启用", + "loginType": "登录方式", + "status": "状态", + "desc": "描述", + "manual": "通讯录:", + "syncManual": "同步通讯录", + "syncManualSuccess": "同步成功", + "enableRegister": "允许注册", + "saveBtn": "保存并启用", + "save": "保存", + "none": "无", + "formPlaceholder": "请输入{label}", + "formSelectPlaceholder": "请选择{label}", + "saveSuccess": "保存成功", + "dangerLabel": "危险动作", + "dangerTip": "禁用此登录方式可能导致部分用户无法登录,请谨慎操作.", + "lastEnabledConfig": "您不能禁用/删除配置,因为这是唯一启用的配置。", + "disable": "禁用", + "disableSuccess": "禁用成功", + "encryptedServer": "-------- 服务器端加密 --------", + "disableTip": "提示", + "disableContent": "禁用此登录方式可能导致部分用户无法登录,是否确定继续?", + "manualTip": "", + "lockTip": "内容已锁定.要进行更改,请点击{icon}解锁.", + "lockModalContent": "更改“ID属性”字段可能对用户识别产生重大影响,请在继续之前确认您理解此更改的影响.", + "payUserTag": "高级", + "source": "资料来源", + "sourceName": "认证提供商名称", + "sourceDescription": "认证提供程序说明", + "sourceIcon": "验证提供程序图标", + "sourceCategory": "认证提供商类别", + "souceIssuerURI": "Auth Provider Issuer URI", + "souceAuthorizationEndpoint": "Auth Provider 授权端点", + "souceTokenEndpoint": "认证提供程序令牌端点", + "souceUserInfoEndpoint": "认证提供商用户信息终端", + "userInfoIntrospection": "使用 OpenID 用户自省", + "userCanSelectAccounts": "用户可从账户中选择", + "sourceCategoryEnterprise": "企业身份", + "sourceCategoryCloud": "云服务", + "sourceCategorySocial": "社交媒体", + "sourceCategoryDevelopment": "发展", + "sourceCategoryTools": "工具与生产力", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "配置槽视图", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "JSON数据", + "searchAnimation": "搜索动画", + "speed": "播放速度", + "width": "宽度", + "height": "高度", + "backgroundColor": "背景颜色", + "animationStart": "播放方式", + "valueDesc": "JSON数据", + "loop": "循环方式", + "auto": "自动", + "onHover": "鼠标悬停时", + "onTrigger": "触发时", + "singlePlay": "播放一次", + "endlessLoop": "循环播放", + "keepLastFrame": "冻结最后一帧", + "fit": "适合", + "align": "对齐", + "load": "负载", + "play": "关于播放", + "pause": "暂停", + "stop": "关于停止", + "complete": "完整", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "标题颜色", + "subTitleColor": "子标题颜色", + "labelColor": "标签颜色", + "value": "数据", + "mode": "模式", + "left": "左", + "right": "右", + "alternate": "轮流", + "modeTooltip": "设置内容出现在时间轴左边/右边或左右轮流出现", + "reverse": "倒置", + "pending": "未完成", + "pendingDescription": "设置后,将显示带有文本和等待指示器的最后一个节点。", + "defaultPending": "继续改进", + "clickTitleEvent": "点击时", + "clickTitleEventDesc": "点击标题时", + "Introduction": "键值介绍", + "helpTitle": "时间线的标题(必填)", + "helpsubTitle": "时间线的副标题", + "helpLabel": "时间线的标签,可用于显示日期", + "helpColor": "设置时间线圆点的颜色", + "helpDot": "时间线的原点渲染成AntD的图标", + "helpTitleColor": "设置时间线标题颜色", + "helpSubTitleColor": "设置时间线子标题颜色", + "helpLabelColor": "设置时间线标签颜色", + "valueDesc": "时间线的数据", + "clickedObjectDesc": "点击的项目数据", + "clickedIndexDesc": "点击的项目序号", + }, + "comment": { + ...en.comment, + + "value": "评论列表数据", + "showSendButton": "允许评论", + "title": "标题", + "titledDefaultValue": "共有%d条评论", + "placeholder": "shift + enter 快捷发送评论;输入@或#可快速输入", + "placeholderDec": "占位符", + "buttonTextDec": "按钮文本", + "buttonText": "发表", + "mentionList": "提及列表数据", + "mentionListDec": "key-提及关键字;value-提及列表", + "userInfo": "用户信息", + "dateErr": "日期错误", + "commentList": "评论列表数据", + "deletedItem": "已删除的数据", + "submitedItem": "已提交的数据", + "deleteAble": "显示删除按钮", + "Introduction": "属性介绍", + "helpUser": "用户信息(必填)", + "helpname": "用户名(必填)", + "helpavatar": "头像地址(高优先)", + "helpdisplayName": "头像文字(低优先)", + "helpvalue": "评论内容", + "helpcreatedAt": "创建时间", + }, + "mention": { + ...en.mention, + + "mentionList": "提及列表", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "数据", + "checkedValueFrom": "选择提示时获取", + "ignoreCase": "搜索忽略大小写", + "searchLabelOnly": "仅搜索标签", + "searchFirstPY": "搜索首拼", + "searchCompletePY": "搜索全拼", + "searchText": "搜索文字", + "SectionDataName": "组件数据", + "valueInItems": "项目中的值", + "type": "类型", + "antDesign": "蚂蚁设计", + "normal": "常规", + "selectKey": "值", + "selectLable": "标签", + "ComponentType": "组件类型", + "colorIcon": "彩色", + "grewIcon": "黑白", + "noneIcon": "无", + "small": "小", + "large": "大", + "componentSize": "组件尺寸", + "Introduction": "键值介绍", + "helpLabel": "标签", + "helpValue": "值", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "列", + "addColumn": "添加栏", + "columnDefinition": "列定义", + "rowDefinition": "行定义", + "columnGap": "立柱间隙", + "rowGap": "行间距", + "atLeastOneColumnError": "响应式布局至少保留一列", + "columnsPerRow": "每行列数", + "columnsSpacing": "列间距 (px)", + "horizontal": "水平的", + "vertical": "垂直的", + "mobile": "移动的", + "tablet": "药片", + "desktop": "桌面", + "rowStyle": "行式", + "columnStyle": "栏目样式", + "minWidth": "分钟。宽度", + "rowBreak": "断行", + "useComponentWidth": "使用自身尺寸", + "useComponentWidthDesc": "使用容器宽度而不是应用宽度", + "matchColumnsHeight": "匹配列高度", + "rowLayout": "行布局", + "columnsLayout": "栏目布局", + "columnsDefinitionTooltip": "列可以根据 CSS 列属性自由定义。例如,\"auto auto \"将创建宽度相等的两列。更多信息请点击: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "行可以根据 CSS 行属性自由定义。例如,\"auto auto \"将创建高度相等的两行。更多信息请点击: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "查看区域", + "addColumn": "添加区域", + "columnDefinition": "区域定义", + "atLeastOneColumnError": "响应式布局至少保留一列", + "horizontal": "横向", + "vertical": "垂直", + "areaStyle": "立柱式", + "minWidth": "最小宽度", + "maxWidth": "最大最大宽度", + "width": "宽度", + "collapsible": "区域是否可折叠?", + "matchColumnsHeight": "匹配区域 高度", + "orientation": "分割布局方向", + "orientationTooltip": "区域对齐的视觉顺序。您也可以在 Splitlayout Components 内部再添加一个 Splitlayout Components,以实现复杂的布局。", + }, + "navLayout": { + ...en.navLayout, + + "mode": "模式", + "modeInline": "排队", + "modeVertical": "垂直的", + "modeHorizontal": "横向", + "width": "宽度", + "widthTooltip": "数字或百分比,例如 520,60%", + "navStyle": "菜单风格", + "navItemStyle": "菜单项样式", + "navBackground": "背景图片", + "mobileNavVerticalOrientation": "垂直方向", + "mobileNavVerticalMaxWidth": "最大宽度", + "mobileNavBarHeight": "导航栏高度", + "mobileNavVerticalShowSeparator": "显示分隔符", + "mobileNavIconSize": "图标大小", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) 国际日期变更线西侧", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(世界协调时-10:00) 夏威夷", + "UTC-09:00": "(UTC-09:00) 阿拉斯加", + "UTC-08:00": "(协调世界时-08:00) 下加利福尼亚州", + "UTC-07:00": "(UTC-07:00) 太平洋时间(美国)", + "UTC-06:00": "(美国中部时间(UTC-06:00)", + "UTC-05:00": "(美国东部时间(UTC-05:00)", + "UTC-04:00": "(UTC-04:00) 大西洋时间", + "UTC-03:00": "(UTC-03:00) 布宜诺斯艾利斯", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) 佛得角", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00)柏林、罗马", + "UTC+02:00": "(UTC+02:00)雅典、布加勒斯特", + "UTC+03:00": "(UTC+03:00) 莫斯科", + "UTC+04:00": "(世界协调时+04:00)迪拜、马斯喀特", + "UTC+05:00": "(世界协调时+05:00) 卡拉奇", + "UTC+05:30": "(世界协调时+05:30) 新德里", + "UTC+05:45": "(世界协调时+05:45) 加德满都", + "UTC+06:00": "(UTC+06:00) 达卡", + "UTC+06:30": "(UTC+06:30) 仰光", + "UTC+07:00": "(UTC+07:00) 曼谷", + "UTC+08:00": "(世界协调时+08:00)北京,香港", + "UTC+09:00": "(UTC+09:00)东京、首尔", + "UTC+09:30": "(UTC+09:30)阿德莱德、达尔文", + "UTC+10:00": "(UTC+10:00) 悉尼", + "UTC+11:00": "(UTC+11:00)所罗门群岛、新喀里多尼亚", + "UTC+12:00": "(UTC+12:00) 斐济,奥克兰", + "UTC+13:00": "(UTC+13:00) 萨摩亚,努库阿洛法", + "UserChoice": "用户选择", + }, + "tour": { + ...en.tour, + + "section1Title": "步骤", + "section1Subtitle": "步骤", + "tooltipExampleHeader": "例如", + "tooltipSignatureHeader": "签名:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "标题", + "placeholder": "欢迎", + "tooltip": "步骤的标题。任何 HTML 在此都有效。", + }, + "description": { + ...en.tour.options.description, + + "label": "说明", + "placeholder": "欢迎来到 lowcoder!", + "tooltip": "步骤描述。任何 HTML 在此都有效。", + }, + "mask": { + ...en.tour.options.mask, + + "label": "面罩", + "tooltip": "是否启用遮罩、通过自定义道具更改遮罩样式和填充颜色,默认遵循 Tour 的 `mask` 属性。", + "tooltipValidTypes": "有效输入类型:true\"、\"false\"、空或遵循 Antd 的 CSSProperties 模式的 JSON 对象。", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "箭头", + "tooltip": "根据需要打开或关闭箭头,或移动箭头使其指向组件中心,否则箭头将始终指向组件顶部附近。", + "tooltipFunctionSignature": "布尔 | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "类型", + "tooltip": "工具提示的类型,它会影响背景颜色和文本颜色。这些颜色可通过主游览样式部分进行控制。", + }, + "target": { + ...en.tour.options.target, + + "label": "组件", + "tooltip": "您要在其上添加工具提示的组件,如果您只想在屏幕中间添加一个模态,则将其留空。", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "封面图片 URI", + "tooltip": "您希望与步骤一起显示的图片的 URI", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "指标渲染", + "tooltip": "提供自定义指示器,显示您所在的步骤", + "tooltipValidTypes": "Format 是一个函数,它接受两个参数 \"current \"和 \"total\",并返回一个 ReactNode", + "tooltipFunctionSignatureHeader": "签名:", + "tooltipFunctionSignature": "(当前:数字,总数:数字) => ReactNode", + "tooltipExampleHeader": "例如", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "禁用互动", + "tooltip": "禁用高亮区域的交互。", + }, + "mask": { + ...en.tour.mask, + + "label": "面罩", + "tooltip": "是否启用遮罩、通过自定义道具更改遮罩样式和填充颜色,默认情况下遵循 Tour 的 `mask`属性。可在步骤级别重载。", + "tooltipValidTypes": "有效输入类型:true\"、\"false\"、空或遵循 Antd 的 CSSProperties 模式的 JSON 对象。", + }, + "placement": { + ...en.tour.placement, + + "label": "安置", + "tooltip": "引导卡相对于目标元素的位置。可在步长级别覆盖。", + "tooltipValidOptions": "有效选项", + "tooltipValidOptionsAbove": "组件上方:", + "tooltipValidOptionsLeft": "在组件左侧:", + "tooltipValidOptionsRight": "在组件右侧:", + "tooltipValidOptionsBelow": "在组件下方:", + "tooltipValidOptionsOnTop": "在组件的顶部:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "箭头", + "tooltip": "根据需要打开或关闭箭头,或移动箭头使其指向组件中心,否则箭头将始终指向组件顶部附近。可在步长级别覆盖。", + "tooltipFunctionSignature": "布尔 | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "类型", + "tooltip": "工具提示的类型,它会影响背景颜色和文本颜色。这些颜色可通过主游览样式部分进行控制。可在步骤级别覆盖。", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://docs.lowcoder.cloud/build-plugins/develop-your-first-plugin", + "devNpmPluginText": "如何开发npm插件?", + "useHost": "https://docs.lowcoder.cloud/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-apps/event-handlers#debounce-and-throttle", + "thirdLib": "https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries", + "thirdLibUrlText": "使用第三方插件库", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "搜索图片", + "searchAnimation": "搜索动画", + "searchIcon": "搜索图标", + "noResults": "未找到结果。", + "buySubscriptionTitle": "解锁高级资产", + "buySubscriptionContent": "此资产为媒体包订阅者独享。订阅媒体包,无限制下载高质量资产!", + "buySubscriptionButton": "立即订阅", + }, - npm: { - ...en.npm, - invalidNpmPackageName: "无效的npm包名称或URL链接.", - pluginExisted: "该npm插件已存在", - compNotFound: "未找到组件 {compName}.", - addPluginModalTitle: "添加npm插件", - pluginNameLabel: "npm包的URL链接或名称", - noCompText: "没有组件.", - compsLoading: "加载中...", - removePluginBtnText: "移除", - addPluginBtnText: "添加npm插件" - }, - toggleButton: { - ...en.toggleButton, - valueDesc: "修改按钮的默认值,例如:false", - trueDefaultText: "显示", - falseDefaultText: "隐藏", - trueLabel: "True 文本", - falseLabel: "False文本", - trueIconLabel: "True 图标", - falseIconLabel: "False图标", - iconPosition: "图标位置", - showText: "显示文本", - alignment: "对齐方式", - showBorder: "显示边框" - }, - docUrls: { - ...en.docUrls, - docHome: "https://docs.lowcoder.cloud/", - components: "https://app.lowcoder.cloud/components/{compType}", - module: "", - optionList: "", - terms: "", - privacy: "", - aboutUs: "", - changeLog: "", - introVideo: "", - devNpmPlugin: "https://docs.lowcoder.cloud/build-plugins/develop-your-first-plugin", - devNpmPluginText: "如何开发npm插件?", - useHost: "https://docs.lowcoder.cloud/self-hosting/access-local-database-or-api", - eventHandlerSlowdown: - "https://docs.lowcoder.cloud/build-apps/event-handlers#debounce-and-throttle", - thirdLib: "https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries", - thirdLibUrlText: "使用第三方插件库", - }, - datasourceTutorial: { - ...en.datasourceTutorial, - mysql: "", - mongodb: "", - postgres: "", - redis: "", - es: "", - smtp: "", - clickHouse: "", - }, - queryTutorial: { - ...en.queryTutorial, - js: "", - transformer: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - tempState: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - dataResponder: "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - customComponent: { - ...en.customComponent, - entryUrl: "https://sdk.lowcoder.cloud/custom_component.html", - }, - template: { - ...en.template, - cloneUrl: "/apps/template-import/", - }, - lowcoderUrl: { - ...en.lowcoderUrl, - createIssue: "https://github.com/lowcoder-org/lowcoder/issues", - discord: "https://discord.com/invite/qMG9uTmAx2", - }, - componentDoc: { - ...en.componentDoc, - markdownDemoText: "**Lowcoder** 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用.", - demoText: "Lowcoder 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用.", - submit: "提交", - style: "样式", - danger: "危险", - warning: "警告", - success: "成功", - menu: "菜单", - link: "链接", - customAppearance: "自定义外观", - search: "搜索", - pleaseInputNumber: "请输入一个数字", - mostValue: "最大值", - maxRating: "最大评级", - notSelect: "未选择", - halfSelect: "半选", - pleaseSelect: "请选择", - title: "标题", - content: "内容", - componentNotFound: "组件不存在", - example: "示例", - defaultMethodDesc: "设置属性 {name} 的默认值", - propertyUsage: "您可以通过在任何可以编写 JavaScript 的地方访问组件属性来读取与组件相关的信息.", - property: "属性", - propertyName: "属性名称", - propertyType: "类型", - propertyDesc: "描述", - event: "事件", - eventName: "事件名称", - eventDesc: "描述", - mehtod: "方法", - methodUsage: "您可以通过方法与组件进行交互,并且可以在任何可以编写 JavaScript 的地方通过它们的名称调用它们.或者您可以通过事件的“控制组件”操作来调用它们.", - methodName: "方法名称", - methodDesc: "描述", - showBorder: "显示边框", - haveTry: "自行尝试", - settings: "设置", - settingValues: "设置值", - defaultValue: "默认值", - time: "时间", - date: "日期", - noValue: "无", - xAxisType: "X 轴类型", - hAlignType: "水平对齐", - leftLeftAlign: "左对齐", - leftRightAlign: "右对齐", - topLeftAlign: "上方靠左对齐", - topRightAlign: "上方靠右对齐", - validation: "验证", - required: "必填", - defaultStartDateValue: "默认起始日期", - defaultEndDateValue: "默认结束日期", - basicUsage: "基本用法", - basicDemoDescription: "以下示例展示了组件的基本用法.", - noDefaultValue: "无默认值", - forbid: "禁止", - placeholder: "占位符", - pleaseInputPassword: "请输入密码", - password: "密码", - textAlign: "文本对齐", - length: "长度", - top: "顶部", - pleaseInputName: "请输入您的姓名", - userName: "姓名", - fixed: "固定", - responsive: "自适应", - workCount: "字数统计", - cascaderOptions: `[ - { - "value": "zhejiang", - "label": "浙江", - "children": [ - { - "value": "hangzhou", - "label": "杭州", - "children": [ - { - "value": "xihu", - "label": "西湖" - } - ] - } - ] - }, - { - "value": "jiangsu", - "label": "江苏", - "children": [ - { - "value": "nanjing", - "label": "南京", - "children": [ - { - "value": "zhonghuamen", - "label": "中华门" - } - ] - } - ] - } - ]`, - pleaseSelectCity: "请选择一个城市", - advanced: "高级", - showClearIcon: "显示清除图标", - /* eslint-disable only-ascii/only-ascii */ - appleOptionLabel: "🍎 苹果", - waterMelonOptionLabel: "🍉 西瓜", - berryOptionLabel: "🍓 草莓", - lemonOptionLabel: "🍋 柠檬", - coconutOptionLabel: "🥥 椰子", - /* eslint-enable only-ascii/only-ascii */ - likedFruits: "喜爱的水果", - option: "选项", - singleFileUpload: "单个文件上传", - multiFileUpload: "多个文件上传", - folderUpload: "文件夹上传", - multiFile: "多个文件", - folder: "文件夹", - open: "打开", - favoriteFruits: "收藏的水果", - pleaseSelectOneFruit: "请选择一个水果", - notComplete: "未完成", - complete: "完成", - echart: "EChart", - lineChart: "折线图", - basicLineChart: "基础折线图", - lineChartType: "折线图类型", - stackLineChart: "堆叠折线图", - areaLineChart: "区域折线图", - scatterChart: "散点图", - scatterShape: "散点形状", - scatterShapeCircle: "圆形", - scatterShapeRect: "矩形", - scatterShapeTri: "三角形", - scatterShapeDiamond: "菱形", - scatterShapePin: "图钉", - scatterShapeArrow: "箭头", - pieChart: "饼图", - basicPieChart: "基础饼图", - pieChatType: "饼图类型", - pieChartTypeCircle: "环形图", - pieChartTypeRose: "玫瑰图", - titleAlign: "标题位置", - color: "颜色", - dashed: "虚线", - imADivider: "我是一条分割线", - tableSize: "表格尺寸", - subMenuItem: "子菜单 {num}", - menuItem: "菜单 {num}", - labelText: "组件标题", - labelPosition: "标题位置", - labelAlign: "标题对齐方式", - optionsOptionType: "配置方法", - styleBackgroundColor: "背景颜色", - styleBorderColor: "边框颜色", - styleColor: "字体颜色", - selectionMode: "行选择模式", - paginationSetting: "分页设置", - paginationShowSizeChanger: "支持用户修改每页条目数", - paginationShowSizeChangerButton: "显示条目数选择按钮", - paginationShowQuickJumper: "显示快速跳转", - paginationHideOnSinglePage: "只有一页时隐藏", - paginationPageSizeOptions: "每页条目数选项", - chartConfigCompType: "图表类型", - xConfigType: "X 轴类型", - loading: "加载中", - disabled: "禁用", - minLength: "最小长度", - maxLength: "最大长度", - showCount: "显示字数统计", - autoHeight: "自动高度", - thousandsSeparator: "千位分隔符", - precision: "小数位数", - value: "默认值", - formatter: "格式化", - min: "最小值", - max: "最大值", - step: "步长", - start: "开始时间", - end: "结束时间", - allowHalf: "允许半选", - filetype: "文件类型", - showUploadList: "显示上传列表", - uploadType: "上传类型", - allowClear: "显示清除图标", - minSize: "最小文件大小", - maxSize: "最大文件大小", - maxFiles: "最大上传文件数", - format: "格式", - minDate: "最小日期", - maxDate: "最大日期", - minTime: "最小时间", - maxTime: "最大时间", - text: "文本", - type: "类型", - hideHeader: "隐藏标题", - hideBordered: "隐藏边框", - src: "图片链接", - showInfo: "显示数值", - mode: "模式", - onlyMenu: "仅菜单", - horizontalAlignment: "水平对齐", - row: "左", - column: "上", - leftAlign: "左对齐", - rightAlign: "右对齐", - percent: "百分比", - fixedHeight: "固定高度", - auto: "自适应", - directory: "文件夹", - multiple: "多个文件", - singleFile: "单个文件", - manual: "手动", - default: "默认", - small: "小", - middle: "中", - large: "大", - single: "单个", - multi: "多个", - close: "关闭", - ui: "界面模式", - line: "折线图", - scatter: "散点图", - pie: "饼图", - basicLine: "基本折线图", - stackedLine: "堆叠折线图", - areaLine: "面积图", - basicPie: "基本饼图", - doughnutPie: "圆环图", - rosePie: "玫瑰图", - category: "分类轴", - circle: "圆形", - rect: "矩形", - triangle: "三角形", - diamond: "菱形", - pin: "图钉", - arrow: "箭头", - left: "左", - right: "右", - center: "居中", - bottom: "底部", - justify: "两端对齐", - }, - playground: { - ...en.playground, - url: "https://app.lowcoder.cloud/playground/{compType}/1", - data: "数据", - preview: "预览", - property: "属性", - console: "控制台", - executeMethods: "执行方法", - noMethods: "没有方法.", - methodParams: "方法参数", - methodParamsHelp: "输入方法参数使用 JSON,例如,可以使用 [1] 或 1 来设置 setValue 的参数.", - }, - calendar: { - ...en.calendar, - headerBtnBackground: "按钮背景", - btnText: "按钮文字", - title: "标题", - selectBackground: "选中背景", - }, - /* componentDocExtra: { - ...en.componentDocExtra, - table: table, - },*/ - idSource: { - ...en.idSource, - title: "用户认证提供商", - form: "电子邮件", - pay: "高级", - enable: "启用", - unEnable: "未启用", - loginType: "登录方式", - status: "状态", - desc: "描述", - manual: "通讯录:", - syncManual: "同步通讯录", - syncManualSuccess: "同步成功", - enableRegister: "允许注册", - saveBtn: "保存并启用", - save: "保存", - none: "无", - formPlaceholder: "请输入{label}", - formSelectPlaceholder: "请选择{label}", - saveSuccess: "保存成功", - dangerLabel: "危险动作", - dangerTip: "禁用此登录方式可能导致部分用户无法登录,请谨慎操作.", - disable: "禁用", - disableSuccess: "禁用成功", - encryptedServer: "-------- 服务器端加密 --------", - disableTip: "提示", - disableContent: "禁用此登录方式可能导致部分用户无法登录,是否确定继续?", - manualTip: "", - lockTip: "内容已锁定.要进行更改,请点击{icon}解锁.", - lockModalContent: "更改“ID属性”字段可能对用户识别产生重大影响,请在继续之前确认您理解此更改的影响.", - payUserTag: "高级", - }, - slotControl: { - ...en.slotControl, - configSlotView: "配置槽视图", - }, - timeLine: { - ...en.timeLine, - titleColor: "标题颜色", - subTitleColor: "子标题颜色", - labelColor: "标签颜色", - value: "数据", - mode: "模式", - left: "左", - right: "右", - alternate: "轮流", - modeTooltip: "设置内容出现在时间轴左边/右边或左右轮流出现", - reverse: "倒置", - pending: "未完成", - defaultPending: "继续改进", - clickTitleEvent: "点击时", - clickTitleEventDesc: "点击标题时", - Introduction: "键值介绍", - helpTitle: "时间线的标题(必填)", - helpsubTitle: "时间线的副标题", - helpLabel: "时间线的标签,可用于显示日期", - helpColor: "设置时间线圆点的颜色", - helpDot: "时间线的原点渲染成AntD的图标", - helpTitleColor: "设置时间线标题颜色", - helpSubTitleColor: "设置时间线子标题颜色", - helpLabelColor: "设置时间线标签颜色", - valueDesc: "时间线的数据", - clickedObjectDesc: "点击的项目数据", - clickedIndexDesc: "点击的项目序号", - }, - jsonLottie: { - ...en.jsonLottie, - lottieJson: "JSON数据", - speed: "播放速度", - width: "宽度", - height: "高度", - backgroundColor: "背景颜色", - animationStart: "播放方式", - valueDesc: "JSON数据", - loop: "循环方式", - auto: "自动", - onHover: "鼠标悬停时", - singlePlay: "播放一次", - endlessLoop: "循环播放", - keepLastFrame: "冻结最后一帧", - }, - comment: { - ...en.comment, - value: "评论列表数据", - showSendButton: "允许评论", - title: "标题", - titledDefaultValue: "共有%d条评论", - placeholder: "shift + enter 快捷发送评论;输入@或#可快速输入", - placeholderDec: "占位符", - buttonTextDec: "按钮文本", - buttonText: "发表", - mentionList: "提及列表数据", - mentionListDec: "key-提及关键字;value-提及列表", - userInfo: "用户信息", - dateErr: "日期错误", - commentList: "评论列表数据", - deletedItem: "已删除的数据", - submitedItem: "已提交的数据", - deleteAble: "显示删除按钮", - Introduction: "属性介绍", - helpUser: "用户信息(必填)", - helpname: "用户名(必填)", - helpavatar: "头像地址(高优先)", - helpdisplayName: "头像文字(低优先)", - helpvalue: "评论内容", - helpcreatedAt: "创建时间", - }, - iconComp: { - ...en.iconComp, - icon: "图标", - autoSize: "图标自动大小", - iconSize: "图标大小", - }, - mention:{ - ...en.mention, - mentionList: "提及列表", - }, - autoComplete: { - ...en.autoComplete, - value: "数据", - checkedValueFrom: "选择提示时获取", - ignoreCase: "搜索忽略大小写", - searchLabelOnly: "仅搜索标签", - searchFirstPY: "搜索首拼", - searchCompletePY: "搜索全拼", - searchText: "搜索文字", - valueInItems: "项目中的值", - SectionDataName: "组件数据", - type: "类型", - antDesign: "AntDesign", - normal: "常规", - selectKey: '值', - selectLable: '标签', - ComponentType: '组件类型', - colorIcon: '彩色', - grewIcon: '黑白', - noneIcon: '无', - small: '小', - large: "大", - componentSize: "组件尺寸", - Introduction: '键值介绍', - helpLabel: "标签", - helpValue: "值", - }, - responsiveLayout: { - ...en.responsiveLayout, - column: "列", - atLeastOneColumnError: "响应式布局至少保留一列", - columnsPerRow: "每行列数", - columnsSpacing: "列间距 (px)", - horizontal: "水平的", - vertical: "垂直的", - mobile: "移动的", - tablet: "药片", - desktop: "桌面", - rowStyle: "行式", - columnStyle: "栏目样式", - minWidth: "分钟。宽度", - rowBreak: "断行", - "useComponentWidth": "使用自身尺寸", - "useComponentWidthDesc": "使用容器宽度而不是应用宽度", - matchColumnsHeight: "匹配列高度", - rowLayout: "行布局", - columnsLayout: "栏目布局", - }, - navLayout: { - ...en.navLayout, - mode: "模式", - modeInline: "排队", - modeVertical: "垂直的", - width: "宽度", - widthTooltip: "数字或百分比,例如 520,60%", - navStyle: "菜单风格", - navItemStyle: "菜单项样式", - } -}; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/index.less b/client/packages/lowcoder/src/index.less index 59ee553f8f..7d9d52b086 100644 --- a/client/packages/lowcoder/src/index.less +++ b/client/packages/lowcoder/src/index.less @@ -6,7 +6,7 @@ // fixme: move into comps @import "github-markdown-css/github-markdown-light.css"; -@import "react-quill/dist/quill.snow.css"; +@import "react-quill-new/dist/quill.snow.css"; @import "tui-image-editor/dist/tui-image-editor.css"; @import "tui-color-picker/dist/tui-color-picker.min.css"; diff --git a/client/packages/lowcoder/src/index.ts b/client/packages/lowcoder/src/index.ts index 310ff61c75..d92b8dbb56 100644 --- a/client/packages/lowcoder/src/index.ts +++ b/client/packages/lowcoder/src/index.ts @@ -1,4 +1,5 @@ import "core-js/actual"; + import ResizeObserver from "resize-observer-polyfill"; import numbro from "numbro"; import Papa from "papaparse"; diff --git a/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx b/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx index d9eb475d4d..0e6a228d39 100644 --- a/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx +++ b/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx @@ -14,8 +14,9 @@ import React, { useMemo, useRef, useState, + useEffect, } from "react"; -import ReactResizeDetector, { useResizeDetector } from "react-resize-detector"; +import { ResizePayload, useResizeDetector } from "react-resize-detector"; import styled, { css } from "styled-components"; import { EllipsisTextCss } from "lowcoder-design"; import { draggingUtils } from "./draggingUtils"; @@ -235,6 +236,35 @@ const HiddenIcon = styled(CloseEyeIcon)` } `; +const ResizableChildren = React.memo((props: { + compType: string; + onInnerResize: (width?: number, height?: number) => void; + children: JSX.Element | React.ReactNode; +}) => { + const { ref: innerRef } = useResizeDetector({ + skipOnMount: ( + props.compType === 'responsiveLayout' + || props.compType === 'columnLayout' + || props.compType === 'pageLayout' + || props.compType === 'splitLayout' + || props.compType === 'floatTextContainer' + || props.compType === 'tabbedContainer' + || props.compType === 'collapsibleContainer' + || props.compType === 'container' + ), + refreshMode: "debounce", + refreshRate: 0, + onResize: ({width, height}: ResizePayload) => props.onInnerResize(width ?? undefined, height ?? undefined), + observerOptions: { box: "border-box" } + }); + + return ( + <div ref={innerRef}> + {props.children} + </div> + ) +}); + export const CompSelectionWrapper = React.memo((props: { id?: string; compType: UICompType; @@ -261,7 +291,16 @@ export const CompSelectionWrapper = React.memo((props: { }) => { const nameDivRef = useRef<HTMLDivElement>(null); const editorState = useContext(EditorContext); - let [hover, setHover] = useState(false); + const [hover, setHover] = useState(false); + + // Cleanup on unmount + useEffect(() => { + return () => { + // Reset state + setHover(false); + }; + }, []); + const onMouseOver = useCallback( (e: MouseEvent<HTMLDivElement>) => { e.stopPropagation(); @@ -275,8 +314,9 @@ export const CompSelectionWrapper = React.memo((props: { } setHover(true); }, - [nameDivRef.current, setHover] + [nameDivRef.current] ); + const onMouseOut = useCallback( (e: MouseEvent<HTMLDivElement>) => { e.stopPropagation(); @@ -334,13 +374,14 @@ export const CompSelectionWrapper = React.memo((props: { return props.autoHeight && !props.placeholder; }, [props.autoHeight, props.placeholder]); - const { ref: wrapperRef } = useResizeDetector({ - onResize: props.onWrapperResize, - handleHeight: needResizeDetector, - handleWidth: false, - refreshMode: 'debounce', - refreshRate: 100, - }); + // const { ref: wrapperRef } = useResizeDetector({ + // onResize: ({width, height}: ResizePayload) => props.onWrapperResize(width ?? undefined, height ?? undefined), + // handleHeight: needResizeDetector, + // handleWidth: false, + // refreshMode: 'debounce', + // refreshRate: 100, + // }); + // log.debug("CompSelectionWrapper. name: ", props.name, " zIndex: ", zIndex); const { nameConfig, resizeIconSize } = props; @@ -349,7 +390,7 @@ export const CompSelectionWrapper = React.memo((props: { <SelectableDiv {...selectableDivProps} $compType={props.compType} - ref={wrapperRef} + // ref={wrapperRef} $needResizeDetector={needResizeDetector} > {props.isSelectable && nameConfig.show && (hover || props.isSelected || props.hidden) && ( @@ -389,24 +430,12 @@ export const CompSelectionWrapper = React.memo((props: { )} {!needResizeDetector && props.children} {needResizeDetector && ( - <ReactResizeDetector - skipOnMount={ - props.compType === 'responsiveLayout' - || props.compType === 'columnLayout' - || props.compType === 'pageLayout' - || props.compType === 'splitLayout' - || props.compType === 'floatTextContainer' - || props.compType === 'tabbedContainer' - || props.compType === 'collapsibleContainer' - || props.compType === 'container' - } - refreshMode="debounce" - refreshRate={0} - onResize={props.onInnerResize} - observerOptions={{ box: "border-box" }} + <ResizableChildren + compType={props.compType} + onInnerResize={props.onInnerResize} > - <div>{props.children}</div> - </ReactResizeDetector> + <>{props.children}</> + </ResizableChildren> )} </SelectableDiv> </div> diff --git a/client/packages/lowcoder/src/layout/gridItem.tsx b/client/packages/lowcoder/src/layout/gridItem.tsx index 3594f3acd3..11821eca2a 100644 --- a/client/packages/lowcoder/src/layout/gridItem.tsx +++ b/client/packages/lowcoder/src/layout/gridItem.tsx @@ -134,6 +134,21 @@ export const GridItem = React.memo((props: GridItemProps) => { // record the real height of the comp content const itemHeightRef = useRef<number | undefined>(undefined); + // Cleanup on unmount + useEffect(() => { + return () => { + // Clear any pending state + setResizing(undefined); + setDragging(undefined); + + // Clear refs + itemHeightRef.current = undefined; + + // Clear any dragging data + // draggingUtils.clearData(); + }; + }, []); + const onDragStart = useCallback((e: DragEvent<HTMLDivElement>) => { e.stopPropagation(); const { i } = props as Required<GridItemProps>; @@ -244,13 +259,6 @@ export const GridItem = React.memo((props: GridItemProps) => { props.maxW, position.left, position.top, - calcResizeXY, - getDraggingNewPosition, - calcXY, - calcWH, - setResizing, - setDragging, - clamp, ]); /** diff --git a/client/packages/lowcoder/src/layout/gridLayout.tsx b/client/packages/lowcoder/src/layout/gridLayout.tsx index 0b25763b77..6da595584e 100644 --- a/client/packages/lowcoder/src/layout/gridLayout.tsx +++ b/client/packages/lowcoder/src/layout/gridLayout.tsx @@ -4,8 +4,8 @@ import type { UICompType } from "comps/uiCompRegistry"; import { ModulePrimaryColor, PrimaryColor } from "constants/style"; import _, { isEqual } from "lodash"; import log from "loglevel"; -import React, { DragEvent, DragEventHandler, MouseEventHandler, ReactElement } from "react"; -import ReactResizeDetector from "react-resize-detector"; +import React, { DragEvent, DragEventHandler, MouseEventHandler, ReactElement, useEffect } from "react"; +import { ResizePayload, useResizeDetector } from "react-resize-detector"; import styled from "styled-components"; import { isDirectionKey, isFilterInputTarget, modKeyPressed } from "util/keyUtils"; import { @@ -122,6 +122,13 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { ref = this.props.innerRef ?? this.innerRef; innerHeight = 0; + throttleDebug = _.throttle(log.debug, 200); + + componentWillUnmount() { + // Cleanup throttled debug function + this.throttleDebug.cancel(); + } + static getDerivedStateFromProps( nextProps: Readonly<GridLayoutProps>, prevState: GridLayoutState @@ -280,6 +287,8 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { const recoverDragStartFn = () => { this.setState({ ops: undefined }); + // Ensure dragging data is cleared + draggingUtils.clearData(); }; // -------- set DragStart varibles -------- @@ -393,6 +402,7 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { const oldResizeItem = draggingUtils.getData<LayoutItem>(DRAGGING_ITEM); this.props.onResizeStop?.(layout, oldResizeItem, layout[i], undefined, e, node); + // Ensure dragging data is cleared draggingUtils.clearData(); this.onLayoutMaybeChanged(this.getUILayout()); }; @@ -766,8 +776,6 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { return 0; } - // only for onDragOver - throttleDebug = _.throttle(log.debug, 200); // Called while dragging an element. Part of browser native drag/drop API. // Native event target might be the layout itself, or an element within the layout. onDragOver: DragEventHandler<HTMLElement> = (e) => { @@ -934,6 +942,8 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { */ flyOverInfo && flyOverInfo.dropFn(); } + // Ensure dragging data is cleared + draggingUtils.clearData(); }; getUILayout(ops?: LayoutOps, setHiddenCompHeightZero: boolean = false): Layout { @@ -1037,6 +1047,7 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { // log.debug("GridLayout render. layout: ", layout, " oriLayout: ", this.state.layout, " extraLayout: ", this.props.extraLayout); const layouts = Object.values(layout); const maxLayoutPos = Math.max(...layouts.map(l => l.pos || 0)) + return ( <LayoutContainer ref={this.ref} @@ -1054,11 +1065,11 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { onDragOver={isDroppable ? this.onDragOver : _.noop} onKeyDown={this.onKeyDown} > - <ReactResizeDetector + <ResizeWrapper + targetRef={this.ref} onResize={(width?: number, height?: number) => { if (height) this.innerHeight = height; }} - observerOptions={{ box: "border-box" }} > <div style={contentStyle}> {showGridLines && this.gridLines()} @@ -1072,7 +1083,7 @@ class GridLayout extends React.Component<GridLayoutProps, GridLayoutState> { } {this.hintPlaceholder()} </div> - </ReactResizeDetector> + </ResizeWrapper> </LayoutContainer> ); } @@ -1102,6 +1113,24 @@ const LayoutContainer = styled.div<{ }`} `; +const ResizeWrapper = (props: { + targetRef: React.RefObject<HTMLDivElement>; + children: JSX.Element | React.ReactNode; + onResize: (width?: number, height?: number) => void; +}) => { + const { width, height } = useResizeDetector({ + targetRef: props.targetRef, + onResize: ({ width, height }: ResizePayload) => { + props.onResize(width ?? undefined, height ?? undefined); + }, + handleHeight: true, + refreshMode: 'debounce', + refreshRate: 100, + }); + + return <>{props.children}</>; +}; + export const ReactGridLayout = React.memo(GridLayout, (prev, next) => isEqual(prev, next)); function moveOrResize( diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx index 787d3a2439..d6dd554f1b 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/CreateDropdown.tsx @@ -244,7 +244,7 @@ export const CreateDropdown = (props: { defaultVisible?: boolean; mode: HomeLayo trigger={["hover"]} getPopupContainer={(node) => node} onOpenChange={() => setCreateDropdownVisible(!createDropdownVisible)} - dropdownRender={() => ( + popupRender={() => ( <CreateDropdownMenu items={[ getCreateMenuItem(HomeResTypeEnum.Application, mode), diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx index f9ac452ee3..c07ac1c3a7 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/HomeLayout.tsx @@ -8,8 +8,9 @@ import dayjs from "dayjs"; import { default as AntdBreadcrumb } from "antd/es/breadcrumb"; import { default as Select } from "antd/es/select"; import { default as Skeleton } from "antd/es/skeleton"; +import { default as Empty } from "antd/es/empty"; import { Card } from "antd"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useMemo, useCallback, useRef } from "react"; import { ArrowIcon, ArrowSolidIcon, @@ -308,11 +309,12 @@ export interface HomeLayoutProps { } export function HomeLayout(props: HomeLayoutProps) { + const mounted = useRef(true); const { breadcrumb = [], elements = [], localMarketplaceApps = [], globalMarketplaceApps = [], - mode , + mode, setCurrentPage, setPageSize, pageSize, @@ -326,30 +328,8 @@ export function HomeLayout(props: HomeLayoutProps) { modify, setIsCreated, isCreated - } = props; - - const handlePageChange = (page: number) => { - setCurrentPage(page); - }; - - const handlePageSizeChange = (current: number, size: number) => { - setPageSize(size); - }; - - const categoryOptions = [ - { label: <FilterMenuItem>{trans("home.allCategories")}</FilterMenuItem>, value: 'All' }, - ...Object.entries(ApplicationCategoriesEnum).map(([key, value]) => ({ - label: ( - <FilterMenuItem> - {value} - </FilterMenuItem> - ), - value: key, - })), - ]; - const user = useSelector(getUser); const isFetching = useSelector(isFetchingFolderElements); const isSelfHost = window.location.host !== 'app.lowcoder.cloud'; @@ -360,6 +340,56 @@ export function HomeLayout(props: HomeLayoutProps) { checkIsMobile(window.innerWidth) ? "card" : getHomeLayout() ); + // Cleanup on unmount + useEffect(() => { + return () => { + mounted.current = false; + }; + }, []); + + const handlePageChange = useCallback((page: number) => { + if (mounted.current && setCurrentPage) { + setCurrentPage(page); + } + }, [setCurrentPage]); + + const handlePageSizeChange = useCallback((current: number, size: number) => { + if (mounted.current && setPageSize) { + setPageSize(size); + } + }, [setPageSize]); + + const handleTypeFilterChange = useCallback((value: any) => { + if (mounted.current) { + setTypeFilter(value as HomeResKey); + if (visibility && setTypeFilterPagination) { + setTypeFilterPagination(HomeResTypeEnum[value]); + } + } + }, [visibility, setTypeFilterPagination]); + + const handleCategoryFilterChange = useCallback((value: any) => { + if (mounted.current) { + setCategoryFilter(value as ApplicationCategoriesEnum); + if (setCategoryFilterPagination) { + setCategoryFilterPagination(value as ApplicationCategoriesEnum); + } + } + }, [setCategoryFilterPagination]); + + const handleSearchChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => { + if (mounted.current && setSearchValue) { + setSearchValue(e.target.value); + } + }, [setSearchValue]); + + const handleLayoutChange = useCallback(() => { + if (mounted.current) { + setLayout(layout === "list" ? "card" : "list"); + } + }, [layout]); + + useEffect(() => saveHomeLayout(layout), [layout]); useEffect(() => { @@ -369,90 +399,90 @@ export function HomeLayout(props: HomeLayoutProps) { const currentPath = useLocation().pathname; - if (!user.currentOrgId) { - return null; - } - - var displayElements = elements.sort((a, b) => { - if (a.folder && !b.folder) { - return -1; - } else if (!a.folder && b.folder) { - return 1; - } else { - return 0; - } - }); + const displayElements = useMemo(() => { + const sorted = elements.sort((a, b) => { + if (a.folder && !b.folder) { + return -1; + } else if (!a.folder && b.folder) { + return 1; + } else { + return 0; + } + }); - if (mode === "marketplace" && isSelfHost) { - const markedLocalApps = localMarketplaceApps.map(app => ({ ...app, isLocalMarketplace: true })); - const markedGlobalApps = globalMarketplaceApps.map(app => ({ ...app, isLocalMarketplace: false })); - // Merge local and global apps into the elements array - displayElements = [...markedLocalApps, ...markedGlobalApps]; - } - else if (mode === "marketplace" && !isSelfHost) { - const markedLocalApps = localMarketplaceApps.map(app => ({ ...app, isLocalMarketplace: true })); - displayElements = [...markedLocalApps]; - } - const resList: HomeRes[] = displayElements - .filter((e) => { - if (!visibility) { - if (searchValue) { - const lowerCaseSearchValue = searchValue.toLocaleLowerCase(); - return e.name?.toLocaleLowerCase().includes(lowerCaseSearchValue) || - e.createBy?.toLocaleLowerCase().includes(lowerCaseSearchValue); - } - return true; + if (mode === "marketplace") { + const markedLocalApps = localMarketplaceApps.map(app => ({ ...app, isLocalMarketplace: true })); + if (isSelfHost) { + const markedGlobalApps = globalMarketplaceApps.map(app => ({ ...app, isLocalMarketplace: false })); + return [...markedLocalApps, ...markedGlobalApps]; } - return true; - }) - .filter((e) => { - if(!visibility) { - if (HomeResTypeEnum[typeFilter].valueOf() === HomeResTypeEnum.All) { - return true; - } - if (e.folder) { - return HomeResTypeEnum[typeFilter] === HomeResTypeEnum.Folder; - } else { - if (typeFilter === "Navigation") { - return NavigationTypes.map((t) => t.valueOf()).includes(e.applicationType); + return [...markedLocalApps]; + } + return sorted; + }, [elements, mode, localMarketplaceApps, globalMarketplaceApps, isSelfHost]); + + const resList = useMemo(() => { + return displayElements + .filter((e) => { + if (!visibility) { + if (searchValue) { + const lowerCaseSearchValue = searchValue.toLocaleLowerCase(); + return e.name?.toLocaleLowerCase().includes(lowerCaseSearchValue) || + e.createBy?.toLocaleLowerCase().includes(lowerCaseSearchValue); } - return HomeResTypeEnum[typeFilter].valueOf() === e.applicationType; + return true; } - } - return true; + return true; }) - .map((e) => - e.folder - ? { - key: e.folderId, - id: e.folderId, - name: e.name, - type: HomeResTypeEnum.Folder, - creator: e.createBy, - lastModifyTime: e.createAt, - isManageable: e.manageable, - isDeletable: e.manageable && !e.subApplications?.length && !e.subFolders?.length, + .filter((e) => { + if(!visibility) { + if (HomeResTypeEnum[typeFilter].valueOf() === HomeResTypeEnum.All) { + return true; } - : { - key: e.applicationId, - id: e.applicationId, - name: e.name, - title: e.title, - description: e.description, - category: e.category, - icon: e.image, - type: HomeResTypeEnum[HomeResTypeEnum[e.applicationType] as HomeResKey], - creator: e?.creatorEmail ?? e.createBy, - lastModifyTime: e.lastModifyTime, - isEditable: mode !== 'marketplace' && canEditApp(user, e), - isManageable: mode !== 'marketplace' && canManageApp(user, e), - isDeletable: mode !== 'marketplace' && canEditApp(user, e), - isMarketplace: mode === 'marketplace', - isLocalMarketplace: e.isLocalMarketplace, + if (e.folder) { + return HomeResTypeEnum[typeFilter] === HomeResTypeEnum.Folder; + } else { + if (typeFilter === "Navigation") { + return NavigationTypes.map((t) => t.valueOf()).includes(e.applicationType); + } + return HomeResTypeEnum[typeFilter].valueOf() === e.applicationType; } - ); - - const getFilterMenuItem = (type: HomeResTypeEnum) => { + } + return true; + }) + .map((e) => + e.folder + ? { + key: e.folderId, + id: e.folderId, + name: e.name, + type: HomeResTypeEnum.Folder, + creator: e.createBy, + lastModifyTime: e.createAt, + isManageable: e.manageable, + isDeletable: e.manageable && !e.subApplications?.length && !e.subFolders?.length, + } + : { + key: e.applicationId, + id: e.applicationId, + name: e.name, + title: e.title, + description: e.description, + category: e.category, + icon: e.image, + type: HomeResTypeEnum[HomeResTypeEnum[e.applicationType] as HomeResKey], + creator: e?.creatorEmail ?? e.createBy, + lastModifyTime: e.lastModifyTime, + isEditable: mode !== 'marketplace' && canEditApp(user, e), + isManageable: mode !== 'marketplace' && canManageApp(user, e), + isDeletable: mode !== 'marketplace' && canEditApp(user, e), + isMarketplace: mode === 'marketplace', + isLocalMarketplace: e.isLocalMarketplace, + } + ); + }, [displayElements, visibility, searchValue, typeFilter, mode, user]); + + const getFilterMenuItem = useCallback((type: HomeResTypeEnum) => { const Icon = HomeResInfo[type].icon; return { label: ( @@ -463,9 +493,9 @@ export function HomeLayout(props: HomeLayoutProps) { ), value: HomeResTypeEnum[type], }; - }; + }, []); - const breadcrumbItems = [ + const breadcrumbItems = useMemo(() => [ { key: 0, title: trans("home.home"), @@ -477,7 +507,40 @@ export function HomeLayout(props: HomeLayoutProps) { title: b.text, onClick: () => currentPath !== b.path && history.push(b.path) })) - ] + ], [breadcrumb, currentPath]); + + const filterMenuItems = useMemo(() => [ + getFilterMenuItem(HomeResTypeEnum.All), + getFilterMenuItem(HomeResTypeEnum.Application), + getFilterMenuItem(HomeResTypeEnum.Module), + ...(mode !== "marketplace" ? [getFilterMenuItem(HomeResTypeEnum.Navigation), getFilterMenuItem(HomeResTypeEnum.MobileTabLayout)] : []), + ...(mode !== "trash" && mode !== "marketplace" && mode !== "folder" ? [getFilterMenuItem(HomeResTypeEnum.Folder)] : []), + ], [mode, getFilterMenuItem]); + + const localMarketplaceAppsList = useMemo(() => { + return resList.filter(app => app.isLocalMarketplace) + }, [resList]); + + const globalMarketplaceAppsList = useMemo(() => { + return resList.filter(app => !app.isLocalMarketplace) + }, [resList]); + + const categoryOptions = [ + { label: <FilterMenuItem>{trans("home.allCategories")}</FilterMenuItem>, value: 'All' }, + ...Object.entries(ApplicationCategoriesEnum).map(([key, value]) => ({ + label: ( + <FilterMenuItem> + {value} + </FilterMenuItem> + ), + value: key, + })), + ]; + + // Move the conditional check after all hooks + if (!user.currentOrgId) { + return null; + } return ( <Wrapper> @@ -517,19 +580,8 @@ export function HomeLayout(props: HomeLayoutProps) { <FilterDropdown variant="borderless" value={typeFilter} - onChange={(value: any) => { - setTypeFilter(value as HomeResKey); - if(visibility) - setTypeFilterPagination(HomeResTypeEnum[value]) - } - } - options={[ - getFilterMenuItem(HomeResTypeEnum.All), - getFilterMenuItem(HomeResTypeEnum.Application), - getFilterMenuItem(HomeResTypeEnum.Module), - ...(mode !== "marketplace" ? [getFilterMenuItem(HomeResTypeEnum.Navigation), getFilterMenuItem(HomeResTypeEnum.MobileTabLayout)] : []), - ...(mode !== "trash" && mode !== "marketplace" && mode !== "folder" ? [getFilterMenuItem(HomeResTypeEnum.Folder)] : []), - ]} + onChange={handleTypeFilterChange} + options={filterMenuItems} getPopupContainer={(node: any) => node} suffixIcon={<ArrowSolidIcon />} /> )} @@ -538,14 +590,8 @@ export function HomeLayout(props: HomeLayoutProps) { style={{ minWidth: "220px" }} variant="borderless" value={categoryFilter} - onChange={(value: any) => { - setCategoryFilter(value as ApplicationCategoriesEnum) - setCategoryFilterPagination(value as ApplicationCategoriesEnum); - } - - } + onChange={handleCategoryFilterChange} options={categoryOptions} - // getPopupContainer={(node) => node} suffixIcon={<ArrowSolidIcon />} />} {mode === "marketplace" && ( @@ -553,13 +599,12 @@ export function HomeLayout(props: HomeLayoutProps) { style={{ minWidth: "220px" }} variant="borderless" value={categoryFilter} - onChange={(value: any) => setCategoryFilter(value as ApplicationCategoriesEnum)} + onChange={(value: any) => handleCategoryFilterChange(value as ApplicationCategoriesEnum)} options={categoryOptions} - // getPopupContainer={(node) => node} suffixIcon={<ArrowSolidIcon />} /> )} - <LayoutSwitcher onClick={() => setLayout(layout === "list" ? "card" : "list")}> + <LayoutSwitcher onClick={handleLayoutChange}> {layout === "list" ? <HomeCardIcon/> : <HomeListIcon/>} </LayoutSwitcher> @@ -567,7 +612,7 @@ export function HomeLayout(props: HomeLayoutProps) { <Search placeholder={trans("search")} value={searchValue || ""} - onChange={(e) => setSearchValue(e.target.value)} + onChange={handleSearchChange} style={{ width: "192px", height: "32px", margin: "0" }} /> @@ -605,15 +650,15 @@ export function HomeLayout(props: HomeLayoutProps) { {isSelfHost ? ( <> <h2 style={{ padding: "0 36px" }}>{trans("home.localMarketplaceTitle")}</h2> - <HomeTableView resources={resList.filter(app => app.isLocalMarketplace)} /> + <HomeTableView resources={localMarketplaceAppsList} /> <Divider style={{ padding: "0 36px", margin: "0 36px", width: "calc(100% - 72px) !important" }} /> <h2 style={{ padding: "0 36px" }}>{trans("home.globalMarketplaceTitle")}</h2> - <HomeTableView resources={resList.filter(app => !app.isLocalMarketplace)} /> + <HomeTableView resources={globalMarketplaceAppsList} /> </> ) : ( <> <h2 style={{padding: "0 36px"}}>{trans("home.globalMarketplaceTitle")}</h2> - <HomeTableView resources={resList.filter(app => app.isLocalMarketplace)} /> + <HomeTableView resources={localMarketplaceAppsList} /> </> )} </> @@ -622,15 +667,21 @@ export function HomeLayout(props: HomeLayoutProps) { {isSelfHost ? ( <> <h2 style={{padding: "0 36px"}}>{trans("home.localMarketplaceTitle")}</h2> - <HomeCardView resources={resList.filter(app => app.isLocalMarketplace)} /> - <Divider style={{padding: "0 36px", margin: "12px 36px", width: "calc(100% - 72px) !important"}}/> + {Boolean(localMarketplaceAppsList?.length) + ? <HomeCardView resources={localMarketplaceAppsList} /> + : <Empty description={trans("home.noMarketplaceApps")} image={<HomeEmptyIcon style={{ width: "90px", height: "120px" }} />}/> + } + <Divider style={{padding: "0 36px", margin: "24px 36px", width: "calc(100% - 72px) !important"}}/> <h2 style={{padding: "0 36px"}}>{trans("home.globalMarketplaceTitle")}</h2> - <HomeCardView resources={resList.filter(app => !app.isLocalMarketplace)} /> + <HomeCardView resources={globalMarketplaceAppsList} /> </> ) : ( <> <h2 style={{padding: "0 36px"}}>{trans("home.globalMarketplaceTitle")}</h2> - <HomeCardView resources={resList.filter(app => app.isLocalMarketplace)} /> + {Boolean(localMarketplaceAppsList?.length) + ? <HomeCardView resources={localMarketplaceAppsList} /> + : <Empty description={trans("home.noMarketplaceApps")} image={<HomeEmptyIcon style={{ width: "90px", height: "120px" }} />}/> + } </> )} </> diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/HomeResCard.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/HomeResCard.tsx index 38f38f1bfe..04ef180dc0 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/HomeResCard.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/HomeResCard.tsx @@ -1,5 +1,5 @@ import { TacoButton } from "lowcoder-design/src/components/button" -import { useState } from "react"; +import { ReactNode, useState } from "react"; import { useDispatch } from "react-redux"; import { updateAppMetaAction } from "redux/reduxActions/applicationActions"; import styled from "styled-components"; @@ -24,6 +24,7 @@ import { TypographyText } from "../../components/TypographyText"; import { useParams } from "react-router-dom"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import {FolderIcon} from "icons"; +import { BrandedIcon } from "@lowcoder-ee/components/BrandedIcon"; const ExecButton = styled(TacoButton)` width: 52px; @@ -167,13 +168,15 @@ export function HomeResCard(props: { res: HomeRes; onMove: (res: HomeRes) => voi <Wrapper> <Card> {Icon && ( - <Icon width={"42px"} height={"42px"} style={ - { - color: iconColor, - marginRight: "10px", - flexShrink: 0 - } - } /> + <BrandedIcon> + <Icon width={"42px"} height={"42px"} style={ + { + color: iconColor, + marginRight: "10px", + flexShrink: 0 + } + } /> + </BrandedIcon> )} <CardInfo onClick={(e) => { diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/HomeTableView.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/HomeTableView.tsx index 9ca46832a2..ff1ed815fe 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/HomeTableView.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/HomeTableView.tsx @@ -22,6 +22,7 @@ import { MoveToFolderModal } from "./MoveToFolderModal"; import { trans } from "../../i18n"; import { useParams } from "react-router-dom"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { BrandedIcon } from "@lowcoder-ee/components/BrandedIcon"; const OperationWrapper = styled.div` display: flex; @@ -119,11 +120,13 @@ export const HomeTableView = (props: { resources: HomeRes[], setModify?: any, mo return ( <NameWrapper> {Icon && ( - <Icon - width={"24px"} - height={"24px"} - style={{ marginRight: "10px", flexShrink: 0 }} - /> + <BrandedIcon> + <Icon + width={"24px"} + height={"24px"} + style={{ marginRight: "10px", flexShrink: 0 }} + /> + </BrandedIcon> )} <TypographyText ellipsis={true} diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/MarketplaceResCard.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/MarketplaceResCard.tsx index 33f5baebac..ab292ba40d 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/MarketplaceResCard.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/MarketplaceResCard.tsx @@ -155,9 +155,7 @@ export function MarketplaceResCard(props: { res: HomeRes; }) { return ( <Wrapper> <Card> - {res.icon && typeof res.icon === 'string' && ( - <MultiIconDisplay identifier={res.icon} width="30px" height="30px" style={{ marginRight: "6px", flexShrink: 0, color: "#b766db" }} /> - )} + <MultiIconDisplay identifier={res.icon && typeof res.icon === 'string' ? res.icon : '/icon:antd/appstoreoutlined'} width="30px" height="30px" style={{ marginRight: "6px", flexShrink: 0, color: "#b766db" }} /> <CardInfo onClick={(e) => { if(res.isMarketplace) { diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx index 34bd6b9a1b..2e3d4888e1 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/MoveToFolderModal.tsx @@ -56,7 +56,7 @@ export const MoveToFolderModal = (props: { source?: HomeRes; onClose: () => void <CustomModal open={!!props.source} onCancel={props.onClose} - destroyOnClose={true} + destroyOnHidden={true} width="408px" centered={true} title={trans("home.moveToFolder")} diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/NewsLayout.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/NewsLayout.tsx index 0bff2fce5c..c9db2e1fe1 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/NewsLayout.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/NewsLayout.tsx @@ -1,8 +1,11 @@ import styled from "styled-components"; import { trans } from "../../i18n"; import { default as Divider } from "antd/es/divider"; +import { getReleases, getYoutubeVideos, getHubspotContent } from "api/newsApi"; +import { Card, Col, Row, Typography } from "antd"; +import React, { useEffect, useState } from "react"; -import { Card } from "antd"; +const { Title, Paragraph } = Typography; const Wrapper = styled.div` display: flex; @@ -12,7 +15,7 @@ const Wrapper = styled.div` `; const HeaderWrapper = styled.div` - height: 84px; + height: 40px; width: 100%; display: flex; padding: 0 36px; @@ -48,41 +51,55 @@ const StyleNewsCover = styled.div` border-radius:10px 10px 0 0; `; -const StyleNewsContent = styled.div` - position: relative; - margin-top:-50px; - display: flex; - align-items: end; - gap: 20px; - - .subtitle { - color: #8b8fa3; - } - - .button-end { - margin-left: auto; - } - - svg { - margin-right: 5px; - vertical-align: middle; - } +const SectionTitle = styled(Title)` + margin-top: 24px; + font-size: 0.9em; `; -const isSelfHost = window.location.host !== 'app.lowcoder.cloud'; -var newsLink = "https://app.lowcoder.cloud/apps/6637657e859baf650aebf1b1/view?template=1"; -const commitId = REACT_APP_COMMIT_ID; -const buildId = REACT_APP_BUILD_ID; +const CardImage = styled.img` + width: 100%; + height: 160px; + object-fit: cover; + border-radius: 4px; +`; -if (buildId) { - newsLink += `&b=${buildId}`; -} -if (isSelfHost) { - newsLink += `&v=${commitId}`; +const cardGridStyle = { padding: "8px" }; + +type NewsEntry = any; // replace with actual types if available + +interface NewsGridProps { + entries: NewsEntry[]; } + export function NewsLayout() { + const [releasesData, setReleasesData] = useState<any[]>([]); + + useEffect(() => { + getReleases() + .then(data => setReleasesData(data)) + .catch(err => console.error("Failed to load news:", err)); + }, []); + + const [youTubeData, setYouTubeData] = useState<any[]>([]); + + useEffect(() => { + getYoutubeVideos() + .then(data => setYouTubeData(data)) + .catch(err => console.error("Failed to load news:", err)); + }, []); + + const [hubspotData, setHubspotData] = useState<any[]>([]); + + useEffect(() => { + getHubspotContent() + .then(data => setHubspotData(data)) + .catch(err => console.error("Failed to load news:", err)); + }, []); + + console.log(youTubeData); + return ( <Wrapper> <HeaderWrapper></HeaderWrapper> @@ -93,14 +110,79 @@ export function NewsLayout() { <h1 style={{color: "#ffffff", marginTop : "12px"}}>Lowcoder {trans("home.news")}</h1> </StyleNewsCover> <Card style={{ marginBottom: "20px", minHeight : "800px" }}> - <h4>{trans("home.newsLoading")}</h4> - <iframe - style={{ border: "none" }} - title="Lowcoder News" - width="100%" - height="800px" - src={newsLink} - /> + + <SectionTitle level={2}>📺 Latest YouTube Videos + <Paragraph type="secondary" style={{ marginBottom: 0, marginTop: 4 }}> + <Typography.Link href="https://www.youtube.com/@Lowcoder_cloud" target="_blank" rel="noopener noreferrer"> + Visit YouTube Channel → + </Typography.Link> + </Paragraph> + </SectionTitle> + + <Row gutter={[16, 16]}> + {youTubeData.map((item, idx) => { + const s = item.snippet; + return ( + <Col xs={24} sm={12} md={8} lg={6} key={`yt-${idx}`}> + <Card + hoverable + cover={ + <a href={`https://www.youtube.com/watch?v=${item.id.videoId}`} target="_blank" rel="noreferrer"> + <CardImage src={s.thumbnails.high.url} alt={s.title} /> + </a> + } + > + <Card.Meta + title={s.title} + description={<Paragraph ellipsis={{ rows: 2 }}>{s.description}</Paragraph>} + /> + </Card> + </Col> + ); + })} + </Row> + + <Divider /> + + <SectionTitle level={2}>🚀 Latest Releases + <Paragraph type="secondary" style={{ marginBottom: 0, marginTop: 4 }}> + <Typography.Link href="https://github.com/lowcoder-org/lowcoder/releases" target="_blank" rel="noopener noreferrer"> + View all GitHub Releases → + </Typography.Link> + </Paragraph> + </SectionTitle> + <Row gutter={[16, 16]}> + {releasesData.map((item, idx) => { + const c = item; + return ( + <Col xs={24} sm={12} md={12} lg={8} key={`gh-${idx}`}> + <Card + hoverable + title={`${c.tag_name} (${c.name})`} + extra={<a href={c.html_url} target="_blank" rel="noreferrer">View</a>} + > + <Paragraph type="secondary">{new Date(c.published_at).toLocaleDateString()}</Paragraph> + <Paragraph ellipsis={{ rows: 5 }}> + <span dangerouslySetInnerHTML={{ __html: c.body.replace(/\r\n/g, "<br />") }} /> + </Paragraph> + </Card> + </Col> + ); + })} + </Row> + + <Divider /> + + <SectionTitle level={2}>📝 Latest Blog Posts</SectionTitle> + <Row gutter={[16, 16]}> + {hubspotData.length === 0 && ( + <Col span={24}> + <Paragraph>No blog posts available at the moment.</Paragraph> + </Col> + )} + + </Row> + <Divider /> </Card> diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/TrashTableView.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/TrashTableView.tsx index 424d675073..11323e56dc 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/TrashTableView.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/TrashTableView.tsx @@ -9,6 +9,7 @@ import { deleteApplication, restoreApplication } from "../../redux/reduxActions/ import { HomeRes } from "./HomeLayout"; import { trans, transToNode } from "../../i18n"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { BrandedIcon } from "@lowcoder-ee/components/BrandedIcon"; const OperationWrapper = styled.div` display: flex; @@ -59,11 +60,13 @@ export const TrashTableView = (props: { resources: HomeRes[] , setModify: any, m return ( <NameWrapper> {Icon && ( - <Icon - width={"24px"} - height={"24px"} - style={{ marginRight: "10px", flexShrink: 0 }} - /> + <BrandedIcon> + <Icon + width={"24px"} + height={"24px"} + style={{ marginRight: "10px", flexShrink: 0 }} + /> + </BrandedIcon> )} {item.name} </NameWrapper> diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx index 4a2d48508e..ebe83b3cca 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/components/CreateApiKeyModal.tsx @@ -13,6 +13,7 @@ import { validateResponse } from "api/apiUtils"; import _ from "lodash"; import { styled } from "styled-components"; import UserApi, { ApiKeyPayload } from "api/userApi"; +import { ApiKeyType } from "./UserApiKeysCard"; const CustomModalStyled = styled(CustomModal)` button { @@ -90,7 +91,7 @@ const FormStyled = styled(Form)` type CreateApiKeyModalProps = { modalVisible: boolean; closeModal: () => void; - onConfigCreate: () => void; + onConfigCreate: (apiKey?: ApiKeyType) => void; }; function CreateApiKeyModal(props: CreateApiKeyModalProps) { @@ -101,6 +102,7 @@ function CreateApiKeyModal(props: CreateApiKeyModalProps) { } = props; const [form] = Form.useForm(); const [saveLoading, setSaveLoading] = useState(false); + const [apiKey, setApiKey] = useState<{id: string, token: string}>(); const handleOk = () => { form.validateFields().then(values => { @@ -115,12 +117,15 @@ function CreateApiKeyModal(props: CreateApiKeyModalProps) { .then((resp) => { if (validateResponse(resp)) { messageInstance.success(trans("idSource.saveSuccess")); + onConfigCreate(resp.data.data); } }) - .catch((e) => messageInstance.error(e.message)) + .catch((e) => { + messageInstance.error(e.message); + onConfigCreate(); + }) .finally(() => { setSaveLoading(false); - onConfigCreate(); }); } @@ -142,7 +147,7 @@ function CreateApiKeyModal(props: CreateApiKeyModalProps) { }} onOk={handleOk} onCancel={handleCancel} - destroyOnClose + destroyOnHidden afterClose={() => form.resetFields()} > <FormStyled diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx index 479ea125a8..77998cc0bd 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/components/UserApiKeysCard.tsx @@ -2,10 +2,10 @@ import { getApiKeys } from "redux/selectors/usersSelectors"; import Card from "antd/es/card"; import Flex from "antd/es/flex"; import Title from "antd/es/typography/Title"; -import Table from "antd/es/table"; +import Table, { ColumnsType } from "antd/es/table"; import Tooltip from "antd/es/tooltip"; import { useDispatch, useSelector } from "react-redux"; -import { useState } from "react"; +import { useState, useCallback, useMemo } from "react"; import { styled } from "styled-components"; import { AddIcon, CustomModal, EditPopover, TacoButton, messageInstance } from "lowcoder-design"; import { trans } from "i18n"; @@ -14,12 +14,14 @@ import CreateApiKeyModal from "./CreateApiKeyModal"; import { fetchApiKeysAction } from "redux/reduxActions/userActions"; import UserApi from "@lowcoder-ee/api/userApi"; import { validateResponse } from "@lowcoder-ee/api/apiUtils"; +import Alert from "antd/es/alert"; +import { CopyOutlined } from "@ant-design/icons"; const TableStyled = styled(Table)` .ant-table-tbody > tr > td { padding: 11px 12px; } -`; +` as typeof Table; const OperationWrapper = styled.div` display: flex; @@ -37,119 +39,153 @@ const CreateButton = styled(TacoButton)` box-shadow: none; `; +export type ApiKeyType = { + id: string; + token: string; + name: string; + description?: string; +} + export default function UserApiKeysCard() { const dispatch = useDispatch(); const apiKeys = useSelector(getApiKeys); const [modalVisible, setModalVisible] = useState(false); + const [newApiKey, setNewApiKey] = useState<ApiKeyType>(); + + const handleCopy = useCallback((value: string) => { + navigator.clipboard.writeText(value) + .then(() => messageInstance.success('Copied to clipboard!')) + .catch(() => messageInstance.error('Failed to copy!')); + }, []); - const handleCopy = (value: string) => { - navigator.clipboard.writeText(value).then(() => { - messageInstance.success('Copied to clipboard!'); - }).catch(err => { - messageInstance.error('Failed to copy!'); + const handleDeleteApiKey = useCallback((apiKeyId: string) => { + CustomModal.confirm({ + title: trans("profile.deleteApiKey"), + content: trans("profile.deleteApiKeyContent"), + onConfirm: () => { + UserApi.deleteApiKey(apiKeyId) + .then(resp => { + if(validateResponse(resp)) { + dispatch(fetchApiKeysAction()); + } + }) + .catch(() => { + messageInstance.error(trans("profile.deleteApiKeyError")); + }); + }, + confirmBtnType: "delete", + okText: trans("delete"), }); - }; + }, [dispatch]); + + const handleModalClose = useCallback(() => { + setModalVisible(false); + }, []); + + const handleConfigCreate = useCallback((apiKey?: ApiKeyType) => { + setModalVisible(false); + setNewApiKey(apiKey); + dispatch(fetchApiKeysAction()); + }, [dispatch]); + + const columns: ColumnsType<ApiKeyType> = useMemo(() => [ + { + title: trans("profile.apiKeyName"), + dataIndex: "name", + ellipsis: true, + }, + { + title: trans("profile.apiKeyDescription"), + dataIndex: "description", + width: 400, + render: (value: string) => value || '-', + }, + { + title: trans("profile.apiKey"), + dataIndex: "token", + width: 500, + render: (value: string, record: ApiKeyType) => { + if (newApiKey?.id === record.id) { + return ( + <Tooltip placement="topLeft" title={trans("profile.apiKeyCopy")}> + <div + onClick={() => handleCopy(newApiKey.token)} + style={{ cursor: 'pointer', width: '500px' }} + > + {newApiKey.token} + + <CopyOutlined /> + </div> + </Tooltip> + ); + } + return <div>{value}</div>; + } + }, + { + title: " ", + dataIndex: "operation", + width: "208px", + render: (_: unknown, record: ApiKeyType) => ( + <OperationWrapper> + <EditPopover + del={() => handleDeleteApiKey(record.id)} + > + <PopoverIcon tabIndex={-1} /> + </EditPopover> + </OperationWrapper> + ), + }, + ], [newApiKey, handleCopy, handleDeleteApiKey]); + + const dataSource = useMemo(() => + apiKeys.map((apiKey, i) => ({ + ...apiKey, + key: i, + })) + , [apiKeys]); return ( <> <Card style={{ marginBottom: "20px" }}> <Flex justify="space-between" align="center" style={{marginBottom: '8px'}}> <Title level={4}>{trans("profile.apiKeys")}</Title> - <h4><a href={trans("docUrls.apiDocHome")} target="_blank">{trans("home.howToUseAPI")}</a></h4> + <h4> + <a href={trans("docUrls.apiDocHome")} target="_blank" rel="noopener noreferrer"> + {trans("home.howToUseAPI")} + </a> + </h4> <CreateButton - buttonType={"primary"} + buttonType="primary" icon={<AddIcon />} - onClick={() => - setModalVisible(true) - } + onClick={() => setModalVisible(true)} > {trans("profile.createApiKey")} </CreateButton> </Flex> + + {Boolean(newApiKey) && ( + <Alert + message={trans("profile.apiKeyInfo")} + type="info" + style={{marginBottom: '16px'}} + /> + )} + <TableStyled - tableLayout={"auto"} + tableLayout="auto" scroll={{ x: "100%" }} pagination={false} - onRow={(record) => ({ - - })} - columns={[ - { - title: trans("profile.apiKeyName"), - dataIndex: "name", - ellipsis: true, - }, - { - title: trans("profile.apiKeyDescription"), - dataIndex: "description", - ellipsis: true, - render: (value: string) => { - return ( - <> - { value || '-'} - </> - ) - } - }, - { - title: trans("profile.apiKey"), - dataIndex: "token", - ellipsis: true, - render: (value: string) => { - const startToken = value.substring(0, 6); - const endToken = value.substring(value.length - 6); - return ( - <Tooltip placement="topLeft" title={ trans("profile.apiKeyCopy")}> - <div onClick={() => handleCopy(value)} style={{ cursor: 'pointer' }}> - {`${startToken}********************${endToken}`} - </div> - </Tooltip> - ) - } - }, - { title: " ", dataIndex: "operation", width: "208px" }, - ]} - dataSource={apiKeys.map((apiKey, i) => ({ - ...apiKey, - key: i, - operation: ( - <OperationWrapper> - <EditPopover - del={() => { - CustomModal.confirm({ - title: trans("profile.deleteApiKey"), - content: trans("profile.deleteApiKeyContent"), - onConfirm: () => { - UserApi.deleteApiKey(apiKey.id).then(resp => { - if(validateResponse(resp)) { - dispatch(fetchApiKeysAction()); - } - }) - .catch((e) => { - messageInstance.error(trans("profile.deleteApiKeyError")); - }) - }, - confirmBtnType: "delete", - okText: trans("delete"), - }) - }} - > - <PopoverIcon tabIndex={-1} /> - </EditPopover> - </OperationWrapper> - ), - }))} + columns={columns} + dataSource={dataSource} /> </Card> <CreateApiKeyModal modalVisible={modalVisible} - closeModal={() => setModalVisible(false)} - onConfigCreate={() => { - setModalVisible(false); - dispatch(fetchApiKeysAction()); - }} + closeModal={handleModalClose} + onConfigCreate={handleConfigCreate} /> </> - ) + ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx b/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx index 71c13d039e..4dd184f2eb 100644 --- a/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx +++ b/client/packages/lowcoder/src/pages/ApplicationV2/index.tsx @@ -15,16 +15,15 @@ import { import { getUser, isFetchingUser } from "redux/selectors/usersSelectors"; import { useDispatch, useSelector } from "react-redux"; import { + EllipsisTextCss, + FolderIcon, // EditPopover, HomeDataSourceIcon, NewsIcon, WorkspacesIcon, - // HomeModuleIcon, HomeQueryLibraryIcon, HomeSettingIcon, SupportIcon, - // PlusIcon, - // PointIcon, RecyclerIcon, MarketplaceIcon, AppsIcon, @@ -45,15 +44,10 @@ import { UserProfileView } from "./UserProfileView"; import { NewsView } from "./NewsView"; import { OrgView } from "./OrgView"; import styled, { css } from "styled-components"; -// import history from "../../util/history"; import { FolderView } from "./FolderView"; import { TrashView } from "./TrashView"; import { MarketplaceView } from "./MarketplaceView"; -// import { SideBarItemType } from "../../components/layout/SideBarSection"; -// import InviteDialog from "../common/inviteDialog"; import { fetchFolderElements, updateFolder } from "../../redux/reduxActions/folderActions"; -// import { ModuleView } from "./ModuleView"; -// import { useCreateFolder } from "./useCreateFolder"; import { trans } from "../../i18n"; import { foldersSelector } from "../../redux/selectors/folderSelector"; import Setting from "pages/setting"; @@ -61,15 +55,15 @@ import { Support } from "pages/support"; import { Subscription } from "pages/setting/subscriptions" // import { TypographyText } from "../../components/TypographyText"; // import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; -import { isEE } from "util/envUtils"; import { getSubscriptions } from 'redux/selectors/subscriptionSelectors'; import { SubscriptionProductsEnum } from '@lowcoder-ee/constants/subscriptionConstants'; +import { EnterpriseProvider } from "@lowcoder-ee/util/context/EnterpriseContext"; +import { SimpleSubscriptionContextProvider } from "@lowcoder-ee/util/context/SimpleSubscriptionContext"; +import { selectIsLicenseActive } from "redux/selectors/enterpriseSelectors"; + // adding App Editor, so we can show Apps inside the Admin Area import AppEditor from "../editor/AppEditor"; -import { fetchDeploymentIdAction } from "@lowcoder-ee/redux/reduxActions/configActions"; -import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; -import { SimpleSubscriptionContextProvider } from '@lowcoder-ee/util/context/SimpleSubscriptionContext'; import {LoadingBarHideTrigger} from "@lowcoder-ee/util/hideLoading"; const TabLabel = styled.div` @@ -99,20 +93,16 @@ export default function ApplicationHome() { const allFoldersCount = allFolders.length; const orgHomeId = "root"; const subscriptions = useSelector(getSubscriptions); - const deploymentId = useSelector(getDeploymentId); - useEffect(() => { - if (user.currentOrgId) { - dispatch(fetchDeploymentIdAction()); - } - dispatch(fetchHomeData({})); - }, [user.currentOrgId]); + const isOrgAdmin = org?.createdBy == user.id ? true : false; + const isLicenseActive = useSelector(selectIsLicenseActive); useEffect(() => { - if(Boolean(deploymentId)) { - dispatch(fetchSubscriptionsAction()) + // tricky check, will be called for anonymous user to redirect to login page + if (user.isAnonymous) { + dispatch(fetchHomeData({})); } - }, [deploymentId]); + }, [user.isAnonymous]) const supportSubscription = useMemo(() => { return subscriptions.some( @@ -154,171 +144,137 @@ export default function ApplicationHome() { return ( <DivStyled> <LoadingBarHideTrigger /> - <SimpleSubscriptionContextProvider> - <Layout - sections={[ - { - items: [ - { - text: <TabLabel>{trans("home.profile")}</TabLabel>, - routePath: USER_PROFILE_URL, - routeComp: UserProfileView, - icon: ({ selected, ...otherProps }) => selected ? <UserIcon {...otherProps} width={"24px"}/> : <UserIcon {...otherProps} width={"24px"}/>, - mobileVisible: true, - }, - { - text: <TabLabel>{trans("home.news")}</TabLabel>, - routePath: NEWS_URL, - routeComp: NewsView, - icon: ({ selected, ...otherProps }) => selected ? <NewsIcon {...otherProps} width={"24px"}/> : <NewsIcon {...otherProps} width={"24px"}/>, - visible: ({ user }) => user.orgDev, - style: { color: "red" }, - mobileVisible: false, - }, - { - text: <TabLabel>{trans("home.orgHome")}</TabLabel>, - routePath: ORG_HOME_URL, - routePathExact: false, - routeComp: OrgView, - icon: ({ selected, ...otherProps }) => selected ? <WorkspacesIcon {...otherProps} width={"24px"}/> : <WorkspacesIcon {...otherProps} width={"24px"}/>, - visible: ({ user }) => !user.orgDev, - mobileVisible: true, - }, - { - text: <TabLabel>{trans("home.marketplace")}</TabLabel>, - routePath: MARKETPLACE_URL, - routePathExact: false, - routeComp: MarketplaceView, - icon: ({ selected, ...otherProps }) => selected ? <MarketplaceIcon {...otherProps} width={"24px"}/> : <MarketplaceIcon {...otherProps} width={"24px"}/>, - mobileVisible: false, - }, - ] - }, + {/* <EnterpriseProvider> */} + {/* <SimpleSubscriptionContextProvider> */} + <Layout + sections={[ + { + items: [ + { + text: <TabLabel>{trans("home.profile")}</TabLabel>, + routePath: USER_PROFILE_URL, + routeComp: UserProfileView, + icon: ({ selected, ...otherProps }) => selected ? <UserIcon {...otherProps} width={"24px"}/> : <UserIcon {...otherProps} width={"24px"}/>, + }, + { + text: <TabLabel>{trans("home.news")}</TabLabel>, + routePath: NEWS_URL, + routeComp: NewsView, + icon: ({ selected, ...otherProps }) => selected ? <NewsIcon {...otherProps} width={"24px"}/> : <NewsIcon {...otherProps} width={"24px"}/>, + visible: ({ user }) => user.orgDev, + style: { color: "red" }, + }, + { + text: <TabLabel>{trans("home.orgHome")}</TabLabel>, + routePath: ORG_HOME_URL, + routePathExact: false, + routeComp: OrgView, + icon: ({ selected, ...otherProps }) => selected ? <WorkspacesIcon {...otherProps} width={"24px"}/> : <WorkspacesIcon {...otherProps} width={"24px"}/>, + visible: ({ user }) => !user.orgDev, + }, + { + text: <TabLabel>{trans("home.marketplace")}</TabLabel>, + routePath: MARKETPLACE_URL, + routePathExact: false, + routeComp: MarketplaceView, + icon: ({ selected, ...otherProps }) => selected ? <MarketplaceIcon {...otherProps} width={"24px"}/> : <MarketplaceIcon {...otherProps} width={"24px"}/>, + }, + ] + }, + + { + items: [ + { + text: <TabLabel>{trans("home.allApplications")}</TabLabel>, + routePath: ALL_APPLICATIONS_URL, + routeComp: HomeView, + icon: ({ selected, ...otherProps }) => selected ? <AppsIcon {...otherProps} width={"24px"}/> : <AppsIcon {...otherProps} width={"24px"}/>, + }, + ], + }, + + { + items: [ + { + text: <TabLabel>{trans("home.datasource")}</TabLabel>, + routePath: DATASOURCE_URL, + routePathExact: false, + routeComp: DatasourceHome, + icon: ({ selected, ...otherProps }) => selected ? <HomeDataSourceIcon {...otherProps} width={"24px"}/> : <HomeDataSourceIcon {...otherProps} width={"24px"}/>, + visible: ({ user }) => user.orgDev, + onSelected: (_, currentPath) => currentPath.split("/")[1] === "datasource", + mobileVisible: false, + }, + { + text: <TabLabel>{trans("home.queryLibrary")}</TabLabel>, + routePath: QUERY_LIBRARY_URL, + routeComp: QueryLibraryEditor, + icon: ({ selected, ...otherProps }) => selected ? <HomeQueryLibraryIcon {...otherProps} width={"24px"}/> : <HomeQueryLibraryIcon {...otherProps} width={"24px"}/>, + visible: ({ user }) => user.orgDev, + mobileVisible: false, + } + ], + }, - { - items: [ - // { - // text: <MoreFoldersWrapper>{trans("home.allFolders")}</MoreFoldersWrapper>, - // routePath: FOLDERS_URL, - // routeComp: RootFolderListView, - // icon: ({ selected, ...otherProps }) => selected ? <FolderIcon {...otherProps} width={"24px"}/> : <FolderIcon {...otherProps} width={"24px"}/>, - // }, - { - text: <TabLabel>{trans("home.allApplications")}</TabLabel>, - routePath: ALL_APPLICATIONS_URL, - routeComp: HomeView, - icon: ({ selected, ...otherProps }) => selected ? <AppsIcon {...otherProps} width={"24px"}/> : <AppsIcon {...otherProps} width={"24px"}/>, - mobileVisible: true, - }, - ], - }, - - { - items: [ - - { - text: <TabLabel>{trans("home.queryLibrary")}</TabLabel>, - routePath: QUERY_LIBRARY_URL, - routeComp: QueryLibraryEditor, - icon: ({ selected, ...otherProps }) => selected ? <HomeQueryLibraryIcon {...otherProps} width={"24px"}/> : <HomeQueryLibraryIcon {...otherProps} width={"24px"}/>, - visible: ({ user }) => user.orgDev, - mobileVisible: false, - }, - { - text: <TabLabel>{trans("home.datasource")}</TabLabel>, - routePath: DATASOURCE_URL, - routePathExact: false, - routeComp: DatasourceHome, - icon: ({ selected, ...otherProps }) => selected ? <HomeDataSourceIcon {...otherProps} width={"24px"}/> : <HomeDataSourceIcon {...otherProps} width={"24px"}/>, - visible: ({ user }) => user.orgDev, - onSelected: (_, currentPath) => currentPath.split("/")[1] === "datasource", - mobileVisible: false, - }, - ], - }, - isEE() ? { - items: [ - { - text: <TabLabel>{trans("settings.AppUsage")}</TabLabel>, - routePath: "/ee/6600ae8724a23f365ba2ed4c/admin", - routePathExact: false, - routeComp: AppEditor, - icon: ({ selected, ...otherProps }) => selected ? ( <EnterpriseIcon {...otherProps} width={"24px"}/> ) : ( <EnterpriseIcon {...otherProps} width={"24px"}/> ), - visible: ({ user }) => user.orgDev, - mobileVisible: false, - }, - ], - } : { items: [] }, + // Show Subscription if not yet subscribed else Support Pages - !supportSubscription && user.orgDev ? { - items: [ - { - text: <TabLabel>{trans("home.support")}</TabLabel>, - routePath: SUBSCRIPTION_SETTING, - routeComp: Subscription, - routePathExact: false, - icon: ({ selected, ...otherProps }) => selected ? <SupportIcon {...otherProps} width={"24px"}/> : <SupportIcon {...otherProps} width={"24px"}/>, - mobileVisible: true, - }, - ], - } : { items: [] }, + { + items: [ + { + text: <TabLabel>{trans("home.support")}</TabLabel>, + routePath: supportSubscription ? SUPPORT_URL : SUBSCRIPTION_SETTING, + routeComp: supportSubscription ? Support : Setting, + routePathExact: false, + icon: ({ selected, ...otherProps }) => <SupportIcon {...otherProps} width={"24px"} />, + mobileVisible: true, + visible: ({ user }) => user.orgDev + } + ] + }, - supportSubscription && user.orgDev ? { - items: [ - { - text: <TabLabel>{trans("home.support")}</TabLabel>, - routePath: SUPPORT_URL, - routeComp: Support, - routePathExact: false, - icon: ({ selected, ...otherProps }) => selected ? <SupportIcon {...otherProps} width={"24px"}/> : <SupportIcon {...otherProps} width={"24px"}/>, - mobileVisible: true, - }, - ], - } : { items: [] }, + { + items: [ + { + text: <TabLabel>{trans("settings.title")}</TabLabel>, + routePath: SETTING_URL, + routePathExact: false, + routeComp: Setting, + icon: ({ selected, ...otherProps }) => selected ? <HomeSettingIcon {...otherProps} width={"24px"}/> : <HomeSettingIcon {...otherProps} width={"24px"}/>, + visible: ({ user }) => user.orgDev, + onSelected: (_, currentPath) => currentPath.split("/")[1] === "setting", + } + ] + }, - { - items: [ - { - text: <TabLabel>{trans("settings.title")}</TabLabel>, - routePath: SETTING_URL, - routePathExact: false, - routeComp: Setting, - icon: ({ selected, ...otherProps }) => selected ? <HomeSettingIcon {...otherProps} width={"24px"}/> : <HomeSettingIcon {...otherProps} width={"24px"}/>, - visible: ({ user }) => user.orgDev, - onSelected: (_, currentPath) => currentPath.split("/")[1] === "setting", - mobileVisible: false, - } - ] - }, + { + items: [ + { + text: <TabLabel>{trans("home.trash")}</TabLabel>, + routePath: TRASH_URL, + routeComp: TrashView, + icon: ({ selected, ...otherProps }) => selected ? <RecyclerIcon {...otherProps} width={"24px"}/> : <RecyclerIcon {...otherProps} width={"24px"}/>, + visible: ({ user }) => user.orgDev, + }, + ], + }, - { - items: [ - { - text: <TabLabel>{trans("home.trash")}</TabLabel>, - routePath: TRASH_URL, - routeComp: TrashView, - icon: ({ selected, ...otherProps }) => selected ? <RecyclerIcon {...otherProps} width={"24px"}/> : <RecyclerIcon {...otherProps} width={"24px"}/>, - visible: ({ user }) => user.orgDev, - mobileVisible: false, - }, - ], - }, + // this we need to show the Folders view in the Admin Area + { + items: [ + { + text: "", + routePath: FOLDER_URL, + routeComp: FolderView, + visible: () => false, + } + ] + } - // this we need to show the Folders view in the Admin Area - { - items: [ - { - text: "", - routePath: FOLDER_URL, - routeComp: FolderView, - visible: () => false, - } - ] - } + ]} + /> + {/* </SimpleSubscriptionContextProvider> */} + {/* </EnterpriseProvider> */} - ]} - /> - </SimpleSubscriptionContextProvider> </DivStyled> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ButtonComp/LinkButton.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ButtonComp/LinkButton.tsx index 53274fb851..306ae30625 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ButtonComp/LinkButton.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ButtonComp/LinkButton.tsx @@ -8,7 +8,7 @@ export default function LinkExample() { <> <ExampleGroup title={trans("componentDoc.basicUsage")} - description={trans("componentDoc.basicDemoDescription")} + description="The Following Examples Show the Basic Usage of the Link Component." > <Example title={trans("componentDoc.default")} @@ -25,12 +25,123 @@ export default function LinkExample() { config={{ text: trans("componentDoc.link"), disabled: true }} compFactory={LinkComp} /> + <Example + title="Hiding the Link component" + config={{ text: trans("componentDoc.link"), hidden: true }} + compFactory={LinkComp} + /> </ExampleGroup> - <ExampleGroup title={trans("componentDoc.style")}> + + <ExampleGroup + title="Layout Options" + description="The Following Examples Show the Layout Options of the Link Component." + > + <Example + title="Prefix Icon" + config={{ + prefixIcon: "/icon:solid/arrow-down-wide-short", + }} + compFactory={LinkComp} + /> + <Example + title="Suffix Icon" + config={{ + suffixIcon: "/icon:solid/arrow-up-wide-short", + }} + compFactory={LinkComp} + /> + <Example + title="Prefix & Suffix Icon" + config={{ + prefixIcon: "/icon:solid/arrow-down-wide-short", + suffixIcon: "/icon:solid/arrow-up-wide-short", + }} + compFactory={LinkComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Link Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "borderStyle": "solid", + "hoverText": "#36B389", + "activeText": "#222222", + }, + }} + compFactory={LinkComp} + /> + <Example + title="Margin & Padding" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "margin": "10px", + "padding": "10px", + "borderStyle": "dashed", + }, + }} + compFactory={LinkComp} + /> + <Example + title="Rotation - 90deg" + config={{ + style: { + "rotation": "90deg", + }, + }} + compFactory={LinkComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Link Component." + > + <Example + title="Bounce Animation" + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={LinkComp} + /> + <Example + title="Swing Animation" + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={LinkComp} + /> <Example - title={trans("componentDoc.customAppearance")} + title="Tada Animation" config={{ - style: { color: "#A7392F" }, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, }} compFactory={LinkComp} /> diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Calendar.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Calendar.tsx index 22375e8609..b7547a9749 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Calendar.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Calendar.tsx @@ -45,6 +45,15 @@ export default function CalendarExample() { }} compFactory={ChartCompWithDefault} /> + <Example + title="Non-Editable - New Events can't be added to a Calendar" + width={700} + height={600} + config={{ + editable: false, + }} + compFactory={ChartCompWithDefault} + /> <Example title="Hiding Event Times" width={700} @@ -169,6 +178,172 @@ export default function CalendarExample() { compFactory={ChartCompWithDefault} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Calendar Component." + > + <Example + title="Background Color" + width={700} + height={600} + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Border Properties : Color and Radius" + width={700} + height={600} + config={{ + style: { + "border": "#053AF9", + "radius": "10px", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Text Color" + width={700} + height={600} + config={{ + style: { + "text": "#EF0404", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Button Background Color & Text Color" + width={700} + height={600} + config={{ + style: { + "headerBtnBackground": "#36B389", + "btnText": "#080808", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Title Color" + width={700} + height={600} + config={{ + style: { + "title": "#FFA608", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Selected Background Color - Select any time slot to see the Color" + width={700} + height={600} + config={{ + style: { + "selectBackground": "#FFA608", + }, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> + + <ExampleGroup + title="Modal Style" + description="The Following Examples Show the different Styling properties on the Modal of the Calendar Component." + > + <Example + title="Background Color" + width={700} + height={600} + config={{ + modalStyle: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Border Properties - Color, Width & Style" + width={700} + height={600} + config={{ + modalStyle: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#053CFF", + "borderWidth": "2px", + "borderStyle": "dashed", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Input Text Color & Input fields Background Color" + width={700} + height={600} + config={{ + modalStyle: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "text": "#FFFFFF", + "labelBackground": "#0702F2" + }, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different Animation Styles on the Calendar Component." + > + <Example + title="Bounce Animation" + width={700} + height={600} + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Swing Animation" + width={700} + height={600} + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Tada Animation" + width={700} + height={600} + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Timer.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Timer.tsx index 54fba64d2d..5d3ca644f5 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Timer.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/CalendarInputComp/Timer.tsx @@ -1,7 +1,6 @@ import { TimerComp } from "comps/comps/timerComp"; import Example from "../../common/Example"; import ExampleGroup from "../../common/ExampleGroup"; -import { startButtonStyle } from "@lowcoder-ee/index.sdk"; export default function TimerExample() { return ( diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GanttChart.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GanttChart.tsx index eac1341700..100dc105f0 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GanttChart.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GanttChart.tsx @@ -143,6 +143,77 @@ export default function GanttChartExample() { compFactory={ChartCompWithDefault} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Component." + > + <Example + title="Gantt Chart Styles" + width={1000} + config={{ + ganttChartStyle: { + "textSize": "15px", + "fontFamily": "Courier New", + "textColor": "#DA0303", + "barBackgroundColor": "#8D8D8E", + "barProgressColor": "#06EA9B", + "arrowColor": "#FC6B01", + "radius": "10px", + "todayColor": "#F2AB2E", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Legend Header Styles" + width={1000} + config={{ + headerHeight: "50", + legendWidth: "400px", + legendHeaderStyle: { + "textSize": "20px", + "fontFamily": "Verdana", + "textColor": "#FFFFFF", + "headerBackground": "#36B389", + "padding": "10px", + }, + }} + compFactory={ChartCompWithDefault} + /> + + <Example + title="Legend Styles" + width={1000} + config={{ + legendWidth: "500px", + legendStyle: { + "textSize": "20px", + "fontFamily": "Courier New", + "textColor": "#AE8D1C", + "headerBackground": "#00FFFF", + "padding": "20px" + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Tooltip Styles - Hover over individual Task to view the Tooltip" + width={1000} + config={{ + tooltipStyle: { + "textSize": "20px", + "textColor": "#85878C", + "headerBackground": "#FFF6E6", + "padding": "20px", + "borderColor": "#707278", + "borderWidth": "3px", + "radius": "20px" + }, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GaugeChart.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GaugeChart.tsx index 43d87a45d5..3583210b7a 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GaugeChart.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/GaugeChart.tsx @@ -170,6 +170,44 @@ const stageGuageOption = { ] }; +const chartStyle= { + background: "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + chartBorderColor: "#FDFAFA", + chartBorderStyle: "dashed", + chartBorderWidth: "2", + chartBoxShadow: "200", + chartShadowColor: "#3377FF" +} + +const titleStyle = { + chartBoxShadow: "9", + chartFontStyle: "Italic", + chartShadowColor: "#FFBD01", + chartTextColor: "#36B389", + chartTextSize: "30", + chartTextWeight: "Bold" +} + +const labelStyle = { + chartBoxShadow: "5", + chartFontFamily: "serif", + chartFontStyle: "Italic", + chartShadowColor: "#020101", + chartTextColor: "#FFFFFF", + chartTextSize: "20", + chartTextWeight: "bold" +} + +const legendStyle = { + chartBoxShadow: "5", + chartFontFamily: "serif", + chartFontStyle: "Italic", + chartShadowColor: "#FFD701", + chartTextColor: "#7A7A7B", + chartTextSize: "20", + chartTextWeight: "bold" +} + export default function GaugeChartExample() { return ( <> @@ -438,6 +476,70 @@ export default function GaugeChartExample() { compFactory={ChartCompWithDefault} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the Styling Properties on the Gauge Chart Component." + > + <Example + title="Chart Styling - Background Color, Box Shadow, Border" + width={500} + height={350} + hideSettings={true} + config={{ + chartStyle: chartStyle, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Title Styling - Text, Fonts & Box Shadow" + width={500} + height={350} + hideSettings={true} + config={{ + titleStyle: titleStyle, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Label Styling - Text, Fonts & Box Shadow" + width={500} + height={350} + hideSettings={true} + config={{ + labelStyle: labelStyle, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Lagend Styling - Text, Fonts & Box Shadow" + width={500} + height={350} + hideSettings={true} + config={{ + legendStyle: legendStyle, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Axis Styling - Text, Fonts & Box Shadow" + width={500} + height={350} + hideSettings={true} + config={{ + axisLabelStyle: { + "chartTextColor": "#FF8A39", + "chartTextSize": "20px", + "chartTextWeight": "bold", + "chartFontFamily": "Courier New", + "chartShadowColor": "#222222", + "chartBoxShadow": "2px 2px 2px" + }, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> + </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/HillChart.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/HillChart.tsx index f7fd469514..a0038a53e4 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/HillChart.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ChartsComp/HillChart.tsx @@ -6,6 +6,8 @@ import ExampleGroup from "../../common/ExampleGroup"; const ChartCompWithDefault = uiCompRegistry["hillchart"].comp; +const data = "[\n {\n \"id\": 1,\n \"color\": \"gray\",\n \"description\": \"Validation: Sales and Marketing Strategy\",\n \"x\": 15,\n \"size\": 15\n },\n {\n \"id\": 2,\n \"color\": \"maroon\",\n \"description\": \"Improvement & Renewals\",\n \"x\": 80,\n \"size\": 10\n },\n {\n \"id\": 6,\n \"color\": \"maroon\",\n \"description\": \"Track & Measurement\",\n \"x\": 70,\n \"size\": 10\n },\n {\n \"id\": 3,\n \"color\": \"maroon\",\n \"description\": \"Salesforce Integration\",\n \"x\": 25,\n \"size\": 10\n },\n {\n \"id\": 4,\n \"color\": \"cyan\",\n \"description\": \"Marketing Tools integration\",\n \"x\": 35,\n \"size\": 10\n },\n {\n \"id\": 5,\n \"color\": \"yellow\",\n \"description\": \"Execution\",\n \"x\": 50,\n \"size\": 20\n }\n]"; + export default function HillChartExample() { return ( <> @@ -21,6 +23,75 @@ export default function HillChartExample() { }} compFactory={ChartCompWithDefault} /> + <Example + title="Hill Chart with Custom Data" + hideSettings={true} + width={700} + config={{ + data: data, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Hill Chart Component." + > + <Example + title="Background Color" + hideSettings={true} + width={700} + config={{ + data: data, + styles: { + "backgroundColor": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Border Properties : Color, Width & Radius" + hideSettings={true} + width={700} + config={{ + data: data, + styles: { + "border": "#053EFF", + "radius": "40px", + "borderWidth": "3px", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Margin & Padding" + hideSettings={true} + width={700} + config={{ + data: data, + styles: { + "border": "#053EFF", + "radius": "40px", + "borderWidth": "3px", + "margin": "10px", + "padding": "25px", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Text Size" + hideSettings={true} + width={700} + config={{ + data: data, + styles: { + "textSize": "30px", + }, + }} + compFactory={ChartCompWithDefault} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/CollapsibleContainer.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/CollapsibleContainer.tsx index f7fb4d23c8..1e12ad8423 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/CollapsibleContainer.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/CollapsibleContainer.tsx @@ -421,17 +421,3038 @@ const container = { export default function CollapsibleContainerExample() { return ( <> + <ExampleGroup title={trans("componentDoc.basicUsage")} description="The Following Examples Show the Basic Usage of the Collapsiable Container Component." > <Example - title="Default Container" + title="Default Collapsible Container" + hideSettings={true} + height={500} + width={1000} + config={{ + }} + compFactory={ContainerComp} + /> + <Example + title="Custom Collapsible Container" + hideSettings={true} + height={500} + width={1000} + config={{ + container: container, + }} + compFactory={ContainerComp} + /> + <Example + title="Hiding Collapsible Container" + hideSettings={true} + height={500} + width={1000} + config={{ + container: container, + hidden: true, + }} + compFactory={ContainerComp} + /> + <Example + title="Disabling Collapsible Container" hideSettings={true} height={500} width={1000} config={{ container: container, + disabled: true, + }} + compFactory={ContainerComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Layout Options" + description="The Following Examples Show the different Layout Options of the Collapsiable Container Component." + > + <Example + title="Show Header - False" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": false, + "showBody": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#D7D9E0", + "background": "#FFFFFF", + "radius": "4px", + "borderWidth": "1px", + "borderStyle": "solid", + "margin": "3px", + "padding": "3px" + }, + "appliedThemeId": "default-theme-id" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Show Body - False" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": true, + "showBody": false, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#D7D9E0", + "background": "#FFFFFF", + "radius": "4px", + "borderWidth": "1px", + "borderStyle": "solid", + "margin": "3px", + "padding": "3px" + }, + "appliedThemeId": "default-theme-id" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Show Footer - True" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#D7D9E0", + "background": "#FFFFFF", + "radius": "4px", + "borderWidth": "1px", + "borderStyle": "solid", + "margin": "3px", + "padding": "3px" + }, + "appliedThemeId": "default-theme-id" + }, + }} + compFactory={ContainerComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling Properties of the Collapsiable Container Component." + > + <Example + title="Overall Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + "padding": "15px" + }, + "appliedThemeId": "default-theme-id" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Header Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + "padding": "15px" + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + "appliedThemeId": "default-theme-id" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Body Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + "bodyStyle": { + "containerBodyPadding": "20px", + "background": "#F2DB0A" + }, + "appliedThemeId": "default-theme-id" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Footer Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "fedaa62": { + "i": "fedaa62", + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "5661db3a": { + "i": "5661db3a", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "fedaa62": { + "compType": "text", + "comp": { + "text": "## Personal Details", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "left", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0", + "lineHeight": "18px", + "links": "#3377FF" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "text6" + }, + "5661db3a": { + "compType": "toggleButton", + "comp": { + "value": "true", + "showText": false, + "trueText": "Hide", + "falseText": "Show", + "trueIcon": "/icon:solid/AngleUp", + "falseIcon": "/icon:solid/AngleDown", + "iconPosition": "right", + "alignment": "right", + "style": { + "background": "#F5F5F6", + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "lineHeight": "18px" + }, + "showBorder": false, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "toggleButton3" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "c93dc520": { + "i": "c93dc520", + "h": 7, + "w": 10, + "x": 0, + "y": 0, + "pos": 0 + }, + "54dd6cc": { + "i": "54dd6cc", + "h": 10, + "w": 10, + "x": 14, + "y": 0, + "pos": 5 + }, + "aa36926a": { + "i": "aa36926a", + "h": 7, + "w": 10, + "x": 0, + "y": 7, + "pos": 1 + }, + "fc179ca5": { + "i": "fc179ca5", + "h": 7, + "w": 10, + "x": 14, + "y": 14, + "pos": 4 + }, + "99d1503e": { + "i": "99d1503e", + "h": 7, + "w": 10, + "x": 0, + "y": 14, + "pos": 6 + } + }, + "items": { + "c93dc520": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Full Name", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Full name", + "required": true, + "validationType": "Text", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/file-lines", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input1" + }, + "aa36926a": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Email Address", + "required": true, + "validationType": "Email", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "prefixIcon": "/icon:solid/inbox", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "text": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "input2" + }, + "54dd6cc": { + "compType": "radio", + "comp": { + "defaultValue": "1", + "value": "", + "label": { + "text": "Gender", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "value": "1", + "label": "Male" + }, + { + "value": "2", + "label": "Female" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px", + "accent": "#3377FF" + }, + "layout": "horizontal", + "inputFieldStyle": { + "margin": "3px", + "padding": "3px", + "staticText": "#222222", + "textSize": "14px", + "borderStyle": "solid", + "borderWidth": "1px", + "checkedBackground": "#3377FF", + "uncheckedBorder": "#D7D9E0", + "checkedBorder": "#3377FF" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "radio1" + }, + "fc179ca5": { + "compType": "date", + "comp": { + "defaultValue": "", + "value": "", + "userTimeZone": "Europe/Madrid", + "label": { + "text": "DOB", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "placeholder": "Select Date", + "inputFormat": "YYYY-MM-DD", + "style": { + "background": "#00000000", + "border": "#D7D9E0", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "radius": "4px", + "borderWidth": "0px", + "opacity": "1" + }, + "labelStyle": { + "margin": "3px", + "padding": "3px", + "label": "#222222", + "textSize": "14px", + "border": "#D7D9E0", + "borderStyle": "solid", + "borderWidth": "0px" + }, + "suffixIcon": "/icon:regular/calendar", + "minDate": "1960-01-01", + "maxDate": "2010-12-31", + "inputFieldStyle": { + "border": "#D7D9E0", + "radius": "4px", + "text": "#222222", + "margin": "3px", + "padding": "3px", + "borderStyle": "solid", + "borderWidth": "1px", + "accent": "#3377FF" + }, + "timeZone": "Europe/Madrid", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "date1" + }, + "99d1503e": { + "compType": "numberInput", + "comp": { + "defaultValue": "", + "value": "", + "placeholder": "+449827222541", + "label": { + "text": "Phone #", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "formatter": "standard", + "step": "", + "controls": false, + "thousandsSeparator": false, + "prefixText": "", + "preventStyleOverwriting": false, + "appliedThemeId": "default-theme-id", + "version": "latest" + }, + "name": "numberInput1" + } + } + } + } + }, + "footer": { + "layout": {} + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + "bodyStyle": { + "containerBodyPadding": "20px", + "background": "#F2DB0A" + }, + "footerStyle": { + "containerFooterPadding": "20px", + "footerBackground": "#EA7B7B" + }, + "appliedThemeId": "default-theme-id" + }, }} compFactory={ContainerComp} /> diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ColumnLayout.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ColumnLayout.tsx index b86f4ce3b8..0abac19361 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ColumnLayout.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ColumnLayout.tsx @@ -1140,6 +1140,1025 @@ export default function ColumnLayoutExample() { compFactory={ColumnLayoutComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling Properties of the Column Layout Component." + > + <Example + title="Style" + hideSettings={true} + width={1000} + config={{ + containers: { + "0": { + "layout": { + "164dcb77": { + "i": "164dcb77", + "h": 8, + "w": 19, + "x": 3, + "y": 4, + "pos": 0 + } + }, + "items": { + "164dcb77": { + "compType": "text", + "comp": { + "text": "### Row1, Column1", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "1": { + "layout": { + "6e4f0687": { + "i": "6e4f0687", + "h": 6, + "w": 24, + "x": 0, + "y": 5, + "pos": 0 + } + }, + "items": { + "6e4f0687": { + "compType": "text", + "comp": { + "text": "### Row1, Column2", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text3" + } + } + }, + "2": { + "layout": { + "b47baba7": { + "i": "b47baba7", + "h": 10, + "w": 18, + "x": 5, + "y": 4, + "pos": 0 + } + }, + "items": { + "b47baba7": { + "compType": "text", + "comp": { + "text": "### Row1, Column3", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "3": { + "layout": { + "ce02a8ee": { + "i": "ce02a8ee", + "h": 8, + "w": 17, + "x": 2, + "y": 16, + "pos": 0 + } + }, + "items": { + "ce02a8ee": { + "compType": "text", + "comp": { + "text": "### Row2, Column1", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text4" + } + } + }, + "4": { + "layout": { + "7ff66f36": { + "i": "7ff66f36", + "h": 6, + "w": 24, + "x": 0, + "y": 16, + "pos": 0 + } + }, + "items": { + "7ff66f36": { + "compType": "text", + "comp": { + "text": "### Row2, Column2", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text5" + } + } + }, + "5": { + "layout": { + "8e25033d": { + "i": "8e25033d", + "h": 8, + "w": 19, + "x": 3, + "y": 16, + "pos": 0 + } + }, + "items": { + "8e25033d": { + "compType": "text", + "comp": { + "text": "### Row2, Column3", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text6" + } + } + }, + "6": { + "layout": { + "e92230c": { + "i": "e92230c", + "h": 8, + "w": 19, + "x": 2, + "y": 3, + "pos": 0 + } + }, + "items": { + "e92230c": { + "compType": "text", + "comp": { + "text": "### Row3, Column1", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text7" + } + } + }, + "7": { + "layout": { + "5e09b262": { + "i": "5e09b262", + "h": 6, + "w": 24, + "x": 0, + "y": 4, + "pos": 0 + } + }, + "items": { + "5e09b262": { + "compType": "text", + "comp": { + "text": "### Row3, Column2", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text8" + } + } + }, + "8": { + "layout": { + "1bc7c61f": { + "i": "1bc7c61f", + "h": 8, + "w": 20, + "x": 1, + "y": 2, + "pos": 0 + } + }, + "items": { + "1bc7c61f": { + "compType": "text", + "comp": { + "text": "### Row3, Column3", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text9" + } + } + } + }, + columns: { + "manual": [ + { + "id": 0, + "label": "Column1", + "key": "Column1", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 1, + "label": "Column2", + "key": "Column2", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 2, + "label": "Add Column1", + "key": "Add Column1", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 3, + "label": "Add Column2", + "key": "Add Column2", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 4, + "label": "Add Column3", + "key": "Add Column3", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 5, + "label": "Add Column4", + "key": "Add Column4", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 6, + "label": "Add Column5", + "key": "Add Column5", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 7, + "label": "Add Column6", + "key": "Add Column6", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 8, + "label": "Add Column7", + "key": "Add Column7", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + } + ] + }, + templateRows: "1fr 3fr 1fr", + templateColumns: "1fr 3fr 1fr", + style: { + "border": "#EBFF04", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "5px", + "margin": "10px", + "padding": "20px", + }, + matchColumnsHeight: true, + }} + compFactory={ColumnLayoutComp} + /> + <Example + title="Style" + hideSettings={true} + width={1000} + config={{ + containers: { + "0": { + "layout": { + "164dcb77": { + "i": "164dcb77", + "h": 8, + "w": 19, + "x": 3, + "y": 4, + "pos": 0 + } + }, + "items": { + "164dcb77": { + "compType": "text", + "comp": { + "text": "### Row1, Column1", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "1": { + "layout": { + "6e4f0687": { + "i": "6e4f0687", + "h": 6, + "w": 24, + "x": 0, + "y": 5, + "pos": 0 + } + }, + "items": { + "6e4f0687": { + "compType": "text", + "comp": { + "text": "### Row1, Column2", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text3" + } + } + }, + "2": { + "layout": { + "b47baba7": { + "i": "b47baba7", + "h": 10, + "w": 18, + "x": 5, + "y": 4, + "pos": 0 + } + }, + "items": { + "b47baba7": { + "compType": "text", + "comp": { + "text": "### Row1, Column3", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "3": { + "layout": { + "ce02a8ee": { + "i": "ce02a8ee", + "h": 8, + "w": 17, + "x": 2, + "y": 16, + "pos": 0 + } + }, + "items": { + "ce02a8ee": { + "compType": "text", + "comp": { + "text": "### Row2, Column1", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text4" + } + } + }, + "4": { + "layout": { + "7ff66f36": { + "i": "7ff66f36", + "h": 6, + "w": 24, + "x": 0, + "y": 16, + "pos": 0 + } + }, + "items": { + "7ff66f36": { + "compType": "text", + "comp": { + "text": "### Row2, Column2", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text5" + } + } + }, + "5": { + "layout": { + "8e25033d": { + "i": "8e25033d", + "h": 8, + "w": 19, + "x": 3, + "y": 16, + "pos": 0 + } + }, + "items": { + "8e25033d": { + "compType": "text", + "comp": { + "text": "### Row2, Column3", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text6" + } + } + }, + "6": { + "layout": { + "e92230c": { + "i": "e92230c", + "h": 8, + "w": 19, + "x": 2, + "y": 3, + "pos": 0 + } + }, + "items": { + "e92230c": { + "compType": "text", + "comp": { + "text": "### Row3, Column1", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text7" + } + } + }, + "7": { + "layout": { + "5e09b262": { + "i": "5e09b262", + "h": 6, + "w": 24, + "x": 0, + "y": 4, + "pos": 0 + } + }, + "items": { + "5e09b262": { + "compType": "text", + "comp": { + "text": "### Row3, Column2", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text8" + } + } + }, + "8": { + "layout": { + "1bc7c61f": { + "i": "1bc7c61f", + "h": 8, + "w": 20, + "x": 1, + "y": 2, + "pos": 0 + } + }, + "items": { + "1bc7c61f": { + "compType": "text", + "comp": { + "text": "### Row3, Column3", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text9" + } + } + } + }, + columns: { + "manual": [ + { + "id": 0, + "label": "Column1", + "key": "Column1", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 1, + "label": "Column2", + "key": "Column2", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 2, + "label": "Add Column1", + "key": "Add Column1", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 3, + "label": "Add Column2", + "key": "Add Column2", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 4, + "label": "Add Column3", + "key": "Add Column3", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 5, + "label": "Add Column4", + "key": "Add Column4", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 6, + "label": "Add Column5", + "key": "Add Column5", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 7, + "label": "Add Column6", + "key": "Add Column6", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + }, + { + "id": 8, + "label": "Add Column7", + "key": "Add Column7", + "minWidth": "", + "background": "", + "backgroundImage": "", + "border": "", + "radius": "", + "margin": "", + "padding": "" + } + ] + }, + templateRows: "1fr 3fr 1fr", + templateColumns: "1fr 3fr 1fr", + style: { + "border": "#EBFF04", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "5px", + "margin": "10px", + "padding": "20px", + }, + columnStyle: { + "background": "linear-gradient(45deg, #d53369 0%, #daae51 100%)", + "border": "#FFFF07", + "radius": "50px", + "borderWidth": "3px", + "borderStyle": "solid", + "margin": "10px", + "padding": "15px", + }, + matchColumnsHeight: true, + }} + compFactory={ColumnLayoutComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/Container.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/Container.tsx index cc90bdf6e1..40736a95a6 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/Container.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/Container.tsx @@ -149,6 +149,7 @@ const container={ export default function ContainerExample() { return ( <> + <ExampleGroup title="Basic Usage" description="The Following Examples Show the Basic Usage of the Container Component." @@ -637,7 +638,665 @@ export default function ContainerExample() { }} compFactory={ContainerComp} /> - </ExampleGroup> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling Properties of the Container Component." + > + <Example + title="Overall Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "a6083c0a": { + "i": "a6083c0a", + "h": 5, + "w": 24, + "x": 0, + "y": 0 + } + }, + "items": { + "a6083c0a": { + "compType": "text", + "comp": { + "text": "### Welcome Back!", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formTitle1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "a6f7c0e4": { + "i": "a6f7c0e4", + "h": 7, + "w": 14, + "x": 0, + "y": 0, + "pos": 0 + }, + "c5b32ee6": { + "i": "c5b32ee6", + "h": 7, + "w": 14, + "x": 0, + "y": 7, + "pos": 1 + } + }, + "items": { + "a6f7c0e4": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Email", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "input1" + }, + "c5b32ee6": { + "compType": "password", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Password", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Regex", + "visibilityToggle": true, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "password1" + } + } + } + } + }, + "footer": { + "layout": { + "95ccf34e": { + "i": "95ccf34e", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "95ccf34e": { + "compType": "button", + "comp": { + "text": "Login", + "type": "submit", + "form": "form1", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formButton1" + } + } + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + "padding": "15px" + }, + "appliedThemeId": "" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Header Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "a6083c0a": { + "i": "a6083c0a", + "h": 5, + "w": 24, + "x": 0, + "y": 0 + } + }, + "items": { + "a6083c0a": { + "compType": "text", + "comp": { + "text": "### Welcome Back!", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formTitle1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "a6f7c0e4": { + "i": "a6f7c0e4", + "h": 7, + "w": 14, + "x": 0, + "y": 0, + "pos": 0 + }, + "c5b32ee6": { + "i": "c5b32ee6", + "h": 7, + "w": 14, + "x": 0, + "y": 7, + "pos": 1 + } + }, + "items": { + "a6f7c0e4": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Email", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "input1" + }, + "c5b32ee6": { + "compType": "password", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Password", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Regex", + "visibilityToggle": true, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "password1" + } + } + } + } + }, + "footer": { + "layout": { + "95ccf34e": { + "i": "95ccf34e", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "95ccf34e": { + "compType": "button", + "comp": { + "text": "Login", + "type": "submit", + "form": "form1", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formButton1" + } + } + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + "padding": "15px" + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + "appliedThemeId": "" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Body Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "a6083c0a": { + "i": "a6083c0a", + "h": 5, + "w": 24, + "x": 0, + "y": 0 + } + }, + "items": { + "a6083c0a": { + "compType": "text", + "comp": { + "text": "### Welcome Back!", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formTitle1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "a6f7c0e4": { + "i": "a6f7c0e4", + "h": 7, + "w": 14, + "x": 0, + "y": 0, + "pos": 0 + }, + "c5b32ee6": { + "i": "c5b32ee6", + "h": 7, + "w": 14, + "x": 0, + "y": 7, + "pos": 1 + } + }, + "items": { + "a6f7c0e4": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Email", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "input1" + }, + "c5b32ee6": { + "compType": "password", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Password", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Regex", + "visibilityToggle": true, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "password1" + } + } + } + } + }, + "footer": { + "layout": { + "95ccf34e": { + "i": "95ccf34e", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "95ccf34e": { + "compType": "button", + "comp": { + "text": "Login", + "type": "submit", + "form": "form1", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formButton1" + } + } + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + "padding": "15px", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50", + }, + "bodyStyle": { + "containerBodyPadding": "20px", + "background": "#F2DB0A", + }, + "appliedThemeId": "" + }, + }} + compFactory={ContainerComp} + /> + <Example + title="Footer Styling" + hideSettings={true} + height={500} + width={1000} + config={{ + container: { + "header": { + "layout": { + "a6083c0a": { + "i": "a6083c0a", + "h": 5, + "w": 24, + "x": 0, + "y": 0 + } + }, + "items": { + "a6083c0a": { + "compType": "text", + "comp": { + "text": "### Welcome Back!", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formTitle1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "a6f7c0e4": { + "i": "a6f7c0e4", + "h": 7, + "w": 14, + "x": 0, + "y": 0, + "pos": 0 + }, + "c5b32ee6": { + "i": "c5b32ee6", + "h": 7, + "w": 14, + "x": 0, + "y": 7, + "pos": 1 + } + }, + "items": { + "a6f7c0e4": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Email", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "input1" + }, + "c5b32ee6": { + "compType": "password", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Password", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Regex", + "visibilityToggle": true, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "password1" + } + } + } + } + }, + "footer": { + "layout": { + "95ccf34e": { + "i": "95ccf34e", + "h": 5, + "w": 10, + "x": 14, + "y": 0 + } + }, + "items": { + "95ccf34e": { + "compType": "button", + "comp": { + "text": "Login", + "type": "submit", + "form": "form1", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formButton1" + } + } + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#5589F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "margin": "5px", + "padding": "15px", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50", + }, + "bodyStyle": { + "containerBodyPadding": "20px", + "background": "#F2DB0A", + }, + "footerStyle": { + "containerFooterPadding": "20px", + "footerBackground": "#EA7B7B" + }, + "appliedThemeId": "" + }, + }} + compFactory={ContainerComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/PageLayout.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/PageLayout.tsx index a80ce5f572..3c1d84e380 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/PageLayout.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/PageLayout.tsx @@ -619,7 +619,7 @@ const container={ "siderScrollbars": false, "contentScrollbars": false, "mainScrollbars": false, - "appliedThemeId": "" + "appliedThemeId": "", }; export default function PageLayoutExample() { @@ -659,7 +659,7 @@ export default function PageLayoutExample() { <ExampleGroup title="Layout" - description="The Following Examples Show the Layout options on Component." + description="The Following Examples Show the Layout options on the Page Layout Component." > <Example title="Hiding Page Layout Header" @@ -5049,6 +5049,3280 @@ export default function PageLayoutExample() { compFactory={PageLayoutComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Page Layout Component." + > + <Example + title="Style" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "f7820dbc": { + "i": "f7820dbc", + "h": 6, + "w": 24, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "f7820dbc": { + "compType": "text", + "comp": { + "text": "### Page Layout Header", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "sider": { + "layout": { + "a9d16086": { + "i": "a9d16086", + "h": 6, + "w": 22, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "a9d16086": { + "compType": "dropdown", + "comp": { + "text": "Menu", + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Option 1" + }, + { + "label": "Option 2" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "dropdown1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "163bc2f3": { + "i": "163bc2f3", + "h": 45, + "w": 21, + "x": 3, + "y": 0, + "pos": 0 + } + }, + "items": { + "163bc2f3": { + "compType": "table", + "comp": { + "showRowGridBorder": true, + "showHRowGridBorder": true, + "autoHeight": "auto", + "data": "[\n {\n \"id\": 1,\n \"name\": \"Reagen Gilberthorpe\",\n \"date\": \"7/5/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 2,\n \"name\": \"Haroun Lortzing\",\n \"date\": \"11/6/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 3,\n \"name\": \"Garret Kilmaster\",\n \"date\": \"11/14/2021\",\n \"department\": \"Research and Development\"\n },\n {\n \"id\": 4,\n \"name\": \"Israel Harrowsmith\",\n \"date\": \"4/3/2022\",\n \"department\": \"Training\"\n },\n {\n \"id\": 5,\n \"name\": \"Loren O'Lagen\",\n \"date\": \"9/10/2022\",\n \"department\": \"Services\"\n },\n {\n \"id\": 6,\n \"name\": \"Wallis Hothersall\",\n \"date\": \"4/18/2022\",\n \"department\": \"Accounting\"\n },\n {\n \"id\": 7,\n \"name\": \"Kaia Biskup\",\n \"date\": \"3/4/2022\",\n \"department\": \"Sales\"\n },\n {\n \"id\": 8,\n \"name\": \"Travers Saterweyte\",\n \"date\": \"1/9/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 9,\n \"name\": \"Mikey Niemetz\",\n \"date\": \"1/4/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 10,\n \"name\": \"Mano Meckiff\",\n \"date\": \"2/19/2022\",\n \"department\": \"Research and Development\"\n }\n]", + "showDataLoadSpinner": true, + "columns": [ + { + "title": "ID", + "showTitle": true, + "isCustom": false, + "dataIndex": "id", + "width": "55", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Name", + "showTitle": true, + "isCustom": false, + "dataIndex": "name", + "width": "200", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Date", + "showTitle": true, + "isCustom": false, + "dataIndex": "date", + "width": "110", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Department", + "showTitle": true, + "isCustom": false, + "dataIndex": "department", + "width": "250", + "autoWidth": "fixed", + "render": { + "compType": "tag", + "comp": { + "text": "{{currentCell}}", + "tagColors": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Tag1", + "icon": "/icon:solid/tag", + "color": "#f50" + }, + { + "label": "Tag2", + "icon": "/icon:solid/tag", + "color": "#2db7f5" + } + ] + }, + "mapData": { + "data": "[]", + "mapData": { + "color": "" + } + } + } + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + } + ], + "size": "middle", + "selection": { + "mode": "single" + }, + "pagination": { + "changeablePageSize": null, + "pageSizeOptions": "[5, 10, 20, 50]" + }, + "sort": [], + "toolbar": { + "showRefresh": true, + "showDownload": true, + "showFilter": true, + "position": "below", + "columnSeparator": ",", + "showUpdateButtons": true + }, + "summaryRows": "1", + "rowAutoHeight": "auto", + "tableAutoHeight": "auto", + "expansion": { + "slot": { + "container": { + "layout": {} + } + } + }, + "editModeClicks": "single", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "table1" + } + } + } + } + }, + "footer": { + "layout": { + "3a74e36e": { + "i": "3a74e36e", + "h": 6, + "w": 24, + "x": 0, + "y": 2, + "pos": 0 + } + }, + "items": { + "3a74e36e": { + "compType": "text", + "comp": { + "text": "### Page Layout Footer", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#fff" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "showHeader": true, + "showSider": true, + "innerSider": true, + "siderCollapsible": true, + "siderCollapsed": true, + "siderRight": false, + "siderWidth": "20%", + "siderCollapsedWidth": "0", + "showFooter": true, + "horizontalGridCells": 24, + "autoHeight": "auto", + "siderScrollbars": false, + "contentScrollbars": false, + "mainScrollbars": false, + "appliedThemeId": "", + "style": { + "border": "#6D83F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "10px" + }, + }, + }} + compFactory={PageLayoutComp} + /> + <Example + title="Header Styling" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "f7820dbc": { + "i": "f7820dbc", + "h": 6, + "w": 24, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "f7820dbc": { + "compType": "text", + "comp": { + "text": "### Page Layout Header", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "sider": { + "layout": { + "a9d16086": { + "i": "a9d16086", + "h": 6, + "w": 22, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "a9d16086": { + "compType": "dropdown", + "comp": { + "text": "Menu", + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Option 1" + }, + { + "label": "Option 2" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "dropdown1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "163bc2f3": { + "i": "163bc2f3", + "h": 45, + "w": 21, + "x": 3, + "y": 0, + "pos": 0 + } + }, + "items": { + "163bc2f3": { + "compType": "table", + "comp": { + "showRowGridBorder": true, + "showHRowGridBorder": true, + "autoHeight": "auto", + "data": "[\n {\n \"id\": 1,\n \"name\": \"Reagen Gilberthorpe\",\n \"date\": \"7/5/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 2,\n \"name\": \"Haroun Lortzing\",\n \"date\": \"11/6/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 3,\n \"name\": \"Garret Kilmaster\",\n \"date\": \"11/14/2021\",\n \"department\": \"Research and Development\"\n },\n {\n \"id\": 4,\n \"name\": \"Israel Harrowsmith\",\n \"date\": \"4/3/2022\",\n \"department\": \"Training\"\n },\n {\n \"id\": 5,\n \"name\": \"Loren O'Lagen\",\n \"date\": \"9/10/2022\",\n \"department\": \"Services\"\n },\n {\n \"id\": 6,\n \"name\": \"Wallis Hothersall\",\n \"date\": \"4/18/2022\",\n \"department\": \"Accounting\"\n },\n {\n \"id\": 7,\n \"name\": \"Kaia Biskup\",\n \"date\": \"3/4/2022\",\n \"department\": \"Sales\"\n },\n {\n \"id\": 8,\n \"name\": \"Travers Saterweyte\",\n \"date\": \"1/9/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 9,\n \"name\": \"Mikey Niemetz\",\n \"date\": \"1/4/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 10,\n \"name\": \"Mano Meckiff\",\n \"date\": \"2/19/2022\",\n \"department\": \"Research and Development\"\n }\n]", + "showDataLoadSpinner": true, + "columns": [ + { + "title": "ID", + "showTitle": true, + "isCustom": false, + "dataIndex": "id", + "width": "55", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Name", + "showTitle": true, + "isCustom": false, + "dataIndex": "name", + "width": "200", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Date", + "showTitle": true, + "isCustom": false, + "dataIndex": "date", + "width": "110", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Department", + "showTitle": true, + "isCustom": false, + "dataIndex": "department", + "width": "250", + "autoWidth": "fixed", + "render": { + "compType": "tag", + "comp": { + "text": "{{currentCell}}", + "tagColors": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Tag1", + "icon": "/icon:solid/tag", + "color": "#f50" + }, + { + "label": "Tag2", + "icon": "/icon:solid/tag", + "color": "#2db7f5" + } + ] + }, + "mapData": { + "data": "[]", + "mapData": { + "color": "" + } + } + } + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + } + ], + "size": "middle", + "selection": { + "mode": "single" + }, + "pagination": { + "changeablePageSize": null, + "pageSizeOptions": "[5, 10, 20, 50]" + }, + "sort": [], + "toolbar": { + "showRefresh": true, + "showDownload": true, + "showFilter": true, + "position": "below", + "columnSeparator": ",", + "showUpdateButtons": true + }, + "summaryRows": "1", + "rowAutoHeight": "auto", + "tableAutoHeight": "auto", + "expansion": { + "slot": { + "container": { + "layout": {} + } + } + }, + "editModeClicks": "single", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "table1" + } + } + } + } + }, + "footer": { + "layout": { + "3a74e36e": { + "i": "3a74e36e", + "h": 6, + "w": 24, + "x": 0, + "y": 2, + "pos": 0 + } + }, + "items": { + "3a74e36e": { + "compType": "text", + "comp": { + "text": "### Page Layout Footer", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#fff" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "showHeader": true, + "showSider": true, + "innerSider": true, + "siderCollapsible": true, + "siderCollapsed": true, + "siderRight": false, + "siderWidth": "20%", + "siderCollapsedWidth": "0", + "showFooter": true, + "horizontalGridCells": 24, + "autoHeight": "auto", + "siderScrollbars": false, + "contentScrollbars": false, + "mainScrollbars": false, + "appliedThemeId": "", + "style": { + "border": "#6D83F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "10px" + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + }, + }} + compFactory={PageLayoutComp} + /> + <Example + title="Sider Styling" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "f7820dbc": { + "i": "f7820dbc", + "h": 6, + "w": 24, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "f7820dbc": { + "compType": "text", + "comp": { + "text": "### Page Layout Header", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "sider": { + "layout": { + "a9d16086": { + "i": "a9d16086", + "h": 6, + "w": 22, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "a9d16086": { + "compType": "dropdown", + "comp": { + "text": "Menu", + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Option 1" + }, + { + "label": "Option 2" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "dropdown1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "163bc2f3": { + "i": "163bc2f3", + "h": 45, + "w": 21, + "x": 3, + "y": 0, + "pos": 0 + } + }, + "items": { + "163bc2f3": { + "compType": "table", + "comp": { + "showRowGridBorder": true, + "showHRowGridBorder": true, + "autoHeight": "auto", + "data": "[\n {\n \"id\": 1,\n \"name\": \"Reagen Gilberthorpe\",\n \"date\": \"7/5/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 2,\n \"name\": \"Haroun Lortzing\",\n \"date\": \"11/6/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 3,\n \"name\": \"Garret Kilmaster\",\n \"date\": \"11/14/2021\",\n \"department\": \"Research and Development\"\n },\n {\n \"id\": 4,\n \"name\": \"Israel Harrowsmith\",\n \"date\": \"4/3/2022\",\n \"department\": \"Training\"\n },\n {\n \"id\": 5,\n \"name\": \"Loren O'Lagen\",\n \"date\": \"9/10/2022\",\n \"department\": \"Services\"\n },\n {\n \"id\": 6,\n \"name\": \"Wallis Hothersall\",\n \"date\": \"4/18/2022\",\n \"department\": \"Accounting\"\n },\n {\n \"id\": 7,\n \"name\": \"Kaia Biskup\",\n \"date\": \"3/4/2022\",\n \"department\": \"Sales\"\n },\n {\n \"id\": 8,\n \"name\": \"Travers Saterweyte\",\n \"date\": \"1/9/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 9,\n \"name\": \"Mikey Niemetz\",\n \"date\": \"1/4/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 10,\n \"name\": \"Mano Meckiff\",\n \"date\": \"2/19/2022\",\n \"department\": \"Research and Development\"\n }\n]", + "showDataLoadSpinner": true, + "columns": [ + { + "title": "ID", + "showTitle": true, + "isCustom": false, + "dataIndex": "id", + "width": "55", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Name", + "showTitle": true, + "isCustom": false, + "dataIndex": "name", + "width": "200", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Date", + "showTitle": true, + "isCustom": false, + "dataIndex": "date", + "width": "110", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Department", + "showTitle": true, + "isCustom": false, + "dataIndex": "department", + "width": "250", + "autoWidth": "fixed", + "render": { + "compType": "tag", + "comp": { + "text": "{{currentCell}}", + "tagColors": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Tag1", + "icon": "/icon:solid/tag", + "color": "#f50" + }, + { + "label": "Tag2", + "icon": "/icon:solid/tag", + "color": "#2db7f5" + } + ] + }, + "mapData": { + "data": "[]", + "mapData": { + "color": "" + } + } + } + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + } + ], + "size": "middle", + "selection": { + "mode": "single" + }, + "pagination": { + "changeablePageSize": null, + "pageSizeOptions": "[5, 10, 20, 50]" + }, + "sort": [], + "toolbar": { + "showRefresh": true, + "showDownload": true, + "showFilter": true, + "position": "below", + "columnSeparator": ",", + "showUpdateButtons": true + }, + "summaryRows": "1", + "rowAutoHeight": "auto", + "tableAutoHeight": "auto", + "expansion": { + "slot": { + "container": { + "layout": {} + } + } + }, + "editModeClicks": "single", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "table1" + } + } + } + } + }, + "footer": { + "layout": { + "3a74e36e": { + "i": "3a74e36e", + "h": 6, + "w": 24, + "x": 0, + "y": 2, + "pos": 0 + } + }, + "items": { + "3a74e36e": { + "compType": "text", + "comp": { + "text": "### Page Layout Footer", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#fff" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "showHeader": true, + "showSider": true, + "innerSider": true, + "siderCollapsible": true, + "siderCollapsed": true, + "siderRight": false, + "siderWidth": "20%", + "siderCollapsedWidth": "0", + "showFooter": true, + "horizontalGridCells": 24, + "autoHeight": "auto", + "siderScrollbars": false, + "contentScrollbars": false, + "mainScrollbars": false, + "appliedThemeId": "", + "style": { + "border": "#6D83F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "10px" + }, + "siderStyle": { + "containerSiderPadding": "15px", + "siderBackground": "#5589F2", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + }, + }} + compFactory={PageLayoutComp} + /> + <Example + title="Body Styling" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "f7820dbc": { + "i": "f7820dbc", + "h": 6, + "w": 24, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "f7820dbc": { + "compType": "text", + "comp": { + "text": "### Page Layout Header", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "sider": { + "layout": { + "a9d16086": { + "i": "a9d16086", + "h": 6, + "w": 22, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "a9d16086": { + "compType": "dropdown", + "comp": { + "text": "Menu", + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Option 1" + }, + { + "label": "Option 2" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "dropdown1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "163bc2f3": { + "i": "163bc2f3", + "h": 45, + "w": 21, + "x": 3, + "y": 0, + "pos": 0 + } + }, + "items": { + "163bc2f3": { + "compType": "table", + "comp": { + "showRowGridBorder": true, + "showHRowGridBorder": true, + "autoHeight": "auto", + "data": "[\n {\n \"id\": 1,\n \"name\": \"Reagen Gilberthorpe\",\n \"date\": \"7/5/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 2,\n \"name\": \"Haroun Lortzing\",\n \"date\": \"11/6/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 3,\n \"name\": \"Garret Kilmaster\",\n \"date\": \"11/14/2021\",\n \"department\": \"Research and Development\"\n },\n {\n \"id\": 4,\n \"name\": \"Israel Harrowsmith\",\n \"date\": \"4/3/2022\",\n \"department\": \"Training\"\n },\n {\n \"id\": 5,\n \"name\": \"Loren O'Lagen\",\n \"date\": \"9/10/2022\",\n \"department\": \"Services\"\n },\n {\n \"id\": 6,\n \"name\": \"Wallis Hothersall\",\n \"date\": \"4/18/2022\",\n \"department\": \"Accounting\"\n },\n {\n \"id\": 7,\n \"name\": \"Kaia Biskup\",\n \"date\": \"3/4/2022\",\n \"department\": \"Sales\"\n },\n {\n \"id\": 8,\n \"name\": \"Travers Saterweyte\",\n \"date\": \"1/9/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 9,\n \"name\": \"Mikey Niemetz\",\n \"date\": \"1/4/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 10,\n \"name\": \"Mano Meckiff\",\n \"date\": \"2/19/2022\",\n \"department\": \"Research and Development\"\n }\n]", + "showDataLoadSpinner": true, + "columns": [ + { + "title": "ID", + "showTitle": true, + "isCustom": false, + "dataIndex": "id", + "width": "55", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Name", + "showTitle": true, + "isCustom": false, + "dataIndex": "name", + "width": "200", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Date", + "showTitle": true, + "isCustom": false, + "dataIndex": "date", + "width": "110", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Department", + "showTitle": true, + "isCustom": false, + "dataIndex": "department", + "width": "250", + "autoWidth": "fixed", + "render": { + "compType": "tag", + "comp": { + "text": "{{currentCell}}", + "tagColors": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Tag1", + "icon": "/icon:solid/tag", + "color": "#f50" + }, + { + "label": "Tag2", + "icon": "/icon:solid/tag", + "color": "#2db7f5" + } + ] + }, + "mapData": { + "data": "[]", + "mapData": { + "color": "" + } + } + } + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + } + ], + "size": "middle", + "selection": { + "mode": "single" + }, + "pagination": { + "changeablePageSize": null, + "pageSizeOptions": "[5, 10, 20, 50]" + }, + "sort": [], + "toolbar": { + "showRefresh": true, + "showDownload": true, + "showFilter": true, + "position": "below", + "columnSeparator": ",", + "showUpdateButtons": true + }, + "summaryRows": "1", + "rowAutoHeight": "auto", + "tableAutoHeight": "auto", + "expansion": { + "slot": { + "container": { + "layout": {} + } + } + }, + "editModeClicks": "single", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "table1" + } + } + } + } + }, + "footer": { + "layout": { + "3a74e36e": { + "i": "3a74e36e", + "h": 6, + "w": 24, + "x": 0, + "y": 2, + "pos": 0 + } + }, + "items": { + "3a74e36e": { + "compType": "text", + "comp": { + "text": "### Page Layout Footer", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#fff" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "showHeader": true, + "showSider": true, + "innerSider": true, + "siderCollapsible": true, + "siderCollapsed": true, + "siderRight": false, + "siderWidth": "20%", + "siderCollapsedWidth": "0", + "showFooter": true, + "horizontalGridCells": 24, + "autoHeight": "auto", + "siderScrollbars": false, + "contentScrollbars": false, + "mainScrollbars": false, + "appliedThemeId": "", + "style": { + "border": "#6D83F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "10px" + }, + "siderStyle": { + "containerSiderPadding": "15px", + "siderBackground": "#5589F2", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + "bodyStyle":{ + "containerBodyPadding": "20px", + "background": "linear-gradient(45deg, #cfd9df 0%, #e2ebf0 100%)" + }, + }, + }} + compFactory={PageLayoutComp} + /> + + <Example + title="Body Styling" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "f7820dbc": { + "i": "f7820dbc", + "h": 6, + "w": 24, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "f7820dbc": { + "compType": "text", + "comp": { + "text": "### Page Layout Header", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text1" + } + } + }, + "sider": { + "layout": { + "a9d16086": { + "i": "a9d16086", + "h": 6, + "w": 22, + "x": 0, + "y": 0, + "pos": 0 + } + }, + "items": { + "a9d16086": { + "compType": "dropdown", + "comp": { + "text": "Menu", + "options": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Option 1" + }, + { + "label": "Option 2" + } + ] + }, + "mapData": { + "data": "[]" + } + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "dropdown1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "163bc2f3": { + "i": "163bc2f3", + "h": 45, + "w": 21, + "x": 3, + "y": 0, + "pos": 0 + } + }, + "items": { + "163bc2f3": { + "compType": "table", + "comp": { + "showRowGridBorder": true, + "showHRowGridBorder": true, + "autoHeight": "auto", + "data": "[\n {\n \"id\": 1,\n \"name\": \"Reagen Gilberthorpe\",\n \"date\": \"7/5/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 2,\n \"name\": \"Haroun Lortzing\",\n \"date\": \"11/6/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 3,\n \"name\": \"Garret Kilmaster\",\n \"date\": \"11/14/2021\",\n \"department\": \"Research and Development\"\n },\n {\n \"id\": 4,\n \"name\": \"Israel Harrowsmith\",\n \"date\": \"4/3/2022\",\n \"department\": \"Training\"\n },\n {\n \"id\": 5,\n \"name\": \"Loren O'Lagen\",\n \"date\": \"9/10/2022\",\n \"department\": \"Services\"\n },\n {\n \"id\": 6,\n \"name\": \"Wallis Hothersall\",\n \"date\": \"4/18/2022\",\n \"department\": \"Accounting\"\n },\n {\n \"id\": 7,\n \"name\": \"Kaia Biskup\",\n \"date\": \"3/4/2022\",\n \"department\": \"Sales\"\n },\n {\n \"id\": 8,\n \"name\": \"Travers Saterweyte\",\n \"date\": \"1/9/2022\",\n \"department\": \"Human Resources\"\n },\n {\n \"id\": 9,\n \"name\": \"Mikey Niemetz\",\n \"date\": \"1/4/2022\",\n \"department\": \"Marketing\"\n },\n {\n \"id\": 10,\n \"name\": \"Mano Meckiff\",\n \"date\": \"2/19/2022\",\n \"department\": \"Research and Development\"\n }\n]", + "showDataLoadSpinner": true, + "columns": [ + { + "title": "ID", + "showTitle": true, + "isCustom": false, + "dataIndex": "id", + "width": "55", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Name", + "showTitle": true, + "isCustom": false, + "dataIndex": "name", + "width": "200", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Date", + "showTitle": true, + "isCustom": false, + "dataIndex": "date", + "width": "110", + "autoWidth": "fixed", + "render": { + "compType": "text", + "comp": { + "text": "{{currentCell}}" + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + }, + { + "title": "Department", + "showTitle": true, + "isCustom": false, + "dataIndex": "department", + "width": "250", + "autoWidth": "fixed", + "render": { + "compType": "tag", + "comp": { + "text": "{{currentCell}}", + "tagColors": { + "optionType": "manual", + "manual": { + "manual": [ + { + "label": "Tag1", + "icon": "/icon:solid/tag", + "color": "#f50" + }, + { + "label": "Tag2", + "icon": "/icon:solid/tag", + "color": "#2db7f5" + } + ] + }, + "mapData": { + "data": "[]", + "mapData": { + "color": "" + } + } + } + } + }, + "align": "left", + "fixed": "close", + "background": "", + "margin": "", + "text": "", + "border": "", + "borderWidth": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "", + "summaryColumns": [ + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + }, + { + "isCustom": false, + "dataIndex": "", + "render": { + "compType": "text", + "comp": {} + }, + "align": "left", + "background": "", + "margin": "", + "text": "", + "border": "", + "radius": "", + "textSize": "", + "textWeight": "normal", + "fontFamily": "sans-serif", + "fontStyle": "normal", + "textOverflow": "ellipsis", + "linkColor": "#3377ff", + "linkHoverColor": "", + "linkActiveColor": "" + } + ] + } + ], + "size": "middle", + "selection": { + "mode": "single" + }, + "pagination": { + "changeablePageSize": null, + "pageSizeOptions": "[5, 10, 20, 50]" + }, + "sort": [], + "toolbar": { + "showRefresh": true, + "showDownload": true, + "showFilter": true, + "position": "below", + "columnSeparator": ",", + "showUpdateButtons": true + }, + "summaryRows": "1", + "rowAutoHeight": "auto", + "tableAutoHeight": "auto", + "expansion": { + "slot": { + "container": { + "layout": {} + } + } + }, + "editModeClicks": "single", + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "table1" + } + } + } + } + }, + "footer": { + "layout": { + "3a74e36e": { + "i": "3a74e36e", + "h": 6, + "w": 24, + "x": 0, + "y": 2, + "pos": 0 + } + }, + "items": { + "3a74e36e": { + "compType": "text", + "comp": { + "text": "### Page Layout Footer", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "style": { + "background": "#fff" + }, + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "text2" + } + } + }, + "showHeader": true, + "showSider": true, + "innerSider": true, + "siderCollapsible": true, + "siderCollapsed": true, + "siderRight": false, + "siderWidth": "20%", + "siderCollapsedWidth": "0", + "showFooter": true, + "horizontalGridCells": 24, + "autoHeight": "auto", + "siderScrollbars": false, + "contentScrollbars": false, + "mainScrollbars": false, + "appliedThemeId": "", + "style": { + "border": "#6D83F2", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "10px" + }, + "siderStyle": { + "containerSiderPadding": "15px", + "siderBackground": "#5589F2", + }, + "headerStyle": { + "containerHeaderPadding": "20px", + "headerBackground": "#E68E50" + }, + "bodyStyle":{ + "containerBodyPadding": "20px", + "background": "linear-gradient(45deg, #cfd9df 0%, #e2ebf0 100%)" + }, + "footerStyle":{ + "containerFooterPadding": "20px", + "footerBackground": "#E67373" + }, + }, + }} + compFactory={PageLayoutComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different Animation Styles on the Page Layout Component." + > + <Example + title="Bounce Animation" + width={1000} + hideSettings={true} + config={{ + container: container, + animationStyle: + { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={PageLayoutComp} + /> + <Example + title="Swing Animation" + width={1000} + hideSettings={true} + config={{ + container: container, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={PageLayoutComp} + /> + <Example + title="Tada Animation" + width={1000} + hideSettings={true} + config={{ + container: container, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={PageLayoutComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ResponsiveLayout.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ResponsiveLayout.tsx index 23152d1290..02e34dd8a7 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ResponsiveLayout.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/ResponsiveLayout.tsx @@ -342,7 +342,7 @@ export default function ResponsiveLayoutExample() { <> <ExampleGroup title="Basic Usage" - description="The Following Examples Show the Basic Usage of the Component." + description="The Following Examples Show the Basic Usage of the Responsive Layout Component." > <Example title="Hiding the Component" @@ -376,7 +376,7 @@ export default function ResponsiveLayoutExample() { <ExampleGroup title="Layout" - description="The Following Examples Show the Layout options on Component." + description="The Following Examples Show the Layout options on the Responsive Layout Component." > <Example title="Column Height - Matching" @@ -420,6 +420,181 @@ export default function ResponsiveLayoutExample() { compFactory={ResponsiveLayoutComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Responsive Layout Component." + > + <Example + title="Row Styling" + hideSettings={true} + width={1000} + config={{ + containers: container, + columns: column, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043BFD", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "20px", + }, + rowBreak: true, + }} + compFactory={ResponsiveLayoutComp} + /> + <Example + title="Column Styling" + hideSettings={true} + width={1000} + config={{ + containers: container, + columns: column, + columnStyle: + { + "background": "linear-gradient(90deg, RGBA(250, 112, 154, 1) 0%, rgba(254,225,64,1) 100%)", + "border": "#222222", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "solid", + "margin": "5px", + "padding": "10px", + }, + style: + { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043BFD", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "20px", + }, + rowBreak: true, + }} + compFactory={ResponsiveLayoutComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different Animation Styles on the Responsive Layout Component." + > + <Example + title="Bounce Animation" + width={1000} + hideSettings={true} + config={{ + containers: container, + columns: column, + columnStyle: + { + "background": "linear-gradient(90deg, RGBA(250, 112, 154, 1) 0%, rgba(254,225,64,1) 100%)", + "border": "#222222", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "solid", + "margin": "5px", + "padding": "10px", + }, + style: + { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043BFD", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "20px", + }, + rowBreak: true, + animationStyle: + { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={ResponsiveLayoutComp} + /> + <Example + title="Swing Animation" + width={1000} + hideSettings={true} + config={{ + containers: container, + columns: column, + columnStyle: + { + "background": "linear-gradient(90deg, RGBA(250, 112, 154, 1) 0%, rgba(254,225,64,1) 100%)", + "border": "#222222", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "solid", + "margin": "5px", + "padding": "10px", + }, + style: + { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043BFD", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "20px", + }, + rowBreak: true, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ResponsiveLayoutComp} + /> + <Example + title="Tada Animation" + width={1000} + hideSettings={true} + config={{ + containers: container, + columns: column, + columnStyle: + { + "background": "linear-gradient(90deg, RGBA(250, 112, 154, 1) 0%, rgba(254,225,64,1) 100%)", + "border": "#222222", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "solid", + "margin": "5px", + "padding": "10px", + }, + style: + { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043BFD", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "20px", + }, + rowBreak: true, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ResponsiveLayoutComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/SplitLayout.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/SplitLayout.tsx index 84cade537d..b25f0c1508 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/SplitLayout.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/SplitLayout.tsx @@ -71,6 +71,17 @@ export default function SplitLayoutExample() { }} compFactory={SplitLayoutComp} /> + <Example + title="Hiding the Split Layout component" + hideSettings={true} + width={1000} + config={{ + bodyStyle: bodyStyle, + columnStyle: columnStyle, + hidden: true, + }} + compFactory={SplitLayoutComp} + /> <Example title="Multiple Split Layout containers ( Click on the icon at the center on right side ) " hideSettings={true} @@ -185,8 +196,11 @@ export default function SplitLayoutExample() { bodyStyle: { "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", "border": "#222222", - "borderWidth": "2px", + "borderWidth": "3px", "padding": "10px", + "borderRadius": "20px", + "margin": "5px", + "borderStyle": "dashed", }, columnStyle: columnStyle, }} @@ -201,14 +215,71 @@ export default function SplitLayoutExample() { columnStyle: { "background": "linear-gradient(0deg, #f43b47 0%, #453a94 100%)", "border": "#222222", - "borderWidth": "2px", + "borderWidth": "3px", "borderStyle": "solid", "margin": "10px", + "padding": "20px", + "borderRadius": "20px", }, }} compFactory={SplitLayoutComp} /> </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different Animation Styles on the Split Layout Component." + > + <Example + title="Bounce Animation" + width={1000} + hideSettings={true} + config={{ + bodyStyle: bodyStyle, + columnStyle: columnStyle, + animationStyle: + { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={SplitLayoutComp} + /> + <Example + title="Swing Animation" + width={1000} + hideSettings={true} + config={{ + bodyStyle: bodyStyle, + columnStyle: columnStyle, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SplitLayoutComp} + /> + <Example + title="Tada Animation" + width={1000} + hideSettings={true} + config={{ + bodyStyle: bodyStyle, + columnStyle: columnStyle, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SplitLayoutComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/TabbedContainer.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/TabbedContainer.tsx index 599157687f..93c78ec9c0 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/TabbedContainer.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/ContainersComp/TabbedContainer.tsx @@ -248,10 +248,18 @@ const tab={ export default function TabbedContainerExample() { return ( <> + <ExampleGroup title="Basic Usage" description="The Following Examples Show the Basic Usage of the Tabbed Container Component." > + <Example + title="Default Tabbed Container Component" + hideSettings={true} + config={{ + }} + compFactory={TabbedContainerComp} + /> <Example title="Hiding the Tabbed Container Component" hideSettings={true} @@ -365,6 +373,229 @@ export default function TabbedContainerExample() { compFactory={TabbedContainerComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling Properties of the Tabbed Container Component." + > + <Example + title="Overall Component Styling" + hideSettings={true} + config={{ + containers: container, + tabs: tab, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "15px", + "tabText": "#7F7F86", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "italic", + "border": "#5589F2", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + "accent": "#222222", + }, + }} + compFactory={TabbedContainerComp} + /> + <Example + title="Header Styling" + hideSettings={true} + config={{ + containers: container, + tabs: tab, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "15px", + "tabText": "#7F7F86", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "italic", + "border": "#5589F2", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + "accent": "#222222", + }, + headerStyle:{ + "containerHeaderPadding": "10px", + "headerBackground": "#FFE607" + }, + }} + compFactory={TabbedContainerComp} + /> + <Example + title="Body Styling" + hideSettings={true} + config={{ + containers: container, + tabs: tab, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "15px", + "tabText": "#7F7F86", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "italic", + "border": "#5589F2", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + "accent": "#222222", + }, + headerStyle:{ + "containerHeaderPadding": "10px", + "headerBackground": "#FFE607", + }, + bodyStyle:{ + "containerBodyPadding": "20px", + "background": "#E1825A", + }, + }} + compFactory={TabbedContainerComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different Animation Styles on the Tabbed Container Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + containers: container, + tabs: tab, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "15px", + "tabText": "#7F7F86", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "italic", + "border": "#5589F2", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + "accent": "#222222", + }, + headerStyle:{ + "containerHeaderPadding": "10px", + "headerBackground": "#FFE607", + }, + bodyStyle:{ + "containerBodyPadding": "20px", + "background": "#E1825A", + }, + animationStyle: + { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={TabbedContainerComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + containers: container, + tabs: tab, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "15px", + "tabText": "#7F7F86", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "italic", + "border": "#5589F2", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + "accent": "#222222", + }, + headerStyle:{ + "containerHeaderPadding": "10px", + "headerBackground": "#FFE607", + }, + bodyStyle:{ + "containerBodyPadding": "20px", + "background": "#E1825A", + }, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={TabbedContainerComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + containers: container, + tabs: tab, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "15px", + "tabText": "#7F7F86", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "italic", + "border": "#5589F2", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + "accent": "#222222", + }, + headerStyle:{ + "containerHeaderPadding": "10px", + "headerBackground": "#FFE607", + }, + bodyStyle:{ + "containerBodyPadding": "20px", + "background": "#E1825A", + }, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={TabbedContainerComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/BPMNEditor.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/BPMNEditor.tsx index e0725ab3c8..04f46183a7 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/BPMNEditor.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/BPMNEditor.tsx @@ -54,6 +54,18 @@ export default function BPMNEditorExample() { }} compFactory={ChartCompWithDefault} /> + <Example + title="Naming Downloaded File - Click on Download link" + height={400} + width={1000} + hideSettings={true} + config={{ + designer: true, + svgDownload: true, + imageName: "Lowcoder_Image", + }} + compFactory={ChartCompWithDefault} + /> </ExampleGroup> <ExampleGroup @@ -71,7 +83,9 @@ export default function BPMNEditorExample() { "margin": "10px", "textSize": "30px", "backgroundColor": "#D7D9E0", - "border": "#222222" + "border": "#222222", + "radius": "20px", + "borderWidth": "3px", }, }} compFactory={ChartCompWithDefault} diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/ContentCard.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/ContentCard.tsx index 40ce62bc23..5a6e1d6c0a 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/ContentCard.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/ContentCard.tsx @@ -47,6 +47,333 @@ export default function ContentCardExample() { compFactory={CardComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Card Component." + > + <Example + title="Backround Color, Icon Color, Padding and Border properties" + config={{ + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + }, + }} + compFactory={CardComp} + /> + <Example + title="Box Shadow & Rotation" + config={{ + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "16px 16px 16px", + "boxShadowColor": "#181717", + "rotation": "45deg" + }, + }} + compFactory={CardComp} + /> + <Example + title="Header Styling" + width={500} + config={{ + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "16px 16px 16px", + "boxShadowColor": "#181717", + }, + headerStyle: { + "background": "linear-gradient(90deg, #fa709a 0%, #fee140 100%)", + "margin": "10px", + "padding": "20px", + "text": "#4A5EC4", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#FA0101", + "radius": "20px", + "borderWidth": "3px", + "rotation": "-2deg", + }, + }} + compFactory={CardComp} + /> + <Example + title="Body Styling" + width={500} + config={{ + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "16px 16px 16px", + "boxShadowColor": "#181717", + }, + headerStyle: { + "background": "linear-gradient(90deg, #fa709a 0%, #fee140 100%)", + "margin": "10px", + "padding": "20px", + "text": "#4A5EC4", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#FA0101", + "radius": "20px", + "borderWidth": "3px", + "rotation": "-2deg", + }, + bodyStyle: { + "background": "#FFD90D", + "margin": "5px", + "padding": "20px", + "text": "#027B0E", + "textTransform": "lowercase", + "textSize": "16px", + "textWeight": "bold", + "fontFamily": "Verdana", + "fontStyle": "Italic", + "border": "#F76F01", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "rotation": "3deg" + }, + }} + compFactory={CardComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different Animation Styles on the Content Card Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + animationStyle: + { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "16px 16px 16px", + "boxShadowColor": "#181717", + }, + headerStyle: { + "background": "linear-gradient(90deg, #fa709a 0%, #fee140 100%)", + "margin": "10px", + "padding": "20px", + "text": "#4A5EC4", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#FA0101", + "radius": "20px", + "borderWidth": "3px", + }, + bodyStyle: { + "background": "#FFD90D", + "margin": "5px", + "padding": "20px", + "text": "#027B0E", + "textTransform": "lowercase", + "textSize": "12px", + "textWeight": "bold", + "fontFamily": "Verdana", + "fontStyle": "Italic", + "border": "#F76F01", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + }, + }} + compFactory={CardComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "16px 16px 16px", + "boxShadowColor": "#181717", + }, + headerStyle: { + "background": "linear-gradient(90deg, #fa709a 0%, #fee140 100%)", + "margin": "10px", + "padding": "20px", + "text": "#4A5EC4", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#FA0101", + "radius": "20px", + "borderWidth": "3px", + }, + bodyStyle: { + "background": "#FFD90D", + "margin": "5px", + "padding": "20px", + "text": "#027B0E", + "textTransform": "lowercase", + "textSize": "12px", + "textWeight": "bold", + "fontFamily": "Verdana", + "fontStyle": "Italic", + "border": "#F76F01", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + }, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={CardComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + title: "Jennifer Holmes", + metaTitle: "Head Cook", + metaDesc: "Responsible for the daily preparation of food for participants, including the cooking of meals, and maintaining high standards of food quality, food production and portion control using the standardized menu. ", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "IconColor": "#FF0101", + "activateColor": "#5589F2", + "containerBodyPadding": "20px", + "padding": "10px", + "border": "#023BFF", + "borderStyle": "dashed", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "16px 16px 16px", + "boxShadowColor": "#181717", + }, + headerStyle: { + "background": "linear-gradient(90deg, #fa709a 0%, #fee140 100%)", + "margin": "10px", + "padding": "20px", + "text": "#4A5EC4", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#FA0101", + "radius": "20px", + "borderWidth": "3px", + }, + bodyStyle: { + "background": "#FFD90D", + "margin": "5px", + "padding": "20px", + "text": "#027B0E", + "textTransform": "lowercase", + "textSize": "12px", + "textWeight": "bold", + "fontFamily": "Verdana", + "fontStyle": "Italic", + "border": "#F76F01", + "borderStyle": "solid", + "radius": "20px", + "borderWidth": "3px", + }, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={CardComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/Mention.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/Mention.tsx index f6a05c68b0..1027236914 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/Mention.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/MediaComp/Mention.tsx @@ -30,14 +30,29 @@ export default function MentionCompExample() { }} compFactory={MentionComp} /> + <Example + title="Disabling the Mention Component" + config={{ + disabled: true, + }} + compFactory={MentionComp} + /> + <Example + title="Hiding the Mention Component" + config={{ + hidden: true, + }} + compFactory={MentionComp} + /> </ExampleGroup> <ExampleGroup - title="Styling Properties" - description="The Following Examples Show the Styling Properties of the Mention Component." + title="Label Properties" + description="The Following Examples Show the Label Properties of the Mention Component." > <Example title="Label Name" + width={500} config={{ label: { "text": "Mention Component", @@ -47,6 +62,7 @@ export default function MentionCompExample() { /> <Example title="Label Tooltip" + width={500} config={{ label: { "text": "Mention Component", @@ -57,6 +73,7 @@ export default function MentionCompExample() { /> <Example title="Label Position & Alignment - Left & Left" + width={500} config={{ label: { "text": "Mention Component", @@ -68,6 +85,7 @@ export default function MentionCompExample() { /> <Example title="Label Position & Alignment - Left & Right" + width={500} config={{ label: { "text": "Mention Component", @@ -79,6 +97,7 @@ export default function MentionCompExample() { /> <Example title="Label Position & Alignment - Top & Left" + width={500} config={{ label: { "text": "Mention Component", @@ -90,6 +109,7 @@ export default function MentionCompExample() { /> <Example title="Label Position & Alignment - Top & Right" + width={500} config={{ label: { "text": "Mention Component", @@ -101,6 +121,7 @@ export default function MentionCompExample() { /> <Example title="Label Width - 10%" + width={500} config={{ label: { "text": "Mention Component", @@ -122,6 +143,107 @@ export default function MentionCompExample() { compFactory={MentionComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Segmented Control Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#0139FF", + "borderStyle": "dashed", + "radius": "10px", + "borderWidth": "2px", + "accent": "#FAD301", + }, + }} + compFactory={MentionComp} + /> + <Example + title="Margin & Padding" + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "10px", + "border": "#0139FF", + "borderStyle": "dashed", + "radius": "10px", + "borderWidth": "2px", + "accent": "#FAD301", + }, + }} + compFactory={MentionComp} + /> + <Example + title="Text Color, Size, Weight, Font family, Border properties" + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "10px", + "text": "#FF0404", + "textTransform": "uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "oblique", + "border": "#0139FF", + "borderStyle": "dashed", + "radius": "10px", + "borderWidth": "2px", + "accent": "#FAD301", + }, + }} + compFactory={MentionComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Segmented Control Component." + > + <Example + title="Bounce Animation" + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={MentionComp} + /> + <Example + title="Swing Animation" + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={MentionComp} + /> + <Example + title="Tada Animation" + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={MentionComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/Form.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/Form.tsx index eaa8ddada8..bb9d05308c 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/Form.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/Form.tsx @@ -186,7 +186,7 @@ export default function FormExample() { hideSettings={true} config={{ container: container, - disableSubmit: "true", + disableSubmit: "true", }} compFactory={FormComp} /> @@ -199,9 +199,26 @@ export default function FormExample() { }} compFactory={FormComp} /> + <Example + title="Reset after Form Submit - True" + hideSettings={true} + config={{ + container: container, + resetAfterSubmit: true, + }} + compFactory={FormComp} + /> + <Example + title="Reset after Form Submit - False" + hideSettings={true} + config={{ + container: container, + resetAfterSubmit: false, + }} + compFactory={FormComp} + /> </ExampleGroup> - <ExampleGroup title="Layout" description="The Following Examples Show the Layout options on the Form Component." @@ -659,6 +676,380 @@ export default function FormExample() { compFactory={FormComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Form Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "68d42007": { + "i": "68d42007", + "h": 5, + "w": 24, + "x": 0, + "y": 0 + } + }, + "items": { + "68d42007": { + "compType": "text", + "comp": { + "text": "### Welcome Back", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formTitle1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "4b9ae86d": { + "i": "4b9ae86d", + "h": 7, + "w": 8, + "x": 0, + "y": 0, + "pos": 0 + }, + "e74dc9d9": { + "i": "e74dc9d9", + "h": 7, + "w": 8, + "x": 0, + "y": 7, + "pos": 1 + } + }, + "items": { + "4b9ae86d": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Email", + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "input1" + }, + "e74dc9d9": { + "compType": "password", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Password", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Regex", + "regex": "test", + "visibilityToggle": true, + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "password1" + } + } + } + } + }, + "footer": { + "layout": { + "64227c09": { + "i": "64227c09", + "h": 6, + "w": 5, + "x": 19, + "y": 0 + } + }, + "items": { + "64227c09": { + "compType": "button", + "comp": { + "text": "Login", + "type": "submit", + "form": "form1", + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formButton1" + } + } + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#3377FF", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + }, + "appliedThemeId": "" + }, + }} + compFactory={FormComp} + /> + <Example + title="Margin & Padding" + hideSettings={true} + config={{ + container: { + "header": { + "layout": { + "68d42007": { + "i": "68d42007", + "h": 5, + "w": 24, + "x": 0, + "y": 0 + } + }, + "items": { + "68d42007": { + "compType": "text", + "comp": { + "text": "### Welcome Back", + "autoHeight": "auto", + "type": "markdown", + "horizontalAlignment": "center", + "contentScrollBar": true, + "verticalAlignment": "center", + "margin": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "padding": { + "left": "", + "right": "", + "top": "", + "bottom": "" + }, + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formTitle1" + } + } + }, + "body": { + "0": { + "view": { + "layout": { + "4b9ae86d": { + "i": "4b9ae86d", + "h": 7, + "w": 8, + "x": 0, + "y": 0, + "pos": 0 + }, + "e74dc9d9": { + "i": "e74dc9d9", + "h": 7, + "w": 8, + "x": 0, + "y": 7, + "pos": 1 + } + }, + "items": { + "4b9ae86d": { + "compType": "input", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Email", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Email", + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "input1" + }, + "e74dc9d9": { + "compType": "password", + "comp": { + "defaultValue": "", + "value": "", + "label": { + "text": "Password", + "width": "33", + "widthUnit": "%", + "position": "row", + "align": "left" + }, + "validationType": "Regex", + "regex": "test", + "visibilityToggle": true, + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "password1" + } + } + } + } + }, + "footer": { + "layout": { + "64227c09": { + "i": "64227c09", + "h": 6, + "w": 5, + "x": 19, + "y": 0 + } + }, + "items": { + "64227c09": { + "compType": "button", + "comp": { + "text": "Login", + "type": "submit", + "form": "form1", + "showDataLoadingIndicators": false, + "preventStyleOverwriting": false, + "appliedThemeId": "", + "version": "latest" + }, + "name": "formButton1" + } + } + }, + "showHeader": true, + "showBody": true, + "showFooter": true, + "autoHeight": "auto", + "showVerticalScrollbar": false, + "horizontalGridCells": 24, + "scrollbars": false, + "style": { + "border": "#3377FF", + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "radius": "20px", + "borderWidth": "3px", + "borderStyle": "dashed", + "margin": "5px", + "padding": "20px" + }, + "appliedThemeId": "" + }, + }} + compFactory={FormComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Form Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + container: container, + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FormComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + container: container, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FormComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + container: container, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FormComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONEditor.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONEditor.tsx index dc1b3db1f3..6f618a8631 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONEditor.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONEditor.tsx @@ -18,9 +18,6 @@ export default function JsonEditorExample() { title="A Simple JSON Editor Form " hideSettings={true} config={{ - schema: schema, - uiSchema: uiSchema, - data: data, }} compFactory={JsonEditorComp} /> @@ -28,9 +25,6 @@ export default function JsonEditorExample() { title="Hiding the JSON Editor Form " hideSettings={true} config={{ - schema: schema, - uiSchema: uiSchema, - data: data, hidden: true, }} compFactory={JsonEditorComp} @@ -127,6 +121,51 @@ export default function JsonEditorExample() { compFactory={JsonEditorComp} /> </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the JSON Editor Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonEditorComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonEditorComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonEditorComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONExplorer.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONExplorer.tsx index 022c550881..156e3b15f0 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONExplorer.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONExplorer.tsx @@ -68,6 +68,51 @@ export default function JsonExplorerExample() { compFactory={JsonExplorerComp} /> </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the JSON Explorer Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonExplorerComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonExplorerComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonExplorerComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONSchemaform.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONSchemaform.tsx index 61b2fa22aa..834169e73a 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONSchemaform.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/formComp/JSONSchemaform.tsx @@ -13,28 +13,96 @@ export default function jsonSchemaFormExample() { <Example title="A Simple JSON Schema Form" hideSettings={true} - config={{ - schema: - '{\n "title": "User profile",\n "description": "form example",\n "type": "object",\n "required": [\n "name",\n "phone"\n ],\n "properties": {\n "name": {\n "type": "string",\n "title": "Name"\n },\n "phone": {\n "type": "string",\n "title": "Phone",\n "minLength": 11\n },\n "birthday": {\n "type": "string",\n "title": "Birthday"\n }\n }\n}', - uiSchema: - '{\n "name": {\n "ui:autofocus": true,\n "ui:emptyValue": ""\n },\n "phone": {\n "ui:help": "Please input a 11 digits number"\n },\n "birthday": {\n "ui:widget": "date"\n }\n}', - data: '{\n "name": "Tom",\n "phone": "13488886666",\n "birthday": "1980-03-16"\n}', - }} + config={{}} compFactory={JsonSchemaFormComp} /> <Example title="Hiding the JSON Schema Form" hideSettings={true} config={{ - schema: - '{\n "title": "User profile",\n "description": "form example",\n "type": "object",\n "required": [\n "name",\n "phone"\n ],\n "properties": {\n "name": {\n "type": "string",\n "title": "Name"\n },\n "phone": {\n "type": "string",\n "title": "Phone",\n "minLength": 11\n },\n "birthday": {\n "type": "string",\n "title": "Birthday"\n }\n }\n}', - uiSchema: - '{\n "name": {\n "ui:autofocus": true,\n "ui:emptyValue": ""\n },\n "phone": {\n "ui:help": "Please input a 11 digits number"\n },\n "birthday": {\n "ui:widget": "date"\n }\n}', - data: '{\n "name": "Tom",\n "phone": "13488886666",\n "birthday": "1980-03-16"\n}', hidden: true, }} compFactory={JsonSchemaFormComp} /> + <Example + title="Reset after Form Submit - True" + hideSettings={true} + config={{ + resetAfterSubmit: true, + }} + compFactory={JsonSchemaFormComp} + /> + <Example + title="Reset after Form Submit - False" + hideSettings={true} + config={{ + resetAfterSubmit: false, + }} + compFactory={JsonSchemaFormComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the JSON Schema Component." + > + <Example + title="Background Color, Border Radius and Color" + hideSettings={true} + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#3377FF", + "radius": "20px" + }, + }} + compFactory={JsonSchemaFormComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the JSON Schema Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonSchemaFormComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonSchemaFormComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={JsonSchemaFormComp} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/RangeSlider.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/RangeSlider.tsx index 66d4482817..c01ecb089b 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/RangeSlider.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/RangeSlider.tsx @@ -8,45 +8,57 @@ export default function RangeSliderExample() { <> <ExampleGroup title={trans("componentDoc.basicUsage")} - description={trans("componentDoc.basicDemoDescription")} + description="The Following Examples Show the Basic Usage of the Range Slider Component." > <Example title={trans("componentDoc.default")} config={{ - value: "60", - disabled: "false", - start: "10", - end: "70", - min: "0", - max: "100", - step: "10", }} compFactory={RangeSliderComp} /> <Example title={trans("componentDoc.disabled")} config={{ - value: "60", disabled: "true", - start: "10", - end: "70", - max: "100", - min: "0", - step: "10", }} compFactory={RangeSliderComp} /> <Example - title={trans("componentDoc.default")} + title="Hiding the Range Slider component" + config={{ + hidden: true, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Step Size - 10" config={{ - value: "60", - disabled: "false", - start: "10", - end: "70", - min: "0", - max: "100", step: "10", - vertical: true, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Step Size - 20" + config={{ + step: "20", + }} + compFactory={RangeSliderComp} + /> + <Example + title="Setting Minimum & Maximum Values" + config={{ + min: "30", + max: "150", + }} + compFactory={RangeSliderComp} + /> + <Example + title="Setting Minimum & Maximum Values" + config={{ + min: "30", + max: "150", + start: "70", + end: "140", }} compFactory={RangeSliderComp} /> @@ -97,6 +109,198 @@ export default function RangeSliderExample() { }} compFactory={RangeSliderComp} /> + <Example + title="Tooltip on Hover" + config={{ + label: { + text: trans("componentDoc.labelText"), + tooltip: "This is a Tooltip displayed on Hover", + }, + }} + compFactory={RangeSliderComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Layout Options" + description="The Following Examples Show the Layout Options of the Slider Component." + > + <Example + title="Prefix Icon" + config={{ + prefixIcon: "/icon:solid/arrow-down-wide-short", + }} + compFactory={RangeSliderComp} + /> + <Example + title="Suffix Icon" + config={{ + suffixIcon: "/icon:solid/arrow-up-wide-short", + }} + compFactory={RangeSliderComp} + /> + <Example + title="Prefix & Suffix Icon" + config={{ + prefixIcon: "/icon:solid/arrow-down-wide-short", + suffixIcon: "/icon:solid/arrow-up-wide-short", + }} + compFactory={RangeSliderComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Range Slider Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "borderStyle": "solid", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Margin & Padding" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "margin": "10px", + "padding": "10px", + "borderStyle": "dashed", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Opacity - 0.2" + config={{ + style: { + "opacity": "0.2", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Opacity - 0.5" + config={{ + style: { + "opacity": "0.5", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Opacity - 0.7" + config={{ + style: { + "opacity": "0.7", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Opacity - 1" + config={{ + style: { + "opacity": "1", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Rotation - 90deg" + config={{ + style: { + "rotation": "90deg", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Label - Text Color, Size, Weight, Font family, Border properties" + config={{ + labelStyle: { + "margin": "5px", + "padding": "5px", + "label": "#3377FF", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "13px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#36B389", + "borderStyle": "solid", + "borderWidth": "2px", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Input Field Style" + config={{ + inputFieldStyle: { + "fill": "#36B389", + "thumbBorder": "#222222", + "thumb": "#FFD501", + "track": "#E68E50", + "margin": "5px", + }, + }} + compFactory={RangeSliderComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Slider Component." + > + <Example + title="Bounce Animation" + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Swing Animation" + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={RangeSliderComp} + /> + <Example + title="Tada Animation" + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={RangeSliderComp} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/Slider.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/Slider.tsx index 24fbdbf66d..3fab535bb2 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/Slider.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/numberInputComp/Slider.tsx @@ -8,16 +8,12 @@ export default function SliderExample() { <> <ExampleGroup title={trans("componentDoc.basicUsage")} - description={trans("componentDoc.basicDemoDescription")} + description="The Following Examples Show the Basic Usage of the Slider Component." > <Example title={trans("componentDoc.default")} config={{ value: "60", - disabled: "false", - min: "0", - max: "100", - step: "10", }} compFactory={SliderComp} /> @@ -25,28 +21,43 @@ export default function SliderExample() { title={trans("componentDoc.disabled")} config={{ disabled: "true", - value: "60", - max: "100", - min: "0", - step: "10", }} compFactory={SliderComp} /> <Example - title={trans("componentDoc.default")} + title="Hiding the Slider component" + config={{ + hidden: "true", + }} + compFactory={SliderComp} + /> + <Example + title="Step Size - 10" config={{ - value: "60", - disabled: "false", - min: "0", - max: "100", step: "10", - vertical: true, + }} + compFactory={SliderComp} + /> + <Example + title="Step Size - 20" + config={{ + step: "20", + }} + compFactory={SliderComp} + /> + <Example + title="Setting Minimum & Maximum Values" + config={{ + min: "30", + max: "150", }} compFactory={SliderComp} /> </ExampleGroup> - <ExampleGroup title={trans("componentDoc.labelText")} description=""> + <ExampleGroup + title={trans("componentDoc.labelText")} + description="The Following Examples Show the Basic Usage of the Slider Component."> <Example title={trans("componentDoc.leftLeftAlign")} config={{ @@ -91,6 +102,198 @@ export default function SliderExample() { }} compFactory={SliderComp} /> + <Example + title="Tooltip on Hover" + config={{ + label: { + text: trans("componentDoc.labelText"), + tooltip: "This is a tooltip displayed on Slider component", + }, + }} + compFactory={SliderComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Layout Options" + description="The Following Examples Show the Layout Options of the Slider Component." + > + <Example + title="Prefix Icon" + config={{ + prefixIcon: "/icon:solid/arrow-down-wide-short", + }} + compFactory={SliderComp} + /> + <Example + title="Suffix Icon" + config={{ + suffixIcon: "/icon:solid/arrow-up-wide-short", + }} + compFactory={SliderComp} + /> + <Example + title="Prefix & Suffix Icon" + config={{ + prefixIcon: "/icon:solid/arrow-down-wide-short", + suffixIcon: "/icon:solid/arrow-up-wide-short", + }} + compFactory={SliderComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Slider Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "borderStyle": "solid", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Margin & Padding" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "margin": "10px", + "padding": "10px", + "borderStyle": "dashed", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Opacity - 0.2" + config={{ + style: { + "opacity": "0.2", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Opacity - 0.5" + config={{ + style: { + "opacity": "0.5", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Opacity - 0.7" + config={{ + style: { + "opacity": "0.7", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Opacity - 1" + config={{ + style: { + "opacity": "1", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Rotation - 90deg" + config={{ + style: { + "rotation": "90deg", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Label - Text Color, Size, Weight, Font family, Border properties" + config={{ + labelStyle: { + "margin": "5px", + "padding": "5px", + "label": "#3377FF", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "13px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#36B389", + "borderStyle": "solid", + "borderWidth": "2px", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Input Field Style" + config={{ + inputFieldStyle: { + "fill": "#36B389", + "thumbBorder": "#222222", + "thumb": "#FFD501", + "track": "#E68E50", + "margin": "5px", + }, + }} + compFactory={SliderComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Slider Component." + > + <Example + title="Bounce Animation" + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Swing Animation" + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={SliderComp} + /> + <Example + title="Tada Animation" + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite", + }, + }} + compFactory={SliderComp} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/Kanban.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/Kanban.tsx index 40e21298b6..bb01d66917 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/Kanban.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/Kanban.tsx @@ -157,6 +157,113 @@ export default function KanbanExample() { }} compFactory={ChartCompWithDefault} /> + <Example + title="Separate Sections by Assignees" + hideSettings={true} + width={1000} + config={{ + data: data, + assigneeOptions: assigneeOptions, + separateAssigneeSections: true, + }} + compFactory={ChartCompWithDefault} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the Kanban Component." + > + <Example + title="Board Styling - Text Size & Color" + hideSettings={true} + width={1000} + config={{ + data: data, + assigneeOptions: assigneeOptions, + boardStyles: { + "textSize": "22px", + "textColor": "#07875C", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Card Header Styling - Text Size & Color" + hideSettings={true} + width={1000} + config={{ + data: data, + assigneeOptions: assigneeOptions, + cardHeaderStyles: { + "textSize": "22px", + "textColor": "#6D83F2", + }, + boardStyles: { + "textSize": "22px", + "textColor": "#07875C", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Card Styling - Padding, Text Size, Border properties, Box Shadow" + hideSettings={true} + width={1000} + config={{ + data: data, + assigneeOptions: assigneeOptions, + cardContentStyles: { + "padding": "12px", + "textSize": "16px", + "backgroundColor": "linear-gradient(135deg, RGB(123, 156, 174) 0%, rgba(150,230,161,1) 100%)", + "border": "#36B389", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "0px 4px 8px", + }, + boardStyles: { + "textSize": "22px", + "textColor": "#07875C", + }, + cardHeaderStyles: { + "textSize": "22px", + "textColor": "#6D83F2", + }, + }} + compFactory={ChartCompWithDefault} + /> + <Example + title="Tag Styling - Text Size & Color" + hideSettings={true} + width={1000} + config={{ + data: data, + assigneeOptions: assigneeOptions, + cardContentStyles: { + "padding": "12px", + "textSize": "16px", + "backgroundColor": "linear-gradient(135deg, RGB(123, 156, 174) 0%, rgba(150,230,161,1) 100%)", + "border": "#36B389", + "radius": "20px", + "borderWidth": "3px", + "boxShadow": "0px 4px 8px", + }, + boardStyles: { + "textSize": "22px", + "textColor": "#07875C", + }, + cardHeaderStyles: { + "textSize": "22px", + "textColor": "#6D83F2", + }, + tagStyles: { + "textSize": "14px", + "textColor": "#F40101", + }, + }} + compFactory={ChartCompWithDefault} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/comment.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/comment.tsx index 5f4d1ea619..1c4123a1d9 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/comment.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/comment.tsx @@ -12,6 +12,7 @@ export default function CommentExample() { > <Example title="Setting Title of the Comment Component" + width={500} config={{ title: "%d Comments in Total", }} @@ -19,6 +20,7 @@ export default function CommentExample() { /> <Example title="Hiding the Comment Component" + width={500} config={{ hidden: true, }} @@ -26,6 +28,7 @@ export default function CommentExample() { /> <Example title="Disallowing Users to Comment" + width={500} config={{ sendCommentAble: false, }} @@ -33,6 +36,7 @@ export default function CommentExample() { /> <Example title="Allowing Users to Delete a Comment" + width={500} config={{ deleteAble: true, }} @@ -46,6 +50,7 @@ export default function CommentExample() { > <Example title="Setting the Button Title and Placeholder Text on the Comment Component" + width={500} config={{ buttonText:"Click on me to Comment", placeholder:"I am Placeholder text on the Comment Component :)", @@ -53,6 +58,70 @@ export default function CommentExample() { compFactory={CommentComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Comment Component." + > + <Example + title="Background Color, Border Radius and Color" + width={500} + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "10px", + "padding": "20px", + "radius": "20px", + } + }} + compFactory={CommentComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Comment Component." + > + <Example + title="Bounce Animation" + width={600} + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={CommentComp} + /> + <Example + title="Swing Animation" + width={600} + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={CommentComp} + /> + <Example + title="Tada Animation" + width={600} + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={CommentComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/divider.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/divider.tsx index 00071dae1c..e71949115c 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/divider.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/divider.tsx @@ -197,6 +197,63 @@ export default function DividerExample() { compFactory={DividerComp} /> </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Cascader Component." + > + <Example + title="Bounce Animation" + config={{ + style: { + borderStyle: "solid", + border: "#000", + borderWidth: "2px" + }, + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={DividerComp} + /> + <Example + title="Swing Animation" + config={{ + style: { + borderStyle: "solid", + border: "#000", + borderWidth: "2px" + }, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={DividerComp} + /> + <Example + title="Tada Animation" + config={{ + style: { + borderStyle: "solid", + border: "#000", + borderWidth: "2px" + }, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={DividerComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/fileViewer.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/fileViewer.tsx index 8471b2e2f7..f351eeef75 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/fileViewer.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/fileViewer.tsx @@ -9,10 +9,10 @@ export default function FileViewerExample() { <> <ExampleGroup title={trans("componentDoc.basicUsage")} - description={trans("componentDoc.basicDemoDescription")} + description="The Following Examples Show the Basic Usage of the File Viewer Component." > <Example - title="" + title="Default File Viewer component" width={1000} height={600} blackListConfig={blackListConfig} @@ -22,6 +22,117 @@ export default function FileViewerExample() { }} compFactory={FileViewerComp} /> + <Example + title="Hiding the File Viewer component" + width={1000} + height={600} + blackListConfig={blackListConfig} + hideSettings={true} + config={{ + src: "https://pdfa.org/wp-content/uploads/2021/06/The-Low-Code-Revolution-and-PDF.pdf", + hidden: true, + }} + compFactory={FileViewerComp} + /> + + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties of the File Viewer Component." + > + <Example + title="Background Color, Margin & Padding" + width={1000} + height={600} + blackListConfig={blackListConfig} + hideSettings={true} + config={{ + src: "https://pdfa.org/wp-content/uploads/2021/06/The-Low-Code-Revolution-and-PDF.pdf", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "10px", + "padding": "40px", + }, + }} + compFactory={FileViewerComp} + /> + <Example + title="Border Color, Radius & Width" + width={1000} + height={600} + blackListConfig={blackListConfig} + hideSettings={true} + config={{ + src: "https://pdfa.org/wp-content/uploads/2021/06/The-Low-Code-Revolution-and-PDF.pdf", + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#3377FF", + "radius": "20px", + "margin": "10px", + "padding": "40px", + "borderWidth": "3px" + }, + }} + compFactory={FileViewerComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Cascader Component." + > + <Example + title="Bounce Animation" + width={1000} + height={600} + blackListConfig={blackListConfig} + hideSettings={true} + config={{ + src: "https://pdfa.org/wp-content/uploads/2021/06/The-Low-Code-Revolution-and-PDF.pdf", + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FileViewerComp} + /> + <Example + title="Swing Animation" + width={1000} + height={600} + blackListConfig={blackListConfig} + hideSettings={true} + config={{ + src: "https://pdfa.org/wp-content/uploads/2021/06/The-Low-Code-Revolution-and-PDF.pdf", + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FileViewerComp} + /> + <Example + title="Tada Animation" + width={1000} + height={600} + blackListConfig={blackListConfig} + hideSettings={true} + config={{ + src: "https://pdfa.org/wp-content/uploads/2021/06/The-Low-Code-Revolution-and-PDF.pdf", + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FileViewerComp} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/gridView.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/gridView.tsx index 31eaea4cc5..404e179084 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/gridView.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/gridView.tsx @@ -95,6 +95,8 @@ const container={ } }; +const rows= "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Godfather Part II\",\n \"url\": \"https://www.imdb.com/title/tt0071562/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMWMwMGQzZTItY2JlNC00OWZiLWIyMDctNDk2ZDQ2YjRjMWQ0XkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"12 Angry Men\",\n \"url\": \"https://www.imdb.com/title/tt0050083/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMWU4N2FjNzYtNTVkNC00NzQ0LTg0MjAtYTJlMjFhNGUxZDFmXkEyXkFqcGdeQXVyNjc1NTYyMjg@._V1_UX45_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"8.9\",\n \"title\": \"Schindler's List\",\n \"url\": \"https://www.imdb.com/title/tt0108052/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BNDE4OTMxMTctNmRhYy00NWE2LTg3YzItYTk3M2UwOTU5Njg4XkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_UX45_CR0,0,45,67_AL_.jpg\"\n }\n]"; + export default function GridViewExample() { const blackListConfig: string[] = [ @@ -237,6 +239,111 @@ export default function GridViewExample() { compFactory={GridComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling Properties on the ListView Component." + + > + <Example + title="Background Color, Border Color & Radius" + hideSettings + config={{ + container: container, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043CFF", + "radius": "20px", + }, + noOfRows: rows, + }} + blackListConfig={blackListConfig} + compFactory={GridComp} + /> + <Example + title="Rotation - 45 Deg" + hideSettings + config={{ + container: container, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043CFF", + "radius": "20px", + "rotation": "45deg" + }, + noOfRows: rows, + }} + blackListConfig={blackListConfig} + compFactory={GridComp} + /> + <Example + title="Rotation - 135 Deg" + hideSettings + config={{ + container: container, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043CFF", + "radius": "20px", + "rotation": "135deg" + }, + noOfRows: rows, + }} + blackListConfig={blackListConfig} + compFactory={GridComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the List View Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + noOfRows: rows, + container: container, + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={GridComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + noOfRows: rows, + container: container, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={GridComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + noOfRows: rows, + container: container, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={GridComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/listView.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/listView.tsx index 51d5704e5a..a00a6c1911 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/listView.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/presentationComp/listView.tsx @@ -100,6 +100,9 @@ export default function ListViewExample() { const blackListConfig: string[] = [ "container" ]; + + const rows= "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Godfather Part II\",\n \"url\": \"https://www.imdb.com/title/tt0071562/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMWMwMGQzZTItY2JlNC00OWZiLWIyMDctNDk2ZDQ2YjRjMWQ0XkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"12 Angry Men\",\n \"url\": \"https://www.imdb.com/title/tt0050083/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMWU4N2FjNzYtNTVkNC00NzQ0LTg0MjAtYTJlMjFhNGUxZDFmXkEyXkFqcGdeQXVyNjc1NTYyMjg@._V1_UX45_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"8.9\",\n \"title\": \"Schindler's List\",\n \"url\": \"https://www.imdb.com/title/tt0108052/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BNDE4OTMxMTctNmRhYy00NWE2LTg3YzItYTk3M2UwOTU5Njg4XkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_UX45_CR0,0,45,67_AL_.jpg\"\n }\n]"; + return ( <> <ExampleGroup @@ -112,7 +115,7 @@ export default function ListViewExample() { hideSettings config={{ container: container, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -122,8 +125,8 @@ export default function ListViewExample() { hideSettings config={{ container: container, - hidden: "true", - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + hidden: true, + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -136,7 +139,7 @@ export default function ListViewExample() { pagination:{ pageSize:"2", }, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -156,7 +159,7 @@ export default function ListViewExample() { pagination:{ pageSize:"2", }, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -170,7 +173,7 @@ export default function ListViewExample() { pageSize:"2", showQuickJumper: true, }, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -187,7 +190,7 @@ export default function ListViewExample() { pageSizeOptions: "[2,4,6,8]", }, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -209,7 +212,7 @@ export default function ListViewExample() { pagination:{ pageSize:"2", }, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} @@ -223,11 +226,116 @@ export default function ListViewExample() { pageSize:"2", showQuickJumper: true, }, - noOfRows: "[\n {\n \"rate\": \"9.2\",\n \"title\": \"The Shawshank Redemption\",\n \"url\": \"https://www.imdb.com/title/tt0111161/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.2\",\n \"title\": \"The Godfather\",\n \"url\": \"https://www.imdb.com/title/tt0068646/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_UY67_CR1,0,45,67_AL_.jpg\"\n },\n {\n \"rate\": \"9.0\",\n \"title\": \"The Dark Knight\",\n \"url\": \"https://www.imdb.com/title/tt0468569/\",\n \"cover\": \"https://m.media-amazon.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_UY67_CR0,0,45,67_AL_.jpg\"\n }\n]", + noOfRows: rows, + }} + blackListConfig={blackListConfig} + compFactory={ListViewComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling Properties on the ListView Component." + + > + <Example + title="Background Color, Border Color & Radius" + hideSettings + config={{ + container: container, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043CFF", + "radius": "20px", + }, + noOfRows: rows, + }} + blackListConfig={blackListConfig} + compFactory={ListViewComp} + /> + <Example + title="Rotation - 45 Deg" + hideSettings + config={{ + container: container, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043CFF", + "radius": "20px", + "rotation": "45deg" + }, + noOfRows: rows, }} blackListConfig={blackListConfig} compFactory={ListViewComp} /> + <Example + title="Rotation - 135 Deg" + hideSettings + config={{ + container: container, + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#043CFF", + "radius": "20px", + "rotation": "135deg" + }, + noOfRows: rows, + }} + blackListConfig={blackListConfig} + compFactory={ListViewComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the List View Component." + > + <Example + title="Bounce Animation" + hideSettings={true} + config={{ + noOfRows: rows, + container: container, + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ListViewComp} + /> + <Example + title="Swing Animation" + hideSettings={true} + config={{ + noOfRows: rows, + container: container, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ListViewComp} + /> + <Example + title="Tada Animation" + hideSettings={true} + config={{ + noOfRows: rows, + container: container, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={ListViewComp} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/File.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/File.tsx index be97c5bdb3..964ce918bb 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/File.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/File.tsx @@ -139,6 +139,102 @@ export default function FileExample() { compFactory={FileComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Cascader Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "borderStyle": "solid", + }, + }} + compFactory={FileComp} + /> + <Example + title="Margin & Padding" + config={{ + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "margin": "10px", + "padding": "10px", + "borderStyle": "dashed", + }, + }} + compFactory={FileComp} + /> + <Example + title="Text Color, Size, Weight, Font family, Border properties" + config={{ + style: { + "margin": "5px", + "padding": "5px", + "label": "#3377FF", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "13px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#36B389", + "borderStyle": "solid", + "borderWidth": "2px" + }, + }} + compFactory={FileComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Cascader Component." + > + <Example + title="Bounce Animation" + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FileComp} + /> + <Example + title="Swing Animation" + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FileComp} + /> + <Example + title="Tada Animation" + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={FileComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/SegmentedControl.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/SegmentedControl.tsx index aa134c2d76..724d9faf93 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/SegmentedControl.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/SegmentedControl.tsx @@ -29,13 +29,12 @@ export default function SegmentedControlExample() { <> <ExampleGroup title={trans("componentDoc.basicUsage")} - description={trans("componentDoc.basicDemoDescription")} + description="The Following Examples Show the Basic Usage of the Segmented Control Component." > <Example title={trans("componentDoc.value")} config={{ - value: trans("componentDoc.appleOptionLabel"), - disabled: false, + defaultValue: trans("componentDoc.appleOptionLabel"), options: options, label: { text: trans("componentDoc.likedFruits"), @@ -48,7 +47,6 @@ export default function SegmentedControlExample() { title={trans("componentDoc.noDefaultValue")} config={{ value: trans("componentDoc.noValue"), - disabled: false, options: options, label: { text: trans("componentDoc.likedFruits"), @@ -60,7 +58,6 @@ export default function SegmentedControlExample() { <Example title={trans("componentDoc.disabled")} config={{ - value: trans("componentDoc.appleOptionLabel"), disabled: true, options: options, label: { @@ -70,12 +67,27 @@ export default function SegmentedControlExample() { blackListConfig={blackListConfig} compFactory={SegmentedControlComp} /> + <Example + title="Hiding the Segmented Control Component" + config={{ + hidden: true, + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + }} + blackListConfig={blackListConfig} + compFactory={SegmentedControlComp} + /> </ExampleGroup> - <ExampleGroup title={trans("componentDoc.labelText")} description=""> + + <ExampleGroup + title={trans("componentDoc.labelText")} + description="The Following Examples Show the different Label alignment of the Segmented Control Component."> <Example title={trans("componentDoc.leftLeftAlign")} config={{ - value: trans("componentDoc.appleOptionLabel"), + defaultValue: trans("componentDoc.coconutOptionLabel"), options: options, label: { text: trans("componentDoc.likedFruits"), @@ -89,7 +101,7 @@ export default function SegmentedControlExample() { <Example title={trans("componentDoc.leftRightAlign")} config={{ - value: trans("componentDoc.appleOptionLabel"), + defaultValue: trans("componentDoc.appleOptionLabel"), options: options, label: { text: trans("componentDoc.likedFruits"), @@ -103,7 +115,7 @@ export default function SegmentedControlExample() { <Example title={trans("componentDoc.topLeftAlign")} config={{ - value: trans("componentDoc.appleOptionLabel"), + defaultValue: trans("componentDoc.appleOptionLabel"), options: options, label: { text: trans("componentDoc.likedFruits"), @@ -117,7 +129,7 @@ export default function SegmentedControlExample() { <Example title={trans("componentDoc.topRightAlign")} config={{ - value: trans("componentDoc.appleOptionLabel"), + defaultValue: trans("componentDoc.appleOptionLabel"), options: options, label: { text: trans("componentDoc.likedFruits"), @@ -128,7 +140,21 @@ export default function SegmentedControlExample() { blackListConfig={blackListConfig} compFactory={SegmentedControlComp} /> + <Example + title="Displaying Tooltip on Hover" + config={{ + defaultValue: trans("componentDoc.appleOptionLabel"), + options: options, + label: { + text: trans("componentDoc.likedFruits"), + tooltip: "This is a Tooltip on Segmented Control component" + }, + }} + blackListConfig={blackListConfig} + compFactory={SegmentedControlComp} + /> </ExampleGroup> + <ExampleGroup title={trans("componentDoc.validation")}> <Example title={trans("componentDoc.required")} @@ -143,6 +169,173 @@ export default function SegmentedControlExample() { compFactory={SegmentedControlComp} /> </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Segmented Control Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + width={500} + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "borderStyle": "solid", + }, + }} + compFactory={SegmentedControlComp} + /> + <Example + title="Margin & Padding" + width={500} + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "margin": "10px", + "padding": "10px", + "borderStyle": "dashed", + }, + }} + compFactory={SegmentedControlComp} + /> + <Example + title="Text Color, Size, Weight, Font family, Border properties" + width={500} + config={{ + defaultValue: trans("componentDoc.coconutOptionLabel"), + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + style: { + "margin": "3px", + "padding": "3px", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "13px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#36B389", + "borderStyle": "solid", + "borderWidth": "3px", + "background": "#00FFFF", + "indicatorBackground": "#F4EA05", + + }, + }} + compFactory={SegmentedControlComp} + /> + <Example + title="Rotation - 90deg" + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + style: { + "rotation": "90deg", + }, + }} + compFactory={SegmentedControlComp} + /> + <Example + title="Label - Text Color, Size, Weight, Font family, Border properties" + width={500} + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + labelStyle: { + "margin": "5px", + "padding": "5px", + "label": "#3377FF", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "13px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#36B389", + "borderStyle": "solid", + "borderWidth": "2px" + }, + }} + compFactory={SegmentedControlComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Segmented Control Component." + > + <Example + title="Bounce Animation" + width={500} + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SegmentedControlComp} + /> + <Example + title="Swing Animation" + width={500} + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SegmentedControlComp} + /> + <Example + title="Tada Animation" + width={500} + config={{ + options: options, + label: { + text: trans("componentDoc.likedFruits"), + }, + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SegmentedControlComp} + /> + </ExampleGroup> </> ); } diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/StepControl.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/StepControl.tsx index d2e51248ab..535ca1b8bc 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/StepControl.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/StepControl.tsx @@ -23,6 +23,41 @@ export default function StepControlExample() { }} compFactory={StepComp} /> + <Example + title="Start Step Numbers at - 0" + config={{ + initialValue: "0", + }} + compFactory={StepComp} + /> + <Example + title="Start Step Numbers at - 1" + config={{ + initialValue: "1", + }} + compFactory={StepComp} + /> + <Example + title="Start Step Numbers at - 2" + config={{ + initialValue: "2", + }} + compFactory={StepComp} + /> + <Example + title="Selectable Steps - True" + config={{ + selectable: true, + }} + compFactory={StepComp} + /> + <Example + title="Selectable Steps - False" + config={{ + selectable: false, + }} + compFactory={StepComp} + /> </ExampleGroup> <ExampleGroup @@ -106,7 +141,111 @@ export default function StepControlExample() { }} compFactory={StepComp} /> - </ExampleGroup> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Step Control Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "border": "#0139FF", + "borderStyle": "dashed", + "radius": "10px", + "borderWidth": "2px", + "accent": "#FAD301", + }, + }} + compFactory={StepComp} + /> + <Example + title="Margin & Padding" + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "10px", + "border": "#0139FF", + "borderStyle": "dashed", + "radius": "10px", + "borderWidth": "2px", + "accent": "#FAD301", + }, + }} + compFactory={StepComp} + /> + <Example + title="Text Color, Size, Weight, Font family, Border properties" + config={{ + style: { + "background": "linear-gradient(135deg, #72afd3 0%, #96e6a1 100%)", + "margin": "5px", + "padding": "10px", + "text": "#FF0404", + "textTransform": "uppercase", + "textDecoration": "underline", + "textSize": "20px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "oblique", + "border": "#0139FF", + "borderStyle": "dashed", + "radius": "10px", + "borderWidth": "2px", + "accent": "#FAD301", + }, + }} + compFactory={StepComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Step Control Component." + > + <Example + title="Bounce Animation" + width={600} + config={{ + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={StepComp} + /> + <Example + title="Swing Animation" + width={600} + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={StepComp} + /> + <Example + title="Tada Animation" + width={600} + config={{ + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={StepComp} + /> + </ExampleGroup> </> ); } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Switch.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Switch.tsx index 60e2df337c..6fb21b0120 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Switch.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Switch.tsx @@ -14,7 +14,6 @@ export default function SwitchExample() { title={trans("componentDoc.open")} config={{ value: "true", - disabled: false, }} compFactory={SwitchComp} /> @@ -22,7 +21,6 @@ export default function SwitchExample() { title={trans("componentDoc.close")} config={{ value: "false", - disabled: false, }} compFactory={SwitchComp} /> @@ -34,7 +32,16 @@ export default function SwitchExample() { }} compFactory={SwitchComp} /> + <Example + title="Hiding the Switch component" + config={{ + value: "true", + hidden: true, + }} + compFactory={SwitchComp} + /> </ExampleGroup> + <ExampleGroup title={trans("componentDoc.labelText")} description=""> <Example title={trans("componentDoc.leftLeftAlign")} @@ -84,6 +91,181 @@ export default function SwitchExample() { }} compFactory={SwitchComp} /> + <Example + title="Tooltip on Hover" + config={{ + value: "true", + label: { + text: trans("componentDoc.labelText"), + tooltip: "This is a tooltip on Switch component" + }, + }} + compFactory={SwitchComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Styling Properties" + description="The Following Examples Show the different Styling properties on the Switch Component." + > + <Example + title="Background Color, Border Radius,Style,Width,Color" + config={{ + value: "true", + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "borderStyle": "solid", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Margin & Padding" + config={{ + value: "true", + style: { + "background": "#00FFFF", + "border": "#3377FF", + "radius": "10px", + "borderWidth": "3px", + "margin": "10px", + "padding": "10px", + "borderStyle": "dashed", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Opacity - 0.2" + config={{ + value: "true", + style: { + "opacity": "0.2", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Opacity - 0.5" + width={500} + config={{ + value: "true", + style: { + "opacity": "0.5", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Opacity - 0.7" + config={{ + value: "true", + style: { + "opacity": "0.7", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Opacity - 1" + config={{ + value: "true", + style: { + "opacity": "1", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Rotation - 90deg" + width={500} + config={{ + value: "true", + style: { + "rotation": "90deg", + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Label - Text Color, Size, Weight, Font family, Border properties" + config={{ + value: "true", + labelStyle: { + "margin": "5px", + "padding": "5px", + "label": "#3377FF", + "textTransform": "Uppercase", + "textDecoration": "underline", + "textSize": "13px", + "textWeight": "bold", + "fontFamily": "Courier New", + "fontStyle": "Italic", + "border": "#36B389", + "borderStyle": "solid", + "borderWidth": "2px" + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Input Field Style" + config={{ + inputFieldStyle: { + "handle": "#D71616", + "unchecked": "#F7DF01", + "checked": "#36B389", + }, + }} + compFactory={SwitchComp} + /> + </ExampleGroup> + + <ExampleGroup + title="Animation Style" + description="The Following Examples Show different animations on the Switch Component." + > + <Example + title="Bounce Animation" + config={{ + value: "true", + animationStyle: { + "animation": "bounce", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Swing Animation" + config={{ + animationStyle: { + "animation": "swing", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SwitchComp} + /> + <Example + title="Tada Animation" + config={{ + value: "true", + animationStyle: { + "animation": "tada", + "animationDelay": "1s", + "animationDuration": "3s", + "animationIterationCount": "infinite" + }, + }} + compFactory={SwitchComp} + /> </ExampleGroup> </> ); diff --git a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Tree.tsx b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Tree.tsx index 376cc16e5b..af06f413ed 100644 --- a/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Tree.tsx +++ b/client/packages/lowcoder/src/pages/ComponentDoc/examples/selectInputComp/Tree.tsx @@ -2,7 +2,6 @@ import { TreeComp } from "comps/comps/treeComp/treeComp"; import { trans } from "i18n"; import Example from "../../common/Example"; import ExampleGroup from "../../common/ExampleGroup"; -import { InputFieldStyle } from "@lowcoder-ee/index.sdk"; export default function TreeExample() { const blackListConfig: string[] = ["options.manual.manual"]; diff --git a/client/packages/lowcoder/src/pages/common/copyModal.tsx b/client/packages/lowcoder/src/pages/common/copyModal.tsx index cf8bf658dd..595fba67f4 100644 --- a/client/packages/lowcoder/src/pages/common/copyModal.tsx +++ b/client/packages/lowcoder/src/pages/common/copyModal.tsx @@ -38,7 +38,7 @@ export function CopyModal(props: CopyModalProps) { title={trans("home.copyModalTitle", {name: appName})} open={visible} okButtonProps={{ disabled: !copyName }} - destroyOnClose={true} + destroyOnHidden={true} onCancel={close} showCancelButton showOkButton diff --git a/client/packages/lowcoder/src/pages/common/header.tsx b/client/packages/lowcoder/src/pages/common/header.tsx index 0b32ef3966..dc17ccb373 100644 --- a/client/packages/lowcoder/src/pages/common/header.tsx +++ b/client/packages/lowcoder/src/pages/common/header.tsx @@ -65,6 +65,13 @@ import UserApi from "@lowcoder-ee/api/userApi"; import { validateResponse } from "@lowcoder-ee/api/apiUtils"; import ProfileImage from "./profileImage"; +import { buildMaterialPreviewURL } from "@lowcoder-ee/util/materialUtils"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; + +import GitHubButton from 'react-github-btn'; +import { Row, Col } from "antd"; + + const { Countdown } = Statistic; const { Text } = Typography; @@ -321,6 +328,10 @@ const DropdownMenuStyled = styled(DropdownMenu)` } `; +const BrandLogo = styled.img` + height: 28px; +` + function HeaderProfile(props: { user: User }) { const { user } = props; const fetchingUser = useSelector(isFetchingUser); @@ -374,6 +385,7 @@ export default function Header(props: HeaderProps) { const dispatch = useDispatch(); const showAppSnapshot = useSelector(showAppSnapshotSelector); const {selectedSnapshot, isArchivedSnapshot} = useSelector(getSelectedAppSnapshot); + const brandingSettings = useSelector(getBrandingSetting); const { appType } = useContext(ExternalEditorContext); const [editName, setEditName] = useState(false); const [editing, setEditing] = useState(false); @@ -424,12 +436,17 @@ export default function Header(props: HeaderProps) { editorState.setEditorModeStatus(value); }; - const headerStart = ( <> <StyledLink onClick={() => history.push(ALL_APPLICATIONS_URL)}> {/* {REACT_APP_LOWCODER_SHOW_BRAND === 'true' ? REACT_APP_LOWCODER_CUSTOM_LOGO_SQUARE !== "" ? <img src={REACT_APP_LOWCODER_CUSTOM_LOGO_SQUARE } height={24} width={24} alt="logo" /> :<LogoIcon /> : <LogoHome />} */} - <LogoHome /> + { brandingSettings?.config_set?.logo + ? ( + Boolean(brandingSettings?.orgId) + ? <BrandLogo src={buildMaterialPreviewURL(brandingSettings?.config_set?.logo)} /> + : <BrandLogo src={brandingSettings?.config_set?.logo} /> + ) : <LogoHome /> + } </StyledLink> {editName ? ( <Wrapper> @@ -611,7 +628,7 @@ export default function Header(props: HeaderProps) { className="cypress-header-dropdown" placement="bottomRight" trigger={["click"]} - dropdownRender={() => ( + popupRender={() => ( <DropdownMenuStyled style={{ minWidth: "110px", borderRadius: "4px" }} onClick={(e) => { @@ -674,6 +691,9 @@ export default function Header(props: HeaderProps) { headerStart={headerStart} headerMiddle={headerMiddle} headerEnd={headerEnd} + style={{ + backgroundColor: brandingSettings?.config_set?.appHeaderColor + }} /> ); } @@ -681,21 +701,47 @@ export default function Header(props: HeaderProps) { // header in manager page export function AppHeader() { const user = useSelector(getUser); - const brandingConfig = useSelector(getBrandingConfig); + const brandingSettings = useSelector(getBrandingSetting); + const headerStart = ( <StyledLink onClick={() => history.push(ALL_APPLICATIONS_URL)}> {/* {REACT_APP_LOWCODER_SHOW_BRAND === 'true' ? REACT_APP_LOWCODER_CUSTOM_LOGO !== "" ? <img src={REACT_APP_LOWCODER_CUSTOM_LOGO} height={28} alt="logo" /> :<LogoWithName branding={!user.orgDev} /> : <LogoHome />} */} - <LogoHome /> + { brandingSettings?.config_set?.logo + ? ( + Boolean(brandingSettings?.orgId) + ? <BrandLogo src={buildMaterialPreviewURL(brandingSettings?.config_set?.logo)} /> + : <BrandLogo src={brandingSettings?.config_set?.logo} /> + ) : <LogoHome /> + } </StyledLink> ); - const headerEnd = <HeaderProfile user={user} />; + const headerEnd = ( + <Row align="middle" gutter={32}> + <Col style={{marginTop : "6px"}}> + {user.orgDev && ( + <GitHubButton + href="https://github.com/lowcoder-org/lowcoder" + data-color-scheme="no-preference: light; light: light; dark: dark;" + data-size="small" + data-show-count="true" + aria-label="Star lowcoder-org/lowcoder on GitHub" + > + Star + </GitHubButton> + )} + </Col> + <Col> + <HeaderProfile user={user} /> + </Col> + </Row> + ); return ( <LayoutHeader headerStart={headerStart} headerEnd={headerEnd} - style={ - user.orgDev ? {} : { backgroundColor: brandingConfig?.headerColor } - } + style={{ + backgroundColor: brandingSettings?.config_set?.appHeaderColor + }} /> ); } diff --git a/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx b/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx index 3170f98710..498a857f07 100644 --- a/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx +++ b/client/packages/lowcoder/src/pages/common/headerStartDropdown.tsx @@ -131,7 +131,7 @@ export function HeaderStartDropdown(props: { setEdit: () => void, isViewMarketpl placement="bottomLeft" trigger={["click"]} disabled={showAppSnapshot} - dropdownRender={() => ( + popupRender={() => ( <DropdownMenuStyled style={{ minWidth: "136px", maxWidth: "288px", borderRadius: "4px" }} onClick={(e) => { diff --git a/client/packages/lowcoder/src/pages/common/help.tsx b/client/packages/lowcoder/src/pages/common/help.tsx index 776dc86b34..dddf129d39 100644 --- a/client/packages/lowcoder/src/pages/common/help.tsx +++ b/client/packages/lowcoder/src/pages/common/help.tsx @@ -11,7 +11,7 @@ import { showCustomerServicePanel, showHelpDropdown, } from "@lowcoder-ee/pages/common/customerService"; -import React, { useCallback, useEffect, useState } from "react"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { createApplication } from "redux/reduxActions/applicationActions"; import history from "util/history"; @@ -28,6 +28,7 @@ import { QuestionIcon, UpgradeIcon } from "lowcoder-design"; import { trans } from "i18n"; import { localEnv } from "util/envUtils"; import { isPublicApplication } from "@lowcoder-ee/redux/selectors/applicationSelector"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; const StyledMenu = styled(DropdownMenu)<{ $edit: boolean | string }>` ${(props) => @@ -191,6 +192,22 @@ function HelpDropdownComp(props: HelpDropdownProps) { const [toolTipContent, setToolTipContent] = useState<React.ReactNode>(null); const [showDropdown, setShowDropdown] = useState(false); const isPublicApp = useSelector(isPublicApplication); + const brandingSettings = useSelector(getBrandingSetting); + + const showDocLink = useMemo(() => { + if (!Boolean(brandingSettings)) return Boolean(docHomeUrl); + return brandingSettings?.config_set?.showDocumentation; + }, [brandingSettings?.config_set?.showDocumentation]); + + const showSubmitIssueLink = useMemo(() => { + if (!Boolean(brandingSettings)) return Boolean(issueUrl); + return brandingSettings?.config_set?.submitIssue; + }, [brandingSettings?.config_set?.submitIssue]); + + const showWhatsNewLink = useMemo(() => { + if (!Boolean(brandingSettings)) return Boolean(changeLogDocUrl); + return brandingSettings?.config_set?.whatsNew; + }, [brandingSettings?.config_set?.whatsNew]); const closeTooltip = () => { // turn of tooltip @@ -255,6 +272,9 @@ function HelpDropdownComp(props: HelpDropdownProps) { ); return; case "docs": + if (brandingSettings?.config_set?.documentationLink) { + return window.open(brandingSettings?.config_set?.documentationLink); + } window.open(docHomeUrl); return; case "issue": @@ -267,6 +287,9 @@ function HelpDropdownComp(props: HelpDropdownProps) { props.setShowShortcutList?.(true); return; case "changeLog": + if (brandingSettings?.config_set?.whatsNewLink) { + return window.open(brandingSettings?.config_set?.whatsNewLink); + } window.open(changeLogDocUrl); return; } @@ -302,7 +325,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { ), } : null, - { + showDocLink ? { key: "docs", label: ( <ItemWrapper> @@ -310,8 +333,8 @@ function HelpDropdownComp(props: HelpDropdownProps) { <span>{trans("help.docs")}</span> </ItemWrapper> ), - }, - issueUrl + } : null, + showSubmitIssueLink ? { key: "issue", label: ( @@ -353,7 +376,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { ), } : null, - changeLogDocUrl + showWhatsNewLink ? { key: "changeLog", label: ( @@ -431,7 +454,7 @@ function HelpDropdownComp(props: HelpDropdownProps) { <ShortcutListPopup setShowShortcutList={props.setShowShortcutList} /> )} <Dropdown - dropdownRender={() => overlayMenus} + popupRender={() => overlayMenus} placement="topRight" trigger={["click"]} open={showDropdown} diff --git a/client/packages/lowcoder/src/pages/common/inviteDialog.tsx b/client/packages/lowcoder/src/pages/common/inviteDialog.tsx index d41ace8626..49498788ff 100644 --- a/client/packages/lowcoder/src/pages/common/inviteDialog.tsx +++ b/client/packages/lowcoder/src/pages/common/inviteDialog.tsx @@ -12,6 +12,9 @@ import { HelpText } from "components/HelpText"; import copyToClipboard from "copy-to-clipboard"; import { trans } from "i18n"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import Divider from "antd/es/divider"; +import Flex from "antd/es/flex"; +import Select from "antd/es/select"; const InviteButton = styled(TacoButton)` width: 76px; @@ -23,14 +26,36 @@ const StyledLoading = styled(WhiteLoading)` height: 170px; `; -function InviteContent(props: { inviteInfo: InviteInfo }) { - const { inviteInfo } = props; +function InviteContent(props: { inviteInfo: InviteInfo, onClose?: () => void }) { + const { inviteInfo, onClose } = props; const inviteLink = genInviteLink(inviteInfo?.inviteCode); const inviteText = trans("memberSettings.inviteText", { userName: inviteInfo.createUserName, organization: inviteInfo.invitedOrganizationName, inviteLink, }); + const [emails, setEmails] = useState<string[]>([]); + + const isValidEmail = (email: string) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); + + const sendInvitations = async () => { + const filteredEmails = emails.filter(isValidEmail); + if (!filteredEmails.length) { + return messageInstance.error(trans("memberSettings.noValidEmails")); + } + try { + const resp = await InviteApi.sendInvitations({emails: filteredEmails, orgId: inviteInfo.invitedOrganizationId}) + if (validateResponse(resp) && resp.data.success) { + messageInstance.success(trans('membersSettings.inviteByEmailSuccess')); + onClose?.(); + return; + } + throw new Error(trans('membersSettings.inviteByEmailError')); + } catch(e: any) { + messageInstance.error(e.message); + } + } + return ( <> <HelpText style={{ marginBottom: 16 }}>{trans("memberSettings.inviteUserHelp")}</HelpText> @@ -48,6 +73,34 @@ function InviteContent(props: { inviteInfo: InviteInfo }) { {trans("memberSettings.inviteCopyLink")} </InviteButton> </div> + <Divider style={{marginTop: '60px'}}/> + <HelpText style={{ marginBottom: 16 }}>{trans("memberSettings.inviteByEmailHelp")}</HelpText> + <CommonTextLabel>{trans("memberSettings.inviteByEmailLabel")}</CommonTextLabel> + <Select + mode="tags" + allowClear + open={false} + style={{ width: '100%', marginTop: '8px', marginBottom: '8px' }} + placeholder="Enter emails" + defaultValue={[]} + onChange={(value) => { + setEmails(value); + }} + options={[]} + showSearch={false} + suffixIcon={''} + /> + <Flex justify="end"> + <TacoButton + buttonType="primary" + onClick={() => { + sendInvitations(); + }} + disabled={!Boolean(emails?.length)} + > + {trans("memberSettings.inviteByEmailButton")} + </TacoButton> + </Flex> </> ); } @@ -95,13 +148,13 @@ function InviteDialog(props: { <CustomModal open={inviteDialogVisible} title={trans("memberSettings.inviteUser")} - destroyOnClose + destroyOnHidden onCancel={() => setInviteDialogVisible(false)} showOkButton={false} showCancelButton={false} width="440px" > - {!inviteInfo ? <StyledLoading size={20} /> : <InviteContent inviteInfo={inviteInfo} />} + {!inviteInfo ? <StyledLoading size={20} /> : <InviteContent inviteInfo={inviteInfo} onClose={() => setInviteDialogVisible(false)} />} </CustomModal> </> ); diff --git a/client/packages/lowcoder/src/pages/common/inviteLanding.tsx b/client/packages/lowcoder/src/pages/common/inviteLanding.tsx index 4ca5d08a97..10f4e36a0f 100644 --- a/client/packages/lowcoder/src/pages/common/inviteLanding.tsx +++ b/client/packages/lowcoder/src/pages/common/inviteLanding.tsx @@ -45,7 +45,7 @@ function InviteLanding(props: InviteLandingProp) { orgId = inviteInfo.invitedOrganizationId; const inviteState = inviteInfo ? { ...inviteInfo, invitationId } : { invitationId }; history.push({ - pathname: AUTH_LOGIN_URL, + pathname: `/org/${orgId}/auth/login`, state: { inviteInfo: inviteState, }, diff --git a/client/packages/lowcoder/src/pages/common/previewHeader.tsx b/client/packages/lowcoder/src/pages/common/previewHeader.tsx index f8d4cba2e0..bf73cd9803 100644 --- a/client/packages/lowcoder/src/pages/common/previewHeader.tsx +++ b/client/packages/lowcoder/src/pages/common/previewHeader.tsx @@ -26,6 +26,8 @@ import MobileOutlined from "@ant-design/icons/MobileOutlined"; import TabletOutlined from "@ant-design/icons/TabletOutlined"; import DesktopOutlined from "@ant-design/icons/DesktopOutlined"; import { DeviceOrientation, DeviceType, EditorContext } from "@lowcoder-ee/comps/editorState"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; +import { buildMaterialPreviewURL } from "@lowcoder-ee/util/materialUtils"; const HeaderFont = styled.div<{ $bgColor: string }>` font-weight: 500; @@ -111,6 +113,10 @@ const Wrapper = styled.div` } `; +const BrandLogo = styled.img` + height: 28px; +` + export function HeaderProfile(props: { user: User }) { const { user } = props; const fetchingUser = useSelector(isFetchingUser); @@ -149,14 +155,21 @@ const PreviewHeaderComp = () => { const isPublicApp = useSelector(isPublicApplication); const applicationId = useApplicationId(); const templateId = useSelector(getTemplateId); - const brandingConfig = useSelector(getBrandingConfig); + const brandingSettings = useSelector(getBrandingSetting); const [permissionDialogVisible, setPermissionDialogVisible] = useState(false); const isViewMarketplaceMode = params.viewMode === 'view_marketplace' || isPublicApp; const headerStart = ( <> <StyledLink onClick={() => !isPublicApp && history.push(ALL_APPLICATIONS_URL)}> - <LogoIcon branding={true} /> + {/* <LogoIcon branding={true} /> */} + { brandingSettings?.config_set?.logo + ? ( + Boolean(brandingSettings?.orgId) + ? <BrandLogo src={buildMaterialPreviewURL(brandingSettings?.config_set?.logo)} /> + : <BrandLogo src={brandingSettings?.config_set?.logo} /> + ) : <LogoIcon branding={true} /> + } </StyledLink> {isViewMarketplaceMode && ( <HeaderStartDropdown @@ -165,7 +178,7 @@ const PreviewHeaderComp = () => { /> )} {!isViewMarketplaceMode && ( - <HeaderFont $bgColor={brandingConfig?.headerColor ?? "#2c2c2c"}> + <HeaderFont $bgColor={brandingSettings?.config_set?.appHeaderColor ?? "#2c2c2c"}> {application && application.name} </HeaderFont> )} @@ -256,7 +269,7 @@ const PreviewHeaderComp = () => { headerStart={headerStart} headerMiddle={headerMiddle} headerEnd={headerEnd} - style={{ backgroundColor: brandingConfig?.headerColor }} + style={{ backgroundColor: brandingSettings?.config_set?.appHeaderColor }} /> ); }; diff --git a/client/packages/lowcoder/src/pages/common/profileDropdown.tsx b/client/packages/lowcoder/src/pages/common/profileDropdown.tsx index 992227bd1d..cf9e6d7929 100644 --- a/client/packages/lowcoder/src/pages/common/profileDropdown.tsx +++ b/client/packages/lowcoder/src/pages/common/profileDropdown.tsx @@ -150,7 +150,13 @@ export default function ProfileDropdown(props: DropDownProps) { dispatch(profileSettingModalVisible(true)); } else if (e.key === "logout") { // logout - dispatch(logoutAction({})); + const organizationId = localStorage.getItem('lowcoder_login_orgId'); + if (organizationId) { + localStorage.removeItem('lowcoder_login_orgId'); + } + dispatch(logoutAction({ + organizationId: organizationId || undefined, + })); } else if (e.keyPath.includes("switchOrg")) { if (e.key === "newOrganization") { // create new organization @@ -247,7 +253,7 @@ export default function ProfileDropdown(props: DropDownProps) { return ( <> <StyledDropdown - dropdownRender={() => menu} + popupRender={() => menu} trigger={["click"]} > <div> diff --git a/client/packages/lowcoder/src/pages/datasource/datasourceList.tsx b/client/packages/lowcoder/src/pages/datasource/datasourceList.tsx index f85ab88baf..2d7386fa09 100644 --- a/client/packages/lowcoder/src/pages/datasource/datasourceList.tsx +++ b/client/packages/lowcoder/src/pages/datasource/datasourceList.tsx @@ -164,7 +164,7 @@ export const DatasourceList = () => { open={isCreateFormShow} onCancel={() => showCreateForm(false)} activeStepKey={"type"} - destroyOnClose={true} + destroyOnHidden={true} width="888px" steps={[ { diff --git a/client/packages/lowcoder/src/pages/datasource/datasourceModal.tsx b/client/packages/lowcoder/src/pages/datasource/datasourceModal.tsx index 3c16ebe06c..5808fe1462 100644 --- a/client/packages/lowcoder/src/pages/datasource/datasourceModal.tsx +++ b/client/packages/lowcoder/src/pages/datasource/datasourceModal.tsx @@ -339,7 +339,7 @@ export function CreateDataSourceModal(props: CreateDataSourceModalProps) { return ( <StepModal {...otherProps} - destroyOnClose={true} + destroyOnHidden={true} onStepChange={setActiveStepKey} activeStepKey={activeStepKey} width="888px" diff --git a/client/packages/lowcoder/src/pages/editor/AppEditor.tsx b/client/packages/lowcoder/src/pages/editor/AppEditor.tsx index 76183556d6..0928438920 100644 --- a/client/packages/lowcoder/src/pages/editor/AppEditor.tsx +++ b/client/packages/lowcoder/src/pages/editor/AppEditor.tsx @@ -1,4 +1,5 @@ import { AppPathParams, AppTypeEnum } from "constants/applicationConstants"; +import { ApplicationDSLType } from "constants/applicationConstants"; import { Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useParams } from "react-router"; @@ -28,9 +29,6 @@ import { DatasourceApi } from "api/datasourceApi"; import { useRootCompInstance } from "./useRootCompInstance"; import EditorSkeletonView from "./editorSkeletonView"; import {ErrorBoundary, FallbackProps} from 'react-error-boundary'; -import { ALL_APPLICATIONS_URL } from "@lowcoder-ee/constants/routesURL"; -import history from "util/history"; -import Flex from "antd/es/flex"; import React from "react"; import dayjs from "dayjs"; import { currentApplication } from "@lowcoder-ee/redux/selectors/applicationSelector"; @@ -50,6 +48,8 @@ const AppEditorInternalView = lazy( .then(moduleExports => ({default: moduleExports.AppEditorInternalView})) ); +const ErrorFallback = lazy(() => import("components/ErrorFallback")); + const AppEditor = React.memo(() => { const dispatch = useDispatch(); const params = useParams<AppPathParams>(); @@ -61,27 +61,18 @@ const AppEditor = React.memo(() => { const application = useSelector(currentApplication); const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); - const [elements, setElements] = useState({ elements: [], total: 1 }) + const [elements, setElements] = useState({ elements: [], total: 1 }); const isLowcoderCompLoading = useSelector((state: AppState) => state.npmPlugin.loading.lowcoderComps); - const isUserViewMode = useMemo( - () => params.viewMode ? isUserViewModeCheck : true, - [params.viewMode, isUserViewModeCheck] - ); - const applicationId = useMemo( - () => params.applicationId || window.location.pathname.split("/")[2], - [params.applicationId, window.location.pathname] - ); - const paramViewMode = useMemo( - () => params.viewMode || window.location.pathname.split("/")[3], - [params.viewMode, window.location.pathname] - ); - const viewMode = useMemo( - () => (paramViewMode === "view" || paramViewMode === "admin") + // Memoize selectors to prevent unnecessary re-renders + const selectors = useMemo(() => ({ + isUserViewMode: params.viewMode ? isUserViewModeCheck : true, + applicationId: params.applicationId || window.location.pathname.split("/")[2], + paramViewMode: params.viewMode || window.location.pathname.split("/")[3], + viewMode: (params.viewMode === "view" || params.viewMode === "admin") ? "published" - : paramViewMode === "view_marketplace" ? "view_marketplace" : "editing", - [paramViewMode] - ); + : params.viewMode === "view_marketplace" ? "view_marketplace" : "editing", + }), [params.viewMode, params.applicationId, window.location.pathname, isUserViewModeCheck]); const firstRendered = useRef(false); const orgId = useMemo(() => currentUser.currentOrgId, [currentUser.currentOrgId]); @@ -90,7 +81,22 @@ const AppEditor = React.memo(() => { const [blockEditing, setBlockEditing] = useState<boolean>(false); const [fetchingAppDetails, setFetchingAppDetails] = useState<boolean>(false); - setGlobalSettings({ applicationId, isViewMode: paramViewMode === "view" }); + // Cleanup function for state management + const cleanupState = useCallback(() => { + setElements({ elements: [], total: 1 }); + setBlockEditing(false); + setFetchingAppDetails(false); + setAppError(''); + setIsDataSourcePluginRegistered(false); + }, []); + + // Set global settings with cleanup + useEffect(() => { + setGlobalSettings({ applicationId: selectors.applicationId, isViewMode: selectors.paramViewMode === "view" }); + return () => { + clearGlobalSettings(); + }; + }, [selectors.applicationId, selectors.paramViewMode]); if (!firstRendered.current) { perfClear(); @@ -104,15 +110,16 @@ const AppEditor = React.memo(() => { useUnmount(() => { clearGlobalSettings(); + cleanupState(); }); - // fetch dsl + // fetch dsl with cleanup const [appInfo, setAppInfo] = useState<AppSummaryInfo>({ id: "", appType: AppTypeEnum.Application, }); - const readOnly = isUserViewMode; + const readOnly = selectors.isUserViewMode; const compInstance = useRootCompInstance( appInfo, readOnly, @@ -120,6 +127,15 @@ const AppEditor = React.memo(() => { blockEditing, ); + // Cleanup for compInstance + useEffect(() => { + return () => { + if (compInstance?.comp) { + compInstance.comp = null; + } + }; + }, [compInstance]); + useEffect(() => { if (currentUser && application) { const lastEditedAt = dayjs(application?.lastEditedAt); @@ -129,41 +145,38 @@ const AppEditor = React.memo(() => { } }, [application, currentUser]); - // fetch dataSource and plugin + // fetch dataSource and plugin with cleanup useEffect(() => { - if (!orgId || paramViewMode !== "edit") { + if (!orgId || selectors.paramViewMode !== "edit") { return; } dispatch(fetchDataSourceTypes({ organizationId: orgId })); dispatch(fetchFolderElements({})); - }, [dispatch, orgId, paramViewMode]); + }, [dispatch, orgId, selectors.paramViewMode]); useEffect(() => { - if (applicationId && paramViewMode === "edit") { - dispatch(fetchDataSourceByApp({ applicationId: applicationId })); + if (selectors.applicationId && selectors.paramViewMode === "edit") { + dispatch(fetchDataSourceByApp({ applicationId: selectors.applicationId })); dispatch(fetchQueryLibraryDropdown()); } - }, [dispatch, applicationId, paramViewMode]); + }, [dispatch, selectors.applicationId, selectors.paramViewMode]); const fetchJSDataSourceByApp = useCallback(() => { fetchJsDSPaginationByApp({ - appId: applicationId, + appId: selectors.applicationId, pageNum: currentPage, pageSize: pageSize }).then((res) => { - setElements({elements: [], total: res.total || 1}) + setElements({elements: [], total: res.total || 1}); res.data!.forEach((i: any) => { registryDataSourcePlugin(i.type, i.id, i.pluginDefinition); }); setIsDataSourcePluginRegistered(true); + }).catch((error) => { + setAppError(error.message || 'Failed to fetch JS data source'); }); - dispatch(setShowAppSnapshot(false)); }, [ - applicationId, - registryDataSourcePlugin, - setIsDataSourcePluginRegistered, - setShowAppSnapshot, - dispatch, + selectors.applicationId, currentPage, pageSize ]); @@ -176,10 +189,11 @@ const AppEditor = React.memo(() => { const fetchApplication = useCallback(() => { setFetchingAppDetails(true); + dispatch( fetchApplicationInfo({ - type: viewMode, - applicationId: applicationId, + type: selectors.viewMode as ApplicationDSLType, + applicationId: selectors.applicationId, onSuccess: (info) => { perfMark(MarkAppDSLLoaded); const runJsInHost = @@ -195,12 +209,12 @@ const AppEditor = React.memo(() => { setFetchingAppDetails(false); }, onError: (errorMessage) => { - setAppError(errorMessage); + setAppError(errorMessage || 'Failed to fetch application info'); setFetchingAppDetails(false); } }) ); - }, [viewMode, applicationId, dispatch, fetchJSDataSourceByApp]); + }, [dispatch, selectors.viewMode, selectors.applicationId, fetchJSDataSourceByApp]); useEffect(() => { if(!isLowcoderCompLoading) { @@ -209,45 +223,18 @@ const AppEditor = React.memo(() => { } }, [isLowcoderCompLoading, fetchApplication]); - const fallbackUI = useMemo(() => ( - <Flex align="center" justify="center" vertical style={{ - height: '300px', - width: '400px', - margin: '0 auto', - }}> - <h4 style={{margin: 0}}>Something went wrong while displaying this webpage</h4> - <button onClick={() => history.push(ALL_APPLICATIONS_URL)} style={{background: '#4965f2',border: '1px solid #4965f2', color: '#ffffff',borderRadius:'6px'}}>Go to Apps</button> - </Flex> - ), []); - if (Boolean(appError)) { - return ( - <Flex align="center" justify="center" vertical style={{ - height: '300px', - width: '400px', - margin: '0 auto', - }}> - <h4>{appError}</h4> - <button onClick={() => history.push(ALL_APPLICATIONS_URL)} style={{background: '#4965f2',border: '1px solid #4965f2', color: '#ffffff',borderRadius:'6px'}}>Back to Home</button> - </Flex> - ) + return <ErrorFallback errorMessage={appError} /> } return ( - <ErrorBoundary fallback={fallbackUI}> - {/*<PaginationComp*/} - {/* currentPage={currentPage}*/} - {/* pageSize={pageSize}*/} - {/* setPageSize={setPageSize}*/} - {/* setCurrentPage={setCurrentPage}*/} - {/* total={elements.total}*/} - {/*/>*/} + <ErrorBoundary fallback={<ErrorFallback />}> {showAppSnapshot ? ( <Suspense fallback={<EditorSkeletonView />}> <AppSnapshot currentAppInfo={{ ...appInfo, - dsl: compInstance.comp?.toJsonValue() || {}, + dsl: compInstance?.comp?.toJsonValue() || {}, }} /> </Suspense> diff --git a/client/packages/lowcoder/src/pages/editor/LeftContent.tsx b/client/packages/lowcoder/src/pages/editor/LeftContent.tsx index bace1305fd..126024d650 100644 --- a/client/packages/lowcoder/src/pages/editor/LeftContent.tsx +++ b/client/packages/lowcoder/src/pages/editor/LeftContent.tsx @@ -451,7 +451,7 @@ export const LeftContent = (props: LeftContentProps) => { onOk={() => setShowData([])} cancelButtonProps={{ style: { display: 'none' } }} closable={false} - destroyOnClose={true} + destroyOnHidden={true} maskClosable={false} okText={trans("modalComp.close")} > @@ -611,4 +611,4 @@ export const LeftContent = (props: LeftContentProps) => { </LeftContentTabs> </LeftContentWrapper> ); -}; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/editor/LeftLayersContent.tsx b/client/packages/lowcoder/src/pages/editor/LeftLayersContent.tsx index 630609f1eb..907a78867e 100644 --- a/client/packages/lowcoder/src/pages/editor/LeftLayersContent.tsx +++ b/client/packages/lowcoder/src/pages/editor/LeftLayersContent.tsx @@ -538,7 +538,7 @@ export const LeftLayersContent = (props: LeftLayersContentProps) => { <div style={{margin:"10px 0px"}}> <Flex gap="small" vertical> <CustomDropdown - dropdownRender={() => ( + popupRender={() => ( <Menu items={items} onClick={({ key }) => { diff --git a/client/packages/lowcoder/src/pages/editor/appEditorInternal.tsx b/client/packages/lowcoder/src/pages/editor/appEditorInternal.tsx index 8b006a504e..161fadf165 100644 --- a/client/packages/lowcoder/src/pages/editor/appEditorInternal.tsx +++ b/client/packages/lowcoder/src/pages/editor/appEditorInternal.tsx @@ -1,7 +1,7 @@ import { AppSummaryInfo, updateApplication } from "redux/reduxActions/applicationActions"; import { useDispatch, useSelector } from "react-redux"; import { getExternalEditorState } from "redux/selectors/configSelectors"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { ExternalEditorContext, ExternalEditorContextState, @@ -46,9 +46,16 @@ function useSaveComp( const [prevComp, setPrevComp] = useState<Comp>(); const [prevJsonStr, setPrevJsonStr] = useState<string>(); const [prevAppId, setPrevAppId] = useState<string>(); + const mountedRef = useRef(true); useEffect(() => { - if (readOnly || blockEditing) { + return () => { + mountedRef.current = false; + }; + }, []); + + useEffect(() => { + if (readOnly || blockEditing || !mountedRef.current) { return; } if (!comp || comp === prevComp) { @@ -73,7 +80,7 @@ function useSaveComp( } // the first time is a normal change, the latter is the manual update - if (prevComp) { + if (prevComp && mountedRef.current) { dispatch( updateApplication({ applicationId: applicationId, @@ -86,7 +93,13 @@ function useSaveComp( setPrevComp(comp); setPrevJsonStr(curJsonStr); setPrevAppId(applicationId); - }, [comp, applicationId, readOnly, dispatch]); + }, [comp, applicationId, readOnly, dispatch, blockEditing, prevComp, prevJsonStr, prevAppId]); + + useUnmount(() => { + setPrevComp(undefined); + setPrevJsonStr(undefined); + setPrevAppId(undefined); + }); } const exportAppToJson = (appDSL?: any) => { @@ -94,10 +107,10 @@ const exportAppToJson = (appDSL?: any) => { const id = `t--export-app-link`; const existingLink = document.getElementById(id); - existingLink && existingLink.remove(); + existingLink?.remove(); + const link = document.createElement("a"); const time = new Date().getTime(); - const applicationName = `test_app_${time}`; const exportObj = { applicationInfo: { @@ -109,18 +122,22 @@ const exportAppToJson = (appDSL?: any) => { }, applicationDSL: appDSL, }; + const blob = new Blob([JSON.stringify(exportObj)], { type: "application/json", }); const url = URL.createObjectURL(blob); - link.href = url; - link.download = applicationName + ".json"; - link.id = id; - document.body.appendChild(link); - link.click(); - link.remove(); - URL.revokeObjectURL(url); - return; + + try { + link.href = url; + link.download = applicationName + ".json"; + link.id = id; + document.body.appendChild(link); + link.click(); + } finally { + link.remove(); + URL.revokeObjectURL(url); + } } interface AppEditorInternalViewProps { @@ -138,21 +155,32 @@ export const AppEditorInternalView = React.memo((props: AppEditorInternalViewPro const isPublicApp = useSelector(isPublicApplication); const dispatch = useDispatch(); const { readOnly, blockEditing, appInfo, compInstance, fetchApplication } = props; + const mountedRef = useRef(true); const [externalEditorState, setExternalEditorState] = useState<ExternalEditorContextState>({ changeExternalState: (state: Partial<ExternalEditorContextState>) => { - dispatch(setEditorExternalStateAction(state)); + if (mountedRef.current) { + dispatch(setEditorExternalStateAction(state)); + } }, applicationId: appInfo.id, appType: AppTypeEnum.Application, }); const exportPublicAppToJson = useCallback(() => { - const appDsl = compInstance.comp?.toJsonValue(); + const appDsl = compInstance?.comp?.toJsonValue(); exportAppToJson(appDsl); - }, [compInstance.comp]) + }, [compInstance?.comp]); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); useEffect(() => { + if (!mountedRef.current) return; + setExternalEditorState((s) => ({ ...s, history: compInstance?.history, @@ -173,12 +201,19 @@ export const AppEditorInternalView = React.memo((props: AppEditorInternalViewPro appInfo.appType, appInfo.id, blockEditing, fetchApplication, + isPublicApp, ]); useEffect(() => { + if (!mountedRef.current) return; + message.config({ top: isUserViewMode ? 0 : 48, }); + + return () => { + message.destroy(); + }; }, [isUserViewMode]); useSaveComp(appInfo.id, readOnly, compInstance, blockEditing); @@ -188,16 +223,33 @@ export const AppEditorInternalView = React.memo((props: AppEditorInternalViewPro const currentUser = useSelector(getCurrentUser); + useUnmount(() => { + setExternalEditorState({ + changeExternalState: () => {}, + applicationId: "", + appType: AppTypeEnum.Application, + }); + }); + return loading ? ( window.location.pathname.split("/")[3] === "admin" ? <div></div> : <EditorSkeletonView /> ) : ( - <ConfigProvider locale={getAntdLocale(currentUser.uiLanguage)}> + <ConfigProvider + locale={getAntdLocale(currentUser.uiLanguage)} + theme={{ + token: { + fontFamily: `-apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, "Segoe UI", "PingFang SC", + "Microsoft Yahei", "Hiragino Sans GB", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol", "Noto Color Emoji"`, + }, + }} + > <ExternalEditorContext.Provider value={externalEditorState}> {compInstance?.comp?.getView()} </ExternalEditorContext.Provider> </ConfigProvider> ); }, (prevProps, nextProps) => { - return isEqual(prevProps, nextProps) + return isEqual(prevProps, nextProps); }); diff --git a/client/packages/lowcoder/src/pages/editor/codeEditorPanel.tsx b/client/packages/lowcoder/src/pages/editor/codeEditorPanel.tsx index 87454105d9..dbb07d685f 100644 --- a/client/packages/lowcoder/src/pages/editor/codeEditorPanel.tsx +++ b/client/packages/lowcoder/src/pages/editor/codeEditorPanel.tsx @@ -1,5 +1,5 @@ import styled from "styled-components"; -import { ReactNode, useContext, useMemo, useRef, useState } from "react"; +import { ReactNode, useContext, useMemo, useRef, useState, useCallback, useEffect } from "react"; import { Layers } from "../../constants/Layers"; import { CodeEditorOpenIcon, CodeEditorPinnedIcon, CodeEditorUnPinnedIcon } from "lowcoder-design"; import { CodeEditorCloseIcon } from "lowcoder-design"; @@ -12,6 +12,7 @@ import { getPanelStyle, savePanelStyle } from "../../util/localStorageUtil"; import { CompNameContext } from "../../comps/editorState"; import { isEmpty } from "lodash"; import { trans } from "i18n"; +import { useUnmount } from "react-use"; const Wrapper = styled.div` max-width: 60vw; @@ -136,6 +137,7 @@ export const CodeEditorPanel = (props: { const draggableRef = useRef<HTMLDivElement>(null); const [unDraggable, setUnDraggable] = useState(true); const [pinned, setPinned] = useState(false); + const mountedRef = useRef(true); const [bounds, setBounds] = useState({ left: 0, @@ -144,13 +146,71 @@ export const CodeEditorPanel = (props: { right: 0, }); - const panelStyle = useMemo(() => getPanelStyle(), [props.editor]); + const panelStyle = useMemo(() => getPanelStyle(), []); const [size, setSize] = useState({ w: panelStyle.codeEditor.w, h: panelStyle.codeEditor.h }); const [visible, setVisible] = useState(false); const compName = useContext(CompNameContext); + const handleMouseOver = useCallback(() => { + if (mountedRef.current) { + setUnDraggable(false); + } + }, []); + + const handleMouseOut = useCallback(() => { + if (mountedRef.current) { + setUnDraggable(true); + } + }, []); + + const handleDragStart = useCallback((event: any, uiData: any) => { + if (!mountedRef.current) return; + + const { clientWidth, clientHeight } = window.document.documentElement; + const targetRect = draggableRef.current?.getBoundingClientRect(); + if (!targetRect) { + return; + } + setBounds({ + left: -targetRect.left + uiData.x, + right: clientWidth - (targetRect.right - uiData.x), + top: -targetRect.top + uiData.y, + bottom: clientHeight - (targetRect.bottom - uiData.y), + }); + }, []); + + const handleResize = useCallback((event: any, { size }: { size: { width: number; height: number } }) => { + if (mountedRef.current) { + setSize({ w: size.width, h: size.height }); + } + }, []); + + const handleResizeStop = useCallback(() => { + if (mountedRef.current) { + savePanelStyle({ ...panelStyle, codeEditor: { w: size.w, h: size.h } }); + } + }, [panelStyle, size.w, size.h]); + + const handleVisibleChange = useCallback((visible: boolean) => { + if (mountedRef.current) { + setVisible(visible); + } + }, []); + + const handleAfterVisibleChange = useCallback((visible: boolean) => { + if (mountedRef.current) { + props.onVisibleChange(visible); + } + }, [props.onVisibleChange]); + + useUnmount(() => { + mountedRef.current = false; + setVisible(false); + props.onVisibleChange(false); + }); + return ( <Trigger popupVisible={visible} @@ -159,50 +219,37 @@ export const CodeEditorPanel = (props: { popupStyle={{ opacity: 1, display: visible ? "block" : "none" }} maskClosable={!pinned} mask={true} - onPopupVisibleChange={(visible) => setVisible(visible)} - afterPopupVisibleChange={(visible) => props.onVisibleChange(visible)} + onPopupVisibleChange={handleVisibleChange} + afterPopupVisibleChange={handleAfterVisibleChange} getPopupContainer={(node: any) => node.parentNode.parentNode} popup={() => ( <Draggable + nodeRef={draggableRef} positionOffset={{ x: "-50%", y: "-50%" }} disabled={unDraggable} bounds={bounds} - onStart={(event, uiData) => { - const { clientWidth, clientHeight } = window.document.documentElement; - const targetRect = draggableRef.current?.getBoundingClientRect(); - if (!targetRect) { - return; - } - setBounds({ - left: -targetRect.left + uiData.x, - right: clientWidth - (targetRect.right - uiData.x), - top: -targetRect.top + uiData.y, - bottom: clientHeight - (targetRect.bottom - uiData.y), - }); - }} + onStart={handleDragStart} > <Resizable width={size.w} height={size.h} - onResize={(event, { size }) => setSize({ w: size.width, h: size.height })} - onResizeStop={() => - savePanelStyle({ ...panelStyle, codeEditor: { w: size.w, h: size.h } }) - } + onResize={handleResize} + onResizeStop={handleResizeStop} handle={Handle} resizeHandles={["s", "n", "w", "e", "sw", "nw", "se", "ne"]} minConstraints={[480, 360]} > <Wrapper ref={draggableRef} style={{ width: size.w + "px", height: size.h + "px" }}> <HeaderWrapper - onMouseOver={() => setUnDraggable(false)} - onMouseOut={() => setUnDraggable(true)} + onMouseOver={handleMouseOver} + onMouseOut={handleMouseOut} > <TitleWrapper> <StyledDragIcon /> {[compName, ...(props.breadcrumb ?? [])].filter((t) => !isEmpty(t)).join(" / ")} </TitleWrapper> <Buttons> - <PinButton onClick={() => setPinned(!pinned) }> + <PinButton onClick={() => setPinned(!pinned)}> {pinned ? <CodeEditorPinnedIcon/> : <CodeEditorUnPinnedIcon/>} </PinButton> <CloseButton onClick={() => setVisible(false)}> @@ -211,7 +258,6 @@ export const CodeEditorPanel = (props: { </CloseButton> </Buttons> </HeaderWrapper> - <BodyWrapper>{props.editor}</BodyWrapper> </Wrapper> </Resizable> diff --git a/client/packages/lowcoder/src/pages/editor/editorConstants.tsx b/client/packages/lowcoder/src/pages/editor/editorConstants.tsx index 0ff544d1c4..a931455d4b 100644 --- a/client/packages/lowcoder/src/pages/editor/editorConstants.tsx +++ b/client/packages/lowcoder/src/pages/editor/editorConstants.tsx @@ -1,4 +1,5 @@ import { UICompType } from "comps/uiCompRegistry"; +import { memo } from "react"; import { LeftCommon, AudioCompIconSmall, @@ -85,7 +86,6 @@ import { ShapesCompIconSmall, GanttCompIconSmall, KanbanCompIconSmall, - CandlestickChartCompIconSmall, FunnelChartCompIconSmall, GaugeChartCompIconSmall, @@ -106,120 +106,204 @@ import { GraphChartCompIconSmall, } from "lowcoder-design"; +// Memoize icon components to prevent unnecessary re-renders +const MemoizedIcon = memo(({ Icon }: { Icon: React.ComponentType }) => <Icon />); + +// Group related icons for better organization +const chartIcons = { + basicChart: ChartCompIconSmall, + barChart: ChartCompIconSmall, + lineChart: ChartCompIconSmall, + pieChart: ChartCompIconSmall, + scatterChart: ChartCompIconSmall, + funnelChart: FunnelChartCompIconSmall, + gaugeChart: GaugeChartCompIconSmall, + sankeyChart: SankeyChartCompIconSmall, + candleStickChart: CandlestickChartCompIconSmall, + radarChart: RadarChartCompIconSmall, + heatmapChart: HeatmapChartCompIconSmall, + graphChart: GraphChartCompIconSmall, + treeChart: TreeChartCompIconSmall, + treemapChart: TreemapChartCompIconSmall, + sunburstChart: SunburstChartCompIconSmall, + themeriverChart: ThemeriverChartCompIconSmall, +}; + +const formIcons = { + input: InputCompIconSmall, + textArea: TextAreaCompIconSmall, + numberInput: NumberInputCompIconSmall, + password: PasswordCompIconSmall, + select: SelectCompIconSmall, + multiSelect: MultiSelectCompIconSmall, + radio: RadioCompIconSmall, + checkbox: CheckboxCompIconSmall, + switch: SwitchCompIconSmall, + slider: SliderCompIconSmall, + rangeSlider: RangeSliderCompIconSmall, + date: DateCompIconSmall, + dateRange: DateRangeCompIconSmall, + time: TimeCompIconSmall, + timeRange: TimeRangeCompIconSmall, +}; + +const layoutIcons = { + container: ContainerCompIconSmall, + grid: GridCompIconSmall, + columnLayout: ColumnLayoutCompIconSmall, + responsiveLayout: ResponsiveLayoutCompIconSmall, + splitLayout: SplitLayoutCompIconSmall, + pageLayout: PageLayoutCompIconSmall, + tabbedContainer: TabbedContainerCompIconSmall, + collapsibleContainer: CollapsibleContainerCompIconSmall, + form: FormCompIconSmall, +}; + +const mediaIcons = { + image: ImageCompIconSmall, + video: VideoCompIconSmall, + audio: AudioCompIconSmall, + iframe: IFrameCompIconSmall, + file: UploadCompIconSmall, + fileViewer: FileViewerCompIconSmall, +}; + +// Create a type-safe mapping of component types to their icons export const CompStateIcon: { [key in UICompType]: JSX.Element; } = { - audio: <AudioCompIconSmall />, - autocomplete: <AutoCompleteCompIconSmall />, - button: <ButtonCompIconSmall />, - calendar: <CalendarCompIconSmall />, - carousel: <CarouselCompIconSmall />, - cascader: <CascaderCompIconSmall />, - chart: <ChartCompIconSmall />, - checkbox: <CheckboxCompIconSmall />, - collapsibleContainer: <CollapsibleContainerCompIconSmall />, - columnLayout: <ColumnLayoutCompIconSmall />, - comment: <CommentCompIconSmall />, - container: <ContainerCompIconSmall />, - controlButton: <IconButtonCompIconSmall />, - custom: <CustomCompIconSmall />, - date: <DateCompIconSmall />, - dateRange: <DateRangeCompIconSmall />, - divider: <DividerCompIconSmall />, - drawer: <DrawerCompIconSmall />, - dropdown: <DropdownCompIconSmall />, - file: <UploadCompIconSmall />, - fileViewer: <FileViewerCompIconSmall />, - floatTextContainer: <FloatingTextCompIconSmall />, - form: <FormCompIconSmall />, - grid: <GridCompIconSmall />, - icon: <IconCompIconSmall />, - iframe: <IFrameCompIconSmall />, - image: <ImageCompIconSmall />, - imageEditor: <ImageEditorCompIconSmall />, - input: <InputCompIconSmall />, - jsonEditor: <JsonEditorCompIconSmall />, - jsonExplorer: <JsonExplorerCompIconSmall />, - jsonLottie: <LottieAnimationCompIconSmall />, - jsonSchemaForm: <JsonFormCompIconSmall />, - link: <LinkCompIconSmall />, - listView: <ListViewCompIconSmall />, - meeting: <VideoMeetingRoomCompIconSmall />, - mention: <MentionCompIconSmall />, - mermaid: <MermaidCompIconSmall />, - modal: <ModalCompIconSmall />, - module: <ModuleIconSmall/>, - moduleContainer: <ModuleIconSmall/>, // Placeholder or specify if there's a dedicated icon - multiSelect: <MultiSelectCompIconSmall />, - navigation: <NavComIconSmall />, - numberInput: <NumberInputCompIconSmall />, - npmPlugin: <LeftCommon />, // Placeholder or specify if there's a dedicated icon - pageLayout: <PageLayoutCompIconSmall />, - password: <PasswordCompIconSmall />, - progress: <ProgressCompIconSmall />, - progressCircle: <ProcessCircleCompIconSmall />, - qrCode: <QRCodeCompIconSmall />, - radio: <RadioCompIconSmall />, - rangeSlider: <RangeSliderCompIconSmall />, - rating: <RatingCompIconSmall />, - responsiveLayout: <ResponsiveLayoutCompIconSmall />, - splitLayout: <SplitLayoutCompIconSmall />, - richTextEditor: <RichTextEditorCompIconSmall />, - scanner: <ScannerCompIconSmall />, - segmentedControl: <SegmentedCompIconSmall />, - select: <SelectCompIconSmall />, - sharingcomponent: <VideoScreenshareCompIconSmall />, - signature: <SignatureCompIconSmall />, - slider: <SliderCompIconSmall />, - step: <StepCompIconSmall />, - switch: <SwitchCompIconSmall />, - tabbedContainer: <TabbedContainerCompIconSmall />, - table: <TableCompIconSmall />, - text: <TextCompIconSmall />, - textArea: <TextAreaCompIconSmall />, - time: <TimeCompIconSmall />, - timeRange: <TimeRangeCompIconSmall />, - timeline: <TimeLineCompIconSmall />, - toggleButton: <ToggleButtonCompIconSmall />, - tour: <TourCompIconSmall />, - tree: <TreeDisplayCompIconSmall />, - treeSelect: <TreeSelectCompIconSmall />, - video: <VideoCompIconSmall />, - videocomponent: <VideoCameraStreamCompIconSmall />, + // Chart components + ...Object.entries(chartIcons).reduce((acc, [key, Icon]) => ({ + ...acc, + [key]: <MemoizedIcon Icon={Icon} />, + }), {}), - hillchart: <HillchartCompIconSmall/>, - ganttChart: <GanttCompIconSmall/>, - kanban: <KanbanCompIconSmall/>, - openLayersGeoMap: <GeoMapLayersCompIconSmall/>, - chartsGeoMap: <GeoMapChartsCompIconSmall/>, - bpmnEditor: <BPMNEditorCompIconSmall/>, - turnstileCaptcha: <TurnstileCaptchaCompIconSmall/>, - pivotTable: <PivotTableCompIconSmall/>, - funnelChart: <FunnelChartCompIconSmall />, - gaugeChart: <GaugeChartCompIconSmall />, - sankeyChart : <SankeyChartCompIconSmall />, - candleStickChart : <CandlestickChartCompIconSmall />, - radarChart : <RadarChartCompIconSmall />, - heatmapChart : <HeatmapChartCompIconSmall />, - graphChart : <GraphChartCompIconSmall/>, - treeChart : <TreeChartCompIconSmall />, - treemapChart : <TreemapChartCompIconSmall />, - sunburstChart : <SunburstChartCompIconSmall />, - themeriverChart : <ThemeriverChartCompIconSmall />, - basicChart : <ChartCompIconSmall />, + // Form components + ...Object.entries(formIcons).reduce((acc, [key, Icon]) => ({ + ...acc, + [key]: <MemoizedIcon Icon={Icon} />, + }), {}), - barChart : <ChartCompIconSmall />, - lineChart : <ChartCompIconSmall />, - pieChart : <ChartCompIconSmall />, - scatterChart : <ChartCompIconSmall />, + // Layout components + ...Object.entries(layoutIcons).reduce((acc, [key, Icon]) => ({ + ...acc, + [key]: <MemoizedIcon Icon={Icon} />, + }), {}), - avatar: <AvatarCompIconSmall />, - avatarGroup: <AvatarGroupCompIconSmall />, - colorPicker: <ColorPickerCompIconSmall />, - floatingButton: <FloatingButtonCompIconSmall />, - transfer: <TransferCompIconSmall />, - card: <CardCompIconSmall />, - timer: <TimeRangeCompIconSmall/>, + // Media components + ...Object.entries(mediaIcons).reduce((acc, [key, Icon]) => ({ + ...acc, + [key]: <MemoizedIcon Icon={Icon} />, + }), {}), - shape: <ShapesCompIconSmall />, -}; + // Individual components + autocomplete: <MemoizedIcon Icon={AutoCompleteCompIconSmall} />, + button: <MemoizedIcon Icon={ButtonCompIconSmall} />, + calendar: <MemoizedIcon Icon={CalendarCompIconSmall} />, + carousel: <MemoizedIcon Icon={CarouselCompIconSmall} />, + cascader: <MemoizedIcon Icon={CascaderCompIconSmall} />, + comment: <MemoizedIcon Icon={CommentCompIconSmall} />, + controlButton: <MemoizedIcon Icon={IconButtonCompIconSmall} />, + custom: <MemoizedIcon Icon={CustomCompIconSmall} />, + divider: <MemoizedIcon Icon={DividerCompIconSmall} />, + drawer: <MemoizedIcon Icon={DrawerCompIconSmall} />, + dropdown: <MemoizedIcon Icon={DropdownCompIconSmall} />, + floatTextContainer: <MemoizedIcon Icon={FloatingTextCompIconSmall} />, + icon: <MemoizedIcon Icon={IconCompIconSmall} />, + imageEditor: <MemoizedIcon Icon={ImageEditorCompIconSmall} />, + jsonEditor: <MemoizedIcon Icon={JsonEditorCompIconSmall} />, + jsonExplorer: <MemoizedIcon Icon={JsonExplorerCompIconSmall} />, + jsonLottie: <MemoizedIcon Icon={LottieAnimationCompIconSmall} />, + jsonSchemaForm: <MemoizedIcon Icon={JsonFormCompIconSmall} />, + link: <MemoizedIcon Icon={LinkCompIconSmall} />, + listView: <MemoizedIcon Icon={ListViewCompIconSmall} />, + meeting: <MemoizedIcon Icon={VideoMeetingRoomCompIconSmall} />, + mention: <MemoizedIcon Icon={MentionCompIconSmall} />, + mermaid: <MemoizedIcon Icon={MermaidCompIconSmall} />, + modal: <MemoizedIcon Icon={ModalCompIconSmall} />, + module: <MemoizedIcon Icon={ModuleIconSmall} />, + moduleContainer: <MemoizedIcon Icon={ModuleIconSmall} />, + navigation: <MemoizedIcon Icon={NavComIconSmall} />, + npmPlugin: <MemoizedIcon Icon={LeftCommon} />, + progress: <MemoizedIcon Icon={ProgressCompIconSmall} />, + progressCircle: <MemoizedIcon Icon={ProcessCircleCompIconSmall} />, + qrCode: <MemoizedIcon Icon={QRCodeCompIconSmall} />, + rating: <MemoizedIcon Icon={RatingCompIconSmall} />, + richTextEditor: <MemoizedIcon Icon={RichTextEditorCompIconSmall} />, + scanner: <MemoizedIcon Icon={ScannerCompIconSmall} />, + segmentedControl: <MemoizedIcon Icon={SegmentedCompIconSmall} />, + sharingcomponent: <MemoizedIcon Icon={VideoScreenshareCompIconSmall} />, + signature: <MemoizedIcon Icon={SignatureCompIconSmall} />, + step: <MemoizedIcon Icon={StepCompIconSmall} />, + table: <MemoizedIcon Icon={TableCompIconSmall} />, + text: <MemoizedIcon Icon={TextCompIconSmall} />, + timeline: <MemoizedIcon Icon={TimeLineCompIconSmall} />, + toggleButton: <MemoizedIcon Icon={ToggleButtonCompIconSmall} />, + tour: <MemoizedIcon Icon={TourCompIconSmall} />, + tree: <MemoizedIcon Icon={TreeDisplayCompIconSmall} />, + treeSelect: <MemoizedIcon Icon={TreeSelectCompIconSmall} />, + videocomponent: <MemoizedIcon Icon={VideoCameraStreamCompIconSmall} />, + hillchart: <MemoizedIcon Icon={HillchartCompIconSmall} />, + ganttChart: <MemoizedIcon Icon={GanttCompIconSmall} />, + kanban: <MemoizedIcon Icon={KanbanCompIconSmall} />, + openLayersGeoMap: <MemoizedIcon Icon={GeoMapLayersCompIconSmall} />, + chartsGeoMap: <MemoizedIcon Icon={GeoMapChartsCompIconSmall} />, + bpmnEditor: <MemoizedIcon Icon={BPMNEditorCompIconSmall} />, + turnstileCaptcha: <MemoizedIcon Icon={TurnstileCaptchaCompIconSmall} />, + pivotTable: <MemoizedIcon Icon={PivotTableCompIconSmall} />, + avatar: <MemoizedIcon Icon={AvatarCompIconSmall} />, + avatarGroup: <MemoizedIcon Icon={AvatarGroupCompIconSmall} />, + colorPicker: <MemoizedIcon Icon={ColorPickerCompIconSmall} />, + floatingButton: <MemoizedIcon Icon={FloatingButtonCompIconSmall} />, + transfer: <MemoizedIcon Icon={TransferCompIconSmall} />, + card: <MemoizedIcon Icon={CardCompIconSmall} />, + timer: <MemoizedIcon Icon={TimeRangeCompIconSmall} />, + shape: <MemoizedIcon Icon={ShapesCompIconSmall} />, + input: <MemoizedIcon Icon={InputCompIconSmall} />, + textArea: <MemoizedIcon Icon={TextAreaCompIconSmall} />, + chart: <MemoizedIcon Icon={ChartCompIconSmall} />, + password: <MemoizedIcon Icon={PasswordCompIconSmall} />, + select: <MemoizedIcon Icon={SelectCompIconSmall} />, + multiSelect: <MemoizedIcon Icon={MultiSelectCompIconSmall} />, + radio: <MemoizedIcon Icon={RadioCompIconSmall} />, + checkbox: <MemoizedIcon Icon={CheckboxCompIconSmall} />, + switch: <MemoizedIcon Icon={SwitchCompIconSmall} />, + slider: <MemoizedIcon Icon={SliderCompIconSmall} />, + rangeSlider: <MemoizedIcon Icon={RangeSliderCompIconSmall} />, + date: <MemoizedIcon Icon={DateCompIconSmall} />, + dateRange: <MemoizedIcon Icon={DateRangeCompIconSmall} />, + time: <MemoizedIcon Icon={TimeCompIconSmall} />, + timeRange: <MemoizedIcon Icon={TimeRangeCompIconSmall} />, + file: <MemoizedIcon Icon={UploadCompIconSmall} />, + fileViewer: <MemoizedIcon Icon={FileViewerCompIconSmall} />, + container: <MemoizedIcon Icon={ContainerCompIconSmall} />, + grid: <MemoizedIcon Icon={GridCompIconSmall} />, + columnLayout: <MemoizedIcon Icon={ColumnLayoutCompIconSmall} />, + responsiveLayout: <MemoizedIcon Icon={ResponsiveLayoutCompIconSmall} />, + splitLayout: <MemoizedIcon Icon={SplitLayoutCompIconSmall} />, + pageLayout: <MemoizedIcon Icon={PageLayoutCompIconSmall} />, + tabbedContainer: <MemoizedIcon Icon={TabbedContainerCompIconSmall} />, + collapsibleContainer: <MemoizedIcon Icon={CollapsibleContainerCompIconSmall} />, + form: <MemoizedIcon Icon={FormCompIconSmall} />, + image: <MemoizedIcon Icon={ImageCompIconSmall} />, + video: <MemoizedIcon Icon={VideoCompIconSmall} />, + audio: <MemoizedIcon Icon={AudioCompIconSmall} />, + iframe: <MemoizedIcon Icon={IFrameCompIconSmall} />, + numberInput: <MemoizedIcon Icon={NumberInputCompIconSmall} />, + barChart: <MemoizedIcon Icon={ChartCompIconSmall} />, + lineChart: <MemoizedIcon Icon={ChartCompIconSmall} />, + pieChart: <MemoizedIcon Icon={ChartCompIconSmall} />, + scatterChart: <MemoizedIcon Icon={ChartCompIconSmall} />, + funnelChart: <MemoizedIcon Icon={FunnelChartCompIconSmall} />, + gaugeChart: <MemoizedIcon Icon={GaugeChartCompIconSmall} />, + sankeyChart: <MemoizedIcon Icon={SankeyChartCompIconSmall} />, + candleStickChart: <MemoizedIcon Icon={CandlestickChartCompIconSmall} />, + radarChart: <MemoizedIcon Icon={RadarChartCompIconSmall} />, + heatmapChart: <MemoizedIcon Icon={HeatmapChartCompIconSmall} />, + graphChart: <MemoizedIcon Icon={GraphChartCompIconSmall} />, + treeChart: <MemoizedIcon Icon={TreeChartCompIconSmall} />, + treemapChart: <MemoizedIcon Icon={TreemapChartCompIconSmall} />, + sunburstChart: <MemoizedIcon Icon={SunburstChartCompIconSmall} />, + themeriverChart: <MemoizedIcon Icon={ThemeriverChartCompIconSmall} />, + basicChart: <MemoizedIcon Icon={ChartCompIconSmall} />, +} as const; diff --git a/client/packages/lowcoder/src/pages/editor/editorHotKeys.tsx b/client/packages/lowcoder/src/pages/editor/editorHotKeys.tsx index ed99d4c73e..59d043baff 100644 --- a/client/packages/lowcoder/src/pages/editor/editorHotKeys.tsx +++ b/client/packages/lowcoder/src/pages/editor/editorHotKeys.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useContext } from "react"; +import React, { useCallback, useContext, useRef, useEffect } from "react"; import { EditorContext, EditorState } from "comps/editorState"; import { GridCompOperator } from "comps/utils/gridCompOperator"; import { ExternalEditorContext } from "util/context/ExternalEditorContext"; @@ -15,6 +15,7 @@ import { clickCompNameClass } from "base/codeEditor/clickCompName"; import { getShortcutAction } from "pages/common/shortcutConfigs"; import { preview } from "constants/routesURL"; import { useApplicationId } from "util/hooks"; +import { useUnmount } from "react-use"; type Props = { children: React.ReactNode; @@ -118,8 +119,17 @@ export const EditorGlobalHotKeys = React.memo((props: GlobalProps) => { const { history: editorHistory } = useContext(ExternalEditorContext); const { togglePanel, panelStatus, toggleShortcutList } = props; const applicationId = useApplicationId(); + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + const onKeyDown = useCallback( (e: KeyboardEvent) => { + if (!mountedRef.current) return; setGlobalState(editorState, e); handleGlobalKeyDown( e, @@ -133,17 +143,28 @@ export const EditorGlobalHotKeys = React.memo((props: GlobalProps) => { }, [editorState, editorHistory, togglePanel, toggleShortcutList, applicationId] ); + const setGlobalStateCb = useCallback( - (e: KeyboardEvent | MouseEvent) => setGlobalState(editorState, e), + (e: KeyboardEvent | MouseEvent) => { + if (!mountedRef.current) return; + setGlobalState(editorState, e); + }, [editorState] ); + const onMouseDown = useCallback( (e: MouseEvent) => { + if (!mountedRef.current) return; setGlobalState(editorState, e); handleMouseDown(e, editorState, () => !panelStatus.left && togglePanel("left")); }, [editorState, panelStatus, togglePanel] ); + + useUnmount(() => { + mountedRef.current = false; + }); + return ( <GlobalShortcutsWrapper disabled={props.disabled} @@ -152,8 +173,9 @@ export const EditorGlobalHotKeys = React.memo((props: GlobalProps) => { // fix the problem when a user press keys without focus onMouseMoveCapture={setGlobalStateCb} onMouseDownCapture={onMouseDown} - children={props.children} - /> + > + {props.children} + </GlobalShortcutsWrapper> ); }) @@ -188,28 +210,59 @@ function handleEditorKeyDown(e: React.KeyboardEvent, editorState: EditorState) { export const EditorHotKeys = React.memo((props: Props) => { const editorState = useContext(EditorContext); + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + const onKeyDown = useCallback( - (e: React.KeyboardEvent) => handleEditorKeyDown(e, editorState), + (e: React.KeyboardEvent) => { + if (!mountedRef.current) return; + handleEditorKeyDown(e, editorState); + }, [editorState] ); + + useUnmount(() => { + mountedRef.current = false; + }); + return ( <ShortcutsWrapper disabled={props.disabled} onKeyDown={onKeyDown} style={{ width: "100%", height: "100%" }} - children={props.children} - /> + > + {props.children} + </ShortcutsWrapper> ); }) export const CustomShortcutWrapper = React.memo((props: { children: React.ReactNode }) => { const editorState = useContext(EditorContext); + const mountedRef = useRef(true); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + const handleCustomShortcut = useCallback( (e: KeyboardEvent) => { + if (!mountedRef.current) return; editorState.getAppSettingsComp().children.customShortcuts.handleKeyEvent(e); }, [editorState] ); + + useUnmount(() => { + mountedRef.current = false; + }); + return ( <GlobalShortcutsWrapper onKeyDownCapture={handleCustomShortcut}> {props.children} diff --git a/client/packages/lowcoder/src/pages/editor/editorSkeletonView.tsx b/client/packages/lowcoder/src/pages/editor/editorSkeletonView.tsx index 10c2c762a0..200282e50c 100644 --- a/client/packages/lowcoder/src/pages/editor/editorSkeletonView.tsx +++ b/client/packages/lowcoder/src/pages/editor/editorSkeletonView.tsx @@ -1,5 +1,5 @@ import Header from "pages/common/header"; -import React, {lazy} from "react"; +import React, { lazy, useCallback, useEffect, useRef } from "react"; import { Body, EditorContainer, @@ -16,6 +16,7 @@ import { default as Spin } from "antd/es/spin"; import { useTemplateViewMode, useUserViewMode } from "util/hooks"; import { ProductLoading } from "components/ProductLoading"; import { default as LoadingOutlined } from "@ant-design/icons/LoadingOutlined"; +import { useUnmount } from "react-use"; const BottomSkeleton = lazy(() => import("pages/editor/bottom/BottomContent").then(module => ({default: module.BottomSkeleton}))); const RightPanel = lazy(() => import('pages/editor/right/RightPanel')); @@ -41,22 +42,40 @@ const SiderStyled = styled.div` background-color: #373945; ` -export const EditorLoadingSpin = (props: { height?: string | number }) => { +const LoadingOutlinedMemo = React.memo(LoadingOutlined); + +export const EditorLoadingSpin = React.memo((props: { height?: string | number }) => { const { height = "100vh" } = props; return ( <div style={{ height: height }}> - <StyledSpin size="large" indicator={<LoadingOutlined spin />}/> + <StyledSpin size="large" indicator={<LoadingOutlinedMemo spin />}/> </div> ); -}; +}); export default function EditorSkeletonView() { + const mountedRef = useRef(true); const panelStatus = getPanelStatus(); const editorModeStatus = getEditorModeStatus(); const panelStyle = getPanelStyle(); const isUserViewMode = useUserViewMode(); const isTemplate = useTemplateViewMode(); + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const handleNoop = useCallback(() => { + if (!mountedRef.current) return; + // No-op handler + }, []); + + useUnmount(() => { + mountedRef.current = false; + }); + if (isUserViewMode) { return <ProductLoading hideHeader={isTemplate} />; } @@ -75,7 +94,7 @@ export default function EditorSkeletonView() { {panelStatus.left && ( <LeftPanel collisionStatus={false} - toggleCollisionStatus={_.noop} + toggleCollisionStatus={handleNoop} > <StyledSkeleton active paragraph={{ rows: 10 }} /> </LeftPanel> @@ -93,8 +112,8 @@ export default function EditorSkeletonView() { {panelStatus.right && ( <RightPanel showPropertyPane={false} - onCompDrag={_.noop} - onTabChange={_.noop} + onCompDrag={handleNoop} + onTabChange={handleNoop} /> )} </Body> diff --git a/client/packages/lowcoder/src/pages/editor/editorView.tsx b/client/packages/lowcoder/src/pages/editor/editorView.tsx index 11d818d47c..c11d42e9cb 100644 --- a/client/packages/lowcoder/src/pages/editor/editorView.tsx +++ b/client/packages/lowcoder/src/pages/editor/editorView.tsx @@ -57,9 +57,12 @@ import { } from "util/localStorageUtil"; import { isAggregationApp } from "util/appUtils"; import EditorSkeletonView from "./editorSkeletonView"; -import { getCommonSettings } from "@lowcoder-ee/redux/selectors/commonSettingSelectors"; +import { + getCommonSettings +} from "@lowcoder-ee/redux/selectors/commonSettingSelectors"; import { isEqual, noop } from "lodash"; import { AppSettingContext, AppSettingType } from "@lowcoder-ee/comps/utils/appSettingContext"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; import Flex from "antd/es/flex"; // import { BottomSkeleton } from "./bottom/BottomContent"; @@ -148,9 +151,14 @@ const ViewBody = styled.div<{ $hideBodyHeader?: boolean; $height?: number }>` )`}; `; -const SiderWrapper = styled.div` +const SiderWrapper = styled.div<{ + $bgColor?: string; + $fontColor?: string; + $activeBgColor?: string; + $activeFontColor?: string; +}>` .ant-menu { - background-color: #393b47; + background-color: ${props => props.$bgColor ? props.$bgColor : '#393b47'}; height: calc(100vh - 48px); .ant-menu-item { @@ -163,15 +171,16 @@ const SiderWrapper = styled.div` height: 26px; width: 26px; padding: 5px; + color: ${props => props.$fontColor ? props.$fontColor : '#ffffffa6'}; } &.ant-menu-item-selected, &:hover, &:active { - background-color: #393b47; - + background-color: ${props => props.$bgColor ? props.$bgColor : '#393b47'}; svg { - background: #8b8fa37f; + background: ${props => props.$activeBgColor ? props.$activeBgColor : '#8b8fa37f'}; + color: ${props => props.$activeFontColor ? props.$activeFontColor : '#ffffffa6'}; border-radius: 4px; } } @@ -400,6 +409,7 @@ function EditorView(props: EditorViewProps) { const locationState = useLocation<UserGuideLocationState>().state; const showNewUserGuide = locationState?.showNewUserGuide; const showAppSnapshot = useSelector(showAppSnapshotSelector); + const brandingSettings = useSelector(getBrandingSetting); const [showShortcutList, setShowShortcutList] = useState(false); const toggleShortcutList = useCallback( () => setShowShortcutList(!showShortcutList), @@ -485,8 +495,13 @@ function EditorView(props: EditorViewProps) { "orientationchange" in window ? "orientationchange" : "resize"; window.addEventListener(eventType, updateSize); updateSize(); - return () => window.removeEventListener(eventType, updateSize); - }, []); + + return () => { + window.removeEventListener(eventType, updateSize); + savePanelStatus(panelStatus); + saveEditorModeStatus(editorModeStatus); + }; + }, [panelStatus, editorModeStatus]); const hideBodyHeader = useTemplateViewMode() || (isViewMode && (!showHeaderInPublic || !commonSettings.showHeaderInPublicApps)); @@ -511,7 +526,7 @@ function EditorView(props: EditorViewProps) { if (isViewMode) return uiComp.getView(); return ( - editorState.deviceType === "mobile" || editorState.deviceType === "tablet" ? ( + editorState.deviceType === "mobile" || editorState.deviceType === "tablet" ? ( <DeviceWrapper deviceType={editorState.deviceType} deviceOrientation={editorState.deviceOrientation} @@ -531,7 +546,16 @@ function EditorView(props: EditorViewProps) { editorState.deviceOrientation, ]); - // we check if we are on the public cloud + useEffect(() => { + return () => { + setPanelStatus(DefaultPanelStatus); + setEditorModeStatus("both"); + setShowShortcutList(false); + setMenuKey(SiderKey.State); + setHeight(undefined); + }; + }, []); + const isLowCoderDomain = window.location.hostname === 'app.lowcoder.cloud'; const isLocalhost = window.location.hostname === 'localhost'; if (readOnly && hideHeader) { @@ -562,7 +586,7 @@ function EditorView(props: EditorViewProps) { <link key="preconnect-gstatic" rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />, <link key="font-ubuntu" href="https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,700;1,400&display=swap" rel="stylesheet" />, // adding Hubspot Support for Analytics - <script async defer src="//js-eu1.hs-scripts.com/144574215.js" type="text/javascript" id="hs-script-loader"></script> + <script key="hs-script-loader" async defer src="//js-eu1.hs-scripts.com/144574215.js" type="text/javascript" id="hs-script-loader"></script> ]} </Helmet> <Suspense fallback={<EditorSkeletonView />}> @@ -611,7 +635,7 @@ function EditorView(props: EditorViewProps) { <link key="preconnect-gstatic" rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />, <link key="font-ubuntu" href="https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,700;1,400&display=swap" rel="stylesheet" />, // adding Clearbit Support for Analytics - <script async defer src="//js-eu1.hs-scripts.com/144574215.js" type="text/javascript" id="hs-script-loader"></script> + <script key="hs-script-loader" async defer src="//js-eu1.hs-scripts.com/144574215.js" type="text/javascript" id="hs-script-loader"></script> ]} </Helmet> <Height100Div @@ -641,7 +665,12 @@ function EditorView(props: EditorViewProps) { toggleShortcutList={toggleShortcutList} > <Body> - <SiderWrapper> + <SiderWrapper + $bgColor={brandingSettings?.config_set?.editorSidebarColor} + $fontColor={brandingSettings?.config_set?.editorSidebarFontColor} + $activeBgColor={brandingSettings?.config_set?.editorSidebarActiveBgColor} + $activeFontColor={brandingSettings?.config_set?.editorSidebarActiveFontColor} + > <Sider width={40}> <Menu theme="dark" diff --git a/client/packages/lowcoder/src/pages/editor/right/styledComponent.tsx b/client/packages/lowcoder/src/pages/editor/right/styledComponent.tsx index 177ad9cdde..0dee342784 100644 --- a/client/packages/lowcoder/src/pages/editor/right/styledComponent.tsx +++ b/client/packages/lowcoder/src/pages/editor/right/styledComponent.tsx @@ -11,7 +11,7 @@ const NoShake = css` transform-style: preserve-3d; `; -export const CompIconDiv = styled.div<{ $h: number; $w: number, $isSelected?: boolean }>` +export const CompIconDiv = styled.div<{ $h: number; $w: number, $isSelected?: boolean, $color?: string }>` ${NoShake}; padding: 3px; background: #ffffff; @@ -50,6 +50,15 @@ export const CompIconDiv = styled.div<{ $h: number; $w: number, $isSelected?: bo transform-style: preserve-3d; backface-visibility: hidden; `} + + ${props => props.$color && ` + svg > *[fill='#B480DE'] { + fill: ${props.$color}; + } + svg > *[stroke='#B480DE'] { + stroke: ${props.$color}; + } + `} `; export const RightPanelContentWrapper = styled.div` diff --git a/client/packages/lowcoder/src/pages/editor/right/uiCompPanel.tsx b/client/packages/lowcoder/src/pages/editor/right/uiCompPanel.tsx index 068713dab9..b12d59f31a 100644 --- a/client/packages/lowcoder/src/pages/editor/right/uiCompPanel.tsx +++ b/client/packages/lowcoder/src/pages/editor/right/uiCompPanel.tsx @@ -24,6 +24,8 @@ import { } from "lowcoder-design"; import { TransparentImg } from "../../../util/commonUtils"; import { RightContext } from "./rightContext"; +import { useSelector } from "react-redux"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; const CompDiv = styled.div` display: flex; @@ -65,8 +67,10 @@ const HovDiv = styled.div` const IconContain = (props: { Icon: React.FunctionComponent<React.SVGProps<SVGSVGElement>> }) => { const { Icon } = props; + const brandingSettings = useSelector(getBrandingSetting); + return ( - <CompIconDiv $w={64} $h={64}> + <CompIconDiv $w={64} $h={64} $color={brandingSettings?.config_set?.mainBrandingColor}> <Icon /> </CompIconDiv> ); diff --git a/client/packages/lowcoder/src/pages/editor/useRootCompInstance.tsx b/client/packages/lowcoder/src/pages/editor/useRootCompInstance.tsx index 15411f8c83..2abff5a31c 100644 --- a/client/packages/lowcoder/src/pages/editor/useRootCompInstance.tsx +++ b/client/packages/lowcoder/src/pages/editor/useRootCompInstance.tsx @@ -1,9 +1,9 @@ import { AppSummaryInfo } from "redux/reduxActions/applicationActions"; -import { useMemo } from "react"; +import { useCallback, useEffect, useMemo, useRef } from "react"; import { useUnmount } from "react-use"; import { RootComp } from "comps/comps/rootComp"; import { useAppHistory } from "util/editoryHistory"; -import { useCompInstance } from "comps/utils/useCompInstance"; +import { useCompInstance, GetContainerParams } from "comps/utils/useCompInstance"; import { MarkAppInitialized, perfMark } from "util/perfUtils"; import { QueryApi } from "api/queryApi"; @@ -14,7 +14,23 @@ export function useRootCompInstance( blockEditing?: boolean, ) { const appId = appInfo.id; - const params = useMemo(() => { + const mountedRef = useRef(true); + const containerRef = useRef<any>(null); + + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + + const params = useMemo<GetContainerParams<typeof RootComp>>(() => { + if (!mountedRef.current) { + return { + Comp: RootComp, + initialValue: undefined, + isReady: false + }; + } return { Comp: RootComp, initialValue: appInfo.dsl, @@ -25,22 +41,46 @@ export function useRootCompInstance( readOnly, }, initHandler: async (comp: RootComp) => { + if (!mountedRef.current) return comp; const root = await comp.preload(`app-${appId}`); - perfMark(MarkAppInitialized); + if (mountedRef.current) { + perfMark(MarkAppInitialized); + } return root; }, isReady, }; }, [appId, appInfo.dsl, appInfo.moduleDsl, isReady, readOnly]); + const [comp, container] = useCompInstance(params); + containerRef.current = container; + const history = useAppHistory(container, readOnly, appId, blockEditing); - useUnmount(() => { - comp?.clearPreload(); + const cleanup = useCallback(() => { + if (comp) { + comp.clearPreload(); + // Clear any other resources + if (comp.children) { + Object.values(comp.children).forEach(child => { + if (child && 'clearPreload' in child && typeof child.clearPreload === 'function') { + child.clearPreload(); + } + }); + } + } + if (containerRef.current) { + containerRef.current = null; + } QueryApi.cancelAllQuery(); + }, [comp]); + + useUnmount(() => { + cleanup(); }); return useMemo(() => { + if (!mountedRef.current) return null; return { comp, history, appId }; }, [appId, comp, history]); } diff --git a/client/packages/lowcoder/src/pages/queryLibrary/QueryLibraryEditor.tsx b/client/packages/lowcoder/src/pages/queryLibrary/QueryLibraryEditor.tsx index 48e8f2e29b..cff8de9eb5 100644 --- a/client/packages/lowcoder/src/pages/queryLibrary/QueryLibraryEditor.tsx +++ b/client/packages/lowcoder/src/pages/queryLibrary/QueryLibraryEditor.tsx @@ -315,7 +315,7 @@ const PublishModal = (props: { <CustomModal open={props.visible} onCancel={props.onClose} - destroyOnClose={true} + destroyOnHidden={true} width="600px" title={trans("queryLibrary.publishNewVersion")} footer={ diff --git a/client/packages/lowcoder/src/pages/setting/advanced/AdvancedSetting.tsx b/client/packages/lowcoder/src/pages/setting/advanced/AdvancedSetting.tsx index 6d8bd9fbde..a9998fa5dd 100644 --- a/client/packages/lowcoder/src/pages/setting/advanced/AdvancedSetting.tsx +++ b/client/packages/lowcoder/src/pages/setting/advanced/AdvancedSetting.tsx @@ -173,7 +173,7 @@ export function AdvancedSetting() { allowClear={true} showSearch={true} style={{ width: "264px", height: "32px", marginBottom: 12 }} - dropdownStyle={{ width: "264px" }} + styles={{ popup: { root: { width: "264px" }}}} value={settings.defaultHomePage} onChange={(value: string) => { setSettings((v) => ({ ...v, defaultHomePage: value })); @@ -326,8 +326,8 @@ export function AdvancedSetting() { <div className="section-title">{trans("advanced.APIConsumption")}</div> <HelpText style={{ marginBottom: 12 }}>{trans("advanced.APIConsumptionDescription")}</HelpText> <div className="section-content"> - {trans("advanced.overallAPIConsumption")} : {apiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(apiUsage) + " API Calls.": 'Loading API usage data...'}<br/> - {trans("advanced.lastMonthAPIConsumption")} : {lastMonthApiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(lastMonthApiUsage) + " API Calls." : 'Loading API usage data...'} + {trans("advanced.overallAPIConsumption")} : {apiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(apiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")}<br/> + {trans("advanced.lastMonthAPIConsumption")} : {lastMonthApiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(lastMonthApiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")} </div> </AdvancedSettingContent> </Level1SettingPageContent> diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/charts/browserEngineBreakdown.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/charts/browserEngineBreakdown.tsx new file mode 100644 index 0000000000..4a8d505891 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/charts/browserEngineBreakdown.tsx @@ -0,0 +1,61 @@ +import React, { useMemo, useRef } from "react"; +import ReactECharts from "echarts-for-react"; +import dayjs from "dayjs"; +import { debounce } from "lodash"; +import { trans } from "i18n"; + +interface Props { + data: Array<any>; +} + +const BrowserEngineBreakdownChart = ({ data}: Props) => { + const chartRef = useRef<any>(null); + + const browserEngine = useMemo(() => { + return data.reduce((acc, e) => { + const browser = e.agentName || 'Unknown'; + const engine = e.layoutEngineName || 'Unknown'; + acc[browser] = acc[browser] || {}; + acc[browser][engine] = (acc[browser][engine] || 0) + 1; + return acc; + }, {} as Record<string, number>); + }, []); + + // Get unique browser types + const browserTypeSet = [...new Set(data.map((log: any) => log.agentName || 'Unkown'))]; + + // Get unique engine types + const engineTypeSet = [...new Set(data.map((log: any) => log.layoutEngineName || 'Unkown'))]; + + // Prepare series data for each event type + const series = engineTypeSet.map((engineType) => ({ + name: engineType, + type: "bar", + stack: "total", + data: Object.keys(browserEngine).map((browserType: string) => browserEngine[browserType][engineType]), + })); + + return ( + <ReactECharts + ref={chartRef} + option={{ + tooltip: { trigger: "axis", axisPointer: { type: "shadow" } }, + legend: { left: "left", orient: "vertical", top: "12%" }, + grid: { left: "20%", right: "4%", bottom: "3%", containLabel: true }, + xAxis: { + type: "value", + }, + yAxis: { + type: "category", + data: browserTypeSet, + axisLabel: { rotate: 45 }, + }, + series, + }} + // onEvents={{ dataZoom: handleChartEvents }} + style={{ height: "400px", marginBottom: "20px" }} + /> + ); +}; + +export default BrowserEngineBreakdownChart; diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/charts/deviceOSBreakdown.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/charts/deviceOSBreakdown.tsx new file mode 100644 index 0000000000..79a4077e06 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/charts/deviceOSBreakdown.tsx @@ -0,0 +1,61 @@ +import React, { useMemo, useRef } from "react"; +import ReactECharts from "echarts-for-react"; +import dayjs from "dayjs"; +import { debounce } from "lodash"; +import { trans } from "i18n"; + +interface Props { + data: Array<any>; +} + +const DeviceOSBreakdownChart = ({ data}: Props) => { + const chartRef = useRef<any>(null); + + const deviceOs = useMemo(() => { + return data.reduce((acc, e) => { + const device = e.deviceClass || 'Unknown'; + const os = e.operatingSystemName || 'Unknown'; + acc[device] = acc[device] || {}; + acc[device][os] = (acc[device][os] || 0) + 1; + return acc; + }, {} as Record<string, Record<string, number>>); + }, []); + + // Get unique device types + const deviceTypeSet = [...new Set(data.map((log: any) => log.deviceClass || 'Unkown'))]; + + // Get unique os types + const osTypeSet = [...new Set(data.map((log: any) => log.operatingSystemName || 'Unkown'))]; + + // Prepare series data for each event type + const series = osTypeSet.map((osType) => ({ + name: osType, + type: "bar", + stack: "total", + data: Object.keys(deviceOs).map((deviceType: string) => deviceOs[deviceType][osType]), + })); + + return ( + <ReactECharts + ref={chartRef} + option={{ + tooltip: { trigger: "axis", axisPointer: { type: "shadow" } }, + legend: { left: "left", orient: "vertical", top: "12%" }, // Ensure labels are on the left + grid: { left: "20%", right: "4%", bottom: "3%", containLabel: true }, + xAxis: { + type: "category", + data: deviceTypeSet, + axisLabel: { rotate: 45 }, + }, + yAxis: { + type: "value", + }, + series, + }} + // onEvents={{ dataZoom: handleChartEvents }} + style={{ height: "400px", marginBottom: "20px" }} + /> + ); +}; + +export default DeviceOSBreakdownChart; diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/charts/userActivityByTime.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/charts/userActivityByTime.tsx new file mode 100644 index 0000000000..649cedca71 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/charts/userActivityByTime.tsx @@ -0,0 +1,111 @@ +import React, { useRef } from "react"; +import ReactECharts from "echarts-for-react"; +import dayjs from "dayjs"; +import { debounce } from "lodash"; +import { trans } from "i18n"; + +interface Props { + data: Array<any>; + setDateRange: (range: { fromTimestamp: string; toTimestamp: string }) => void; +} + +const UserActivityByTimeChart = ({ data, setDateRange }: Props) => { + const chartRef = useRef<any>(null); + + const debouncedSetDateRange = useRef( + debounce((fromTimestamp: string, toTimestamp: string) => { + setDateRange({ fromTimestamp, toTimestamp }); + }, 500) // Delays fetching only after zooming stops + ).current; + + // Extract min/max dates from the data + const allDates = data.map((log) => log.eventTime && dayjs(log.eventTime).format("YYYY-MM-DD")); + const minDate = allDates.length ? dayjs(Math.min(...allDates.map((d) => new Date(d).getTime()))) : dayjs().subtract(7, "days"); + const maxDate = allDates.length ? dayjs(Math.max(...allDates.map((d) => new Date(d).getTime()))) : dayjs(); + + // Generate full date range including missing days + const fullDateRange: string[] = []; + let currentDate = minDate; + while (currentDate.isBefore(maxDate) || currentDate.isSame(maxDate, "day")) { + fullDateRange.push(currentDate.format("YYYY-MM-DD")); + currentDate = currentDate.add(1, "day"); + } + + // Group data by date and eventType + const timeSeriesData = data.reduce((acc: any, log: any) => { + const eventTime = log.eventTime ? new Date(log.eventTime) : null; + if (eventTime && !isNaN(eventTime.getTime())) { + const date = eventTime.toISOString().split("T")[0]; // Extract date part + if (!acc[date]) acc[date] = 0; + acc[date] = acc[date] + 1; + } + return acc; + }, {}); + + // Prepare series data for each event type + const series = [{ + name: "App Views", + type: "line", + stack: "total", + data: fullDateRange.map((date) => timeSeriesData[date] || 0), // Fill gaps with 0 + itemStyle: { + color: "#1890ff", + }, + }]; + + const handleChartEvents = (params: any) => { + if (params.start !== undefined && params.end !== undefined) { + const startIndex = Math.floor((params.start / 100) * (fullDateRange.length - 1)); + const endIndex = Math.floor((params.end / 100) * (fullDateRange.length - 1)); + + const fromDate = new Date(fullDateRange[startIndex] || fullDateRange[0]); // Keep start of day + const toDate = new Date(fullDateRange[endIndex] || fullDateRange[fullDateRange.length - 1]); + + toDate.setHours(23, 59, 59, 999); + + const fromTimestamp = fromDate.toISOString(); + const toTimestamp = toDate.toISOString(); + debouncedSetDateRange(fromTimestamp, toTimestamp); + } + }; + + return ( + <ReactECharts + ref={chartRef} + option={{ + tooltip: { trigger: "axis", axisPointer: { type: "shadow" } }, + legend: { left: "left", orient: "vertical", top: "12%" }, // Ensure labels are on the left + grid: { left: "20%", right: "4%", bottom: "3%", containLabel: true }, + xAxis: { + type: "category", + data: fullDateRange, + axisLabel: { rotate: 45 }, + }, + yAxis: { + type: "value", + }, + dataZoom: [ + { + type: "slider", + xAxisIndex: 0, + filterMode: "weakFilter", + show: true, + start: 0, + end: 100, + realtime: false, + }, + { + type: "inside", + xAxisIndex: 0, + realtime: false, + }, + ], + series, + }} + onEvents={{ dataZoom: handleChartEvents }} + style={{ height: "400px", marginBottom: "20px" }} + /> + ); +}; + +export default UserActivityByTimeChart; diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/charts/userAuthStatus.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/charts/userAuthStatus.tsx new file mode 100644 index 0000000000..48b61829cb --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/charts/userAuthStatus.tsx @@ -0,0 +1,53 @@ +import React, { useMemo, useRef } from "react"; +import ReactECharts from "echarts-for-react"; + +interface Props { + data: Array<any>; +} + +const UserAuthStatusChart = ({ data }: Props) => { + const chartRef = useRef<any>(null); + + const anonKnown = useMemo(() => { + return data.reduce((acc, e) => { + const type = e.isAnonymous ? 'Anonymous' : 'Known'; + acc[type] = (acc[type] || 0) + 1; + return acc; + }, {} as Record<string, number>); + }, [data]); + + const pieData = useMemo(() => { + return Object.entries(anonKnown).map(([name, value]) => ({ name, value })); + }, [anonKnown]); + + const series = [{ + name: 'Anonymouse', + type: 'pie', + radius: '50%', + data: pieData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + }]; + + return ( + <ReactECharts + ref={chartRef} + option={{ + title: { text: "App Usage Log", left: "center" }, + tooltip: { trigger: "axis", axisPointer: { type: "shadow" } }, + legend: { left: "left", orient: "vertical", top: "12%" }, // Ensure labels are on the left + grid: { left: "20%", right: "4%", bottom: "3%", containLabel: true }, + series, + }} + // onEvents={{ dataZoom: handleChartEvents }} + style={{ height: "400px", marginBottom: "20px" }} + /> + ); +}; + +export default UserAuthStatusChart; diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/charts/userEngagementByRegion.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/charts/userEngagementByRegion.tsx new file mode 100644 index 0000000000..f472c9acb3 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/charts/userEngagementByRegion.tsx @@ -0,0 +1,209 @@ +import { useMemo, useState, useCallback } from "react"; +import { Map, Marker, Overlay, Bounds } from 'pigeon-maps'; +import Supercluster, { PointFeature } from 'supercluster'; +import styled from 'styled-components'; + +function getClusterSize(count: number): number { + // Logarithmic scaling for better visualization of large numbers + const minSize = 30; + const maxSize = 60; + const scale = Math.log10(count + 1); + return Math.min(maxSize, Math.max(minSize, minSize + (scale * 10))); +} + +function getClusterColor(count: number): string { + if (count > 1000) return '#d32f2f'; // red for very high density + if (count > 500) return '#f57c00'; // orange for high density + if (count > 100) return '#f9a825'; // yellow for medium density + return '#1976d2'; // blue for low density +} + +interface ClusterProperties { + id: string; + count: number; + cluster: boolean; + point_count_abbreviated?: string; +} + +interface GeoPoint { + latitude: number; + longitude: number; + count: number; + id: string; +} + +interface TooltipState { + lat: number; + lng: number; + text: string; +} + +interface Props { + data: Array<any>; +} + +const ClusterMarker = styled.div<{ size: number; color: string }>` + background: ${props => props.color}; + width: ${props => props.size}px; + height: ${props => props.size}px; + border-radius: 50%; + color: #fff; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + font-size: ${props => props.size / 3}px; + border: 2px solid white; + box-shadow: 0 0 6px rgba(0,0,0,0.3); + cursor: pointer; + pointer-events: auto; + opacity: 0.5; + transition: opacity 0.2s ease; + + &:hover { + opacity: 1; + } +`; + +const TooltipContainer = styled.div` + background: white; + border: 1px solid #ccc; + padding: 5px 10px; + border-radius: 4px; + box-shadow: 0 2px 6px rgba(0,0,0,0.2); + pointer-events: none; + transform: translateY(-120px); + white-space: nowrap; +`; + +const MapContainer = styled.div` + height: 400px; + width: 100%; + position: relative; +`; + +const UserEngagementByRegionChart = ({ data }: Props) => { + const [zoom, setZoom] = useState(3); + const [bounds, setBounds] = useState<Bounds | null>(null); + const [tooltip, setTooltip] = useState<TooltipState | null>(null); + + const geoPoints = useMemo(() => { + return data.reduce((acc, log) => { + const region = log?.geolocationDataJsonb?.city?.names?.en || 'Unknown'; // assuming `region` is added to each event + let regionData: GeoPoint = { + latitude: log?.geolocationDataJsonb?.location?.latitude ?? 55, + longitude: log?.geolocationDataJsonb?.location?.longitude ?? 15, + count: 0, + id: region, + }; + if (acc[region]) { + acc[region] = { + ...acc[region], + count: acc[region].count + 1, + } + } else { + acc[region] = regionData; + } + return acc; + }, {} as Record<string, GeoPoint>); + }, [data]); + + const cluster = useMemo(() => { + const sc = new Supercluster<ClusterProperties>({ + radius: 300, + maxZoom: 20, + }); + + const geojsonPoints: PointFeature<ClusterProperties>[] = (Object.values(geoPoints) as GeoPoint[]).map(({ id, latitude, longitude, count }) => ({ + type: 'Feature', + properties: { id, count, cluster: true }, + geometry: { + type: 'Point', + coordinates: [longitude, latitude], + }, + })); + + sc.load(geojsonPoints); + return sc; + }, [geoPoints]); + + const clusters = useMemo(() => { + if (!bounds?.ne || !bounds?.sw) return []; + + const westLng = bounds.sw[1]; + const southLat = bounds.sw[0]; + const eastLng = bounds.ne[1]; + const northLat = bounds.ne[0]; + + return cluster.getClusters([westLng, southLat, eastLng, northLat], zoom); + }, [cluster, bounds, zoom]); + + const handleBoundsChanged = useCallback(({ zoom, bounds }: { zoom: number; bounds: Bounds }) => { + setZoom(zoom); + setBounds(bounds); + }, []); + + const handleMarkerMouseOver = useCallback((lat: number, lng: number, id: string, count: number) => { + setTooltip({ lat, lng, text: `${id}: ${count}` }); + }, []); + + const handleMarkerMouseLeave = useCallback(() => { + setTooltip(null); + }, []); + + return ( + <MapContainer> + <Map + height={400} + defaultCenter={[55, 15]} + defaultZoom={5} + onBoundsChanged={handleBoundsChanged} + > + {clusters.map((c, i) => { + const [lng, lat] = c.geometry.coordinates; + const isCluster = !!c.properties.cluster; + + if (isCluster) { + const count = c.properties.count; + const size = getClusterSize(count); + const color = getClusterColor(count); + return ( + <Marker + key={`cluster-${i}`} + anchor={[lat, lng]} + > + <ClusterMarker + size={size} + color={color} + onMouseEnter={() => handleMarkerMouseOver(lat, lng, c.properties.id, c.properties.count)} + onMouseLeave={handleMarkerMouseLeave} + > + {c.properties.point_count_abbreviated} + </ClusterMarker> + </Marker> + ); + } + + return ( + <Marker + key={`marker-${i}`} + anchor={[lat, lng]} + onMouseOver={() => handleMarkerMouseOver(lat, lng, c.properties.id, c.properties.count)} + onMouseOut={handleMarkerMouseLeave} + /> + ); + })} + + {tooltip && ( + <Overlay anchor={[tooltip.lat, tooltip.lng]} offset={[0, -40]}> + <TooltipContainer> + {tooltip.text} + </TooltipContainer> + </Overlay> + )} + </Map> + </MapContainer> + ); +}; + +export default UserEngagementByRegionChart; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/dashboard.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/dashboard.tsx new file mode 100644 index 0000000000..d10a8d1567 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/dashboard.tsx @@ -0,0 +1,576 @@ +import { Card, Form, Select, Input, Button, message, Divider, Skeleton, Table, Flex, Tag, TableProps } from "antd"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import styled from "styled-components"; +import { trans } from "i18n"; +import { + DetailContainer, + DetailContent, + Header, + } from "../theme/styledComponents"; +import { HeaderBack } from "pages/setting/permission/styledComponents"; +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { getAppUsageLogs, getEnvironmentsByIds, getMeta } from "api/enterpriseApi"; +import { debounce, uniqBy } from "lodash"; +import { DatePicker } from "antd"; +import dayjs, { Dayjs } from "dayjs"; +import { Link, useLocation } from "react-router-dom"; +import history from "util/history"; +import { SETTING_URL } from "@lowcoder-ee/constants/routesURL"; +import { EyeOutlined } from "@ant-design/icons"; +import UserActivityByTimeChart from "./charts/userActivityByTime"; +import UserAuthStatusChart from "./charts/userAuthStatus"; +import DeviceOSBreakdownChart from "./charts/deviceOSBreakdown"; +import BrowserEngineBreakdownChart from "./charts/browserEngineBreakdown"; +import UserEngagementByRegionChart from "./charts/userEngagementByRegion"; +import { geoLocation } from "../audit/auditContants"; +import { Level1SettingPageTitle } from "../styled"; + +const { RangePicker } = DatePicker; + +const AppLogContent = styled.div` + font-size: 14px; + color: #8b8fa3; + flex-grow: 1; + padding-top: 0px; + padding-left: 0px; + max-width: 100%; + margin-bottom: 20px; +`; + +const StyleThemeSettingsCover = styled.div` + display: flex; + flex-direction: row; + background: linear-gradient(34deg, rgba(2, 0, 36, 1) 0%, rgba(102, 9, 121, 1) 35%, rgba(0, 255, 181, 1) 100%); + padding: 15px; + height: 80px; + border-radius: 10px 10px 0 0; +`; + +export function AppUsageDashboard() { + + type AppLog = { + eventType: string; + eventTime: string; + environmentId: string; + orgId: string; + userId: string; + appId: string; + isAnonymous: boolean; + details: Record<string, any>; + geolocationDataJsonb?: Record<string, any>, + applicationAuthor?: string; + applicationAuthorOrgId?: string; + }; + + const currentUser = useSelector(getUser); + const location = useLocation(); + + const [allLogs, setAllLogs] = useState<AppLog[]>([]); + const [currentPageLogs, setCurrentPageLogs] = useState<AppLog[]>([]); + const [dataMap, setDataMap] = useState<Record<string, any>>({}); + + // const [logs, setLogs] = useState([]); + const [total, setTotal] = useState(0); + const [loading, setLoading] = useState(false); + const [form] = Form.useForm(); + const [pagination, setPagination] = useState({ pageSize: 25, current: 1 }); + + // Function to get URL parameters + const getQueryParams = () => { + const params = new URLSearchParams(location.search); + let queryObject: Record<string, any> = {}; + + // Convert search params into a JavaScript object + params.forEach((value, key) => { + if (key !== 'fromTimestamp' && key !== 'toTimestamp') { + queryObject[key] = value; + } + }); + + // set date range picker values + let dateRange = new Array<Dayjs>(2); + if (params.get('fromTimestamp')) { + dateRange[0] = dayjs(params.get('fromTimestamp')); + } + if (params.get('toTimestamp')) { + dateRange[1] = dayjs(params.get('toTimestamp')); + } + + queryObject['dateRange'] = dateRange; + return queryObject; + }; + + useEffect(() => { + form.setFieldsValue(getQueryParams()); + }, []); + + const handleQueryParams = (queryParams: Record<string, string>) => { + const params = new URLSearchParams(); + Object.keys(queryParams).map((key) => { + const value = queryParams[key]; + if (value) { + params.set(key, value); + } else { + params.delete(key); // Remove the key if the value is empty + } + }) + history.push({ search: params.toString() }) + } + + // Fetch Logs with all form values if set + const fetchLogs = async (newPage: number, resetData: boolean = false) => { + const formValues = form.getFieldsValue(); + + const cleanedParams = Object.fromEntries( + Object.entries({ + ...formValues, + pageSize: 100, // Always fetch 500 from API + pageNum: newPage, // API page number + fromTimestamp: formValues.dateRange?.[0] ? formValues.dateRange[0].toISOString() : undefined, + toTimestamp: formValues.dateRange?.[1] ? formValues.dateRange[1].toISOString() : undefined, + }).filter(([key, value]) => value !== undefined && value !== null && value !== "" && key !== 'dateRange') + ); + + handleQueryParams(cleanedParams as any); + + setLoading(true); + try { + const data = await getAppUsageLogs(cleanedParams); + + if (resetData) { + setAllLogs(data.data || []); + setPagination({ pageSize: 25, current: 1 }); // Reset pagination + } else { + setAllLogs((prevLogs) => [...prevLogs, ...(data?.data || [])]); + } + + setTotal(data.totalCount); + } catch (error) { + message.error("Failed to fetch audit logs."); + } finally { + setLoading(false); + } + }; + + // Handle chart zoom + const handleChartZoom = ({ fromTimestamp, toTimestamp }: { fromTimestamp: string; toTimestamp: string }) => { + console.log("Zoom applied:", fromTimestamp, toTimestamp); + + const startDate = dayjs(fromTimestamp); + const endDate = dayjs(toTimestamp); + form.setFieldsValue({ dateRange: [startDate, endDate] }); + + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + fetchLogs(1, true); + }; + + // Debounce handler for input fields + const handleInputChange = useCallback( + debounce(() => { + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + fetchLogs(1, true); + }, 300), + [] + ); + + const handleClickFilter = (field: any, value: any) => { + form.setFieldsValue({ [field]: value }); + + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + fetchLogs(1, true); + }; + + const handleDateChange = (dates: any) => { + if (dates?.[0] && dates?.[1]) { + form.setFieldsValue({ + fromTimestamp: dates[0].toISOString(), + toTimestamp: dates[1].toISOString(), + }); + } else { + form.resetFields(["fromTimestamp", "toTimestamp"]); + } + + // Reset pagination and clear logs BEFORE calling fetchLogs + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + + // Ensure fetchLogs is called only ONCE + fetchLogs(1, true); + }; + + // Handle page change + const handleTableChange: TableProps<any>["onChange"] = (newPagination) => { + const newPage = newPagination.current ?? 1; + const pageSize = newPagination.pageSize ?? 25; + const startIndex = (newPage - 1) * pageSize; + const endIndex = startIndex + pageSize; + + console.log( + `New Page: ${newPage}, StartIndex: ${startIndex}, EndIndex: ${endIndex}, AllLogs Length: ${allLogs.length}, Total: ${total}` + ); + + if (endIndex <= allLogs.length) { + // ✅ Correctly slice logs and update state + setCurrentPageLogs(allLogs.slice(startIndex, endIndex)); + } else if (allLogs.length < total) { + // ✅ Fetch next set of logs and update state after fetch + const nextApiPage = Math.floor(allLogs.length / 100) + 1; + fetchLogs(nextApiPage).then(() => { + setCurrentPageLogs(allLogs.slice(startIndex, endIndex)); + }); + } + + setPagination({ pageSize, current: newPage }); + }; + + useEffect(() => { + if (allLogs.length > 0) { + const startIndex = (pagination.current - 1) * pagination.pageSize; + const endIndex = startIndex + pagination.pageSize; + + console.log(`Updating displayed logs: StartIndex ${startIndex}, EndIndex ${endIndex}`); + setCurrentPageLogs(allLogs.slice(startIndex, endIndex)); + } + }, [pagination, allLogs]); + + + // Initial Fetch on Mount + useEffect(() => { + fetchLogs(1); + }, [currentUser.currentOrgId]); + + const appViews = useMemo(() => { + if (!allLogs?.length) return []; + + return allLogs.reduce((acc, e) => { + const environmentId = e.environmentId; + const orgId = e.orgId; + const appId = e.appId; + const name = e.details?.applicationName ?? 'Unknown'; + const applicationAuthor = e.applicationAuthor; + const applicationAuthorOrgId = e.applicationAuthorOrgId; + acc[appId] = acc[appId] || { appId, name, orgId, environmentId, applicationAuthor, applicationAuthorOrgId, count: 0 }; + acc[appId].count++; + return acc; + }, {} as Record<string, { + appId: string, name: string, + orgId: string, + environmentId: string, + applicationAuthor?: string, + applicationAuthorOrgId?: string, + count: number + }>); + }, [allLogs]); + + const topApps = useMemo(() => { + if (!Object.keys(appViews)?.length) return []; + + return Object.values(appViews) + .sort((a, b) => b.count - a.count) + .slice(0, 10); + }, [appViews]); + + const findUniqueDataIds = async () => { + if (!topApps.length) { + return setDataMap({}); + } + + const uniqueOrgIds: string[] = uniqBy(topApps, 'orgId').map(item => item.orgId); + const uniqueEnvIds: string[] = uniqBy(topApps, 'environmentId').map(item => item.environmentId); + + const metaResponse = await getMeta({ + orgIds: uniqueOrgIds, + userIds: [], + appIds: [], + groupIds: [], + bundleIds: [], + datasourceIds: [], + folderIds: [], + libraryQueryIds: [] + }); + + const envResponse = await getEnvironmentsByIds(uniqueEnvIds); + + const tempDataMap: Record<string, any> = {}; + metaResponse.data?.orgs?.forEach((org: { id: string; name: string; }) => { + tempDataMap[org.id] = org.name; + }); + envResponse.data?.forEach((env: { environmentId: string; environmentType: string; }) => { + tempDataMap[env.environmentId] = env.environmentType; + }); + setDataMap(tempDataMap); + } + + useEffect(() => { + findUniqueDataIds(); + }, [topApps]); + + const columns = [ + { + title: "", + dataIndex: "viewApp", + key: "viewApp", + render: (_: string, record: any) => ( + <Link to={{ + pathname: `/apps/${record.appId}/view`, + }} + target="_blank" + > + <EyeOutlined /> + </Link> + ), + }, + { + title: "App ID", + dataIndex: "appId", + key: "appId", + render: (text: string, record: any) => ( + <a onClick={() => handleClickFilter("appId", text)}> + { + record.name + || record.appId + || '-' + } + </a> + ), + }, + { + title: "Org ID", + dataIndex: "orgId", + key: "orgId", + render: (text: string) => ( + <a onClick={() => handleClickFilter("orgId", text)}>{dataMap[text] ?? text}</a> + ), + }, + { + title: "Environment ID", + dataIndex: "environmentId", + key: "environmentId", + render: (text: string) => ( + <a onClick={() => handleClickFilter("environmentId", text)}>{dataMap[text] ?? text}</a> + ), + }, + { + title: "App Author", + dataIndex: "applicationAuthor", + key: "applicationAuthor", + render: (text: string) => ( + text ? <a onClick={() => handleClickFilter("appAuthor", text)}>{text}</a> : '-' + ), + }, + { + title: "App Author Org ID", + dataIndex: "applicationAuthorOrgId", + key: "applicationAuthorOrgId", + render: (text: string) => ( + text ? <a onClick={() => handleClickFilter("appAuthorOrgId", text)}>{dataMap[text] ?? text}</a> : '-' + ), + }, + { + title: "Total Views", + dataIndex: "count", + key: "count", + }, + ]; + + return ( + <DetailContainer> + <Header> + <Level1SettingPageTitle style={{marginBottom: 0}}> + <span>{trans("settings.appUsage")}</span> + </Level1SettingPageTitle> + </Header> + + <DetailContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.logFilter")}</h2> + </StyleThemeSettingsCover> + <Card size="small" style={{ marginBottom: "20px" }}> + <Form + form={form} + layout="inline" + onValuesChange={(changedValue) => { + const key = Object.keys(changedValue)[0]; + if (key === "dateRange") { + handleDateChange(changedValue.dateRange); + } else if (["environmentId", "orgId", "userId", "appId", "appAuthor", "appAuthorOrgId"].includes(key)) { + handleInputChange(); // Debounced input change + } else { + // Avoid calling fetchLogs if `handleDateChange` already did + fetchLogs(1, true); + } + }} + > + <Flex gap="middle" vertical> + <Flex> + <Form.Item name="dateRange"> + <RangePicker + showTime + format="YYYY-MM-DD 00:00:00" + value={form.getFieldValue("dateRange")}/> + </Form.Item> + {/* <Form.Item name="eventType"> + <Select + allowClear + showSearch + placeholder="Event Type" + options={eventTypes} + style={{ width: 200 }} + /> + </Form.Item> */} + </Flex> + + <Flex> + <Form.Item name="environmentId"> + <Input placeholder="Environment ID" allowClear /> + </Form.Item> + <Form.Item name="orgId"> + <Input placeholder="Org ID" allowClear /> + </Form.Item> + <Form.Item name="userId"> + <Input placeholder="User ID" allowClear /> + </Form.Item> + <Form.Item name="appId"> + <Input placeholder="App ID" allowClear /> + </Form.Item> + </Flex> + + <Flex> + <Form.Item name="appAuthor"> + <Input placeholder="App Author" allowClear /> + </Form.Item> + <Form.Item name="appAuthorOrgId"> + <Input placeholder="App Author Org ID" allowClear /> + </Form.Item> + </Flex> + </Flex> + </Form> + </Card> + </AppLogContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.usageLogUserEngagement")}</h2> + </StyleThemeSettingsCover> + <Card size="small"> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <> + <UserEngagementByRegionChart data={allLogs}/> + </> + ) : ( + <p>{trans("enterprise.noLogsFound")}</p> + )} + </Card> + </AppLogContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.usageLogAppViews")}</h2> + </StyleThemeSettingsCover> + <Card size="small"> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <> + <UserActivityByTimeChart + data={allLogs} + setDateRange={handleChartZoom} + /> + </> + ) : ( + <p>{trans("enterprise.noLogsFound")}</p> + )} + </Card> + </AppLogContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.usageLogTopTen")}</h2> + </StyleThemeSettingsCover> + <Card size="small"> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <div style={{ overflowX: "auto", width: "100%" }}> + <Table + rowKey={"id"} + columns={columns} + dataSource={topApps} + size="small" // Compact Layout + style={{ width: "100%", whiteSpace: "nowrap" }} // Fixed width, prevent line break + onChange={handleTableChange} // Handle pagination + loading={loading} + pagination={false} + /> + </div> + ) : ( + <p>{trans("enterprise.noLogsFound")}</p> + )} + </Card> + </AppLogContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.usageLogAnonymousKNown")}</h2> + </StyleThemeSettingsCover> + <Card size="small"> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <> + <UserAuthStatusChart + data={allLogs} + /> + </> + ) : ( + <p>{trans("enterprise.noLogsFound")}</p> + )} + </Card> + </AppLogContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.usageLogDevices")}</h2> + </StyleThemeSettingsCover> + <Card size="small"> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <> + <DeviceOSBreakdownChart + data={allLogs} + /> + </> + ) : ( + <p>{trans("enterprise.noLogsFound")}</p> + )} + </Card> + </AppLogContent> + <AppLogContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.usageLogBrowsers")}</h2> + </StyleThemeSettingsCover> + <Card size="small"> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <> + <BrowserEngineBreakdownChart + data={allLogs} + /> + </> + ) : ( + <p>{trans("enterprise.noLogsFound")}</p> + )} + </Card> + </AppLogContent> + </DetailContent> + </DetailContainer> + ); +} diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/detail.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/detail.tsx new file mode 100644 index 0000000000..f4b78751d5 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/detail.tsx @@ -0,0 +1,3 @@ +export function AppUsageDetail() { + return <></> +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/appUsage/index.tsx b/client/packages/lowcoder/src/pages/setting/appUsage/index.tsx new file mode 100644 index 0000000000..c8e1e81e80 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/appUsage/index.tsx @@ -0,0 +1,175 @@ +import { APP_USAGE_DASHBOARD, APP_USAGE_DETAIL } from "@lowcoder-ee/constants/routesURL"; +import { Route, Switch } from "react-router-dom"; +import { AppUsageDashboard } from "./dashboard"; +import { AppUsageDetail } from "./detail"; +import { useSelector, useDispatch } from "react-redux"; +import { selectIsLicenseActive } from "redux/selectors/enterpriseSelectors"; +import styled from "styled-components"; +import { Card, Row, Col, Typography, Divider } from "antd"; +import { Level1SettingPageContent, Level1SettingPageTitle } from "../styled"; +import { trans } from "i18n"; + +import { Image } from 'antd'; +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; +import { getOrgApiUsage, getOrgLastMonthApiUsage } from "redux/selectors/orgSelectors"; +import { fetchAPIUsageAction, fetchLastMonthAPIUsageAction } from "redux/reduxActions/orgActions"; +import { HelpText } from "components/HelpText"; +import { useEffect } from "react"; + +const { Paragraph, Text } = Typography; + +const StyledSection = styled.div` + margin-bottom: 32px; + + .ant-card { + border-radius: 8px; + } + + .image-placeholder { + background: #f5f5f5; + border: 1px dashed #ccc; + height: 200px; + display: flex; + align-items: center; + justify-content: center; + color: #999; + font-size: 14px; + } +`; + +export const AppUsage = () => { + const isLicenseActive = useSelector(selectIsLicenseActive); + return isLicenseActive ? <AppUsageRoutes /> : <AppUsageDoc />; +}; + +const AppUsageRoutes = () => ( + <Switch> + <Route path={APP_USAGE_DASHBOARD} component={AppUsageDashboard} exact /> + <Route path={APP_USAGE_DETAIL} component={AppUsageDetail} exact /> + </Switch> +); + +const AppUsageDoc = () => { + +const user = useSelector(getUser); +const deploymentId = useSelector(getDeploymentId); +const dispatch = useDispatch(); + +const apiUsage = useSelector(getOrgApiUsage); + useEffect(() => { + dispatch(fetchAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + const lastMonthApiUsage = useSelector(getOrgLastMonthApiUsage); + useEffect(() => { + dispatch(fetchLastMonthAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + return ( + <Level1SettingPageContent> + <Level1SettingPageTitle>{trans("enterprise.AppUsageTitle")}</Level1SettingPageTitle> + + <StyledSection> + <Card title={trans("enterprise.AppUsageIntroTitle")}> + <Paragraph>{trans("enterprise.AppUsageIntro1")}</Paragraph> + <Paragraph>{trans("enterprise.AppUsageIntro2")}</Paragraph> + <Paragraph>{trans("enterprise.AppUsageIntro3")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.AppUsageMetricsTitle")}> + <Paragraph>{trans("enterprise.AppUsageMetricsIntro")}</Paragraph> + <ul> + <li>{trans("enterprise.MetricActiveUsers")}</li> + <li>{trans("enterprise.MetricViewsPerApp")}</li> + <li>{trans("enterprise.MetricDevices")}</li> + <li>{trans("enterprise.MetricBrowsers")}</li> + <li>{trans("enterprise.MetricCountries")}</li> + </ul> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.AppUsageScreenshotsTitle")}> + <Row gutter={[24, 24]}> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20App%20Usage%20Metrics%20Geomap.png" + alt="Enterprise Edition | App Usage Metrics Geomap" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | App Usage Metrics Geomap</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20App%20Usage%20Metrics%20Stats.png" + alt="Enterprise Edition | App Usage Metrics and Statistics" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | App Usage Metrics and Statistics</Text>, + }} + /> + </Col> + </Row> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.yourDeploymentID")}> + <Paragraph><h3>{deploymentId}</h3></Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.PricingTitle")}> + <Paragraph>{trans("enterprise.PricingIntro")}</Paragraph> + + <Paragraph> + <Text strong>{trans("enterprise.FlatRateTitle")}</Text> + <br /> + {trans("enterprise.FlatRateDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.FlatRatePoint1")}</li> + <li>{trans("enterprise.FlatRatePoint2")}</li> + </ul> + + <Divider /> + + <Paragraph> + <Text strong>{trans("enterprise.UsagePricingTitle")}</Text> + <br /> + {trans("enterprise.UsagePricingDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.API100k")}</li> + <li>{trans("enterprise.API1M")}</li> + <li>{trans("enterprise.API10M")}</li> + </ul> + + <Paragraph>{trans("enterprise.UsageOverrunDesc")}</Paragraph> + <Paragraph>{trans("enterprise.UsageTopUpInfo")}</Paragraph> + + <Divider/> + + <Text strong className="section-title">{trans("advanced.APIConsumption")}</Text> + <HelpText style={{ marginBottom: 12 }}>{trans("advanced.APIConsumptionDescription")}</HelpText> + <div className="section-content"> + {trans("advanced.overallAPIConsumption")} : {apiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(apiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")}<br/> + {trans("advanced.lastMonthAPIConsumption")} : {lastMonthApiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(lastMonthApiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")} + </div> + + </Card> + </StyledSection> + + </Level1SettingPageContent> + ); +}; diff --git a/client/packages/lowcoder/src/pages/setting/audit/AreaTimeChart/index.tsx b/client/packages/lowcoder/src/pages/setting/audit/AreaTimeChart/index.tsx new file mode 100644 index 0000000000..285c0bfc9d --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/audit/AreaTimeChart/index.tsx @@ -0,0 +1,68 @@ +import { StyledReactECharts } from "../auditContants"; + +const apiUsage = [ + { date: '2024-12-07', usage: 860 }, + { date: '2024-12-08', usage: 13 }, + { date: '2024-12-09', usage: 0 }, + { date: '2024-12-10', usage: 83 }, + { date: '2024-12-11', usage: 58 }, + { date: '2024-12-12', usage: 0 }, + { date: '2024-12-13', usage: 138 }, + { date: '2024-12-14', usage: 439 }, + { date: '2024-12-15', usage: 11 }, + { date: '2024-12-16', usage: 0 }, + { date: '2024-12-17', usage: 485 }, + { date: '2024-12-18', usage: 907 }, + { date: '2024-12-19', usage: 91 }, + { date: '2024-12-20', usage: 0 }, +]; + +export const AreaTimeChart = () => { + const options = { + tooltip: { + trigger: 'axis', + position: (pt: any) => { + return [pt[0], '10%']; + } + }, + title: { + left: 'center', + text: 'Daily API Usage' + }, + xAxis: { + type: 'time', + boundaryGap: false + }, + yAxis: { + type: 'value', + boundaryGap: [0, '100%'] + }, + dataZoom: [ + { + type: 'inside', + start: 0, + end: 20 + }, + { + start: 0, + end: 20 + } + ], + series: [ + { + name: 'API Usage', + type: 'line', + smooth: true, + symbol: 'none', + areaStyle: {}, + data: apiUsage.map((data) => [new Date(data.date).getTime(), data.usage]) + } + ] + }; + + return ( + <StyledReactECharts + option={ options } + /> + ) +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/audit/auditContants.ts b/client/packages/lowcoder/src/pages/setting/audit/auditContants.ts new file mode 100644 index 0000000000..f0665ae423 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/audit/auditContants.ts @@ -0,0 +1,108 @@ +import ReactECharts from 'echarts-for-react'; +import { styled } from 'styled-components'; +import { trans } from "i18n"; + +export const StyledReactECharts = styled(ReactECharts)` + width: 100%; + height: 400px; +`; + +type EventType = | "USER_LOGIN" +| "USER_LOGOUT" +| "APPLICATION_CREATE" +| "APPLICATION_DELETE" +| "APPLICATION_UPDATE" +| "APPLICATION_MOVE" +| "APPLICATION_RECYCLED" +| "APPLICATION_RESTORE" +| "APPLICATION_PUBLISH" +| "APPLICATION_VERSION_CHANGE" +| "APPLICATION_SHARING_CHANGE" +| "APPLICATION_PERMISSION_CHANGE" +| "FOLDER_CREATE" +| "FOLDER_DELETE" +| "FOLDER_UPDATE" +| "QUERY_EXECUTION" +| "GROUP_CREATE" +| "GROUP_UPDATE" +| "GROUP_DELETE" +| "GROUP_MEMBER_ADD" +| "GROUP_MEMBER_ROLE_UPDATE" +| "GROUP_MEMBER_LEAVE" +| "GROUP_MEMBER_REMOVE" +| "SERVER_START_UP" +| "SERVER_INFO" +| "DATA_SOURCE_CREATE" +| "DATA_SOURCE_UPDATE" +| "DATA_SOURCE_DELETE" +| "DATA_SOURCE_PERMISSION_GRANT" +| "DATA_SOURCE_PERMISSION_UPDATE" +| "DATA_SOURCE_PERMISSION_DELETE" +| "LIBRARY_QUERY_CREATE" +| "LIBRARY_QUERY_UPDATE" +| "LIBRARY_QUERY_DELETE" +| "LIBRARY_QUERY_PUBLISH" +| "API_CALL_EVENT"; + +export type AuditLog = { + eventType: EventType; + eventTime: string; + environmentId: string; + orgId: string; + userId: string; + appId: string; +}; + +export type AuditLogStat = { + eventType: EventType; + groupCountResult: number; +} + +export const eventTypes = [ + { value: "USER_LOGIN", label: trans("enterprise.USER_LOGIN"), color: "#1890ff" }, + { value: "USER_LOGOUT", label: trans("enterprise.USER_LOGOUT"), color: "#1d39c4" }, + { value: "APPLICATION_CREATE", label: trans("enterprise.APPLICATION_CREATE"), color: "#52c41a" }, + { value: "APPLICATION_DELETE", label: trans("enterprise.APPLICATION_DELETE"), color: "#389e0d" }, + { value: "APPLICATION_UPDATE", label: trans("enterprise.APPLICATION_UPDATE"), color: "#237804" }, + { value: "APPLICATION_MOVE", label: trans("enterprise.APPLICATION_MOVE"), color: "#135200" }, + { value: "APPLICATION_RECYCLED", label: trans("enterprise.APPLICATION_RECYCLED"), color: "#00474f" }, + { value: "APPLICATION_RESTORE", label: trans("enterprise.APPLICATION_RESTORE"), color: "#003a8c" }, + { value: "APPLICATION_PUBLISH", label: trans("enterprise.APPLICATION_PUBLISH"), color: "#002766" }, + { value: "APPLICATION_VERSION_CHANGE", label: trans("enterprise.APPLICATION_VERSION_CHANGE"), color: "#0050b3" }, + { value: "APPLICATION_SHARING_CHANGE", label: trans("enterprise.APPLICATION_SHARING_CHANGE"), color: "#1890ff" }, + { value: "APPLICATION_PERMISSION_CHANGE", label: trans("enterprise.APPLICATION_PERMISSION_CHANGE"), color: "#1d39c4" }, + { value: "FOLDER_CREATE", label: trans("enterprise.FOLDER_CREATE"), color: "#faad14" }, + { value: "FOLDER_DELETE", label: trans("enterprise.FOLDER_DELETE"), color: "#d48806" }, + { value: "FOLDER_UPDATE", label: trans("enterprise.FOLDER_UPDATE"), color: "#ad6800" }, + { value: "QUERY_EXECUTION", label: trans("enterprise.QUERY_EXECUTION"), color: "#722ed1" }, + { value: "GROUP_CREATE", label: trans("enterprise.GROUP_CREATE"), color: "#f5222d" }, + { value: "GROUP_UPDATE", label: trans("enterprise.GROUP_UPDATE"), color: "#cf1322" }, + { value: "GROUP_DELETE", label: trans("enterprise.GROUP_DELETE"), color: "#a8071a" }, + { value: "GROUP_MEMBER_ADD", label: trans("enterprise.GROUP_MEMBER_ADD"), color: "#820014" }, + { value: "GROUP_MEMBER_ROLE_UPDATE", label: trans("enterprise.GROUP_MEMBER_ROLE_UPDATE"), color: "#5c0011" }, + { value: "GROUP_MEMBER_LEAVE", label: trans("enterprise.GROUP_MEMBER_LEAVE"), color: "#8c8c8c" }, + { value: "GROUP_MEMBER_REMOVE", label: trans("enterprise.GROUP_MEMBER_REMOVE"), color: "#595959" }, + { value: "SERVER_START_UP", label: trans("enterprise.SERVER_START_UP"), color: "#8c8c8c" }, + { value: "SERVER_INFO", label: trans("enterprise.SERVER_INFO"), color: "#595959" }, + { value: "DATA_SOURCE_CREATE", label: trans("enterprise.DATA_SOURCE_CREATE"), color: "#f5222d" }, + { value: "DATA_SOURCE_UPDATE", label: trans("enterprise.DATA_SOURCE_UPDATE"), color: "#cf1322" }, + { value: "DATA_SOURCE_DELETE", label: trans("enterprise.DATA_SOURCE_DELETE"), color: "#a8071a" }, + { value: "DATA_SOURCE_PERMISSION_GRANT", label: trans("enterprise.DATA_SOURCE_PERMISSION_GRANT"), color: "#820014" }, + { value: "DATA_SOURCE_PERMISSION_UPDATE", label: trans("enterprise.DATA_SOURCE_PERMISSION_UPDATE"), color: "#5c0011" }, + { value: "DATA_SOURCE_PERMISSION_DELETE", label: trans("enterprise.DATA_SOURCE_PERMISSION_DELETE"), color: "#8c8c8c" }, + { value: "LIBRARY_QUERY_CREATE", label: trans("enterprise.LIBRARY_QUERY_CREATE"), color: "#722ed1" }, + { value: "LIBRARY_QUERY_UPDATE", label: trans("enterprise.LIBRARY_QUERY_UPDATE"), color: "#531dab" }, + { value: "LIBRARY_QUERY_DELETE", label: trans("enterprise.LIBRARY_QUERY_DELETE"), color: "#391085" }, + { value: "LIBRARY_QUERY_PUBLISH", label: trans("enterprise.LIBRARY_QUERY_PUBLISH"), color: "#22075e" }, + { value: "API_CALL_EVENT", label: trans("enterprise.API_CALL_EVENT"), color: "#8c8c8c" }, +]; + +// temporary geoLocation data +export const geoLocation = { + "location": { + "accuracy_radius": 500, + "latitude": 24.8591, + "longitude": 66.9983, + "time_zone": "Asia/Karachi" + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/audit/charts/eventTypesTime.tsx b/client/packages/lowcoder/src/pages/setting/audit/charts/eventTypesTime.tsx new file mode 100644 index 0000000000..ffb5ae83f2 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/audit/charts/eventTypesTime.tsx @@ -0,0 +1,127 @@ +import React, { useRef } from "react"; +import ReactECharts from "echarts-for-react"; +import dayjs from "dayjs"; +import { debounce } from "lodash"; + +interface Props { + data: Array<any>; + eventTypeLabels: any; + eventTypes: Array<{ value: string; color: string }>; + setDateRange: (range: { fromTimestamp: string; toTimestamp: string }) => void; +} + +const EventTypeTimeChart = ({ data, eventTypeLabels, eventTypes, setDateRange }: Props) => { + const chartRef = useRef<any>(null); + + const debouncedSetDateRange = useRef( + debounce((fromTimestamp: string, toTimestamp: string) => { + setDateRange({ fromTimestamp, toTimestamp }); + }, 500) // Delays fetching only after zooming stops + ).current; + + // Extract min/max dates from the data + const allDates = data.map((log) => log.eventTime && dayjs(log.eventTime).format("YYYY-MM-DD")); + const minDate = allDates.length ? dayjs(Math.min(...allDates.map((d) => new Date(d).getTime()))) : dayjs().subtract(7, "days"); + const maxDate = allDates.length ? dayjs(Math.max(...allDates.map((d) => new Date(d).getTime()))) : dayjs(); + + // Generate full date range including missing days + const fullDateRange: string[] = []; + let currentDate = minDate; + while (currentDate.isBefore(maxDate) || currentDate.isSame(maxDate, "day")) { + fullDateRange.push(currentDate.format("YYYY-MM-DD")); + currentDate = currentDate.add(1, "day"); + } + + // Group data by date and eventType + const groupedData = data.reduce((acc: any, log: any) => { + const eventTime = log.eventTime ? new Date(log.eventTime) : null; + if (eventTime && !isNaN(eventTime.getTime())) { + const date = eventTime.toISOString().split("T")[0]; // Extract date part + if (!acc[date]) acc[date] = {}; + acc[date][log.eventType] = (acc[date][log.eventType] || 0) + 1; + } + return acc; + }, {}); + + // Get unique event types + const eventTypesSet = [...new Set(data.map((log: any) => log.eventType))]; + + const colorMap: { [key: string]: string } = Object.fromEntries( + eventTypes.map((et) => [et.value, et.color]) + ); + + // Prepare series data for each event type + const series = eventTypesSet.map((eventType) => ({ + name: eventTypeLabels[eventType] || eventType, + type: "bar", + stack: "total", + data: fullDateRange.map((date) => groupedData[date]?.[eventType] || 0), // Fill gaps with 0 + itemStyle: { + color: colorMap[eventType] || "#8c8c8c", // Use predefined color or fallback + }, + })); + + const handleChartEvents = (params: any) => { + // const {start, end} = params.batch?.[0]; + let {start, end} = params; + if (params?.batch) { + start = params.batch?.[0]?.start; + end = params.batch?.[0]?.end; + } + if (start !== undefined && end !== undefined) { + // debugger; + const startIndex = Math.floor((start / 100) * (fullDateRange.length - 1)); + const endIndex = Math.floor((end / 100) * (fullDateRange.length - 1)); + + const fromDate = new Date(fullDateRange[startIndex] || fullDateRange[0]); // Keep start of day + const toDate = new Date(fullDateRange[endIndex] || fullDateRange[fullDateRange.length - 1]); + + toDate.setHours(23, 59, 59, 999); + + const fromTimestamp = fromDate.toISOString(); + const toTimestamp = toDate.toISOString(); + debouncedSetDateRange(fromTimestamp, toTimestamp); + } + }; + + return ( + <ReactECharts + ref={chartRef} + option={{ + title: { text: "Audit Log", left: "center" }, + tooltip: { trigger: "axis", axisPointer: { type: "shadow" } }, + legend: { left: "left", orient: "vertical", top: "12%" }, // Ensure labels are on the left + grid: { left: "20%", right: "4%", bottom: "3%", containLabel: true }, + xAxis: { + type: "category", + data: fullDateRange, + axisLabel: { rotate: 45 }, + }, + yAxis: { + type: "value", + }, + dataZoom: [ + { + type: "slider", + xAxisIndex: 0, + filterMode: "weakFilter", + show: true, + start: 0, + end: 100, + realtime: false, + }, + { + type: "inside", + xAxisIndex: 0, + realtime: false, + }, + ], + series, + }} + onEvents={{ dataZoom: handleChartEvents }} + style={{ height: "400px", marginBottom: "20px" }} + /> + ); +}; + +export default EventTypeTimeChart; diff --git a/client/packages/lowcoder/src/pages/setting/audit/components/statistics.tsx b/client/packages/lowcoder/src/pages/setting/audit/components/statistics.tsx new file mode 100644 index 0000000000..88ee073096 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/audit/components/statistics.tsx @@ -0,0 +1,36 @@ +import Statistic from "antd/es/statistic"; +import { AuditLogStat } from "../auditContants"; +import Card from "antd/es/card"; +import styled from "styled-components"; +import { useMemo } from "react"; + +const StyledStatistics = styled(Statistic)` + .ant-statistic-title { + font-size: 12px; + } + .ant-statistic-content { + font-size: 20px; + } +`; + +const Statistics = ({ stats }: { stats: AuditLogStat[] }) => { + const width = useMemo(() => { + if (stats.length < 5) return `${100/stats.length}%`; + return '20%'; + }, [stats.length]); + + return ( + <Card size="small" variant="borderless" style={{marginBottom: '20px'}}> + {stats.map(stat => ( + <Card.Grid key={stat.eventType} hoverable={false} style={{width, padding: '12px'}}> + <StyledStatistics + title={stat.eventType.split('_').join(' ')} + value={stat.groupCountResult} + /> + </Card.Grid> + ))} + </Card> + ) +} + +export default Statistics; diff --git a/client/packages/lowcoder/src/pages/setting/audit/dashboard.tsx b/client/packages/lowcoder/src/pages/setting/audit/dashboard.tsx new file mode 100644 index 0000000000..1180bd39bf --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/audit/dashboard.tsx @@ -0,0 +1,504 @@ +import { Card, Form, Select, Input, Button, message, Divider, Skeleton, Table, Flex, Tag, TableProps } from "antd"; +import React, { useEffect, useState, useCallback, useMemo } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import styled from "styled-components"; +import { trans } from "i18n"; +import { + DetailContainer, + DetailContent, + Header, + } from "../theme/styledComponents"; +import { HeaderBack } from "pages/setting/permission/styledComponents"; +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { getAuditLogs, getAuditLogStatistics, getEnvironmentsByIds, getMeta } from "api/enterpriseApi"; +import EventTypeTimeChart from "./charts/eventTypesTime"; +import { debounce, uniqBy } from "lodash"; +import { DatePicker } from "antd"; +import dayjs, { Dayjs } from "dayjs"; +import { Link, useLocation } from "react-router-dom"; +import history from "util/history"; +import { SETTING_URL } from "@lowcoder-ee/constants/routesURL"; +import { EyeOutlined } from "@ant-design/icons"; +import { AuditLog, AuditLogStat, eventTypes } from "./auditContants"; +import Statistics from "./components/statistics"; +import { Level1SettingPageTitle } from "../styled"; + +const { RangePicker } = DatePicker; + +const LOG_PAGE_SIZE = 100; + +const AuditContent = styled.div` + font-size: 14px; + color: #8b8fa3; + flex-grow: 1; + padding-top: 0px; + padding-left: 0px; + max-width: 100%; +`; + +const StyleThemeSettingsCover = styled.div` + display: flex; + flex-direction: row; + background: linear-gradient(34deg, rgba(2, 0, 36, 1) 0%, rgba(102, 9, 121, 1) 35%, rgba(0, 255, 181, 1) 100%); + padding: 15px; + height: 80px; + border-radius: 10px 10px 0 0; +`; + +export const getEventColor = (eventType: string): string => { + const matchedType = eventTypes.find((et) => et.value === eventType); + return matchedType ? matchedType.color : "#8c8c8c"; +}; + +export const getEventLabel = (eventType: string): string => { + const matchedType = eventTypes.find((et) => et.value === eventType); + return matchedType ? matchedType.label : "unknown"; +}; + +export function AuditLogDashboard() { + const currentUser = useSelector(getUser); + const location = useLocation(); + + const [allLogs, setAllLogs] = useState<AuditLog[]>([]); + const [currentPageLogs, setCurrentPageLogs] = useState<AuditLog[]>([]); + const [statistics, setStatistics] = useState<AuditLogStat[]>([]); + const [dataMap, setDataMap] = useState<Record<string, any>>({}); + + const [total, setTotal] = useState(0); + const [loading, setLoading] = useState(false); + const [form] = Form.useForm(); + const [pagination, setPagination] = useState({ pageSize: 25, current: 1 }); + + // Function to get URL parameters + const getQueryParams = () => { + const params = new URLSearchParams(location.search); + let queryObject: Record<string, any> = {}; + + // Convert search params into a JavaScript object + params.forEach((value, key) => { + if (key !== 'fromTimestamp' && key !== 'toTimestamp') { + queryObject[key] = value; + } + }); + + // set date range picker values + let dateRange = new Array<Dayjs>(2); + if (params.get('fromTimestamp')) { + dateRange[0] = dayjs(params.get('fromTimestamp')); + } + if (params.get('toTimestamp')) { + dateRange[1] = dayjs(params.get('toTimestamp')); + } + + queryObject['dateRange'] = dateRange; + return queryObject; + }; + + useEffect(() => { + form.setFieldsValue(getQueryParams()); + }, []); + + const findUniqueDataIds = async () => { + if (!allLogs.length) { + return setDataMap({}); + } + + const uniqueOrgIds: string[] = uniqBy(allLogs, 'orgId').map(item => item.orgId); + const uniqueUserIds: string[] = uniqBy(allLogs, 'userId').map(item => item.userId); + const uniqueEnvIds: string[] = uniqBy(allLogs, 'environmentId').map(item => item.environmentId); + + const metaResponse = await getMeta({ + orgIds: uniqueOrgIds, + userIds: uniqueUserIds, + appIds: [], + groupIds: [], + bundleIds: [], + datasourceIds: [], + folderIds: [], + libraryQueryIds: [] + }); + + const envResponse = await getEnvironmentsByIds(uniqueEnvIds); + + const tempDataMap: Record<string, any> = {}; + metaResponse.data?.orgs?.forEach((org: { id: string; name: string; }) => { + tempDataMap[org.id] = org.name; + }); + metaResponse.data?.users?.forEach((user: { id: string; name: string; }) => { + tempDataMap[user.id] = user.name; + }); + envResponse.data?.forEach((env: { environmentId: string; environmentType: string; }) => { + tempDataMap[env.environmentId] = env.environmentType; + }); + setDataMap(tempDataMap); + } + + useEffect(() => { + findUniqueDataIds(); + }, [allLogs]); + + const getCleanedParams = (newPage?: number, newPageSize?: number) => { + const formValues = form.getFieldsValue(); + + let cleanedParams = Object.fromEntries( + Object.entries({ + ...formValues, + fromTimestamp: formValues.dateRange?.[0] ? formValues.dateRange[0].toISOString() : undefined, + toTimestamp: formValues.dateRange?.[1] ? formValues.dateRange[1].toISOString() : undefined, + }).filter(([key, value]) => value !== undefined && value !== null && value !== "" && key !== 'dateRange') + ); + if (newPage) { + cleanedParams = { + ...cleanedParams, + pageSize: newPageSize || LOG_PAGE_SIZE, // Always fetch 500 from API + pageNum: newPage, // API page number + } + } + + return cleanedParams; + } + + const handleQueryParams = (queryParams: Record<string, string>) => { + const params = new URLSearchParams(); + Object.keys(queryParams).map((key) => { + const value = queryParams[key]; + if (value) { + params.set(key, value); + } else { + params.delete(key); // Remove the key if the value is empty + } + }) + history.push({ search: params.toString() }) + } + + const fetchStatistics = async () => { + const cleanedParams = getCleanedParams(); + + const stats = await getAuditLogStatistics(cleanedParams); + setStatistics(stats?.data || []); + } + + // Fetch Logs with all form values if set + const fetchLogs = async ( + newPage: number, + newPageSize: number = LOG_PAGE_SIZE, + resetData: boolean = false, + resetDataOnly: boolean = false, + ) => { + const cleanedParams = getCleanedParams(newPage, newPageSize); + + handleQueryParams(cleanedParams as any); + + setLoading(true); + try { + const data = await getAuditLogs(cleanedParams); + // fetch statistics only when page is 1 + if (newPage === 1 && !resetDataOnly) { + fetchStatistics(); + } + + if (resetData) { + setAllLogs(data.data || []); + setPagination({ pageSize: 25, current: 1 }); // Reset pagination + } if (resetDataOnly) { + setAllLogs(data.data || []); + } else { + setAllLogs((prevLogs) => [...prevLogs, ...(data?.data || [])]); + } + + setTotal(data.totalCount); + } catch (error) { + message.error("Failed to fetch audit logs."); + } finally { + setLoading(false); + } + }; + + // Handle chart zoom + const handleChartZoom = ({ fromTimestamp, toTimestamp }: { fromTimestamp: string; toTimestamp: string }) => { + console.log("Zoom applied:", fromTimestamp, toTimestamp); + + const startDate = dayjs(fromTimestamp); + const endDate = dayjs(toTimestamp); + form.setFieldsValue({ dateRange: [startDate, endDate] }); + + // setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + fetchLogs(1, total, true); + }; + + // Debounce handler for input fields + const handleInputChange = useCallback( + debounce(() => { + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + fetchLogs(1, LOG_PAGE_SIZE, true); + }, 300), + [] + ); + + const handleClickFilter = (field: any, value: any) => { + form.setFieldsValue({ [field]: value }); + + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + fetchLogs(1, LOG_PAGE_SIZE, true); + }; + + const handleDateChange = (dates: any) => { + if (dates?.[0] && dates?.[1]) { + form.setFieldsValue({ + fromTimestamp: dates[0].toISOString(), + toTimestamp: dates[1].toISOString(), + }); + } else { + form.resetFields(["fromTimestamp", "toTimestamp"]); + } + + // Reset pagination and clear logs BEFORE calling fetchLogs + setPagination({ pageSize: 25, current: 1 }); + setAllLogs([]); + setCurrentPageLogs([]); + + // Ensure fetchLogs is called only ONCE + fetchLogs(1, LOG_PAGE_SIZE, true); + }; + + // Handle page change + const handleTableChange: TableProps<any>["onChange"] = (newPagination) => { + const newPage = newPagination.current ?? 1; + const pageSize = newPagination.pageSize ?? 25; + const startIndex = (newPage - 1) * pageSize; + const endIndex = startIndex + pageSize; + + console.log( + `New Page: ${newPage}, StartIndex: ${startIndex}, EndIndex: ${endIndex}, AllLogs Length: ${allLogs.length}, Total: ${total}` + ); + + if (endIndex <= allLogs.length) { + // ✅ Correctly slice logs and update state + setCurrentPageLogs(allLogs.slice(startIndex, endIndex)); + } else if (allLogs.length < total) { + // ✅ Fetch next set of logs and update state after fetch + const originalNextApiPage = Math.floor((newPage * pageSize) / 100) + 1; + let nextApiPage = Math.floor(allLogs.length / 100) + 1; + let logPageSize = LOG_PAGE_SIZE; + let reset = false; + if (originalNextApiPage - pagination.current > 1) { + reset = true; + nextApiPage = 1; + logPageSize = newPage * pageSize; //(originalNextApiPage - pagination.current) * 100; + } + fetchLogs(nextApiPage, logPageSize, false, reset).then(() => { + setCurrentPageLogs(allLogs.slice(startIndex, endIndex)); + }); + } + + setPagination({ pageSize, current: newPage }); + }; + + useEffect(() => { + if (allLogs.length > 0) { + const startIndex = (pagination.current - 1) * pagination.pageSize; + const endIndex = startIndex + pagination.pageSize; + + console.log(`Updating displayed logs: StartIndex ${startIndex}, EndIndex ${endIndex}`); + setCurrentPageLogs(allLogs.slice(startIndex, endIndex)); + } + }, [pagination, allLogs]); + + + // Initial Fetch on Mount + useEffect(() => { + fetchLogs(1); + }, [currentUser.currentOrgId]); + + const columns = [ + { + title: "", + dataIndex: "eventDetail", + key: "eventDetail", + render: (_: string, record: any) => ( + <Link to={{ + pathname: `${SETTING_URL}/audit/${record.id}/detail`, + }} + > + <EyeOutlined /> + </Link> + ), + }, + { + title: "Event Type", + dataIndex: "eventType", + key: "eventType", + render: (text: string) => text ? <Tag color={getEventColor(text)}>{getEventLabel(text)}</Tag> : null, + }, + { + title: "Event Time", + dataIndex: "eventTime", + key: "eventTime", + render: (text: string) => { + if (!text) return null; + const date = new Date(text); + return new Intl.DateTimeFormat(navigator.language, { + year: "numeric", + month: "long", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + timeZoneName: "short", + }).format(date); + }, + }, + { + title: "Environment ID", + dataIndex: "environmentId", + key: "environmentId", + render: (text: string) => ( + <a onClick={() => handleClickFilter("environmentId", text)}>{dataMap[text] ?? text}</a> + ), + }, + { + title: "Org ID", + dataIndex: "orgId", + key: "orgId", + render: (text: string) => ( + <a onClick={() => handleClickFilter("orgId", text)}>{dataMap[text] ?? text}</a> + ), + }, + { + title: "User ID", + dataIndex: "userId", + key: "userId", + render: (text: string) => ( + <a onClick={() => handleClickFilter("userId", text)}>{dataMap[text] ?? text}</a> + ), + }, + { + title: "App ID", + dataIndex: "appId", + key: "appId", + render: (text: string, record: any) => ( + <a onClick={() => handleClickFilter("appId", text)}> + { + record.details?.applicationName + || record.details?.applicationId + || '-' + } + </a> + ), + } + ]; + + const eventTypeLabels = Object.fromEntries(eventTypes.map((et) => [et.value, et.label])); + + return ( + <DetailContainer> + <Header> + <Level1SettingPageTitle style={{marginBottom: 0}}> + <span>{trans("enterprise.AuditLogTitle")}</span> + </Level1SettingPageTitle> + </Header> + + <DetailContent> + <AuditContent> + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("enterprise.AuditLogOverview")}</h2> + </StyleThemeSettingsCover> + <Card size="small" style={{ marginBottom: "20px" }}> + <Form + form={form} + layout="inline" + onValuesChange={(changedValue) => { + const key = Object.keys(changedValue)[0]; + if (key === "dateRange") { + handleDateChange(changedValue.dateRange); + } else if (["environmentId", "orgId", "userId", "appId"].includes(key)) { + handleInputChange(); // Debounced input change + } else { + // Avoid calling fetchLogs if `handleDateChange` already did + fetchLogs(1, LOG_PAGE_SIZE, true); + } + }} + > + <Flex gap="middle" vertical> + <Flex> + <Form.Item name="dateRange"> + <RangePicker + showTime + format="YYYY-MM-DD 00:00:00" + value={form.getFieldValue("dateRange")}/> + </Form.Item> + <Form.Item name="eventType"> + <Select + allowClear + showSearch + placeholder="Event Type" + options={eventTypes} + style={{ width: 200 }} + /> + </Form.Item> + </Flex> + + <Flex> + <Form.Item name="environmentId"> + <Input placeholder="Environment ID" allowClear /> + </Form.Item> + <Form.Item name="orgId"> + <Input placeholder="Org ID" allowClear /> + </Form.Item> + <Form.Item name="userId"> + <Input placeholder="User ID" allowClear /> + </Form.Item> + <Form.Item name="appId"> + <Input placeholder="App ID" allowClear /> + </Form.Item> + </Flex> + </Flex> + </Form> + </Card> + {Boolean(statistics.length) && !loading && ( + <Statistics stats={statistics} /> + )} + <Card> + {loading ? ( + <Skeleton active paragraph={{ rows: 5 }} /> + ) : currentPageLogs.length > 0 ? ( + <> + <EventTypeTimeChart + data={allLogs} + eventTypeLabels={eventTypeLabels} + eventTypes={eventTypes} + setDateRange={handleChartZoom} + /> + <Divider /> + <div style={{ overflowX: "auto", width: "100%" }}> + <Table + rowKey="id" + columns={columns} + dataSource={currentPageLogs} + size="small" // Compact Layout + pagination={{ + pageSize: pagination.pageSize, + current: pagination.current, + total: total, + }} + style={{ width: "95%", whiteSpace: "nowrap" }} // Fixed width, prevent line break + onChange={handleTableChange} // Handle pagination + loading={loading} + /> + </div> + </> + ) : ( + <p>No logs found. Adjust the filters and try again.</p> + )} + </Card> + </AuditContent> + </DetailContent> + </DetailContainer> + ); +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/audit/detail.tsx b/client/packages/lowcoder/src/pages/setting/audit/detail.tsx new file mode 100644 index 0000000000..db7684a98f --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/audit/detail.tsx @@ -0,0 +1,331 @@ +import { useParams } from "react-router-dom"; +import { DetailContainer, DetailContent, Header } from "../theme/styledComponents"; +import { HeaderBack } from "../permission/styledComponents"; +import { trans } from "i18n"; +import Card from "antd/es/card"; +import { styled } from "styled-components"; +import Descriptions from "antd/es/descriptions"; +import { AppleOutlined, AppstoreAddOutlined, AppstoreOutlined, ChromeOutlined, DesktopOutlined, EnvironmentOutlined, FileSearchOutlined, InfoCircleOutlined, TeamOutlined, UserOutlined } from "@ant-design/icons"; +import { Map, Marker } from "pigeon-maps" +import Tree from "antd/es/tree"; +import Empty from "antd/es/empty"; +import { ReactNode, useEffect, useMemo, useState } from "react"; +import { getAuditLogs, getEnvironmentsByIds, getMeta } from "@lowcoder-ee/api/enterpriseApi"; +import { isEmpty } from "lodash"; +import { getEventColor, getEventLabel } from "./dashboard"; +import Tag from "antd/es/tag"; +import { ArrowIcon } from "lowcoder-design"; +import history from "util/history"; +import { AUDIT_LOG_DASHBOARD } from "@lowcoder-ee/constants/routesURL"; + +const StyleThemeSettingsCover = styled.div` + display: flex; + flex-direction: row; + background: linear-gradient(34deg, rgba(2, 0, 36, 1) 0%, rgba(102, 9, 121, 1) 35%, rgba(0, 255, 181, 1) 100%); + padding: 15px; + height: 80px; + border-radius: 10px 10px 0 0; +`; + +const StyledTree = styled(Tree)` + &.ant-tree { + margin-top: 24px; + } + + .ant-tree-treenode { + margin-bottom: 12px; + } + + .ant-tree-node-content-wrapper { + padding: 8px; + } + + .ant-tree-switcher { + padding-top: 8px; + &::before { + top: 8px; + } + } + + .ant-tree-switcher_open::after { + content: ""; + width: 1px; + height: 100%; + position: absolute; + left: 46%; + top: 26px; + background: #d9d9d9; + } + + .ant-descriptions-header { + margin-bottom: 8px; + } + + .ant-tree-indent-unit { + width: 0; + } +`; + +const getResourceName = (eventType: string) => { + if (eventType.startsWith("USER_")) return "User"; + if (eventType.startsWith("APPLICATION_")) return "Application"; + if (eventType.startsWith("FOLDER_")) return "Folder"; + if (eventType.startsWith("QUERY_") || eventType.startsWith("LIBRARY_QUERY_")) return "Query"; + if (eventType.startsWith("GROUP_")) return "Group"; + if (eventType.startsWith("SERVER_")) return "Server"; + if (eventType.startsWith("DATA_SOURCE")) return "Data Source"; + if (eventType.startsWith("API_")) return "API"; + + return undefined; +} + +const getResourceData = (eventType: string, eventDetail: any) => { + if (eventType.startsWith("APPLICATION_")) + return { ID: eventDetail.applicationId, Name: eventDetail.applicationName}; + + return { + ID: eventDetail.id, Name: eventDetail.name, + } +} + +const EventTreeNode = (props: { + icon: ReactNode, + title: string, + data: Record<string, any> +}) => { + return ( + <Descriptions + bordered + column={1} + size="small" + title={<span>{props.icon} {props.title}</span>} + > + {Object.keys(props.data).map(dataKey => ( + <Descriptions.Item key={dataKey} label={dataKey}>{props.data[dataKey] || '-'}</Descriptions.Item> + ))} + </Descriptions> + ) +} +export function AuditLogDetail() { + const { eventId } = useParams<{eventId: string}>(); + const [ event, setEvent ] = useState<any>({}); + const [ meta, setMeta ] = useState<any>({}); + const [ environment, setEnvironment ] = useState<any>({}); + + const fetchEventData = async () => { + const response = await getAuditLogs({ eventId }); + setEvent(response?.data?.[0]); + } + + const fetchEventMeta = async () => { + if (isEmpty(event)) return; + + const response = await getMeta({ + orgIds: [event.orgId], + userIds: [event.userId], + appIds: [], + groupIds: [], + bundleIds: [], + datasourceIds: [], + folderIds: [], + libraryQueryIds: [] + }); + setMeta(response.data); + } + + const fetchEnvironmentData = async () => { + if (isEmpty(event)) return; + + const response = await getEnvironmentsByIds([event.environmentId]); + setEnvironment(response.data?.[0] || {}); + } + + useEffect(() => { + fetchEventData(); + }, [eventId]); + + useEffect(() => { + fetchEventMeta(); + fetchEnvironmentData(); + }, [JSON.stringify(event)]); + + const eventHierarchy = useMemo(() => { + if (isEmpty(event)) return []; + + const date = new Date(event.eventTime); + const eventTime = new Intl.DateTimeFormat(navigator.language, { + year: "numeric", + month: "long", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + timeZoneName: "short", + }).format(date); + + const resourceName = getResourceName(event.eventType); + const eventNode = { + title: ( + <EventTreeNode + icon={<InfoCircleOutlined />} + title="Event" + data={{ + Type: <Tag color={getEventColor(event?.eventType)}>{getEventLabel(event?.eventType)}</Tag>, + Time: eventTime, + }} + /> + ), + key: "0-0-0-0-0", + } + + let eventData = []; + if (Boolean(resourceName)) { + if (resourceName !== "User") { + const resource = { + title: ( + <EventTreeNode + icon={<AppstoreAddOutlined />} + title={resourceName as string} + data={getResourceData(event.eventType as string, event.details) || {}} + /> + ), + key: "0-0-0-0", + children: [] as any[], + }; + resource.children.push(eventNode) + eventData.push(resource); + } else { + eventData.push(eventNode) + } + } + + return [ + { + title: ( + <EventTreeNode + icon={<EnvironmentOutlined />} + title="Environment" + data={{ + ID: event?.environmentId, + Name: environment?.environmentType || '-' + }} + /> + ), + key: "0", + children: [ + { + title: ( + <EventTreeNode + icon={<TeamOutlined />} + title="Workspace" + data={{ + ID: event?.orgId, + Name: meta?.orgs?.[0]?.name || '-', + }} + /> + ), + key: "0-0", + children: [ + { + title: ( + <EventTreeNode + icon={<UserOutlined />} + title="User" + data={{ + ID: event?.userId, + Name: meta?.users?.[0]?.name || '-', + }} + /> + ), + key: "0-0-0", + children: eventData, + }, + ], + }, + ], + }, + ]; + }, [event, meta, environment]); + + if (!Boolean(event)) { + return ( + <DetailContainer> + <Header> + <HeaderBack> + <span onClick={() => history.push(AUDIT_LOG_DASHBOARD)}> + {trans("enterprise.AuditLogTitle")} + </span> + <ArrowIcon /> + <span>{"Audit Log Detail"}</span> + </HeaderBack> + </Header> + <DetailContent> + <Empty /> + </DetailContent> + </DetailContainer> + ) + } + + return ( + <DetailContainer> + <Header> + <HeaderBack> + <span onClick={() => history.push(AUDIT_LOG_DASHBOARD)}> + {trans("enterprise.AuditLogTitle")} + </span> + <ArrowIcon /> + <span>{trans("auditLog.title")}</span> + </HeaderBack> + </Header> + + <DetailContent> + {/* Geolocation */} + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("auditLog.geoLocation")}</h2> + </StyleThemeSettingsCover> + <Card size="small" style={{ marginBottom: "20px", borderTopLeftRadius: 0, borderTopRightRadius: 0 }}> + <Map + height={300} + defaultZoom={5} + defaultCenter={[55, 15]} + > + <Marker + width={50} + anchor={[55, 15]} + /> + </Map> + </Card> + + {/* Browser/System Meta data */} + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("auditLog.browserData")}</h2> + </StyleThemeSettingsCover> + <Card size="small" style={{ marginBottom: "20px", borderTopLeftRadius: 0, borderTopRightRadius: 0 }}> + <Descriptions bordered column={1} size="small"> + <Descriptions.Item label={<span><ChromeOutlined className="text-lg mr-2" /> {trans("auditLog.browser")}</span>}>{event?.agentName}</Descriptions.Item> + <Descriptions.Item label={<span><AppleOutlined className="text-lg mr-2" /> {trans("auditLog.OS")}</span>}>{event?.operatingSystemName} ({event?.operatingSystemVersion})</Descriptions.Item> + <Descriptions.Item label={<span><DesktopOutlined className="text-lg mr-2" /> {trans("auditLog.device")}</span>}>{event?.deviceName}</Descriptions.Item> + <Descriptions.Item label={<span><DesktopOutlined className="text-lg mr-2" /> {trans("auditLog.deviceType")}</span>}>{event?.deviceClass}</Descriptions.Item> + <Descriptions.Item label={<span><AppstoreOutlined className="text-lg mr-2" /> {trans("auditLog.engine")}</span>}>{event?.layoutEngineName} (Version: {event?.layoutEngineVersion})</Descriptions.Item> + <Descriptions.Item label={<span><AppstoreOutlined className="text-lg mr-2" /> {trans("auditLog.browserData")}</span>}>{event?.webviewAppName}</Descriptions.Item> + </Descriptions> + </Card> + + {/* Event Detail */} + <StyleThemeSettingsCover> + <h2 style={{ color: "#ffffff", marginTop: "8px" }}>{trans("auditLog.eventDetail")}</h2> + </StyleThemeSettingsCover> + <Card size="small" style={{ marginBottom: "20px", borderTopLeftRadius: 0, borderTopRightRadius: 0 }}> + {Boolean(eventHierarchy.length) && ( + <StyledTree + showLine + defaultExpandAll + selectable={false} + treeData={eventHierarchy} + /> + )} + </Card> + </DetailContent> + </DetailContainer> + ) +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/audit/index.tsx b/client/packages/lowcoder/src/pages/setting/audit/index.tsx index c743746255..552b191175 100644 --- a/client/packages/lowcoder/src/pages/setting/audit/index.tsx +++ b/client/packages/lowcoder/src/pages/setting/audit/index.tsx @@ -1,3 +1,214 @@ -export default function Audit() { - return null; -} +import { AUDIT_LOG_DASHBOARD, AUDIT_LOG_DETAIL } from "@lowcoder-ee/constants/routesURL"; +import { Route, Switch } from "react-router-dom"; +import { AuditLogDashboard } from "./dashboard"; +import { AuditLogDetail } from "./detail"; +import { useSelector, useDispatch } from "react-redux"; +import styled from "styled-components"; +import { Card, Divider, Typography, Row, Col, Image } from "antd"; +import { HelpText } from "components/HelpText"; +import { Level1SettingPageContent, Level1SettingPageTitle } from "../styled"; +import { trans } from "i18n"; +import { selectIsLicenseActive } from "redux/selectors/enterpriseSelectors"; + +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; +import { getOrgApiUsage, getOrgLastMonthApiUsage } from "redux/selectors/orgSelectors"; +import { fetchAPIUsageAction, fetchLastMonthAPIUsageAction } from "redux/reduxActions/orgActions"; +import { useEffect } from "react"; + +const { Title, Paragraph, Text } = Typography; + +const StyledSection = styled.div` + margin-bottom: 32px; + + .ant-card { + border-radius: 8px; + } + + .image-placeholder { + background: #f5f5f5; + border: 1px dashed #ccc; + height: 200px; + display: flex; + align-items: center; + justify-content: center; + color: #999; + font-size: 14px; + } +`; + +export const AuditLog = () => { + const isLicenseActive = useSelector(selectIsLicenseActive); + return isLicenseActive ? <AuditLogRoutes /> : <Audit />; +}; + +const AuditLogRoutes = () => ( + <Switch> + <Route path={AUDIT_LOG_DASHBOARD} component={AuditLogDashboard} exact /> + <Route path={AUDIT_LOG_DETAIL} component={AuditLogDetail} exact /> + </Switch> +); + +const Audit = () => { + + const user = useSelector(getUser); + const deploymentId = useSelector(getDeploymentId); + const dispatch = useDispatch(); + + const apiUsage = useSelector(getOrgApiUsage); + useEffect(() => { + dispatch(fetchAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + const lastMonthApiUsage = useSelector(getOrgLastMonthApiUsage); + useEffect(() => { + dispatch(fetchLastMonthAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + return ( + <Level1SettingPageContent> + <Level1SettingPageTitle>{trans("enterprise.AuditLogsTitle")}</Level1SettingPageTitle> + + <StyledSection> + <Card title={trans("enterprise.AuditLogsIntroTitle")}> + <Paragraph>{trans("enterprise.AuditLogsIntro1")} {trans("enterprise.AuditLogsIntro2")}</Paragraph> + <Paragraph>{trans("enterprise.AuditLogsIntro3")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.AuditLogsEventsTitle")}> + <Paragraph>{trans("enterprise.AuditLogsEventsIntro")}</Paragraph> + <Row gutter={[16, 8]}> + <Col span={12}> + <ul> + <li>{trans("enterprise.SignIn")}</li> + <li>{trans("enterprise.Logout")}</li> + <li>{trans("enterprise.ViewApp")}</li> + <li>{trans("enterprise.CreateApp")}</li> + <li>{trans("enterprise.DeleteApp")}</li> + <li>{trans("enterprise.UpdateApp")}</li> + <li>{trans("enterprise.MoveToFolder")}</li> + <li>{trans("enterprise.MoveToTrash")}</li> + <li>{trans("enterprise.RestoreApp")}</li> + <li>{trans("enterprise.CreateFolder")}</li> + <li>{trans("enterprise.DeleteFolder")}</li> + <li>{trans("enterprise.UpdateFolder")}</li> + <li>{trans("enterprise.ExecuteDataQuery")}</li> + </ul> + </Col> + <Col span={12}> + <ul> + <li>{trans("enterprise.CreateUserGroup")}</li> + <li>{trans("enterprise.UpdateUserGroup")}</li> + <li>{trans("enterprise.DeleteUserGroup")}</li> + <li>{trans("enterprise.AddGroupMember")}</li> + <li>{trans("enterprise.UpdateGroupMemberRole")}</li> + <li>{trans("enterprise.LeaveUserGroup")}</li> + <li>{trans("enterprise.RemoveGroupMember")}</li> + <li>{trans("enterprise.ServerStartup")}</li> + <li>{trans("enterprise.CreateDataSource")}</li> + <li>{trans("enterprise.UpdateDataSource")}</li> + <li>{trans("enterprise.DeleteDataSource")}</li> + <li>{trans("enterprise.GrantUpdateDeletePermission")}</li> + <li>{trans("enterprise.LibraryQueryActions")}</li> + <li>{trans("enterprise.PublishLibraryQuery")}</li> + </ul> + </Col> + </Row> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.AuditLogsPreviewTitle")}> + <Row gutter={[24, 24]}> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Audit%20Log%20Filters.png" + alt="Enterprise Edition | Audit Log Data Filters" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Audit Log Data Filters</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Audit%20Log%20Table.png" + alt="Enterprise Edition | Audit Log Table" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Audit Log Table</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Audit%20Log%20Details.png" + alt="Enterprise Edition | Audit Log Details" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Audit Log Details</Text>, + }} + /> + </Col> + </Row> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.yourDeploymentID")}> + <Paragraph><h3>{deploymentId}</h3></Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.PricingTitle")}> + <Paragraph>{trans("enterprise.PricingIntro")}</Paragraph> + + <Paragraph> + <Text strong>{trans("enterprise.FlatRateTitle")}</Text> + <br /> + {trans("enterprise.FlatRateDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.FlatRatePoint1")}</li> + <li>{trans("enterprise.FlatRatePoint2")}</li> + </ul> + + <Divider /> + + <Paragraph> + <Text strong>{trans("enterprise.UsagePricingTitle")}</Text> + <br /> + {trans("enterprise.UsagePricingDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.API100k")}</li> + <li>{trans("enterprise.API1M")}</li> + <li>{trans("enterprise.API10M")}</li> + </ul> + + <Paragraph>{trans("enterprise.UsageOverrunDesc")}</Paragraph> + <Paragraph>{trans("enterprise.UsageTopUpInfo")}</Paragraph> + + <Divider/> + + <Text strong className="section-title">{trans("advanced.APIConsumption")}</Text> + <HelpText style={{ marginBottom: 12 }}>{trans("advanced.APIConsumptionDescription")}</HelpText> + <div className="section-content"> + {trans("advanced.overallAPIConsumption")} : {apiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(apiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")}<br/> + {trans("advanced.lastMonthAPIConsumption")} : {lastMonthApiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(lastMonthApiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")} + </div> + </Card> + </StyledSection> + </Level1SettingPageContent> + ); + +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/branding/BrandingSetting.tsx b/client/packages/lowcoder/src/pages/setting/branding/BrandingSetting.tsx index 1a687e90e8..12ce5e7a65 100644 --- a/client/packages/lowcoder/src/pages/setting/branding/BrandingSetting.tsx +++ b/client/packages/lowcoder/src/pages/setting/branding/BrandingSetting.tsx @@ -1,3 +1,1136 @@ -import React from "react"; +import { HelpText } from "components/HelpText"; +import { Upload, Switch, Card, Input, message, Divider, Row, Col, Image } from "antd"; +import { TacoButton, CustomSelect, messageInstance, Dropdown, ResetIcon, CustomModal } from "lowcoder-design"; +import React, { useEffect, useMemo, useState, useCallback, useRef } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import styled from "styled-components"; +import { trans } from "i18n"; +import { default as ColorPicker } from "antd/es/color-picker"; +import { + DetailContainer, + DetailContent, + Header, + } from "../theme/styledComponents"; +import { HeaderBack } from "pages/setting/permission/styledComponents"; +import { LoadingOutlined, PlusOutlined } from '@ant-design/icons'; +import type { UploadChangeParam, RcFile } from "antd/es/upload/interface"; +import MaterialApi, { MaterialUploadTypeEnum } from "@lowcoder-ee/api/materialApi"; +import { validateResponse } from "@lowcoder-ee/api/apiUtils"; +import { buildMaterialPreviewURL } from "@lowcoder-ee/util/materialUtils"; +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { Org } from "@lowcoder-ee/constants/orgConstants"; +import { BrandingConfig, BrandingSettings, createBranding, getBranding } from "@lowcoder-ee/api/enterpriseApi"; +import Flex from "antd/es/flex"; +import { fetchBrandingSetting } from "@lowcoder-ee/redux/reduxActions/enterpriseActions"; +import { Level1SettingPageTitle } from "../styled"; +import Title from "antd/es/typography/Title"; +import Paragraph from "antd/es/typography/Paragraph"; -export const BrandingSetting = () => null; +const { TextArea } = Input; + +enum SettingsEnum { + LOGO = "logo", + SQUARE_LOGO = "squareLogo", + ERROR_PAGE_IMAGE = "errorPageImage", + LOGOUT_PAGE_IMAGE = "loggedOutPageImage", + SIGNUP_PAGE_IMAGE = "signUpPageImage", + MAIN_BRANDING_COLOR = "mainBrandingColor", + APP_HEADER_COLOR = "appHeaderColor", + ADMIN_SIDEBAR_COLOR = "adminSidebarColor", + ADMIN_SIDEBAR_FONT_COLOR = "adminSidebarFontColor", + ADMIN_SIDEBAR_ACTIVE_BG_COLOR = "adminSidebarActiveBgColor", + ADMIN_SIDEBAR_ACTIVE_FONT_COLOR = "adminSidebarActiveFontColor", + EDITOR_SIDEBAR_COLOR = "editorSidebarColor", + EDITOR_SIDEBAR_FONT_COLOR = "editorSidebarFontColor", + EDITOR_SIDEBAR_ACTIVE_BG_COLOR = "editorSidebarActiveBgColor", + EDITOR_SIDEBAR_ACTIVE_FONT_COLOR = "editorSidebarActiveFontColor", + FONT = "font", + ERROR_PAGE_TEXT = "errorPageText", + SIGNUP_PAGE_TEXT = "signUpPageText", + LOGGED_OUT_PAGE_TEXT = "loggedOutPageText", + STANDARD_DESCRIPTION = "standardDescription", + STANDARD_TITLE = "standardTitle", + SHOW_DOCUMENTATION = "showDocumentation", + DOCUMENTATION_LINK = "documentationLink", + SUBMIT_ISSUE = "submitIssue", + WHATS_NEW = "whatsNew", + WHATS_NEW_LINK = "whatsNewLink", +} + +const defaultSettings = { + logo: null, + squareLogo: null, + mainBrandingColor: "#B480DE", + appHeaderColor: "#2c2c2c", + adminSidebarColor: "#f7f9fc", + adminSidebarFontColor: "#000000e0", + adminSidebarActiveBgColor: "#ebf0f7", + adminSidebarActiveFontColor: "#4965f2", + editorSidebarColor: "#393b47", + editorSidebarFontColor: "#ffffffa6", + editorSidebarActiveBgColor: "#8b8fa37f", + editorSidebarActiveFontColor: "#ffffff", + font: "Roboto", + errorPageText: "Oops! Something went wrong.", + errorPageImage: null, + signUpPageText: "Join us today to explore new opportunities!", + signUpPageImage: null, + loggedOutPageText: "You have been logged out successfully.", + loggedOutPageImage: null, + standardDescription: "This is a sample description for SEO.", + standardTitle: "Welcome to Our Application", + showDocumentation: true, + documentationLink: null, + submitIssue: true, + whatsNew: false, + whatsNewLink : null, +}; + +const settingDescription = { + logo: "The main logo displayed in the application header", + squareLogo: "Square or icon-style logo used where space is limited, like browser tabs or mobile headers.", + mainBrandingColor: "Core brand color used for branding across the app.", + appHeaderColor: "Background color of the application's top header/navigation bar.", + adminSidebarColor: "Background color of the admin panel's sidebar.", + adminSidebarFontColor: "Text color of the menu items in the admin sidebar.", + adminSidebarActiveBgColor: "Background color for the active/selected item in the admin sidebar.", + adminSidebarActiveFontColor: "Text color for the active/selected item in the admin sidebar.", + editorSidebarColor: "Background color of the editor (e.g., page builder) sidebar.", + editorSidebarFontColor: "Text color for items in the editor sidebar.6", + editorSidebarActiveBgColor: "Background color for the active item in the editor sidebar.", + editorSidebarActiveFontColor: "Text color for the active item in the editor sidebar.", + font: "Font family used throughout the app interface. Typically selected from Google Fonts.", + errorPageText: "Display a custom message and image when the app fails to load or encounters a critical error.", + errorPageImage: "Optional illustration or graphic shown on error pages.", + signUpPageText: "Customize the Sign Up page with a welcome message and an optional image to match your brand.", + signUpPageImage: "Optional graphic displayed on the signup page.", + loggedOutPageText: "You have been logged out successfully.", + loggedOutPageImage: null, + standardDescription: "Default description text used in metadata (e.g., SEO or share cards).", + standardTitle: "Set a default title and description for SEO and social media sharing when specific page metadata isn't provided", + showDocumentation: "Toggles whether a documentation link should appear in the app UI.", + documentationLink: null, + submitIssue: "Enables a link or button for users to report issues or bugs.", + whatsNew: "Enables display of new features, updates, or changelogs in the app.", + whatsNewLink : null, +}; + +const fonts = [ + {label: 'Roboto', value: 'Roboto'}, + {label: 'Open Sans', value: 'Open+Sans'}, + {label: 'Lato', value: 'Lato'}, + {label: 'Montserrat', value: 'Montserrat'}, + {label: 'Poppins', value: 'Poppins'}, + {label: 'Inter', value: 'Inter'}, + {label: 'Merriweather', value: 'Merriweather'}, + {label: 'Playfair Display', value: 'Playfair+Display'}, + {label: 'Raleway', value: 'Raleway'}, + {label: 'Nunito', value: 'Nunito'}, +] +// type FileType = Parameters<UploadProps["beforeUpload"]>[0] | undefined; + +const StyledBrandingSettingContent = styled.div` + font-size: 14px; + color: #8b8fa3; + flex-grow: 1; + padding-top: 0px; + padding-left: 0px; + max-width: 100%; + margin-top: 20px; +`; + +const StyledThemeSettingsCover = styled.div` + display: flex; + flex-direction: row; + background: linear-gradient(34deg, rgba(2, 0, 36, 1) 0%, rgba(102, 9, 121, 1) 35%, rgba(0, 255, 181, 1) 100%); + padding: 15px; + height: 80px; + border-radius: 10px 10px 0 0; +`; + +const StyledCoverTitle = styled.h2` + color: #ffffff; + margin-top: 8px; +`; + +const StyledSectionTitle = styled.h3` + margin-bottom: 12px; +`; + +const StyledInput = styled(Input)` + margin-bottom: 12px; +`; + +const StyledTextArea = styled(TextArea)` + margin-bottom: 12px; +`; + +const StyledDropdown = styled(Dropdown)` + width: 300px; +`; + +const StyledImage = styled(Image)` + border-radius: 6px; + box-shadow: 0px 0px 8px 0px lightgray; + object-fit: cover; + object-position: top; +`; + +const StyledCustomSelect = styled(CustomSelect)` + min-width: 150px; +`; + +const StyledRow = styled(Row)` + padding: 10px 0; +`; + +const StyledButtonContainer = styled(Flex)` + margin-top: 20px; +`; + +const StyledDivider = styled(Divider)` + margin: 20px 0; +`; + +const StyledSwitchContainer = styled.div` + margin-top: 20px; +`; + +const StyledRectUploadContainer = styled.div` + .avatar-uploader { + width: 240px; + height: 100px; + display: flex; + justify-content: center; + align-items: center; + border: 1px dashed #d9d9d9; + border-radius: 8px; + overflow: hidden; + } + + img { + width: 240px; + height: 100px; + object-fit: cover; + border-radius: 8px; + } +`; + +const StyledSquareUploadContainer = styled.div` + .avatar-uploader { + width: 100px; + height: 100px; + display: flex; + justify-content: center; + align-items: center; + border: 1px dashed #d9d9d9; + border-radius: 8px; + overflow: hidden; + } + + img { + width: 100px; + height: 100px; + object-fit: cover; + border-radius: 8px; + } +`; + +const getBase64 = (file: File): Promise<string> => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsBinaryString(file); + + reader.onload = () => resolve(reader.result as string); + reader.onerror = error => reject(error); + }); +}; + +const beforeUpload = (file: RcFile) => { + const isJpgOrPng = file.type === "image/jpeg" || file.type === "image/png" || file.type === "image/svg+xml"; + if (!isJpgOrPng) { + message.error("You can only upload JPG/PNG/SVG files!"); + return Upload.LIST_IGNORE; + } + const isLt2M = file.size / 1024 / 1024 < 2; + if (!isLt2M) { + message.error("Image must be smaller than 2MB!"); + return Upload.LIST_IGNORE; + } + return true; +}; + +export function BrandingSetting() { + const dispatch = useDispatch(); + const [configOrgId, setConfigOrgId] = useState<string>(''); + const [configOrgName, setConfigOrgName] = useState<string | undefined>('Global'); + const [settings, setSettings] = useState<BrandingSettings>(defaultSettings); + const [brandingConfig, setBrandingConfig] = useState<BrandingConfig>(); + const [defaultBrandingConfig, setDefaultBrandingConfig] = useState<BrandingConfig>(); + const [loading, setLoading] = useState({ + [SettingsEnum.LOGO]: false, + [SettingsEnum.SQUARE_LOGO]: false, + [SettingsEnum.ERROR_PAGE_IMAGE]: false, + [SettingsEnum.LOGOUT_PAGE_IMAGE]: false, + [SettingsEnum.SIGNUP_PAGE_IMAGE]: false, + }); + const currentUser = useSelector(getUser); + + const orgsList = useMemo(() => { + const list: Array<{label: string, value: string}> = [{ + label: 'Global', + value: '', + }]; + currentUser?.orgs?.forEach((org: Org) => { + list.push({ + value: org.id, + label: org.name, + }); + }); + return list; + }, [currentUser]); + + useEffect(() => { + const fetchBrandingDetails = async() => { + try { + const branding = await getBranding(configOrgId); + setBrandingConfig(branding); + setDefaultBrandingConfig(branding); + } catch(e) { + setBrandingConfig(undefined); + setDefaultBrandingConfig(undefined); + // message.error(trans("branding.fetchBrandingError")); + } + } + + fetchBrandingDetails(); + }, [configOrgId]); + + const isBrandingNotChange = useCallback(() => { + return JSON.stringify(brandingConfig) === JSON.stringify(defaultBrandingConfig); + }, [brandingConfig, defaultBrandingConfig]); + + const updateSettings = (key: keyof BrandingSettings, value: any) => { + setBrandingConfig((branding) => ({ + ...branding, + config_set: { + ...branding?.config_set, + [key]: value + } + })); + }; + + const handleUpload = async (options: any, imageType: keyof BrandingSettings) => { + const { onSuccess, onError, file } = options; + + try { + setLoading((loading) => ({ + ...loading, + [imageType]: true, + })) + const base64File = await getBase64(file); + const resp = await MaterialApi.upload( + file.name, + MaterialUploadTypeEnum.COMMON, + btoa(base64File), + ); + if (validateResponse(resp)) { + onSuccess(trans("success")); + updateSettings(imageType, resp.data.data.id); + return; + } + throw new Error("Something went wrong"); + } catch (error: any) { + onError(error); + messageInstance.error(trans("home.fileUploadError")); + } finally { + setLoading((loading) => ({ + ...loading, + [imageType]: false, + })) + } + } + + const handleSave = async (brandingConfig?: BrandingConfig) => { + try { + await createBranding({ + ...brandingConfig, + org_id: configOrgId, + }); + setDefaultBrandingConfig(brandingConfig); + messageInstance.success(trans("theme.saveSuccessMsg")); + + dispatch(fetchBrandingSetting({orgId: configOrgId})); + } catch (e) { + console.error(e) + } + } + + const handleDelete = (id: string) => { + CustomModal.confirm({ + title: trans("branding.deleteBranding"), + content: trans("branding.deleteBrandingContent", {orgName: configOrgName}), + onConfirm: () => { + const newBrandingConfig = { + ...brandingConfig, + config_name: '', + config_description: '', + config_icon: '', + config_set: {}, + } + setBrandingConfig(newBrandingConfig); + handleSave(newBrandingConfig); + }, + confirmBtnType: "delete", + okText: trans("delete"), + }) + } + + const uploadButton = useCallback((loading: boolean) => ( + <div> + {loading ? <LoadingOutlined /> : <PlusOutlined />} + <div style={{ marginTop: 8 }}>{trans("branding.upload")}</div> + </div> + ), []); + + return ( + <DetailContainer> + <Header> + <Level1SettingPageTitle style={{marginBottom: 0}}> + <span>{trans("branding.title")}</span> + </Level1SettingPageTitle> + </Header> + <DetailContent> + + {/* Branding Settings Selection */} + <StyledBrandingSettingContent> + <StyledThemeSettingsCover> + <StyledCoverTitle>{trans("branding.general")}</StyledCoverTitle> + </StyledThemeSettingsCover> + <Card> + <div> + <StyledSectionTitle>{trans("branding.selectWorkspace")}</StyledSectionTitle> + <StyledDropdown + placeholder={trans("branding.selectWorkspace")} + options={orgsList} + allowClear + onChange={(value) => { + setConfigOrgId(value); + setConfigOrgName(orgsList.find(org => org.value === value)?.label) + }} + value={configOrgId} + /> + </div> + + <div> + <StyledSectionTitle>{trans("branding.brandingName")}</StyledSectionTitle> + <StyledInput + placeholder={trans("branding.brandingNamePlaceholder")} + value={brandingConfig?.config_name} + onChange={(e) => { + setBrandingConfig((branding) => ({ + ...(branding || {}), + config_name: e.target.value + })) + }} + /> + {/* <HelpText>{trans("branding.documentationLinkHelp")}</HelpText> */} + </div> + + <div> + <StyledSectionTitle>{trans("branding.brandingDescription")}</StyledSectionTitle> + <StyledInput + placeholder={trans("branding.brandingDescriptionPlaceholder")} + value={brandingConfig?.config_description} + onChange={(e) => { + setBrandingConfig((branding) => ({ + ...(branding || {}), + config_description: e.target.value + })) + }} + /> + {/* <HelpText>{trans("branding.documentationLinkHelp")}</HelpText> */} + </div> + </Card> + </StyledBrandingSettingContent> + + {/* General Logos */} + <StyledBrandingSettingContent> + <StyledThemeSettingsCover> + <StyledCoverTitle>{trans("branding.logoSection")}</StyledCoverTitle> + </StyledThemeSettingsCover> + <Card> + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.logo")}</StyledSectionTitle> + {!Boolean(configOrgId) ? ( + <> + <StyledInput + placeholder={trans("branding.logoUrlPlaceholder")} + value={brandingConfig?.config_set?.[SettingsEnum.LOGO] || ""} + onChange={(e) => updateSettings(SettingsEnum.LOGO, e.target.value)} + style={{ marginBottom: 12 }} + /> + </> + ) : ( + <StyledRectUploadContainer> + <Upload + name="logo" + className="avatar-uploader" + listType="picture-card" + showUploadList={false} + beforeUpload={beforeUpload} + maxCount={1} + customRequest={(options) => handleUpload(options, SettingsEnum.LOGO)} + > + {Boolean(brandingConfig?.config_set?.[SettingsEnum.LOGO]) + ? <img src={buildMaterialPreviewURL(brandingConfig?.config_set?.[SettingsEnum.LOGO]!)} alt="logo" /> + : uploadButton(loading[SettingsEnum.LOGO]) + } + </Upload> + </StyledRectUploadContainer> + )} + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.LOGO]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/24x24" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + </Card> + </StyledBrandingSettingContent> + + {/* Colors and Fonts */} + <StyledBrandingSettingContent> + <StyledThemeSettingsCover> + <StyledCoverTitle>{trans("branding.colorFontSection")}</StyledCoverTitle> + </StyledThemeSettingsCover> + <Card> + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.mainBrandingColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.mainBrandingColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.MAIN_BRANDING_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.MAIN_BRANDING_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.editorHeaderColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.appHeaderColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.APP_HEADER_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.APP_HEADER_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.adminSidebarColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.adminSidebarColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.ADMIN_SIDEBAR_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.ADMIN_SIDEBAR_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.adminSidebarFontColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.adminSidebarFontColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.ADMIN_SIDEBAR_FONT_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.ADMIN_SIDEBAR_FONT_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.adminSidebarActiveBgColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.adminSidebarActiveBgColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.ADMIN_SIDEBAR_ACTIVE_BG_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.ADMIN_SIDEBAR_ACTIVE_BG_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.adminSidebarActiveFontColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.adminSidebarActiveFontColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.ADMIN_SIDEBAR_ACTIVE_FONT_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.ADMIN_SIDEBAR_ACTIVE_FONT_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.editorSidebarColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.editorSidebarColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.EDITOR_SIDEBAR_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.EDITOR_SIDEBAR_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.editorSidebarFontColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.editorSidebarFontColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.EDITOR_SIDEBAR_FONT_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.EDITOR_SIDEBAR_FONT_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.editorSidebarActiveBgColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.editorSidebarActiveBgColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.EDITOR_SIDEBAR_ACTIVE_BG_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.EDITOR_SIDEBAR_ACTIVE_BG_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.editorSidebarActiveFontColor")}</StyledSectionTitle> + <ColorPicker + getPopupContainer={(node: any) => node.parentNode} + value={brandingConfig?.config_set?.editorSidebarActiveFontColor} + showText + allowClear + format="hex" + onChange={(_, hex) => updateSettings(SettingsEnum.EDITOR_SIDEBAR_ACTIVE_FONT_COLOR, hex)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.EDITOR_SIDEBAR_ACTIVE_FONT_COLOR]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.font")}</StyledSectionTitle> + <StyledCustomSelect + placeholder={trans("style.fontFamily")} + options={fonts} + value={brandingConfig?.config_set?.font} + onChange={(font) => updateSettings(SettingsEnum.FONT, font)} + /> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.FONT]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + </Card> + </StyledBrandingSettingContent> + + {/* Texts and Images for Standard Pages */} + <StyledBrandingSettingContent> + <StyledThemeSettingsCover> + <StyledCoverTitle>{trans("branding.textSection")}</StyledCoverTitle> + </StyledThemeSettingsCover> + <Card> + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle>{trans("branding.errorPage")}</StyledSectionTitle> + <StyledTextArea + rows={4} + value={brandingConfig?.config_set?.errorPageText || ""} + onChange={(e) => updateSettings(SettingsEnum.ERROR_PAGE_TEXT, e.target.value)} + /> + + {/* {!Boolean(configOrgId) ? ( + <> */} + <StyledSectionTitle style={{marginTop : "20px"}}>{trans("branding.errorPageImageUrl")}</StyledSectionTitle> + <StyledInput + placeholder={trans("branding.errorPageImageUrlPlaceholder")} + value={brandingConfig?.config_set?.[SettingsEnum.ERROR_PAGE_IMAGE] || ""} + onChange={(e) => updateSettings(SettingsEnum.ERROR_PAGE_IMAGE, e.target.value)} + /> + {/* </> + ) : ( + <> + <StyledSectionTitle style={{marginTop : "20px"}}>{trans("branding.errorPageImage")}</StyledSectionTitle> + <StyledRectUploadContainer> + <Upload + name="errorPageImage" + className="avatar-uploader" + listType="picture-card" + showUploadList={false} + beforeUpload={beforeUpload} + maxCount={1} + customRequest={(options) => handleUpload(options, SettingsEnum.ERROR_PAGE_IMAGE)} + > + {Boolean(brandingConfig?.config_set?.[SettingsEnum.ERROR_PAGE_IMAGE]) + ? <img src={buildMaterialPreviewURL(brandingConfig?.config_set?.[SettingsEnum.ERROR_PAGE_IMAGE]!)} alt="error_page_image" /> + : uploadButton(loading[SettingsEnum.ERROR_PAGE_IMAGE]) + } + </Upload> + </StyledRectUploadContainer> + </> + )} */} + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.ERROR_PAGE_TEXT]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + <StyledDivider /> + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <StyledSectionTitle style={{marginTop : "20px"}}>{trans("branding.signUpPage")}</StyledSectionTitle> + <StyledTextArea + rows={4} + value={brandingConfig?.config_set?.signUpPageText || ""} + onChange={(e) => updateSettings(SettingsEnum.SIGNUP_PAGE_TEXT, e.target.value)} + /> + + {/* {!Boolean(configOrgId) ? ( + <> */} + <StyledSectionTitle style={{marginTop : "20px"}}>{trans("branding.signUpPageImageUrl")}</StyledSectionTitle> + <StyledInput + placeholder={trans("branding.signUpPageImageUrlPlaceholder")} + value={brandingConfig?.config_set?.[SettingsEnum.SIGNUP_PAGE_IMAGE] || ""} + onChange={(e) => updateSettings(SettingsEnum.SIGNUP_PAGE_IMAGE, e.target.value)} + /> + {/* </> + ) : ( + <> + <StyledSectionTitle style={{marginTop : "20px"}}>{trans("branding.signUpPageImage")}</StyledSectionTitle> + <StyledRectUploadContainer> + <Upload + name="signUpPageImage" + className="avatar-uploader" + listType="picture-card" + showUploadList={false} + beforeUpload={beforeUpload} + maxCount={1} + customRequest={(options) => handleUpload(options, SettingsEnum.SIGNUP_PAGE_IMAGE)} + > + {Boolean(brandingConfig?.config_set?.[SettingsEnum.SIGNUP_PAGE_IMAGE]) + ? <img src={buildMaterialPreviewURL(brandingConfig?.config_set?.[SettingsEnum.SIGNUP_PAGE_IMAGE]!)} alt="signup_page_image" /> + : uploadButton(loading[SettingsEnum.SIGNUP_PAGE_IMAGE]) + } + </Upload> + </StyledRectUploadContainer> + </> + )} */} + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.ERROR_PAGE_TEXT]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + <StyledDivider /> + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <div style={{marginTop : "20px"}}> + <StyledSectionTitle>{trans("branding.standardTitle")}</StyledSectionTitle> + <StyledTextArea + rows={2} + value={brandingConfig?.config_set?.standardTitle || ""} + onChange={(e) => updateSettings(SettingsEnum.STANDARD_TITLE, e.target.value)} + /> + </div> + <div style={{marginTop : "20px"}}> + <StyledSectionTitle>{trans("branding.standardDescription")}</StyledSectionTitle> + <StyledTextArea + rows={2} + value={brandingConfig?.config_set?.standardDescription || ""} + onChange={(e) => updateSettings(SettingsEnum.STANDARD_DESCRIPTION, e.target.value)} + /> + </div> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.STANDARD_TITLE]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + </Card> + </StyledBrandingSettingContent> + + {/* Helper Links in left submenu */} + <StyledBrandingSettingContent> + <StyledThemeSettingsCover> + <StyledCoverTitle> + {trans("branding.showDocumentationSection")} + </StyledCoverTitle> + </StyledThemeSettingsCover> + <Card> + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <div> + <StyledSectionTitle>{trans("branding.showDocumentation")}</StyledSectionTitle> + <Switch + checked={brandingConfig?.config_set?.showDocumentation} + onChange={(checked) => updateSettings(SettingsEnum.SHOW_DOCUMENTATION, checked)} + /> + </div> + {brandingConfig?.config_set?.showDocumentation && ( + <StyledSwitchContainer> + <StyledSectionTitle>{trans("branding.documentationLink")}</StyledSectionTitle> + <StyledInput + placeholder={trans("branding.documentationLinkPlaceholder")} + value={brandingConfig?.config_set?.documentationLink || ""} + onChange={(e) => updateSettings(SettingsEnum.DOCUMENTATION_LINK, e.target.value)} + /> + <HelpText>{trans("branding.documentationLinkHelp")}</HelpText> + </StyledSwitchContainer> + )} + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.SHOW_DOCUMENTATION]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <div style={{ marginTop: "20px" }}> + <StyledSectionTitle>{trans("branding.whatsNew")}</StyledSectionTitle> + <Switch + checked={brandingConfig?.config_set?.whatsNew} + onChange={(checked) => updateSettings(SettingsEnum.WHATS_NEW, checked)} + /> + </div> + {brandingConfig?.config_set?.whatsNew && ( + <StyledSwitchContainer> + <StyledSectionTitle>{trans("branding.whatsNewLink")}</StyledSectionTitle> + <StyledInput + placeholder={trans("branding.whatsNewLinkPlaceholder")} + value={brandingConfig?.config_set?.whatsNewLink || ""} + onChange={(e) => updateSettings(SettingsEnum.WHATS_NEW_LINK, e.target.value)} + /> + <HelpText>{trans("branding.whatsNewLinkHelp")}</HelpText> + </StyledSwitchContainer> + )} + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.WHATS_NEW]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + + <StyledRow gutter={32} align={"middle"} justify={"space-between"}> + <Col xs={24} md={6}> + <div style={{marginTop : "20px"}}> + <StyledSectionTitle>{trans("branding.submitIssue")}</StyledSectionTitle> + <Switch + checked={brandingConfig?.config_set?.submitIssue} + onChange={(checked) => updateSettings(SettingsEnum.SUBMIT_ISSUE, checked)} + /> + </div> + </Col> + <Col xs={24} md={8}> + <Paragraph type="secondary"> + {settingDescription[SettingsEnum.SUBMIT_ISSUE]} + </Paragraph> + </Col> + <Col xs={24} md={8} style={{textAlign: 'right'}}> + {/* <StyledImage + width={200} + height={100} + src="https://placehold.co/200x100" + alt="Color Preview" + preview + loading="lazy" + /> */} + </Col> + </StyledRow> + </Card> + </StyledBrandingSettingContent> + + <StyledButtonContainer gap={10}> + <TacoButton + buttonType="delete" + disabled={!Boolean(brandingConfig?.id)} + onClick={() => handleDelete(brandingConfig?.id!)} + > + {trans("delete")} + </TacoButton> + <TacoButton + buttonType="normal" + icon={<ResetIcon />} + disabled={isBrandingNotChange()} + onClick={() => setBrandingConfig(defaultBrandingConfig)} + > + {trans("reset")} + </TacoButton> + <TacoButton + buttonType="primary" + disabled={isBrandingNotChange()} + onClick={() => handleSave(brandingConfig)} + > + {trans("branding.saveButton")} + </TacoButton> + </StyledButtonContainer> + </DetailContent> + </DetailContainer> + ); +} diff --git a/client/packages/lowcoder/src/pages/setting/branding/index.tsx b/client/packages/lowcoder/src/pages/setting/branding/index.tsx new file mode 100644 index 0000000000..410842f4c9 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/branding/index.tsx @@ -0,0 +1,205 @@ +import { useSelector, useDispatch } from "react-redux"; +import { selectIsLicenseActive } from "redux/selectors/enterpriseSelectors"; +import { BrandingSetting } from "./BrandingSetting"; +import { Level1SettingPageContent, Level1SettingPageTitle } from "../styled"; +import styled from "styled-components"; +import { Card, Typography, Row, Col, Divider, Image, Button } from "antd"; +import { trans } from "i18n"; +import { useState } from "react"; + +import { HelpText } from "components/HelpText"; +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; +import { getOrgApiUsage, getOrgLastMonthApiUsage } from "redux/selectors/orgSelectors"; +import { fetchAPIUsageAction, fetchLastMonthAPIUsageAction } from "redux/reduxActions/orgActions"; +import { useEffect } from "react"; + +const { Title, Paragraph, Text } = Typography; + +const StyledSection = styled.div` + margin-bottom: 32px; + + .ant-card { + border-radius: 8px; + } + + .image-placeholder { + background: #f0f2f5; + border: 1px dashed #d9d9d9; + height: 180px; + display: flex; + align-items: center; + justify-content: center; + color: #999; + font-size: 14px; + } +`; + +export const Branding = () => { + const isLicenseActive = useSelector(selectIsLicenseActive); + return isLicenseActive ? <BrandingSetting /> : <BrandingPromo />; +}; + +const BrandingPromo = () => { + + const user = useSelector(getUser); + const deploymentId = useSelector(getDeploymentId); + const dispatch = useDispatch(); + + const apiUsage = useSelector(getOrgApiUsage); + useEffect(() => { + dispatch(fetchAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + const lastMonthApiUsage = useSelector(getOrgLastMonthApiUsage); + useEffect(() => { + dispatch(fetchLastMonthAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + return ( + <Level1SettingPageContent> + <Level1SettingPageTitle>{trans("branding.title")}</Level1SettingPageTitle> + + <StyledSection> + <Card title={trans("enterprise.BrandingIntroTitle")}> + <Paragraph> + {trans("enterprise.BrandingIntro1")} + </Paragraph> + <Paragraph> + {trans("enterprise.BrandingIntro2")} + </Paragraph> + <Paragraph> + {trans("enterprise.BrandingIntro3")} + </Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("branding.colorFontSection")}> + <Paragraph>{trans("enterprise.BrandingColorsIntro1")}</Paragraph> + <Paragraph>{trans("enterprise.BrandingColorsIntro2")}</Paragraph> + <Paragraph>{trans("enterprise.BrandingFontsIntro")}</Paragraph> + <Row gutter={[24, 24]}> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Branding%20Settings.png" + alt="Enterprise Edition | Branding Settings" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Branding Settings</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Branding%20%7C%20Admin%20Area.png" + alt="Enterprise Edition | Branding | Admin Area" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Branding | Admin Area</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Branding%20%7C%20Customization.png" + alt="Enterprise Edition | Branding | Customization" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Branding | Customization</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%20Branding%20%7C%20Whitelabel.png" + alt="Enterprise Edition | Branding | White label" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Branding | White label</Text>, + }} + /> + </Col> + </Row> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("branding.logoSection")}> + <Paragraph>{trans("enterprise.BrandingLogosIntro")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("branding.textSection")}> + <Paragraph>{trans("enterprise.BrandingPagesIntro1")}</Paragraph> + <Paragraph>{trans("enterprise.BrandingPagesIntro2")}</Paragraph> + <Paragraph>{trans("enterprise.BrandingMetaIntro")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("branding.showDocumentationSection")}> + <Paragraph>{trans("enterprise.BrandingHelpLinksIntro")}</Paragraph> + <Paragraph>{trans("enterprise.BrandingWhatsNewIntro")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.yourDeploymentID")}> + <Paragraph><h3>{deploymentId}</h3></Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.PricingTitle")}> + <Paragraph>{trans("enterprise.PricingIntro")}</Paragraph> + + <Paragraph> + <Text strong>{trans("enterprise.FlatRateTitle")}</Text> + <br /> + {trans("enterprise.FlatRateDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.FlatRatePoint1")}</li> + <li>{trans("enterprise.FlatRatePoint2")}</li> + </ul> + + <Divider /> + + <Paragraph> + <Text strong>{trans("enterprise.UsagePricingTitle")}</Text> + <br /> + {trans("enterprise.UsagePricingDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.API100k")}</li> + <li>{trans("enterprise.API1M")}</li> + <li>{trans("enterprise.API10M")}</li> + </ul> + + <Paragraph>{trans("enterprise.UsageOverrunDesc")}</Paragraph> + <Paragraph>{trans("enterprise.UsageTopUpInfo")}</Paragraph> + + <Divider/> + + <Text strong className="section-title">{trans("advanced.APIConsumption")}</Text> + <HelpText style={{ marginBottom: 12 }}>{trans("advanced.APIConsumptionDescription")}</HelpText> + <div className="section-content"> + {trans("advanced.overallAPIConsumption")} : {apiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(apiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")}<br/> + {trans("advanced.lastMonthAPIConsumption")} : {lastMonthApiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(lastMonthApiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")} + </div> + </Card> + </StyledSection> + + </Level1SettingPageContent> + ); +}; diff --git a/client/packages/lowcoder/src/pages/setting/environments/EnvironmentDetail.tsx b/client/packages/lowcoder/src/pages/setting/environments/EnvironmentDetail.tsx new file mode 100644 index 0000000000..58b8f0c9ea --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/EnvironmentDetail.tsx @@ -0,0 +1,453 @@ +import React, {useState, useEffect} from "react"; +import { + Spin, + Typography, + Card, + Tabs, + Alert, + Descriptions, + Menu, + Button, + Tag, + Result, + Row, + Col, + Statistic, + Progress, +} from "antd"; +import { + LinkOutlined, + HomeOutlined, + AppstoreOutlined, + UsergroupAddOutlined, + EditOutlined, + CheckCircleOutlined, + CloseCircleOutlined, + ExclamationCircleOutlined, + SyncOutlined, + CloudServerOutlined, + UserOutlined, + SafetyOutlined, + CrownOutlined, + ApiOutlined, +} from "@ant-design/icons"; + +import { useSingleEnvironmentContext } from "./context/SingleEnvironmentContext"; +import EditEnvironmentModal from "./components/EditEnvironmentModal"; +import UnlicensedEnvironmentView from "./components/UnlicensedEnvironmentView"; +import { Environment } from "./types/environment.types"; +import history from "@lowcoder-ee/util/history"; +import WorkspacesTab from "./components/WorkspacesTab"; +import UserGroupsTab from "./components/UserGroupsTab"; +import EnvironmentHeader from "./components/EnvironmentHeader"; +import StatsCard from "./components/StatsCard"; +import ModernBreadcrumbs from "./components/ModernBreadcrumbs"; +import { getEnvironmentTagColor } from "./utils/environmentUtils"; +import { formatAPICalls, getAPICallsStatusColor } from "./services/license.service"; +import ErrorComponent from './components/ErrorComponent'; +import { Level1SettingPageContent } from "../styled"; +import { trans } from "i18n"; + +/** + * Environment Detail Page Component + * Shows detailed information about a specific environment + */ +const EnvironmentDetail: React.FC = () => { + // Use the SingleEnvironmentContext instead of EnvironmentContext + const { + environment, + isLoading, + error, + updateEnvironmentData + } = useSingleEnvironmentContext(); + + const [isEditModalVisible, setIsEditModalVisible] = useState(false); + const [isUpdating, setIsUpdating] = useState(false); + const [activeTab, setActiveTab] = useState('workspaces'); + + // Handle edit menu item click + const handleEditClick = () => { + setIsEditModalVisible(true); + }; + + // Handle modal close + const handleCloseModal = () => { + setIsEditModalVisible(false); + }; + + // Handle save environment + const handleSaveEnvironment = async (data: Partial<Environment>) => { + if (!environment) return; + + setIsUpdating(true); + try { + // Close the modal first, before the update completes + handleCloseModal(); + + // Then update the environment data + await updateEnvironmentData(data); + } catch (error) { + console.error('Failed to update environment:', error); + } finally { + setIsUpdating(false); + } + }; + + + + if (isLoading) { + return ( + <div style={{ display: 'flex', justifyContent: 'center', padding: '60px 0' }}> + <Spin size="large" /> + </div> + ); + } + + if (error || !environment) { + return ( + <ErrorComponent + errorMessage={trans("environments.detail_environmentNotFound")} + returnPath="/setting/environments" + returnLabel={trans("environments.detail_returnToEnvironmentsList")} + /> + ); + } + + // Check if environment is not licensed and show modern UI + if (environment.isLicensed === false) { + return ( + <> + <UnlicensedEnvironmentView + environment={environment} + onEditClick={handleEditClick} + /> + + {/* Edit Environment Modal */} + {environment && ( + <EditEnvironmentModal + visible={isEditModalVisible} + environment={environment} + onClose={handleCloseModal} + onSave={handleSaveEnvironment} + loading={isUpdating} + /> + )} + </> + ); + } + + // Stats data for the cards + const statsData = [ + { + title: trans("environments.detail_type"), + value: environment.environmentType || trans("environments.detail_unknown"), + icon: <CloudServerOutlined />, + color: getEnvironmentTagColor(environment.environmentType) + }, + { + title: trans("environments.detail_status"), + value: environment.isLicensed ? trans("environments.detail_licensed") : trans("environments.detail_unlicensed"), + icon: environment.isLicensed ? <CheckCircleOutlined /> : <CloseCircleOutlined />, + color: environment.isLicensed ? "#52c41a" : "#ff4d4f" + }, + { + title: trans("environments.detail_apiKey"), + value: environment.environmentApikey ? trans("environments.detail_configured") : trans("environments.detail_notSet"), + icon: <SafetyOutlined />, + color: environment.environmentApikey ? "#1890ff" : "#faad14" + }, + { + title: trans("environments.detail_masterEnv"), + value: environment.isMaster ? trans("environments.yes") : trans("environments.no"), + icon: <UserOutlined />, + color: environment.isMaster ? "#722ed1" : "#8c8c8c" + } + ]; + + const tabItems = [ + { + key: 'workspaces', + label: ( + <span> + <AppstoreOutlined /> {trans("environments.detail_workspaces")} + </span> + ), + children: <WorkspacesTab environment={environment} /> + }, + { + key: 'userGroups', + label: ( + <span> + <UsergroupAddOutlined /> {trans("environments.detail_userGroups")} + </span> + ), + children: <UserGroupsTab environment={environment} /> + } + ]; + + return ( + <Level1SettingPageContent style={{ minWidth: "1000px" }}> + {/* Breadcrumbs */} + + <ModernBreadcrumbs + items={[ + { + key: 'environments', + title: trans("environments.title"), + onClick: () => history.push('/setting/environments') + }, + { + key: 'current', + title: environment.environmentName || trans("environments.detail_environmentDetail") + } + ]} + /> + + {/* Environment Header Component */} + <EnvironmentHeader + environment={environment} + onEditClick={handleEditClick} + /> + + {/* Stats Cards Row */} + <Row gutter={[16, 16]} style={{ marginBottom: "24px" }}> + {statsData.map((stat, index) => ( + <Col xs={24} sm={12} lg={6} key={index}> + <StatsCard + title={stat.title} + value={stat.value} + icon={stat.icon} + color={stat.color} + /> + </Col> + ))} + </Row> + + {/* Basic Environment Information Card */} + <Card + title={trans("environments.detail_environmentOverview")} + style={{ + marginBottom: "24px", + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + className="environment-overview-card" + > + <Descriptions + bordered + layout="vertical" + column={{ xxl: 4, xl: 3, lg: 3, md: 2, sm: 1, xs: 1 }} + size="small" + > + <Descriptions.Item label={trans("environments.domain")}> + {environment.environmentFrontendUrl ? ( + <a + href={environment.environmentFrontendUrl} + target="_blank" + rel="noopener noreferrer" + > + {environment.environmentFrontendUrl} <LinkOutlined /> + </a> + ) : ( + trans("environments.detail_noDomainSet") + )} + </Descriptions.Item> + <Descriptions.Item label={trans("environments.detail_environmentId")}> + <code style={{ padding: '2px 6px', background: '#f5f5f5', borderRadius: '3px' }}> + {environment.environmentId} + </code> + </Descriptions.Item> + <Descriptions.Item label={trans("environments.detail_licenseStatus")}> + {(() => { + switch (environment.licenseStatus) { + case 'checking': + return <Tag icon={<SyncOutlined spin />} color="blue" style={{ borderRadius: '4px' }}>{trans("environments.licenseStatus_checking")}</Tag>; + case 'licensed': + return <Tag icon={<CheckCircleOutlined />} color="green" style={{ borderRadius: '4px' }}>{trans("environments.licenseStatus_licensed")}</Tag>; + case 'unlicensed': + return <Tag icon={<CloseCircleOutlined />} color="orange" style={{ borderRadius: '4px' }}>{trans("environments.detail_licenseNeeded")}</Tag>; + case 'error': + return <Tag icon={<ExclamationCircleOutlined />} color="orange" style={{ borderRadius: '4px' }}>{trans("environments.detail_setupRequired")}</Tag>; + default: + return <Tag color="default" style={{ borderRadius: '4px' }}>{trans("environments.detail_unknown")}</Tag>; + } + })()} + </Descriptions.Item> + <Descriptions.Item label={trans("environments.detail_created")}> + {environment.createdAt ? new Date(environment.createdAt).toLocaleDateString() : trans("environments.detail_unknown")} + </Descriptions.Item> + </Descriptions> + </Card> + + + {/* Detailed License Information Card - only show for licensed environments with details */} + {environment.isLicensed && environment.licenseDetails && ( + <Card + title={ + <span> + <CrownOutlined style={{ color: '#52c41a', marginRight: '8px' }} /> + {trans("environments.detail_licenseDetails")} + </span> + } + style={{ + marginBottom: "24px", + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + className="license-details-card" + > + <Row gutter={[24, 16]}> + {/* API Calls Status */} + <Col xs={24} sm={12} md={8}> + <Card + size="small" + style={{ height: '100%', textAlign: 'center' }} + styles={{ body: { padding: '16px' } }} + > + <Statistic + title={trans("environments.detail_apiCallsRemaining")} + value={environment.licenseDetails.remainingAPICalls} + formatter={(value) => ( + <span style={{ + color: getAPICallsStatusColor( + environment.licenseDetails?.remainingAPICalls || 0, + environment.licenseDetails?.totalAPICallsLimit || 0 + ) + }}> + {value?.toLocaleString()} + </span> + )} + prefix={<ApiOutlined />} + /> + <div style={{ marginTop: '12px' }}> + <Progress + percent={environment.licenseDetails.apiCallsUsage || 0} + strokeColor={getAPICallsStatusColor( + environment.licenseDetails.remainingAPICalls, + environment.licenseDetails.totalAPICallsLimit || 0 + )} + size="small" + showInfo={false} + /> + <div style={{ + fontSize: '12px', + color: '#8c8c8c', + marginTop: '4px' + }}> + {trans("environments.percentUsed", { percent: environment.licenseDetails.apiCallsUsage || 0 })} + </div> + </div> + </Card> + </Col> + + {/* Total License Limit */} + <Col xs={24} sm={12} md={8}> + <Card + size="small" + style={{ height: '100%', textAlign: 'center' }} + styles={{ body: { padding: '16px' } }} + > + <Statistic + title={trans("environments.detail_totalApiCallsLimit")} + value={environment.licenseDetails.totalAPICallsLimit} + formatter={(value) => value?.toLocaleString()} + prefix={<ApiOutlined />} + /> + <Tag + color="blue" + style={{ marginTop: '12px' }} + > + {environment.licenseDetails.eeLicenses.length} {environment.licenseDetails.eeLicenses.length !== 1 ? trans("environments.detail_licenses") : trans("environments.detail_license")} + </Tag> + </Card> + </Col> + + {/* Enterprise Edition Status */} + <Col xs={24} sm={12} md={8}> + <Card + size="small" + style={{ height: '100%', textAlign: 'center' }} + styles={{ body: { padding: '16px' } }} + > + <Statistic + title={trans("environments.detail_enterpriseEdition")} + value={environment.licenseDetails.eeActive ? trans("environments.detail_active") : trans("environments.detail_inactive")} + formatter={(value) => ( + <Tag + color={environment.licenseDetails?.eeActive ? "green" : "red"} + icon={environment.licenseDetails?.eeActive ? <CheckCircleOutlined /> : <CloseCircleOutlined />} + > + {value} + </Tag> + )} + /> + </Card> + </Col> + </Row> + + {/* License Details */} + <div style={{ marginTop: '24px' }}> + <Typography.Title level={5} style={{ marginBottom: '16px' }}> + <UserOutlined style={{ marginRight: '8px' }} /> + {trans("environments.detail_licenseInformation")} + </Typography.Title> + + <Row gutter={[16, 16]}> + {environment.licenseDetails.eeLicenses.map((license, index) => ( + <Col xs={24} sm={12} md={8} key={license.uuid}> + <Card + size="small" + style={{ + border: '1px solid #f0f0f0', + borderRadius: '6px' + }} + styles={{ body: { padding: '12px' } }} + > + <div style={{ marginBottom: '8px' }}> + <strong style={{ color: '#262626' }}> + {license.customerName} + </strong> + </div> + <div style={{ fontSize: '12px', color: '#8c8c8c', marginBottom: '8px' }}> + {trans("environments.id")}: {license.customerId} + </div> + <div style={{ fontSize: '12px', color: '#8c8c8c', marginBottom: '8px' }}> + UUID: <span style={{ fontFamily: 'monospace' }}>{license.uuid.substring(0, 8)}...</span> + </div> + <Tag color="blue"> + {license.apiCallsLimit.toLocaleString()} {trans("environments.detail_calls")} + </Tag> + </Card> + </Col> + ))} + </Row> + </div> + </Card> + )} + + + {/* Tabs for Workspaces and User Groups */} + <Tabs + defaultActiveKey="workspaces" + activeKey={activeTab} + onChange={setActiveTab} + className="modern-tabs" + type="line" + items={tabItems} + /> + + {/* Edit Environment Modal */} + {environment && ( + <EditEnvironmentModal + visible={isEditModalVisible} + environment={environment} + onClose={handleCloseModal} + onSave={handleSaveEnvironment} + loading={isUpdating} + /> + )} + </Level1SettingPageContent> + ); +}; + +export default EnvironmentDetail; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/Environments.tsx b/client/packages/lowcoder/src/pages/setting/environments/Environments.tsx new file mode 100644 index 0000000000..5509d2ac06 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/Environments.tsx @@ -0,0 +1,29 @@ +// client/packages/lowcoder/src/pages/setting/environments/Environments.tsx +import React from "react"; +import { Switch, Route, useRouteMatch } from "react-router-dom"; +import EnvironmentRoutes from "./routes/EnvironmentRoutes"; +import EnvironmentsList from "./EnvironmentsList"; + +/** + * Top-level Environments component + * No longer needs the EnvironmentProvider since we use Redux + */ +const EnvironmentsSettings: React.FC = () => { + const { path } = useRouteMatch(); + + return ( + <Switch> + {/* Environment list route */} + <Route exact path={path}> + <EnvironmentsList /> + </Route> + + {/* All routes that need a specific environment */} + <Route path={`${path}/:envId`}> + <EnvironmentRoutes /> + </Route> + </Switch> + ); +}; + +export default EnvironmentsSettings; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/EnvironmentsList.tsx b/client/packages/lowcoder/src/pages/setting/environments/EnvironmentsList.tsx new file mode 100644 index 0000000000..b4148b6a9b --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/EnvironmentsList.tsx @@ -0,0 +1,244 @@ +import React, { useState, useEffect } from "react"; +import { Alert, Empty, Spin, Card, Row, Col } from "antd"; +import { SyncOutlined, CloudServerOutlined } from "@ant-design/icons"; +import { AddIcon, Search, TacoButton } from "lowcoder-design"; +import { useHistory } from "react-router-dom"; +import { useSelector, useDispatch } from "react-redux"; +import { selectEnvironments, selectEnvironmentsLoading, selectEnvironmentsError } from "redux/selectors/enterpriseSelectors"; +import { fetchEnvironments } from "redux/reduxActions/enterpriseActions"; +import { Environment } from "./types/environment.types"; +import EnvironmentsTable from "./components/EnvironmentsTable"; +import CreateEnvironmentModal from "./components/CreateEnvironmentModal"; +import StatsCard from "./components/StatsCard"; +import { buildEnvironmentId } from "@lowcoder-ee/constants/routesURL"; +import { createEnvironment } from "./services/environments.service"; +import { getEnvironmentTagColor } from "./utils/environmentUtils"; +import { trans } from "i18n"; +import styled from "styled-components"; + +const EnvironmentsWrapper = styled.div` + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + min-width: 1000px; +`; + +const HeaderWrapper = styled.div` + display: flex; + align-items: center; + height: 92px; + padding: 28px 36px; + width: 100%; +`; + +const Title = styled.div` + font-weight: 500; + font-size: 18px; + color: #222222; + line-height: 18px; + flex-grow: 1; +`; + +const AddBtn = styled(TacoButton)` + min-width: 96px; + width: fit-content; + height: 32px; +`; + +const RefreshBtn = styled(TacoButton)` + width: fit-content; + height: 32px; + margin-right: 12px; +`; + +const BodyWrapper = styled.div` + width: 100%; + flex-grow: 1; + padding: 0 24px; +`; + +const StatsWrapper = styled.div` + margin-bottom: 20px; +`; + +/** + * Environment Listing Page Component + * Displays a table of environments + */ +const EnvironmentsList: React.FC = () => { + // Use Redux state instead of context + const dispatch = useDispatch(); + const environments = useSelector(selectEnvironments); + const isLoading = useSelector(selectEnvironmentsLoading); + const error = useSelector(selectEnvironmentsError); + + // State for search input + const [searchText, setSearchText] = useState(""); + const [isCreateModalVisible, setIsCreateModalVisible] = useState(false); + const [isCreating, setIsCreating] = useState(false); + + // Hook for navigation + const history = useHistory(); + + // Calculate environment type statistics + const environmentStats = React.useMemo(() => { + const stats = environments.reduce((acc, env) => { + const type = env.environmentType?.toUpperCase() || 'TEST'; + acc[type] = (acc[type] || 0) + 1; + return acc; + }, {} as Record<string, number>); + + // Sort by common environment types first + const typeOrder = ['PROD', 'PREPROD', 'TEST', 'DEV']; + const sortedStats = Object.entries(stats).sort(([a], [b]) => { + const aIndex = typeOrder.indexOf(a); + const bIndex = typeOrder.indexOf(b); + + if (aIndex !== -1 && bIndex !== -1) return aIndex - bIndex; + if (aIndex !== -1) return -1; + if (bIndex !== -1) return 1; + return a.localeCompare(b); + }); + + return sortedStats; + }, [environments]); + + // Get icon for environment type + const getEnvironmentIcon = (type: string) => { + return <CloudServerOutlined />; + }; + + // Filter environments based on search text + const filteredEnvironments = environments.filter((env) => { + const searchLower = searchText.toLowerCase(); + return ( + (env.environmentName || "").toLowerCase().includes(searchLower) || + (env.environmentFrontendUrl || "").toLowerCase().includes(searchLower) || + env.environmentId.toLowerCase().includes(searchLower) || + (env.environmentType || "").toLowerCase().includes(searchLower) + ); + }).sort((a, b) => { + // Sort by license status: licensed environments first + const aLicensed = a.isLicensed !== false; // licensed or unknown (default to licensed) + const bLicensed = b.isLicensed !== false; // licensed or unknown (default to licensed) + + if (aLicensed && !bLicensed) return -1; // a licensed, b unlicensed - a comes first + if (!aLicensed && bLicensed) return 1; // a unlicensed, b licensed - b comes first + + // If both have same license status, sort by environment name + return (a.environmentName || "").localeCompare(b.environmentName || ""); + }); + + // Handle row click to navigate to environment detail + const handleRowClick = (record: Environment) => { + // Allow navigation to all environments including unlicensed ones + history.push(buildEnvironmentId(record.environmentId)); + }; + + // Handle refresh + const handleRefresh = () => { + dispatch(fetchEnvironments()); + }; + + // Handle create environment + const handleCreateEnvironment = async (environmentData: Partial<Environment>) => { + setIsCreating(true); + try { + await createEnvironment(environmentData); + dispatch(fetchEnvironments()); // Refresh the list after creation + } catch (error) { + console.error("Failed to create environment:", error); + throw error; // Re-throw to let the modal handle the error display + } finally { + setIsCreating(false); + } + }; + + return ( + <EnvironmentsWrapper> + <HeaderWrapper> + <Title>{trans("environments.title")}</Title> + <Search + placeholder={trans("environments.search")} + value={searchText} + onChange={(e) => setSearchText(e.target.value)} + style={{ width: "192px", height: "32px", margin: "0 12px 0 0" }} + /> + <RefreshBtn + buttonType="normal" + icon={<SyncOutlined spin={isLoading} />} + onClick={handleRefresh} + > + {trans("environments.refresh")} + </RefreshBtn> + <AddBtn + buttonType="primary" + icon={<AddIcon />} + onClick={() => setIsCreateModalVisible(true)} + > + {trans("environments.addEnvironment")} + </AddBtn> + </HeaderWrapper> + + <BodyWrapper> + {/* Environment Statistics Cards */} + <StatsWrapper> + <Row gutter={[16, 16]}> + {environmentStats.map(([type, count]) => ( + <Col xs={24} sm={12} md={8} lg={6} key={type}> + <StatsCard + title={trans("environments.environmentsTypeLabel", { type })} + value={count} + icon={getEnvironmentIcon(type)} + color={getEnvironmentTagColor(type)} + /> + </Col> + ))} + </Row> + </StatsWrapper> + + {error && ( + <Alert + message={trans("environments.errorLoadingEnvironments")} + description={error} + type="error" + showIcon + style={{ marginBottom: 16 }} + /> + )} + + {!isLoading && !error && filteredEnvironments.length === 0 && searchText && ( + <Empty + description={trans("environments.noEnvironmentsFoundMatching", { searchText })} + style={{ margin: "60px 0" }} + /> + )} + + {!isLoading && !error && environments.length === 0 && !searchText && ( + <Empty + description={trans("environments.noEnvironmentsFound")} + style={{ margin: "60px 0" }} + /> + )} + + {(filteredEnvironments.length > 0 || isLoading) && ( + <EnvironmentsTable + environments={filteredEnvironments} + loading={isLoading} + onRowClick={handleRowClick} + /> + )} + </BodyWrapper> + + <CreateEnvironmentModal + visible={isCreateModalVisible} + onClose={() => setIsCreateModalVisible(false)} + onSave={handleCreateEnvironment} + loading={isCreating} + /> + </EnvironmentsWrapper> + ); +}; + +export default EnvironmentsList; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/WorkspaceDetail.tsx b/client/packages/lowcoder/src/pages/setting/environments/WorkspaceDetail.tsx new file mode 100644 index 0000000000..14725ed95e --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/WorkspaceDetail.tsx @@ -0,0 +1,223 @@ +import React, { useState } from "react"; +import history from "@lowcoder-ee/util/history"; +import { + Spin, + Typography, + Tabs, + Row, + Col, +} from "antd"; +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { + AppstoreOutlined, + DatabaseOutlined, + CodeOutlined, + HomeOutlined, + TeamOutlined, + CloudServerOutlined, + CheckCircleOutlined, +} from "@ant-design/icons"; + +// Use the context hooks +import { useSingleEnvironmentContext } from "./context/SingleEnvironmentContext"; +import { useWorkspaceContext } from "./context/WorkspaceContext"; +import { useDeployModal } from "./context/DeployModalContext"; + +import { workspaceConfig } from "./config/workspace.config"; +import AppsTab from "./components/AppsTab"; +import DataSourcesTab from "./components/DataSourcesTab"; +import QueriesTab from "./components/QueriesTab"; +import ModernBreadcrumbs from "./components/ModernBreadcrumbs"; +import WorkspaceHeader from "./components/WorkspaceHeader"; +import StatsCard from "./components/StatsCard"; +import ErrorComponent from "./components/ErrorComponent"; +import { Level1SettingPageContent } from "../styled"; + +const WorkspaceDetail: React.FC = () => { + // Use the context hooks + const { environment } = useSingleEnvironmentContext(); + const { workspace, isLoading, error, toggleManagedStatus } = useWorkspaceContext(); + const { openDeployModal } = useDeployModal(); + + const [isToggling, setIsToggling] = useState(false); + + // Handle toggle managed status + const handleToggleManaged = async (checked: boolean) => { + if (!workspace) return; + + setIsToggling(true); + try { + const success = await toggleManagedStatus(checked); + if (success) { + messageInstance.success(`Workspace is now ${checked ? 'Managed' : 'Unmanaged'}`); + } else { + messageInstance.error('Failed to change managed status'); + } + } finally { + setIsToggling(false); + } + }; + + if (isLoading) { + return ( + <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%', padding: '50px' }}> + <Spin size="large" spinning={true}> + <div style={{ + display: 'block', + textAlign: 'center', + padding: '20px', + color: '#8c8c8c', + fontSize: '14px' + }}> + Loading workspace details... + </div> + </Spin> + </div> + ); + } + + if (error || !environment || !workspace) { + return ( + <ErrorComponent + errorMessage={"Workspace not found"} + returnPath="/setting/environments" + returnLabel="Return to Environments List" + /> + ); + } + + const breadcrumbItems = [ + { + key: 'environments', + title: ( + <span> + Environments + </span> + ), + onClick: () => history.push("/setting/environments") + }, + { + key: 'environment', + title: ( + <span> + {environment.environmentName} + </span> + ), + onClick: () => history.push(`/setting/environments/${environment.environmentId}`) + }, + { + key: 'workspace', + title: workspace.name + } + ]; + + const tabItems = [ + { + key: 'apps', + label: ( + <span> + <AppstoreOutlined /> Apps + </span> + ), + children: ( + <AppsTab + environment={environment} + workspaceId={workspace.id} + /> + ) + }, + { + key: 'dataSources', + label: ( + <span> + <DatabaseOutlined /> Data Sources + </span> + ), + children: ( + <DataSourcesTab + environment={environment} + workspaceId={workspace.id} + /> + ) + }, + { + key: 'queries', + label: ( + <span> + <CodeOutlined /> Queries + </span> + ), + children: ( + <QueriesTab + environment={environment} + workspaceId={workspace.id} + /> + ) + } + ]; + + return ( + <Level1SettingPageContent style={{ minWidth: "1000px" }}> + {/* New Workspace Header */} + + {/* Modern Breadcrumbs navigation */} + <ModernBreadcrumbs items={breadcrumbItems} /> + + <WorkspaceHeader + workspace={workspace} + environment={environment} + isToggling={isToggling} + onToggleManagedStatus={handleToggleManaged} + onDeploy={() => openDeployModal(workspace, workspaceConfig, environment)} + /> + + {/* Stats Cards Row */} + <Row gutter={[16, 16]} style={{ marginBottom: "24px" }}> + <Col xs={24} sm={12} lg={6}> + <StatsCard + title="Status" + value={workspace.managed ? "Managed" : "Unmanaged"} + icon={workspace.managed ? <CheckCircleOutlined /> : <CloudServerOutlined />} + color={workspace.managed ? "#52c41a" : "#faad14"} + /> + </Col> + <Col xs={24} sm={12} lg={6}> + <StatsCard + title="Environment" + value={environment.environmentType || "Unknown"} + icon={<CloudServerOutlined />} + color="#1890ff" + /> + </Col> + <Col xs={24} sm={12} lg={6}> + <StatsCard + title="Workspace ID" + value={workspace.id.slice(-8)} + icon={<TeamOutlined />} + color="#722ed1" + /> + </Col> + <Col xs={24} sm={12} lg={6}> + <StatsCard + title="Created" + value={workspace.creationDate ? new Date(workspace.creationDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) : "Unknown"} + icon={<DatabaseOutlined />} + color="#52c41a" + /> + </Col> + </Row> + + + + {/* Tabs for Apps, Data Sources, and Queries */} + <Tabs + defaultActiveKey="apps" + className="modern-tabs" + type="line" + items={tabItems} + /> + </Level1SettingPageContent> + ); +}; + +export default WorkspaceDetail; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/AppsTab.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/AppsTab.tsx new file mode 100644 index 0000000000..18cf2de9e6 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/AppsTab.tsx @@ -0,0 +1,424 @@ +import React, { useState, useEffect } from 'react'; +import { Card, Button, Divider, Alert, Table, Tag, Input, Space, Tooltip, Row, Col } from 'antd'; +import { SyncOutlined, CloudUploadOutlined, AuditOutlined, AppstoreOutlined, CheckCircleFilled, CloudServerOutlined, DisconnectOutlined, FilterOutlined, DeleteOutlined } from '@ant-design/icons'; +import Title from 'antd/lib/typography/Title'; +import { Environment } from '../types/environment.types'; +import { App, AppStats } from '../types/app.types'; +import { getMergedWorkspaceApps } from '../services/apps.service'; +import { Switch, Spin, Empty, Avatar } from 'antd'; +import { ManagedObjectType, setManagedObject, unsetManagedObject } from '../services/managed-objects.service'; +import { useDeployModal } from '../context/DeployModalContext'; +import { appsConfig } from '../config/apps.config'; +import history from "@lowcoder-ee/util/history"; +import { messageInstance } from 'lowcoder-design/src/components/GlobalInstances'; +import { trans } from 'i18n'; + +const { Search } = Input; + +interface AppsTabProps { + environment: Environment; + workspaceId: string; +} + +const AppsTab: React.FC<AppsTabProps> = ({ environment, workspaceId }) => { + const [apps, setApps] = useState<App[]>([]); + const [stats, setStats] = useState<AppStats>({ + total: 0, + published: 0, + managed: 0, + unmanaged: 0 + }); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState<string | null>(null); + const [searchText, setSearchText] = useState(''); + const { openDeployModal } = useDeployModal(); + const [showManagedOnly, setShowManagedOnly] = useState(false); + + // Fetch apps + const fetchApps = async () => { + if (!workspaceId || !environment) return; + + setLoading(true); + setError(null); + + try { + const result = await getMergedWorkspaceApps( + workspaceId, + environment.environmentId, + environment.environmentApikey, + environment.environmentApiServiceUrl! + ); + + setApps(result.apps); + + // Calculate stats + const total = result.apps.length; + const published = result.apps.filter(app => app.published).length; + const managed = result.apps.filter(app => app.managed).length; + + setStats({ + total, + published, + managed, + unmanaged: total - managed + }); + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to fetch apps"); + } finally { + setLoading(false); + setRefreshing(false); + } + }; + + useEffect(() => { + fetchApps(); + }, [environment, workspaceId]); + + // Handle refresh + const handleRefresh = () => { + setRefreshing(true); + fetchApps(); + }; + + // Toggle managed status + const handleToggleManaged = async (app: App, checked: boolean) => { + setRefreshing(true); + try { + if (checked) { + await setManagedObject( + app.applicationGid, + environment.environmentId, + ManagedObjectType.APP, + + ); + } else { + await unsetManagedObject( + app.applicationGid, + environment.environmentId, + ManagedObjectType.APP + ); + } + + // Update the app in state + const updatedApps = apps.map(item => { + if (item.applicationId === app.applicationId) { + return { ...item, managed: checked }; + } + return item; + }); + + setApps(updatedApps); + + // Update stats + const managed = updatedApps.filter(app => app.managed).length; + setStats(prev => ({ + ...prev, + managed, + unmanaged: prev.total - managed + })); + + messageInstance.success(trans(checked ? "environments.apps_managedSuccess" : "environments.apps_unmanagedSuccess", { name: app.name })); + return true; + } catch (error) { + messageInstance.error(trans("environments.apps_managedError", { name: app.name })); + return false; + } finally { + setRefreshing(false); + } + }; + + // Filter apps based on search + const filteredApps = searchText + ? apps.filter(app => + app.name.toLowerCase().includes(searchText.toLowerCase()) || + app.applicationId.toLowerCase().includes(searchText.toLowerCase())) + : apps; + + const displayedApps = showManagedOnly + ? filteredApps.filter(app => app.managed) + : filteredApps; + + // Table columns + const columns = [ + { + title: trans("environments.apps_app"), + key: 'app', + render: (app: App) => ( + <div style={{ display: 'flex', alignItems: 'center' }}> + <Avatar + style={{ + backgroundColor: stringToColor(app.name), + marginRight: 12 + }} + shape="square" + > + {app.name.charAt(0).toUpperCase()} + </Avatar> + <div style={{ flex: 1 }}> + <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}> + <span style={{ fontWeight: 500 }}>{app.name}</span> + {app.applicationStatus === 'RECYCLED' && ( + <Tooltip title={trans("environments.apps_appRecycled")}> + <DeleteOutlined + style={{ + color: '#faad14', + fontSize: '14px' + }} + /> + </Tooltip> + )} + </div> + <div style={{ fontSize: 12, color: '#8c8c8c', marginTop: 4 }}> + {app.applicationId} + </div> + </div> + </div> + ), + }, + { + title: trans("environments.apps_status"), + key: 'status', + render: (app: App) => ( + <Space direction="vertical" size={0}> + <Tag color={app.published ? 'success' : 'default'} style={{ borderRadius: '4px' }}> + {app.published ? <CheckCircleFilled /> : null} {app.published ? trans("environments.apps_published") : trans("environments.apps_draft")} + </Tag> + <Tag + color={app.managed ? 'processing' : 'default'} + style={{ marginTop: 8, borderRadius: '4px' }} + > + {app.managed ? <CloudServerOutlined /> : <DisconnectOutlined />} {app.managed ? trans("environments.apps_managed") : trans("environments.apps_unmanaged")} + </Tag> + </Space> + ), + }, + { + title: trans("environments.apps_managed"), + key: 'managed', + render: (_: any, app: App) => ( + <Switch + checked={!!app.managed} + onChange={(checked: boolean) => handleToggleManaged(app, checked)} + loading={refreshing} + /> + ), + }, + { + title: trans("environments.workspaces_actions"), + key: 'actions', + render: (_: any, app: App) => ( + <Space onClick={(e) => e.stopPropagation()}> + + <Tooltip title={!app.managed ? trans("environments.apps_appMustBeManagedToDeploy") : trans("environments.apps_deployThisApp")}> + <Button + type="primary" + icon={<CloudUploadOutlined />} + onClick={() => openDeployModal(app, appsConfig, environment)} + disabled={!app.managed} + > + {trans("environments.apps_deploy")} + </Button> + </Tooltip> + <Tooltip title={trans("environments.apps_viewAuditLogs")}> + <Button + icon={<AuditOutlined />} + onClick={(e) => { + e.stopPropagation(); + const auditUrl = `/setting/audit?environmentId=${environment.environmentId}&orgId=${workspaceId}&appId=${app.applicationId}&pageSize=100&pageNum=1`; + window.open(auditUrl, '_blank'); + }} + > + {trans("environments.apps_audit")} + </Button> + </Tooltip> + </Space> + ), + } + ]; + + // Helper function to generate colors from strings + const stringToColor = (str: string) => { + let hash = 0; + for (let i = 0; i < str.length; i++) { + hash = str.charCodeAt(i) + ((hash << 5) - hash); + } + + const hue = Math.abs(hash % 360); + return `hsl(${hue}, 70%, 50%)`; + }; + + // Stat card component + const StatCard = ({ title, value, icon }: { title: string; value: number; icon: React.ReactNode }) => ( + <Card + style={{ + height: '100%', + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <div> + <div style={{ fontSize: '13px', color: '#8c8c8c', marginBottom: '8px' }}>{title}</div> + <div style={{ fontSize: '20px', fontWeight: 500 }}>{value}</div> + </div> + <div style={{ + fontSize: '24px', + opacity: 0.8, + color: '#1890ff', + padding: '8px', + backgroundColor: 'rgba(24, 144, 255, 0.1)', + borderRadius: '4px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + {icon} + </div> + </div> + </Card> + ); + + return ( + <div style={{ padding: '16px' }}> + {/* Header */} + <div style={{ + display: "flex", + justifyContent: "space-between", + alignItems: "center", + marginBottom: "20px" + }}> + <div> + <Title level={4} style={{ margin: 0, marginBottom: '4px' }}> + <AppstoreOutlined style={{ marginRight: 8 }} /> {trans("environments.apps_title")} + </Title> + <p style={{ marginBottom: 0, color: '#8c8c8c', fontSize: '14px' }}> + {trans("environments.apps_subtitle")} + </p> + </div> + <Button + icon={<SyncOutlined spin={refreshing} />} + onClick={handleRefresh} + loading={loading} + > + {trans("environments.apps_refresh")} + </Button> + </div> + + {/* Error display */} + {error && ( + <Alert + message={trans("environments.apps_errorLoadingApps")} + description={error} + type="error" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Configuration warnings */} + {(!environment.environmentApikey || !environment.environmentApiServiceUrl) && !error && ( + <Alert + message={trans("environments.apps_configurationIssue")} + description={trans("environments.apps_missingConfiguration")} + type="warning" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Stats display */} + <Row gutter={[16, 16]} style={{ marginBottom: '20px' }}> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.apps_totalApps")} + value={stats.total} + icon={<AppstoreOutlined />} + /> + </Col> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.apps_publishedApps")} + value={stats.published} + icon={<CheckCircleFilled />} + /> + </Col> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.apps_managedApps")} + value={stats.managed} + icon={<CloudServerOutlined />} + /> + </Col> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.apps_unmanagedApps")} + value={stats.unmanaged} + icon={<DisconnectOutlined />} + /> + </Col> + </Row> + + {/* Content */} + <Card + style={{ + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + {loading ? ( + <div style={{ display: 'flex', justifyContent: 'center', padding: '40px' }}> + <Spin size="large" /> + </div> + ) : apps.length === 0 ? ( + <Empty + description={error || trans("environments.apps_noAppsFound")} + image={Empty.PRESENTED_IMAGE_SIMPLE} + /> + ) : ( + <> + {/* Search and Filter Bar */} + <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 16 }}> + <Search + placeholder={trans("environments.apps_searchApps")} + allowClear + onSearch={value => setSearchText(value)} + onChange={e => setSearchText(e.target.value)} + style={{ width: 300 }} + /> + <Button + onClick={() => setShowManagedOnly(!showManagedOnly)} + type={showManagedOnly ? "primary" : "default"} + icon={<FilterOutlined />} + style={{ marginLeft: '8px' }} + > + {showManagedOnly ? trans("environments.apps_showAll") : trans("environments.apps_managedOnly")} + </Button> + </div> + + {searchText && displayedApps.length !== apps.length && ( + <div style={{ marginBottom: 16, color: '#8c8c8c', fontSize: '13px' }}> + {trans("environments.apps_showingResults", { count: displayedApps.length, total: apps.length })} + </div> + )} + + <Table + columns={columns} + dataSource={displayedApps} + rowKey="applicationId" + pagination={{ + pageSize: 10, + showTotal: (total, range) => trans("environments.apps_paginationTotal", { start: range[0], end: range[1], total }), + size: 'small' + }} + size="middle" + rowClassName={() => 'app-row'} + /> + </> + )} + </Card> + </div> + ); +}; + +export default AppsTab; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/ContactLowcoderModal.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/ContactLowcoderModal.tsx new file mode 100644 index 0000000000..708904ce59 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/ContactLowcoderModal.tsx @@ -0,0 +1,182 @@ +import React, { useState, useEffect } from 'react'; +import { Modal, Card, Row, Col, Typography, Divider, Spin, Alert } from 'antd'; +import { CustomerServiceOutlined, CloudServerOutlined } from '@ant-design/icons'; +import { useSelector } from 'react-redux'; +import { trans } from 'i18n'; +import { Environment } from '../types/environment.types'; +import { getEnvironmentDeploymentId } from '../services/environments.service'; +import { HubspotModal } from '../../hubspotModal'; +import { getUser } from 'redux/selectors/usersSelectors'; + +const { Title, Text } = Typography; + +interface ContactLowcoderModalProps { + visible: boolean; + onClose: () => void; + environment: Environment; +} + +/** + * Professional modal for contacting Lowcoder team with HubSpot form integration + */ +const ContactLowcoderModal: React.FC<ContactLowcoderModalProps> = ({ + visible, + onClose, + environment +}) => { + const [deploymentId, setDeploymentId] = useState<string | null>(null); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState<string | null>(null); + const [showHubspotModal, setShowHubspotModal] = useState(false); + const user = useSelector(getUser); + + // Fetch deployment ID when modal opens + useEffect(() => { + const fetchDeploymentId = async () => { + if (!visible || !environment.environmentApiServiceUrl || !environment.environmentApikey) { + if (visible) { + setError(trans('environments.contactLowcoder_apiConfigurationError')); + } + return; + } + + setIsLoading(true); + setError(null); + + try { + const id = await getEnvironmentDeploymentId( + environment.environmentApiServiceUrl, + environment.environmentApikey + ); + setDeploymentId(id); + setShowHubspotModal(true); + } catch (err) { + console.error('Failed to fetch deployment ID:', err); + setError(err instanceof Error ? err.message : trans('environments.contactLowcoder_failedToFetchDeploymentId')); + } finally { + setIsLoading(false); + } + }; + + fetchDeploymentId(); + }, [visible, environment.environmentApiServiceUrl, environment.environmentApikey]); + + // Handle HubSpot modal close + const handleHubspotClose = () => { + setShowHubspotModal(false); + onClose(); + }; + + // Handle main modal close + const handleClose = () => { + setShowHubspotModal(false); + setDeploymentId(null); + setError(null); + onClose(); + }; + + // Show HubSpot modal if we have deployment ID + if (showHubspotModal && deploymentId) { + return ( + <HubspotModal + open={showHubspotModal} + onClose={handleHubspotClose} + orgId={user.currentOrgId} + deploymentIds={[deploymentId]} + /> + ); + } + + return ( + <Modal + title={ + <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}> + <CustomerServiceOutlined style={{ fontSize: '20px', color: '#1890ff' }} /> + <span style={{ fontSize: '18px', fontWeight: 600 }}>{trans('environments.contactLowcoder_title')}</span> + </div> + } + open={visible} + onCancel={handleClose} + footer={null} + width={800} + centered + style={{ top: 20 }} + styles={{ body: { padding: '24px' } }} + > + {/* Environment Context Section */} + <Card + style={{ + marginBottom: '24px', + borderRadius: '8px', + background: '#fafafa', + border: '1px solid #f0f0f0' + }} + styles={{ body: { padding: '16px' } }} + > + <Row gutter={[16, 8]} align="middle"> + <Col> + <CloudServerOutlined style={{ fontSize: '24px', color: '#1890ff' }} /> + </Col> + <Col flex={1}> + <div> + <Text strong style={{ fontSize: '16px', color: '#262626' }}> + {trans('environments.contactLowcoder_environmentLabel')} {environment.environmentName || trans('environments.contactLowcoder_unnamedEnvironment')} + </Text> + <br /> + <Text style={{ fontSize: '14px', color: '#8c8c8c', fontFamily: 'monospace' }}> + {trans('environments.contactLowcoder_environmentIdLabel')} {environment.environmentId} + </Text> + <br /> + <Text style={{ fontSize: '14px', color: '#8c8c8c', fontFamily: 'monospace' }}> + {trans('environments.contactLowcoder_deploymentIdLabel')} {isLoading ? trans('environments.contactLowcoder_loading') : deploymentId || trans('environments.contactLowcoder_notAvailable')} + </Text> + </div> + </Col> + </Row> + </Card> + + <Divider style={{ margin: '16px 0' }} /> + + {/* Loading, Error, or Success State */} + <div style={{ minHeight: '200px', padding: '20px 0' }}> + {isLoading && ( + <div style={{ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + minHeight: '200px' + }}> + <Spin size="large" /> + <Text style={{ marginTop: '16px', color: '#8c8c8c' }}> + {trans('environments.contactLowcoder_fetchingDeploymentInfo')} + </Text> + </div> + )} + + {error && ( + <Alert + message={trans('environments.contactLowcoder_unableToLoadContactForm')} + description={error} + type="error" + showIcon + style={{ marginBottom: '16px' }} + /> + )} + + {!isLoading && !error && !deploymentId && ( + <div style={{ + textAlign: 'center', + color: '#8c8c8c', + fontSize: '14px' + }}> + <CustomerServiceOutlined style={{ fontSize: '48px', marginBottom: '16px', color: '#d9d9d9' }} /> + <div>{trans('environments.contactLowcoder_ensureProperConfiguration')}</div> + </div> + )} + </div> + </Modal> + ); +}; + +export default ContactLowcoderModal; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/CreateEnvironmentModal.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/CreateEnvironmentModal.tsx new file mode 100644 index 0000000000..e9548ea5ea --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/CreateEnvironmentModal.tsx @@ -0,0 +1,207 @@ +import React, { useState } from 'react'; +import { Modal, Form, Input, Select, Switch, Button, Alert, Tooltip } from 'antd'; +import { useSelector } from 'react-redux'; +import { selectMasterEnvironment, selectHasMasterEnvironment } from 'redux/selectors/enterpriseSelectors'; +import { Environment } from '../types/environment.types'; +import { trans } from 'i18n'; + +const { Option } = Select; + +interface CreateEnvironmentModalProps { + visible: boolean; + onClose: () => void; + onSave: (data: Partial<Environment>) => Promise<void>; + loading?: boolean; +} + +const CreateEnvironmentModal: React.FC<CreateEnvironmentModalProps> = ({ + visible, + onClose, + onSave, + loading = false +}) => { + const [form] = Form.useForm(); + const [submitLoading, setSubmitLoading] = useState(false); + const [isMaster, setIsMaster] = useState(false); + + // Redux selectors to check for existing master environment + const hasMasterEnvironment = useSelector(selectHasMasterEnvironment); + const masterEnvironment = useSelector(selectMasterEnvironment); + + const handleMasterChange = (checked: boolean) => { + // Only allow enabling master if no master environment exists + if (checked && hasMasterEnvironment) { + return; // Do nothing if trying to enable master when one already exists + } + setIsMaster(checked); + }; + + const handleSubmit = async () => { + try { + const values = await form.validateFields(); + setSubmitLoading(true); + + const submitData = { + ...values, + isMaster + }; + + await onSave(submitData); + form.resetFields(); + setIsMaster(false); // Reset master state + onClose(); + } catch (error) { + if (error instanceof Error) { + console.error("Form validation or submission error:", error); + } + } finally { + setSubmitLoading(false); + } + }; + + const handleCancel = () => { + form.resetFields(); + setIsMaster(false); // Reset master state + onClose(); + }; + + return ( + <Modal + title={trans("environments.modal_createNewEnvironment")} + open={visible} + onCancel={handleCancel} + maskClosable={true} + destroyOnHidden={true} + footer={[ + <Button key="back" onClick={handleCancel}> + {trans("environments.modal_cancel")} + </Button>, + <Button + key="submit" + type="primary" + loading={loading || submitLoading} + onClick={handleSubmit} + > + {trans("environments.modal_createEnvironment")} + </Button> + ]} + > + <Form + form={form} + layout="vertical" + name="create_environment_form" + initialValues={{ + environmentType: "DEV" + }} + > + <Form.Item + name="environmentName" + label={trans("environments.modal_environmentName")} + rules={[ + { required: true, message: trans("environments.modal_pleaseEnterName") }, + { min: 2, message: trans("environments.modal_nameMinLength") } + ]} + > + <Input placeholder={trans("environments.modal_enterEnvironmentName")} /> + </Form.Item> + + <Form.Item + name="environmentDescription" + label={trans("environments.modal_description")} + > + <Input.TextArea + placeholder={trans("environments.modal_enterDescription")} + rows={3} + /> + </Form.Item> + + <Form.Item + name="environmentType" + label={trans("environments.modal_stage")} + rules={[{ required: true, message: trans("environments.modal_pleaseSelectStage") }]} + > + <Select placeholder={trans("environments.modal_selectStage")}> + <Option value="DEV">{trans("environments.modal_development")}</Option> + <Option value="TEST">{trans("environments.modal_testing")}</Option> + <Option value="PREPROD">{trans("environments.modal_preProduction")}</Option> + <Option value="PROD">{trans("environments.modal_production")}</Option> + </Select> + </Form.Item> + + <Form.Item + name="environmentFrontendUrl" + label={trans("environments.modal_frontendUrl")} + rules={[ + { type: 'url', message: trans("environments.modal_pleaseEnterValidUrl") } + ]} + > + <Input placeholder="https://example.com" /> + </Form.Item> + + <Form.Item + name="environmentApiServiceUrl" + label={trans("environments.modal_apiServiceUrl")} + rules={[ + { type: 'url', message: trans("environments.modal_pleaseEnterValidUrl") } + ]} + > + <Input placeholder="https://api.example.com" /> + </Form.Item> + + <Form.Item + name="environmentNodeServiceUrl" + label={trans("environments.modal_nodeServiceUrl")} + rules={[ + { type: 'url', message: trans("environments.modal_pleaseEnterValidUrl") } + ]} + > + <Input placeholder="https://node.example.com" /> + </Form.Item> + + <Form.Item + name="environmentApikey" + label={trans("environments.modal_apiKey")} + > + <Input.TextArea + placeholder={trans("environments.modal_enterApiKey")} + rows={2} + /> + </Form.Item> + + <Form.Item label={trans("environments.modal_masterEnvironment")}> + <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}> + <Tooltip + title={ + hasMasterEnvironment + ? trans("environments.modal_alreadyMasterEnvironment", { name: masterEnvironment?.environmentName }) + : '' + } + > + <Switch + checked={isMaster} + onChange={handleMasterChange} + disabled={hasMasterEnvironment} + + /> + </Tooltip> + {isMaster && ( + <span style={{ color: '#52c41a', fontSize: '12px' }}> + {trans("environments.modal_willBeMaster")} + </span> + )} + </div> + </Form.Item> + + <Alert + message={trans("environments.modal_configurationRequirements")} + description={trans("environments.modal_configurationRequirementsDesc")} + type="warning" + showIcon + style={{ marginTop: '16px' }} + /> + </Form> + </Modal> + ); +}; + +export default CreateEnvironmentModal; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/DataSourcesTab.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/DataSourcesTab.tsx new file mode 100644 index 0000000000..d5704c0e9a --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/DataSourcesTab.tsx @@ -0,0 +1,421 @@ +import React, { useState, useEffect } from 'react'; +import { Card, Button, Divider, Alert, Table, Tag, Input, Space, Tooltip, Row, Col, Avatar } from 'antd'; +import { messageInstance } from 'lowcoder-design/src/components/GlobalInstances'; +import { + SyncOutlined, + CloudUploadOutlined, + DatabaseOutlined, + AuditOutlined, + ApiOutlined, + CheckCircleFilled, + CloudServerOutlined, + DisconnectOutlined, + FilterOutlined +} from '@ant-design/icons'; +import Title from 'antd/lib/typography/Title'; +import { Environment } from '../types/environment.types'; +import { DataSource } from '../types/datasource.types'; +import { getMergedWorkspaceDataSources } from '../services/datasources.service'; +import { Switch, Spin, Empty } from 'antd'; +import { ManagedObjectType, setManagedObject, unsetManagedObject } from '../services/managed-objects.service'; +import { useDeployModal } from '../context/DeployModalContext'; +import { dataSourcesConfig } from '../config/data-sources.config'; +import history from "@lowcoder-ee/util/history"; +import { trans } from 'i18n'; + +const { Search } = Input; + +interface DataSourcesTabProps { + environment: Environment; + workspaceId: string; +} + +const DataSourcesTab: React.FC<DataSourcesTabProps> = ({ environment, workspaceId }) => { + const [dataSources, setDataSources] = useState<DataSource[]>([]); + const [stats, setStats] = useState({ + total: 0, + types: 0, + managed: 0, + unmanaged: 0 + }); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState<string | null>(null); + const [searchText, setSearchText] = useState(''); + const { openDeployModal } = useDeployModal(); + const [showManagedOnly, setShowManagedOnly] = useState(false); + + // Fetch data sources + const fetchDataSources = async () => { + if (!workspaceId || !environment) return; + + setLoading(true); + setError(null); + + try { + const result = await getMergedWorkspaceDataSources( + workspaceId, + environment.environmentId, + environment.environmentApikey, + environment.environmentApiServiceUrl! + ); + + setDataSources(result.dataSources); + setStats(result.stats); + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to fetch data sources"); + } finally { + setLoading(false); + setRefreshing(false); + } + }; + + useEffect(() => { + fetchDataSources(); + }, [environment, workspaceId]); + + // Handle refresh + const handleRefresh = () => { + setRefreshing(true); + fetchDataSources(); + }; + + // Toggle managed status + const handleToggleManaged = async (dataSource: DataSource, checked: boolean) => { + setRefreshing(true); + try { + if (checked) { + await setManagedObject( + dataSource.gid, + environment.environmentId, + ManagedObjectType.DATASOURCE, + ); + } else { + await unsetManagedObject( + dataSource.gid, + environment.environmentId, + ManagedObjectType.DATASOURCE + ); + } + + // Update the data source in state + const updatedDataSources = dataSources.map(item => { + if (item.id === dataSource.id) { + return { ...item, managed: checked }; + } + return item; + }); + + setDataSources(updatedDataSources); + + // Update stats + const managed = updatedDataSources.filter(ds => ds.managed).length; + setStats(prev => ({ + ...prev, + managed, + unmanaged: prev.total - managed + })); + + messageInstance.success(trans(checked ? "environments.dataSources_managedSuccess" : "environments.dataSources_unmanagedSuccess", { name: dataSource.name })); + return true; + } catch (error) { + messageInstance.error(trans("environments.dataSources_managedError", { name: dataSource.name })); + return false; + } finally { + setRefreshing(false); + } + }; + + // Filter data sources based on managed status and search + const filteredDataSources = searchText + ? dataSources.filter(ds => + ds.name.toLowerCase().includes(searchText.toLowerCase()) || + ds.id.toString().toLowerCase().includes(searchText.toLowerCase())) + : dataSources; + + const displayedDataSources = showManagedOnly + ? filteredDataSources.filter(ds => ds.managed) + : filteredDataSources; + + // Table columns + const columns = [ + { + title: trans("environments.dataSources_dataSource"), + key: 'datasource', + render: (dataSource: DataSource) => ( + <div style={{ display: 'flex', alignItems: 'center' }}> + <Avatar + style={{ + backgroundColor: getDataSourceColor(dataSource.type), + marginRight: 12 + }} + shape="square" + icon={<DatabaseOutlined />} + /> + <div> + <div style={{ fontWeight: 500 }}>{dataSource.name}</div> + <div style={{ fontSize: 12, color: '#8c8c8c', marginTop: 4 }}> + {dataSource.id} + </div> + </div> + </div> + ), + }, + { + title: trans("environments.dataSources_type"), + dataIndex: 'type', + key: 'type', + render: (type: string) => ( + <Tag color={getDataSourceColor(type)} style={{ borderRadius: '4px', padding: '2px 12px' }}> + {type} + </Tag> + ), + }, + { + title: trans("environments.dataSources_status"), + key: 'status', + render: (dataSource: DataSource) => ( + <Tag + color={dataSource.managed ? 'processing' : 'default'} + style={{ borderRadius: '4px' }} + > + {dataSource.managed ? <CloudServerOutlined /> : <DisconnectOutlined />} {dataSource.managed ? trans("environments.dataSources_managed") : trans("environments.dataSources_unmanaged")} + </Tag> + ), + }, + { + title: trans("environments.dataSources_managed"), + key: 'managed', + render: (_: any, dataSource: DataSource) => ( + <Switch + checked={!!dataSource.managed} + onChange={(checked: boolean) => handleToggleManaged(dataSource, checked)} + loading={refreshing} + /> + ), + }, + { + title: trans("environments.workspaces_actions"), + key: 'actions', + render: (_: any, dataSource: DataSource) => ( + <Space onClick={(e) => e.stopPropagation()}> + + <Tooltip title={!dataSource.managed ? trans("environments.dataSources_dataSourceMustBeManagedToDeploy") : trans("environments.dataSources_deployThisDataSource")}> + <Button + type="primary" + icon={<CloudUploadOutlined />} + onClick={() => openDeployModal(dataSource, dataSourcesConfig, environment)} + disabled={!dataSource.managed} + > + {trans("environments.dataSources_deploy")} + </Button> + </Tooltip> + <Tooltip title={trans("environments.dataSources_viewAuditLogs")}> + <Button + icon={<AuditOutlined />} + onClick={(e) => { + e.stopPropagation(); + const auditUrl = `/setting/audit?environmentId=${environment.environmentId}&orgId=${workspaceId}&datasourceId=${dataSource.id}&pageSize=100&pageNum=1`; + window.open(auditUrl, '_blank'); + }} + > + {trans("environments.dataSources_audit")} + </Button> + </Tooltip> + </Space> + ), + } + ]; + + // Helper function to get color based on data source type + const getDataSourceColor = (type: string) => { + const colorMap: {[key: string]: string} = { + 'mysql': '#4479A1', + 'postgres': '#336791', + 'mongodb': '#4DB33D', + 'redis': '#DC382D', + 'rest': '#FF6C37', + 'graphql': '#E10098', + 'elasticsearch': '#005571', + 'oracle': '#F80000', + 'mssql': '#CC2927', + 'snowflake': '#29B5E8' + }; + + return colorMap[type.toLowerCase()] || '#1890ff'; + }; + + // Stat card component + const StatCard = ({ title, value, icon }: { title: string; value: number; icon: React.ReactNode }) => ( + <Card + style={{ + height: '100%', + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <div> + <div style={{ fontSize: '13px', color: '#8c8c8c', marginBottom: '8px' }}>{title}</div> + <div style={{ fontSize: '20px', fontWeight: 500 }}>{value}</div> + </div> + <div style={{ + fontSize: '24px', + opacity: 0.8, + color: '#52c41a', + padding: '8px', + backgroundColor: 'rgba(82, 196, 26, 0.1)', + borderRadius: '4px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + {icon} + </div> + </div> + </Card> + ); + + return ( + <div style={{ padding: '16px' }}> + {/* Header */} + <div style={{ + display: "flex", + justifyContent: "space-between", + alignItems: "center", + marginBottom: "20px" + }}> + <div> + <Title level={4} style={{ margin: 0, marginBottom: '4px' }}> + <DatabaseOutlined style={{ marginRight: 8 }} /> {trans("environments.dataSources_title")} + </Title> + <p style={{ marginBottom: 0, color: '#8c8c8c', fontSize: '14px' }}> + {trans("environments.dataSources_subtitle")} + </p> + </div> + <Button + icon={<SyncOutlined spin={refreshing} />} + onClick={handleRefresh} + loading={loading} + > + {trans("environments.dataSources_refresh")} + </Button> + </div> + + {/* Error display */} + {error && ( + <Alert + message={trans("environments.dataSources_errorLoadingDataSources")} + description={error} + type="error" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Configuration warnings */} + {(!environment.environmentApikey || !environment.environmentApiServiceUrl) && !error && ( + <Alert + message={trans("environments.dataSources_configurationIssue")} + description={trans("environments.dataSources_missingConfiguration")} + type="warning" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Stats display */} + <Row gutter={[16, 16]} style={{ marginBottom: '20px' }}> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.dataSources_totalDataSources")} + value={stats.total} + icon={<DatabaseOutlined />} + /> + </Col> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.dataSources_availableTypes")} + value={stats.types} + icon={<ApiOutlined />} + /> + </Col> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.dataSources_managed")} + value={stats.managed} + icon={<CloudServerOutlined />} + /> + </Col> + <Col xs={12} sm={12} md={6}> + <StatCard + title={trans("environments.dataSources_unmanaged")} + value={stats.unmanaged} + icon={<DisconnectOutlined />} + /> + </Col> + </Row> + + {/* Content */} + <Card + style={{ + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + {loading ? ( + <div style={{ display: 'flex', justifyContent: 'center', padding: '40px' }}> + <Spin size="large" /> + </div> + ) : dataSources.length === 0 ? ( + <Empty + description={error || trans("environments.dataSources_noDataSourcesFound")} + image={Empty.PRESENTED_IMAGE_SIMPLE} + /> + ) : ( + <> + {/* Search and Filter Bar */} + <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 16 }}> + <Search + placeholder={trans("environments.dataSources_searchDataSources")} + allowClear + onSearch={value => setSearchText(value)} + onChange={e => setSearchText(e.target.value)} + style={{ width: 300 }} + /> + <Button + onClick={() => setShowManagedOnly(!showManagedOnly)} + type={showManagedOnly ? "primary" : "default"} + icon={<FilterOutlined />} + style={{ marginLeft: '8px' }} + > + {showManagedOnly ? trans("environments.dataSources_showAll") : trans("environments.dataSources_managedOnly")} + </Button> + </div> + + {searchText && displayedDataSources.length !== dataSources.length && ( + <div style={{ marginBottom: 16, color: '#8c8c8c', fontSize: '13px' }}> + {trans("environments.dataSources_showingResults", { count: displayedDataSources.length, total: dataSources.length })} + </div> + )} + + <Table + columns={columns} + dataSource={displayedDataSources} + rowKey="id" + pagination={{ + pageSize: 10, + showTotal: (total, range) => trans("environments.dataSources_paginationTotal", { start: range[0], end: range[1], total }), + size: 'small' + }} + size="middle" + rowClassName={() => 'datasource-row'} + /> + </> + )} + </Card> + </div> + ); +}; + +export default DataSourcesTab; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/DeployItemModal.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/DeployItemModal.tsx new file mode 100644 index 0000000000..ac0d4868b7 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/DeployItemModal.tsx @@ -0,0 +1,258 @@ +// components/DeployItemModal.tsx +import React, { useState, useEffect } from 'react'; +import { Modal, Form, Select, Checkbox, Button, Spin, Input, Tag, Space, Alert } from 'antd'; +import { messageInstance } from 'lowcoder-design/src/components/GlobalInstances'; +import { trans } from "i18n"; +import { useSelector } from 'react-redux'; +import { selectLicensedEnvironments, selectEnvironmentsLoading } from 'redux/selectors/enterpriseSelectors'; +import { Environment } from '../types/environment.types'; +import { DeployableItemConfig } from '../types/deployable-item.types'; +import { getEnvironmentTagColor, formatEnvironmentType } from '../utils/environmentUtils'; +import { ExclamationCircleOutlined } from '@ant-design/icons'; +import { showFirstCredentialOverwriteConfirm, showSecondCredentialOverwriteConfirm } from './credentialConfirmations'; + +interface DeployItemModalProps { + visible: boolean; + item: any | null; + sourceEnvironment: Environment; + config: DeployableItemConfig; + onClose: () => void; + onSuccess?: () => void; +} + +function DeployItemModal({ + visible, + item, + sourceEnvironment, + config, + onClose, + onSuccess +}: DeployItemModalProps) { + const [form] = Form.useForm(); + const licensedEnvironments = useSelector(selectLicensedEnvironments); + const isLoading = useSelector(selectEnvironmentsLoading); + const [deploying, setDeploying] = useState(false); + const [credentialConfirmationStep, setCredentialConfirmationStep] = useState(0); // 0: not started, 1: first confirmation, 2: confirmed + + useEffect(() => { + if (visible) { + form.resetFields(); + setCredentialConfirmationStep(0); + } + }, [visible, form]); + + // Filter out source environment from target list + const targetEnvironments = licensedEnvironments.filter( + (env: Environment) => env.environmentId !== sourceEnvironment.environmentId + ); + + // Handle credential checkbox change with double confirmation + const handleCredentialCheckboxChange = (checked: boolean, fieldName: string) => { + if (!checked) { + // If unchecking, reset confirmation and update form + setCredentialConfirmationStep(0); + form.setFieldsValue({ [fieldName]: false }); + return; + } + + // First confirmation + if (credentialConfirmationStep === 0) { + showFirstCredentialOverwriteConfirm({ + onOk: () => { + setCredentialConfirmationStep(1); + // Show second confirmation immediately + showSecondCredentialOverwriteConfirm({ + onOk: () => { + setCredentialConfirmationStep(2); + form.setFieldsValue({ [fieldName]: true }); + }, + onCancel: () => { + setCredentialConfirmationStep(0); + form.setFieldsValue({ [fieldName]: false }); + } + }); + }, + onCancel: () => { + setCredentialConfirmationStep(0); + form.setFieldsValue({ [fieldName]: false }); + } + }); + } + }; + + const handleDeploy = async () => { + if (!config.deploy || !item) return; + + try { + const values = await form.validateFields(); + const targetEnv = licensedEnvironments.find(env => env.environmentId === values.targetEnvId); + + if (!targetEnv) { + messageInstance.error(trans("environments.deployModal_targetEnvironmentNotFound")); + return; + } + + // Additional check for credential overwrite + if (values.deployCredential && credentialConfirmationStep !== 2) { + messageInstance.error(trans("environments.deployModal_confirmCredentialOverwrite")); + return; + } + + setDeploying(true); + + // Prepare parameters based on item type + const params = config.deploy.prepareParams(item, values, sourceEnvironment, targetEnv); + + // Execute deployment + await config.deploy.execute(params); + + messageInstance.success(trans("environments.deployModal_deploySuccess", { name: item.name })); + if (onSuccess) onSuccess(); + onClose(); + } catch (error) { + console.error('Deployment error:', error); + messageInstance.error(trans("environments.deployModal_deployFailed", { singularLabel: config.deploy.singularLabel.toLowerCase() })); + } finally { + setDeploying(false); + } + }; + + return ( + <Modal + title={trans("environments.deployModal_deployTitle", { + singularLabel: config.deploy.singularLabel, + name: item?.name || '' + })} + open={visible} + onCancel={onClose} + footer={null} + destroyOnHidden + > + {isLoading ? ( + <div style={{ textAlign: 'center', padding: '20px' }}> + <Spin tip={trans("environments.deployModal_loadingEnvironments")} /> + </div> + ) : ( + <Form + form={form} + layout="vertical" + > + {/* Source environment display */} + <Form.Item label={trans("environments.deployModal_sourceEnvironment")}> + <Space> + <strong>{sourceEnvironment.environmentName}</strong> + {sourceEnvironment.environmentType && ( + <Tag color={getEnvironmentTagColor(sourceEnvironment.environmentType)}> + {formatEnvironmentType(sourceEnvironment.environmentType)} + </Tag> + )} + </Space> + </Form.Item> + + <Form.Item + name="targetEnvId" + label={trans("environments.deployModal_targetEnvironment")} + rules={[{ required: true, message: trans("environments.deployModal_selectTargetEnvironmentValidation") }]} + > + <Select placeholder={trans("environments.deployModal_selectTargetEnvironment")}> + {targetEnvironments.map((env) => ( + <Select.Option key={env.environmentId} value={env.environmentId}> + <Space> + {env.environmentName} + {env.environmentType && ( + <Tag color={getEnvironmentTagColor(env.environmentType)}> + {formatEnvironmentType(env.environmentType)} + </Tag> + )} + </Space> + </Select.Option> + ))} + </Select> + </Form.Item> + + {/* Render dynamic fields based on config */} + {config.deploy?.fields.map(field => { + switch (field.type) { + case 'checkbox': + // Special handling for credential-related checkboxes + const isCredentialField = field.name === 'deployCredential'; + return ( + <Form.Item + key={field.name} + name={field.name} + valuePropName="checked" + initialValue={field.defaultValue} + > + <Checkbox + onChange={(e) => { + if (isCredentialField) { + handleCredentialCheckboxChange(e.target.checked, field.name); + } else { + // For non-credential checkboxes, handle normally + form.setFieldsValue({ [field.name]: e.target.checked }); + } + }} + > + {field.label} + {isCredentialField && credentialConfirmationStep === 2 && ( + <Tag + color="red" + style={{ marginLeft: 8 }} + icon={<ExclamationCircleOutlined />} + > + {trans("environments.deployModal_confirmed")} + </Tag> + )} + </Checkbox> + </Form.Item> + ); + case 'select': + return ( + <Form.Item + key={field.name} + name={field.name} + label={field.label} + initialValue={field.defaultValue} + rules={field.required ? [{ required: true, message: trans("environments.deployModal_selectFieldValidation", { label: field.label }) }] : undefined} + > + <Select placeholder={trans("environments.deployModal_selectFieldPlaceholder", { label: field.label })}> + {field.options?.map(option => ( + <Select.Option key={option.value} value={option.value}> + {option.label} + </Select.Option> + ))} + </Select> + </Form.Item> + ); + case 'input': + return ( + <Form.Item + key={field.name} + name={field.name} + label={field.label} + initialValue={field.defaultValue} + rules={field.required ? [{ required: true, message: trans("environments.deployModal_inputFieldValidation", { label: field.label }) }] : undefined} + > + <Input placeholder={trans("environments.deployModal_inputFieldPlaceholder", { label: field.label })} /> + </Form.Item> + ); + default: + return null; + } + })} + + <Form.Item> + <Button type="default" onClick={onClose} style={{ marginRight: 8 }}> + {trans("environments.deployModal_cancel")} + </Button> + <Button type="primary" onClick={handleDeploy} loading={deploying}> + {trans("environments.deployModal_deploy")} + </Button> + </Form.Item> + </Form> + )} + </Modal> + ); +} + +export default DeployItemModal; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/EditEnvironmentModal.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/EditEnvironmentModal.tsx new file mode 100644 index 0000000000..8ea8fb1f04 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/EditEnvironmentModal.tsx @@ -0,0 +1,207 @@ +import React, { useState, useEffect } from 'react'; +import { Modal, Form, Input, Select, Switch, Button, Alert, Tooltip } from 'antd'; +import { useSelector } from 'react-redux'; +import { selectMasterEnvironment, selectHasMasterEnvironment } from 'redux/selectors/enterpriseSelectors'; +import { Environment } from '../types/environment.types'; +import { trans } from 'i18n'; + +const { Option } = Select; + +interface EditEnvironmentModalProps { + visible: boolean; + environment: Environment | null; + onClose: () => void; + onSave: (data: Partial<Environment>) => Promise<void>; // Updated signature + loading?: boolean; +} + +const EditEnvironmentModal: React.FC<EditEnvironmentModalProps> = ({ + visible, + environment, + onClose, + onSave, + loading = false +}) => { + const [form] = Form.useForm(); + const [submitLoading, setSubmitLoading] = useState(false); + const [isMaster, setIsMaster] = useState(false); + + // Redux selectors to check for existing master environment + const hasMasterEnvironment = useSelector(selectHasMasterEnvironment); + const masterEnvironment = useSelector(selectMasterEnvironment); + + // Check if another environment is master (not this one) + const hasOtherMaster = hasMasterEnvironment && masterEnvironment?.environmentId !== environment?.environmentId; + + // Initialize form with environment data when it changes + useEffect(() => { + if (environment) { + setIsMaster(environment.isMaster); + form.setFieldsValue({ + environmentName: environment.environmentName || '', + environmentDescription: environment.environmentDescription || '', + environmentType: environment.environmentType, + environmentApiServiceUrl: environment.environmentApiServiceUrl || '', + environmentFrontendUrl: environment.environmentFrontendUrl || '', + environmentNodeServiceUrl: environment.environmentNodeServiceUrl || '', + environmentApikey: environment.environmentApikey || '' + }); + } + }, [environment, form]); + + const handleMasterChange = (checked: boolean) => { + // Only allow enabling master if no other environment is master + if (checked && hasOtherMaster) { + return; // Do nothing if trying to enable master when another exists + } + setIsMaster(checked); + }; + + const handleSubmit = async () => { + if (!environment) return; + + try { + const values = await form.validateFields(); + setSubmitLoading(true); + + const submitData = { + ...values, + isMaster + }; + + await onSave(submitData); + onClose(); + } catch (error) { + if (error instanceof Error) { + console.error("Form validation or submission error:", error); + } + } finally { + setSubmitLoading(false); + } + }; + + return ( + <Modal + title={trans("environments.modal_editEnvironment")} + open={visible} + onCancel={onClose} + maskClosable={true} + destroyOnHidden={true} + footer={[ + <Button key="back" onClick={onClose}> + {trans("environments.modal_cancel")} + </Button>, + <Button + key="submit" + type="primary" + loading={loading || submitLoading} + onClick={handleSubmit} + > + {trans("environments.modal_saveChanges")} + </Button> + ]} + > + <Form + form={form} + layout="vertical" + name="edit_environment_form" + > + <Form.Item + name="environmentName" + label={trans("environments.modal_environmentName")} + rules={[{ required: true, message: trans("environments.modal_pleaseEnterName") }]} + > + <Input placeholder={trans("environments.modal_enterEnvironmentName")} /> + </Form.Item> + + <Form.Item + name="environmentDescription" + label={trans("environments.modal_description")} + > + <Input.TextArea + placeholder={trans("environments.modal_enterDescription")} + rows={3} + /> + </Form.Item> + + <Form.Item + name="environmentType" + label={trans("environments.modal_stage")} + rules={[{ required: true, message: trans("environments.modal_pleaseSelectStage") }]} + > + <Select placeholder={trans("environments.modal_selectStage")}> + <Option value="DEV">{trans("environments.modal_development")}</Option> + <Option value="TEST">{trans("environments.modal_testing")}</Option> + <Option value="PREPROD">{trans("environments.modal_preProduction")}</Option> + <Option value="PROD">{trans("environments.modal_production")}</Option> + </Select> + </Form.Item> + + <Form.Item + name="environmentFrontendUrl" + label={trans("environments.modal_frontendUrl")} + > + <Input placeholder="https://example.com" /> + </Form.Item> + + <Form.Item + name="environmentApiServiceUrl" + label={trans("environments.modal_apiServiceUrl")} + > + <Input placeholder="https://api.example.com" /> + </Form.Item> + + <Form.Item + name="environmentNodeServiceUrl" + label={trans("environments.modal_nodeServiceUrl")} + > + <Input placeholder="https://node.example.com" /> + </Form.Item> + + <Form.Item + name="environmentApikey" + label={trans("environments.modal_apiKey")} + > + <Input.TextArea + placeholder={trans("environments.modal_enterApiKey")} + rows={2} + /> + </Form.Item> + + <Form.Item label={trans("environments.modal_masterEnvironment")}> + <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}> + <Tooltip + title={ + hasOtherMaster && !isMaster + ? trans("environments.modal_alreadyMasterEnvironment", { name: masterEnvironment?.environmentName }) + : '' + } + > + <Switch + checked={isMaster} + onChange={handleMasterChange} + disabled={hasOtherMaster && !isMaster} + + /> + </Tooltip> + {isMaster && ( + <span style={{ color: '#faad14', fontSize: '12px' }}> + {trans("environments.modal_currentlyMaster")} + </span> + )} + </div> + </Form.Item> + + <Alert + message={trans("environments.modal_configurationRequirements")} + description={trans("environments.modal_configurationRequirementsDesc")} + type="warning" + showIcon + style={{ marginTop: '16px' }} + /> + </Form> + </Modal> + ); +}; + +export default EditEnvironmentModal; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentHeader.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentHeader.tsx new file mode 100644 index 0000000000..871a51cc22 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentHeader.tsx @@ -0,0 +1,105 @@ +import React from 'react'; +import { Button, Tag, Typography, Row, Col } from 'antd'; +import { EditOutlined, CloudServerOutlined } from '@ant-design/icons'; +import { Environment } from '../types/environment.types'; +import { getEnvironmentTagColor } from '../utils/environmentUtils'; +import { trans } from 'i18n'; + +const { Title, Text } = Typography; + +interface EnvironmentHeaderProps { + environment: Environment; + onEditClick: () => void; +} + +/** + * Header component for environment details + * Displays environment name, ID, type, and controls + */ +const EnvironmentHeader: React.FC<EnvironmentHeaderProps> = ({ + environment, + onEditClick +}) => { + return ( + <div + className="environment-header" + style={{ + marginBottom: "24px", + background: '#fff', + padding: '20px 24px', + borderRadius: '8px', + border: '1px solid #f0f0f0', + }} + > + <Row justify="space-between" align="middle" gutter={[16, 16]}> + <Col xs={24} sm={18}> + <div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}> + <div className="environment-icon" style={{ + fontSize: '32px', + backgroundColor: '#f5f5f5', + width: '64px', + height: '64px', + borderRadius: '8px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: '#8b8fa3', + border: '1px solid #e8e8e8' + }}> + <CloudServerOutlined /> + </div> + <div> + <Title level={3} style={{ margin: '0 0 8px 0', color: '#222222', fontWeight: '500' }}> + {environment.environmentName || trans("environments.unnamedEnvironment")} + </Title> + <div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: '12px' }}> + <Text style={{ + color: '#8b8fa3', + fontSize: '14px', + fontFamily: 'monospace' + }}> + {trans("environments.id")}: {environment.environmentId} + </Text> + <Tag + color={getEnvironmentTagColor(environment.environmentType)} + style={{ + marginLeft: 0, + borderRadius: '4px', + fontSize: '12px' + }} + > + {environment.environmentType} + </Tag> + {environment.isMaster && ( + <Tag color="green" style={{ marginLeft: 0, borderRadius: '4px', fontSize: '12px' }}> + {trans("environments.master")} + </Tag> + )} + {environment.isLicensed === false && ( + <Tag color="orange" style={{ marginLeft: 0, borderRadius: '4px', fontSize: '12px' }}> + {trans("environments.detail_unlicensed")} + </Tag> + )} + </div> + </div> + </div> + </Col> + <Col xs={24} sm={6} style={{ textAlign: 'right' }}> + <Button + icon={<EditOutlined />} + onClick={onEditClick} + type="primary" + style={{ + fontWeight: '500', + borderRadius: '4px' + }} + > + {trans("environments.unlicensed_editEnvironment")} + </Button> + </Col> + </Row> + </div> + ); +}; + +export default EnvironmentHeader; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentsTable.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentsTable.tsx new file mode 100644 index 0000000000..4208afb08d --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentsTable.tsx @@ -0,0 +1,322 @@ +import React from 'react'; +import { Table, Tag, Button, Tooltip, Space, Card, Row, Col, Typography, Avatar, Spin, Alert, Progress } from 'antd'; +import { EditOutlined, AuditOutlined, LinkOutlined, EnvironmentOutlined, StarFilled, CloudServerOutlined, CheckCircleOutlined, CloseCircleOutlined, ExclamationCircleOutlined, SyncOutlined, ApiOutlined } from '@ant-design/icons'; +import { Environment } from '../types/environment.types'; +import { getEnvironmentTagColor, formatEnvironmentType } from '../utils/environmentUtils'; +import { getAPICallsStatusColor } from '../services/license.service'; +import { trans } from 'i18n'; + +const { Text, Title } = Typography; + +interface EnvironmentsTableProps { + environments: Environment[]; + loading: boolean; + onRowClick: (record: Environment) => void; +} + +/** + * Clean card-based layout for displaying environments consistent with app design + */ +const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({ + environments, + loading, + onRowClick, +}) => { + // Open audit page in new tab + const openAuditPage = (environmentId: string, e: React.MouseEvent) => { + e.stopPropagation(); // Prevent row click from triggering + const auditUrl = `/setting/audit?environmentId=${environmentId}`; + window.open(auditUrl, '_blank'); + }; + + // Handle row click - allow navigation to all environments including unlicensed + const handleRowClick = (env: Environment) => { + onRowClick(env); + }; + + // Generate background color for environment avatar + const getAvatarColor = (name: string) => { + const type = name.toUpperCase(); + if (type === 'PROD') return '#f5222d'; + if (type === 'PREPROD') return '#fa8c16'; + if (type === 'TEST') return '#722ed1'; + if (type === 'DEV') return '#1890ff'; + + let hash = 0; + for (let i = 0; i < name.length; i++) { + hash = name.charCodeAt(i) + ((hash << 5) - hash); + } + const hue = Math.abs(hash % 360); + return `hsl(${hue}, 70%, 50%)`; + }; + + // Get license status icon and color + const getLicenseStatusDisplay = (env: Environment) => { + switch (env.licenseStatus) { + case 'checking': + return { + icon: <SyncOutlined spin />, + color: '#40a9ff', + text: trans("environments.licenseStatus_checking"), + status: 'processing' as const + }; + case 'licensed': + return { + icon: <CheckCircleOutlined />, + color: '#73d13d', + text: trans("environments.licenseStatus_licensed"), + status: 'success' as const + }; + case 'unlicensed': + return { + icon: <CloseCircleOutlined />, + color: '#ff7875', + text: trans("environments.licenseStatus_unlicensed"), + status: 'warning' as const + }; + case 'error': + return { + icon: <ExclamationCircleOutlined />, + color: '#ffc53d', + text: trans("environments.licenseStatus_error"), + status: 'warning' as const + }; + default: + return { + icon: <ExclamationCircleOutlined />, + color: '#d9d9d9', + text: trans("environments.licenseStatus_unknown"), + status: 'default' as const + }; + } + }; + + if (environments.length === 0) { + return null; + } + + return ( + <div className="environments-grid"> + <Row gutter={[16, 16]}> + {environments.map(env => { + const licenseDisplay = getLicenseStatusDisplay(env); + const isAccessible = env.isLicensed !== false; + + return ( + <Col xs={24} sm={24} md={12} lg={8} xl={8} key={env.environmentId}> + <Card + hoverable + style={{ + borderRadius: '4px', + height: '100%', + cursor: 'pointer', + transition: 'all 0.2s ease', + border: '1px solid #f0f0f0', + position: 'relative' + }} + styles={{ body: { padding: '16px' } }} + onClick={() => handleRowClick(env)} + > + {/* Subtle overlay for unlicensed environments */} + {!isAccessible && ( + <div style={{ + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + background: 'rgba(255, 255, 255, 0.8)', + zIndex: 1, + display: 'flex', + alignItems: 'flex-start', + justifyContent: 'flex-end', + padding: '12px' + }}> + {/* Not Licensed Badge */} + <div style={{ + background: licenseDisplay.color, + color: 'white', + padding: '4px 8px', + borderRadius: '4px', + fontSize: '12px', + fontWeight: 500, + display: 'flex', + alignItems: 'center', + gap: '4px' + }}> + {licenseDisplay.icon} + {licenseDisplay.text} + </div> + </div> + )} + + <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '12px' }}> + <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}> + <Avatar + style={{ + backgroundColor: getAvatarColor(env.environmentType || 'TEST'), + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }} + size={40} + icon={<CloudServerOutlined />} + /> + <div> + <Title level={5} style={{ margin: 0, marginBottom: '4px', fontSize: '14px' }}> + {env.environmentName || trans("environments.unnamedEnvironment")} + {env.isMaster && ( + <Tooltip title={trans("environments.masterEnvironment")}> + <StarFilled style={{ color: '#faad14', marginLeft: '6px', fontSize: '12px' }} /> + </Tooltip> + )} + </Title> + <Space size="small"> + <Tag + color={getEnvironmentTagColor(env.environmentType)} + style={{ fontSize: '11px', borderRadius: '4px' }} + > + {formatEnvironmentType(env.environmentType)} + </Tag> + <Tag + icon={licenseDisplay.icon} + color={licenseDisplay.status === 'success' ? 'green' : + licenseDisplay.status === 'warning' ? 'orange' : + licenseDisplay.status === 'processing' ? 'blue' : 'default'} + style={{ fontSize: '11px', borderRadius: '4px' }} + > + {licenseDisplay.text} + </Tag> + </Space> + </div> + </div> + {/* Only show audit button for licensed environments */} + {isAccessible && ( + <div> + <Tooltip title={trans("environments.viewAuditLogs")} placement="top"> + <Button + type="text" + icon={<AuditOutlined />} + onClick={(e) => openAuditPage(env.environmentId, e)} + size="small" + style={{ + width: '28px', + height: '28px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }} + /> + </Tooltip> + </div> + )} + </div> + + <div style={{ padding: '8px 0', borderTop: '1px solid #f5f5f5' }}> + <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}> + <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}> + <Text type="secondary" style={{ fontSize: '12px' }}>{trans("environments.id")}:</Text> + {isAccessible ? ( + <Text style={{ fontSize: '12px', fontFamily: 'monospace' }} copyable={{ tooltips: [trans("environments.copyId"), trans("environments.copied")] }}> + {env.environmentId} + </Text> + ) : ( + <Text style={{ fontSize: '12px', fontFamily: 'monospace' }}> + {env.environmentId} + </Text> + )} + </div> + + <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}> + <Text type="secondary" style={{ fontSize: '12px' }}>{trans("environments.domain")}:</Text> + {env.environmentFrontendUrl ? ( + isAccessible ? ( + <a + href={env.environmentFrontendUrl} + target="_blank" + rel="noopener noreferrer" + onClick={(e) => e.stopPropagation()} + style={{ fontSize: '12px' }} + > + {env.environmentFrontendUrl.replace(/^https?:\/\//, '')} + <LinkOutlined style={{ marginLeft: 4, fontSize: '10px' }} /> + </a> + ) : ( + <Text style={{ fontSize: '12px' }}> + {env.environmentFrontendUrl.replace(/^https?:\/\//, '')} + </Text> + ) + ) : ( + <Text style={{ fontSize: '12px' }}>—</Text> + )} + </div> + + <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}> + <Text type="secondary" style={{ fontSize: '12px' }}>{trans("environments.master")}:</Text> + <Text style={{ fontSize: '12px' }}> + {env.isMaster ? trans("environments.yes") : trans("environments.no")} + </Text> + </div> + + <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}> + <Text type="secondary" style={{ fontSize: '12px' }}>{trans("environments.license")}:</Text> + <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}> + <span style={{ color: licenseDisplay.color, fontSize: '12px' }}> + {licenseDisplay.icon} + </span> + <Text style={{ fontSize: '12px', color: licenseDisplay.color }}> + {licenseDisplay.text} + </Text> + </div> + </div> + + {/* API Calls Information - show if license details are available */} + {env.licenseDetails && ( + <div style={{ marginTop: '8px', padding: '8px', background: '#fafafa', borderRadius: '4px' }}> + <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '6px' }}> + <Text type="secondary" style={{ fontSize: '11px' }}> + <ApiOutlined style={{ marginRight: '4px' }} /> + {trans("environments.apiCalls")} + </Text> + + </div> + <Progress + percent={env.licenseDetails.apiCallsUsage || 0} + strokeColor={getAPICallsStatusColor( + env.licenseDetails.remainingAPICalls, + env.licenseDetails.totalAPICallsLimit || 0 + )} + size="small" + showInfo={false} + /> + <div style={{ + display: 'flex', + justifyContent: 'space-between', + marginTop: '4px', + fontSize: '10px', + color: '#8c8c8c' + }}> + <span>{trans("environments.percentUsed", { percent: env.licenseDetails.apiCallsUsage || 0 })}</span> + </div> + </div> + )} + </div> + </div> + </Card> + </Col> + ); + })} + </Row> + + {environments.length > 10 && ( + <div style={{ textAlign: 'center', margin: '16px 0' }}> + <Text type="secondary" style={{ fontSize: '13px' }}> + {trans("environments.showingAllEnvironments", { count: environments.length })} + </Text> + </div> + )} + </div> + ); +}; + +export default EnvironmentsTable; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/ErrorComponent.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/ErrorComponent.tsx new file mode 100644 index 0000000000..cc415b9aa0 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/ErrorComponent.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Card, Button, Typography } from 'antd'; +import { HomeOutlined } from '@ant-design/icons'; +import history from '@lowcoder-ee/util/history'; +import { trans } from 'i18n'; + +const { Title, Text } = Typography; + +interface ErrorComponentProps { + errorMessage: string; + returnPath: string; + returnLabel: string; +} + +const ErrorComponent: React.FC<ErrorComponentProps> = ({ errorMessage, returnPath, returnLabel }) => { + return ( + <div style={{ padding: '24px', flex: 1 }}> + <Card style={{ borderRadius: '8px', boxShadow: '0 2px 8px rgba(0,0,0,0.05)' }}> + <div style={{ textAlign: 'center', padding: '40px 0' }}> + <Title level={3} style={{ color: '#ff4d4f' }}> + {errorMessage} + </Title> + <Text type="secondary" style={{ display: 'block', margin: '16px 0' }}> + {trans("environments.error_itemNotFound")} + </Text> + <Button + type="primary" + onClick={() => history.push(returnPath)} + style={{ marginTop: '16px' }} + > + <HomeOutlined /> {returnLabel} + </Button> + </div> + </Card> + </div> + ); +}; + +export default ErrorComponent; diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/ModernBreadcrumbs.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/ModernBreadcrumbs.tsx new file mode 100644 index 0000000000..9d06214586 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/ModernBreadcrumbs.tsx @@ -0,0 +1,67 @@ +import React, { ReactNode } from 'react'; +import { default as AntdBreadcrumb } from 'antd/es/breadcrumb'; +import { BreadcrumbProps } from 'antd/lib/breadcrumb'; +import styled from 'styled-components'; +import { ArrowIcon } from 'lowcoder-design'; + +interface ModernBreadcrumbsProps extends Omit<BreadcrumbProps, 'items'> { + /** + * Items to display in the breadcrumb + */ + items?: { + key: string; + title: ReactNode; + onClick?: () => void; + }[]; +} + +const Breadcrumb = styled(AntdBreadcrumb)` + margin-bottom: 10px; + font-size: 20px; + li:not(:last-child) { + color: #8b8fa3; + } + + li:last-child { + font-weight: 500; + color: #222222; + } + + li.ant-breadcrumb-separator { + display: flex; + flex-direction: column; + justify-content: center; + } +`; + +const BreadcrumbItem = styled.div` + cursor: pointer; +`; + + +const ModernBreadcrumbs: React.FC<ModernBreadcrumbsProps> = ({ items = [], ...props }) => { + // Convert custom items format to the standard format used throughout the application + const breadcrumbItems = items.map(item => ({ + key: item.key, + title: item.title, + onClick: item.onClick + })); + + return ( + <Breadcrumb + {...props} + separator={<ArrowIcon />} + items={breadcrumbItems} + itemRender={(item) => ( + <BreadcrumbItem + key={item.key} + onClick={item.onClick} + > + {item.title} + </BreadcrumbItem> + )} + /> + ); +}; + +export default ModernBreadcrumbs; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/QueriesTab.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/QueriesTab.tsx new file mode 100644 index 0000000000..7f65057c45 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/QueriesTab.tsx @@ -0,0 +1,414 @@ +import React, { useState, useEffect } from 'react'; +import { Card, Button, Divider, Alert, Table, Tag, Input, Space, Tooltip, Row, Col } from 'antd'; +import { messageInstance } from 'lowcoder-design/src/components/GlobalInstances'; +import { + SyncOutlined, + CloudUploadOutlined, + CodeOutlined, + AuditOutlined, + UserOutlined, + CloudServerOutlined, + DisconnectOutlined, + ApiOutlined, + ThunderboltOutlined, + FilterOutlined +} from '@ant-design/icons'; +import Title from 'antd/lib/typography/Title'; +import { Environment } from '../types/environment.types'; +import { Workspace } from '../types/workspace.types'; +import { Query } from '../types/query.types'; +import { getMergedWorkspaceQueries } from '../services/query.service'; +import { Switch, Spin, Empty, Avatar } from 'antd'; +import { ManagedObjectType, setManagedObject, unsetManagedObject } from '../services/managed-objects.service'; +import { useDeployModal } from '../context/DeployModalContext'; +import { queryConfig } from '../config/query.config'; +import history from "@lowcoder-ee/util/history"; +import { trans } from 'i18n'; + +const { Search } = Input; + +interface QueriesTabProps { + environment: Environment; + workspaceId: string; +} + +const QueriesTab: React.FC<QueriesTabProps> = ({ environment, workspaceId }) => { + const [queries, setQueries] = useState<Query[]>([]); + const [stats, setStats] = useState({ + total: 0, + managed: 0, + unmanaged: 0 + }); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState<string | null>(null); + const [searchText, setSearchText] = useState(''); + const { openDeployModal } = useDeployModal(); + const [showManagedOnly, setShowManagedOnly] = useState(false); + + // Fetch queries + const fetchQueries = async () => { + if (!workspaceId || !environment) return; + + setLoading(true); + setError(null); + + try { + const result = await getMergedWorkspaceQueries( + workspaceId, + environment.environmentId, + environment.environmentApikey, + environment.environmentApiServiceUrl! + ); + + setQueries(result.queries); + setStats(result.stats); + } catch (err) { + setError(err instanceof Error ? err.message : "Failed to fetch queries"); + } finally { + setLoading(false); + setRefreshing(false); + } + }; + + useEffect(() => { + fetchQueries(); + }, [environment, workspaceId]); + + // Handle refresh + const handleRefresh = () => { + setRefreshing(true); + fetchQueries(); + }; + + // Toggle managed status + const handleToggleManaged = async (query: Query, checked: boolean) => { + setRefreshing(true); + try { + if (checked) { + await setManagedObject( + query.gid, + environment.environmentId, + ManagedObjectType.QUERY, + ); + } else { + await unsetManagedObject( + query.gid, + environment.environmentId, + ManagedObjectType.QUERY + ); + } + + // Update the query in state + const updatedQueries = queries.map(item => { + if (item.id === query.id) { + return { ...item, managed: checked }; + } + return item; + }); + + setQueries(updatedQueries); + + // Update stats + const managed = updatedQueries.filter(q => q.managed).length; + setStats(prev => ({ + ...prev, + managed, + unmanaged: prev.total - managed + })); + + messageInstance.success(trans(checked ? "environments.queries_managedSuccess" : "environments.queries_unmanagedSuccess", { name: query.name })); + return true; + } catch (error) { + messageInstance.error(trans("environments.queries_managedError", { name: query.name })); + return false; + } finally { + setRefreshing(false); + } + }; + + // Filter queries based on search + const filteredQueries = searchText + ? queries.filter(query => + query.name.toLowerCase().includes(searchText.toLowerCase()) || + query.id.toLowerCase().includes(searchText.toLowerCase())) + : queries; + + const displayedQueries = showManagedOnly + ? filteredQueries.filter(query => query.managed) + : filteredQueries; + + // Helper function to generate colors from strings + const stringToColor = (str: string) => { + let hash = 0; + for (let i = 0; i < str.length; i++) { + hash = str.charCodeAt(i) + ((hash << 5) - hash); + } + + const hue = Math.abs(hash % 360); + return `hsl(${hue}, 70%, 50%)`; + }; + + // Table columns + const columns = [ + { + title: trans("environments.queries_query"), + key: 'query', + render: (query: Query) => ( + <div style={{ display: 'flex', alignItems: 'center' }}> + <Avatar + style={{ + backgroundColor: stringToColor(query.name), + marginRight: 12 + }} + shape="square" + icon={<CodeOutlined />} + > + </Avatar> + <div> + <div style={{ fontWeight: 500 }}>{query.name}</div> + <div style={{ fontSize: 12, color: '#8c8c8c', marginTop: 4 }}> + {query.id} + </div> + </div> + </div> + ), + }, + { + title: trans("environments.queries_creator"), + dataIndex: 'creatorName', + key: 'creatorName', + render: (creatorName: string) => ( + <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}> + <Avatar + size="small" + icon={<UserOutlined />} + style={{ backgroundColor: '#1890ff' }} + /> + {creatorName} + </div> + ) + }, + { + title: trans("environments.queries_status"), + key: 'status', + render: (query: Query) => ( + <Tag + color={query.managed ? 'processing' : 'default'} + style={{ borderRadius: '4px' }} + > + {query.managed ? <CloudServerOutlined /> : <DisconnectOutlined />} {query.managed ? trans("environments.queries_managed") : trans("environments.queries_unmanaged")} + </Tag> + ), + }, + { + title: trans("environments.queries_managed"), + key: 'managed', + render: (_: any, query: Query) => ( + <Switch + checked={!!query.managed} + onChange={(checked: boolean) => handleToggleManaged(query, checked)} + loading={refreshing} + /> + ), + }, + { + title: trans("environments.workspaces_actions"), + key: 'actions', + render: (_: any, query: Query) => ( + <Space onClick={(e) => e.stopPropagation()}> + + <Tooltip title={!query.managed ? trans("environments.queries_queryMustBeManagedToDeploy") : trans("environments.queries_deployThisQuery")}> + <Button + type="primary" + icon={<CloudUploadOutlined />} + onClick={() => openDeployModal(query, queryConfig, environment)} + disabled={!query.managed} + > + {trans("environments.queries_deploy")} + </Button> + </Tooltip> + <Tooltip title={trans("environments.queries_viewAuditLogs")}> + <Button + icon={<AuditOutlined />} + onClick={(e) => { + e.stopPropagation(); + const auditUrl = `/setting/audit?environmentId=${environment.environmentId}&orgId=${workspaceId}&queryId=${query.id}&pageSize=100&pageNum=1`; + window.open(auditUrl, '_blank'); + }} + > + {trans("environments.queries_audit")} + </Button> + </Tooltip> + </Space> + ), + } + ]; + + // Stat card component + const StatCard = ({ title, value, icon }: { title: string; value: number; icon: React.ReactNode }) => ( + <Card + style={{ + height: '100%', + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <div> + <div style={{ fontSize: '13px', color: '#8c8c8c', marginBottom: '8px' }}>{title}</div> + <div style={{ fontSize: '20px', fontWeight: 500 }}>{value}</div> + </div> + <div style={{ + fontSize: '24px', + opacity: 0.8, + color: '#722ed1', + padding: '8px', + backgroundColor: 'rgba(114, 46, 209, 0.1)', + borderRadius: '4px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + {icon} + </div> + </div> + </Card> + ); + + return ( + <div style={{ padding: '16px' }}> + {/* Header */} + <div style={{ + display: "flex", + justifyContent: "space-between", + alignItems: "center", + marginBottom: "20px" + }}> + <div> + <Title level={4} style={{ margin: 0, marginBottom: '4px' }}> + <ThunderboltOutlined style={{ marginRight: 8 }} /> {trans("environments.queries_title")} + </Title> + <p style={{ marginBottom: 0, color: '#8c8c8c', fontSize: '14px' }}> + {trans("environments.queries_subtitle")} + </p> + </div> + <Button + icon={<SyncOutlined spin={refreshing} />} + onClick={handleRefresh} + loading={loading} + > + {trans("environments.queries_refresh")} + </Button> + </div> + + {/* Error display */} + {error && ( + <Alert + message={trans("environments.queries_errorLoadingQueries")} + description={error} + type="error" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Configuration warnings */} + {(!environment.environmentApikey || !environment.environmentApiServiceUrl) && !error && ( + <Alert + message={trans("environments.queries_configurationIssue")} + description={trans("environments.queries_missingConfiguration")} + type="warning" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Stats display */} + <Row gutter={[16, 16]} style={{ marginBottom: '20px' }}> + <Col xs={24} sm={8}> + <StatCard + title={trans("environments.queries_totalQueries")} + value={stats.total} + icon={<CodeOutlined />} + /> + </Col> + <Col xs={24} sm={8}> + <StatCard + title={trans("environments.queries_managed")} + value={stats.managed} + icon={<CloudServerOutlined />} + /> + </Col> + <Col xs={24} sm={8}> + <StatCard + title={trans("environments.queries_unmanaged")} + value={stats.unmanaged} + icon={<DisconnectOutlined />} + /> + </Col> + </Row> + + {/* Content */} + <Card + style={{ + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + {loading ? ( + <div style={{ display: 'flex', justifyContent: 'center', padding: '40px' }}> + <Spin size="large" /> + </div> + ) : queries.length === 0 ? ( + <Empty + description={error || trans("environments.queries_noQueriesFound")} + image={Empty.PRESENTED_IMAGE_SIMPLE} + /> + ) : ( + <> + {/* Search and Filter Bar */} + <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 16 }}> + <Search + placeholder={trans("environments.queries_searchQueries")} + allowClear + onSearch={value => setSearchText(value)} + onChange={e => setSearchText(e.target.value)} + style={{ width: 300 }} + /> + <Button + onClick={() => setShowManagedOnly(!showManagedOnly)} + type={showManagedOnly ? "primary" : "default"} + icon={<FilterOutlined />} + style={{ marginLeft: '8px' }} + > + {showManagedOnly ? trans("environments.queries_showAll") : trans("environments.queries_managedOnly")} + </Button> + </div> + + {searchText && displayedQueries.length !== queries.length && ( + <div style={{ marginBottom: 16, color: '#8c8c8c', fontSize: '13px' }}> + {trans("environments.queries_showingResults", { count: displayedQueries.length, total: queries.length })} + </div> + )} + + <Table + columns={columns} + dataSource={displayedQueries} + rowKey="id" + pagination={{ + pageSize: 10, + showTotal: (total, range) => trans("environments.queries_paginationTotal", { start: range[0], end: range[1], total }), + size: 'small' + }} + size="middle" + rowClassName={() => 'query-row'} + /> + </> + )} + </Card> + </div> + ); +}; + +export default QueriesTab; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/StatsCard.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/StatsCard.tsx new file mode 100644 index 0000000000..214a601069 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/StatsCard.tsx @@ -0,0 +1,74 @@ +import React from 'react'; +import { Card } from 'antd'; + +interface StatsCardProps { + title: string; + value: number | string; + icon?: React.ReactNode; + color?: string; + className?: string; + style?: React.CSSProperties; +} + +/** + * Reusable StatsCard component for displaying environment statistics + * Used across all Environment pages for consistency + */ +const StatsCard: React.FC<StatsCardProps> = ({ + title, + value, + icon, + color = '#1890ff', + className = '', + style = {} +}) => { + return ( + <Card + className={className} + style={{ + height: '100%', + borderRadius: '4px', + border: '1px solid #f0f0f0', + ...style + }} + > + <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <div> + <div style={{ + fontSize: '13px', + color: '#8c8c8c', + marginBottom: '8px', + textTransform: 'uppercase', + letterSpacing: '0.5px' + }}> + {title} + </div> + <div style={{ + fontSize: '20px', + fontWeight: 500, + color: '#262626' + }}> + {value} + </div> + </div> + {icon && ( + <div style={{ + fontSize: '24px', + opacity: 0.8, + color: color, + padding: '8px', + backgroundColor: `${color}15`, + borderRadius: '4px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + {icon} + </div> + )} + </div> + </Card> + ); +}; + +export default StatsCard; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/UnlicensedEnvironmentView.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/UnlicensedEnvironmentView.tsx new file mode 100644 index 0000000000..13dca0e7ea --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/UnlicensedEnvironmentView.tsx @@ -0,0 +1,253 @@ +import React, { useState } from 'react'; +import { Button, Card, Space, Typography, Row, Col } from 'antd'; +import { + CustomerServiceOutlined, + EditOutlined, + ArrowLeftOutlined, + CloseCircleOutlined, + ExclamationCircleOutlined, + WarningOutlined, + CloudServerOutlined +} from '@ant-design/icons'; +import { Environment } from '../types/environment.types'; +import ContactLowcoderModal from './ContactLowcoderModal'; +import ModernBreadcrumbs from './ModernBreadcrumbs'; +import EnvironmentHeader from './EnvironmentHeader'; +import StatsCard from './StatsCard'; +import { Level1SettingPageContent } from "../../styled"; +import history from "@lowcoder-ee/util/history"; +import { trans } from 'i18n'; + +const { Title, Text } = Typography; + +interface UnlicensedEnvironmentViewProps { + environment: Environment; + onEditClick: () => void; +} + +/** + * Consistent UI for unlicensed environments matching other environment pages + */ +const UnlicensedEnvironmentView: React.FC<UnlicensedEnvironmentViewProps> = ({ + environment, + onEditClick +}) => { + const [isContactModalVisible, setIsContactModalVisible] = useState(false); + + const getLicenseIcon = () => { + switch (environment.licenseStatus) { + case 'unlicensed': + return <CloseCircleOutlined style={{ fontSize: '48px', color: '#ff7875' }} />; + case 'error': + return <ExclamationCircleOutlined style={{ fontSize: '48px', color: '#ffc53d' }} />; + default: + return <WarningOutlined style={{ fontSize: '48px', color: '#ff7875' }} />; + } + }; + + const getLicenseTitle = () => { + return environment.licenseError; + } + + + + const getLicenseDescription = () => { + + switch (environment.licenseStatus) { + case 'unlicensed': + return trans("environments.unlicensed_unlicensedDescription"); + case 'error': + return trans("environments.unlicensed_errorDescription"); + default: + return trans("environments.unlicensed_defaultDescription"); + } + }; + + // Stats data consistent with other environment pages + const statsData = [ + { + title: trans("environments.unlicensed_type"), + value: environment.environmentType || trans("environments.detail_unknown"), + icon: <CloudServerOutlined />, + color: "#1890ff" + }, + { + title: trans("environments.unlicensed_status"), + value: trans("environments.detail_unlicensed"), + icon: <CloseCircleOutlined />, + color: "#ff4d4f" + }, + { + title: trans("environments.unlicensed_masterEnv"), + value: environment.isMaster ? trans("environments.yes") : trans("environments.no"), + icon: <CloudServerOutlined />, + color: environment.isMaster ? "#722ed1" : "#8c8c8c" + }, + { + title: trans("environments.unlicensed_licenseIssue"), + value: environment.licenseStatus === 'error' ? trans("environments.unlicensed_error") : trans("environments.unlicensed_missing"), + icon: environment.licenseStatus === 'error' ? <ExclamationCircleOutlined /> : <CloseCircleOutlined />, + color: environment.licenseStatus === 'error' ? "#faad14" : "#ff4d4f" + } + ]; + + return ( + <Level1SettingPageContent style={{ minWidth: "1000px" }}> + + {/* Breadcrumbs */} + <ModernBreadcrumbs + items={[ + { + key: 'environments', + title: trans("environments.title"), + onClick: () => history.push('/setting/environments') + }, + { + key: 'current', + title: environment.environmentName || trans("environments.detail_environmentDetail") + } + ]} + /> + + {/* Environment Header Component */} + <EnvironmentHeader + environment={environment} + onEditClick={onEditClick} + /> + + {/* Stats Cards Row */} + <Row gutter={[16, 16]} style={{ marginBottom: "24px" }}> + {statsData.map((stat, index) => ( + <Col xs={24} sm={12} lg={6} key={index}> + <StatsCard + title={stat.title} + value={stat.value} + icon={stat.icon} + color={stat.color} + /> + </Col> + ))} + </Row> + + + + {/* License Issue Card */} + <Card + style={{ + marginBottom: "24px", + borderRadius: '4px', + border: '1px solid #f0f0f0', + background: 'white' + }} + styles={{ body: { padding: '32px' } }} + > + <Row justify="center"> + <Col xs={24} sm={20} md={16} lg={12}> + <div style={{ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + textAlign: 'center' + }}> + {/* Status Icon */} + <div style={{ marginBottom: '24px' }}> + {getLicenseIcon()} + </div> + + {/* License Issue Information */} + <Title level={2} style={{ marginBottom: '12px', color: '#262626' }}> + {getLicenseTitle()} + </Title> + <Text style={{ + fontSize: '16px', + color: '#595959', + marginBottom: '24px', + lineHeight: '1.6', + maxWidth: '500px' + }}> + {getLicenseDescription()} + </Text> + + {/* Action Buttons */} + <Space size="large" direction="vertical" style={{ width: '100%', maxWidth: '400px' }}> + <Button + type="primary" + size="large" + onClick={() => setIsContactModalVisible(true)} + style={{ + width: '100%', + height: '48px', + borderRadius: '4px', + fontSize: '16px', + fontWeight: 500 + }} + > + {trans("environments.unlicensed_contactLowcoderTeam")} + </Button> + + <Button + size="large" + icon={<EditOutlined />} + onClick={onEditClick} + style={{ + width: '100%', + height: '48px', + borderRadius: '4px', + fontSize: '16px', + fontWeight: 500 + }} + > + {trans("environments.unlicensed_editEnvironment")} + </Button> + + <Button + size="large" + icon={<ArrowLeftOutlined />} + onClick={() => history.push("/setting/environments")} + style={{ + width: '100%', + height: '48px', + borderRadius: '4px', + fontSize: '16px', + fontWeight: 500 + }} + > + {trans("environments.unlicensed_backToEnvironments")} + </Button> + </Space> + </div> + </Col> + </Row> + </Card> + + {/* Help Text */} + <Card + style={{ + borderRadius: '4px', + border: '1px solid #f0f0f0', + background: '#fafafa' + }} + styles={{ body: { padding: '16px' } }} + > + <Text style={{ + color: '#8c8c8c', + fontSize: '14px', + textAlign: 'center', + display: 'block', + lineHeight: '1.5' + }}> + {trans("environments.unlicensed_helpText")} + </Text> + </Card> + + {/* Contact Lowcoder Modal */} + <ContactLowcoderModal + visible={isContactModalVisible} + onClose={() => setIsContactModalVisible(false)} + environment={environment} + /> + </Level1SettingPageContent> + ); +}; + +export default UnlicensedEnvironmentView; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/UserGroupsTab.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/UserGroupsTab.tsx new file mode 100644 index 0000000000..a98f9784d9 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/UserGroupsTab.tsx @@ -0,0 +1,349 @@ +import React, { useState, useEffect } from 'react'; +import { Card, Button, Alert, Table, Tag, Input, Space, Row, Col, Avatar, Tooltip } from 'antd'; +import { SyncOutlined, TeamOutlined, UserOutlined, UsergroupAddOutlined, SettingOutlined, CodeOutlined } from '@ant-design/icons'; +import Title from 'antd/lib/typography/Title'; +import { Environment } from '../types/environment.types'; +import { UserGroup, UserGroupsTabStats } from '../types/userGroup.types'; +import { getEnvironmentUserGroups } from '../services/environments.service'; +import { Spin, Empty } from 'antd'; +import { trans } from 'i18n'; + +const { Search } = Input; + +interface UserGroupsTabProps { + environment: Environment; +} + +const UserGroupsTab: React.FC<UserGroupsTabProps> = ({ environment }) => { + const [userGroups, setUserGroups] = useState<UserGroup[]>([]); + const [stats, setStats] = useState<UserGroupsTabStats>({ + total: 0, + allUsers: 0, + developers: 0, + custom: 0 + }); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState<string | null>(null); + const [searchText, setSearchText] = useState(''); + + // Fetch user groups + const fetchUserGroups = async () => { + if (!environment) return; + + setLoading(true); + setError(null); + + try { + // Check for required environment properties + if (!environment.environmentApikey || !environment.environmentApiServiceUrl) { + setError(trans("environments.userGroups_missingConfiguration")); + setLoading(false); + return; + } + + const response = await getEnvironmentUserGroups( + environment.environmentId, + environment.environmentApikey, + environment.environmentApiServiceUrl + ); + + // Extract the groups from the data array in the response + const groups = response|| []; + + setUserGroups(groups); + + // Calculate stats + const total = groups.length; + const allUsers = groups.filter((group: UserGroup) => group.allUsersGroup).length; + const developers = groups.filter((group: UserGroup) => group.devGroup).length; + const custom = total - (allUsers + developers); + + setStats({ + total, + allUsers, + developers, + custom + }); + } catch (err) { + setError(err instanceof Error ? err.message : trans("environments.userGroups_errorLoadingUserGroups")); + } finally { + setLoading(false); + setRefreshing(false); + } + }; + + useEffect(() => { + fetchUserGroups(); + }, [environment]); + + // Handle refresh + const handleRefresh = () => { + setRefreshing(true); + fetchUserGroups(); + }; + + // Filter user groups based on search + const filteredUserGroups = searchText + ? userGroups.filter(group => + group.groupName.toLowerCase().includes(searchText.toLowerCase()) || + group.groupId.toLowerCase().includes(searchText.toLowerCase())) + : userGroups; + + // Helper function to generate colors from strings + const stringToColor = (str: string) => { + let hash = 0; + for (let i = 0; i < str.length; i++) { + hash = str.charCodeAt(i) + ((hash << 5) - hash); + } + + const hue = Math.abs(hash % 360); + return `hsl(${hue}, 70%, 50%)`; + }; + + // Stat card component + const StatCard = ({ title, value, icon }: { title: string; value: number; icon: React.ReactNode }) => ( + <Card + style={{ + height: '100%', + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <div> + <div style={{ fontSize: '13px', color: '#8c8c8c', marginBottom: '8px' }}>{title}</div> + <div style={{ fontSize: '20px', fontWeight: 500 }}>{value}</div> + </div> + <div style={{ + fontSize: '24px', + opacity: 0.8, + color: '#722ed1', + padding: '8px', + backgroundColor: 'rgba(114, 46, 209, 0.1)', + borderRadius: '4px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + {icon} + </div> + </div> + </Card> + ); + + // Table columns + const columns = [ + { + title: trans("environments.userGroups_userGroup"), + key: 'group', + render: (group: UserGroup) => ( + <div style={{ display: 'flex', alignItems: 'center' }}> + <Avatar + style={{ + backgroundColor: stringToColor(group.groupName), + marginRight: 12 + }} + shape="square" + size="small" + > + {group.groupName.charAt(0).toUpperCase()} + </Avatar> + <div> + <div style={{ fontWeight: 500, fontSize: '14px' }}>{group.groupName}</div> + <div style={{ fontSize: 12, color: '#8c8c8c', marginTop: 2 }}> + {group.groupId} + </div> + </div> + </div> + ), + }, + { + title: trans("environments.userGroups_type"), + key: 'type', + render: (_: any, group: UserGroup) => { + if (group.allUsersGroup) return ( + <Tag color="blue" style={{ borderRadius: '4px' }}> + <UserOutlined style={{ marginRight: 4 }} /> {trans("environments.userGroups_allUsers")} + </Tag> + ); + if (group.devGroup) return ( + <Tag color="purple" style={{ borderRadius: '4px' }}> + <CodeOutlined style={{ marginRight: 4 }} /> {trans("environments.userGroups_developers")} + </Tag> + ); + return ( + <Tag color="default" style={{ borderRadius: '4px' }}> + <SettingOutlined style={{ marginRight: 4 }} /> {trans("environments.userGroups_custom")} + </Tag> + ); + }, + }, + { + title: trans("environments.userGroups_members"), + key: 'members', + render: (_: any, group: UserGroup) => ( + <Tooltip title={trans("environments.userGroups_totalMembersTooltip")}> + <Tag style={{ borderRadius: '4px', backgroundColor: '#f6f6f6', color: '#333' }}> + <UserOutlined style={{ marginRight: 4 }} /> {group.stats?.userCount || 0} + </Tag> + </Tooltip> + ), + }, + { + title: trans("environments.userGroups_adminMembers"), + key: 'adminMembers', + render: (_: any, group: UserGroup) => ( + <Tooltip title={trans("environments.userGroups_adminMembersTooltip")}> + <Tag style={{ borderRadius: '4px', backgroundColor: '#fff1f0', color: '#cf1322' }}> + <UserOutlined style={{ marginRight: 4 }} /> {group.stats?.adminUserCount || 0} + </Tag> + </Tooltip> + ), + }, + { + title: trans("environments.userGroups_created"), + dataIndex: 'createTime', + key: 'createTime', + render: (createTime: number) => ( + <span style={{ color: '#8c8c8c', fontSize: '13px' }}> + {new Date(createTime).toLocaleDateString()} + </span> + ), + } + ]; + + return ( + <div style={{ padding: '16px' }}> + {/* Header */} + <div style={{ + display: "flex", + justifyContent: "space-between", + alignItems: "center", + marginBottom: "20px" + }}> + <div> + <Title level={4} style={{ margin: 0, marginBottom: '4px' }}> + <UsergroupAddOutlined style={{ marginRight: 8 }} /> {trans("environments.userGroups_title")} + </Title> + <p style={{ marginBottom: 0, color: '#8c8c8c', fontSize: '14px' }}> + {trans("environments.userGroups_subtitle")} + </p> + </div> + <Button + icon={<SyncOutlined spin={refreshing} />} + onClick={handleRefresh} + loading={loading} + > + {trans("environments.userGroups_refresh")} + </Button> + </div> + + {/* Error display */} + {error && ( + <Alert + message={trans("environments.userGroups_errorLoadingUserGroups")} + description={error} + type="error" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Configuration warnings */} + {(!environment.environmentApikey || !environment.environmentApiServiceUrl) && !error && ( + <Alert + message={trans("environments.userGroups_configurationIssue")} + description={trans("environments.userGroups_missingConfiguration")} + type="warning" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Stats display */} + <Row gutter={[16, 16]} style={{ marginBottom: '20px' }}> + <Col xs={24} sm={12} md={6}> + <StatCard + title={trans("environments.userGroups_totalGroups")} + value={stats.total} + icon={<TeamOutlined />} + /> + </Col> + <Col xs={24} sm={12} md={6}> + <StatCard + title={trans("environments.userGroups_allUsersGroups")} + value={stats.allUsers} + icon={<UserOutlined />} + /> + </Col> + <Col xs={24} sm={12} md={6}> + <StatCard + title={trans("environments.userGroups_developerGroups")} + value={stats.developers} + icon={<CodeOutlined />} + /> + </Col> + <Col xs={24} sm={12} md={6}> + <StatCard + title={trans("environments.userGroups_customGroups")} + value={stats.custom} + icon={<SettingOutlined />} + /> + </Col> + </Row> + + {/* Content */} + <Card + style={{ + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + {loading ? ( + <div style={{ display: 'flex', justifyContent: 'center', padding: '40px' }}> + <Spin size="large" /> + </div> + ) : userGroups.length === 0 ? ( + <Empty + description={error || trans("environments.userGroups_noUserGroupsFound")} + image={Empty.PRESENTED_IMAGE_SIMPLE} + /> + ) : ( + <> + {/* Search Bar */} + <div style={{ marginBottom: 16 }}> + <Search + placeholder={trans("environments.userGroups_searchUserGroups")} + allowClear + onSearch={value => setSearchText(value)} + onChange={e => setSearchText(e.target.value)} + style={{ width: 300 }} + /> + {searchText && filteredUserGroups.length !== userGroups.length && ( + <div style={{ marginTop: 8, color: '#8c8c8c', fontSize: '13px' }}> + {trans("environments.userGroups_showingResults", { count: filteredUserGroups.length, total: userGroups.length })} + </div> + )} + </div> + + <Table + columns={columns} + dataSource={filteredUserGroups} + rowKey="groupId" + pagination={{ + pageSize: 10, + showTotal: (total, range) => trans("environments.userGroups_paginationTotal", { start: range[0], end: range[1], total }), + size: 'small' + }} + size="middle" + rowClassName={() => 'group-row'} + /> + </> + )} + </Card> + </div> + ); +}; + +export default UserGroupsTab; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/WorkspaceHeader.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/WorkspaceHeader.tsx new file mode 100644 index 0000000000..c3516db25d --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/WorkspaceHeader.tsx @@ -0,0 +1,153 @@ +import React, { useState } from "react"; +import { + Typography, + Switch, + Button, + Tag, + Tooltip, + Row, + Col, + Avatar, + Space, +} from "antd"; +import { + CloudUploadOutlined, + TeamOutlined, + CloudServerOutlined, + ClockCircleOutlined, +} from "@ant-design/icons"; +import { Environment } from "../types/environment.types"; +import { Workspace } from "../types/workspace.types"; + +const { Title, Text } = Typography; + +interface WorkspaceHeaderProps { + workspace: Workspace; + environment: Environment; + isToggling: boolean; + onToggleManagedStatus: (checked: boolean) => Promise<void>; + onDeploy: () => void; +} + +const WorkspaceHeader: React.FC<WorkspaceHeaderProps> = ({ + workspace, + environment, + isToggling, + onToggleManagedStatus, + onDeploy +}) => { + + // Generate a consistent color for the workspace avatar + const getAvatarColor = (name: string) => { + let hash = 0; + for (let i = 0; i < name.length; i++) { + hash = name.charCodeAt(i) + ((hash << 5) - hash); + } + const hue = Math.abs(hash % 360); + return `hsl(${hue}, 45%, 55%)`; + }; + + // Format date for last updated + const formatDate = (date: number | undefined) => { + if (!date) return "N/A"; + return new Date(date).toLocaleDateString("en-US", { + month: "short", + day: "numeric", + year: "numeric" + }); + }; + + return ( + <div + className="workspace-header" + style={{ + marginBottom: "24px", + background: '#fff', + padding: '20px 24px', + borderRadius: '8px', + border: '1px solid #f0f0f0', + }} + > + <Row justify="space-between" align="middle" gutter={[16, 16]}> + <Col xs={24} sm={18}> + <div style={{ display: 'flex', alignItems: 'center', gap: '16px' }}> + <Avatar + size={64} + style={{ + backgroundColor: getAvatarColor(workspace.name), + border: '2px solid #f0f0f0', + fontSize: '24px', + fontWeight: '500' + }} + > + {workspace.name.charAt(0).toUpperCase()} + </Avatar> + <div> + <Title level={3} style={{ margin: '0 0 8px 0', color: '#222222', fontWeight: '500' }}> + {workspace.name} + </Title> + <div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: '12px' }}> + <Text style={{ + color: '#8b8fa3', + fontSize: '14px', + fontFamily: 'monospace' + }}> + ID: {workspace.id} + </Text> + <Text style={{ color: '#8b8fa3', fontSize: '14px' }}> + <ClockCircleOutlined style={{ marginRight: 4 }} /> + {formatDate(workspace.creationDate)} + </Text> + <Tag color="blue" style={{ borderRadius: '4px', fontSize: '12px' }}> + <CloudServerOutlined style={{ marginRight: 4 }} /> + {environment.environmentName} + </Tag> + <Tag + color={workspace.managed ? 'green' : 'orange'} + style={{ borderRadius: '4px', fontSize: '12px' }} + > + {workspace.managed ? 'Managed' : 'Unmanaged'} + </Tag> + </div> + </div> + </div> + </Col> + <Col xs={24} sm={6} style={{ textAlign: 'right' }}> + <div style={{ display: "flex", justifyContent: "flex-end", gap: "12px", flexWrap: "wrap", alignItems: 'center' }}> + <div style={{ display: "flex", alignItems: "center", marginRight: '12px' }}> + <Text style={{ marginRight: "8px", color: '#8b8fa3', fontSize: '14px' }}>Managed:</Text> + <Switch + checked={!!workspace.managed} + onChange={onToggleManagedStatus} + loading={isToggling} + size="small" + /> + </div> + <Tooltip + title={ + !workspace.managed + ? "Workspace must be managed before it can be deployed" + : "Deploy this workspace to another environment" + } + > + <Button + type="primary" + icon={<CloudUploadOutlined />} + onClick={onDeploy} + disabled={!workspace.managed} + style={{ + fontWeight: '500', + borderRadius: '4px' + }} + > + Deploy + </Button> + </Tooltip> + </div> + </Col> + </Row> + </div> + ); +}; + +export default WorkspaceHeader; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/WorkspacesTab.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/WorkspacesTab.tsx new file mode 100644 index 0000000000..816a312dbe --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/WorkspacesTab.tsx @@ -0,0 +1,351 @@ +import React, { useState, useEffect } from 'react'; +import { Card, Button, Divider, Alert, Table, Tag, Input, Space, Tooltip, Row, Col, Avatar } from 'antd'; +import { SyncOutlined, AuditOutlined, TeamOutlined, CheckCircleFilled, CloudServerOutlined, DisconnectOutlined, FilterOutlined } from '@ant-design/icons'; +import Title from 'antd/lib/typography/Title'; +import { Environment } from '../types/environment.types'; +import { Workspace } from '../types/workspace.types'; +import { getMergedEnvironmentWorkspaces } from '../services/workspace.service'; +import { Spin, Empty } from 'antd'; +import { trans } from 'i18n'; + +import history from '@lowcoder-ee/util/history'; + +const { Search } = Input; + +interface WorkspacesTabProps { + environment: Environment; +} + +const WorkspacesTab: React.FC<WorkspacesTabProps> = ({ environment }) => { + const [workspaces, setWorkspaces] = useState<Workspace[]>([]); + const [stats, setStats] = useState({ + total: 0, + managed: 0, + unmanaged: 0 + }); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState<string | null>(null); + const [searchText, setSearchText] = useState(''); + const [showManagedOnly, setShowManagedOnly] = useState(false); + + // Fetch workspaces + const fetchWorkspaces = async () => { + if (!environment) return; + + setLoading(true); + setError(null); + + try { + // Check for required environment properties + if (!environment.environmentApikey || !environment.environmentApiServiceUrl) { + setError(trans("environments.workspaces_missingConfiguration")); + setLoading(false); + return; + } + + const result = await getMergedEnvironmentWorkspaces( + environment.environmentId, + environment.environmentApikey, + environment.environmentApiServiceUrl + ); + + setWorkspaces(result.workspaces); + setStats(result.stats); + } catch (err) { + setError(err instanceof Error ? err.message : trans("environments.workspaces_errorLoadingWorkspaces")); + } finally { + setLoading(false); + setRefreshing(false); + } + }; + + useEffect(() => { + fetchWorkspaces(); + }, [environment]); + + // Handle refresh + const handleRefresh = () => { + setRefreshing(true); + fetchWorkspaces(); + }; + + // Handle row click for navigation + const handleRowClick = (workspace: Workspace) => { + history.push(`/setting/environments/${environment.environmentId}/workspaces/${workspace.id}`); + }; + + // Filter workspaces based on search and managed status + const filteredWorkspaces = searchText + ? workspaces.filter(workspace => + workspace.name.toLowerCase().includes(searchText.toLowerCase()) || + workspace.id.toLowerCase().includes(searchText.toLowerCase())) + : workspaces; + + const displayedWorkspaces = showManagedOnly + ? filteredWorkspaces.filter(workspace => workspace.managed) + : filteredWorkspaces; + + // Helper function to generate colors from strings + const stringToColor = (str: string) => { + let hash = 0; + for (let i = 0; i < str.length; i++) { + hash = str.charCodeAt(i) + ((hash << 5) - hash); + } + + const hue = Math.abs(hash % 360); + return `hsl(${hue}, 70%, 50%)`; + }; + + // Stat card component + const StatCard = ({ title, value, icon }: { title: string; value: number; icon: React.ReactNode }) => ( + <Card + style={{ + height: '100%', + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> + <div> + <div style={{ fontSize: '13px', color: '#8c8c8c', marginBottom: '8px' }}>{title}</div> + <div style={{ fontSize: '20px', fontWeight: 500 }}>{value}</div> + </div> + <div style={{ + fontSize: '24px', + opacity: 0.8, + color: '#52c41a', + padding: '8px', + backgroundColor: 'rgba(82, 196, 26, 0.1)', + borderRadius: '4px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + {icon} + </div> + </div> + </Card> + ); + + // Table columns + const columns = [ + { + title: trans("environments.workspaces_workspace"), + key: 'workspace', + render: (workspace: Workspace) => ( + <div style={{ display: 'flex', alignItems: 'center' }}> + <Avatar + style={{ + backgroundColor: stringToColor(workspace.name), + marginRight: 12 + }} + shape="square" + size="small" + > + {workspace.name.charAt(0).toUpperCase()} + </Avatar> + <div> + <div style={{ fontWeight: 500, fontSize: '14px' }}>{workspace.name}</div> + <div style={{ fontSize: 12, color: '#8c8c8c', marginTop: 2 }}> + {workspace.id} + </div> + </div> + </div> + ), + }, + { + title: trans("environments.workspaces_role"), + dataIndex: 'role', + key: 'role', + }, + { + title: trans("environments.workspaces_status"), + dataIndex: 'status', + key: 'status', + render: (status: string) => ( + <Tag color={status === 'ACTIVE' ? 'green' : 'red'} style={{ borderRadius: '4px' }}> + {status === 'ACTIVE' ? <CheckCircleFilled style={{ marginRight: 4 }} /> : null} + {status} + </Tag> + ), + }, + { + title: trans("environments.workspaces_managed"), + key: 'managed', + render: (_: any, workspace: Workspace) => ( + <Tag + color={workspace.managed ? 'processing' : 'default'} + style={{ borderRadius: '4px' }} + > + {workspace.managed + ? <CloudServerOutlined style={{ marginRight: 4 }} /> + : <DisconnectOutlined style={{ marginRight: 4 }} /> + } + {workspace.managed ? trans("environments.workspaces_managed") : trans("environments.workspaces_unmanaged")} + </Tag> + ), + }, + { + title: trans("environments.workspaces_actions"), + key: 'actions', + render: (_: any, workspace: Workspace) => ( + <Space onClick={(e) => e.stopPropagation()}> + <Tooltip title={trans("environments.workspaces_viewAuditLogs")}> + <Button + icon={<AuditOutlined />} + size="small" + onClick={(e) => { + e.stopPropagation(); + const auditUrl = `/setting/audit?environmentId=${environment.environmentId}&orgId=${workspace.id}&pageSize=100&pageNum=1`; + window.open(auditUrl, '_blank'); + }} + > + {trans("environments.workspaces_audit")} + </Button> + </Tooltip> + </Space> + ), + }, + ]; + + return ( + <div style={{ padding: '16px' }}> + {/* Header */} + <div style={{ + display: "flex", + justifyContent: "space-between", + alignItems: "center", + marginBottom: "20px" + }}> + <div> + <Title level={4} style={{ margin: 0, marginBottom: '4px' }}> + <TeamOutlined style={{ marginRight: 8 }} /> {trans("environments.workspaces_title")} + </Title> + <p style={{ marginBottom: 0, color: '#8c8c8c', fontSize: '14px' }}> + {trans("environments.workspaces_subtitle")} + </p> + </div> + <Button + icon={<SyncOutlined spin={refreshing} />} + onClick={handleRefresh} + loading={loading} + > + {trans("environments.workspaces_refresh")} + </Button> + </div> + + {/* Error display */} + {error && ( + <Alert + message={trans("environments.workspaces_errorLoadingWorkspaces")} + description={error} + type="error" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Configuration warnings */} + {(!environment.environmentApikey || !environment.environmentApiServiceUrl) && !error && ( + <Alert + message={trans("environments.workspaces_configurationIssue")} + description={trans("environments.workspaces_missingConfiguration")} + type="warning" + showIcon + style={{ marginBottom: "16px" }} + /> + )} + + {/* Stats display */} + <Row gutter={[16, 16]} style={{ marginBottom: '20px' }}> + <Col xs={24} sm={8}> + <StatCard + title={trans("environments.workspaces_totalWorkspaces")} + value={stats.total} + icon={<TeamOutlined />} + /> + </Col> + <Col xs={24} sm={8}> + <StatCard + title={trans("environments.workspaces_managedWorkspaces")} + value={stats.managed} + icon={<CloudServerOutlined />} + /> + </Col> + <Col xs={24} sm={8}> + <StatCard + title={trans("environments.workspaces_unmanagedWorkspaces")} + value={stats.unmanaged} + icon={<DisconnectOutlined />} + /> + </Col> + </Row> + + {/* Content */} + <Card + style={{ + borderRadius: '4px', + border: '1px solid #f0f0f0' + }} + > + {loading ? ( + <div style={{ display: 'flex', justifyContent: 'center', padding: '40px' }}> + <Spin size="large" /> + </div> + ) : workspaces.length === 0 ? ( + <Empty + description={error || trans("environments.workspaces_noWorkspacesFound")} + image={Empty.PRESENTED_IMAGE_SIMPLE} + /> + ) : ( + <> + {/* Search and Filter Bar */} + <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 16 }}> + <Search + placeholder={trans("environments.workspaces_searchWorkspaces")} + allowClear + onSearch={value => setSearchText(value)} + onChange={e => setSearchText(e.target.value)} + style={{ width: 300 }} + /> + <Button + onClick={() => setShowManagedOnly(!showManagedOnly)} + type={showManagedOnly ? "primary" : "default"} + icon={<FilterOutlined />} + style={{ marginLeft: '8px' }} + > + {showManagedOnly ? trans("environments.workspaces_showAll") : trans("environments.workspaces_managedOnly")} + </Button> + </div> + + {searchText && displayedWorkspaces.length !== workspaces.length && ( + <div style={{ marginBottom: 16, color: '#8c8c8c', fontSize: '13px' }}> + {trans("environments.workspaces_showingResults", { count: displayedWorkspaces.length, total: workspaces.length })} + </div> + )} + + <Table + columns={columns} + dataSource={displayedWorkspaces} + rowKey="id" + pagination={{ + pageSize: 10, + showTotal: (total, range) => trans("environments.workspaces_paginationTotal", { start: range[0], end: range[1], total }), + size: 'small' + }} + size="middle" + onRow={(record) => ({ + onClick: () => handleRowClick(record), + style: { cursor: 'pointer' } + })} + rowClassName={() => 'workspace-row'} + /> + </> + )} + </Card> + </div> + ); +}; + +export default WorkspacesTab; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/components/credentialConfirmations.tsx b/client/packages/lowcoder/src/pages/setting/environments/components/credentialConfirmations.tsx new file mode 100644 index 0000000000..3267d378a2 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/components/credentialConfirmations.tsx @@ -0,0 +1,115 @@ +import { Modal, Alert } from 'antd'; +import { ExclamationCircleOutlined, WarningOutlined } from '@ant-design/icons'; +import { trans } from "i18n"; + +interface ConfirmHandlers { + onOk: () => void; + onCancel: () => void; +} + +/** + * First-step confirmation modal (orange / warning). + */ +export function showFirstCredentialOverwriteConfirm({ onOk, onCancel }: ConfirmHandlers) { + Modal.confirm({ + title: ( + <div style={{ display: 'flex', alignItems: 'center', color: '#ff7a00' }}> + <WarningOutlined style={{ marginRight: 8, fontSize: 18 }} /> + <span style={{ fontSize: 16, fontWeight: 600 }}> + {trans("environments.credentialConfirmations_firstConfirmation_title")} + </span> + </div> + ), + icon: null, + content: ( + <div style={{ padding: '16px 0' }}> + <Alert + message={trans("environments.credentialConfirmations_firstConfirmation_message")} + description={ + <div style={{ marginTop: 8 }}> + <p style={{ margin: 0, fontWeight: 500 }}> + {trans("environments.credentialConfirmations_firstConfirmation_description")} + </p> + <p style={{ margin: '8px 0 0 0', color: '#8c8c8c' }}> + {trans("environments.credentialConfirmations_firstConfirmation_question")} + </p> + </div> + } + type="warning" + showIcon + style={{ marginBottom: 0, border: '1px solid #fff2e8', borderRadius: 8 }} + /> + </div> + ), + okText: trans("environments.credentialConfirmations_firstConfirmation_continueButton"), + cancelText: trans("environments.credentialConfirmations_firstConfirmation_cancelButton"), + okButtonProps: { + style: { backgroundColor: '#ff7a00', borderColor: '#ff7a00', fontWeight: 500 } + }, + cancelButtonProps: { + style: { fontWeight: 500 } + }, + width: 520, + centered: false, + onOk, + onCancel + }); +} + +/** + * Second-step (final) confirmation modal (red / danger). + */ +export function showSecondCredentialOverwriteConfirm({ onOk, onCancel }: ConfirmHandlers) { + Modal.confirm({ + title: ( + <div style={{ display: 'flex', alignItems: 'center', color: '#ff4d4f' }}> + <ExclamationCircleOutlined style={{ marginRight: 8, fontSize: 18 }} /> + <span style={{ fontSize: 16, fontWeight: 600 }}> + {trans("environments.credentialConfirmations_secondConfirmation_title")} + </span> + </div> + ), + icon: null, + content: ( + <div style={{ padding: '16px 0' }}> + <Alert + message={trans("environments.credentialConfirmations_secondConfirmation_message")} + description={ + <div style={{ marginTop: 8 }}> + <p style={{ margin: 0, fontWeight: 500 }}> + {trans("environments.credentialConfirmations_secondConfirmation_description")} + </p> + <p style={{ margin: '8px 0 0 0', color: '#8c8c8c' }}> + {trans("environments.credentialConfirmations_secondConfirmation_confirmOnceMore")} + </p> + </div> + } + type="error" + showIcon + style={{ marginBottom: 16, border: '1px solid #ffebee', borderRadius: 8 }} + /> + <div + style={{ + padding: '12px 16px', + backgroundColor: '#fff2f0', + borderRadius: 8, + border: '1px solid #ffccc7' + }} + > + <p style={{ margin: 0, fontWeight: 600, color: '#cf1322', fontSize: 14 }}> + {trans("environments.credentialConfirmations_secondConfirmation_finalQuestion")} + </p> + </div> + </div> + ), + okText: trans("environments.credentialConfirmations_secondConfirmation_confirmButton"), + okType: 'danger', + cancelText: trans("environments.credentialConfirmations_secondConfirmation_cancelButton"), + okButtonProps: { style: { fontWeight: 500 } }, + cancelButtonProps: { style: { fontWeight: 500 } }, + width: 520, + centered: false, + onOk, + onCancel + }); +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/config/apps.config.tsx b/client/packages/lowcoder/src/pages/setting/environments/config/apps.config.tsx new file mode 100644 index 0000000000..34c1e4c6b1 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/config/apps.config.tsx @@ -0,0 +1,63 @@ +// config/apps.config.tsx +import { DeployableItemConfig } from '../types/deployable-item.types'; +import { Environment } from '../types/environment.types'; +import { deployApp } from '../services/apps.service'; +import { trans } from "i18n"; +import { App } from '../types/app.types'; + +// Define AppStats interface if not already defined + + +export const appsConfig: DeployableItemConfig = { + + + deploy: { + singularLabel: trans("environments.config_singularLabels_app"), + fields: [ + { + name: 'updateDependenciesIfNeeded', + label: trans("environments.config_fields_updateDependenciesIfNeeded"), + type: 'checkbox', + defaultValue: false + }, + { + name: 'publishOnTarget', + label: trans("environments.config_fields_publishOnTarget"), + type: 'checkbox', + defaultValue: false + }, + { + name: 'publicToAll', + label: trans("environments.config_fields_publicToAll"), + type: 'checkbox', + defaultValue: false + }, + { + name: 'publicToMarketplace', + label: trans("environments.config_fields_publicToMarketplace"), + type: 'checkbox', + defaultValue: false + }, + { + name: 'deployCredential', + label: trans("environments.config_fields_overwriteCredentials"), + type: 'checkbox', + defaultValue: false + } + ], + prepareParams: (item: App, values: any, sourceEnv: Environment, targetEnv: Environment) => { + return { + envId: sourceEnv.environmentId, + targetEnvId: targetEnv.environmentId, + applicationId: item.applicationId, + updateDependenciesIfNeeded: values.updateDependenciesIfNeeded, + publishOnTarget: values.publishOnTarget, + publicToAll: values.publicToAll, + publicToMarketplace: values.publicToMarketplace, + applicationGid: item.applicationGid, + deployCredential: values.deployCredential ?? false + }; + }, + execute: (params: any) => deployApp(params) + } +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/config/data-sources.config.tsx b/client/packages/lowcoder/src/pages/setting/environments/config/data-sources.config.tsx new file mode 100644 index 0000000000..28e2dcef01 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/config/data-sources.config.tsx @@ -0,0 +1,31 @@ +// config/data-sources.config.tsx +import React from 'react'; +import { DeployableItemConfig } from '../types/deployable-item.types'; +import { DataSource} from '../types/datasource.types'; +import { Environment } from '../types/environment.types'; +import { deployDataSource, DataSourceStats } from '../services/datasources.service'; +import { trans } from "i18n"; + +export const dataSourcesConfig: DeployableItemConfig = { + deploy: { + singularLabel: trans("environments.config_singularLabels_dataSource"), + fields: [ + { + name: 'deployCredential', + label: trans("environments.config_fields_overwriteCredentials"), + type: 'checkbox', + defaultValue: false + } + ], + prepareParams: (item: DataSource, values: any, sourceEnv: Environment, targetEnv: Environment) => { + return { + envId: sourceEnv.environmentId, + targetEnvId: targetEnv.environmentId, + datasourceId: item.id, + datasourceGid: item.gid, + deployCredential: values.deployCredential ?? false + }; + }, + execute: (params: any) => deployDataSource(params) + } +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/config/query.config.tsx b/client/packages/lowcoder/src/pages/setting/environments/config/query.config.tsx new file mode 100644 index 0000000000..80f52fac82 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/config/query.config.tsx @@ -0,0 +1,31 @@ +// config/query.config.tsx +import { DeployableItemConfig } from '../types/deployable-item.types'; +import { Query } from '../types/query.types'; +import { deployQuery } from '../services/query.service'; +import { Environment } from '../types/environment.types'; +import { trans } from "i18n"; + +export const queryConfig: DeployableItemConfig = { + + deploy: { + singularLabel: trans("environments.config_singularLabels_query"), + fields: [ + { + name: 'deployCredential', + label: trans("environments.config_fields_overwriteCredentials"), + type: 'checkbox', + defaultValue: false + } + ], + prepareParams: (item: Query, values: any, sourceEnv: Environment, targetEnv: Environment) => { + return { + envId: sourceEnv.environmentId, + targetEnvId: targetEnv.environmentId, + queryId: item.id, + queryGid: item.gid, + deployCredential: values.deployCredential ?? false + }; + }, + execute: (params: any) => deployQuery(params) + } +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/config/workspace.config.tsx b/client/packages/lowcoder/src/pages/setting/environments/config/workspace.config.tsx new file mode 100644 index 0000000000..594ba38cb9 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/config/workspace.config.tsx @@ -0,0 +1,30 @@ +// config/workspace.config.tsx + +import { DeployableItemConfig } from '../types/deployable-item.types'; +import { Environment } from '../types/environment.types'; +import { deployWorkspace } from '../services/workspace.service'; +import { Workspace } from '../types/workspace.types'; +import { trans } from "i18n"; + +export const workspaceConfig: DeployableItemConfig = { + + // Deploy configuration + deploy: { + singularLabel: trans("environments.config_singularLabels_workspace"), + fields: [ + // Removed deployCredential field as workspaces don't need credential overwrite + ], + prepareParams: (item: Workspace, values: any, sourceEnv: Environment, targetEnv: Environment) => { + if (!item.gid) { + console.error('Missing workspace.gid when deploying workspace:', item); + } + + return { + envId: sourceEnv.environmentId, + targetEnvId: targetEnv.environmentId, + workspaceId: item.gid, + }; + }, + execute: (params: any) => deployWorkspace(params) + } +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/context/DeployModalContext.tsx b/client/packages/lowcoder/src/pages/setting/environments/context/DeployModalContext.tsx new file mode 100644 index 0000000000..904ab62c67 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/context/DeployModalContext.tsx @@ -0,0 +1,75 @@ +// context/DeployModalContext.tsx +import React, { createContext, useContext, useState } from 'react'; +import { DeployableItemConfig } from '../types/deployable-item.types'; +import { Environment } from '../types/environment.types'; +import DeployItemModal from '../components/DeployItemModal'; + +interface DeployModalContextType { + openDeployModal: ( + item: any, + config: DeployableItemConfig, + sourceEnvironment: Environment, + onSuccess?: () => void + ) => void; +} + +const DeployModalContext = createContext<DeployModalContextType | undefined>(undefined); + +export const DeployModalProvider: React.FC<{children: React.ReactNode}> = ({ children }) => { + const [modalState, setModalState] = useState<{ + visible: boolean; + item: any | null; + config: DeployableItemConfig | null; + sourceEnvironment: Environment | null; + onSuccess?: () => void; + }>({ + visible: false, + item: null, + config: null, + sourceEnvironment: null + }); + + const openDeployModal = ( + item: any, + config: DeployableItemConfig, + sourceEnvironment: Environment, + onSuccess?: () => void + ) => { + setModalState({ + visible: true, + item, + config, + sourceEnvironment, + onSuccess + }); + }; + + const closeDeployModal = () => { + setModalState(prev => ({ ...prev, visible: false })); + }; + + return ( + <DeployModalContext.Provider value={{ openDeployModal }}> + {children} + + {modalState.config && modalState.sourceEnvironment && ( + <DeployItemModal + visible={modalState.visible} + item={modalState.item} + sourceEnvironment={modalState.sourceEnvironment} + config={modalState.config} + onClose={closeDeployModal} + onSuccess={modalState.onSuccess} + /> + )} + </DeployModalContext.Provider> + ); +}; + +export const useDeployModal = () => { + const context = useContext(DeployModalContext); + if (context === undefined) { + throw new Error('useDeployModal must be used within a DeployModalProvider'); + } + return context; +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/context/EnvironmentContext.tsx b/client/packages/lowcoder/src/pages/setting/environments/context/EnvironmentContext.tsx new file mode 100644 index 0000000000..7594aa4044 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/context/EnvironmentContext.tsx @@ -0,0 +1,91 @@ +// client/packages/lowcoder/src/pages/setting/environments/context/EnvironmentContext.tsx +import React, { + createContext, + useContext, + useEffect, + useState, + useCallback, + ReactNode, +} from "react"; +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { getEnvironmentsWithLicenseStatus } from "../services/environments.service"; +import { Environment } from "../types/environment.types"; + +interface EnvironmentContextState { + // Environments list data + environments: Environment[]; + + // Loading state + isLoading: boolean; + + // Error state + error: string | null; + + // Functions + refreshEnvironments: () => Promise<void>; +} + +const EnvironmentContext = createContext<EnvironmentContextState | undefined>(undefined); + +export const useEnvironmentContext = () => { + const context = useContext(EnvironmentContext); + if (!context) { + throw new Error( + "useEnvironmentContext must be used within an EnvironmentProvider" + ); + } + return context; +}; + +interface ProviderProps { + children: ReactNode; +} + +export const EnvironmentProvider: React.FC<ProviderProps> = ({ + children, +}) => { + // State for environments list + const [environments, setEnvironments] = useState<Environment[]>([]); + + // Loading state + const [isLoading, setIsLoading] = useState<boolean>(true); + + // Error state + const [error, setError] = useState<string | null>(null); + + // Function to fetch all environments + const fetchEnvironments = useCallback(async () => { + setIsLoading(true); + setError(null); + + try { + const data = await getEnvironmentsWithLicenseStatus(); + setEnvironments(data); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Failed to fetch environments'; + messageInstance.error(errorMessage); + console.error('Error fetching environments:', error); + } finally { + setIsLoading(false); + } + }, []); + + // Initial data loading + useEffect(() => { + fetchEnvironments(); + }, [fetchEnvironments]); + + // Create the context value + const value: EnvironmentContextState = { + environments, + isLoading, + error, + refreshEnvironments: fetchEnvironments, + }; + + return ( + <EnvironmentContext.Provider value={value}> + {children} + </EnvironmentContext.Provider> + ); +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/context/SingleEnvironmentContext.tsx b/client/packages/lowcoder/src/pages/setting/environments/context/SingleEnvironmentContext.tsx new file mode 100644 index 0000000000..4654c121c0 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/context/SingleEnvironmentContext.tsx @@ -0,0 +1,137 @@ +// client/packages/lowcoder/src/pages/setting/environments/context/SingleEnvironmentContext.tsx +import React, { + createContext, + useContext, + useEffect, + useState, + useCallback, + ReactNode, + } from "react"; + import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; + import { useParams } from "react-router-dom"; + import { useDispatch } from "react-redux"; + import { fetchEnvironments } from "redux/reduxActions/enterpriseActions"; + import { getEnvironmentById, updateEnvironment } from "../services/environments.service"; + import { Environment } from "../types/environment.types"; + + interface SingleEnvironmentContextState { + // Environment data + environment: Environment | null; + + // Loading states + isLoading: boolean; + + // Error state + error: string | null; + + // Functions + refreshEnvironment: () => Promise<void>; + updateEnvironmentData: (data: Partial<Environment>) => Promise<Environment>; + } + + const SingleEnvironmentContext = createContext<SingleEnvironmentContextState | undefined>(undefined); + + export const useSingleEnvironmentContext = () => { + const context = useContext(SingleEnvironmentContext); + if (!context) { + throw new Error( + "useSingleEnvironmentContext must be used within a SingleEnvironmentProvider" + ); + } + return context; + }; + + interface ProviderProps { + children: ReactNode; + environmentId?: string; // Optional prop-based ID + } + + export const SingleEnvironmentProvider: React.FC<ProviderProps> = ({ + children, + environmentId: propEnvironmentId, + }) => { + // Get environmentId from URL params if not provided as prop + const { envId } = useParams<{ envId: string }>(); + const environmentId = propEnvironmentId || envId; + + // Use Redux dispatch to refresh environments instead of context + const dispatch = useDispatch(); + + // State for environment data + const [environment, setEnvironment] = useState<Environment | null>(null); + + // Loading states + const [isLoading, setIsLoading] = useState<boolean>(true); + + // Error state + const [error, setError] = useState<string | null>(null); + + // Function to fetch environment by ID + const fetchEnvironment = useCallback(async () => { + // Only fetch if we have an environment ID + if (!environmentId) { + setEnvironment(null); + setIsLoading(false); + return; + } + + setIsLoading(true); + setError(null); + + try { + const data = await getEnvironmentById(environmentId); + setEnvironment(data); + } catch (err) { + const errorMessage = err instanceof Error ? err.message : "Environment not found or failed to load"; + setError(errorMessage); + } finally { + setIsLoading(false); + } + }, [environmentId]); + + // Function to update the environment + const updateEnvironmentData = useCallback(async ( + data: Partial<Environment> + ): Promise<Environment> => { + if (!environmentId || !environment) { + throw new Error("No environment selected"); + } + + try { + const updatedEnv = await updateEnvironment(environmentId, data); + + // Show success message + messageInstance.success("Environment updated successfully"); + + // Refresh both the single environment and environments list + await fetchEnvironment(); // Refresh the current environment + dispatch(fetchEnvironments()); // Refresh the environments list using Redux + + return updatedEnv; + } catch (err) { + const errorMessage = err instanceof Error ? err.message : "Failed to update environment"; + messageInstance.error(errorMessage); + throw err; + } + }, [environment, environmentId, fetchEnvironment, dispatch]); + + // Load environment data when the component mounts or environmentId changes + useEffect(() => { + fetchEnvironment(); + }, [fetchEnvironment]); + + // Create the context value + const value: SingleEnvironmentContextState = { + environment, + isLoading, + error, + refreshEnvironment: fetchEnvironment, + updateEnvironmentData, + }; + + return ( + <SingleEnvironmentContext.Provider value={value}> + {children} + </SingleEnvironmentContext.Provider> + ); + }; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/context/WorkspaceContext.tsx b/client/packages/lowcoder/src/pages/setting/environments/context/WorkspaceContext.tsx new file mode 100644 index 0000000000..988c11e5a9 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/context/WorkspaceContext.tsx @@ -0,0 +1,163 @@ +// client/packages/lowcoder/src/pages/setting/environments/context/WorkspaceContext.tsx +import React, { + createContext, + useContext, + useEffect, + useState, + useCallback, + ReactNode, + } from "react"; + import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; + import { useParams } from "react-router-dom"; + import { useSingleEnvironmentContext } from "./SingleEnvironmentContext"; + import { fetchWorkspaceById } from "../services/environments.service"; + import { Workspace } from "../types/workspace.types"; + import { getManagedObjects, ManagedObjectType, setManagedObject, unsetManagedObject } from "../services/managed-objects.service"; + + interface WorkspaceContextState { + // Workspace data + workspace: Workspace | null; + + // Loading states + isLoading: boolean; + + // Error state + error: string | null; + + // Functions + refreshWorkspace: () => Promise<void>; + toggleManagedStatus: (checked: boolean) => Promise<boolean>; + } + + const WorkspaceContext = createContext<WorkspaceContextState | undefined>(undefined); + + export const useWorkspaceContext = () => { + const context = useContext(WorkspaceContext); + if (!context) { + throw new Error("useWorkspaceContext must be used within a WorkspaceProvider"); + } + return context; + }; + + interface ProviderProps { + children: ReactNode; + workspaceId?: string; + } + + export const WorkspaceProvider: React.FC<ProviderProps> = ({ + children, + workspaceId: propWorkspaceId, + }) => { + // Get workspaceId from URL params if not provided as prop + const { workspaceId: urlWorkspaceId } = useParams<{ workspaceId: string }>(); + const workspaceId = propWorkspaceId || urlWorkspaceId; + + // Get the environment context to access environment data + const { environment } = useSingleEnvironmentContext(); + + // State for workspace data + const [workspace, setWorkspace] = useState<Workspace | null>(null); + const [isLoading, setIsLoading] = useState<boolean>(true); + const [error, setError] = useState<string | null>(null); + + // Function to fetch workspace by ID + const fetchWorkspace = useCallback(async () => { + // Only fetch if we have a workspace ID and environment + if (!workspaceId || !environment) { + setWorkspace(null); + setIsLoading(false); + return; + } + + setIsLoading(true); + setError(null); + + try { + // Fetch the workspace data + const workspaceData = await fetchWorkspaceById( + environment.environmentId, + workspaceId, + environment.environmentApikey, + environment.environmentApiServiceUrl! + ); + + if (!workspaceData) { + throw new Error("Workspace not found"); + } + + // Fetch managed workspaces to check if this one is managed + const managedWorkspaces = await getManagedObjects(environment.environmentId, ManagedObjectType.ORG); + + // Set the managed status + const isManaged = managedWorkspaces.some(org => org.objGid === workspaceData.gid); + + // Update the workspace with managed status + setWorkspace({ + ...workspaceData, + managed: isManaged + }); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Failed to fetch workspace'; + messageInstance.error(errorMessage); + setError(errorMessage); + } finally { + setIsLoading(false); + } + }, [workspaceId, environment]); + + // Function to toggle managed status + const toggleManagedStatus = useCallback(async (checked: boolean): Promise<boolean> => { + if (!workspace || !environment) { + return false; + } + + try { + if (checked) { + // Connect the workspace as managed + await setManagedObject( + workspace.gid!, + environment.environmentId, + ManagedObjectType.ORG, + + + ); + } else { + // Disconnect the managed workspace + await unsetManagedObject( + workspace.gid!, + environment.environmentId, + ManagedObjectType.ORG + ); + } + + // Update local state + setWorkspace(prev => prev ? { ...prev, managed: checked } : null); + + return true; + } catch (err) { + const errorMessage = err instanceof Error ? err.message : "Failed to update managed status"; + messageInstance.error(errorMessage); + return false; + } + }, [workspace, environment]); + + // Load workspace data when the component mounts or dependencies change + useEffect(() => { + fetchWorkspace(); + }, [fetchWorkspace]); + + // Create the context value + const value: WorkspaceContextState = { + workspace, + isLoading, + error, + refreshWorkspace: fetchWorkspace, + toggleManagedStatus + }; + + return ( + <WorkspaceContext.Provider value={value}> + {children} + </WorkspaceContext.Provider> + ); + }; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/index.tsx b/client/packages/lowcoder/src/pages/setting/environments/index.tsx new file mode 100644 index 0000000000..1b77787084 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/index.tsx @@ -0,0 +1,189 @@ +import { useSelector, useDispatch } from "react-redux"; +import { selectIsLicenseActive } from "redux/selectors/enterpriseSelectors"; +import EnvironmentsSettings from "@lowcoder-ee/pages/setting/environments/Environments"; +import { Level1SettingPageContent, Level1SettingPageTitle } from "../styled"; +import styled from "styled-components"; +import { Card, Typography, Row, Col, Divider, Button } from "antd"; +import { trans } from "i18n"; +import { useEffect, useState } from "react"; +import { getUser } from "@lowcoder-ee/redux/selectors/usersSelectors"; +import { HubspotModal } from "../hubspotModal"; +import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; +import { Image } from 'antd'; +import { getOrgApiUsage, getOrgLastMonthApiUsage } from "redux/selectors/orgSelectors"; +import { fetchAPIUsageAction, fetchLastMonthAPIUsageAction } from "redux/reduxActions/orgActions"; +import { HelpText } from "components/HelpText"; + +const { Paragraph, Text } = Typography; + +const StyledSection = styled.div` + margin-bottom: 32px; + + .ant-card { + border-radius: 8px; + } + + .image-placeholder { + background: #f0f2f5; + border: 1px dashed #d9d9d9; + height: 180px; + display: flex; + align-items: center; + justify-content: center; + color: #999; + font-size: 14px; + } +`; + +export const Environments = () => { + const isLicenseActive = useSelector(selectIsLicenseActive); + return isLicenseActive ? <EnvironmentsSettings /> : <EnvironmentsPromo />; +}; + +const EnvironmentsPromo = () => { + const [modalOpen, setModalOpen] = useState(false); + const user = useSelector(getUser); + const deploymentId = useSelector(getDeploymentId); + + const dispatch = useDispatch(); + + const apiUsage = useSelector(getOrgApiUsage); + useEffect(() => { + dispatch(fetchAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + const lastMonthApiUsage = useSelector(getOrgLastMonthApiUsage); + useEffect(() => { + dispatch(fetchLastMonthAPIUsageAction(user.currentOrgId)); + }, [user.currentOrgId]) + + return ( + <Level1SettingPageContent> + <Level1SettingPageTitle>{trans("enterprise.EnvironmentsTitle")}</Level1SettingPageTitle> + + <StyledSection> + <Card title={trans("enterprise.EnvironmentsIntroTitle")}> + <Paragraph>{trans("enterprise.EnvironmentsIntro1")}</Paragraph> + <Paragraph>{trans("enterprise.EnvironmentsIntro2")} {trans("enterprise.EnvironmentsIntro3")}</Paragraph> + <Paragraph>{trans("enterprise.EnvironmentsIntro4")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.EnvironmentsUseCasesTitle")}> + <Paragraph>{trans("enterprise.EnvironmentsUseCase1")} {trans("enterprise.EnvironmentsUseCase2")} {trans("enterprise.EnvironmentsUseCase3")}</Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.EnvironmentsFeaturesTitle")}> + <ul> + <li>{trans("enterprise.EnvironmentsFeature1")}</li> + <li>{trans("enterprise.EnvironmentsFeature2")}</li> + <li>{trans("enterprise.EnvironmentsFeature3")}</li> + <li>{trans("enterprise.EnvironmentsFeature5")}</li> + </ul> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.EnvironmentsFeaturePreviewTitle")}> + <Row gutter={[24, 24]}> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%C2%A0Environments%20Overview.png" + alt="Enterprise Edition | Staging Environments in Lowcoder" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Staging Environments in Lowcoder</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%C2%A0Environments%20Workspaces.png" + alt="Enterprise Edition | Environments Workspaces" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Environments Workspaces</Text>, + }} + /> + </Col> + <Col span={8}> + <Image + width="100%" + height={180} + src="https://raw.githubusercontent.com/lowcoder-org/lowcoder-media-assets/refs/heads/main/images/Enterprise%20Edition%20%7C%C2%A0Environments%20Deploy%20App.png" + alt="Enterprise Edition | Environments Deploy App" + style={{ borderRadius: 8, objectFit: 'cover', border: "1px solid #d9d9d9" }} + preview={{ + mask: <Text>Enterprise Edition | Environments Deploy App</Text>, + }} + /> + </Col> + </Row> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.yourDeploymentID")}> + <Paragraph><h3>{deploymentId}</h3></Paragraph> + </Card> + </StyledSection> + + <StyledSection> + <Card title={trans("enterprise.PricingTitle")}> + <Paragraph>{trans("enterprise.PricingIntro")}</Paragraph> + + <Paragraph> + <Text strong>{trans("enterprise.FlatRateTitle")}</Text> + <br /> + {trans("enterprise.FlatRateDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.FlatRatePoint1")}</li> + <li>{trans("enterprise.FlatRatePoint2")}</li> + </ul> + + <Divider /> + + <Paragraph> + <Text strong>{trans("enterprise.UsagePricingTitle")}</Text> + <br /> + {trans("enterprise.UsagePricingDesc")} + </Paragraph> + <ul> + <li>{trans("enterprise.API100k")}</li> + <li>{trans("enterprise.API1M")}</li> + <li>{trans("enterprise.API10M")}</li> + </ul> + + <Paragraph>{trans("enterprise.UsageOverrunDesc")}</Paragraph> + <Paragraph>{trans("enterprise.UsageTopUpInfo")}</Paragraph> + + + <Divider/> + + <Text strong className="section-title">{trans("advanced.APIConsumption")}</Text> + <HelpText style={{ marginBottom: 12 }}>{trans("advanced.APIConsumptionDescription")}</HelpText> + <div className="section-content"> + {trans("advanced.overallAPIConsumption")} : {apiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(apiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")}<br/> + {trans("advanced.lastMonthAPIConsumption")} : {lastMonthApiUsage ? Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(lastMonthApiUsage) + " " + trans("enterprise.apiUsage") : trans("enterprise.loadingApiUsage")} + </div> + + </Card> + </StyledSection> + + <HubspotModal + open={modalOpen} + onClose={() => setModalOpen(false)} + orgId={user?.currentOrgId} + deploymentIds={[]} // Add if available + /> + </Level1SettingPageContent> + ); +}; diff --git a/client/packages/lowcoder/src/pages/setting/environments/routes/EnvironmentRoutes.tsx b/client/packages/lowcoder/src/pages/setting/environments/routes/EnvironmentRoutes.tsx new file mode 100644 index 0000000000..69e2addab1 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/routes/EnvironmentRoutes.tsx @@ -0,0 +1,35 @@ +// client/packages/lowcoder/src/pages/setting/environments/routes/EnvironmentRoutes.tsx +import React from "react"; +import { Switch, Route, useRouteMatch } from "react-router-dom"; +import { SingleEnvironmentProvider } from "../context/SingleEnvironmentContext"; +import { DeployModalProvider } from "../context/DeployModalContext"; +import EnvironmentDetail from "../EnvironmentDetail"; +import WorkspaceRoutes from "./WorkspaceRoutes"; + +/** + * Routes that require a specific environment + * Provides the SingleEnvironmentProvider for all child routes + */ +const EnvironmentRoutes: React.FC = () => { + const { path } = useRouteMatch(); + + return ( + <SingleEnvironmentProvider> + <DeployModalProvider> + <Switch> + {/* Environment detail route */} + <Route exact path={path}> + <EnvironmentDetail /> + </Route> + + {/* All routes that need a specific workspace */} + <Route path={`${path}/workspaces/:workspaceId`}> + <WorkspaceRoutes /> + </Route> + </Switch> + </DeployModalProvider> + </SingleEnvironmentProvider> + ); +}; + +export default EnvironmentRoutes; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/routes/WorkspaceRoutes.tsx b/client/packages/lowcoder/src/pages/setting/environments/routes/WorkspaceRoutes.tsx new file mode 100644 index 0000000000..bc5f7a7b51 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/routes/WorkspaceRoutes.tsx @@ -0,0 +1,28 @@ +// client/packages/lowcoder/src/pages/setting/environments/routes/WorkspaceRoutes.tsx +import React from "react"; +import { Switch, Route, useRouteMatch } from "react-router-dom"; +import { WorkspaceProvider } from "../context/WorkspaceContext"; +import WorkspaceDetail from "../WorkspaceDetail"; + +/** + * Routes that require a specific workspace + * Provides the WorkspaceProvider for all child routes + */ +const WorkspaceRoutes: React.FC = () => { + const { path } = useRouteMatch(); + + return ( + <WorkspaceProvider> + <Switch> + {/* Workspace detail route */} + <Route exact path={path}> + <WorkspaceDetail /> + </Route> + + {/* You can add more workspace-specific routes here */} + </Switch> + </WorkspaceProvider> + ); +}; + +export default WorkspaceRoutes; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/apps.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/apps.service.ts new file mode 100644 index 0000000000..d31408399b --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/apps.service.ts @@ -0,0 +1,145 @@ +// services/appService.ts +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { trans } from "i18n"; +import { getWorkspaceApps } from "./environments.service"; +import { getManagedApps } from "./enterprise.service"; +import { App, AppStats } from "../types/app.types"; +import axios from "axios"; +import { getManagedObjects, ManagedObject } from "./managed-objects.service"; +import { ManagedObjectType, transferManagedObject } from "./managed-objects.service"; + + +export interface MergedAppsResult { + apps: App[]; + stats: AppStats; +} + + +export interface DeployAppParams { + envId: string; + targetEnvId: string; + applicationId: string; + applicationGid: string; + updateDependenciesIfNeeded?: boolean; + publishOnTarget?: boolean; + publicToAll?: boolean; + publicToMarketplace?: boolean; + deployCredential: boolean; +} + + +// Use your existing merge function with slight modification +export const getMergedApps = (standardApps: App[], managedObjects: ManagedObject[]): App[] => { + return standardApps.map((app) => ({ + ...app, + managed: managedObjects.some((managedObj) => + managedObj.objGid === app.applicationGid && + managedObj.objType === "APP" + ), + })); +}; + +// Calculate app statistics +export const calculateAppStats = (apps: App[]): AppStats => { + const publishedCount = apps.filter(app => app.published).length; + const managedCount = apps.filter(app => app.managed).length; + + return { + total: apps.length, + published: publishedCount, + managed: managedCount, + unmanaged: apps.length - managedCount + }; +}; + +export async function getMergedWorkspaceApps( + workspaceId: string, + environmentId: string, + apiKey: string, + apiServiceUrl: string +): Promise<MergedAppsResult> { + try { + // First, get regular apps for the workspace + const regularApps = await getWorkspaceApps( + workspaceId, + apiKey, + apiServiceUrl + ); + + // If no apps, return early with empty result + if (!regularApps.length) { + return { + apps: [], + stats: { + total: 0, + published: 0, + managed: 0, + unmanaged: 0 + } + }; + } + + // Fetch managed objects instead of managed apps + let managedObjects: ManagedObject[] = []; + try { + managedObjects = await getManagedObjects(environmentId, ManagedObjectType.APP); + } catch (error) { + console.error("Failed to fetch managed objects:", error); + // Continue with empty managed list + } + + // Use the updated merge function + const mergedApps = getMergedApps(regularApps, managedObjects); + + // Calculate stats + const stats = calculateAppStats(mergedApps); + + return { + apps: mergedApps, + stats + }; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : trans("environments.services_apps_failedToFetchApps"); + messageInstance.error(errorMessage); + throw error; + } +} + + + +export const deployApp = async (params: DeployAppParams): Promise<boolean> => { + try { + const response = await axios.post( + `/api/plugins/enterprise/app/deploy`, + null, + { + params: { + applicationId: params.applicationId, + envId: params.envId, + targetEnvId: params.targetEnvId, + updateDependenciesIfNeeded: params.updateDependenciesIfNeeded ?? false, + publishOnTarget: params.publishOnTarget ?? false, + publicToAll: params.publicToAll ?? false, + publicToMarketplace: params.publicToMarketplace ?? false, + deployCredential: params.deployCredential + } + } + ); + + if (response.status === 200) { + await transferManagedObject( + params.applicationGid, + params.envId, + params.targetEnvId, + ManagedObjectType.APP + ); + } + + return response.status === 200; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_apps_failedToDeployApp"); + // Don't show message directly, let the calling component handle it + throw new Error(errorMessage); + } +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/datasources.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/datasources.service.ts new file mode 100644 index 0000000000..d59a958577 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/datasources.service.ts @@ -0,0 +1,178 @@ +// services/dataSources.service.ts +import axios from 'axios'; +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { trans } from "i18n"; +import { DataSource, DataSourceWithMeta } from "../types/datasource.types"; +import { getManagedObjects, ManagedObject, ManagedObjectType , transferManagedObject } from "./managed-objects.service"; + +export interface DataSourceStats { + total: number; + types: number; + managed: number; + unmanaged: number; +} + +export interface MergedDataSourcesResult { + dataSources: DataSource[]; + stats: DataSourceStats; +} + +export interface DeployDataSourceParams { + envId: string; + targetEnvId: string; + datasourceId: string; + datasourceGid: string; + deployCredential: boolean; +} +// Get data sources for a workspace - using your correct implementation +export async function getWorkspaceDataSources( + workspaceId: string, + apiKey: string, + apiServiceUrl: string +): Promise<DataSourceWithMeta[]> { + try { + // Check if required parameters are provided + if (!workspaceId) { + throw new Error(trans("environments.services_datasources_workspaceIdRequired")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_datasources_apiKeyRequiredToFetchDataSources")); + } + + if (!apiServiceUrl) { + throw new Error(trans("environments.services_datasources_apiServiceUrlRequiredToFetchDataSources")); + } + + // Set up headers with the Bearer token format + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // Make the API request to get data sources + const response = await axios.get<{data:DataSourceWithMeta[]}>(`${apiServiceUrl}/api/datasources/listByOrg`, { + headers, + params: { + orgId: workspaceId + } + }); + + // Check if response is valid + if (!response.data) { + return []; + } + + return response.data.data; + } catch (error) { + // Handle and transform error + const errorMessage = error instanceof Error ? error.message : trans("environments.services_datasources_failedToFetchDataSources"); + messageInstance.error(errorMessage); + throw error; + } +} + +// Function to merge regular and managed data sources +export const getMergedDataSources = (standardDataSources: DataSourceWithMeta[], managedObjects: ManagedObject[]): DataSource[] => { + return standardDataSources.map((dataSourceWithMeta) => { + const dataSource = dataSourceWithMeta.datasource; + return { + ...dataSource, + managed: managedObjects.some((obj) => obj.objGid === dataSource.gid && obj.objType === ManagedObjectType.DATASOURCE), + }; + }); +}; + +// Calculate data source statistics +export const calculateDataSourceStats = (dataSources: DataSource[]): DataSourceStats => { + const uniqueTypes = new Set(dataSources.map(ds => ds.type)).size; + const managedCount = dataSources.filter(ds => ds.managed).length; + + return { + total: dataSources.length, + types: uniqueTypes, + managed: managedCount, + unmanaged: dataSources.length - managedCount + }; +}; + +// Get and merge data sources from a workspace +export async function getMergedWorkspaceDataSources( + workspaceId: string, + environmentId: string, + apiKey: string, + apiServiceUrl: string +): Promise<MergedDataSourcesResult> { + try { + // First, get regular data sources for the workspace + const regularDataSourcesWithMeta = await getWorkspaceDataSources( + workspaceId, + apiKey, + apiServiceUrl + ); + + // If no data sources, return early with empty result + if (!regularDataSourcesWithMeta.length) { + return { + dataSources: [], + stats: { + total: 0, + types: 0, + managed: 0, + unmanaged: 0 + } + }; + } + + // Only fetch managed data sources if we have regular data sources + let managedObjects: ManagedObject[] = []; + try { + managedObjects = await getManagedObjects(environmentId, ManagedObjectType.DATASOURCE); + } catch (error) { + console.error("Failed to fetch managed data sources:", error); + // Continue with empty managed list + } + + // Use the merge function + const mergedDataSources = getMergedDataSources(regularDataSourcesWithMeta, managedObjects); + + // Calculate stats + const stats = calculateDataSourceStats(mergedDataSources); + + return { + dataSources: mergedDataSources, + stats + }; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : trans("environments.services_datasources_failedToFetchDataSources"); + messageInstance.error(errorMessage); + throw error; + } +} + +// Function to deploy a data source to another environment +export async function deployDataSource(params: DeployDataSourceParams): Promise<boolean> { + try { + const response = await axios.post('/api/plugins/enterprise/datasource/deploy', null, { + params: { + envId: params.envId, + targetEnvId: params.targetEnvId, + datasourceId: params.datasourceId, + deployCredential: params.deployCredential + } + }); + if (response.status === 200) { + await transferManagedObject( + params.datasourceGid, + params.envId, + params.targetEnvId, + ManagedObjectType.DATASOURCE + ); + } + return response.status === 200; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_datasources_failedToDeployDataSource"); + messageInstance.error(errorMessage); + throw error; + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/enterprise.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/enterprise.service.ts new file mode 100644 index 0000000000..1fb9e7d40c --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/enterprise.service.ts @@ -0,0 +1,283 @@ +import axios from "axios"; +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { trans } from "i18n"; +import { ManagedOrg } from "../types/enterprise.types"; +import { Query } from "../types/query.types"; + + +/** + * Fetch workspaces for a specific environment + * @param apiServiceUrl - API service URL for the environment + * @param environmentId - ID of the environment + * + * + */ + +export async function getManagedWorkspaces( + environmentId: string, + +): Promise<ManagedOrg[]> { + if (!environmentId) { + throw new Error(trans("environments.services_enterprise_missingEnvironmentId")); + } + + try { + const res = await axios.get(`/api/plugins/enterprise/org/list`); + const all: ManagedOrg[] = res.data.data; + return all.filter(org => org.environmentId === environmentId); + } catch (err) { + const errorMsg = err instanceof Error ? err.message : trans("environments.services_enterprise_failedToFetchManagedWorkspaces"); + messageInstance.error(errorMsg); + throw err; + } +} + + +/** + * Fetch workspaces for a specific environment + * @param apiServiceUrl - API service URL for the environment + * @param environmentId - ID of the environment + * @param orgName - Name of the workspace + * @param orgTags - Tags of the workspace + * + */ + +export async function connectManagedWorkspace( + environmentId: string, + orgName: string, + org_gid: string, // ✅ not optional + orgTags: string[] = [], +) { + if (!environmentId || !orgName || !org_gid) { + throw new Error(trans("environments.services_enterprise_missingRequiredParamsToConnectOrg")); + } + + try { + const payload = { + environment_id: environmentId, + org_name: orgName, + org_tags: orgTags, + org_gid, + }; + + const res = await axios.post(`/api/plugins/enterprise/org`, payload); + return res.data; + } catch (err) { + const errorMsg = err instanceof Error ? err.message : trans("environments.services_enterprise_failedToConnectOrg"); + messageInstance.error(errorMsg); + throw err; + } +} + + + +/** + * Fetch workspaces for a specific environment + * @param apiServiceUrl - API service URL for the environment + * @param orgId - ID of the workspace + * + */ +export async function unconnectManagedWorkspace(orgGid: string) { + if (!orgGid) { + throw new Error(trans("environments.services_enterprise_missingOrgGidToUnconnectWorkspace")); + } + + try { + await axios.delete(`/api/plugins/enterprise/org`, { + params: { orgGid }, // ✅ pass as query param + }); + } catch (err) { + const errorMsg = + err instanceof Error ? err.message : trans("environments.services_enterprise_failedToUnconnectOrg"); + messageInstance.error(errorMsg); + throw err; + } +} + + + + +// FOR APPS + +export async function getManagedApps(environmentId: string) { + const res = await axios.get(`/api/plugins/enterprise/app/list`); + const allApps = res.data.data; + return allApps.filter((app: any) => app.environmentId === environmentId); +} + +// Connect an app +export async function connectManagedApp( + environmentId: string, + app_name: string, + app_gid: string, + app_tags: string[] = [] +) { + try { + const payload = { + environment_id: environmentId, + app_name, + app_gid, + app_tags, + }; + + const res = await axios.post(`/api/plugins/enterprise/app`, payload); + return res.data; + } catch (err) { + const errorMsg = + err instanceof Error ? err.message : trans("environments.services_enterprise_failedToConnectApp"); + messageInstance.error(errorMsg); + throw err; + } +} + +// Unconnect an app +export async function unconnectManagedApp(appGid: string) { + try { + await axios.delete(`/api/plugins/enterprise/app`, { + params: { appGid }, + }); + } catch (err) { + const errorMsg = err instanceof Error ? err.message : trans("environments.services_enterprise_failedToUnconnectApp"); + messageInstance.error(errorMsg); + throw err; + } +} + +// data sources + +export const getManagedDataSources = async (environmentId: string): Promise<any[]> => { + try { + const response = await axios.get( + `/api/plugins/enterprise/datasource/list?environmentId=${environmentId}` + ); + return response.data.data || []; + } catch (error) { + const errorMsg = error instanceof Error ? error.message : trans("environments.services_enterprise_failedToFetchDataSources"); + messageInstance.error(errorMsg); + throw error; + } +}; + +// Connect a data source to be managed +export const connectManagedDataSource = async ( + environmentId: string, + name: string, + datasourceGid: string +): Promise<void> => { + try { + const payload = { + environment_id: environmentId, + name, + datasource_gid: datasourceGid, + }; + + + await axios.post(`/api/plugins/enterprise/datasource`, payload); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : trans("environments.services_enterprise_failedToDeployDataSource"); + messageInstance.error(errorMsg); + throw error; + } +}; + +// Disconnect a managed data source +export const unconnectManagedDataSource = async ( + datasourceGid: string +): Promise<void> => { + try { + await axios.delete(`/api/plugins/enterprise/datasource?datasourceGid=${datasourceGid}`); + } catch (error) { + const errorMsg = error instanceof Error ? error.message : trans("environments.services_enterprise_failedToDisconnectManagedDataSource"); + messageInstance.error(errorMsg); + throw error; + } +}; + + + + +export async function getManagedQueries(environmentId: string): Promise<Query[]> { + try { + if (!environmentId) { + throw new Error(trans("environments.services_enterprise_environmentIdRequired")); + } + + // Get managed queries from the enterprise endpoint + const response = await axios.get(`/api/plugins/enterprise/qlQuery/list`, { + params: { + environmentId + } + }); + + if (!response.data.data || !Array.isArray(response.data.data)) { + return []; + } + + // Map the response to match our Query interface + // Note: You may need to adjust this mapping based on the actual response structure + return response.data.data.map((item: any) => ({ + id: item.id || item.qlQueryId, + gid: item.qlQueryGid, + name: item.qlQueryName, + organizationId: item.orgId, + libraryQueryDSL: item.libraryQueryDSL || {}, + createTime: item.createTime, + creatorName: item.creatorName || '', + managed: true // These are managed queries + })); + + } catch (error) { + const errorMsg = error instanceof Error ? error.message : trans("environments.services_enterprise_failedToFetchQueries"); + messageInstance.error(errorMsg); + throw error; + } +} + + +export async function connectManagedQuery( + environmentId: string, + queryName: string, + queryGid: string +): Promise<boolean> { + try { + if (!environmentId || !queryGid) { + throw new Error(trans("environments.services_enterprise_environmentIdAndQueryGidRequired")); + } + + const response = await axios.post('/api/plugins/enterprise/qlQuery', { + environment_id: environmentId, + ql_query_name: queryName, + ql_query_tags: [], + ql_query_gid: queryGid + }); + + return response.status === 200; + + } catch (error) { + const errorMsg = error instanceof Error ? error.message : trans("environments.services_enterprise_failedToDeployQuery"); + messageInstance.error(errorMsg); + throw error; + } +} + + +export async function unconnectManagedQuery(queryGid: string): Promise<boolean> { + try { + if (!queryGid) { + throw new Error(trans("environments.services_enterprise_queryGidRequired")); + } + + const response = await axios.delete(`/api/plugins/enterprise/qlQuery`, { + params: { + qlQueryGid: queryGid + } + }); + + return response.status === 200; + + } catch (error) { + const errorMsg = error instanceof Error ? error.message : trans("environments.services_enterprise_failedToDisconnectQuery"); + messageInstance.error(errorMsg); + throw error; + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/environments.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/environments.service.ts new file mode 100644 index 0000000000..762bb47743 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/environments.service.ts @@ -0,0 +1,624 @@ +import axios from "axios"; +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { trans } from "i18n"; +import { Environment } from "../types/environment.types"; +import { Workspace } from "../types/workspace.types"; +import { UserGroup } from "../types/userGroup.types"; +import {App} from "../types/app.types"; +import { DataSourceWithMeta } from '../types/datasource.types'; +import { Query, QueryResponse } from "../types/query.types"; +import { checkEnvironmentLicense } from './license.service'; + +export async function updateEnvironment( + environmentId: string, + environmentData: Partial<Environment> +): Promise<Environment> { + if (!environmentId) { + throw new Error(trans("environments.services_environments_missingEnvironmentId")); + } + + try { + // Convert frontend model to API model + const payload = { + environment_description: environmentData.environmentDescription || "", + environment_icon: environmentData.environmentIcon || "", + environment_name: environmentData.environmentName || "", + environment_apikey: environmentData.environmentApikey || "", + environment_type: environmentData.environmentType || "", + environment_api_service_url: environmentData.environmentApiServiceUrl || "", + environment_frontend_url: environmentData.environmentFrontendUrl || "", + environment_node_service_url: environmentData.environmentNodeServiceUrl || "", + isMaster: environmentData.isMaster || false + }; + + const res = await axios.put(`/api/plugins/enterprise/environments`, payload, { + params: { environmentId } + }); + + return res.data; + } catch (err) { + const errorMsg = err instanceof Error ? err.message : trans("environments.services_environments_failedToUpdateEnvironment"); + messageInstance.error(errorMsg); + throw err; + } +} + +/** + * Create a new environment manually + * @param environmentData - Environment data to create + * @returns Promise with created environment data + */ +export async function createEnvironment( + environmentData: Partial<Environment> +): Promise<Environment> { + try { + // Convert frontend model to API model + const payload = { + environment_description: environmentData.environmentDescription || "", + environment_icon: environmentData.environmentIcon || "", + environment_name: environmentData.environmentName || "", + environment_apikey: environmentData.environmentApikey || "", + environment_type: environmentData.environmentType || "", + environment_api_service_url: environmentData.environmentApiServiceUrl || "", + environment_frontend_url: environmentData.environmentFrontendUrl || "", + environment_node_service_url: environmentData.environmentNodeServiceUrl || "", + isMaster: environmentData.isMaster || false + }; + + const res = await axios.post(`/api/plugins/enterprise/environments`, payload); + + if (res.data) { + messageInstance.success(trans("environments.services_environments_environmentCreatedSuccessfully")); + return res.data; + } else { + throw new Error(trans("environments.services_environments_failedToCreateEnvironment")); + } + } catch (err) { + const errorMsg = err instanceof Error ? err.message : trans("environments.services_environments_failedToCreateEnvironment"); + messageInstance.error(errorMsg); + throw err; + } +} + +/** + * Fetch all environments + * @returns Promise with environments data + */ +export async function getEnvironments(): Promise<Environment[]> { + try { + // The response contains the data array directly in response.data + const response = await axios.get( + "/api/plugins/enterprise/environments/list" + ); + + // Return the data array directly from response.data + return response.data.data || []; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchEnvironments"); + messageInstance.error(errorMessage); + throw error; + } +} + +/** + * Fetch a single environment by ID + * @param id Environment ID + * @returns Promise with environment data + */ +export async function getEnvironmentById(id: string): Promise<Environment> { + try { + const response = await axios.get( + `/api/plugins/enterprise/environments?environmentId=${id}` + ); + + if (!response.data) { + throw new Error(trans("environments.services_environments_failedToFetchEnvironment")); + } + + const environment = response.data.data; + + // Check license status for the environment + const envWithLicense: Environment = { + ...environment, + licenseStatus: 'checking' + }; + + try { + if (environment.environmentApiServiceUrl) { + const licenseInfo = await checkEnvironmentLicense( + environment.environmentApiServiceUrl, + environment.environmentApikey + ); + + envWithLicense.isLicensed = licenseInfo.isValid; + envWithLicense.licenseStatus = licenseInfo.isValid ? 'licensed' : 'unlicensed'; + envWithLicense.licenseError = licenseInfo.error; + envWithLicense.licenseDetails = licenseInfo.details; + } else { + envWithLicense.isLicensed = false; + envWithLicense.licenseStatus = 'error'; + envWithLicense.licenseError = trans("environments.services_environments_apiServiceUrlNotConfigured"); + } + } catch (error) { + envWithLicense.isLicensed = false; + envWithLicense.licenseStatus = 'error'; + envWithLicense.licenseError = error instanceof Error ? error.message : trans("environments.services_environments_licenseCheckFailed"); + } + + return envWithLicense; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchEnvironment"); + messageInstance.error(errorMessage); + throw error; + } +} + +/* ================================================================================ + +=============================== ENVIRONMENT WORKSPACES ============================ +*/ + +/** + * Fetch workspaces for a specific environment + * @param environmentId - ID of the environment + * @param apiKey - API key for the environment + * @param apiServiceUrl - API service URL for the environment + * @returns Promise with an array of workspaces + */ +export async function getEnvironmentWorkspaces( + environmentId: string, + apiKey: string, + apiServiceUrl: string +): Promise<Workspace[]> { + try { + // Check if required parameters are provided + if (!environmentId) { + throw new Error(trans("environments.services_environments_environmentIdRequired")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_environments_apiKeyRequiredForWorkspaces")); + } + if (!apiServiceUrl) { + throw new Error(trans("environments.services_environments_apiServiceUrlRequiredForWorkspaces")); + } + + // Set up headers with the API key + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // Make the API request to get user data which includes workspaces + const response = await axios.get(`${apiServiceUrl}/api/users/me`, { headers }); + + // Check if response is valid + if (!response.data || !response.data.success) { + throw new Error(response.data?.message || trans("environments.services_environments_failedToFetchWorkspaces")); + } + + // Extract workspaces from the response + const userData = response.data.data; + + if (!userData.orgAndRoles || !Array.isArray(userData.orgAndRoles)) { + return []; + } + + // Transform the data to match our Workspace interface + const workspaces: Workspace[] = userData.orgAndRoles.map((item:any) => ({ + id: item.org.id, + name: item.org.name, + role: item.role, + creationDate: item.org.createTime, + status: item.org.state, + gid: item.org.gid, + createdBy: item.org.createdBy, + isAutoGeneratedOrganization: item.org.isAutoGeneratedOrganization, + logoUrl: item.org.logoUrl || "", + })); + + return workspaces; + } catch (error) { + // Handle and transform error + const errorMessage = + error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchWorkspaces"); + messageInstance.error(errorMessage); + throw error; + } +} + + + +/* ================================================================================ + +=============================== ENVIRONMENT USER GROUPS ============================ */ + +export async function getEnvironmentUserGroups( + environmentId: string, + apiKey: string, + apiServiceUrl: string +): Promise<UserGroup[]> { + try { + // Check if required parameters are provided + if (!environmentId) { + throw new Error(trans("environments.services_environments_environmentIdRequired")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_environments_apiKeyRequiredForUserGroups")); + } + + if (!apiServiceUrl) { + throw new Error(trans("environments.services_environments_apiServiceUrlRequiredForUserGroups")); + } + + // Set up headers with the Bearer token format + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // Make the API request to get user groups + const response = await axios.get(`${apiServiceUrl}/api/groups/list`, { headers }); + + // Check if response is valid + if (!response.data) { + throw new Error(trans("environments.services_environments_failedToFetchUserGroups")); + } + + // The response data is already an array of user groups + const userGroups: UserGroup[] = response.data.data || []; + + return userGroups; + } catch (error) { + // Handle and transform error + const errorMessage = error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchUserGroups"); + messageInstance.error(errorMessage); + throw error; + } +} + + + + +/* ================================================================================ + +=============================== WorkSpace Details ============================ */ + + +/** + * Get a specific workspace by ID from the list of workspaces + * @param workspaces - Array of workspaces + * @param workspaceId - ID of the workspace to find + * @returns The found workspace or null if not found + */ +export function getWorkspaceById(workspaces: Workspace[], workspaceId: string): Workspace | null { + if (!workspaces || !workspaceId) { + return null; + } + + return workspaces.find(workspace => workspace.id === workspaceId) || null; +} + +/** + * Fetch a specific workspace from an environment + * @param environmentId - ID of the environment + * @param workspaceId - ID of the workspace to fetch + * @param apiKey - API key for the environment + * @param apiServiceUrl - API service URL for the environment + * @returns Promise with the workspace or null if not found + */ +export async function fetchWorkspaceById( + environmentId: string, + workspaceId: string, + apiKey: string, + apiServiceUrl: string +): Promise<Workspace | null> { + try { + // First fetch all workspaces for the environment + const workspaces = await getEnvironmentWorkspaces(environmentId, apiKey, apiServiceUrl); + + // Then find the specific workspace by ID + return getWorkspaceById(workspaces, workspaceId); + } catch (error) { + throw error; + } +} + +/* ================================================================================ + +=============================== WorkSpace Apps ============================ */ + + + +export async function getWorkspaceApps( + workspaceId: string, + apiKey: string, + apiServiceUrl: string +): Promise<App[]> { + try { + // Check if required parameters are provided + if (!workspaceId) { + throw new Error(trans("environments.services_environments_workspaceIdRequired")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_environments_apiKeyRequiredForApps")); + } + + if (!apiServiceUrl) { + throw new Error(trans("environments.services_environments_apiServiceUrlRequiredForApps")); + } + + // Set up headers with the Bearer token format + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // First, switch to the target workspace + await axios.put(`${apiServiceUrl}/api/organizations/switchOrganization/${workspaceId}`, {}, { + headers + }); + + // Then fetch applications without the orgId parameter + const response = await axios.get(`${apiServiceUrl}/api/applications/list`, { + headers, + params: { + withContainerSize: false + } + }); + + // Check if response is valid + if (!response.data || !response.data.data) { + return []; + } + + // Filter out DELETED apps + const apps = response.data.data.filter((app: any) => + app.applicationStatus !== 'DELETED' + ); + + return apps; + + } catch (error) { + // Handle and transform error + const errorMessage = error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchWorkspaceApps"); + messageInstance.error(errorMessage); + throw error; + } +} + + +/* ================================================================================ + +=============================== WorkSpace Data Source ============================ */ + +/** + * Fetch data sources for a specific workspace + * @param workspaceId - ID of the workspace (orgId) + * @param apiKey - API key for the environment + * @param apiServiceUrl - API service URL for the environment + * @returns Promise with an array of data sources + */ +export async function getWorkspaceDataSources( + workspaceId: string, + apiKey: string, + apiServiceUrl: string +): Promise<DataSourceWithMeta[]> { + try { + // Check if required parameters are provided + if (!workspaceId) { + throw new Error(trans("environments.services_environments_workspaceIdRequired")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_environments_apiKeyRequiredForDataSources")); + } + + if (!apiServiceUrl) { + throw new Error(trans("environments.services_environments_apiServiceUrlRequiredForDataSources")); + } + + // Set up headers with the Bearer token format + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // Make the API request to get data sources + const response = await axios.get<{data:DataSourceWithMeta[]}>(`${apiServiceUrl}/api/datasources/listByOrg`, { + headers, + params: { + orgId: workspaceId + } + }); + + // Check if response is valid + if (!response.data) { + return []; + } + + return response.data.data ; + } catch (error) { + // Handle and transform error + const errorMessage = error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchWorkspaceDataSources"); + messageInstance.error(errorMessage); + throw error; + } +} + + + +/** + * Fetch queries for a specific workspace + * @param workspaceId - ID of the workspace (orgId) + * @param apiKey - API key for the environment + * @param apiServiceUrl - API service URL for the environment + * @param options - Additional options (name filter, pagination) + * @returns Promise with an array of queries and metadata + */ +export async function getWorkspaceQueries( + workspaceId: string, + apiKey: string, + apiServiceUrl: string, + options: { + name?: string; + pageNum?: number; + pageSize?: number; + } = {} +): Promise<{ queries: Query[], total: number }> { + try { + // Check if required parameters are provided + if (!workspaceId) { + throw new Error(trans("environments.services_environments_workspaceIdRequired")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_environments_apiKeyRequiredForQueries")); + } + + if (!apiServiceUrl) { + throw new Error(trans("environments.services_environments_apiServiceUrlRequiredForQueries")); + } + + // Set up headers with the Bearer token format + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // Prepare query parameters + const params: any = { + orgId: workspaceId + }; + + // Add optional parameters if provided + if (options.name) params.name = options.name; + if (options.pageNum !== undefined) params.pageNum = options.pageNum; + if (options.pageSize !== undefined) params.pageSize = options.pageSize; + + // Make the API request to get queries + const response = await axios.get<QueryResponse>(`${apiServiceUrl}/api/library-queries/listByOrg`, { + headers, + params + }); + + // Check if response is valid + if (!response.data) { + return { queries: [], total: 0 }; + } + + // Map the response to include id field required by DeployableItem + const queries = response.data.data.map(query => ({ + ...query, + // Map to DeployableItem fields if not already present + id: query.id, + name: query.name, + managed: false // Default to unmanaged + })); + + return { + queries, + total: response.data.total + }; + + } catch (error) { + // Handle and transform error + const errorMessage = error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchWorkspaceQueries"); + messageInstance.error(errorMessage); + throw error; + } +} + +/** + * Fetch all environments and check their license status + * @returns Promise with environments data including license status + */ +export async function getEnvironmentsWithLicenseStatus(): Promise<Environment[]> { + try { + // First fetch all environments + const environments = await getEnvironments(); + + // Check license status for each environment in parallel + const environmentsWithLicense = await Promise.all( + environments.map(async (env) => { + const envWithLicense: Environment = { + ...env, + licenseStatus: 'checking' + }; + + try { + if (env.environmentApiServiceUrl) { + const licenseInfo = await checkEnvironmentLicense( + env.environmentApiServiceUrl, + env.environmentApikey + ); + + envWithLicense.isLicensed = licenseInfo.isValid; + envWithLicense.licenseStatus = licenseInfo.isValid ? 'licensed' : 'unlicensed'; + envWithLicense.licenseError = licenseInfo.error; + envWithLicense.licenseDetails = licenseInfo.details; + } else { + envWithLicense.isLicensed = false; + envWithLicense.licenseStatus = 'error'; + envWithLicense.licenseError = trans("environments.services_environments_apiServiceUrlNotConfigured"); + } + } catch (error) { + envWithLicense.isLicensed = false; + envWithLicense.licenseStatus = 'error'; + envWithLicense.licenseError = error instanceof Error ? error.message : trans("environments.services_environments_licenseCheckFailed"); + } + + return envWithLicense; + }) + ); + + return environmentsWithLicense; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchEnvironments"); + messageInstance.error(errorMessage); + throw error; + } +} + +/** + * Fetch deployment ID from a specific environment + * @param apiServiceUrl - API service URL for the environment + * @param apiKey - API key for the environment + * @returns Promise with deployment ID string + */ +export async function getEnvironmentDeploymentId( + apiServiceUrl: string, + apiKey: string +): Promise<string> { + try { + // Check if required parameters are provided + if (!apiServiceUrl) { + throw new Error(trans("environments.services_environments_apiServiceUrlRequiredForWorkspaces")); + } + + if (!apiKey) { + throw new Error(trans("environments.services_environments_apiKeyRequiredForDeploymentId")); + } + + // Set up headers with the Bearer token format + const headers = { + Authorization: `Bearer ${apiKey}` + }; + + // Make the API request to get deployment ID + const response = await axios.get(`${apiServiceUrl}/api/configs/deploymentId`, { headers }); + + // Check if response is valid + if (!response.data) { + throw new Error(trans("environments.services_environments_failedToFetchDeploymentId")); + } + + // The response should return a string directly + return response.data; + } catch (error) { + // Handle and transform error + const errorMessage = error instanceof Error ? error.message : trans("environments.services_environments_failedToFetchDeploymentId"); + messageInstance.error(errorMessage); + throw error; + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/license.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/license.service.ts new file mode 100644 index 0000000000..ad1ea42d5d --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/license.service.ts @@ -0,0 +1,123 @@ +import axios from 'axios'; +import { trans } from 'i18n'; +import { EnvironmentLicense, DetailedLicenseInfo } from '../types/environment.types'; + +/** + * Check license and fetch detailed license information for an environment + * @param apiServiceUrl - API service URL for the environment + * @param apiKey - API key for the environment + * @returns Promise with license information including detailed data + */ +export async function checkEnvironmentLicense( + apiServiceUrl: string, + apiKey?: string +): Promise<EnvironmentLicense> { + try { + if (!apiServiceUrl) { + return { + isValid: false, + error: trans('environments.services_license_apiServiceUrlRequired') + }; + } + + // Prepare headers with API key if available + const headers: Record<string, string> = {}; + if (apiKey) { + headers.Authorization = `Bearer ${apiKey}`; + } + + // Fetch detailed license information + const response = await axios.get( + `${apiServiceUrl}/api/plugins/enterprise/license`, + { + headers, + timeout: 1500 // Very short timeout for immediate failure when endpoint doesn't exist + } + ); + + // Parse the license response + const licenseData = response.data; + + // Calculate total API calls limit and usage percentage + const totalAPICallsLimit = licenseData.eeLicenses?.reduce( + (sum: number, license: any) => sum + (license.apiCallsLimit || 0), + 0 + ) || 0; + + const apiCallsUsage = totalAPICallsLimit > 0 + ? Math.round(((totalAPICallsLimit - licenseData.remainingAPICalls) / totalAPICallsLimit) * 100) + : 0; + + const licenseDetails: DetailedLicenseInfo = { + eeActive: licenseData.eeActive || false, + remainingAPICalls: licenseData.remainingAPICalls || 0, + eeLicenses: licenseData.eeLicenses || [], + totalAPICallsLimit, + apiCallsUsage + }; + + // Determine if license is valid based on enterprise edition status and remaining calls + const isValid = licenseDetails.eeActive && licenseDetails.remainingAPICalls > 0; + + return { + isValid, + details: licenseDetails + }; + + } catch (error) { + // Determine the specific error type + let errorMessage = trans('environments.services_license_licenseInformationUnavailable'); + + if (axios.isAxiosError(error)) { + if (error.code === 'ECONNABORTED') { + errorMessage = trans('environments.services_license_licenseCheckTookTooLong'); + } else if (error.response?.status === 404) { + errorMessage = trans('environments.services_license_licenseServiceNotAvailable'); + } else if (error.response?.status === 401) { + errorMessage = trans('environments.services_license_authenticationRequired'); + } else if (error.response && error.response.status >= 500) { + errorMessage = trans('environments.services_license_licenseServiceTemporarilyUnavailable'); + } + } + + return { + isValid: false, + error: errorMessage + }; + } +} + +/** + * Format API calls for display + * @param remaining - Remaining API calls + * @param total - Total API calls limit + * @returns Formatted string + */ +export function formatAPICalls(remaining: number, total: number): string { + const used = total - remaining; + const percentage = total > 0 ? Math.round((used / total) * 100) : 0; + + return trans('environments.services_license_remainingAPICalls', { + remaining: remaining.toLocaleString(), + used: used.toLocaleString(), + total: total.toLocaleString(), + percentage + }); +} + +/** + * Get API calls status color based on usage percentage - using softer, less aggressive colors + * @param remainingCalls - Remaining API calls + * @param totalCalls - Total API calls limit + * @returns Color string for UI components + */ +export function getAPICallsStatusColor(remainingCalls: number, totalCalls: number): string { + if (totalCalls === 0) return '#d9d9d9'; // Unknown + + const usagePercentage = ((totalCalls - remainingCalls) / totalCalls) * 100; + + if (usagePercentage >= 90) return '#ff7875'; // Soft red - High usage + if (usagePercentage >= 75) return '#ffc53d'; // Soft orange - Moderate usage + if (usagePercentage >= 50) return '#40a9ff'; // Soft blue - Normal usage + return '#73d13d'; // Soft green - Low usage +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/managed-objects.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/managed-objects.service.ts new file mode 100644 index 0000000000..09efe9ebf7 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/managed-objects.service.ts @@ -0,0 +1,208 @@ +import axios from "axios"; +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { trans } from "i18n"; + +// Object types that can be managed +export enum ManagedObjectType { + ORG = "ORG", + APP = "APP", + QUERY = "QUERY", + DATASOURCE = "DATASOURCE" +} + +// Add this interface after the ManagedObjectType enum +export interface ManagedObject { + id: string; + managedId: string; + objGid: string; + environmentId: string; + objType: ManagedObjectType; +} + +/** + * Check if an object is managed + * @param objGid - Object's global ID + * @param environmentId - Environment ID + * @param objType - Object type (ORG, APP, QUERY, DATASOURCE) + * @returns Promise with boolean indicating if object is managed + */ +export async function isManagedObject( + objGid: string, + environmentId: string, + objType: ManagedObjectType +): Promise<boolean> { + try { + if (!objGid || !environmentId || !objType) { + throw new Error(trans("environments.services_managedObjects_missingRequiredParameters")); + } + + const response = await axios.get(`/api/plugins/enterprise/managed-obj`, { + params: { + objGid, + environmentId, + objType + } + }); + + return response.data.managed === true; + } catch (error) { + // If the object doesn't exist as managed, it's not an error + if (axios.isAxiosError(error) && error.response?.status === 404) { + return false; + } + + const errorMessage = error instanceof Error ? error.message : trans("environments.services_managedObjects_failedToCheckManagedStatus"); + messageInstance.error(errorMessage); + throw error; + } +} + +/** + * Set an object as managed + * @param objGid - Object's global ID + * @param environmentId - Environment ID + * @param objType - Object type (ORG, APP, QUERY, DATASOURCE) + * @param objName - Object name (optional) + * @param objTags - Object tags (optional) + * @returns Promise with operation result + */ +export async function setManagedObject( + objGid: string, + environmentId: string, + objType: ManagedObjectType, + managedId?: string +): Promise<boolean> { + try { + if (!objGid || !environmentId || !objType) { + throw new Error(trans("environments.services_managedObjects_missingRequiredParameters")); + } + + const requestBody = { + objGid, + environmentId, + objType, + ...(managedId && { managedId }) + }; + + const response = await axios.post(`/api/plugins/enterprise/managed-obj`, requestBody); + + return response.status === 200; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_managedObjects_failedToSetAsManaged", { objType }); + messageInstance.error(errorMessage); + throw error; + } +} + + +/** + * Set an object as unmanaged + * @param objGid - Object's global ID + * @param environmentId - Environment ID + * @param objType - Object type (ORG, APP, QUERY, DATASOURCE) + * @returns Promise with operation result + */ +export async function unsetManagedObject( + objGid: string, + environmentId: string, + objType: ManagedObjectType +): Promise<boolean> { + try { + if (!objGid || !environmentId || !objType) { + throw new Error(trans("environments.services_managedObjects_missingRequiredParameters")); + } + + const response = await axios.delete(`/api/plugins/enterprise/managed-obj`, { + params: { + objGid, + environmentId, + objType + } + }); + + return response.status === 200; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_managedObjects_failedToRemoveFromManaged", { objType }); + messageInstance.error(errorMessage); + throw error; + } +} + +// Add this new function +export async function getManagedObjects( + environmentId: string, + objType?: ManagedObjectType +): Promise<ManagedObject[]> { + try { + if (!environmentId) { + throw new Error(trans("environments.services_managedObjects_missingEnvironmentId")); + } + + const response = await axios.get(`/api/plugins/enterprise/managed-obj/list`, { + params: { + environmentId, + ...(objType && { objType }) // Only include objType in params if it's provided + } + }); + + return response.data.data; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_managedObjects_failedToFetchManagedObjects"); + messageInstance.error(errorMessage); + throw error; + } +} + +/** + * Get a single managed object by its parameters + * @param objGid - Object's global ID + * @param environmentId - Environment ID + * @param objType - Object type (ORG, APP, QUERY, DATASOURCE) + * @returns Promise with ManagedObject if found + */ +export async function getSingleManagedObject( + objGid: string, + environmentId: string, + objType: ManagedObjectType +): Promise<ManagedObject | null> { + try { + if (!objGid || !environmentId || !objType) { + throw new Error(trans("environments.services_managedObjects_missingRequiredParameters")); + } + + const response = await axios.get(`/api/plugins/enterprise/managed-obj`, { + params: { + objGid, + environmentId, + objType + } + }); + + return response.data.data || null; + } catch (error) { + // If the object doesn't exist as managed, return null instead of throwing + if (axios.isAxiosError(error) && error.response?.status === 404) { + return null; + } + + const errorMessage = error instanceof Error ? error.message : trans("environments.services_managedObjects_failedToFetchManagedObject"); + messageInstance.error(errorMessage); + throw error; + } +} + + +export async function transferManagedObject(objGid: string, sourceEnvId: string, targetEnvId: string, objType: ManagedObjectType): Promise<void> { + try { + const managedObject = await getSingleManagedObject(objGid, sourceEnvId, objType); + if (managedObject) { + await setManagedObject(managedObject.objGid, targetEnvId, objType, managedObject.managedId); + } else { + throw new Error(trans("environments.services_managedObjects_managedObjectNotFound", { objGid })); + } + } catch (error) { + console.error('Error transferring managed object:', error); + throw error; + } +} + diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/query.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/query.service.ts new file mode 100644 index 0000000000..a79f10f87c --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/query.service.ts @@ -0,0 +1,91 @@ +/** + * Get merged queries (both regular and managed) for a workspace + */ +import axios from 'axios'; +import { trans } from 'i18n'; +import { getManagedObjects, ManagedObjectType, transferManagedObject } from './managed-objects.service'; +import { getWorkspaceQueries } from './environments.service'; +import { Query, QueryStats } from '../types/query.types'; +export interface MergedQueriesResult { + queries: Query[]; + stats: QueryStats; + } + + export interface DeployQueryParams { + envId: string; + targetEnvId: string; + queryId: string; + queryGid: string; + deployCredential: boolean; + } + + + export async function getMergedWorkspaceQueries( + workspaceId: string, + environmentId: string, + apiKey: string, + apiServiceUrl: string + ): Promise<MergedQueriesResult> { + try { + // Fetch regular queries + + const regularQueries = await getWorkspaceQueries(workspaceId, apiKey, apiServiceUrl); + + const managedObjects = await getManagedObjects(environmentId, ManagedObjectType.QUERY); + + // Create a set of managed query GIDs for quick lookup + const managedQueryGids = new Set(managedObjects.map(obj => obj.objGid)); + + // Mark regular queries as managed if they exist in managed queries + const mergedQueries = regularQueries.queries.map((query: Query) => { + const isManaged = managedQueryGids.has(query.gid); + + return { + ...query, + managed: isManaged + }; + }); + + // Calculate stats + const total = mergedQueries.length; + const managed = mergedQueries.filter(query => query.managed).length; + + return { + queries: mergedQueries, + stats: { + total, + managed, + unmanaged: total - managed + } + }; + + } catch (error) { + console.error("Error in getMergedWorkspaceQueries:", error); + throw error; + } + } + + export async function deployQuery(params: DeployQueryParams): Promise<boolean> { + try { + const response = await axios.post('/api/plugins/enterprise/qlQuery/deploy', null, { + params: { + envId: params.envId, + targetEnvId: params.targetEnvId, + queryId: params.queryId, + deployCredential: params.deployCredential + } + }); + if (response.status === 200) { + await transferManagedObject( + params.queryGid, + params.envId, + params.targetEnvId, + ManagedObjectType.QUERY + ); + } + return response.status === 200; + } catch (error) { + console.error('Error deploying query:', error); + throw error; + } + } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/services/workspace.service.ts b/client/packages/lowcoder/src/pages/setting/environments/services/workspace.service.ts new file mode 100644 index 0000000000..f7bbf7a436 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/services/workspace.service.ts @@ -0,0 +1,115 @@ +// services/workspacesService.ts (or wherever makes sense in your structure) +import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import { trans } from "i18n"; +import { getEnvironmentWorkspaces } from "./environments.service"; +import { getManagedObjects, ManagedObject, ManagedObjectType, transferManagedObject } from "./managed-objects.service"; +import { Workspace } from "../types/workspace.types"; +import { ManagedOrg } from "../types/enterprise.types"; +import axios from "axios"; + +export interface WorkspaceStats { + total: number; + managed: number; + unmanaged: number; +} + +export interface MergedWorkspacesResult { + workspaces: Workspace[]; + stats: WorkspaceStats; +} + +export async function getMergedEnvironmentWorkspaces( + environmentId: string, + apiKey: string, + apiServiceUrl: string +): Promise<MergedWorkspacesResult> { + try { + // First, get regular workspaces + const regularWorkspaces = await getEnvironmentWorkspaces( + environmentId, + apiKey, + apiServiceUrl + ); + + // If no workspaces, return early with empty result + if (!regularWorkspaces.length) { + return { + workspaces: [], + stats: { + total: 0, + managed: 0, + unmanaged: 0 + } + }; + } + + // Only fetch managed workspaces if we have regular workspaces + let managedObjects: ManagedObject[] = []; + try { + managedObjects = await getManagedObjects(environmentId, ManagedObjectType.ORG); + } catch (error) { + console.error("Failed to fetch managed workspaces:", error); + // Continue with empty managed list + } + + // Merge the workspaces + const mergedWorkspaces = regularWorkspaces.map(ws => ({ + ...ws, + managed: managedObjects.some(obj => obj.objGid === ws.gid && obj.objType === ManagedObjectType.ORG) + })); + + // Calculate stats + const managedCount = mergedWorkspaces.filter(ws => ws.managed).length; + + return { + workspaces: mergedWorkspaces, + stats: { + total: mergedWorkspaces.length, + managed: managedCount, + unmanaged: mergedWorkspaces.length - managedCount + } + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_workspace_failedToFetchWorkspaces"); + messageInstance.error(errorMessage); + throw error; + } +} + +/** + * Deploy a workspace to another environment + * @param params Deployment parameters + * @returns Promise with boolean indicating success + */ +export async function deployWorkspace(params: { + envId: string; + targetEnvId: string; + workspaceId: string; +}): Promise<boolean> { + try { + // Use the new endpoint format with only essential parameters + const response = await axios.post('/api/plugins/enterprise/org/deploy', null, { + params: { + orgGid: params.workspaceId, // Using workspaceId as orgGid + envId: params.envId, + targetEnvId: params.targetEnvId, + } + }); + + // After successful deployment, set the managed object in target environment + if (response.status === 200) { + await transferManagedObject( + params.workspaceId, // first param has to be GID + params.envId, + params.targetEnvId, + ManagedObjectType.ORG + ); + } + + return response.status === 200; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : trans("environments.services_workspace_failedToDeployWorkspace"); + // Don't show message directly, let the calling component handle it + throw new Error(errorMessage); + } +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/app.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/app.types.ts new file mode 100644 index 0000000000..775a589fb5 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/app.types.ts @@ -0,0 +1,35 @@ + +export interface App { + orgId: string; + applicationId: string; + applicationGid: string; + name: string; + createAt: number; + createBy: string; + role: string; + applicationType: number; + applicationStatus: string; + folderId: string | null; + lastViewTime: number; + lastModifyTime: number; + lastEditedAt: number; + publicToAll: boolean; + publicToMarketplace: boolean; + agencyProfile: boolean; + editingUserId: string | null; + title: string; + description: string; + category: string; + icon: string; + published: boolean; + folder: boolean; + managed?: boolean; + id: string + } + + export interface AppStats { + total: number; + published: number; + managed: number; + unmanaged: number; + } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/datasource.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/datasource.types.ts new file mode 100644 index 0000000000..b33e14e867 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/datasource.types.ts @@ -0,0 +1,41 @@ +/** + * Represents a DataSource configuration + */ +export interface DataSourceConfig { + usingUri: boolean; + srvMode: boolean; + ssl: boolean; + endpoints: any[]; + host: string | null; + port: number; + database: string | null; + username: string; + authMechanism: string | null; + } + + /** + * Represents a DataSource entity + */ + export interface DataSource { + id: string; + createdBy: string; + gid: string; + name: string; + type: string; + organizationId: string; + creationSource: number; + datasourceStatus: string; + pluginDefinition: any | null; + createTime: number; + datasourceConfig: DataSourceConfig; + managed?: boolean; + } + + /** + * Represents a DataSource with additional metadata + */ + export interface DataSourceWithMeta { + datasource: DataSource; + edit: boolean; + creatorName: string; + } diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/deployable-item.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/deployable-item.types.ts new file mode 100644 index 0000000000..55964eefef --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/deployable-item.types.ts @@ -0,0 +1,22 @@ +// types/deployable-item.types.ts +import { Environment } from './environment.types'; + + + +export interface DeployField { + name: string; + label: string; + type: 'checkbox' | 'select' | 'input'; + defaultValue?: any; + required?: boolean; + options?: Array<{label: string, value: any}>; // For select fields +} +// Configuration for each deployable item type +export interface DeployableItemConfig { + deploy: { + singularLabel: string; + fields: DeployField[]; + prepareParams: (item: any, values: any, sourceEnv: Environment, targetEnv: Environment) => any; + execute: (params: any) => Promise<any>; + }; +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/enterprise.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/enterprise.types.ts new file mode 100644 index 0000000000..e51a787403 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/enterprise.types.ts @@ -0,0 +1,12 @@ +import { Workspace } from "../types/workspace.types"; +export interface ManagedOrg { + orgGid: string; + environmentId: string; + orgName: string; + orgTags: string[]; + createdAt: string; + updatedAt: string; + } + + + export type MergedWorkspace = Workspace & { managed: boolean }; diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/environment.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/environment.types.ts new file mode 100644 index 0000000000..1cca58f7ec --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/environment.types.ts @@ -0,0 +1,55 @@ +/** + * Interface representing an Environment entity + */ +export interface Environment { + environmentId: string; + environmentName?: string; + environmentDescription?: string; + environmentIcon?: string; + environmentType?: string; + environmentApiServiceUrl?: string; + environmentNodeServiceUrl?: string; + environmentFrontendUrl?: string; + environmentApikey: string; + isMaster: boolean; + createdAt: string; + updatedAt: string; + // License-related properties + isLicensed?: boolean; + licenseStatus?: 'checking' | 'licensed' | 'unlicensed' | 'error'; + licenseError?: string; + // Enhanced license details + licenseDetails?: DetailedLicenseInfo; +} + +/** + * Interface representing license information for an environment + */ +export interface EnvironmentLicense { + isValid: boolean; + error?: string; + // Enhanced license details + details?: DetailedLicenseInfo; +} + +/** + * Interface representing detailed license information from the license endpoint + */ +export interface DetailedLicenseInfo { + eeActive: boolean; + remainingAPICalls: number; + eeLicenses: LicenseEntry[]; + // Calculated fields + totalAPICallsLimit?: number; + apiCallsUsage?: number; // percentage used +} + +/** + * Interface representing a single license entry + */ +export interface LicenseEntry { + uuid: string; + customerId: string; + customerName: string; + apiCallsLimit: number; +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/query.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/query.types.ts new file mode 100644 index 0000000000..212efeaacc --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/query.types.ts @@ -0,0 +1,62 @@ +// types/query.types.ts + +export interface LibraryQueryDSL { + query: { + compType: string; + comp: { + bodyType: string; + body: string; + httpMethod: string; + path: string; + headers: Array<{ key: string; value: string }>; + params: Array<{ key: string; value: string }>; + bodyFormData: Array<{ key: string; value: string; type: string }>; + }; + id: string; + name: string; + order: number; + datasourceId: string; + triggerType: string; + onEvent: any[]; + notification: { + showSuccess: boolean; + showFail: boolean; + fail: any[]; + }; + timeout: string; + confirmationModal: any; + variables: any[]; + periodic: boolean; + periodicTime: string; + cancelPrevious: boolean; + depQueryName: string; + delayTime: string; + }; +} + +export interface Query { + id: string; + gid: string; + organizationId: string; + name: string; + libraryQueryDSL: LibraryQueryDSL; + createTime: number; + creatorName: string; + managed?: boolean; +} + +export interface QueryStats { + total: number; + managed: number; + unmanaged: number; +} + +export interface QueryResponse { + code: number; + message: string; + data: Query[]; + pageNum: number; + pageSize: number; + total: number; + success: boolean; +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/userGroup.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/userGroup.types.ts new file mode 100644 index 0000000000..5791204c83 --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/userGroup.types.ts @@ -0,0 +1,26 @@ +export interface UserGroupStats { + users: string[]; + adminUserCount: number; + userCount: number; +} + +export interface UserGroup { + groupId: string; + groupGid: string; + groupName: string; + allUsersGroup: boolean; + visitorRole: string; + createTime: number; + dynamicRule: any; + stats: UserGroupStats; + syncDelete: boolean; + devGroup: boolean; + syncGroup: boolean; +} + +export interface UserGroupsTabStats { + total: number; + allUsers: number; + developers: number; + custom: number; +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/types/workspace.types.ts b/client/packages/lowcoder/src/pages/setting/environments/types/workspace.types.ts new file mode 100644 index 0000000000..15f1e7dfbc --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/types/workspace.types.ts @@ -0,0 +1,16 @@ +/** + * Represents a Workspace entity in an environment + */ +export interface Workspace { + id: string; + name: string; + role: string; // 'admin', 'member', etc. + creationDate?: number; // timestamp + status: string; // 'ACTIVE', 'INACTIVE', etc. + // Optional fields + gid?: string; + createdBy?: string; + isAutoGeneratedOrganization?: boolean | null; + logoUrl?: string; + managed?: boolean; + } \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/environments/utils/environmentUtils.ts b/client/packages/lowcoder/src/pages/setting/environments/utils/environmentUtils.ts new file mode 100644 index 0000000000..f2ce82a10f --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/environments/utils/environmentUtils.ts @@ -0,0 +1,71 @@ +/** + * Utility functions for environment-related features + */ + +/** + * Get the appropriate color for an environment tag based on its type + * @param envType The environment type/stage (DEV, TEST, PREPROD, PROD) + * @returns A color string to use with Ant Design's Tag component + */ +export const getEnvironmentTagColor = (envType: string | undefined): string => { + if (!envType) return 'default'; + + // Normalize to uppercase for consistent comparison + const type = envType.toUpperCase(); + + switch (type) { + case 'PROD': + return 'red'; // Red for production - indicates caution + + case 'PREPROD': + return 'orange'; // Orange for pre-production + + case 'TEST': + return 'purple'; // Purple for test environment + + case 'DEV': + return 'blue'; // Blue for development + + default: + return 'default'; // Default gray for unknown types + } +}; + +/** + * Get the appropriate background gradient for an environment based on its type + * @param envType The environment type/stage (DEV, TEST, PREPROD, PROD) + * @returns A CSS linear gradient string for the background + */ +export const getEnvironmentHeaderGradient = (envType: string | undefined): string => { + if (!envType) return 'linear-gradient(135deg, #1890ff 0%, #096dd9 100%)'; + + // Normalize to uppercase for consistent comparison + const type = envType.toUpperCase(); + + switch (type) { + case 'PROD': + return 'linear-gradient(135deg, #f5222d 0%, #fa8c16 100%)'; + + case 'PREPROD': + return 'linear-gradient(135deg, #fa8c16 0%, #faad14 100%)'; + + case 'TEST': + return 'linear-gradient(135deg, #722ed1 0%, #b37feb 100%)'; + + case 'DEV': + return 'linear-gradient(135deg, #1890ff 0%, #096dd9 100%)'; + + default: + return 'linear-gradient(135deg, #1890ff 0%, #096dd9 100%)'; + } +}; + +/** + * Format an environment type for display + * @param envType The environment type string + * @returns Formatted environment type string + */ +export const formatEnvironmentType = (envType: string | undefined): string => { + if (!envType) return 'TEST'; + return envType.toUpperCase(); +}; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/hubspotModal.tsx b/client/packages/lowcoder/src/pages/setting/hubspotModal.tsx new file mode 100644 index 0000000000..354ede1bbd --- /dev/null +++ b/client/packages/lowcoder/src/pages/setting/hubspotModal.tsx @@ -0,0 +1,126 @@ +import { useEffect } from "react"; +import { Modal, Typography, Card, Space, Divider } from "antd"; +import styled from "styled-components"; +import Title from "antd/es/typography/Title"; +import { trans } from "i18n"; + +const { Paragraph, Text } = Typography; + +const HubspotFormContainer = styled.div` + max-width: 100%; + width: 100%; + .hs-form { + max-width: 100% !important; + } + --step-content-padding: 0px; + .hsfc-Step__Content { + padding: 0 !important; + } +`; + +declare global { + interface Window { + hbspt: { + forms: { + create: (options: { + region: string; + portalId: string; + formId: string; + target: string | HTMLElement | null; + }) => void; + }; + }; + } +} + +interface Props { + open: boolean; + onClose: () => void; + orgId: string; + deploymentIds: string[]; +} + +export function HubspotModal({ open, onClose, orgId, deploymentIds }: Props) { + useEffect(() => { + if (!open) return; + + const scriptId = "hubspot-script"; + const existingScript = document.getElementById(scriptId) as HTMLScriptElement; + + const createForm = () => { + setTimeout(() => { + if (window.hbspt && document.querySelector("#hubspot-form")) { + window.hbspt.forms.create({ + region: "eu1", + portalId: "144574215", + formId: "f03697ad-62cf-4161-a3de-228a2db1180b", + target: "#hubspot-form", + }); + } + }, 0); + }; + + if (!existingScript) { + const script = document.createElement("script"); + script.src = "https://js-eu1.hsforms.net/forms/embed/v2.js"; + script.async = true; + script.defer = true; + script.id = scriptId; + script.onload = createForm; + document.body.appendChild(script); + } else { + if (window.hbspt) { + createForm(); + } else { + existingScript.addEventListener("load", createForm); + } + } + }, [open]); + + return ( + <Modal + open={open} + onCancel={onClose} + footer={null} + width={720} + destroyOnHidden + > + <Space direction="vertical" size="large" style={{ width: "100%" }}> + {/* Info Header Card */} + <Card> + <Typography> + <Title level={2}>{trans("enterprise.requestLicense")}</Title> + + <Paragraph strong> + <Text>Organization ID:</Text> + </Paragraph> + <Paragraph copyable>{orgId}</Paragraph> + + <Paragraph strong> + <Text>Deployment IDs:</Text> + </Paragraph> + + <Space direction="vertical" style={{ width: "100%" }}> + {deploymentIds.length === 0 ? ( + <Text type="secondary">No deployments found.</Text> + ) : ( + deploymentIds.map((id, idx) => ( + <Paragraph key={idx} copyable style={{ marginBottom: 4 }}> + {id} + </Paragraph> + )) + )} + </Space> + </Typography> + </Card> + + {/* Hubspot Form Card */} + <Card> + <HubspotFormContainer> + <div id="hubspot-form"/> + </HubspotFormContainer> + </Card> + </Space> + </Modal> + ); +} diff --git a/client/packages/lowcoder/src/pages/setting/idSource/createModal.tsx b/client/packages/lowcoder/src/pages/setting/idSource/createModal.tsx index d154bfec04..8a68e629ec 100644 --- a/client/packages/lowcoder/src/pages/setting/idSource/createModal.tsx +++ b/client/packages/lowcoder/src/pages/setting/idSource/createModal.tsx @@ -61,7 +61,7 @@ function CreateModal(props: CreateModalProp) { onCancel={handleCancel} showOkButton={false} showCancelButton={false} - destroyOnClose + destroyOnHidden afterClose={() => form.resetFields()} > <FormStyled diff --git a/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx b/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx index 6f4d72f253..8af0e3cecc 100644 --- a/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx +++ b/client/packages/lowcoder/src/pages/setting/permission/addGroupUserDialog.tsx @@ -65,7 +65,7 @@ function AddGroupUserDialog(props: { <CustomModal title={trans("memberSettings.addMember")} open={dialogVisible} - destroyOnClose + destroyOnHidden onCancel={() => { setDialogVisible(false); }} diff --git a/client/packages/lowcoder/src/pages/setting/permission/groupUsersPermission.tsx b/client/packages/lowcoder/src/pages/setting/permission/groupUsersPermission.tsx index 4ed3e0a3c8..c8270eeb4d 100644 --- a/client/packages/lowcoder/src/pages/setting/permission/groupUsersPermission.tsx +++ b/client/packages/lowcoder/src/pages/setting/permission/groupUsersPermission.tsx @@ -30,6 +30,7 @@ import { } from "./styledComponents"; import history from "util/history"; import { PERMISSION_SETTING } from "constants/routesURL"; +import Column from "antd/es/table/Column"; const StyledAddIcon = styled(AddIcon)` g path { @@ -45,11 +46,12 @@ type GroupPermissionProp = { currentUser: User; setModify?: any; modify?: boolean; + loading?: boolean; }; function GroupUsersPermission(props: GroupPermissionProp) { - const { Column } = TableStyled; - const { group, orgId, groupUsers, currentUserGroupRole, currentUser , setModify, modify} = props; + // const { Column } = TableStyled; + const { group, orgId, groupUsers, currentUserGroupRole, currentUser, setModify, modify, loading } = props; const adminCount = groupUsers.filter((user) => isGroupAdmin(user.role)).length; const sortedGroupUsers = useMemo(() => { return [...groupUsers].sort((a, b) => { @@ -97,7 +99,7 @@ function GroupUsersPermission(props: GroupPermissionProp) { dataSource={sortedGroupUsers} rowKey="userId" pagination={false} - loading={groupUsers.length === 0} + loading={loading} > <Column title={trans("memberSettings.nameColumn")} @@ -126,7 +128,7 @@ function GroupUsersPermission(props: GroupPermissionProp) { render={(value, record: GroupUser) => ( <CustomSelect style={{ width: "140px", height: "32px" }} - dropdownStyle={{ width: "149px" }} + styles={{ popup: { root: { width: "149px" }}}} defaultValue={record.role} key={record.role} disabled={ @@ -214,4 +216,4 @@ function GroupUsersPermission(props: GroupPermissionProp) { ); } -export default GroupUsersPermission; +export default GroupUsersPermission; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/permission/orgUsersPermission.tsx b/client/packages/lowcoder/src/pages/setting/permission/orgUsersPermission.tsx index e00d06e666..091cb693d2 100644 --- a/client/packages/lowcoder/src/pages/setting/permission/orgUsersPermission.tsx +++ b/client/packages/lowcoder/src/pages/setting/permission/orgUsersPermission.tsx @@ -45,6 +45,7 @@ import { validateResponse } from "api/apiUtils"; import copyToClipboard from "copy-to-clipboard"; import { BackgroundColor } from "constants/style"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; +import Column from "antd/es/table/Column"; const StyledMembersIcon = styled(MembersIcon)` g g { @@ -58,11 +59,11 @@ type UsersPermissionProp = { currentUser: User; setModify?: any; modify?: boolean; + loading?: boolean; }; function OrgUsersPermission(props: UsersPermissionProp) { - const { Column } = TableStyled; - const { orgId, orgUsers, currentUser , setModify, modify} = props; + const { orgId, orgUsers, currentUser, setModify, modify, loading } = props; const adminCount = orgUsers.filter( (user) => user.role === ADMIN_ROLE || user.role === SUPER_ADMIN_ROLE, ).length; @@ -149,7 +150,7 @@ function OrgUsersPermission(props: UsersPermissionProp) { dataSource={sortedOrgUsers} rowKey="userId" pagination={false} - loading={orgUsers.length === 0} + loading={loading} > <Column title={trans("memberSettings.nameColumn")} @@ -179,7 +180,7 @@ function OrgUsersPermission(props: UsersPermissionProp) { render={(value, record: OrgUser) => ( <CustomSelect style={{ width: "140px", height: "32px" }} - dropdownStyle={{ width: "149px" }} + styles={{ popup: { root: { width: "149px" }}}} defaultValue={record.role} key={record.role} optionLabelProp="label" @@ -300,4 +301,4 @@ function OrgUsersPermission(props: UsersPermissionProp) { ); } -export default OrgUsersPermission; +export default OrgUsersPermission; \ No newline at end of file diff --git a/client/packages/lowcoder/src/pages/setting/permission/permissionDetail.tsx b/client/packages/lowcoder/src/pages/setting/permission/permissionDetail.tsx index d144c4e47e..57eb1eb91d 100644 --- a/client/packages/lowcoder/src/pages/setting/permission/permissionDetail.tsx +++ b/client/packages/lowcoder/src/pages/setting/permission/permissionDetail.tsx @@ -23,12 +23,14 @@ export default function PermissionSetting(props: {currentPageProp: number, pageS const {currentPageProp, pageSizeProp} = props; const user = useSelector(getUser); - const [elements, setElements] = useState<any>({ elements: [], total: 1, role: "" }); + const [elements, setElements] = useState<any>({ elements: [], total: 0, role: "" }); const [group, setGrouop] = useState<OrgGroup>(); - const [orgMemberElements, setOrgMemberElements] = useState<any>({ elements: [], total: 1 }) + const [orgMemberElements, setOrgMemberElements] = useState<any>({ elements: [], total: 0 }) const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); const [modify, setModify] = useState(false); + const [loading, setLoading] = useState(false); + const [error, setError] = useState<string | null>(null); const orgId = user.currentOrgId; const currentUser = useSelector(getUser); @@ -51,23 +53,36 @@ export default function PermissionSetting(props: {currentPageProp: number, pageS ) useEffect( () => { - if (selectKey !== "users" && selectKey) + if (selectKey !== "users" && selectKey) { + setLoading(true); + setError(null); + fetchGroupUsrPagination( { - groupId:selectKey, + groupId: selectKey, pageNum: currentPage, pageSize: pageSize, } - ).then(result => { - if (result.success){ - setElements({elements: result.data || [], total: result.total || 1, role: result.visitorRole || ""}) - } - else - console.error("ERROR: fetchFolderElements", result.error) + ).then(result => { + setLoading(false); + + if (result.success) { + setElements({ + elements: result.data || [], + total: result.total || 0, + role: result.visitorRole || "" + }); + } else { + setError("Failed to load group users. Please try again."); } - ) - else - { + }).catch(err => { + setLoading(false); + setError("Failed to load group users. Please try again."); + }); + } else { + setLoading(true); + setError(null); + fetchOrgUsrPagination( { orgId: orgId, @@ -75,17 +90,22 @@ export default function PermissionSetting(props: {currentPageProp: number, pageS pageSize: pageSize, } ).then(result => { - if (result.success){ - setOrgMemberElements({elements: result.data || [], total: result.total || 1}) - } - else - console.error("ERROR: fetchFolderElements", result.error) + setLoading(false); + if (result.success){ + setOrgMemberElements({ + elements: result.data || [], + total: result.total || 0 + }); + } + else { + setError("Failed to load organization users. Please try again."); } - ) + }).catch(err => { + setLoading(false); + setError("Failed to load organization users. Please try again."); + }); } - }, - [currentPage, pageSize, modify, selectKey] - ) + }, [currentPage, pageSize, modify, selectKey, orgId]); if (!orgId) { return null; @@ -93,15 +113,21 @@ export default function PermissionSetting(props: {currentPageProp: number, pageS return ( <PermissionContent key={selectKey}> + {error && ( + <div style={{ color: 'red', margin: '20px 0', textAlign: 'center' }}> + {error} + </div> + )} + {selectKey === "users" ? ( <> <UsersPermission orgId={orgId} - // orgUsers={!orgMemberElements.elements.members ? [] : orgMemberElements.elements.members} orgUsers={orgMemberElements.elements} currentUser={currentUser} setModify={setModify} modify={modify} + loading={loading} /> <PaginationComp setCurrentPage={setCurrentPage} setPageSize={setPageSize} currentPage={currentPage} pageSize={pageSize} total={orgMemberElements.total} /> </> @@ -116,10 +142,10 @@ export default function PermissionSetting(props: {currentPageProp: number, pageS currentUser={currentUser} setModify={setModify} modify={modify} + loading={loading} /> <PaginationComp setCurrentPage={setCurrentPage} setPageSize={setPageSize} currentPage={currentPage} pageSize={pageSize} total={elements.total} /> </> - ) )} </PermissionContent> diff --git a/client/packages/lowcoder/src/pages/setting/settingHome.tsx b/client/packages/lowcoder/src/pages/setting/settingHome.tsx index e6620b22ff..0017e598fc 100644 --- a/client/packages/lowcoder/src/pages/setting/settingHome.tsx +++ b/client/packages/lowcoder/src/pages/setting/settingHome.tsx @@ -1,14 +1,18 @@ +import { useState } from "react"; +import { useSelector } from "react-redux"; +import { useParams } from "react-router-dom"; +import { Helmet } from "react-helmet"; +import { Card, Button } from "antd"; + import { Organization } from "./organization"; import PermissionSetting from "./permission"; import { ThemeHome } from "./theme"; import { AdvancedSetting } from "./advanced/AdvancedSetting"; import { currentOrgAdmin } from "util/permissionUtils"; import { trans } from "i18n"; -import AuditSetting from "@lowcoder-ee/pages/setting/audit"; -import { isEE, isEnterpriseMode, isSelfDomain, showAuditLog } from "util/envUtils"; import { TwoColumnSettingPageContent } from "./styled"; import SubSideBar from "components/layout/SubSideBar"; -import { +import { Menu, UserGroupIcon, UserShieldIcon, @@ -16,130 +20,134 @@ import { ThemeIcon, WorkspacesIcon, SubscriptionIcon, - } from "lowcoder-design"; -import { useSelector } from "react-redux"; -import { useEffect } from "react"; + EnvironmentsIcon, + UsageStatisticsIcon, + AutitLogsIcon, + BrandingIcon, +} from "lowcoder-design"; import { getUser } from "redux/selectors/usersSelectors"; -import history from "util/history"; -import { useParams } from "react-router-dom"; -import { BrandingSetting } from "@lowcoder-ee/pages/setting/branding/BrandingSetting"; -import { IdSourceHome } from "@lowcoder-ee/pages/setting/idSource"; +import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; import { selectSystemConfig } from "redux/selectors/configSelectors"; -import { enableCustomBrand } from "util/featureFlagUtils"; +import { selectIsLicenseActive } from "redux/selectors/enterpriseSelectors"; + import FreeLimitTag from "pages/common/freeLimitTag"; -import { Helmet } from "react-helmet"; -import { Card } from "antd"; +import { Branding } from "@lowcoder-ee/pages/setting/branding"; +import { Environments} from "@lowcoder-ee/pages/setting/environments"; +import { AppUsage } from "@lowcoder-ee/pages/setting/appUsage"; +import { AuditLog } from "@lowcoder-ee/pages/setting/audit"; +import { IdSourceHome } from "@lowcoder-ee/pages/setting/idSource"; import { Subscription } from "./subscriptions"; +import history from "util/history"; +import { HubspotModal } from "./hubspotModal"; enum SettingPageEnum { - UserGroups = "permission", Organization = "organization", - Subscription = "subscription", - Audit = "audit", + OAuthProvider = "oauth-provider", + UserGroups = "permission", Theme = "theme", - Branding = "branding", Advanced = "advanced", - OAuthProvider = "oauth-provider", - AppUsage = "app-usage", Environments = "environments", + AppUsage = "app-usage", + AuditLog = "audit", + Branding = "branding", + Subscription = "subscription", } export function SettingHome() { const user = useSelector(getUser); const config = useSelector(selectSystemConfig); + const isLicenseActive = useSelector(selectIsLicenseActive); + const deploymentId = useSelector(getDeploymentId); // Single deploymentId const selectKey = useParams<{ setting: string }>().setting || SettingPageEnum.UserGroups; + const [hubspotVisible, setHubspotVisible] = useState(false); + const items = [ { key: SettingPageEnum.Organization, label: trans("settings.organization"), - icon: <WorkspacesIcon width={"20px"}/>, + icon: <WorkspacesIcon width={"20px"} />, }, { key: SettingPageEnum.OAuthProvider, - label: (trans("settings.oauthProviders")), + label: trans("settings.oauthProviders"), disabled: !currentOrgAdmin(user), - icon: <UserShieldIcon width={"20px"}/>, + icon: <UserShieldIcon width={"20px"} />, }, { key: SettingPageEnum.UserGroups, label: trans("settings.userGroups"), - icon: <UserGroupIcon width={"20px"}/>, + icon: <UserGroupIcon width={"20px"} />, }, { key: SettingPageEnum.Theme, label: trans("settings.theme"), - icon: <ThemeIcon width={"20px"}/>, + icon: <ThemeIcon width={"20px"} />, }, { key: SettingPageEnum.Advanced, label: trans("settings.advanced"), - icon: <LeftSettingIcon width={"20px"}/>, + icon: <LeftSettingIcon width={"20px"} />, }, - - // Premium features - { key: SettingPageEnum.Environments, label: ( <span> <span className="text">{trans("settings.environments")}</span> - <FreeLimitTag text={trans("settings.premium")} /> + {!isLicenseActive && <FreeLimitTag text={trans("settings.premium")} />} </span> ), - disabled: true, + icon: <EnvironmentsIcon width={"20px"} />, + disabled: !currentOrgAdmin(user), }, { key: SettingPageEnum.AppUsage, label: ( <span> <span className="text">{trans("settings.appUsage")}</span> - <FreeLimitTag text={trans("settings.premium")} /> + {!isLicenseActive && <FreeLimitTag text={trans("settings.premium")} />} </span> ), - disabled: true, + icon: <UsageStatisticsIcon width={"20px"} />, + disabled: !currentOrgAdmin(user), }, { - key: SettingPageEnum.Audit, + key: SettingPageEnum.AuditLog, label: ( <span> <span className="text">{trans("settings.audit")}</span> - {(!showAuditLog(config) || !currentOrgAdmin(user)) && ( - <FreeLimitTag text={trans("settings.premium")} /> - )} + {!isLicenseActive && <FreeLimitTag text={trans("settings.premium")} />} </span> ), - disabled: !showAuditLog(config) || !currentOrgAdmin(user), + icon: <AutitLogsIcon width={"20px"} />, + disabled: !currentOrgAdmin(user), }, { key: SettingPageEnum.Branding, label: ( <span> <span className="text">{trans("settings.branding")}</span> - {(!isEE() || - !currentOrgAdmin(user) || - !enableCustomBrand(config) || - (!isSelfDomain(config) && !isEnterpriseMode(config))) && ( - <FreeLimitTag text={trans("settings.premium")} /> - )} + {!isLicenseActive && <FreeLimitTag text={trans("settings.premium")} />} </span> ), - disabled: - !isEE() || - !currentOrgAdmin(user) || - !enableCustomBrand(config) || - (!isSelfDomain(config) && !isEnterpriseMode(config)), + icon: <BrandingIcon width={"20px"} />, + disabled: !currentOrgAdmin(user), }, - { + { key: SettingPageEnum.Subscription, label: trans("settings.subscription"), - icon: <SubscriptionIcon width={"20px"}/>, - } + icon: <SubscriptionIcon width={"20px"} />, + }, ]; return ( <> - <Helmet>{<title>{trans("productName")} {trans("settings.title")}</title>}</Helmet> + <Helmet> + <title> + {trans("productName")} {trans("settings.title")} + </title> + </Helmet> + <TwoColumnSettingPageContent> <SubSideBar title={trans("settings.title")}> <Menu @@ -148,30 +156,42 @@ export function SettingHome() { selectedKeys={[selectKey]} onClick={(value) => { history.push("/setting/" + value.key); - } } - items={items} /> + }} + items={items} + /> - <Card style={{marginTop: "40px", color:"#aaa"}}> - <div>If you are interested in early access to the upcoming Enterprise Edition, please contact us: <a href="mailto:service@lowcoder.cloud">service@lowcoder.cloud</a></div> - </Card> + {!isLicenseActive && ( + <Card style={{ marginTop: "40px", color: "#aaa" }}> + <div style={{ marginBottom: 12 }}> + {trans("enterprise.premiumFeaturesNotice")} + </div> + <Button type="primary" onClick={() => setHubspotVisible(true)}> + {trans("enterprise.requestLicensesBtton")} + </Button> + </Card> + )} </SubSideBar> - {selectKey === SettingPageEnum.UserGroups && <PermissionSetting />} + {selectKey === SettingPageEnum.Organization && <Organization />} - {selectKey === SettingPageEnum.Theme && <ThemeHome />} {selectKey === SettingPageEnum.OAuthProvider && <IdSourceHome />} - {selectKey === SettingPageEnum.Audit && <AuditSetting />} - {selectKey === SettingPageEnum.Branding && <BrandingSetting />} + {selectKey === SettingPageEnum.UserGroups && <PermissionSetting />} + {selectKey === SettingPageEnum.Theme && <ThemeHome />} {selectKey === SettingPageEnum.Advanced && <AdvancedSetting />} + {selectKey === SettingPageEnum.Environments && <Environments />} + {selectKey === SettingPageEnum.AppUsage && <AppUsage />} + {selectKey === SettingPageEnum.AuditLog && <AuditLog />} + {selectKey === SettingPageEnum.Branding && <Branding />} {selectKey === SettingPageEnum.Subscription && <Subscription />} </TwoColumnSettingPageContent> + + <HubspotModal + open={hubspotVisible} + onClose={() => setHubspotVisible(false)} + orgId={user.currentOrgId} + deploymentIds={[deploymentId]} // Pass current single ID as array + /> </> ); } -// { -// key: SettingPageEnum.Subscription, -// label: trans("settings.subscription"), -// icon: <SubscriptionIcon width={"20px"}/>, -// } - export default SettingHome; diff --git a/client/packages/lowcoder/src/pages/setting/subscriptions/ProductDescriptions.tsx b/client/packages/lowcoder/src/pages/setting/subscriptions/ProductDescriptions.tsx index a689acb459..fad26e617a 100644 --- a/client/packages/lowcoder/src/pages/setting/subscriptions/ProductDescriptions.tsx +++ b/client/packages/lowcoder/src/pages/setting/subscriptions/ProductDescriptions.tsx @@ -250,19 +250,211 @@ SupportProduct : { MediaPackageProduct: { "en": ` - # Media Package Subscription - - ## Overview - - ... (Add English description) - `, +# Lowcoder Premium Media Package Subscription + +## Overview + +**The usage and access to Lowcoder remain free as always. The Media Package Subscription is an additional service and gives you access to an extensive professional media asset library directly inside the App Editor and all your Apps.** + +The **Media Package** is a "per User, per Month and inside of a single Workspace" subscription. This means every Admin or App-Editor (Developer) who wants to use the Premium Media Package inside a Workspace needs an active subscription. Normal App Viewers (Members) naturally do not require a subscription. + +## Unlock Professional Visuals + +With the Premium Media Package you gain full access to: + +- **9 Million Icons** in various modern and classic design styles +- **630,000 Professional Animations** including Lottie and JSON formats +- **580,000 High-Quality Illustrations** for any use case +- **540,000 3D Illustrations** for next-generation app visuals + +All assets are already liencensed and can be used for **personal and commercial purposes** inside your Lowcoder Apps. + +## Direct Editor Integration + +The Media Package is seamlessly integrated into the App Editor: +- Direct search & insert inside the properties panel for Icons, Images and Lottie Animations. +- Dynamic previews of animations, icons, illustrations, and 3D assets. +- Auto-adaptation to your layout and design. +- Always updated and curated content. + +### Animation Example + + + +### Illustration Example + + + +## Simplified Licensing + +- All assets are included under a commercial license. +- No additional license management required. + +## Focus on Your Apps, Not on Asset Hunting + +No more wasting hours searching for icons, illustrations or animations externally. Build visually stunning apps directly inside Lowcoder — fast, legal, and professional. + +## Pricing Table + +| User Type | Monthly Price Per User | +|--------------------|------------------------| +| per User (Admin or App-Editor) per Month<br/>(bound to your selected Workspace) | €24.90 | +`, +"ru": ` +# Подписка на Lowcoder Premium Media Package + +## Обзор + +**Использование и доступ к Lowcoder остаются бесплатными, как и прежде. Подписка на Media Package является дополнительной услугой и предоставляет доступ к обширной профессиональной библиотеке медиа-активов прямо внутри редактора приложений и всех ваших приложений.** + +**Media Package** — это подписка "на пользователя, в месяц и внутри одного рабочего пространства". Это означает, что каждый Администратор или Редактор приложений (Разработчик), который хочет использовать Premium Media Package в рамках рабочего пространства, должен иметь активную подписку. Обычные зрители приложений (Members) естественно не требуют подписки. + +## Откройте доступ к профессиональным визуальным материалам + +С Premium Media Package вы получаете полный доступ к: + +- **9 миллионам иконок** в различных современных и классических стилях дизайна +- **630 000 профессиональных анимаций**, включая Lottie и JSON форматы +- **580 000 высококачественных иллюстраций** для любых задач +- **540 000 3D иллюстраций** для создания современных визуалов + +Все активы являются **бесплатными от роялти** и могут использоваться **для личных и коммерческих целей** внутри ваших приложений Lowcoder. + +## Прямая интеграция в редактор + +Media Package полностью интегрирован в редактор приложений: +- Поиск и вставка прямо в панели свойств для иконок, изображений и Lottie-анимаций. +- Динамические предпросмотры анимаций, иконок, иллюстраций и 3D-активов. +- Автоматическая адаптация к вашему макету и дизайну. +- Постоянно обновляемый и курируемый контент. + +### Пример анимации + + + +### Пример иллюстрации + + + +## Упрощённое лицензирование + +- Все активы включены в коммерческую лицензию. +- Не требуется дополнительного управления лицензиями. + +## Сосредоточьтесь на приложениях, а не на поиске активов + +Больше не нужно тратить часы на поиск иконок, иллюстраций или анимаций извне. Создавайте визуально впечатляющие приложения прямо внутри Lowcoder — быстро, легально и профессионально. + +## Таблица цен + +| Тип пользователя | Ежемесячная цена за пользователя | +|--------------------|------------------------| +| за пользователя (Администратор или Редактор приложений) в месяц<br/>(привязано к выбранному рабочему пространству) | €24.90 | + +`, +"es": ` +# Suscripción al Lowcoder Premium Media Package + +## Descripción general + +**El uso y acceso a Lowcoder sigue siendo gratuito como siempre. La suscripción a Media Package es un servicio adicional que le da acceso a una extensa biblioteca profesional de activos multimedia directamente dentro del editor de aplicaciones y en todas sus aplicaciones.** + +**Media Package** es una suscripción "por usuario, por mes y dentro de un único espacio de trabajo". Esto significa que cada Administrador o Editor de Aplicaciones (Desarrollador) que desee utilizar el Premium Media Package dentro de un espacio de trabajo necesita una suscripción activa. Los visualizadores de aplicaciones (Miembros) no requieren suscripción. + +## Desbloquee recursos visuales profesionales + +Con Premium Media Package obtiene acceso completo a: + +- **9 millones de iconos** en diversos estilos de diseño modernos y clásicos +- **630 000 animaciones profesionales**, incluyendo formatos Lottie y JSON +- **580 000 ilustraciones de alta calidad** para cualquier caso de uso +- **540 000 ilustraciones 3D** para visuales de nueva generación + +Todos los activos están **libres de regalías** y pueden ser utilizados **para fines personales y comerciales** dentro de sus aplicaciones Lowcoder. + +## Integración directa en el editor + +Media Package está completamente integrado en el editor de aplicaciones: +- Búsqueda e inserción directa dentro del panel de propiedades para iconos, imágenes y animaciones Lottie. +- Vistas previas dinámicas de animaciones, iconos, ilustraciones y activos 3D. +- Adaptación automática a su diseño y maquetación. +- Contenido siempre actualizado y cuidadosamente seleccionado. + +### Ejemplo de animación + + + +### Ejemplo de ilustración + + + +## Licenciamiento simplificado + +- Todos los activos están incluidos bajo licencia comercial. +- No se requiere gestión adicional de licencias. + +## Concéntrese en sus apps, no en buscar recursos + +No pierda más horas buscando iconos, ilustraciones o animaciones externas. Cree aplicaciones visualmente impresionantes directamente en Lowcoder — rápido, legal y profesional. + +## Tabla de precios + +| Tipo de usuario | Precio mensual por usuario | +|--------------------|------------------------| +| por usuario (Administrador o Editor de Aplicaciones) al mes<br/>(vinculado al espacio de trabajo seleccionado) | €24.90 | +`, "de": ` - # Medienpaket-Abonnement - - ## Übersicht - - ... (Add German description) - ` +# Lowcoder Premium Media Package Abonnement + +## Übersicht + +**Die Nutzung und der Zugang zu Lowcoder bleiben wie immer kostenlos. Das Media Package Abonnement ist ein zusätzlicher Service und ermöglicht den Zugriff auf eine umfangreiche professionelle Medienbibliothek direkt im App-Editor und in all Ihren Apps.** + +**Media Package** ist ein "pro Benutzer, pro Monat und innerhalb eines einzelnen Workspaces" Abonnement. Das bedeutet, jeder Administrator oder App-Editor (Entwickler), der das Premium Media Package innerhalb eines Workspaces nutzen möchte, benötigt ein aktives Abonnement. Normale App-Viewer (Mitglieder) benötigen selbstverständlich kein Abonnement. + +## Professionelle Visuals freischalten + +Mit dem Premium Media Package erhalten Sie vollen Zugriff auf: + +- **9 Millionen Icons** in diversen modernen und klassischen Designstilen +- **630.000 professionelle Animationen**, inklusive Lottie- und JSON-Formaten +- **580.000 hochwertige Illustrationen** für jeden Anwendungsfall +- **540.000 3D-Illustrationen** für visuelle Apps der nächsten Generation + +Alle Assets sind bereits lizensiert und dürfen **für private und kommerzielle Zwecke** innerhalb Ihrer Lowcoder Apps verwendet werden. + +## Direkte Editor-Integration + +Das Media Package ist nahtlos in den App-Editor integriert: +- Direkte Suche & Einfügen innerhalb des Eigenschaften-Panels für Icons, Bilder und Lottie-Animationen. +- Dynamische Vorschauen von Animationen, Icons, Illustrationen und 3D-Assets. +- Automatische Anpassung an Layout und Design. +- Ständig aktualisierter und kuratierter Inhalt. + +### Beispiel Animation + + + +### Beispiel Illustration + + + +## Vereinfachte Lizenzierung + +- Alle Assets sind unter einer kommerziellen Lizenz enthalten. +- Keine zusätzliche Lizenzverwaltung erforderlich. + +## Fokus auf Ihre Apps, nicht auf die Asset-Suche + +Keine Zeitverschwendung mehr beim Suchen von Icons, Illustrationen oder Animationen extern. Erstellen Sie visuell beeindruckende Apps direkt in Lowcoder — schnell, rechtssicher und professionell. + +## Preistabelle + +| Benutzertyp | Monatlicher Preis pro Benutzer | +|--------------------|------------------------| +| pro Benutzer (Administrator oder App-Editor) pro Monat<br/>(gebunden an den ausgewählten Workspace) | €24.90 | + +` } }; diff --git a/client/packages/lowcoder/src/pages/setting/theme/ThemeCompPanel.tsx b/client/packages/lowcoder/src/pages/setting/theme/ThemeCompPanel.tsx index 99a57434ad..22af429cad 100644 --- a/client/packages/lowcoder/src/pages/setting/theme/ThemeCompPanel.tsx +++ b/client/packages/lowcoder/src/pages/setting/theme/ThemeCompPanel.tsx @@ -30,6 +30,8 @@ import { JSONObject } from "util/jsonTypes"; import PreviewApp from "components/PreviewApp"; import { parseCompType } from "comps/utils/remote"; import { defaultTheme } from "@lowcoder-ee/constants/themeConstants"; +import { useSelector } from "react-redux"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; const CompDiv = styled.div` display: flex; @@ -79,8 +81,10 @@ const IconContain = (props: { isSelected: boolean, }) => { const { Icon, isSelected } = props; + const brandingSettings = useSelector(getBrandingSetting); + return ( - <CompIconDiv $w={64} $h={64} $isSelected={isSelected}> + <CompIconDiv $w={64} $h={64} $isSelected={isSelected} $color={brandingSettings?.config_set?.mainBrandingColor}> <Icon /> </CompIconDiv> ); diff --git a/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx b/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx index ddddfe6a81..3f44b0bcf6 100644 --- a/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx +++ b/client/packages/lowcoder/src/pages/setting/theme/createModal.tsx @@ -98,7 +98,7 @@ function CreateModal(props: CreateModalProp) { onOk={handleOk} okButtonProps={{ disabled: !name || !selectId }} onCancel={handleCancel} - destroyOnClose + destroyOnHidden draggable={true} > <ModalNameDiv> diff --git a/client/packages/lowcoder/src/pages/setting/theme/detail/index.tsx b/client/packages/lowcoder/src/pages/setting/theme/detail/index.tsx index f2ba2dfeeb..476173e912 100644 --- a/client/packages/lowcoder/src/pages/setting/theme/detail/index.tsx +++ b/client/packages/lowcoder/src/pages/setting/theme/detail/index.tsx @@ -7,9 +7,9 @@ import { ThemeType, } from "api/commonSettingApi"; import history from "util/history"; -import { BASE_URL, THEME_SETTING } from "constants/routesURL"; +import { THEME_SETTING } from "constants/routesURL"; import ThemeSettingsSelector, { configChangeParams } from "../../../../components/ThemeSettingsSelector"; -import React, { lazy, useState } from "react"; +import React, { lazy } from "react"; import { connect } from "react-redux"; import { fetchCommonSettings, setCommonSettings } from "redux/reduxActions/commonSettingsActions"; import { AppState } from "redux/reducers"; @@ -21,7 +21,6 @@ import { DetailTitle, ResetButton, SaveButton, - ChartDesc, ChartInput, Footer, Header, @@ -41,7 +40,7 @@ import { HeaderBack } from "pages/setting/permission/styledComponents"; import dsl from "./previewDsl"; import chartDsl from "./chartPreviewDsl"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; -import { Card, Collapse, CollapseProps, Divider, Flex, List, Tooltip } from 'antd'; +import { Card, Divider, Flex, List, Tooltip } from 'antd'; import { ThemeCompPanel } from "pages/setting/theme/ThemeCompPanel"; import { JSONObject } from "@lowcoder-ee/util/jsonTypes"; diff --git a/client/packages/lowcoder/src/pages/setting/theme/themeList.tsx b/client/packages/lowcoder/src/pages/setting/theme/themeList.tsx index 328dcf6d6a..fe1e5ed314 100644 --- a/client/packages/lowcoder/src/pages/setting/theme/themeList.tsx +++ b/client/packages/lowcoder/src/pages/setting/theme/themeList.tsx @@ -160,7 +160,7 @@ function ThemeList(props: ThemeListProp) { <Dropdown trigger={["click"]} getPopupContainer={() => document.getElementById("theme-list-table")!} - dropdownRender={() => ( + popupRender={() => ( <Menu onClick={(params) => { if (params.key !== MENU_TYPE.RENAME) { diff --git a/client/packages/lowcoder/src/pages/support/supportDetail.tsx b/client/packages/lowcoder/src/pages/support/supportDetail.tsx index 8048c0ae67..363f4856c1 100644 --- a/client/packages/lowcoder/src/pages/support/supportDetail.tsx +++ b/client/packages/lowcoder/src/pages/support/supportDetail.tsx @@ -13,9 +13,12 @@ import { SUPPORT_URL } from "constants/routesURL"; import { TacoMarkDown } from "lowcoder-design"; import remarkGfm from 'remark-gfm'; import { contrastColor } from "comps/controls/styleControlConstants"; -import ReactQuill from 'react-quill'; -import 'react-quill/dist/quill.snow.css'; +import 'react-quill-new/dist/quill.snow.css'; import { useCurrentUser } from "util/currentUser"; +import React from "react"; + +const ReactQuillEditor = React.lazy(() => import("react-quill-new")); + const { Title, Text } = Typography; const { TextArea } = Input; @@ -455,7 +458,7 @@ export function SupportDetail() { value={newDescription} onChange={(e) => setNewDescription(e.target.value)} /> */} - <ReactQuill + <ReactQuillEditor theme="snow" value={newDescription} onChange={setNewDescription} diff --git a/client/packages/lowcoder/src/pages/support/supportOverview.tsx b/client/packages/lowcoder/src/pages/support/supportOverview.tsx index 8180dafdf1..44a12eb541 100644 --- a/client/packages/lowcoder/src/pages/support/supportOverview.tsx +++ b/client/packages/lowcoder/src/pages/support/supportOverview.tsx @@ -11,14 +11,16 @@ import { Avatar, Flex, Tooltip } from "antd"; import { buildSupportTicketLink } from "constants/routesURL"; import history from "util/history"; import { Input } from "antd"; -import ReactQuill from "react-quill"; -import 'react-quill/dist/quill.snow.css'; +import 'react-quill-new/dist/quill.snow.css'; import { Spin } from "antd"; import LoadingOutlined from "@ant-design/icons/LoadingOutlined"; import { useSimpleSubscriptionContext } from "@lowcoder-ee/util/context/SimpleSubscriptionContext"; import { SubscriptionProductsEnum } from '@lowcoder-ee/constants/subscriptionConstants'; import { getDeploymentId } from "@lowcoder-ee/redux/selectors/configSelectors"; import { useSelector } from "react-redux"; +import React from "react"; + +const ReactQuillEditor = React.lazy(() => import("react-quill-new")); const SupportWrapper = styled.div` display: flex; @@ -243,7 +245,7 @@ export function SupportOverview() { open={isCreateFormShow} onCancel={() => showCreateForm(false)} activeStepKey={"type"} - destroyOnClose={true} + destroyOnHidden={true} width="888px" steps={[ { @@ -268,7 +270,7 @@ export function SupportOverview() { <div> <div style={{ marginBottom: '16px' }}>{trans("support.createTicketDescriptionTitle")}</div> </div> - <ReactQuill + <ReactQuillEditor style={{ height: '200px'}} value={description} onChange={setDescription} diff --git a/client/packages/lowcoder/src/pages/tutorials/tutorialsConstant.tsx b/client/packages/lowcoder/src/pages/tutorials/tutorialsConstant.tsx index 147327178c..718ebef993 100644 --- a/client/packages/lowcoder/src/pages/tutorials/tutorialsConstant.tsx +++ b/client/packages/lowcoder/src/pages/tutorials/tutorialsConstant.tsx @@ -26,6 +26,7 @@ export const defaultJoyrideFloaterProps: FloaterType = { filter: "unset", }, }, + content: "" }; export type UserGuideLocationState = { diff --git a/client/packages/lowcoder/src/pages/userAuth/authComponents.tsx b/client/packages/lowcoder/src/pages/userAuth/authComponents.tsx index 9c2b8eb347..c468bbab4a 100644 --- a/client/packages/lowcoder/src/pages/userAuth/authComponents.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/authComponents.tsx @@ -1,5 +1,5 @@ import { CheckboxChangeEvent } from "antd/es/checkbox"; -import React, { CSSProperties, useRef } from "react"; +import React, { CSSProperties, ReactNode, useMemo, useRef } from "react"; import { CheckBox, PackUpIcon, TacoButton } from "lowcoder-design"; import { Link } from "react-router-dom"; import styled from "styled-components"; @@ -7,43 +7,86 @@ import ReactHotkeys from "util/hotkeys"; import { StyledLink } from "pages/common/styledComponent"; import { trans } from "i18n"; import { favicon } from "assets/images"; +import { Col, Row, Typography } from "antd"; +import { getBrandingSetting } from "@lowcoder-ee/redux/selectors/enterpriseSelectors"; +import { useSelector } from "react-redux"; +import { buildMaterialPreviewURL } from "@lowcoder-ee/util/materialUtils"; +import { isEmpty } from "lodash"; + +const StyledBrandingColumn = styled(Col)<{$bgImage?: string | null}>` + background-color: rgb(234, 234, 234); + background-image: url(${props => props.$bgImage}); + background-size: cover; + background-repeat: no-repeat; + padding: 28px 36px; + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; +`; + +const StyledBrandingText = styled(Typography.Title)` + font-size: 24px !important; + color: black !important; + padding: 20px; + background-color: rgb(234, 234, 234); + border-radius: 10px; + + text-align: center; + + @media screen and (max-width: 640px) { + font-size: 34px !important; + } +`; + +const StyledRightColumn = styled(Col)` + padding: 28px 36px; + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; +`; -const AuthCardContainer = styled.div` +const AuthCardContainer = styled.div<{$isEE?: boolean}>` display: flex; flex-direction: column; align-items: center; - min-height: 100vh; + // min-height: 100vh; height: 100%; background-size: 100% 100%; `; -const AuthCard = styled.div` +const AuthCard = styled.div<{$isEE?: boolean}>` display: flex; flex-direction: column; - width: 480px; + width: ${props => props.$isEE ? '850px' : '480px'}; + max-width: 90%; background: #ffffff; box-shadow: 0 0 20px 20px rgba(246, 248, 250, 0.85); border-radius: 16px; - padding: 28px 36px; - margin-top: 40px; + padding: ${props => props.$isEE ? '0px' : '28px 36px'}; + margin-top: ${props => props.$isEE ? '13vh': '40px'}; + overflow: hidden; @media screen and (max-width: 640px) { margin: 32px 18px 18px 18px; width: calc(100vw - 36px); - padding: 32px 24px; + padding: ${props => props.$isEE ? '0px' : '32px 24px'}; } `; -const AuthCardHeading = styled.div<{ $type?: string }>` +const AuthCardHeading = styled.div<{ $type?: string, $isEE?: boolean }>` font-weight: 600; font-size: 28px; color: #222222; line-height: 28px; - margin-top: 13vh; + text-align: center; + margin-bottom: ${props => props.$isEE ? '28px': '0'}; + margin-top: ${props => props.$isEE ? '0': '13vh'}; @media screen and (min-height: 700px) { - margin-top: 107px; + margin-top: ${props => props.$isEE ? '0': '107px'}; } @media screen and (max-height: 700px) { - margin-top: 47px; + margin-top: ${props => props.$isEE ? '0': '47px'}; } @media screen and (max-width: 640px) { font-size: 23px; @@ -136,22 +179,83 @@ const StyledConfirmButton = styled(TacoButton)` transition: unset; `; +const BrandingWrapper = (props: { + isEE?: boolean; + children: ReactNode; +}) => { + const brandingSettings = useSelector(getBrandingSetting); + const brandingImage = useMemo(() => { + const imageUrl = brandingSettings?.config_set?.signUpPageImage || ''; + // if (Boolean(brandingSettings?.orgId)) { + // return buildMaterialPreviewURL(imageUrl); + // } + return imageUrl; + }, [brandingSettings?.orgId, brandingSettings?.config_set?.signUpPageImage]); + const brandingText = brandingSettings?.config_set?.signUpPageText; + + if (!props.isEE) { + return <>{props.children}</> + } + + return ( + <> + + <Row style={{ minHeight: '500px' }}> + <StyledBrandingColumn md={12} sm={24} $bgImage={brandingImage}> + {brandingText && ( + <StyledBrandingText> + {brandingText} + </StyledBrandingText> + )} + </StyledBrandingColumn> + <StyledRightColumn md={12} sm={24}> + {props.children} + </StyledRightColumn> + </Row> + </> + ) +} + export const AuthContainer = (props: { children: any; heading?: string; subHeading?: string; type?: string + isEE?: boolean; + orgId?: string; }) => { + const brandingSettings = useSelector(getBrandingSetting); + + const showEEBranding = useMemo(() => { + return props.isEE && !isEmpty(brandingSettings); + }, [props.isEE, brandingSettings]); + return ( - <AuthCardContainer> - <AuthCardHeading - $type={props.type} - > - {props.heading || ""} - </AuthCardHeading> - - <AuthCard>{props.children}</AuthCard> - { props.subHeading && ( + <AuthCardContainer $isEE={showEEBranding}> + {!showEEBranding && ( + <AuthCardHeading + $type={props.type} + $isEE={showEEBranding} + > + {props.heading || ""} + </AuthCardHeading> + )} + <AuthCard $isEE={showEEBranding}> + <BrandingWrapper + isEE={showEEBranding} + > + {showEEBranding && ( + <AuthCardHeading + $type={props.type} + $isEE={showEEBranding} + > + {props.heading || ""} + </AuthCardHeading> + )} + {props.children} + </BrandingWrapper> + </AuthCard> + { props.subHeading && !showEEBranding && ( <AuthCardSubFooter> <img src={favicon} alt={"Lowcoder | " + trans("productDesc")} width="20px"/> <a href="https://lowcoder.cloud" target="_blank" rel="noreferrer"> diff --git a/client/packages/lowcoder/src/pages/userAuth/formLoginAdmin.tsx b/client/packages/lowcoder/src/pages/userAuth/formLoginAdmin.tsx index 596369d36b..16cd72ad39 100644 --- a/client/packages/lowcoder/src/pages/userAuth/formLoginAdmin.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/formLoginAdmin.tsx @@ -31,6 +31,13 @@ export default function FormLogin(props: FormLoginProps) { const [password, setPassword] = useState(""); const { fetchUserAfterAuthSuccess } = useContext(AuthContext); + const afterLoginSuccess = () => { + if (props.organizationId) { + localStorage.setItem("lowcoder_login_orgId", props.organizationId); + } + fetchUserAfterAuthSuccess?.(); + } + const { onSubmit, loading } = useAuthSubmit( () => UserApi.formLogin({ @@ -42,7 +49,7 @@ export default function FormLogin(props: FormLoginProps) { }), false, null, - fetchUserAfterAuthSuccess, + afterLoginSuccess, ); return ( diff --git a/client/packages/lowcoder/src/pages/userAuth/formLoginSteps.tsx b/client/packages/lowcoder/src/pages/userAuth/formLoginSteps.tsx index aced446bd9..9b88b019cf 100644 --- a/client/packages/lowcoder/src/pages/userAuth/formLoginSteps.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/formLoginSteps.tsx @@ -4,7 +4,7 @@ import { ConfirmButton, StyledRouteLink, } from "pages/userAuth/authComponents"; -import React, { useContext, useEffect, useState } from "react"; +import React, { useContext, useEffect, useMemo, useState } from "react"; import styled from "styled-components"; import UserApi from "api/userApi"; import { useRedirectUrl } from "util/hooks"; @@ -19,7 +19,7 @@ import { Divider } from "antd"; import Flex from "antd/es/flex"; import { validateResponse } from "@lowcoder-ee/api/apiUtils"; import OrgApi from "@lowcoder-ee/api/orgApi"; -import { AccountLoginWrapper } from "./formLoginAdmin"; +import FormLogin, { AccountLoginWrapper } from "./formLoginAdmin"; import { default as Button } from "antd/es/button"; import LeftOutlined from "@ant-design/icons/LeftOutlined"; import { fetchConfigAction } from "@lowcoder-ee/redux/reduxActions/configActions"; @@ -28,6 +28,9 @@ import history from "util/history"; import { getServerSettings } from "@lowcoder-ee/redux/selectors/applicationSelector"; import {fetchOrgPaginationByEmail} from "@lowcoder-ee/util/pagination/axios"; import PaginationComp from "@lowcoder-ee/util/pagination/Pagination"; +import { getSystemConfigFetching } from "@lowcoder-ee/redux/selectors/configSelectors"; +import Spin from "antd/es/spin"; +import LoadingOutlined from "@ant-design/icons/LoadingOutlined"; const StyledCard = styled.div<{$selected: boolean}>` display: flex; @@ -107,18 +110,28 @@ export default function FormLoginSteps(props: FormLoginProps) { const { systemConfig, inviteInfo, fetchUserAfterAuthSuccess } = useContext(AuthContext); const invitationId = inviteInfo?.invitationId; const authId = systemConfig?.form.id; - const isFormLoginEnabled = systemConfig?.form.enableLogin; + const isFormLoginEnabled = systemConfig?.form.enableLogin; // check from configs const [orgLoading, setOrgLoading] = useState(false); const [orgList, setOrgList] = useState<OrgItem[]>([]); const [currentStep, setCurrentStep] = useState<CurrentStepEnum>(CurrentStepEnum.EMAIL); const [organizationId, setOrganizationId] = useState<string|undefined>(props.organizationId); const [skipWorkspaceStep, setSkipWorkspaceStep] = useState<boolean>(false); const [signupEnabled, setSignupEnabled] = useState<boolean>(true); + const [signinEnabled, setSigninEnabled] = useState<boolean>(true); // check from server settings const serverSettings = useSelector(getServerSettings); + const isFetchingConfig = useSelector(getSystemConfigFetching); const [elements, setElements] = useState<ElementsState>({ elements: [], total: 0 }); const [currentPage, setCurrentPage] = useState(1); const [pageSize, setPageSize] = useState(10); + const isEmailLoginEnabled = useMemo(() => { + return isFormLoginEnabled && signinEnabled; + }, [isFormLoginEnabled, signinEnabled]); + + const isEnterpriseMode = useMemo(() => { + return serverSettings?.LOWCODER_WORKSPACE_MODE === "ENTERPRISE" || serverSettings?.LOWCODER_WORKSPACE_MODE === "SINGLEWORKSPACE"; + }, [serverSettings]); + useEffect(() => { if (account) fetchOrgPaginationByEmail({ @@ -133,13 +146,23 @@ export default function FormLoginSteps(props: FormLoginProps) { }, [pageSize, currentPage]) useEffect(() => { - const { LOWCODER_EMAIL_SIGNUP_ENABLED } = serverSettings; - if (!LOWCODER_EMAIL_SIGNUP_ENABLED) { - return setSignupEnabled(true); - } + const { + LOWCODER_EMAIL_SIGNUP_ENABLED, + LOWCODER_EMAIL_AUTH_ENABLED, + } = serverSettings; + setSignupEnabled(LOWCODER_EMAIL_SIGNUP_ENABLED === 'true'); + setSigninEnabled(LOWCODER_EMAIL_AUTH_ENABLED === 'true'); }, [serverSettings]); + const afterLoginSuccess = () => { + // used invitation link or organization login url then set cookie + if (props.organizationId && !isEnterpriseMode) { + localStorage.setItem("lowcoder_login_orgId", props.organizationId); + } + fetchUserAfterAuthSuccess?.(); + } + const { onSubmit, loading } = useAuthSubmit( () => UserApi.formLogin({ @@ -153,7 +176,7 @@ export default function FormLoginSteps(props: FormLoginProps) { }), false, redirectUrl, - fetchUserAfterAuthSuccess, + afterLoginSuccess, ); const fetchOrgsByEmail = () => { @@ -161,14 +184,14 @@ export default function FormLoginSteps(props: FormLoginProps) { // and skip workspace selection step if (Boolean(organizationId)) { setSkipWorkspaceStep(true); - dispatch(fetchConfigAction(organizationId)); setCurrentStep(CurrentStepEnum.AUTH_PROVIDERS); return; } setOrgLoading(true); + // for enterprise mode, we will not ask for email in first step fetchOrgPaginationByEmail({ - email: account, + email: isEnterpriseMode ? ' ' : account, pageNum: currentPage, pageSize: pageSize }) @@ -177,15 +200,13 @@ export default function FormLoginSteps(props: FormLoginProps) { setElements({elements: resp.data || [], total: resp.total || 1}) setOrgList(resp.data); if (!resp.data.length) { - history.push( - AUTH_REGISTER_URL, - {...location.state || {}, email: account}, - ) - return; + throw new Error(trans("userAuth.userNotFound")); } if (resp.data.length === 1) { - setOrganizationId(resp.data[0].orgId); - dispatch(fetchConfigAction(resp.data[0].orgId)); + // in Enterprise mode, we will get org data in different format + const selectedOrgId = resp.data[0]?.id || resp.data[0]?.orgId; + setOrganizationId(selectedOrgId); + dispatch(fetchConfigAction(selectedOrgId)); setCurrentStep(CurrentStepEnum.AUTH_PROVIDERS); return; } @@ -202,6 +223,44 @@ export default function FormLoginSteps(props: FormLoginProps) { }); } + useEffect(() => { + if (isEnterpriseMode) { + fetchOrgsByEmail(); + } + }, [isEnterpriseMode]); + + useEffect(() => { + if (Boolean(props.organizationId)) { + fetchOrgsByEmail(); + } + }, [props.organizationId]); + + if (isEnterpriseMode || Boolean(props.organizationId)) { + return ( + <Spin indicator={<LoadingOutlined style={{ fontSize: 30 }} />} spinning={isFetchingConfig}> + { isEmailLoginEnabled && <FormLogin organizationId={props.organizationId} /> } + <ThirdPartyAuth + invitationId={invitationId} + invitedOrganizationId={organizationId} + authGoal="login" + /> + {(isEmailLoginEnabled && signupEnabled) && ( + <> + <Divider/> + <AuthBottomView> + <StyledRouteLink to={{ + pathname: props.organizationId ? `/org/${props.organizationId}/auth/register` : AUTH_REGISTER_URL, + state: {...location.state || {}, email: account} + }}> + {trans("userAuth.register")} + </StyledRouteLink> + </AuthBottomView> + </> + )} + </Spin> + ); + } + if(currentStep === CurrentStepEnum.EMAIL) { return ( <> @@ -227,8 +286,8 @@ export default function FormLoginSteps(props: FormLoginProps) { <Divider/> <AuthBottomView> <StyledRouteLink to={{ - pathname: AUTH_REGISTER_URL, - state: location.state + pathname: props.organizationId ? `/org/${props.organizationId}/auth/register` : AUTH_REGISTER_URL, + state: {...location.state || {}, email: account} }}> {trans("userAuth.register")} </StyledRouteLink> @@ -280,10 +339,10 @@ export default function FormLoginSteps(props: FormLoginProps) { }} /> <StepHeader title={ - isFormLoginEnabled ? trans("userAuth.enterPassword") : trans("userAuth.selectAuthProvider") + isEmailLoginEnabled ? trans("userAuth.enterPassword") : trans("userAuth.selectAuthProvider") } /> - {isFormLoginEnabled && ( + {isEmailLoginEnabled && ( <> <PasswordInput className="form-input password-input" @@ -315,7 +374,7 @@ export default function FormLoginSteps(props: FormLoginProps) { /> )} </AccountLoginWrapper> - {isFormLoginEnabled && signupEnabled && ( + {isEmailLoginEnabled && signupEnabled && ( <> <Divider/> <AuthBottomView> diff --git a/client/packages/lowcoder/src/pages/userAuth/index.tsx b/client/packages/lowcoder/src/pages/userAuth/index.tsx index d33b48fdec..93255e124d 100644 --- a/client/packages/lowcoder/src/pages/userAuth/index.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/index.tsx @@ -12,6 +12,7 @@ import { fetchUserAction } from "redux/reduxActions/userActions"; import LoginAdmin from "./loginAdmin"; import _ from "lodash"; import {LoadingBarHideTrigger} from "@lowcoder-ee/util/hideLoading"; +import { fetchBrandingSetting } from "@lowcoder-ee/redux/reduxActions/enterpriseActions"; export default function UserAuth() { const dispatch = useDispatch(); const location = useLocation<AuthLocationState>(); @@ -29,6 +30,9 @@ export default function UserAuth() { useEffect(() => { if(organizationId) { dispatch(fetchConfigAction(organizationId)); + dispatch(fetchBrandingSetting({orgId: organizationId, fallbackToGlobal: true})); + } else { + dispatch(fetchBrandingSetting({orgId: ''})); } }, [organizationId, dispatch]) diff --git a/client/packages/lowcoder/src/pages/userAuth/login.tsx b/client/packages/lowcoder/src/pages/userAuth/login.tsx index bad5349099..acc36e234e 100644 --- a/client/packages/lowcoder/src/pages/userAuth/login.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/login.tsx @@ -10,6 +10,7 @@ import { AuthContext, getLoginTitle } from "pages/userAuth/authUtils"; import styled from "styled-components"; import { requiresUnAuth } from "pages/userAuth/authHOC"; import FormLoginSteps from "./formLoginSteps"; +import { useEnterpriseContext } from "@lowcoder-ee/util/context/EnterpriseContext"; const ThirdAuthWrapper = styled.div` display: flex; @@ -85,6 +86,7 @@ export const ThirdPartyBindCard = () => { // this is the classic Sign In function Login() { const { inviteInfo, systemConfig, thirdPartyAuthError } = useContext(AuthContext); + const { isEnterpriseActive } = useEnterpriseContext(); const invitationId = inviteInfo?.invitationId; const location = useLocation(); const queryParams = new URLSearchParams(location.search); @@ -143,6 +145,7 @@ function Login() { <AuthContainer heading={loginHeading} subHeading={loginSubHeading} + isEE={isEnterpriseActive} > <FormLoginSteps organizationId={organizationId} /> </AuthContainer> diff --git a/client/packages/lowcoder/src/pages/userAuth/register.tsx b/client/packages/lowcoder/src/pages/userAuth/register.tsx index 62bd7f7c2c..2a0f3386dd 100644 --- a/client/packages/lowcoder/src/pages/userAuth/register.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/register.tsx @@ -26,8 +26,11 @@ import { validateResponse } from "@lowcoder-ee/api/apiUtils"; import history from "util/history"; import LoadingOutlined from "@ant-design/icons/LoadingOutlined"; import Spin from "antd/es/spin"; -import { useSelector } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import { getServerSettings } from "@lowcoder-ee/redux/selectors/applicationSelector"; +import { useEnterpriseContext } from "@lowcoder-ee/util/context/EnterpriseContext"; +import { fetchConfigAction } from "@lowcoder-ee/redux/reduxActions/configActions"; +import { fetchOrgPaginationByEmail } from "@lowcoder-ee/util/pagination/axios"; const StyledFormInput = styled(FormInput)` margin-bottom: 16px; @@ -45,6 +48,7 @@ const RegisterContent = styled(FormWrapperMobile)` function UserRegister() { const location = useLocation(); + const dispatch = useDispatch(); const [submitBtnDisable, setSubmitBtnDisable] = useState(false); const [account, setAccount] = useState(() => { const { email } = (location.state || {}) as any; @@ -53,21 +57,70 @@ function UserRegister() { const [password, setPassword] = useState(""); const [orgLoading, setOrgLoading] = useState(false); const [lastEmailChecked, setLastEmailChecked] = useState(""); + const [signupEnabled, setSignupEnabled] = useState<boolean>(true); + const [signinEnabled, setSigninEnabled] = useState<boolean>(true); + const [defaultOrgId, setDefaultOrgId] = useState<string|undefined>(); const redirectUrl = useRedirectUrl(); + const serverSettings = useSelector(getServerSettings); const { systemConfig, inviteInfo, fetchUserAfterAuthSuccess } = useContext(AuthContext); + const { isEnterpriseActive } = useEnterpriseContext(); const invitationId = inviteInfo?.invitationId; - + const isFormLoginEnabled = systemConfig ? systemConfig?.form.enableLogin : true; + const authId = systemConfig?.form.id; const orgId = useParams<any>().orgId; + const organizationId = useMemo(() => { if(inviteInfo?.invitedOrganizationId) { return inviteInfo?.invitedOrganizationId; } - return orgId; - }, [ inviteInfo, orgId ]) + if (orgId) { + return orgId; + } + return defaultOrgId; + }, [ inviteInfo, orgId, defaultOrgId ]); - const authId = systemConfig?.form.id; + const isEmailLoginEnabled = useMemo(() => { + return isFormLoginEnabled && signinEnabled; + }, [isFormLoginEnabled, signinEnabled]); - const serverSettings = useSelector(getServerSettings); + const isEnterpriseMode = useMemo(() => { + return serverSettings?.LOWCODER_WORKSPACE_MODE === "ENTERPRISE" || serverSettings?.LOWCODER_WORKSPACE_MODE === "SINGLEWORKSPACE"; + }, [serverSettings]); + + useEffect(() => { + const { + LOWCODER_EMAIL_SIGNUP_ENABLED, + LOWCODER_EMAIL_AUTH_ENABLED, + } = serverSettings; + + setSignupEnabled(LOWCODER_EMAIL_SIGNUP_ENABLED === 'true'); + setSigninEnabled(LOWCODER_EMAIL_AUTH_ENABLED === 'true'); + }, [serverSettings]); + + const fetchOrgsByEmail = () => { + fetchOrgPaginationByEmail({ + email: ' ', + pageNum: 1, + pageSize: 10, + }) + .then((resp) => { + if (resp.success) { + const orgList = resp.data || []; + if (orgList.length) { + // in Enterprise mode, we will get org data in different format + const selectedOrgId = orgList[0]?.id || orgList[0]?.orgId; + setDefaultOrgId(selectedOrgId); + dispatch(fetchConfigAction(selectedOrgId)); + } + } + }) + } + + useEffect(() => { + if (isEnterpriseMode) { + fetchOrgsByEmail(); + } + }, [isEnterpriseMode]); useEffect(() => { const { LOWCODER_EMAIL_SIGNUP_ENABLED } = serverSettings; @@ -82,6 +135,14 @@ function UserRegister() { }; }, [serverSettings]); + const afterLoginSuccess = () => { + // used invitation link or organization login url then set cookie + if (organizationId && !isEnterpriseMode) { + localStorage.setItem("lowcoder_login_orgId", organizationId); + } + fetchUserAfterAuthSuccess?.(); + } + const { loading, onSubmit } = useAuthSubmit( () => UserApi.formLogin({ @@ -95,11 +156,11 @@ function UserRegister() { }), false, redirectUrl, - fetchUserAfterAuthSuccess, + afterLoginSuccess, ); const checkEmailExist = () => { - if (!Boolean(account.length) || lastEmailChecked === account) return; + if (!Boolean(account.length) || lastEmailChecked === account || isEnterpriseMode) return; setOrgLoading(true); OrgApi.fetchOrgsByEmail(account) @@ -130,37 +191,42 @@ function UserRegister() { heading={registerHeading} subHeading={registerSubHeading} type="large" + isEE={isEnterpriseActive} > <RegisterContent> - <StyledFormInput - className="form-input" - label={trans("userAuth.email")} - defaultValue={account} - onChange={(value, valid) => setAccount(valid ? value : "")} - onBlur={checkEmailExist} - placeholder={trans("userAuth.inputEmail")} - checkRule={{ - check: checkEmailValid, - errorMsg: trans("userAuth.inputValidEmail"), - }} - /> - <StyledPasswordInput - className="form-input" - passInputConf={{label:trans("password.label"), placeholder: trans("password.placeholder")}} - confirmPassConf={{label:trans("password.conformLabel"), placeholder: trans("password.conformPlaceholder")}} - valueCheck={checkPassWithMsg} - onChange={(value, valid) => setPassword(valid ? value : "")} - doubleCheck - /> - <ConfirmButton - disabled={!account || !password || submitBtnDisable} - onClick={onSubmit} - loading={loading} - > - {trans("userAuth.register")} - </ConfirmButton> - <TermsAndPrivacyInfo onCheckChange={(e) => setSubmitBtnDisable(!e.target.checked)} /> - {organizationId && ( + { isEmailLoginEnabled && ( + <> + <StyledFormInput + className="form-input" + label={trans("userAuth.email")} + defaultValue={account} + onChange={(value, valid) => setAccount(valid ? value : "")} + onBlur={checkEmailExist} + placeholder={trans("userAuth.inputEmail")} + checkRule={{ + check: checkEmailValid, + errorMsg: trans("userAuth.inputValidEmail"), + }} + /> + <StyledPasswordInput + className="form-input" + passInputConf={{label:trans("password.label"), placeholder: trans("password.placeholder")}} + confirmPassConf={{label:trans("password.conformLabel"), placeholder: trans("password.conformPlaceholder")}} + valueCheck={checkPassWithMsg} + onChange={(value, valid) => setPassword(valid ? value : "")} + doubleCheck + /> + <ConfirmButton + disabled={!account || !password || submitBtnDisable} + onClick={onSubmit} + loading={loading} + > + {trans("userAuth.register")} + </ConfirmButton> + <TermsAndPrivacyInfo onCheckChange={(e) => setSubmitBtnDisable(!e.target.checked)} /> + </> + )} + {(organizationId || isEnterpriseMode) && ( <ThirdPartyAuth invitationId={invitationId} invitedOrganizationId={organizationId} @@ -168,14 +234,18 @@ function UserRegister() { /> )} </RegisterContent> - <Divider/> - <StyledRouteLinkLogin to={{ - pathname: orgId - ? ORG_AUTH_LOGIN_URL.replace(':orgId', orgId) - : AUTH_LOGIN_URL, - state: location.state - }}>{trans("userAuth.userLogin")} - </StyledRouteLinkLogin> + {isEmailLoginEnabled && ( + <> + <Divider/> + <StyledRouteLinkLogin to={{ + pathname: orgId + ? ORG_AUTH_LOGIN_URL.replace(':orgId', orgId) + : AUTH_LOGIN_URL, + state: location.state + }}>{trans("userAuth.userLogin")} + </StyledRouteLinkLogin> + </> + )} </AuthContainer> </Spin> ); diff --git a/client/packages/lowcoder/src/pages/userAuth/thirdParty/thirdPartyAuth.tsx b/client/packages/lowcoder/src/pages/userAuth/thirdParty/thirdPartyAuth.tsx index 189afe5737..ffa4fa1d40 100644 --- a/client/packages/lowcoder/src/pages/userAuth/thirdParty/thirdPartyAuth.tsx +++ b/client/packages/lowcoder/src/pages/userAuth/thirdParty/thirdPartyAuth.tsx @@ -5,10 +5,10 @@ import { } from "constants/authConstants"; import { WhiteLoading } from "lowcoder-design"; import history from "util/history"; -import { LoginLogoStyle, LoginLabelStyle, StyledLoginButton } from "pages/userAuth/authComponents"; +import { LoginLogoStyle, LoginLabelStyle, StyledLoginButton, TermsAndPrivacyInfo } from "pages/userAuth/authComponents"; import { useSelector } from "react-redux"; import { getSystemConfigFetching, selectSystemConfig } from "redux/selectors/configSelectors"; -import React from "react"; +import React, { useMemo, useState } from "react"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; import styled from "styled-components"; import { trans } from "i18n"; @@ -19,6 +19,7 @@ import { useRedirectUrl } from "util/hooks"; import { MultiIconDisplay } from "../../../comps/comps/multiIconDisplay"; import Spin from "antd/es/spin"; import { LoadingOutlined } from "@ant-design/icons"; +import { getServerSettings } from "@lowcoder-ee/redux/selectors/applicationSelector"; const { Text } = Typography; @@ -39,6 +40,7 @@ function ThirdPartyLoginButton(props: { autoJump?: boolean; authGoal: ThirdPartyAuthGoal; label: string; + disabled?: boolean; }) { const { config, label } = props; const loginRedirectUrl = useRedirectUrl(); @@ -92,7 +94,7 @@ function ThirdPartyLoginButton(props: { : `Sign in with ${label}`; return ( - <StyledLoginButton buttonType="normal" onClick={onLoginClick}> + <StyledLoginButton buttonType="normal" onClick={onLoginClick} disabled={props.disabled}> {config.icon && <MultiIconDisplay identifier={config.icon} width="20px" height="20px" style={{ marginRight: "20px", flexShrink: 0, color: "#000" }} />} {!config.icon && <LoginLogoStyle alt={config.name} src={config.logo} title={config.name} />} <LoginLabelStyle className="auth-label"> @@ -111,7 +113,17 @@ export function ThirdPartyAuth(props: { }) { const systemConfigFetching = useSelector(getSystemConfigFetching); const systemConfig = useSelector(selectSystemConfig); + const serverSettings = useSelector(getServerSettings); const isFormLoginEnabled = systemConfig?.form.enableLogin; + const [disableButtons, setDisableButtons] = useState(false); + + const isEmailLoginEnabled = useMemo(() => { + return isFormLoginEnabled && serverSettings.LOWCODER_EMAIL_AUTH_ENABLED === 'true'; + }, [isFormLoginEnabled, serverSettings]); + + const isEmailSignupEnabled = useMemo(() => { + return serverSettings.LOWCODER_EMAIL_SIGNUP_ENABLED === 'true'; + }, [serverSettings]); if (systemConfigFetching) { return <Spin indicator={<LoadingOutlined style={{ fontSize: 15, marginTop: '16px' }} spin />} />; @@ -135,17 +147,24 @@ export function ThirdPartyAuth(props: { invitationId={props.invitationId} invitedOrganizationId={props.invitedOrganizationId} label={props.labelFormatter ? props.labelFormatter(config.name) : config.name} + disabled={disableButtons} /> ); }); return ( <ThirdPartyLoginButtonWrapper> - { isFormLoginEnabled && Boolean(socialLoginButtons.length) && ( + { ( + (isEmailLoginEnabled && props.authGoal === 'login') + || (isEmailLoginEnabled && isEmailSignupEnabled && props.authGoal === 'register') + ) && Boolean(socialLoginButtons.length) && ( <Divider plain> <Text type="secondary">or</Text> </Divider> )} {socialLoginButtons} + {!isFormLoginEnabled && ( + <TermsAndPrivacyInfo onCheckChange={(e) => setDisableButtons(!e.target.checked)} /> + )} </ThirdPartyLoginButtonWrapper> ); } diff --git a/client/packages/lowcoder/src/redux/reducers/index.tsx b/client/packages/lowcoder/src/redux/reducers/index.tsx index efe52033b6..821c84c945 100644 --- a/client/packages/lowcoder/src/redux/reducers/index.tsx +++ b/client/packages/lowcoder/src/redux/reducers/index.tsx @@ -14,6 +14,7 @@ import { combineReducers } from "redux"; import npmPluginReducer, { NPMPluginState } from "./npmPluginReducers"; import jsLibraryReducers, { JSLibraryState } from "./jsLibraryReducers"; import { SubscriptionsReduxState } from "./uiReducers/subscriptionReducer"; +import { EnterpriseReduxState } from "./uiReducers/enterpriseReducer"; export interface AppState { ui: { @@ -25,6 +26,7 @@ export interface AppState { config: ConfigState; commonSettings: CommonSettingsState; subscriptions: SubscriptionsReduxState; + enterprise: EnterpriseReduxState; }; entities: { datasource: DatasourceDataState; diff --git a/client/packages/lowcoder/src/redux/reducers/uiReducers/enterpriseReducer.ts b/client/packages/lowcoder/src/redux/reducers/uiReducers/enterpriseReducer.ts new file mode 100644 index 0000000000..83ac8cd7c3 --- /dev/null +++ b/client/packages/lowcoder/src/redux/reducers/uiReducers/enterpriseReducer.ts @@ -0,0 +1,72 @@ +import { BrandingConfig, BrandingSettingResponse, EnterpriseLicenseResponse } from "@lowcoder-ee/api/enterpriseApi"; +import { createReducer } from "@lowcoder-ee/util/reducerUtils"; +import { ReduxAction, ReduxActionTypes } from "constants/reduxActionConstants"; +import { Environment } from "pages/setting/environments/types/environment.types"; +export interface EnterpriseReduxState { + enterprise: EnterpriseLicenseResponse, + globalBranding?: BrandingConfig, + workspaceBranding?: BrandingConfig, + environments: Environment[], + environmentsLoading: boolean, + environmentsError: string | null, +} + +const initialState: EnterpriseReduxState = { + enterprise: { + eeActive: false, + remainingAPICalls: 0, + eeLicenses: [], + }, + environments: [], + environmentsLoading: false, + environmentsError: null, +}; + +const enterpriseReducer = createReducer(initialState, { + [ReduxActionTypes.SET_ENTERPRISE_LICENSE]: ( + state: EnterpriseReduxState, + action: ReduxAction<EnterpriseLicenseResponse> + ) => ({ + ...state, + enterprise: action.payload, + }), + [ReduxActionTypes.SET_GLOBAL_BRANDING_SETTING]: ( + state: EnterpriseReduxState, + action: ReduxAction<BrandingSettingResponse> + ) => ({ + ...state, + globalBranding: action.payload, + }), + [ReduxActionTypes.SET_WORKSPACE_BRANDING_SETTING]: ( + state: EnterpriseReduxState, + action: ReduxAction<BrandingSettingResponse> + ) => ({ + ...state, + workspaceBranding: action.payload, + }), + + [ReduxActionTypes.FETCH_ENVIRONMENTS]: ( + state: EnterpriseReduxState + ) => ({ + ...state, + environmentsLoading: true, + }), + [ReduxActionTypes.FETCH_ENVIRONMENTS_SUCCESS]: ( + state: EnterpriseReduxState, + action: ReduxAction<Environment[]> + ) => ({ + ...state, + environments: action.payload, + environmentsLoading: false, + }), + [ReduxActionTypes.FETCH_ENVIRONMENTS_FAILURE]: ( + state: EnterpriseReduxState, + action: ReduxAction<string> + ) => ({ + ...state, + environmentsLoading: false, + environmentsError: action.payload, + }), +}); + +export default enterpriseReducer; diff --git a/client/packages/lowcoder/src/redux/reducers/uiReducers/index.tsx b/client/packages/lowcoder/src/redux/reducers/uiReducers/index.tsx index dc224314e4..887c22b54c 100644 --- a/client/packages/lowcoder/src/redux/reducers/uiReducers/index.tsx +++ b/client/packages/lowcoder/src/redux/reducers/uiReducers/index.tsx @@ -7,6 +7,8 @@ import appSnapshotReducer from "redux/reducers/uiReducers/appSnapshotReducer"; import commonSettingsReducer from "./commonSettingsReducer"; import { folderReducer } from "./folderReducer"; import subscriptionReducer from "./subscriptionReducer"; +import enterpriseReducer from "./enterpriseReducer"; + export const uiReducerObject = { application: applicationReducer, @@ -17,6 +19,7 @@ export const uiReducerObject = { config: configReducer, commonSettings: commonSettingsReducer, subscriptions: subscriptionReducer, + enterprise: enterpriseReducer, }; const uiReducer = combineReducers(uiReducerObject); diff --git a/client/packages/lowcoder/src/redux/reduxActions/enterpriseActions.ts b/client/packages/lowcoder/src/redux/reduxActions/enterpriseActions.ts new file mode 100644 index 0000000000..2231c45c28 --- /dev/null +++ b/client/packages/lowcoder/src/redux/reduxActions/enterpriseActions.ts @@ -0,0 +1,34 @@ +import { EnterpriseLicenseResponse, FetchBrandingSettingPayload } from "@lowcoder-ee/api/enterpriseApi"; +import { ReduxActionTypes } from "constants/reduxActionConstants"; +import { Environment } from "pages/setting/environments/types/environment.types"; + +export const fetchEnterpriseLicense = () => ({ + type: ReduxActionTypes.FETCH_ENTERPRISE_LICENSE, +}); + +export const setEnterpriseLicense = (licenseData: EnterpriseLicenseResponse) => ({ + type: ReduxActionTypes.SET_ENTERPRISE_LICENSE, + payload: licenseData, +}); + +export const fetchBrandingSetting = (payload: FetchBrandingSettingPayload) => { + return { + type: ReduxActionTypes.FETCH_BRANDING_SETTING, + payload, + }; +}; + +export const fetchEnvironments = () => ({ + type: ReduxActionTypes.FETCH_ENVIRONMENTS, +}); + +export const fetchEnvironmentsSuccess = (environments: Environment[]) => ({ + type: ReduxActionTypes.FETCH_ENVIRONMENTS_SUCCESS, + payload: environments, +}); + +export const fetchEnvironmentsFailure = (error: string) => ({ + type: ReduxActionTypes.FETCH_ENVIRONMENTS_FAILURE, + payload: error, +}); + diff --git a/client/packages/lowcoder/src/redux/sagas/enterpriseSagas.ts b/client/packages/lowcoder/src/redux/sagas/enterpriseSagas.ts new file mode 100644 index 0000000000..ef44210538 --- /dev/null +++ b/client/packages/lowcoder/src/redux/sagas/enterpriseSagas.ts @@ -0,0 +1,62 @@ +import { call, put, takeLatest } from 'redux-saga/effects'; +import { ReduxAction, ReduxActionTypes } from "constants/reduxActionConstants"; +import { setEnterpriseLicense, fetchEnvironmentsSuccess, fetchEnvironmentsFailure } from "redux/reduxActions/enterpriseActions"; +import { BrandingSettingResponse, EnterpriseLicenseResponse, FetchBrandingSettingPayload, getBranding, getEnterpriseLicense } from "api/enterpriseApi"; +import { getEnvironmentsWithLicenseStatus } from "pages/setting/environments/services/environments.service"; +import { Environment } from "pages/setting/environments/types/environment.types"; + +import { AxiosResponse } from 'axios'; + +function* fetchEnterpriseLicenseSaga(): Generator<any, void, EnterpriseLicenseResponse> { + try { + // Type the result from the API call + const data: EnterpriseLicenseResponse = yield call(getEnterpriseLicense); + yield put(setEnterpriseLicense(data)); + } catch (error) { + console.error('Failed to fetch enterprise license:', error); + } +} + +function* fetchEnvironmentsSaga(): Generator<any, void, Environment[]> { + try { + const environments: Environment[] = yield call(getEnvironmentsWithLicenseStatus); + yield put(fetchEnvironmentsSuccess(environments)); + } catch (error) { + console.error('Failed to fetch environments:', error); + yield put(fetchEnvironmentsFailure(error as string)); + } +} + +function* fetchBrandingSettingSaga(action: ReduxAction<FetchBrandingSettingPayload>) { + try { + const response: BrandingSettingResponse = yield getBranding(action.payload.orgId); + if (response && response.id) { + if (action.payload.orgId) { + yield put({ + type: ReduxActionTypes.SET_WORKSPACE_BRANDING_SETTING, + payload: response, + }); + return; + } + yield put({ + type: ReduxActionTypes.SET_GLOBAL_BRANDING_SETTING, + payload: response, + }); + } + } catch (error) { + console.error('Failed to fetch branding setting:', error); + // fetch global branding if org's branding setting is not available + if (Boolean(action.payload.orgId) && action.payload.fallbackToGlobal) { + yield put({ + type: ReduxActionTypes.FETCH_BRANDING_SETTING, + payload: {}, + }) + } + } +} + +export default function* enterpriseSagas() { + yield takeLatest(ReduxActionTypes.FETCH_ENTERPRISE_LICENSE, fetchEnterpriseLicenseSaga); + yield takeLatest(ReduxActionTypes.FETCH_BRANDING_SETTING, fetchBrandingSettingSaga); + yield takeLatest(ReduxActionTypes.FETCH_ENVIRONMENTS, fetchEnvironmentsSaga); +} diff --git a/client/packages/lowcoder/src/redux/sagas/index.tsx b/client/packages/lowcoder/src/redux/sagas/index.tsx index e2c90b8f3a..5bce902698 100644 --- a/client/packages/lowcoder/src/redux/sagas/index.tsx +++ b/client/packages/lowcoder/src/redux/sagas/index.tsx @@ -3,6 +3,7 @@ import { pluginSagas } from "redux/sagas/pluginSagas"; import { datasourceSagas } from "redux/sagas/datasourceSagas"; import userSagas from "redux/sagas/userSagas"; import subscriptionSagas from "redux/sagas/subscriptionSagas"; +import enterpriseSagas from "redux/sagas/enterpriseSagas"; import applicationSagas from "redux/sagas/applicationSagas"; import configSagas from "redux/sagas/configSagas"; import appSnapshotSagas from "redux/sagas/appSnapshotSagas"; @@ -28,6 +29,7 @@ export const sagas = [ commonSettingsSagas, jsLibrarySagas, subscriptionSagas, + enterpriseSagas, ]; export function* rootSaga(sagasToRun = sagas) { diff --git a/client/packages/lowcoder/src/redux/selectors/enterpriseSelectors.ts b/client/packages/lowcoder/src/redux/selectors/enterpriseSelectors.ts new file mode 100644 index 0000000000..9f52c5cb7f --- /dev/null +++ b/client/packages/lowcoder/src/redux/selectors/enterpriseSelectors.ts @@ -0,0 +1,58 @@ +import { AppState } from "../reducers"; + + +export const selectEnterpriseEditionStatus = (state: AppState) => + state.ui.enterprise?.enterprise?.eeActive ?? false; + +export const selectRemainingAPICalls = (state: AppState) => + state.ui.enterprise?.enterprise?.remainingAPICalls ?? 0; + +export const selectEnterpriseLicenses = (state: AppState) => + state.ui.enterprise?.enterprise?.eeLicenses ?? []; + +export const selectIsLicenseActive = (state: AppState) => { + const enterprise = state.ui.enterprise; + return enterprise?.enterprise?.eeActive && enterprise?.enterprise?.remainingAPICalls > 0; +}; + +export const getBrandingSetting = (state: AppState) => { + return state.ui.enterprise?.workspaceBranding || state.ui.enterprise?.globalBranding; +} + +export const getGlobalBrandingSetting = (state: AppState) => { + return state.ui.enterprise?.globalBranding; +} + +export const getWorkspaceBrandingSetting = (state: AppState) => { + return state.ui.enterprise?.workspaceBranding; +} +// Environment selectors +export const selectEnvironments = (state: AppState) => + state.ui.enterprise?.environments ?? []; + +export const selectEnvironmentsLoading = (state: AppState) => + state.ui.enterprise?.environmentsLoading ?? false; + +export const selectEnvironmentsError = (state: AppState) => + state.ui.enterprise?.environmentsError ?? null; + +export const selectUnlicensedEnvironments = (state: AppState) => { + const environments = state.ui.enterprise?.environments ?? []; + return environments.filter(env => env.isLicensed === false); +}; + +export const selectLicensedEnvironments = (state: AppState) => { + const environments = state.ui.enterprise?.environments ?? []; + return environments.filter(env => env.isLicensed !== false); +}; + +export const selectMasterEnvironment = (state: AppState) => { + const environments = state.ui.enterprise?.environments ?? []; + return environments.find(env => env.isMaster) ?? null; +}; + +export const selectHasMasterEnvironment = (state: AppState) => { + const environments = state.ui.enterprise?.environments ?? []; + return environments.some(env => env.isMaster); +}; + diff --git a/client/packages/lowcoder/src/util/bottomResUtils.tsx b/client/packages/lowcoder/src/util/bottomResUtils.tsx index da1084e849..b2f2baf425 100644 --- a/client/packages/lowcoder/src/util/bottomResUtils.tsx +++ b/client/packages/lowcoder/src/util/bottomResUtils.tsx @@ -24,6 +24,8 @@ import { QueryLibraryIcon, RedisIcon, RestApiIcon, + AlasqlIcon, + StreamApiIcon, SMTPIcon, SnowflakeIcon, TempStateIcon, @@ -106,6 +108,10 @@ export const getBottomResIcon = ( return <MysqlIcon />; case "mongodb": return <MongoIcon />; + case "streamApi": + return <StreamApiIcon />; + case "alasql": + return <AlasqlIcon />; case "restApi": return httpMethod ? HttpMethodIcon[httpMethod] : <RestApiIcon />; case "postgres": diff --git a/client/packages/lowcoder/src/util/context/EnterpriseContext.tsx b/client/packages/lowcoder/src/util/context/EnterpriseContext.tsx new file mode 100644 index 0000000000..d377810687 --- /dev/null +++ b/client/packages/lowcoder/src/util/context/EnterpriseContext.tsx @@ -0,0 +1,49 @@ +import React, { createContext, useContext, useState, useEffect } from 'react'; +import { fetchEnterpriseLicense, fetchEnvironments } from 'redux/reduxActions/enterpriseActions'; +import { selectEnterpriseEditionStatus } from '@lowcoder-ee/redux/selectors/enterpriseSelectors'; +import { useDispatch, useSelector } from 'react-redux'; +import { isEEEnvironment } from "util/envUtils"; + +interface EnterpriseContextValue { + isEnterpriseActive: boolean; +} + +const EnterpriseContext = createContext<EnterpriseContextValue>({ isEnterpriseActive: false }); + +type ProviderProps = { + children: React.ReactNode; +} + +export const EnterpriseProvider: React.FC<ProviderProps> = ({ children }) => { + const dispatch = useDispatch(); + const isEnterpriseActiveRedux = useSelector(selectEnterpriseEditionStatus); // From Redux store + const [isEnterpriseActive, setIsEnterpriseActive] = useState(false); + + useEffect(() => { + if (isEEEnvironment()) { + // Fetch the enterprise license only if we're in an EE environment + dispatch(fetchEnterpriseLicense()); + dispatch(fetchEnvironments()); + } else { + // Set the state to false for non-EE environments + // setEEActiveState(false); + setIsEnterpriseActive(false); + } + }, [dispatch]); + + useEffect(() => { + if (isEEEnvironment()) { + // Update the global EE state based on Redux + // setEEActiveState(isEnterpriseActiveRedux); + setIsEnterpriseActive(isEnterpriseActiveRedux); + } + }, [isEnterpriseActiveRedux]); + + return ( + <EnterpriseContext.Provider value={{ isEnterpriseActive }}> + {children} + </EnterpriseContext.Provider> + ); + }; + + export const useEnterpriseContext = () => useContext(EnterpriseContext); diff --git a/client/packages/lowcoder/src/util/context/SimpleSubscriptionContext.tsx b/client/packages/lowcoder/src/util/context/SimpleSubscriptionContext.tsx index 406c47b758..c4290372de 100644 --- a/client/packages/lowcoder/src/util/context/SimpleSubscriptionContext.tsx +++ b/client/packages/lowcoder/src/util/context/SimpleSubscriptionContext.tsx @@ -95,12 +95,12 @@ export const SimpleSubscriptionContextProvider = (props: { } }; - if (!productsLoaded && !subscriptionProductsLoading) { - console.log("Outer context: Fetching products..."); + if (!productsLoaded && !subscriptionProductsLoading && !user.isAnonymous) { + // console.log("Outer context: Fetching products..."); setSubscriptionProductsLoading(true); fetchProducts(); } - }, [productsLoaded, subscriptionProductsLoading]); + }, [user.isAnonymous, productsLoaded, subscriptionProductsLoading]); useEffect(() => { const initializeCustomer = async () => { diff --git a/client/packages/lowcoder/src/util/envUtils.ts b/client/packages/lowcoder/src/util/envUtils.ts index 7558b6bb80..72dde72b8e 100644 --- a/client/packages/lowcoder/src/util/envUtils.ts +++ b/client/packages/lowcoder/src/util/envUtils.ts @@ -10,12 +10,9 @@ export function developEnv(): boolean { return REACT_APP_ENV === "development" || localEnv(); } -/** - * is enterprise edition - */ -// Falk: TODO: check EE by API Call -export function isEE(): boolean { - return REACT_APP_EDITION === "enterprise" || REACT_APP_EDITION === "enterprise-global"; +// Is hosted as Enterprise Edition? +export function isEEEnvironment(): boolean { + return REACT_APP_EDITION === "enterprise"; } export function isSaasMode(config?: SystemConfig) { @@ -28,13 +25,4 @@ export function isEnterpriseMode(config?: SystemConfig) { export function isSelfDomain(config?: SystemConfig) { return config?.selfDomain; -} - -export function showAuditLog(config?: SystemConfig) { - return config?.featureFlag?.enableAuditLog; -} - -export function useCloudHosting() { - const systemConfig = useSelector(selectSystemConfig); - return systemConfig?.cloudHosting ?? true; -} +} \ No newline at end of file diff --git a/client/packages/lowcoder/src/util/featureFlagUtils.ts b/client/packages/lowcoder/src/util/featureFlagUtils.ts index b25f4cd6c5..89bf947f1f 100644 --- a/client/packages/lowcoder/src/util/featureFlagUtils.ts +++ b/client/packages/lowcoder/src/util/featureFlagUtils.ts @@ -1,5 +1,5 @@ import { SystemConfig } from "constants/configConstants"; -export function enableCustomBrand(config?: SystemConfig) { +/* export function enableCustomBrand(config?: SystemConfig) { return config?.featureFlag?.enableCustomBranding; -} +} */ \ No newline at end of file diff --git a/client/packages/lowcoder/vite.config.mts b/client/packages/lowcoder/vite.config.mts index 1350607c1f..e8c9351b9c 100644 --- a/client/packages/lowcoder/vite.config.mts +++ b/client/packages/lowcoder/vite.config.mts @@ -12,13 +12,13 @@ import dynamicImport from 'vite-plugin-dynamic-import'; import { ensureLastSlash } from "./src/dev-utils/util"; import { buildVars } from "./src/dev-utils/buildVars"; import { globalDepPlugin } from "./src/dev-utils/globalDepPlguin"; -import { terser } from 'rollup-plugin-terser'; +import { terser } from 'rollup-plugin-terser'; // import { nodePolyfills } from 'vite-plugin-node-polyfills' dotenv.config(); -const apiProxyTarget = process.env.LOWCODER_API_SERVICE_URL; -const nodeServiceApiProxyTarget = process.env.LOWCODER_NODE_SERVICE_URL; +const apiServiceUrl = process.env.LOWCODER_API_SERVICE_URL; +const nodeServiceUrl = process.env.LOWCODER_NODE_SERVICE_URL; const nodeEnv = process.env.NODE_ENV ?? "development"; const isDev = nodeEnv === "development"; const isVisualizerEnabled = !!process.env.ENABLE_VISUALIZER; @@ -27,7 +27,7 @@ const isVisualizerEnabled = !!process.env.ENABLE_VISUALIZER; const browserCheckFileName = `browser-check.js`; const base = ensureLastSlash(process.env.PUBLIC_URL); -if (!apiProxyTarget && isDev) { +if (!apiServiceUrl && isDev) { console.log(); console.log(chalk.red`LOWCODER_API_SERVICE_URL is required.\n`); console.log(chalk.cyan`Start with command: LOWCODER_API_SERVICE_URL=\{backend-api-addr\} yarn start`); @@ -37,14 +37,14 @@ if (!apiProxyTarget && isDev) { const proxyConfig: ServerOptions["proxy"] = { "/api": { - target: apiProxyTarget, + target: apiServiceUrl, changeOrigin: false, }, }; -if (nodeServiceApiProxyTarget) { +if (nodeServiceUrl) { proxyConfig["/node-service"] = { - target: nodeServiceApiProxyTarget, + target: nodeServiceUrl, }; } @@ -87,6 +87,7 @@ export const viteConfig: UserConfig = { manualChunks: (id) => { if (id.includes("node_modules")) { // UI LIBRARIES + // if (id.includes("node_modules/@ant-design/v5-patch-for-react-19")) return "ant-design-v5-patch"; if (id.includes("@ant-design/icons")) return "ant-design-icons"; if (id.includes("node_modules/antd")) return "antd"; if (id.includes("styled-components")) return "styled-components"; diff --git a/client/packages/lowcoder/vite.config.mts.timestamp-1748181753337-3e546e4adf40b.mjs b/client/packages/lowcoder/vite.config.mts.timestamp-1748181753337-3e546e4adf40b.mjs new file mode 100644 index 0000000000..807b09cbd1 --- /dev/null +++ b/client/packages/lowcoder/vite.config.mts.timestamp-1748181753337-3e546e4adf40b.mjs @@ -0,0 +1,490 @@ +// vite.config.mts +import dotenv from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/dotenv/lib/main.js"; +import { defineConfig } from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/vite/dist/node/index.js"; +import react from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import viteTsconfigPaths from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/vite-tsconfig-paths/dist/index.mjs"; +import svgrPlugin from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/vite-plugin-svgr/dist/index.mjs"; +import checker from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/vite-plugin-checker/dist/esm/main.js"; +import { visualizer } from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import path from "path"; +import chalk from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/chalk/source/index.js"; +import { createHtmlPlugin } from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/vite-plugin-html/dist/index.mjs"; +import dynamicImport from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/vite-plugin-dynamic-import/dist/index.mjs"; + +// src/dev-utils/util.js +function ensureLastSlash(str) { + if (!str) { + return "/"; + } + if (!str.endsWith("/")) { + return `${str}/`; + } + return str; +} + +// src/dev-utils/buildVars.js +var buildVars = [ + { + name: "PUBLIC_URL", + defaultValue: "/" + }, + { + name: "REACT_APP_EDITION", + defaultValue: "community" + }, + { + name: "REACT_APP_LANGUAGES", + defaultValue: "" + }, + { + name: "REACT_APP_COMMIT_ID", + defaultValue: "00000" + }, + { + name: "REACT_APP_API_SERVICE_URL", + defaultValue: "" + }, + { + name: "REACT_APP_NODE_SERVICE_URL", + defaultValue: "" + }, + { + name: "REACT_APP_ENV", + defaultValue: "production" + }, + { + name: "REACT_APP_BUILD_ID", + defaultValue: "" + }, + { + name: "REACT_APP_LOG_LEVEL", + defaultValue: "error" + }, + { + name: "REACT_APP_IMPORT_MAP", + defaultValue: "{}" + }, + { + name: "REACT_APP_SERVER_IPS", + defaultValue: "" + }, + { + name: "REACT_APP_BUNDLE_BUILTIN_PLUGIN", + defaultValue: "" + }, + { + name: "REACT_APP_BUNDLE_TYPE", + defaultValue: "app" + }, + { + name: "REACT_APP_DISABLE_JS_SANDBOX", + defaultValue: "" + } +]; + +// src/dev-utils/external.js +var libs = [ + "axios", + "redux", + "react-router", + "react-router-dom", + "react-redux", + "react", + "react-dom", + "lodash", + "history", + "antd", + "@dnd-kit/core", + "@dnd-kit/modifiers", + "@dnd-kit/sortable", + "@dnd-kit/utilities", + { + name: "moment", + extractDefault: true + }, + { + name: "dayjs", + extractDefault: true + }, + { + name: "lowcoder-sdk", + from: "./src/index.sdk.ts" + }, + { + name: "styled-components", + mergeDefaultAndNameExports: true + } +]; +var getLibGlobalVarName = (name) => { + return "$" + name.replace(/@/g, "$").replace(/[\/\-]/g, "_"); +}; +var libsImportCode = (exclude = []) => { + const importLines = []; + const assignLines = []; + libs.forEach((i) => { + let name = i; + let merge = false; + let from = name; + let extractDefault = false; + if (typeof i === "object") { + name = i.name; + merge = i.mergeDefaultAndNameExports ?? false; + from = i.from ?? name; + extractDefault = i.extractDefault ?? false; + } + if (exclude.includes(name)) { + return; + } + const varName = getLibGlobalVarName(name); + if (merge) { + importLines.push(`import * as ${varName}_named_exports from '${from}';`); + importLines.push(`import ${varName} from '${from}';`); + assignLines.push(`Object.assign(${varName}, ${varName}_named_exports);`); + } else if (extractDefault) { + importLines.push(`import ${varName} from '${from}';`); + } else { + importLines.push(`import * as ${varName} from '${from}';`); + } + assignLines.push(`window.${varName} = ${varName};`); + }); + return importLines.concat(assignLines).join("\n"); +}; + +// src/dev-utils/globalDepPlguin.js +function globalDepPlugin(exclude = []) { + const virtualModuleId = "virtual:globals"; + return { + name: "lowcoder-global-plugin", + resolveId(id) { + if (id === virtualModuleId) { + return id; + } + }, + load(id) { + if (id === virtualModuleId) { + return libsImportCode(exclude); + } + } + }; +} + +// vite.config.mts +import { terser } from "file:///Users/raheeliftikhar/Work/lowcoder-main/client/node_modules/rollup-plugin-terser/rollup-plugin-terser.mjs"; +var __vite_injected_original_dirname = "/Users/raheeliftikhar/Work/lowcoder-main/client/packages/lowcoder"; +dotenv.config(); +var apiProxyTarget = process.env.LOWCODER_API_SERVICE_URL; +var nodeServiceApiProxyTarget = process.env.LOWCODER_NODE_SERVICE_URL; +var nodeEnv = process.env.NODE_ENV ?? "development"; +var isDev = nodeEnv === "development"; +var isVisualizerEnabled = !!process.env.ENABLE_VISUALIZER; +var browserCheckFileName = `browser-check.js`; +var base = ensureLastSlash(process.env.PUBLIC_URL); +if (!apiProxyTarget && isDev) { + console.log(); + console.log(chalk.red`LOWCODER_API_SERVICE_URL is required.\n`); + console.log(chalk.cyan`Start with command: LOWCODER_API_SERVICE_URL=\{backend-api-addr\} yarn start`); + console.log(); + process.exit(1); +} +var proxyConfig = { + "/api": { + target: apiProxyTarget, + changeOrigin: false + } +}; +if (nodeServiceApiProxyTarget) { + proxyConfig["/node-service"] = { + target: nodeServiceApiProxyTarget + }; +} +var define = {}; +buildVars.forEach(({ name, defaultValue }) => { + define[name] = JSON.stringify(process.env[name] || defaultValue); +}); +var viteConfig = { + define, + assetsInclude: ["**/*.md"], + resolve: { + extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json"], + alias: { + "@lowcoder-ee": path.resolve( + __vite_injected_original_dirname, + "../lowcoder/src" + ) + } + }, + base, + build: { + minify: "terser", + manifest: true, + target: "es2020", + cssTarget: "chrome87", + outDir: "build", + assetsDir: "static", + emptyOutDir: false, + rollupOptions: { + treeshake: { + moduleSideEffects: true, + propertyReadSideEffects: false, + tryCatchDeoptimization: false, + unknownGlobalSideEffects: false + }, + output: { + inlineDynamicImports: false, + chunkFileNames: "[name]-[hash].js", + manualChunks: (id) => { + if (id.includes("node_modules")) { + if (id.includes("@ant-design/icons")) + return "ant-design-icons"; + if (id.includes("node_modules/antd")) + return "antd"; + if (id.includes("styled-components")) + return "styled-components"; + if (id.includes("react-qr-barcode-scanner")) + return "barcode"; + if (id.includes("codemirror")) + return "codemirror"; + if (id.includes("quill")) + return "quill"; + if (id.includes("react-json-view")) + return "react-json-view"; + if (id.includes("react-quill")) + return "react-quill"; + if (id.includes("remark-gfm")) + return "remark-gfm"; + if (id.includes("rehype-raw")) + return "rehype-raw"; + if (id.includes("rehype-sanitize")) + return "rehype-sanitize"; + if (id.includes("@dnd-kit")) + return "dnd-kit"; + if (id.includes("react-draggable")) + return "react-draggable"; + if (id.includes("react-grid-layout")) + return "react-grid-layout"; + if (id.includes("react-sortable-hoc")) + return "react-sortable-hoc"; + if (id.includes("@fortawesome")) + return "fontawesome"; + if (id.includes("@remixicon")) + return "remixicon"; + if (id.includes("moment")) + return "moment"; + if (id.includes("date-fns")) + return "date-fns"; + if (id.includes("dayjs")) + return "dayjs"; + if (id.includes("clsx")) + return "clsx"; + if (id.includes("immer")) + return "immer"; + if (id.includes("lodash")) + return "lodash"; + if (id.includes("lodash-es")) + return "lodash-es"; + if (id.includes("uuid")) + return "uuid"; + if (id.includes("ua-parser-js")) + return "ua-parser-js"; + if (id.includes("html2canvas")) + return "ua-parser-js"; + if (id.includes("numbro")) + return "numbro"; + if (id.includes("buffer")) + return "buffer"; + if (id.includes("file-saver")) + return "file-saver"; + if (id.includes("papaparse")) + return "papaparse"; + if (id.includes("parse5")) + return "parse5"; + if (id.includes("xlsx")) + return "xlsx"; + if (id.includes("alasql")) + return "alasql"; + if (id.includes("sql-formatter")) + return "sql-formatter"; + if (id.includes("axios")) + return "axios"; + if (id.includes("fetch")) + return "fetch"; + if (id.includes("http")) + return "http-modules"; + if (id.includes("https")) + return "https-modules"; + if (id.includes("sockjs")) + return "websockets"; + if (id.includes("websocket")) + return "websockets"; + if (id.includes("react-error-boundary")) + return "react-error-boundary"; + if (id.includes("redux-devtools-extension")) + return "redux-devtools"; + if (id.includes("regenerator-runtime")) + return "regenerator-runtime"; + if (id.includes("eslint4b-prebuilt-2")) + return "eslint4b-prebuilt-2"; + if (id.includes("cnchar")) + return "cnchar"; + if (id.includes("hotkeys-js")) + return "hotkeys-js"; + if (id.includes("loglevel")) + return "loglevel"; + if (id.includes("qrcode.react")) + return "qrcode-react"; + if (id.includes("react-joyride")) + return "react-joyride"; + if (id.includes("rc-trigger")) + return "rc-trigger"; + if (id.includes("really-relaxed-json")) + return "really-relaxed-json"; + if (id.includes("simplebar-react")) + return "simplebar-react"; + if (id.includes("react-documents")) + return "react-documents"; + if (id.includes("react-colorful")) + return "react-colorful"; + if (id.includes("react-best-gradient-color-picker")) + return "react-best-gradient-color-picker"; + if (id.includes("@supabase/supabase-js")) + return "supabase"; + return null; + } + return null; + } + }, + plugins: [ + terser({ + compress: { + drop_console: true, + drop_debugger: true, + pure_funcs: ["console.info", "console.debug", "console.log"] + }, + format: { + comments: /(@vite-ignore|webpackIgnore)/ + } + }) + ], + onwarn: (warning, warn) => { + if (warning.code === "MODULE_LEVEL_DIRECTIVE") { + return; + } + warn(warning); + } + }, + commonjsOptions: { + transformMixedEsModules: true, + defaultIsModuleExports: (id) => { + if (id.indexOf("antd/lib") !== -1) { + return false; + } + return "auto"; + } + } + }, + optimizeDeps: { + entries: ["./src/**/*.{js,jsx,ts,tsx}"], + include: ["antd"] + // include: ['antd/**/*'], + // force: true, + }, + css: { + preprocessorOptions: { + less: { + modifyVars: { + "@primary-color": "#b480de", + "@link-color": "#3377FF", + "@border-color-base": "#b480de", + "@border-radius-base": "4px" + }, + javascriptEnabled: true + } + }, + modules: { + // Configuration for CSS modules + scopeBehaviour: "local" + // Ensures CSS modules are scoped locally by default + } + }, + server: { + open: true, + cors: true, + port: 8e3, + host: "0.0.0.0", + proxy: proxyConfig + }, + plugins: [ + checker({ + typescript: true, + eslint: { + lintCommand: 'eslint --quiet "./src/**/*.{ts,tsx}"', + dev: { + logLevel: ["error"] + } + } + }), + react({ + babel: { + parserOpts: { + plugins: ["decorators-legacy"] + } + } + }), + viteTsconfigPaths({ + projects: ["../lowcoder/tsconfig.json", "../lowcoder-design/tsconfig.json"] + }), + svgrPlugin({ + svgrOptions: { + exportType: "named", + prettier: false, + svgo: false, + titleProp: true, + ref: true + } + }), + globalDepPlugin(), + createHtmlPlugin({ + minify: true, + inject: { + data: { + browserCheckScript: isDev ? "" : `<script src="${base}${browserCheckFileName}"></script>` + } + } + }), + isVisualizerEnabled && visualizer(), + dynamicImport(), + { include: ["process"] } + ].filter(Boolean) +}; +var browserCheckConfig = { + ...viteConfig, + define: { + ...viteConfig.define, + "process.env.NODE_ENV": JSON.stringify("production") + }, + build: { + ...viteConfig.build, + manifest: false, + copyPublicDir: true, + emptyOutDir: true, + lib: { + formats: ["es"], + name: "BrowserCheck", + entry: "./src/browser-check.ts", + fileName: () => { + return browserCheckFileName; + } + } + } +}; +var buildTargets = { + main: viteConfig, + browserCheck: browserCheckConfig +}; +var buildTarget = buildTargets[process.env.BUILD_TARGET || "main"]; +var vite_config_default = defineConfig(buildTarget || viteConfig); +export { + vite_config_default as default, + viteConfig +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIiwgInNyYy9kZXYtdXRpbHMvdXRpbC5qcyIsICJzcmMvZGV2LXV0aWxzL2J1aWxkVmFycy5qcyIsICJzcmMvZGV2LXV0aWxzL2V4dGVybmFsLmpzIiwgInNyYy9kZXYtdXRpbHMvZ2xvYmFsRGVwUGxndWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3JhaGVlbGlmdGlraGFyL1dvcmsvbG93Y29kZXItbWFpbi9jbGllbnQvcGFja2FnZXMvbG93Y29kZXJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3ZpdGUuY29uZmlnLm10c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvcmFoZWVsaWZ0aWtoYXIvV29yay9sb3djb2Rlci1tYWluL2NsaWVudC9wYWNrYWdlcy9sb3djb2Rlci92aXRlLmNvbmZpZy5tdHNcIjtpbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCB7IGRlZmluZUNvbmZpZywgUGx1Z2luT3B0aW9uLCBTZXJ2ZXJPcHRpb25zLCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIjtcbmltcG9ydCB2aXRlVHNjb25maWdQYXRocyBmcm9tIFwidml0ZS10c2NvbmZpZy1wYXRoc1wiO1xuaW1wb3J0IHN2Z3JQbHVnaW4gZnJvbSBcInZpdGUtcGx1Z2luLXN2Z3JcIjtcbmltcG9ydCBjaGVja2VyIGZyb20gXCJ2aXRlLXBsdWdpbi1jaGVja2VyXCI7XG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xuaW1wb3J0IGR5bmFtaWNJbXBvcnQgZnJvbSAndml0ZS1wbHVnaW4tZHluYW1pYy1pbXBvcnQnO1xuaW1wb3J0IHsgZW5zdXJlTGFzdFNsYXNoIH0gZnJvbSBcIi4vc3JjL2Rldi11dGlscy91dGlsXCI7XG5pbXBvcnQgeyBidWlsZFZhcnMgfSBmcm9tIFwiLi9zcmMvZGV2LXV0aWxzL2J1aWxkVmFyc1wiO1xuaW1wb3J0IHsgZ2xvYmFsRGVwUGx1Z2luIH0gZnJvbSBcIi4vc3JjL2Rldi11dGlscy9nbG9iYWxEZXBQbGd1aW5cIjtcbmltcG9ydCB7IHRlcnNlciB9IGZyb20gJ3JvbGx1cC1wbHVnaW4tdGVyc2VyJztcbi8vIGltcG9ydCB7IG5vZGVQb2x5ZmlsbHMgfSBmcm9tICd2aXRlLXBsdWdpbi1ub2RlLXBvbHlmaWxscydcblxuZG90ZW52LmNvbmZpZygpO1xuXG5jb25zdCBhcGlQcm94eVRhcmdldCA9IHByb2Nlc3MuZW52LkxPV0NPREVSX0FQSV9TRVJWSUNFX1VSTDtcbmNvbnN0IG5vZGVTZXJ2aWNlQXBpUHJveHlUYXJnZXQgPSBwcm9jZXNzLmVudi5MT1dDT0RFUl9OT0RFX1NFUlZJQ0VfVVJMO1xuY29uc3Qgbm9kZUVudiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IFwiZGV2ZWxvcG1lbnRcIjtcbmNvbnN0IGlzRGV2ID0gbm9kZUVudiA9PT0gXCJkZXZlbG9wbWVudFwiO1xuY29uc3QgaXNWaXN1YWxpemVyRW5hYmxlZCA9ICEhcHJvY2Vzcy5lbnYuRU5BQkxFX1ZJU1VBTElaRVI7XG4vLyB0aGUgZmlsZSB3YXMgbmV2ZXIgY3JlYXRlZFxuLy8gY29uc3QgYnJvd3NlckNoZWNrRmlsZU5hbWUgPSBgYnJvd3Nlci1jaGVjay0ke3Byb2Nlc3MuZW52LlJFQUNUX0FQUF9DT01NSVRfSUR9LmpzYDtcbmNvbnN0IGJyb3dzZXJDaGVja0ZpbGVOYW1lID0gYGJyb3dzZXItY2hlY2suanNgO1xuY29uc3QgYmFzZSA9IGVuc3VyZUxhc3RTbGFzaChwcm9jZXNzLmVudi5QVUJMSUNfVVJMKTtcblxuaWYgKCFhcGlQcm94eVRhcmdldCAmJiBpc0Rldikge1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhjaGFsay5yZWRgTE9XQ09ERVJfQVBJX1NFUlZJQ0VfVVJMIGlzIHJlcXVpcmVkLlxcbmApO1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuYFN0YXJ0IHdpdGggY29tbWFuZDogTE9XQ09ERVJfQVBJX1NFUlZJQ0VfVVJMPVxce2JhY2tlbmQtYXBpLWFkZHJcXH0geWFybiBzdGFydGApO1xuICBjb25zb2xlLmxvZygpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbmNvbnN0IHByb3h5Q29uZmlnOiBTZXJ2ZXJPcHRpb25zW1wicHJveHlcIl0gPSB7XG4gIFwiL2FwaVwiOiB7XG4gICAgdGFyZ2V0OiBhcGlQcm94eVRhcmdldCxcbiAgICBjaGFuZ2VPcmlnaW46IGZhbHNlLFxuICB9LFxufTtcblxuaWYgKG5vZGVTZXJ2aWNlQXBpUHJveHlUYXJnZXQpIHtcbiAgcHJveHlDb25maWdbXCIvbm9kZS1zZXJ2aWNlXCJdID0ge1xuICAgIHRhcmdldDogbm9kZVNlcnZpY2VBcGlQcm94eVRhcmdldCxcbiAgfTtcbn1cblxuY29uc3QgZGVmaW5lID0ge307XG5idWlsZFZhcnMuZm9yRWFjaCgoeyBuYW1lLCBkZWZhdWx0VmFsdWUgfSkgPT4ge1xuICBkZWZpbmVbbmFtZV0gPSBKU09OLnN0cmluZ2lmeShwcm9jZXNzLmVudltuYW1lXSB8fCBkZWZhdWx0VmFsdWUpO1xufSk7XG5cbi8vIGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXG5leHBvcnQgY29uc3Qgdml0ZUNvbmZpZzogVXNlckNvbmZpZyA9IHtcbiAgZGVmaW5lLFxuICBhc3NldHNJbmNsdWRlOiBbXCIqKi8qLm1kXCJdLFxuICByZXNvbHZlOiB7XG4gICAgZXh0ZW5zaW9uczogW1wiLm1qc1wiLCBcIi5qc1wiLCBcIi50c1wiLCBcIi5qc3hcIiwgXCIudHN4XCIsIFwiLmpzb25cIl0sXG4gICAgYWxpYXM6IHtcbiAgICAgIFwiQGxvd2NvZGVyLWVlXCI6IHBhdGgucmVzb2x2ZShcbiAgICAgICAgX19kaXJuYW1lLCBcIi4uL2xvd2NvZGVyL3NyY1wiXG4gICAgICApLFxuICAgIH0sXG4gIH0sXG4gIGJhc2UsXG4gIGJ1aWxkOiB7XG4gICAgbWluaWZ5OiBcInRlcnNlclwiLFxuICAgIG1hbmlmZXN0OiB0cnVlLFxuICAgIHRhcmdldDogXCJlczIwMjBcIixcbiAgICBjc3NUYXJnZXQ6IFwiY2hyb21lODdcIixcbiAgICBvdXREaXI6IFwiYnVpbGRcIixcbiAgICBhc3NldHNEaXI6IFwic3RhdGljXCIsXG4gICAgZW1wdHlPdXREaXI6IGZhbHNlLFxuICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgIHRyZWVzaGFrZToge1xuICAgICAgICBtb2R1bGVTaWRlRWZmZWN0czogdHJ1ZSwgXG4gICAgICAgIHByb3BlcnR5UmVhZFNpZGVFZmZlY3RzOiBmYWxzZSxcbiAgICAgICAgdHJ5Q2F0Y2hEZW9wdGltaXphdGlvbjogZmFsc2UsIFxuICAgICAgICB1bmtub3duR2xvYmFsU2lkZUVmZmVjdHM6IGZhbHNlLCBcbiAgICAgIH0sXG4gICAgICBvdXRwdXQ6IHtcbiAgICAgICAgaW5saW5lRHluYW1pY0ltcG9ydHM6IGZhbHNlLFxuICAgICAgICBjaHVua0ZpbGVOYW1lczogXCJbbmFtZV0tW2hhc2hdLmpzXCIsXG4gICAgICAgIG1hbnVhbENodW5rczogKGlkKSA9PiB7XG4gICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSB7XG4gICAgICAgICAgICAvLyBVSSBMSUJSQVJJRVNcbiAgICAgICAgICAgIC8vIGlmIChpZC5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlcy9AYW50LWRlc2lnbi92NS1wYXRjaC1mb3ItcmVhY3QtMTlcIikpIHJldHVybiBcImFudC1kZXNpZ24tdjUtcGF0Y2hcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcIkBhbnQtZGVzaWduL2ljb25zXCIpKSByZXR1cm4gXCJhbnQtZGVzaWduLWljb25zXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJub2RlX21vZHVsZXMvYW50ZFwiKSkgcmV0dXJuIFwiYW50ZFwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwic3R5bGVkLWNvbXBvbmVudHNcIikpIHJldHVybiBcInN0eWxlZC1jb21wb25lbnRzXCI7XG5cbiAgICAgICAgICAgIC8vIFx1RDgzRFx1REQzOSBCQVJDT0RFICYgUVIgQ09ERSBQUk9DRVNTSU5HXG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWFjdC1xci1iYXJjb2RlLXNjYW5uZXJcIikpIHJldHVybiBcImJhcmNvZGVcIjtcbiAgICAgICAgXG4gICAgICAgICAgICAvLyBURVhUIEVESVRPUlMgJiBQQVJTRVJTXG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJjb2RlbWlycm9yXCIpKSByZXR1cm4gXCJjb2RlbWlycm9yXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJxdWlsbFwiKSkgcmV0dXJuIFwicXVpbGxcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInJlYWN0LWpzb24tdmlld1wiKSkgcmV0dXJuIFwicmVhY3QtanNvbi12aWV3XCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWFjdC1xdWlsbFwiKSkgcmV0dXJuIFwicmVhY3QtcXVpbGxcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInJlbWFyay1nZm1cIikpIHJldHVybiBcInJlbWFyay1nZm1cIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInJlaHlwZS1yYXdcIikpIHJldHVybiBcInJlaHlwZS1yYXdcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInJlaHlwZS1zYW5pdGl6ZVwiKSkgcmV0dXJuIFwicmVoeXBlLXNhbml0aXplXCI7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gRFJBRyAmIERST1BcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcIkBkbmQta2l0XCIpKSByZXR1cm4gXCJkbmQta2l0XCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWFjdC1kcmFnZ2FibGVcIikpIHJldHVybiBcInJlYWN0LWRyYWdnYWJsZVwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwicmVhY3QtZ3JpZC1sYXlvdXRcIikpIHJldHVybiBcInJlYWN0LWdyaWQtbGF5b3V0XCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWFjdC1zb3J0YWJsZS1ob2NcIikpIHJldHVybiBcInJlYWN0LXNvcnRhYmxlLWhvY1wiO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIElDT05TICYgRk9OVFNcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcIkBmb3J0YXdlc29tZVwiKSkgcmV0dXJuIFwiZm9udGF3ZXNvbWVcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcIkByZW1peGljb25cIikpIHJldHVybiBcInJlbWl4aWNvblwiO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIERBVEUvVElNRSBIQU5ETElOR1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwibW9tZW50XCIpKSByZXR1cm4gXCJtb21lbnRcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcImRhdGUtZm5zXCIpKSByZXR1cm4gXCJkYXRlLWZuc1wiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwiZGF5anNcIikpIHJldHVybiBcImRheWpzXCI7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVVRJTElUSUVTICYgSEVMUEVSU1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwiY2xzeFwiKSkgcmV0dXJuIFwiY2xzeFwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwiaW1tZXJcIikpIHJldHVybiBcImltbWVyXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJsb2Rhc2hcIikpIHJldHVybiBcImxvZGFzaFwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwibG9kYXNoLWVzXCIpKSByZXR1cm4gXCJsb2Rhc2gtZXNcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInV1aWRcIikpIHJldHVybiBcInV1aWRcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInVhLXBhcnNlci1qc1wiKSkgcmV0dXJuIFwidWEtcGFyc2VyLWpzXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJodG1sMmNhbnZhc1wiKSkgcmV0dXJuIFwidWEtcGFyc2VyLWpzXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJudW1icm9cIikpIHJldHVybiBcIm51bWJyb1wiO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIEZJTEUgJiBEQVRBIFBST0NFU1NJTkdcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcImJ1ZmZlclwiKSkgcmV0dXJuIFwiYnVmZmVyXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJmaWxlLXNhdmVyXCIpKSByZXR1cm4gXCJmaWxlLXNhdmVyXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJwYXBhcGFyc2VcIikpIHJldHVybiBcInBhcGFwYXJzZVwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwicGFyc2U1XCIpKSByZXR1cm4gXCJwYXJzZTVcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInhsc3hcIikpIHJldHVybiBcInhsc3hcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcImFsYXNxbFwiKSkgcmV0dXJuIFwiYWxhc3FsXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJzcWwtZm9ybWF0dGVyXCIpKSByZXR1cm4gXCJzcWwtZm9ybWF0dGVyXCI7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gTkVUV09SSyAmIEhUVFBcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcImF4aW9zXCIpKSByZXR1cm4gXCJheGlvc1wiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwiZmV0Y2hcIikpIHJldHVybiBcImZldGNoXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJodHRwXCIpKSByZXR1cm4gXCJodHRwLW1vZHVsZXNcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcImh0dHBzXCIpKSByZXR1cm4gXCJodHRwcy1tb2R1bGVzXCI7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gV0VCIFNPQ0tFVFMgJiBTVFJFQU1JTkdcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInNvY2tqc1wiKSkgcmV0dXJuIFwid2Vic29ja2V0c1wiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwid2Vic29ja2V0XCIpKSByZXR1cm4gXCJ3ZWJzb2NrZXRzXCI7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gU1RBVEUgTUFOQUdFTUVOVFxuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwicmVhY3QtZXJyb3ItYm91bmRhcnlcIikpIHJldHVybiBcInJlYWN0LWVycm9yLWJvdW5kYXJ5XCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWR1eC1kZXZ0b29scy1leHRlbnNpb25cIikpIHJldHVybiBcInJlZHV4LWRldnRvb2xzXCI7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gUE9MWUZJTExTICYgQlJPV1NFUiBDT01QQVRJQklMSVRZXG4gICAgICAgICAgICAvLyBpZiAoaWQuaW5jbHVkZXMoXCJjb3JlLWpzXCIpKSByZXR1cm4gXCJjb3JlLWpzXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpKSByZXR1cm4gXCJyZWdlbmVyYXRvci1ydW50aW1lXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJlc2xpbnQ0Yi1wcmVidWlsdC0yXCIpKSByZXR1cm4gXCJlc2xpbnQ0Yi1wcmVidWlsdC0yXCI7XG5cbiAgICAgICAgICAgIC8vIE1JU0NFTExBTkVPVVNcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcImNuY2hhclwiKSkgcmV0dXJuIFwiY25jaGFyXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJob3RrZXlzLWpzXCIpKSByZXR1cm4gXCJob3RrZXlzLWpzXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJsb2dsZXZlbFwiKSkgcmV0dXJuIFwibG9nbGV2ZWxcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInFyY29kZS5yZWFjdFwiKSkgcmV0dXJuIFwicXJjb2RlLXJlYWN0XCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWFjdC1qb3lyaWRlXCIpKSByZXR1cm4gXCJyZWFjdC1qb3lyaWRlXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyYy10cmlnZ2VyXCIpKSByZXR1cm4gXCJyYy10cmlnZ2VyXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJyZWFsbHktcmVsYXhlZC1qc29uXCIpKSByZXR1cm4gXCJyZWFsbHktcmVsYXhlZC1qc29uXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJzaW1wbGViYXItcmVhY3RcIikpIHJldHVybiBcInNpbXBsZWJhci1yZWFjdFwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwicmVhY3QtZG9jdW1lbnRzXCIpKSByZXR1cm4gXCJyZWFjdC1kb2N1bWVudHNcIjtcbiAgICAgICAgICAgIGlmIChpZC5pbmNsdWRlcyhcInJlYWN0LWNvbG9yZnVsXCIpKSByZXR1cm4gXCJyZWFjdC1jb2xvcmZ1bFwiO1xuICAgICAgICAgICAgaWYgKGlkLmluY2x1ZGVzKFwicmVhY3QtYmVzdC1ncmFkaWVudC1jb2xvci1waWNrZXJcIikpIHJldHVybiBcInJlYWN0LWJlc3QtZ3JhZGllbnQtY29sb3ItcGlja2VyXCI7XG4gICAgICAgICAgICBpZiAoaWQuaW5jbHVkZXMoXCJAc3VwYWJhc2Uvc3VwYWJhc2UtanNcIikpIHJldHVybiBcInN1cGFiYXNlXCI7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGx1Z2luczogW1xuICAgICAgICB0ZXJzZXIoe1xuICAgICAgICAgIGNvbXByZXNzOiB7XG4gICAgICAgICAgICBkcm9wX2NvbnNvbGU6IHRydWUsICBcbiAgICAgICAgICAgIGRyb3BfZGVidWdnZXI6IHRydWUsIFxuICAgICAgICAgICAgcHVyZV9mdW5jczogW1wiY29uc29sZS5pbmZvXCIsIFwiY29uc29sZS5kZWJ1Z1wiLCBcImNvbnNvbGUubG9nXCJdLCBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgY29tbWVudHM6IC8oQHZpdGUtaWdub3JlfHdlYnBhY2tJZ25vcmUpL1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pIGFzIFBsdWdpbk9wdGlvbixcbiAgICAgIF0sXG4gICAgICBvbndhcm46ICh3YXJuaW5nLCB3YXJuKSA9PiB7XG4gICAgICAgIGlmICh3YXJuaW5nLmNvZGUgPT09ICdNT0RVTEVfTEVWRUxfRElSRUNUSVZFJykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHdhcm4od2FybmluZylcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21tb25qc09wdGlvbnM6IHtcbiAgICAgIHRyYW5zZm9ybU1peGVkRXNNb2R1bGVzIDogdHJ1ZSxcbiAgICAgIGRlZmF1bHRJc01vZHVsZUV4cG9ydHM6IChpZCkgPT4ge1xuICAgICAgICBpZiAoaWQuaW5kZXhPZihcImFudGQvbGliXCIpICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJhdXRvXCI7XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG9wdGltaXplRGVwczoge1xuICAgIGVudHJpZXM6IFsnLi9zcmMvKiovKi57anMsanN4LHRzLHRzeH0nXSxcbiAgICBpbmNsdWRlOiBbJ2FudGQnXSxcbiAgICAvLyBpbmNsdWRlOiBbJ2FudGQvKiovKiddLFxuICAgIC8vIGZvcmNlOiB0cnVlLFxuICB9LFxuICBjc3M6IHtcbiAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICBsZXNzOiB7XG4gICAgICAgIG1vZGlmeVZhcnM6IHtcbiAgICAgICAgICBcIkBwcmltYXJ5LWNvbG9yXCI6IFwiI2I0ODBkZVwiLFxuICAgICAgICAgIFwiQGxpbmstY29sb3JcIjogXCIjMzM3N0ZGXCIsXG4gICAgICAgICAgXCJAYm9yZGVyLWNvbG9yLWJhc2VcIjogXCIjYjQ4MGRlXCIsXG4gICAgICAgICAgXCJAYm9yZGVyLXJhZGl1cy1iYXNlXCI6IFwiNHB4XCIsXG4gICAgICAgIH0sXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1vZHVsZXM6IHtcbiAgICAgIC8vIENvbmZpZ3VyYXRpb24gZm9yIENTUyBtb2R1bGVzXG4gICAgICBzY29wZUJlaGF2aW91cjogJ2xvY2FsJyAvLyBFbnN1cmVzIENTUyBtb2R1bGVzIGFyZSBzY29wZWQgbG9jYWxseSBieSBkZWZhdWx0XG4gICAgfVxuICB9LFxuICBzZXJ2ZXI6IHtcbiAgICBvcGVuOiB0cnVlLFxuICAgIGNvcnM6IHRydWUsXG4gICAgcG9ydDogODAwMCxcbiAgICBob3N0OiBcIjAuMC4wLjBcIixcbiAgICBwcm94eTogcHJveHlDb25maWcsXG4gIH0sXG4gIHBsdWdpbnM6IFtcbiAgICBjaGVja2VyKHtcbiAgICAgIHR5cGVzY3JpcHQ6IHRydWUsXG4gICAgICBlc2xpbnQ6IHtcbiAgICAgICAgbGludENvbW1hbmQ6ICdlc2xpbnQgLS1xdWlldCBcIi4vc3JjLyoqLyoue3RzLHRzeH1cIicsXG4gICAgICAgIGRldjoge1xuICAgICAgICAgIGxvZ0xldmVsOiBbXCJlcnJvclwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVhY3Qoe1xuICAgICAgYmFiZWw6IHtcbiAgICAgICAgcGFyc2VyT3B0czoge1xuICAgICAgICAgIHBsdWdpbnM6IFtcImRlY29yYXRvcnMtbGVnYWN5XCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSxcbiAgICB2aXRlVHNjb25maWdQYXRocyh7XG4gICAgICBwcm9qZWN0czogW1wiLi4vbG93Y29kZXIvdHNjb25maWcuanNvblwiLCBcIi4uL2xvd2NvZGVyLWRlc2lnbi90c2NvbmZpZy5qc29uXCJdLFxuICAgIH0pLFxuICAgIHN2Z3JQbHVnaW4oe1xuICAgICAgc3Znck9wdGlvbnM6IHtcbiAgICAgICAgZXhwb3J0VHlwZTogXCJuYW1lZFwiLFxuICAgICAgICBwcmV0dGllcjogZmFsc2UsXG4gICAgICAgIHN2Z286IGZhbHNlLFxuICAgICAgICB0aXRsZVByb3A6IHRydWUsXG4gICAgICAgIHJlZjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZ2xvYmFsRGVwUGx1Z2luKCksXG4gICAgY3JlYXRlSHRtbFBsdWdpbih7XG4gICAgICBtaW5pZnk6IHRydWUsXG4gICAgICBpbmplY3Q6IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGJyb3dzZXJDaGVja1NjcmlwdDogaXNEZXYgPyBcIlwiIDogYDxzY3JpcHQgc3JjPVwiJHtiYXNlfSR7YnJvd3NlckNoZWNrRmlsZU5hbWV9XCI+PC9zY3JpcHQ+YCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgaXNWaXN1YWxpemVyRW5hYmxlZCAmJiB2aXN1YWxpemVyKCksXG4gICAgZHluYW1pY0ltcG9ydCgpLFxuICAgICh7IGluY2x1ZGU6IFsncHJvY2VzcyddIH0pLFxuICBdLmZpbHRlcihCb29sZWFuKSxcbn07XG5cbmNvbnN0IGJyb3dzZXJDaGVja0NvbmZpZzogVXNlckNvbmZpZyA9IHtcbiAgLi4udml0ZUNvbmZpZyxcbiAgZGVmaW5lOiB7XG4gICAgLi4udml0ZUNvbmZpZy5kZWZpbmUsXG4gICAgXCJwcm9jZXNzLmVudi5OT0RFX0VOVlwiOiBKU09OLnN0cmluZ2lmeShcInByb2R1Y3Rpb25cIiksXG4gIH0sXG4gIGJ1aWxkOiB7XG4gICAgLi4udml0ZUNvbmZpZy5idWlsZCxcbiAgICBtYW5pZmVzdDogZmFsc2UsXG4gICAgY29weVB1YmxpY0RpcjogdHJ1ZSxcbiAgICBlbXB0eU91dERpcjogdHJ1ZSxcbiAgICBsaWI6IHtcbiAgICAgIGZvcm1hdHM6IFtcImVzXCJdLFxuICAgICAgbmFtZTogXCJCcm93c2VyQ2hlY2tcIixcbiAgICAgIGVudHJ5OiBcIi4vc3JjL2Jyb3dzZXItY2hlY2sudHNcIixcbiAgICAgIGZpbGVOYW1lOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBicm93c2VyQ2hlY2tGaWxlTmFtZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IGJ1aWxkVGFyZ2V0cyA9IHtcbiAgbWFpbjogdml0ZUNvbmZpZyxcbiAgYnJvd3NlckNoZWNrOiBicm93c2VyQ2hlY2tDb25maWcsXG59O1xuXG5jb25zdCBidWlsZFRhcmdldCA9IGJ1aWxkVGFyZ2V0c1twcm9jZXNzLmVudi5CVUlMRF9UQVJHRVQgfHwgXCJtYWluXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoYnVpbGRUYXJnZXQgfHwgdml0ZUNvbmZpZyk7XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvdXRpbC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvcmFoZWVsaWZ0aWtoYXIvV29yay9sb3djb2Rlci1tYWluL2NsaWVudC9wYWNrYWdlcy9sb3djb2Rlci9zcmMvZGV2LXV0aWxzL3V0aWwuanNcIjtpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExhc3RTbGFzaChzdHIpIHtcbiAgaWYgKHN0ci5lbmRzV2l0aChcIi9cIikpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTGFzdFNsYXNoKHN0cikge1xuICBpZiAoIXN0cikge1xuICAgIHJldHVybiBcIi9cIjtcbiAgfVxuICBpZiAoIXN0ci5lbmRzV2l0aChcIi9cIikpIHtcbiAgICByZXR1cm4gYCR7c3RyfS9gO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSnNvbihmaWxlKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlKS50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnREaXJOYW1lKGltcG9ydE1ldGFVcmwpIHtcbiAgcmV0dXJuIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnRNZXRhVXJsKSk7XG59XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvYnVpbGRWYXJzLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvYnVpbGRWYXJzLmpzXCI7ZXhwb3J0IGNvbnN0IGJ1aWxkVmFycyA9IFtcbiAge1xuICAgIG5hbWU6IFwiUFVCTElDX1VSTFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIvXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9FRElUSU9OXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcImNvbW11bml0eVwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJSRUFDVF9BUFBfTEFOR1VBR0VTXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJSRUFDVF9BUFBfQ09NTUlUX0lEXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIjAwMDAwXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9BUElfU0VSVklDRV9VUkxcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9OT0RFX1NFUlZJQ0VfVVJMXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJSRUFDVF9BUFBfRU5WXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcInByb2R1Y3Rpb25cIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0JVSUxEX0lEXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJSRUFDVF9BUFBfTE9HX0xFVkVMXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcImVycm9yXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9JTVBPUlRfTUFQXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcInt9XCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9TRVJWRVJfSVBTXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJSRUFDVF9BUFBfQlVORExFX0JVSUxUSU5fUExVR0lOXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJSRUFDVF9BUFBfQlVORExFX1RZUEVcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiYXBwXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9ESVNBQkxFX0pTX1NBTkRCT1hcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gIH0sXG5dO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvcmFoZWVsaWZ0aWtoYXIvV29yay9sb3djb2Rlci1tYWluL2NsaWVudC9wYWNrYWdlcy9sb3djb2Rlci9zcmMvZGV2LXV0aWxzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvcmFoZWVsaWZ0aWtoYXIvV29yay9sb3djb2Rlci1tYWluL2NsaWVudC9wYWNrYWdlcy9sb3djb2Rlci9zcmMvZGV2LXV0aWxzL2V4dGVybmFsLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9yYWhlZWxpZnRpa2hhci9Xb3JrL2xvd2NvZGVyLW1haW4vY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvZXh0ZXJuYWwuanNcIjsvKipcbiAqIGxpYnMgdG8gaW1wb3J0IGFzIGdsb2JhbCB2YXJcbiAqIG5hbWU6IG1vZHVsZSBuYW1lXG4gKiBtZXJnZURlZmF1bHRBbmROYW1lRXhwb3J0czogd2hldGhlciB0byBtZXJnZSBkZWZhdWx0IGFuZCBuYW1lZCBleHBvcnRzXG4gKi9cbmV4cG9ydCBjb25zdCBsaWJzID0gW1xuICBcImF4aW9zXCIsXG4gIFwicmVkdXhcIixcbiAgXCJyZWFjdC1yb3V0ZXJcIixcbiAgXCJyZWFjdC1yb3V0ZXItZG9tXCIsXG4gIFwicmVhY3QtcmVkdXhcIixcbiAgXCJyZWFjdFwiLFxuICBcInJlYWN0LWRvbVwiLFxuICBcImxvZGFzaFwiLFxuICBcImhpc3RvcnlcIixcbiAgXCJhbnRkXCIsXG4gIFwiQGRuZC1raXQvY29yZVwiLFxuICBcIkBkbmQta2l0L21vZGlmaWVyc1wiLFxuICBcIkBkbmQta2l0L3NvcnRhYmxlXCIsXG4gIFwiQGRuZC1raXQvdXRpbGl0aWVzXCIsXG4gIHtcbiAgICBuYW1lOiBcIm1vbWVudFwiLFxuICAgIGV4dHJhY3REZWZhdWx0OiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJkYXlqc1wiLFxuICAgIGV4dHJhY3REZWZhdWx0OiB0cnVlLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJsb3djb2Rlci1zZGtcIixcbiAgICBmcm9tOiBcIi4vc3JjL2luZGV4LnNkay50c1wiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJzdHlsZWQtY29tcG9uZW50c1wiLFxuICAgIG1lcmdlRGVmYXVsdEFuZE5hbWVFeHBvcnRzOiB0cnVlLFxuICB9LFxuXTtcblxuLyoqXG4gKiBnZXQgZ2xvYmFsIHZhciBuYW1lIGZyb20gbW9kdWxlIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2V0TGliR2xvYmFsVmFyTmFtZSA9IChuYW1lKSA9PiB7XG4gIHJldHVybiBcIiRcIiArIG5hbWUucmVwbGFjZSgvQC9nLCBcIiRcIikucmVwbGFjZSgvW1xcL1xcLV0vZywgXCJfXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExpYk5hbWVzID0gKCkgPT4ge1xuICByZXR1cm4gbGlicy5tYXAoKGkpID0+IHtcbiAgICBpZiAodHlwZW9mIGkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiBpLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxMaWJHbG9iYWxWYXJOYW1lcyA9ICgpID0+IHtcbiAgY29uc3QgcmV0ID0ge307XG4gIGxpYnMuZm9yRWFjaCgobGliKSA9PiB7XG4gICAgbGV0IG5hbWUgPSBsaWI7XG4gICAgaWYgKHR5cGVvZiBsaWIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG5hbWUgPSBsaWIubmFtZTtcbiAgICB9XG4gICAgcmV0W25hbWVdID0gZ2V0TGliR2xvYmFsVmFyTmFtZShuYW1lKTtcbiAgfSk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgbGlic0ltcG9ydENvZGUgPSAoZXhjbHVkZSA9IFtdKSA9PiB7XG4gIGNvbnN0IGltcG9ydExpbmVzID0gW107XG4gIGNvbnN0IGFzc2lnbkxpbmVzID0gW107XG4gIGxpYnMuZm9yRWFjaCgoaSkgPT4ge1xuICAgIGxldCBuYW1lID0gaTtcbiAgICBsZXQgbWVyZ2UgPSBmYWxzZTtcbiAgICBsZXQgZnJvbSA9IG5hbWU7XG4gICAgbGV0IGV4dHJhY3REZWZhdWx0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIGkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG5hbWUgPSBpLm5hbWU7XG4gICAgICBtZXJnZSA9IGkubWVyZ2VEZWZhdWx0QW5kTmFtZUV4cG9ydHMgPz8gZmFsc2U7XG4gICAgICBmcm9tID0gaS5mcm9tID8/IG5hbWU7XG4gICAgICBleHRyYWN0RGVmYXVsdCA9IGkuZXh0cmFjdERlZmF1bHQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGV4Y2x1ZGUuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YXJOYW1lID0gZ2V0TGliR2xvYmFsVmFyTmFtZShuYW1lKTtcbiAgICBpZiAobWVyZ2UpIHtcbiAgICAgIGltcG9ydExpbmVzLnB1c2goYGltcG9ydCAqIGFzICR7dmFyTmFtZX1fbmFtZWRfZXhwb3J0cyBmcm9tICcke2Zyb219JztgKTtcbiAgICAgIGltcG9ydExpbmVzLnB1c2goYGltcG9ydCAke3Zhck5hbWV9IGZyb20gJyR7ZnJvbX0nO2ApO1xuICAgICAgYXNzaWduTGluZXMucHVzaChgT2JqZWN0LmFzc2lnbigke3Zhck5hbWV9LCAke3Zhck5hbWV9X25hbWVkX2V4cG9ydHMpO2ApO1xuICAgIH0gZWxzZSBpZiAoZXh0cmFjdERlZmF1bHQpIHtcbiAgICAgIGltcG9ydExpbmVzLnB1c2goYGltcG9ydCAke3Zhck5hbWV9IGZyb20gJyR7ZnJvbX0nO2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbXBvcnRMaW5lcy5wdXNoKGBpbXBvcnQgKiBhcyAke3Zhck5hbWV9IGZyb20gJyR7ZnJvbX0nO2ApO1xuICAgIH1cbiAgICBhc3NpZ25MaW5lcy5wdXNoKGB3aW5kb3cuJHt2YXJOYW1lfSA9ICR7dmFyTmFtZX07YCk7XG4gIH0pO1xuICByZXR1cm4gaW1wb3J0TGluZXMuY29uY2F0KGFzc2lnbkxpbmVzKS5qb2luKFwiXFxuXCIpO1xufTtcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3JhaGVlbGlmdGlraGFyL1dvcmsvbG93Y29kZXItbWFpbi9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvc3JjL2Rldi11dGlsc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3JhaGVlbGlmdGlraGFyL1dvcmsvbG93Y29kZXItbWFpbi9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvc3JjL2Rldi11dGlscy9nbG9iYWxEZXBQbGd1aW4uanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3JhaGVlbGlmdGlraGFyL1dvcmsvbG93Y29kZXItbWFpbi9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvc3JjL2Rldi11dGlscy9nbG9iYWxEZXBQbGd1aW4uanNcIjtpbXBvcnQgeyBsaWJzSW1wb3J0Q29kZSB9IGZyb20gXCIuL2V4dGVybmFsLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnbG9iYWxEZXBQbHVnaW4oZXhjbHVkZSA9IFtdKSB7XG4gIGNvbnN0IHZpcnR1YWxNb2R1bGVJZCA9IFwidmlydHVhbDpnbG9iYWxzXCI7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJsb3djb2Rlci1nbG9iYWwtcGx1Z2luXCIsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICBsb2FkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gbGlic0ltcG9ydENvZGUoZXhjbHVkZSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBdVgsT0FBTyxZQUFZO0FBQzFZLFNBQVMsb0JBQTZEO0FBQ3RFLE9BQU8sV0FBVztBQUNsQixPQUFPLHVCQUF1QjtBQUM5QixPQUFPLGdCQUFnQjtBQUN2QixPQUFPLGFBQWE7QUFDcEIsU0FBUyxrQkFBa0I7QUFDM0IsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sV0FBVztBQUNsQixTQUFTLHdCQUF3QjtBQUNqQyxPQUFPLG1CQUFtQjs7O0FDQ25CLFNBQVMsZ0JBQWdCLEtBQUs7QUFDbkMsTUFBSSxDQUFDLEtBQUs7QUFDUixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxHQUFHO0FBQ3RCLFdBQU8sR0FBRyxHQUFHO0FBQUEsRUFDZjtBQUNBLFNBQU87QUFDVDs7O0FDbkJrYSxJQUFNLFlBQVk7QUFBQSxFQUNsYjtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLEVBQ2hCO0FBQ0Y7OztBQ3BETyxJQUFNLE9BQU87QUFBQSxFQUNsQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsSUFDRSxNQUFNO0FBQUEsSUFDTixnQkFBZ0I7QUFBQSxFQUNsQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGdCQUFnQjtBQUFBLEVBQ2xCO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLEVBQ1I7QUFBQSxFQUNBO0FBQUEsSUFDRSxNQUFNO0FBQUEsSUFDTiw0QkFBNEI7QUFBQSxFQUM5QjtBQUNGO0FBT08sSUFBTSxzQkFBc0IsQ0FBQyxTQUFTO0FBQzNDLFNBQU8sTUFBTSxLQUFLLFFBQVEsTUFBTSxHQUFHLEVBQUUsUUFBUSxXQUFXLEdBQUc7QUFDN0Q7QUF1Qk8sSUFBTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUM5QyxRQUFNLGNBQWMsQ0FBQztBQUNyQixRQUFNLGNBQWMsQ0FBQztBQUNyQixPQUFLLFFBQVEsQ0FBQyxNQUFNO0FBQ2xCLFFBQUksT0FBTztBQUNYLFFBQUksUUFBUTtBQUNaLFFBQUksT0FBTztBQUNYLFFBQUksaUJBQWlCO0FBRXJCLFFBQUksT0FBTyxNQUFNLFVBQVU7QUFDekIsYUFBTyxFQUFFO0FBQ1QsY0FBUSxFQUFFLDhCQUE4QjtBQUN4QyxhQUFPLEVBQUUsUUFBUTtBQUNqQix1QkFBaUIsRUFBRSxrQkFBa0I7QUFBQSxJQUN2QztBQUVBLFFBQUksUUFBUSxTQUFTLElBQUksR0FBRztBQUMxQjtBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsb0JBQW9CLElBQUk7QUFDeEMsUUFBSSxPQUFPO0FBQ1Qsa0JBQVksS0FBSyxlQUFlLE9BQU8sd0JBQXdCLElBQUksSUFBSTtBQUN2RSxrQkFBWSxLQUFLLFVBQVUsT0FBTyxVQUFVLElBQUksSUFBSTtBQUNwRCxrQkFBWSxLQUFLLGlCQUFpQixPQUFPLEtBQUssT0FBTyxrQkFBa0I7QUFBQSxJQUN6RSxXQUFXLGdCQUFnQjtBQUN6QixrQkFBWSxLQUFLLFVBQVUsT0FBTyxVQUFVLElBQUksSUFBSTtBQUFBLElBQ3RELE9BQU87QUFDTCxrQkFBWSxLQUFLLGVBQWUsT0FBTyxVQUFVLElBQUksSUFBSTtBQUFBLElBQzNEO0FBQ0EsZ0JBQVksS0FBSyxVQUFVLE9BQU8sTUFBTSxPQUFPLEdBQUc7QUFBQSxFQUNwRCxDQUFDO0FBQ0QsU0FBTyxZQUFZLE9BQU8sV0FBVyxFQUFFLEtBQUssSUFBSTtBQUNsRDs7O0FDbkdPLFNBQVMsZ0JBQWdCLFVBQVUsQ0FBQyxHQUFHO0FBQzVDLFFBQU0sa0JBQWtCO0FBQ3hCLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLFVBQVUsSUFBSTtBQUNaLFVBQUksT0FBTyxpQkFBaUI7QUFDMUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxLQUFLLElBQUk7QUFDUCxVQUFJLE9BQU8saUJBQWlCO0FBQzFCLGVBQU8sZUFBZSxPQUFPO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUpIQSxTQUFTLGNBQWM7QUFkdkIsSUFBTSxtQ0FBbUM7QUFpQnpDLE9BQU8sT0FBTztBQUVkLElBQU0saUJBQWlCLFFBQVEsSUFBSTtBQUNuQyxJQUFNLDRCQUE0QixRQUFRLElBQUk7QUFDOUMsSUFBTSxVQUFVLFFBQVEsSUFBSSxZQUFZO0FBQ3hDLElBQU0sUUFBUSxZQUFZO0FBQzFCLElBQU0sc0JBQXNCLENBQUMsQ0FBQyxRQUFRLElBQUk7QUFHMUMsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxPQUFPLGdCQUFnQixRQUFRLElBQUksVUFBVTtBQUVuRCxJQUFJLENBQUMsa0JBQWtCLE9BQU87QUFDNUIsVUFBUSxJQUFJO0FBQ1osVUFBUSxJQUFJLE1BQU0sNENBQTRDO0FBQzlELFVBQVEsSUFBSSxNQUFNLGtGQUFrRjtBQUNwRyxVQUFRLElBQUk7QUFDWixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLElBQU0sY0FBc0M7QUFBQSxFQUMxQyxRQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEI7QUFDRjtBQUVBLElBQUksMkJBQTJCO0FBQzdCLGNBQVksZUFBZSxJQUFJO0FBQUEsSUFDN0IsUUFBUTtBQUFBLEVBQ1Y7QUFDRjtBQUVBLElBQU0sU0FBUyxDQUFDO0FBQ2hCLFVBQVUsUUFBUSxDQUFDLEVBQUUsTUFBTSxhQUFhLE1BQU07QUFDNUMsU0FBTyxJQUFJLElBQUksS0FBSyxVQUFVLFFBQVEsSUFBSSxJQUFJLEtBQUssWUFBWTtBQUNqRSxDQUFDO0FBR00sSUFBTSxhQUF5QjtBQUFBLEVBQ3BDO0FBQUEsRUFDQSxlQUFlLENBQUMsU0FBUztBQUFBLEVBQ3pCLFNBQVM7QUFBQSxJQUNQLFlBQVksQ0FBQyxRQUFRLE9BQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLElBQzFELE9BQU87QUFBQSxNQUNMLGdCQUFnQixLQUFLO0FBQUEsUUFDbkI7QUFBQSxRQUFXO0FBQUEsTUFDYjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQTtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsZUFBZTtBQUFBLE1BQ2IsV0FBVztBQUFBLFFBQ1QsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsd0JBQXdCO0FBQUEsUUFDeEIsMEJBQTBCO0FBQUEsTUFDNUI7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLHNCQUFzQjtBQUFBLFFBQ3RCLGdCQUFnQjtBQUFBLFFBQ2hCLGNBQWMsQ0FBQyxPQUFPO0FBQ3BCLGNBQUksR0FBRyxTQUFTLGNBQWMsR0FBRztBQUcvQixnQkFBSSxHQUFHLFNBQVMsbUJBQW1CO0FBQUcscUJBQU87QUFDN0MsZ0JBQUksR0FBRyxTQUFTLG1CQUFtQjtBQUFHLHFCQUFPO0FBQzdDLGdCQUFJLEdBQUcsU0FBUyxtQkFBbUI7QUFBRyxxQkFBTztBQUc3QyxnQkFBSSxHQUFHLFNBQVMsMEJBQTBCO0FBQUcscUJBQU87QUFHcEQsZ0JBQUksR0FBRyxTQUFTLFlBQVk7QUFBRyxxQkFBTztBQUN0QyxnQkFBSSxHQUFHLFNBQVMsT0FBTztBQUFHLHFCQUFPO0FBQ2pDLGdCQUFJLEdBQUcsU0FBUyxpQkFBaUI7QUFBRyxxQkFBTztBQUMzQyxnQkFBSSxHQUFHLFNBQVMsYUFBYTtBQUFHLHFCQUFPO0FBQ3ZDLGdCQUFJLEdBQUcsU0FBUyxZQUFZO0FBQUcscUJBQU87QUFDdEMsZ0JBQUksR0FBRyxTQUFTLFlBQVk7QUFBRyxxQkFBTztBQUN0QyxnQkFBSSxHQUFHLFNBQVMsaUJBQWlCO0FBQUcscUJBQU87QUFHM0MsZ0JBQUksR0FBRyxTQUFTLFVBQVU7QUFBRyxxQkFBTztBQUNwQyxnQkFBSSxHQUFHLFNBQVMsaUJBQWlCO0FBQUcscUJBQU87QUFDM0MsZ0JBQUksR0FBRyxTQUFTLG1CQUFtQjtBQUFHLHFCQUFPO0FBQzdDLGdCQUFJLEdBQUcsU0FBUyxvQkFBb0I7QUFBRyxxQkFBTztBQUc5QyxnQkFBSSxHQUFHLFNBQVMsY0FBYztBQUFHLHFCQUFPO0FBQ3hDLGdCQUFJLEdBQUcsU0FBUyxZQUFZO0FBQUcscUJBQU87QUFHdEMsZ0JBQUksR0FBRyxTQUFTLFFBQVE7QUFBRyxxQkFBTztBQUNsQyxnQkFBSSxHQUFHLFNBQVMsVUFBVTtBQUFHLHFCQUFPO0FBQ3BDLGdCQUFJLEdBQUcsU0FBUyxPQUFPO0FBQUcscUJBQU87QUFHakMsZ0JBQUksR0FBRyxTQUFTLE1BQU07QUFBRyxxQkFBTztBQUNoQyxnQkFBSSxHQUFHLFNBQVMsT0FBTztBQUFHLHFCQUFPO0FBQ2pDLGdCQUFJLEdBQUcsU0FBUyxRQUFRO0FBQUcscUJBQU87QUFDbEMsZ0JBQUksR0FBRyxTQUFTLFdBQVc7QUFBRyxxQkFBTztBQUNyQyxnQkFBSSxHQUFHLFNBQVMsTUFBTTtBQUFHLHFCQUFPO0FBQ2hDLGdCQUFJLEdBQUcsU0FBUyxjQUFjO0FBQUcscUJBQU87QUFDeEMsZ0JBQUksR0FBRyxTQUFTLGFBQWE7QUFBRyxxQkFBTztBQUN2QyxnQkFBSSxHQUFHLFNBQVMsUUFBUTtBQUFHLHFCQUFPO0FBR2xDLGdCQUFJLEdBQUcsU0FBUyxRQUFRO0FBQUcscUJBQU87QUFDbEMsZ0JBQUksR0FBRyxTQUFTLFlBQVk7QUFBRyxxQkFBTztBQUN0QyxnQkFBSSxHQUFHLFNBQVMsV0FBVztBQUFHLHFCQUFPO0FBQ3JDLGdCQUFJLEdBQUcsU0FBUyxRQUFRO0FBQUcscUJBQU87QUFDbEMsZ0JBQUksR0FBRyxTQUFTLE1BQU07QUFBRyxxQkFBTztBQUNoQyxnQkFBSSxHQUFHLFNBQVMsUUFBUTtBQUFHLHFCQUFPO0FBQ2xDLGdCQUFJLEdBQUcsU0FBUyxlQUFlO0FBQUcscUJBQU87QUFHekMsZ0JBQUksR0FBRyxTQUFTLE9BQU87QUFBRyxxQkFBTztBQUNqQyxnQkFBSSxHQUFHLFNBQVMsT0FBTztBQUFHLHFCQUFPO0FBQ2pDLGdCQUFJLEdBQUcsU0FBUyxNQUFNO0FBQUcscUJBQU87QUFDaEMsZ0JBQUksR0FBRyxTQUFTLE9BQU87QUFBRyxxQkFBTztBQUdqQyxnQkFBSSxHQUFHLFNBQVMsUUFBUTtBQUFHLHFCQUFPO0FBQ2xDLGdCQUFJLEdBQUcsU0FBUyxXQUFXO0FBQUcscUJBQU87QUFHckMsZ0JBQUksR0FBRyxTQUFTLHNCQUFzQjtBQUFHLHFCQUFPO0FBQ2hELGdCQUFJLEdBQUcsU0FBUywwQkFBMEI7QUFBRyxxQkFBTztBQUlwRCxnQkFBSSxHQUFHLFNBQVMscUJBQXFCO0FBQUcscUJBQU87QUFDL0MsZ0JBQUksR0FBRyxTQUFTLHFCQUFxQjtBQUFHLHFCQUFPO0FBRy9DLGdCQUFJLEdBQUcsU0FBUyxRQUFRO0FBQUcscUJBQU87QUFDbEMsZ0JBQUksR0FBRyxTQUFTLFlBQVk7QUFBRyxxQkFBTztBQUN0QyxnQkFBSSxHQUFHLFNBQVMsVUFBVTtBQUFHLHFCQUFPO0FBQ3BDLGdCQUFJLEdBQUcsU0FBUyxjQUFjO0FBQUcscUJBQU87QUFDeEMsZ0JBQUksR0FBRyxTQUFTLGVBQWU7QUFBRyxxQkFBTztBQUN6QyxnQkFBSSxHQUFHLFNBQVMsWUFBWTtBQUFHLHFCQUFPO0FBQ3RDLGdCQUFJLEdBQUcsU0FBUyxxQkFBcUI7QUFBRyxxQkFBTztBQUMvQyxnQkFBSSxHQUFHLFNBQVMsaUJBQWlCO0FBQUcscUJBQU87QUFDM0MsZ0JBQUksR0FBRyxTQUFTLGlCQUFpQjtBQUFHLHFCQUFPO0FBQzNDLGdCQUFJLEdBQUcsU0FBUyxnQkFBZ0I7QUFBRyxxQkFBTztBQUMxQyxnQkFBSSxHQUFHLFNBQVMsa0NBQWtDO0FBQUcscUJBQU87QUFDNUQsZ0JBQUksR0FBRyxTQUFTLHVCQUF1QjtBQUFHLHFCQUFPO0FBQ2pELG1CQUFPO0FBQUEsVUFDVDtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxVQUNMLFVBQVU7QUFBQSxZQUNSLGNBQWM7QUFBQSxZQUNkLGVBQWU7QUFBQSxZQUNmLFlBQVksQ0FBQyxnQkFBZ0IsaUJBQWlCLGFBQWE7QUFBQSxVQUM3RDtBQUFBLFVBQ0EsUUFBUTtBQUFBLFlBQ04sVUFBVTtBQUFBLFVBQ1o7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsTUFDQSxRQUFRLENBQUMsU0FBUyxTQUFTO0FBQ3pCLFlBQUksUUFBUSxTQUFTLDBCQUEwQjtBQUM3QztBQUFBLFFBQ0Y7QUFDQSxhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsTUFDZix5QkFBMEI7QUFBQSxNQUMxQix3QkFBd0IsQ0FBQyxPQUFPO0FBQzlCLFlBQUksR0FBRyxRQUFRLFVBQVUsTUFBTSxJQUFJO0FBQ2pDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLGNBQWM7QUFBQSxJQUNaLFNBQVMsQ0FBQyw0QkFBNEI7QUFBQSxJQUN0QyxTQUFTLENBQUMsTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUdsQjtBQUFBLEVBQ0EsS0FBSztBQUFBLElBQ0gscUJBQXFCO0FBQUEsTUFDbkIsTUFBTTtBQUFBLFFBQ0osWUFBWTtBQUFBLFVBQ1Ysa0JBQWtCO0FBQUEsVUFDbEIsZUFBZTtBQUFBLFVBQ2Ysc0JBQXNCO0FBQUEsVUFDdEIsdUJBQXVCO0FBQUEsUUFDekI7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUFBLElBQ0EsU0FBUztBQUFBO0FBQUEsTUFFUCxnQkFBZ0I7QUFBQTtBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLFFBQVE7QUFBQSxNQUNOLFlBQVk7QUFBQSxNQUNaLFFBQVE7QUFBQSxRQUNOLGFBQWE7QUFBQSxRQUNiLEtBQUs7QUFBQSxVQUNILFVBQVUsQ0FBQyxPQUFPO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCxNQUFNO0FBQUEsTUFDSixPQUFPO0FBQUEsUUFDTCxZQUFZO0FBQUEsVUFDVixTQUFTLENBQUMsbUJBQW1CO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCxrQkFBa0I7QUFBQSxNQUNoQixVQUFVLENBQUMsNkJBQTZCLGtDQUFrQztBQUFBLElBQzVFLENBQUM7QUFBQSxJQUNELFdBQVc7QUFBQSxNQUNULGFBQWE7QUFBQSxRQUNYLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxRQUNWLE1BQU07QUFBQSxRQUNOLFdBQVc7QUFBQSxRQUNYLEtBQUs7QUFBQSxNQUNQO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCxnQkFBZ0I7QUFBQSxJQUNoQixpQkFBaUI7QUFBQSxNQUNmLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxVQUNKLG9CQUFvQixRQUFRLEtBQUssZ0JBQWdCLElBQUksR0FBRyxvQkFBb0I7QUFBQSxRQUM5RTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUNELHVCQUF1QixXQUFXO0FBQUEsSUFDbEMsY0FBYztBQUFBLElBQ2IsRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFO0FBQUEsRUFDMUIsRUFBRSxPQUFPLE9BQU87QUFDbEI7QUFFQSxJQUFNLHFCQUFpQztBQUFBLEVBQ3JDLEdBQUc7QUFBQSxFQUNILFFBQVE7QUFBQSxJQUNOLEdBQUcsV0FBVztBQUFBLElBQ2Qsd0JBQXdCLEtBQUssVUFBVSxZQUFZO0FBQUEsRUFDckQ7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLEdBQUcsV0FBVztBQUFBLElBQ2QsVUFBVTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsYUFBYTtBQUFBLElBQ2IsS0FBSztBQUFBLE1BQ0gsU0FBUyxDQUFDLElBQUk7QUFBQSxNQUNkLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFVBQVUsTUFBTTtBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU0sZUFBZTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNOLGNBQWM7QUFDaEI7QUFFQSxJQUFNLGNBQWMsYUFBYSxRQUFRLElBQUksZ0JBQWdCLE1BQU07QUFFbkUsSUFBTyxzQkFBUSxhQUFhLGVBQWUsVUFBVTsiLAogICJuYW1lcyI6IFtdCn0K diff --git a/client/yarn.lock b/client/yarn.lock index 7fae135fa1..d15e8a065b 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -6,43 +6,42 @@ __metadata: cacheKey: 8 "@adobe/css-tools@npm:^4.0.1": - version: 4.3.3 - resolution: "@adobe/css-tools@npm:4.3.3" - checksum: d21f3786b84911fee59c995a146644a85c98692979097b26484ffa9e442fb1a92ccd68ce984e3e7cf8d5933c3560fbc0ad3e3cd1de50b9a723d1c012e793bbcb + version: 4.4.3 + resolution: "@adobe/css-tools@npm:4.4.3" + checksum: 8c773f624d7327cdc58e92ab9077500f4578b24eee9f504e7925a775df6885cd534399c40c1a2919e38cbd57c0023d5bf9e32f8b89ed783733f706366b0f61e6 languageName: node linkType: hard -"@agora-js/media@npm:4.20.2": - version: 4.20.2 - resolution: "@agora-js/media@npm:4.20.2" +"@agora-js/media@npm:4.23.3": + version: 4.23.3 + resolution: "@agora-js/media@npm:4.23.3" dependencies: - "@agora-js/report": 4.20.2 - "@agora-js/shared": 4.20.2 + "@agora-js/report": 4.23.3 + "@agora-js/shared": 4.23.3 agora-rte-extension: ^1.2.4 - axios: ^1.6.7 - pako: ^2.1.0 + axios: ^1.8.3 webrtc-adapter: 8.2.0 - checksum: 6d2ea88f2a0d59ff5928665ecb52c9c91a886e3d2a1d2f76326dc8565128444f51b34b531ac192bb91870686c36d4014dcbc0a97c5708576b40a474bc94f7640 + checksum: 8a29dc0b9da608b408d33d935e4c8a24acfc5b0a324d298f5863ddfa4758df1372711f397fa7c6d63a222dc3c8cf667960e9defca43759456735d34bd6f0452d languageName: node linkType: hard -"@agora-js/report@npm:4.20.2": - version: 4.20.2 - resolution: "@agora-js/report@npm:4.20.2" +"@agora-js/report@npm:4.23.3": + version: 4.23.3 + resolution: "@agora-js/report@npm:4.23.3" dependencies: - "@agora-js/shared": 4.20.2 - axios: ^1.6.7 - checksum: 5b43a242be97d36774b70ebac8fac7f2b321f856489e6be5a48ab83038555c2ad103443b93350c7aa7a41598681d962b3898734ae79bcc4f1e60f1dfcbe44e68 + "@agora-js/shared": 4.23.3 + axios: ^1.8.3 + checksum: 83a6b486c6e3b07c2e5a6ad91833a5c79f69f28831458fd0f2272aa3a1e82894324b7768cf7384e39f99f12a9797a1a765e7005855229d145c7013f34990db4e languageName: node linkType: hard -"@agora-js/shared@npm:4.20.2": - version: 4.20.2 - resolution: "@agora-js/shared@npm:4.20.2" +"@agora-js/shared@npm:4.23.3": + version: 4.23.3 + resolution: "@agora-js/shared@npm:4.23.3" dependencies: - axios: ^1.6.7 + axios: ^1.8.3 ua-parser-js: ^0.7.34 - checksum: d3447b619cc742da5600facdf9e68316d9bac9117c29b83ce92fb9c3e03e41e63b8c103f978b768e52682a28936f35bfae8cfa6c8fd5c6b0b11a6f85b3740caf + checksum: 6b4a3e38088620b17796ae2bbbfdb35188cded6f24289bbf55f1b0f4608d51f25b988ab9f863b16d61e0e991d7366900a246dec4b9ae53f4a7026168dd6cffd5 languageName: node linkType: hard @@ -56,21 +55,12 @@ __metadata: languageName: node linkType: hard -"@ant-design/colors@npm:^7.0.0": - version: 7.0.2 - resolution: "@ant-design/colors@npm:7.0.2" - dependencies: - "@ctrl/tinycolor": ^3.6.1 - checksum: e09eec01d3f88b4101cbf28498ba181af65a02cb28fc1b7b70f5fdf509bef0fa61185c451d1a83fdcc9f8356057d0a0436253d8183a35e6f78845fea01f40072 - languageName: node - linkType: hard - -"@ant-design/colors@npm:^7.2.0": - version: 7.2.0 - resolution: "@ant-design/colors@npm:7.2.0" +"@ant-design/colors@npm:^7.0.0, @ant-design/colors@npm:^7.2.0": + version: 7.2.1 + resolution: "@ant-design/colors@npm:7.2.1" dependencies: "@ant-design/fast-color": ^2.0.6 - checksum: a2b1e82b98b7258154869e554c1afa160cd9db6f637fee274d74917c4c61acb5c7fc05674f4d7158cb70dc1a978d36de76c4a2c90543c99caad0b092ac2a0e00 + checksum: 505c81c94f3602f28115282c7dae4e89b985dbb7dad8a35c0ad653c0ad8859f7bb541220cc5e086b57842be252a02ca240a78cd2f695ed7e0014e7605aabd80c languageName: node linkType: hard @@ -88,25 +78,7 @@ __metadata: languageName: node linkType: hard -"@ant-design/cssinjs@npm:^1.21.0": - version: 1.21.0 - resolution: "@ant-design/cssinjs@npm:1.21.0" - dependencies: - "@babel/runtime": ^7.11.1 - "@emotion/hash": ^0.8.0 - "@emotion/unitless": ^0.7.5 - classnames: ^2.3.1 - csstype: ^3.1.3 - rc-util: ^5.35.0 - stylis: ^4.0.13 - peerDependencies: - react: ">=16.0.0" - react-dom: ">=16.0.0" - checksum: d1fe42e18047c564d724d0c77045590d83657938bec5a360b41ddfdad518fadd71f111e7c2467e51315758799d95153a2f657996de329809efeb42af074065eb - languageName: node - linkType: hard - -"@ant-design/cssinjs@npm:^1.23.0": +"@ant-design/cssinjs@npm:^1.21.0, @ant-design/cssinjs@npm:^1.23.0": version: 1.23.0 resolution: "@ant-design/cssinjs@npm:1.23.0" dependencies: @@ -140,23 +112,7 @@ __metadata: languageName: node linkType: hard -"@ant-design/icons@npm:^5.3.0": - version: 5.3.6 - resolution: "@ant-design/icons@npm:5.3.6" - dependencies: - "@ant-design/colors": ^7.0.0 - "@ant-design/icons-svg": ^4.4.0 - "@babel/runtime": ^7.11.2 - classnames: ^2.2.6 - rc-util: ^5.31.1 - peerDependencies: - react: ">=16.0.0" - react-dom: ">=16.0.0" - checksum: bdb57adcdc0c687002e99d91413ac1c9ffd70c8368a54648ef6c3427c074b24376d8dced57542be695f5fdfe81be14a62b58a41cba7f5efdadc77c4161c58cae - languageName: node - linkType: hard - -"@ant-design/icons@npm:^5.6.0": +"@ant-design/icons@npm:^5.3.0, @ant-design/icons@npm:^5.6.1": version: 5.6.1 resolution: "@ant-design/icons@npm:5.6.1" dependencies: @@ -187,138 +143,129 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.5, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": - version: 7.24.2 - resolution: "@babel/code-frame@npm:7.24.2" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.5, @babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" dependencies: - "@babel/highlight": ^7.24.2 - picocolors: ^1.0.0 - checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8 + "@babel/helper-validator-identifier": ^7.27.1 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 5874edc5d37406c4a0bb14cf79c8e51ad412fb0423d176775ac14fc0259831be1bf95bdda9c2aa651126990505e09a9f0ed85deaa99893bc316d2682c5115bdc languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/compat-data@npm:7.24.4" - checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/compat-data@npm:7.27.2" + checksum: 8d4066324e5f1275adc43f2e22110cac29ee09fe926260c43f0eaa432c148859367df4152574a28ee02dbb3e3d11dd57145eed345d49cc07f9b6e11fee06535f languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.19.6, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9": - version: 7.24.4 - resolution: "@babel/core@npm:7.24.4" + version: 7.27.1 + resolution: "@babel/core@npm:7.27.1" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.2 - "@babel/generator": ^7.24.4 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helpers": ^7.24.4 - "@babel/parser": ^7.24.4 - "@babel/template": ^7.24.0 - "@babel/traverse": ^7.24.1 - "@babel/types": ^7.24.0 + "@babel/code-frame": ^7.27.1 + "@babel/generator": ^7.27.1 + "@babel/helper-compilation-targets": ^7.27.1 + "@babel/helper-module-transforms": ^7.27.1 + "@babel/helpers": ^7.27.1 + "@babel/parser": ^7.27.1 + "@babel/template": ^7.27.1 + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 15ecad7581f3329995956ba461961b1af7bed48901f14fe962ccd3217edca60049e9e6ad4ce48134618397e6c90230168c842e2c28e47ef1f16c97dbbf663c61 + checksum: fce205f9eea387ed8a9c6de64e5a8f50256359bfc8f1352c576c843b4c148a6c2ef187cfe8d729453e520fdcc997f65920aca6cb8911fb25dfd2286966b9b914 languageName: node linkType: hard "@babel/eslint-parser@npm:^7.16.3": - version: 7.24.1 - resolution: "@babel/eslint-parser@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/eslint-parser@npm:7.27.1" dependencies: "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 eslint-visitor-keys: ^2.1.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - checksum: 962ffa98629f76234d7fd75134848bea040137c8534c602c73ed9ad6bdd3be0d2e7eaebd2ad496e81ab87220176170fd805e6fdc98464af6907ac66e1da7fc9a + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: 0e8aa37fe03e5e5f2db35e1e628c02012a9ea9aa14429495eacdb0418e8ebeaf7b6308f9f8931ee3fe64a61fd6ac7637c8ffcc2c0d85eee246b6115198418bc2 languageName: node linkType: hard -"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.24.4, @babel/generator@npm:^7.7.2": - version: 7.24.4 - resolution: "@babel/generator@npm:7.24.4" +"@babel/generator@npm:^7.27.1, @babel/generator@npm:^7.7.2": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" dependencies: - "@babel/types": ^7.24.0 + "@babel/parser": ^7.27.1 + "@babel/types": ^7.27.1 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 - jsesc: ^2.5.1 - checksum: 1b6146c31386c9df3eb594a2c36b5c98da4f67f7c06edb3d68a442b92516b21bb5ba3ad7dbe0058fe76625ed24d66923e15c95b0df75ef1907d4068921a699b8 + jsesc: ^3.0.2 + checksum: d5e220eb20aca1d93aef85c4c716237f84c5aab7d3ed8dfeb7060dcd73d20c593a687fe74cfb6d3dc1604ef9faff2ca24e6cfdb1af18e03e3a5f9f63a04c0bdc languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" +"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.22.5, @babel/helper-annotate-as-pure@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.1" dependencies: - "@babel/types": ^7.22.5 - checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + "@babel/types": ^7.27.1 + checksum: 3f8e4d591458d6c0621a3d670f8798b8895580214287390126e3e621ddf3df0bd07cbcc9500c2671b9ec10162c2f9feb1194da5cf039d40df8cb69d181fc0cd8 languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" dependencies: - "@babel/types": ^7.22.15 - checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/helper-compilation-targets@npm:7.23.6" - dependencies: - "@babel/compat-data": ^7.23.5 - "@babel/helper-validator-option": ^7.23.5 - browserslist: ^4.22.2 + "@babel/compat-data": ^7.27.2 + "@babel/helper-validator-option": ^7.27.1 + browserslist: ^4.24.0 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 + checksum: 7b95328237de85d7af1dea010a4daa28e79f961dda48b652860d5893ce9b136fc8b9ea1f126d8e0a24963b09ba5c6631dcb907b4ce109b04452d34a6ae979807 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.24.4" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-member-expression-to-functions": ^7.23.0 - "@babel/helper-optimise-call-expression": ^7.22.5 - "@babel/helper-replace-supers": ^7.24.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-member-expression-to-functions": ^7.27.1 + "@babel/helper-optimise-call-expression": ^7.27.1 + "@babel/helper-replace-supers": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 + "@babel/traverse": ^7.27.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 75b0a51ae1f7232932559779b78711c271404d02d069156d1bd9a7982c165c5134058d2ec2d8b5f2e42026ee4f52ba2a30c86a7aa3bce6b5fd0991eb721abc8c + checksum: 406954b455e5b20924e7d1b41cf932e6e98e95c3a5224c7a70c3ad96a84e8fbde915ceff7ddbf9c7d121397c4e9274f061241648475122cf6fe54e0a95caae15 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - regexpu-core: ^5.3.1 + "@babel/helper-annotate-as-pure": ^7.27.1 + regexpu-core: ^6.2.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6 + checksum: 2ede6bbad0016a9262fd281ce8f1a5d69e6179dcec4ea282830e924c29a29b66b0544ecb92e4ef4acdaf2c4c990931d7dc442dbcd6a8bcec4bad73923ef70934 languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": - version: 0.6.2 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" +"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4": + version: 0.6.4 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4" dependencies: "@babel/helper-compilation-targets": ^7.22.6 "@babel/helper-plugin-utils": ^7.22.5 @@ -327,247 +274,204 @@ __metadata: resolve: ^1.14.2 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 2bba965ea9a4887ddf9c11d51d740ab473bd7597b787d042c325f6a45912dfe908c2d6bb1d837bf82f7e9fa51e6ad5150563c58131d2bb85515e63d971414a9c - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-environment-visitor@npm:7.22.20" - checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-function-name@npm:7.23.0" - dependencies: - "@babel/template": ^7.22.15 - "@babel/types": ^7.23.0 - checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + checksum: bfbcb41f005ba11497b459cf801650af558b533f383b2f57034e9ccce592a0af699b585898deef93598ed3d9bd14502327e18dfc8a92a3db48b2a49ae2886f86 languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-hoist-variables@npm:7.22.5" +"@babel/helper-member-expression-to-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" dependencies: - "@babel/types": ^7.22.5 - checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: b13a3d120015a6fd2f6e6c2ff789cd12498745ef028710cba612cfb751b91ace700c3f96c1689228d1dcb41e9d4cf83d6dff8627dcb0c8da12d79440e783c6b8 languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.22.5, @babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" dependencies: - "@babel/types": ^7.23.0 - checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: 92d01c71c0e4aacdc2babce418a9a1a27a8f7d770a210ffa0f3933f321befab18b655bc1241bebc40767516731de0b85639140c42e45a8210abe1e792f115b28 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3": - version: 7.24.3 - resolution: "@babel/helper-module-imports@npm:7.24.3" +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" dependencies: - "@babel/types": ^7.24.0 - checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/helper-module-transforms@npm:7.23.3" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-simple-access": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.20 + "@babel/helper-module-imports": ^7.27.1 + "@babel/helper-validator-identifier": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 + checksum: 816dd166f0a850616d01ca198715d78fef052a834dc155dd57e4405d702f288071077be3ed58e13c86ac9e63ca560e876cc6d70cf5ef0f1f62bd9321084d4c06 languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" dependencies: - "@babel/types": ^7.22.5 - checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + "@babel/types": ^7.27.1 + checksum: 0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.0 - resolution: "@babel/helper-plugin-utils@npm:7.24.0" - checksum: e2baa0eede34d2fa2265947042aa84d444aa48dc51e9feedea55b67fc1bc3ab051387e18b33ca7748285a6061390831ab82f8a2c767d08470b93500ec727e9b9 +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.27.1 + resolution: "@babel/helper-plugin-utils@npm:7.27.1" + checksum: 5d715055301badab62bdb2336075a77f8dc8bd290cad2bc1b37ea3bf1b3efc40594d308082229f239deb4d6b5b80b0a73bce000e595ea74416e0339c11037047 languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-wrap-function": ^7.22.20 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-wrap-function": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7 + checksum: 0747397ba013f87dbf575454a76c18210d61c7c9af0f697546b4bcac670b54ddc156330234407b397f0c948738c304c228e0223039bc45eab4fbf46966a5e8cc languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/helper-replace-supers@npm:7.24.1" +"@babel/helper-replace-supers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-replace-supers@npm:7.27.1" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-member-expression-to-functions": ^7.23.0 - "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.27.1 + "@babel/helper-optimise-call-expression": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: c04182c34a3195c6396de2f2945f86cb60daa94ca7392db09bd8b0d4e7a15b02fbe1947c70f6062c87eadaea6d7135207129efa35cf458ea0987bab8c0f02d5a - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + checksum: 3690266c304f21008690ba68062f889a363583cabc13c3d033b94513953147af3e0a3fdb48fa1bb9fa3734b64e221fc65e5222ab70837f02321b7225f487c6ef languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helper-split-export-declaration@npm:7.22.6" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" dependencies: - "@babel/types": ^7.22.5 - checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: 4f380c5d0e0769fa6942a468b0c2d7c8f0c438f941aaa88f785f8752c103631d0904c7b4e76207a3b0e6588b2dec376595370d92ca8f8f1b422c14a69aa146d4 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.23.4": - version: 7.24.1 - resolution: "@babel/helper-string-parser@npm:7.24.1" - checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67 +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 0a8464adc4b39b138aedcb443b09f4005d86207d7126e5e079177e05c3116107d856ec08282b365e9a79a9872f40f4092a6127f8d74c8a01c1ef789dacfc25d6 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-validator-identifier@npm:7.22.20" - checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 3c7e8391e59d6c85baeefe9afb86432f2ab821c6232b00ea9082a51d3e7e95a2f3fb083d74dc1f49ac82cf238e1d2295dafcb001f7b0fab479f3f56af5eaaa47 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/helper-validator-option@npm:7.23.5" - checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-wrap-function@npm:7.22.20" +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-wrap-function@npm:7.27.1" dependencies: - "@babel/helper-function-name": ^7.22.5 - "@babel/template": ^7.22.15 - "@babel/types": ^7.22.19 - checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca + "@babel/template": ^7.27.1 + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: b0427765766494cb5455a188d4cdef5e6167f2835a8ed76f3c25fa3bbe2ec2a716588fa326c52fab0d184a9537200d76e48656e516580a914129d74528322821 languageName: node linkType: hard -"@babel/helpers@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/helpers@npm:7.24.4" +"@babel/helpers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helpers@npm:7.27.1" dependencies: - "@babel/template": ^7.24.0 - "@babel/traverse": ^7.24.1 - "@babel/types": ^7.24.0 - checksum: ecd2dc0b3b32e24b97fa3bcda432dd3235b77c2be1e16eafc35b8ef8f6c461faa99796a8bc2431a408c98b4aabfd572c160e2b67ecea4c5c9dd3a8314a97994a + "@babel/template": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: 19ede1e996cbd295fb3a881ff70bc0f91c5133ebac256441e9ecd69dfba89456e75cf7ecf06cd276c638a4de7bd6eff21151961c78038d0b23d94b4d23415ee4 languageName: node linkType: hard -"@babel/highlight@npm:^7.24.2": - version: 7.24.2 - resolution: "@babel/highlight@npm:7.24.2" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/parser@npm:7.27.2" dependencies: - "@babel/helper-validator-identifier": ^7.22.20 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: 5f17b131cc3ebf3ab285a62cf98a404aef1bd71a6be045e748f8d5bf66d6a6e1aefd62f5972c84369472e8d9f22a614c58a89cd331eb60b7ba965b31b1bbeaf5 + "@babel/types": ^7.27.1 + bin: + parser: ./bin/babel-parser.js + checksum: 1ac70a75028f1cc10eefb10ed2d83cf700ca3e1ddb4cf556a003fc5c4ca53ae83350bbb8065020fcc70d476fcf7bf1c17191b72384f719614ae18397142289cf languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1, @babel/parser@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/parser@npm:7.24.4" - bin: - parser: ./bin/babel-parser.js - checksum: 94c9e3e592894cd6fc57c519f4e06b65463df9be5f01739bb0d0bfce7ffcf99b3c2fdadd44dc59cc858ba2739ce6e469813a941c2f2dfacf333a3b2c9c5c8465 +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/traverse": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 72f24b9487e445fa61cf8be552aad394a648c2bb445c38d39d1df003186d9685b87dd8d388c950f438ea0ca44c82099d9c49252fb681c719cc72edf02bbe0304 languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.4" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 0be3f41b1b865d7a4ed1a432337be48de67989d0b4e47def34a05097a804b6fc193115f97c954fd757339e0b80030ecf1d0a3d3fd6e7e91718644de0a5aae3d3 + checksum: eb7f4146dc01f1198ce559a90b077e58b951a07521ec414e3c7d4593bf6c4ab5c2af22242a7e9fec085e20299e0ba6ea97f44a45e84ab148141bf9eb959ad25e languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: ec5fddc8db6de0e0082a883f21141d6f4f9f9f0bc190d662a732b5e9a506aae5d7d2337049a1bf055d7cb7add6f128036db6d4f47de5e9ac1be29e043c8b7ca8 + checksum: 621cfddfcc99a81e74f8b6f9101fd260b27500cb1a568e3ceae9cc8afe9aee45ac3bca3900a2b66c612b1a2366d29ef67d4df5a1c975be727eaad6906f98c2c6 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-transform-optional-chaining": ^7.24.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 + "@babel/plugin-transform-optional-chaining": ^7.27.1 peerDependencies: "@babel/core": ^7.13.0 - checksum: e18235463e716ac2443938aaec3c18b40c417a1746fba0fa4c26cf4d71326b76ef26c002081ab1b445abfae98e063d561519aa55672dddc1ef80b3940211ffbb + checksum: f07aa80272bd7a46b7ba11a4644da6c9b6a5a64e848dfaffdad6f02663adefd512e1aaebe664c4dd95f7ed4f80c872c7f8db8d8e34b47aae0930b412a28711a0 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: b5e5889ce5ef51e813e3063cd548f55eb3c88e925c3c08913f334e15d62496861e538ae52a3974e0c56a3044ed8fd5033faea67a64814324af56edc9865b7359 + checksum: 4d6792ccade2d6b9d5577b0a879ab22d05ac8a1206b1a636b6ffdb53a0c0bacaf0f7947e46de254f228ffd75456f4b95ccd82fdeaefc0b92d88af3c5991863ad languageName: node linkType: hard @@ -584,15 +488,15 @@ __metadata: linkType: hard "@babel/plugin-proposal-decorators@npm:^7.16.4": - version: 7.24.1 - resolution: "@babel/plugin-proposal-decorators@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/plugin-proposal-decorators@npm:7.27.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-decorators": ^7.24.1 + "@babel/helper-create-class-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/plugin-syntax-decorators": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b9375c64656bf9ae6d2eeb965c40823e6447f0f4594979d037231884c0f3a92af97172087f35a05e90b8ca0ccb47551b013998e85853c1c634d47b341f4deece + checksum: 2dd1694ab94165b9b06d03354baf724b4b25b152c28e2aac251f703ab1c310ac8161b8786d4f8ad888417b48f8e009593b9f75b85ac8ef6c59fa18742937b7dd languageName: node linkType: hard @@ -654,7 +558,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.16.0": +"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": version: 7.21.11 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" dependencies: @@ -690,7 +594,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -712,73 +616,51 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-decorators@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5933fdb1d8d2c0b4b80621ad65dacd4e1ccd836041557c2ddc4cb4c1f46a347fa72977fc519695a801c9cca8b9aaf90d7895ddd52cb4e510fbef5b9f03cb9568 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" +"@babel/plugin-syntax-decorators@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-decorators@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + checksum: c085b6083d9ce71f47563e05dddfff18a7611e376297b5a9eb35ef70e5919822f87bfba5b25276dfa55bdb6465943ba5d8d9a00f870611d63eaa1a148adc275e languageName: node linkType: hard -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" +"@babel/plugin-syntax-flow@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-flow@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + checksum: 7baca3171ed595d04c865b0ce46fca7f21900686df9d7fcd1017036ce78bb5483e33803de810831e68d39cf478953db69f49ae3f3de2e3207bc4ba49a96b6739 languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-flow@npm:7.24.1" +"@babel/plugin-syntax-import-assertions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 87dfe32f3a3ea77941034fb2a39fdfc9ea18a994b8df40c3659a11c8787b2bc5adea029259c4eafc03cd35f11628f6533aa2a06381db7fcbe3b2cc3c2a2bb54f + checksum: fb661d630808d67ecb85eabad25aac4e9696a20464bad4c4a6a0d3d40e4dc22557d47e9be3d591ec06429cf048cfe169b8891c373606344d51c4f3ac0f91d6d0 languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1" +"@babel/plugin-syntax-import-attributes@npm:^7.24.7, @babel/plugin-syntax-import-attributes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2a463928a63b62052e9fb8f8b0018aa11a926e94f32c168260ae012afe864875c6176c6eb361e13f300542c31316dad791b08a5b8ed92436a3095c7a0e4fce65 + checksum: 97973982fff1bbf86b3d1df13380567042887c50e2ae13a400d02a8ff2c9742a60a75e279bfb73019e1cd9710f04be5e6ab81f896e6678dcfcec8b135e8896cf languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87c8aa4a5ef931313f956871b27f2c051556f627b97ed21e9a5890ca4906b222d89062a956cde459816f5e0dec185ff128d7243d3fdc389504522acb88f0464e - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -800,18 +682,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.24.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" +"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.27.1, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.27.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 712f7e7918cb679f106769f57cfab0bc99b311032665c428b98f4c3e2e6d567601d45386a4f246df6a80d741e1f94192b3f008800d66c4f1daae3ad825c243f0 + checksum: c6d1324cff286a369aa95d99b8abd21dd07821b5d3affd5fe7d6058c84cff9190743287826463ee57a7beecd10fa1e4bc99061df532ee14e188c1c8937b13e3a languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -833,7 +715,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -888,7 +770,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -899,14 +781,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.24.1, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.24.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" +"@babel/plugin-syntax-typescript@npm:^7.27.1, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.27.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bf4bd70788d5456b5f75572e47a2e31435c7c4e43609bd4dffd2cc0c7a6cf90aabcf6cd389e351854de9a64412a07d30effef5373251fe8f6a4c9db0c0163bda + checksum: 87836f7e32af624c2914c73cd6b9803cf324e07d43f61dbb973c6a86f75df725e12540d91fac7141c14b697aa9268fd064220998daced156e96ac3062d7afb41 languageName: node linkType: hard @@ -922,797 +804,794 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1" +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 58f9aa9b0de8382f8cfa3f1f1d40b69d98cd2f52340e2391733d0af745fdddda650ba392e509bc056157c880a2f52834a38ab2c5aa5569af8c61bb6ecbf45f34 + checksum: 62c2cc0ae2093336b1aa1376741c5ed245c0987d9e4b4c5313da4a38155509a7098b5acce582b6781cc0699381420010da2e3086353344abe0a6a0ec38961eb7 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.24.3": - version: 7.24.3 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3" +"@babel/plugin-transform-async-generator-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.27.1" dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-remap-async-to-generator": ^7.22.20 - "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-remap-async-to-generator": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 309af02610be65d937664435adb432a32d9b6eb42bb3d3232c377d27fbc57014774d931665a5bfdaff3d1841b72659e0ad7adcef84b709f251cb0b8444f19214 + checksum: 37e8b76c992066f81cc24af11a25f296add6ae39f51f2c37da565fc004dbf3ef9733b42808acbfb86792d73f73bfbb4396338abbd364b9103146b119508b49c7 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1" +"@babel/plugin-transform-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" dependencies: - "@babel/helper-module-imports": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-remap-async-to-generator": ^7.22.20 + "@babel/helper-module-imports": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-remap-async-to-generator": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 429004a6596aa5c9e707b604156f49a146f8d029e31a3152b1649c0b56425264fda5fd38e5db1ddaeb33c3fe45c97dc8078d7abfafe3542a979b49f229801135 + checksum: d79d7a7ae7d416f6a48200017d027a6ba94c09c7617eea8b4e9c803630f00094c1a4fc32bf20ce3282567824ce3fcbda51653aac4003c71ea4e681b331338979 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1" +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d8e18bd57b156da1cd4d3c1780ab9ea03afed56c6824ca8e6e74f67959d7989a0e953ec370fe9b417759314f2eef30c8c437395ce63ada2e26c2f469e4704f82 + checksum: 7fb4988ca80cf1fc8345310d5edfe38e86b3a72a302675cdd09404d5064fe1d1fe1283ebe658ad2b71445ecef857bfb29a748064306b5f6c628e0084759c2201 languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/plugin-transform-block-scoping@npm:7.24.4" +"@babel/plugin-transform-block-scoping@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoping@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5229ffe1c55744b96f791521e2876b01ed05c81df67488a7453ce66c2faceb9d1d653089ce6f0abf512752e15e9acac0e75a797a860f24e05b4d36497c7c3183 + checksum: 490773ee111fd298d74bd0ba454c941ae23a39db5cd08bf4258997f44f7584399fc4214a7c3816ee70f0273c263fe2ea4e11bb07939e57845702ba05258a9cb0 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-class-properties@npm:7.24.1" +"@babel/plugin-transform-class-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-create-class-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 95779e9eef0c0638b9631c297d48aee53ffdbb2b1b5221bf40d7eccd566a8e34f859ff3571f8f20b9159b67f1bff7d7dc81da191c15d69fbae5a645197eae7e0 + checksum: 475a6e5a9454912fe1bdc171941976ca10ea4e707675d671cdb5ce6b6761d84d1791ac61b6bca81a2e5f6430cb7b9d8e4b2392404110e69c28207a754e196294 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.24.4": - version: 7.24.4 - resolution: "@babel/plugin-transform-class-static-block@npm:7.24.4" +"@babel/plugin-transform-class-static-block@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.4 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/helper-create-class-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.12.0 - checksum: 3b1db3308b57ba21d47772a9f183804234c23fd64c9ca40915d2d65c5dc7a48b49a6de16b8b90b7a354eacbb51232a862f0fca3dbd23e27d34641f511decddab + checksum: 69688fe1641ae0ea025b916b8c2336e8b5643a5ec292e8f546ecd35d9d9d4bb301d738910822a79d867098cf687d550d92cd906ae4cda03c0f69b1ece2149a58 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-classes@npm:7.24.1" +"@babel/plugin-transform-classes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-classes@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-replace-supers": ^7.24.1 - "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-compilation-targets": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-replace-supers": ^7.27.1 + "@babel/traverse": ^7.27.1 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e5337e707d731c9f4dcc107d09c9a99b90786bc0da6a250165919587ed818818f6cae2bbcceea880abef975c0411715c0c7f3f361ecd1526bf2eaca5ad26bb00 + checksum: a4275d3a9e2e4144c421baa49958191e4b33957fca6e87686ed8da0eb3240270d4f91a2a4b9491c87feb6c33f459d8aec013cec8d5f5099c794b740703802dc7 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" +"@babel/plugin-transform-computed-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/template": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/template": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f2832bcf100a70f348facbb395873318ef5b9ee4b0fb4104a420d9daaeb6003cc2ecc12fd8083dd2e4a7c2da873272ad73ff94de4497125a0cf473294ef9664e + checksum: 48bd20f7d631b08c51155751bf75b698d4a22cca36f41c22921ab92e53039c9ec5c3544e5282e18692325ef85d2e4a18c27e12c62b5e20c26fb0c92447e35224 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.1" +"@babel/plugin-transform-destructuring@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-destructuring@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 994fd3c513e40b8f1bdfdd7104ebdcef7c6a11a4e380086074496f586db3ac04cba0ae70babb820df6363b6700747b0556f6860783e046ace7c741a22f49ec5b + checksum: 492013fc4befd5f3554853f983b82cfa748dd2004a525f1f16a37f841ac402a51e891cac2084b03e2b89553f0e1e685cf5bf8bf9df8fed82114c580b3c567bb6 languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1" +"@babel/plugin-transform-dotall-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7f623d25b6f213b94ebc1754e9e31c1077c8e288626d8b7bfa76a97b067ce80ddcd0ede402a546706c65002c0ccf45cd5ec621511c2668eed31ebcabe8391d35 + checksum: 2173e5b13f403538ffc6bd57b190cedf4caf320abc13a99e5b2721864e7148dbd3bd7c82d92377136af80432818f665fdd9a1fd33bc5549a4c91e24e5ce2413c languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.1" +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a3b07c07cee441e185858a9bb9739bb72643173c18bf5f9f949dd2d4784ca124e56b01d0a270790fb1ff0cf75d436075db0a2b643fb4285ff9a21df9e8dc6284 + checksum: ef2112d658338e3ff0827f39a53c0cfa211f1cbbe60363bca833a5269df389598ec965e7283600b46533c39cdca82307d0d69c0f518290ec5b00bb713044715b + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2a109613535e6ac79240dced71429e988affd6a5b3d0cd0f563c8d6c208c51ce7bf2c300bc1150502376b26a51f279119b3358f1c0f2d2f8abca3bcd62e1ae46 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1" +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 59fc561ee40b1a69f969c12c6c5fac206226d6642213985a569dd0f99f8e41c0f4eaedebd36936c255444a8335079842274c42a975a433beadb436d4c5abb79b + checksum: 7a9fbc8d17148b7f11a1d1ca3990d2c2cd44bd08a45dcaf14f20a017721235b9044b20e6168b6940282bb1b48fb78e6afbdfb9dd9d82fde614e15baa7d579932 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.1" +"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f90841fe1a1e9f680b4209121d3e2992f923e85efcd322b26e5901c180ef44ff727fb89790803a23fac49af34c1ce2e480018027c22b4573b615512ac5b6fc50 + checksum: 4ff4a0f30babc457a5ae8564deda209599627c2ce647284a0e8e66f65b44f6d968cf77761a4cc31b45b61693f0810479248c79e681681d8ccb39d0c52944c1fd languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1" +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bc710ac231919df9555331885748385c11c5e695d7271824fe56fba51dd637d48d3e5cd52e1c69f2b1a384fbbb41552572bc1ca3a2285ee29571f002e9bb2421 + checksum: 85082923eca317094f08f4953d8ea2a6558b3117826c0b740676983902b7236df1f4213ad844cb38c2dae104753dbe8f1cc51f01567835d476d32f5f544a4385 languageName: node linkType: hard "@babel/plugin-transform-flow-strip-types@npm:^7.16.0": - version: 7.24.1 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-flow": ^7.24.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/plugin-syntax-flow": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 83faac90c934e15a8fe813d90cbfdf8aa2cb2cc9108f55e4a1ecda1c3097735af6a0b6623057f059153b572bc1dd088aeb2ff24217e9de82ad2390ab1210d01b + checksum: 0885028866fadefef35292d5a27f878d6a12b6f83778f8731481d4503b49c258507882a7de2aafda9b62d5f6350042f1a06355b998d5ed5e85d693bfcb77b939 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-for-of@npm:7.24.1" +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 990adde96ea1766ed6008c006c7040127bef59066533bb2977b246ea4a596fe450a528d1881a0db5f894deaf1b81654dfb494b19ad405b369be942738aa9c364 + checksum: c9224e08de5d80b2c834383d4359aa9e519db434291711434dd996a4f86b7b664ad67b45d65459b7ec11fa582e3e11a3c769b8a8ca71594bdd4e2f0503f84126 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-function-name@npm:7.24.1" +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" dependencies: - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-compilation-targets": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 31eb3c75297dda7265f78eba627c446f2324e30ec0124a645ccc3e9f341254aaa40d6787bd62b2280d77c0a5c9fbfce1da2c200ef7c7f8e0a1b16a8eb3644c6f + checksum: 26a2a183c3c52a96495967420a64afc5a09f743a230272a131668abf23001e393afa6371e6f8e6c60f4182bea210ed31d1caf866452d91009c1daac345a52f23 languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-json-strings@npm:7.24.1" +"@babel/plugin-transform-json-strings@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f42302d42fc81ac00d14e9e5d80405eb80477d7f9039d7208e712d6bcd486a4e3b32fdfa07b5f027d6c773723d8168193ee880f93b0e430c828e45f104fb82a4 + checksum: 2c05a02f63b49f47069271b3405a66c3c8038de5b995b0700b1bd9a5e2bb3e67abd01e4604629302a521f4d8122a4233944aefa16559fd4373d256cc5d3da57f languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-literals@npm:7.24.1" +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2df94e9478571852483aca7588419e574d76bde97583e78551c286f498e01321e7dbb1d0ef67bee16e8f950688f79688809cfde370c5c4b84c14d841a3ef217a + checksum: 0a76d12ab19f32dd139964aea7da48cecdb7de0b75e207e576f0f700121fe92367d788f328bf4fb44b8261a0f605c97b44e62ae61cddbb67b14e94c88b411f95 languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 895f2290adf457cbf327428bdb4fb90882a38a22f729bcf0629e8ad66b9b616d2721fbef488ac00411b647489d1dda1d20171bb3772d0796bb7ef5ecf057808a + checksum: 2757955d81d65cc4701c17b83720745f6858f7a1d1d58117e379c204f47adbeb066b778596b6168bdbf4a22c229aab595d79a9abc261d0c6bfd62d4419466e73 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1" +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4ea641cc14a615f9084e45ad2319f95e2fee01c77ec9789685e7e11a6c286238a426a98f9c1ed91568a047d8ac834393e06e8c82d1ff01764b7aa61bee8e9023 + checksum: 804121430a6dcd431e6ffe99c6d1fbbc44b43478113b79c677629e7f877b4f78a06b69c6bfb2747fd84ee91879fe2eb32e4620b53124603086cf5b727593ebe8 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.24.1" +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-module-transforms": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3d777c262f257e93f0405b13e178f9c4a0f31855b409f0191a76bb562a28c541326a027bfe6467fcb74752f3488c0333b5ff2de64feec1b3c4c6ace1747afa03 + checksum: 8bb36d448e438d5d30f4faf19120e8c18aa87730269e65d805bf6032824d175ed738057cc392c2c8a650028f1ae0f346cad8d6b723f31a037b586e2092a7be18 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-module-transforms": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 11402b34c49f76aa921b43c2d76f3f129a32544a1dc4f0d1e48b310f9036ab75269a6d8684ed0198b7a0b07bd7898b12f0cacceb26fbb167999fd2a819aa0802 + checksum: bc45c1beff9b145c982bd6a614af338893d38bce18a9df7d658c9084e0d8114b286dcd0e015132ae7b15dd966153cb13321e4800df9766d0ddd892d22bf09d2a languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1" +"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" dependencies: - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-identifier": ^7.22.20 + "@babel/helper-module-transforms": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-identifier": ^7.27.1 + "@babel/traverse": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 903766f6808f04278e887e4adec9b1efa741726279652dad255eaad0f5701df8f8ff0af25eb8541a00eb3c9eae2dccf337b085cfa011426ca33ed1f95d70bf75 + checksum: 7c17a8973676c18525d87f277944616596f1b154cc2b9263bfd78ecdbf5f4288ec46c7f58017321ca3e3d6dfeb96875467b95311a39719b475d42a157525d87f languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1" +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" dependencies: - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-module-transforms": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4922f5056d34de6fd59a1ab1c85bc3472afa706c776aceeb886289c9ac9117e6eb8e22d06c537eb5bc0ede6c30f6bd85210bdcc150dc0ae2d2373f8252df9364 + checksum: b007dd89231f2eeccf1c71a85629bcb692573303977a4b1c5f19a835ea6b5142c18ef07849bc6d752b874a11bc0ddf3c67468b77c8ee8310290b688a4f01ef31 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.5 - "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 + checksum: a711c92d9753df26cefc1792481e5cbff4fe4f32b383d76b25e36fa865d8023b1b9aa6338cf18f5c0e864c71a7fbe8115e840872ccd61a914d9953849c68de7d languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-new-target@npm:7.24.1" +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f56159ba56e8824840b8073f65073434e4bc4ef20e366bc03aa6cae9a4389365574fa72390e48aed76049edbc6eba1181eb810e58fae22c25946c62f9da13db4 + checksum: 32c8078d843bda001244509442d68fd3af088d7348ba883f45c262b2c817a27ffc553b0d78e7f7a763271b2ece7fac56151baad7a91fb21f5bb1d2f38e5acad7 languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 74025e191ceb7cefc619c15d33753aab81300a03d81b96ae249d9b599bc65878f962d608f452462d3aad5d6e334b7ab2b09a6bdcfe8d101fe77ac7aacca4261e + checksum: 1c6b3730748782d2178cc30f5cc37be7d7666148260f3f2dfc43999908bdd319bdfebaaf19cf04ac1f9dee0f7081093d3fa730cda5ae1b34bcd73ce406a78be7 languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1" +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3247bd7d409574fc06c59e0eb573ae7470d6d61ecf780df40b550102bb4406747d8f39dcbec57eb59406df6c565a86edd3b429e396ad02e4ce201ad92050832e + checksum: 049b958911de86d32408cd78017940a207e49c054ae9534ab53a32a57122cc592c0aae3c166d6f29bd1a7d75cc779d71883582dd76cb28b2fbb493e842d8ffca languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1" +"@babel/plugin-transform-object-rest-spread@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.27.2" dependencies: - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.24.1 + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/plugin-transform-destructuring": ^7.27.1 + "@babel/plugin-transform-parameters": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d5d28b1f33c279a38299d34011421a4915e24b3846aa23a1aba947f1366ce673ddf8df09dd915e0f2c90c5327f798bf126dca013f8adff1fc8f09e18878b675a + checksum: 6d518c21cddfa436029d72409aac8f680d3ba3a10eb94477112869132226498474a61218893ac9958f8bc079109af0f684d1347d5036fee8e9b477daecf2d8f3 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-object-super@npm:7.24.1" +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-replace-supers": ^7.24.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-replace-supers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d34d437456a54e2a5dcb26e9cf09ed4c55528f2a327c5edca92c93e9483c37176e228d00d6e0cf767f3d6fdbef45ae3a5d034a7c59337a009e20ae541c8220fa + checksum: 46b819cb9a6cd3cfefe42d07875fee414f18d5e66040366ae856116db560ad4e16f3899a0a7fddd6773e0d1458444f94b208b67c0e3b6977a27ea17a5c13dbf6 languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1" +"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ff7c02449d32a6de41e003abb38537b4a1ad90b1eaa4c0b578cb1b55548201a677588a8c47f3e161c72738400ae811a6673ea7b8a734344755016ca0ac445dac + checksum: f4356b04cf21a98480f9788ea50f1f13ee88e89bb6393ba4b84d1f39a4a84c7928c9a4328e8f4c5b6deb218da68a8fd17bf4f46faec7653ddc20ffaaa5ba49f4 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1" +"@babel/plugin-transform-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0eb5f4abdeb1a101c0f67ef25eba4cce0978a74d8722f6222cdb179a28e60d21ab545eda231855f50169cd63d604ec8268cff44ae9370fd3a499a507c56c2bbd + checksum: c4428d31f182d724db6f10575669aad3dbccceb0dea26aa9071fa89f11b3456278da3097fcc78937639a13c105a82cd452dc0218ce51abdbcf7626a013b928a5 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-parameters@npm:7.24.1" +"@babel/plugin-transform-parameters@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-parameters@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d183008e67b1a13b86c92fb64327a75cd8e13c13eb80d0b6952e15806f1b0c4c456d18360e451c6af73485b2c8f543608b0a29e5126c64eb625a31e970b65f80 + checksum: 52dd9db2be63ca954dbf86bba3f1dedce5f8bcf0cbc2b9ab26981b6f9c3ad5ea3a1b7ba286d18ae05d7487763f2bd086533826ee82f7b8d76873265569e45125 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-private-methods@npm:7.24.1" +"@babel/plugin-transform-private-methods@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-create-class-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7208c30bb3f3fbc73fb3a88bdcb78cd5cddaf6d523eb9d67c0c04e78f6fc6319ece89f4a5abc41777ceab16df55b3a13a4120e0efc9275ca6d2d89beaba80aa0 + checksum: c76f8f6056946466116e67eb9d8014a2d748ade2062636ab82045c1dac9c233aff10e597777bc5af6f26428beb845ceb41b95007abef7d0484da95789da56662 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1" +"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-create-class-features-plugin": ^7.24.1 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-create-class-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 47c123ca9975f7f6b20e6fe8fe89f621cd04b622539faf5ec037e2be7c3d53ce2506f7c785b1930dcdea11994eff79094a02715795218c7d6a0bdc11f2fb3ac2 + checksum: af539af1bd423aa46b9da83d649be716494ca80783841f47094b6741fa24e11141446027fd152ddff791dede9d4a76d0d5eb467402a2e584d7f5ea90e2673c7e languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.24.1" +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a73646d7ecd95b3931a3ead82c7d5efeb46e68ba362de63eb437d33531f294ec18bd31b6d24238cd3b6a3b919a6310c4a0ba4a2629927721d4d10b0518eb7715 + checksum: 7caec27d5ed8870895c9faf4f71def72745d69da0d8e77903146a4e135fd7bed5778f5f9cebb36c5fba86338e6194dd67a08c033fc84b4299b7eceab6d9630cb languageName: node linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.18.12, @babel/plugin-transform-react-constant-elements@npm:^7.21.3": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 37fd10113b786a2462cf15366aa3a11a2a5bdba9bf8881b2544941f5ad6175ebc31116be5a53549c9fce56a08ded6e0b57adb45d6e42efb55d3bc0ff7afdd433 + checksum: 8372cf17ed551cd2e3da4f32a211881265692a17ad4c4fd40a8adcb89316d147db54f023630022ad7ec7474c4108647f67e3a62db43e515246a7574dcb5eeefe languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1" +"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d87ac36073f923a25de0ed3cffac067ec5abc4cde63f7f4366881388fbea6dcbced0e4fefd3b7e99edfe58a4ce32ea4d4c523a577d2b9f0515b872ed02b3d8c3 + checksum: 9fb5fae6283f612983dac4df51a6cd41e085e698008146e046357fe324e6e8264cedf8426ea5a188326f6d3cd1e7a3d3174e15d510851e93e9ef7ceeba380dc2 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.18.6, @babel/plugin-transform-react-jsx-development@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" +"@babel/plugin-transform-react-jsx-development@npm:^7.18.6, @babel/plugin-transform-react-jsx-development@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1" dependencies: - "@babel/plugin-transform-react-jsx": ^7.22.5 + "@babel/plugin-transform-react-jsx": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560 + checksum: b88865d5b8c018992f2332da939faa15c4d4a864c9435a5937beaff3fe43781432cc42e0a5d5631098e0bd4066fc33f5fa72203b388b074c3545fe7aaa21e474 languageName: node linkType: hard "@babel/plugin-transform-react-jsx-self@npm:^7.18.6": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a0ff893b946bb0e501ad5aab43ce4b321ed9e74b94c0bc7191e2ee6409014fc96ee1a47dcb1ecdf445c44868564667ae16507ed4516dcacf6aa9c37a0ad28382 + checksum: 72cbae66a58c6c36f7e12e8ed79f292192d858dd4bb00e9e89d8b695e4c5cb6ef48eec84bffff421a5db93fd10412c581f1cccdb00264065df76f121995bdb68 languageName: node linkType: hard "@babel/plugin-transform-react-jsx-source@npm:^7.19.6": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 396ce878dc588e74113d38c5a1773e0850bb878a073238a74f8cdf62d968d56a644f5485bf4032dc095fe8863fe2bd9fbbbab6abc3adf69542e038ac5c689d4c + checksum: e2843362adb53692be5ee9fa07a386d2d8883daad2063a3575b3c373fc14cdf4ea7978c67a183cb631b4c9c8d77b2f48c24c088f8e65cc3600cb8e97d72a7161 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.22.5, @babel/plugin-transform-react-jsx@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" +"@babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-plugin-utils": ^7.22.5 - "@babel/plugin-syntax-jsx": ^7.23.3 - "@babel/types": ^7.23.4 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-module-imports": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/plugin-syntax-jsx": ^7.27.1 + "@babel/types": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d8b8c52e8e22e833bf77c8d1a53b0a57d1fd52ba9596a319d572de79446a8ed9d95521035bc1175c1589d1a6a34600d2e678fa81d81bac8fac121137097f1f0a + checksum: 960d36e5d11ba68e4fbf1e2b935c153cb6ea7b0004f838aaee8baf7de30462b8f0562743a39ce3c370cc70b8f79d3c549104a415a615b2b0055b71fd025df0f3 languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.1" +"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 06a6bfe80f1f36408d07dd80c48cf9f61177c8e5d814e80ddbe88cfad81a8b86b3110e1fe9d1ac943db77e74497daa7f874b5490c788707106ad26ecfbe44813 + checksum: a6f591c5e85a1ab0685d4a25afe591fe8d11dc0b73c677cf9560ff8d540d036a1cce9efcb729fc9092def4d854dc304ffdc063a89a9247900b69c516bf971a4c languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-regenerator@npm:7.24.1" +"@babel/plugin-transform-regenerator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-regenerator@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - regenerator-transform: ^0.15.2 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a04319388a0a7931c3f8e15715d01444c32519692178b70deccc86d53304e74c0f589a4268f6c68578d86f75e934dd1fe6e6ed9071f54ee8379f356f88ef6e42 + checksum: e1e28e08abf1c8fcdeaa8af5ab44cfda83bebc0ba6ebc155afdae243c51a2e941dd8ff6c51affb0447deb07a6bc66424fbf04482b050c061e272bc75c15853bf + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f6cb385fe0e798bff7e9b20cf5912bf40e180895ff3610b1ccdce260f3c20daaebb3a99dc087c8168a99151cd3e16b94f4689fd5a4b01cf1834b45c133e620b2 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.24.1" +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 132c6040c65aabae2d98a39289efb5c51a8632546dc50d2ad032c8660aec307fbed74ef499856ea4f881fc8505905f49b48e0270585da2ea3d50b75e962afd89 + checksum: dea0b66742d2863b369c06c053e11e15ba785892ea19cccf7aef3c1bdaa38b6ab082e19984c5ea7810d275d9445c5400fcc385ad71ce707ed9256fadb102af3b languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.24.3 - resolution: "@babel/plugin-transform-runtime@npm:7.24.3" + version: 7.27.1 + resolution: "@babel/plugin-transform-runtime@npm:7.27.1" dependencies: - "@babel/helper-module-imports": ^7.24.3 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-module-imports": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.1 + babel-plugin-polyfill-corejs3: ^0.11.0 babel-plugin-polyfill-regenerator: ^0.6.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 719112524e6fe3e665385ad4425530dadb2ddee839023381ed9d77edf5ce2748f32cc0e38dacda1990c56a7ae0af4de6cdca2413ffaf307e9f75f8d2200d09a2 + checksum: 9328060b54e430732883cac672cfd4c952c2bf2d9fb5268c675ae01f74ccb224ecdf105f5ad52b6277ad8b34b6df1e7cec6d1c02a0d17be54414265414e8ac88 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1" +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 006a2032d1c57dca76579ce6598c679c2f20525afef0a36e9d42affe3c8cf33c1427581ad696b519cc75dfee46c5e8ecdf0c6a29ffb14250caa3e16dd68cb424 + checksum: fbba6e2aef0b69681acb68202aa249c0598e470cc0853d7ff5bd0171fd6a7ec31d77cfabcce9df6360fc8349eded7e4a65218c32551bd3fc0caaa1ac899ac6d4 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-spread@npm:7.24.1" +"@babel/plugin-transform-spread@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-spread@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 622ef507e2b5120a9010b25d3df5186c06102ecad8751724a38ec924df8d3527688198fa490c47064eabba14ef2f961b3069855bd22a8c0a1e51a23eed348d02 + checksum: 58b08085ee9c29955ac3b68d61c1a79728d44d19a69cb5eb669794aeaf54c57c6647af7b979c1297e81ede3d08b3ddcb1936ef39a533f28ff3e399a9be54dab1 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.1" +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e326e96a9eeb6bb01dbc4d3362f989411490671b97f62edf378b8fb102c463a018b777f28da65344d41b22aa6efcdfa01ed43d2b11fdcf202046d3174be137c5 + checksum: e1414a502efba92c7974681767e365a8cda6c5e9e5f33472a9eaa0ce2e75cea0a9bef881ff8dda37c7810ad902f98d3c00ead92a3ac3b73a79d011df85b5a189 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.24.1" +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4c9009c72321caf20e3b6328bbe9d7057006c5ae57b794cf247a37ca34d87dfec5e27284169a16df5a6235a083bf0f3ab9e1bfcb005d1c8b75b04aed75652621 + checksum: 93aad782503b691faef7c0893372d5243df3219b07f1f22cfc32c104af6a2e7acd6102c128439eab15336d048f1b214ca134b87b0630d8cd568bf447f78b25ce languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.1" +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 90251c02986aebe50937522a6e404cb83db1b1feda17c0244e97d6429ded1634340c8411536487d14c54495607e1b7c9dc4db4aed969d519f1ff1e363f9c2229 + checksum: ed8048c8de72c60969a64cf2273cc6d9275d8fa8db9bd25a1268273a00fb9cbd79931140311411bda1443aa56cb3961fb911d1795abacde7f0482f1d8fdf0356 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.24.1": - version: 7.24.4 - resolution: "@babel/plugin-transform-typescript@npm:7.24.4" +"@babel/plugin-transform-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typescript@npm:7.27.1" dependencies: - "@babel/helper-annotate-as-pure": ^7.22.5 - "@babel/helper-create-class-features-plugin": ^7.24.4 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/plugin-syntax-typescript": ^7.24.1 + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-create-class-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 + "@babel/plugin-syntax-typescript": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 57a9a776b1910c706d28972e4b056ced3af8fc59c29b2a6205c2bb2a408141ddb59a8f2f6041f8467a7b260942818767f4ecabb9f63adf7fddf2afa25e774dfc + checksum: 0037db32fedaacf42b5b3df774263bb7176d455859f77322f57135f7e50e457e5c95151280fc83bb9942fc1839e785489b098d73c9539d0f3c7dc9d42b3a8e86 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.1" +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d4d7cfea91af7be2768fb6bed902e00d6e3190bda738b5149c3a788d570e6cf48b974ec9548442850308ecd8fc9a67681f4ea8403129e7867bcb85adaf6ec238 + checksum: d817154bc10758ddd85b716e0bc1af1a1091e088400289ab6b78a1a4d609907ce3d2f1fd51a6fd0e0c8ecbb5f8e3aab4957e0747776d132d2379e85c3ef0520a languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1" +"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 276099b4483e707f80b054e2d29bc519158bfe52461ef5ff76f70727d592df17e30b1597ef4d8a0f04d810f6cb5a8dd887bdc1d0540af3744751710ef280090f + checksum: 5d99c89537d1ebaac3f526c04b162cf95a47d363d4829f78c6701a2c06ab78a48da66a94f853f85f44a3d72153410ba923e072bed4b7166fa097f503eb14131d languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.1" +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 400a0927bdb1425b4c0dc68a61b5b2d7d17c7d9f0e07317a1a6a373c080ef94be1dd65fdc4ac9a78fcdb58f89fd128450c7bc0d5b8ca0ae7eca3fbd98e50acba + checksum: a34d89a2b75fb78e66d97c3dc90d4877f7e31f43316b52176f95a5dee20e9bb56ecf158eafc42a001676ddf7b393d9e67650bad6b32f5405780f25fb83cd68e3 languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.22.15 - "@babel/helper-plugin-utils": ^7.24.0 + "@babel/helper-create-regexp-features-plugin": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 364342fb8e382dfaa23628b88e6484dc1097e53fb7199f4d338f1e2cd71d839bb0a35a9b1380074f6a10adb2e98b79d53ca3ec78c0b8c557ca895ffff42180df + checksum: 295126074c7388ab05c82ef3ed0907a1ee4666bbdd763477ead9aba6eb2c74bdf65669416861ac93d337a4a27640963bb214acadc2697275ce95aab14868d57f languageName: node linkType: hard "@babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.20.2": - version: 7.24.4 - resolution: "@babel/preset-env@npm:7.24.4" - dependencies: - "@babel/compat-data": ^7.24.4 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-option": ^7.23.5 - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.4 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.1 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.1 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.1 + version: 7.27.2 + resolution: "@babel/preset-env@npm:7.27.2" + dependencies: + "@babel/compat-data": ^7.27.2 + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-option": ^7.27.1 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.27.1 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.27.1 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.27.1 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.27.1 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.27.1 "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.24.1 - "@babel/plugin-syntax-import-attributes": ^7.24.1 - "@babel/plugin-syntax-import-meta": ^7.10.4 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-import-assertions": ^7.27.1 + "@babel/plugin-syntax-import-attributes": ^7.27.1 "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.24.1 - "@babel/plugin-transform-async-generator-functions": ^7.24.3 - "@babel/plugin-transform-async-to-generator": ^7.24.1 - "@babel/plugin-transform-block-scoped-functions": ^7.24.1 - "@babel/plugin-transform-block-scoping": ^7.24.4 - "@babel/plugin-transform-class-properties": ^7.24.1 - "@babel/plugin-transform-class-static-block": ^7.24.4 - "@babel/plugin-transform-classes": ^7.24.1 - "@babel/plugin-transform-computed-properties": ^7.24.1 - "@babel/plugin-transform-destructuring": ^7.24.1 - "@babel/plugin-transform-dotall-regex": ^7.24.1 - "@babel/plugin-transform-duplicate-keys": ^7.24.1 - "@babel/plugin-transform-dynamic-import": ^7.24.1 - "@babel/plugin-transform-exponentiation-operator": ^7.24.1 - "@babel/plugin-transform-export-namespace-from": ^7.24.1 - "@babel/plugin-transform-for-of": ^7.24.1 - "@babel/plugin-transform-function-name": ^7.24.1 - "@babel/plugin-transform-json-strings": ^7.24.1 - "@babel/plugin-transform-literals": ^7.24.1 - "@babel/plugin-transform-logical-assignment-operators": ^7.24.1 - "@babel/plugin-transform-member-expression-literals": ^7.24.1 - "@babel/plugin-transform-modules-amd": ^7.24.1 - "@babel/plugin-transform-modules-commonjs": ^7.24.1 - "@babel/plugin-transform-modules-systemjs": ^7.24.1 - "@babel/plugin-transform-modules-umd": ^7.24.1 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 - "@babel/plugin-transform-new-target": ^7.24.1 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.1 - "@babel/plugin-transform-numeric-separator": ^7.24.1 - "@babel/plugin-transform-object-rest-spread": ^7.24.1 - "@babel/plugin-transform-object-super": ^7.24.1 - "@babel/plugin-transform-optional-catch-binding": ^7.24.1 - "@babel/plugin-transform-optional-chaining": ^7.24.1 - "@babel/plugin-transform-parameters": ^7.24.1 - "@babel/plugin-transform-private-methods": ^7.24.1 - "@babel/plugin-transform-private-property-in-object": ^7.24.1 - "@babel/plugin-transform-property-literals": ^7.24.1 - "@babel/plugin-transform-regenerator": ^7.24.1 - "@babel/plugin-transform-reserved-words": ^7.24.1 - "@babel/plugin-transform-shorthand-properties": ^7.24.1 - "@babel/plugin-transform-spread": ^7.24.1 - "@babel/plugin-transform-sticky-regex": ^7.24.1 - "@babel/plugin-transform-template-literals": ^7.24.1 - "@babel/plugin-transform-typeof-symbol": ^7.24.1 - "@babel/plugin-transform-unicode-escapes": ^7.24.1 - "@babel/plugin-transform-unicode-property-regex": ^7.24.1 - "@babel/plugin-transform-unicode-regex": ^7.24.1 - "@babel/plugin-transform-unicode-sets-regex": ^7.24.1 + "@babel/plugin-transform-arrow-functions": ^7.27.1 + "@babel/plugin-transform-async-generator-functions": ^7.27.1 + "@babel/plugin-transform-async-to-generator": ^7.27.1 + "@babel/plugin-transform-block-scoped-functions": ^7.27.1 + "@babel/plugin-transform-block-scoping": ^7.27.1 + "@babel/plugin-transform-class-properties": ^7.27.1 + "@babel/plugin-transform-class-static-block": ^7.27.1 + "@babel/plugin-transform-classes": ^7.27.1 + "@babel/plugin-transform-computed-properties": ^7.27.1 + "@babel/plugin-transform-destructuring": ^7.27.1 + "@babel/plugin-transform-dotall-regex": ^7.27.1 + "@babel/plugin-transform-duplicate-keys": ^7.27.1 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.27.1 + "@babel/plugin-transform-dynamic-import": ^7.27.1 + "@babel/plugin-transform-exponentiation-operator": ^7.27.1 + "@babel/plugin-transform-export-namespace-from": ^7.27.1 + "@babel/plugin-transform-for-of": ^7.27.1 + "@babel/plugin-transform-function-name": ^7.27.1 + "@babel/plugin-transform-json-strings": ^7.27.1 + "@babel/plugin-transform-literals": ^7.27.1 + "@babel/plugin-transform-logical-assignment-operators": ^7.27.1 + "@babel/plugin-transform-member-expression-literals": ^7.27.1 + "@babel/plugin-transform-modules-amd": ^7.27.1 + "@babel/plugin-transform-modules-commonjs": ^7.27.1 + "@babel/plugin-transform-modules-systemjs": ^7.27.1 + "@babel/plugin-transform-modules-umd": ^7.27.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.27.1 + "@babel/plugin-transform-new-target": ^7.27.1 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.27.1 + "@babel/plugin-transform-numeric-separator": ^7.27.1 + "@babel/plugin-transform-object-rest-spread": ^7.27.2 + "@babel/plugin-transform-object-super": ^7.27.1 + "@babel/plugin-transform-optional-catch-binding": ^7.27.1 + "@babel/plugin-transform-optional-chaining": ^7.27.1 + "@babel/plugin-transform-parameters": ^7.27.1 + "@babel/plugin-transform-private-methods": ^7.27.1 + "@babel/plugin-transform-private-property-in-object": ^7.27.1 + "@babel/plugin-transform-property-literals": ^7.27.1 + "@babel/plugin-transform-regenerator": ^7.27.1 + "@babel/plugin-transform-regexp-modifiers": ^7.27.1 + "@babel/plugin-transform-reserved-words": ^7.27.1 + "@babel/plugin-transform-shorthand-properties": ^7.27.1 + "@babel/plugin-transform-spread": ^7.27.1 + "@babel/plugin-transform-sticky-regex": ^7.27.1 + "@babel/plugin-transform-template-literals": ^7.27.1 + "@babel/plugin-transform-typeof-symbol": ^7.27.1 + "@babel/plugin-transform-unicode-escapes": ^7.27.1 + "@babel/plugin-transform-unicode-property-regex": ^7.27.1 + "@babel/plugin-transform-unicode-regex": ^7.27.1 + "@babel/plugin-transform-unicode-sets-regex": ^7.27.1 "@babel/preset-modules": 0.1.6-no-external-plugins babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.4 + babel-plugin-polyfill-corejs3: ^0.11.0 babel-plugin-polyfill-regenerator: ^0.6.1 - core-js-compat: ^3.31.0 + core-js-compat: ^3.40.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5a057a6463f92b02bfe66257d3f2c76878815bc7847f2a716b0539d9f547eae2a9d1f0fc62a5c0eff6ab0504bb52e815829ef893e4586b641f8dd6a609d114f3 + checksum: 318b123c8783ac3833bde5a5ff315970967ccd4c1e5c97e0843c0199fe9eab48a8cb40b367b784ae19a33667bee63eb8533eb924dab05bfc92ff9ef436109001 languageName: node linkType: hard @@ -1730,116 +1609,76 @@ __metadata: linkType: hard "@babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.18.6": - version: 7.24.1 - resolution: "@babel/preset-react@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/preset-react@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-option": ^7.23.5 - "@babel/plugin-transform-react-display-name": ^7.24.1 - "@babel/plugin-transform-react-jsx": ^7.23.4 - "@babel/plugin-transform-react-jsx-development": ^7.22.5 - "@babel/plugin-transform-react-pure-annotations": ^7.24.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-option": ^7.27.1 + "@babel/plugin-transform-react-display-name": ^7.27.1 + "@babel/plugin-transform-react-jsx": ^7.27.1 + "@babel/plugin-transform-react-jsx-development": ^7.27.1 + "@babel/plugin-transform-react-pure-annotations": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 70e146a6de480cb4b6c5eb197003960a2d148d513e1f5b5d04ee954f255d68c935c2800da13e550267f47b894bd0214b2548181467b52a4bdc0a85020061b68c + checksum: 00bc146f9c742eed804c598d3f31b7d889c1baf8c768989b7f84a93ca527dd1518d3b86781e89ca45cae6dbee136510d3a121658e01416c5578aecf751517bb5 languageName: node linkType: hard "@babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.18.6, @babel/preset-typescript@npm:^7.21.0": - version: 7.24.1 - resolution: "@babel/preset-typescript@npm:7.24.1" + version: 7.27.1 + resolution: "@babel/preset-typescript@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - "@babel/helper-validator-option": ^7.23.5 - "@babel/plugin-syntax-jsx": ^7.24.1 - "@babel/plugin-transform-modules-commonjs": ^7.24.1 - "@babel/plugin-transform-typescript": ^7.24.1 + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-option": ^7.27.1 + "@babel/plugin-syntax-jsx": ^7.27.1 + "@babel/plugin-transform-modules-commonjs": ^7.27.1 + "@babel/plugin-transform-typescript": ^7.27.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f3e0ff8c20dd5abc82614df2d7953f1549a98282b60809478f7dfb41c29be63720f2d1d7a51ef1f0d939b65e8666cb7d36e32bc4f8ac2b74c20664efd41e8bdd + checksum: 38020f1b23e88ec4fbffd5737da455d8939244bddfb48a2516aef93fb5947bd9163fb807ce6eff3e43fa5ffe9113aa131305fef0fb5053998410bbfcfe6ce0ec languageName: node linkType: hard -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.9, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.24.8, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.27.1 + resolution: "@babel/runtime@npm:7.27.1" + checksum: 11339838a54783e5b14e04d94d7a4d032e9965c5823f3f687e41556fa40344ae7aeb57c535720b7a74ab3e8217def7834a6f1a665ee55bbb3befede141419913 languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.24.4 - resolution: "@babel/runtime@npm:7.24.4" +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.3.3": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" dependencies: - regenerator-runtime: ^0.14.0 - checksum: 2f27d4c0ffac7ae7999ac0385e1106f2a06992a8bdcbf3da06adcac7413863cd08c198c2e4e970041bbea849e17f02e1df18875539b6afba76c781b6b59a07c3 + "@babel/code-frame": ^7.27.1 + "@babel/parser": ^7.27.2 + "@babel/types": ^7.27.1 + checksum: ff5628bc066060624afd970616090e5bba91c6240c2e4b458d13267a523572cbfcbf549391eec8217b94b064cf96571c6273f0c04b28a8567b96edc675c28e27 languageName: node linkType: hard -"@babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.24.8": - version: 7.25.0 - resolution: "@babel/runtime@npm:7.25.0" +"@babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" dependencies: - regenerator-runtime: ^0.14.0 - checksum: 4a2a374a58eb01aaa65c5762606e90b3a1f448e0c637d42278b6cc0b42a9f5399b5f381ba9f237ee087da2860d14dd2d1de7bddcbe18be6a3cafba97e44bed64 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.13.9": - version: 7.26.9 - resolution: "@babel/runtime@npm:7.26.9" - dependencies: - regenerator-runtime: ^0.14.0 - checksum: 838492d8a925092f9ccfbd82ec183a54f430af3a4ce88fb1337a4570629202d5123bad3097a5b8df53822504d12ccb29f45c0f6842e86094f0164f17a51eec92 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.0": - version: 7.26.7 - resolution: "@babel/runtime@npm:7.26.7" - dependencies: - regenerator-runtime: ^0.14.0 - checksum: a1664a08f3f4854b895b540cca2f5f5c6c1993b5fb788c9615d70fc201e16bb254df8e0550c83eaf2749a14d87775e11a7c9ded6161203e9da7a4a323d546925 - languageName: node - linkType: hard - -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": - version: 7.24.0 - resolution: "@babel/template@npm:7.24.0" - dependencies: - "@babel/code-frame": ^7.23.5 - "@babel/parser": ^7.24.0 - "@babel/types": ^7.24.0 - checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/traverse@npm:7.24.1" - dependencies: - "@babel/code-frame": ^7.24.1 - "@babel/generator": ^7.24.1 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.24.1 - "@babel/types": ^7.24.0 + "@babel/code-frame": ^7.27.1 + "@babel/generator": ^7.27.1 + "@babel/parser": ^7.27.1 + "@babel/template": ^7.27.1 + "@babel/types": ^7.27.1 debug: ^4.3.1 globals: ^11.1.0 - checksum: 92a5ca906abfba9df17666d2001ab23f18600035f706a687055a0e392a690ae48d6fec67c8bd4ef19ba18699a77a5b7f85727e36b83f7d110141608fe0c24fe9 + checksum: 7ea3ec36a65e734f2921f5dba6f417f5dd0c90eb44a60f6addbacbbedb44e8c82eba415a74feb7d6df58e351519b81b11b6ca3c0c7c41a3f73ebeaf6895a826c languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.24.0 - resolution: "@babel/types@npm:7.24.0" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.27.1, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" dependencies: - "@babel/helper-string-parser": ^7.23.4 - "@babel/helper-validator-identifier": ^7.22.20 - to-fast-properties: ^2.0.0 - checksum: 4b574a37d490f621470ff36a5afaac6deca5546edcb9b5e316d39acbb20998e9c2be42f3fc0bf2b55906fc49ff2a5a6a097e8f5a726ee3f708a0b0ca93aed807 + "@babel/helper-string-parser": ^7.27.1 + "@babel/helper-validator-identifier": ^7.27.1 + checksum: 357c13f37aaa2f2e2cfcdb63f986d5f7abc9f38df20182b620ace34387d2460620415770fe5856eb54d70c9f0ba2f71230d29465e789188635a948476b830ae4 languageName: node linkType: hard @@ -1858,44 +1697,39 @@ __metadata: linkType: hard "@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.11.1": - version: 6.16.0 - resolution: "@codemirror/autocomplete@npm:6.16.0" + version: 6.18.6 + resolution: "@codemirror/autocomplete@npm:6.18.6" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.17.0 "@lezer/common": ^1.0.0 - peerDependencies: - "@codemirror/language": ^6.0.0 - "@codemirror/state": ^6.0.0 - "@codemirror/view": ^6.0.0 - "@lezer/common": ^1.0.0 - checksum: e33d3d8c961c03dc4a70d1ac6f01aee5362d778da9d873a8335aed47f7de9430eab083589736e7922464b941d5da23c51ab6af05400413a8d1a07604ffcb99f7 + checksum: 1d3657d5fbd2bbf983edf7fb14568b1f813a15f03848bef3833835dd3a30985d881e093842f7b3def23789b542db4eb81ec07bfa313d1ee1d54cb1b273027dea languageName: node linkType: hard "@codemirror/commands@npm:^6.3.2": - version: 6.5.0 - resolution: "@codemirror/commands@npm:6.5.0" + version: 6.8.1 + resolution: "@codemirror/commands@npm:6.8.1" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.4.0 - "@codemirror/view": ^6.0.0 + "@codemirror/view": ^6.27.0 "@lezer/common": ^1.1.0 - checksum: 27e49c5e0cb918b95d6a9f741bcc0e72cb76f963b0c829308edfb4491a37d8b12ae6fb96f9f1886b3189a22c82fec4434fbe65547dc3cd3e8dfb5222dfead2e7 + checksum: 838365af4f12e985c35f4bc59e38eb809e951fd3e35d5ad43548e61c26deda050276346dd031b9c6ed7fe13a777d59c37b9b1e46609d1d79e622d908340a468e languageName: node linkType: hard "@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.2.1": - version: 6.2.1 - resolution: "@codemirror/lang-css@npm:6.2.1" + version: 6.3.1 + resolution: "@codemirror/lang-css@npm:6.3.1" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.0.2 - "@lezer/css": ^1.0.0 - checksum: 5a8457ee8a4310030a969f2d3128429f549c4dc9b7907ee8888b42119c80b65af99093801432efdf659b8ec36a147d2a947bc1ecbbf69a759395214e3f4834a8 + "@lezer/css": ^1.1.7 + checksum: ed175d75d75bc0a059d1e60b3dcd8464d570da14fc97388439943c9c43e1e9146e37b83fe2ccaad9cd387420b7b411ea1d24ede78ecd1f2045a38acbb4dd36bc languageName: node linkType: hard @@ -1917,8 +1751,8 @@ __metadata: linkType: hard "@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.2.1": - version: 6.2.2 - resolution: "@codemirror/lang-javascript@npm:6.2.2" + version: 6.2.4 + resolution: "@codemirror/lang-javascript@npm:6.2.4" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.6.0 @@ -1927,7 +1761,7 @@ __metadata: "@codemirror/view": ^6.17.0 "@lezer/common": ^1.0.0 "@lezer/javascript": ^1.0.0 - checksum: 66379942a8347dff2bd76d10ed7cf313bca83872f8336fdd3e14accfef23e7b690cd913c9d11a3854fba2b32299da07fc3275995327642c9ee43c2a8e538c19d + checksum: 0350e9ac2df155c4ecf75d556f40b677c284c1d320620dc7228e2aa458e258dd1145c86e5ebf3451347ed6ef528f72c2eb60f5d3f6bd10af8aabb2819109e21a languageName: node linkType: hard @@ -1942,8 +1776,8 @@ __metadata: linkType: hard "@codemirror/lang-sql@npm:^6.5.4": - version: 6.6.3 - resolution: "@codemirror/lang-sql@npm:6.6.3" + version: 6.8.0 + resolution: "@codemirror/lang-sql@npm:6.8.0" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.0.0 @@ -1951,13 +1785,13 @@ __metadata: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 - checksum: b8e554bda9107107283674a6397cdb4816ad8bb429afd739fdc5e0339ef60170f09bdd93e7dc3eaf7f24ffaec5c7477ee42af7c05cb471990657014fac2fea1e + checksum: 1b5a3c8129b09f24039d8c0906fc4cb8d0f706a424a1d56721057bd1e647797c2b1240bb53eed9bf2bac5806a4e0363e555a3963f04c478efa05829890c537f7 languageName: node linkType: hard "@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0": - version: 6.10.1 - resolution: "@codemirror/language@npm:6.10.1" + version: 6.11.0 + resolution: "@codemirror/language@npm:6.11.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.23.0 @@ -1965,47 +1799,49 @@ __metadata: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 style-mod: ^4.0.0 - checksum: 453bbe122a84795752f29261412b69a8dcfdd7e4369eb7e112bffba36b9e527ad21adff1d3845e0dc44c9ab44eb0c6f823eb6ba790ddd00cc749847574eda779 + checksum: 5556dc163d5bd1d771a4f64e2750d3d1dc1f39030bc6e4b9a4704e4de7501e8d3511002e0f8f96cd8deef782730e0b49b576e30f0ea820e1c632995bd75caddd languageName: node linkType: hard "@codemirror/lint@npm:^6.0.0": - version: 6.5.0 - resolution: "@codemirror/lint@npm:6.5.0" + version: 6.8.5 + resolution: "@codemirror/lint@npm:6.8.5" dependencies: "@codemirror/state": ^6.0.0 - "@codemirror/view": ^6.0.0 + "@codemirror/view": ^6.35.0 crelt: ^1.0.5 - checksum: b4f3899d0f73e5a2b5e9bc1df8e13ecb9324b94c7d384e7c8dde794109dee051461fc86658338f41652b44879b2ccc12cdd51a8ac0bb16a5b18aafa8e57a843c + checksum: 76fa457c6664f333216aacb0112bce8a0e2fd7011c180b7c855027dbb871dc112a31bf828f5affc0e53973111dee3aac4c9c3b80ade8534ac9748f296fb77abc languageName: node linkType: hard "@codemirror/search@npm:^6.5.5": - version: 6.5.6 - resolution: "@codemirror/search@npm:6.5.6" + version: 6.5.11 + resolution: "@codemirror/search@npm:6.5.11" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: 19dc88d09fc750563347001e83c6194bbb2a25c874bd919d2d81809e1f98d6330222ddbd284aa9758a09eeb41fd153ec7c2cf810b2ee51452c25963d7f5833d5 + checksum: 4d418f176bd93705bc51c82a2f1c0e41fecc0368dc43c415635c4dfdd763aa05ebdf7f000bc9ca0083c1887e6d305b89482ec1f4db8b8765c6f38de324187476 languageName: node linkType: hard -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.4.0": - version: 6.4.1 - resolution: "@codemirror/state@npm:6.4.1" - checksum: b81b55574091349eed4d32fc0eadb0c9688f1f7c98b681318f59138ee0f527cb4c4a97831b70547c0640f02f3127647838ae6730782de4a3dd2cc58836125d01 +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.5.0": + version: 6.5.2 + resolution: "@codemirror/state@npm:6.5.2" + dependencies: + "@marijn/find-cluster-break": ^1.0.0 + checksum: 4473a79475070d73f2e72f2eaaee5b69d2833b5020faa9714609d95dd03f0e5ad02cad8031a541dcd748436842a300332a2925317b39ffa09e3b4831145d98bc languageName: node linkType: hard -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0": - version: 6.26.3 - resolution: "@codemirror/view@npm:6.26.3" +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.35.0": + version: 6.36.8 + resolution: "@codemirror/view@npm:6.36.8" dependencies: - "@codemirror/state": ^6.4.0 + "@codemirror/state": ^6.5.0 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 - checksum: fdee35fb5e0bbba7b6f1a9b43a865880911bbfafd30360da5dda21b35f81ba2d080ff66b6c3d94dbe946b6b7ec98a76208786360b8f030ef10bcb054b816de05 + checksum: 6b5bbbd6f73bf2486170e3ee6b13660b8919ec544dc527dbe6357034a534dbd7deea3e660fbcd67c5e53ea808d6411ddd355eb9cf3dc4dded2a7c3f95a7fb0ac languageName: node linkType: hard @@ -2018,13 +1854,6 @@ __metadata: languageName: node linkType: hard -"@ctrl/tinycolor@npm:^3.6.1": - version: 3.6.1 - resolution: "@ctrl/tinycolor@npm:3.6.1" - checksum: cefec6fcaaa3eb8ddf193f981e097dccf63b97b93b1e861cb18c645654824c831a568f444996e15ee509f255658ed82fba11c5365494a6e25b9b12ac454099e0 - languageName: node - linkType: hard - "@cush/relative@npm:^1.0.0": version: 1.0.0 resolution: "@cush/relative@npm:1.0.0" @@ -2040,13 +1869,13 @@ __metadata: linkType: hard "@dnd-kit/accessibility@npm:^3.0.0": - version: 3.1.0 - resolution: "@dnd-kit/accessibility@npm:3.1.0" + version: 3.1.1 + resolution: "@dnd-kit/accessibility@npm:3.1.1" dependencies: tslib: ^2.0.0 peerDependencies: react: ">=16.8.0" - checksum: fcb88c961e2f4c226ab575bc4a13712419884bb0f60761befcaa23bcb6c9939dc2cac6633416f2a07baee9a8830350c6df444039332408cdaaf27cad17c6b64b + checksum: f71b98b29e005d15c1300922b201bea9189aceeb15662e6e86231034f72b53812566361f8c14b0521278ac104f9703ca069d43f2c73862ea10181a2211ca5b27 languageName: node linkType: hard @@ -2108,12 +1937,12 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:1.2.1": - version: 1.2.1 - resolution: "@emotion/is-prop-valid@npm:1.2.1" +"@emotion/is-prop-valid@npm:1.2.2": + version: 1.2.2 + resolution: "@emotion/is-prop-valid@npm:1.2.2" dependencies: "@emotion/memoize": ^0.8.1 - checksum: 8f42dc573a3fad79b021479becb639b8fe3b60bdd1081a775d32388bca418ee53074c7602a4c845c5f75fa6831eb1cbdc4d208cc0299f57014ed3a02abcad16a + checksum: 61f6b128ea62b9f76b47955057d5d86fcbe2a6989d2cd1e583daac592901a950475a37d049b9f7a7c6aa8758a33b408735db759fdedfd1f629df0f85ab60ea25 languageName: node linkType: hard @@ -2124,10 +1953,10 @@ __metadata: languageName: node linkType: hard -"@emotion/unitless@npm:0.8.0": - version: 0.8.0 - resolution: "@emotion/unitless@npm:0.8.0" - checksum: 176141117ed23c0eb6e53a054a69c63e17ae532ec4210907a20b2208f91771821835f1c63dd2ec63e30e22fcc984026d7f933773ee6526dd038e0850919fae7a +"@emotion/unitless@npm:0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 languageName: node linkType: hard @@ -2293,20 +2122,20 @@ __metadata: linkType: hard "@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" dependencies: - eslint-visitor-keys: ^3.3.0 + eslint-visitor-keys: ^3.4.3 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + checksum: b177e3b75c0b8d0e5d71f1c532edb7e40b31313db61f0c879f9bf19c3abb2783c6c372b5deb2396dab4432f2946b9972122ac682e77010376c029dfd0149c681 languageName: node linkType: hard "@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 0d628680e204bc316d545b4993d3658427ca404ae646ce541fcc65306b8c712c340e5e573e30fb9f85f4855c0c5f6dca9868931f2fcced06417fbe1a0c6cd2d6 languageName: node linkType: hard @@ -2327,321 +2156,316 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 2afb77454c06e8316793d2e8e79a0154854d35e6782a1217da274ca60b5044d2c69d6091155234ed0551a1e408f86f09dd4ece02752c59568fa403e60611e880 languageName: node linkType: hard -"@floating-ui/core@npm:^1.0.0": - version: 1.6.1 - resolution: "@floating-ui/core@npm:1.6.1" +"@floating-ui/core@npm:^1.7.0": + version: 1.7.0 + resolution: "@floating-ui/core@npm:1.7.0" dependencies: - "@floating-ui/utils": ^0.2.0 - checksum: 77ae1bc49127a694f37464e78d8eb7971c346a8691ea62a038beeddb22b80910d326fe544267c2b15fa49ff23ae403bc2763658f6413b67dbd759ab950c11939 + "@floating-ui/utils": ^0.2.9 + checksum: 428a90e49024cfc9ac2276f6f28501aa06be8946a5619eed83de30084d35ee10a08c70fb2bde06f21d18d90714b7d3813770b5416d0d13e2d201616c49a4f611 languageName: node linkType: hard "@floating-ui/dom@npm:^1.4.2": - version: 1.6.4 - resolution: "@floating-ui/dom@npm:1.6.4" + version: 1.7.0 + resolution: "@floating-ui/dom@npm:1.7.0" dependencies: - "@floating-ui/core": ^1.0.0 - "@floating-ui/utils": ^0.2.0 - checksum: 9cb061b19e3a4dca0e61caaa926eed34f74854df32d743e49f955b97679a097b5d60ee6bb74b7b0d17f4739e3089cf503f213bd3bc64c41328b7d34070ba4550 + "@floating-ui/core": ^1.7.0 + "@floating-ui/utils": ^0.2.9 + checksum: 86e35e0d9b849476c0a29623870146b5f0c94b6fb131d14e399b235ea01a8b6c2d2545682fa01364f2a7f81bbf8e58b4947241eb5cada164eeaca2df22dbc625 languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.0": - version: 0.2.2 - resolution: "@floating-ui/utils@npm:0.2.2" - checksum: 3d8d46fd1b071c98e10d374e2dcf54d1eb9de0aa75ed2b994c9132ebf6f783f896f979053be71450bdb6d60021120cfc24d25a5c84ebb3db0994080e13d9762f +"@floating-ui/utils@npm:^0.2.9": + version: 0.2.9 + resolution: "@floating-ui/utils@npm:0.2.9" + checksum: d518b80cec5a323e54a069a1dd99a20f8221a4853ed98ac16c75275a0cc22f75de4f8ac5b121b4f8990bd45da7ad1fb015b9a1e4bac27bb1cd62444af84e9784 languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:1.18.2": - version: 1.18.2 - resolution: "@formatjs/ecma402-abstract@npm:1.18.2" +"@formatjs/ecma402-abstract@npm:2.3.4": + version: 2.3.4 + resolution: "@formatjs/ecma402-abstract@npm:2.3.4" dependencies: - "@formatjs/intl-localematcher": 0.5.4 - tslib: ^2.4.0 - checksum: c664056ccab4e3407feabd5802276075eae2b614acb8c5979045ff5a70bfec4c04488188c30b311b6db0e0eb0b5c1ca328868d76472a14243c944bc0639e8a4d + "@formatjs/fast-memoize": 2.2.7 + "@formatjs/intl-localematcher": 0.6.1 + decimal.js: ^10.4.3 + tslib: ^2.8.0 + checksum: ee41278ab4d587e0c9e82d8ed9d46440297a547fac10eb4bee922c65c99a1cf00db154da02d7c80682bb010222e6fbe5a1cad72d64a94052544e76c9119a7513 languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.0": - version: 2.2.0 - resolution: "@formatjs/fast-memoize@npm:2.2.0" +"@formatjs/fast-memoize@npm:2.2.7": + version: 2.2.7 + resolution: "@formatjs/fast-memoize@npm:2.2.7" dependencies: - tslib: ^2.4.0 - checksum: 8697fe72a7ece252d600a7d08105f2a2f758e2dd96f54ac0a4c508b1205a559fc08835635e1f8e5ca9dcc3ee61ce1fca4a0e7047b402f29fc96051e293a280ff + tslib: ^2.8.0 + checksum: e7e6efc677d63a13d99a854305db471b69f64cbfebdcb6dbe507dab9aa7eaae482ca5de86f343c856ca0a2c8f251672bd1f37c572ce14af602c0287378097d43 languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.7.6": - version: 2.7.6 - resolution: "@formatjs/icu-messageformat-parser@npm:2.7.6" +"@formatjs/icu-messageformat-parser@npm:2.11.2": + version: 2.11.2 + resolution: "@formatjs/icu-messageformat-parser@npm:2.11.2" dependencies: - "@formatjs/ecma402-abstract": 1.18.2 - "@formatjs/icu-skeleton-parser": 1.8.0 - tslib: ^2.4.0 - checksum: d537253cbfe0515c0b72495b1133528a6643f23f978f6d9576defe5150dbb4b9b4e4b7028e2ff1bfaa4d104b05aa1119688d3fb7a4cf9b1b78ba8019a6adfeb1 + "@formatjs/ecma402-abstract": 2.3.4 + "@formatjs/icu-skeleton-parser": 1.8.14 + tslib: ^2.8.0 + checksum: ab33f052a03ee487809a91836d87536a48cd52845c55b55298cc0957ae98de306cc99ec235d0efb05e5a8b89e38f70cf7a2a83b4b2af80a6ba93944bb8943f7b languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.0": - version: 1.8.0 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.0" +"@formatjs/icu-skeleton-parser@npm:1.8.14": + version: 1.8.14 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.14" dependencies: - "@formatjs/ecma402-abstract": 1.18.2 - tslib: ^2.4.0 - checksum: 85ca45148a8535c61f2667d24d3e59ab97cd2b4accee8383594872a319e875effae7d54e070fd0d3926fc1407b04f5685f94336c1d0d587fcb1064bb498e5319 + "@formatjs/ecma402-abstract": 2.3.4 + tslib: ^2.8.0 + checksum: dcce6bdb7952201804bae17270d6a99a6baa780c4657d4bb02d15de08d1c3fd8c904e13bb1ef6ccd6fde68d5a56f22a7ba99be4e92903d4fe050f61bebaa0e8e languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.4": - version: 0.5.4 - resolution: "@formatjs/intl-localematcher@npm:0.5.4" +"@formatjs/intl-localematcher@npm:0.6.1": + version: 0.6.1 + resolution: "@formatjs/intl-localematcher@npm:0.6.1" dependencies: - tslib: ^2.4.0 - checksum: a0af57874fcd163add5f7a0cb1c008e9b09feb1d24cbce1263379ae0393cddd6681197a7f2f512f351a97666fc8675ed52cc17d1834266ee8fc65e9edf3435f6 + tslib: ^2.8.0 + checksum: 1c7e67f079f18bfd25f42d7f32bcb829d79708dba58408807e2b81ce16da812f48d958e0ad51af37faa8080042bc927dcf5b2cef63954316882d4cc007f53077 languageName: node linkType: hard -"@fortawesome/fontawesome-common-types@npm:6.5.2": - version: 6.5.2 - resolution: "@fortawesome/fontawesome-common-types@npm:6.5.2" - checksum: 8164f3e16683db5125634a4fbf3db83a5a7366bb830111ffe8538e1b8f98f8fe6dc35609cf2c595a7d6840e27d3fb45b57faf7340e40e98f0d76207fe8f94e79 +"@fortawesome/fontawesome-common-types@npm:6.7.2": + version: 6.7.2 + resolution: "@fortawesome/fontawesome-common-types@npm:6.7.2" + checksum: 9c17f03032e56b8e8e996e5b2c15c8b47baf6f8d5c0703025b0b2711907245f94a7032b3da52d2714b5aeff1c14d3535e6869a82086136dcacae9ccd479dc6a2 languageName: node linkType: hard "@fortawesome/fontawesome-svg-core@npm:^6.5.1": - version: 6.5.2 - resolution: "@fortawesome/fontawesome-svg-core@npm:6.5.2" + version: 6.7.2 + resolution: "@fortawesome/fontawesome-svg-core@npm:6.7.2" dependencies: - "@fortawesome/fontawesome-common-types": 6.5.2 - checksum: f0c2a0800074c5bbc143631b9f3f818b94bd14b8590153058eecc9f548ae0ac78cfca61196880f9b3b79b5d5b5afdb140d05da75542da2087701614c9c043905 + "@fortawesome/fontawesome-common-types": 6.7.2 + checksum: b3c269545d99202111d8334955466a7f050c38cf80c6be5fdd36baae36822421e0806986db8d1670834fab6595ce527e06ea58248e053703722d03f19eccbb82 languageName: node linkType: hard "@fortawesome/free-brands-svg-icons@npm:^6.5.1": - version: 6.5.2 - resolution: "@fortawesome/free-brands-svg-icons@npm:6.5.2" + version: 6.7.2 + resolution: "@fortawesome/free-brands-svg-icons@npm:6.7.2" dependencies: - "@fortawesome/fontawesome-common-types": 6.5.2 - checksum: f037c15978da40942e7962f3ddbddf767bc1a5a126952422c786408e4942f7da4daaefe028ba039b56761636903a5916b845547755a8e04e079c6f92e724fd37 + "@fortawesome/fontawesome-common-types": 6.7.2 + checksum: 1583c684e3070952ae392dcb1a6f8a3af3637b8030f2aa2a7305f09150d957493ac2e22d29fd45c801d7166c28200a8d1fc92d67b6aa528e9a3f9715b24a8e95 languageName: node linkType: hard "@fortawesome/free-regular-svg-icons@npm:^6.5.1": - version: 6.5.2 - resolution: "@fortawesome/free-regular-svg-icons@npm:6.5.2" + version: 6.7.2 + resolution: "@fortawesome/free-regular-svg-icons@npm:6.7.2" dependencies: - "@fortawesome/fontawesome-common-types": 6.5.2 - checksum: e5a6cf019e0252adbfc64d150c47beeb78c90f3d6173df75891a7fd3af45ce187412e498cb21e7d1b0818047febe9ff5a9896d0ca8c279eb5217cb4af63cc71d + "@fortawesome/fontawesome-common-types": 6.7.2 + checksum: 1a2be177dbb2c0186b3f10157a70c494f9e3c12c022cc8fb926c37b78a61e256a98c2739774671106454cb1a7f2336c6f49443e6bef44f33e67dd4e186f126cc languageName: node linkType: hard "@fortawesome/free-solid-svg-icons@npm:^6.5.1": - version: 6.5.2 - resolution: "@fortawesome/free-solid-svg-icons@npm:6.5.2" + version: 6.7.2 + resolution: "@fortawesome/free-solid-svg-icons@npm:6.7.2" dependencies: - "@fortawesome/fontawesome-common-types": 6.5.2 - checksum: f23964434ccbab5114c05bcdabb79d8e801b5be534618db7947d40d4841a3e52177e6145ae5fe59c941d864f70ffcffd0f1e4f0983dfd0048a1f5f3430a00c8c + "@fortawesome/fontawesome-common-types": 6.7.2 + checksum: 457cc180399be57efd1a5908aaa76c8530dec5469fa676904179f73976c10bb030c6de9bf866e2a83e042cfd23856ba5fa1ca5acdb83f4e90c6b4aa9e5412d3c languageName: node linkType: hard "@fortawesome/react-fontawesome@npm:latest": - version: 0.2.0 - resolution: "@fortawesome/react-fontawesome@npm:0.2.0" + version: 0.2.2 + resolution: "@fortawesome/react-fontawesome@npm:0.2.2" dependencies: prop-types: ^15.8.1 peerDependencies: "@fortawesome/fontawesome-svg-core": ~1 || ~6 react: ">=16.3" - checksum: f652a0c2172e7b209e2d9e7e511f9b8c17abad85f55e0bd09bb1175ea1927693215da47eb6cd95b1f3a23bd124368553c677907fa76cb17c5093afc1fcffe338 + checksum: e4bed35bfb7fc88b5bcf2305d08ee1835b82fa7705945c4d310df33bb747b05ef07a33ac9db643c8870ca4f835228978290d84d82f2c6c6a70b9ab4c886731a6 languageName: node linkType: hard "@fullcalendar/adaptive@npm:^6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/adaptive@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/adaptive@npm:6.1.17" dependencies: - "@fullcalendar/premium-common": ~6.1.11 + "@fullcalendar/premium-common": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: abfead327433c7142eec5abae9cce7af217f86218c95aa156ab028ae87f90edfc4336090a55764050861aab221217cea5dc7a80658c26f795004eb9d3c290f92 + "@fullcalendar/core": ~6.1.17 + checksum: 60cb745fa73ee45763cbc18eeaac86c14eecbb0084bea1464f2f116272cf824517fb3357d83789c3288e87e166b0606338124397f551c0451ddb4ca0599a6a8b languageName: node linkType: hard "@fullcalendar/core@npm:^6.1.6": - version: 6.1.11 - resolution: "@fullcalendar/core@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/core@npm:6.1.17" dependencies: preact: ~10.12.1 - checksum: 0078a6f96b06a637de08ba28a317bbcbf7768f53ce7891faa2a656ca2bed0e887e555d6f3203b77d6c271ccb128fa85d592411fcfd87746514a5cec68376ad87 + checksum: 76a398adf7cababcce1043de0b2fe2e7ed732eb24e8e13821e065572e12583fc864f38ed1e2d447ab18db641682eff10ed640593bd2078bd70cc3692f67944e1 languageName: node linkType: hard -"@fullcalendar/daygrid@npm:^6.1.6, @fullcalendar/daygrid@npm:~6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/daygrid@npm:6.1.11" +"@fullcalendar/daygrid@npm:^6.1.6, @fullcalendar/daygrid@npm:~6.1.17": + version: 6.1.17 + resolution: "@fullcalendar/daygrid@npm:6.1.17" peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 6eb5606de58b7a8ec30d96618a6d15b2c0d7108c94593ff94e81a8d87ce8efb1f29f3849c6c3f2b8ae56198ffe6235e2ec0e4a1270993c022dc194016e595685 + "@fullcalendar/core": ~6.1.17 + checksum: 2391b67f121993ccc47d427fd770bf6e9f9ab7c0a39a60c90b878bad66fadc8845483b1c37b068f02178858f9eeea3ff1c23b90adcc6bb5c7186c446aca7acb2 languageName: node linkType: hard "@fullcalendar/interaction@npm:^6.1.6": - version: 6.1.11 - resolution: "@fullcalendar/interaction@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/interaction@npm:6.1.17" peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: c67d4cfa0b158b848fb482835c5f44c52650037a4b912e16e2ea1955bf476c847d0ec95aea79b37b78207b2da3a7c4d2b37bd5c8b15a89bdd5e3b7ae3b7af9ba + "@fullcalendar/core": ~6.1.17 + checksum: 1121d743d99a31af1e54eef0637871d8792e0da504cfee0b7ae71ae31541a972e2f3bdaa0dca8fa3c9ee7b8665ba22f733b6d2a939b4a88356d05cb9ea67bdd5 languageName: node linkType: hard "@fullcalendar/list@npm:^6.1.9": - version: 6.1.11 - resolution: "@fullcalendar/list@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/list@npm:6.1.17" peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 84a8cd6e63407e8fb95b4b2810a49c8815d9491a298a4761b9399cc8384abebf6227cc5ec93b942783f6ea6c6bcb4e94844fd5a12d73700e535f4f15ee02b7d6 + "@fullcalendar/core": ~6.1.17 + checksum: 0b6227fbfa1cea277dc33a52b8fcd7f8d537dab2a79c0edcc4cf4ffd3a368af393d84a9ff24531f5690e8c2358e497f060fa23361638c9488b295ade5ae73b2d languageName: node linkType: hard "@fullcalendar/moment@npm:^6.1.6": - version: 6.1.11 - resolution: "@fullcalendar/moment@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/moment@npm:6.1.17" peerDependencies: - "@fullcalendar/core": ~6.1.11 + "@fullcalendar/core": ~6.1.17 moment: ^2.29.1 - checksum: bc71b652a754977a0b780cb033d4f06e6d4fad0517b2e0487fff9eeb359e3a242f6291b2160bb6762485b6c3fec87381dccc1d9a1e50477f1119d2e9295d82b9 + checksum: 37f04b364fb4b3ba61ea0a050fb485b03dc2fc11e4546c7f692484c55961c8598aa92269d29ffe4e5255fb829d3749262ea4c5df8c5df2fe6d573178fb68db66 languageName: node linkType: hard "@fullcalendar/multimonth@npm:^6.1.6": - version: 6.1.11 - resolution: "@fullcalendar/multimonth@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/multimonth@npm:6.1.17" dependencies: - "@fullcalendar/daygrid": ~6.1.11 + "@fullcalendar/daygrid": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 213a9ac97e46319bbcfce3f02edaa1b808790f58669fee06e00a7fbb9f638dfabf37c6243234758670e75ee2c1e1cb247131c3a5bb469fec77b60db577b7326c + "@fullcalendar/core": ~6.1.17 + checksum: 59c391ce80b588d21197f07c78374af21cae83d3fa722c5de4ebdcaf301cdf837ed717f99520b2c5e21c557fec15c65fc89894207d877b41805b9347b18b76b4 languageName: node linkType: hard -"@fullcalendar/premium-common@npm:~6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/premium-common@npm:6.1.11" +"@fullcalendar/premium-common@npm:~6.1.17": + version: 6.1.17 + resolution: "@fullcalendar/premium-common@npm:6.1.17" peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 54751d6a7245ecec3005450084e4492a2938d90d8538376840572c98ced36101b5a6ea0ce654d3bf98ad173d2e7d45c6fe5d6c530dca785c48e74dcb1eb3556f + "@fullcalendar/core": ~6.1.17 + checksum: 248e34a3a8588f787458f040b690c5e4a1498c2e5446023e6b030bf6bdc32404f0099d58feee436082d9638ce6016086ec5c6675d914864ee3faa277d1013822 languageName: node linkType: hard "@fullcalendar/react@npm:^6.1.6": - version: 6.1.11 - resolution: "@fullcalendar/react@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/react@npm:6.1.17" peerDependencies: - "@fullcalendar/core": ~6.1.11 - react: ^16.7.0 || ^17 || ^18 - react-dom: ^16.7.0 || ^17 || ^18 - checksum: 407557f0c1f4a3a3066b4da9ed9a502cb75e2c16aff895887b102c4f307b1d171354f89fca913f1dcaf7870b3eff64dd6f39273e4d33a82c3b5a18d1b147ffd7 + "@fullcalendar/core": ~6.1.17 + react: ^16.7.0 || ^17 || ^18 || ^19 + react-dom: ^16.7.0 || ^17 || ^18 || ^19 + checksum: 11dcf2fa85c7d69e3d020c1d3163efcd4ea294d9f8ca3d59e15b2b047ae1df2d52db09b6bb43cbedeb6c352ac962d2a5f476a9707cca41126bc11176eaf78963 languageName: node linkType: hard -"@fullcalendar/resource-daygrid@npm:~6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/resource-daygrid@npm:6.1.11" +"@fullcalendar/resource-daygrid@npm:~6.1.17": + version: 6.1.17 + resolution: "@fullcalendar/resource-daygrid@npm:6.1.17" dependencies: - "@fullcalendar/daygrid": ~6.1.11 - "@fullcalendar/premium-common": ~6.1.11 + "@fullcalendar/daygrid": ~6.1.17 + "@fullcalendar/premium-common": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - "@fullcalendar/resource": ~6.1.11 - checksum: afa8a9e240afd9678a5b22c243e64f89568ef3b4d4de62dece6d6d84915774a65f39ff7bc476add50c06a53716fc4011c5a23b19cd47f2723805bcc81f113cfa + "@fullcalendar/core": ~6.1.17 + "@fullcalendar/resource": ~6.1.17 + checksum: 26c7a4f8f1805c1f4cfa9373db5c51d0632aa9da43ed46ada1950a2b79f341735be5652770e9fab2cd7cbe2cf2864756ae185d3cbd16e4b25a7528db60b599a8 languageName: node linkType: hard "@fullcalendar/resource-timegrid@npm:^6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/resource-timegrid@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/resource-timegrid@npm:6.1.17" dependencies: - "@fullcalendar/premium-common": ~6.1.11 - "@fullcalendar/resource-daygrid": ~6.1.11 - "@fullcalendar/timegrid": ~6.1.11 + "@fullcalendar/premium-common": ~6.1.17 + "@fullcalendar/resource-daygrid": ~6.1.17 + "@fullcalendar/timegrid": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - "@fullcalendar/resource": ~6.1.11 - checksum: 5e85ef1338cc627598ca644e8f8bcca9f4dab049dd4df1edacf2f9a732663c82ee14fac03552e5b31f9d03804c853c02485d3452e062184e7cd0264ba8161719 + "@fullcalendar/core": ~6.1.17 + "@fullcalendar/resource": ~6.1.17 + checksum: 51d5af00ffcc9f65c091067758abd95b2d3fdab7a1cd887afd94034a067034e2332913f82ef24db93fbd788111f5ec4b61c641e7e3bbd7152d57cdda49cebe5f languageName: node linkType: hard "@fullcalendar/resource-timeline@npm:^6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/resource-timeline@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/resource-timeline@npm:6.1.17" dependencies: - "@fullcalendar/premium-common": ~6.1.11 - "@fullcalendar/scrollgrid": ~6.1.11 - "@fullcalendar/timeline": ~6.1.11 + "@fullcalendar/premium-common": ~6.1.17 + "@fullcalendar/scrollgrid": ~6.1.17 + "@fullcalendar/timeline": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - "@fullcalendar/resource": ~6.1.11 - checksum: ad9d27a642f097e6f50d1277dd1a09ea8789d7e936ac995e9287e86c8b346dd173c31018d0b29474ebae0fbd5b4a44720fc05db5b671394903767f4095695e2b + "@fullcalendar/core": ~6.1.17 + "@fullcalendar/resource": ~6.1.17 + checksum: 72ff45cfd518bf7adb9cfe2b50abdde7d502800590d2a9bf3f3abc2df1fe40631cf79de70e32e9c6f0890064cf9998d36471b249fed50decd3ff48dbbb1cfa50 languageName: node linkType: hard "@fullcalendar/resource@npm:^6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/resource@npm:6.1.11" + version: 6.1.17 + resolution: "@fullcalendar/resource@npm:6.1.17" dependencies: - "@fullcalendar/premium-common": ~6.1.11 + "@fullcalendar/premium-common": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 6b7266f2e3be6920d3e70fe31aaa42c8eb0f8962d76f79acfeb2e52b50f9f3fac1b98644d5f9b89b5b4109daeb961de6cbd32b58b5b215c426ca0a9534fa6b14 + "@fullcalendar/core": ~6.1.17 + checksum: 133173e935ab64e818d61843973373f6400e14dc094723a0f8399eef4814bb126682049560c521218e1c142c363c999b5232aa759470cb102aaa511c42985aab languageName: node linkType: hard -"@fullcalendar/scrollgrid@npm:~6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/scrollgrid@npm:6.1.11" +"@fullcalendar/scrollgrid@npm:~6.1.17": + version: 6.1.17 + resolution: "@fullcalendar/scrollgrid@npm:6.1.17" dependencies: - "@fullcalendar/premium-common": ~6.1.11 + "@fullcalendar/premium-common": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: f7e54b33245170fd0a696898fdd4076644b3772132ba35996558f7d80836fb1161ccd180a4f064dd8aa5a4f728a1abee063ef909b28ac3a3be46e168f6976ede + "@fullcalendar/core": ~6.1.17 + checksum: 2069477519e92bc51bf590bb8ccb85ee5647bea1375854e2b6d997c2bf74a7e4fbba98e2cb3ab362a4052f2db727e8551ee5910438dd4ddfc8b12a95fdcfe53c languageName: node linkType: hard -"@fullcalendar/timegrid@npm:^6.1.6, @fullcalendar/timegrid@npm:~6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/timegrid@npm:6.1.11" +"@fullcalendar/timegrid@npm:^6.1.6, @fullcalendar/timegrid@npm:~6.1.17": + version: 6.1.17 + resolution: "@fullcalendar/timegrid@npm:6.1.17" dependencies: - "@fullcalendar/daygrid": ~6.1.11 + "@fullcalendar/daygrid": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 4a11e6dd908e7d7f660149e6d61eff847efa14d0dcf532f8793de6b035d1a573ef7423fea0df791b6dc5f3d9792df77b72c7e6a1150289d04eca3ff9959a80ec + "@fullcalendar/core": ~6.1.17 + checksum: 196325c0e37e9358cd19665460ab9d6b845a720db72fa608fb444d19e0c5fa49a8b9c903b149ef54b680bfdb7727d06b67893acad678c0835e3c91c2e69bccce languageName: node linkType: hard -"@fullcalendar/timeline@npm:^6.1.6, @fullcalendar/timeline@npm:~6.1.11": - version: 6.1.11 - resolution: "@fullcalendar/timeline@npm:6.1.11" +"@fullcalendar/timeline@npm:^6.1.6, @fullcalendar/timeline@npm:~6.1.17": + version: 6.1.17 + resolution: "@fullcalendar/timeline@npm:6.1.17" dependencies: - "@fullcalendar/premium-common": ~6.1.11 - "@fullcalendar/scrollgrid": ~6.1.11 + "@fullcalendar/premium-common": ~6.1.17 + "@fullcalendar/scrollgrid": ~6.1.17 peerDependencies: - "@fullcalendar/core": ~6.1.11 - checksum: 79341e274a69ae9a63ec67c39b6233ab937daf51177b3689cbe91baf216729805a3fffc12febccece768410b773ae7bb7c51a3eb72b4de64acafedef2b953eff - languageName: node - linkType: hard - -"@gilbarbara/deep-equal@npm:^0.1.1": - version: 0.1.2 - resolution: "@gilbarbara/deep-equal@npm:0.1.2" - checksum: 78d4e76d36cbee639c008a63be52c1ac803212ff2560e55f68d2b8b2a6ac5e746c1976854cf101483ca18a9911aed2349da147b7756be43e75efb95e3f24468b + "@fullcalendar/core": ~6.1.17 + checksum: 9dbffafbeb9068b68f4e257d51c4ffa35ada841d49d8b8778afbd4aafb85b184e50284c429e9b44f2808cacf392b01c879aae245d64eddc922152202ffd14142 languageName: node linkType: hard @@ -2652,14 +2476,34 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@gilbarbara/hooks@npm:^0.8.2": + version: 0.8.2 + resolution: "@gilbarbara/hooks@npm:0.8.2" + dependencies: + "@gilbarbara/deep-equal": ^0.3.1 + peerDependencies: + react: 16.8 - 18 + checksum: be80dc87ebe20faa6868e459b70b257186e548001416dc888257997a3384a9a4eb10643cb31e83be9450c62b95be14d8d4375f800d06b718b4080b67358c0673 + languageName: node + linkType: hard + +"@gilbarbara/types@npm:^0.2.2": + version: 0.2.2 + resolution: "@gilbarbara/types@npm:0.2.2" dependencies: - "@humanwhocodes/object-schema": ^2.0.2 + type-fest: ^4.1.0 + checksum: 0c348410efa59a653f0f4f9342950fce08bd86ccc600488fe81ae20b5c040675637569fa9eef9c36d9ed62932c2fa7a996a7ca54b5d40ecbf9738876e269d9d4 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": ^2.0.3 debug: ^4.3.1 minimatch: ^3.0.5 - checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 + checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6 languageName: node linkType: hard @@ -2670,7 +2514,7 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": +"@humanwhocodes/object-schema@npm:^2.0.3": version: 2.0.3 resolution: "@humanwhocodes/object-schema@npm:2.0.3" checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 @@ -2691,6 +2535,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: ^7.0.4 + checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -2942,13 +2795,13 @@ __metadata: linkType: hard "@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" dependencies: "@jridgewell/set-array": ^1.2.1 "@jridgewell/sourcemap-codec": ^1.4.10 "@jridgewell/trace-mapping": ^0.3.24 - checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 + checksum: c0687b5227461717aa537fe71a42e356bcd1c43293b3353796a148bf3b0d6f59109def46c22f05b60e29a46f19b2e4676d027959a7c53a6c92b9d5b0d87d0420 languageName: node linkType: hard @@ -2976,10 +2829,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec languageName: node linkType: hard @@ -2993,7 +2846,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -3003,37 +2856,47 @@ __metadata: languageName: node linkType: hard +"@jsonforms/core@npm:^3.5.1": + version: 3.5.1 + resolution: "@jsonforms/core@npm:3.5.1" + dependencies: + "@types/json-schema": ^7.0.3 + ajv: ^8.6.1 + ajv-formats: ^2.1.0 + lodash: ^4.17.21 + checksum: d1fcc52ec34cc1f60bb8b53ea029f72b0951f9587f3f790f5f3f53f657cc3c5c52b136506c960b344dcced6ee0f7620c8ce444581385a5232fdd0926afaaaa77 + languageName: node + linkType: hard + "@jsonjoy.com/base64@npm:^1.1.1": - version: 1.1.1 - resolution: "@jsonjoy.com/base64@npm:1.1.1" + version: 1.1.2 + resolution: "@jsonjoy.com/base64@npm:1.1.2" peerDependencies: tslib: 2 - checksum: 1988f16927f110a0cd60c12dc94fd10a6e803c8918767b87c252ad5337a2671b745e23aa7b37519481735740b88c1b8ac44ef1330163d96567e379115cd9442c + checksum: 00dbf9cbc6ecb3af0e58288a305cc4ee3dfca9efa24443d98061756e8f6de4d6d2d3764bdfde07f2b03e6ce56db27c8a59b490bd134bf3d8122b4c6b394c7010 languageName: node linkType: hard -"@jsonjoy.com/json-pack@npm:^1.0.2": - version: 1.0.2 - resolution: "@jsonjoy.com/json-pack@npm:1.0.2" +"@jsonjoy.com/json-pack@npm:^1.0.3": + version: 1.2.0 + resolution: "@jsonjoy.com/json-pack@npm:1.2.0" dependencies: "@jsonjoy.com/base64": ^1.1.1 - "@jsonjoy.com/util": ^1.0.0 + "@jsonjoy.com/util": ^1.1.2 hyperdyperid: ^1.2.0 thingies: ^1.20.0 peerDependencies: tslib: 2 - checksum: 0a85ce6547e7b8bb1a35e1b76a500b464486fbebf02e3864d05d734c8aef844fc9e918b401ca8e35043c4e3d1a234fc891089b6964ffd482a277f4f0c618c553 + checksum: 9c698ad85e176b44aafb6dff0f15bbe2a2f147c1d9a3f68127e0a7bd59653ab29584fbbe2795b73926783f1299562784fc252e3b6296fb47fb5e4df5d3ea22b2 languageName: node linkType: hard -"@jsonjoy.com/util@npm:^1.0.0, @jsonjoy.com/util@npm:^1.1.0": - version: 1.1.0 - resolution: "@jsonjoy.com/util@npm:1.1.0" - dependencies: - hyperdyperid: ^1.2.0 +"@jsonjoy.com/util@npm:^1.1.2, @jsonjoy.com/util@npm:^1.3.0": + version: 1.6.0 + resolution: "@jsonjoy.com/util@npm:1.6.0" peerDependencies: tslib: 2 - checksum: b5c8ef3856c6c323ef1a3e842043c059edd0d0f4221f7ab545e47f594dc34139e5f9e80cd3f639da922a043d3f83cf2d25fa9daf58f6f1b6b0cb58555eb2846e + checksum: 7134c7d1a7500c78b8faba509bfd6eb3c96cba4c717b1d9153b0ff12bd1eaa32a44c2038cd271b17fb04f3be59813034e8cdad2eaacd6db72d5696bd269fe2c5 languageName: node linkType: hard @@ -3045,82 +2908,100 @@ __metadata: linkType: hard "@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0": - version: 1.2.1 - resolution: "@lezer/common@npm:1.2.1" - checksum: 0bd092e293a509ce334f4aaf9a4d4a25528f743cd9d7e7948c697e34ac703b805b288b62ad01563488fb206fc34ff05084f7fc5d864be775924b3d0d53ea5dd2 + version: 1.2.3 + resolution: "@lezer/common@npm:1.2.3" + checksum: 9b5f52d949adae69d077f56c0b1c2295923108c3dfb241dd9f17654ff708f3eab81ff9fa7f0d0e4a668eabdcb9d961c73e75caca87c966ca1436e30e49130fcb languageName: node linkType: hard -"@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": - version: 1.1.8 - resolution: "@lezer/css@npm:1.1.8" +"@lezer/css@npm:^1.1.0, @lezer/css@npm:^1.1.7": + version: 1.2.1 + resolution: "@lezer/css@npm:1.2.1" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 - "@lezer/lr": ^1.0.0 - checksum: 1f5968360dbac7ba27f0c2a194143769f7b01824715274dd8507dacf13cc790bb8c48ce95de355e9c58be93bb3e271bf98b9fc51213f79e4ce918e7c7ebbef04 + "@lezer/lr": ^1.3.0 + checksum: da94af5100868127eb3902f9cf1960ac37369ffa12e39df3bdf02e51f7186b2c0e4be42e5901c45822a8fc076a2fd8a750e0483ff0a347d59a52062d8231c9f6 languageName: node linkType: hard "@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3": - version: 1.2.0 - resolution: "@lezer/highlight@npm:1.2.0" + version: 1.2.1 + resolution: "@lezer/highlight@npm:1.2.1" dependencies: "@lezer/common": ^1.0.0 - checksum: 5b9dfe741f95db13f6124cb9556a43011cb8041ecf490be98d44a86b04d926a66e912bcd3a766f6a3d79e064410f1a2f60ab240b50b645a12c56987bf4870086 + checksum: a8822d7e37f79ff64669eb2df4a9f9d16580e88f2b276a646092e19a9bdccac304e92510e200e35869a8b1f6c27eba5972c508d347a277e9b722d582ab7a23d5 languageName: node linkType: hard "@lezer/html@npm:^1.3.0": - version: 1.3.9 - resolution: "@lezer/html@npm:1.3.9" + version: 1.3.10 + resolution: "@lezer/html@npm:1.3.10" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 - checksum: 40d89b0af4379768ce7d3e7162988e9ec73b42984e333e877c7451f7e2c10131e39e4b50150bc334093cbd84a3b34f9fc1a6ac62cbba51f503a495ad243e880b + checksum: cce391aab9259704ae3079b3209f74b2f248594dd8b851c28aaff26765e00ebb890a5ff1fe600f2d03aaf4ade0e36de8048d9632b12bfbccd47b3e649c3b0ecd languageName: node linkType: hard "@lezer/javascript@npm:^1.0.0": - version: 1.4.15 - resolution: "@lezer/javascript@npm:1.4.15" + version: 1.5.1 + resolution: "@lezer/javascript@npm:1.5.1" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.1.3 "@lezer/lr": ^1.3.0 - checksum: e0322ec70231a1beb6652f0883d62371297f37783a774ad011a3c7d4acaf066f4bcd6c0b83b34cef0893766ae730ab29efee7a11d67d66e8c5f8d4dea3c46172 + checksum: 8de877c3f41a985211d0ef80c98966f1339f1a0ec1df0b199ce58d97cb4c0648cb3176d76ff426b9c5aa4a3bbb51bb6e673b5cc73763cb8dc4505f3853697fb5 languageName: node linkType: hard "@lezer/json@npm:^1.0.0": - version: 1.0.2 - resolution: "@lezer/json@npm:1.0.2" + version: 1.0.3 + resolution: "@lezer/json@npm:1.0.3" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 - checksum: f899d13765d95599c9199fc3404cb57969031dc40ce07de30f4e648979153966581f0bee02e2f8f70463b0a5322206a97c2fe8d5d14f218888c72a6dcedf90ef + checksum: 48e7b945fdfa2b5b6f862e27bc31f3991cba93f18df7fed0059b25f119b64dedd50bbc709d279e16e2b3eee10e7758d7d80c6d98d21bc15c284809d268837897 languageName: node linkType: hard "@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.3.0": - version: 1.4.0 - resolution: "@lezer/lr@npm:1.4.0" + version: 1.4.2 + resolution: "@lezer/lr@npm:1.4.2" dependencies: "@lezer/common": ^1.0.0 - checksum: 4c8517017e9803415c6c5cb8230d8764107eafd7d0b847676cd1023abb863a4b268d0d01c7ce3cf1702c4749527c68f0a26b07c329cb7b68c36ed88362d7b193 + checksum: 94318ad046c7dfcc8d37e26cb85b99623c39aef60aa51ec2abb30928e7a649f38fa5520f34bd5b356f1db11b6991999589f039e87c8949b0f163be3764f029d8 + languageName: node + linkType: hard + +"@lottiefiles/dotlottie-react@npm:^0.13.0": + version: 0.13.5 + resolution: "@lottiefiles/dotlottie-react@npm:0.13.5" + dependencies: + "@lottiefiles/dotlottie-web": 0.44.0 + peerDependencies: + react: ^17 || ^18 || ^19 + checksum: f1fc478ffc08f0070016edece041bbba57cdaaeab64d68bbee6abe44e17ca23abaec431757d402b6e42cc0b29b3a20bb412f91b2b9dc8d913c47a88c0092b8f0 + languageName: node + linkType: hard + +"@lottiefiles/dotlottie-web@npm:0.44.0": + version: 0.44.0 + resolution: "@lottiefiles/dotlottie-web@npm:0.44.0" + checksum: 28172f4d45a7cd41844df6fdb2a17610aa57a899cd0e2b52202b71c2ac4131e58ecdad80b1eaa98ce610e1b8eda820d762837aedec2a67895e1b930bff322222 languageName: node linkType: hard "@lottiefiles/react-lottie-player@npm:^3.5.3": - version: 3.5.3 - resolution: "@lottiefiles/react-lottie-player@npm:3.5.3" + version: 3.6.0 + resolution: "@lottiefiles/react-lottie-player@npm:3.6.0" dependencies: - lottie-web: ^5.10.2 + lottie-web: ^5.12.2 peerDependencies: - react: 16 - 18 - checksum: 083521730d8a75a70c82446df859d08d5e3614b937afa419249d047d9cbffb61fba24733e1a736593e734530d99aa715a38fcbbebbcca5a72ff4719145931da1 + react: 16 - 19 + checksum: e530bf802973872af14d0f1f9e70b38394e857417315ef7213fc12341db4bddbb0121e74ca9b168c759cc2ef860742bd215a5065de3ffbfb4914cdfe87dc36ba languageName: node linkType: hard @@ -3133,6 +3014,13 @@ __metadata: languageName: node linkType: hard +"@marijn/find-cluster-break@npm:^1.0.0": + version: 1.0.2 + resolution: "@marijn/find-cluster-break@npm:1.0.2" + checksum: 0d836de25e04d58325813401ef3c2d34caf040da985a5935fcbc9d84e7b47a21bdb15f57d70c2bf0960bd29ed3dbbb1afd00cdd0fc4fafbee7fd0ffe7d508ae1 + languageName: node + linkType: hard + "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": version: 5.1.1-v1 resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" @@ -3169,25 +3057,25 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" dependencies: agent-base: ^7.1.0 http-proxy-agent: ^7.0.0 https-proxy-agent: ^7.0.1 lru-cache: ^10.0.1 socks-proxy-agent: ^8.0.3 - checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 + checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" dependencies: semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a languageName: node linkType: hard @@ -3248,9 +3136,16 @@ __metadata: linkType: hard "@polka/url@npm:^1.0.0-next.24": - version: 1.0.0-next.25 - resolution: "@polka/url@npm:1.0.0-next.25" - checksum: 4ab1d7a37163139c0e7bfc9d1e3f6a2a0db91a78b9f0a21f571d6aec2cdaeaacced744d47886c117aa7579aa5694b303fe3e0bd1922bb9cb3ce6bf7c2dc09801 + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 69ca11ab15a4ffec7f0b07fcc4e1f01489b3d9683a7e1867758818386575c60c213401259ba3705b8a812228d17e2bfd18e6f021194d943fff4bca389c9d4f28 + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 languageName: node linkType: hard @@ -3358,24 +3253,7 @@ __metadata: languageName: node linkType: hard -"@rc-component/trigger@npm:^2.0.0, @rc-component/trigger@npm:^2.1.1": - version: 2.2.0 - resolution: "@rc-component/trigger@npm:2.2.0" - dependencies: - "@babel/runtime": ^7.23.2 - "@rc-component/portal": ^1.1.0 - classnames: ^2.3.2 - rc-motion: ^2.0.0 - rc-resize-observer: ^1.3.1 - rc-util: ^5.38.0 - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 55cb5b8b9456507a41977999b84db9247f3b0e50bc3fadc1d234187df630d208779c5c9c45d0c152f29b968740d6fa043e9496255b7aa7cc3e18347a325420e4 - languageName: node - linkType: hard - -"@rc-component/trigger@npm:^2.2.6": +"@rc-component/trigger@npm:^2.0.0, @rc-component/trigger@npm:^2.1.1, @rc-component/trigger@npm:^2.2.6": version: 2.2.6 resolution: "@rc-component/trigger@npm:2.2.6" dependencies: @@ -3515,17 +3393,17 @@ __metadata: linkType: hard "@remixicon/react@npm:^4.1.1": - version: 4.2.0 - resolution: "@remixicon/react@npm:4.2.0" + version: 4.6.0 + resolution: "@remixicon/react@npm:4.6.0" peerDependencies: react: ">=18.2.0" - checksum: 17aa7e2a54a62fb5331e64b594424cd078f28b14707302988adb6da4ea7f61df305379b48d4354c66f5b10cacf2ffa979751a6907dd07e8cb00dcb419a4636f2 + checksum: 81127617eff78fb97aff01dc392ebbafb69fbfe835270b4db8ee68844d02d8c47a42d312d72104708f7266d8ad005405ea1245a536e35b66305d00d56f20b9eb languageName: node linkType: hard -"@rjsf/antd@npm:^5.21.2": - version: 5.21.2 - resolution: "@rjsf/antd@npm:5.21.2" +"@rjsf/antd@npm:^5.24.9": + version: 5.24.10 + resolution: "@rjsf/antd@npm:5.24.10" dependencies: classnames: ^2.5.1 lodash: ^4.17.21 @@ -3533,18 +3411,18 @@ __metadata: rc-picker: 2.7.6 peerDependencies: "@ant-design/icons": ^4.0.0 || ^5.0.0 - "@rjsf/core": ^5.20.x - "@rjsf/utils": ^5.20.x + "@rjsf/core": ^5.24.x + "@rjsf/utils": ^5.24.x antd: ^4.24.0 || ^5.8.5 dayjs: ^1.8.0 react: ^16.14.0 || >=17 - checksum: d6e2e26a966574d080941276eee0b860f27c08f5e7e775fc74e17141869ade3a57f33377dbb40a2ef8b6e3305c1ec420cb655bbdc36caac5b7e4705527be9573 + checksum: 332527792b291e5c123cc4d07636adb724d3756169f93eecae535c40577f42572985648623bebb6304b5efea19569252402ac431ee1c3ea6d3199964be1c6c7e languageName: node linkType: hard -"@rjsf/core@npm:^5.21.2": - version: 5.21.2 - resolution: "@rjsf/core@npm:5.21.2" +"@rjsf/core@npm:^5.24.9": + version: 5.24.10 + resolution: "@rjsf/core@npm:5.24.10" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 @@ -3552,15 +3430,15 @@ __metadata: nanoid: ^3.3.7 prop-types: ^15.8.1 peerDependencies: - "@rjsf/utils": ^5.20.x + "@rjsf/utils": ^5.24.x react: ^16.14.0 || >=17 - checksum: ac5c4ff0e0cf74ba8cf6d58df314f8f17de6be5b00bb0ca14f79861347bbaa59f37b8f572d80f30388c5007de1d2dedfc3ff70e419eb874331d58f0ba9eeeb42 + checksum: 90316d9dd90ae58805fc4f6fa2bb14dfd9a361abebb75bd3b1b7ed55b554e9a7d5145fc09ee5906bc91d362fc8f8c24619d4d4c432bae782da5cebb0a5b9cddf languageName: node linkType: hard -"@rjsf/utils@npm:^5.21.2": - version: 5.21.2 - resolution: "@rjsf/utils@npm:5.21.2" +"@rjsf/utils@npm:^5.24.9": + version: 5.24.10 + resolution: "@rjsf/utils@npm:5.24.10" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -3569,21 +3447,21 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 05460f3c95e1a407001accaf2e9b90c0731433936cfea6a129ac01b49575f56ba336f1ae46e3930f0226580d06c6300c8622d1c3a56354c3e723caf3654f02e1 + checksum: 64d9bcfea100c4b89128c20473982d316e960c01f9887fb3613bc0ecdaa9fdf8804f96ff99b0b415c2cbc7b4f7d5de941328a1a1a5d53148489d395a1f07a78e languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:^5.21.2": - version: 5.21.2 - resolution: "@rjsf/validator-ajv8@npm:5.21.2" +"@rjsf/validator-ajv8@npm:^5.24.9": + version: 5.24.10 + resolution: "@rjsf/validator-ajv8@npm:5.24.10" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 lodash: ^4.17.21 lodash-es: ^4.17.21 peerDependencies: - "@rjsf/utils": ^5.20.x - checksum: 06d34e70e6595c5a0e999a3a2a651fccc7a36dbb2395f5805ce1ac6b47201111e6d84c9e122f3d336bbdbaca61875a90efd65e1839d9da3c9aafe282dcc03086 + "@rjsf/utils": ^5.24.x + checksum: 920d466c972683108a3b093f813a0b77c289068a24c3ae74b6933a5f7346c2a0d7f3d02d0304f419fbfd8376f7ee59972a5f202939c827ac778aedc35bd0ed1b languageName: node linkType: hard @@ -3683,13 +3561,12 @@ __metadata: linkType: hard "@rollup/plugin-node-resolve@npm:^15.0.0, @rollup/plugin-node-resolve@npm:^15.0.1": - version: 15.2.3 - resolution: "@rollup/plugin-node-resolve@npm:15.2.3" + version: 15.3.1 + resolution: "@rollup/plugin-node-resolve@npm:15.3.1" dependencies: "@rollup/pluginutils": ^5.0.1 "@types/resolve": 1.20.2 deepmerge: ^4.2.2 - is-builtin-module: ^3.2.1 is-module: ^1.0.0 resolve: ^1.22.1 peerDependencies: @@ -3697,13 +3574,13 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 730f32c2f8fdddff07cf0fca86a5dac7c475605fb96930197a868c066e62eb6388c557545e4f7d99b7a283411754c9fbf98944ab086b6074e04fc1292e234aa8 + checksum: 2973db4da0e7ed97c35a8dd8878ed6b6781bcb03d72039f064d878f711b0290446348c5268aa1359d064787adc0d5cc35f662d35ea5a4fa9b0b3f9f17c678f41 languageName: node linkType: hard "@rollup/plugin-replace@npm:^5.0.1": - version: 5.0.5 - resolution: "@rollup/plugin-replace@npm:5.0.5" + version: 5.0.7 + resolution: "@rollup/plugin-replace@npm:5.0.7" dependencies: "@rollup/pluginutils": ^5.0.1 magic-string: ^0.30.3 @@ -3712,7 +3589,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 5559b48fa098a842ddb3a25b23d9902d75496bed807d4cabac304bb7e75b06374ad4a44f7871ddcd1bfcf23e6015a0274d44564b42af54c722af0a514c247ec1 + checksum: 67985e3f4056b92a5f6847b9ddf5b8e9aaecefa0e20b96751dcd63c3ca1f907dadad2940f270867dab2e24bc27da6b0e82f0ce6bb20309aa3465869a9d2e3f13 languageName: node linkType: hard @@ -3733,8 +3610,8 @@ __metadata: linkType: hard "@rollup/plugin-typescript@npm:^12.1.0": - version: 12.1.0 - resolution: "@rollup/plugin-typescript@npm:12.1.0" + version: 12.1.2 + resolution: "@rollup/plugin-typescript@npm:12.1.2" dependencies: "@rollup/pluginutils": ^5.1.0 resolve: ^1.22.1 @@ -3747,7 +3624,7 @@ __metadata: optional: true tslib: optional: true - checksum: fb002f1cf93d780126ef873f907c7f490448bfe3f649c201e8dc944ab56bb2d0664940119ca40ee0051c6db361bae803513b00831a74e9e4459b4ad91f052ad5 + checksum: 242748e8257c7d04abe9925efdf1fabfd9cca78182b81590b09f7fba86a2c1950ab79fa40213ea42542b3db1482df925569de48a74e19b53a758820c29efa90a languageName: node linkType: hard @@ -3839,154 +3716,173 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.0.2": - version: 5.1.0 - resolution: "@rollup/pluginutils@npm:5.1.0" - dependencies: - "@types/estree": ^1.0.0 - estree-walker: ^2.0.2 - picomatch: ^2.3.1 - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 3cc5a6d91452a6eabbfd1ae79b4dd1f1e809d2eecda6e175deb784e75b0911f47e9ecce73f8dd315d6a8b3f362582c91d3c0f66908b6ced69345b3cbe28f8ce8 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^5.1.0": - version: 5.1.2 - resolution: "@rollup/pluginutils@npm:5.1.2" +"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.0.2, @rollup/pluginutils@npm:^5.1.0": + version: 5.1.4 + resolution: "@rollup/pluginutils@npm:5.1.4" dependencies: "@types/estree": ^1.0.0 estree-walker: ^2.0.2 - picomatch: ^2.3.1 + picomatch: ^4.0.2 peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - checksum: 16c8c154fef9a32c513b52bd79c92ac427edccd05a8dc3994f10c296063940c57bf809d05903b473d9d408aa5977d75b98c701f481dd1856d5ffc37187ac0060 + checksum: dc0294580effbf68965ed7939c9e469b8c8847b59842e4691fd10d0a8d0b178600bd912694c409ae33600c9059efce72e96f25917cff983afd57f092a7aeb8d2 languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.22.5" +"@rollup/rollup-android-arm-eabi@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.41.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-android-arm64@npm:4.22.5" +"@rollup/rollup-android-arm64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-android-arm64@npm:4.41.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-darwin-arm64@npm:4.22.5" +"@rollup/rollup-darwin-arm64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.41.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-darwin-x64@npm:4.22.5" +"@rollup/rollup-darwin-x64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.41.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.22.5" +"@rollup/rollup-freebsd-arm64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.41.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.41.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.41.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.22.5" +"@rollup/rollup-linux-arm-musleabihf@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.41.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.22.5" +"@rollup/rollup-linux-arm64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.41.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.22.5" +"@rollup/rollup-linux-arm64-musl@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.41.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.5" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.41.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.22.5" +"@rollup/rollup-linux-riscv64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.41.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.22.5" +"@rollup/rollup-linux-riscv64-musl@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.41.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.41.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.22.5" +"@rollup/rollup-linux-x64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.41.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.22.5" +"@rollup/rollup-linux-x64-musl@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.41.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.22.5" +"@rollup/rollup-win32-arm64-msvc@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.41.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.22.5" +"@rollup/rollup-win32-ia32-msvc@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.41.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.22.5": - version: 4.22.5 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.22.5" +"@rollup/rollup-win32-x64-msvc@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.41.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 + languageName: node + linkType: hard + "@rushstack/eslint-patch@npm:^1.1.0": - version: 1.10.2 - resolution: "@rushstack/eslint-patch@npm:1.10.2" - checksum: 2bac46e0f662c6b9c1f1d2268e4165a779331b9229eaeeb360852feaecdc5cb4adf8e1a36ac510b3545a83f83de702811b984afe26ec7d4a79e1c0ea708e2bfe + version: 1.11.0 + resolution: "@rushstack/eslint-patch@npm:1.11.0" + checksum: d1d7e4d36c693b93c06b25022df094ef629b53805db2c7a7ecbb099c34ea525eb96c19f6e5ea5ad1f8b69aba6792cfd8cdd410655b6aa9da15c69c4593019bfc languageName: node linkType: hard @@ -4022,21 +3918,21 @@ __metadata: languageName: node linkType: hard -"@supabase/auth-js@npm:2.65.0": - version: 2.65.0 - resolution: "@supabase/auth-js@npm:2.65.0" +"@supabase/auth-js@npm:2.69.1": + version: 2.69.1 + resolution: "@supabase/auth-js@npm:2.69.1" dependencies: "@supabase/node-fetch": ^2.6.14 - checksum: c6396f6c384f4787352a09e40c192cbf990dd566773b6e55eb7921726052144bfe592e2550bd1bd743545af3a03b2602ef41a9e69f9f966f84923049d0128404 + checksum: fe5e6bc8d63f2b3754077aff87265aaa8de7620c1a6951affda1e75efee2a549fa1003394b4d950aa976e016e5a032517475e51cc0a0edfbb965fd4c5280e592 languageName: node linkType: hard -"@supabase/functions-js@npm:2.4.1": - version: 2.4.1 - resolution: "@supabase/functions-js@npm:2.4.1" +"@supabase/functions-js@npm:2.4.4": + version: 2.4.4 + resolution: "@supabase/functions-js@npm:2.4.4" dependencies: "@supabase/node-fetch": ^2.6.14 - checksum: 786a1499b26b928f39b9af68b44bfc0a016c525d85c6b8bd2f6cd712e53db3ab5099ed4e7b1038ae8527dcee16a3aa8f80618a7227d322052810d378746d7154 + checksum: cbddd6c0f03de1d3ff1c9b760c028f9101b0221a2dc032000debd1734c725fe0217d56c281437cf71ff30e23a094b47275511b598ef68a39a66b967664faf7cb languageName: node linkType: hard @@ -4049,47 +3945,47 @@ __metadata: languageName: node linkType: hard -"@supabase/postgrest-js@npm:1.16.1": - version: 1.16.1 - resolution: "@supabase/postgrest-js@npm:1.16.1" +"@supabase/postgrest-js@npm:1.19.4": + version: 1.19.4 + resolution: "@supabase/postgrest-js@npm:1.19.4" dependencies: "@supabase/node-fetch": ^2.6.14 - checksum: 695d41c935c8745a16ee3b597fe2d1b94ba69715f3b15da8f1e332ef4a556e41ba0591889fa37cadb53900e2c58f4298ece4dd13e35f6b25fbeb54c3e0aabc90 + checksum: 3265d5d563eb4b54ab78f2d7a87c68948b323f520913e8309f367cbb8a714b8d5a519e05d73e96510f8d216ea55b5c21e1822f200f6db0a52cc028ac396f62cf languageName: node linkType: hard -"@supabase/realtime-js@npm:2.10.2": - version: 2.10.2 - resolution: "@supabase/realtime-js@npm:2.10.2" +"@supabase/realtime-js@npm:2.11.2": + version: 2.11.2 + resolution: "@supabase/realtime-js@npm:2.11.2" dependencies: "@supabase/node-fetch": ^2.6.14 "@types/phoenix": ^1.5.4 "@types/ws": ^8.5.10 - ws: ^8.14.2 - checksum: a98342e6a8437c2c14a86728abd12f21d853f167fb22ede46ef680cc0ef990bf7c8a8403c448ab335d884cfe8c3b2f6c4e3363dcb777511ee3abb6270d65a954 + ws: ^8.18.0 + checksum: 0fdb63ca0f6e6993523fb1d95c2ed843cf74e49437a7e625702b551c70ce1861964cbffc2937811a54f51410b02a7e257307e4af561d36fcb95803a145b9fa6d languageName: node linkType: hard -"@supabase/storage-js@npm:2.7.0": - version: 2.7.0 - resolution: "@supabase/storage-js@npm:2.7.0" +"@supabase/storage-js@npm:2.7.1": + version: 2.7.1 + resolution: "@supabase/storage-js@npm:2.7.1" dependencies: "@supabase/node-fetch": ^2.6.14 - checksum: 1796214103d0afae0d9e960bd22cbd621f746a845c56e409a5a7fa88cbdfcec6a53ac0ffb6b5197ec88540c8c17a5cc888ec3edf5928b48b83bb7f315a17465c + checksum: ed8f3a3178856c331b36588f4fff5cbb7f2f89977fff9716ab20b1977d13816bda5a887a316638f2a05ac35fdef46e18eab8a543d6113de76d3a06b15bf9ae8e languageName: node linkType: hard "@supabase/supabase-js@npm:^2.45.4": - version: 2.45.4 - resolution: "@supabase/supabase-js@npm:2.45.4" + version: 2.49.8 + resolution: "@supabase/supabase-js@npm:2.49.8" dependencies: - "@supabase/auth-js": 2.65.0 - "@supabase/functions-js": 2.4.1 + "@supabase/auth-js": 2.69.1 + "@supabase/functions-js": 2.4.4 "@supabase/node-fetch": 2.6.15 - "@supabase/postgrest-js": 1.16.1 - "@supabase/realtime-js": 2.10.2 - "@supabase/storage-js": 2.7.0 - checksum: 5611e13a1ffd0e0773148eccdadcf746240b4d47dfe771220793c3f6ec2d8eedef638d27aa23a2b020bce3fb68efda511d4e9746792e7524349f7e17bd53eb99 + "@supabase/postgrest-js": 1.19.4 + "@supabase/realtime-js": 2.11.2 + "@supabase/storage-js": 2.7.1 + checksum: add77eb4be43675741bc5140288e5eeabc1736476ac72bdfc5d41d2afae1690801df6415a311f0a23788a8d675c11ac3b12fcce59739360d5820d75ff1b7edc3 languageName: node linkType: hard @@ -4436,11 +4332,11 @@ __metadata: linkType: hard "@testing-library/user-event@npm:^14.5.1": - version: 14.5.2 - resolution: "@testing-library/user-event@npm:14.5.2" + version: 14.6.1 + resolution: "@testing-library/user-event@npm:14.6.1" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: d76937dffcf0082fbf3bb89eb2b81a31bf5448048dd61c33928c5f10e33a58e035321d39145cefd469bb5a499c68a5b4086b22f1a44e3e7c7e817dc5f6782867 + checksum: 4cb8a81fea1fea83a42619e9545137b51636bb7a3182c596bb468e5664f1e4699a275c2d0fb8b6dcc3fe2684f9d87b0637ab7cb4f566051539146872c9141fcb languageName: node linkType: hard @@ -4507,11 +4403,11 @@ __metadata: linkType: hard "@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" + version: 7.27.0 + resolution: "@types/babel__generator@npm:7.27.0" dependencies: "@babel/types": ^7.0.0 - checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 + checksum: e6739cacfa276c1ad38e1d8a6b4b1f816c2c11564e27f558b68151728489aaf0f4366992107ee4ed7615dfa303f6976dedcdce93df2b247116d1bcd1607ee260 languageName: node linkType: hard @@ -4526,11 +4422,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.20.5 - resolution: "@types/babel__traverse@npm:7.20.5" + version: 7.20.7 + resolution: "@types/babel__traverse@npm:7.20.7" dependencies: "@babel/types": ^7.20.7 - checksum: 608e0ab4fc31cd47011d98942e6241b34d461608c0c0e153377c5fd822c436c475f1ded76a56bfa76a1adf8d9266b727bbf9bfac90c4cb152c97f30dadc5b7e8 + checksum: 2a2e5ad29c34a8b776162b0fe81c9ccb6459b2b46bf230f756ba0276a0258fcae1cbcfdccbb93a1e8b1df44f4939784ee8a1a269f95afe0c78b24b9cb6d50dd1 languageName: node linkType: hard @@ -4580,25 +4476,25 @@ __metadata: linkType: hard "@types/d3-scale-chromatic@npm:^3.0.0": - version: 3.0.3 - resolution: "@types/d3-scale-chromatic@npm:3.0.3" - checksum: a465d126a00a71d3824957283580b4b404fe6f6bb52eb2b7303047fffed2bec6e31aeb34bfb30313e72ee1d75243c50ec5a45824eaf547f9c0849a1379527662 + version: 3.1.0 + resolution: "@types/d3-scale-chromatic@npm:3.1.0" + checksum: cb7b86deac077c7c217a52a3f658cdfb812cff8708404fbfe54918c03ead545e1df87df377e9c4eab21c9d6c1aeee6471320e02a5b6b27e2e3f786a12a82ab02 languageName: node linkType: hard "@types/d3-scale@npm:^4.0.3": - version: 4.0.8 - resolution: "@types/d3-scale@npm:4.0.8" + version: 4.0.9 + resolution: "@types/d3-scale@npm:4.0.9" dependencies: "@types/d3-time": "*" - checksum: 3b1906da895564f73bb3d0415033d9a8aefe7c4f516f970176d5b2ff7a417bd27ae98486e9a9aa0472001dc9885a9204279a1973a985553bdb3ee9bbc1b94018 + checksum: c44265a38e538983686b1b8d159abfb4e81c09b33316f3a68f0f372d38400fa950ad531644d25230cc7b48ea5adb50270fc54823f088979ade62dcd0225f7aa3 languageName: node linkType: hard "@types/d3-time@npm:*": - version: 3.0.3 - resolution: "@types/d3-time@npm:3.0.3" - checksum: a071826c80efdb1999e6406fef2db516d45f3906da3a9a4da8517fa863bae53c4c1056ca5347a20921660607d21ec874fd2febe0e961adb7be6954255587d08f + version: 3.0.4 + resolution: "@types/d3-time@npm:3.0.4" + checksum: 0c296884571ce70c4bbd4ea9cd1c93c0c8aee602c6c806b056187dd4ee49daf70c2f41da94b25ba0d796edf8ca83cbb87fe6d1cdda7ca669ab800170ece1c12b languageName: node linkType: hard @@ -4611,7 +4507,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": +"@types/eslint-scope@npm:^3.7.7": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" dependencies: @@ -4622,12 +4518,12 @@ __metadata: linkType: hard "@types/eslint@npm:*": - version: 8.56.10 - resolution: "@types/eslint@npm:8.56.10" + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: fb7137dd263ce1130b42d14452bdd0266ef81f52cb55ba1a5e9750e65da1f0596dc598c88bffc7e415458b6cb611a876dcc132bcf40ea48701c6d05b40c57be5 + checksum: c286e79707ab604b577cf8ce51d9bbb9780e3d6a68b38a83febe13fa05b8012c92de17c28532fac2b03d3c460123f5055d603a579685325246ca1c86828223e0 languageName: node linkType: hard @@ -4640,10 +4536,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a +"@types/estree@npm:*, @types/estree@npm:1.0.7, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: d9312b7075bdd08f3c9e1bb477102f5458aaa42a8eec31a169481ce314ca99ac716645cff4fca81ea65a2294b0276a0de63159d1baca0f8e7b5050a92de950ad languageName: node linkType: hard @@ -4654,34 +4550,50 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^5.0.0": + version: 5.0.6 + resolution: "@types/express-serve-static-core@npm:5.0.6" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: bc3ea44923da7d1ffaa29eff7cc41a2b05f7340e8879fe9ee40717859937d73bcd635fcc0f8232f66af942624cc48bff42971e9e2c4075db6afe478534245855 languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": - version: 4.19.0 - resolution: "@types/express-serve-static-core@npm:4.19.0" +"@types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33": + version: 4.19.6 + resolution: "@types/express-serve-static-core@npm:4.19.6" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" "@types/send": "*" - checksum: 39c09fcb3f61de96ed56d97273874cafe50e6675ac254af4d77014e569e4fdc29d1d0d1dd12e11f008cb9a52785b07c2801c6ba91397965392b20c75ee01fb4e + checksum: b0576eddc2d25ccdf10e68ba09598b87a4d7b2ad04a81dc847cb39fe56beb0b6a5cc017b1e00aa0060cb3b38e700384ce96d291a116a0f1e54895564a104aae9 languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.21": - version: 4.17.21 - resolution: "@types/express@npm:4.17.21" +"@types/express@npm:*": + version: 5.0.2 + resolution: "@types/express@npm:5.0.2" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^5.0.0 + "@types/serve-static": "*" + checksum: c6f73c75c2b62e293e5fadcfd7de61716e3d0c0eaecda082b1921c9c8e56ddc37c530c5d4d68404794b38c7e8f5b893719ffc04c6fba2efa2fb13223bfb0346b + languageName: node + linkType: hard + +"@types/express@npm:^4.17.21": + version: 4.17.22 + resolution: "@types/express@npm:4.17.22" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: fb238298630370a7392c7abdc80f495ae6c716723e114705d7e3fb67e3850b3859bbfd29391463a3fb8c0b32051847935933d99e719c0478710f8098ee7091c5 + checksum: 977b1da93765983d823c32898c74c159f30b98341f4fd9400724f18196913fe0a07fa12eaa4efdad3cc8cf31e4036e06a16a88d43e9e1f78bbbb84365026aab0 languageName: node linkType: hard @@ -4692,6 +4604,13 @@ __metadata: languageName: node linkType: hard +"@types/geojson@npm:*": + version: 7946.0.16 + resolution: "@types/geojson@npm:7946.0.16" + checksum: d66e5e023f43b3e7121448117af1930af7d06410a32a585a8bc9c6bb5d97e0d656cd93d99e31fa432976c32e98d4b780f82bf1fd1acd20ccf952eb6b8e39edf2 + languageName: node + linkType: hard + "@types/glob@npm:~7.2.0": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -4737,12 +4656,12 @@ __metadata: linkType: hard "@types/hoist-non-react-statics@npm:*, @types/hoist-non-react-statics@npm:^3.3.0": - version: 3.3.5 - resolution: "@types/hoist-non-react-statics@npm:3.3.5" + version: 3.3.6 + resolution: "@types/hoist-non-react-statics@npm:3.3.6" dependencies: "@types/react": "*" hoist-non-react-statics: ^3.3.0 - checksum: b645b062a20cce6ab1245ada8274051d8e2e0b2ee5c6bd58215281d0ec6dae2f26631af4e2e7c8abe238cdcee73fcaededc429eef569e70908f82d0cc0ea31d7 + checksum: f03e43bd081876c49584ffa0eb690d69991f258203efca44dcc30efdda49a50653ff06402917d1edc9cb7e2adebbe9e2d1d0e739bc99c1b5372103b1cc534e47 languageName: node linkType: hard @@ -4754,11 +4673,11 @@ __metadata: linkType: hard "@types/http-proxy@npm:^1.17.8": - version: 1.17.14 - resolution: "@types/http-proxy@npm:1.17.14" + version: 1.17.16 + resolution: "@types/http-proxy@npm:1.17.16" dependencies: "@types/node": "*" - checksum: 491320bce3565bbb6c7d39d25b54bce626237cfb6b09e60ee7f77b56ae7c6cbad76f08d47fe01eaa706781124ee3dfad9bb737049254491efd98ed1f014c4e83 + checksum: f5ab4afe7e3feba9d87bdddbf44e03d9a836bd2cdab679a794badbff7c4bfb6bebf46bfe22d9964eb1820e1349f2ff7807cccb20fd27cb17f03db849289e5892 languageName: node linkType: hard @@ -4795,12 +4714,12 @@ __metadata: linkType: hard "@types/jest@npm:*, @types/jest@npm:^29.2.2": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" + version: 29.5.14 + resolution: "@types/jest@npm:29.5.14" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c + checksum: 18dba4623f26661641d757c63da2db45e9524c9be96a29ef713c703a9a53792df9ecee9f7365a0858ddbd6440d98fe6b65ca67895ca5884b73cbc7ffc11f3838 languageName: node linkType: hard @@ -4822,7 +4741,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -4836,19 +4755,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash-es@npm:^4.17.6": - version: 4.17.12 - resolution: "@types/lodash-es@npm:4.17.12" - dependencies: - "@types/lodash": "*" - checksum: 990a99e2243bebe9505cb5ad19fbc172beb4a8e00f9075c99fc06c46c2801ffdb40bc2867271cf580d5f48994fc9fb076ec92cd60a20e621603bf22114e5b077 - languageName: node - linkType: hard - -"@types/lodash@npm:*, @types/lodash@npm:^4.14.194": - version: 4.17.0 - resolution: "@types/lodash@npm:4.17.0" - checksum: 3f98c0b67a93994cbc3403d4fa9dbaf52b0b6bb7f07a764d73875c2dcd5ef91222621bd5bcf8eee7b417a74d175c2f7191b9f595f8603956fd06f0674c0cba93 +"@types/lodash@npm:^4.14.194": + version: 4.17.17 + resolution: "@types/lodash@npm:4.17.17" + checksum: cfa34a752f3c540a196e9f92dbaff93ae15fe4058da8cce1918dd9219076dc19eec33b043aae45865e2b3ef8234a845bb57366144ec8e52551e2bc3f119e04a1 languageName: node linkType: hard @@ -4892,9 +4802,9 @@ __metadata: linkType: hard "@types/ms@npm:*": - version: 0.7.34 - resolution: "@types/ms@npm:0.7.34" - checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a + version: 2.1.0 + resolution: "@types/ms@npm:2.1.0" + checksum: 532d2ebb91937ccc4a89389715e5b47d4c66e708d15942fe6cc25add6dc37b2be058230a327dd50f43f89b8b6d5d52b74685a9e8f70516edfc9bdd6be910eff4 languageName: node linkType: hard @@ -4908,27 +4818,27 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 20.12.7 - resolution: "@types/node@npm:20.12.7" + version: 22.15.21 + resolution: "@types/node@npm:22.15.21" dependencies: - undici-types: ~5.26.4 - checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686 + undici-types: ~6.21.0 + checksum: 989f1ce3a99916a7298ae885210385fbcb339b07f8ef420b015d69dd68863aca68aeae07833736b300720d9394b8e1875600ce74166c24957d9907d29de0b788 languageName: node linkType: hard "@types/node@npm:^16.7.13": - version: 16.18.96 - resolution: "@types/node@npm:16.18.96" - checksum: c5b4c20868e1ecb2e3b975b37aeeb5790b3a4f1472b496fae779ac4f14ba4fb4c0e9ed8e9b6eb389e5a074371056130c9d6506705b144b4f6985ffa844556242 + version: 16.18.126 + resolution: "@types/node@npm:16.18.126" + checksum: 86112e7499f8a4d1bb60696cab0bf464adf3c141fca4bc5451e8f3aba5736529b76d4b4396edb21e5d7c19592852f7d6cb81ee70074fd13bde2db2d0db720467 languageName: node linkType: hard "@types/papaparse@npm:^5.3.5": - version: 5.3.14 - resolution: "@types/papaparse@npm:5.3.14" + version: 5.3.16 + resolution: "@types/papaparse@npm:5.3.16" dependencies: "@types/node": "*" - checksum: fbf942ed92179eeb824d4e544cc701468157a4ce3f6f668f8b17692d9886fea92ccff5e56965615ff64f049efa01ff95ddb7d30c67e0186bc802a6cc8ef26e63 + checksum: 2e0ce0b8da264215eaba013645d4539292bb71e9cccc74004219d3e1b575bbbda9529264a7c1f1e6e19cba1fdbf4634021ed47f4126b11651f60c8573422d548 languageName: node linkType: hard @@ -4947,16 +4857,16 @@ __metadata: linkType: hard "@types/phoenix@npm:^1.5.4": - version: 1.6.5 - resolution: "@types/phoenix@npm:1.6.5" - checksum: b87416393159f0ba2812875fc2721914a3284cde8b1f263dfcd46f4149dae7f4efc2bfa062d558c8bbfb7ae2a9d802487b0dd4744ff08799386cbc49c19368f0 + version: 1.6.6 + resolution: "@types/phoenix@npm:1.6.6" + checksum: 9dc897cb9a4cd62f7a0de48855e6cafded5c676e7d78c4d3a9ade4f21ec82b95eb7195caada26a9a3a5d9aba14f0fd875bc3898e086234b20da63991a033f6e8 languageName: node linkType: hard "@types/prop-types@npm:*": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: d0c5407b9ccc3dd5fae0ccf9b1007e7622ba5e6f1c18399b4f24dff33619d469da4b9fa918a374f19dc0d9fe6a013362aab0b844b606cfc10676efba3f5f736d languageName: node linkType: hard @@ -4970,18 +4880,9 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.15 - resolution: "@types/qs@npm:6.9.15" - checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 - languageName: node - linkType: hard - -"@types/quill@npm:^1.3.10": - version: 1.3.10 - resolution: "@types/quill@npm:1.3.10" - dependencies: - parchment: ^1.1.2 - checksum: e629157d11a8398c945e9d9e6b3ebb678f996b195976ddfcabd9771ac7e55a4ebbab3b0c320dc8eb0033715ea5fd197758ac14b4f50bf1d12fd3648fe24d1cb5 + version: 6.14.0 + resolution: "@types/qs@npm:6.14.0" + checksum: 1909205514d22b3cbc7c2314e2bd8056d5f05dfb21cf4377f0730ee5e338ea19957c41735d5e4806c746176563f50005bbab602d8358432e25d900bdf4970826 languageName: node linkType: hard @@ -4992,12 +4893,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.18": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" - dependencies: - "@types/react": "*" - checksum: a0cd9b1b815a6abd2a367a9eabdd8df8dd8f13f95897b2f9e1359ea3ac6619f957c1432ece004af7d95e2a7caddbba19faa045f831f32d6263483fc5404a7596 +"@types/react-dom@npm:18, @types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.18": + version: 18.3.7 + resolution: "@types/react-dom@npm:18.3.7" + peerDependencies: + "@types/react": ^18.0.0 + checksum: c8b63ec944d2a68992b4dba474003fe55ee1d949c4b9c8fe97eecb2290de23f76acfb670b2f7ceb46a5fc8e46808d1745369b03edda48a7a0cf730eff4c5d315 languageName: node linkType: hard @@ -5020,23 +4921,23 @@ __metadata: linkType: hard "@types/react-redux@npm:^7.1.20": - version: 7.1.33 - resolution: "@types/react-redux@npm:7.1.33" + version: 7.1.34 + resolution: "@types/react-redux@npm:7.1.34" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: 063e98c0d8cdc7cc2da1663716260ffb8d504b2f8be2d92cabb630cae31eb05aa0e389175265caa9a160bb7c4b66646d4a4171d4aa2dc292722088dcf593cdc3 + checksum: ba0cc5f54b91bff162cc97cf5d82d0077944e2d744c276c3c8eb896a293aba00923b513f5cd6ad717a46bf0c128a099ad697c98672202acb25143602042c8e6c languageName: node linkType: hard "@types/react-resizable@npm:^3.0.5": - version: 3.0.7 - resolution: "@types/react-resizable@npm:3.0.7" + version: 3.0.8 + resolution: "@types/react-resizable@npm:3.0.8" dependencies: "@types/react": "*" - checksum: e66dfabcb614f1da1f561d0ecaf1dc384fc0e361d97fa7b219f04f8b85ad9dd2576437117af52ae6bf33644061db2d9452e0a4aadfe457588d93a36d2db8de0b + checksum: aabdef8056bbab3065559bce7ce93232e645fb4f915fd55f0903a2f4df5d2395762dfd75bb0242d5a73d39461e8c062d81eaab87b91213dddfd973ff908f79e4 languageName: node linkType: hard @@ -5062,48 +4963,48 @@ __metadata: linkType: hard "@types/react-signature-canvas@npm:^1.0.2": - version: 1.0.5 - resolution: "@types/react-signature-canvas@npm:1.0.5" + version: 1.0.7 + resolution: "@types/react-signature-canvas@npm:1.0.7" dependencies: "@types/react": "*" - "@types/signature_pad": "*" - checksum: 76177126ca247ccf7c505a9f45019ca2c71b0e8f2af19e10eeff798dde847e713cacb07bffb3c06e26e20b0e337ca6de6453aafff6202636ae9f755e0a44c5fa + "@types/signature_pad": <3 + checksum: ddf8f14c1b3caacdbf0f5bb788a6f8f91cf3d32ddae8cfa6989f057f2d3fa434f093194fa9383ad6106b731b84d8ad58faf1e6d8f5f3339f5422329c1bbdfb7e languageName: node linkType: hard "@types/react-test-renderer@npm:^18.0.0": - version: 18.3.0 - resolution: "@types/react-test-renderer@npm:18.3.0" + version: 18.3.1 + resolution: "@types/react-test-renderer@npm:18.3.1" dependencies: - "@types/react": "*" - checksum: c53683990bd194cb68e3987bda79c78eff41517f7a747e92f3e54217c2ce3addd031b8a45bf631982c909cc2caeeb905372f322758e05bb76c03754a3f24426e + "@types/react": ^18 + checksum: f8cc23cc8decdb6068cdc8f8c306e189eab8e569443ce97b216e757ee42eb20b18d2280ef41e2955668413f14be92765a3ba86cfcfeeae6b20c965acd9674786 languageName: node linkType: hard "@types/react-virtualized@npm:^9.21.21": - version: 9.21.30 - resolution: "@types/react-virtualized@npm:9.21.30" + version: 9.22.2 + resolution: "@types/react-virtualized@npm:9.22.2" dependencies: "@types/prop-types": "*" "@types/react": "*" - checksum: 3beb6bc5e0edc4831094a0911ca0a5bc6a53295a54aa530e376dc5af98fb7c51bb11e293c652d56cfbcd7049b6bee880569939960ac48ca4ac6d63983030818e + checksum: 893105cfa89043cc72ae6f918bd8ea30f33ffd7bbd23158d17c8703df980e51b2539e01a3417c9617e115941dab1130e33fcd047e369844f241b2d1bbeda4276 languageName: node linkType: hard "@types/react@npm:^18": - version: 18.3.1 - resolution: "@types/react@npm:18.3.1" + version: 18.3.22 + resolution: "@types/react@npm:18.3.22" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 - checksum: 9224ef319a0c2b7f66e7e7f06012aa5eb638a6c76c9742843eab1a5d243f2bed5ff829ddbb41efd60d33a266420528adfcb84cb93f238b00e905f98c3a355768 + checksum: e69bdec2df18397e0ecc48e0e858ba331e56130b0b2cd1561098dcdddf04a8aa1ae0b51a294d60d0ade13bfabe5670131a3bd82bedca3b323d51de2b9cd0debd languageName: node linkType: hard "@types/regenerator-runtime@npm:^0.13.1": - version: 0.13.5 - resolution: "@types/regenerator-runtime@npm:0.13.5" - checksum: ff450fcdac0a4915101e5acee4c9909fe4182d930f7fac959a344e3fa3a7b4e946e6d47e609864957f1bb6e1b842445f10ba0aaf8b4dd81009677b2344b2c834 + version: 0.13.8 + resolution: "@types/regenerator-runtime@npm:0.13.8" + checksum: 130031ba8725696b99437254575bd747bc683190e2c1a776a74e8977891a95f35a2bee6d6dde48db1f7afb03202637e33c423a09dd303491dd079a6ecbd02618 languageName: node linkType: hard @@ -5131,9 +5032,9 @@ __metadata: linkType: hard "@types/semver@npm:^7.3.12": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + version: 7.7.0 + resolution: "@types/semver@npm:7.7.0" + checksum: d488eaeddb23879a0a8a759bed667e1a76cb0dd4d23e3255538e24c189db387357953ca9e7a3bda2bb7f95e84cac8fe0db4fbe6b3456e893043337732d1d23cc languageName: node linkType: hard @@ -5168,16 +5069,16 @@ __metadata: linkType: hard "@types/shelljs@npm:^0.8.11": - version: 0.8.15 - resolution: "@types/shelljs@npm:0.8.15" + version: 0.8.16 + resolution: "@types/shelljs@npm:0.8.16" dependencies: "@types/glob": ~7.2.0 "@types/node": "*" - checksum: 94939421c6c83d3075e1c56bf940eb3c34567c6b2ac0b553ec81de7f4c7e7cdfc729117d821c22418d64c45fcd4f96a6ec7ae21ed0d7a80e3e9a008672dde35f + checksum: 292611a3723d0262bbd774e0b6cadef04dd2ca476e3a6a8b29a2f5b253eaf4cc81e709ff981d95997892af1c370417c441c01a883c8a496c63bb7951784208cb languageName: node linkType: hard -"@types/signature_pad@npm:*": +"@types/signature_pad@npm:<3": version: 2.3.6 resolution: "@types/signature_pad@npm:2.3.6" checksum: dfb27dd2eea7895a8c0e971ec4f8f9b4ecf3cf2e9bca51d5bc3fe21617721a4cb755ad4ec743de56655159b8ade28ec3332ec784607f1911f7b36780afa41065 @@ -5220,17 +5121,26 @@ __metadata: languageName: node linkType: hard -"@types/stylis@npm:4.2.0": - version: 4.2.0 - resolution: "@types/stylis@npm:4.2.0" - checksum: 02a47584acd2fcb664f7d8270a69686c83752bdfb855f804015d33116a2b09c0b2ac535213a4a7b6d3a78b2915b22b4024cce067ae979beee0e4f8f5fdbc26a9 +"@types/stylis@npm:4.2.5": + version: 4.2.5 + resolution: "@types/stylis@npm:4.2.5" + checksum: 24f91719db5569979e9e2f197e050ef82e1fd72474e8dc45bca38d48ee56481eae0f0d4a7ac172540d7774b45a2a78d901a4c6d07bba77a33dbccff464ea3edf languageName: node linkType: hard "@types/stylis@npm:^4.0.2": - version: 4.2.5 - resolution: "@types/stylis@npm:4.2.5" - checksum: 24f91719db5569979e9e2f197e050ef82e1fd72474e8dc45bca38d48ee56481eae0f0d4a7ac172540d7774b45a2a78d901a4c6d07bba77a33dbccff464ea3edf + version: 4.2.7 + resolution: "@types/stylis@npm:4.2.7" + checksum: 5f2c8c07d4d5c3c8624d44d026b726295c5a68164087e3cd86f2694660c592ab36264ae49dec38126cf5580f0901266aa24f1c476a622bb83210eabdf7a464e8 + languageName: node + linkType: hard + +"@types/supercluster@npm:^7.1.3": + version: 7.1.3 + resolution: "@types/supercluster@npm:7.1.3" + dependencies: + "@types/geojson": "*" + checksum: 724188fb6ebdf0835821559da5480e5951c3e51afa86fcf83f5bf6984b89652f947081a3f6835cb082a6865fe5f1f8f667e92346f237d3518c2159121bb7c5cc languageName: node linkType: hard @@ -5274,9 +5184,9 @@ __metadata: linkType: hard "@types/unist@npm:^2, @types/unist@npm:^2.0.0": - version: 2.0.10 - resolution: "@types/unist@npm:2.0.10" - checksum: e2924e18dedf45f68a5c6ccd6015cd62f1643b1b43baac1854efa21ae9e70505db94290434a23da1137d9e31eb58e54ca175982005698ac37300a1c889f6c4aa + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e languageName: node linkType: hard @@ -5288,11 +5198,11 @@ __metadata: linkType: hard "@types/ws@npm:^8.5.10": - version: 8.5.10 - resolution: "@types/ws@npm:8.5.10" + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" dependencies: "@types/node": "*" - checksum: 3ec416ea2be24042ebd677932a462cf16d2080393d8d7d0b1b3f5d6eaa4a7387aaf0eefb99193c0bfd29444857cf2e0c3ac89899e130550dc6c14ada8a46d25e + checksum: 0331b14cde388e2805af66cad3e3f51857db8e68ed91e5b99750915e96fe7572e58296dc99999331bbcf08f0ff00a227a0bb214e991f53c2a5aca7b0e71173fa languageName: node linkType: hard @@ -5304,11 +5214,11 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" dependencies: "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba + checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 languageName: node linkType: hard @@ -5445,9 +5355,9 @@ __metadata: linkType: hard "@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 64ed518f49c2b31f5b50f8570a1e37bde3b62f2460042c50f132430b2d869c4a6586f13aa33a58a4722715b8158c68cae2827389d6752ac54da2893c83e480fc languageName: node linkType: hard @@ -5486,154 +5396,154 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/ast@npm:1.12.1" +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" dependencies: - "@webassemblyjs/helper-numbers": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - checksum: 31bcc64147236bd7b1b6d29d1f419c1f5845c785e1e42dc9e3f8ca2e05a029e9393a271b84f3a5bff2a32d35f51ff59e2181a6e5f953fe88576acd6750506202 + "@webassemblyjs/helper-numbers": 1.13.2 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + checksum: f9154ad9ea14f6f2374ebe918c221fd69a4d4514126a1acc6fa4966e8d27ab28cb550a5e6880032cf620e19640578658a7e5a55bd2aad1e3db4e9d598b8f2099 languageName: node linkType: hard -"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: e866ec8433f4a70baa511df5e8f2ebcd6c24f4e2cc6274c7c5aabe2bcce3459ea4680e0f35d450e1f3602acf3913b6b8e4f15069c8cfd34ae8609fb9a7d01795 languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 48b5df7fd3095bb252f59a139fe2cbd999a62ac9b488123e9a0da3906ad8a2f2da7b2eb21d328c01a90da987380928706395c2897d1f3ed9e2125b6d75a920d0 languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" - checksum: c3ffb723024130308db608e86e2bdccd4868bbb62dffb0a9a1530606496f79c87f8565bd8e02805ce64912b71f1a70ee5fb00307258b0c082c3abf961d097eca +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: b611e981dfd6a797c3d8fc3a772de29a6e55033737c2c09c31bb66c613bdbb2d25f915df1dee62a602c6acc057ca71128432fa8c3e22a893e1219dc454f14ede languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.6 - "@webassemblyjs/helper-api-error": 1.11.6 + "@webassemblyjs/floating-point-hex-parser": 1.13.2 + "@webassemblyjs/helper-api-error": 1.13.2 "@xtuc/long": 4.2.2 - checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 + checksum: 49e2c9bf9b66997e480f6b44d80f895b3cde4de52ac135921d28e144565edca6903a519f627f4089b5509de1d7f9e5023f0e1a94ff78a36c9e2eb30e7c18ffd2 languageName: node linkType: hard -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 8e059e1c1f0294f4fc3df8e4eaff3c5ef6e2e1358f34ebc118eaf5070ed59e56ed7fc92b28be734ebde17c8d662d5d27e06ade686c282445135da083ae11c128 languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" dependencies: - "@webassemblyjs/ast": 1.12.1 - "@webassemblyjs/helper-buffer": 1.12.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/wasm-gen": 1.12.1 - checksum: c19810cdd2c90ff574139b6d8c0dda254d42d168a9e5b3d353d1bc085f1d7164ccd1b3c05592a45a939c47f7e403dc8d03572bb686642f06a3d02932f6f0bc8f + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/wasm-gen": 1.14.1 + checksum: 0a08d454a63192cd66abf91b6f060ac4b466cef341262246e9dcc828dd4c8536195dea9b46a1244b1eac65b59b8b502164a771a190052a92ff0a0a2ded0f8f53 languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/ieee754@npm:1.11.6" +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" dependencies: "@xtuc/ieee754": ^1.2.0 - checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de + checksum: d7e3520baa37a7309fa7db4d73d69fb869878853b1ebd4b168821bd03fcc4c0e1669c06231315b0039035d9a7a462e53de3ad982da4a426a4b0743b5888e8673 languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/leb128@npm:1.11.6" +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" dependencies: "@xtuc/long": 4.2.2 - checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 + checksum: 64083507f7cff477a6d71a9e325d95665cea78ec8df99ca7c050e1cfbe300fbcf0842ca3dcf3b4fa55028350135588a4f879398d3dd2b6a8de9913ce7faf5333 languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 95ec6052f30eefa8d50c9b2a3394d08b17d53a4aa52821451d41d774c126fa8f39b988fbf5bff56da86852a87c16d676e576775a4071e5e5ccf020cc85a4b281 languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" dependencies: - "@webassemblyjs/ast": 1.12.1 - "@webassemblyjs/helper-buffer": 1.12.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/helper-wasm-section": 1.12.1 - "@webassemblyjs/wasm-gen": 1.12.1 - "@webassemblyjs/wasm-opt": 1.12.1 - "@webassemblyjs/wasm-parser": 1.12.1 - "@webassemblyjs/wast-printer": 1.12.1 - checksum: ae23642303f030af888d30c4ef37b08dfec7eab6851a9575a616e65d1219f880d9223913a39056dd654e49049d76e97555b285d1f7e56935047abf578cce0692 + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/helper-wasm-section": 1.14.1 + "@webassemblyjs/wasm-gen": 1.14.1 + "@webassemblyjs/wasm-opt": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + "@webassemblyjs/wast-printer": 1.14.1 + checksum: 9341c3146bb1b7863f03d6050c2a66990f20384ca137388047bbe1feffacb599e94fca7b7c18287d17e2449ffb4005fdc7f41f674a6975af9ad8522756f8ffff languageName: node linkType: hard -"@webassemblyjs/wasm-gen@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" dependencies: - "@webassemblyjs/ast": 1.12.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/ieee754": 1.11.6 - "@webassemblyjs/leb128": 1.11.6 - "@webassemblyjs/utf8": 1.11.6 - checksum: 5787626bb7f0b033044471ddd00ce0c9fe1ee4584e8b73e232051e3a4c99ba1a102700d75337151c8b6055bae77eefa4548960c610a5e4a504e356bd872138ff + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/ieee754": 1.13.2 + "@webassemblyjs/leb128": 1.13.2 + "@webassemblyjs/utf8": 1.13.2 + checksum: 401b12bec7431c4fc29d9414bbe40d3c6dc5be04d25a116657c42329f5481f0129f3b5834c293f26f0e42681ceac9157bf078ce9bdb6a7f78037c650373f98b2 languageName: node linkType: hard -"@webassemblyjs/wasm-opt@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" dependencies: - "@webassemblyjs/ast": 1.12.1 - "@webassemblyjs/helper-buffer": 1.12.1 - "@webassemblyjs/wasm-gen": 1.12.1 - "@webassemblyjs/wasm-parser": 1.12.1 - checksum: 0e8fa8a0645304a1e18ff40d3db5a2e9233ebaa169b19fcc651d6fc9fe2cac0ce092ddee927318015ae735d9cd9c5d97c0cafb6a51dcd2932ac73587b62df991 + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/wasm-gen": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + checksum: 60c697a9e9129d8d23573856df0791ba33cea4a3bc2339044cae73128c0983802e5e50a42157b990eeafe1237eb8e7653db6de5f02b54a0ae7b81b02dcdf2ae9 languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" dependencies: - "@webassemblyjs/ast": 1.12.1 - "@webassemblyjs/helper-api-error": 1.11.6 - "@webassemblyjs/helper-wasm-bytecode": 1.11.6 - "@webassemblyjs/ieee754": 1.11.6 - "@webassemblyjs/leb128": 1.11.6 - "@webassemblyjs/utf8": 1.11.6 - checksum: 176015de3551ac068cd4505d837414f258d9ade7442bd71efb1232fa26c9f6d7d4e11a5c816caeed389943f409af7ebff6899289a992d7a70343cb47009d21a8 + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-api-error": 1.13.2 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/ieee754": 1.13.2 + "@webassemblyjs/leb128": 1.13.2 + "@webassemblyjs/utf8": 1.13.2 + checksum: 93f1fe2676da465b4e824419d9812a3d7218de4c3addd4e916c04bc86055fa134416c1b67e4b7cbde8d728c0dce2721d06cc0bfe7a7db7c093a0898009937405 languageName: node linkType: hard -"@webassemblyjs/wast-printer@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wast-printer@npm:1.12.1" +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" dependencies: - "@webassemblyjs/ast": 1.12.1 + "@webassemblyjs/ast": 1.14.1 "@xtuc/long": 4.2.2 - checksum: 2974b5dda8d769145ba0efd886ea94a601e61fb37114c14f9a9a7606afc23456799af652ac3052f284909bd42edc3665a76bc9b50f95f0794c053a8a1757b713 + checksum: 517881a0554debe6945de719d100b2d8883a2d24ddf47552cdeda866341e2bb153cd824a864bc7e2a61190a4b66b18f9899907e0074e9e820d2912ac0789ea60 languageName: node linkType: hard @@ -5729,10 +5639,10 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: e70b209f5f408dd3a3bbd0eec4b10a2ffd64704a4a3821d0969d84928cc490a8eb60f85b78a95622c1841113edac10161c62e52f5e7d0027aa26786a8136e02e languageName: node linkType: hard @@ -5745,7 +5655,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": +"accepts@npm:~1.3.4, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -5775,15 +5685,6 @@ __metadata: languageName: node linkType: hard -"acorn-import-assertions@npm:^1.9.0": - version: 1.9.0 - resolution: "acorn-import-assertions@npm:1.9.0" - peerDependencies: - acorn: ^8 - checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -5810,9 +5711,11 @@ __metadata: linkType: hard "acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: ^8.11.0 + checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c languageName: node linkType: hard @@ -5843,12 +5746,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.12.1, acorn@npm:^8.14.0, acorn@npm:^8.4.1, acorn@npm:^8.8.1, acorn@npm:^8.9.0": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" bin: acorn: bin/acorn - checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94 languageName: node linkType: hard @@ -5875,38 +5778,27 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: ^4.3.4 - checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753 languageName: node linkType: hard "agora-rtc-sdk-ng@npm:^4.20.2": - version: 4.20.2 - resolution: "agora-rtc-sdk-ng@npm:4.20.2" + version: 4.23.3 + resolution: "agora-rtc-sdk-ng@npm:4.23.3" dependencies: - "@agora-js/media": 4.20.2 - "@agora-js/report": 4.20.2 - "@agora-js/shared": 4.20.2 + "@agora-js/media": 4.23.3 + "@agora-js/report": 4.23.3 + "@agora-js/shared": 4.23.3 agora-rte-extension: ^1.2.4 - axios: ^1.6.7 + axios: ^1.8.3 formdata-polyfill: ^4.0.7 + pako: ^2.1.0 ua-parser-js: ^0.7.34 webrtc-adapter: 8.2.0 - checksum: 86d48dab756831fdf2d4a745301eb91e0a700b63a8b5d4792aa6bd5bc7842cedc32a12409e122e0ab962c17023f78800e3628c285b4be0d37b7a78562d8e4706 + checksum: fefa8d2038a883b4242093db0938f7b95cfa742d4ef1ae77ce750e52f9120387ba9ab4d326da826082e75b56e2943040f7e2bd18d359860689dad0ea56004f52 languageName: node linkType: hard @@ -5925,25 +5817,25 @@ __metadata: linkType: hard "ahooks@npm:^3.7.6": - version: 3.7.11 - resolution: "ahooks@npm:3.7.11" + version: 3.8.5 + resolution: "ahooks@npm:3.8.5" dependencies: "@babel/runtime": ^7.21.0 dayjs: ^1.9.1 intersection-observer: ^0.12.0 - js-cookie: ^2.x.x + js-cookie: ^3.0.5 lodash: ^4.17.21 react-fast-compare: ^3.2.2 resize-observer-polyfill: ^1.5.1 screenfull: ^5.0.0 tslib: ^2.4.1 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 290f78a27a25720060e0e4a0b15a772e58f8e02534a000fa60e8fa2e09958c2ec410d382c51e5d510e511a8563f67fdbbee3ffe20680bb2a34573691ba3dbafc + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: fbda7e7981bcfe66dacd9bb4c496b350095f3380eb7a0f686df257a4401b0c9d865fce27e1caa1ee0706fb93ad32b9e3ad268d1ed777c8f4ffb4d576e488b95f languageName: node linkType: hard -"ajv-formats@npm:^2.1.1": +"ajv-formats@npm:^2.1.0, ajv-formats@npm:^2.1.1": version: 2.1.1 resolution: "ajv-formats@npm:2.1.1" dependencies: @@ -5989,27 +5881,27 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.12.0, ajv@npm:^8.9.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" +"ajv@npm:^8.0.0, ajv@npm:^8.12.0, ajv@npm:^8.6.1, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" dependencies: - fast-deep-equal: ^3.1.1 + fast-deep-equal: ^3.1.3 + fast-uri: ^3.0.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 languageName: node linkType: hard -"alasql@npm:^4.6.2": - version: 4.6.2 - resolution: "alasql@npm:4.6.2" +"alasql@npm:^4.6.6": + version: 4.6.6 + resolution: "alasql@npm:4.6.6" dependencies: cross-fetch: 4.1.0 yargs: 16 bin: alasql: bin/alasql-cli.js - checksum: cc68e87eeaa72ddaec5f20c4ca631e2a8ddb45e38d4b7de41cb14661ead657b1afec8d9530160f66fe5253e9724db9ada5fc63ba2c5bcacf5b8f9583c7b0870f + checksum: 863df88c88f6ce06e60126faa9fda5d6d93a7f95facb947d062d7d0cdf20a20149135aac7414391f76d63d863678c1b6e017ad47738c3e08c21319ebaea1f14b languageName: node linkType: hard @@ -6055,18 +5947,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac languageName: node linkType: hard @@ -6108,8 +5991,8 @@ __metadata: linkType: hard "antd-mobile@npm:^5.34.0": - version: 5.36.0 - resolution: "antd-mobile@npm:5.36.0" + version: 5.39.0 + resolution: "antd-mobile@npm:5.39.0" dependencies: "@floating-ui/dom": ^1.4.2 "@rc-component/mini-decimal": ^1.1.0 @@ -6122,7 +6005,8 @@ __metadata: dayjs: ^1.11.7 deepmerge: ^4.3.1 nano-memoize: ^3.0.16 - rc-field-form: ~1.27.4 + rc-field-form: ^1.34.2 + rc-segmented: ~2.4.1 rc-util: ^5.38.1 react-fast-compare: ^3.2.2 react-is: ^18.2.0 @@ -6132,19 +6016,20 @@ __metadata: use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 80d441578a2debf0052c1ab24fdbcc44f893baac5061efe5dce28cb85a9c6bf607c27c6487bd079b940b89fbaad3a7f0572b13d2b96da9a07e8a2472ef62a023 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 50a2660c5f403b039e5d4fcb75540ab39d78c554c31b6529e4d9cea55935b5e485975ed56c21acaeb828ccf318ae4323da5d9e24fa9073c7ce9d499d67ebac27 languageName: node linkType: hard -"antd@npm:^5.23.4": - version: 5.23.4 - resolution: "antd@npm:5.23.4" +"antd@npm:^5.25.2": + version: 5.25.2 + resolution: "antd@npm:5.25.2" dependencies: "@ant-design/colors": ^7.2.0 "@ant-design/cssinjs": ^1.23.0 "@ant-design/cssinjs-utils": ^1.1.3 "@ant-design/fast-color": ^2.0.6 - "@ant-design/icons": ^5.6.0 + "@ant-design/icons": ^5.6.1 "@ant-design/react-slick": ~1.1.2 "@babel/runtime": ^7.26.0 "@rc-component/color-picker": ~2.0.1 @@ -6155,44 +6040,44 @@ __metadata: classnames: ^2.5.1 copy-to-clipboard: ^3.3.3 dayjs: ^1.11.11 - rc-cascader: ~3.33.0 + rc-cascader: ~3.34.0 rc-checkbox: ~3.5.0 rc-collapse: ~3.9.0 rc-dialog: ~9.6.0 rc-drawer: ~7.2.0 rc-dropdown: ~4.2.1 rc-field-form: ~2.7.0 - rc-image: ~7.11.0 - rc-input: ~1.7.2 - rc-input-number: ~9.4.0 - rc-mentions: ~2.19.1 - rc-menu: ~9.16.0 + rc-image: ~7.12.0 + rc-input: ~1.8.0 + rc-input-number: ~9.5.0 + rc-mentions: ~2.20.0 + rc-menu: ~9.16.1 rc-motion: ^2.9.5 - rc-notification: ~5.6.2 + rc-notification: ~5.6.4 rc-pagination: ~5.1.0 - rc-picker: ~4.9.2 + rc-picker: ~4.11.3 rc-progress: ~4.0.0 - rc-rate: ~2.13.0 + rc-rate: ~2.13.1 rc-resize-observer: ^1.4.3 rc-segmented: ~2.7.0 - rc-select: ~14.16.6 + rc-select: ~14.16.8 rc-slider: ~11.1.8 rc-steps: ~6.0.1 rc-switch: ~4.1.0 - rc-table: ~7.50.2 - rc-tabs: ~15.5.0 - rc-textarea: ~1.9.0 - rc-tooltip: ~6.3.2 - rc-tree: ~5.13.0 + rc-table: ~7.50.5 + rc-tabs: ~15.6.1 + rc-textarea: ~1.10.0 + rc-tooltip: ~6.4.0 + rc-tree: ~5.13.1 rc-tree-select: ~5.27.0 - rc-upload: ~4.8.1 - rc-util: ^5.44.3 + rc-upload: ~4.9.0 + rc-util: ^5.44.4 scroll-into-view-if-needed: ^3.1.0 throttle-debounce: ^5.0.2 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: d663c0c86e0962b59fece21cab94f41e05b89a8b19438b4a804c6de50b6e1919a57ead63ffa9f4769d2ffa17b6f3e420871aa5c265b245a38cd3f8bf16a23edd + checksum: 55b9d7e25bcdcf185b61c898962b6137669322775c566074abe3d636dfe886679a17fe30b0e39aa1fdc00b7363b562e269dc711938d1164fcda63a614b838e56 languageName: node linkType: hard @@ -6245,22 +6130,20 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: ^2.0.3 - checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 +"aria-query@npm:^5.0.0, aria-query@npm:^5.3.2": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: d971175c85c10df0f6d14adfe6f1292409196114ab3c62f238e208b53103686f46cc70695a4f775b73bc65f6a09b6a092fd963c4f3a5a7d690c8fc5094925717 languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "array-buffer-byte-length@npm:1.0.1" +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" dependencies: - call-bind: ^1.0.5 - is-array-buffer: ^3.0.4 - checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + call-bound: ^1.0.3 + is-array-buffer: ^3.0.5 + checksum: 0ae3786195c3211b423e5be8dd93357870e6fb66357d81da968c2c39ef43583ef6eece1f9cb1caccdae4806739c65dea832b44b8593414313cd76a89795fca63 languageName: node linkType: hard @@ -6278,7 +6161,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -6299,7 +6182,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.4": +"array.prototype.findlast@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" dependencies: @@ -6313,82 +6196,70 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.3": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" +"array.prototype.findlastindex@npm:^1.2.5": + version: 1.2.6 + resolution: "array.prototype.findlastindex@npm:1.2.6" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.4 define-properties: ^1.2.1 - es-abstract: ^1.23.2 + es-abstract: ^1.23.9 es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-shim-unscopables: ^1.0.2 - checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 + es-object-atoms: ^1.1.1 + es-shim-unscopables: ^1.1.0 + checksum: bd2665bd51f674d4e1588ce5d5848a8adb255f414070e8e652585598b801480516df2c6cef2c60b6ea1a9189140411c49157a3f112d52e9eabb4e9fc80936ea6 languageName: node linkType: hard "array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flat@npm:1.3.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2": - version: 1.3.2 - resolution: "array.prototype.flatmap@npm:1.3.2" + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.5 + es-shim-unscopables: ^1.0.2 + checksum: 5d5a7829ab2bb271a8d30a1c91e6271cef0ec534593c0fe6d2fb9ebf8bb62c1e5326e2fddcbbcbbe5872ca04f5e6b54a1ecf092e0af704fb538da9b2bfd95b40 languageName: node linkType: hard -"array.prototype.toreversed@npm:^1.1.2": - version: 1.1.2 - resolution: "array.prototype.toreversed@npm:1.1.2" +"array.prototype.flatmap@npm:^1.3.2, array.prototype.flatmap@npm:^1.3.3": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.5 + es-shim-unscopables: ^1.0.2 + checksum: 11b4de09b1cf008be6031bb507d997ad6f1892e57dc9153583de6ebca0f74ea403fffe0f203461d359de05048d609f3f480d9b46fed4099652d8b62cc972f284 languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.3": - version: 1.1.3 - resolution: "array.prototype.tosorted@npm:1.1.3" +"array.prototype.tosorted@npm:^1.1.4": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" dependencies: - call-bind: ^1.0.5 + call-bind: ^1.0.7 define-properties: ^1.2.1 - es-abstract: ^1.22.3 - es-errors: ^1.1.0 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 es-shim-unscopables: ^1.0.2 - checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af + checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a languageName: node linkType: hard -"arraybuffer.prototype.slice@npm:^1.0.3": - version: 1.0.3 - resolution: "arraybuffer.prototype.slice@npm:1.0.3" +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" dependencies: array-buffer-byte-length: ^1.0.1 - call-bind: ^1.0.5 + call-bind: ^1.0.8 define-properties: ^1.2.1 - es-abstract: ^1.22.3 - es-errors: ^1.2.1 - get-intrinsic: ^1.2.3 + es-abstract: ^1.23.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 is-array-buffer: ^3.0.4 - is-shared-array-buffer: ^1.0.2 - checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + checksum: b1d1fd20be4e972a3779b1569226f6740170dca10f07aa4421d42cefeec61391e79c557cda8e771f5baefe47d878178cd4438f60916ce831813c08132bced765 languageName: node linkType: hard @@ -6446,6 +6317,13 @@ __metadata: languageName: node linkType: hard +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 9102e246d1ed9b37ac36f57f0a6ca55226876553251a31fc80677e71471f463a54c872dc78d5d7f80740c8ba624395cccbe8b60f7b690c4418f487d8e9fd1106 + languageName: node + linkType: hard + "async-validator@npm:^4.1.0": version: 4.2.5 resolution: "async-validator@npm:4.2.5" @@ -6454,9 +6332,9 @@ __metadata: linkType: hard "async@npm:^3.2.3": - version: 3.2.5 - resolution: "async@npm:3.2.5" - checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: ee6eb8cd8a0ab1b58bd2a3ed6c415e93e773573a91d31df9d5ef559baafa9dab37d3b096fa7993e84585cac3697b2af6ddb9086f45d3ac8cae821bb2aab65682 languageName: node linkType: hard @@ -6484,47 +6362,34 @@ __metadata: linkType: hard "aws4@npm:^1.8.0": - version: 1.12.0 - resolution: "aws4@npm:1.12.0" - checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc - languageName: node - linkType: hard - -"axe-core@npm:=4.7.0": - version: 4.7.0 - resolution: "axe-core@npm:4.7.0" - checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 9ac924e4a91c088b4928ea86b68d8c4558b0e6289ccabaae0e3e96a611bd75277c2eab6e3965821028768700516f612b929a5ce822f33a8771f74ba2a8cedb9c languageName: node linkType: hard -"axios@npm:^1.6.7": - version: 1.6.8 - resolution: "axios@npm:1.6.8" - dependencies: - follow-redirects: ^1.15.6 - form-data: ^4.0.0 - proxy-from-env: ^1.1.0 - checksum: bf007fa4b207d102459300698620b3b0873503c6d47bf5a8f6e43c0c64c90035a4f698b55027ca1958f61ab43723df2781c38a99711848d232cad7accbcdfcdd +"axe-core@npm:^4.10.0": + version: 4.10.3 + resolution: "axe-core@npm:4.10.3" + checksum: e89fa5bcad9216f2de29bbdf95d6211d8c5b1025cbdcf56b6695c18b2e9a1eebd0b997a0141334169f6f062fc68fd39a5b97f86348d9f5be05958eade5c1ec78 languageName: node linkType: hard -"axios@npm:^1.7.4, axios@npm:^1.7.7": - version: 1.7.7 - resolution: "axios@npm:1.7.7" +"axios@npm:^1.7.4, axios@npm:^1.7.7, axios@npm:^1.8.3": + version: 1.9.0 + resolution: "axios@npm:1.9.0" dependencies: follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 882d4fe0ec694a07c7f5c1f68205eb6dc5a62aecdb632cc7a4a3d0985188ce3030e0b277e1a8260ac3f194d314ae342117660a151fabffdc5081ca0b5a8b47fe + checksum: 631f02c9c279f2ae90637a4989cc9d75c1c27aefd16b6e8eb90f98a4d0bddaccfd1cb1387be12101d1ab0f9bbf0c47e2451b4de0cf2870462a7d9ed3de8da3f2 languageName: node linkType: hard -"axobject-query@npm:^3.2.1": - version: 3.2.1 - resolution: "axobject-query@npm:3.2.1" - dependencies: - dequal: ^2.0.3 - checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 +"axobject-query@npm:^4.1.0": + version: 4.1.0 + resolution: "axobject-query@npm:4.1.0" + checksum: 7d1e87bf0aa7ae7a76cd39ab627b7c48fda3dc40181303d9adce4ba1d5b5ce73b5e5403ee6626ec8e91090448c887294d6144e24b6741a976f5be9347e3ae1df languageName: node linkType: hard @@ -6546,15 +6411,15 @@ __metadata: linkType: hard "babel-loader@npm:^9.1.3": - version: 9.1.3 - resolution: "babel-loader@npm:9.1.3" + version: 9.2.1 + resolution: "babel-loader@npm:9.2.1" dependencies: find-cache-dir: ^4.0.0 schema-utils: ^4.0.0 peerDependencies: "@babel/core": ^7.12.0 webpack: ">=5" - checksum: b168dde5b8cf11206513371a79f86bb3faa7c714e6ec9fffd420876b61f3d7f5f4b976431095ef6a14bc4d324505126deb91045fd41e312ba49f4deaa166fe28 + checksum: e1858d7625ad7cc8cabe6bbb8657f957041ffb1308375f359e92aa1654f413bfbb86a281bbf7cd4f7fff374d571c637b117551deac0231d779a198d4e4e78331 languageName: node linkType: hard @@ -6604,38 +6469,38 @@ __metadata: linkType: hard "babel-plugin-polyfill-corejs2@npm:^0.4.10": - version: 0.4.11 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11" + version: 0.4.13 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.13" dependencies: "@babel/compat-data": ^7.22.6 - "@babel/helper-define-polyfill-provider": ^0.6.2 + "@babel/helper-define-polyfill-provider": ^0.6.4 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: f098353ce7c7dde1a1d2710858e01b471e85689110c9e37813e009072347eb8c55d5f84d20d3bf1cab31755f20078ba90f8855fdc4686a9daa826a95ff280bd7 + checksum: 553b64eb11bad2cfc220e94f1fb2449755b5c7d54886dca6d8053b13b6e910f349a38bbc75aafd610f88217699db499548919bb5df653d635b9cdeb39d34a68d languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": - version: 0.10.4 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" +"babel-plugin-polyfill-corejs3@npm:^0.11.0": + version: 0.11.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.1 - core-js-compat: ^3.36.1 + "@babel/helper-define-polyfill-provider": ^0.6.3 + core-js-compat: ^3.40.0 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: b96a54495f7cc8b3797251c8c15f5ed015edddc3110fc122f6b32c94bec33af1e8bc56fa99091808f500bde0cccaaa266889cdc5935d9e6e9cf09898214f02dd + checksum: ee39440475ef377a1570ccbc06b1a1d274cbfbbe2e7c3d4c60f38781a47f00a28bd10d8e23430828b965820c41beb2c93c84596baf72583a2c9c3fdfa4397994 languageName: node linkType: hard "babel-plugin-polyfill-regenerator@npm:^0.6.1": - version: 0.6.2 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2" + version: 0.6.4 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.4" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.2 + "@babel/helper-define-polyfill-provider": ^0.6.4 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 150233571072b6b3dfe946242da39cba8587b7f908d1c006f7545fc88b0e3c3018d445739beb61e7a75835f0c2751dbe884a94ff9b245ec42369d9267e0e1b3f + checksum: f4d4a803834ffa72713579d696586d8cc654c0025cbd5ec775fc5d37faa00381dcb80e5b97d4b16059443352653585596d87848b5590b1d8670c235408e73fb3 languageName: node linkType: hard @@ -6693,24 +6558,27 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b languageName: node linkType: hard @@ -6727,8 +6595,8 @@ __metadata: linkType: hard "babel-preset-react-app@npm:^10.0.1": - version: 10.0.1 - resolution: "babel-preset-react-app@npm:10.0.1" + version: 10.1.0 + resolution: "babel-preset-react-app@npm:10.1.0" dependencies: "@babel/core": ^7.16.0 "@babel/plugin-proposal-class-properties": ^7.16.0 @@ -6737,6 +6605,7 @@ __metadata: "@babel/plugin-proposal-numeric-separator": ^7.16.0 "@babel/plugin-proposal-optional-chaining": ^7.16.0 "@babel/plugin-proposal-private-methods": ^7.16.0 + "@babel/plugin-proposal-private-property-in-object": ^7.16.7 "@babel/plugin-transform-flow-strip-types": ^7.16.0 "@babel/plugin-transform-react-display-name": ^7.16.0 "@babel/plugin-transform-runtime": ^7.16.4 @@ -6746,7 +6615,7 @@ __metadata: "@babel/runtime": ^7.16.3 babel-plugin-macros: ^3.1.0 babel-plugin-transform-react-remove-prop-types: ^0.4.24 - checksum: ee66043484e67b8aef2541976388299691478ea00834f3bb14b6b3d5edcd316a5ac95351f6ec084b41ee555cad820d4194280ad38ce51884fedc7e8946a57b74 + checksum: e4ac6c85be4f56c7e45b52700e04aed01422221b5c988e7a192a80d3b5aa3abbd415c0b76e8b5d564a411477a0b03323a15108663a9f541bd9397fa32f28ed89 languageName: node linkType: hard @@ -6822,16 +6691,16 @@ __metadata: linkType: hard "big.js@npm:^6.2.1": - version: 6.2.1 - resolution: "big.js@npm:6.2.1" - checksum: 0b234a2fd56c52bed2798ed2020bcab6fef5e9523b99a05406ad071d1aed6ee97ada9fb8de9576092da74c68825c276e19015743b8d1baea269b60a5c666b0cd + version: 6.2.2 + resolution: "big.js@npm:6.2.2" + checksum: 3659092d155d01338f21a01a46a93aa343d25e83bce55700005a46eec27d90fe56abd3b3edde742f16fbc5fee31b4c572b6821a595c1c180392b60b469fcda54 languageName: node linkType: hard "bignumber.js@npm:^8 || ^9": - version: 9.1.2 - resolution: "bignumber.js@npm:9.1.2" - checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf + version: 9.3.0 + resolution: "bignumber.js@npm:9.3.0" + checksum: 580d783d60246e758e527fa879ae0d282d8f250f555dd0fcee1227d680186ceba49ed7964c6d14e2e8d8eac7a2f4dd6ef1b7925dc52f5fc28a5a87639dd2dbd1 languageName: node linkType: hard @@ -6852,22 +6721,22 @@ __metadata: linkType: hard "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + version: 4.12.2 + resolution: "bn.js@npm:4.12.2" + checksum: dd224afda6f5a7d15f2fe5154e1a1c245576a725584ea1852c8c42f9748dfe847bc63a48b2885360023389a24cfebb3653ca97f4c69742f3c22bc63da6565030 languageName: node linkType: hard -"bn.js@npm:^5.0.0, bn.js@npm:^5.2.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 +"bn.js@npm:^5.2.1": + version: 5.2.2 + resolution: "bn.js@npm:5.2.2" + checksum: 4384d35fef785c757eb050bc1f13d60dd8e37662ca72392ae6678b35cfa2a2ae8f0494291086294683a7d977609c7878ac3cff08ecca7f74c3ca73f3acbadbe8 languageName: node linkType: hard -"body-parser@npm:1.20.2": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" +"body-parser@npm:1.20.3": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" dependencies: bytes: 3.1.2 content-type: ~1.0.5 @@ -6877,21 +6746,21 @@ __metadata: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 - checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d languageName: node linkType: hard "bonjour-service@npm:^1.2.1": - version: 1.2.1 - resolution: "bonjour-service@npm:1.2.1" + version: 1.3.0 + resolution: "bonjour-service@npm:1.3.0" dependencies: fast-deep-equal: ^3.1.3 multicast-dns: ^7.2.5 - checksum: b65b3e6e3a07e97f2da5806afb76f3946d5a6426b72e849a0236dc3c9d3612fb8c5359ebade4be7eb63f74a37670c53a53be2ff17f4f709811fda77f600eb25b + checksum: 737bd40d0b609b18afdfcaf3c416a60d7dc94aedc4cb9d6e7af459a7f3bdffadc199370a48c46739d92689741cad4ec8a6987a3e4d869dd301b521227b92e082 languageName: node linkType: hard @@ -6921,12 +6790,12 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" +"braces@npm:^3.0.2, braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 languageName: node linkType: hard @@ -6967,7 +6836,7 @@ __metadata: languageName: node linkType: hard -"browserify-cipher@npm:^1.0.0": +"browserify-cipher@npm:^1.0.1": version: 1.0.1 resolution: "browserify-cipher@npm:1.0.1" dependencies: @@ -7002,16 +6871,17 @@ __metadata: linkType: hard "browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" + version: 4.1.1 + resolution: "browserify-rsa@npm:4.1.1" dependencies: - bn.js: ^5.0.0 - randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + bn.js: ^5.2.1 + randombytes: ^2.1.0 + safe-buffer: ^5.2.1 + checksum: 2628508646331791c29312bbf274c076a237437a17178ea9bdc75c577fb4164a0da0b137deaadf6ade623701332377c5c2ceb0ff6f991c744a576e790ec95852 languageName: node linkType: hard -"browserify-sign@npm:^4.0.0": +"browserify-sign@npm:^4.2.3": version: 4.2.3 resolution: "browserify-sign@npm:4.2.3" dependencies: @@ -7038,17 +6908,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.10, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0": - version: 4.23.0 - resolution: "browserslist@npm:4.23.0" +"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4": + version: 4.24.5 + resolution: "browserslist@npm:4.24.5" dependencies: - caniuse-lite: ^1.0.30001587 - electron-to-chromium: ^1.4.668 - node-releases: ^2.0.14 - update-browserslist-db: ^1.0.13 + caniuse-lite: ^1.0.30001716 + electron-to-chromium: ^1.5.149 + node-releases: ^2.0.19 + update-browserslist-db: ^1.1.3 bin: browserslist: cli.js - checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def + checksum: 69310ade58b0cb2b2871022fdaba8388902f9a2d17a6fa05f383d046d6da87fd9f83018a66fe1c6296648ca7d52e3208c3fc68c82f17a0fd4bf12a452c036247 languageName: node linkType: hard @@ -7125,13 +6995,6 @@ __metadata: languageName: node linkType: hard -"bytes@npm:3.0.0": - version: 3.0.0 - resolution: "bytes@npm:3.0.0" - checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 - languageName: node - linkType: hard - "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -7139,11 +7002,11 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^18.0.0": - version: 18.0.2 - resolution: "cacache@npm:18.0.2" +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - "@npmcli/fs": ^3.1.0 + "@npmcli/fs": ^4.0.0 fs-minipass: ^3.0.0 glob: ^10.2.2 lru-cache: ^10.0.1 @@ -7151,24 +7014,43 @@ __metadata: minipass-collect: ^2.0.1 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b + p-map: ^7.0.2 + ssri: ^12.0.0 + tar: ^7.4.3 + unique-filename: ^4.0.0 + checksum: e95684717de6881b4cdaa949fa7574e3171946421cd8291769dd3d2417dbf7abf4aa557d1f968cca83dcbc95bed2a281072b09abfc977c942413146ef7ed4525 languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" dependencies: - es-define-property: ^1.0.0 es-errors: ^1.3.0 function-bind: ^1.1.2 + checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: ^1.0.0 + es-define-property: ^1.0.0 get-intrinsic: ^1.2.4 - set-function-length: ^1.2.1 - checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + set-function-length: ^1.2.2 + checksum: aa2899bce917a5392fd73bd32e71799c37c0b7ab454e0ed13af7f6727549091182aade8bbb7b55f304a5bc436d543241c14090fb8a3137e9875e23f444f4f5a9 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: ^1.0.2 + get-intrinsic: ^1.3.0 + checksum: 2f6399488d1c272f56306ca60ff696575e2b7f31daf23bc11574798c84d9f2759dceb0cb1f471a85b77f28962a7ac6411f51d283ea2e45319009a19b6ccab3b2 languageName: node linkType: hard @@ -7210,17 +7092,10 @@ __metadata: languageName: node linkType: hard -"can-use-dom@npm:^0.1.0": - version: 0.1.0 - resolution: "can-use-dom@npm:0.1.0" - checksum: 488fc94c40f2fcce46ebd41abf17ef0449acf0d6b145116036cd592a8e977e5729918d4b3b7c642ce7b1f5b83d330ade39a172cf6b6ef91093785991a868b308 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001613 - resolution: "caniuse-lite@npm:1.0.30001613" - checksum: 909bae9083aecd4b7488d39b66f454448f52a64bceab4f512720775bcff16aa00124fc3439ee76b1e3bb5b795ea54a7cc9a5ece0affa31c07657447cf198a9e2 +"caniuse-lite@npm:^1.0.30001716": + version: 1.0.30001718 + resolution: "caniuse-lite@npm:1.0.30001718" + checksum: c6598b6eb2c4358fc9f8ead8982bf5f9efdc1f29bb74948b9481d314ced10675bd0beb99771094ac52d56c2cec121049d1f18e9405cab7d81807816d1836b38a languageName: node linkType: hard @@ -7272,17 +7147,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - "chalk@npm:^3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -7347,17 +7211,17 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d languageName: node linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: fcbbd9dd0cd5b48444319007cc0c15870fd8612cc0df320908aa9d5e8a244084d48571eb28bf3c58c19327d2c5838f354c2d89fac3956d8e992273437401ac19 languageName: node linkType: hard @@ -7369,19 +7233,19 @@ __metadata: linkType: hard "cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": - version: 1.0.4 - resolution: "cipher-base@npm:1.0.4" + version: 1.0.6 + resolution: "cipher-base@npm:1.0.6" dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e + inherits: ^2.0.4 + safe-buffer: ^5.2.1 + checksum: 64a1738a8583163cf096bc85321a69ef3075bb0873f34cf89dc705e62b9eee058dd6b2e5c672f774ede0b6bdbe56fe7b710e0d38c4f08a2f355d8ab828f05c6f languageName: node linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.3.1 - resolution: "cjs-module-lexer@npm:1.3.1" - checksum: 75f20ac264a397ea5c63f9c2343a51ab878043666468f275e94862f7180ec1d764a400ec0c09085dcf0db3193c74a8b571519abd2bf4be0d2be510d1377c8d4b + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 221a1661a9ff4944b472c85ac7cd5029b2f2dc7f6c5f4ecf887f261503611110b43a48acb6c07f8f04109c772d1637fdb20b31252bf27058f35aa97bf5ad8b12 languageName: node linkType: hard @@ -7408,13 +7272,6 @@ __metadata: languageName: node linkType: hard -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - "cli-cursor@npm:^4.0.0": version: 4.0.0 resolution: "cli-cursor@npm:4.0.0" @@ -7467,13 +7324,6 @@ __metadata: languageName: node linkType: hard -"clone@npm:^2.1.1": - version: 2.1.2 - resolution: "clone@npm:2.1.2" - checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d - languageName: node - linkType: hard - "clone@npm:~0.1.9": version: 0.1.19 resolution: "clone@npm:0.1.19" @@ -7532,15 +7382,6 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -7550,13 +7391,6 @@ __metadata: languageName: node linkType: hard -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - "color-name@npm:^1.1.4, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -7657,7 +7491,7 @@ __metadata: languageName: node linkType: hard -"compressible@npm:~2.0.16": +"compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" dependencies: @@ -7667,17 +7501,17 @@ __metadata: linkType: hard "compression@npm:^1.7.4": - version: 1.7.4 - resolution: "compression@npm:1.7.4" + version: 1.8.0 + resolution: "compression@npm:1.8.0" dependencies: - accepts: ~1.3.5 - bytes: 3.0.0 - compressible: ~2.0.16 + bytes: 3.1.2 + compressible: ~2.0.18 debug: 2.6.9 + negotiator: ~0.6.4 on-headers: ~1.0.2 - safe-buffer: 5.1.2 + safe-buffer: 5.2.1 vary: ~1.1.2 - checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b + checksum: 12ca3e326b4ccb6b6e51e1d14d96fafd058ddb3be08fe888487d367d42fb4f81f25d4bf77acc517ba724370e7d74469280688baf2da8cad61062bdf62eb9fd45 languageName: node linkType: hard @@ -7705,9 +7539,9 @@ __metadata: linkType: hard "compute-scroll-into-view@npm:^3.0.2": - version: 3.1.0 - resolution: "compute-scroll-into-view@npm:3.1.0" - checksum: 224549d6dd1d40342230de5c6d69cac5c3ed5c2f6a4437310f959aadc8db1d20b03da44a6e0de14d9419c6f9130ce51ec99a91b11bde55d4640f10551c89c213 + version: 3.1.1 + resolution: "compute-scroll-into-view@npm:3.1.1" + checksum: c56345199e746f93a515b3190d1bf0940944d5b7e1b06e33f16b430a93c9ada1c6b9fe89674d3f3a6078642523c49edcddc1cd639bbe78797fffd072b0231930 languageName: node linkType: hard @@ -7802,10 +7636,10 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.6.0": - version: 0.6.0 - resolution: "cookie@npm:0.6.0" - checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410 +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: cec5e425549b3650eb5c3498a9ba3cde0b9cd419e3b36e4b92739d30b4d89e0b678b98c1ddc209ce7cf958cd3215671fd6ac47aec21f10c2a0cc68abd399d8a7 languageName: node linkType: hard @@ -7853,19 +7687,19 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1": - version: 3.37.0 - resolution: "core-js-compat@npm:3.37.0" +"core-js-compat@npm:^3.40.0": + version: 3.42.0 + resolution: "core-js-compat@npm:3.42.0" dependencies: - browserslist: ^4.23.0 - checksum: cab5078e98625f889fd9bbbb19e84cb408f31c87e68302d380db0d26ae8e35c1b38cde084358ff345d4aa461af5f3c60d8a913a5b30bff3a83b4b7859374db36 + browserslist: ^4.24.4 + checksum: 4f0a7db9ed9a95c4edae0749fe9a4d4d4f8f51a53c7c3e06049887500e98763732e8afef9628d2145f875b6e262567e951a77e4d06273f9eac273f5241259fd3 languageName: node linkType: hard "core-js@npm:^3.25.2": - version: 3.37.0 - resolution: "core-js@npm:3.37.0" - checksum: 212c3e9b3fc277dbb63739ef58a61c5709ccd0b36f09c3ce6946aa91fa180c60f57f976d4a5fdb9cda0c6cb55417379ba5a008fc3a1384ec94ec8ec61826469d + version: 3.42.0 + resolution: "core-js@npm:3.42.0" + checksum: 270b5532511e2e6cc8e6b10c1434306208dca377aba3850875941316ce605b008ddbdeca0b6dd6eb2a4b188899dab259c0aecd7dc265bc5e7df19563e4e284b7 languageName: node linkType: hard @@ -7923,9 +7757,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "countup.js@npm:^2.8.0": - version: 2.8.0 - resolution: "countup.js@npm:2.8.0" - checksum: bfded0c6051b79be5f07c097f97bc39f29e95b92b01077fc214ee118b0afbc53988b3a491e2319ea7a1896014a9cda52f150722ccce9afd677faea5ade1274dd + version: 2.8.2 + resolution: "countup.js@npm:2.8.2" + checksum: b526db0a8ccefe2fba051343266f142004065787b533a1408265adcd07d20fb7d1f7ab688df5f77b83b9c21772926300d87f2c940dc8047770b458276ae3f471 languageName: node linkType: hard @@ -7938,7 +7772,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"create-ecdh@npm:^4.0.0": +"create-ecdh@npm:^4.0.4": version: 4.0.4 resolution: "create-ecdh@npm:4.0.4" dependencies: @@ -7961,7 +7795,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -8016,41 +7850,42 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "cross-fetch@npm:^3.1.5": - version: 3.1.8 - resolution: "cross-fetch@npm:3.1.8" + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" dependencies: - node-fetch: ^2.6.12 - checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + node-fetch: ^2.7.0 + checksum: 8ded5ea35f705e81e569e7db244a3f96e05e95996ff51877c89b0c1ec1163c76bb5dad77d0f8fba6bb35a0abacb36403d7271dc586d8b1f636110ee7a8d959fd languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b languageName: node linkType: hard -"crypto-browserify@npm:^3.11.0": - version: 3.12.0 - resolution: "crypto-browserify@npm:3.12.0" +"crypto-browserify@npm:^3.11.0, crypto-browserify@npm:^3.12.1": + version: 3.12.1 + resolution: "crypto-browserify@npm:3.12.1" dependencies: - browserify-cipher: ^1.0.0 - browserify-sign: ^4.0.0 - create-ecdh: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.0 - diffie-hellman: ^5.0.0 - inherits: ^2.0.1 - pbkdf2: ^3.0.3 - public-encrypt: ^4.0.0 - randombytes: ^2.0.0 - randomfill: ^1.0.3 - checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 + browserify-cipher: ^1.0.1 + browserify-sign: ^4.2.3 + create-ecdh: ^4.0.4 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + diffie-hellman: ^5.0.3 + hash-base: ~3.0.4 + inherits: ^2.0.4 + pbkdf2: ^3.1.2 + public-encrypt: ^4.0.3 + randombytes: ^2.1.0 + randomfill: ^1.0.4 + checksum: 4e643dd5acfff80fbe2cc567feb75a22d726cc4df34772c988f326976c3c1ee1f8a611a33498dab11568cff3e134f0bd44a0e1f4c216585e5877ab5327cdb6fc languageName: node linkType: hard @@ -8248,14 +8083,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"csstype@npm:3.1.2": - version: 3.1.2 - resolution: "csstype@npm:3.1.2" - checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": +"csstype@npm:3.1.3, csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 @@ -8274,9 +8102,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "cytoscape@npm:^3.28.1": - version: 3.29.2 - resolution: "cytoscape@npm:3.29.2" - checksum: f42d9dc4e0791b1909d617c0f62fc9a982967362af8d585d4a42b9933887bea697be73d5d94d7bbaae5edccad2ac665dc46a2489271408d64b4fb2dc4ece3c15 + version: 3.32.0 + resolution: "cytoscape@npm:3.32.0" + checksum: 60da8ac39cdd6f1afaa527ee7c3d15dd65f61cd9e32cb4615c94933a045bea7cb38bd177a1df92a6882e08c85066b66123fb799091abf21dc4af52b63ad28ace languageName: node linkType: hard @@ -8709,36 +8537,36 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"data-view-buffer@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-buffer@npm:1.0.1" +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" dependencies: - call-bind: ^1.0.6 + call-bound: ^1.0.3 es-errors: ^1.3.0 - is-data-view: ^1.0.1 - checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + is-data-view: ^1.0.2 + checksum: 1e1cd509c3037ac0f8ba320da3d1f8bf1a9f09b0be09394b5e40781b8cc15ff9834967ba7c9f843a425b34f9fe14ce44cf055af6662c44263424c1eb8d65659b languageName: node linkType: hard -"data-view-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-length@npm:1.0.1" +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" dependencies: - call-bind: ^1.0.7 + call-bound: ^1.0.3 es-errors: ^1.3.0 - is-data-view: ^1.0.1 - checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + is-data-view: ^1.0.2 + checksum: 3600c91ced1cfa935f19ef2abae11029e01738de8d229354d3b2a172bf0d7e4ed08ff8f53294b715569fdf72dfeaa96aa7652f479c0f60570878d88e7e8bddf6 languageName: node linkType: hard -"data-view-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "data-view-byte-offset@npm:1.0.0" +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" dependencies: - call-bind: ^1.0.6 + call-bound: ^1.0.2 es-errors: ^1.3.0 is-data-view: ^1.0.1 - checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + checksum: 8dd492cd51d19970876626b5b5169fbb67ca31ec1d1d3238ee6a71820ca8b80cafb141c485999db1ee1ef02f2cc3b99424c5eda8d59e852d9ebb79ab290eb5ee languageName: node linkType: hard @@ -8751,17 +8579,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"dayjs@npm:1.x, dayjs@npm:^1.11.7, dayjs@npm:^1.9.1": - version: 1.11.10 - resolution: "dayjs@npm:1.11.10" - checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 - languageName: node - linkType: hard - -"dayjs@npm:^1.11.11": - version: 1.11.12 - resolution: "dayjs@npm:1.11.12" - checksum: 40a4f67c2df3af125ae0ddec68d3a6d806d3009a7414bf45479aaf82f1dd82f3e139e6642e72391abccc37488897830c56afcabb4c819014130d283644df8128 +"dayjs@npm:1.x, dayjs@npm:^1.11.11, dayjs@npm:^1.11.13, dayjs@npm:^1.11.7, dayjs@npm:^1.9.1": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: f388db88a6aa93956c1f6121644e783391c7b738b73dbc54485578736565c8931bdfba4bb94e9b1535c6e509c97d5deb918bbe1ae6b34358d994de735055cca9 languageName: node linkType: hard @@ -8781,7 +8602,19 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: a43826a01cda685ee4cec00fb2d3322eaa90ccadbef60d9287debc2a886be3e835d9199c80070ede75a409ee57828c4c6cd80e4b154f2843f0dc95a570dc0729 + languageName: node + linkType: hard + +"debug@npm:4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -8802,52 +8635,31 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"decimal.js@npm:^10.4.2": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae - languageName: node - linkType: hard - -"decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" - dependencies: - character-entities: ^2.0.0 - checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 - languageName: node - linkType: hard - -"dedent@npm:^1.0.0": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 045b595557b2a8ea2eb9b0b4623d764e9a87326486fe2b61191b4342ed93dc01245644d8a09f3108a50c0ee7965f1eedd92e4a3a503ed89ea8e810566ea27f9a - languageName: node - linkType: hard - -"deep-diff@npm:^1.0.2": - version: 1.0.2 - resolution: "deep-diff@npm:1.0.2" - checksum: 9de8b5eedc1957116e1b47e4c3c4e3dbe23cb741abefc5ec8829a12e77958c689ac46888a3c35320f976cf42fb6de2b016e158facdb24d894ab5b5fdabad9b34 +"decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": + version: 10.5.0 + resolution: "decimal.js@npm:10.5.0" + checksum: 91c6b53b5dd2f39a05535349ced6840f591d1f914e3c025c6dcec6ffada6e3cfc8dc3f560d304b716be9a9aece3567a7f80f6aff8f38d11ab6f78541c3a91a01 languageName: node linkType: hard -"deep-equal@npm:^1.0.1": - version: 1.1.2 - resolution: "deep-equal@npm:1.1.2" - dependencies: - is-arguments: ^1.1.1 - is-date-object: ^1.0.5 - is-regex: ^1.1.4 - object-is: ^1.1.5 - object-keys: ^1.1.1 - regexp.prototype.flags: ^1.5.1 - checksum: 2d50f27fff785fb272cdef038ee5365ee5a30ab1aab053976e6a6add44cc60abd99b38179a46a01ac52c5e54ebb220e8f1a3a1954da20678b79c46ef4d97c9db +"decode-named-character-reference@npm:^1.0.0": + version: 1.1.0 + resolution: "decode-named-character-reference@npm:1.1.0" + dependencies: + character-entities: ^2.0.0 + checksum: 102970fde2d011f307d3789776e68defd75ba4ade1a34951affd1fabb86cd32026fd809f2658c2b600d839a57b6b6a84e2b3a45166d38c8625d66ca11cd702b8 + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.6.0 + resolution: "dedent@npm:1.6.0" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: ecaa83968b3db4ffeadf8f679c01280f8679ec79993d7e203c0281d7926e883bb79f42b263ba0df1f78e146e4b0be1b9a5b922b1fe040cb89b09977bc9c25b38 languageName: node linkType: hard @@ -8884,6 +8696,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"deepmerge-ts@npm:^7.1.0": + version: 7.1.5 + resolution: "deepmerge-ts@npm:7.1.5" + checksum: 9a05828a026f43c30aab71a3e8a023f96bdd19fd5ef9cb4ce0c0ade3b28784da34e82b7ca04051fbb58f6e003c1672808391c89a362e0636c6541ae081c116b6 + languageName: node + linkType: hard + "deepmerge@npm:^4.0.0, deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -8908,15 +8727,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"default-gateway@npm:^6.0.3": - version: 6.0.3 - resolution: "default-gateway@npm:6.0.3" - dependencies: - execa: ^5.0.0 - checksum: 126f8273ecac8ee9ff91ea778e8784f6cd732d77c3157e8c5bdd6ed03651b5291f71446d05bc02d04073b1e67583604db5394ea3cf992ede0088c70ea15b7378 - languageName: node - linkType: hard - "deferred-leveldown@npm:~0.2.0": version: 0.2.0 resolution: "deferred-leveldown@npm:0.2.0" @@ -8951,7 +8761,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -8992,7 +8802,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"dequal@npm:^2.0.0, dequal@npm:^2.0.3": +"dequal@npm:^2.0.0": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -9060,7 +8870,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"diffie-hellman@npm:^5.0.0": +"diffie-hellman@npm:^5.0.3": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" dependencies: @@ -9160,10 +8970,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"domain-browser@npm:^4.22.0": - version: 4.23.0 - resolution: "domain-browser@npm:4.23.0" - checksum: 95b772f5fa88300240694380e06e03868573acdf86ca392a58c78602d6536dca2097ad2469a1500bd23a1329b09992de846e0b66c364cbf5711a7fee3ee5dac9 +"domain-browser@npm:4.22.0": + version: 4.22.0 + resolution: "domain-browser@npm:4.22.0" + checksum: e7ce1c19073e17dec35cfde050a3ddaac437d3ba8b870adabf9d5682e665eab3084df05de432dedf25b34303f0a2c71ac30f1cdba61b1aea018047b10de3d988 languageName: node linkType: hard @@ -9210,10 +9020,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"dompurify@npm:^3.0.5": - version: 3.1.1 - resolution: "dompurify@npm:3.1.1" - checksum: a6077018b2f86c3dbb77326a978b32dbd169492d3835c6b990140f67805ffd23e223f30222c888cb7a8fa10db1154be6cfd213beb6c38e3270ecba5b2a97ab5c +"dompurify@npm:^3.0.5 <3.1.7": + version: 3.1.6 + resolution: "dompurify@npm:3.1.6" + checksum: cc4fc4ccd9261fbceb2a1627a985c70af231274a26ddd3f643fd0616a0a44099bd9e4480940ce3655612063be4a1fe9f5e9309967526f8c0a99f931602323866 languageName: node linkType: hard @@ -9229,13 +9039,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" + version: 3.2.2 + resolution: "domutils@npm:3.2.2" dependencies: dom-serializer: ^2.0.0 domelementtype: ^2.3.0 domhandler: ^5.0.3 - checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 + checksum: ae941d56f03d857077d55dde9297e960a625229fc2b933187cc4123084d7c2d2517f58283a7336567127029f1e008449bac8ac8506d44341e29e3bb18e02f906 languageName: node linkType: hard @@ -9257,9 +9067,20 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "dotenv@npm:^16.0.0, dotenv@npm:^16.0.3": - version: 16.4.5 - resolution: "dotenv@npm:16.4.5" - checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c + version: 16.5.0 + resolution: "dotenv@npm:16.5.0" + checksum: 6543fe87b5ddf2d60dd42df6616eec99148a5fc150cb4530fef5bda655db5204a3afa0e6f25f7cd64b20657ace4d79c0ef974bec32fdb462cad18754191e7a90 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 languageName: node linkType: hard @@ -9288,9 +9109,22 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "echarts-extension-gmap@npm:^1.6.0": - version: 1.6.0 - resolution: "echarts-extension-gmap@npm:1.6.0" - checksum: 5bab07c7e739b81cf9c9c91b2d2db1101bab1f3b6bf649d6ebdf93fb4be0f9089058f934e4300a21a05dfb0cc0702214c48a5ec5fb34d7be19e419efbc317a61 + version: 1.7.0 + resolution: "echarts-extension-gmap@npm:1.7.0" + checksum: b7a88dcaf83da44c482ace744761543abd8e796c680f211e03085f037b0c7231bb62cd333d25893bd450ac700cfb8c7b7a509a672cccf79f112f570c9991b348 + languageName: node + linkType: hard + +"echarts-for-react@npm:^3.0.2": + version: 3.0.2 + resolution: "echarts-for-react@npm:3.0.2" + dependencies: + fast-deep-equal: ^3.1.3 + size-sensor: ^1.0.1 + peerDependencies: + echarts: ^3.0.0 || ^4.0.0 || ^5.0.0 + react: ^15.0.0 || >=16.0.0 + checksum: d3b16325befb1294d99f6f089462415be739c1654370945eef2172efd5868596f10e4cd021e0ff65b89a6f9de5e9c331ccf3765d9167ccb12d573f9632b5b7a6 languageName: node linkType: hard @@ -9316,12 +9150,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "echarts@npm:^5.4.3": - version: 5.5.0 - resolution: "echarts@npm:5.5.0" + version: 5.6.0 + resolution: "echarts@npm:5.6.0" dependencies: tslib: 2.3.0 - zrender: 5.5.0 - checksum: 181600d21bc4ad6a877bac419800501345c4103ae49ef05a4db495c8dde91f0a5f7ff02eb94581190c59518526f7931e8410ce3fe5da1e0f1e60cd1aeec04a52 + zrender: 5.6.1 + checksum: 4b545444155f9457daa89a4ea45f9e08177a9a59d9df7e5ea5206f66e290964fb0a1a273b0dfdeb24a4aa264f6afc925918aa2b76190917abf390bef092ba95c languageName: node linkType: hard @@ -9343,10 +9177,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.668": - version: 1.4.750 - resolution: "electron-to-chromium@npm:1.4.750" - checksum: d1a5f1e9942c90dea8e1f60555ea9c0053676a8c945a82b8acd040fcae9173cdaa0127a1a2f563c96aa3d64de1b970d4b8a3245303c614ea7a564fc389c5d8c1 +"electron-to-chromium@npm:^1.5.149": + version: 1.5.157 + resolution: "electron-to-chromium@npm:1.5.157" + checksum: 479d1bb9458f0e19d0853a7f423b8a2468ca0f4a36772bfe115460183bc94662d63d4a4cde98c4aaf3c06e1840646e85dd48ef854ddf634fd169c6504540ea44 languageName: node linkType: hard @@ -9358,8 +9192,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "elliptic@npm:^6.5.3, elliptic@npm:^6.5.5": - version: 6.5.5 - resolution: "elliptic@npm:6.5.5" + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" dependencies: bn.js: ^4.11.9 brorand: ^1.1.0 @@ -9368,7 +9202,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: inherits: ^2.0.4 minimalistic-assert: ^1.0.1 minimalistic-crypto-utils: ^1.0.1 - checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb + checksum: 27b14a52f68bbbc0720da259f712cb73e953f6d2047958cd02fb0d0ade2e83849dc39fb4af630889c67df8817e24237428cf59c4f4c07700f755b401149a7375 languageName: node linkType: hard @@ -9407,6 +9241,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -9428,13 +9269,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.16.0, enhanced-resolve@npm:^5.7.0": - version: 5.16.0 - resolution: "enhanced-resolve@npm:5.16.0" +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.17.1, enhanced-resolve@npm:^5.7.0": + version: 5.18.1 + resolution: "enhanced-resolve@npm:5.18.1" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: ccfd01850ecf2aa51e8554d539973319ff7d8a539ef1e0ba3460a0ccad6223c4ef6e19165ee64161b459cd8a48df10f52af4434c60023c65fde6afa32d475f7e + checksum: de5bea7debe3576e78173bcc409c4aee7fcb56580c602d5c47c533b92952e55d7da3d9f53b864846ba62c8bd3efb0f9ecfe5f865e57de2f3e9b6e5cda03b4e7e languageName: node linkType: hard @@ -9452,6 +9293,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"entities@npm:^6.0.0": + version: 6.0.0 + resolution: "entities@npm:6.0.0" + checksum: 4e964b5549b0f1e7a88836527d38181aa7b2f87222ed2424e78309781b17212de684c84094435f53bea69a7e7e2505268fd96772af166adb686d086d64361435 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -9460,11 +9308,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "envinfo@npm:^7.7.3": - version: 7.12.0 - resolution: "envinfo@npm:7.12.0" + version: 7.14.0 + resolution: "envinfo@npm:7.14.0" bin: envinfo: dist/cli.js - checksum: 4c83a55768cf8b7e553155c29e7fa7bbdb0fb2c1156208efc373fc030045c6aca5e8e642e96027d3eb0c752156922ea3fca6183d9e13f38507f0e02ec82c23a1 + checksum: 137c1dd9a4d5781c4a6cdc6b695454ba3c4ba1829f73927198aa4122f11b35b59d7b2cb7e1ceea1364925a30278897548511d22f860c14253a33797d0bebd551 languageName: node linkType: hard @@ -9504,70 +9352,73 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": - version: 1.23.3 - resolution: "es-abstract@npm:1.23.3" +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9": + version: 1.23.10 + resolution: "es-abstract@npm:1.23.10" dependencies: - array-buffer-byte-length: ^1.0.1 - arraybuffer.prototype.slice: ^1.0.3 + array-buffer-byte-length: ^1.0.2 + arraybuffer.prototype.slice: ^1.0.4 available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - data-view-buffer: ^1.0.1 - data-view-byte-length: ^1.0.1 - data-view-byte-offset: ^1.0.0 - es-define-property: ^1.0.0 + call-bind: ^1.0.8 + call-bound: ^1.0.4 + data-view-buffer: ^1.0.2 + data-view-byte-length: ^1.0.2 + data-view-byte-offset: ^1.0.1 + es-define-property: ^1.0.1 es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-set-tostringtag: ^2.0.3 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.4 - get-symbol-description: ^1.0.2 - globalthis: ^1.0.3 - gopd: ^1.0.1 + es-object-atoms: ^1.1.1 + es-set-tostringtag: ^2.1.0 + es-to-primitive: ^1.3.0 + function.prototype.name: ^1.1.8 + get-intrinsic: ^1.3.0 + get-proto: ^1.0.1 + get-symbol-description: ^1.1.0 + globalthis: ^1.0.4 + gopd: ^1.2.0 has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 + has-proto: ^1.2.0 + has-symbols: ^1.1.0 hasown: ^2.0.2 - internal-slot: ^1.0.7 - is-array-buffer: ^3.0.4 + internal-slot: ^1.1.0 + is-array-buffer: ^3.0.5 is-callable: ^1.2.7 - is-data-view: ^1.0.1 - is-negative-zero: ^2.0.3 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.3 - is-string: ^1.0.7 - is-typed-array: ^1.1.13 - is-weakref: ^1.0.2 - object-inspect: ^1.13.1 + is-data-view: ^1.0.2 + is-regex: ^1.2.1 + is-shared-array-buffer: ^1.0.4 + is-string: ^1.1.1 + is-typed-array: ^1.1.15 + is-weakref: ^1.1.1 + math-intrinsics: ^1.1.0 + object-inspect: ^1.13.4 object-keys: ^1.1.1 - object.assign: ^4.1.5 - regexp.prototype.flags: ^1.5.2 - safe-array-concat: ^1.1.2 - safe-regex-test: ^1.0.3 - string.prototype.trim: ^1.2.9 - string.prototype.trimend: ^1.0.8 + object.assign: ^4.1.7 + own-keys: ^1.0.1 + regexp.prototype.flags: ^1.5.4 + safe-array-concat: ^1.1.3 + safe-push-apply: ^1.0.0 + safe-regex-test: ^1.1.0 + set-proto: ^1.0.0 + string.prototype.trim: ^1.2.10 + string.prototype.trimend: ^1.0.9 string.prototype.trimstart: ^1.0.8 - typed-array-buffer: ^1.0.2 - typed-array-byte-length: ^1.0.1 - typed-array-byte-offset: ^1.0.2 - typed-array-length: ^1.0.6 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.15 - checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + typed-array-buffer: ^1.0.3 + typed-array-byte-length: ^1.0.3 + typed-array-byte-offset: ^1.0.4 + typed-array-length: ^1.0.7 + unbox-primitive: ^1.1.0 + which-typed-array: ^1.1.19 + checksum: 0b1baf903096c4f19030ab3334062deb6df577441266223b44cb431d8733f21852e9ac8be1c73c28dddc8f0c214c668969195cee0a14d21967ca91628f5f4366 languageName: node linkType: hard -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: ^1.2.4 - checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a languageName: node linkType: hard -"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": +"es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 @@ -9591,72 +9442,75 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17": - version: 1.0.19 - resolution: "es-iterator-helpers@npm:1.0.19" +"es-iterator-helpers@npm:^1.2.1": + version: 1.2.1 + resolution: "es-iterator-helpers@npm:1.2.1" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.3 define-properties: ^1.2.1 - es-abstract: ^1.23.3 + es-abstract: ^1.23.6 es-errors: ^1.3.0 es-set-tostringtag: ^2.0.3 function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - globalthis: ^1.0.3 + get-intrinsic: ^1.2.6 + globalthis: ^1.0.4 + gopd: ^1.2.0 has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - iterator.prototype: ^1.1.2 - safe-array-concat: ^1.1.2 - checksum: 7ae112b88359fbaf4b9d7d1d1358ae57c5138768c57ba3a8fb930393662653b0512bfd7917c15890d1471577fb012fee8b73b4465e59b331739e6ee94f961683 + has-proto: ^1.2.0 + has-symbols: ^1.1.0 + internal-slot: ^1.1.0 + iterator.prototype: ^1.1.4 + safe-array-concat: ^1.1.3 + checksum: 952808dd1df3643d67ec7adf20c30b36e5eecadfbf36354e6f39ed3266c8e0acf3446ce9bc465e38723d613cb1d915c1c07c140df65bdce85da012a6e7bda62b languageName: node linkType: hard -"es-module-lexer@npm:^1.2.1": - version: 1.5.2 - resolution: "es-module-lexer@npm:1.5.2" - checksum: 59c47109eca80b93dda2418337b4308c194c578704dc57d5aa54973b196e378d31e92f258e5525655b99b3de8a84dda2debb9646cddf6fe8830f1bfca95ee060 +"es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.5.4": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 7858bb76ae387fdbf8a6fccc951bf18919768309850587553eca34698b9193fbc65fab03d3d9f69163d860321fbf66adf89d5821e7f4148c7cb7d7b997259211 languageName: node linkType: hard -"es-object-atoms@npm:^1.0.0": - version: 1.0.0 - resolution: "es-object-atoms@npm:1.0.0" +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" dependencies: es-errors: ^1.3.0 - checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.3": - version: 2.0.3 - resolution: "es-set-tostringtag@npm:2.0.3" +"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" dependencies: - get-intrinsic: ^1.2.4 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 has-tostringtag: ^1.0.2 - hasown: ^2.0.1 - checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + hasown: ^2.0.2 + checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6 languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": - version: 1.0.2 - resolution: "es-shim-unscopables@npm:1.0.2" +"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": + version: 1.1.0 + resolution: "es-shim-unscopables@npm:1.1.0" dependencies: - hasown: ^2.0.0 - checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 + hasown: ^2.0.2 + checksum: 33cfb1ebcb2f869f0bf528be1a8660b4fe8b6cec8fc641f330e508db2284b58ee2980fad6d0828882d22858c759c0806076427a3673b6daa60f753e3b558ee15 languageName: node linkType: hard -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" dependencies: - is-callable: ^1.1.4 - is-date-object: ^1.0.1 - is-symbol: ^1.0.2 - checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + is-callable: ^1.2.7 + is-date-object: ^1.0.5 + is-symbol: ^1.0.4 + checksum: 966965880356486cd4d1fe9a523deda2084c81b3702d951212c098f5f2ee93605d1b7c1840062efb48a07d892641c7ed1bc194db563645c0dd2b919cb6d65b93 languageName: node linkType: hard @@ -9737,10 +9591,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"escalade@npm:^3.1.1": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e languageName: node linkType: hard @@ -9751,13 +9605,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - "escape-string-regexp@npm:^2.0.0": version: 2.0.0 resolution: "escape-string-regexp@npm:2.0.0" @@ -9851,15 +9698,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" +"eslint-module-utils@npm:^2.12.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" dependencies: debug: ^3.2.7 peerDependenciesMeta: eslint: optional: true - checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d + checksum: be3ac52e0971c6f46daeb1a7e760e45c7c45f820c8cc211799f85f10f04ccbf7afc17039165d56cb2da7f7ca9cec2b3a777013cddf0b976784b37eb9efa24180 languageName: node linkType: hard @@ -9878,29 +9725,31 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "eslint-plugin-import@npm:^2.25.3": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" dependencies: - array-includes: ^3.1.7 - array.prototype.findlastindex: ^1.2.3 + "@rtsao/scc": ^1.1.0 + array-includes: ^3.1.8 + array.prototype.findlastindex: ^1.2.5 array.prototype.flat: ^1.3.2 array.prototype.flatmap: ^1.3.2 debug: ^3.2.7 doctrine: ^2.1.0 eslint-import-resolver-node: ^0.3.9 - eslint-module-utils: ^2.8.0 - hasown: ^2.0.0 - is-core-module: ^2.13.1 + eslint-module-utils: ^2.12.0 + hasown: ^2.0.2 + is-core-module: ^2.15.1 is-glob: ^4.0.3 minimatch: ^3.1.2 - object.fromentries: ^2.0.7 - object.groupby: ^1.0.1 - object.values: ^1.1.7 + object.fromentries: ^2.0.8 + object.groupby: ^1.0.3 + object.values: ^1.2.0 semver: ^6.3.1 + string.prototype.trimend: ^1.0.8 tsconfig-paths: ^3.15.0 peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: b1d2ac268b3582ff1af2a72a2c476eae4d250c100f2e335b6e102036e4a35efa530b80ec578dfc36761fabb34a635b9bf5ab071abe9d4404a4bb054fdf22d415 languageName: node linkType: hard @@ -9922,28 +9771,27 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.8.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.8.0" + version: 6.10.2 + resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" dependencies: - "@babel/runtime": ^7.23.2 - aria-query: ^5.3.0 - array-includes: ^3.1.7 + aria-query: ^5.3.2 + array-includes: ^3.1.8 array.prototype.flatmap: ^1.3.2 ast-types-flow: ^0.0.8 - axe-core: =4.7.0 - axobject-query: ^3.2.1 + axe-core: ^4.10.0 + axobject-query: ^4.1.0 damerau-levenshtein: ^1.0.8 emoji-regex: ^9.2.2 - es-iterator-helpers: ^1.0.15 - hasown: ^2.0.0 + hasown: ^2.0.2 jsx-ast-utils: ^3.3.5 language-tags: ^1.0.9 minimatch: ^3.1.2 - object.entries: ^1.1.7 - object.fromentries: ^2.0.7 + object.fromentries: ^2.0.8 + safe-regex-test: ^1.0.3 + string.prototype.includes: ^2.0.1 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + checksum: 0cc861398fa26ada61ed5703eef5b335495fcb96253263dcd5e399488ff019a2636372021baacc040e3560d1a34bfcd5d5ad9f1754f44cd0509c956f7df94050 languageName: node linkType: hard @@ -9975,30 +9823,30 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "eslint-plugin-react@npm:^7.27.1": - version: 7.34.1 - resolution: "eslint-plugin-react@npm:7.34.1" + version: 7.37.5 + resolution: "eslint-plugin-react@npm:7.37.5" dependencies: - array-includes: ^3.1.7 - array.prototype.findlast: ^1.2.4 - array.prototype.flatmap: ^1.3.2 - array.prototype.toreversed: ^1.1.2 - array.prototype.tosorted: ^1.1.3 + array-includes: ^3.1.8 + array.prototype.findlast: ^1.2.5 + array.prototype.flatmap: ^1.3.3 + array.prototype.tosorted: ^1.1.4 doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.17 + es-iterator-helpers: ^1.2.1 estraverse: ^5.3.0 + hasown: ^2.0.2 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 - object.entries: ^1.1.7 - object.fromentries: ^2.0.7 - object.hasown: ^1.1.3 - object.values: ^1.1.7 + object.entries: ^1.1.9 + object.fromentries: ^2.0.8 + object.values: ^1.2.1 prop-types: ^15.8.1 resolve: ^2.0.0-next.5 semver: ^6.3.1 - string.prototype.matchall: ^4.0.10 + string.prototype.matchall: ^4.0.12 + string.prototype.repeat: ^1.0.0 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: 8675e7558e646e3c2fcb04bb60cfe416000b831ef0b363f0117838f5bfc799156113cb06058ad4d4b39fc730903b7360b05038da11093064ca37caf76b7cf2ca languageName: node linkType: hard @@ -10055,14 +9903,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "eslint@npm:^8.0.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" + version: 8.57.1 + resolution: "eslint@npm:8.57.1" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.4 - "@eslint/js": 8.57.0 - "@humanwhocodes/config-array": ^0.11.14 + "@eslint/js": 8.57.1 + "@humanwhocodes/config-array": ^0.13.0 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 "@ungap/structured-clone": ^1.2.0 @@ -10098,7 +9946,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 + checksum: e2489bb7f86dd2011967759a09164e65744ef7688c310bc990612fc26953f34cc391872807486b15c06833bdff737726a23e9b4cdba5de144c311377dc41d91b languageName: node linkType: hard @@ -10124,11 +9972,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -10213,13 +10061,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"eventemitter3@npm:^2.0.3": - version: 2.0.3 - resolution: "eventemitter3@npm:2.0.3" - checksum: dfbf4a07144afea0712d8e6a7f30ae91beb7c12c36c3d480818488aafa437d9a331327461f82c12dfd60a4fbad502efc97f684089cda02809988b84a23630752 - languageName: node - linkType: hard - "eventemitter3@npm:^4.0.0": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -10307,52 +10148,52 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 7e191e3dd6edd8c56c88f2c8037c98fbb8034fe48778be53ed8cb30ccef371a061a4e999a469aab939b92f8f12698f3b426d52f4f76b7a20da5f9f98c3cbc862 languageName: node linkType: hard -"express@npm:^4.17.3": - version: 4.19.2 - resolution: "express@npm:4.19.2" +"express@npm:^4.21.2": + version: 4.21.2 + resolution: "express@npm:4.21.2" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: ~1.0.4 - cookie: 0.6.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.12 proxy-addr: ~2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 + checksum: 3aef1d355622732e20b8f3a7c112d4391d44e2131f4f449e1f273a309752a41abfad714e881f177645517cbe29b3ccdc10b35e7e25c13506114244a5b72f549d languageName: node linkType: hard -"extend@npm:^3.0.0, extend@npm:^3.0.2, extend@npm:~3.0.2": +"extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 @@ -10395,10 +10236,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"fast-diff@npm:1.1.2": - version: 1.1.2 - resolution: "fast-diff@npm:1.1.2" - checksum: 2ef726603e22a89ef27225bfaef24c17e3aec188df24da4629d5f012b23a884e09a0c7299ff37a0aec7aa788755bd554f5801f698de4deeffce83308bd11405d +"fast-diff@npm:^1.3.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 languageName: node linkType: hard @@ -10409,16 +10250,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + micromatch: ^4.0.8 + checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd languageName: node linkType: hard @@ -10436,13 +10277,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"fast-loops@npm:^1.1.3": - version: 1.1.3 - resolution: "fast-loops@npm:1.1.3" - checksum: b674378ba2ed8364ca1a00768636e88b22201c8d010fa62a8588a4cace04f90bac46714c13cf638be82b03438d2fe813600da32291fb47297a1bd7fa6cef0cee - languageName: node - linkType: hard - "fast-shallow-equal@npm:^1.0.0": version: 1.0.0 resolution: "fast-shallow-equal@npm:1.0.0" @@ -10450,6 +10284,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 7161ba2a7944778d679ba8e5f00d6a2bb479a2142df0982f541d67be6c979b17808f7edbb0ce78161c85035974bde3fa52b5137df31da46c0828cb629ba67c4e + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.12": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -10465,11 +10306,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.19.1 + resolution: "fastq@npm:1.19.1" dependencies: reusify: ^1.0.4 - checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + checksum: 7691d1794fb84ad0ec2a185f10e00f0e1713b894e2c9c4d42f0bc0ba5f8c00e6e655a202074ca0b91b9c3d977aab7c30c41a8dc069fb5368576ac0054870a0e6 languageName: node linkType: hard @@ -10522,6 +10363,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 79043610236579ffbd0647c508b43bd030a2d034a17c43cf96813a00e8e92e51acdb115c6ddecef3b5812cc2692b976155b4f6413e51e3761f1e772fa019a321 + languageName: node + linkType: hard + "fetch-blob@npm:^3.1.2": version: 3.2.0 resolution: "fetch-blob@npm:3.2.0" @@ -10569,27 +10422,27 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 languageName: node linkType: hard -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" dependencies: debug: 2.6.9 - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 on-finished: 2.4.1 parseurl: ~1.3.3 statuses: 2.0.1 unpipe: ~1.0.0 - checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + checksum: a8c58cd97c9cd47679a870f6833a7b417043f5a288cd6af6d0f49b476c874a506100303a128b6d3b654c3d74fa4ff2ffed68a48a27e8630cda5c918f2977dcf4 languageName: node linkType: hard @@ -10634,9 +10487,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "flag-icons@npm:^7.2.1": - version: 7.2.1 - resolution: "flag-icons@npm:7.2.1" - checksum: c24a71a1e830860625b60f4a0d16dff51dcc5e6849aeacb93e44bb0cd1553f5ba7d07fdfbb35ea3e297ddb300ca4bdb6a8499c396e25882c8ed38a942dc922cc + version: 7.3.2 + resolution: "flag-icons@npm:7.3.2" + checksum: b18745b5c3dd521380e6c7bbe175cb19e11121966ad87025f2b555f2b3eb911372d3e720ed9bcb1f9d6addaede4e3dd696a58dad1e344fe1a7269fe7cb46ab13 languageName: node linkType: hard @@ -10661,9 +10514,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "flatted@npm:^3.2.9": - version: 3.3.1 - resolution: "flatted@npm:3.3.1" - checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 8c96c02fbeadcf4e8ffd0fa24983241e27698b0781295622591fc13585e2f226609d95e422bcf2ef044146ffacb6b68b1f20871454eddf75ab3caa6ee5f4a1fe languageName: node linkType: hard @@ -10680,21 +10533,21 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: debug: optional: true - checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 + checksum: 859e2bacc7a54506f2bf9aacb10d165df78c8c1b0ceb8023f966621b233717dab56e8d08baadc3ad3b9db58af290413d585c999694b7c146aaf2616340c3d2a6 languageName: node linkType: hard -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" +"for-each@npm:^0.3.3, for-each@npm:^0.3.5": + version: 0.3.5 + resolution: "for-each@npm:0.3.5" dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + is-callable: ^1.2.7 + checksum: 3c986d7e11f4381237cc98baa0a2f87eabe74719eee65ed7bed275163082b940ede19268c61d04c6260e0215983b12f8d885e3c8f9aa8c2113bf07c37051745c languageName: node linkType: hard @@ -10706,12 +10559,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" dependencies: - cross-spawn: ^7.0.0 + cross-spawn: ^7.0.6 signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + checksum: b2c1a6fc0bf0233d645d9fefdfa999abf37db1b33e5dab172b3cbfb0662b88bfbd2c9e7ab853533d199050ec6b65c03fcf078fc212d26e4990220e98c6930eef languageName: node linkType: hard @@ -10723,13 +10576,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" + version: 4.0.2 + resolution: "form-data@npm:4.0.2" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 + es-set-tostringtag: ^2.1.0 mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + checksum: e887298b22c13c7c9c5a8ba3716f295a479a13ca78bfd855ef11cbce1bcf22bc0ae2062e94808e21d46e5c667664a1a1a8a7f57d7040193c1fefbfb11af58aab languageName: node linkType: hard @@ -10786,22 +10640,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "fs-extra@npm:^11.1.0": - version: 11.2.0 - resolution: "fs-extra@npm:11.2.0" + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: b12e42fa40ba47104202f57b8480dd098aa931c2724565e5e70779ab87605665594e76ee5fb00545f772ab9ace167fe06d2ab009c416dc8c842c5ae6df7aa7e8 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + checksum: f983c706e0c22b0c0747a8e9c76aed6f391ba2d76734cf2757cd84da13417b402ed68fe25bace65228856c61d36d3b41da198f1ffbf33d0b34283a2f7a62c6e9 languageName: node linkType: hard @@ -10847,15 +10692,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": - version: 1.1.6 - resolution: "function.prototype.name@npm:1.1.6" +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 + call-bind: ^1.0.8 + call-bound: ^1.0.3 + define-properties: ^1.2.1 functions-have-names: ^1.2.3 - checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + hasown: ^2.0.2 + is-callable: ^1.2.7 + checksum: 3a366535dc08b25f40a322efefa83b2da3cd0f6da41db7775f2339679120ef63b6c7e967266182609e655b8f0a8f65596ed21c7fd72ad8bd5621c2340edd4010 languageName: node linkType: hard @@ -10889,16 +10736,21 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" dependencies: + call-bind-apply-helpers: ^1.0.2 + es-define-property: ^1.0.1 es-errors: ^1.3.0 + es-object-atoms: ^1.1.1 function-bind: ^1.1.2 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - hasown: ^2.0.0 - checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d languageName: node linkType: hard @@ -10909,6 +10761,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -10916,14 +10778,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.2": - version: 1.0.2 - resolution: "get-symbol-description@npm:1.0.2" +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" dependencies: - call-bind: ^1.0.5 + call-bound: ^1.0.3 es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + get-intrinsic: ^1.2.6 + checksum: 655ed04db48ee65ef2ddbe096540d4405e79ba0a7f54225775fef43a7e2afcb93a77d141c5f05fdef0afce2eb93bcbfb3597142189d562ac167ff183582683cd languageName: node linkType: hard @@ -10936,10 +10798,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"github-buttons@npm:^2.22.0": + version: 2.29.1 + resolution: "github-buttons@npm:2.29.1" + checksum: adde1324247df85730e0056206d751894c02ce8dcad5e96234bbc9f2f15caaa12a6431608b7e04434e29df83b6900f4fc36d2d4581605f435d97dc29dcfd1a42 + languageName: node + linkType: hard + "github-markdown-css@npm:^5.1.0": - version: 5.5.1 - resolution: "github-markdown-css@npm:5.5.1" - checksum: ed04423a85e83d75baa128cea2ddcd2e688bc73a92abf146f9b9cc20546db40c67c9fadf150c5289d4c89b8f76bf11fb3c312ee8161398642be8298eeaa5a4be + version: 5.8.1 + resolution: "github-markdown-css@npm:5.8.1" + checksum: 040c4cb99d3bb42ac1ae183e4d542417731b628127b0a22f7ce771f64c567ee2125e29352aeee8827f336ab9503c42b0769e66aa6eaabf762fc935b96e6a8ebf languageName: node linkType: hard @@ -10975,18 +10844,19 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": - version: 10.3.12 - resolution: "glob@npm:10.3.12" +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: ^3.1.0 - jackspeak: ^2.3.6 - minimatch: ^9.0.1 - minipass: ^7.0.4 - path-scurry: ^1.10.2 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 bin: glob: dist/esm/bin.mjs - checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6 + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a languageName: node linkType: hard @@ -11033,12 +10903,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a languageName: node linkType: hard @@ -11057,16 +10928,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "globby@npm:^14.0.0": - version: 14.0.1 - resolution: "globby@npm:14.0.1" + version: 14.1.0 + resolution: "globby@npm:14.1.0" dependencies: "@sindresorhus/merge-streams": ^2.1.0 - fast-glob: ^3.3.2 - ignore: ^5.2.4 - path-type: ^5.0.0 + fast-glob: ^3.3.3 + ignore: ^7.0.3 + path-type: ^6.0.0 slash: ^5.1.0 - unicorn-magic: ^0.1.0 - checksum: 33568444289afb1135ad62d52d5e8412900cec620e3b6ece533afa46d004066f14b97052b643833d7cf4ee03e7fac571430130cde44c333df91a45d313105170 + unicorn-magic: ^0.3.0 + checksum: b1f27dccc999c010ee7e0ce7c6581fd2326ac86cf0508474d526d699a029b66b35d6fa4361c8b4ad8e80809582af71d5e2080e671cf03c26e98ca67aba8834bd languageName: node linkType: hard @@ -11077,12 +10948,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: ^1.1.3 - checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 languageName: node linkType: hard @@ -11133,17 +11002,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 79730518ae02c77e4af6a1d1a0b6a2c3e1509785532771f9baf0241e83e36329542c3d7a0e723df8cbc85f74eff4f177828a2265a01ba576adbdc2d40d86538b languageName: node linkType: hard @@ -11163,21 +11025,23 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: ^1.0.0 + checksum: f55010cb94caa56308041d77967c72a02ffd71386b23f9afa8447e58bc92d49d15c19bf75173713468e92fe3fb1680b03b115da39c21c32c74886d1d50d3e7ff languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -11197,13 +11061,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"hash-base@npm:~3.0": - version: 3.0.4 - resolution: "hash-base@npm:3.0.4" +"hash-base@npm:~3.0, hash-base@npm:~3.0.4": + version: 3.0.5 + resolution: "hash-base@npm:3.0.5" dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 + inherits: ^2.0.4 + safe-buffer: ^5.2.1 + checksum: 6a82675a5de2ea9347501bbe655a2334950c7ec972fd9810ae9529e06aeab8f7e8ef68fc2112e5e6f0745561a7e05326efca42ad59bb5fd116537f5f8b0a216d languageName: node linkType: hard @@ -11217,7 +11081,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": +"hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -11242,18 +11106,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "hast-util-from-parse5@npm:^8.0.0": - version: 8.0.1 - resolution: "hast-util-from-parse5@npm:8.0.1" + version: 8.0.3 + resolution: "hast-util-from-parse5@npm:8.0.3" dependencies: "@types/hast": ^3.0.0 "@types/unist": ^3.0.0 devlop: ^1.0.0 - hastscript: ^8.0.0 - property-information: ^6.0.0 + hastscript: ^9.0.0 + property-information: ^7.0.0 vfile: ^6.0.0 vfile-location: ^5.0.0 web-namespaces: ^2.0.0 - checksum: fdd1ab8b03af13778ecb94ef9a58b1e3528410cdfceb3d6bb7600508967d0d836b451bc7bc3baf66efb7c730d3d395eea4bb1b30352b0162823d9f0de976774b + checksum: 9ca68545a957a59f2bb18c834f1b7f72cdb1fc0d6b43233faa170e721c1f41da1bb0418b477b91332973c6bc2790a09bb07971fd8f0afe98b4cd111ea9fd7c8c languageName: node linkType: hard @@ -11336,8 +11200,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "hast-util-to-jsx-runtime@npm:^2.0.0": - version: 2.3.0 - resolution: "hast-util-to-jsx-runtime@npm:2.3.0" + version: 2.3.6 + resolution: "hast-util-to-jsx-runtime@npm:2.3.6" dependencies: "@types/estree": ^1.0.0 "@types/hast": ^3.0.0 @@ -11349,12 +11213,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: mdast-util-mdx-expression: ^2.0.0 mdast-util-mdx-jsx: ^3.0.0 mdast-util-mdxjs-esm: ^2.0.0 - property-information: ^6.0.0 + property-information: ^7.0.0 space-separated-tokens: ^2.0.0 - style-to-object: ^1.0.0 + style-to-js: ^1.0.0 unist-util-position: ^5.0.0 vfile-message: ^4.0.0 - checksum: 599a97c6ec61c1430776813d7fb42e6f96032bf4a04dfcbb8eceef3bc8d1845ecf242387a4426b9d3f52320dbbfa26450643b81124b3d6a0b9bbb0fff4d0ba83 + checksum: 78c25465cf010f1004b22f0bbb3bd47793f458ead3561c779ea2b9204ceb1adc9c048592b0a15025df0c683a12ebe16a8bef008c06d9c0369f51116f64b35a2d languageName: node linkType: hard @@ -11409,16 +11273,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"hastscript@npm:^8.0.0": - version: 8.0.0 - resolution: "hastscript@npm:8.0.0" +"hastscript@npm:^9.0.0": + version: 9.0.1 + resolution: "hastscript@npm:9.0.1" dependencies: "@types/hast": ^3.0.0 comma-separated-tokens: ^2.0.0 hast-util-parse-selector: ^4.0.0 - property-information: ^6.0.0 + property-information: ^7.0.0 space-separated-tokens: ^2.0.0 - checksum: ae3c20223e7b847320c0f98b6fb3c763ebe1bf3913c5805fbc176cf84553a9db1117ca34cf842a5235890b4b9ae0e94501bfdc9a9b870a5dbf5fc52426db1097 + checksum: 2bbb9a3c2dc43c9dec7f6599ef45e5eefb1c2a5f75d33d005dc432e92bf9d7cfb6c0d927f15a7592bb48601d2b582ea2e4b1131a716ac3f7b618a07d88f9a5d7 languageName: node linkType: hard @@ -11466,9 +11330,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "hotkeys-js@npm:^3.8.7": - version: 3.13.7 - resolution: "hotkeys-js@npm:3.13.7" - checksum: 8c1da52704c1c2a97810d0d2c9d0917b87a7edd250aae79cd4b185b9374b2ddc7ba24eeec8491018ba51726b72faecf89042fede2b3a05d0599f334355bb968c + version: 3.13.10 + resolution: "hotkeys-js@npm:3.13.10" + checksum: 552a6f88479f7690023eaf94e7cbbffea33255d438bb343023ee64bdf7781f4e3b5abb87a2d626f01537f8222770c92a22327cb15cbb85537343bcd9079ee3c9 languageName: node linkType: hard @@ -11502,13 +11366,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"html-entities@npm:^2.4.0": - version: 2.5.2 - resolution: "html-entities@npm:2.5.2" - checksum: b23f4a07d33d49ade1994069af4e13d31650e3fb62621e92ae10ecdf01d1a98065c78fd20fdc92b4c7881612210b37c275f2c9fba9777650ab0d6f2ceb3b99b6 - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0, html-escaper@npm:^2.0.2": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -11534,9 +11391,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "html-url-attributes@npm:^3.0.0": - version: 3.0.0 - resolution: "html-url-attributes@npm:3.0.0" - checksum: 9f499d33e6ddff6c2d2766fd73d2f22f3c370b4e485a92b0b2938303665b306dc7f36b2724c9466764e8f702351c01f342f5ec933be41a31c1fa40b72087b91d + version: 3.0.1 + resolution: "html-url-attributes@npm:3.0.1" + checksum: 1ecbf9cae0c438d2802386710177b7bbf7e30cc61327e9f125eb32fca7302cd1e3ab45c441859cb1e7646109be322fc1163592ad4dfde9b14d09416d101a6573 languageName: node linkType: hard @@ -11565,9 +11422,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 7a7246ddfce629f96832791176fd643589d954e6f3b49548dadb4290451961237fab8fcea41cd2008fe819d95b41c1e8b97f47d088afc0a1c81705287b4ddbcc languageName: node linkType: hard @@ -11604,9 +11461,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + version: 0.5.10 + resolution: "http-parser-js@npm:0.5.10" + checksum: 1038177c5f114860345ce7c19223d2cdd9a103265bd897bab13343c9eff4deef60f7956a674485f1234ffc9b19fb4b97f0c20a5848cfc9ccbf5d3c438d89ae89 languageName: node linkType: hard @@ -11631,9 +11488,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"http-proxy-middleware@npm:^2.0.3, http-proxy-middleware@npm:^2.0.6": - version: 2.0.6 - resolution: "http-proxy-middleware@npm:2.0.6" +"http-proxy-middleware@npm:^2.0.6, http-proxy-middleware@npm:^2.0.7": + version: 2.0.9 + resolution: "http-proxy-middleware@npm:2.0.9" dependencies: "@types/http-proxy": ^1.17.8 http-proxy: ^1.18.1 @@ -11645,7 +11502,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependenciesMeta: "@types/express": optional: true - checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a + checksum: 0ea88609b9c13fa03b89f8e6b85bd5c537027ec6990005dd81a7fbb3e73fcf8d6a6e3db2b57b1c6cddbcda80965704584dc6291d0e721b2700198c4e59ee0d0b languageName: node linkType: hard @@ -11689,12 +11546,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" dependencies: - agent-base: ^7.0.2 + agent-base: ^7.1.2 debug: 4 - checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 + checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d languageName: node linkType: hard @@ -11729,9 +11586,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "hyphenate-style-name@npm:^1.0.3": - version: 1.0.4 - resolution: "hyphenate-style-name@npm:1.0.4" - checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 + version: 1.1.0 + resolution: "hyphenate-style-name@npm:1.1.0" + checksum: b9ed74e29181d96bd58a2d0e62fc4a19879db591dba268275829ff0ae595fcdf11faafaeaa63330a45c3004664d7db1f0fc7cdb372af8ee4615ed8260302c207 languageName: node linkType: hard @@ -11776,10 +11633,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + languageName: node + linkType: hard + +"ignore@npm:^7.0.3": + version: 7.0.4 + resolution: "ignore@npm:7.0.4" + checksum: 09b4d69192355ac066f7d99c0fdb26f52035d2eaae423bfb5f7389091d75a93bf9c105e1fbf51f557098f6d446726f29a63cef3a7d26722dc696dd345224719b languageName: node linkType: hard @@ -11800,24 +11664,24 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 languageName: node linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.2.0 + resolution: "import-local@npm:3.2.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 languageName: node linkType: hard @@ -11873,24 +11737,23 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"inline-style-prefixer@npm:^7.0.0": - version: 7.0.0 - resolution: "inline-style-prefixer@npm:7.0.0" +"inline-style-prefixer@npm:^7.0.1": + version: 7.0.1 + resolution: "inline-style-prefixer@npm:7.0.1" dependencies: css-in-js-utils: ^3.1.0 - fast-loops: ^1.1.3 - checksum: 89fd73eb06e7392e24032ea33b8b33ae7f9a24298f2d9ebbf7b31a3a3934247270047f4f49a454a363aace14e25c3a20fd97465405b0399cc888e5a2bc04ec05 + checksum: 07a72573dfdac5e08fa18f5ce71d922861716955e230175ac415db227d9ed49443c764356cb407a92f4c85b30ebf39604165260b4dfbf3196b7736d7332c5c06 languageName: node linkType: hard -"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": - version: 1.0.7 - resolution: "internal-slot@npm:1.0.7" +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" dependencies: es-errors: ^1.3.0 - hasown: ^2.0.0 - side-channel: ^1.0.4 - checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb + hasown: ^2.0.2 + side-channel: ^1.1.0 + checksum: 8e0991c2d048cc08dab0a91f573c99f6a4215075887517ea4fa32203ce8aea60fa03f95b177977fa27eb502e5168366d0f3e02c762b799691411d49900611861 languageName: node linkType: hard @@ -11930,23 +11793,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "intl-messageformat@npm:^10.2.1": - version: 10.5.11 - resolution: "intl-messageformat@npm:10.5.11" - dependencies: - "@formatjs/ecma402-abstract": 1.18.2 - "@formatjs/fast-memoize": 2.2.0 - "@formatjs/icu-messageformat-parser": 2.7.6 - tslib: ^2.4.0 - checksum: b5574447a0d938170049042ec807344d57c72e9aabb2e72be0d5197baabeb763e05680b19b7607df93fadeec0e13c9bfcb450e9ba2fe7464b4f06600b612bf5e - languageName: node - linkType: hard - -"invariant@npm:^2.2.4": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" + version: 10.7.16 + resolution: "intl-messageformat@npm:10.7.16" dependencies: - loose-envify: ^1.0.0 - checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + "@formatjs/ecma402-abstract": 2.3.4 + "@formatjs/fast-memoize": 2.2.7 + "@formatjs/icu-messageformat-parser": 2.11.2 + tslib: ^2.8.0 + checksum: c7edee2001ca7e87fb1e66ba2d6c53c8f01e628eb7991c21562f6ac3ebc7c3d027bb73aae501a9f20c0dce3ee67dede4e970b0bdeb59d414b23e92e98d2dc3d5 languageName: node linkType: hard @@ -11999,22 +11853,23 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + call-bound: ^1.0.2 + has-tostringtag: ^1.0.2 + checksum: aae9307fedfe2e5be14aebd0f48a9eeedf6b8c8f5a0b66257b965146d1e94abdc3f08e3dce3b1d908e1fa23c70039a88810ee1d753905758b9b6eebbab0bafeb languageName: node linkType: hard -"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": - version: 3.0.4 - resolution: "is-array-buffer@npm:3.0.4" +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.1 - checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + call-bind: ^1.0.8 + call-bound: ^1.0.3 + get-intrinsic: ^1.2.6 + checksum: f137a2a6e77af682cdbffef1e633c140cf596f72321baf8bba0f4ef22685eb4339dde23dfe9e9ca430b5f961dee4d46577dcf12b792b68518c8449b134fb9156 languageName: node linkType: hard @@ -12026,20 +11881,24 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "is-async-function@npm:^2.0.0": - version: 2.0.0 - resolution: "is-async-function@npm:2.0.0" + version: 2.1.1 + resolution: "is-async-function@npm:2.1.1" dependencies: - has-tostringtag: ^1.0.0 - checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + async-function: ^1.0.0 + call-bound: ^1.0.3 + get-proto: ^1.0.1 + has-tostringtag: ^1.0.2 + safe-regex-test: ^1.1.0 + checksum: 9bece45133da26636488ca127d7686b85ad3ca18927e2850cff1937a650059e90be1c71a48623f8791646bb7a241b0cabf602a0b9252dcfa5ab273f2399000e6 languageName: node linkType: hard -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" dependencies: - has-bigints: ^1.0.1 - checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + has-bigints: ^1.0.2 + checksum: ee1544f0e664f253306786ed1dce494b8cf242ef415d6375d8545b4d8816b0f054bd9f948a8988ae2c6325d1c28260dd02978236b2f7b8fb70dfc4838a6c9fa7 languageName: node linkType: hard @@ -12052,13 +11911,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" +"is-boolean-object@npm:^1.2.1": + version: 1.2.2 + resolution: "is-boolean-object@npm:1.2.2" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + call-bound: ^1.0.3 + has-tostringtag: ^1.0.2 + checksum: 0415b181e8f1bfd5d3f8a20f8108e64d372a72131674eea9c2923f39d065b6ad08d654765553bdbffbd92c3746f1007986c34087db1bd89a31f71be8359ccdaa languageName: node linkType: hard @@ -12069,7 +11928,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-builtin-module@npm:^3.1.0, is-builtin-module@npm:^3.2.1": +"is-builtin-module@npm:^3.1.0": version: 3.2.1 resolution: "is-builtin-module@npm:3.2.1" dependencies: @@ -12078,37 +11937,40 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" dependencies: - hasown: ^2.0.0 - checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 languageName: node linkType: hard -"is-data-view@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-view@npm:1.0.1" +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" dependencies: + call-bound: ^1.0.2 + get-intrinsic: ^1.2.6 is-typed-array: ^1.1.13 - checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + checksum: 31600dd19932eae7fd304567e465709ffbfa17fa236427c9c864148e1b54eb2146357fcf3aed9b686dee13c217e1bb5a649cb3b9c479e1004c0648e9febde1b2 languageName: node linkType: hard -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" dependencies: - has-tostringtag: ^1.0.0 - checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + call-bound: ^1.0.2 + has-tostringtag: ^1.0.2 + checksum: d6c36ab9d20971d65f3fc64cef940d57a4900a2ac85fb488a46d164c2072a33da1cb51eefcc039e3e5c208acbce343d3480b84ab5ff0983f617512da2742562a languageName: node linkType: hard @@ -12144,12 +12006,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-finalizationregistry@npm:^1.0.2": - version: 1.0.2 - resolution: "is-finalizationregistry@npm:1.0.2" +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" dependencies: - call-bind: ^1.0.2 - checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d + call-bound: ^1.0.3 + checksum: 38c646c506e64ead41a36c182d91639833311970b6b6c6268634f109eef0a1a9d2f1f2e499ef4cb43c744a13443c4cdd2f0812d5afdcee5e9b65b72b28c48557 languageName: node linkType: hard @@ -12175,11 +12037,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" + version: 1.1.0 + resolution: "is-generator-function@npm:1.1.0" dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + call-bound: ^1.0.3 + get-proto: ^1.0.0 + has-tostringtag: ^1.0.2 + safe-regex-test: ^1.1.0 + checksum: f7f7276131bdf7e28169b86ac55a5b080012a597f9d85a0cbef6fe202a7133fa450a3b453e394870e3cb3685c5a764c64a9f12f614684b46969b1e6f297bed6b languageName: node linkType: hard @@ -12210,21 +12075,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-lite@npm:^0.8.2": - version: 0.8.2 - resolution: "is-lite@npm:0.8.2" - checksum: 0ee62cb238c2a044f58d1cd139fb0b48026c407ec8625ee6572b417f164e17ec937f0a0785f466e320749a796c316a3b78dcb4b520f7ddd4b9de38ad5a23d70f - languageName: node - linkType: hard - -"is-lite@npm:^1.2.0, is-lite@npm:^1.2.1": +"is-lite@npm:^1.2.1": version: 1.2.1 resolution: "is-lite@npm:1.2.1" checksum: 44ecdfce4a40714c97a59c3ee98dfd525c552cebdb253a5c409f6248ad4a62c050f5029a022d6153ddb415775c50655d070c670d8d70b084ebc598ca35c899c6 @@ -12255,13 +12106,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.3": - version: 2.0.3 - resolution: "is-negative-zero@npm:2.0.3" - checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd - languageName: node - linkType: hard - "is-network-error@npm:^1.0.0": version: 1.1.0 resolution: "is-network-error@npm:1.1.0" @@ -12269,12 +12113,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" dependencies: - has-tostringtag: ^1.0.0 - checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + call-bound: ^1.0.3 + has-tostringtag: ^1.0.2 + checksum: 6517f0a0e8c4b197a21afb45cd3053dc711e79d45d8878aa3565de38d0102b130ca8732485122c7b336e98c27dacd5236854e3e6526e0eb30cae64956535662f languageName: node linkType: hard @@ -12339,21 +12184,23 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "is-reference@npm:^3.0.0": - version: 3.0.2 - resolution: "is-reference@npm:3.0.2" + version: 3.0.3 + resolution: "is-reference@npm:3.0.3" dependencies: - "@types/estree": "*" - checksum: ac3bf5626fe9d0afbd7454760d73c47f16b9f471401b9749721ad3b66f0a39644390382acf88ca9d029c95782c1e2ec65662855e3ba91acf52d82231247a7fd3 + "@types/estree": ^1.0.6 + checksum: 11371fb2669a8144bffb2ae9bd11b0342b7dc384c3c0f8d5996566b071614282a3a0d306fd2fd1c6b4c9078d0e2703d191b47f4f78f9ce08f464c44a3a412412 languageName: node linkType: hard -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" +"is-regex@npm:^1.1.4, is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + call-bound: ^1.0.2 + gopd: ^1.2.0 + has-tostringtag: ^1.0.2 + hasown: ^2.0.2 + checksum: 99ee0b6d30ef1bb61fa4b22fae7056c6c9b3c693803c0c284ff7a8570f83075a7d38cda53b06b7996d441215c27895ea5d1af62124562e13d91b3dbec41a5e13 languageName: node linkType: hard @@ -12364,12 +12211,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "is-shared-array-buffer@npm:1.0.3" +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" dependencies: - call-bind: ^1.0.7 - checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + call-bound: ^1.0.3 + checksum: 1611fedc175796eebb88f4dfc393dd969a4a8e6c69cadaff424ee9d4464f9f026399a5f84a90f7c62d6d7ee04e3626a912149726de102b0bd6c1ee6a9868fa5a languageName: node linkType: hard @@ -12387,30 +12234,33 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" dependencies: - has-tostringtag: ^1.0.0 - checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + call-bound: ^1.0.3 + has-tostringtag: ^1.0.2 + checksum: 2eeaaff605250f5e836ea3500d33d1a5d3aa98d008641d9d42fb941e929ffd25972326c2ef912987e54c95b6f10416281aaf1b35cdf81992cfb7524c5de8e193 languageName: node linkType: hard -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" dependencies: - has-symbols: ^1.0.2 - checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + call-bound: ^1.0.2 + has-symbols: ^1.1.0 + safe-regex-test: ^1.1.0 + checksum: bfafacf037af6f3c9d68820b74be4ae8a736a658a3344072df9642a090016e281797ba8edbeb1c83425879aae55d1cb1f30b38bf132d703692b2570367358032 languageName: node linkType: hard -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": - version: 1.1.13 - resolution: "is-typed-array@npm:1.1.13" +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" dependencies: - which-typed-array: ^1.1.14 - checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + which-typed-array: ^1.1.16 + checksum: ea7cfc46c282f805d19a9ab2084fd4542fed99219ee9dbfbc26284728bd713a51eac66daa74eca00ae0a43b61322920ba334793607dc39907465913e921e0892 languageName: node linkType: hard @@ -12428,22 +12278,22 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": + version: 1.1.1 + resolution: "is-weakref@npm:1.1.1" dependencies: - call-bind: ^1.0.2 - checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + call-bound: ^1.0.3 + checksum: 1769b9aed5d435a3a989ffc18fc4ad1947d2acdaf530eb2bd6af844861b545047ea51102f75901f89043bed0267ed61d914ee21e6e8b9aa734ec201cdfc0726f languageName: node linkType: hard "is-weakset@npm:^2.0.3": - version: 2.0.3 - resolution: "is-weakset@npm:2.0.3" + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" dependencies: - call-bind: ^1.0.7 - get-intrinsic: ^1.2.4 - checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae + call-bound: ^1.0.3 + get-intrinsic: ^1.2.6 + checksum: 5c6c8415a06065d78bdd5e3a771483aa1cd928df19138aa73c4c51333226f203f22117b4325df55cc8b3085a6716870a320c2d757efee92d7a7091a039082041 languageName: node linkType: hard @@ -12570,15 +12420,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.2 - resolution: "istanbul-lib-instrument@npm:6.0.2" + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" dependencies: "@babel/core": ^7.23.9 "@babel/parser": ^7.23.9 "@istanbuljs/schema": ^0.1.3 istanbul-lib-coverage: ^3.2.0 semver: ^7.5.4 - checksum: c10aa1e93a022f9767d7f41e6c07d244cc0a5c090fbb5522d70a5f21fcb98c52b7038850276c6fd1a7a17d1868c14a9d4eb8a24efe58a0ebb9a06f3da68131fe + checksum: 74104c60c65c4fa0e97cc76f039226c356123893929f067bfad5f86fe839e08f5d680354a68fead3bc9c1e2f3fa6f3f53cded70778e821d911e851d349f3545a languageName: node linkType: hard @@ -12614,35 +12464,36 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.2": - version: 1.1.2 - resolution: "iterator.prototype@npm:1.1.2" +"iterator.prototype@npm:^1.1.4": + version: 1.1.5 + resolution: "iterator.prototype@npm:1.1.5" dependencies: - define-properties: ^1.2.1 - get-intrinsic: ^1.2.1 - has-symbols: ^1.0.3 - reflect.getprototypeof: ^1.0.4 - set-function-name: ^2.0.1 - checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + define-data-property: ^1.1.4 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.6 + get-proto: ^1.0.0 + has-symbols: ^1.1.0 + set-function-name: ^2.0.2 + checksum: 7db23c42629ba4790e6e15f78b555f41dbd08818c85af306988364bd19d86716a1187cb333444f3a0036bfc078a0e9cb7ec67fef3a61662736d16410d7f77869 languageName: node linkType: hard -"jackspeak@npm:^2.3.6": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 languageName: node linkType: hard "jake@npm:^10.8.5": - version: 10.8.7 - resolution: "jake@npm:10.8.7" + version: 10.9.2 + resolution: "jake@npm:10.9.2" dependencies: async: ^3.2.3 chalk: ^4.0.2 @@ -12650,7 +12501,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: minimatch: ^3.1.2 bin: jake: bin/cli.js - checksum: a23fd2273fb13f0d0d845502d02c791fd55ef5c6a2d207df72f72d8e1eac6d2b8ffa6caf660bc8006b3242e0daaa88a3ecc600194d72b5c6016ad56e9cd43553 + checksum: f2dc4a086b4f58446d02cb9be913c39710d9ea570218d7681bb861f7eeaecab7b458256c946aeaa7e548c5e0686cc293e6435501e4047174a3b6a504dcbfcaae languageName: node linkType: hard @@ -13165,13 +13016,20 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"js-cookie@npm:^2.2.1, js-cookie@npm:^2.x.x": +"js-cookie@npm:^2.2.1": version: 2.2.1 resolution: "js-cookie@npm:2.2.1" checksum: 9b1fb980a1c5e624fd4b28ea4867bb30c71e04c4484bb3a42766344c533faa684de9498e443425479ec68609e96e27b60614bfe354877c449c631529b6d932f2 languageName: node linkType: hard +"js-cookie@npm:^3.0.5": + version: 3.0.5 + resolution: "js-cookie@npm:3.0.5" + checksum: 2dbd2809c6180fbcf060c6957cb82dbb47edae0ead6bd71cbeedf448aa6b6923115003b995f7d3e3077bfe2cb76295ea6b584eb7196cca8ba0a09f389f64967a + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -13294,21 +13152,21 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" bin: jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f languageName: node linkType: hard -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" bin: jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c languageName: node linkType: hard @@ -13455,13 +13313,20 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "katex@npm:^0.16.9": - version: 0.16.10 - resolution: "katex@npm:0.16.10" + version: 0.16.22 + resolution: "katex@npm:0.16.22" dependencies: commander: ^8.3.0 bin: katex: cli.js - checksum: 108e9d810e17840c43eef8d46171096f4cc97852bfd1e2dd1890d9b3435846816e3e98678a31d38bd064eb97eea83b18ff224cb65d5f9511b54ce7ff4359b591 + checksum: 66a609b6f3e1a3e8634a03228dcd31cb88b7f39d057cfe5271417bc8eb64b85f256accdbd68f453b5714e4e9546192bad554f75c8b9adb91d6b0a7a93505376b + languageName: node + linkType: hard + +"kdbush@npm:^4.0.2": + version: 4.0.2 + resolution: "kdbush@npm:4.0.2" + checksum: 6782ef2cdaec9322376b9955a16b0163beda0cefa2f87da76e8970ade2572d8b63bec915347aaeac609484b0c6e84d7b591f229ef353b68b460238095bacde2d languageName: node linkType: hard @@ -13503,9 +13368,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "language-subtag-registry@npm:^0.3.20": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + version: 0.3.23 + resolution: "language-subtag-registry@npm:0.3.23" + checksum: 0b64c1a6c5431c8df648a6d25594ff280613c886f4a1a542d9b864e5472fb93e5c7856b9c41595c38fac31370328fc79fcc521712e89ea6d6866cbb8e0995d81 languageName: node linkType: hard @@ -13519,12 +13384,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "launch-editor@npm:^2.6.1": - version: 2.6.1 - resolution: "launch-editor@npm:2.6.1" + version: 2.10.0 + resolution: "launch-editor@npm:2.10.0" dependencies: picocolors: ^1.0.0 shell-quote: ^1.8.1 - checksum: e06d193075ac09f7f8109f10cabe464a211bf7ed4cbe75f83348d6f67bf4d9f162f06e7a1ab3e1cd7fc250b5342c3b57080618aff2e646dc34248fe499227601 + checksum: 0cd219f98a8be1cedc73119c1a18ff232eb1386dcc0f4e710b21234e62bf55513342a3e0939cd67c3d920fc7d714457876bc782a5b17e03f59acbbafd23c5f50 languageName: node linkType: hard @@ -13536,8 +13401,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "less-loader@npm:^12.2.0": - version: 12.2.0 - resolution: "less-loader@npm:12.2.0" + version: 12.3.0 + resolution: "less-loader@npm:12.3.0" peerDependencies: "@rspack/core": 0.x || 1.x less: ^3.5.0 || ^4.0.0 @@ -13547,13 +13412,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true webpack: optional: true - checksum: df08dba1d733d6b4202ce185e8fe4897c407a20aeba01dc214f514352ab5aadcd53fc76366b9e473f9ec920bb612d839b39c686303d2ce2155edf61a7be69b7b + checksum: 9a291f37a4514349ce4a187ddffd77bfd7d4f97077f71aa6dbfc81393a0cd3c00ab793c13f40a4d3acdbad423db9d2e75054ede4fb1900ba0e49882c9405a4f7 languageName: node linkType: hard "less@npm:^4.1.3": - version: 4.2.0 - resolution: "less@npm:4.2.0" + version: 4.3.0 + resolution: "less@npm:4.3.0" dependencies: copy-anything: ^2.0.1 errno: ^0.1.1 @@ -13582,7 +13447,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: lessc: bin/lessc - checksum: 2ec4fa41e35e5c0331c1ee64419aa5c2cbb9a17b9e9d1deb524ec45843f59d9c4612dffc164ca16126911fbe9913e4ff811a13f33805f71e546f6d022ece93b6 + checksum: a071ec82fd6b79bc57e9d529542d205824d71a4c1914553c80b237390785938d83df2e7be774aeb07e08157afd57837d67704f917db203de5bf8411255be5bdd languageName: node linkType: hard @@ -13828,6 +13693,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 + languageName: node + linkType: hard + "lodash.curry@npm:^4.0.1": version: 4.1.1 resolution: "lodash.curry@npm:4.1.1" @@ -13849,6 +13721,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -13905,9 +13784,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "loglevel@npm:^1.8.0": - version: 1.9.1 - resolution: "loglevel@npm:1.9.1" - checksum: e1c8586108c4d566122e91f8a79c8df728920e3a714875affa5120566761a24077ec8ec9e5fc388b022e39fc411ec6e090cde1b5775871241b045139771eeb06 + version: 1.9.2 + resolution: "loglevel@npm:1.9.2" + checksum: 896c67b90a507bfcfc1e9a4daa7bf789a441dd70d95cd13b998d6dd46233a3bfadfb8fadb07250432bbfb53bf61e95f2520f9b11f9d3175cc460e5c251eca0af languageName: node linkType: hard @@ -13929,10 +13808,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"lottie-web@npm:^5.10.2": - version: 5.12.2 - resolution: "lottie-web@npm:5.12.2" - checksum: af5bc3bc405fd760de8b17a36158d5a8c3e8c586c711d0c63681ddf056b65bc6b54ea36b1fcad782fb02dbe12e696a40e0ba72daf41b8f10ab5b5d1113793636 +"lottie-web@npm:^5.12.2": + version: 5.13.0 + resolution: "lottie-web@npm:5.13.0" + checksum: f634eddbfc49a243af598c8c3b5b2bc347c6980cb85ef3e17a394aa52e2d4d1d04ef565d9cf1581727eec598717932abf5e0e0aba111b4d64f2a9dadaeaa98e2 languageName: node linkType: hard @@ -13998,8 +13877,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: "@fullcalendar/resource-timeline": ^6.1.11 "@fullcalendar/timegrid": ^6.1.6 "@fullcalendar/timeline": ^6.1.6 - "@types/react": ^18.2.45 - "@types/react-dom": ^18.2.18 + "@types/react": 18 + "@types/react-dom": 18 agora-rtc-sdk-ng: ^4.20.2 agora-rtm-sdk: ^1.5.1 big.js: ^6.2.1 @@ -14010,8 +13889,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: lowcoder-cli: "workspace:^" lowcoder-sdk: "workspace:^" mermaid: ^10.6.1 - react: ^18.2.0 - react-dom: ^18.2.0 + react: 18.3.0 + react-dom: 18.3.0 typescript: 4.8.4 vite: ^4.5.5 vite-tsconfig-paths: ^3.6.0 @@ -14121,6 +14000,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: number-precision: ^1.6.0 prettier: ^3.1.0 react-countup: ^6.5.3 + react-github-btn: ^1.4.0 react-player: ^2.11.0 resize-observer-polyfill: ^1.5.1 rimraf: ^3.0.2 @@ -14232,27 +14112,30 @@ coolshapes-react@lowcoder-org/coolshapes-react: "@fortawesome/free-regular-svg-icons": ^6.5.1 "@fortawesome/free-solid-svg-icons": ^6.5.1 "@fortawesome/react-fontawesome": latest + "@jsonforms/core": ^3.5.1 + "@lottiefiles/dotlottie-react": ^0.13.0 "@manaflair/redux-batch": ^1.0.0 - "@rjsf/antd": ^5.21.2 - "@rjsf/core": ^5.21.2 - "@rjsf/utils": ^5.21.2 - "@rjsf/validator-ajv8": ^5.21.2 + "@rjsf/antd": ^5.24.9 + "@rjsf/core": ^5.24.9 + "@rjsf/utils": ^5.24.9 + "@rjsf/validator-ajv8": ^5.24.9 "@types/core-js": ^2.5.5 "@types/intl": ^1.2.1 "@types/lodash": ^4.14.194 "@types/node": ^16.7.13 "@types/papaparse": ^5.3.5 - "@types/react": ^18.2.45 - "@types/react-dom": ^18.2.18 + "@types/react": 18 + "@types/react-dom": 18 "@types/react-signature-canvas": ^1.0.2 "@types/react-test-renderer": ^18.0.0 "@types/react-virtualized": ^9.21.21 "@types/regenerator-runtime": ^0.13.1 + "@types/supercluster": ^7.1.3 "@types/uuid": ^8.3.4 "@vitejs/plugin-react": ^2.2.0 - alasql: ^4.6.2 + alasql: ^4.6.6 animate.css: ^4.1.1 - antd: ^5.23.4 + antd: ^5.25.2 axios: ^1.7.7 buffer: ^6.0.3 clsx: ^2.0.0 @@ -14260,8 +14143,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: coolshapes-react: lowcoder-org/coolshapes-react copy-to-clipboard: ^3.3.3 core-js: ^3.25.2 + dayjs: ^1.11.13 dotenv: ^16.0.3 echarts: ^5.4.3 + echarts-for-react: ^3.0.2 echarts-wordcloud: ^2.1.0 eslint: ^8.0.0 eslint-config-react-app: ^7.0.1 @@ -14281,30 +14166,30 @@ coolshapes-react@lowcoder-org/coolshapes-react: moment: ^2.29.4 numbro: ^2.3.6 papaparse: ^5.3.2 + pigeon-maps: ^0.22.1 qrcode.react: ^3.1.0 rc-trigger: ^5.3.1 - react: ^18.2.0 + react: 18.3.0 react-best-gradient-color-picker: ^3.0.10 react-colorful: ^5.5.1 react-device-mockup: ^1.0.0 react-documents: ^1.2.1 - react-dom: ^18.2.0 - react-draggable: ^4.4.4 + react-dom: 18.3.0 + react-draggable: ^4.4.6 react-error-boundary: ^4.0.13 react-grid-layout: ^1.3.0 react-helmet: ^6.1.0 - react-joyride: ^2.4.0 + react-joyride: next react-json-view: ^1.21.3 react-markdown: ^9.0.1 react-qr-barcode-scanner: ^1.0.6 - react-quill: ^2.0.0 + react-quill-new: ^3.4.6 react-redux: ^7.2.6 react-resizable: ^3.0.4 - react-resize-detector: ^7.0.0 + react-resize-detector: ^12.0.2 react-router: ^5.2.1 react-router-dom: ^5.3.0 react-signature-canvas: ^1.0.6 - react-sortable-hoc: ^2.0.0 react-test-renderer: ^18.1.0 react-use: ^17.3.2 react-webcam: ^7.2.0 @@ -14322,6 +14207,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: sql-formatter: ^8.2.0 styled-components: ^6.1.8 stylis: ^4.1.1 + supercluster: ^8.0.1 tern: ^0.24.3 typescript: ^4.8.4 typescript-collections: ^1.3.3 @@ -14349,9 +14235,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.2.1 - resolution: "lru-cache@npm:10.2.1" - checksum: ae81586eaeb92389fc9a05790d7efd424a29334daa4e513196d6e138a069d0afad1738cfa67773f05b9cb8666fb076f8af88a1b5cc4c7e569202f18a0c032a35 + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a languageName: node linkType: hard @@ -14364,15 +14250,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - "lru-cache@npm:^7.14.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" @@ -14432,12 +14309,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"magic-string@npm:^0.30.1, magic-string@npm:^0.30.2, magic-string@npm:^0.30.3": - version: 0.30.10 - resolution: "magic-string@npm:0.30.10" +"magic-string@npm:^0.30.11, magic-string@npm:^0.30.2, magic-string@npm:^0.30.3": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" dependencies: - "@jridgewell/sourcemap-codec": ^1.4.15 - checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399 + "@jridgewell/sourcemap-codec": ^1.5.0 + checksum: f4b4ed17c5ada64f77fc98491847302ebad64894a905c417c943840c0384662118c9b37f9f68bb86add159fa4749ff6f118c4627d69a470121b46731f8debc6d languageName: node linkType: hard @@ -14476,22 +14353,22 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" dependencies: - "@npmcli/agent": ^2.0.0 - cacache: ^18.0.0 + "@npmcli/agent": ^3.0.0 + cacache: ^19.0.1 http-cache-semantics: ^4.1.1 - is-lambda: ^1.0.1 minipass: ^7.0.2 - minipass-fetch: ^3.0.0 + minipass-fetch: ^4.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 + negotiator: ^1.0.0 + proc-log: ^5.0.0 promise-retry: ^2.0.1 - ssri: ^10.0.0 - checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af + ssri: ^12.0.0 + checksum: 6fb2fee6da3d98f1953b03d315826b5c5a4ea1f908481afc113782d8027e19f080c85ae998454de4e5f27a681d3ec58d57278f0868d4e0b736f51d396b661691 languageName: node linkType: hard @@ -14505,18 +14382,25 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "markdown-table@npm:^3.0.0": - version: 3.0.3 - resolution: "markdown-table@npm:3.0.3" - checksum: 8fcd3d9018311120fbb97115987f8b1665a603f3134c93fbecc5d1463380c8036f789e2a62c19432058829e594fff8db9ff81c88f83690b2f8ed6c074f8d9e10 + version: 3.0.4 + resolution: "markdown-table@npm:3.0.4" + checksum: bc24b177cbb3ef170cb38c9f191476aa63f7236ebc8980317c5e91b5bf98c8fb471cf46d8920478c5e770d7f4337326f6b5b3efbf0687c2044fd332d7a64dfcb languageName: node linkType: hard "markdown-to-jsx@npm:^7.4.1": - version: 7.4.7 - resolution: "markdown-to-jsx@npm:7.4.7" + version: 7.7.6 + resolution: "markdown-to-jsx@npm:7.7.6" peerDependencies: react: ">= 0.14.0" - checksum: bb8a696c8a95dd67ac1eb44255f31cf17e60b6c2ff03bfcd51b5e28da17856c57d7a16da59fda7f3a4eedb01d7e92eeef57a10ff3abd5431e5c80059d4565016 + checksum: 326fee0bd03686b640632c36a5250d2f3b9fba6d8cdf6719bc6c0b27cc27a1bed86ae3d940dacc52d7be28e02238ad458aa0b5fdb1331463a23037975a672202 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 languageName: node linkType: hard @@ -14532,14 +14416,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mdast-util-find-and-replace@npm:^3.0.0": - version: 3.0.1 - resolution: "mdast-util-find-and-replace@npm:3.0.1" + version: 3.0.2 + resolution: "mdast-util-find-and-replace@npm:3.0.2" dependencies: "@types/mdast": ^4.0.0 escape-string-regexp: ^5.0.0 unist-util-is: ^6.0.0 unist-util-visit-parents: ^6.0.0 - checksum: 05d5c4ff02e31db2f8a685a13bcb6c3f44e040bd9dfa54c19a232af8de5268334c8755d79cb456ed4cced1300c4fb83e88444c7ae8ee9ff16869a580f29d08cd + checksum: 00dde8aaf87d065034b911bdae20d17c107f5103c6ba5a3d117598c847ce005c6b03114b5603e0d07cc61fefcbb05bdb9f66100efeaa0278dbd80eda1087595f languageName: node linkType: hard @@ -14564,8 +14448,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mdast-util-from-markdown@npm:^2.0.0": - version: 2.0.1 - resolution: "mdast-util-from-markdown@npm:2.0.1" + version: 2.0.2 + resolution: "mdast-util-from-markdown@npm:2.0.2" dependencies: "@types/mdast": ^4.0.0 "@types/unist": ^3.0.0 @@ -14579,7 +14463,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 unist-util-stringify-position: ^4.0.0 - checksum: 2e50be71272a1503558c599cd5766cf2743935a021f82e32bc2ae5da44f6c7dcabb9da3a6eee76ede0ec8ad2b122d1192f4fe89890aac90c76463f049f8a835d + checksum: 1ad19f48b30ac6e0cb756070c210c78ad93c26876edfb3f75127783bc6df8b9402016d8f3e9964f3d1d5430503138ec65c145e869438727e1aa7f3cebf228fba languageName: node linkType: hard @@ -14597,15 +14481,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mdast-util-gfm-footnote@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm-footnote@npm:2.0.0" + version: 2.1.0 + resolution: "mdast-util-gfm-footnote@npm:2.1.0" dependencies: "@types/mdast": ^4.0.0 devlop: ^1.1.0 mdast-util-from-markdown: ^2.0.0 mdast-util-to-markdown: ^2.0.0 micromark-util-normalize-identifier: ^2.0.0 - checksum: 45d26b40e7a093712e023105791129d76e164e2168d5268e113298a22de30c018162683fb7893cdc04ab246dac0087eed708b2a136d1d18ed2b32b3e0cae4a79 + checksum: a23c5531d63b254b46cbcb063b5731f56ccc9d1f038a17fa66d3994255868604a2b963f24e0f5b16dd3374743622afafcfe0c98cf90548d485bdc426ba77c618 languageName: node linkType: hard @@ -14646,8 +14530,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mdast-util-gfm@npm:^3.0.0": - version: 3.0.0 - resolution: "mdast-util-gfm@npm:3.0.0" + version: 3.1.0 + resolution: "mdast-util-gfm@npm:3.1.0" dependencies: mdast-util-from-markdown: ^2.0.0 mdast-util-gfm-autolink-literal: ^2.0.0 @@ -14656,7 +14540,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: mdast-util-gfm-table: ^2.0.0 mdast-util-gfm-task-list-item: ^2.0.0 mdast-util-to-markdown: ^2.0.0 - checksum: 62039d2f682ae3821ea1c999454863d31faf94d67eb9b746589c7e136076d7fb35fabc67e02f025c7c26fd7919331a0ee1aabfae24f565d9a6a9ebab3371c626 + checksum: ecdadc0b46608d03eea53366cfee8c9441ddacc49fe4e12934eff8fea06f9377d2679d9d9e43177295c09c8d7def5f48d739f99b0f6144a0e228a77f5a1c76bc languageName: node linkType: hard @@ -14675,8 +14559,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mdast-util-mdx-jsx@npm:^3.0.0": - version: 3.1.3 - resolution: "mdast-util-mdx-jsx@npm:3.1.3" + version: 3.2.0 + resolution: "mdast-util-mdx-jsx@npm:3.2.0" dependencies: "@types/estree-jsx": ^1.0.0 "@types/hast": ^3.0.0 @@ -14690,7 +14574,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: stringify-entities: ^4.0.0 unist-util-stringify-position: ^4.0.0 vfile-message: ^4.0.0 - checksum: 638644420090163fc08d01150e10550a21e914b85dd3a37178d3b949173c5aee2d7fee536f864ac25800e0cebde8357a5808427ffb7e9975a669e4382ae479ab + checksum: 224f5f6ad247f0f2622ee36c82ac7a4c6a60c31850de4056bf95f531bd2f7ec8943ef34dfe8a8375851f65c07e4913c4f33045d703df4ff4d11b2de5a088f7f9 languageName: node linkType: hard @@ -14736,18 +14620,19 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mdast-util-to-markdown@npm:^2.0.0": - version: 2.1.0 - resolution: "mdast-util-to-markdown@npm:2.1.0" + version: 2.1.2 + resolution: "mdast-util-to-markdown@npm:2.1.2" dependencies: "@types/mdast": ^4.0.0 "@types/unist": ^3.0.0 longest-streak: ^3.0.0 mdast-util-phrasing: ^4.0.0 mdast-util-to-string: ^4.0.0 + micromark-util-classify-character: ^2.0.0 micromark-util-decode-string: ^2.0.0 unist-util-visit: ^5.0.0 zwitch: ^2.0.0 - checksum: 3a2cf3957e23b34e2e092e6e76ae72ee0b8745955bd811baba6814cf3a3d916c3fd52264b4b58f3bb3d512a428f84a1e998b6fc7e28434e388a9ae8fb6a9c173 + checksum: 288d152bd50c00632e6e01c610bb904a220d1e226c8086c40627877959746f83ab0b872f4150cb7d910198953b1bf756e384ac3fee3e7b0ddb4517f9084c5803 languageName: node linkType: hard @@ -14798,14 +14683,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "memfs@npm:^4.6.0": - version: 4.9.1 - resolution: "memfs@npm:4.9.1" + version: 4.17.2 + resolution: "memfs@npm:4.17.2" dependencies: - "@jsonjoy.com/json-pack": ^1.0.2 - "@jsonjoy.com/util": ^1.1.0 - sonic-forest: ^1.0.0 + "@jsonjoy.com/json-pack": ^1.0.3 + "@jsonjoy.com/util": ^1.3.0 + tree-dump: ^1.0.1 tslib: ^2.0.0 - checksum: 94946f40f62611fd15a268f46f317e4f556d9507d38062e6fdca9b4147964e5e1e7cc471936f8aaca1c3bee6368f1c4e2492c88ac08df099e634df5eaef0e8c1 + checksum: d27b02a24baaa95f469c76fb83a5dab2cc0d2cc00f60fe9173a1281d09da73a43c6d62f9e9fbef4c627d10f578806f26097e827b461305a20c01fc34aceac64b languageName: node linkType: hard @@ -14826,10 +14711,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 languageName: node linkType: hard @@ -14848,8 +14733,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mermaid@npm:^10.6.1": - version: 10.9.0 - resolution: "mermaid@npm:10.9.0" + version: 10.9.3 + resolution: "mermaid@npm:10.9.3" dependencies: "@braintree/sanitize-url": ^6.0.1 "@types/d3-scale": ^4.0.3 @@ -14860,7 +14745,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: d3-sankey: ^0.12.3 dagre-d3-es: 7.0.10 dayjs: ^1.11.7 - dompurify: ^3.0.5 + dompurify: ^3.0.5 <3.1.7 elkjs: ^0.9.0 katex: ^0.16.9 khroma: ^2.0.0 @@ -14871,7 +14756,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: ts-dedent: ^2.2.0 uuid: ^9.0.0 web-worker: ^1.2.0 - checksum: 73ee57b365fbfba8ad72b2ce611a2703753dc155884db3bec4a47951326b9061b31926f84fc0ad67ca203067b62db636f1543fa6f633a6afa24cd4c754b96cf0 + checksum: 65468f6c7628d8c5ad640b3657e70d3408464d4b49e83c159ddc478ae733cb8f4ca545e16939cc8604e5f8902fb1d8bc1be0e00fa98a8bdf221d222e58d3342a languageName: node linkType: hard @@ -14907,8 +14792,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-core-commonmark@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-core-commonmark@npm:2.0.1" + version: 2.0.3 + resolution: "micromark-core-commonmark@npm:2.0.3" dependencies: decode-named-character-reference: ^1.0.0 devlop: ^1.0.0 @@ -14926,7 +14811,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: micromark-util-subtokenize: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 6a9891cc883a531e090dc8dab6669945f3df9448e84216a8f2a91f9258281e6abea5ae3940fde2bd77a57dc3e0d67f2add6762aed63a378f37b09eaf7e7426c4 + checksum: cfb0fd9c895f86a4e9344f7f0344fe6bd1018945798222835248146a42430b8c7bc0b2857af574cf4e1b4ce4e5c1a35a1479942421492e37baddde8de85814dc languageName: node linkType: hard @@ -14973,15 +14858,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-extension-gfm-table@npm:^2.0.0": - version: 2.1.0 - resolution: "micromark-extension-gfm-table@npm:2.1.0" + version: 2.1.1 + resolution: "micromark-extension-gfm-table@npm:2.1.1" dependencies: devlop: ^1.0.0 micromark-factory-space: ^2.0.0 micromark-util-character: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 249d695f5f8bd222a0d8a774ec78ea2a2d624cb50a4d008092a54aa87dad1f9d540e151d29696cf849eb1cee380113c4df722aebb3b425a214832a2de5dea1d7 + checksum: 16a59c8c2381c8418d9cf36c605abb0b66cfebaad07e09c4c9b113298d13e0c517b652885529fcb74d149afec3f6e8ab065fd27a900073d5ec0a1d8f0c51b593 languageName: node linkType: hard @@ -15035,13 +14920,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-factory-destination@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-destination@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-factory-destination@npm:2.0.1" dependencies: micromark-util-character: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: d36e65ed1c072ff4148b016783148ba7c68a078991154625723e24bda3945160268fb91079fb28618e1613c2b6e70390a8ddc544c45410288aa27b413593071a + checksum: 9c4baa9ca2ed43c061bbf40ddd3d85154c2a0f1f485de9dea41d7dd2ad994ebb02034a003b2c1dbe228ba83a0576d591f0e90e0bf978713f84ee7d7f3aa98320 languageName: node linkType: hard @@ -15058,14 +14943,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-factory-label@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-label@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-factory-label@npm:2.0.1" dependencies: devlop: ^1.0.0 micromark-util-character: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: c021dbd0ed367610d35f2bae21209bc804d1a6d1286ffce458fd6a717f4d7fe581a7cba7d5c2d7a63757c44eb927c80d6a571d6ea7969fae1b48ab6461d109c4 + checksum: bd03f5a75f27cdbf03b894ddc5c4480fc0763061fecf9eb927d6429233c930394f223969a99472df142d570c831236134de3dc23245d23d9f046f9d0b623b5c2 languageName: node linkType: hard @@ -15080,12 +14965,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-factory-space@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-space@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-factory-space@npm:2.0.1" dependencies: micromark-util-character: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 4ffdcdc2f759887bbb356500cb460b3915ecddcb5d85c3618d7df68ad05d13ed02b1153ee1845677b7d8126df8f388288b84fcf0d943bd9c92bcc71cd7222e37 + checksum: 1bd68a017c1a66f4787506660c1e1c5019169aac3b1cb075d49ac5e360e0b2065e984d4e1d6e9e52a9d44000f2fa1c98e66a743d7aae78b4b05616bf3242ed71 languageName: node linkType: hard @@ -15102,14 +14987,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-factory-title@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-title@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-factory-title@npm:2.0.1" dependencies: micromark-factory-space: ^2.0.0 micromark-util-character: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 39e1ac23af3554e6e652e56065579bc7faf21ade7b8704b29c175871b4152b7109b790bb3cae0f7e088381139c6bac9553b8400772c3d322e4fa635f813a3578 + checksum: b4d2e4850a8ba0dff25ce54e55a3eb0d43dda88a16293f53953153288f9d84bcdfa8ca4606b2cfbb4f132ea79587bbb478a73092a349f893f5264fbcdbce2ee1 languageName: node linkType: hard @@ -15126,14 +15011,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-factory-whitespace@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-factory-whitespace@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-factory-whitespace@npm:2.0.1" dependencies: micromark-factory-space: ^2.0.0 micromark-util-character: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 9587c2546d1a58b4d5472b42adf05463f6212d0449455285662d63cd8eaed89c6b159ac82713fcee5f9dd88628c24307d9533cccd8971a2f3f4d48702f8f850a + checksum: 67b3944d012a42fee9e10e99178254a04d48af762b54c10a50fcab988688799993efb038daf9f5dbc04001a97b9c1b673fc6f00e6a56997877ab25449f0c8650 languageName: node linkType: hard @@ -15148,12 +15033,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-character@npm:^2.0.0": - version: 2.1.0 - resolution: "micromark-util-character@npm:2.1.0" + version: 2.1.1 + resolution: "micromark-util-character@npm:2.1.1" dependencies: micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 36ee910f84077cf16626fa618cfe46ac25956b3242e3166b8e8e98c5a8c524af7e5bf3d70822264b1fd2d297a36104a7eb7e3462c19c28353eaca7b0d8717594 + checksum: e9e409efe4f2596acd44587e8591b722bfc041c1577e8fe0d9c007a4776fb800f9b3637a22862ad2ba9489f4bdf72bb547fce5767dbbfe0a5e6760e2a21c6495 languageName: node linkType: hard @@ -15167,11 +15052,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-chunked@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-chunked@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-chunked@npm:2.0.1" dependencies: micromark-util-symbol: ^2.0.0 - checksum: 324f95cccdae061332a8241936eaba6ef0782a1e355bac5c607ad2564fd3744929be7dc81651315a2921535747a33243e6a5606bcb64b7a56d49b6d74ea1a3d4 + checksum: f8cb2a67bcefe4bd2846d838c97b777101f0043b9f1de4f69baf3e26bb1f9885948444e3c3aec66db7595cad8173bd4567a000eb933576c233d54631f6323fe4 languageName: node linkType: hard @@ -15187,13 +15072,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-classify-character@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-classify-character@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-classify-character@npm:2.0.1" dependencies: micromark-util-character: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 086e52904deffebb793fb1c08c94aabb8901f76958142dfc3a6282890ebaa983b285e69bd602b9d507f1b758ed38e75a994d2ad9fbbefa7de2584f67a16af405 + checksum: 4d8bbe3a6dbf69ac0fc43516866b5bab019fe3f4568edc525d4feaaaf78423fa54e6b6732b5bccbeed924455279a3758ffc9556954aafb903982598a95a02704 languageName: node linkType: hard @@ -15208,12 +15093,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-combine-extensions@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-combine-extensions@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-combine-extensions@npm:2.0.1" dependencies: micromark-util-chunked: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 107c47700343f365b4ed81551e18bc3458b573c500e56ac052b2490bd548adc475216e41d2271633a8867fac66fc22ba3e0a2d74a31ed79b9870ca947eb4e3ba + checksum: 5d22fb9ee37e8143adfe128a72b50fa09568c2cc553b3c76160486c96dbbb298c5802a177a10a215144a604b381796071b5d35be1f2c2b2ee17995eda92f0c8e languageName: node linkType: hard @@ -15227,11 +15112,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-decode-numeric-character-reference@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.1" + version: 2.0.2 + resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.2" dependencies: micromark-util-symbol: ^2.0.0 - checksum: 9512507722efd2033a9f08715eeef787fbfe27e23edf55db21423d46d82ab46f76c89b4f960be3f5e50a2d388d89658afc0647989cf256d051e9ea01277a1adb + checksum: ee11c8bde51e250e302050474c4a2adca094bca05c69f6cdd241af12df285c48c88d19ee6e022b9728281c280be16328904adca994605680c43af56019f4b0b6 languageName: node linkType: hard @@ -15248,14 +15133,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-decode-string@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-decode-string@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-decode-string@npm:2.0.1" dependencies: decode-named-character-reference: ^1.0.0 micromark-util-character: ^2.0.0 micromark-util-decode-numeric-character-reference: ^2.0.0 micromark-util-symbol: ^2.0.0 - checksum: a75daf32a4a6b549e9f19b4d833ebfeb09a32a9a1f9ce50f35dec6b6a3e4f9f121f49024ba7f9c91c55ebe792f7c7a332fc9604795181b6a612637df0df5b959 + checksum: e9546ae53f9b5a4f9aa6aaf3e750087100d3429485ca80dbacec99ff2bb15a406fa7d93784a0fc2fe05ad7296b9295e75160ef71faec9e90110b7be2ae66241a languageName: node linkType: hard @@ -15267,9 +15152,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-encode@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-encode@npm:2.0.0" - checksum: 853a3f33fce72aaf4ffa60b7f2b6fcfca40b270b3466e1b96561b02185d2bd8c01dd7948bc31a24ac014f4cc854e545ca9a8e9cf7ea46262f9d24c9e88551c66 + version: 2.0.1 + resolution: "micromark-util-encode@npm:2.0.1" + checksum: be890b98e78dd0cdd953a313f4148c4692cc2fb05533e56fef5f421287d3c08feee38ca679f318e740530791fc251bfe8c80efa926fcceb4419b269c9343d226 languageName: node linkType: hard @@ -15281,9 +15166,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-html-tag-name@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-html-tag-name@npm:2.0.0" - checksum: d786d4486f93eb0ac5b628779809ca97c5dc60f3c9fc03eb565809831db181cf8cb7f05f9ac76852f3eb35461af0f89fa407b46f3a03f4f97a96754d8dc540d8 + version: 2.0.1 + resolution: "micromark-util-html-tag-name@npm:2.0.1" + checksum: dea365f5ad28ad74ff29fcb581f7b74fc1f80271c5141b3b2bc91c454cbb6dfca753f28ae03730d657874fcbd89d0494d0e3965dfdca06d9855f467c576afa9d languageName: node linkType: hard @@ -15297,11 +15182,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-normalize-identifier@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-normalize-identifier@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-normalize-identifier@npm:2.0.1" dependencies: micromark-util-symbol: ^2.0.0 - checksum: b36da2d3fd102053dadd953ce5c558328df12a63a8ac0e5aad13d4dda8e43b6a5d4a661baafe0a1cd8a260bead4b4a8e6e0e74193dd651e8484225bd4f4e68aa + checksum: 1eb9a289d7da067323df9fdc78bfa90ca3207ad8fd893ca02f3133e973adcb3743b233393d23d95c84ccaf5d220ae7f5a28402a644f135dcd4b8cfa60a7b5f84 languageName: node linkType: hard @@ -15315,11 +15200,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-resolve-all@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-resolve-all@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-resolve-all@npm:2.0.1" dependencies: micromark-util-types: ^2.0.0 - checksum: 31fe703b85572cb3f598ebe32750e59516925c7ff1f66cfe6afaebe0771a395a9eaa770787f2523d3c46082ea80e6c14f83643303740b3d650af7c96ebd30ccc + checksum: 9275f3ddb6c26f254dd2158e66215d050454b279707a7d9ce5a3cd0eba23201021cedcb78ae1a746c1b23227dcc418ee40dd074ade195359506797a5493550cc languageName: node linkType: hard @@ -15335,13 +15220,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-sanitize-uri@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-sanitize-uri@npm:2.0.0" + version: 2.0.1 + resolution: "micromark-util-sanitize-uri@npm:2.0.1" dependencies: micromark-util-character: ^2.0.0 micromark-util-encode: ^2.0.0 micromark-util-symbol: ^2.0.0 - checksum: ea4c28bbffcf2430e9aff2d18554296789a8b0a1f54ac24020d1dde76624a7f93e8f2a83e88cd5a846b6d2c4287b71b1142d1b89fa7f1b0363a9b33711a141fe + checksum: d01517840c17de67aaa0b0f03bfe05fac8a41d99723cd8ce16c62f6810e99cd3695364a34c335485018e5e2c00e69031744630a1b85c6868aa2f2ca1b36daa2f languageName: node linkType: hard @@ -15358,14 +15243,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-subtokenize@npm:^2.0.0": - version: 2.0.1 - resolution: "micromark-util-subtokenize@npm:2.0.1" + version: 2.1.0 + resolution: "micromark-util-subtokenize@npm:2.1.0" dependencies: devlop: ^1.0.0 micromark-util-chunked: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: 5d338883ad8889c63f9b262b9cae0c02a42088201981d820ae7af7aa6d38fab6585b89fd4cf2206a46a7c4002e41ee6c70e1a3e0ceb3ad8b7adcffaf166b1511 + checksum: 2e194bc8a5279d256582020500e5072a95c1094571be49043704343032e1fffbe09c862ef9c131cf5c762e296ddb54ff8bc767b3786a798524a68d1db6942934 languageName: node linkType: hard @@ -15377,9 +15262,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-symbol@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-symbol@npm:2.0.0" - checksum: fa4a05bff575d9fbf0ad96a1013003e3bb6087ed6b34b609a141b6c0d2137b57df594aca409a95f4c5fda199f227b56a7d8b1f82cea0768df161d8a3a3660764 + version: 2.0.1 + resolution: "micromark-util-symbol@npm:2.0.1" + checksum: fb7346950550bc85a55793dda94a8b3cb3abc068dbd7570d1162db7aee803411d06c0a5de4ae59cd945f46143bdeadd4bba02a02248fa0d18cc577babaa00044 languageName: node linkType: hard @@ -15391,9 +15276,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark-util-types@npm:^2.0.0": - version: 2.0.0 - resolution: "micromark-util-types@npm:2.0.0" - checksum: 819fef3ab5770c37893d2a60381fb2694396c8d22803b6e103c830c3a1bc1490363c2b0470bb2acaaddad776dfbc2fc1fcfde39cb63c4f54d95121611672e3d0 + version: 2.0.2 + resolution: "micromark-util-types@npm:2.0.2" + checksum: 884f7974839e4bc6d2bd662e57c973a9164fd5c0d8fe16cddf07472b86a7e6726747c00674952c0321d17685d700cd3295e9f58a842a53acdf6c6d55ab051aab languageName: node linkType: hard @@ -15423,8 +15308,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "micromark@npm:^4.0.0": - version: 4.0.0 - resolution: "micromark@npm:4.0.0" + version: 4.0.2 + resolution: "micromark@npm:4.0.2" dependencies: "@types/debug": ^4.0.0 debug: ^4.0.0 @@ -15443,11 +15328,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: micromark-util-subtokenize: ^2.0.0 micromark-util-symbol: ^2.0.0 micromark-util-types: ^2.0.0 - checksum: b84ab5ab1a0b28c063c52e9c2c9d7d44b954507235c10c9492d66e0b38f7de24bf298f914a1fbdf109f2a57a88cf0412de217c84cfac5fd60e3e42a74dbac085 + checksum: 5306c15dd12f543755bc627fc361d4255dfc430e7af6069a07ac0eacc338fbd761fe8e93f02a8bfab6097bab12ee903192fe31389222459d5029242a5aaba3b8 languageName: node linkType: hard -"micromatch@npm:4.0.5, micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -15457,6 +15342,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 + languageName: node + linkType: hard + "miller-rabin@npm:^4.0.0": version: 4.0.1 resolution: "miller-rabin@npm:4.0.1" @@ -15469,13 +15364,20 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": +"mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f languageName: node linkType: hard +"mime-db@npm:>= 1.43.0 < 2": + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: e99aaf2f23f5bd607deb08c83faba5dd25cf2fec90a7cc5b92d8260867ee08dab65312e1a589e60093dc7796d41e5fae013268418482f1db4c7d52d0a0960ac9 + languageName: node + linkType: hard + "mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" @@ -15565,12 +15467,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: ^2.0.1 - checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 languageName: node linkType: hard @@ -15590,18 +15492,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" dependencies: encoding: ^0.1.13 minipass: ^7.0.3 minipass-sized: ^1.0.3 - minizlib: ^2.1.2 + minizlib: ^3.0.1 dependenciesMeta: encoding: optional: true - checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + checksum: 3dfca705ce887ca9ff14d73e8d8593996dea1a1ecd8101fdbb9c10549d1f9670bc8fb66ad0192769ead4c2dc01b4f9ca1cf567ded365adff17827a303b948140 languageName: node linkType: hard @@ -15641,36 +15543,28 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + minipass: ^7.1.2 + checksum: 493bed14dcb6118da7f8af356a8947cf1473289c09658e5aabd69a737800a8c3b1736fb7d7931b722268a9c9bc038a6d53c049b6a6af24b34a121823bb709996 languageName: node linkType: hard -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d languageName: node linkType: hard @@ -15705,9 +15599,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "mrmime@npm:^2.0.0": - version: 2.0.0 - resolution: "mrmime@npm:2.0.0" - checksum: f6fe11ec667c3d96f1ce5fd41184ed491d5f0a5f4045e82446a471ccda5f84c7f7610dff61d378b73d964f73a320bd7f89788f9e6b9403e32cc4be28ba99f569 + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 455a555009edb2ed6e587e0fcb5e41fcbf8f1dcca28242a57d054f02204ab198bed93ba9de75db06bd3447e8603bc74e10a22440ba99431fc4a751435fba35bf languageName: node linkType: hard @@ -15725,7 +15619,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -15755,22 +15649,22 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"nano-css@npm:^5.6.1": - version: 5.6.1 - resolution: "nano-css@npm:5.6.1" +"nano-css@npm:^5.6.2": + version: 5.6.2 + resolution: "nano-css@npm:5.6.2" dependencies: "@jridgewell/sourcemap-codec": ^1.4.15 css-tree: ^1.1.2 csstype: ^3.1.2 fastest-stable-stringify: ^2.0.2 - inline-style-prefixer: ^7.0.0 + inline-style-prefixer: ^7.0.1 rtl-css-js: ^1.16.1 stacktrace-js: ^2.0.2 stylis: ^4.3.0 peerDependencies: react: "*" react-dom: "*" - checksum: 735f02c030a9416bb6060503d24f18f2b2c9f43e4893c2d8714508d00f9d114b8a134df3623e94e376b0b1d794b0cacac6a48f8e5fb2b7fa8996071bcad590b8 + checksum: 85d5e730798387bee3090e9943801489ec4269bd376a848b75515cf0f44dc7ce53d4a9fec575081a7dff53a8a5d4b00eebdc1bbf217d75fae7195819f917aba1 languageName: node linkType: hard @@ -15781,12 +15675,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" +"nanoid@npm:^3.3.7, nanoid@npm:^3.3.8": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" bin: nanoid: bin/nanoid.cjs - checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29 languageName: node linkType: hard @@ -15816,13 +15710,27 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb + languageName: node + linkType: hard + +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510 + languageName: node + linkType: hard + "neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" @@ -15847,7 +15755,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"node-fetch@npm:^2.6.12, node-fetch@npm:^2.7.0": +"node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -15869,22 +15777,22 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 - glob: ^10.3.10 graceful-fs: ^4.2.6 - make-fetch-happen: ^13.0.0 - nopt: ^7.0.0 - proc-log: ^3.0.0 + make-fetch-happen: ^14.0.3 + nopt: ^8.0.0 + proc-log: ^5.0.0 semver: ^7.3.5 - tar: ^6.1.2 - which: ^4.0.0 + tar: ^7.4.3 + tinyglobby: ^0.2.12 + which: ^5.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + checksum: 2536282ba81f8a94b29482d3622b6ab298611440619e46de4512a6f32396a68b5530357c474b859787069d84a4c537d99e0c71078cce5b9f808bf84eeb78e8fb languageName: node linkType: hard @@ -15905,16 +15813,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 917dbced519f48c6289a44830a0ca6dc944c3ee9243c468ebd8515a41c97c8b2c256edb7f3f750416bc37952cc9608684e6483c7b6c6f39f6bd8d86c52cfe658 languageName: node linkType: hard "node-stdlib-browser@npm:^1.2.0": - version: 1.2.0 - resolution: "node-stdlib-browser@npm:1.2.0" + version: 1.3.1 + resolution: "node-stdlib-browser@npm:1.3.1" dependencies: assert: ^2.0.0 browser-resolve: ^2.0.0 @@ -15923,8 +15831,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: console-browserify: ^1.1.0 constants-browserify: ^1.0.0 create-require: ^1.1.1 - crypto-browserify: ^3.11.0 - domain-browser: ^4.22.0 + crypto-browserify: ^3.12.1 + domain-browser: 4.22.0 events: ^3.0.0 https-browserify: ^1.0.0 isomorphic-timers-promises: ^1.0.1 @@ -15940,10 +15848,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: string_decoder: ^1.0.0 timers-browserify: ^2.0.4 tty-browserify: 0.0.1 - url: ^0.11.0 + url: ^0.11.4 util: ^0.12.4 vm-browserify: ^1.0.1 - checksum: fe491f0839319fd9bb95964c6f7da81fc7fde4c3ac9062aa367f19bc5a6060d0d9e423d3de4196cb51f8259d6aaf6cf380048c48a86eb3721c6223dd0dcc5bfd + checksum: 2012dbd84de654c60414c7d88817c1c8214324fa4e77f09395aa2a9d3722f49fafc0abf1643dc5998a96ebcee2409ee0d957ec4c4fd50d3ff5b40e031d1feb90 languageName: node linkType: hard @@ -15954,14 +15862,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" dependencies: - abbrev: ^2.0.0 + abbrev: ^3.0.0 bin: nopt: bin/nopt.js - checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + checksum: 49cfd3eb6f565e292bf61f2ff1373a457238804d5a5a63a8d786c923007498cba89f3648e3b952bc10203e3e7285752abf5b14eaf012edb821e84f24e881a92a languageName: node linkType: hard @@ -16016,9 +15924,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.2": - version: 2.2.9 - resolution: "nwsapi@npm:2.2.9" - checksum: 3ab2bc47d5507a76e2fdee5aae7ea2875c6def912d0401126cad3e39825a7decb7a02622810c855a7902bd31e917e606b37882dca12b0ae54b4d3b70275de927 + version: 2.2.20 + resolution: "nwsapi@npm:2.2.20" + checksum: 37100d6023b278d85fc6893fb9f8c13172ced31f6cfd1de8d67d15229526ab51991dfd6b863163a9df684d339a359abe9d34b953676c68c062e2f12dcd39ac47 languageName: node linkType: hard @@ -16036,10 +15944,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"object-inspect@npm:^1.13.1": - version: 1.13.1 - resolution: "object-inspect@npm:1.13.1" - checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 582810c6a8d2ef988ea0a39e69e115a138dad8f42dd445383b394877e5816eb4268489f316a6f74ee9c4e0a984b3eab1028e3e79d62b1ed67c726661d55c7a8b languageName: node linkType: hard @@ -16078,30 +15986,33 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": - version: 4.1.5 - resolution: "object.assign@npm:4.1.5" +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" dependencies: - call-bind: ^1.0.5 + call-bind: ^1.0.8 + call-bound: ^1.0.3 define-properties: ^1.2.1 - has-symbols: ^1.0.3 + es-object-atoms: ^1.0.0 + has-symbols: ^1.1.0 object-keys: ^1.1.1 - checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 + checksum: 60e07d2651cf4f5528c485f1aa4dbded9b384c47d80e8187cefd11320abb1aebebf78df5483451dfa549059f8281c21f7b4bf7d19e9e5e97d8d617df0df298de languageName: node linkType: hard -"object.entries@npm:^1.1.7": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" +"object.entries@npm:^1.1.9": + version: 1.1.9 + resolution: "object.entries@npm:1.1.9" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.4 define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 + es-object-atoms: ^1.1.1 + checksum: 0ab2ef331c4d6a53ff600a5d69182948d453107c3a1f7fd91bc29d387538c2aba21d04949a74f57c21907208b1f6fb175567fd1f39f1a7a4046ba1bca762fb41 languageName: node linkType: hard -"object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -16113,7 +16024,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"object.groupby@npm:^1.0.1": +"object.groupby@npm:^1.0.3": version: 1.0.3 resolution: "object.groupby@npm:1.0.3" dependencies: @@ -16124,25 +16035,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"object.hasown@npm:^1.1.3": - version: 1.1.4 - resolution: "object.hasown@npm:1.1.4" - dependencies: - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 - languageName: node - linkType: hard - -"object.values@npm:^1.1.6, object.values@npm:^1.1.7": - version: 1.2.0 - resolution: "object.values@npm:1.2.0" +"object.values@npm:^1.1.6, object.values@npm:^1.2.0, object.values@npm:^1.2.1": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.3 define-properties: ^1.2.1 es-object-atoms: ^1.0.0 - checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa + checksum: f9b9a2a125ccf8ded29414d7c056ae0d187b833ee74919821fc60d7e216626db220d9cb3cf33f965c84aaaa96133626ca13b80f3c158b673976dc8cfcfcd26bb languageName: node linkType: hard @@ -16204,14 +16105,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "open@npm:^10.0.3": - version: 10.1.0 - resolution: "open@npm:10.1.0" + version: 10.1.2 + resolution: "open@npm:10.1.2" dependencies: default-browser: ^5.2.1 define-lazy-prop: ^3.0.0 is-inside-container: ^1.0.0 is-wsl: ^3.1.0 - checksum: 079b0771616bac13b08129b0300032dc9328d72f345e460dd0416b8a8196a5bdf5e0251fefec8aa2a6a97c736734ac65dd8f1d29ab3fc9a13e85624aa5bc4470 + checksum: cb40d9786e8c679a1c647c62ad3642bbf1a8cc986c3ec970e99ed13d279c93328ea46bf756db64ea465d2d707815d4e792e7ba906830c3439cc8577cdefb8610 languageName: node linkType: hard @@ -16270,6 +16171,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"own-keys@npm:^1.0.1": + version: 1.0.1 + resolution: "own-keys@npm:1.0.1" + dependencies: + get-intrinsic: ^1.2.6 + object-keys: ^1.1.1 + safe-push-apply: ^1.0.0 + checksum: cc9dd7d85c4ccfbe8109fce307d581ac7ede7b26de892b537873fbce2dc6a206d89aea0630dbb98e47ce0873517cefeaa7be15fcf94aaf4764a3b34b474a5b61 + languageName: node + linkType: hard + "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -16324,23 +16236,21 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 8c92d533acf82f0d12f7e196edccff773f384098bbb048acdd55a08778ce4fc8889d8f1bde72969487bd96f9c63212698d79744c20bedfce36c5b00b46d369f8 languageName: node linkType: hard "p-retry@npm:^6.2.0": - version: 6.2.0 - resolution: "p-retry@npm:6.2.0" + version: 6.2.1 + resolution: "p-retry@npm:6.2.1" dependencies: "@types/retry": 0.12.2 is-network-error: ^1.0.0 retry: ^0.13.1 - checksum: 6003573c559ee812329c9c3ede7ba12a783fdc8dd70602116646e850c920b4597dc502fe001c3f9526fca4e93275045db7a27341c458e51db179c1374a01ac44 + checksum: 73acd269544b1359b7f2aa5f907f6f8cd4947c596bc43cc25fecce2678e2f190095179407eb874f0e09fc5956ae7952c39ebb08c3d9334f59d41ae0b2d73ee6b languageName: node linkType: hard @@ -16351,6 +16261,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "pako@npm:^2.1.0": version: 2.1.0 resolution: "pako@npm:2.1.0" @@ -16366,9 +16283,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "papaparse@npm:^5.3.2": - version: 5.4.1 - resolution: "papaparse@npm:5.4.1" - checksum: fc9e52f7158dca3517c229e3309065b1ab5da6c7194572fba4f31ff138bc43e3c91182cc40365cc828f97fe10d0aca416068fd731661058bea0f69ddb84a411a + version: 5.5.3 + resolution: "papaparse@npm:5.5.3" + checksum: 369d68a16340e5fad95d411a0efca34bedbf93550744e6374fa9b60aaf6bc655e29a6d1a39a56afea0cf7dbc4454fd190f50a9ad76db80987b43d6c6c319f018 languageName: node linkType: hard @@ -16382,10 +16299,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"parchment@npm:^1.1.2, parchment@npm:^1.1.4": - version: 1.1.4 - resolution: "parchment@npm:1.1.4" - checksum: 47997567424d1ad8648046091a06b3a5423ed83f9dfa421d7fd93e0032e79aedd8db5499ff55327e08eebd89d8e927704a646f87d45d4bcfe63016aa5a88947d +"parchment@npm:^3.0.0": + version: 3.0.0 + resolution: "parchment@npm:3.0.0" + checksum: 4d7962442c00a9cccabd1da20e209ed0a747a12902f86862030e269e69f81462dfe3a592a985d516bb8a096b776c0cf236b8d7fc60c6ff115eafa5dbadaa81db languageName: node linkType: hard @@ -16413,18 +16330,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "parse-entities@npm:^4.0.0": - version: 4.0.1 - resolution: "parse-entities@npm:4.0.1" + version: 4.0.2 + resolution: "parse-entities@npm:4.0.2" dependencies: "@types/unist": ^2.0.0 - character-entities: ^2.0.0 character-entities-legacy: ^3.0.0 character-reference-invalid: ^2.0.0 decode-named-character-reference: ^1.0.0 is-alphanumerical: ^2.0.0 is-decimal: ^2.0.0 is-hexadecimal: ^2.0.0 - checksum: 32a6ff5b9acb9d2c4d71537308521fd265e685b9215691df73feedd9edfe041bb6da9f89bd0c35c4a2bc7d58e3e76e399bb6078c2fd7d2a343ff1dd46edbf1bd + checksum: db22b46da1a62af00409c929ac49fbd306b5ebf0dbacf4646d2ae2b58616ef90a40eedc282568a3cf740fac2a7928bc97146973a628f6977ca274dedc2ad6edc languageName: node linkType: hard @@ -16462,11 +16378,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "parse5@npm:^7.0.0, parse5@npm:^7.1.1": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" + version: 7.3.0 + resolution: "parse5@npm:7.3.0" dependencies: - entities: ^4.4.0 - checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + entities: ^6.0.0 + checksum: ffd040c4695d93f0bc370e3d6d75c1b352178514af41be7afa212475ea5cead1d6e377cd9d4cec6a5e2bcf497ca50daf9e0088eadaa37dbc271f60def08fdfcd languageName: node linkType: hard @@ -16536,29 +16452,29 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"path-scurry@npm:^1.10.2": - version: 1.10.2 - resolution: "path-scurry@npm:1.10.2" +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" dependencies: lru-cache: ^10.2.0 minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: ab237858bee7b25ecd885189f175ab5b5161e7b712b360d44f5c4516b8d271da3e4bf7bf0a7b9153ecb04c7d90ce8ff5158614e1208819cf62bac2b08452722e languageName: node linkType: hard "path-to-regexp@npm:^1.7.0": - version: 1.8.0 - resolution: "path-to-regexp@npm:1.8.0" + version: 1.9.0 + resolution: "path-to-regexp@npm:1.9.0" dependencies: isarray: 0.0.1 - checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + checksum: 5b2ac9cab2a9f82effd30a35164b20998b18d99d96608281dd2cab6e66c0e4536187970369b185ab21d3815da1ecb7dcb2d5f97a4bf0ee6e31a9612299fca147 languageName: node linkType: hard @@ -16569,10 +16485,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"path-type@npm:^5.0.0": - version: 5.0.0 - resolution: "path-type@npm:5.0.0" - checksum: 15ec24050e8932c2c98d085b72cfa0d6b4eeb4cbde151a0a05726d8afae85784fc5544f733d8dfc68536587d5143d29c0bd793623fad03d7e61cc00067291cd5 +"path-type@npm:^6.0.0": + version: 6.0.0 + resolution: "path-type@npm:6.0.0" + checksum: b9f6eaf7795c48d5c9bc4c6bc3ac61315b8d36975a73497ab2e02b764c0836b71fb267ea541863153f633a069a1c2ed3c247cb781633842fc571c655ac57c00e languageName: node linkType: hard @@ -16583,7 +16499,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2": +"pbkdf2@npm:^3.1.2": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" dependencies: @@ -16603,10 +16519,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 languageName: node linkType: hard @@ -16617,6 +16533,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: a7a5188c954f82c6585720e9143297ccd0e35ad8072231608086ca950bee672d51b0ef676254af0788205e59bd4e4deb4e7708769226bed725bf13370a7d1464 + languageName: node + linkType: hard + "pidtree@npm:0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" @@ -16633,10 +16556,19 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"pigeon-maps@npm:^0.22.1": + version: 0.22.1 + resolution: "pigeon-maps@npm:0.22.1" + peerDependencies: + react: "*" + checksum: 82233ee7ca3314195578b32e8cc6b5ee77520bbfff50c6d7dfbd9ab3b9738e4a7e0144b2c3d122dcfc6db67a0a41f259afa2e76c378769b6dfdbb7a9a5de0782 + languageName: node + linkType: hard + "pirates@npm:^4.0.1, pirates@npm:^4.0.4": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 3dcbaff13c8b5bc158416feb6dc9e49e3c6be5fddc1ea078a05a73ef6b85d79324bbb1ef59b954cdeff000dbf000c1d39f32dc69310c7b78fbada5171b583e40 languageName: node linkType: hard @@ -16674,17 +16606,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"popper.js@npm:^1.16.0": - version: 1.16.1 - resolution: "popper.js@npm:1.16.1" - checksum: c56ae5001ec50a77ee297a8061a0221d99d25c7348d2e6bcd3e45a0d0f32a1fd81bca29d46cb0d4bdf13efb77685bd6a0ce93f9eb3c608311a461f945fffedbe - languageName: node - linkType: hard - "possible-typed-array-names@npm:^1.0.0": - version: 1.0.0 - resolution: "possible-typed-array-names@npm:1.0.0" - checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: cfcd4f05264eee8fd184cd4897a17890561d1d473434b43ab66ad3673d9c9128981ec01e0cb1d65a52cd6b1eebfb2eae1e53e39b2e0eca86afc823ede7a4f41b languageName: node linkType: hard @@ -16698,26 +16623,26 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "postcss-modules-local-by-default@npm:^4.0.5": - version: 4.0.5 - resolution: "postcss-modules-local-by-default@npm:4.0.5" + version: 4.2.0 + resolution: "postcss-modules-local-by-default@npm:4.2.0" dependencies: icss-utils: ^5.0.0 - postcss-selector-parser: ^6.0.2 + postcss-selector-parser: ^7.0.0 postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.1.0 - checksum: ca9b01f4a0a3dfb33e016299e2dfb7e85c3123292f7aec2efc0c6771b9955648598bfb4c1561f7ee9732fb27fb073681233661b32eef98baab43743f96735452 + checksum: 720d145453f82ad5f1c1d0ff7386d64722f0812808e4132e573c1a49909745e109fcce3792a0b0cb18770dbeb3d9741867e81c698dc8353a18bc664b7d6d9533 languageName: node linkType: hard "postcss-modules-scope@npm:^3.2.0": - version: 3.2.0 - resolution: "postcss-modules-scope@npm:3.2.0" + version: 3.2.1 + resolution: "postcss-modules-scope@npm:3.2.1" dependencies: - postcss-selector-parser: ^6.0.4 + postcss-selector-parser: ^7.0.0 peerDependencies: postcss: ^8.1.0 - checksum: 2ffe7e98c1fa993192a39c8dd8ade93fc4f59fbd1336ce34fcedaee0ee3bafb29e2e23fb49189256895b30e4f21af661c6a6a16ef7b17ae2c859301e4a4459ae + checksum: 085f65863bb7d8bf08209a979ceb22b2b07bb466574e0e698d34aaad832d614957bb05f2418348a14e4035f65e23b2be2951369d26ea429dd5762c6a020f0f7c languageName: node linkType: hard @@ -16732,13 +16657,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": - version: 6.0.16 - resolution: "postcss-selector-parser@npm:6.0.16" +"postcss-selector-parser@npm:^7.0.0": + version: 7.1.0 + resolution: "postcss-selector-parser@npm:7.1.0" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: e1cd68e33a39e3dc1e1e5bd8717be5bbe3cc23a4cecb466c3acb2f3a77daad7a47df4d6137a76f8db74cf160d2fb16b2cfdb4ccbebdfda844690f8d545fe281d + checksum: 1300e7871dd60a5132ee5462cc6e94edd4f3df28462b2495ca9ff025bd83768a908e892a18fde62cae63ff63524641baa6d58c64120f04fe6884b916663ce737 languageName: node linkType: hard @@ -16749,25 +16674,25 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"postcss@npm:8.4.31": - version: 8.4.31 - resolution: "postcss@npm:8.4.31" +"postcss@npm:8.4.49": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" dependencies: - nanoid: ^3.3.6 - picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea + nanoid: ^3.3.7 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: eb5d6cbdca24f50399aafa5d2bea489e4caee4c563ea1edd5a2485bc5f84e9ceef3febf170272bc83a99c31d23a316ad179213e853f34c2a7a8ffa534559d63a languageName: node linkType: hard "postcss@npm:^8.4.27, postcss@npm:^8.4.33": - version: 8.4.38 - resolution: "postcss@npm:8.4.38" + version: 8.5.3 + resolution: "postcss@npm:8.5.3" dependencies: - nanoid: ^3.3.7 - picocolors: ^1.0.0 - source-map-js: ^1.2.0 - checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 + nanoid: ^3.3.8 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: da574620eb84ff60e65e1d8fc6bd5ad87a19101a23d0aba113c653434161543918229a0f673d89efb3b6d4906287eb04b957310dbcf4cbebacad9d1312711461 languageName: node linkType: hard @@ -16793,11 +16718,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "prettier@npm:^3.1.0, prettier@npm:^3.1.1": - version: 3.2.5 - resolution: "prettier@npm:3.2.5" + version: 3.5.3 + resolution: "prettier@npm:3.5.3" bin: prettier: bin/prettier.cjs - checksum: 2ee4e1417572372afb7a13bb446b34f20f1bf1747db77cf6ccaf57a9be005f2f15c40f903d41a6b79eec3f57fff14d32a20fb6dee1f126da48908926fe43c311 + checksum: 61e97bb8e71a95d8f9c71f1fd5229c9aaa9d1e184dedb12399f76aa802fb6fdc8954ecac9df25a7f82ee7311cf8ddbd06baf5507388fc98e5b44036cc6a88a1b languageName: node linkType: hard @@ -16823,10 +16748,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: c78b26ecef6d5cce4a7489a1e9923d7b4b1679028c8654aef0463b27f4a90b0946cd598f55799da602895c52feb085ec76381d007ab8dcceebd40b89c2f9dfe0 languageName: node linkType: hard @@ -16880,7 +16805,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"prop-types@npm:15.x, prop-types@npm:^15.5.7, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:15.x, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -16898,6 +16823,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"property-information@npm:^7.0.0": + version: 7.1.0 + resolution: "property-information@npm:7.1.0" + checksum: 3875161d204bac89d75181f6d3ebc3ecaeb2699b4e2ecfcf5452201d7cdd275168c6742d7ff8cec5ab0c342fae72369ac705e1f8e9680a9acd911692e80dfb88 + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -16930,13 +16862,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "psl@npm:^1.1.28, psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: ^2.3.1 + checksum: 6f777d82eecfe1c2406dadbc15e77467b186fec13202ec887a45d0209a2c6fca530af94a462a477c3c4a767ad892ec9ede7c482d98f61f653dd838b50e89dc15 languageName: node linkType: hard -"public-encrypt@npm:^4.0.0": +"public-encrypt@npm:^4.0.3": version: 4.0.3 resolution: "public-encrypt@npm:4.0.3" dependencies: @@ -16957,7 +16891,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 @@ -16979,29 +16913,29 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "qrcode.react@npm:^3.1.0": - version: 3.1.0 - resolution: "qrcode.react@npm:3.1.0" + version: 3.2.0 + resolution: "qrcode.react@npm:3.2.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 94a2942ecf83f461d869adb20305ae663c6d1abe93ef2c72442b07d756ce70cf6deb6fd588dc5b382b48c6991cfde1dfd5ac9b814c1461e71d5edb2d945e67fc + checksum: 55d020ca482d57e8d73ee9e2e18f152184fd3d7d2d0742ae54ec58c5a3bab08b242a648585178d7fc91877fc75d6fbad7a35fb51bc4bddd4374e1de450ca78e7 languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + side-channel: ^1.0.6 + checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 languageName: node linkType: hard -"qs@npm:^6.11.2": - version: 6.12.1 - resolution: "qs@npm:6.12.1" +"qs@npm:^6.12.3": + version: 6.14.0 + resolution: "qs@npm:6.14.0" dependencies: - side-channel: ^1.0.6 - checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 + side-channel: ^1.1.0 + checksum: 189b52ad4e9a0da1a16aff4c58b2a554a8dad9bd7e287c7da7446059b49ca2e33a49e570480e8be406b87fccebf134f51c373cbce36c8c83859efa0c9b71d635 languageName: node linkType: hard @@ -17033,28 +16967,26 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"quill-delta@npm:^3.6.2": - version: 3.6.3 - resolution: "quill-delta@npm:3.6.3" +"quill-delta@npm:^5.1.0": + version: 5.1.0 + resolution: "quill-delta@npm:5.1.0" dependencies: - deep-equal: ^1.0.1 - extend: ^3.0.2 - fast-diff: 1.1.2 - checksum: e62ed339838077841db401da3181bdf559c6667d014a671767788380c5be13a6205603bcdd27445260e6f6b2b5519161e1000023e521e3b2ff087270fa67fef6 + fast-diff: ^1.3.0 + lodash.clonedeep: ^4.5.0 + lodash.isequal: ^4.5.0 + checksum: a9c8cfb6a76c95e8ebc2d8e2a5982a192500a8a8b851fb6b06311d701c8da78c07b332fa7d29d6f66933d32a4fd79b619ba5e27800528c5ae318667df22969d4 languageName: node linkType: hard -"quill@npm:^1.3.7": - version: 1.3.7 - resolution: "quill@npm:1.3.7" +"quill@npm:~2.0.2": + version: 2.0.3 + resolution: "quill@npm:2.0.3" dependencies: - clone: ^2.1.1 - deep-equal: ^1.0.1 - eventemitter3: ^2.0.3 - extend: ^3.0.2 - parchment: ^1.1.4 - quill-delta: ^3.6.2 - checksum: db3e265a8410a4554e50a18cae4ebc0b43a996a776bcf03e26abcadbf617f4db329d49a0fa3ada6a70538a369bbbdc8fa7a66086f194b481914bf1adbab16f8f + eventemitter3: ^5.0.1 + lodash-es: ^4.17.21 + parchment: ^3.0.0 + quill-delta: ^5.1.0 + checksum: deb98ed47d1f5f4bf7442da71590d10ca9b562d0ccd8c92cf83046fc213d8250a816af889ea84e34919dec0445b097fad34fd7a534fd194ce4afd6b207051faa languageName: node linkType: hard @@ -17067,7 +16999,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"randomfill@npm:^1.0.3": +"randomfill@npm:^1.0.4": version: 1.0.4 resolution: "randomfill@npm:1.0.4" dependencies: @@ -17124,9 +17056,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-cascader@npm:~3.33.0": - version: 3.33.0 - resolution: "rc-cascader@npm:3.33.0" +"rc-cascader@npm:~3.34.0": + version: 3.34.0 + resolution: "rc-cascader@npm:3.34.0" dependencies: "@babel/runtime": ^7.25.7 classnames: ^2.3.1 @@ -17136,7 +17068,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 187b1c43d82e3e70c3695ec70415b2ac88e4d5459c6cc56a3cc6e8894fbfa307a652423d7cb7fd6d3c108020972df936372cf6aa146e570b0951bcbaa77bdb8a + checksum: fad6200cd9a991aafc72394d6c0b87c56ddf0b0d590074c8486a1c008dee4702b63a6452dab9b746eba477fc2bf6a3205e37a55ec9a62481d459f4606a55dea6 languageName: node linkType: hard @@ -17201,22 +17133,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-dropdown@npm:~4.2.0": - version: 4.2.0 - resolution: "rc-dropdown@npm:4.2.0" - dependencies: - "@babel/runtime": ^7.18.3 - "@rc-component/trigger": ^2.0.0 - classnames: ^2.2.6 - rc-util: ^5.17.0 - peerDependencies: - react: ">=16.11.0" - react-dom: ">=16.11.0" - checksum: 436ef23be5436fa730327a83d853cf2cce74823fa72b813068998a180aeca7978e42bf342bc4dfe1b1cb554bfc7e013324a15ed21a9b80b778d1c9312c5c6e05 - languageName: node - linkType: hard - -"rc-dropdown@npm:~4.2.1": +"rc-dropdown@npm:~4.2.0, rc-dropdown@npm:~4.2.1": version: 4.2.1 resolution: "rc-dropdown@npm:4.2.1" dependencies: @@ -17231,17 +17148,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-field-form@npm:~1.27.4": - version: 1.27.4 - resolution: "rc-field-form@npm:1.27.4" +"rc-field-form@npm:^1.34.2": + version: 1.44.0 + resolution: "rc-field-form@npm:1.44.0" dependencies: "@babel/runtime": ^7.18.0 async-validator: ^4.1.0 - rc-util: ^5.8.0 + rc-util: ^5.32.2 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 51873f9ffa94d4b10d04d191adfd35bc3b2f9b8abf70ff07ae648a9965fb97b70e501c05500ebae770d1ba443d5a2c46f4da041ce988d337ff0cabda2656e35e + checksum: d7a2c858527ab318e09efdc3c06ad7d46990351c9d170b243c3883e87d01f7904bdedce0a01f38cd9b274d13863de493497cfeaa60d7a5734a44ac699befdc37 languageName: node linkType: hard @@ -17259,9 +17176,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-image@npm:~7.11.0": - version: 7.11.0 - resolution: "rc-image@npm:7.11.0" +"rc-image@npm:~7.12.0": + version: 7.12.0 + resolution: "rc-image@npm:7.12.0" dependencies: "@babel/runtime": ^7.11.2 "@rc-component/portal": ^1.0.2 @@ -17272,29 +17189,29 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 15e04bf026ee6e35612edc0609df846626c4029c6a08725c76b456ea5039c18b2bdee93f3b075d168ac39ff29bb997b12285d9f2d09a9cdb44dc5dd08313e7cd + checksum: 9977f3b72b5c4791e0f6cf03ad7853dd8671967b261920dd8d89c87cbc6b643197a319fe7a5434963c2f317abc05599ea08297de2381a074346c679b2e4f9586 languageName: node linkType: hard -"rc-input-number@npm:~9.4.0": - version: 9.4.0 - resolution: "rc-input-number@npm:9.4.0" +"rc-input-number@npm:~9.5.0": + version: 9.5.0 + resolution: "rc-input-number@npm:9.5.0" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/mini-decimal": ^1.0.1 classnames: ^2.2.5 - rc-input: ~1.7.1 + rc-input: ~1.8.0 rc-util: ^5.40.1 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 2141c1a148a1e5dba48e0dd8648d95c9fcf4d266b40d564c5b29063e41c880e2e100cf45f5ed5735b6e62b9e1c68158f736c1c72732af3fc744066cb88c251a0 + checksum: 864bd32d1eb4485d58ea266ef99989362c5c19cc428983d2ee031df665a57fb68d97717e531f72bae29bb5cd8cb8e1ec5da6a5890758c71177cd2fec75058291 languageName: node linkType: hard -"rc-input@npm:~1.7.1, rc-input@npm:~1.7.2": - version: 1.7.2 - resolution: "rc-input@npm:1.7.2" +"rc-input@npm:~1.8.0": + version: 1.8.0 + resolution: "rc-input@npm:1.8.0" dependencies: "@babel/runtime": ^7.11.1 classnames: ^2.2.1 @@ -17302,31 +17219,31 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.0.0" react-dom: ">=16.0.0" - checksum: c451317abf1c279d6e736f20e8cb1cc7b002fe96b436377636fd79173513f394a582f4fedad75057667b29af672c73b0d7728a4fc319782df1c87a28c3c7ce83 + checksum: 3d81c0cb8f3a9dfc20f30a6ce80ab6b2d4f3d0a4920d9962b48edf23848eced79d0e737b603daaff51cd01454b4c44e8c70ce7c2f9fce6828acadfc71e0127f5 languageName: node linkType: hard -"rc-mentions@npm:~2.19.1": - version: 2.19.1 - resolution: "rc-mentions@npm:2.19.1" +"rc-mentions@npm:~2.20.0": + version: 2.20.0 + resolution: "rc-mentions@npm:2.20.0" dependencies: "@babel/runtime": ^7.22.5 "@rc-component/trigger": ^2.0.0 classnames: ^2.2.6 - rc-input: ~1.7.1 + rc-input: ~1.8.0 rc-menu: ~9.16.0 - rc-textarea: ~1.9.0 + rc-textarea: ~1.10.0 rc-util: ^5.34.1 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 68b21b2f66d55daa2f52921769863d0a4c5936aa29dfc4d4c9f95b68c4b59dfb16f932e98fe553445c75d62edbd0eb79b31084ab8a8fdb618bff6d01fb6eb820 + checksum: ba946a6490f9cde2e5238f17aeeb836bf57183d74209aa661313d90469cbf811afb8386bc08e863f3410270a9988d5447f529defbc00f4c46ef01a4b34f5b2ed languageName: node linkType: hard -"rc-menu@npm:~9.16.0": - version: 9.16.0 - resolution: "rc-menu@npm:9.16.0" +"rc-menu@npm:~9.16.0, rc-menu@npm:~9.16.1": + version: 9.16.1 + resolution: "rc-menu@npm:9.16.1" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/trigger": ^2.0.0 @@ -17337,39 +17254,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: bd82f07337d5befb88c1c2415a6da00289ed0d1b7e8863675c6600735e0a2a724f24c57de6526d56bd060e310744d695d68511d5197522a0f8ae2bef5730ed33 - languageName: node - linkType: hard - -"rc-motion@npm:^2.0.0": - version: 2.9.0 - resolution: "rc-motion@npm:2.9.0" - dependencies: - "@babel/runtime": ^7.11.1 - classnames: ^2.2.1 - rc-util: ^5.21.0 - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 6c7c211a62896a2c443c43f27d13ec84c832884ec1860a40025f6270321e4e8c8a7abaf99d60a09d6e5cadc112e3d9787e0c58970eb69b0bb798eaa6be81dcf5 - languageName: node - linkType: hard - -"rc-motion@npm:^2.0.1, rc-motion@npm:^2.3.0, rc-motion@npm:^2.3.4, rc-motion@npm:^2.4.3, rc-motion@npm:^2.4.4, rc-motion@npm:^2.6.1, rc-motion@npm:^2.6.2, rc-motion@npm:^2.9.0": - version: 2.9.2 - resolution: "rc-motion@npm:2.9.2" - dependencies: - "@babel/runtime": ^7.11.1 - classnames: ^2.2.1 - rc-util: ^5.43.0 - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 704dceedaf7f75e884b6a6e1134e674c1351ee6c6b1bd6a18ff73594d1ba0379cab77abd7fcad7d842ca07595bfe0a7ab291210a7144f7fd2e5e68a199e1561c + checksum: af943b3aa1dd01271ce15b7133487a17dadffa11a703dec53f5b6b03b3d444ba2b4cb923730dfabe21c72dbb43db8f668978540f96efc547564b5e709529b390 languageName: node linkType: hard -"rc-motion@npm:^2.9.5": +"rc-motion@npm:^2.0.0, rc-motion@npm:^2.0.1, rc-motion@npm:^2.3.0, rc-motion@npm:^2.3.4, rc-motion@npm:^2.4.3, rc-motion@npm:^2.4.4, rc-motion@npm:^2.6.1, rc-motion@npm:^2.6.2, rc-motion@npm:^2.9.0, rc-motion@npm:^2.9.5": version: 2.9.5 resolution: "rc-motion@npm:2.9.5" dependencies: @@ -17383,9 +17272,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-notification@npm:~5.6.2": - version: 5.6.3 - resolution: "rc-notification@npm:5.6.3" +"rc-notification@npm:~5.6.4": + version: 5.6.4 + resolution: "rc-notification@npm:5.6.4" dependencies: "@babel/runtime": ^7.10.1 classnames: 2.x @@ -17394,13 +17283,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 8e8e15baf1ec9f9540156bd0307db94b170b375dc84d3ef5dd0769b931b551a1470d100cc084ee641b80a08b8c702b37f14c8fc3cc1870952d9200f2c2462c60 + checksum: 90bbe8d15f3c55cb9626468d8bc877f9c682a57c1491f8a4d2a4278c3e10693a8363be9236e35ed0a39e6bccf275c32f87626b24c0255f765890679efb16a358 languageName: node linkType: hard "rc-overflow@npm:^1.3.1, rc-overflow@npm:^1.3.2": - version: 1.3.2 - resolution: "rc-overflow@npm:1.3.2" + version: 1.4.1 + resolution: "rc-overflow@npm:1.4.1" dependencies: "@babel/runtime": ^7.11.1 classnames: ^2.2.1 @@ -17409,7 +17298,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 7041f72e881ead9a484bddb6b6b6eb94455911f6b1cb06b16979ffe7d79e81058d5c77d0ca3f14faa0d1e43c81b966e65ed11678d09c2344cfd84dcfd803e620 + checksum: d0b5417a346934dfb510b169063448408d5daf4f95d85e15d7a7e7f8c27bd7343dd473b28e6b01b52d31cd1b4efb7cf0d31c7c732a5dedf632812ff5bea367f3 languageName: node linkType: hard @@ -17446,9 +17335,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-picker@npm:~4.9.2": - version: 4.9.2 - resolution: "rc-picker@npm:4.9.2" +"rc-picker@npm:~4.11.3": + version: 4.11.3 + resolution: "rc-picker@npm:4.11.3" dependencies: "@babel/runtime": ^7.24.7 "@rc-component/trigger": ^2.0.0 @@ -17472,7 +17361,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true moment: optional: true - checksum: 87cc210b4ad2f1b05f572b0944b3dcfb421e87d8776e614294301bf7e784cd6bd600af52f1542b2006271c3c986f2b29870490ac5e65faf5c75239f2f8cbca23 + checksum: 95cedc68735b499e6acd2b262f0b9cd53ad2b3e3ca2878c071f65c86a754b77b847fd742350e54adb3b6fd096b033fd6250caa4d0551d5cc5b9167119736f4c2 languageName: node linkType: hard @@ -17490,9 +17379,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-rate@npm:~2.13.0": - version: 2.13.0 - resolution: "rc-rate@npm:2.13.0" +"rc-rate@npm:~2.13.1": + version: 2.13.1 + resolution: "rc-rate@npm:2.13.1" dependencies: "@babel/runtime": ^7.10.1 classnames: ^2.2.5 @@ -17500,37 +17389,37 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 08e0327c006adbd4a6b4c4e2a8863237d81d213703cf2156cd4b161ffa28ab8c9938c4baa15c337569e2c7f28205d7afdc544f59341b6e058a73a5c7e297b813 + checksum: 41d43940107d71cc4f3c99d35ba521259b4db94a5d33be3b052c8c2cd9979624a137acb93b56c46c75f01b397d3873e049af7f0080d79322309582fec8fa8051 languageName: node linkType: hard -"rc-resize-observer@npm:^1.0.0, rc-resize-observer@npm:^1.1.0, rc-resize-observer@npm:^1.3.1, rc-resize-observer@npm:^1.4.0": - version: 1.4.0 - resolution: "rc-resize-observer@npm:1.4.0" +"rc-resize-observer@npm:^1.0.0, rc-resize-observer@npm:^1.1.0, rc-resize-observer@npm:^1.3.1, rc-resize-observer@npm:^1.4.0, rc-resize-observer@npm:^1.4.3": + version: 1.4.3 + resolution: "rc-resize-observer@npm:1.4.3" dependencies: "@babel/runtime": ^7.20.7 classnames: ^2.2.1 - rc-util: ^5.38.0 + rc-util: ^5.44.1 resize-observer-polyfill: ^1.5.1 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: e6ee24fd887ea440b07e0326c3fc60b240274fa43ea87cf8f86ca9e0741a2c817e47a182f336b00d7246b4fd21b3536f4d3aacd7f0db5ae673f106630cd348ba + checksum: 960302cfafbc124ced38d7b96241bd248fe79ba81078545212e3b5ff73b8520ab92ef70a31dbbb31b0bdc565c90c9f1a47a5d096a16c87bdc4346916d586e580 languageName: node linkType: hard -"rc-resize-observer@npm:^1.4.3": - version: 1.4.3 - resolution: "rc-resize-observer@npm:1.4.3" +"rc-segmented@npm:~2.4.1": + version: 2.4.1 + resolution: "rc-segmented@npm:2.4.1" dependencies: - "@babel/runtime": ^7.20.7 + "@babel/runtime": ^7.11.1 classnames: ^2.2.1 - rc-util: ^5.44.1 - resize-observer-polyfill: ^1.5.1 + rc-motion: ^2.4.4 + rc-util: ^5.17.0 peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 960302cfafbc124ced38d7b96241bd248fe79ba81078545212e3b5ff73b8520ab92ef70a31dbbb31b0bdc565c90c9f1a47a5d096a16c87bdc4346916d586e580 + react: ">=16.0.0" + react-dom: ">=16.0.0" + checksum: f1b731f70af488ae802f14a6d49522a8b16483a8b6c46a7bb604d8daaaf0975872d7c8650d9ae6e0dc4f92bb4826e28c807555e4cc1e463c5e3e4fb26ac65fdd languageName: node linkType: hard @@ -17549,9 +17438,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-select@npm:~14.16.2, rc-select@npm:~14.16.6": - version: 14.16.6 - resolution: "rc-select@npm:14.16.6" +"rc-select@npm:~14.16.2, rc-select@npm:~14.16.8": + version: 14.16.8 + resolution: "rc-select@npm:14.16.8" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/trigger": ^2.1.1 @@ -17563,7 +17452,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: "*" react-dom: "*" - checksum: 4e4fa99c2727bb23dc37dee2235ec9e70284554bb62f7d356ae77c40362da7971ee7b75a18c360cb0c26155057339120b8450035a1e23ad6e97fd1435244c803 + checksum: c2eabac8cb9eb683768fde8d852a095d930c94b4a35e9355e6d40fcb251c9babe144f32babdb30a0970c5783153a444866e44ef2baa40b1e9434434b3d924d5b languageName: node linkType: hard @@ -17609,9 +17498,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-table@npm:~7.50.2": - version: 7.50.2 - resolution: "rc-table@npm:7.50.2" +"rc-table@npm:~7.50.5": + version: 7.50.5 + resolution: "rc-table@npm:7.50.5" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/context": ^1.4.0 @@ -17622,13 +17511,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: d71cf1c57221557eac15189cf946f73dca675b20cfca42191c1b1423931afc50f2607bce143d36e73cd79dcc9188f2bef8f1a94b176d349c6476951436f9a4fb + checksum: c38df3c8d01fbdf556502a29339eed16237791415ac2ebaaefe9a15658d45f7f4436a19162e9a8dada6962192d92c20250ec2a6be9527fec480927f3ec9bbce1 languageName: node linkType: hard -"rc-tabs@npm:~15.5.0": - version: 15.5.1 - resolution: "rc-tabs@npm:15.5.1" +"rc-tabs@npm:~15.6.1": + version: 15.6.1 + resolution: "rc-tabs@npm:15.6.1" dependencies: "@babel/runtime": ^7.11.2 classnames: 2.x @@ -17640,37 +17529,38 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 63184b26d3ab2ef816c4b7616584a7c875e24d9cef78f95f981c7dd67f83783ddff6f29c8a40df8b6a5ec4fb9cefa664798ec0633acfeca90eeba7d397beebe8 + checksum: b685e433a51340df230536d544e0f1043532fc9b1fbf07859bbbaae8091f280211c4f93f0b2b4953d52833cc4751a7b3401189ac13b8ca852b15b9d01de5f552 languageName: node linkType: hard -"rc-textarea@npm:~1.9.0": - version: 1.9.0 - resolution: "rc-textarea@npm:1.9.0" +"rc-textarea@npm:~1.10.0": + version: 1.10.0 + resolution: "rc-textarea@npm:1.10.0" dependencies: "@babel/runtime": ^7.10.1 classnames: ^2.2.1 - rc-input: ~1.7.1 + rc-input: ~1.8.0 rc-resize-observer: ^1.0.0 rc-util: ^5.27.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 83137aaabfcd8c95a2da3cf4769a9dcce303b6d49c73c33b6f3fe64400a6b7cf518f8aa3fc3cbe3cdfbdcdc8d3ec220eea92d69f92d98f257b398eba7914376a + checksum: 8920d7d557e5c084116f8d39b3ad43dc782ad58885520d406aa5c3cfeb006e8717e6d31523843f68d0f47b1b269fdf02a083f14d2f37e2ba1d5f7ae39026c1c1 languageName: node linkType: hard -"rc-tooltip@npm:~6.3.2": - version: 6.3.2 - resolution: "rc-tooltip@npm:6.3.2" +"rc-tooltip@npm:~6.4.0": + version: 6.4.0 + resolution: "rc-tooltip@npm:6.4.0" dependencies: "@babel/runtime": ^7.11.2 "@rc-component/trigger": ^2.0.0 classnames: ^2.3.1 + rc-util: ^5.44.3 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 247c986dff6a02e95da9e1e8e21286a0d0629ad25b24aed8fd51f44260dec454cb93e0402ef387b5c6ed34bde3d31606df7695c580feb991a3f5a1a91ca2b73a + checksum: 3eee86c8f0c14143f9446c8dcd2dce8f42cb833402dd8b882437dfe7fb4f3568192288900dfe2efbc4b0e566c367edd0aea33a445c5177a9c52b17f254067f28 languageName: node linkType: hard @@ -17690,9 +17580,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-tree@npm:~5.13.0": - version: 5.13.0 - resolution: "rc-tree@npm:5.13.0" +"rc-tree@npm:~5.13.0, rc-tree@npm:~5.13.1": + version: 5.13.1 + resolution: "rc-tree@npm:5.13.1" dependencies: "@babel/runtime": ^7.10.1 classnames: 2.x @@ -17702,7 +17592,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: "*" react-dom: "*" - checksum: cff22dbbd229361ec774cc4d9bcf870250c1ac565cfde8e9a625f0615bdb34bcdb93c1319f706e41e836d08f083758d632bd729bbf4108c66075409af803a0c5 + checksum: a5aefa4e17d0dfe123cae20a590fa9c45999a081ff47d1992ede79f1f19b81722c601826a2372ef176f8ce941e0686d6ea91efa014b9ca250ee8d7fbd05121f4 languageName: node linkType: hard @@ -17722,9 +17612,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rc-upload@npm:~4.8.1": - version: 4.8.1 - resolution: "rc-upload@npm:4.8.1" +"rc-upload@npm:~4.9.0": + version: 4.9.0 + resolution: "rc-upload@npm:4.9.0" dependencies: "@babel/runtime": ^7.18.3 classnames: ^2.2.5 @@ -17732,37 +17622,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: a034303e1df477a37e9de84de5b95dc8a9118849b2292d77c56a519413165775280fce92e245583452a82b4b3739dbf48db9a12d426aae2a282ed8a699d1f732 - languageName: node - linkType: hard - -"rc-util@npm:^5.0.1, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.2.0, rc-util@npm:^5.20.1, rc-util@npm:^5.24.4, rc-util@npm:^5.25.2, rc-util@npm:^5.27.0, rc-util@npm:^5.30.0, rc-util@npm:^5.32.2, rc-util@npm:^5.34.1, rc-util@npm:^5.35.0, rc-util@npm:^5.36.0, rc-util@npm:^5.38.0, rc-util@npm:^5.40.1, rc-util@npm:^5.43.0": - version: 5.43.0 - resolution: "rc-util@npm:5.43.0" - dependencies: - "@babel/runtime": ^7.18.3 - react-is: ^18.2.0 - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 48c10afb5886aed86d1f5241883f972b2b16235b0cc4867a05d061324f107aa113260c34eeb13ad18f4b66d1264dbcb3baf725c8ea34fbdaa504410d4e71b3ce - languageName: node - linkType: hard - -"rc-util@npm:^5.19.2, rc-util@npm:^5.21.0, rc-util@npm:^5.26.0, rc-util@npm:^5.31.1, rc-util@npm:^5.37.0, rc-util@npm:^5.38.1, rc-util@npm:^5.8.0": - version: 5.39.1 - resolution: "rc-util@npm:5.39.1" - dependencies: - "@babel/runtime": ^7.18.3 - react-is: ^18.2.0 - peerDependencies: - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 67c53eea11fcdbca2b4a31853f1cedf6923ec7014eca90254ead5f4ef3317eb9b9df3434a5469c3cab3c45c3e5f4f2209cb3e9f4e8aa0413f4681475b7be6151 + checksum: e1ce50d9f31eb989605738058076307ab96898b49d14bd9778c3873226608e5e0f98ac04acf366c59db2a21e0bf4b72e4574bd176196d95fa197dc0d6015d260 languageName: node linkType: hard -"rc-util@npm:^5.44.0, rc-util@npm:^5.44.1, rc-util@npm:^5.44.3": +"rc-util@npm:^5.0.1, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.19.2, rc-util@npm:^5.2.0, rc-util@npm:^5.20.1, rc-util@npm:^5.21.0, rc-util@npm:^5.24.4, rc-util@npm:^5.25.2, rc-util@npm:^5.26.0, rc-util@npm:^5.27.0, rc-util@npm:^5.30.0, rc-util@npm:^5.31.1, rc-util@npm:^5.32.2, rc-util@npm:^5.34.1, rc-util@npm:^5.35.0, rc-util@npm:^5.36.0, rc-util@npm:^5.37.0, rc-util@npm:^5.38.0, rc-util@npm:^5.38.1, rc-util@npm:^5.40.1, rc-util@npm:^5.43.0, rc-util@npm:^5.44.0, rc-util@npm:^5.44.1, rc-util@npm:^5.44.3, rc-util@npm:^5.44.4": version: 5.44.4 resolution: "rc-util@npm:5.44.4" dependencies: @@ -17776,8 +17640,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "rc-virtual-list@npm:^3.14.2, rc-virtual-list@npm:^3.5.1, rc-virtual-list@npm:^3.5.2": - version: 3.14.5 - resolution: "rc-virtual-list@npm:3.14.5" + version: 3.18.6 + resolution: "rc-virtual-list@npm:3.18.6" dependencies: "@babel/runtime": ^7.20.0 classnames: ^2.2.6 @@ -17786,7 +17650,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: f68957cc1b78eb9bfcbad87a2d3cce942c301fd0a7dd894548cca81f64433a321b567762d745d199e6c4667f070f2437972d2a24bf6d97d5b05c53b665b706a3 + checksum: 4f95486a0791b98e121b246303f62bbf0a4e05d549af9aae32a193275d8f958d37f1376323cdceffe7a92ea0270d6a9f974cd435cd2cbfb40f1c8bcc8eefcf5f languageName: node linkType: hard @@ -17803,8 +17667,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "react-best-gradient-color-picker@npm:^3.0.10": - version: 3.0.10 - resolution: "react-best-gradient-color-picker@npm:3.0.10" + version: 3.0.14 + resolution: "react-best-gradient-color-picker@npm:3.0.14" dependencies: html2canvas: ^1.4.1 lodash.throttle: ^4.1.1 @@ -17816,7 +17680,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependenciesMeta: "@types/react": optional: true - checksum: 3f821beb164e7eed0c3247af99e492dc08bfa64b47f8d7f71d1543e5afbe1d9f01cde4a2917c9d794012dd1efbfe848ee58621b4f37801ea5655df8be806ea55 + checksum: fc0af498ed5ebb2fc82430460d514fc0c9f6612b61a0896d612c3551bcfcda24e9c39727c3dacb10900e0bb7a8fb4ab09873a7ae7530345fbb1a55f901685ed4 languageName: node linkType: hard @@ -17862,6 +17726,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"react-dom@npm:18.3.0": + version: 18.3.0 + resolution: "react-dom@npm:18.3.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.1 + peerDependencies: + react: ^18.3.0 + checksum: 04dc715fdedee89754c9c2cd627cf8bc5914dbb678d053ceecaf6feb11566fc653763781aefd82c240f264c87b1643ab1328ca6565b8b449ce79fbb2912fd1c7 + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.3.1 resolution: "react-dom@npm:18.3.1" @@ -17874,7 +17750,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"react-draggable@npm:^4.0.3, react-draggable@npm:^4.4.4, react-draggable@npm:^4.4.5": +"react-draggable@npm:^4.0.3, react-draggable@npm:^4.4.5, react-draggable@npm:^4.4.6": version: 4.4.6 resolution: "react-draggable@npm:4.4.6" dependencies: @@ -17888,13 +17764,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "react-error-boundary@npm:^4.0.13": - version: 4.0.13 - resolution: "react-error-boundary@npm:4.0.13" + version: 4.1.2 + resolution: "react-error-boundary@npm:4.1.2" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: react: ">=16.13.1" - checksum: 50398d080015d51d22c6f94c56f4ea336d10232d72345b36ee6f15b6b643666d20b072829b02f091a80e5af68fe67f68a62ef0d2b649dbd759ead929304449af + checksum: afe692f1bbbfb5998b49e1001d7682a3cbfdc623dca1318b408e738606f3450d925c28fbbfa5dc84d2cf285d17c2e7f079d59386a27da354dea9c902a935149b languageName: node linkType: hard @@ -17905,19 +17781,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"react-floater@npm:^0.7.9": - version: 0.7.9 - resolution: "react-floater@npm:0.7.9" +"react-floater@npm:^0.9.5-4": + version: 0.9.5-4 + resolution: "react-floater@npm:0.9.5-4" dependencies: - deepmerge: ^4.3.1 - is-lite: ^0.8.2 - popper.js: ^1.16.0 - prop-types: ^15.8.1 - tree-changes: ^0.9.1 + "@popperjs/core": ^2.11.8 + deepmerge-ts: ^7.1.0 + is-lite: ^1.2.1 + tree-changes-hook: ^0.11.2 peerDependencies: - react: 15 - 18 - react-dom: 15 - 18 - checksum: 563884338de7d3a3ee07851ffa4374707239f9dabf279699642756ac788ddc11c090e283d95ef2208ed70615122924a4601bbd09450254b6524329ddabb48913 + react: 16.8 - 19 + react-dom: 16.8 - 19 + checksum: 19e38059241586f358615f1535c60a20a982a7e5b95c559ab40b5c8d8a22af9bba23507ebca647c2f00281d795ddba27795ad7f6feb1a4f7cfdd0eb9391441a2 languageName: node linkType: hard @@ -17932,9 +17807,20 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"react-github-btn@npm:^1.4.0": + version: 1.4.0 + resolution: "react-github-btn@npm:1.4.0" + dependencies: + github-buttons: ^2.22.0 + peerDependencies: + react: ">=16.3.0" + checksum: 33a416ad76ab4cc9238ac5cf5cfcab636bb2127c48fb30805385350fd3a3c2aa0aaeb78f6c726c52a0d3d133ca469be35d4b3d188c8e40c735c7ff458d2c8c3c + languageName: node + linkType: hard + "react-grid-layout@npm:^1.3.0": - version: 1.4.4 - resolution: "react-grid-layout@npm:1.4.4" + version: 1.5.1 + resolution: "react-grid-layout@npm:1.5.1" dependencies: clsx: ^2.0.0 fast-equals: ^4.0.3 @@ -17945,7 +17831,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: ">= 16.3.0" react-dom: ">= 16.3.0" - checksum: 0d1d27d6ca58d5b7e9bf778f5d74e5a6353737980f86652b6a799a83b8683735d333f2a0d9b48e3186879da3eefd7f53a7db05a5149dfba27d9d124e5cd3f138 + checksum: b0bf00ea99b25b815b421fc79e451b3929101b0d94cf12e902b9bbbdfe8adc2cfe4a4bd45a075e6bf9f4d7c58e32792ef94837d5ca80c96e1eb633f6897a4b83 languageName: node linkType: hard @@ -17994,25 +17880,24 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"react-joyride@npm:^2.4.0": - version: 2.8.1 - resolution: "react-joyride@npm:2.8.1" +"react-joyride@npm:next": + version: 3.0.0-7 + resolution: "react-joyride@npm:3.0.0-7" dependencies: "@gilbarbara/deep-equal": ^0.3.1 - deep-diff: ^1.0.2 + "@gilbarbara/hooks": ^0.8.2 + "@gilbarbara/types": ^0.2.2 deepmerge: ^4.3.1 is-lite: ^1.2.1 - react-floater: ^0.7.9 + react-floater: ^0.9.5-4 react-innertext: ^1.1.5 - react-is: ^16.13.1 scroll: ^3.0.1 scrollparent: ^2.1.0 - tree-changes: ^0.11.2 - type-fest: ^4.15.0 + tree-changes-hook: ^0.11.2 peerDependencies: - react: 15 - 18 - react-dom: 15 - 18 - checksum: 555394e3f9f2cd91602a8f639c28a9f881d2c8ea82ad93054fb9548cf407da3e17c23e4fc44bca04b4d0acd9955cb3886a61c5f4ebdcee6c512737272a27b38e + react: 16.8 - 19 + react-dom: 16.8 - 19 + checksum: 9730ff2399aec74aecc972d0b33b3782d3763ff4d063724ecbdb3998d04fc413d42d36622c2930dc15d5f90d98eec588ceb1252f3e20461e8b5b10c58edd125f languageName: node linkType: hard @@ -18039,10 +17924,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "react-markdown@npm:^9.0.1": - version: 9.0.1 - resolution: "react-markdown@npm:9.0.1" + version: 9.1.0 + resolution: "react-markdown@npm:9.1.0" dependencies: "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 devlop: ^1.0.0 hast-util-to-jsx-runtime: ^2.0.0 html-url-attributes: ^3.0.0 @@ -18055,7 +17941,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: "@types/react": ">=18" react: ">=18" - checksum: ca1daa650d48b84a5a9771683cdb3f3d2d418247ce0faf73ede3207c65f2a21cdebb9df37afda67f6fc8f0f0a7b9ce00eb239781954a4d6c7ad88ea4df068add + checksum: d78ca3b6bea23a3383d067ad8eb0aec3a22a4500663f32773be45ad38572b5f1b823184fafc85c1a35ff6290bddea42b003dc7bdfc02cf20a9e0163ecd3ea605 languageName: node linkType: hard @@ -18088,17 +17974,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"react-quill@npm:^2.0.0": - version: 2.0.0 - resolution: "react-quill@npm:2.0.0" +"react-quill-new@npm:^3.4.6": + version: 3.5.0 + resolution: "react-quill-new@npm:3.5.0" dependencies: - "@types/quill": ^1.3.10 - lodash: ^4.17.4 - quill: ^1.3.7 + lodash-es: ^4.17.21 + quill: ~2.0.2 peerDependencies: - react: ^16 || ^17 || ^18 - react-dom: ^16 || ^17 || ^18 - checksum: 568e28656ae3a40944d5c4cc9d35accc21834cf15b61a74af4566d8772eb152ce65c0d5ea6da65918cb5c9453c1a2041c60c4a19819bf319bee2e067b613d32b + quill-delta: ^5.1.0 + react: ^16 || ^17 || ^18 || ^19 + react-dom: ^16 || ^17 || ^18 || ^19 + checksum: 17625fabd52b81e53dd8f11bf3691a380ba4e749670a30b64375786148b9e90ae0bbac258471f4ae3f7716c71d7b9602a7d6da4ce13675ac55981c26811f10e3 languageName: node linkType: hard @@ -18142,6 +18028,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"react-resize-detector@npm:^12.0.2": + version: 12.0.2 + resolution: "react-resize-detector@npm:12.0.2" + dependencies: + lodash: ^4.17.21 + peerDependencies: + react: ^18.0.0 || ^19.0.0 + checksum: 44f8adb5841c78f597894b9d3888acb651f797c0ffba553a8dc038759f9b7ed5d982497427a4e998d29a9bc983e795284c8bae984b2232579e3f9faa10e438a6 + languageName: node + linkType: hard + "react-resize-detector@npm:^7.0.0": version: 7.1.2 resolution: "react-resize-detector@npm:7.1.2" @@ -18212,31 +18109,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "react-signature-canvas@npm:^1.0.6": - version: 1.0.6 - resolution: "react-signature-canvas@npm:1.0.6" + version: 1.0.7 + resolution: "react-signature-canvas@npm:1.0.7" dependencies: signature_pad: ^2.3.2 trim-canvas: ^0.1.0 peerDependencies: prop-types: ^15.5.8 - react: 0.14 - 18 - react-dom: 0.14 - 18 - checksum: 4fe5f0c41162f7c26dd5e8dc8305583016f75eb95a3f6c1207b6234d20b7e3348033e20d26f9f8d0d59c57a63a1679e27e4e5d285f2537ea25f8cc73f3626c71 - languageName: node - linkType: hard - -"react-sortable-hoc@npm:^2.0.0": - version: 2.0.0 - resolution: "react-sortable-hoc@npm:2.0.0" - dependencies: - "@babel/runtime": ^7.2.0 - invariant: ^2.2.4 - prop-types: ^15.5.7 - peerDependencies: - prop-types: ^15.5.7 - react: ^16.3.0 || ^17.0.0 - react-dom: ^16.3.0 || ^17.0.0 - checksum: c4930856eb8e9be638220423d452ddaab834aa43ff76069eeb057c6a5f1d0538f9e43c17bedd34bfd2a66ff4aa1e289557821d792db73a42ebf061bd1c92a423 + react: 0.14 - 19 + react-dom: 0.14 - 19 + checksum: 4693892f13c93e26e47eed07c0ee280e9555657fbc22e879fe680a13e813d97ddb6fc4a94f186651231cb15a11efc932b7e2a7f6589cabf4f5e3404302a36b94 languageName: node linkType: hard @@ -18254,15 +18136,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "react-textarea-autosize@npm:^8.3.2": - version: 8.5.3 - resolution: "react-textarea-autosize@npm:8.5.3" + version: 8.5.9 + resolution: "react-textarea-autosize@npm:8.5.9" dependencies: "@babel/runtime": ^7.20.13 use-composed-ref: ^1.3.0 use-latest: ^1.2.1 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: b317c3763f37a89621bbafd0e6e2d068e7876790a5ae77f497adfd6ba9334ceea138c8a0b7d907bae0f79c765cb24e8b2ca2b8033b4144c0bce28571a3658921 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: d87a563251f74c8fe779a4a28a25ac4487ec16fe13b54d39e0341578e119a1c781d99e059ed8cba4965e0c3ae94e73614430cc9b5d50c538ad1573897239cb14 languageName: node linkType: hard @@ -18277,8 +18159,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "react-use@npm:^17.3.2": - version: 17.5.0 - resolution: "react-use@npm:17.5.0" + version: 17.6.0 + resolution: "react-use@npm:17.6.0" dependencies: "@types/js-cookie": ^2.2.6 "@xobotyi/scrollbar-width": ^1.9.5 @@ -18286,7 +18168,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: fast-deep-equal: ^3.1.3 fast-shallow-equal: ^1.0.0 js-cookie: ^2.2.1 - nano-css: ^5.6.1 + nano-css: ^5.6.2 react-universal-interface: ^0.6.2 resize-observer-polyfill: ^1.5.1 screenfull: ^5.1.0 @@ -18297,7 +18179,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: react: "*" react-dom: "*" - checksum: d3164db313f27aa701dcf87177861db6e19624ea7dd8bc81805352af7f6bf04072010b9776da4ac458d6bd318759ee69b12763d96098d83c75b7d66ffc689e3a + checksum: c76de18b56b554bfbb28199e4ad4098f4e4ab15f0d3cefef661a7a5e6a4c167ae85390fc7bc648c34b80c17498abf1e8223d7078f3e51c09e4da70e11a41a54e languageName: node linkType: hard @@ -18355,6 +18237,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"react@npm:18.3.0": + version: 18.3.0 + resolution: "react@npm:18.3.0" + dependencies: + loose-envify: ^1.1.0 + checksum: f1389bf7f9cc9295fded895635e54c4bf73626a8ea51afaa2da4988f89e71b68f249c1782f832d5912ba7d437da9292fc44ecf7c3dff072879253df93d703a10 + languageName: node + linkType: hard + "react@npm:^18.2.0": version: 18.3.1 resolution: "react@npm:18.3.1" @@ -18498,27 +18389,28 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"reflect.getprototypeof@npm:^1.0.4": - version: 1.0.6 - resolution: "reflect.getprototypeof@npm:1.0.6" +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.10 + resolution: "reflect.getprototypeof@npm:1.0.10" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 define-properties: ^1.2.1 - es-abstract: ^1.23.1 + es-abstract: ^1.23.9 es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - globalthis: ^1.0.3 - which-builtin-type: ^1.1.3 - checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.7 + get-proto: ^1.0.1 + which-builtin-type: ^1.2.1 + checksum: ccc5debeb66125e276ae73909cecb27e47c35d9bb79d9cc8d8d055f008c58010ab8cb401299786e505e4aab733a64cba9daf5f312a58e96a43df66adad221870 languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" dependencies: regenerate: ^1.4.2 - checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf + checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63 languageName: node linkType: hard @@ -18536,56 +18428,49 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"regenerator-runtime@npm:^0.14.0": - version: 0.14.1 - resolution: "regenerator-runtime@npm:0.14.1" - checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.2": - version: 0.15.2 - resolution: "regenerator-transform@npm:0.15.2" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": - version: 1.5.2 - resolution: "regexp.prototype.flags@npm:1.5.2" +"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": + version: 1.5.4 + resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: - call-bind: ^1.0.6 + call-bind: ^1.0.8 define-properties: ^1.2.1 es-errors: ^1.3.0 - set-function-name: ^2.0.1 - checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + get-proto: ^1.0.1 + gopd: ^1.2.0 + set-function-name: ^2.0.2 + checksum: 18cb667e56cb328d2dda569d7f04e3ea78f2683135b866d606538cf7b1d4271f7f749f09608c877527799e6cf350e531368f3c7a20ccd1bb41048a48926bdeeb languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" dependencies: - "@babel/regjsgen": ^0.8.0 regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.1.0 - regjsparser: ^0.9.1 + regenerate-unicode-properties: ^10.2.0 + regjsgen: ^0.8.0 + regjsparser: ^0.12.0 unicode-match-property-ecmascript: ^2.0.0 unicode-match-property-value-ecmascript: ^2.1.0 - checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 + checksum: 67d3c4a3f6c99bc80b5d690074a27e6f675be1c1739f8a9acf028fbc36f1a468472574ea65e331e217995198ba4404d7878f3cb3739a73552dd3c70d3fb7f8e6 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: a1d925ff14a4b2be774e45775ee6b33b256f89c42d480e6d85152d2133f18bd3d6af662161b226fa57466f7efec367eaf7ccd2a58c0ec2a1306667ba2ad07b0d languageName: node linkType: hard -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" dependencies: - jsesc: ~0.5.0 + jsesc: ~3.0.2 bin: regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + checksum: 094b55b0ab3e1fd58f8ce5132a1d44dab08d91f7b0eea4132b0157b303ebb8ded20a9cbd893d25402d2aeddb23fac1f428ab4947b295d6fa51dd1c334a9e76f0 languageName: node linkType: hard @@ -18640,8 +18525,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "remark-gfm@npm:^4.0.0": - version: 4.0.0 - resolution: "remark-gfm@npm:4.0.0" + version: 4.0.1 + resolution: "remark-gfm@npm:4.0.1" dependencies: "@types/mdast": ^4.0.0 mdast-util-gfm: ^3.0.0 @@ -18649,7 +18534,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: remark-parse: ^11.0.0 remark-stringify: ^11.0.0 unified: ^11.0.0 - checksum: 84bea84e388061fbbb697b4b666089f5c328aa04d19dc544c229b607446bc10902e46b67b9594415a1017bbbd7c811c1f0c30d36682c6d1a6718b66a1558261b + checksum: b278f51c4496f15ad868b72bf2eb2066c23a0892b5885544d3a4c233c964d44e51a0efe22d3fb33db4fbac92aefd51bb33453b8e73077b041a12b8269a02c17d languageName: node linkType: hard @@ -18666,15 +18551,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "remark-rehype@npm:^11.0.0": - version: 11.1.0 - resolution: "remark-rehype@npm:11.1.0" + version: 11.1.2 + resolution: "remark-rehype@npm:11.1.2" dependencies: "@types/hast": ^3.0.0 "@types/mdast": ^4.0.0 mdast-util-to-hast: ^13.0.0 unified: ^11.0.0 vfile: ^6.0.0 - checksum: f0c731f0ab92a122e7f9c9bcbd10d6a31fdb99f0ea3595d232ddd9f9d11a308c4ec0aff4d56e1d0d256042dfad7df23b9941e50b5038da29786959a5926814e1 + checksum: 6eab55cb3464ec01d8e002cc9fe02ae57f48162899693fd53b5ba553ac8699dae7b55fce9df7131a5981313b19b495d6fbfa98a9d6bd243e7485591364d9b5b3 languageName: node linkType: hard @@ -18814,22 +18699,22 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "resolve.exports@npm:^2.0.0": - version: 2.0.2 - resolution: "resolve.exports@npm:2.0.2" - checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df languageName: node linkType: hard "resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" + version: 1.22.10 + resolution: "resolve@npm:1.22.10" dependencies: - is-core-module: ^2.13.0 + is-core-module: ^2.16.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf languageName: node linkType: hard @@ -18847,15 +18732,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "resolve@patch:resolve@^1.1.6#~builtin<compat/resolve>, resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.14.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.17.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.19.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.1#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.4#~builtin<compat/resolve>": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin<compat/resolve>::version=1.22.8&hash=c3c19d" + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin<compat/resolve>::version=1.22.10&hash=c3c19d" dependencies: - is-core-module: ^2.13.0 + is-core-module: ^2.16.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d languageName: node linkType: hard @@ -18897,16 +18782,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 64cb3142ac5e9ad689aca289585cb41d22521f4571f73e9488af39f6b1bd62f0cbb3d65e2ecc768ec6494052523f473f1eb4b55c3e9014b3590c17fc6a03e22a languageName: node linkType: hard "rfdc@npm:^1.3.0": - version: 1.3.1 - resolution: "rfdc@npm:1.3.1" - checksum: d5d1e930aeac7e0e0a485f97db1356e388bdbeff34906d206fe524dd5ada76e95f186944d2e68307183fdc39a54928d4426bbb6734851692cfe9195efba58b79 + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 3b05bd55062c1d78aaabfcea43840cdf7e12099968f368e9a4c3936beb744adb41cbdb315eac6d4d8c6623005d6f87fdf16d8a10e1ff3722e84afea7281c8d13 languageName: node linkType: hard @@ -18932,17 +18817,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"rimraf@npm:^5.0.5": - version: 5.0.5 - resolution: "rimraf@npm:5.0.5" - dependencies: - glob: ^10.3.7 - bin: - rimraf: dist/esm/bin.mjs - checksum: d66eef829b2e23b16445f34e73d75c7b7cf4cbc8834b04720def1c8f298eb0753c3d76df77325fad79d0a2c60470525d95f89c2475283ad985fd7441c32732d1 - languageName: node - linkType: hard - "ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": version: 2.0.2 resolution: "ripemd160@npm:2.0.2" @@ -19077,21 +18951,24 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "rollup-plugin-visualizer@npm:^5.9.2": - version: 5.12.0 - resolution: "rollup-plugin-visualizer@npm:5.12.0" + version: 5.14.0 + resolution: "rollup-plugin-visualizer@npm:5.14.0" dependencies: open: ^8.4.0 - picomatch: ^2.3.1 + picomatch: ^4.0.2 source-map: ^0.7.4 yargs: ^17.5.1 peerDependencies: + rolldown: 1.x rollup: 2.x || 3.x || 4.x peerDependenciesMeta: + rolldown: + optional: true rollup: optional: true bin: rollup-plugin-visualizer: dist/bin/cli.js - checksum: 17dc10a93d4bd457c8bb7796a57c284487fb00f4b9703a33a1a954f5d40c66a89b24aca98564569922456f4fa8f72281c3ef96a95502195e6930b3fac62fce8e + checksum: 8ef5b05c91bd74bc1bb536609dd0ef2f1995066ec623393d192d638c209620fd2318c902d185ae648873d0a2788131cbaec11595c91322f0c2661ef6a1cc7e42 languageName: node linkType: hard @@ -19105,8 +18982,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "rollup@npm:^2": - version: 2.79.1 - resolution: "rollup@npm:2.79.1" + version: 2.79.2 + resolution: "rollup@npm:2.79.2" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -19114,13 +18991,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: rollup: dist/bin/rollup - checksum: 6a2bf167b3587d4df709b37d149ad0300692cc5deb510f89ac7bdc77c8738c9546ae3de9322b0968e1ed2b0e984571f5f55aae28fa7de4cfcb1bc5402a4e2be6 + checksum: df7aa4c8b95245dede157b06ab71e1921de6080757d30e9bf31f8fb142064d12dda865e2bafbab4349588f43425b2965a290c9a5da1c048246a70fc21734ebd7 languageName: node linkType: hard "rollup@npm:^3.27.1": - version: 3.29.4 - resolution: "rollup@npm:3.29.4" + version: 3.29.5 + resolution: "rollup@npm:3.29.5" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -19128,31 +19005,35 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: rollup: dist/bin/rollup - checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e + checksum: 6f8304e58ac8170a715e61e46c4aa674b2ae2587ed2a712dab58f72e5e54803ae40b485fbe6b3e6a694f4c8f7a59ab936ccf9f6b686c7cfd1f1970fa9ecadf1a languageName: node linkType: hard "rollup@npm:^4.22.5": - version: 4.22.5 - resolution: "rollup@npm:4.22.5" - dependencies: - "@rollup/rollup-android-arm-eabi": 4.22.5 - "@rollup/rollup-android-arm64": 4.22.5 - "@rollup/rollup-darwin-arm64": 4.22.5 - "@rollup/rollup-darwin-x64": 4.22.5 - "@rollup/rollup-linux-arm-gnueabihf": 4.22.5 - "@rollup/rollup-linux-arm-musleabihf": 4.22.5 - "@rollup/rollup-linux-arm64-gnu": 4.22.5 - "@rollup/rollup-linux-arm64-musl": 4.22.5 - "@rollup/rollup-linux-powerpc64le-gnu": 4.22.5 - "@rollup/rollup-linux-riscv64-gnu": 4.22.5 - "@rollup/rollup-linux-s390x-gnu": 4.22.5 - "@rollup/rollup-linux-x64-gnu": 4.22.5 - "@rollup/rollup-linux-x64-musl": 4.22.5 - "@rollup/rollup-win32-arm64-msvc": 4.22.5 - "@rollup/rollup-win32-ia32-msvc": 4.22.5 - "@rollup/rollup-win32-x64-msvc": 4.22.5 - "@types/estree": 1.0.6 + version: 4.41.1 + resolution: "rollup@npm:4.41.1" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.41.1 + "@rollup/rollup-android-arm64": 4.41.1 + "@rollup/rollup-darwin-arm64": 4.41.1 + "@rollup/rollup-darwin-x64": 4.41.1 + "@rollup/rollup-freebsd-arm64": 4.41.1 + "@rollup/rollup-freebsd-x64": 4.41.1 + "@rollup/rollup-linux-arm-gnueabihf": 4.41.1 + "@rollup/rollup-linux-arm-musleabihf": 4.41.1 + "@rollup/rollup-linux-arm64-gnu": 4.41.1 + "@rollup/rollup-linux-arm64-musl": 4.41.1 + "@rollup/rollup-linux-loongarch64-gnu": 4.41.1 + "@rollup/rollup-linux-powerpc64le-gnu": 4.41.1 + "@rollup/rollup-linux-riscv64-gnu": 4.41.1 + "@rollup/rollup-linux-riscv64-musl": 4.41.1 + "@rollup/rollup-linux-s390x-gnu": 4.41.1 + "@rollup/rollup-linux-x64-gnu": 4.41.1 + "@rollup/rollup-linux-x64-musl": 4.41.1 + "@rollup/rollup-win32-arm64-msvc": 4.41.1 + "@rollup/rollup-win32-ia32-msvc": 4.41.1 + "@rollup/rollup-win32-x64-msvc": 4.41.1 + "@types/estree": 1.0.7 fsevents: ~2.3.2 dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -19163,6 +19044,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true "@rollup/rollup-darwin-x64": optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true "@rollup/rollup-linux-arm-gnueabihf": optional: true "@rollup/rollup-linux-arm-musleabihf": @@ -19171,10 +19056,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true "@rollup/rollup-linux-arm64-musl": optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true "@rollup/rollup-linux-powerpc64le-gnu": optional: true "@rollup/rollup-linux-riscv64-gnu": optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true "@rollup/rollup-linux-s390x-gnu": optional: true "@rollup/rollup-linux-x64-gnu": @@ -19191,7 +19080,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: rollup: dist/bin/rollup - checksum: 894b3d428b5a7f1db2245f50622ce65a3ad8f754265dd1da7dce133e39b315516dbcbac51e4fe100b44d59b168bac3f36ebaeb836fc9f7057d4972f44497d046 + checksum: 881b6ff4104b1a03c93f0292cb817a7baa420e40f6f74b64fe81b89606b5fee6b9b96a4d437fbeed61736e7bf8611894aa7f0e0942307ef0ff2882eb4d7e23ce languageName: node linkType: hard @@ -19243,40 +19132,51 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"safe-array-concat@npm:^1.1.2": - version: 1.1.2 - resolution: "safe-array-concat@npm:1.1.2" +"safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" dependencies: - call-bind: ^1.0.7 - get-intrinsic: ^1.2.4 - has-symbols: ^1.0.3 + call-bind: ^1.0.8 + call-bound: ^1.0.2 + get-intrinsic: ^1.2.6 + has-symbols: ^1.1.0 isarray: ^2.0.5 - checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + checksum: 00f6a68140e67e813f3ad5e73e6dedcf3e42a9fa01f04d44b0d3f7b1f4b257af876832a9bfc82ac76f307e8a6cc652e3cf95876048a26cbec451847cf6ae3707 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 +"safe-push-apply@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-push-apply@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + isarray: ^2.0.5 + checksum: 8c11cbee6dc8ff5cc0f3d95eef7052e43494591384015902e4292aef4ae9e539908288520ed97179cee17d6ffb450fe5f05a46ce7a1749685f7524fd568ab5db languageName: node linkType: hard -"safe-regex-test@npm:^1.0.3": - version: 1.0.3 - resolution: "safe-regex-test@npm:1.0.3" +"safe-regex-test@npm:^1.0.3, safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" dependencies: - call-bind: ^1.0.6 + call-bound: ^1.0.2 es-errors: ^1.3.0 - is-regex: ^1.1.4 - checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 + is-regex: ^1.2.1 + checksum: 3c809abeb81977c9ed6c869c83aca6873ea0f3ab0f806b8edbba5582d51713f8a6e9757d24d2b4b088f563801475ea946c8e77e7713e8c65cdd02305b6caedab languageName: node linkType: hard @@ -19288,9 +19188,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "sax@npm:^1.2.4": - version: 1.3.0 - resolution: "sax@npm:1.3.0" - checksum: 238ab3a9ba8c8f8aaf1c5ea9120386391f6ee0af52f1a6a40bbb6df78241dd05d782f2359d614ac6aae08c4c4125208b456548a6cf68625aa4fe178486e63ecd + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 3ad64df16b743f0f2eb7c38ced9692a6d924f1cd07bbe45c39576c2cf50de8290d9d04e7b2228f924c7d05fecc4ec5cf651423278e0c7b63d260c387ef3af84a languageName: node linkType: hard @@ -19312,7 +19212,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"scheduler@npm:^0.23.2": +"scheduler@npm:^0.23.1, scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" dependencies: @@ -19321,7 +19221,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": +"schema-utils@npm:^3.0.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: @@ -19332,15 +19232,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0": - version: 4.2.0 - resolution: "schema-utils@npm:4.2.0" +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" dependencies: "@types/json-schema": ^7.0.9 ajv: ^8.9.0 ajv-formats: ^2.1.1 ajv-keywords: ^5.1.0 - checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde + checksum: d798b341ffa1371f8471629e8861af3aa99e8e15b89da2c0db28c5a80a02ee8c6ffc7daefbe28a2b8c1bc8e3f3e02d028775145d7ab3d9d1a413a9651a835466 languageName: node linkType: hard @@ -19417,13 +19317,11 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.6.0 - resolution: "semver@npm:7.6.0" - dependencies: - lru-cache: ^6.0.0 + version: 7.7.2 + resolution: "semver@npm:7.7.2" bin: semver: bin/semver.js - checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c + checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621 languageName: node linkType: hard @@ -19436,9 +19334,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" dependencies: debug: 2.6.9 depd: 2.0.0 @@ -19453,7 +19351,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: on-finished: 2.4.1 range-parser: ~1.2.1 statuses: 2.0.1 - checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f languageName: node linkType: hard @@ -19466,7 +19364,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": +"serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: @@ -19490,19 +19388,19 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" +"serve-static@npm:1.16.2": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" dependencies: - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 parseurl: ~1.3.3 - send: 0.18.0 - checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + send: 0.19.0 + checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759 languageName: node linkType: hard -"set-function-length@npm:^1.2.1": +"set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" dependencies: @@ -19516,7 +19414,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": +"set-function-name@npm:^2.0.2": version: 2.0.2 resolution: "set-function-name@npm:2.0.2" dependencies: @@ -19535,6 +19433,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"set-proto@npm:^1.0.0": + version: 1.0.0 + resolution: "set-proto@npm:1.0.0" + dependencies: + dunder-proto: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + checksum: ec27cbbe334598547e99024403e96da32aca3e530583e4dba7f5db1c43cbc4affa9adfbd77c7b2c210b9b8b2e7b2e600bad2a6c44fd62e804d8233f96bbb62f4 + languageName: node + linkType: hard + "setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" @@ -19601,9 +19510,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "shell-quote@npm:^1.8.1": - version: 1.8.1 - resolution: "shell-quote@npm:1.8.1" - checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b + version: 1.8.2 + resolution: "shell-quote@npm:1.8.2" + checksum: 1e97b62ced1c4c5135015978ebf273bed1f425a68cf84163e83fbb0f34b3ff9471e656720dab2b7cbb4ae0f58998e686d17d166c28dfb3662acd009e8bd7faed languageName: node linkType: hard @@ -19620,15 +19529,51 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": - version: 1.0.6 - resolution: "side-channel@npm:1.0.6" +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" dependencies: - call-bind: ^1.0.7 es-errors: ^1.3.0 - get-intrinsic: ^1.2.4 - object-inspect: ^1.13.1 - checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 + object-inspect: ^1.13.3 + checksum: 603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.5 + object-inspect: ^1.13.3 + checksum: 42501371cdf71f4ccbbc9c9e2eb00aaaab80a4c1c429d5e8da713fd4d39ef3b8d4a4b37ed4f275798a65260a551a7131fd87fe67e922dba4ac18586d6aab8b06 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.5 + object-inspect: ^1.13.3 + side-channel-map: ^1.0.1 + checksum: a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: ^1.3.0 + object-inspect: ^1.13.3 + side-channel-list: ^1.0.0 + side-channel-map: ^1.0.1 + side-channel-weakmap: ^1.0.2 + checksum: bf73d6d6682034603eb8e99c63b50155017ed78a522d27c2acec0388a792c3ede3238b878b953a08157093b85d05797217d270b7666ba1f111345fbe933380ff languageName: node linkType: hard @@ -19653,36 +19598,33 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"simplebar-core@npm:^1.2.4": - version: 1.2.4 - resolution: "simplebar-core@npm:1.2.4" +"simplebar-core@npm:^1.3.1": + version: 1.3.1 + resolution: "simplebar-core@npm:1.3.1" dependencies: - "@types/lodash-es": ^4.17.6 - can-use-dom: ^0.1.0 lodash: ^4.17.21 lodash-es: ^4.17.21 - checksum: 9bef0a29cc2ddba488776bc05eac6cbf3daa6e72fbcb54ff288cbbb2e64cadf22cc378ac3627f86c32c29ddf9f63d7accf8772e4013318aaba353625869ae866 + checksum: 0b31edc1e44b554b61dca48bd072cad6ffa28ba9d893098cfe0292369f583eff6fc0c016d612609aeddff093eb04b7c29250ec57cf3067a1e4fdc3cfe18c6ceb languageName: node linkType: hard "simplebar-react@npm:^3.2.4": - version: 3.2.4 - resolution: "simplebar-react@npm:3.2.4" + version: 3.3.1 + resolution: "simplebar-react@npm:3.3.1" dependencies: - simplebar-core: ^1.2.4 + simplebar-core: ^1.3.1 peerDependencies: react: ">=16.8.0" - checksum: 0355a7ccb99114de99c84c7e548058f299c716d3fb2ac769bdb83138da19e75936f84698b9f4134d17be84322845a4290093f37b2f3c3ee2299e3bd8863c6196 + checksum: bbde967dba2591ef2734beb43c5781714bb08bab331ef808b7204360f915d1f18fcd49f23ff28d8509888e7d435d2d2dbce6631f0d09becd51a45c9296bee493 languageName: node linkType: hard "simplebar@npm:*, simplebar@npm:^6.2.5": - version: 6.2.5 - resolution: "simplebar@npm:6.2.5" + version: 6.3.1 + resolution: "simplebar@npm:6.3.1" dependencies: - can-use-dom: ^0.1.0 - simplebar-core: ^1.2.4 - checksum: 351b3757af18d4d49928fbd44793307ca7384e363c73a740a0e542307f6af75f4803ddbb9e0e595126a487a4ba6b5d98cd397880d7217c6b1b442eb5a6c509c5 + simplebar-core: ^1.3.1 + checksum: 911349310655927fb707ec1ce5cc9237a256297cfd46be80f794daff675f64d7d54ac4a26018a639b12ec42ee40e95870adb6aa6f48549a4695507dbcb92166a languageName: node linkType: hard @@ -19704,6 +19646,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"size-sensor@npm:^1.0.1": + version: 1.0.2 + resolution: "size-sensor@npm:1.0.2" + checksum: de7050178ae9afee3388eb9191af0902b30ef83c26e8c9d9c203e1b560e270b947d978e4f56d211802112d09ef296931fa612f69155a483900f3b4717a0750d7 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -19757,39 +19706,30 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.3 - resolution: "socks-proxy-agent@npm:8.0.3" + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" dependencies: - agent-base: ^7.1.1 + agent-base: ^7.1.2 debug: ^4.3.4 - socks: ^2.7.1 - checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 + socks: ^2.8.3 + checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d languageName: node linkType: hard -"socks@npm:^2.7.1": - version: 2.8.3 - resolution: "socks@npm:2.8.3" +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" dependencies: ip-address: ^9.0.5 smart-buffer: ^4.2.0 - checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd - languageName: node - linkType: hard - -"sonic-forest@npm:^1.0.0": - version: 1.0.0 - resolution: "sonic-forest@npm:1.0.0" - peerDependencies: - tslib: 2 - checksum: 4d027f7fdf7c09ee2065cd3ace74f57696545e97f9b518bc0f721728622c3949d45468b3c0a8f736af657fa69bee60a82534eb1079e97832fd50205783fa36b4 + checksum: cd1edc924475d5dfde534adf66038df7e62c7343e6b8c0113e52dc9bb6a0a10e25b2f136197f379d695f18e8f0f2b7f6e42977bf720ddbee912a851201c396ad languageName: node linkType: hard -"source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b languageName: node linkType: hard @@ -19930,12 +19870,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" dependencies: minipass: ^7.0.3 - checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + checksum: ef4b6b0ae47b4a69896f5f1c4375f953b9435388c053c36d27998bc3d73e046969ccde61ab659e679142971a0b08e50478a1228f62edb994105b280f17900c98 languageName: node linkType: hard @@ -20023,11 +19963,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" + version: 1.1.0 + resolution: "stop-iteration-iterator@npm:1.1.0" dependencies: - internal-slot: ^1.0.4 - checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + es-errors: ^1.3.0 + internal-slot: ^1.1.0 + checksum: be944489d8829fb3bdec1a1cc4a2142c6b6eb317305eeace1ece978d286d6997778afa1ae8cb3bd70e2b274b9aa8c69f93febb1e15b94b1359b11058f9d3c3a1 languageName: node linkType: hard @@ -20113,46 +20054,72 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.10": - version: 4.0.11 - resolution: "string.prototype.matchall@npm:4.0.11" +"string.prototype.includes@npm:^2.0.1": + version: 2.0.1 + resolution: "string.prototype.includes@npm:2.0.1" dependencies: call-bind: ^1.0.7 define-properties: ^1.2.1 - es-abstract: ^1.23.2 + es-abstract: ^1.23.3 + checksum: ed4b7058b092f30d41c4df1e3e805eeea92479d2c7a886aa30f42ae32fde8924a10cc99cccc99c29b8e18c48216608a0fe6bf887f8b4aadf9559096a758f313a + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.12": + version: 4.0.12 + resolution: "string.prototype.matchall@npm:4.0.12" + dependencies: + call-bind: ^1.0.8 + call-bound: ^1.0.3 + define-properties: ^1.2.1 + es-abstract: ^1.23.6 es-errors: ^1.3.0 es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - regexp.prototype.flags: ^1.5.2 + get-intrinsic: ^1.2.6 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + internal-slot: ^1.1.0 + regexp.prototype.flags: ^1.5.3 set-function-name: ^2.0.2 - side-channel: ^1.0.6 - checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae + side-channel: ^1.1.0 + checksum: 98a09d6af91bfc6ee25556f3d7cd6646d02f5f08bda55d45528ed273d266d55a71af7291fe3fc76854deffb9168cc1a917d0b07a7d5a178c7e9537c99e6d2b57 languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.9": - version: 1.2.9 - resolution: "string.prototype.trim@npm:1.2.9" +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" dependencies: - call-bind: ^1.0.7 + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" + dependencies: + call-bind: ^1.0.8 + call-bound: ^1.0.2 + define-data-property: ^1.1.4 define-properties: ^1.2.1 - es-abstract: ^1.23.0 + es-abstract: ^1.23.5 es-object-atoms: ^1.0.0 - checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 + has-property-descriptors: ^1.0.2 + checksum: 87659cd8561237b6c69f5376328fda934693aedde17bb7a2c57008e9d9ff992d0c253a391c7d8d50114e0e49ff7daf86a362f7961cf92f7564cd01342ca2e385 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimend@npm:1.0.8" +"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.2 define-properties: ^1.2.1 es-object-atoms: ^1.0.0 - checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + checksum: cb86f639f41d791a43627784be2175daa9ca3259c7cb83e7a207a729909b74f2ea0ec5d85de5761e6835e5f443e9420c6ff3f63a845378e4a61dd793177bc287 languageName: node linkType: hard @@ -20280,7 +20247,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"style-to-object@npm:^1.0.0": +"style-to-js@npm:^1.0.0": + version: 1.1.16 + resolution: "style-to-js@npm:1.1.16" + dependencies: + style-to-object: 1.0.8 + checksum: 1f424ca17d923090821197f27e077e88bcf92b15274157f20330a18405f52a66395232546dc694c776d1a8f1868dabe15738532e18ce59a0683b046610bb4964 + languageName: node + linkType: hard + +"style-to-object@npm:1.0.8": version: 1.0.8 resolution: "style-to-object@npm:1.0.8" dependencies: @@ -20290,40 +20266,33 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "styled-components@npm:^6.1.8": - version: 6.1.8 - resolution: "styled-components@npm:6.1.8" + version: 6.1.18 + resolution: "styled-components@npm:6.1.18" dependencies: - "@emotion/is-prop-valid": 1.2.1 - "@emotion/unitless": 0.8.0 - "@types/stylis": 4.2.0 + "@emotion/is-prop-valid": 1.2.2 + "@emotion/unitless": 0.8.1 + "@types/stylis": 4.2.5 css-to-react-native: 3.2.0 - csstype: 3.1.2 - postcss: 8.4.31 + csstype: 3.1.3 + postcss: 8.4.49 shallowequal: 1.1.0 - stylis: 4.3.1 - tslib: 2.5.0 + stylis: 4.3.2 + tslib: 2.6.2 peerDependencies: react: ">= 16.8.0" react-dom: ">= 16.8.0" - checksum: 367858097ca57911cc310ddf95d16fed162fbb1d2f187366b33ce5e6e22c324f9bcc7206686624a3edd15e3e9605875c8c041ac5ffb430bbee98f1ad0be71604 - languageName: node - linkType: hard - -"stylis@npm:4.3.1": - version: 4.3.1 - resolution: "stylis@npm:4.3.1" - checksum: d365f1b008677b2147e8391e9cf20094a4202a5f9789562e7d9d0a3bd6f0b3067d39e8fd17cce5323903a56f6c45388e3d839e9c0bb5a738c91726992b14966d + checksum: f6dfc215634c7974210fc235c7e543bbc45b316a23ce3c3ee4e5aa6d27952167d6a2bf8ace222122920707daa0241a0bf5e4d27a857d129c59f993c80333cc1f languageName: node linkType: hard -"stylis@npm:^4.0.13, stylis@npm:^4.1.1, stylis@npm:^4.1.3, stylis@npm:^4.3.0": +"stylis@npm:4.3.2": version: 4.3.2 resolution: "stylis@npm:4.3.2" checksum: 0faa8a97ff38369f47354376cd9f0def9bf12846da54c28c5987f64aaf67dcb6f00dce88a8632013bfb823b2c4d1d62a44f4ac20363a3505a7ab4e21b70179fc languageName: node linkType: hard -"stylis@npm:^4.3.4": +"stylis@npm:^4.1.1, stylis@npm:^4.1.3, stylis@npm:^4.3.0, stylis@npm:^4.3.4": version: 4.3.6 resolution: "stylis@npm:4.3.6" checksum: 4f56a087caace85b34c3a163cf9d662f58f42dc865b2447af5c3ee3588eebaffe90875fe294578cce26f172ff527cad2b01433f6e1ae156400ec38c37c79fd61 @@ -20348,12 +20317,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" +"supercluster@npm:^8.0.1": + version: 8.0.1 + resolution: "supercluster@npm:8.0.1" dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + kdbush: ^4.0.2 + checksum: 39d141f768a511efa53260252f9dab9a2ce0228b334e55482c8d3019e151932f05e1a9a0252d681737651b13c741c665542a6ddb40ec27de96159ea7ad41f7f4 languageName: node linkType: hard @@ -20407,8 +20376,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "svgo@npm:^3.0.0, svgo@npm:^3.0.2": - version: 3.2.0 - resolution: "svgo@npm:3.2.0" + version: 3.3.2 + resolution: "svgo@npm:3.3.2" dependencies: "@trysound/sax": 0.2.0 commander: ^7.2.0 @@ -20419,7 +20388,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: picocolors: ^1.0.0 bin: svgo: ./bin/svgo - checksum: 42168748a5586d85d447bec2867bc19814a4897f973ff023e6aad4ff19ba7408be37cf3736e982bb78e3f1e52df8785da5dca77a8ebc64c0ebd6fcf9915d2895 + checksum: a3f8aad597dec13ab24e679c4c218147048dc1414fe04e99447c5f42a6e077b33d712d306df84674b5253b98c9b84dfbfb41fdd08552443b04946e43d03e054e languageName: node linkType: hard @@ -20437,24 +20406,24 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"tapable@npm:^2.1.1, tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 +"tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1": + version: 2.2.2 + resolution: "tapable@npm:2.2.2" + checksum: 781b3666f4454eb506fd2bcd985c1994f2b93884ea88a7a2a5be956cad8337b31128a7591e771f7aab8e247993b2a0887d360a2d4f54382902ed89994c102740 languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.0.1 + mkdirp: ^3.0.1 + yallist: ^5.0.0 + checksum: 8485350c0688331c94493031f417df069b778aadb25598abdad51862e007c39d1dd5310702c7be4a6784731a174799d8885d2fde0484269aea205b724d7b2ffa languageName: node linkType: hard @@ -20475,15 +20444,15 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.10": - version: 5.3.10 - resolution: "terser-webpack-plugin@npm:5.3.10" +"terser-webpack-plugin@npm:^5.3.11": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" dependencies: - "@jridgewell/trace-mapping": ^0.3.20 + "@jridgewell/trace-mapping": ^0.3.25 jest-worker: ^27.4.5 - schema-utils: ^3.1.1 - serialize-javascript: ^6.0.1 - terser: ^5.26.0 + schema-utils: ^4.3.0 + serialize-javascript: ^6.0.2 + terser: ^5.31.1 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -20493,21 +20462,21 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true uglify-js: optional: true - checksum: bd6e7596cf815f3353e2a53e79cbdec959a1b0276f5e5d4e63e9d7c3c5bb5306df567729da287d1c7b39d79093e56863c569c42c6c24cc34c76aa313bd2cbcea + checksum: 13a1e67f1675a473b18d25cb0ce65c3f0a19b5e9a93213a99ea61dc4ca996ea93aa17a221965b526f5788d242836a8249ad00538fbb322e25cb69076eb55feab languageName: node linkType: hard -"terser@npm:^5.0.0, terser@npm:^5.10.0, terser@npm:^5.26.0": - version: 5.30.4 - resolution: "terser@npm:5.30.4" +"terser@npm:^5.0.0, terser@npm:^5.10.0, terser@npm:^5.31.1": + version: 5.39.2 + resolution: "terser@npm:5.39.2" dependencies: "@jridgewell/source-map": ^0.3.3 - acorn: ^8.8.2 + acorn: ^8.14.0 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 4e33a98d451a1175c83f668cb1dd34e1b4573890ba3081e0389e71e6552ca501ebfda5b15cddeab33585f7b4c13f2e7ad9ba9613655b9e36bc919fde48ba2dcd + checksum: 986a47896503c5bc6475c751d9445d4326de2e6f8b0be2c943b7726426ad0fe2385aacb9dce1dbc3aee13171595a0234411479bc855e6c730a51f23175132c84 languageName: node linkType: hard @@ -20616,6 +20585,16 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"tinyglobby@npm:^0.2.12": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: ^6.4.4 + picomatch: ^4.0.2 + checksum: 261e986e3f2062dec3a582303bad2ce31b4634b9348648b46828c000d464b012cf474e38f503312367d4117c3f2f18611992738fca684040758bba44c24de522 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -20623,13 +20602,6 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -20682,14 +20654,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "tough-cookie@npm:^4.1.2": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" dependencies: psl: ^1.1.33 punycode: ^2.1.1 universalify: ^0.2.0 url-parse: ^1.5.3 - checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc + checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c languageName: node linkType: hard @@ -20718,23 +20690,34 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"tree-changes@npm:^0.11.2": - version: 0.11.2 - resolution: "tree-changes@npm:0.11.2" +"tree-changes-hook@npm:^0.11.2": + version: 0.11.3 + resolution: "tree-changes-hook@npm:0.11.3" dependencies: "@gilbarbara/deep-equal": ^0.3.1 - is-lite: ^1.2.0 - checksum: 9fc7b78a702308d78cc14c27a1dd83207ee3e5327560276f5d17e26be2937f800c0084d64a8be7183cfc43153a1981c4236306e60980801605397e43fde6d948 + tree-changes: 0.11.3 + peerDependencies: + react: 16.8 - 19 + checksum: 40c36a90026d3ae48b42648ae63971f06d561c019f84d782b1e70214a8f923cb2dd013cdd583ec40243ac058091f8a28b847531004fdabf01101ad3e934b8edc languageName: node linkType: hard -"tree-changes@npm:^0.9.1": - version: 0.9.3 - resolution: "tree-changes@npm:0.9.3" +"tree-changes@npm:0.11.3": + version: 0.11.3 + resolution: "tree-changes@npm:0.11.3" dependencies: - "@gilbarbara/deep-equal": ^0.1.1 - is-lite: ^0.8.2 - checksum: 86d890b18e83f2a20e7257982aec62efa186abbb08de4cead1c8062c50793f5b3c5fd09f98d9f4b8784b921e830687c0ea9bdb42ef4abb2eb9d6782d8c56a673 + "@gilbarbara/deep-equal": ^0.3.1 + is-lite: ^1.2.1 + checksum: 4d50e1445ce3ecc0380fbe4b36817ebad23447629b75d8f4868f218b5038eb645671171d054e7a7f48bd8dbff8e4c8ec04d2f2bf2a08a3d75f8ecc945df42226 + languageName: node + linkType: hard + +"tree-dump@npm:^1.0.1": + version: 1.0.3 + resolution: "tree-dump@npm:1.0.3" + peerDependencies: + tslib: 2 + checksum: 0b545728ff6589c4026b618aa24b2af9b52ae59d5da71a4ea5a727e1b5585a9a1c7620caba6616c2540a6089fdc5d1e6e060efa4e288c6e78c899b462dbb2c90 languageName: node linkType: hard @@ -20788,8 +20771,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "ts-loader@npm:^9.5.1": - version: 9.5.1 - resolution: "ts-loader@npm:9.5.1" + version: 9.5.2 + resolution: "ts-loader@npm:9.5.2" dependencies: chalk: ^4.1.0 enhanced-resolve: ^5.0.0 @@ -20799,7 +20782,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependencies: typescript: "*" webpack: ^5.0.0 - checksum: 7cf396e656d905388ea2a9b5e82f16d3c955fda8d3df2fbf219f4bee16ff50a3c995c44ae3e584634e9443f056cec70bb3151add3917ffb4588ecd7394bac0ec + checksum: f4c117042e25434e733c4b70873adaa9a79b14c2b3d8e5db53bbfd42060289f8a3eb97cfff64c83123b735d954f0eaa0f60f093afb0682cd2d1d7fa17f81e223 languageName: node linkType: hard @@ -20842,13 +20825,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "tsconfig-paths-webpack-plugin@npm:^4.1.0": - version: 4.1.0 - resolution: "tsconfig-paths-webpack-plugin@npm:4.1.0" + version: 4.2.0 + resolution: "tsconfig-paths-webpack-plugin@npm:4.2.0" dependencies: chalk: ^4.1.0 enhanced-resolve: ^5.7.0 + tapable: ^2.2.1 tsconfig-paths: ^4.1.2 - checksum: f6e9a8a407e1a405b0f2531184296d9f033cb4fe5837282b757ab4a2f4cd82a3117e62c4b86d56c7d47749c7f1345aa438ec6417dbf64a0ec74a292fe9eae44d + checksum: b35e4da5fb4ee438267125f369220102a061824c1dd568cd84e9db2368b72581ec7b88db1a5fda180bba65ff7b7597b18561a24f1db9c9a85fdc803bea122aa6 languageName: node linkType: hard @@ -20882,10 +20866,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"tslib@npm:2.5.0": - version: 2.5.0 - resolution: "tslib@npm:2.5.0" - checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 +"tslib@npm:2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard @@ -20896,10 +20880,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad +"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a languageName: node linkType: hard @@ -21008,10 +20992,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"type-fest@npm:^4.15.0": - version: 4.17.0 - resolution: "type-fest@npm:4.17.0" - checksum: 0d571438a0efa5a0f7db9fc70ea51b8eb38ff5cff36b2b16b76d2214b55773d92c671a01b79b715b46acb5ec6becb24e59441d1f44bbf4abc585e7722b72e4d2 +"type-fest@npm:^4.1.0": + version: 4.41.0 + resolution: "type-fest@npm:4.41.0" + checksum: 7055c0e3eb188425d07403f1d5dc175ca4c4f093556f26871fe22041bc93d137d54bef5851afa320638ca1379106c594f5aa153caa654ac1a7f22c71588a4e80 languageName: node linkType: hard @@ -21025,55 +21009,56 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-buffer@npm:1.0.2" +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" dependencies: - call-bind: ^1.0.7 + call-bound: ^1.0.3 es-errors: ^1.3.0 - is-typed-array: ^1.1.13 - checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + is-typed-array: ^1.1.14 + checksum: 3fb91f0735fb413b2bbaaca9fabe7b8fc14a3fa5a5a7546bab8a57e755be0e3788d893195ad9c2b842620592de0e68d4c077d4c2c41f04ec25b8b5bb82fa9a80 languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.1": - version: 1.0.1 - resolution: "typed-array-byte-length@npm:1.0.1" +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" dependencies: - call-bind: ^1.0.7 + call-bind: ^1.0.8 for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + gopd: ^1.2.0 + has-proto: ^1.2.0 + is-typed-array: ^1.1.14 + checksum: cda9352178ebeab073ad6499b03e938ebc30c4efaea63a26839d89c4b1da9d2640b0d937fc2bd1f049eb0a38def6fbe8a061b601292ae62fe079a410ce56e3a6 languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.2": - version: 1.0.2 - resolution: "typed-array-byte-offset@npm:1.0.2" +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" dependencies: available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 + call-bind: ^1.0.8 for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + gopd: ^1.2.0 + has-proto: ^1.2.0 + is-typed-array: ^1.1.15 + reflect.getprototypeof: ^1.0.9 + checksum: 670b7e6bb1d3c2cf6160f27f9f529e60c3f6f9611c67e47ca70ca5cfa24ad95415694c49d1dbfeda016d3372cab7dfc9e38c7b3e1bb8d692cae13a63d3c144d7 languageName: node linkType: hard -"typed-array-length@npm:^1.0.6": - version: 1.0.6 - resolution: "typed-array-length@npm:1.0.6" +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" dependencies: call-bind: ^1.0.7 for-each: ^0.3.3 gopd: ^1.0.1 - has-proto: ^1.0.3 is-typed-array: ^1.1.13 possible-typed-array-names: ^1.0.0 - checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + reflect.getprototypeof: ^1.0.6 + checksum: deb1a4ffdb27cd930b02c7030cb3e8e0993084c643208e52696e18ea6dd3953dfc37b939df06ff78170423d353dc8b10d5bae5796f3711c1b3abe52872b3774c languageName: node linkType: hard @@ -21184,42 +21169,46 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "ua-parser-js@npm:^0.7.34": - version: 0.7.37 - resolution: "ua-parser-js@npm:0.7.37" - checksum: 9e91a66171aa16c74680cfac84af6ed7ecdeb508ff7c90a55222f56c63172da2d98d2478763e9469c940415fe29c45a56ae51fec1c19a498e7a3b293f7b3b874 + version: 0.7.40 + resolution: "ua-parser-js@npm:0.7.40" + bin: + ua-parser-js: script/cli.js + checksum: c8f69573c336cbf0f4341e7fe93a8d7082acf39dba4e135b704f06ad240f585d4b38fb44fd3cad92c97a015128e9fe2e653b39c3b6c0919f8a8af3be02d79cc2 languageName: node linkType: hard "ua-parser-js@npm:^1.0.33, ua-parser-js@npm:^1.0.35": - version: 1.0.37 - resolution: "ua-parser-js@npm:1.0.37" - checksum: 4d481c720d523366d7762dc8a46a1b58967d979aacf786f9ceceb1cd767de069f64a4bdffb63956294f1c0696eb465ddb950f28ba90571709e33521b4bd75e07 + version: 1.0.40 + resolution: "ua-parser-js@npm:1.0.40" + bin: + ua-parser-js: script/cli.js + checksum: ae555a33dc9395dd877e295d6adbf5634e047aad7c3358328830218f3ca3a6233e35848cd355465a7612f269860e8029984389282940c7a27c9af4dfcdbba8c3 languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" dependencies: - call-bind: ^1.0.2 + call-bound: ^1.0.3 has-bigints: ^1.0.2 - has-symbols: ^1.0.3 - which-boxed-primitive: ^1.0.2 - checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + has-symbols: ^1.1.0 + which-boxed-primitive: ^1.1.1 + checksum: 729f13b84a5bfa3fead1d8139cee5c38514e63a8d6a437819a473e241ba87eeb593646568621c7fc7f133db300ef18d65d1a5a60dc9c7beb9000364d93c581df languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 46331c7d6016bf85b3e8f20c159d62f5ae471aba1eb3dc52fff35a0259d58dcc7d592d4cc4f00c5f9243fa738a11cfa48bd20203040d4a9e6bc25e807fab7ab3 languageName: node linkType: hard "unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 languageName: node linkType: hard @@ -21234,9 +21223,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae languageName: node linkType: hard @@ -21247,10 +21236,10 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"unicorn-magic@npm:^0.1.0": - version: 0.1.0 - resolution: "unicorn-magic@npm:0.1.0" - checksum: 48c5882ca3378f380318c0b4eb1d73b7e3c5b728859b060276e0a490051d4180966beeb48962d850fd0c6816543bcdfc28629dcd030bb62a286a2ae2acb5acb6 +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: bdd7d7c522f9456f32a0b77af23f8854f9a7db846088c3868ec213f9550683ab6a2bdf3803577eacbafddb4e06900974385841ccb75338d17346ccef45f9cb01 languageName: node linkType: hard @@ -21284,21 +21273,21 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + unique-slug: ^5.0.0 + checksum: 6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df languageName: node linkType: hard -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + checksum: 222d0322bc7bbf6e45c08967863212398313ef73423f4125e075f893a02405a5ffdbaaf150f7dd1e99f8861348a486dd079186d27c5f2c60e465b7dcbb1d3e5b languageName: node linkType: hard @@ -21419,17 +21408,17 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.13": - version: 1.0.13 - resolution: "update-browserslist-db@npm:1.0.13" +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 + escalade: ^3.2.0 + picocolors: ^1.1.1 peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 + checksum: 7b6d8d08c34af25ee435bccac542bedcb9e57c710f3c42421615631a80aa6dd28b0a81c9d2afbef53799d482fb41453f714b8a7a0a8003e3b4ec8fb1abb819af languageName: node linkType: hard @@ -21469,57 +21458,60 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"url@npm:^0.11.0": - version: 0.11.3 - resolution: "url@npm:0.11.3" +"url@npm:^0.11.4": + version: 0.11.4 + resolution: "url@npm:0.11.4" dependencies: punycode: ^1.4.1 - qs: ^6.11.2 - checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e + qs: ^6.12.3 + checksum: c25e587723d343d5d4248892393bfa5039ded9c2c07095a9d005bc64b7cb8956d623c0d8da8d1a28f71986a7a8d80fc2e9f9cf84235e48fa435a5cb4451062c6 languageName: node linkType: hard "use-composed-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-composed-ref@npm:1.3.0" + version: 1.4.0 + resolution: "use-composed-ref@npm:1.4.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6968fe85e7a1721e977e7bff8d98ac0975522a380aa23190fe855767bd4d91a73138225a984ddeb90448c00451fb53fa54197b922d21753cd2e2765bd47143a9 languageName: node linkType: hard "use-isomorphic-layout-effect@npm:^1.1.1": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" + version: 1.2.1 + resolution: "use-isomorphic-layout-effect@npm:1.2.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb + checksum: a52155ffa7d67a5107ef2033ae2c63f5290c3e3b198de30d4d4f78cd7921e1ab1ea31eeec387defb67ef61adb672d3b8d25b54b7dcc089bacc4f885abde96e9d languageName: node linkType: hard "use-latest@npm:^1.2.1": - version: 1.2.1 - resolution: "use-latest@npm:1.2.1" + version: 1.3.0 + resolution: "use-latest@npm:1.3.0" dependencies: use-isomorphic-layout-effect: ^1.1.1 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 + checksum: e1681ffcac542a7536adda84c022652417463eb85eac95243860cba3ae9198aa36a8b8b11eb5d85217979648ecb00fd0e2727789dd023ac00b0cc94e4f76a511 languageName: node linkType: hard "use-sync-external-store@npm:^1.2.0": - version: 1.2.2 - resolution: "use-sync-external-store@npm:1.2.2" + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: fe07c071c4da3645f112c38c0e57beb479a8838616ff4e92598256ecce527f2888c08febc7f9b2f0ce2f0e18540ba3cde41eb2035e4fafcb4f52955037098a81 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 5e639c9273200adb6985b512c96a3a02c458bc8ca1a72e91da9cdc6426144fc6538dca434b0f99b28fb1baabc82e1c383ba7900b25ccdcb43758fb058dc66c34 languageName: node linkType: hard @@ -21608,13 +21600,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.2.0 - resolution: "v8-to-istanbul@npm:9.2.0" + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^2.0.0 - checksum: 31ef98c6a31b1dab6be024cf914f235408cd4c0dc56a5c744a5eea1a9e019ba279e1b6f90d695b78c3186feed391ed492380ccf095009e2eb91f3d058f0b4491 + checksum: ded42cd535d92b7fd09a71c4c67fb067487ef5551cc227bfbf2a1f159a842e4e4acddaef20b955789b8d3b455b9779d036853f4a27ce15007f6364a4d30317ae languageName: node linkType: hard @@ -21806,14 +21798,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "vite-plugin-dynamic-import@npm:^1.5.0": - version: 1.5.0 - resolution: "vite-plugin-dynamic-import@npm:1.5.0" + version: 1.6.0 + resolution: "vite-plugin-dynamic-import@npm:1.6.0" dependencies: - acorn: ^8.8.2 - es-module-lexer: ^1.2.1 - fast-glob: ^3.2.12 - magic-string: ^0.30.1 - checksum: 68efd897daa0c72a9f9d3481095dd3f7ec9a822be5a15eef60413734a4c894c5bbd1c1762f02daeef5df59cef212c9f1e7e056315e2a7780816ccafe5c74da6e + acorn: ^8.12.1 + es-module-lexer: ^1.5.4 + fast-glob: ^3.3.2 + magic-string: ^0.30.11 + checksum: 46b009c80db82a8ed935c6ec7c08a8d3d7e5d3118fbfb1b4e18f13e4e9c34db6b3f28fa697d7f78d3f36edae69479a0ba2dfae1b76d2b2ca8e3e06dcf1e9870c languageName: node linkType: hard @@ -21878,8 +21870,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "vite@npm:^4.5.5": - version: 4.5.5 - resolution: "vite@npm:4.5.5" + version: 4.5.14 + resolution: "vite@npm:4.5.14" dependencies: esbuild: ^0.18.10 fsevents: ~2.3.2 @@ -21913,7 +21905,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: vite: bin/vite.js - checksum: 300c5f39c83b22413dfdc84f72e9ba979bf4004e4d939409eea1470b116626294495b09e2bd73fae387a254b79988c8d54ceb281f9515120a0eda179c33b216e + checksum: ed61e2bc284968c5f514eae1f0b040ad6aa1b6591575c102d4967da5e34f8e52cd1a7048800bc3154ece0c11b4f11e1be1d0ef382c92993fd2dc6f7feca110ba languageName: node linkType: hard @@ -21960,9 +21952,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "vscode-languageserver-textdocument@npm:^1.0.1": - version: 1.0.11 - resolution: "vscode-languageserver-textdocument@npm:1.0.11" - checksum: ea7cdc9d4ffaae5952071fa11d17d714215a76444e6936c9359f94b9ba3222a52a55edb5bd5928bd3e9712b900a9f175bb3565ec1c8923234fe3bd327584bafb + version: 1.0.12 + resolution: "vscode-languageserver-textdocument@npm:1.0.12" + checksum: 49415c8f065860693fdd6cb0f7b8a24470130dc941e887a396b6e6bbae93be132323a644aa1edd7d0eec38a730e05a2d013aebff6bddd30c5af374ef3f4cd9ab languageName: node linkType: hard @@ -21985,9 +21977,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "vscode-uri@npm:^3.0.2": - version: 3.0.8 - resolution: "vscode-uri@npm:3.0.8" - checksum: 514249126850c0a41a7d8c3c2836cab35983b9dc1938b903cfa253b9e33974c1416d62a00111385adcfa2b98df456437ab704f709a2ecca76a90134ef5eb4832 + version: 3.1.0 + resolution: "vscode-uri@npm:3.1.0" + checksum: d0f76a22f3d205dd2754d1c2820f55c1c9941c59b3baf1f4ed330fcdc006f2fc8b3c1338dafd6b30448f153173892651afe738a94b2c218ca4072d0e604c8d5e languageName: node linkType: hard @@ -22037,12 +22029,12 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "watchpack@npm:^2.4.1": - version: 2.4.1 - resolution: "watchpack@npm:2.4.1" + version: 2.4.4 + resolution: "watchpack@npm:2.4.4" dependencies: glob-to-regexp: ^0.4.1 graceful-fs: ^4.1.2 - checksum: 5b0179348655dcdf19cac7cb4ff923fdc024d630650c0bf6bec8899cf47c60e19d4f810a88dba692ed0e7f684cf0fcffea86efdbf6c35d81f031e328043b7fab + checksum: 469514a04bcdd7ea77d4b3c62d1f087eafbce64cbc728c89355d5710ee01311533456122da7c585d3654d5bfcf09e6085db1a6eb274c4762a18e370526d17561 languageName: node linkType: hard @@ -22077,9 +22069,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "web-worker@npm:^1.2.0": - version: 1.3.0 - resolution: "web-worker@npm:1.3.0" - checksum: ed1f869aefd1d81a43d0fbfe7b315a65beb6d7d2486b378c436a7047eed4216be34b2e6afca738b6fa95d016326b765f5f816355db33267dbf43b2b8a1837c0c + version: 1.5.0 + resolution: "web-worker@npm:1.5.0" + checksum: e092c9a739c19574796b0d8c313080786d6fa4b72cae0a30bdf7d64e16616957793cbe65c2f2608c70bbf638dba3463a2de335977d55d6e74d0a7c89d0283f99 languageName: node linkType: hard @@ -22158,9 +22150,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"webpack-dev-middleware@npm:^7.1.0": - version: 7.2.1 - resolution: "webpack-dev-middleware@npm:7.2.1" +"webpack-dev-middleware@npm:^7.4.2": + version: 7.4.2 + resolution: "webpack-dev-middleware@npm:7.4.2" dependencies: colorette: ^2.0.10 memfs: ^4.6.0 @@ -22173,17 +22165,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: peerDependenciesMeta: webpack: optional: true - checksum: bb8c75f7ceabc13ee2c3bc9648190e05a0a8c6d40b940ef72b09ea858a63d16bcb434b49995f1025125a1c3a1c8d40274beb5d26ef2fb1458b19e7f6fe3a91fe + checksum: 39314ec5e4468d177dd61fb51af87ec097e920fe0f0dc101e1bf71796740a7e49fd4f7f939cf91e130232714d6d2fffd948d72dc65dec10f87ac30339929f018 languageName: node linkType: hard "webpack-dev-server@npm:^5.0.4": - version: 5.0.4 - resolution: "webpack-dev-server@npm:5.0.4" + version: 5.2.1 + resolution: "webpack-dev-server@npm:5.2.1" dependencies: "@types/bonjour": ^3.5.13 "@types/connect-history-api-fallback": ^1.5.4 "@types/express": ^4.17.21 + "@types/express-serve-static-core": ^4.17.21 "@types/serve-index": ^1.9.4 "@types/serve-static": ^1.15.5 "@types/sockjs": ^0.3.36 @@ -22194,23 +22187,20 @@ coolshapes-react@lowcoder-org/coolshapes-react: colorette: ^2.0.10 compression: ^1.7.4 connect-history-api-fallback: ^2.0.0 - default-gateway: ^6.0.3 - express: ^4.17.3 + express: ^4.21.2 graceful-fs: ^4.2.6 - html-entities: ^2.4.0 - http-proxy-middleware: ^2.0.3 + http-proxy-middleware: ^2.0.7 ipaddr.js: ^2.1.0 launch-editor: ^2.6.1 open: ^10.0.3 p-retry: ^6.2.0 - rimraf: ^5.0.5 schema-utils: ^4.2.0 selfsigned: ^2.4.1 serve-index: ^1.9.1 sockjs: ^0.3.24 spdy: ^4.0.2 - webpack-dev-middleware: ^7.1.0 - ws: ^8.16.0 + webpack-dev-middleware: ^7.4.2 + ws: ^8.18.0 peerDependencies: webpack: ^5.0.0 peerDependenciesMeta: @@ -22220,7 +22210,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: b3535d01e8d895f4ce6d74b5f76e29398b712476216cd6d459365e5cc2f2fb1e49240aef6c23b2b943b04dbf768d7d18301af3eb064038bde4e11d03c241202d + checksum: cb96b182970dad1ea67ccca7b1c7a207ee0815c3b65218b08a8fad07df6a1854a2fed3588b17b06a99f28c999f4f391d551a42058cf02425ff7d0d21bfd2d27f languageName: node linkType: hard @@ -22236,26 +22226,26 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 + version: 3.3.0 + resolution: "webpack-sources@npm:3.3.0" + checksum: 3098025872b445f39ab873241303c111a11e832b88ef124d9988593af47f245db4e9a485c449cd63ec14ab2562139b009d15c255599eb9837b67d182519031ff languageName: node linkType: hard "webpack@npm:^5.90.3": - version: 5.91.0 - resolution: "webpack@npm:5.91.0" - dependencies: - "@types/eslint-scope": ^3.7.3 - "@types/estree": ^1.0.5 - "@webassemblyjs/ast": ^1.12.1 - "@webassemblyjs/wasm-edit": ^1.12.1 - "@webassemblyjs/wasm-parser": ^1.12.1 - acorn: ^8.7.1 - acorn-import-assertions: ^1.9.0 - browserslist: ^4.21.10 + version: 5.99.9 + resolution: "webpack@npm:5.99.9" + dependencies: + "@types/eslint-scope": ^3.7.7 + "@types/estree": ^1.0.6 + "@types/json-schema": ^7.0.15 + "@webassemblyjs/ast": ^1.14.1 + "@webassemblyjs/wasm-edit": ^1.14.1 + "@webassemblyjs/wasm-parser": ^1.14.1 + acorn: ^8.14.0 + browserslist: ^4.24.0 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.16.0 + enhanced-resolve: ^5.17.1 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 @@ -22265,9 +22255,9 @@ coolshapes-react@lowcoder-org/coolshapes-react: loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^3.2.0 + schema-utils: ^4.3.2 tapable: ^2.1.1 - terser-webpack-plugin: ^5.3.10 + terser-webpack-plugin: ^5.3.11 watchpack: ^2.4.1 webpack-sources: ^3.2.3 peerDependenciesMeta: @@ -22275,7 +22265,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true bin: webpack: bin/webpack.js - checksum: f1073715dbb1ed5c070affef293d800a867708bcbc5aba4d8baee87660e0cf53c55966a6f36fab078d1d6c9567cdcd0a9086bdfb607cab87ea68c6449791b9a3 + checksum: 5fd25e64b8d5a31919087834af3678eaee62dbf8990024fb4c71584d4beb2c3e75ecbabbcc654fa2536e0aa7900172512c674c6650acd7088e534716faa8449d languageName: node linkType: hard @@ -22376,40 +22366,41 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" +"which-boxed-primitive@npm:^1.0.2, which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" dependencies: - is-bigint: ^1.0.1 - is-boolean-object: ^1.1.0 - is-number-object: ^1.0.4 - is-string: ^1.0.5 - is-symbol: ^1.0.3 - checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + is-bigint: ^1.1.0 + is-boolean-object: ^1.2.1 + is-number-object: ^1.1.1 + is-string: ^1.1.1 + is-symbol: ^1.1.1 + checksum: ee41d0260e4fd39551ad77700c7047d3d281ec03d356f5e5c8393fe160ba0db53ef446ff547d05f76ffabfd8ad9df7c9a827e12d4cccdbc8fccf9239ff8ac21e languageName: node linkType: hard -"which-builtin-type@npm:^1.1.3": - version: 1.1.3 - resolution: "which-builtin-type@npm:1.1.3" +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" dependencies: - function.prototype.name: ^1.1.5 - has-tostringtag: ^1.0.0 + call-bound: ^1.0.2 + function.prototype.name: ^1.1.6 + has-tostringtag: ^1.0.2 is-async-function: ^2.0.0 - is-date-object: ^1.0.5 - is-finalizationregistry: ^1.0.2 + is-date-object: ^1.1.0 + is-finalizationregistry: ^1.1.0 is-generator-function: ^1.0.10 - is-regex: ^1.1.4 + is-regex: ^1.2.1 is-weakref: ^1.0.2 isarray: ^2.0.5 - which-boxed-primitive: ^1.0.2 - which-collection: ^1.0.1 - which-typed-array: ^1.1.9 - checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 + which-boxed-primitive: ^1.1.0 + which-collection: ^1.0.2 + which-typed-array: ^1.1.16 + checksum: 7a3617ba0e7cafb795f74db418df889867d12bce39a477f3ee29c6092aa64d396955bf2a64eae3726d8578440e26777695544057b373c45a8bcf5fbe920bf633 languageName: node linkType: hard -"which-collection@npm:^1.0.1": +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -22421,16 +22412,18 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": - version: 1.1.15 - resolution: "which-typed-array@npm:1.1.15" +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19, which-typed-array@npm:^1.1.2": + version: 1.1.19 + resolution: "which-typed-array@npm:1.1.19" dependencies: available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 + call-bind: ^1.0.8 + call-bound: ^1.0.4 + for-each: ^0.3.5 + get-proto: ^1.0.1 + gopd: ^1.2.0 has-tostringtag: ^1.0.2 - checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + checksum: 162d2a07f68ea323f88ed9419861487ce5d02cb876f2cf9dd1e428d04a63133f93a54f89308f337b27cabd312ee3d027cae4a79002b2f0a85b79b9ef4c190670 languageName: node linkType: hard @@ -22445,14 +22438,14 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" dependencies: isexe: ^3.1.1 bin: node-which: bin/which.js - checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + checksum: 6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90 languageName: node linkType: hard @@ -22524,8 +22517,8 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "ws@npm:^7.0.0, ws@npm:^7.3.1": - version: 7.5.9 - resolution: "ws@npm:7.5.9" + version: 7.5.10 + resolution: "ws@npm:7.5.10" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -22534,28 +22527,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true utf-8-validate: optional: true - checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 - languageName: node - linkType: hard - -"ws@npm:^8.11.0, ws@npm:^8.16.0": - version: 8.17.0 - resolution: "ws@npm:8.17.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 147ef9eab0251364e1d2c55338ad0efb15e6913923ccbfdf20f7a8a6cb8f88432bcd7f4d8f66977135bfad35575644f9983201c1a361019594a4e53977bf6d4e + checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb languageName: node linkType: hard -"ws@npm:^8.14.2": - version: 8.18.0 - resolution: "ws@npm:8.18.0" +"ws@npm:^8.11.0, ws@npm:^8.18.0": + version: 8.18.2 + resolution: "ws@npm:8.18.2" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -22564,7 +22542,7 @@ coolshapes-react@lowcoder-org/coolshapes-react: optional: true utf-8-validate: optional: true - checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 + checksum: e38beae19ba4d68577ec24eb34fbfab376333fedd10f99b07511a8e842e22dbc102de39adac333a18e4c58868d0703cd5f239b04b345e22402d0ed8c34ea0aa0 languageName: node linkType: hard @@ -22667,6 +22645,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + "yaml@npm:2.3.1": version: 2.3.1 resolution: "yaml@npm:2.3.1" @@ -22740,22 +22725,13 @@ coolshapes-react@lowcoder-org/coolshapes-react: linkType: hard "yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 - languageName: node - linkType: hard - -"zrender@npm:5.5.0": - version: 5.5.0 - resolution: "zrender@npm:5.5.0" - dependencies: - tslib: 2.3.0 - checksum: 89e4f9e95b586af66ebf5c0504d5f8da73678e18c5b888124943ca81ecea7cff12f23009d64048df91e4dc670e9c51fa66c357834d9347e367f3b5cc02a24d35 + version: 1.2.1 + resolution: "yocto-queue@npm:1.2.1" + checksum: 0843d6c2c0558e5c06e98edf9c17942f25c769e21b519303a5c2adefd5b738c9b2054204dc856ac0cd9d134b1bc27d928ce84fd23c9e2423b7e013d5a6f50577 languageName: node linkType: hard -"zrender@npm:^5.1.1": +"zrender@npm:5.6.1, zrender@npm:^5.1.1": version: 5.6.1 resolution: "zrender@npm:5.6.1" dependencies: diff --git a/deploy/docker/README.md b/deploy/docker/README.md index dd42643ce9..94eca974ae 100644 --- a/deploy/docker/README.md +++ b/deploy/docker/README.md @@ -4,6 +4,7 @@ Included Dockerfile can be used to build an **all-in-one** image with all requir For examples on running the all-in-one image or the multi image deployment see **deploy/docker/docker-compose.yaml** and **deploy/docker/docker-compose-multi.yaml** +Environment variables used to configure various aspects of the services are stored in **default.env**, **default-multi.env** and **override.env**. Look into the **default** files to see which variables can be set and what are the default values. To change the defaults, use **override.env**. You don't have to use **--env-file** parameter with **doker compose** because the files are loaded from within `docker-compose.yaml` and `docker-compose-multi.yaml`. ## all-in-one image @@ -43,6 +44,8 @@ Image can be configured by setting environment variables. | `LOWCODER_API_RATE_LIMIT` | Number of max Request per Second | `100` | | `LOWCODER_API_SERVICE_URL` | Lowcoder API service URL | `http://localhost:8080` | | `LOWCODER_NODE_SERVICE_URL` | Lowcoder Node service (js executor) URL | `http://localhost:6060` | +| `LOWCODER_NODE_SERVICE_SECRET` | Secret used for encrypting communication between API service and Node service - CHANGE IT! | | +| `LOWCODER_NODE_SERVICE_SALT` | Salt used for encrypting communication between API service and Node service - CHANGE IT! | | | `LOWCODER_MAX_ORGS_PER_USER` | Default maximum organizations per user | `100` | | `LOWCODER_MAX_MEMBERS_PER_ORG` | Default maximum members per organization | `1000` | | `LOWCODER_MAX_GROUPS_PER_ORG` | Default maximum groups per organization | `100` | @@ -50,14 +53,18 @@ Image can be configured by setting environment variables. | `LOWCODER_MAX_DEVELOPERS` | Default maximum developers | `100` | | `LOWCODER_WORKSPACE_MODE` | SAAS to activate, ENTERPRISE to switch off - Workspaces | `SAAS` | | `LOWCODER_EMAIL_SIGNUP_ENABLED` | Control if users create their own Workspace automatic when Sign Up | `true` | +| `LOWCODER_EMAIL_AUTH_ENABLED` | Controls whether authentication via email is enabled | `true` | | `LOWCODER_CREATE_WORKSPACE_ON_SIGNUP` | IF LOWCODER_WORKSPACE_MODE = SAAS, controls if a own workspace is created for the user after sign up | `true` | | `LOWCODER_MARKETPLACE_PRIVATE_MODE` | Control if not to show Apps on the local Marketplace to anonymous users | `true` | | `LOWCODER_SUPERUSER_USERNAME` | Username of the Super-User of an Lowcoder Installation | `admin@localhost` | | `LOWCODER_SUPERUSER_PASSWORD` | Password of the Super-User, if not present or empty, it will be generated | `generated and printed into log file | - +| `LOWCODER_PLUGINS_DIR` | Directory holding lowcoder plugins | `/lowcoder-stacks/plugins` | +| `LOWCODER_COOKIE_NAME` | Name of the lowcoder application cookie | `LOWCODER_CE_SELFHOST_TOKEN` | +| `LOWCODER_COOKIE_MAX_AGE` | Lowcoder application cookie max age in hours | `24` | +| `LOWCODER_APP_SNAPSHOT_RETENTIONTIME` | Application snapshots retention time in days | `30` | Also you should set the API-KEY secret, whcih should be a string of at least 32 random characters. (from Lowcoder v2.3.x on) -On linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 +On linux/mac, generate one eg. with: `head /dev/urandom | head -c 30 | shasum -a 256` | Environment variable | Description | Default-Value | |-------------------------------------| ----------------------------------------------------------------------- | ----------------------------------------------------- | @@ -76,7 +83,7 @@ To enable secure Password Reset flow for the users, you need to configure your o | `LOWCODER_ADMIN_SMTP_SSL_ENABLED` | Enable SSL encryption | `false` | | `LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED` | Enable STARTTLS encryption | `true` | | `LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED` | Require STARTTLS encryption | `true` | -| `LOWCODER_LOST_PASSWORD_EMAIL_SENDER` | "from" Email address of the password Reset Email Sender | `service@lowcoder.cloud` | +| `LOWCODER_EMAIL_NOTIFICATIONS_SENDER` | "from" Email address of the password Reset Email Sender | `info@localhost` | ## Building api-service image @@ -119,6 +126,12 @@ Image can be configured by setting environment variables. | `LOWCODER_MARKETPLACE_PRIVATE_MODE` | Control if not to show Apps on the local Marketplace to anonymous users | `true` | | `LOWCODER_SUPERUSER_USERNAME` | Username of the Super-User of an Lowcoder Installation | `admin@localhost` | | `LOWCODER_SUPERUSER_PASSWORD` | Password of the Super-User, if not present or empty, it will be generated | `generated and printed into log file | +| `LOWCODER_PLUGINS_DIR` | Directory holding lowcoder plugins | `/lowcoder-stacks/plugins` | +| `LOWCODER_COOKIE_NAME` | Name of the lowcoder application cookie | `LOWCODER_CE_SELFHOST_TOKEN` | +| `LOWCODER_COOKIE_MAX_AGE` | Lowcoder application cookie max age in hours | `24` | +| `LOWCODER_APP_SNAPSHOT_RETENTIONTIME` | Application snapshots retention time in days | `30` | +| `LOWCODER_NODE_SERVICE_SECRET` | Secret used for encrypting communication between API service and Node service - CHANGE IT! | | +| `LOWCODER_NODE_SERVICE_SALT` | Salt used for encrypting communication between API service and Node service - CHANGE IT! | | Also you should set the API-KEY secret, whcih should be a string of at least 32 random characters. (from Lowcoder v2.3.x on) On linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 @@ -140,7 +153,7 @@ To enable secure Password Reset flow for the users, you need to configure your o | `LOWCODER_ADMIN_SMTP_SSL_ENABLED` | Enable SSL encryption | `false` | | `LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED` | Enable STARTTLS encryption | `true` | | `LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED` | Require STARTTLS encryption | `true` | -| `LOWCODER_LOST_PASSWORD_EMAIL_SENDER` | "from" Email address of the password Reset Email Sender | `service@lowcoder.cloud` | +| `LOWCODER_EMAIL_NOTIFICATIONS_SENDER` | "from" Email address of the password Reset Email Sender | `info@localhost` | ## Building node-service image @@ -163,6 +176,8 @@ Image can be configured by setting environment variables. | `LOWCODER_PUID` | ID of user running services. It will own all created logs and data. | `9001` | | `LOWCODER_PGID` | ID of group of the user running services. | `9001` | | `LOWCODER_API_SERVICE_URL` | Lowcoder API service URL | `http://localhost:8080` | +| `LOWCODER_NODE_SERVICE_SECRET` | Secret used for encrypting communication between API service and Node service - CHANGE IT! | | +| `LOWCODER_NODE_SERVICE_SALT` | Salt used for encrypting communication between API service and Node service - CHANGE IT! | | ## Building web frontend image diff --git a/deploy/docker/default-multi.env b/deploy/docker/default-multi.env new file mode 100644 index 0000000000..7daba8e66e --- /dev/null +++ b/deploy/docker/default-multi.env @@ -0,0 +1,21 @@ +##################################################################### +## ## +## Lowcoder environment variables override for multi image ## +## installation. ## +## ## +## !!! PLEASE DO NOT CHANGE THIS FILE !!! ## +## ## +## To change the variables use file: override.env ## +## ## +## It will be loaded automatically and will override the defaults ## +## You don't have to copy the whole default.env, only the changed ## +## environment variables. ## +## ## +##################################################################### + +# Update individual service URLs to match the multi setup +LOWCODER_MONGODB_URL="mongodb://lowcoder:secret123@mongodb/lowcoder?authSource=admin" +LOWCODER_REDIS_URL="redis://redis:6379" +LOWCODER_NODE_SERVICE_URL="http://lowcoder-node-service:6060" +LOWCODER_API_SERVICE_URL="http://lowcoder-api-service:8080" + diff --git a/deploy/docker/default.env b/deploy/docker/default.env new file mode 100644 index 0000000000..8b4445a3d4 --- /dev/null +++ b/deploy/docker/default.env @@ -0,0 +1,160 @@ +##################################################################### +## ## +## Default lowcoder environment variables. ## +## ## +## !!! PLEASE DO NOT CHANGE THIS FILE !!! ## +## ## +## To change the variables use file: override.env ## +## ## +## It will be loaded automatically and will override the defaults ## +## You don't have to copy the whole default.env, only the changed ## +## environment variables. ## +## ## +##################################################################### + + +## +## Enable services (applies to all-in-one deployment) ## +## - you can disable them in favor of external services +# +# If true redis server is started in the container +LOWCODER_REDIS_ENABLED="true" +# If true mongo database is started in the container +LOWCODER_MONGODB_ENABLED="true" +# If true lowcoder api-service is started in the container +LOWCODER_API_SERVICE_ENABLED="true" +# If true lowcoder node-service is started in the container +LOWCODER_NODE_SERVICE_ENABLED="true" +# If true lowcoder web frontend is started in the container +LOWCODER_FRONTEND_ENABLED="true" +# +# Set LOWCODER_MONGODB_EXPOSED to "true" and uncomment mongodb port +# to make internal mongo database accessible from host +# (applies to all-in-one deployment) +# +LOWCODER_MONGODB_EXPOSED="false" + +## +## Generic parameters +## +# +# URL of the public User Interface +LOWCODER_PUBLIC_URL="http://localhost:3000/" + +# ID of user running services. It will own all created logs and data. +LOWCODER_PUID="1000" +# ID of group of the user running services +LOWCODER_PGID="1000" + +## +## api-service parameters +## +# Name of the lowcoder application cookie +LOWCODER_COOKIE_NAME=LOWCODER_CE_SELFHOST_TOKEN +# Lowcoder application cookie max age in hours +LOWCODER_COOKIE_MAX_AGE=24 +# Default maximum organizations per user +LOWCODER_MAX_ORGS_PER_USER=100 +# Default maximum members per organization +LOWCODER_MAX_MEMBERS_PER_ORG=1000 +# Default maximum groups per organization +LOWCODER_MAX_GROUPS_PER_ORG=100 +# Default maximum applications per organization +LOWCODER_MAX_APPS_PER_ORG=1000 +# Default maximum developers +LOWCODER_MAX_DEVELOPERS=50 +# Mongo database connection string (use the later one in case of multi-image compose) +LOWCODER_MONGODB_URL="mongodb://localhost:27017/lowcoder?authSource=admin" +#LOWCODER_MONGODB_URL="mongodb://lowcoder:secret123@mongodb/lowcoder?authSource=admin" +# Redis server URL +LOWCODER_REDIS_URL="redis://localhost:6379" +# Control if users create their own Workspace automatic when Sign Up +LOWCODER_EMAIL_SIGNUP_ENABLED="true" +# Controls whether authentication via email is enabled +LOWCODER_EMAIL_AUTH_ENABLED="true" +# IF LOWCODER_WORKSPACE_MODE = SAAS, controls if own workspace is created for the user after sign up +LOWCODER_CREATE_WORKSPACE_ON_SIGNUP="true" +# Application snapshots retention time in days +LOWCODER_APP_SNAPSHOT_RETENTIONTIME=30 +# +# ! PLEASE CHANGE THESE TO SOMETHING UNIQUE ! +# +# LOWCODER_DB_ENCRYPTION_PASSWORD and LOWCODER_DB_ENCRYPTION_SALT is used +# to encrypt sensitive data in mongo database so it is important to change the defaults +# +LOWCODER_DB_ENCRYPTION_PASSWORD="lowcoder.org" +LOWCODER_DB_ENCRYPTION_SALT="lowcoder.org" + +# CORS allowed domains +LOWCODER_CORS_DOMAINS="*" +# +# API-KEY secret - should be a string of at least 32 random characters +# - on linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 +# +LOWCODER_API_KEY_SECRET="5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" + +## +## api and node service parameters +## +# Directory holding lowcoder plugins +LOWCODER_PLUGINS_DIR="../plugins" +# Number of max Request per Second - set to 0 to disable rate limiting +LOWCODER_API_RATE_LIMIT=100 +# Lowcoder API service URL +LOWCODER_API_SERVICE_URL="http://localhost:8080" +# Lowcoder Node service URL +LOWCODER_NODE_SERVICE_URL="http://localhost:6060" + +# +# ! PLEASE CHANGE THESE TO SOMETHING UNIQUE ! +# +# Secret and salt used for encrypting comunication between API service and NODE service +# +LOWCODER_NODE_SERVICE_SECRET="62e348319ab9f5c43c3b5a380b4d82525cdb68740f21140e767989b509ab0aa2" +LOWCODER_NODE_SERVICE_SECRET_SALT="lowcoder.org" + +## +## Frontend parameters +## +# Lowcoder max request size +LOWCODER_MAX_REQUEST_SIZE=20m +# Lowcoder max query timeout (in seconds) +LOWCODER_MAX_QUERY_TIMEOUT=120 +# Default lowcoder query timeout +LOWCODER_DEFAULT_QUERY_TIMEOUT=10 +# SAAS to activate, ENTERPRISE to switch off - Workspaces +LOWCODER_WORKSPACE_MODE=SAAS +# Controls whether to show Apps on the local Marketplace to anonymous users +# - if true, apps are not shown to anonymous users +LOWCODER_MARKETPLACE_PRIVATE_MODE="true" + +## +## Lowcoder notification emails setup +## +# Mail server host +LOWCODER_ADMIN_SMTP_HOST=localhost +# Mail server port +LOWCODER_ADMIN_SMTP_PORT=587 +# Use authentication when sending email +LOWCODER_ADMIN_SMTP_AUTH="true" +# Username (email) used for authentication +LOWCODER_ADMIN_SMTP_USERNAME= +# Password used for authentication +LOWCODER_ADMIN_SMTP_PASSWORD= +# Enable SSL for connetion to the mail server +LOWCODER_ADMIN_SMTP_SSL_ENABLED="false" +# Enable STARTTLS +LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED="true" +# Require STARTTLS +LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED="true" + +# Email used in notifications from lowcoder +LOWCODER_EMAIL_NOTIFICATIONS_SENDER=info@localhost + +# Lowcoder superuser username +LOWCODER_SUPERUSER_USERNAME=admin@localhost +# Lowcoder superuser password +# If left blank, a password will be generated and written into log (lowcoder-stacks/logs/api-service/api-service.log) +LOWCODER_SUPERUSER_PASSWORD= + + diff --git a/deploy/docker/docker-compose-multi.yaml b/deploy/docker/docker-compose-multi.yaml index 63bbf421dc..08f2987dd9 100644 --- a/deploy/docker/docker-compose-multi.yaml +++ b/deploy/docker/docker-compose-multi.yaml @@ -48,56 +48,13 @@ services: # Enabled ports to be able to access backend from host # ports: # - "8080:8080" - environment: - LOWCODER_PUBLIC_URL: "http://localhost:3000/" - LOWCODER_PUID: "9001" - LOWCODER_PGID: "9001" - LOWCODER_MONGODB_URL: "mongodb://lowcoder:secret123@mongodb/lowcoder?authSource=admin" - LOWCODER_REDIS_URL: "redis://redis:6379" - LOWCODER_NODE_SERVICE_URL: "http://lowcoder-node-service:6060" - LOWCODER_MAX_QUERY_TIMEOUT: 120 - LOWCODER_MAX_REQUEST_SIZE: 20m - LOWCODER_EMAIL_AUTH_ENABLED: "true" - LOWCODER_EMAIL_SIGNUP_ENABLED: "true" - LOWCODER_CREATE_WORKSPACE_ON_SIGNUP: "true" - # - # ! PLEASE CHANGE THESE TO SOMETHING UNIQUE ! - # - # LOWCODER_DB_ENCRYPTION_PASSWORD and LOWCODER_DB_ENCRYPTION_SALT is used - # to encrypt sensitive data in database so it is important to change the defaults - # - LOWCODER_DB_ENCRYPTION_PASSWORD: "lowcoder.org" - LOWCODER_DB_ENCRYPTION_SALT: "lowcoder.org" - LOWCODER_CORS_DOMAINS: "*" - LOWCODER_MAX_ORGS_PER_USER: 100 - LOWCODER_MAX_MEMBERS_PER_ORG: 1000 - LOWCODER_MAX_GROUPS_PER_ORG: 100 - LOWCODER_MAX_APPS_PER_ORG: 1000 - LOWCODER_MAX_DEVELOPERS: 50 - # - # API-KEY secret - should be a string of at least 32 random characters - # - on linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 - # - LOWCODER_API_KEY_SECRET: "5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" - LOWCODER_PLUGINS_DIR: "../plugins" - LOWCODER_API_RATE_LIMIT: 50 - LOWCODER_WORKSPACE_MODE: SAAS - LOWCODER_MARKETPLACE_PRIVATE_MODE: "true" - # Lowcoder notification emails setup - LOWCODER_ADMIN_SMTP_HOST: smtp.gmail.com - LOWCODER_ADMIN_SMTP_PORT: 587 - LOWCODER_ADMIN_SMTP_USERNAME: - LOWCODER_ADMIN_SMTP_PASSWORD: - LOWCODER_ADMIN_SMTP_AUTH: "true" - LOWCODER_ADMIN_SMTP_SSL_ENABLED: "false" - LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED: "true" - LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED: "true" - # Email used as sender in lost password email - LOWCODER_EMAIL_NOTIFICATIONS_SENDER: info@localhost - # Lowcoder superuser details - LOWCODER_SUPERUSER_USERNAME: admin@localhost - # If left blank, a password will be generated and written into api-service log - LOWCODER_SUPERUSER_PASSWORD: + env_file: + - path: ./default.env + required: true + - path: ./default-multi.env + required: true + - path: ./override.env + required: false restart: unless-stopped depends_on: mongodb: @@ -122,10 +79,13 @@ services: # Enabled ports to be able to access backend from host # ports: # - "6060:6060" - environment: - LOWCODER_PUID: "9001" - LOWCODER_PGID: "9001" - LOWCODER_API_SERVICE_URL: "http://lowcoder-api-service:8080" + env_file: + - path: ./default.env + required: true + - path: ./default-multi.env + required: true + - path: ./override.env + required: false restart: unless-stopped depends_on: lowcoder-api-service: @@ -145,13 +105,13 @@ services: container_name: lowcoder-frontend ports: - "3000:3000" - environment: - LOWCODER_PUID: "9001" - LOWCODER_PGID: "9001" - LOWCODER_MAX_REQUEST_SIZE: 20m - LOWCODER_MAX_QUERY_TIMEOUT: 120 - LOWCODER_API_SERVICE_URL: "http://lowcoder-api-service:8080" - LOWCODER_NODE_SERVICE_URL: "http://lowcoder-node-service:6060" + env_file: + - path: ./default.env + required: true + - path: ./default-multi.env + required: true + - path: ./override.env + required: false restart: unless-stopped depends_on: lowcoder-node-service: @@ -162,6 +122,7 @@ services: restart: true volumes: - ./lowcoder-stacks/assets:/lowcoder/assets + - ./lowcoder-stacks/ssl:/lowcoder-stacks/ssl healthcheck: test: curl --fail http://lowcoder-frontend:3000 || exit 1 interval: 5s diff --git a/deploy/docker/docker-compose.yaml b/deploy/docker/docker-compose.yaml index 0ca4306556..6f0b2a8e00 100644 --- a/deploy/docker/docker-compose.yaml +++ b/deploy/docker/docker-compose.yaml @@ -1,85 +1,29 @@ -version: "3" +##################################################################### +## ## +## Lowcoder all-in-one compose file. ## +## ## +## To run: ## +## docker compose up -d ## +## ## +##################################################################### + services: ## ## Start Lowcoder (all-in-one) ## - lowcoder-api-service: + lowcoder-all-in-one: image: lowcoderorg/lowcoder-ce:latest container_name: lowcoder + env_file: + - path: ./default.env + required: true + - path: ./override.env + required: false ports: - "3000:3000" - "3443:3443" # - "27017:27017" - environment: - # Public base url - LOWCODER_PUBLIC_URL: "http://localhost:3000/" - # enable services - LOWCODER_REDIS_ENABLED: "true" - LOWCODER_MONGODB_ENABLED: "true" - # - # Set LOWCODER_MONGODB_EXPOSED to "true" and uncomment mongodb port - # to make internal mongo database accessible from host - # - LOWCODER_MONGODB_EXPOSED: "false" - LOWCODER_API_SERVICE_ENABLED: "true" - LOWCODER_NODE_SERVICE_ENABLED: "true" - LOWCODER_FRONTEND_ENABLED: "true" - # generic parameters - # Effective user and group IDs - LOWCODER_PUID: "1000" - LOWCODER_PGID: "1000" - # api-service parameters - LOWCODER_MAX_ORGS_PER_USER: 100 - LOWCODER_MAX_MEMBERS_PER_ORG: 1000 - LOWCODER_MAX_GROUPS_PER_ORG: 100 - LOWCODER_MAX_APPS_PER_ORG: 1000 - LOWCODER_MAX_DEVELOPERS: 50 - #LOWCODER_MONGODB_URL: "mongodb://lowcoder:secret123@mongodb/lowcoder?authSource=admin" - LOWCODER_MONGODB_URL: "mongodb://localhost:27017/lowcoder?authSource=admin" - LOWCODER_REDIS_URL: "redis://localhost:6379" - LOWCODER_EMAIL_SIGNUP_ENABLED: "true" - LOWCODER_EMAIL_AUTH_ENABLED: "true" - LOWCODER_CREATE_WORKSPACE_ON_SIGNUP: "true" - # - # ! PLEASE CHANGE THESE TO SOMETHING UNIQUE ! - # - # LOWCODER_DB_ENCRYPTION_PASSWORD and LOWCODER_DB_ENCRYPTION_SALT is used - # to encrypt sensitive data in database so it is important to change the defaults - # - LOWCODER_DB_ENCRYPTION_PASSWORD: "lowcoder.org" - LOWCODER_DB_ENCRYPTION_SALT: "lowcoder.org" - LOWCODER_CORS_DOMAINS: "*" - # - # API-KEY secret - should be a string of at least 32 random characters - # - on linux/mac, generate one eg. with: head /dev/urandom | head -c 30 | shasum -a 256 - # - LOWCODER_API_KEY_SECRET: "5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" - # api and node service parameters - LOWCODER_PLUGINS_DIR: "../plugins" - LOWCODER_API_RATE_LIMIT: 50 - LOWCODER_API_SERVICE_URL: "http://localhost:8080" - LOWCODER_NODE_SERVICE_URL: "http://localhost:6060" - # frontend parameters - LOWCODER_MAX_REQUEST_SIZE: 20m - LOWCODER_MAX_QUERY_TIMEOUT: 120 - LOWCODER_WORKSPACE_MODE: SAAS - LOWCODER_MARKETPLACE_PRIVATE_MODE: "true" - # Lowcoder notification emails setup - LOWCODER_ADMIN_SMTP_HOST: localhost - LOWCODER_ADMIN_SMTP_PORT: 587 - LOWCODER_ADMIN_SMTP_USERNAME: - LOWCODER_ADMIN_SMTP_PASSWORD: - LOWCODER_ADMIN_SMTP_AUTH: "true" - LOWCODER_ADMIN_SMTP_SSL_ENABLED: "false" - LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED: "true" - LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED: "true" - # Email used as sender in lost password email - LOWCODER_EMAIL_NOTIFICATIONS_SENDER: info@localhost - # Lowcoder superuser details - LOWCODER_SUPERUSER_USERNAME: admin@localhost - # If left blank, a password will be generated and written into log (lowcoder-stacks/logs/api-service/api-service.log) - LOWCODER_SUPERUSER_PASSWORD: volumes: - ./lowcoder-stacks:/lowcoder-stacks - ./lowcoder-stacks/assets:/lowcoder/assets diff --git a/deploy/docker/frontend/server.conf b/deploy/docker/frontend/server.conf index d9a9e7d47b..b068162982 100644 --- a/deploy/docker/frontend/server.conf +++ b/deploy/docker/frontend/server.conf @@ -43,6 +43,7 @@ location /api { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_pass __LOWCODER_API_SERVICE_URL__; } @@ -50,6 +51,7 @@ location /node-service/plugin-icons { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_pass __LOWCODER_NODE_SERVICE_URL__; } diff --git a/deploy/docker/override.env b/deploy/docker/override.env new file mode 100644 index 0000000000..8785627b8c --- /dev/null +++ b/deploy/docker/override.env @@ -0,0 +1,9 @@ +##################################################################### +## ## +## Use this file to override environment variables for compose ## +## files. ## +## Add only variables you want to override. ## +## ## +##################################################################### + + diff --git a/deploy/helm/Chart.yaml b/deploy/helm/Chart.yaml index a99cee36ee..7b3bf927d0 100644 --- a/deploy/helm/Chart.yaml +++ b/deploy/helm/Chart.yaml @@ -4,10 +4,10 @@ description: A Helm chart for Kubernetes for installing lowcoder type: application # Chart version (change every time you make changes to the chart) -version: 1.0.0 +version: 2.7.0 # Lowcoder version -appVersion: "latest" +appVersion: "2.7.0" # Dependencies needed for Lowcoder deployment dependencies: diff --git a/deploy/helm/README.md b/deploy/helm/README.md index b7dd8555b2..098aaf6bd0 100644 --- a/deploy/helm/README.md +++ b/deploy/helm/README.md @@ -42,23 +42,46 @@ $ helm delete -n lowcoder my-lowcoder | Name | Description | Value | | --------------------------------------- | --------------------------------------------------------------------------------- | -------------- | +| `global.config.publicUrl` | URL of the public User Interface (used eg. in invitation links) | `https://somedomain.com/` | +| `global.config.createWorkspaceOnSignup` | If workspaceMode = SAAS, controls if own workspace is created for the user after sign up | `true` | | `global.config.workspaceMode` | Sets the workspace mode. Possible types are: SAAS, ENTERPRISE | `SAAS` | | `global.config.userId` | User ID of user running Lowcoder server application in container | `9001` | | `global.config.groupId` | Group ID of user running Lowcoder server application in container | `9001` | | `global.config.corsAllowedDomains` | CORS allowed domains | `*` | | `global.config.enableUserSignUp` | Enable users signing up to lowcoder via login page | `true` | +| `global.config.enableEmailAuth` | Controls whether authentication via email is enabled | `true` | +| `global.config.emailNotificationSender` | Email used in notifications from lowcoder | `info@localhost` | | `global.config.encryption.password` | Encryption password - CHANGE IT! | `lowcoder.org` | | `global.config.encryption.salt` | Encryption salt - CHANGE IT! | `lowcoder.org` | -| `global.config.apiKeySecret` | API-KEY secret, should be a string of at least 32 random characters - CHANGE IT | `5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b` | +| `global.config.superuser.username` | Lowcoder superadmin username | `admin@localhost` | +| `global.config.superuser.password` | Lowcoder superadmin password - if not supplied, it will be generated | | +| `global.config.apiKeySecret` | API-KEY secret, should be a string of at least 32 random characters - CHANGE IT | `5a41b0905...` | | `global.config.maxQueryTimeout` | Maximum query timeout in seconds | `120` | | `global.config.maxRequestSize` | Maximum request size | `20m` | +| `global.config.snapshotRetentionTime` | Lowcoder application snapshot retention time (in days) | `30` | +| `global.config.marketplacePrivateMode` | Controls whether to show Apps on the local Marketplace to anonymous users | `true` | | `global.config.nodeServiceUrl` | URL to node-service server if using external one (disabled by default) | | +| `global.config.nodeServiceSecret` | Secret used for encrypting traffic between API service and Node service - CHANGE IT! | | +| `global.config.nodeServiceSalt` | Salt used for encrypting traffic between API service and Node service - CHANGE IT! | | | `global.config.apiServiceUrl` | URL to api-service server if using external one (disabled by default) | | +| `global.cookie.name` | Name of the lowcoder application cookie | `LOWCODER_CE_SELFHOST_TOKEN` | +| `global.cookie.maxAge` | Lowcoder application cookie max age in hours | `24` | | `global.defaults.maxOrgsPerUser` | Maximum allowed organizations per user | `100` | | `global.defaults.maxMembersPerOrg` | Maximum allowed members per organization | `1000` | | `global.defaults.maxGroupsPerOrg` | Maximum groups allowed per organization | `100` | | `global.defaults.maxAppsPerOrg` | Maximum allowed applications per organization | `1000` | | `global.defaults.maxDevelopers` | Maximum allowed developer accounts | `100` | +| `global.defaults.apiRateLimit` | Number of max Request per Second - set to 0 to disable rate limiting | `100` | +| `global.defaults.queryTimeout` | Default lowcoder query timeout | `10` | +| `global.mailServer.host` | Mail server host (used for sending lowcoder emails) | `localhost` | +| `global.mailServer.port` | Mail server port | `578` | +| `global.mailServer.smtpAuth` | Use SMPT authentication when sending mails | `false` | +| `global.mailServer.authUsername` | Username (email) used for SMTP authentication | | +| `global.mailServer.authPassword` | Password used for authentication | | +| `global.mailServer.useSSL` | Enable SSL for connetion to the mail server | `false` | +| `global.mailServer.useStartTLS` | Enable STARTTLS | `true` | +| `global.mailServer.requireStartTLS` | Require STARTTLS | `true` | +| `global.plugins.folder` | Folder from which to load lowcoder plugins | `/plugins` | ### Redis diff --git a/deploy/helm/templates/api-service/configMap.yaml b/deploy/helm/templates/api-service/configMap.yaml index 103a78ad0e..4371982a08 100644 --- a/deploy/helm/templates/api-service/configMap.yaml +++ b/deploy/helm/templates/api-service/configMap.yaml @@ -38,11 +38,29 @@ data: LOWCODER_CORS_DOMAINS: {{ .Values.global.config.corsAllowedDomains | default "*" | quote }} LOWCODER_EMAIL_AUTH_ENABLED: {{ .Values.global.config.enableEmailAuth | default "true" | quote }} LOWCODER_EMAIL_SIGNUP_ENABLED: {{ .Values.global.config.enableUserSignUp | default "true" | quote }} + LOWCODER_EMAIL_NOTIFICATIONS_SENDER: {{ .Values.global.config.emailNotificationSender | default "info@localhost" | quote }} LOWCODER_MAX_QUERY_TIMEOUT: {{ .Values.global.config.maxQueryTimeout | default "120" | quote }} + LOWCODER_MAX_REQUEST_SIZE: {{ .Values.global.config.maxRequestSize | default "20m" | quote }} LOWCODER_MAX_ORGS_PER_USER: {{ .Values.global.defaults.maxOrgsPerUser | default "100" | quote }} LOWCODER_MAX_MEMBERS_PER_ORG: {{ .Values.global.defaults.maxMembersPerOrg | default "1000" | quote }} LOWCODER_MAX_GROUPS_PER_ORG: {{ .Values.global.defaults.maxGroupsPerOrg | default "100" | quote }} LOWCODER_MAX_APPS_PER_ORG: {{ .Values.global.defaults.maxAppsPerOrg | default "1000" | quote }} LOWCODER_MAX_DEVELOPERS: {{ .Values.global.defaults.maxDevelopers | default "50" | quote }} + LOWCODER_DEFAULT_QUERY_TIMEOUT: {{ .Values.global.defaults.queryTimeout | default "10" | quote }} LOWCODER_WORKSPACE_MODE: {{ .Values.global.config.workspaceMode | default "SAAS" | quote }} LOWCODER_CREATE_WORKSPACE_ON_SIGNUP: {{ .Values.global.config.createWorkspaceOnSignup | default "true" | quote }} + LOWCODER_ADMIN_SMTP_HOST: {{ .Values.global.mailServer.host | default "localhost" | quote }} + LOWCODER_ADMIN_SMTP_PORT: {{ .Values.global.mailServer.port | default "578" | quote }} + LOWCODER_ADMIN_SMTP_AUTH: {{ .Values.global.mailServer.smtpAuth | default "false" | quote }} + LOWCODER_ADMIN_SMTP_USERNAME: {{ .Values.global.mailServer.authUsername | default "" | quote }} + LOWCODER_ADMIN_SMTP_PASSWORD: {{ .Values.global.mailServer.authPassword | default "" | quote }} + LOWCODER_ADMIN_SMTP_SSL_ENABLED: {{ .Values.global.mailServer.useSSL | default "false" | quote }} + LOWCODER_ADMIN_SMTP_STARTTLS_ENABLED: {{ .Values.global.mailServer.useStartTLS | default "true" | quote }} + LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED: {{ .Values.global.mailServer.requireStartTLS | default "true" | quote }} + LOWCODER_API_RATE_LIMIT: {{ .Values.global.defaults.apiRateLimit | default "100" | quote }} + LOWCODER_APP_SNAPSHOT_RETENTIONTIME: {{ .Values.global.config.snapshotRetentionTime | default "30" | quote }} + LOWCODER_COOKIE_NAME: {{ .Values.global.cookie.name | default "LOWCODER_CE_SELFHOST_TOKEN" | quote }} + LOWCODER_COOKIE_MAX_AGE: {{ .Values.global.cookie.maxAge | default "24" | quote }} + LOWCODER_MARKETPLACE_PRIVATE_MODE: {{ .Values.global.config.marketplacePrivateMode | default "true" | quote }} + LOWCODER_PLUGINS_DIR: {{ .Values.global.plugins.folder | default "/plugins" | quote }} + LOWCODER_PUBLIC_URL: {{ .Values.global.config.publicUrl | default "https://somedomain.com/" | quote }} diff --git a/deploy/helm/templates/api-service/secrets.yaml b/deploy/helm/templates/api-service/secrets.yaml index eecbe91bae..c1e45ced8e 100644 --- a/deploy/helm/templates/api-service/secrets.yaml +++ b/deploy/helm/templates/api-service/secrets.yaml @@ -29,3 +29,8 @@ stringData: LOWCODER_DB_ENCRYPTION_PASSWORD: {{ .Values.global.config.encryption.password | default "lowcoder.org" | quote }} LOWCODER_DB_ENCRYPTION_SALT: {{ .Values.global.config.encryption.salt | default "lowcoder.org" | quote }} LOWCODER_API_KEY_SECRET: "{{ .Values.global.config.apiKeySecret }}" + LOWCODER_SUPERUSER_USERNAME: {{ .Values.global.config.superuser.username | default "admin@localhost" | quote }} + LOWCODER_SUPERUSER_PASSWORD: {{ .Values.global.config.superuser.password | default "" | quote }} + LOWCODER_NODE_SERVICE_SECRET: {{ .values.global.config.nodeServiceSecret | default "62e348319ab9f5c43c3b5a380b4d82525cdb68740f21140e767989b509ab0aa2" | quote }} + LOWCODER_NODE_SERVICE_SECRET_SALT: {{ .values.global.config.nodeServiceSalt | default "lowcoder.org" | quote }} + diff --git a/deploy/helm/templates/node-service/deployment.yaml b/deploy/helm/templates/node-service/deployment.yaml index 0bc4035a63..4ec381aa12 100644 --- a/deploy/helm/templates/node-service/deployment.yaml +++ b/deploy/helm/templates/node-service/deployment.yaml @@ -36,6 +36,8 @@ spec: envFrom: - configMapRef: name: {{ include "lowcoder.fullname" . }}-node-service + - secretRef: + name: {{ include "lowcoder.fullname" . }}-node-service ports: - name: lowcoder-node containerPort: 6060 diff --git a/deploy/helm/templates/node-service/secrets.yaml b/deploy/helm/templates/node-service/secrets.yaml new file mode 100644 index 0000000000..2af6cfa30b --- /dev/null +++ b/deploy/helm/templates/node-service/secrets.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: {{ include "lowcoder.fullname" . }}-node-service + labels: + {{- include "lowcoder.labels" . | nindent 4 }} + {{- with .Values.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +stringData: + LOWCODER_NODE_SERVICE_SECRET: {{ .values.global.config.nodeServiceSecret | default "62e348319ab9f5c43c3b5a380b4d82525cdb68740f21140e767989b509ab0aa2" | quote }} + LOWCODER_NODE_SERVICE_SECRET_SALT: {{ .values.global.config.nodeServiceSalt | default "lowcoder.org" | quote }} + diff --git a/deploy/helm/values.yaml b/deploy/helm/values.yaml index 52375f00f1..3723fec4b4 100644 --- a/deploy/helm/values.yaml +++ b/deploy/helm/values.yaml @@ -11,6 +11,7 @@ fullnameOverride: "" # global: config: + publicUrl: "https://somedomain.com/" # This setting sets workspace mode. Possible values: SAAS, ENTERPRISE workspaceMode: SAAS createWorkspaceOnSignup: true @@ -20,20 +21,44 @@ global: corsAllowedDomains: "*" enableEmailAuth: true enableUserSignUp: true + emailNotificationSender: info@localhost encryption: password: "lowcoder.org" salt: "lowcoder.org" + superuser: + username: admin@localhost + password: #nodeServiceUrl: #apiServiceUrl: apiKeySecret: "5a41b090758b39b226603177ef48d73ae9839dd458ccb7e66f7e7cc028d5a50b" + nodeServiceSecret: "62e348319ab9f5c43c3b5a380b4d82525cdb68740f21140e767989b509ab0aa2" + nodeServiceSalt: "lowcoder.org" maxQueryTimeout: 120 maxRequestSize: "20m" + snapshotRetentionTime: 30 + marketplacePrivateMode: true + cookie: + name: LOWCODER_CE_SELFHOST_TOKEN + maxAge: 24 defaults: maxOrgsPerUser: 100 maxMembersPerOrg: 1000 maxGroupsPerOrg: 100 maxAppsPerOrg: 1000 maxDevelopers: 50 + apiRateLimit: 100 + queryTimeout: 10 + mailServer: + host: localhost + port: 578 + smtpAuth: false + authUsername: + authPassword: + useSSL: false + useStartTLS: true + requireStartTLS: true + plugins: + folder: /plugins # # Redis @@ -92,7 +117,6 @@ apiService: # Overrides the image tag whose default is the chart appVersion. #tag: "latest" - service: type: ClusterIP port: 80 @@ -117,7 +141,6 @@ nodeService: # Overrides the image tag whose default is the chart appVersion. #tag: "latest" - service: type: ClusterIP port: 80 diff --git a/docs/.gitbook/assets/Individualization JavaScript Libraries b/docs/.gitbook/assets/Individualization JavaScript Libraries deleted file mode 100644 index 8c2598f1cb..0000000000 Binary files a/docs/.gitbook/assets/Individualization JavaScript Libraries and /dev/null differ diff --git a/docs/business-logic-in-apps/write-javascript/transformers.md b/docs/business-logic-in-apps/write-javascript/transformers.md index 0c0c3cd747..0c195ed413 100644 --- a/docs/business-logic-in-apps/write-javascript/transformers.md +++ b/docs/business-logic-in-apps/write-javascript/transformers.md @@ -6,7 +6,7 @@ Compared with inline code in `{{ }}`, transformer supports multi-line code block ## Quickstart -Click **+ New > Transformer** in a query editor to create a transformer. +Click **+ New > Transfromer** in a query editor to create a transformer. Then write your JS code in the transformer. You can click **Preview** to get the return value and access it by `transformerName.value` in your app. diff --git a/docs/lowcoder-extension/use-third-party-libraries-in-apps/README.md b/docs/lowcoder-extension/use-third-party-libraries-in-apps/README.md index ae0759dc9c..6e60d0488a 100644 --- a/docs/lowcoder-extension/use-third-party-libraries-in-apps/README.md +++ b/docs/lowcoder-extension/use-third-party-libraries-in-apps/README.md @@ -16,7 +16,7 @@ Lowcoder provides some JavaScript built-in libraries for use. Built-in Libraries can be used directly everywhere where you can use JavaScript. ``` -// lodash +// loadash return _.chunk(['a', 'b', 'c', 'd'], 2); // => [['a', 'b'], ['c', 'd']] @@ -107,11 +107,11 @@ You can check popular CDNs if they host your desired library as a minified packa ### Import / bind at the app level -Navigate to the Individualization page and then click the plus sign **+** under the **JavaScript library** tab. Paste the **library** link and click **Add New**. Lowcoder will now check, if the external library will be compatible and securely usable. +Navigate to the settings page and then click the plus sign **+** under the **JavaScript library** tab. Paste the **library** link and click **Add New**. Lowcoder will now check, if the external library will be compatible and securely usable. You can also click the download icon to quickly download any recommended JS library. -<figure><img src="../../.gitbook/assets/Individualization JavaScript Libraries.png" alt=""><figcaption><p>Bind an external JS Library to an individual App</p></figcaption></figure> +<figure><img src="../../.gitbook/assets/App Editor External Libraries.png" alt=""><figcaption><p>Bind an external JS Library to an individual App</p></figcaption></figure> Now, you can create a JS query and insert code. diff --git a/server/api-service/lowcoder-domain/pom.xml b/server/api-service/lowcoder-domain/pom.xml index 7b9b3cc6d8..52845ece00 100644 --- a/server/api-service/lowcoder-domain/pom.xml +++ b/server/api-service/lowcoder-domain/pom.xml @@ -123,6 +123,22 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-mongodb</artifactId> diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/model/Datasource.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/model/Datasource.java index 7bb468f27e..3cb8dae12a 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/model/Datasource.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/model/Datasource.java @@ -15,7 +15,6 @@ import org.lowcoder.sdk.models.HasIdAndAuditing; import org.lowcoder.sdk.models.JsDatasourceConnectionConfig; import org.lowcoder.sdk.plugin.graphql.GraphQLDatasourceConfig; -import org.lowcoder.sdk.plugin.lowcoderapi.LowcoderApiDatasourceConfig; import org.lowcoder.sdk.plugin.restapi.RestApiDatasourceConfig; import org.lowcoder.sdk.util.LocaleUtils; import org.springframework.data.annotation.Transient; @@ -26,8 +25,7 @@ import static org.lowcoder.domain.datasource.model.DatasourceCreationSource.LEGACY_WORKSPACE_PREDEFINED; import static org.lowcoder.domain.datasource.model.DatasourceCreationSource.SYSTEM_STATIC; -import static org.lowcoder.domain.plugin.DatasourceMetaInfoConstants.GRAPHQL_API; -import static org.lowcoder.domain.plugin.DatasourceMetaInfoConstants.REST_API; +import static org.lowcoder.domain.plugin.DatasourceMetaInfoConstants.*; @Getter @Setter @@ -37,16 +35,23 @@ public class Datasource extends HasIdAndAuditing { private static final DatasourceStatus DEFAULT_STATUS = DatasourceStatus.NORMAL; + public static final String QUICK_REST_API_ID = "#QUICK_REST_API"; public static final String QUICK_GRAPHQL_ID = "#QUICK_GRAPHQL"; - public static final String LOWCODER_API_ID = "#LOWCODER_API"; + // public static final String LOWCODER_API_ID = "#LOWCODER_API"; + public static final String JS_CODE_ID = "#JS_CODE"; - private static final Set<String> SYSTEM_STATIC_IDS = Set.of(QUICK_REST_API_ID, - QUICK_GRAPHQL_ID, LOWCODER_API_ID); + private static final Set<String> SYSTEM_STATIC_IDS = Set.of( + QUICK_REST_API_ID, + QUICK_GRAPHQL_ID, + // LOWCODER_API_ID, + JS_CODE_ID + ); public static final Datasource QUICK_REST_API; public static final Datasource QUICK_GRAPHQL_API; - public static final Datasource LOWCODER_API; + // public static final Datasource LOWCODER_API; + public static final Datasource JS_CODE; static { QUICK_REST_API = new Datasource(); @@ -63,12 +68,19 @@ public class Datasource extends HasIdAndAuditing { QUICK_GRAPHQL_API.setCreationSource(SYSTEM_STATIC.getValue()); QUICK_GRAPHQL_API.setDetailConfig(GraphQLDatasourceConfig.EMPTY_CONFIG); - LOWCODER_API = new Datasource(); + /* LOWCODER_API = new Datasource(); LOWCODER_API.setId(LOWCODER_API_ID); LOWCODER_API.setName("Lowcoder API"); - LOWCODER_API.setType(DatasourceMetaInfoConstants.LOWCODER_API); + LOWCODER_API.setType(LOWCODER_API); LOWCODER_API.setCreationSource(SYSTEM_STATIC.getValue()); - LOWCODER_API.setDetailConfig(LowcoderApiDatasourceConfig.INSTANCE); + LOWCODER_API.setDetailConfig(LowcoderApiDatasourceConfig.INSTANCE); */ + + JS_CODE = new Datasource(); + JS_CODE.setId(JS_CODE_ID); + JS_CODE.setName("JS Code"); + JS_CODE.setType(JS_CODE_EXECUTION); + JS_CODE.setCreationSource(SYSTEM_STATIC.getValue()); + JS_CODE.setDetailConfig(RestApiDatasourceConfig.EMPTY_CONFIG); // no configuration } private String gid; @@ -77,7 +89,7 @@ public class Datasource extends HasIdAndAuditing { private String organizationId; private int creationSource; private DatasourceStatus datasourceStatus; - // for js data source plugin + @Nullable @Transient private DatasourcePluginDefinition pluginDefinition; @@ -87,6 +99,7 @@ public class Datasource extends HasIdAndAuditing { public Datasource mergeWith(Datasource updatedDatasource) { setName(updatedDatasource.getName()); + setDatasourceStatus(updatedDatasource.getDatasourceStatus()); Optional.of(getDetailConfig()) .ifPresentOrElse(currentDetailConfig -> { if (updatedDatasource.getDetailConfig() instanceof JsDatasourceConnectionConfig jsDatasourceConnectionConfig) { @@ -114,9 +127,14 @@ public static String getDisplayName(String datasourceId, Locale locale) { return LocaleUtils.getMessage(locale, "QUICK_GRAPHQL_DATASOURCE_NAME"); } - if (LOWCODER_API_ID.equals(datasourceId)) { + /* if (LOWCODER_API_ID.equals(datasourceId)) { return LocaleUtils.getMessage(locale, "LOWCODER_DATASOURCE_NAME"); + } */ + + if (JS_CODE_ID.equals(datasourceId)) { + return LocaleUtils.getMessage(locale, "JS_CODE_DATASOURCE_NAME"); } + return ""; } diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/service/impl/DatasourceServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/service/impl/DatasourceServiceImpl.java index 52914c4cdd..afa95937c2 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/service/impl/DatasourceServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/datasource/service/impl/DatasourceServiceImpl.java @@ -85,7 +85,6 @@ public Mono<Datasource> update(String datasourceId, Datasource updatedDatasource @Override public Mono<Datasource> getById(String id) { - if (StringUtils.equals(id, Datasource.QUICK_REST_API_ID)) { return Mono.just(Datasource.QUICK_REST_API); } @@ -94,39 +93,54 @@ public Mono<Datasource> getById(String id) { return Mono.just(Datasource.QUICK_GRAPHQL_API); } - if (StringUtils.equals(id, Datasource.LOWCODER_API_ID)) { - return Mono.just(Datasource.LOWCODER_API); + if (StringUtils.equals(id, Datasource.JS_CODE_ID)) { + return Mono.just(Datasource.JS_CODE); } + // if (StringUtils.equals(id, Datasource.LOWCODER_API_ID)) { + // return Mono.just(Datasource.LOWCODER_API); + // } + return repository.findById(id); } @Override public Flux<Datasource> getByIds(Collection<String> ids) { - Flux<Datasource> builtDatasourceFlux = Flux.fromStream(ids.stream().filter(id-> StringUtils.equals(id, Datasource.QUICK_REST_API_ID) - || StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID) - || StringUtils.equals(id, Datasource.LOWCODER_API_ID) - ).map(id-> { - if (StringUtils.equals(id, Datasource.QUICK_REST_API_ID)) { - return Datasource.QUICK_REST_API; - } - - if (StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID)) { - return Datasource.QUICK_GRAPHQL_API; - } - - if (StringUtils.equals(id, Datasource.LOWCODER_API_ID)) { - return Datasource.LOWCODER_API; - } - return Datasource.LOWCODER_API; - })); - - return Flux.concat(builtDatasourceFlux, repository.findByIds(ids.stream().filter(id-> !(StringUtils.equals(id, Datasource.QUICK_REST_API_ID) - || StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID) - || StringUtils.equals(id, Datasource.LOWCODER_API_ID)) - ).toList())); + Flux<Datasource> builtDatasourceFlux = Flux.fromStream(ids.stream() + .filter(id -> + StringUtils.equals(id, Datasource.QUICK_REST_API_ID) || + StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID) || + StringUtils.equals(id, Datasource.JS_CODE_ID) + // || StringUtils.equals(id, Datasource.LOWCODER_API_ID) + ) + .map(id -> { + if (StringUtils.equals(id, Datasource.QUICK_REST_API_ID)) { + return Datasource.QUICK_REST_API; + } + if (StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID)) { + return Datasource.QUICK_GRAPHQL_API; + } + if (StringUtils.equals(id, Datasource.JS_CODE_ID)) { + return Datasource.JS_CODE; + } + return null; // fallback + }) + .filter(ds -> ds != null) + ); + + return Flux.concat( + builtDatasourceFlux, + repository.findByIds(ids.stream().filter(id -> + !(StringUtils.equals(id, Datasource.QUICK_REST_API_ID) || + StringUtils.equals(id, Datasource.QUICK_GRAPHQL_ID) || + StringUtils.equals(id, Datasource.JS_CODE_ID) + // || StringUtils.equals(id, Datasource.LOWCODER_API_ID) + ) + ).toList()) + ); } + private Mono<Datasource> validateDatasource(Datasource datasource) { if (datasource.getOrganizationId() == null) { diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java index 276f4059d4..fdd173ed77 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionService.java @@ -4,6 +4,8 @@ public interface EncryptionService { String encryptString(String plaintext); + String encryptStringForNodeServer(String plaintext); + String decryptString(String encryptedText); String encryptPassword(String plaintext); diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java index 6524682b60..7f5e177a0f 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/encryption/EncryptionServiceImpl.java @@ -5,6 +5,7 @@ import org.lowcoder.sdk.config.CommonConfig; import org.lowcoder.sdk.config.CommonConfig.Encrypt; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.encrypt.Encryptors; import org.springframework.security.crypto.encrypt.TextEncryptor; @@ -14,13 +15,20 @@ public class EncryptionServiceImpl implements EncryptionService { private final TextEncryptor textEncryptor; + private final TextEncryptor textEncryptorForNodeServer; private final BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); @Autowired - public EncryptionServiceImpl(CommonConfig commonConfig) { + public EncryptionServiceImpl( + CommonConfig commonConfig + ) { Encrypt encrypt = commonConfig.getEncrypt(); String saltInHex = Hex.encodeHexString(encrypt.getSalt().getBytes()); this.textEncryptor = Encryptors.text(encrypt.getPassword(), saltInHex); + if (!commonConfig.getJsExecutor().getSalt().isEmpty() && !commonConfig.getJsExecutor().getPassword().isEmpty()) { + String saltInHexForNodeServer = Hex.encodeHexString(commonConfig.getJsExecutor().getSalt().getBytes()); + this.textEncryptorForNodeServer = Encryptors.text(commonConfig.getJsExecutor().getPassword(), saltInHexForNodeServer); + } else this.textEncryptorForNodeServer = null; } @Override @@ -30,6 +38,13 @@ public String encryptString(String plaintext) { } return textEncryptor.encrypt(plaintext); } + @Override + public String encryptStringForNodeServer(String plaintext) { + if (StringUtils.isEmpty(plaintext)) { + return plaintext; + } + return textEncryptorForNodeServer.encrypt(plaintext); + } @Override public String decryptString(String encryptedText) { diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java index 0a07ea5022..6b375d4d2d 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java @@ -27,6 +27,8 @@ public interface OrganizationService { Mono<Organization> getById(String id); + Mono<Organization> getByIdWithDeleted(String id); + @NonEmptyMono Flux<Organization> getByIds(Collection<String> ids); @NonEmptyMono diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java index 7af165a6b3..781ffe257d 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java @@ -174,6 +174,15 @@ public Mono<Organization> getById(String id) { .switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID")); } + @Override + public Mono<Organization> getByIdWithDeleted(String id) { + if(FieldName.isGID(id)) + return repository.findByGid(id).next() + .switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID")); + return repository.findBySlug(id).next().switchIfEmpty(repository.findById(id)) + .switchIfEmpty(deferredError(UNABLE_TO_FIND_VALID_ORG, "INVALID_ORG_ID")); + } + @Override public Mono<OrganizationCommonSettings> getOrgCommonSettings(String orgId) { if(FieldName.isGID(orgId)) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionHandler.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionHandler.java index e5c54b6087..a7f7862985 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionHandler.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionHandler.java @@ -249,7 +249,7 @@ public Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnApplicati Mono<UserPermissionOnResourceStatus> orgUserPermissionMono = getOrgId(resourceId) .flatMap(orgId -> orgMemberService.getOrgMember(orgId, userId)) .flatMap(orgMember -> { - if (orgMember.isAdmin()) { + if (orgMember.isAdmin() || orgMember.isSuperAdmin()) { return Mono.just(UserPermissionOnResourceStatus.success(buildAdminPermission(resourceType, resourceId, userId))); } return getAllMatchingPermissions0(userId, orgMember.getOrgId(), resourceType, Collections.singleton(resourceId), resourceAction) @@ -308,7 +308,7 @@ public Mono<UserPermissionOnResourceStatus> checkUserPermissionStatusOnBundle(St Mono<UserPermissionOnResourceStatus> orgUserPermissionMono = getOrgId(resourceId) .flatMap(orgId -> orgMemberService.getOrgMember(orgId, userId)) .flatMap(orgMember -> { - if (orgMember.isAdmin()) { + if (orgMember.isAdmin() || orgMember.isSuperAdmin()) { return Mono.just(UserPermissionOnResourceStatus.success(buildAdminPermission(resourceType, resourceId, userId))); } return getAllMatchingPermissions0(userId, orgMember.getOrgId(), resourceType, Collections.singleton(resourceId), resourceAction) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/DatasourceMetaInfoConstants.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/DatasourceMetaInfoConstants.java index 088ee37a0b..4266f9c44e 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/DatasourceMetaInfoConstants.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/DatasourceMetaInfoConstants.java @@ -4,8 +4,9 @@ public final class DatasourceMetaInfoConstants { public static final String REST_API = "restApi"; public static final String GRAPHQL_API = "graphql"; + public static final String JS_CODE_EXECUTION = "javaScriptCode"; public static final String MYSQL = "mysql"; - public static final String LOWCODER_API = "lowcoderApi"; + // public static final String LOWCODER_API = "lowcoderApi"; private DatasourceMetaInfoConstants() { } diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java index f2aa878bb3..cae767e6f5 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/client/DatasourcePluginClient.java @@ -5,10 +5,12 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.lowcoder.domain.encryption.EncryptionService; import org.lowcoder.domain.plugin.client.dto.DatasourcePluginDefinition; import org.lowcoder.domain.plugin.client.dto.GetPluginDynamicConfigRequestDTO; import org.lowcoder.infra.js.NodeServerClient; import org.lowcoder.infra.js.NodeServerHelper; +import org.lowcoder.sdk.config.CommonConfig; import org.lowcoder.sdk.config.CommonConfigHelper; import org.lowcoder.sdk.exception.ServerException; import org.lowcoder.sdk.models.DatasourceTestResult; @@ -30,6 +32,8 @@ import static org.lowcoder.sdk.constants.GlobalContext.REQUEST; +import com.fasterxml.jackson.databind.ObjectMapper; + @Slf4j @RequiredArgsConstructor @Component @@ -45,13 +49,17 @@ public class DatasourcePluginClient implements NodeServerClient { .build(); private final CommonConfigHelper commonConfigHelper; + private final CommonConfig commonConfig; private final NodeServerHelper nodeServerHelper; + private final EncryptionService encryptionService; private static final String PLUGINS_PATH = "plugins"; private static final String RUN_PLUGIN_QUERY = "runPluginQuery"; private static final String VALIDATE_PLUGIN_DATA_SOURCE_CONFIG = "validatePluginDataSourceConfig"; private static final String GET_PLUGIN_DYNAMIC_CONFIG = "getPluginDynamicConfig"; + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + public Mono<List<Object>> getPluginDynamicConfigSafely(List<GetPluginDynamicConfigRequestDTO> getPluginDynamicConfigRequestDTOS) { return getPluginDynamicConfig(getPluginDynamicConfigRequestDTOS) .onErrorResume(throwable -> { @@ -119,21 +127,47 @@ public Flux<DatasourcePluginDefinition> getDatasourcePluginDefinitions() { @SuppressWarnings("unchecked") public Mono<QueryExecutionResult> executeQuery(String pluginName, Object queryDsl, List<Map<String, Object>> context, Object datasourceConfig) { return getAcceptLanguage() - .flatMap(language -> WEB_CLIENT - .post() - .uri(nodeServerHelper.createUri(RUN_PLUGIN_QUERY)) - .header(HttpHeaders.ACCEPT_LANGUAGE, language) - .bodyValue(Map.of("pluginName", pluginName, "dsl", queryDsl, "context", context, "dataSourceConfig", datasourceConfig)) - .exchangeToMono(response -> { - if (response.statusCode().is2xxSuccessful()) { - return response.bodyToMono(Map.class) - .map(map -> map.get("result")) - .map(QueryExecutionResult::success); - } - return response.bodyToMono(Map.class) - .map(map -> MapUtils.getString(map, "message")) - .map(QueryExecutionResult::errorWithMessage); - })); + .flatMap(language -> { + try { + Map<String, Object> body = Map.of( + "pluginName", pluginName, + "dsl", queryDsl, + "context", context, + "dataSourceConfig", datasourceConfig + ); + String json = OBJECT_MAPPER.writeValueAsString(body); + + boolean encryptionEnabled = !(commonConfig.getJsExecutor().getPassword().isEmpty() || commonConfig.getJsExecutor().getSalt().isEmpty()); + String payload; + WebClient.RequestBodySpec requestSpec = WEB_CLIENT + .post() + .uri(nodeServerHelper.createUri(RUN_PLUGIN_QUERY)) + .header(HttpHeaders.ACCEPT_LANGUAGE, language); + + if (encryptionEnabled) { + payload = encryptionService.encryptStringForNodeServer(json); + requestSpec = requestSpec.header("X-Encrypted", "true"); + } else { + payload = json; + } + + return requestSpec + .bodyValue(payload) + .exchangeToMono(response -> { + if (response.statusCode().is2xxSuccessful()) { + return response.bodyToMono(Map.class) + .map(map -> map.get("result")) + .map(QueryExecutionResult::success); + } + return response.bodyToMono(Map.class) + .map(map -> MapUtils.getString(map, "message")) + .map(QueryExecutionResult::errorWithMessage); + }); + } catch (Exception e) { + log.error("Encryption error", e); + return Mono.error(new ServerException("Encryption error")); + } + }); } @SuppressWarnings("unchecked") diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/service/impl/DatasourceMetaInfoServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/service/impl/DatasourceMetaInfoServiceImpl.java index 8c38373d54..979ae6b4e4 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/service/impl/DatasourceMetaInfoServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/plugin/service/impl/DatasourceMetaInfoServiceImpl.java @@ -63,12 +63,12 @@ public class DatasourceMetaInfoServiceImpl implements DatasourceMetaInfoService .connectionPool(ClientBasedConnectionPool.class) .build(); - private static final DatasourceMetaInfo LOWCODER_API = DatasourceMetaInfo.builder() + /* private static final DatasourceMetaInfo LOWCODER_API = DatasourceMetaInfo.builder() .type(DatasourceMetaInfoConstants.LOWCODER_API) .displayName("Lowcoder API") .pluginExecutorKey("lowcoder-api-plugin") .connectionPool(StatelessConnectionPool.class) - .build(); + .build(); */ private static final DatasourceMetaInfo ES = DatasourceMetaInfo.builder() .type("es") diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java index db303a0cf1..c32de22154 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java @@ -20,6 +20,7 @@ import reactor.core.publisher.Mono; import java.time.Duration; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeoutException; @@ -43,7 +44,7 @@ public class QueryExecutionServiceImpl implements QueryExecutionService { public Mono<QueryExecutionResult> executeQuery(Datasource datasource, Map<String, Object> queryConfig, Map<String, Object> requestParams, String timeoutStr, QueryVisitorContext queryVisitorContext) { - int timeoutMs = QueryTimeoutUtils.parseQueryTimeoutMs(timeoutStr, requestParams, common.getMaxQueryTimeout()); + int timeoutMs = QueryTimeoutUtils.parseQueryTimeoutMs(timeoutStr, requestParams, common.getMaxQueryTimeout() * 1000); queryConfig.putIfAbsent("timeoutMs", String.valueOf(timeoutMs)); return Mono.defer(() -> { @@ -81,7 +82,12 @@ private Mono<QueryExecutionResult> executeLocally(Datasource datasource, Map<Str private Mono<QueryExecutionResult> executeByNodeJs(Datasource datasource, Map<String, Object> queryConfig, Map<String, Object> requestParams, QueryVisitorContext queryVisitorContext) { List<Map<String, Object>> context = requestParams.entrySet() .stream() - .map(entry -> Map.of("key", entry.getKey(), "value", entry.getValue())) + .map(entry -> { + Map<String, Object> temp = new HashMap<>(); + temp.put("key", entry.getKey()); + temp.put("value", entry.getValue()); // Allows null values + return temp; + }) .collect(Collectors.toList()); //forward cookies to js datasource diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/serversetting/service/ServerSettingServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/serversetting/service/ServerSettingServiceImpl.java index d016c29601..8512772fba 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/serversetting/service/ServerSettingServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/serversetting/service/ServerSettingServiceImpl.java @@ -28,10 +28,10 @@ public class ServerSettingServiceImpl implements ServerSettingService { "LOWCODER_ADMIN_SMTP_PORT", "LOWCODER_ADMIN_SMTP_USERNAME", "LOWCODER_ADMIN_SMTP_PASSWORD", - "LOWCODER_SUPERADMIN_PASSWORD", - "LOWCODER_SUPERADMIN_USERNAME", "LOWCODER_SUPERUSER_PASSWORD", - "LOWCODER_SUPERUSER_USERNAME"); + "LOWCODER_SUPERUSER_USERNAME", + "LOWCODER_NODE_SERVICE_SECRET", + "LOWCODER_NODE_SERVICE_SECRET_SALT"); @Autowired public ServerSettingServiceImpl(ServerSettingRepository repository) { diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/solutions/TemplateSolutionServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/solutions/TemplateSolutionServiceImpl.java index e2d4d3db44..7e2dc93bcb 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/solutions/TemplateSolutionServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/solutions/TemplateSolutionServiceImpl.java @@ -125,9 +125,9 @@ private Mono<String> doCopyDatasource(String organizationId, String datasourceId return Mono.just(Datasource.QUICK_REST_API.getId()); } - if (datasource.isLegacyLowcoderApi()) { + /* if (datasource.isLegacyLowcoderApi()) { return Mono.just(Datasource.LOWCODER_API.getId()); - } + } */ return createNewDatasourceFrom(organizationId, visitorId, datasource); }); diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java index 5dcb1b19e8..8f474da115 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/model/AuthUser.java @@ -25,6 +25,9 @@ public class AuthUser { private String orgId; + // Add groupId for group mapping + private String groupId; + private AuthRequestContext authContext; /** diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationService.java index d3775791b6..20dfab94c2 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationService.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationService.java @@ -2,4 +2,5 @@ public interface EmailCommunicationService { boolean sendPasswordResetEmail(String to, String token, String message); + boolean sendInvitationEmails(String[] to, String inviteLink, String message); } diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationServiceImpl.java index e83ed917b0..de09b45ac8 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationServiceImpl.java @@ -49,4 +49,32 @@ public boolean sendPasswordResetEmail(String to, String token, String message) { } + @Override + public boolean sendInvitationEmails(String[] to, String inviteLink, String message) { + try { + String subject = "You've been invited!"; + MimeMessage mimeMessage = javaMailSender.createMimeMessage(); + + MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); + + mimeMessageHelper.setFrom(config.getNotificationsEmailSender()); + mimeMessageHelper.setTo(to); + mimeMessageHelper.setSubject(subject); + + // Construct the message with the invite link + String formattedMessage = String.format(message, inviteLink); + mimeMessageHelper.setText(formattedMessage, true); // Set HTML to true to allow links + + javaMailSender.send(mimeMessage); + + return true; + + } catch (Exception e) { + log.error("Failed to send mail to: {}, Exception: ", to, e); + return false; + } + + + } + } diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java index 5e2f4fbb07..1a8dcf566e 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java @@ -183,6 +183,11 @@ public Mono<User> createNewUserByAuthUser(AuthUser authUser, boolean isSuperAdmi newUser.setConnections(connections); newUser.setActiveAuthId(connection.getAuthId()); newUser.setIsNewUser(true); + if(isSuperAdmin) { + return repository.findBySuperAdminIsTrue() + .flatMap(user -> update(user.getId(), newUser)) + .switchIfEmpty(create(newUser)); + } return create(newUser); } @@ -418,7 +423,7 @@ protected Map<String, Object> getUserDetailExtra(User user, String orgId) { return Optional.ofNullable(user.getOrgTransformedUserInfo()) .map(orgTransformedUserInfo -> orgTransformedUserInfo.get(orgId)) .map(TransformedUserInfo::extra) - .orElse(convertConnections(user.getConnections())); + .orElse(convertConnections(user.getConnections().stream().filter(c -> c.getAuthId().equals(user.getActiveAuthId())).collect(Collectors.toSet()))); } protected Mono<List<Map<String, String>>> buildUserDetailGroups(String userId, OrgMember orgMember, boolean withoutDynamicGroups, @@ -443,7 +448,7 @@ protected Map<String, Object> convertConnections(Set<Connection> connections) { return connections.stream() .filter(connection -> !AuthSourceConstants.EMAIL.equals(connection.getSource()) && !AuthSourceConstants.PHONE.equals(connection.getSource())) - .collect(Collectors.toMap(Connection::getAuthId, Connection::getRawUserInfo)); + .collect(Collectors.toMap(Connection::getSource, Connection::getRawUserInfo)); } protected String convertEmail(Set<Connection> connections) { diff --git a/server/api-service/lowcoder-domain/src/test/java/org/lowcoder/domain/encryption/EncryptionServiceImplTest.java b/server/api-service/lowcoder-domain/src/test/java/org/lowcoder/domain/encryption/EncryptionServiceImplTest.java new file mode 100644 index 0000000000..41bd465c82 --- /dev/null +++ b/server/api-service/lowcoder-domain/src/test/java/org/lowcoder/domain/encryption/EncryptionServiceImplTest.java @@ -0,0 +1,80 @@ +package org.lowcoder.domain.encryption; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.lowcoder.sdk.config.CommonConfig; +import org.lowcoder.sdk.config.CommonConfig.Encrypt; +import org.lowcoder.sdk.config.CommonConfig.JsExecutor; +import org.springframework.security.crypto.encrypt.Encryptors; +import org.springframework.security.crypto.encrypt.TextEncryptor; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class EncryptionServiceImplTest { + + private EncryptionServiceImpl encryptionService; + private TextEncryptor nodeServerEncryptor; + private String nodePassword = "nodePassword"; + private String nodeSalt = "nodeSalt"; + + @BeforeEach + void setUp() { + // Mock CommonConfig and its nested classes + Encrypt encrypt = mock(Encrypt.class); + when(encrypt.getPassword()).thenReturn("testPassword"); + when(encrypt.getSalt()).thenReturn("testSalt"); + + JsExecutor jsExecutor = mock(JsExecutor.class); + when(jsExecutor.getPassword()).thenReturn(nodePassword); + when(jsExecutor.getSalt()).thenReturn(nodeSalt); + + CommonConfig commonConfig = mock(CommonConfig.class); + when(commonConfig.getEncrypt()).thenReturn(encrypt); + when(commonConfig.getJsExecutor()).thenReturn(jsExecutor); + + encryptionService = new EncryptionServiceImpl(commonConfig); + + // For direct comparison in test + String saltInHexForNodeServer = org.apache.commons.codec.binary.Hex.encodeHexString(nodeSalt.getBytes()); + nodeServerEncryptor = Encryptors.text(nodePassword, saltInHexForNodeServer); + } + + @Test + void testEncryptStringForNodeServer_NullInput() { + assertNull(encryptionService.encryptStringForNodeServer(null)); + } + + @Test + void testEncryptStringForNodeServer_EmptyInput() { + assertEquals("", encryptionService.encryptStringForNodeServer("")); + } + + @Test + void testEncryptStringForNodeServer_EncryptsAndDecryptsCorrectly() { + String plain = "node secret"; + String encrypted = encryptionService.encryptStringForNodeServer(plain); + assertNotNull(encrypted); + assertNotEquals(plain, encrypted); + + // Decrypt using the same encryptor to verify correctness + String decrypted = nodeServerEncryptor.decrypt(encrypted); + assertEquals(plain, decrypted); + } + + @Test + void testEncryptStringForNodeServer_DifferentInputsProduceDifferentOutputs() { + String encrypted1 = encryptionService.encryptStringForNodeServer("abc"); + String encrypted2 = encryptionService.encryptStringForNodeServer("def"); + assertNotEquals(encrypted1, encrypted2); + } + + @Test + void testEncryptStringForNodeServer_SameInputProducesDifferentOutputs() { + String input = "repeat"; + String encrypted1 = encryptionService.encryptStringForNodeServer(input); + String encrypted2 = encryptionService.encryptStringForNodeServer(input); + // Spring's Encryptors.text uses random IV, so outputs should differ + assertNotEquals(encrypted1, encrypted2); + } +} \ No newline at end of file diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java index 17eb9db5a7..ad98de0f95 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationServiceImpl.java @@ -132,6 +132,7 @@ public Mono<Boolean> removeAllBiRelations(BiRelationBizType bizType, String sour Query query = new Query(); query.addCriteria(where(BIZ_TYPE).is(bizType)); query.addCriteria(where(SOURCE_ID).is(sourceId)); + query.addCriteria(where(RELATION).is("super_admin").not()); return mongoUpsertHelper.remove(query, BiRelation.class); } diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/AbstractEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/AbstractEvent.java index 131da031c5..54fc858991 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/AbstractEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/AbstractEvent.java @@ -1,5 +1,6 @@ package org.lowcoder.infra.event; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Getter; import lombok.Setter; import lombok.experimental.SuperBuilder; @@ -57,7 +58,16 @@ public void populateDetails(ContextView contextView) { try { f.setAccessible(Boolean.TRUE); value = f.get(this); - details.put(f.getName(), value); + JsonInclude jsonInclude = f.getAnnotation(JsonInclude.class); + if (jsonInclude != null && jsonInclude.value() == JsonInclude.Include.NON_NULL) { + // Include only if value is not null + if (value != null) { + details.put(f.getName(), value); + } + } else { + // Include regardless of value + details.put(f.getName(), value); + } } catch (Exception e) { } diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/ApplicationCommonEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/ApplicationCommonEvent.java index a53879bfee..616867bf6e 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/ApplicationCommonEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/ApplicationCommonEvent.java @@ -1,6 +1,7 @@ package org.lowcoder.infra.event; +import com.fasterxml.jackson.annotation.JsonInclude; import jakarta.annotation.Nullable; import lombok.Getter; import lombok.experimental.SuperBuilder; @@ -16,22 +17,42 @@ public class ApplicationCommonEvent extends AbstractEvent { private final String applicationName; private final String applicationCategory; private final String applicationDescription; + private final String applicationTitle; + private final String oldApplicationName; + private final String oldApplicationCategory; + private final String oldApplicationDescription; + private final String oldApplicationTitle; + private final String applicationAuthor; + private final String applicationAuthorOrgId; private final EventType type; @Nullable + @JsonInclude(JsonInclude.Include.NON_NULL) private final String folderId; @Nullable + @JsonInclude(JsonInclude.Include.NON_NULL) private final String folderName; @Nullable + @JsonInclude(JsonInclude.Include.NON_NULL) private final String oldFolderId; @Nullable + @JsonInclude(JsonInclude.Include.NON_NULL) private final String oldFolderName; + @JsonInclude(JsonInclude.Include.NON_NULL) private final String permissionId; + @JsonInclude(JsonInclude.Include.NON_NULL) private final String role; + @JsonInclude(JsonInclude.Include.NON_NULL) private final Set<String> userIds; + @JsonInclude(JsonInclude.Include.NON_NULL) private final Set<String> groupIds; + @JsonInclude(JsonInclude.Include.NON_NULL) private final String shareType; + @JsonInclude(JsonInclude.Include.NON_NULL) private final String tag; + @JsonInclude(JsonInclude.Include.NON_NULL) private final String commitMessage; + @JsonInclude(JsonInclude.Include.NON_NULL) + private final Object sharingDetails; @Override public EventType getEventType() { diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/BundleCommonEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/BundleCommonEvent.java new file mode 100644 index 0000000000..312f9cc544 --- /dev/null +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/BundleCommonEvent.java @@ -0,0 +1,31 @@ +package org.lowcoder.infra.event; + + +import jakarta.annotation.Nullable; +import lombok.Getter; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +public class BundleCommonEvent extends AbstractEvent { + + private final String bundleId; + private final String bundleGid; + private final String bundleName; + private final String bundleCategory; + private final String bundleDescription; + private final EventType type; + @Nullable + private final String folderId; + @Nullable + private final String folderName; + @Nullable + private final String oldFolderId; + @Nullable + private final String oldFolderName; + + @Override + public EventType getEventType() { + return type; + } +} diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/DatasourceResourcePermissionEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/DatasourceResourcePermissionEvent.java new file mode 100644 index 0000000000..efa8acc3da --- /dev/null +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/DatasourceResourcePermissionEvent.java @@ -0,0 +1,18 @@ +package org.lowcoder.infra.event; + +import lombok.Getter; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +public class DatasourceResourcePermissionEvent extends AbstractEvent { + + private final String datasourceId; + private final String name; + private final String type; + + private final Object oldPermission; + private final Object newPermission; + + private final EventType eventType; +} diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/FolderCommonEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/FolderCommonEvent.java index 23a4b8d0ed..603ca21a5a 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/FolderCommonEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/FolderCommonEvent.java @@ -9,6 +9,7 @@ public class FolderCommonEvent extends AbstractEvent { private final String id; private final String name; + private final String fromName; private final EventType type; @Override diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryEvent.java index 13b048246b..f6459eb2d5 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryEvent.java @@ -10,6 +10,7 @@ public class LibraryQueryEvent extends AbstractEvent { private String id; private String name; private EventType eventType; + private String oldName; @Override public EventType getEventType() { diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryPublishEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryPublishEvent.java new file mode 100644 index 0000000000..06b748b580 --- /dev/null +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/LibraryQueryPublishEvent.java @@ -0,0 +1,19 @@ +package org.lowcoder.infra.event; + +import lombok.Getter; +import lombok.experimental.SuperBuilder; + +@Getter +@SuperBuilder +public class LibraryQueryPublishEvent extends AbstractEvent { + + private String id; + private String oldVersion; + private String newVersion; + private EventType eventType; + + @Override + public EventType getEventType() { + return eventType; + } +} diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourceEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourceEvent.java index 2332806efc..8e1d7c6ec9 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourceEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourceEvent.java @@ -11,6 +11,7 @@ public class DatasourceEvent extends AbstractEvent { private final String datasourceId; private final String name; private final String type; + private final String oldName; private final EventType eventType; } diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourcePermissionEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourcePermissionEvent.java index d7dfd563bd..0d9b1899ad 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourcePermissionEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/datasource/DatasourcePermissionEvent.java @@ -5,6 +5,7 @@ import org.lowcoder.infra.event.AbstractEvent; import java.util.Collection; +import java.util.List; @Getter @SuperBuilder @@ -18,5 +19,8 @@ public class DatasourcePermissionEvent extends AbstractEvent { private final Collection<String> groupIds; private final String role; + private final List<?> oldPermissions; + private final List<?> newPermissions; + private final EventType eventType; } diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/BaseGroupEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/BaseGroupEvent.java index 7ffd5e087a..c603518e55 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/BaseGroupEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/BaseGroupEvent.java @@ -9,5 +9,4 @@ public abstract class BaseGroupEvent extends AbstractEvent { private final String groupId; - private final String groupName; } diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupCreateEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupCreateEvent.java index ab80e0cc09..5044617d78 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupCreateEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupCreateEvent.java @@ -5,6 +5,9 @@ @SuperBuilder public class GroupCreateEvent extends BaseGroupEvent { + private final String groupName; + private final String oldGroupName; + @Override public EventType getEventType() { return EventType.GROUP_CREATE; diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupDeleteEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupDeleteEvent.java index 2d7caa4956..b2e00a1995 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupDeleteEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupDeleteEvent.java @@ -5,6 +5,9 @@ @SuperBuilder public class GroupDeleteEvent extends BaseGroupEvent { + private final String groupName; + private final String oldGroupName; + @Override public EventType getEventType() { return EventType.GROUP_DELETE; diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupUpdateEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupUpdateEvent.java index 9d06c459ac..6742e07906 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupUpdateEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/group/GroupUpdateEvent.java @@ -5,6 +5,9 @@ @SuperBuilder public class GroupUpdateEvent extends BaseGroupEvent { + private final String groupName; + private final String oldGroupName; + @Override public EventType getEventType() { return EventType.GROUP_UPDATE; diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/BaseGroupMemberEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/BaseGroupMemberEvent.java index 26c5f1c52a..64d71354c3 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/BaseGroupMemberEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/BaseGroupMemberEvent.java @@ -8,9 +8,4 @@ @SuperBuilder public abstract class BaseGroupMemberEvent extends AbstractEvent { - private final String groupId; - private final String groupName; - private final String memberId; - private final String memberName; - private final String memberRole; } diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberAddEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberAddEvent.java index 52c17df485..57816f39b1 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberAddEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberAddEvent.java @@ -5,6 +5,12 @@ @SuperBuilder public class GroupMemberAddEvent extends BaseGroupMemberEvent { + private final String groupId; + private final String groupName; + private final String memberId; + private final String memberName; + private final String memberRole; + @Override public EventType getEventType() { return EventType.GROUP_MEMBER_ADD; diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberLeaveEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberLeaveEvent.java index d35db51988..3074ad5e7b 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberLeaveEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberLeaveEvent.java @@ -5,6 +5,12 @@ @SuperBuilder public class GroupMemberLeaveEvent extends BaseGroupMemberEvent { + private final String groupId; + private final String groupName; + private final String memberId; + private final String memberName; + private final String memberRole; + @Override public EventType getEventType() { return EventType.GROUP_MEMBER_LEAVE; diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRemoveEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRemoveEvent.java index 6b4fef1d2e..f7b9fd4efb 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRemoveEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRemoveEvent.java @@ -5,6 +5,12 @@ @SuperBuilder public class GroupMemberRemoveEvent extends BaseGroupMemberEvent { + private final String groupId; + private final String groupName; + private final String memberId; + private final String memberName; + private final String memberRole; + @Override public EventType getEventType() { return EventType.GROUP_MEMBER_REMOVE; diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRoleUpdateEvent.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRoleUpdateEvent.java index 785a28fc59..bbfc85d062 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRoleUpdateEvent.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/event/groupmember/GroupMemberRoleUpdateEvent.java @@ -5,6 +5,13 @@ @SuperBuilder public class GroupMemberRoleUpdateEvent extends BaseGroupMemberEvent { + private final String groupId; + private final String groupName; + private final String memberId; + private final String memberName; + private final String memberRole; + private final String oldMemberRole; + @Override public EventType getEventType() { return EventType.GROUP_MEMBER_ROLE_UPDATE; diff --git a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/pom.xml b/server/api-service/lowcoder-plugins/lowcoderApiPlugin/pom.xml deleted file mode 100644 index 7a9e6f4b96..0000000000 --- a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <parent> - <artifactId>lowcoder-plugins</artifactId> - <groupId>org.lowcoder</groupId> - <version>${revision}</version> - </parent> - <modelVersion>4.0.0</modelVersion> - - <groupId>org.lowcoder.plugins</groupId> - <artifactId>lowcoderApiPlugin</artifactId> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <java.version>17</java.version> - <maven.compiler.source>${java.version}</maven.compiler.source> - <maven.compiler.target>${java.version}</maven.compiler.target> - <plugin.id>lowcoder-api-plugin</plugin.id> - <plugin.class>org.lowcoder.plugin.LowcoderApiPlugin</plugin.class> - <plugin.version>${revision}</plugin.version> - <plugin.provider>service@lowcoder.org</plugin.provider> - <plugin.dependencies/> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <version>3.2.4</version> - <executions> - <execution> - <id>shade-plugin-jar</id> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <minimizeJar>false</minimizeJar> - <transformers> - <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - <manifestEntries> - <Plugin-Id>${plugin.id}</Plugin-Id> - <Plugin-Class>${plugin.class}</Plugin-Class> - <Plugin-Version>${plugin.version}</Plugin-Version> - <Plugin-Provider>${plugin.provider}</Plugin-Provider> - </manifestEntries> - </transformer> - </transformers> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <artifactId>maven-antrun-plugin</artifactId> - </plugin> - </plugins> - </build> - -</project> diff --git a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiConnector.java b/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiConnector.java deleted file mode 100644 index 71ae3e98ee..0000000000 --- a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiConnector.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.lowcoder.plugin; - -import jakarta.annotation.Nonnull; -import org.lowcoder.sdk.models.DatasourceTestResult; -import org.lowcoder.sdk.plugin.common.DatasourceConnector; -import org.lowcoder.sdk.plugin.lowcoderapi.LowcoderApiDatasourceConfig; -import org.pf4j.Extension; -import reactor.core.publisher.Mono; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -@Extension -public class LowcoderApiConnector implements DatasourceConnector<Object, LowcoderApiDatasourceConfig> { - - private static final Object CONNECTION_OBJECT = new Object(); - - @Override - public Mono<Object> createConnection(LowcoderApiDatasourceConfig connectionConfig) { - return Mono.just(CONNECTION_OBJECT); - } - - @Override - public Mono<Void> destroyConnection(Object o) { - return Mono.empty(); - } - - @Override - public Mono<DatasourceTestResult> testConnection(LowcoderApiDatasourceConfig connectionConfig) { - return Mono.just(DatasourceTestResult.testSuccess()); - } - - @Nonnull - @Override - public LowcoderApiDatasourceConfig resolveConfig(Map<String, Object> configMap) { - return LowcoderApiDatasourceConfig.INSTANCE; - } - - @Override - public Set<String> validateConfig(LowcoderApiDatasourceConfig connectionConfig) { - return Collections.emptySet(); - } - -} diff --git a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiExecutor.java b/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiExecutor.java deleted file mode 100644 index 34c8ec9759..0000000000 --- a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiExecutor.java +++ /dev/null @@ -1,131 +0,0 @@ -package org.lowcoder.plugin; - -import static java.util.Collections.emptyList; -import static java.util.Optional.ofNullable; -import static org.lowcoder.sdk.constants.Authentication.isAnonymousUser; -import static org.lowcoder.sdk.models.QueryExecutionResult.error; -import static org.lowcoder.sdk.models.QueryExecutionResult.success; -import static org.lowcoder.sdk.util.StreamUtils.collectList; - -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; - -import org.apache.commons.collections4.MapUtils; -import org.lowcoder.sdk.exception.PluginException; -import org.lowcoder.sdk.models.QueryExecutionResult; -import org.lowcoder.sdk.plugin.common.QueryExecutor; -import org.lowcoder.sdk.plugin.lowcoderapi.LowcoderApiDatasourceConfig; -import org.lowcoder.sdk.query.QueryVisitorContext; -import org.lowcoder.sdk.util.CookieHelper; -import org.pf4j.Extension; -import org.springframework.http.HttpCookie; -import org.springframework.http.HttpMethod; -import org.springframework.util.MultiValueMap; -import org.springframework.web.reactive.function.client.WebClient; - -import lombok.Getter; -import lombok.Setter; -import reactor.core.publisher.Mono; - -@Extension -public class LowcoderApiExecutor implements QueryExecutor<LowcoderApiDatasourceConfig, Object, LowcoderApiQueryExecutionContext> { - private static final String QUERY_ORG_USERS = "queryOrgUsers"; - - private final String cookieName; - - public LowcoderApiExecutor(CookieHelper cookieHelper) { - cookieName = cookieHelper.getCookieName(); - } - - @Override - public LowcoderApiQueryExecutionContext buildQueryExecutionContext(LowcoderApiDatasourceConfig datasourceConfig, - Map<String, Object> queryConfig, - Map<String, Object> requestParams, QueryVisitorContext queryVisitorContext) { - - String actionType = MapUtils.getString(queryConfig, "compType", ""); - MultiValueMap<String, HttpCookie> cookies = queryVisitorContext.getCookies(); - if (actionType.equalsIgnoreCase(QUERY_ORG_USERS)) { - return LowcoderApiQueryExecutionContext.builder() - .actionType(actionType) - .visitorId(queryVisitorContext.getVisitorId()) - .applicationOrgId(queryVisitorContext.getApplicationOrgId()) - .requestCookies(cookies) - .port(queryVisitorContext.getSystemPort()) - .build(); - } - throw new PluginException(LowcoderApiPluginError.LOWCODER_API_INVALID_REQUEST_TYPE, "LOWCODER_INTERNAL_INVALID_REQUEST_TYPE"); - } - - @Override - public Mono<QueryExecutionResult> executeQuery(Object o, LowcoderApiQueryExecutionContext context) { - - String actionType = context.getActionType(); - if (actionType.equals(QUERY_ORG_USERS)) { - return doListOrgUsers0(context); - } - - throw new PluginException(LowcoderApiPluginError.LOWCODER_API_INVALID_REQUEST_TYPE, "LOWCODER_INTERNAL_INVALID_REQUEST_TYPE"); - } - - private Mono<QueryExecutionResult> doListOrgUsers0(LowcoderApiQueryExecutionContext context) { - - String visitorId = context.getVisitorId(); - if (isAnonymousUser(visitorId)) { - return Mono.just(QueryExecutionResult.success(emptyList())); - } - - String url = "http://localhost:" + context.getPort() + "/api/v1/organizations/" + context.getApplicationOrgId() + "/members"; - - return WebClient.builder() - .defaultCookies(injectCookies(context)) - .build() - .method(HttpMethod.GET) - .uri(url) - .exchangeToMono(clientResponse -> clientResponse.bodyToMono(LowcoderResponse.class)) - .map(responseView -> { - if (responseView.isSuccess()) { - return success(ofNullable(responseView.getData()) - .map(it -> MapUtils.getObject(it, "members", emptyList())) - .orElse(emptyList()) - ); - } - return error(LowcoderApiPluginError.LOWCODER_API_REQUEST_ERROR, "REQUEST_ERROR", - responseView.getCode(), responseView.getMessage()); - }) - .onErrorResume(e -> Mono.just( - QueryExecutionResult.error(LowcoderApiPluginError.LOWCODER_API_REQUEST_ERROR, "LOWCODER_INTERNAL_REQUEST_ERROR", - e.getMessage()))); - } - - private Consumer<MultiValueMap<String, String>> injectCookies(LowcoderApiQueryExecutionContext request) { - return currentCookies -> { - MultiValueMap<String, HttpCookie> requestCookies = request.getRequestCookies(); - - requestCookies.entrySet() - .stream() - .filter(it -> cookieName.equals(it.getKey())) - .forEach(entry -> { - String cookieName = entry.getKey(); - List<HttpCookie> httpCookies = entry.getValue(); - currentCookies.addAll(cookieName, collectList(httpCookies, HttpCookie::getValue)); - }); - }; - } - - @Getter - @Setter - private static class LowcoderResponse { - - public static final int SUCCESS = 1; - private int code; - private String message; - private Map<String, Object> data; - - public boolean isSuccess() { - return code == SUCCESS; - } - } - - -} diff --git a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiPlugin.java b/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiPlugin.java deleted file mode 100644 index ff677f5629..0000000000 --- a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiPlugin.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.lowcoder.plugin; - -import org.pf4j.Plugin; -import org.pf4j.PluginWrapper; - -public class LowcoderApiPlugin extends Plugin { - - public LowcoderApiPlugin(PluginWrapper wrapper) { - super(wrapper); - } -} diff --git a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiPluginError.java b/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiPluginError.java deleted file mode 100644 index 503f543640..0000000000 --- a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiPluginError.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.lowcoder.plugin; - -import org.lowcoder.sdk.exception.PluginError; - -public enum LowcoderApiPluginError implements PluginError { - - LOWCODER_API_REQUEST_ERROR, - LOWCODER_API_INVALID_REQUEST_TYPE, -} diff --git a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiQueryExecutionContext.java b/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiQueryExecutionContext.java deleted file mode 100644 index 74b209b74b..0000000000 --- a/server/api-service/lowcoder-plugins/lowcoderApiPlugin/src/main/java/org/lowcoder/plugin/LowcoderApiQueryExecutionContext.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.lowcoder.plugin; - -import org.lowcoder.sdk.query.QueryExecutionContext; -import org.springframework.http.HttpCookie; -import org.springframework.util.MultiValueMap; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class LowcoderApiQueryExecutionContext extends QueryExecutionContext { - - private int port; - private String actionType; - private String visitorId; - private String applicationOrgId; - private MultiValueMap<String, HttpCookie> requestCookies; -} diff --git a/server/api-service/lowcoder-plugins/pom.xml b/server/api-service/lowcoder-plugins/pom.xml index fc506109c9..647d1ba88f 100644 --- a/server/api-service/lowcoder-plugins/pom.xml +++ b/server/api-service/lowcoder-plugins/pom.xml @@ -112,11 +112,11 @@ <artifactId>mysqlPlugin</artifactId> <version>${revision}</version> </dependency> - <dependency> + <!-- <dependency> <groupId>org.lowcoder</groupId> <artifactId>lowcoderApiPlugin</artifactId> <version>${revision}</version> - </dependency> + </dependency> --> <dependency> <groupId>org.lowcoder</groupId> <artifactId>elasticSearchPlugin</artifactId> @@ -213,7 +213,6 @@ <module>restApiPlugin</module> <module>mongoPlugin</module> <module>mysqlPlugin</module> - <module>lowcoderApiPlugin</module> <module>elasticSearchPlugin</module> <module>redisPlugin</module> <module>mssqlPlugin</module> diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/config/CommonConfig.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/config/CommonConfig.java index b50d069354..697f42fcd6 100644 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/config/CommonConfig.java +++ b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/config/CommonConfig.java @@ -147,6 +147,9 @@ public long getMaxAgeInSeconds() { @Data public static class JsExecutor { private String host; + private String password; + private String salt; + private boolean isEncrypted; } @Data diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/constants/GlobalContext.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/constants/GlobalContext.java index 6bded8efb0..7d4765660e 100644 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/constants/GlobalContext.java +++ b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/constants/GlobalContext.java @@ -17,4 +17,5 @@ public class GlobalContext { public static final String CURRENT_ORG_MEMBER = "currentOrgMember"; public static final String DOMAIN = "domain"; public static final String HEADERS = "headers"; + } \ No newline at end of file diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/lowcoderapi/LowcoderApiDatasourceConfig.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/lowcoderapi/LowcoderApiDatasourceConfig.java deleted file mode 100644 index 9705a0b0c8..0000000000 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/plugin/lowcoderapi/LowcoderApiDatasourceConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.lowcoder.sdk.plugin.lowcoderapi; - -import org.lowcoder.sdk.models.DatasourceConnectionConfig; - -public class LowcoderApiDatasourceConfig implements DatasourceConnectionConfig { - - public static final LowcoderApiDatasourceConfig INSTANCE = new LowcoderApiDatasourceConfig(); - - @Override - public DatasourceConnectionConfig mergeWithUpdatedConfig(DatasourceConnectionConfig detailConfig) { - return detailConfig; - } -} diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java index 85e1e38b9b..c1d4620376 100644 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java +++ b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java @@ -1,8 +1,11 @@ package org.lowcoder.sdk.webclient; +import io.netty.channel.ChannelOption; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.timeout.WriteTimeoutHandler; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -24,6 +27,7 @@ import java.security.cert.X509Certificate; import java.time.Duration; import java.util.Set; +import java.util.concurrent.TimeUnit; @Slf4j public class WebClientBuildHelper { @@ -87,7 +91,12 @@ public Builder toWebClientBuilder() { HttpClient httpClient = HttpClient.create(); if (timeoutMs != null) { - httpClient.responseTimeout(Duration.ofMillis(timeoutMs)); + httpClient = httpClient + .responseTimeout(Duration.ofMillis(timeoutMs)) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, timeoutMs.intValue()) + .doOnConnected(conn -> conn + .addHandlerLast(new ReadTimeoutHandler(timeoutMs, TimeUnit.MILLISECONDS)) + .addHandlerLast(new WriteTimeoutHandler(timeoutMs, TimeUnit.MILLISECONDS))); } if (sslConfig != null) { diff --git a/server/api-service/lowcoder-server/pom.xml b/server/api-service/lowcoder-server/pom.xml index 8fc6c379ac..ccfb6998a7 100644 --- a/server/api-service/lowcoder-server/pom.xml +++ b/server/api-service/lowcoder-server/pom.xml @@ -56,10 +56,10 @@ <artifactId>lowcoder-plugin-api</artifactId> </dependency> - <dependency> - <groupId>ch.qos.logback</groupId> - <artifactId>logback-classic</artifactId> - </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> @@ -77,6 +77,11 @@ <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webflux-ui</artifactId> </dependency> + <dependency> + <groupId>org.springdoc</groupId> + <artifactId>springdoc-openapi-webflux-ui</artifactId> + <version>1.8.0</version> + </dependency> <dependency> <groupId>io.projectreactor.tools</groupId> <artifactId>blockhound</artifactId> diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/OpenAPIDocsConfiguration.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/OpenAPIDocsConfiguration.java index 330c483a72..877dd4fc27 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/OpenAPIDocsConfiguration.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/OpenAPIDocsConfiguration.java @@ -2,114 +2,153 @@ import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.PathItem; +import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.servers.Server; import io.swagger.v3.oas.models.servers.ServerVariable; import io.swagger.v3.oas.models.servers.ServerVariables; +import io.swagger.v3.oas.models.tags.Tag; import org.lowcoder.sdk.config.CommonConfig; +import org.springdoc.core.customizers.OpenApiCustomiser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Arrays; +import java.util.Comparator; +import java.util.Map; +import java.util.TreeMap; @Configuration public class OpenAPIDocsConfiguration { + @Autowired private CommonConfig commonConfig; @Value("${server.port:8080}") private int serverPort; - + @Value("${spring.webflux.base-path:/}") private String contextPath; - - @Bean - OpenAPI customizeOpenAPI() { + /** + * Configures the core OpenAPI spec including servers, security and info. + */ + @Bean + public OpenAPI customizeOpenAPI() { final String securitySchemeName = commonConfig.getCookieName(); return new OpenAPI() - .info(new Info() - .title("Lowcoder Open Rest API") - .version(commonConfig.getApiVersion())) - /*.addServersItem(new Server() - .url(createLocalServerUrl("localhost", serverPort, contextPath)) - .description("Local development API service") - ) */ - .addServersItem(createCustomServer()) - .addServersItem(new Server() - .url("https://api-service.lowcoder.cloud/") - .description("Lowcoder Community Edition: Public Cloud API Access") - ) - .addSecurityItem(new SecurityRequirement() - .addList(securitySchemeName)).components(new Components() - /* .addSecuritySchemes( - securitySchemeName, - new SecurityScheme() - .name(securitySchemeName) - .type(SecurityScheme.Type.HTTP) // HTTP-based authentication - .scheme("cookie") // Specify the authentication scheme as "cookie" - .description("Cookie-based authentication. Please ensure the client sends cookies with each request after authentication.") - ) */ - .addSecuritySchemes( - "API Key", - new SecurityScheme() - .name("Authorization") - .type(SecurityScheme.Type.APIKEY) - .in(SecurityScheme.In.HEADER) - .scheme("bearer") - .bearerFormat("JWT") - .description("API Key Authentication with a Bearer token. Copy your API Key and prefix it here with 'Bearer ' (e.g. 'Bearer eyJhbGciO...'") - ) - ); - } - - - /* private static String createLocalServerUrl(String domain, int port, String contextPath) - { - StringBuilder sb = new StringBuilder("http"); - - if (port == 443) - { - sb.append("s"); - } - sb.append("://").append(domain); - - if (port != 80 && port != 443) - { - sb.append(":").append(port); - } - sb.append(contextPath); - - return sb.toString(); - } */ + .info(new Info() + .title("Lowcoder Open Rest API") + .version(commonConfig.getApiVersion())) + .addServersItem(createCustomServer()) + .addServersItem(new Server() + .url("https://api-service.lowcoder.cloud/") + .description("Lowcoder Community Edition: Public Cloud API Access")) + .addSecurityItem(new SecurityRequirement().addList(securitySchemeName)) + .components(new Components() + .addSecuritySchemes("APIKey", new SecurityScheme() + .name("Authorization") + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .scheme("bearer") + .bearerFormat("JWT") + .description("API Key Authentication with a Bearer token. Copy your API Key and prefix it here with 'Bearer ' (e.g. 'Bearer eyJhbGciO...')")) + + ) + .tags(Arrays.asList( - private Server createCustomServer() - { - String url = "{scheme}://{domain}:{port}{basePath}"; - - Server server = new Server() - .description("Lowcoder Self-hosted Installation API Access") - .url(url) - .variables(new ServerVariables() - .addServerVariable("scheme", new ServerVariable() - ._default("http") - .description("HTTP scheme") - ._enum(Arrays.asList("http", "https"))) - .addServerVariable("domain", new ServerVariable() - .description("Lowcoder IP address or domain") - ._default("localhost")) - .addServerVariable("port", new ServerVariable() - .description("Port") - ._default("3000")) - .addServerVariable("basePath", new ServerVariable() - .description("Base path") - ._default(contextPath)) - ); - return server; + new Tag().name("Application APIs").description("Application APIs"), + new Tag().name("Application History APIs").description("Application History APIs"), + new Tag().name("Application Permissions APIs").description("Application Permissions APIs"), + new Tag().name("Application Record APIs").description("Application Record APIs"), + + new Tag().name("Bundle APIs").description("Bundle APIs"), + new Tag().name("Bundle Permissions APIs").description("Bundle Permissions APIs"), + + new Tag().name("Folder APIs").description("Folder APIs"), + new Tag().name("Folder Permissions APIs").description("Folder Permissions APIs"), + + new Tag().name("Data Source APIs").description("Data Source APIs"), + new Tag().name("Data Source Permissions APIs").description("Data Source Permissions APIs"), + + new Tag().name("Query Execution APIs").description("Query Execution APIs"), + new Tag().name("Query Library APIs").description("Query Library APIs"), + new Tag().name("Library Queries Record APIs").description("Library Queries Record APIs"), + + new Tag().name("File APIs").description("File APIs"), + new Tag().name("Meta APIs").description("Meta APIs"), + new Tag().name("Image Assets APIs").description("Image Assets APIs"), + + new Tag().name("User APIs").description("User APIs"), + new Tag().name("User Password APIs").description("User Password APIs"), + new Tag().name("User Profile Photo APIs").description("User Profile Photo APIs"), + new Tag().name("User invitation APIs").description("User invitation APIs"), + new Tag().name("Authentication APIs").description("Authentication APIs"), + + new Tag().name("Group APIs").description("Group APIs"), + new Tag().name("Group Members APIs").description("Group Members APIs"), + + new Tag().name("Organization APIs").description("Organization APIs"), + new Tag().name("Organization Member APIs").description("Organization Member APIs"), + new Tag().name("Configuration APIs").description("Configuration APIs"), + + new Tag().name("API Root Endpoint").description("API Root Endpoint"), + new Tag().name("Status checks APIs").description("Status checks APIs"), + new Tag().name("Server Setting APIs").description("Server Setting APIs"), + new Tag().name("Private NPM registry APIs").description("Private NPM registry APIs"), + new Tag().name("Javascript Library APIs").description("Javascript Library APIs") + )); + } + + /** + * Creates a dynamic server entry using server variables. + */ + private Server createCustomServer() { + String url = "{scheme}://{domain}:{port}{basePath}"; + + return new Server() + .description("Lowcoder Self-hosted Installation API Access") + .url(url) + .variables(new ServerVariables() + .addServerVariable("scheme", new ServerVariable() + ._default("http") + .description("HTTP scheme") + ._enum(Arrays.asList("http", "https"))) + .addServerVariable("domain", new ServerVariable() + .description("Lowcoder IP address or domain") + ._default("localhost")) + .addServerVariable("port", new ServerVariable() + .description("Port") + ._default("3000")) + .addServerVariable("basePath", new ServerVariable() + .description("Base path") + ._default(contextPath))); + } + + /** + * Customizes the OpenAPI spec at runtime to sort tags and paths. + */ + @Bean + public OpenApiCustomiser sortOpenApiSpec() { + return openApi -> { + // Sort tags alphabetically + if (openApi.getTags() != null) { + openApi.getTags().sort(Comparator.comparing(Tag::getName)); + } + + // Sort paths alphabetically by their URL + if (openApi.getPaths() != null) { + Map<String, PathItem> sorted = new TreeMap<>(openApi.getPaths()); + Paths sortedPaths = new Paths(); + sorted.forEach(sortedPaths::addPathItem); + openApi.setPaths(sortedPaths); + } + }; } -} \ No newline at end of file +} diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java index 23b1bbd3a0..fdb40cc04e 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiService.java @@ -10,6 +10,8 @@ import org.lowcoder.domain.permission.model.ResourceAction; import org.lowcoder.domain.permission.model.ResourcePermission; import org.lowcoder.domain.permission.model.ResourceRole; +import org.springframework.web.bind.annotation.PathVariable; + import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -26,13 +28,13 @@ public interface ApplicationApiService { Mono<Boolean> restore(String applicationId); - Mono<ApplicationView> getEditingApplication(String applicationId); + Mono<ApplicationView> getEditingApplication(String applicationId, Boolean withDeleted); - Mono<ApplicationView> getPublishedApplication(String applicationId, ApplicationRequestType requestType); + Mono<ApplicationView> getPublishedApplication(String applicationId, ApplicationRequestType requestType, Boolean withDeleted); Mono<Void> updateUserApplicationLastViewTime(String applicationId); - Mono<ApplicationView> update(String applicationId, Application application); + Mono<ApplicationView> update(String applicationId, Application application, Boolean updateStatus); Mono<ApplicationView> publish(String applicationId, ApplicationPublishRequest applicationPublishRequest); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java index c520e35437..89ff852d8c 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationApiServiceImpl.java @@ -49,6 +49,8 @@ import org.lowcoder.sdk.util.ExceptionUtils; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; + import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -134,10 +136,11 @@ public Mono<ApplicationView> create(CreateApplicationRequest createApplicationRe .delayUntil(created -> autoGrantPermissionsByFolderDefault(created.getId(), createApplicationRequest.folderId())) .delayUntil(created -> folderApiService.move(created.getId(), createApplicationRequest.folderId())) - .map(applicationCreated -> ApplicationView.builder() - .applicationInfoView(buildView(applicationCreated, "", createApplicationRequest.folderId())) + .flatMap(applicationCreated -> buildView(applicationCreated, "", createApplicationRequest.folderId()) + .map(infoViewMono -> ApplicationView.builder() + .applicationInfoView(infoViewMono) .applicationDSL(applicationCreated.getEditingApplicationDSL()) - .build()); + .build())); } private Mono<Void> autoGrantPermissionsByFolderDefault(String applicationId, @Nullable String folderId) { @@ -250,7 +253,7 @@ private Mono<Boolean> updateApplicationStatus(String applicationId, ApplicationS } @Override - public Mono<ApplicationView> getEditingApplication(String applicationId) { + public Mono<ApplicationView> getEditingApplication(String applicationId, Boolean withDeleted) { return applicationService.findById(applicationId).filter(application -> application.isPublicToAll() && application.isPublicToMarketplace()) .map(application -> { ResourcePermission permission = ResourcePermission.builder().resourceRole(ResourceRole.VIEWER).build(); @@ -258,7 +261,7 @@ public Mono<ApplicationView> getEditingApplication(String applicationId) { }) .switchIfEmpty(checkPermissionWithReadableErrorMsg(applicationId, EDIT_APPLICATIONS)) .zipWhen(permission -> applicationService.findById(applicationId) - .delayUntil(application -> checkApplicationStatus(application, NORMAL))) + .delayUntil(application -> Boolean.TRUE.equals(withDeleted)? Mono.empty() : checkApplicationStatus(application, NORMAL))) .zipWhen(tuple -> applicationService.getAllDependentModulesFromApplication(tuple.getT2(), false), TupleUtils::merge) .zipWhen(tuple -> organizationService.getOrgCommonSettings(tuple.getT2().getOrganizationId()), TupleUtils::merge) .flatMap(tuple -> { @@ -284,10 +287,10 @@ public Mono<ApplicationView> getEditingApplication(String applicationId) { } @Override - public Mono<ApplicationView> getPublishedApplication(String applicationId, ApplicationRequestType requestType) { + public Mono<ApplicationView> getPublishedApplication(String applicationId, ApplicationRequestType requestType, Boolean withDeleted) { return checkApplicationPermissionWithReadableErrorMsg(applicationId, READ_APPLICATIONS, requestType) .zipWhen(permission -> applicationService.findById(applicationId) - .delayUntil(application -> checkApplicationStatus(application, NORMAL)) + .delayUntil(application -> Boolean.TRUE.equals(withDeleted)? Mono.empty() : checkApplicationStatus(application, NORMAL)) .delayUntil(application -> checkApplicationViewRequest(application, requestType))) .zipWhen(tuple -> applicationService.getAllDependentModulesFromApplication(tuple.getT2(), true), TupleUtils::merge) .zipWhen(tuple -> organizationService.getOrgCommonSettings(tuple.getT2().getOrganizationId()), TupleUtils::merge) @@ -344,23 +347,24 @@ public Mono<Void> updateUserApplicationLastViewTime(String applicationId) { } @Override - public Mono<ApplicationView> update(String applicationId, Application application) { - return checkApplicationStatus(applicationId, NORMAL) + public Mono<ApplicationView> update(String applicationId, Application application, Boolean updateStatus) { + return (Boolean.TRUE.equals(updateStatus) ? Mono.empty() : checkApplicationStatus(applicationId, NORMAL)) .then(sessionUserService.getVisitorId()) .flatMap(userId -> resourcePermissionService.checkAndReturnMaxPermission(userId, applicationId, EDIT_APPLICATIONS)) .delayUntil(__ -> checkDatasourcePermissions(application)) - .flatMap(permission -> doUpdateApplication(applicationId, application) + .flatMap(permission -> doUpdateApplication(applicationId, application, updateStatus) .flatMap(applicationUpdated -> buildView(applicationUpdated, permission.getResourceRole().getValue()).map(appInfoView -> ApplicationView.builder() .applicationInfoView(appInfoView) .applicationDSL(applicationUpdated.getEditingApplicationDSL()) .build()))); } - private Mono<Application> doUpdateApplication(String applicationId, Application application) { + private Mono<Application> doUpdateApplication(String applicationId, Application application, Boolean updateStatus) { Application applicationUpdate = Application.builder() .editingApplicationDSL(application.getEditingApplicationDSLOrNull()) .name(application.getName()) + .applicationStatus(Boolean.TRUE.equals(updateStatus) ? application.getApplicationStatus() : null) .build(); return applicationService.updateById(applicationId, applicationUpdate) .then(applicationService.findById(applicationId)); @@ -553,7 +557,7 @@ public Mono<ResourcePermission> checkApplicationPermissionWithReadableErrorMsg(S private Mono<ApplicationInfoView> buildView(Application application, String role) { - return Mono.just(buildView(application, role, null)).delayUntil(applicationInfoView -> { + return buildView(application, role, null).delayUntil(applicationInfoView -> { String applicationId = applicationInfoView.getApplicationId(); return folderElementRelationService.getByElementIds(List.of(applicationId)) .doOnNext(folderElement -> { @@ -562,25 +566,33 @@ private Mono<ApplicationInfoView> buildView(Application application, String role }); } - private ApplicationInfoView buildView(Application application, String role, @Nullable String folderId) { - return ApplicationInfoView.builder() - .applicationId(application.getId()) - .applicationGid(application.getGid()) - .orgId(application.getOrganizationId()) - .name(application.getName()) - .createBy(application.getCreatedBy()) - .createAt(application.getCreatedAt().toEpochMilli()) - .role(role) - .applicationType(application.getApplicationType()) - .applicationStatus(application.getApplicationStatus()) - .folderId(folderId) - .publicToAll(application.isPublicToAll()) - .publicToMarketplace(application.isPublicToMarketplace()) - .agencyProfile(application.agencyProfile()) - .editingUserId(application.getEditingUserId()) - .lastModifyTime(application.getUpdatedAt()) - .lastEditedAt(application.getLastEditedAt()) - .build(); + private Mono<ApplicationInfoView> buildView(Application application, String role, @Nullable String folderId) { + return application.getCategory(applicationRecordService) + .zipWith(application.getDescription(applicationRecordService)) + .zipWith(application.getTitle(applicationRecordService), TupleUtils::merge) + .map(tuple -> + ApplicationInfoView.builder() + .applicationId(application.getId()) + .applicationGid(application.getGid()) + .orgId(application.getOrganizationId()) + .name(application.getName()) + .createBy(application.getCreatedBy()) + .createAt(application.getCreatedAt().toEpochMilli()) + .role(role) + .applicationType(application.getApplicationType()) + .applicationStatus(application.getApplicationStatus()) + .folderId(folderId) + .publicToAll(application.isPublicToAll()) + .publicToMarketplace(application.isPublicToMarketplace()) + .agencyProfile(application.agencyProfile()) + .editingUserId(application.getEditingUserId()) + .lastModifyTime(application.getUpdatedAt()) + .lastEditedAt(application.getLastEditedAt()) + .category(tuple.getT1()) + .description(tuple.getT2()) + .title(tuple.getT3()) + .build() + ); } private Mono<ApplicationInfoView> buildView(Application application) { diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java index 9962783cfb..42ec869ec3 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationController.java @@ -41,31 +41,33 @@ public class ApplicationController implements ApplicationEndpoints { @Override public Mono<ResponseView<ApplicationView>> create(@RequestBody CreateApplicationRequest createApplicationRequest) { return applicationApiService.create(createApplicationRequest) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_CREATE)) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(null, applicationView, APPLICATION_CREATE)) .map(ResponseView::success); } @Override public Mono<ResponseView<ApplicationView>> createFromTemplate(@RequestParam String templateId) { return applicationApiService.createFromTemplate(templateId) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_CREATE)) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(null, applicationView, APPLICATION_CREATE)) .map(ResponseView::success); } @Override public Mono<ResponseView<Boolean>> recycle(@PathVariable String applicationId) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.recycle(appId) - .delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, null, APPLICATION_RECYCLED)) - .map(ResponseView::success)); + applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView -> + applicationApiService.recycle(appId) + .delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationId, originalApplicationView.getApplicationInfoView().getFolderId(), null, APPLICATION_RECYCLED)) + .map(ResponseView::success))); } @Override public Mono<ResponseView<Boolean>> restore(@PathVariable String applicationId) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.restore(appId) - .delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(applicationId, null, null, APPLICATION_RESTORE)) - .map(ResponseView::success)); + applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView -> + applicationApiService.restore(appId) + .delayUntil(__ -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationId, null, null, APPLICATION_RESTORE)) + .map(ResponseView::success))); } @Override @@ -78,53 +80,56 @@ public Mono<ResponseView<List<ApplicationInfoView>>> getRecycledApplications(@Re @Override public Mono<ResponseView<ApplicationView>> delete(@PathVariable String applicationId) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.delete(appId) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_DELETE)) - .map(ResponseView::success)); + applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView -> + applicationApiService.delete(appId) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_DELETE)) + .map(ResponseView::success))); } @Override - public Mono<ResponseView<ApplicationView>> getEditingApplication(@PathVariable String applicationId) { + public Mono<ResponseView<ApplicationView>> getEditingApplication(@PathVariable String applicationId, @RequestParam(required = false) Boolean withDeleted) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.getEditingApplication(appId) + applicationApiService.getEditingApplication(appId, withDeleted) .delayUntil(__ -> applicationApiService.updateUserApplicationLastViewTime(appId)) .map(ResponseView::success)); } @Override - public Mono<ResponseView<ApplicationView>> getPublishedApplication(@PathVariable String applicationId) { + public Mono<ResponseView<ApplicationView>> getPublishedApplication(@PathVariable String applicationId, @RequestParam(required = false) Boolean withDeleted) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_ALL) - .delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId)) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_VIEW)) - .map(ResponseView::success)); + applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_ALL, withDeleted) + .delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId)) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, applicationView, APPLICATION_VIEW)) + .map(ResponseView::success)); } @Override public Mono<ResponseView<ApplicationView>> getPublishedMarketPlaceApplication(@PathVariable String applicationId) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_MARKETPLACE) - .delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId)) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_VIEW)) - .map(ResponseView::success)); + applicationApiService.getPublishedApplication(appId, ApplicationRequestType.PUBLIC_TO_MARKETPLACE, false) + .delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId)) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, applicationView, APPLICATION_VIEW)) + .map(ResponseView::success)); } @Override public Mono<ResponseView<ApplicationView>> getAgencyProfileApplication(@PathVariable String applicationId) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.getPublishedApplication(appId, ApplicationRequestType.AGENCY_PROFILE) - .delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId)) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_VIEW)) - .map(ResponseView::success)); + applicationApiService.getPublishedApplication(appId, ApplicationRequestType.AGENCY_PROFILE, false) + .delayUntil(applicationView -> applicationApiService.updateUserApplicationLastViewTime(appId)) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, applicationView, APPLICATION_VIEW)) + .map(ResponseView::success)); } @Override public Mono<ResponseView<ApplicationView>> update(@PathVariable String applicationId, - @RequestBody Application newApplication) { + @RequestBody Application newApplication, + @RequestParam(required = false) Boolean updateStatus) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> - applicationApiService.update(appId, newApplication) - .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(applicationView, APPLICATION_UPDATE)) - .map(ResponseView::success)); + applicationApiService.getEditingApplication(appId, true).flatMap(originalApplicationView -> + applicationApiService.update(appId, newApplication, updateStatus) + .delayUntil(applicationView -> businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationView, APPLICATION_UPDATE)) + .map(ResponseView::success))); } @Override @@ -270,7 +275,8 @@ public Mono<ResponseView<Boolean>> setApplicationPublicToAll(@PathVariable Strin @RequestBody ApplicationPublicToAllRequest request) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> applicationApiService.setApplicationPublicToAll(appId, request.publicToAll()) - .delayUntil(__ -> businessEventPublisher.publishApplicationSharingEvent(applicationId, "PublicToAll")) + .delayUntil(__ -> applicationApiService.getApplicationPermissions(appId) + .flatMap(applicationPermissionView -> businessEventPublisher.publishApplicationSharingEvent(applicationId, "PublicToAll", applicationPermissionView))) .map(ResponseView::success)); } @@ -279,7 +285,8 @@ public Mono<ResponseView<Boolean>> setApplicationPublicToMarketplace(@PathVariab @RequestBody ApplicationPublicToMarketplaceRequest request) { return gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> applicationApiService.setApplicationPublicToMarketplace(appId, request) - .delayUntil(__ -> businessEventPublisher.publishApplicationSharingEvent(applicationId, "PublicToMarketplace")) + .delayUntil(__ -> applicationApiService.getApplicationPermissions(appId) + .flatMap(applicationPermissionView -> businessEventPublisher.publishApplicationSharingEvent(applicationId, "PublicToMarketplace", applicationPermissionView))) .map(ResponseView::success)); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java index f49912e1c2..21615764c7 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/application/ApplicationEndpoints.java @@ -89,7 +89,7 @@ public interface ApplicationEndpoints description = "Retrieve the DSL data of a Lowcoder Application in edit-mode by its ID." ) @GetMapping("/{applicationId}") - public Mono<ResponseView<ApplicationView>> getEditingApplication(@PathVariable String applicationId); + public Mono<ResponseView<ApplicationView>> getEditingApplication(@PathVariable String applicationId, @RequestParam(required = false) Boolean withDeleted); @Operation( tags = TAG_APPLICATION_MANAGEMENT, @@ -98,7 +98,7 @@ public interface ApplicationEndpoints description = "Retrieve the DSL data of a Lowcoder Application in view-mode by its ID." ) @GetMapping("/{applicationId}/view") - public Mono<ResponseView<ApplicationView>> getPublishedApplication(@PathVariable String applicationId); + public Mono<ResponseView<ApplicationView>> getPublishedApplication(@PathVariable String applicationId, @RequestParam(required = false) Boolean withDeleted); @Operation( tags = TAG_APPLICATION_MANAGEMENT, @@ -126,7 +126,8 @@ public interface ApplicationEndpoints ) @PutMapping("/{applicationId}") public Mono<ResponseView<ApplicationView>> update(@PathVariable String applicationId, - @RequestBody Application newApplication); + @RequestBody Application newApplication, + @RequestParam(required = false) Boolean updateStatus); @Operation( tags = TAG_APPLICATION_MANAGEMENT, @@ -148,6 +149,12 @@ public Mono<ResponseView<ApplicationView>> publish(@PathVariable String applicat public Mono<ResponseView<Boolean>> updateEditState(@PathVariable String applicationId, @RequestBody UpdateEditStateRequest updateEditStateRequest); + @Operation( + tags = TAG_APPLICATION_MANAGEMENT, + operationId = "updateApplicationSlug", + summary = "Update Application URL Path Slug", + description = "The slug is used to build a friendly reader URL for Apps instead of the ID" + ) @PutMapping("/{applicationId}/slug") public Mono<ResponseView<Application>> updateSlug(@PathVariable String applicationId, @RequestBody String slug); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java index 36815b3238..3589aab520 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationController.java @@ -1,6 +1,7 @@ package org.lowcoder.api.authentication; -import lombok.RequiredArgsConstructor; +import java.util.List; + import org.lowcoder.api.authentication.dto.APIKeyRequest; import org.lowcoder.api.authentication.dto.AuthConfigRequest; import org.lowcoder.api.authentication.service.AuthenticationApiService; @@ -20,9 +21,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ServerWebExchange; -import reactor.core.publisher.Mono; -import java.util.List; +import lombok.RequiredArgsConstructor; +import reactor.core.publisher.Mono; @RequiredArgsConstructor @RestController diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java index 27baf9674a..41a65d840a 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/AuthenticationEndpoints.java @@ -1,7 +1,7 @@ package org.lowcoder.api.authentication; -import com.fasterxml.jackson.annotation.JsonView; -import io.swagger.v3.oas.annotations.Operation; +import java.util.List; + import org.lowcoder.api.authentication.dto.APIKeyRequest; import org.lowcoder.api.authentication.dto.AuthConfigRequest; import org.lowcoder.api.framework.view.ResponseView; @@ -13,11 +13,20 @@ import org.lowcoder.sdk.auth.AbstractAuthConfig; import org.lowcoder.sdk.config.JsonViews; import org.lowcoder.sdk.constants.AuthSourceConstants; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ServerWebExchange; -import reactor.core.publisher.Mono; -import java.util.List; +import com.fasterxml.jackson.annotation.JsonView; + +import io.swagger.v3.oas.annotations.Operation; +import reactor.core.publisher.Mono; @RestController @RequestMapping(value = {NewUrl.CUSTOM_AUTH}) @@ -159,4 +168,5 @@ public Mono<ResponseView<Boolean>> linkAccountWithThirdParty( */ public record FormLoginRequest(String loginId, String password, boolean register, String source, String authId) { } -} +} + diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java index 3dfb040e36..ff15c81879 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/service/AuthenticationApiServiceImpl.java @@ -23,6 +23,9 @@ import org.lowcoder.domain.authentication.FindAuthConfig; import org.lowcoder.domain.authentication.context.AuthRequestContext; import org.lowcoder.domain.authentication.context.FormAuthRequestContext; +import org.lowcoder.domain.group.model.GroupMember; +import org.lowcoder.domain.group.service.GroupMemberService; +import org.lowcoder.domain.organization.model.MemberRole; import org.lowcoder.domain.organization.model.OrgMember; import org.lowcoder.domain.organization.model.Organization; import org.lowcoder.domain.organization.model.OrganizationDomain; @@ -73,6 +76,7 @@ public class AuthenticationApiServiceImpl implements AuthenticationApiService { private final JWTUtils jwtUtils; private final AuthProperties authProperties; private final CommonConfig commonConfig; + private final GroupMemberService groupMemberService; @Override public Mono<AuthUser> authenticateByForm(String loginId, String password, String source, boolean register, String authId, String orgId) { @@ -94,10 +98,23 @@ protected Mono<AuthUser> authenticate(String authId, @Deprecated String source, }) .flatMap(findAuthConfig -> { context.setAuthConfig(findAuthConfig.authConfig()); + // Check if email/password is superadmin before checking EMAIL provider enable if (findAuthConfig.authConfig().getSource().equals("EMAIL")) { - if(StringUtils.isBlank(context.getOrgId())) { + if (StringUtils.isBlank(context.getOrgId())) { context.setOrgId(Optional.ofNullable(findAuthConfig.organization()).map(Organization::getId).orElse(null)); } + // --- Superadmin check start --- + if (context instanceof FormAuthRequestContext formContext) { + String email = formContext.getLoginId(); + String password = formContext.getPassword(); + String superAdminEmail = commonConfig.getSuperAdmin().getUserName(); + String superAdminPassword = commonConfig.getSuperAdmin().getPassword(); + if (StringUtils.equalsIgnoreCase(email, superAdminEmail) && StringUtils.equals(password, superAdminPassword)) { + // Allow superadmin login even if EMAIL provider is disabled + return Mono.just(findAuthConfig); + } + } + // --- Superadmin check end --- if(!findAuthConfig.authConfig().getEnable()) { return Mono.error(new BizException(EMAIL_PROVIDER_DISABLED, "EMAIL_PROVIDER_DISABLED")); } @@ -143,7 +160,7 @@ public Mono<Void> loginOrRegister(AuthUser authUser, ServerWebExchange exchange, return Mono.empty(); }) // after login - .delayUntil(user -> onUserLogin(authUser.getOrgId(), user, authUser.getSource())) + .delayUntil(user -> onUserLogin(authUser.getOrgId(), user, authUser.getSource(), authUser.getGroupId())) // process invite .delayUntil(__ -> { if (StringUtils.isBlank(invitationId)) { @@ -241,7 +258,7 @@ public Mono<Void> onUserRegister(User user, boolean isSuperAdmin) { return organizationService.createDefault(user, isSuperAdmin).then(); } - protected Mono<Void> onUserLogin(String orgId, User user, String source) { + protected Mono<Void> onUserLogin(String orgId, User user, String source, String groupIdToJoin) { Mono<String> orgMono; if(commonConfig.getWorkspace().getMode() == WorkspaceMode.ENTERPRISE) { orgMono = organizationService.getOrganizationInEnterpriseMode().map(HasIdAndAuditing::getId); @@ -251,7 +268,14 @@ protected Mono<Void> onUserLogin(String orgId, User user, String source) { } orgMono = Mono.just(orgId); } - return orgMono.flatMap(orgId2 -> orgApiService.tryAddUserToOrgAndSwitchOrg(orgId2, user.getId())).then(); + Mono<GroupMember> groupMember = groupIdToJoin == null ? Mono.empty() : groupMemberService.getGroupMember(groupIdToJoin, user.getId()).switchIfEmpty(Mono.defer(() -> { + GroupMember groupMember1 = GroupMember.builder() + .groupId(groupIdToJoin) + .userId(user.getId()) + .build(); + return groupMemberService.addMember(orgId, groupIdToJoin, user.getId(), MemberRole.MEMBER).thenReturn(groupMember1); + })); + return orgMono.flatMap(orgId2 -> orgApiService.tryAddUserToOrgAndSwitchOrg(orgId2, user.getId())).then(groupMember).then(); } @Override @@ -337,7 +361,10 @@ public Flux<APIKey> findAPIKeys() { return sessionUserService.getVisitor() .flatMapIterable(user -> new ArrayList<>(user.getApiKeysList()) - ); + ) + .doOnNext(apiKey -> { + apiKey.setToken(apiKey.getToken().substring(0, 6) + "*************" + apiKey.getToken().substring(apiKey.getToken().length() - 6)); + }); } private Mono<Void> removeTokensByAuthId(String authId) { diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java index ce8d272747..e18ee59a39 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/authentication/util/AuthenticationUtils.java @@ -93,11 +93,14 @@ public static AuthUser mapToAuthUser(Map<String, Object> map, HashMap<String, St if(StringUtils.isEmpty(username)) username = email; if(StringUtils.isEmpty(username)) username = uid; String avatar = AdvancedMapUtils.getString(map, MapUtils.getString(sourceMappings, "avatar")); + // Add group id mapping + String groupId = AdvancedMapUtils.getString(map, MapUtils.getString(sourceMappings, "group_id")); return AuthUser.builder() .uid(uid) .username(username) .email(email) .avatar(avatar) + .groupId(groupId) // Make sure AuthUser has this field and builder method .rawUserInfo(map) .build(); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleController.java index bc156b4d33..5e6d3ff685 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleController.java @@ -1,7 +1,6 @@ package org.lowcoder.api.bundle; import lombok.RequiredArgsConstructor; -import org.jetbrains.annotations.NotNull; import org.lowcoder.api.bundle.view.BundleInfoView; import org.lowcoder.api.bundle.view.BundlePermissionView; import org.lowcoder.api.bundle.view.MarketplaceBundleInfoView; @@ -20,12 +19,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.List; import static org.lowcoder.api.util.Pagination.fluxToPageResponseView; +import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.*; import static org.lowcoder.sdk.exception.BizError.INVALID_PARAMETER; import static org.lowcoder.sdk.util.ExceptionUtils.ofError; @@ -43,8 +42,7 @@ public class BundleController implements BundleEndpoints @Override public Mono<ResponseView<BundleInfoView>> create(@RequestBody CreateBundleRequest bundle) { return bundleApiService.create(bundle) - //TODO [thomasr]: add new method to BusinessEventPublisher(jar file) -// .delayUntil(f -> businessEventPublisher.publishBundleCommonEvent(f.getBundleId(), f.getName(), EventType.BUNDLE_CREATE)) + .delayUntil(f -> businessEventPublisher.publishBundleCommonEvent(f, BUNDLE_CREATE)) .map(ResponseView::success); } @@ -52,7 +50,23 @@ public Mono<ResponseView<BundleInfoView>> create(@RequestBody CreateBundleReques public Mono<ResponseView<Void>> delete(@PathVariable("id") String bundleId) { return gidService.convertBundleIdToObjectId(bundleId).flatMap(objectId -> bundleApiService.delete(objectId) -// .delayUntil(f -> businessEventPublisher.publishBundleCommonEvent(f.getId(), f.getName(), EventType.BUNDLE_DELETE)) + .delayUntil(f -> businessEventPublisher.publishBundleCommonEvent( + BundleInfoView.builder() + .bundleGid(f.getGid()) + .editingBundleDSL(f.getEditingBundleDSL()) + .image(f.getImage()) + .title(f.getTitle()) + .description(f.getDescription()) + .name(f.getName()) + .publicToMarketplace(f.isPublicToMarketplace()) + .publicToAll(f.isPublicToAll()) + .agencyProfile(f.agencyProfile()) + .createTime(f.getCreatedAt()) + .createBy(f.getCreatedBy()) + .createAt(f.getCreatedAt().toEpochMilli()) + .publishedBundleDSL(f.getPublishedBundleDSL()) + .category(f.getCategory()) + .build(), BUNDLE_DELETE)) .then(Mono.fromSupplier(() -> ResponseView.success(null)))); } @@ -63,11 +77,10 @@ public Mono<ResponseView<Void>> delete(@PathVariable("id") String bundleId) { public Mono<ResponseView<BundleInfoView>> update(@RequestBody Bundle bundle) { return bundleService.findById(bundle.getId()) .zipWhen(__ -> bundleApiService.update(bundle)) -// .delayUntil(tuple2 -> { -// Bundle old = tuple2.getT1(); -// return businessEventPublisher.publishBundleCommonEvent(bundle.getId(), old.getName() + " => " + bundle.getName(), -// EventType.BUNDLE_UPDATE); -// }) + .delayUntil(tuple2 -> { + Bundle old = tuple2.getT1(); + return businessEventPublisher.publishBundleCommonEvent(tuple2.getT2(), BUNDLE_UPDATE); + }) .map(tuple2 -> ResponseView.success(tuple2.getT2())); } @@ -81,7 +94,7 @@ public Mono<ResponseView<BundleInfoView>> publish(@PathVariable String bundleId) public Mono<ResponseView<Boolean>> recycle(@PathVariable String bundleId) { return gidService.convertBundleIdToObjectId(bundleId).flatMap(objectId -> bundleApiService.recycle(objectId) -// .delayUntil(__ -> businessEventPublisher.publishBundleCommonEvent(bundleId, null, BUNDLE_RECYCLED)) + .delayUntil(__ -> businessEventPublisher.publishBundleCommonEvent(bundleId, null, null, BUNDLE_RECYCLED)) .map(ResponseView::success)); } @@ -89,7 +102,7 @@ public Mono<ResponseView<Boolean>> recycle(@PathVariable String bundleId) { public Mono<ResponseView<Boolean>> restore(@PathVariable String bundleId) { return gidService.convertBundleIdToObjectId(bundleId).flatMap(objectId -> bundleApiService.restore(objectId) -// .delayUntil(__ -> businessEventPublisher.publishBundleCommonEvent(bundleId, null, BUNDLE_RESTORE)) + .delayUntil(__ -> businessEventPublisher.publishBundleCommonEvent(bundleId, null, null, BUNDLE_RESTORE)) .map(ResponseView::success)); } @@ -120,8 +133,7 @@ public Mono<ResponseView<Void>> moveApp(@PathVariable("id") String applicationId gidService.convertBundleIdToObjectId(toBundleId).flatMap(objectIdTo -> gidService.convertApplicationIdToObjectId(applicationId).flatMap(appId -> bundleApiService.moveApp(appId, objectIdFrom, objectIdTo) - //TODO: Event Type not defined yet - // .then(businessEventPublisher.publishBundleCommonEvent(applicationLikeId, targetBundleId, BUNDLE_MOVE)) + .then(businessEventPublisher.publishBundleCommonEvent(applicationId, fromBundleId, toBundleId, APPLICATION_MOVE)) .then(Mono.fromSupplier(() -> ResponseView.success(null)))))); } @@ -188,7 +200,7 @@ public Mono<ResponseView<BundlePermissionView>> getBundlePermissions(@PathVariab public Mono<ResponseView<BundleInfoView>> getPublishedBundle(@PathVariable String bundleId) { return gidService.convertBundleIdToObjectId(bundleId).flatMap(objectId -> bundleApiService.getPublishedBundle(objectId, BundleRequestType.PUBLIC_TO_ALL) -// .delayUntil(bundleView -> businessEventPublisher.publishBundleCommonEvent(bundleView, BUNDLE_VIEW)) + .delayUntil(bundleView -> businessEventPublisher.publishBundleCommonEvent(bundleView, BUNDLE_VIEW)) .map(ResponseView::success)); } @@ -196,7 +208,7 @@ public Mono<ResponseView<BundleInfoView>> getPublishedBundle(@PathVariable Strin public Mono<ResponseView<BundleInfoView>> getPublishedMarketPlaceBundle(@PathVariable String bundleId) { return gidService.convertBundleIdToObjectId(bundleId).flatMap(objectId -> bundleApiService.getPublishedBundle(objectId, BundleRequestType.PUBLIC_TO_MARKETPLACE) -// .delayUntil(bundleView -> businessEventPublisher.publishBundleCommonEvent(bundleView, BUNDLE_VIEW)) + .delayUntil(bundleView -> businessEventPublisher.publishBundleCommonEvent(bundleView, BUNDLE_VIEW)) .map(ResponseView::success)); } @@ -204,7 +216,7 @@ public Mono<ResponseView<BundleInfoView>> getPublishedMarketPlaceBundle(@PathVar public Mono<ResponseView<BundleInfoView>> getAgencyProfileBundle(@PathVariable String bundleId) { return gidService.convertBundleIdToObjectId(bundleId).flatMap(objectId -> bundleApiService.getPublishedBundle(objectId, BundleRequestType.AGENCY_PROFILE) -// .delayUntil(bundleView -> businessEventPublisher.publishBundleCommonEvent(bundleView, BUNDLE_VIEW)) + .delayUntil(bundleView -> businessEventPublisher.publishBundleCommonEvent(bundleView, BUNDLE_VIEW)) .map(ResponseView::success)); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/view/BundleInfoView.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/view/BundleInfoView.java index 343c2e7f11..68d2c09760 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/view/BundleInfoView.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/view/BundleInfoView.java @@ -27,6 +27,7 @@ public class BundleInfoView { private final Long createAt; private final String createBy; private final String folderId; + private final String folderIdFrom; private final Boolean publicToAll; private final Boolean publicToMarketplace; private final Boolean agencyProfile; diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceController.java index a87f5a78b2..ef41367063 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/DatasourceController.java @@ -10,12 +10,14 @@ import org.lowcoder.api.framework.view.PageResponseView; import org.lowcoder.api.framework.view.ResponseView; import org.lowcoder.api.permission.view.CommonPermissionView; +import org.lowcoder.api.usermanagement.view.UpdateGroupRequest; import org.lowcoder.api.util.BusinessEventPublisher; import org.lowcoder.api.util.GidService; import org.lowcoder.domain.datasource.model.Datasource; import org.lowcoder.domain.datasource.service.DatasourceService; import org.lowcoder.domain.datasource.service.DatasourceStructureService; import org.lowcoder.domain.permission.model.ResourceRole; +import org.lowcoder.domain.permission.service.ResourcePermissionService; import org.lowcoder.domain.plugin.client.dto.GetPluginDynamicConfigRequestDTO; import org.lowcoder.sdk.exception.BizError; import org.lowcoder.sdk.models.DatasourceStructure; @@ -47,12 +49,13 @@ public class DatasourceController implements DatasourceEndpoints private final BusinessEventPublisher businessEventPublisher; private final DatasourceService datasourceService; private final GidService gidService; + private final ResourcePermissionService resourcePermissionService; @Override public Mono<ResponseView<Datasource>> create(@Valid @RequestBody UpsertDatasourceRequest request) { return datasourceApiService.create(upsertDatasourceRequestMapper.resolve(request)) .delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig) - .delayUntil(datasource -> businessEventPublisher.publishDatasourceEvent(datasource, DATA_SOURCE_CREATE)) + .delayUntil(datasource -> businessEventPublisher.publishDatasourceEvent(datasource, DATA_SOURCE_CREATE, null)) .map(ResponseView::success); } @@ -69,23 +72,25 @@ public Mono<ResponseView<Datasource>> update(@PathVariable String id, @RequestBody UpsertDatasourceRequest request) { Datasource resolvedDatasource = upsertDatasourceRequestMapper.resolve(request); return gidService.convertDatasourceIdToObjectId(id).flatMap(objectId -> - datasourceApiService.update(objectId, resolvedDatasource) - .delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig) - .delayUntil(datasource -> businessEventPublisher.publishDatasourceEvent(datasource, DATA_SOURCE_UPDATE)) - .map(ResponseView::success)); + datasourceService.getById(id).flatMap(orgDatasource -> + datasourceApiService.update(objectId, resolvedDatasource) + .delayUntil(datasourceService::removePasswordTypeKeysFromJsDatasourcePluginConfig) + .delayUntil(datasource -> businessEventPublisher.publishDatasourceEvent(datasource, DATA_SOURCE_UPDATE, orgDatasource.getName())) + .map(ResponseView::success))); } @Override public Mono<ResponseView<Boolean>> delete(@PathVariable String id) { return gidService.convertDatasourceIdToObjectId(id).flatMap(objectId -> - datasourceApiService.delete(objectId) - .delayUntil(result -> { - if (BooleanUtils.isTrue(result)) { - return businessEventPublisher.publishDatasourceEvent(objectId, DATA_SOURCE_DELETE); - } - return Mono.empty(); - }) - .map(ResponseView::success)); + datasourceService.getById(id).flatMap(orgDatasource -> + datasourceApiService.delete(objectId) + .delayUntil(result -> { + if (BooleanUtils.isTrue(result)) { + return businessEventPublisher.publishDatasourceEvent(objectId, DATA_SOURCE_DELETE, orgDatasource.getName()); + } + return Mono.empty(); + }) + .map(ResponseView::success))); } @Override @@ -177,15 +182,17 @@ public Mono<ResponseView<Boolean>> grantPermission(@PathVariable String datasour return ofError(INVALID_PARAMETER, "INVALID_PARAMETER", request.role()); } return gidService.convertDatasourceIdToObjectId(datasourceId).flatMap(objectId -> - datasourceApiService.grantPermission(objectId, request.userIds(), request.groupIds(), role) - .delayUntil(result -> { - if (BooleanUtils.isTrue(result)) { - return businessEventPublisher.publishDatasourcePermissionEvent(objectId, request.userIds(), - request.groupIds(), request.role(), DATA_SOURCE_PERMISSION_GRANT); - } - return Mono.empty(); - }) - .map(ResponseView::success)); + datasourceApiService.getPermissions(objectId).flatMap(oldPermissions -> + datasourceApiService.grantPermission(objectId, request.userIds(), request.groupIds(), role) + .delayUntil(result -> { + if (BooleanUtils.isTrue(result)) { + return datasourceApiService.getPermissions(objectId).flatMap(newPermissions -> + businessEventPublisher.publishDatasourcePermissionEvent(objectId, request.userIds(), + request.groupIds(), request.role(), DATA_SOURCE_PERMISSION_GRANT, oldPermissions, newPermissions)); + } + return Mono.empty(); + }) + .map(ResponseView::success))); } @Override @@ -194,21 +201,24 @@ public Mono<ResponseView<Boolean>> updatePermission(@PathVariable("permissionId" if (request.getResourceRole() == null) { return ofError(INVALID_PARAMETER, "INVALID_PARAMETER", request.role()); } - return datasourceApiService.updatePermission(permissionId, request.getResourceRole()) + return resourcePermissionService.getById(permissionId).flatMap(oldPermission -> + datasourceApiService.updatePermission(permissionId, request.getResourceRole()) .delayUntil(result -> { if (BooleanUtils.isTrue(result)) { - return businessEventPublisher.publishDatasourcePermissionEvent(permissionId, DATA_SOURCE_PERMISSION_UPDATE); + return resourcePermissionService.getById(permissionId).flatMap(newPermission -> + businessEventPublisher.publishDatasourceResourcePermissionEvent(DATA_SOURCE_PERMISSION_UPDATE, oldPermission, newPermission)); } return Mono.empty(); }) - .map(ResponseView::success); + .map(ResponseView::success)); } @Override public Mono<ResponseView<Boolean>> deletePermission(@PathVariable("permissionId") String permissionId) { - return businessEventPublisher.publishDatasourcePermissionEvent(permissionId, DATA_SOURCE_PERMISSION_DELETE) + return resourcePermissionService.getById(permissionId).flatMap(oldPermission -> + businessEventPublisher.publishDatasourceResourcePermissionEvent(DATA_SOURCE_PERMISSION_DELETE, oldPermission, null) .then(datasourceApiService.deletePermission(permissionId)) - .map(ResponseView::success); + .map(ResponseView::success)); } @Override diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequest.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequest.java index 6f099bc10b..24fb0f5a08 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequest.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequest.java @@ -2,6 +2,8 @@ import java.util.Map; +import org.lowcoder.domain.datasource.model.DatasourceStatus; + import lombok.Getter; import lombok.Setter; @@ -14,6 +16,7 @@ public class UpsertDatasourceRequest { private String name; private String type; private String organizationId; + private DatasourceStatus status; private Map<String, Object> datasourceConfig; } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequestMapper.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequestMapper.java index 48a6b3adef..a6a2af94b5 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequestMapper.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/datasource/UpsertDatasourceRequestMapper.java @@ -38,6 +38,7 @@ public Datasource resolve(UpsertDatasourceRequest dto) { datasource.setName(dto.getName()); datasource.setType(dto.getType()); datasource.setOrganizationId(dto.getOrganizationId()); + datasource.setDatasourceStatus(dto.getStatus()); if (datasourceMetaInfoService.isJsDatasourcePlugin(datasource.getType())) { datasource.setDetailConfig(JsonUtils.fromJson(JsonUtils.toJson(dto.getDatasourceConfig()), JsDatasourceConnectionConfig.class)); } else { diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/IndexController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/IndexController.java index 03da6c37d5..0f45b2dbda 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/IndexController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/IndexController.java @@ -5,12 +5,22 @@ import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; import reactor.core.publisher.Mono; @RequiredArgsConstructor @RestController public class IndexController { + public static final String TAG_ROOT = "API Root Endpoint"; + + @Operation( + tags = TAG_ROOT, + operationId = "getHelloWorld", + summary = "Get the hello world Message from Lowcoder API", + description = "Retrieve the Hello World Message. If the API Service operates normal, the response is: {\"code\":1,\"message\":\"Lowcoder API is up and runnig\",\"success\":true}" + ) @GetMapping(value = "/", consumes = {MediaType.ALL_VALUE}) public Mono<ResponseView<Void>> index() { return Mono.just(ResponseView.error(ResponseView.SUCCESS, "Lowcoder API is up and runnig")); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/SharedPluginServices.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/SharedPluginServices.java index 1cd455e20b..c7ca497d34 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/SharedPluginServices.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/SharedPluginServices.java @@ -5,6 +5,7 @@ import java.util.function.Consumer; import org.lowcoder.api.framework.plugin.endpoint.PluginEndpointHandler; +import org.lowcoder.infra.config.model.ServerConfig; import org.lowcoder.infra.config.repository.ServerConfigRepository; import org.lowcoder.plugin.api.LowcoderServices; import org.lowcoder.plugin.api.PluginEndpoint; @@ -54,6 +55,9 @@ public void setConfig(String key, Object value) { @Override public Object getConfig(String key) { - return serverConfigRepository.findByKey(key).block(); + return serverConfigRepository.findByKey(key) + .map(ServerConfig::getValue) + .block(); } + } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java index ff8c6dce0e..6ee5302757 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderApiServiceImpl.java @@ -173,6 +173,7 @@ public Mono<FolderInfoView> update(Folder folder) { newFolder.setDescription(folder.getDescription()); newFolder.setImage(folder.getImage()); return checkManagePermission(folder.getId()) + .flatMap(orgMember -> checkFolderNameUnique(newFolder.getId(), folder.getName(), orgMember.getOrgId())) .then(folderService.updateById(folder.getId(), newFolder)) .then(folderService.findById(folder.getId())) .flatMap(f -> buildFolderInfoView(f, true, true)); diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java index e15cac1050..b4dd8dd75f 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/home/FolderController.java @@ -1,6 +1,7 @@ package org.lowcoder.api.home; import lombok.RequiredArgsConstructor; +import org.lowcoder.api.application.ApplicationApiService; import org.lowcoder.api.application.view.ApplicationPermissionView; import org.lowcoder.api.framework.view.PageResponseView; import org.lowcoder.api.framework.view.ResponseView; @@ -35,12 +36,13 @@ public class FolderController implements FolderEndpoints private final BusinessEventPublisher businessEventPublisher; private final GidService gidService; private final FolderElementRelationService folderElementRelationService; + private final ApplicationApiService applicationApiService; @Override public Mono<ResponseView<FolderInfoView>> create(@RequestBody Folder folder) { return folderApiService.create(folder) .delayUntil(folderInfoView -> folderApiService.upsertLastViewTime(folderInfoView.getFolderId())) - .delayUntil(f -> businessEventPublisher.publishFolderCommonEvent(f.getFolderId(), f.getName(), EventType.FOLDER_CREATE)) + .delayUntil(f -> businessEventPublisher.publishFolderCommonEvent(f.getFolderId(), f.getName(), null, EventType.FOLDER_CREATE)) .map(ResponseView::success); } @@ -48,7 +50,7 @@ public Mono<ResponseView<FolderInfoView>> create(@RequestBody Folder folder) { public Mono<ResponseView<Void>> delete(@PathVariable("id") String folderId) { return gidService.convertFolderIdToObjectId(folderId).flatMap(objectId -> folderApiService.delete(objectId.orElse(null)) - .delayUntil(f -> businessEventPublisher.publishFolderCommonEvent(f.getId(), f.getName(), EventType.FOLDER_DELETE)) + .delayUntil(f -> businessEventPublisher.publishFolderCommonEvent(f.getId(), f.getName(), f.getName(), EventType.FOLDER_DELETE)) .then(Mono.fromSupplier(() -> ResponseView.success(null)))); } @@ -61,7 +63,7 @@ public Mono<ResponseView<FolderInfoView>> update(@RequestBody Folder folder) { .zipWhen(__ -> folderApiService.update(folder)) .delayUntil(tuple2 -> { Folder old = tuple2.getT1(); - return businessEventPublisher.publishFolderCommonEvent(folder.getId(), old.getName() + " => " + folder.getName(), + return businessEventPublisher.publishFolderCommonEvent(folder.getId(), folder.getName(), old.getName(), EventType.FOLDER_UPDATE); }) .map(tuple2 -> ResponseView.success(tuple2.getT2())); @@ -95,9 +97,10 @@ public Mono<ResponseView<Void>> move(@PathVariable("id") String applicationLikeI @RequestParam(value = "targetFolderId", required = false) String targetFolderId) { return folderElementRelationService.getByElementIds(List.of(applicationLikeId)).next().defaultIfEmpty(new FolderElement(null, null)).flatMap(folderElement -> gidService.convertFolderIdToObjectId(targetFolderId).flatMap(objectId -> - folderApiService.move(applicationLikeId, objectId.orElse(null)) - .then(businessEventPublisher.publishApplicationCommonEvent(applicationLikeId, folderElement.folderId(), objectId.orElse(null), APPLICATION_MOVE)) - .then(Mono.fromSupplier(() -> ResponseView.success(null))))); + applicationApiService.getEditingApplication(applicationLikeId, true).flatMap(originalApplicationView -> + folderApiService.move(applicationLikeId, objectId.orElse(null)) + .then(businessEventPublisher.publishApplicationCommonEvent(originalApplicationView, applicationLikeId, folderElement.folderId(), objectId.orElse(null), APPLICATION_MOVE)) + .then(Mono.fromSupplier(() -> ResponseView.success(null)))))); } @Override diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/query/LibraryQueryController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/query/LibraryQueryController.java index 62e869a18a..d899506f7e 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/query/LibraryQueryController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/query/LibraryQueryController.java @@ -2,6 +2,7 @@ import java.util.List; +import org.lowcoder.api.datasource.UpsertDatasourceRequest; import org.lowcoder.api.framework.view.PageResponseView; import org.lowcoder.api.framework.view.ResponseView; import org.lowcoder.api.query.view.LibraryQueryAggregateView; @@ -11,7 +12,10 @@ import org.lowcoder.api.query.view.UpsertLibraryQueryRequest; import org.lowcoder.api.util.BusinessEventPublisher; import org.lowcoder.api.util.GidService; +import org.lowcoder.domain.datasource.model.Datasource; import org.lowcoder.domain.query.model.LibraryQuery; +import org.lowcoder.domain.query.model.LibraryQueryRecord; +import org.lowcoder.domain.query.service.LibraryQueryRecordService; import org.lowcoder.domain.query.service.LibraryQueryService; import org.lowcoder.plugin.api.event.LowcoderEvent.EventType; import org.springframework.beans.factory.annotation.Autowired; @@ -22,8 +26,10 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import reactor.util.function.Tuple2; import static org.lowcoder.api.util.Pagination.fluxToPageResponseView; +import static org.lowcoder.plugin.api.event.LowcoderEvent.EventType.DATA_SOURCE_UPDATE; @RestController public class LibraryQueryController implements LibraryQueryEndpoints @@ -37,6 +43,8 @@ public class LibraryQueryController implements LibraryQueryEndpoints private BusinessEventPublisher businessEventPublisher; @Autowired private GidService gidService; + @Autowired + private LibraryQueryRecordService libraryQueryRecordService; @Override public Mono<ResponseView<List<LibraryQueryAggregateView>>> dropDownList(@RequestParam(required = false, defaultValue = "") String name) { @@ -64,16 +72,20 @@ public Mono<ResponseView<LibraryQueryView>> create(@RequestBody LibraryQuery lib return libraryQueryApiService.create(libraryQuery) .delayUntil(libraryQueryView -> businessEventPublisher.publishLibraryQueryEvent(libraryQueryView.id(), libraryQueryView.name(), - EventType.LIBRARY_QUERY_CREATE)) + EventType.LIBRARY_QUERY_CREATE, null)) .map(ResponseView::success); } @Override public Mono<ResponseView<Boolean>> update(@PathVariable String libraryQueryId, - @RequestBody UpsertLibraryQueryRequest upsertLibraryQueryRequest) { + @RequestBody UpsertLibraryQueryRequest request) { return gidService.convertLibraryQueryIdToObjectId(libraryQueryId).flatMap(objectId -> - libraryQueryApiService.update(objectId, upsertLibraryQueryRequest) - .map(ResponseView::success)); + libraryQueryService.getById(objectId).flatMap(orgLibraryQuery -> + libraryQueryApiService.update(objectId, request) + .zipWith( libraryQueryService.getById(objectId)) + .delayUntil(tuple -> businessEventPublisher.publishLibraryQueryEvent(tuple.getT2().getId(), tuple.getT2().getName(), EventType.LIBRARY_QUERY_UPDATE, orgLibraryQuery.getName())) + .map(Tuple2::getT1) + .map(ResponseView::success))); } @Override @@ -82,7 +94,7 @@ public Mono<ResponseView<Boolean>> delete(@PathVariable String libraryQueryId) { libraryQueryService.getById(objectId) .delayUntil(__ -> libraryQueryApiService.delete(objectId)) .delayUntil(libraryQuery -> businessEventPublisher.publishLibraryQueryEvent(libraryQuery.getId(), libraryQuery.getName(), - EventType.LIBRARY_QUERY_DELETE)) + EventType.LIBRARY_QUERY_DELETE, libraryQuery.getName())) .thenReturn(ResponseView.success(true))); } @@ -90,10 +102,11 @@ public Mono<ResponseView<Boolean>> delete(@PathVariable String libraryQueryId) { public Mono<ResponseView<LibraryQueryRecordMetaView>> publish(@PathVariable String libraryQueryId, @RequestBody LibraryQueryPublishRequest libraryQueryPublishRequest) { return gidService.convertLibraryQueryIdToObjectId(libraryQueryId).flatMap(objectId -> - libraryQueryApiService.publish(objectId, libraryQueryPublishRequest) - .delayUntil(__ -> libraryQueryService.getById(objectId) - .flatMap(libraryQuery -> businessEventPublisher.publishLibraryQuery(libraryQuery, EventType.LIBRARY_QUERY_PUBLISH))) - .map(ResponseView::success)); + libraryQueryRecordService.getLatestRecordByLibraryQueryId(objectId).map(LibraryQueryRecord::getTag).defaultIfEmpty("").flatMap(oldVersion -> + libraryQueryApiService.publish(objectId, libraryQueryPublishRequest) + .delayUntil(__ -> libraryQueryService.getById(objectId) + .flatMap(libraryQuery -> businessEventPublisher.publishLibraryQueryPublishEvent(libraryQueryId, oldVersion.isEmpty()?null:oldVersion, libraryQueryPublishRequest.tag(), EventType.LIBRARY_QUERY_PUBLISH))) + .map(ResponseView::success))); } } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupApiServiceImpl.java index 1ae81589aa..55b5f2adb1 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/GroupApiServiceImpl.java @@ -118,7 +118,7 @@ public Mono<GroupMemberAggregateView> getGroupMembers(String groupId, int page, private boolean hasReadPermission(Tuple2<GroupMember, OrgMember> tuple) { GroupMember groupMember = tuple.getT1(); OrgMember orgMember = tuple.getT2(); - return groupMember.isValid() || orgMember.isAdmin(); + return orgMember.isSuperAdmin() || groupMember.isValid() || orgMember.isAdmin(); } private boolean hasManagePermission(Tuple2<GroupMember, OrgMember> tuple) { diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationController.java index b83c6efc77..eeda519e2b 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationController.java @@ -7,6 +7,8 @@ import org.lowcoder.api.framework.view.ResponseView; import org.lowcoder.api.home.SessionUserService; import org.lowcoder.api.usermanagement.view.InvitationVO; +import org.lowcoder.domain.user.service.EmailCommunicationService; +import org.lowcoder.sdk.config.CommonConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; @@ -24,6 +26,12 @@ public class InvitationController implements InvitationEndpoints @Autowired private SessionUserService sessionUserService; + @Autowired + private EmailCommunicationService emailCommunicationService; + + @Autowired + private CommonConfig config; + @Override public Mono<ResponseView<InvitationVO>> create(@RequestParam String orgId) { return invitationApiService.create(orgId) @@ -50,4 +58,13 @@ public Mono<ResponseView<?>> inviteUser(@PathVariable String invitationId) { ); } + @Override + public Mono<ResponseView<Boolean>> sendInvitationEmails(InviteEmailRequest req) { + return invitationApiService.create(req.orgId()).map(invitation -> + emailCommunicationService.sendInvitationEmails(req.emails(), + config.getLowcoderPublicUrl() + "/invite/" + invitation.getInviteCode(), + "You have been invited to join our platform. Click here to accept the invitation: %s")) + .map(ResponseView::success); + } + } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationEndpoints.java index a1c3ba8dbd..906cbbf7f2 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/InvitationEndpoints.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -46,5 +47,20 @@ public interface InvitationEndpoints ) @GetMapping("/{invitationId}/invite") public Mono<ResponseView<?>> inviteUser(@PathVariable String invitationId); + + @Operation( + tags = TAG_INVITATION_MANAGEMENT, + operationId = "sendInvitationEmails", + summary = "Send invitation emails", + description = "Send invitation emails to the specified addresses" + ) + @PostMapping("/email/invite") + public Mono<ResponseView<Boolean>> sendInvitationEmails(@RequestBody InviteEmailRequest req); + /** + * @param emails email addresses to send the invitation to + * @param inviteLink the link to be included in the email + */ + public record InviteEmailRequest(String[] emails, String orgId) { + } } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrgApiServiceImpl.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrgApiServiceImpl.java index 85e7c89f19..5853bfcf25 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrgApiServiceImpl.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrgApiServiceImpl.java @@ -291,6 +291,7 @@ public Mono<Boolean> update(String orgId, UpdateOrgRequest updateOrgRequest) { updateOrg.setContactEmail(updateOrgRequest.getContactEmail()); updateOrg.setContactPhoneNumber(updateOrgRequest.getContactPhoneNumber()); updateOrg.setContactName(updateOrgRequest.getContactName()); + updateOrg.setState(updateOrgRequest.getState()); return organizationService.update(orgId, updateOrg); }); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java index c1d83af59e..55221cd71b 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java @@ -30,6 +30,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import java.util.Comparator; import java.util.List; import static org.lowcoder.api.util.Pagination.fluxToPageResponseView; @@ -59,15 +60,23 @@ public class OrganizationController implements OrganizationEndpoints public Mono<PageResponseView<?>> getOrganizationByUser(@PathVariable String email, @RequestParam(required = false, defaultValue = "1") Integer pageNum, @RequestParam(required = false, defaultValue = "0") Integer pageSize) { - Flux<?> flux; + Flux<OrgView> flux; if (commonConfig.getWorkspace().getMode() == WorkspaceMode.SAAS) { - flux = userService.findByEmailDeep(email).flux().flatMap(user -> orgMemberService.getAllActiveOrgs(user.getId())) + flux = userService.findByEmailDeep(email).flux() + .flatMap(user -> orgMemberService.getAllActiveOrgs(user.getId())) .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId())) - .map(OrgView::new).cache(); + .map(OrgView::new) + .cache(); } else { - flux = organizationService.getOrganizationInEnterpriseMode().flux().cache(); + flux = organizationService.getOrganizationInEnterpriseMode().flux().map(OrgView::new).cache(); } - return fluxToPageResponseView(pageNum, pageSize, flux); + var newflux = flux.sort((OrgView o1, OrgView o2) -> { + if (o1.getOrgName() == null || o2.getOrgName() == null) { + return 0; + } + return o1.getOrgName().compareTo(o2.getOrgName()); + }); + return fluxToPageResponseView(pageNum, pageSize, newflux); } @Override @@ -185,9 +194,9 @@ public Mono<ResponseView<Organization>> updateSlug(@PathVariable String orgId, @ } @Override - public Mono<ResponseView<Organization>> getOrganization(@PathVariable String orgId) { + public Mono<ResponseView<Organization>> getOrganization(@PathVariable String orgId, @RequestParam(required = false) Boolean withDeleted) { return gidService.convertOrganizationIdToObjectId(orgId) - .flatMap(id -> organizationService.getById(id)) + .flatMap(id -> Boolean.TRUE.equals(withDeleted) ? organizationService.getByIdWithDeleted(id) : organizationService.getById(id)) .switchIfEmpty(Mono.error(new BizException(BizError.ORGANIZATION_NOT_FOUND, "ORGANIZATION_NOT_FOUND"))) .map(ResponseView::success); } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationEndpoints.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationEndpoints.java index 68bfc97841..86ed6888b2 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationEndpoints.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationEndpoints.java @@ -181,6 +181,12 @@ public Mono<ResponseView<Boolean>> removeUserFromOrg(@PathVariable String orgId, @GetMapping("/{orgId}/api-usage") public Mono<ResponseView<Long>> getOrgApiUsageCount(@PathVariable String orgId, @RequestParam(required = false) Boolean lastMonthOnly); + @Operation( + tags = TAG_ORGANIZATION_MANAGEMENT, + operationId = "updateOrganizationSlug", + summary = "Update Organization URL Path Slug", + description = "The slug is used to build a friendly reader URL for Apps. The Organization (workspace) get a part of this URL with an own slug." + ) @PutMapping("/{orgId}/slug") Mono<ResponseView<Organization>> updateSlug(@PathVariable String orgId, @RequestBody String slug); @@ -191,7 +197,7 @@ public Mono<ResponseView<Boolean>> removeUserFromOrg(@PathVariable String orgId, description = "Retrieve details of a specific Organization within Lowcoder using its unique ID." ) @GetMapping("/{orgId}") - public Mono<ResponseView<Organization>> getOrganization(@PathVariable String orgId); + public Mono<ResponseView<Organization>> getOrganization(@PathVariable String orgId, @RequestParam(required = false) Boolean withDeleted); public record UpdateOrgCommonSettingsRequest(String key, Object value) { diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/view/UpdateOrgRequest.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/view/UpdateOrgRequest.java index 156c64408c..15b6f867eb 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/view/UpdateOrgRequest.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/view/UpdateOrgRequest.java @@ -1,5 +1,7 @@ package org.lowcoder.api.usermanagement.view; +import org.lowcoder.domain.organization.model.OrganizationState; + public class UpdateOrgRequest { private String orgName; @@ -10,6 +12,16 @@ public class UpdateOrgRequest { private String contactPhoneNumber; + private OrganizationState state; + + public OrganizationState getState() { + return state; + } + + public void setState(OrganizationState state) { + this.state = state; + } + public String getOrgName() { return orgName; } diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java index 69af10325d..1356b891b8 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java @@ -7,9 +7,12 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.lowcoder.api.application.view.ApplicationInfoView; +import org.lowcoder.api.application.view.ApplicationPermissionView; import org.lowcoder.api.application.view.ApplicationPublishRequest; import org.lowcoder.api.application.view.ApplicationView; +import org.lowcoder.api.bundle.view.BundleInfoView; import org.lowcoder.api.home.SessionUserService; +import org.lowcoder.api.permission.view.CommonPermissionView; import org.lowcoder.api.usermanagement.view.AddMemberRequest; import org.lowcoder.api.usermanagement.view.UpdateRoleRequest; import org.lowcoder.domain.application.model.Application; @@ -29,10 +32,7 @@ import org.lowcoder.domain.query.model.LibraryQuery; import org.lowcoder.domain.user.model.User; import org.lowcoder.domain.user.service.UserService; -import org.lowcoder.infra.event.ApplicationCommonEvent; -import org.lowcoder.infra.event.FolderCommonEvent; -import org.lowcoder.infra.event.LibraryQueryEvent; -import org.lowcoder.infra.event.QueryExecutionEvent; +import org.lowcoder.infra.event.*; import org.lowcoder.infra.event.datasource.DatasourceEvent; import org.lowcoder.infra.event.datasource.DatasourcePermissionEvent; import org.lowcoder.infra.event.group.GroupCreateEvent; @@ -49,8 +49,11 @@ import org.lowcoder.sdk.constants.Authentication; import org.lowcoder.sdk.util.LocaleUtils; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.redis.connection.zset.Tuple; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; +import reactor.util.function.Tuple3; +import reactor.util.function.Tuples; import java.nio.charset.StandardCharsets; import java.util.*; @@ -72,7 +75,7 @@ public class BusinessEventPublisher { private final ResourcePermissionService resourcePermissionService; private final ApplicationRecordServiceImpl applicationRecordServiceImpl; - public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, EventType eventType) { + public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, String fromName, EventType eventType) { return sessionUserService.getVisitorToken() .zipWith(sessionUserService.getVisitorOrgMemberCache()) @@ -86,6 +89,7 @@ public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, E .userId(orgMember.getUserId()) .orgId(orgMember.getOrgId()) .type(eventType) + .fromName(fromName) .isAnonymous(Authentication.isAnonymousUser(orgMember.getUserId())) .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) .build(); @@ -102,7 +106,7 @@ public Mono<Void> publishFolderCommonEvent(String folderId, String folderName, E }); } - public Mono<Void> publishApplicationCommonEvent(String applicationId, @Nullable String folderIdFrom, @Nullable String folderId, EventType eventType) { + public Mono<Void> publishApplicationCommonEvent(ApplicationView originalApplicationView, String applicationId, @Nullable String folderIdFrom, @Nullable String folderId, EventType eventType) { return applicationService.findByIdWithoutDsl(applicationId) .map(application -> { ApplicationInfoView applicationInfoView = ApplicationInfoView.builder() @@ -116,85 +120,135 @@ public Mono<Void> publishApplicationCommonEvent(String applicationId, @Nullable .build(); }) - .flatMap(applicationView -> publishApplicationCommonEvent(applicationView, eventType)); + .flatMap(applicationView -> publishApplicationCommonEvent(originalApplicationView, applicationView, eventType)); } - public Mono<Void> publishApplicationCommonEvent(ApplicationView applicationView, EventType eventType) { + public Mono<Void> publishApplicationCommonEvent(ApplicationView originalApplicationView, ApplicationView applicationView, EventType eventType) { return sessionUserService.isAnonymousUser() - .flatMap(anonymous -> { - if (anonymous) { - return Mono.empty(); - } - return sessionUserService.getVisitorOrgMemberCache() - .zipWith(Mono.defer(() -> { - String folderId = applicationView.getApplicationInfoView().getFolderId(); - if (StringUtils.isBlank(folderId)) { - return Mono.just(Optional.<Folder>empty()); - } - return folderService.findById(folderId) - .map(Optional::of) - .onErrorReturn(Optional.empty()); - })) - .zipWith(Mono.defer(() -> { - String folderId = applicationView.getApplicationInfoView().getFolderIdFrom(); - if (StringUtils.isBlank(folderId)) { - return Mono.just(Optional.<Folder>empty()); - } - return folderService.findById(folderId) - .map(Optional::of) - .onErrorReturn(Optional.empty()); - }), TupleUtils::merge) - .zipWith(sessionUserService.getVisitorToken()) - .zipWith(Mono.defer(() -> { - String appId = applicationView.getApplicationInfoView().getApplicationId(); - return applicationService.findById(appId) - .zipWhen(application -> application.getCategory(applicationRecordServiceImpl)) - .zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl)) - .map(tuple -> { - String category = tuple.getT1().getT2(); - String description = tuple.getT2(); - return Pair.of(category, description); - }); - }), TupleUtils::merge) - .flatMap(tuple -> Mono.deferContextual(contextView -> { - OrgMember orgMember = tuple.getT1().getT1(); - Optional<Folder> optional = tuple.getT1().getT2(); - Optional<Folder> optionalFrom = tuple.getT1().getT3(); - String token = tuple.getT2(); - String category = tuple.getT3().getLeft(); - String description = tuple.getT3().getRight(); - ApplicationInfoView applicationInfoView = applicationView.getApplicationInfoView(); - - ApplicationCommonEvent event = ApplicationCommonEvent.builder() - .orgId(orgMember.getOrgId()) - .userId(orgMember.getUserId()) - .applicationId(applicationInfoView.getApplicationId()) - .applicationGid(applicationInfoView.getApplicationGid()) - .applicationName(applicationInfoView.getName()) - .applicationCategory(category) - .applicationDescription(description) - .type(eventType) - .folderId(optional.map(Folder::getId).orElse(null)) - .folderName(optional.map(Folder::getName).orElse(null)) - .oldFolderId(optionalFrom.map(Folder::getId).orElse(null)) - .oldFolderName(optionalFrom.map(Folder::getName).orElse(null)) - .isAnonymous(anonymous) - .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) - .build(); - + .flatMap(anonymous -> sessionUserService.getVisitorOrgMemberCache() + .onErrorReturn(new OrgMember(null, null, null, null, 0)) + .zipWith(Mono.defer(() -> { + String folderId = applicationView.getApplicationInfoView().getFolderId(); + if (StringUtils.isBlank(folderId)) { + return Mono.just(Optional.<Folder>empty()); + } + return folderService.findById(folderId) + .map(Optional::of) + .onErrorReturn(Optional.empty()); + })) + .zipWith(Mono.defer(() -> { + String folderId = applicationView.getApplicationInfoView().getFolderIdFrom(); + if (StringUtils.isBlank(folderId)) { + return Mono.just(Optional.<Folder>empty()); + } + return folderService.findById(folderId) + .map(Optional::of) + .onErrorReturn(Optional.empty()); + }), TupleUtils::merge) + .zipWith(sessionUserService.getVisitorToken()) + .zipWith(Mono.defer(() -> { + String appId = applicationView.getApplicationInfoView().getApplicationId(); + return applicationService.findById(appId) + .zipWhen(application -> application.getCategory(applicationRecordServiceImpl)) + .zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl)) + .zipWhen(application -> application.getT1().getT1().getTitle(applicationRecordServiceImpl)) + .map(tuple -> { + String category = tuple.getT1().getT1().getT2(); + String description = tuple.getT1().getT2(); + String title = tuple.getT2(); + return new String[]{category, description, title}; + }); + }), TupleUtils::merge) + .flatMap(tuple -> Mono.deferContextual(contextView -> { + OrgMember orgMember = tuple.getT1().getT1(); + Optional<Folder> optional = tuple.getT1().getT2(); + Optional<Folder> optionalFrom = tuple.getT1().getT3(); + String token = tuple.getT2(); + String category = tuple.getT3()[0]; + String description = tuple.getT3()[1]; + String title = tuple.getT3()[2]; + ApplicationInfoView applicationInfoView = applicationView.getApplicationInfoView(); + + ApplicationCommonEvent event = ApplicationCommonEvent.builder() + .orgId(orgMember.getOrgId()) + .userId(orgMember.getUserId()) + .applicationId(applicationInfoView.getApplicationId()) + .applicationGid(applicationInfoView.getApplicationGid()) + .applicationName(applicationInfoView.getName()) + .applicationAuthor(applicationInfoView.getCreateBy()) + .applicationAuthorOrgId(applicationInfoView.getOrgId()) + .applicationCategory(category) + .applicationDescription(description) + .applicationTitle(title) + .oldApplicationName(originalApplicationView!=null ? originalApplicationView.getApplicationInfoView().getName() : null) + .oldApplicationCategory(originalApplicationView!=null ?originalApplicationView.getApplicationInfoView().getCategory() : null) + .oldApplicationDescription(originalApplicationView!=null ?originalApplicationView.getApplicationInfoView().getDescription() : null) + .oldApplicationTitle(originalApplicationView!=null ?originalApplicationView.getApplicationInfoView().getTitle() : null) + .type(eventType) + .folderId(optional.map(Folder::getId).orElse(null)) + .folderName(optional.map(Folder::getName).orElse(null)) + .oldFolderId(optionalFrom.map(Folder::getId).orElse(null)) + .oldFolderName(optionalFrom.map(Folder::getName).orElse(null)) + .isAnonymous(anonymous) + .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) + .build(); + + event.populateDetails(contextView); + applicationEventPublisher.publishEvent(event); + return Mono.empty(); + })).then() // **Ensures Mono<Void> return type** + .onErrorResume(throwable -> { + log.error("publishApplicationCommonEvent error. {}, {}", applicationView, eventType, throwable); + return Mono.empty(); + })); + } + + + public Mono<Void> publishApplicationPermissionEvent(String applicationId, Set<String> userIds, Set<String> groupIds, String permissionId, String role) { + return sessionUserService.isAnonymousUser() + .flatMap(anonymous -> sessionUserService.getVisitorOrgMemberCache() + .zipWith(sessionUserService.getVisitorToken()) + .zipWith(applicationService.findById(applicationId) + .zipWhen(application -> application.getCategory(applicationRecordServiceImpl)) + .zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl))) + .flatMap(tuple -> { + OrgMember orgMember = tuple.getT1().getT1(); + String token = tuple.getT1().getT2(); + String category = tuple.getT2().getT1().getT2(); + String description = tuple.getT2().getT2(); + Application application = tuple.getT2().getT1().getT1(); + + ApplicationCommonEvent event = ApplicationCommonEvent.builder() + .orgId(orgMember.getOrgId()) + .userId(orgMember.getUserId()) + .applicationId(application.getId()) + .applicationGid(application.getGid()) + .applicationName(application.getName()) + .applicationCategory(category) + .applicationDescription(description) + .type(EventType.APPLICATION_PERMISSION_CHANGE) + .permissionId(permissionId) + .role(role) + .userIds(userIds) + .groupIds(groupIds) + .isAnonymous(anonymous) + .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) + .build(); + + return Mono.deferContextual(contextView -> { event.populateDetails(contextView); applicationEventPublisher.publishEvent(event); return Mono.empty(); - })).then() // **Ensures Mono<Void> return type** - .onErrorResume(throwable -> { - log.error("publishApplicationCommonEvent error. {}, {}", applicationView, eventType, throwable); - return Mono.empty(); - }); + }).then(); // **Fix: Ensures Mono<Void> is returned** + })) + .onErrorResume(throwable -> { + log.error("publishApplicationPermissionEvent error. {}, {}, {}", applicationId, permissionId, role, throwable); + return Mono.empty(); }); } - public Mono<Void> publishApplicationPermissionEvent(String applicationId, Set<String> userIds, Set<String> groupIds, String permissionId, String role) { + public Mono<Void> publishApplicationSharingEvent(String applicationId, String shareType, ApplicationPermissionView applicationPermissionView) { return sessionUserService.isAnonymousUser() .flatMap(anonymous -> { if (anonymous) { @@ -220,11 +274,9 @@ public Mono<Void> publishApplicationPermissionEvent(String applicationId, Set<St .applicationName(application.getName()) .applicationCategory(category) .applicationDescription(description) - .type(EventType.APPLICATION_PERMISSION_CHANGE) - .permissionId(permissionId) - .role(role) - .userIds(userIds) - .groupIds(groupIds) + .type(EventType.APPLICATION_SHARING_CHANGE) + .sharingDetails(applicationPermissionView) + .shareType(shareType) .isAnonymous(anonymous) .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) .build(); @@ -237,13 +289,13 @@ public Mono<Void> publishApplicationPermissionEvent(String applicationId, Set<St }); }) .onErrorResume(throwable -> { - log.error("publishApplicationPermissionEvent error. {}, {}, {}", applicationId, permissionId, role, throwable); + log.error("publishApplicationSharingEvent error. {}, {}", applicationId, shareType, throwable); return Mono.empty(); }); } - public Mono<Void> publishApplicationSharingEvent(String applicationId, String shareType) { + public Mono<Void> publishApplicationPublishEvent(String applicationId, ApplicationPublishRequest request) { return sessionUserService.isAnonymousUser() .flatMap(anonymous -> { if (anonymous) { @@ -269,8 +321,9 @@ public Mono<Void> publishApplicationSharingEvent(String applicationId, String sh .applicationName(application.getName()) .applicationCategory(category) .applicationDescription(description) - .type(EventType.APPLICATION_SHARING_CHANGE) - .shareType(shareType) + .type(EventType.APPLICATION_PUBLISH) + .commitMessage(request.commitMessage()) + .tag(request.tag()) .isAnonymous(anonymous) .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) .build(); @@ -283,13 +336,13 @@ public Mono<Void> publishApplicationSharingEvent(String applicationId, String sh }); }) .onErrorResume(throwable -> { - log.error("publishApplicationSharingEvent error. {}, {}", applicationId, shareType, throwable); + log.error("publishApplicationPublishEvent error. {}, {}, {}", applicationId, request.tag(), request.commitMessage(), throwable); return Mono.empty(); }); } - public Mono<Void> publishApplicationPublishEvent(String applicationId, ApplicationPublishRequest request) { + public Mono<Void> publishApplicationVersionChangeEvent(String applicationId, String newtag) { return sessionUserService.isAnonymousUser() .flatMap(anonymous -> { if (anonymous) { @@ -315,9 +368,8 @@ public Mono<Void> publishApplicationPublishEvent(String applicationId, Applicati .applicationName(application.getName()) .applicationCategory(category) .applicationDescription(description) - .type(EventType.APPLICATION_PUBLISH) - .commitMessage(request.commitMessage()) - .tag(request.tag()) + .type(EventType.APPLICATION_VERSION_CHANGE) + .tag(newtag) .isAnonymous(anonymous) .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) .build(); @@ -330,57 +382,81 @@ public Mono<Void> publishApplicationPublishEvent(String applicationId, Applicati }); }) .onErrorResume(throwable -> { - log.error("publishApplicationPublishEvent error. {}, {}, {}", applicationId, request.tag(), request.commitMessage(), throwable); + log.error("publishApplicationVersionChangeEvent error. {}, {}", applicationId, newtag, throwable); return Mono.empty(); }); } - public Mono<Void> publishApplicationVersionChangeEvent(String applicationId, String newtag) { + public Mono<Void> publishBundleCommonEvent(BundleInfoView bundleInfoView, EventType eventType) { return sessionUserService.isAnonymousUser() .flatMap(anonymous -> { if (anonymous) { return Mono.empty(); } return sessionUserService.getVisitorOrgMemberCache() + .zipWith(Mono.defer(() -> { + String folderId = bundleInfoView.getFolderId(); + if (StringUtils.isBlank(folderId)) { + return Mono.just(Optional.<Folder> empty()); + } + return folderService.findById(folderId) + .map(Optional::of) + .onErrorReturn(Optional.empty()); + })) + .zipWith(Mono.defer(() -> { + String folderId = bundleInfoView.getFolderIdFrom(); + if (StringUtils.isBlank(folderId)) { + return Mono.just(Optional.<Folder> empty()); + } + return folderService.findById(folderId) + .map(Optional::of) + .onErrorReturn(Optional.empty()); + }), TupleUtils::merge) .zipWith(sessionUserService.getVisitorToken()) - .zipWith(applicationService.findById(applicationId) - .zipWhen(application -> application.getCategory(applicationRecordServiceImpl)) - .zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl))) .flatMap(tuple -> { OrgMember orgMember = tuple.getT1().getT1(); - String token = tuple.getT1().getT2(); - String category = tuple.getT2().getT1().getT2(); - String description = tuple.getT2().getT2(); - Application application = tuple.getT2().getT1().getT1(); - + Optional<Folder> optional = tuple.getT1().getT2(); + Optional<Folder> optionalFrom = tuple.getT1().getT3(); + String token = tuple.getT2(); ApplicationCommonEvent event = ApplicationCommonEvent.builder() .orgId(orgMember.getOrgId()) .userId(orgMember.getUserId()) - .applicationId(application.getId()) - .applicationGid(application.getGid()) - .applicationName(application.getName()) - .applicationCategory(category) - .applicationDescription(description) - .type(EventType.APPLICATION_VERSION_CHANGE) - .tag(newtag) + .applicationId(bundleInfoView.getBundleId()) + .applicationGid(bundleInfoView.getBundleGid()) + .applicationName(bundleInfoView.getName()) + .type(eventType) + .folderId(optional.map(Folder::getId).orElse(null)) + .folderName(optional.map(Folder::getName).orElse(null)) + .oldFolderId(optionalFrom.map(Folder::getId).orElse(null)) + .oldFolderName(optionalFrom.map(Folder::getName).orElse(null)) .isAnonymous(anonymous) .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) .build(); - return Mono.deferContextual(contextView -> { event.populateDetails(contextView); applicationEventPublisher.publishEvent(event); return Mono.empty(); - }).then(); // **Fix: Ensures Mono<Void> is returned** + }).then(); + }) + .then() + .onErrorResume(throwable -> { + log.error("publishBundleCommonEvent error. {}, {}", bundleInfoView, eventType, throwable); + return Mono.empty(); }); - }) - .onErrorResume(throwable -> { - log.error("publishApplicationVersionChangeEvent error. {}, {}", applicationId, newtag, throwable); - return Mono.empty(); }); } - + + public Mono<Void> publishBundleCommonEvent(String bundleId, @Nullable String folderIdFrom, @Nullable String folderIdTo, EventType eventType) { + return applicationService.findByIdWithoutDsl(bundleId) + .map(application -> BundleInfoView.builder() + .bundleId(bundleId) + .name(application.getName()) + .folderId(folderIdTo) + .folderIdFrom(folderIdFrom) + .build()) + .flatMap(bundleInfoView -> publishBundleCommonEvent(bundleInfoView, eventType)); + } public Mono<Void> publishUserLoginEvent(String source) { return sessionUserService.getVisitorOrgMember().zipWith(sessionUserService.getVisitorToken()) @@ -470,7 +546,8 @@ public Mono<Void> publishGroupUpdateEvent(boolean publish, Group previousGroup, .orgId(tuple.getT1().getOrgId()) .userId(tuple.getT1().getUserId()) .groupId(previousGroup.getId()) - .groupName(previousGroup.getName(locale) + " => " + newGroupName) + .groupName(newGroupName) + .oldGroupName(previousGroup.getName(locale)) .isAnonymous(Authentication.isAnonymousUser(tuple.getT1().getUserId())) .sessionHash(Hashing.sha512().hashString(tuple.getT2(), StandardCharsets.UTF_8).toString()) .build(); @@ -572,7 +649,8 @@ public Mono<Void> publishGroupMemberRoleUpdateEvent(boolean publish, String grou .groupName(group.getName(locale)) .memberId(member.getId()) .memberName(member.getName()) - .memberRole(previousGroupMember.getRole().getValue() + " => " + updateRoleRequest.getRole()) + .memberRole(updateRoleRequest.getRole()) + .oldMemberRole(previousGroupMember.getRole().getValue()) .isAnonymous(Authentication.isAnonymousUser(orgMember.getUserId())) .sessionHash(Hashing.sha512().hashString(tuple.getT4(), StandardCharsets.UTF_8).toString()) .build(); @@ -663,16 +741,16 @@ public void publishQueryExecutionEvent(QueryExecutionEvent queryExecutionEvent) applicationEventPublisher.publishEvent(queryExecutionEvent); } - public Mono<Void> publishDatasourceEvent(String id, EventType eventType) { + public Mono<Void> publishDatasourceEvent(String id, EventType eventType, String oldName) { return datasourceService.getById(id) - .flatMap(datasource -> publishDatasourceEvent(datasource, eventType)) + .flatMap(datasource -> publishDatasourceEvent(datasource, eventType, oldName)) .onErrorResume(throwable -> { log.error("publishDatasourceEvent error.", throwable); return Mono.empty(); }); } - public Mono<Void> publishDatasourceEvent(Datasource datasource, EventType eventType) { + public Mono<Void> publishDatasourceEvent(Datasource datasource, EventType eventType, String oldName) { return sessionUserService.getVisitorOrgMemberCache() .zipWith(sessionUserService.getVisitorToken()) .flatMap(tuple -> { @@ -680,6 +758,7 @@ public Mono<Void> publishDatasourceEvent(Datasource datasource, EventType eventT .datasourceId(datasource.getId()) .name(datasource.getName()) .type(datasource.getType()) + .oldName(oldName) .eventType(eventType) .userId(tuple.getT1().getUserId()) .orgId(tuple.getT1().getOrgId()) @@ -698,34 +777,16 @@ public Mono<Void> publishDatasourceEvent(Datasource datasource, EventType eventT }); } - public Mono<Void> publishDatasourcePermissionEvent(String permissionId, EventType eventType) { - return resourcePermissionService.getById(permissionId) - .zipWhen(resourcePermission -> datasourceService.getById(resourcePermission.getResourceId())) - .flatMap(tuple -> { - ResourcePermission resourcePermission = tuple.getT1(); - ResourceHolder holder = resourcePermission.getResourceHolder(); - Datasource datasource = tuple.getT2(); - return publishDatasourcePermissionEvent(datasource.getId(), - holder == USER ? List.of(resourcePermission.getResourceHolderId()) : Collections.emptyList(), - holder == USER ? Collections.emptyList() : List.of(resourcePermission.getResourceHolderId()), - resourcePermission.getResourceRole().getValue(), - eventType); - }) - .onErrorResume(throwable -> { - log.error("publishDatasourcePermissionEvent error.", throwable); - return Mono.empty(); - }); - } - public Mono<Void> publishDatasourcePermissionEvent(String datasourceId, Collection<String> userIds, Collection<String> groupIds, String role, - EventType eventType) { + EventType eventType, CommonPermissionView oldPermissions, CommonPermissionView newPermissions) { return Mono.zip(sessionUserService.getVisitorOrgMemberCache(), datasourceService.getById(datasourceId), sessionUserService.getVisitorToken()) .flatMap(tuple -> { OrgMember orgMember = tuple.getT1(); Datasource datasource = tuple.getT2(); + DatasourcePermissionEvent datasourcePermissionEvent = DatasourcePermissionEvent.builder() .datasourceId(datasourceId) .name(datasource.getName()) @@ -734,6 +795,8 @@ public Mono<Void> publishDatasourcePermissionEvent(String datasourceId, .orgId(orgMember.getOrgId()) .userIds(userIds) .groupIds(groupIds) + .newPermissions(newPermissions==null?null:newPermissions.getPermissions()) + .oldPermissions(oldPermissions==null?null:oldPermissions.getPermissions()) .role(role) .eventType(eventType) .isAnonymous(Authentication.isAnonymousUser(orgMember.getUserId())) @@ -751,11 +814,65 @@ public Mono<Void> publishDatasourcePermissionEvent(String datasourceId, }); } - public Mono<Void> publishLibraryQuery(LibraryQuery libraryQuery, EventType eventType) { - return publishLibraryQueryEvent(libraryQuery.getId(), libraryQuery.getName(), eventType); + public Mono<Void> publishDatasourceResourcePermissionEvent(EventType eventType, ResourcePermission oldPermission, ResourcePermission newPermission) { + return Mono.zip(sessionUserService.getVisitorOrgMemberCache(), + datasourceService.getById(oldPermission.getResourceId()), + sessionUserService.getVisitorToken()) + .flatMap(tuple -> { + OrgMember orgMember = tuple.getT1(); + Datasource datasource = tuple.getT2(); + + DatasourceResourcePermissionEvent datasourceResourcePermissionEvent = DatasourceResourcePermissionEvent.builder() + .name(datasource.getName()) + .type(datasource.getType()) + .userId(orgMember.getUserId()) + .orgId(orgMember.getOrgId()) + .newPermission(newPermission) + .oldPermission(oldPermission) + .eventType(eventType) + .isAnonymous(Authentication.isAnonymousUser(orgMember.getUserId())) + .sessionHash(Hashing.sha512().hashString(tuple.getT3(), StandardCharsets.UTF_8).toString()) + .build(); + return Mono.deferContextual(contextView -> { + datasourceResourcePermissionEvent.populateDetails(contextView); + applicationEventPublisher.publishEvent(datasourceResourcePermissionEvent); + return Mono.<Void>empty(); + }); + }) + .onErrorResume(throwable -> { + log.error("DatasourceResourcePermissionEvent error.", throwable); + return Mono.empty(); + }); + } + + public Mono<Void> publishLibraryQueryPublishEvent(String id, String oldVersion, String newVersion, EventType eventType) { + return sessionUserService.getVisitorOrgMemberCache() + .zipWith(sessionUserService.getVisitorToken()) + .flatMap(tuple -> { + LibraryQueryPublishEvent event = LibraryQueryPublishEvent.builder() + .id(id) + .oldVersion(oldVersion) + .newVersion(newVersion) + .eventType(eventType) + .userId(tuple.getT1().getUserId()) + .orgId(tuple.getT1().getOrgId()) + .isAnonymous(Authentication.isAnonymousUser(tuple.getT1().getUserId())) + .sessionHash(Hashing.sha512().hashString(tuple.getT2(), StandardCharsets.UTF_8).toString()) + .build(); + return Mono.deferContextual(contextView -> { + event.populateDetails(contextView); + applicationEventPublisher.publishEvent(event); + return Mono.<Void>empty(); + }); + }) + .then() + .onErrorResume(throwable -> { + log.error("publishLibraryQueryPublishEvent error.", throwable); + return Mono.empty(); + }); } - public Mono<Void> publishLibraryQueryEvent(String id, String name, EventType eventType) { + public Mono<Void> publishLibraryQueryEvent(String id, String name, EventType eventType, String oldName) { return sessionUserService.getVisitorOrgMemberCache() .zipWith(sessionUserService.getVisitorToken()) .flatMap(tuple -> { @@ -764,6 +881,7 @@ public Mono<Void> publishLibraryQueryEvent(String id, String name, EventType eve .orgId(tuple.getT1().getOrgId()) .id(id) .name(name) + .oldName(oldName) .eventType(eventType) .isAnonymous(Authentication.isAnonymousUser(tuple.getT1().getUserId())) .sessionHash(Hashing.sha512().hashString(tuple.getT2(), StandardCharsets.UTF_8).toString()) diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java index 20611b8d8a..02d3fb8712 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/DatabaseChangelog.java @@ -55,6 +55,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import static org.lowcoder.api.authentication.util.AdvancedMapUtils.documentToMap; import static org.lowcoder.domain.util.QueryDslUtils.fieldName; @@ -479,6 +480,28 @@ public void renameApplicationRecordCollection(MongockTemplate mongoTemplate, Mon } + @ChangeSet(order = "031", id = "delete-old-super-admin", author = "Thomas") + public void deleteOldSuperAdmin(MongockTemplate mongoTemplate, MongoDatabase mongoDatabase) { + List<User> users = mongoTemplate.find( + Query.query(Criteria.where("superAdmin").is(true)) + .with(Sort.by(Sort.Direction.DESC, "createdAt")), + User.class + ); + + // Ensure there's more than one superAdmin user + if (users.size() > 1) { + // Keep the most recent one (first in the sorted list), delete the rest + List<ObjectId> userIdsToDelete = users.subList(1, users.size()) + .stream() + .map(User::getId) + .map(ObjectId::new) + .collect(Collectors.toList()); + + Query deleteQuery = Query.query(Criteria.where("_id").in(userIdsToDelete)); + mongoTemplate.remove(deleteQuery, User.class); + } + } + private void addGidField(MongockTemplate mongoTemplate, String collectionName) { // Create a query to match all documents Query query = new Query(); diff --git a/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml b/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml index 5f16fdaced..80b8ddfff4 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml +++ b/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml @@ -28,12 +28,17 @@ spring: required: ${LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED:true} transport: protocol: smtp + mvc: + pathmatch: + trailing-slash-match: true server: port: 8080 common: cookie-name: LOWCODER_DEBUG_TOKEN js-executor: host: "http://127.0.0.1:6060" + password: ${LOWCODER_NODE_SERVICE_SECRET:} + salt: ${LOWCODER_NODE_SERVICE_SECRET_SALT:} workspace: mode: ${LOWCODER_WORKSPACE_MODE:SAAS} plugin-dirs: diff --git a/server/api-service/lowcoder-server/src/main/resources/application.yaml b/server/api-service/lowcoder-server/src/main/resources/application.yaml index 1ca5369308..254eca6e87 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application.yaml +++ b/server/api-service/lowcoder-server/src/main/resources/application.yaml @@ -37,6 +37,9 @@ spring: required: ${LOWCODER_ADMIN_SMTP_STARTTLS_REQUIRED:true} transport: protocol: smtp + mvc: + pathmatch: + trailing-slash-match: true server: compression: enabled: true @@ -56,13 +59,13 @@ default: query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT:10} common: - cookie-name: LOWCODER_CE_SELFHOST_TOKEN + cookie-name: ${LOWCODER_COOKIE_NAME:LOWCODER_CE_SELFHOST_TOKEN} product: lowcoder domain: default-value: lowcoder.org cloud: false - version: 2.1.4 - apiVersion: 1.1 + version: 2.7.0 + apiVersion: 1.2 block-hound-enable: false encrypt: password: ${LOWCODER_DB_ENCRYPTION_PASSWORD:lowcoder.org} @@ -71,6 +74,8 @@ common: corsAllowedDomainString: ${LOWCODER_CORS_DOMAINS:*} js-executor: host: ${LOWCODER_NODE_SERVICE_URL:http://127.0.0.1:6060} + password: ${LOWCODER_NODE_SERVICE_SECRET:} + salt: ${LOWCODER_NODE_SERVICE_SECRET_SALT:} max-query-request-size: ${LOWCODER_MAX_REQUEST_SIZE:20m} max-query-response-size: ${LOWCODER_MAX_REQUEST_SIZE:20m} max-upload-size: ${LOWCODER_MAX_REQUEST_SIZE:20m} @@ -100,6 +105,7 @@ springdoc: path: /api/docs/openapi.json swagger-ui: path: /api/docs/swagger-ui + operations-sorter: method paths-to-exclude: /api/v1/** management: @@ -126,4 +132,4 @@ management: redis: enabled: true diskspace: - enabled: false + enabled: false \ No newline at end of file diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java index bc36d9be99..3ff202b6d5 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceIntegrationTest.java @@ -116,7 +116,7 @@ public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() { .editingApplicationDSL(applicationView.getApplicationDSL()) .name("app03") .build(); - return applicationApiService.update(applicationView.getApplicationInfoView().getApplicationId(), application); + return applicationApiService.update(applicationView.getApplicationInfoView().getApplicationId(), application, false); }); StepVerifier.create(applicationViewMono) @@ -131,7 +131,7 @@ public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() { public void testUpdateEditingStateSuccess() { Mono<ApplicationView> applicationViewMono = applicationApiService.create(new CreateApplicationRequest("org01", null, "app1", ApplicationType.APPLICATION.getValue(), Map.of("comp", "list"), null, null, null)); Mono<ApplicationView> updateEditStateMono = applicationViewMono.delayUntil(app -> applicationApiService.updateEditState(app.getApplicationInfoView().getApplicationId(), new ApplicationEndpoints.UpdateEditStateRequest(true))); - Mono<ApplicationView> app = updateEditStateMono.flatMap(applicationView -> applicationApiService.getEditingApplication(applicationView.getApplicationInfoView().getApplicationId())); + Mono<ApplicationView> app = updateEditStateMono.flatMap(applicationView -> applicationApiService.getEditingApplication(applicationView.getApplicationInfoView().getApplicationId(), false)); StepVerifier.create(app) .assertNext(application -> { Assertions.assertEquals("user01", application.getApplicationInfoView().getEditingUserId()); diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java index 6996e76549..1069447772 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java @@ -144,12 +144,12 @@ public void testPublishApplication() { .cache(); // edit dsl before publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "list"), applicationView.getApplicationDSL())) .verifyComplete(); // published dsl before publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "list"), applicationView.getApplicationDSL())) .verifyComplete(); @@ -158,26 +158,26 @@ public void testPublishApplication() { .delayUntil(id -> applicationApiService.publish(id, new ApplicationPublishRequest("Test Publish", "1.0.0"))).cache(); // edit dsl after publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "list"), applicationView.getApplicationDSL())) .verifyComplete(); // published dsl after publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "list"), applicationView.getApplicationDSL())) .verifyComplete(); // update applicationIdMono = applicationIdMono - .delayUntil(id -> applicationApiService.update(id, Application.builder().editingApplicationDSL(Map.of("comp", "table")).build())).cache(); + .delayUntil(id -> applicationApiService.update(id, Application.builder().editingApplicationDSL(Map.of("comp", "table")).build(), false)).cache(); // edit dsl after publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "table"), applicationView.getApplicationDSL())) .verifyComplete(); // published dsl after publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "list"), applicationView.getApplicationDSL())) .verifyComplete(); @@ -186,12 +186,12 @@ public void testPublishApplication() { .delayUntil(id -> applicationApiService.publish(id, new ApplicationPublishRequest("Test Publish 2", "2.0.0"))).cache(); // edit dsl after publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getEditingApplication(id, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "table"), applicationView.getApplicationDSL())) .verifyComplete(); // published dsl after publish - StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL))) + StepVerifier.create(applicationIdMono.flatMap(id -> applicationApiService.getPublishedApplication(id, ApplicationRequestType.PUBLIC_TO_ALL, false))) .assertNext(applicationView -> Assertions.assertEquals(Map.of("comp", "table"), applicationView.getApplicationDSL())) .verifyComplete(); diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GenericAuthenticateTest.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GenericAuthenticateTest.java index 112ea44859..694c69cce4 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GenericAuthenticateTest.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/authentication/GenericAuthenticateTest.java @@ -182,7 +182,7 @@ public void testGoogleLoginSuccess(WireMockRuntimeInfo wmRuntimeInfo) { }) .verifyComplete(); - Mockito.framework().clearInlineMocks(); + // Mockito.framework().clearInlineMocks(); } private String getEmailAuthConfigId() { diff --git a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/common/TestRedisConfiguration.java b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/common/TestRedisConfiguration.java index f42ae0cd4a..1119462f25 100644 --- a/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/common/TestRedisConfiguration.java +++ b/server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/common/TestRedisConfiguration.java @@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicInteger; @SuppressWarnings("UnstableApiUsage") -//@TestConfiguration +@TestConfiguration public class TestRedisConfiguration { private static final AtomicInteger STATE = new AtomicInteger(0); diff --git a/server/api-service/pom.xml b/server/api-service/pom.xml index 973c5133da..50e8c157ff 100644 --- a/server/api-service/pom.xml +++ b/server/api-service/pom.xml @@ -12,7 +12,7 @@ <properties> - <revision>2.6.5</revision> + <revision>2.7.0</revision> <java.version>17</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> diff --git a/server/node-service/package.json b/server/node-service/package.json index d7676d9ce0..50ba90832e 100644 --- a/server/node-service/package.json +++ b/server/node-service/package.json @@ -1,6 +1,6 @@ { "name": "lowcoder-node-server", - "version": "2.6.5", + "version": "2.7.0", "private": true, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -37,6 +37,7 @@ "@aws-sdk/client-lambda": "^3.332.0", "@aws-sdk/client-s3": "^3.332.0", "@aws-sdk/s3-request-presigner": "^3.332.0", + "@duckdb/node-api": "^1.3.0-alpha.21", "@google-cloud/bigquery": "^6.1.0", "@google-cloud/storage": "^6.10.1", "@supabase/supabase-js": "^2.26.0", @@ -52,7 +53,6 @@ "base64-arraybuffer": "^1.0.2", "bluebird": "^3.7.2", "cors": "^2.8.5", - "duckdb-async": "^1.1.3", "dynamodb-data-types": "^4.0.1", "express": "^4.21.0", "express-async-errors": "^3.1.1", diff --git a/server/node-service/src/controllers/plugins.ts b/server/node-service/src/controllers/plugins.ts index e20a109b38..d763586ce2 100644 --- a/server/node-service/src/controllers/plugins.ts +++ b/server/node-service/src/controllers/plugins.ts @@ -3,6 +3,23 @@ import { Request, Response } from "express"; import _ from "lodash"; import { Config } from "lowcoder-sdk/dataSource"; import * as pluginServices from "../services/plugin"; +// Add import for decryption utility +import { decryptString } from "../utils/encryption"; // <-- implement this utility as needed + +async function getDecryptedBody(req: Request): Promise<any> { + if (req.headers["x-encrypted"]) { + // Assume body is a raw encrypted string, decrypt and parse as JSON + const encrypted = typeof req.body === "string" ? req.body : req.body?.toString?.(); + if (!encrypted) throw badRequest("Missing encrypted body"); + const decrypted = await decryptString(encrypted); + try { + return JSON.parse(decrypted); + } catch (e) { + throw badRequest("Failed to parse decrypted body as JSON"); + } + } + return req.body; +} export async function listPlugins(req: Request, res: Response) { let ids = req.query["id"] || []; @@ -15,12 +32,10 @@ export async function listPlugins(req: Request, res: Response) { } export async function runPluginQuery(req: Request, res: Response) { - const { pluginName, dsl, context, dataSourceConfig } = req.body; + const body = await getDecryptedBody(req); + const { pluginName, dsl, context, dataSourceConfig } = body; const ctx = pluginServices.getPluginContext(req); - - // console.log("pluginName: ", pluginName, "dsl: ", dsl, "context: ", context, "dataSourceConfig: ", dataSourceConfig, "ctx: ", ctx); - const result = await pluginServices.runPluginQuery( pluginName, dsl, @@ -32,7 +47,8 @@ export async function runPluginQuery(req: Request, res: Response) { } export async function validatePluginDataSourceConfig(req: Request, res: Response) { - const { pluginName, dataSourceConfig } = req.body; + const body = await getDecryptedBody(req); + const { pluginName, dataSourceConfig } = body; const ctx = pluginServices.getPluginContext(req); const result = await pluginServices.validatePluginDataSourceConfig( pluginName, @@ -50,10 +66,11 @@ type GetDynamicDefReqBody = { export async function getDynamicDef(req: Request, res: Response) { const ctx = pluginServices.getPluginContext(req); - if (!Array.isArray(req.body)) { + const body = await getDecryptedBody(req); + if (!Array.isArray(body)) { throw badRequest("request body is not a valid array"); } - const fields = req.body as GetDynamicDefReqBody; + const fields = body as GetDynamicDefReqBody; const result: Config[] = []; for (const item of fields) { const def = await pluginServices.getDynamicConfigDef( diff --git a/server/node-service/src/plugins/duckdb/index.ts b/server/node-service/src/plugins/duckdb/index.ts index 6d3e3872fa..adc558e76b 100644 --- a/server/node-service/src/plugins/duckdb/index.ts +++ b/server/node-service/src/plugins/duckdb/index.ts @@ -1,7 +1,7 @@ import { DataSourcePlugin } from "lowcoder-sdk/dataSource"; import dataSourceConfig, { DataSourceDataType } from "./dataSourceConfig"; import queryConfig, { ActionDataType } from "./queryConfig"; -import { Database } from "duckdb-async"; +import { DuckDBInstance } from "@duckdb/node-api"; import { ServiceError } from "../../common/error"; // Helper function to handle BigInt serialization @@ -23,20 +23,22 @@ const duckdbPlugin: DataSourcePlugin<ActionDataType, DataSourceDataType> = { run: async function (actionData, dataSourceConfig): Promise<any> { const { databaseFile, options } = dataSourceConfig; const parsedOptions = JSON.parse(options); - const db = await Database.create(databaseFile, parsedOptions); + const instance = await DuckDBInstance.create(databaseFile, parsedOptions); + const db = await instance.connect(); if (actionData.actionName === "Query") { try { - const result = await db.all(actionData.queryString); + const result = await db.runAndReadAll(actionData.queryString); + const data = await result.getRows(); // Apply BigInt serialization to each row - return result.map(serializeBigInts); + return data.map(serializeBigInts); } catch (error) { throw new ServiceError((error as Error).message); } finally { - await db.close(); + await db.closeSync(); } } }, }; -export default duckdbPlugin; +export default duckdbPlugin; \ No newline at end of file diff --git a/server/node-service/src/plugins/lowcoder/index.ts b/server/node-service/src/plugins/lowcoder/index.ts index 397cf54c6a..9b32fdca9b 100644 --- a/server/node-service/src/plugins/lowcoder/index.ts +++ b/server/node-service/src/plugins/lowcoder/index.ts @@ -8,10 +8,12 @@ import { parseOpenApi, ParseOpenApiOptions } from "../openApi/parse"; import spec10 from './lowcoder.spec-v1.0.json'; import spec11 from './lowcoder.spec-v1.1.json'; +import spec12 from './lowcoder.spec-v1.2.json'; const specs = { "v1.0": spec10, "v1.1": spec11, + "v1.2": spec12, } const dataSourceConfig = { @@ -28,7 +30,7 @@ const dataSourceConfig = { { type: "password", key: "bearerAuth.value", - label: "Authorization", + label: "API Key", "tooltip": "API Key Authentication with a Bearer token. Copy your API Key here. (e.g. 'Bearer eyJhbGciO...')", "placeholder": "API Key Authentication with a Bearer token. Copy your API Key here. (e.g. 'Bearer eyJhbGciO...')" }, @@ -70,6 +72,7 @@ const lowcoderPlugin: DataSourcePlugin<any, DataSourceConfigType> = { }; }, run: function (actionData, dataSourceConfig): Promise<any> { + const { serverURL, specVersion, dynamicParamsConfig, ...otherDataSourceConfig } = dataSourceConfig; const runApiDsConfig = { diff --git a/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.0.json b/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.0.json index 59fb3a8df4..7ee8cb1473 100644 --- a/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.0.json +++ b/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.0.json @@ -8255,7 +8255,7 @@ "type": "http", "scheme": "bearer", "bearerFormat": "JWT", - "description": "API Key Authentication with a Bearer token. Copy your API Key and prefix it here with 'Bearer ' (e.g. 'Bearer eyJhbGciO...'" + "description": "JWT Authorization header using the Bearer scheme. Example: 'Authorization: Bearer {token}'" } } }, diff --git a/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.1.json b/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.1.json index 3aa304d688..277a05dca3 100644 --- a/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.1.json +++ b/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.1.json @@ -9180,11 +9180,9 @@ "securitySchemes": { "bearerAuth": { "type": "http", - "description": "API Key Authentication with a Bearer token. Copy your API Key and prefix it here with 'Bearer ' (e.g. 'Bearer eyJhbGciO...'", - "name": "Authorization", - "in": "header", "scheme": "bearer", - "bearerFormat": "JWT" + "bearerFormat": "JWT", + "description": "JWT Authorization header using the Bearer scheme. Example: 'Authorization: Bearer {token}'" } } }, diff --git a/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.2.json b/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.2.json new file mode 100644 index 0000000000..5af68679ec --- /dev/null +++ b/server/node-service/src/plugins/lowcoder/lowcoder.spec-v1.2.json @@ -0,0 +1,10640 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Lowcoder Open Rest API", + "version": "1.2" + }, + "servers": [ + { + "url": "{scheme}://{domain}:{port}{basePath}", + "description": "Lowcoder Self-hosted Installation API Access", + "variables": { + "scheme": { + "description": "HTTP scheme", + "default": "http", + "enum": [ + "http", + "https" + ] + }, + "domain": { + "description": "Lowcoder IP address or domain", + "default": "localhost" + }, + "port": { + "description": "Port", + "default": "3000" + }, + "basePath": { + "description": "Base path", + "default": "/" + } + } + }, + { + "url": "https://api-service.lowcoder.cloud/", + "description": "Lowcoder Community Edition: Public Cloud API Access" + } + ], + "security": [ + { + "bearerAuth": [] + } + ], + "tags": [ + { + "name": "Application APIs", + "description": "Application APIs" + }, + { + "name": "Application History APIs", + "description": "Application History APIs" + }, + { + "name": "Application Permissions APIs", + "description": "Application Permissions APIs" + }, + { + "name": "Application Record APIs", + "description": "Application Record APIs" + }, + { + "name": "Bundle APIs", + "description": "Bundle APIs" + }, + { + "name": "Bundle Permissions APIs", + "description": "Bundle Permissions APIs" + }, + { + "name": "Folder APIs", + "description": "Folder APIs" + }, + { + "name": "Folder Permissions APIs", + "description": "Folder Permissions APIs" + }, + { + "name": "Data Source APIs", + "description": "Data Source APIs" + }, + { + "name": "Data Source Permissions APIs", + "description": "Data Source Permissions APIs" + }, + { + "name": "Query Execution APIs", + "description": "Query Execution APIs" + }, + { + "name": "Query Library APIs", + "description": "Query Library APIs" + }, + { + "name": "Library Queries Record APIs", + "description": "Library Queries Record APIs" + }, + { + "name": "File APIs", + "description": "File APIs" + }, + { + "name": "Meta APIs", + "description": "Meta APIs" + }, + { + "name": "Image Assets APIs", + "description": "Image Assets APIs" + }, + { + "name": "User APIs", + "description": "User APIs" + }, + { + "name": "User Password APIs", + "description": "User Password APIs" + }, + { + "name": "User Profile Photo APIs", + "description": "User Profile Photo APIs" + }, + { + "name": "User invitation APIs", + "description": "User invitation APIs" + }, + { + "name": "Authentication APIs", + "description": "Authentication APIs" + }, + { + "name": "Group APIs", + "description": "Group APIs" + }, + { + "name": "Group Members APIs", + "description": "Group Members APIs" + }, + { + "name": "Organization APIs", + "description": "Organization APIs" + }, + { + "name": "Organization Member APIs", + "description": "Organization Member APIs" + }, + { + "name": "Configuration APIs", + "description": "Configuration APIs" + }, + { + "name": "API Root Endpoint", + "description": "API Root Endpoint" + }, + { + "name": "Status checks APIs", + "description": "Status checks APIs" + }, + { + "name": "Server Setting APIs", + "description": "Server Setting APIs" + }, + { + "name": "Private NPM registry APIs", + "description": "Private NPM registry APIs" + }, + { + "name": "Javascript Library APIs", + "description": "Javascript Library APIs" + } + ], + "paths": { + "/api/users/{orgId}/{userId}": { + "put": { + "tags": [ + "User APIs" + ], + "summary": "Update selected User", + "description": "Update specified user profile information within Lowcoder, ensuring accuracy and relevance.", + "operationId": "updateUser", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewUserProfileView" + } + } + } + } + } + } + }, + "/api/users/password": { + "put": { + "tags": [ + "User Password APIs" + ], + "summary": "Update User Password", + "description": "Allow the User to update their Password within Lowcoder, enhancing security and account management.", + "operationId": "updatePassword", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePasswordRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "post": { + "tags": [ + "User Password APIs" + ], + "summary": "Set User Password", + "description": "Set a new Password for the User within Lowcoder, ensuring secure access to their account.", + "operationId": "setPassword", + "parameters": [ + { + "name": "password", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/users/newUserGuidanceShown": { + "put": { + "tags": [ + "User APIs" + ], + "summary": "Mark current user with help shown status", + "description": "Indicate that the current user has been shown help or guidance within Lowcoder, helping track user assistance efforts.", + "operationId": "newUserGuidanceShown", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/users/mark-status": { + "put": { + "tags": [ + "User APIs" + ], + "summary": "Mark current User with Status", + "description": "Mark the current User with a specific Status within Lowcoder, allowing for status tracking or updates.", + "operationId": "markUserStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MarkUserStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/users": { + "put": { + "tags": [ + "User APIs" + ], + "summary": "Update current User", + "description": "Enable the current User to update their Profile information within Lowcoder, ensuring accuracy and relevance.", + "operationId": "updateUser_1", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewUserProfileView" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/update": { + "put": { + "tags": [ + "Organization APIs" + ], + "summary": "Update Organization by ID", + "description": "Modify the properties and settings of an existing Organization within Lowcoder identified by its unique ID.", + "operationId": "updateOrganization", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrgRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/slug": { + "put": { + "tags": [ + "Organization APIs" + ], + "summary": "Update Organization URL Path Slug", + "description": "The slug is used to build a friendly reader URL for Apps. The Organization (workspace) get a part of this URL with an own slug.", + "operationId": "updateOrganizationSlug", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewOrganization" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/role": { + "put": { + "tags": [ + "Organization Member APIs" + ], + "summary": "Update role of Member in Organization", + "description": "Change the Role of a specific Member (User) within an Organization in Lowcoder using the unique ID of a user and the name of the existing Role.", + "operationId": "updateOrganizationMemberRole", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRoleRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/common-settings": { + "get": { + "tags": [ + "Organization APIs" + ], + "summary": "Get Organization common Settings", + "description": "Retrieve common settings (such as Themes and Auth Sources) and configurations for an Organization within Lowcoder using its unique ID.", + "operationId": "getOrganizationSettings", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewOrganizationCommonSettings" + } + } + } + } + } + }, + "put": { + "tags": [ + "Organization APIs" + ], + "summary": "Update Organization common Settings", + "description": "Modify common settings (such as Themes) and configurations for a Lowcoder Organization / Workspace.", + "operationId": "updateOrganizationSettings", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrgCommonSettingsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/organizations/switchOrganization/{orgId}": { + "put": { + "tags": [ + "Organization Member APIs" + ], + "summary": "Switch current users Organization", + "description": "Trigger a switch of the active Organization for the current User within Lowcoder in regards to the Session. After this switch, the impersonated user will see all resources from the new / selected Organization.", + "operationId": "switchOrganization", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/groups/{groupId}/update": { + "put": { + "tags": [ + "Group APIs" + ], + "summary": "Update User Group", + "description": "Modify the properties and settings of an existing User Group within Lowcoder, identified by the unique ID of a User Group.", + "operationId": "updateGroup", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateGroupRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/groups/{groupId}/role": { + "put": { + "tags": [ + "Group Members APIs" + ], + "summary": "Update User Group member role", + "description": "Modify the Role of a specific Member within a User Group in Lowcoder, ensuring proper access control.", + "operationId": "updateRoleForGroupMember", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRoleRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/datasources/{id}": { + "get": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get data source by ID", + "description": "Retrieve a specific data source within Lowcoder by its ID.", + "operationId": "getDatasource", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewDatasource_Public" + } + } + } + } + } + }, + "put": { + "tags": [ + "Data Source APIs" + ], + "summary": "Update data source by ID", + "description": "Modify the properties and settings of a data source within Lowcoder using its ID.", + "operationId": "updateDatasource", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertDatasourceRequest_Public" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewDatasource_Public" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Data Source APIs" + ], + "summary": "Delete data source by ID", + "description": "Permanently remove a data source within Lowcoder using its ID.", + "operationId": "deleteDatasource", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/datasources/{datasourceId}/permissions": { + "get": { + "tags": [ + "Data Source Permissions APIs" + ], + "summary": "Get data source permissions", + "description": "Retrieve permissions associated with a specific data source within Lowcoder, identified by its ID.", + "operationId": "listDatasourcePermissions", + "parameters": [ + { + "name": "datasourceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewCommonPermissionView" + } + } + } + } + } + }, + "put": { + "tags": [ + "Data Source Permissions APIs" + ], + "summary": "Update data source permission", + "description": "Modify a specific data source permission within Lowcoder, identified by its ID.", + "operationId": "updateDatasourcePermission", + "parameters": [ + { + "name": "datasourceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BatchAddPermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/datasources/permissions/{permissionId}": { + "put": { + "tags": [ + "Data Source Permissions APIs" + ], + "summary": "Grant permissions to data source", + "description": "Assign permissions for selected users or user-groups to a specific data source within Lowcoder, identified by its ID.", + "operationId": "grantDatasourcePermissions", + "parameters": [ + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Data Source Permissions APIs" + ], + "summary": "Revoke permission from data source", + "description": "Revoke a specific permission from a data source within Lowcoder, identified by its ID.", + "operationId": "revokeDatasourcePermission", + "parameters": [ + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/slug": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Update Application URL Path Slug", + "description": "The slug is used to build a friendly reader URL for Apps instead of the ID", + "operationId": "updateApplicationSlug", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplication" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/public-to-marketplace": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Set Application as publicly available on marketplace but to only logged in users", + "description": "Set a Lowcoder Application identified by its ID as publicly available on marketplace but to only logged in users.", + "operationId": "setApplicationAsPublicToMarketplace", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationPublicToMarketplaceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/public-to-all": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Set Application as publicly available", + "description": "Set a Lowcoder Application identified by its ID as generally publicly available. This is a preparation to published a Lowcoder Application in production mode.", + "operationId": "setApplicationAsPublic", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationPublicToAllRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/permissions/{permissionId}": { + "put": { + "tags": [ + "Application Permissions APIs" + ], + "summary": "Update Application permissions", + "description": "Update the permissions of a specific Lowcoder Application identified by its ID.", + "operationId": "updateApplicationPermissions", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Application Permissions APIs" + ], + "summary": "Revoke permissions from Application", + "description": "Revoke permissions of a specific Lowcoder Application identified by its ID.", + "operationId": "revokeApplicationPermissions", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/permissions": { + "get": { + "tags": [ + "Application Permissions APIs" + ], + "summary": "Get Application permissions", + "description": "Retrieve the permissions of a specific Lowcoder Application identified by its ID.", + "operationId": "listApplicationPermissions", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationPermissionView" + } + } + } + } + } + }, + "put": { + "tags": [ + "Application Permissions APIs" + ], + "summary": "Grant permissions to Application", + "description": "Grant new permissions to a specific Lowcoder Application identified by its ID.", + "operationId": "grantApplicationPermissions", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BatchAddPermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/agency-profile": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Set Application as agency profile", + "description": "Set a Lowcoder Application identified by its ID as as agency profile but to only logged in users.", + "operationId": "setApplicationAsAgencyProfile", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationAsAgencyProfileRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "Get Application data in edit mode", + "description": "Retrieve the DSL data of a Lowcoder Application in edit-mode by its ID.", + "operationId": "getApplicationDataInEditMode", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "withDeleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + }, + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Update Application by ID", + "description": "Update a Lowcoder Application identified by its ID.", + "operationId": "updateApplication", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "updateStatus", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Application" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Application APIs" + ], + "summary": "Delete Application by ID", + "description": "Permanently delete a Lowcoder Application identified by its ID.", + "operationId": "deleteApplication", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/applications/restore/{applicationId}": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Restore recycled Application", + "description": "Restore a previously recycled Lowcoder Application identified by its ID", + "operationId": "restoreRecycledApplication", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/recycle/{applicationId}": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Move Application to bin (do not delete)", + "description": "Move a Lowcoder Application identified by its ID to the recycle bin without permanent deletion.", + "operationId": "recycleApplication", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/applications/editState/{applicationId}": { + "put": { + "tags": [ + "Application APIs" + ], + "summary": "Update Application editing state", + "description": "Update the editing state of a specific Lowcoder Application identified by its ID.", + "operationId": "updateApplicationEditingState", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateEditStateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/library-queries/{libraryQueryId}": { + "get": { + "tags": [ + "Query Library APIs" + ], + "summary": "Get a Library By Id", + "description": "Get a Library Query by Id.", + "operationId": "getLibraryQuery", + "parameters": [ + { + "name": "libraryQueryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewLibraryQueryView" + } + } + } + } + } + }, + "put": { + "tags": [ + "Query Library APIs" + ], + "summary": "Update a Data Query Library", + "description": "Modify the properties and settings of an existing Library Query within Lowcoder identified by its unique ID.", + "operationId": "updateLibraryQuery", + "parameters": [ + { + "name": "libraryQueryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertLibraryQueryRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Query Library APIs" + ], + "summary": "Delete a Data Query Library", + "description": "Permanently remove a Library Query from Lowcoder using its unique ID.", + "operationId": "deleteLibraryQuery", + "parameters": [ + { + "name": "libraryQueryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/folders": { + "put": { + "tags": [ + "Folder APIs" + ], + "summary": "Update Folder", + "description": "Modify the properties and settings of an existing Application Folder within Lowcoder.", + "operationId": "updateFolder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewFolderInfoView" + } + } + } + } + } + }, + "post": { + "tags": [ + "Folder APIs" + ], + "summary": "Create new Folder", + "description": "Create a new Application Folder within the Lowcoder to organize Applications effectively.", + "operationId": "createFolder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewFolderInfoView" + } + } + } + } + } + } + }, + "/api/folders/{folderId}/permissions/{permissionId}": { + "put": { + "tags": [ + "Folder Permissions APIs" + ], + "summary": "Update Folder permissions", + "description": "Modify permissions associated with a specific Application Folder within Lowcoder.", + "operationId": "updateFolderPermissions", + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Folder Permissions APIs" + ], + "summary": "Revoke permissions from Folder", + "description": "Remove specific permissions from an Application Folder within Lowcoder, ensuring that selected Users or User-Groups no longer have access.", + "operationId": "revokeFolderPermissions", + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/folders/move/{id}": { + "put": { + "tags": [ + "Folder APIs" + ], + "summary": "Move Folder", + "description": "Relocate an Application Folder to a different location in the Folder hierarchy in Lowcoder using its unique ID.", + "operationId": "moveFolder", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "targetFolderId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/bundles": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Update Bundle", + "description": "Modify the properties and settings of an existing Bundle Bundle within Lowcoder.", + "operationId": "updateBundle", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Bundle" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundleInfoView" + } + } + } + } + } + }, + "post": { + "tags": [ + "Bundle APIs" + ], + "summary": "Create new Bundle", + "description": "Create a new Application Bundle within the Lowcoder to organize Applications effectively.", + "operationId": "createBundle", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBundleRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/reorder": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Reorder Bundle", + "description": "Reorder bundle.", + "operationId": "reorderBundle", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "elementIds", + "in": "query", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/public-to-marketplace": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Set Bundle as publicly available on marketplace but to only logged in users", + "description": "Set a Lowcoder Bundle identified by its ID as publicly available on marketplace but to only logged in users.", + "operationId": "setBundleAsPublicToMarketplace", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundlePublicToMarketplaceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/public-to-all": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Set Bundle as publicly available", + "description": "Set a Lowcoder Bundle identified by its ID as generally publicly available. This is a preparation to published a Lowcoder Bundle in production mode.", + "operationId": "setBundleAsPublic", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundlePublicToAllRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/permissions/{permissionId}": { + "put": { + "tags": [ + "Bundle Permissions APIs" + ], + "summary": "Update Bundle permissions", + "description": "Modify permissions associated with a specific Bundle Bundle within Lowcoder.", + "operationId": "updateBundlePermissions", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Bundle Permissions APIs" + ], + "summary": "Revoke permissions from Bundle", + "description": "Remove specific permissions from an Bundle Bundle within Lowcoder, ensuring that selected Users or User-Groups no longer have access.", + "operationId": "revokeBundlePermissions", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "permissionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/agency-profile": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Set Bundle as agency profile", + "description": "Set a Lowcoder Bundle identified by its ID as as agency profile but to only logged in users.", + "operationId": "setBundleAsAgencyProfile", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BundleAsAgencyProfileRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/bundles/restore/{bundleId}": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Restore recycled Bundle", + "description": "Restore a previously recycled Lowcoder Bundle identified by its ID", + "operationId": "restoreRecycledBundle", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/bundles/recycle/{bundleId}": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Move Bundle to bin (do not delete)", + "description": "Move a Lowcoder Bundle identified by its ID to the recycle bin without permanent deletion.", + "operationId": "recycleBundle", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/bundles/moveApp/{id}": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Move App to Bundle", + "description": "Relocate an application to a different bundle in Lowcoder using its unique ID.", + "operationId": "moveApp", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fromBundleId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "toBundleId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/bundles/addApp/{id}": { + "put": { + "tags": [ + "Bundle APIs" + ], + "summary": "Add App to Bundle", + "description": "Add an application to a bundle in Lowcoder using its unique ID.", + "operationId": "addApp", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "toBundleId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/users/reset-password": { + "post": { + "tags": [ + "User Password APIs" + ], + "summary": "Reset User Password", + "description": "Initiate a Password Reset process for the user within Lowcoder, allowing them to regain access to their account.", + "operationId": "resetPassword", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewString" + } + } + } + } + } + } + }, + "/api/users/reset-lost-password": { + "post": { + "tags": [ + "User Password APIs" + ], + "summary": "Reset Lost User Password", + "description": "Resets lost password based on the token from lost password email.", + "operationId": "resetLostPassword", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetLostPasswordRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/users/photo/{orgId}/{userId}": { + "post": { + "tags": [ + "User Profile Photo APIs" + ], + "summary": "Upload specific Users profile photo", + "description": "Upload or change specific profile photo within Lowcoder for personalization.", + "operationId": "uploadUserProfilePhotoById", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "file" + ], + "type": "object", + "properties": { + "file": { + "$ref": "#/components/schemas/Part" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "delete": { + "tags": [ + "User Profile Photo APIs" + ], + "summary": "Delete specific users profile photo", + "description": "Remove the profile Photo associated with the specific User within Lowcoder.", + "operationId": "deleteUserProfilePhotoById", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/users/photo": { + "get": { + "tags": [ + "User Profile Photo APIs" + ], + "summary": "Get current User profile photo", + "description": "Retrieve the profile photo of the current User within Lowcoder, if available.", + "operationId": "getUserProfilePhoto", + "responses": { + "200": { + "description": "OK" + } + } + }, + "post": { + "tags": [ + "User Profile Photo APIs" + ], + "summary": "Upload current Users profile photo", + "description": "Allow the current User to upload or change their profile photo within Lowcoder for personalization.", + "operationId": "uploadUserProfilePhoto", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "required": [ + "file" + ], + "type": "object", + "properties": { + "file": { + "$ref": "#/components/schemas/Part" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "delete": { + "tags": [ + "User Profile Photo APIs" + ], + "summary": "Delete current users profile photo", + "description": "Remove the profile Photo associated with the current User within Lowcoder.", + "operationId": "deleteUserProfilePhoto", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/users/new/{orgId}": { + "post": { + "tags": [ + "User APIs" + ], + "summary": "Create user and add to the org", + "description": "Create a new user and add to specified organization.", + "operationId": "createUserAndAddToOrg", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/users/lost-password": { + "post": { + "tags": [ + "User Password APIs" + ], + "summary": "Lost User Password", + "description": "Initiate a Lost Password recovery process.", + "operationId": "lostPassword", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LostPasswordRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/query/execute-from-node": { + "post": { + "tags": [ + "Query Execution APIs" + ], + "summary": "Execute query from node service", + "description": "Execute a data Query from a Node service within Lowcoder, facilitating data retrieval and processing. Node Service is used for extended Data Source Plugins.", + "operationId": "executeQueryFromNodeService", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryQueryRequestFromJs" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/QueryResultView" + } + } + } + } + } + } + }, + "/api/query/execute": { + "post": { + "tags": [ + "Query Execution APIs" + ], + "summary": "Execute query from API service", + "description": "Execute a data Query from an API service within Lowcoder, facilitating data retrieval and processing. API Service is used for standard Data Sources like Databases.", + "operationId": "executeQueryFromApiService", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryExecutionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/QueryResultView" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/logo": { + "post": { + "tags": [ + "Organization APIs" + ], + "summary": "Upload Organization Logo", + "description": "Upload an Organization logo for branding and identification for a Lowcoder Organization / Workspace.", + "operationId": "uploadOrganizationLogo", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "file" + ], + "type": "object", + "properties": { + "file": { + "$ref": "#/components/schemas/Part" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Organization APIs" + ], + "summary": "Delete Organization Logo", + "description": "Remove the logo associated with an Organization within Lowcoder.", + "operationId": "deleteOrganizationLogo", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/organizations": { + "post": { + "tags": [ + "Organization APIs" + ], + "summary": "Create a new Organization", + "description": "Create a new Organization (Workspace) within the Lowcoder platform as a encapsulated space for Applications, Users and Resources.", + "operationId": "createOrganization", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Organization" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewOrgView" + } + } + } + } + } + } + }, + "/api/meta/": { + "post": { + "tags": [ + "Meta APIs" + ], + "summary": "Get metadata by ids", + "description": "Get all metadatas by ids", + "operationId": "getMetaData", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMetaDataRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewMetaView" + } + } + } + } + } + } + }, + "/api/invitation/email/invite": { + "post": { + "tags": [ + "User invitation APIs" + ], + "summary": "Send invitation emails", + "description": "Send invitation emails to the specified addresses", + "operationId": "sendInvitationEmails", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InviteEmailRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/invitation": { + "post": { + "tags": [ + "User invitation APIs" + ], + "summary": "Create user Invitation", + "description": "Create a generic User-Invitation within Lowcoder to invite new users to join the platform. Internally an invite Link based on inviting User and it's current Organization / Workspace is built.", + "operationId": "createUserInvitation", + "parameters": [ + { + "name": "orgId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewInvitationVO" + } + } + } + } + } + } + }, + "/api/groups/{groupId}/addMember": { + "post": { + "tags": [ + "Group Members APIs" + ], + "summary": "Add User to User Group", + "description": "Include a User as a member of a specified User Group in Lowcoder, granting them access to group resources.", + "operationId": "addUserToGroup", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddMemberRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/groups": { + "post": { + "tags": [ + "Group APIs" + ], + "summary": "Create User Group", + "description": "Create a new User Group within the current Lowcoder Organization / Workspace for organizing and managing your Application users.", + "operationId": "createGroup", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateGroupRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewGroupView" + } + } + } + } + } + } + }, + "/api/datasources/test": { + "post": { + "tags": [ + "Data Source APIs" + ], + "summary": "Test data source", + "description": "Verify the functionality and connectivity of a data source within the Lowcoder platform, identified by its ID.", + "operationId": "testDatasource", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertDatasourceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/datasources/getPluginDynamicConfig": { + "post": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get data source dynamic config", + "description": "Get additional dynamic configuration parameter information of data source within Lowcoder.", + "operationId": "getDatasourceDynamicConfig", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GetPluginDynamicConfigRequestDTO" + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListObject" + } + } + } + } + } + } + }, + "/api/datasources": { + "post": { + "tags": [ + "Data Source APIs" + ], + "summary": "Create new data source", + "description": "Create a new data source in Lowcoder for data retrieval or storage.", + "operationId": "createDatasource", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertDatasourceRequest_Public" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewDatasource_Public" + } + } + } + } + } + } + }, + "/api/configs/{key}": { + "get": { + "tags": [ + "Configuration APIs" + ], + "summary": "Get Configuration for key", + "description": "Retrieve a specific Configuration entry within Lowcoder identified by its key and the current Organization / Workspace by the impersonated User.", + "operationId": "getConfigurationEntry", + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewServerConfig" + } + } + } + } + } + }, + "post": { + "tags": [ + "Configuration APIs" + ], + "summary": "Create Configuration entry", + "description": "Create a new Configuration entry within Lowcoder and the current Organization / Workspace by the impersonated User for managing various settings and configurations. (not available on public cloud)", + "operationId": "createConfigurationEntry", + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConfigRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewServerConfig" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/publish": { + "post": { + "tags": [ + "Application APIs" + ], + "summary": "Publish Application for users", + "description": "Set a Lowcoder Application identified by its ID as available to all selected Users or User-Groups. This is similar to the classic deployment. The Lowcoder Apps gets published in production mode.", + "operationId": "publicApplication", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationPublishRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/applications/createFromTemplate": { + "post": { + "tags": [ + "Application APIs" + ], + "summary": "Create an Application from a predefined Template", + "description": "Use an Application-Template to create a new Application in an Organization where the authenticated or impersonated user has access.", + "operationId": "createApplicationFromTemplate", + "parameters": [ + { + "name": "templateId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/applications": { + "post": { + "tags": [ + "Application APIs" + ], + "summary": "Create a new Application", + "description": "Create a new Lowcoder Application based on the Organization-ID where the authenticated or impersonated user has access.", + "operationId": " createApplication", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApplicationRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/materials": { + "post": { + "tags": [ + "File APIs" + ], + "summary": "Upload new File", + "description": "Upload a new binary File within Lowcoder and the current Organization / Workspace by the impersonated User, allowing users to add small files to their resources.", + "operationId": "createFileUpload", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadMaterialRequestDTO" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewMaterialView" + } + } + } + } + } + } + }, + "/api/library-queries": { + "post": { + "tags": [ + "Query Library APIs" + ], + "summary": "Create a Library for Data Queries", + "description": "Create a new Library Query within Lowcoder for storing and managing reusable Data Queries.", + "operationId": "createLibraryQuery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryQuery" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewLibraryQueryView" + } + } + } + } + } + } + }, + "/api/library-queries/{libraryQueryId}/publish": { + "post": { + "tags": [ + "Query Library APIs" + ], + "summary": "Publish a Data Query Library for usage", + "description": "Publish a Library Query for usage within Lowcoder, making it available for other users to utilize.", + "operationId": "publishLibraryQuery", + "parameters": [ + { + "name": "libraryQueryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LibraryQueryPublishRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewLibraryQueryRecordMetaView" + } + } + } + } + } + } + }, + "/api/folders/{folderId}/permissions": { + "get": { + "tags": [ + "Folder Permissions APIs" + ], + "summary": "Get Folder permissions", + "description": "Retrieve detailed information about permissions associated with a specific Application Folder within Lowcoder.", + "operationId": "listFolderPermissions", + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationPermissionView" + } + } + } + } + } + }, + "post": { + "tags": [ + "Folder Permissions APIs" + ], + "summary": "Grant permissions to Folder", + "description": "Assign new permissions to a specific Application Folder within Lowcoder, allowing authorized users to access it.", + "operationId": "grantFolderPermissions", + "parameters": [ + { + "name": "folderId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BatchAddPermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/publish": { + "post": { + "tags": [ + "Bundle APIs" + ], + "summary": "Publish Bundle for users", + "description": "Set a Lowcoder Bundle identified by its ID as available to all selected Users or User-Groups. This is similar to the classic deployment. The Lowcoder Bundle gets published in production mode.", + "operationId": "publicBundle", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/permissions": { + "get": { + "tags": [ + "Bundle Permissions APIs" + ], + "summary": "Get Bundle permissions", + "description": "Retrieve detailed information about permissions associated with a specific Bundle Bundle within Lowcoder.", + "operationId": "listBundlePermissions", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundlePermissionView" + } + } + } + } + } + }, + "post": { + "tags": [ + "Bundle Permissions APIs" + ], + "summary": "Grant permissions to Bundle", + "description": "Assign new permissions to a specific Bundle Bundle within Lowcoder, allowing authorized users to access it.", + "operationId": "grantBundlePermissions", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BatchAddPermissionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/auth/tp/login": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Login with third party", + "description": "Authenticate a Lowcoder User using third-party login credentials.", + "operationId": "loginWithThirdParty", + "parameters": [ + { + "name": "authId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "source", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "code", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "invitationId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "redirectUrl", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "orgId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/auth/tp/link": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Link current account with third party auth provider", + "description": "Authenticate a Lowcoder User using third-party login credentials and link to the existing session/account", + "operationId": "linkAccountWithTP", + "parameters": [ + { + "name": "authId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "source", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "code", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "redirectUrl", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "orgId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/auth/logout": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Logout from Lowcoder", + "description": "End a logged in Session of a Lowcoder User on the Lowcoder platform.", + "operationId": "logout", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/auth/form/login": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Login with user and password (Form based Login)", + "description": "Authenticate a Lowcoder User using traditional username and password credentials (Form Login).", + "operationId": "loginWithUserPassword", + "parameters": [ + { + "name": "invitationId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "orgId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FormLoginRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/auth/email/bind": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Bind current User to email", + "description": "Bind current user to email", + "operationId": "bindEmail", + "parameters": [ + { + "name": "email", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/auth/config": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Create authentication configuration", + "description": "Configure a new authentication method to enable Lowcoder Users to log in, for instance, through OAuth or other similar mechanisms, for the current selected Organization, based on the impersonated User", + "operationId": "createAuthConfig", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthConfigRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/auth/api-key": { + "post": { + "tags": [ + "Authentication APIs" + ], + "summary": "Create API key for current user", + "description": "Generate an Lowcoder API key. The API key will inherit all rights of the current impersonated user.", + "operationId": "createApiKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewAPIKeyVO" + } + } + } + } + } + } + }, + "/api/application/history-snapshots": { + "post": { + "tags": [ + "Application History APIs" + ], + "summary": "Create Application Snapshot", + "description": "Create a snapshot of an Application DSL within Lowcoder, capturing its current state for future reference.", + "operationId": "createApplicationSnapshot", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationHistorySnapshotRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/state/healthCheck": { + "head": { + "tags": [ + "Status checks APIs" + ], + "summary": "Run health check", + "description": "Perform a health check within Lowcoder to ensure the system's overall operational health and availability.", + "operationId": "healthCheck", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/users/userDetail/{id}": { + "get": { + "tags": [ + "User APIs" + ], + "summary": "Get User Details by ID", + "description": "Retrieve specific User Details within Lowcoder using their unique user ID.", + "operationId": "getUserDetails", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/users/photo/{userId}": { + "get": { + "tags": [ + "User Profile Photo APIs" + ], + "summary": "Upload users profile photo by ID", + "description": "Upload or change the profile photo of a specific User within Lowcoder using their user ID for identification.", + "operationId": "uploadUserProfilePhotoById_1", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/users/me": { + "get": { + "tags": [ + "User APIs" + ], + "summary": "Get current User Profile", + "description": "Retrieve the profile information of the current user within Lowcoder, including their identity, name, avatar, email, IP address, group memberships, and details of the current Organization / Workspace.", + "operationId": "getUserProfile", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/users/currentUser": { + "get": { + "tags": [ + "User APIs" + ], + "summary": "Get current User Information", + "description": "Retrieve comprehensive information about the current user within Lowcoder, including their ID, name, avatar URL, email, IP address and group memberships.", + "operationId": "getUserInfo", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewUserDetail" + } + } + } + } + } + } + }, + "/api/serverSettings": { + "get": { + "tags": [ + "Server Setting APIs" + ], + "summary": "Get Lowcoder server settings", + "description": "Retrieve the list of server settings for Lowcoder.", + "operationId": "serverSettings", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/members": { + "get": { + "tags": [ + "Organization Member APIs" + ], + "summary": "List Organization Members", + "description": "Retrieve a list of members belonging to an Organization within Lowcoder.", + "operationId": "listOrganizationMembers", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1000 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewOrgMemberListView" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/datasourceTypes": { + "get": { + "tags": [ + "Organization Member APIs" + ], + "summary": "Get supported data source types for Organization", + "description": "Retrieve a list of supported datasource types for an Organization within Lowcoder.", + "operationId": "getOrganizationDatasourceTypes", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListDatasourceMetaInfo" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/api-usage": { + "get": { + "tags": [ + "Organization APIs" + ], + "summary": "Get the api usage count for the org", + "description": "Calculate the used api calls for this organization and return the count", + "operationId": "getOrgApiUsageCount", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lastMonthOnly", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewLong" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}": { + "get": { + "tags": [ + "Organization APIs" + ], + "summary": "Get Organization by ID", + "description": "Retrieve details of a specific Organization within Lowcoder using its unique ID.", + "operationId": "getOrganization", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "withDeleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewOrganization" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Organization APIs" + ], + "summary": "Delete Organization by ID", + "description": "Permanently remove an Organization from Lowcoder using its unique ID.", + "operationId": "deleteOrganization_1", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/organizations/byuser/{email}": { + "get": { + "tags": [ + "Organization APIs" + ], + "summary": "Get a list of specified user's organization", + "description": "Get a list of specified user's organization", + "operationId": "getOrganizationByUser", + "parameters": [ + { + "name": "email", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject" + } + } + } + } + } + } + }, + "/api/invitation/{invitationId}/invite": { + "get": { + "tags": [ + "User invitation APIs" + ], + "summary": "Get Invitation", + "description": "Retrieve information about a specific Invitation within Lowcoder, including details about the Invitee and the connected Organization / Workspace.", + "operationId": "getInvitation", + "parameters": [ + { + "name": "invitationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/invitation/{invitationId}": { + "get": { + "tags": [ + "User invitation APIs" + ], + "summary": "Invite User", + "description": "Proceed the actual Invite for User to an Lowcoder Organization / Workspace using an existing Invitation identified by its ID.", + "operationId": "inviteUser", + "parameters": [ + { + "name": "invitationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewInvitationVO" + } + } + } + } + } + } + }, + "/api/groups/{groupId}/members": { + "get": { + "tags": [ + "Group Members APIs" + ], + "summary": "List User Group Members", + "description": "Retrieve a list of Users / Members within a specific User Group in Lowcoder, showing the group's composition.", + "operationId": "listGroupMembers", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 100 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewGroupMemberAggregateView" + } + } + } + } + } + } + }, + "/api/groups/list": { + "get": { + "tags": [ + "Group APIs" + ], + "summary": "List User Groups", + "description": "Retrieve a list of User Groups within Lowcoder, providing an overview of available groups, based on the access rights of the currently impersonated User.", + "operationId": "listGroups", + "parameters": [ + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/GroupListResponseViewListGroupView" + } + } + } + } + } + } + }, + "/api/datasources/{datasourceId}/structure": { + "get": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get data source structure", + "description": "Retrieve the structure and schema of a data source within Lowcoder, identified by its ID.", + "operationId": "getDatasourceStructure", + "parameters": [ + { + "name": "datasourceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "ignoreCache", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewDatasourceStructure" + } + } + } + } + } + } + }, + "/api/datasources/listByOrg": { + "get": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get data sources by Organization ID", + "description": "List data sources associated with a specific Organization-ID within Lowcoder.", + "operationId": "listDatasourcesByOrg", + "parameters": [ + { + "name": "orgId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject_Public" + } + } + } + } + } + } + }, + "/api/datasources/listByApp": { + "get": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get data sources by Application ID", + "description": "List data sources associated with a specific Application-ID within Lowcoder.", + "operationId": "listDatasourcesByApp", + "parameters": [ + { + "name": "appId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject_Public" + } + } + } + } + } + } + }, + "/api/datasources/jsDatasourcePlugins": { + "get": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get Node service plugins", + "description": "Retrieve a list of node service plugins available within Lowcoder.", + "operationId": "listNodeServicePlugins", + "parameters": [ + { + "name": "appId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject" + } + } + } + } + } + } + }, + "/api/datasources/info": { + "get": { + "tags": [ + "Data Source APIs" + ], + "summary": "Get data source information", + "description": "Obtain information related to a data source within Lowcoder.", + "operationId": "getDatasourceInfo", + "parameters": [ + { + "name": "datasourceId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewObject" + } + } + } + } + } + } + }, + "/api/configs/deploymentId": { + "get": { + "tags": [ + "Configuration APIs" + ], + "summary": "Get Lowcoder deployment ID", + "description": "Retrieve the unique deployment ID for Lowcoder. (not available on public cloud)", + "operationId": "getDeploymentId", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/configs": { + "get": { + "tags": [ + "Configuration APIs" + ], + "summary": "Get Configurations", + "description": "Retrieve a list of configuration entries within Lowcoder based on the current Organization / Workspace by the impersonated User, providing an overview of available configurations.", + "operationId": "listConfigs", + "parameters": [ + { + "name": "orgId", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewConfigView_Public" + } + } + } + } + } + } + }, + "/api/assets/{id}": { + "get": { + "tags": [ + "Image Assets APIs" + ], + "summary": "Retrieve Image Asset", + "description": "Retrieve an image asset within Lowcoder using its unique ID, which can be used for various purposes such as displaying images in applications.", + "operationId": "getAsset", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/applications/{applicationId}/view_marketplace": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "Get Marketplace Application data in view mode", + "description": "Retrieve the DSL data of a Lowcoder Application in view-mode by its ID for the Marketplace.", + "operationId": "getMarketplaceApplicationDataInViewMode", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/view_agency": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "Get Agency profile Application data in view mode", + "description": "Retrieve the DSL data of a Lowcoder Application in view-mode by its ID marked as Agency Profile.", + "operationId": "getAgencyProfileApplicationDataInViewMode", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/applications/{applicationId}/view": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "Get Application data in view mode", + "description": "Retrieve the DSL data of a Lowcoder Application in view-mode by its ID.", + "operationId": "getApplicatioDataInViewMode", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "withDeleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewApplicationView" + } + } + } + } + } + } + }, + "/api/applications/recycle/list": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "List recycled Applications in bin", + "description": "List all the recycled Lowcoder Applications in the recycle bin where the authenticated or impersonated user has access.", + "operationId": "listRecycledApplications", + "parameters": [ + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "category", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListApplicationInfoView" + } + } + } + } + } + } + }, + "/api/applications/marketplace-apps": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "List Marketplace Applications", + "description": "Retrieve a list of Lowcoder Applications that are published to the Marketplace", + "operationId": "listMarketplaceApplications", + "parameters": [ + { + "name": "applicationType", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListMarketplaceApplicationInfoView" + } + } + } + } + } + } + }, + "/api/applications/list": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "List Applications of current User", + "description": "Retrieve a list of Lowcoder Applications accessible by the authenticated or impersonated user.", + "operationId": "listApplications", + "parameters": [ + { + "name": "applicationType", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "applicationStatus", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + } + }, + { + "name": "withContainerSize", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "category", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListApplicationInfoView" + } + } + } + } + } + } + }, + "/api/applications/home": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "Get the homepage Application of current User", + "description": "Retrieve the first displayed Lowcoder Application for an authenticated or impersonated user.", + "operationId": "getUserHomepageApplication", + "parameters": [ + { + "name": "applicationType", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewUserHomepageView_Public" + } + } + } + } + } + } + }, + "/api/applications/agency-profiles": { + "get": { + "tags": [ + "Application APIs" + ], + "summary": "List agency profile Applications", + "description": "Retrieve a list of Lowcoder Applications that are set as agency profiles", + "operationId": "listAgencyProfileApplications", + "parameters": [ + { + "name": "applicationType", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListMarketplaceApplicationInfoView" + } + } + } + } + } + } + }, + "/api/npm/registry/{applicationId}/{*path}": { + "get": { + "tags": [ + "Private NPM registry APIs" + ], + "summary": "Get NPM registry Metadata", + "description": "Retrieve the metadata of private NPM registry package.", + "operationId": "getNpmPackageMeta", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + } + }, + "/api/npm/package/{applicationId}/{*path}": { + "get": { + "tags": [ + "Private NPM registry APIs" + ], + "summary": "Get NPM registry asset", + "description": "Retrieve the asset of private NPM registry package.", + "operationId": "getNpmPackageAsset", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "path", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + } + }, + "/api/misc/js-library/recommendations": { + "get": { + "tags": [ + "Javascript Library APIs" + ], + "summary": "Get Javascript Library recommendations", + "description": "Retrieve the standard list of JavaScript libraries within Lowcoder, as recommendation.", + "operationId": "getJsLibraryRecommendations", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListJsLibraryMeta" + } + } + } + } + } + } + }, + "/api/misc/js-library/metas": { + "get": { + "tags": [ + "Javascript Library APIs" + ], + "summary": "Get Javascript Library metadata", + "description": "Retrieve metadata information for JavaScript libraries within Lowcoder based on an Array as \"name\" parameter to name the desired libraries, providing details about available libraries.", + "operationId": "getJsLibraryMetadata", + "parameters": [ + { + "name": "name", + "in": "query", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListJsLibraryMeta" + } + } + } + } + } + } + }, + "/api/materials/{id}": { + "get": { + "tags": [ + "File APIs" + ], + "summary": "Download File contents", + "description": "Download the contents of a specific File within Lowcoder using its unique ID.", + "operationId": "downloadFile", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "download" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + }, + "delete": { + "tags": [ + "File APIs" + ], + "summary": "Delete uploaded File", + "description": "Permanently remove a specific File from Lowcoder using its unique ID.", + "operationId": "deleteFile", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/materials/list": { + "get": { + "tags": [ + "File APIs" + ], + "summary": "List uploaded Files", + "description": "Retrieve a list of uploaded Files within Lowcoder, providing an overview of available files.", + "operationId": "listFiles", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListMaterialView" + } + } + } + } + } + } + }, + "/api/library-query-records": { + "get": { + "tags": [ + "Library Queries Record APIs" + ], + "summary": "Get Library Query Records", + "description": "Retrieve a list of Library Query Records, which store information related to executed queries within Lowcoder and the current Organization / Workspace by the impersonated User", + "operationId": "listLibraryQueryRecords", + "parameters": [ + { + "name": "libraryQueryId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "libraryQueryRecordId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewMapStringObject" + } + } + } + } + } + } + }, + "/api/library-query-records/listByLibraryQueryId": { + "get": { + "tags": [ + "Library Queries Record APIs" + ], + "summary": "Get Library Query Record", + "description": "Retrieve a specific Library Query Record within Lowcoder using the associated library query ID.", + "operationId": "getLibraryQueryRecord", + "parameters": [ + { + "name": "libraryQueryId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 100 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject" + } + } + } + } + } + } + }, + "/api/library-queries/listByOrg": { + "get": { + "tags": [ + "Query Library APIs" + ], + "summary": "Get Data Query Libraries for organization", + "description": "Retrieve a list of Library Queries for a specific Organization within Lowcoder.", + "operationId": "listLibrartQueriesByOrg", + "parameters": [ + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 100 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject" + } + } + } + } + } + } + }, + "/api/library-queries/dropDownList": { + "get": { + "tags": [ + "Query Library APIs" + ], + "summary": "Get Data Query Libraries in dropdown format", + "description": "Retrieve Library Queries in a dropdown format within Lowcoder, suitable for selection in user interfaces.", + "operationId": "listLibraryQueriesForDropDown", + "parameters": [ + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListLibraryQueryAggregateView" + } + } + } + } + } + } + }, + "/api/folders/elements": { + "get": { + "tags": [ + "Folder APIs" + ], + "summary": "Get Folder contents", + "description": "Retrieve the contents of an Application Folder within Lowcoder, including Applications and Subfolders.", + "operationId": "listFolderContents", + "parameters": [ + { + "name": "id", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "applicationType", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ALL", + "APPLICATION", + "MODULE", + "NAV_LAYOUT", + "FOLDER", + "MOBILE_TAB_LAYOUT", + "NAVIGATION", + "BUNDLE" + ] + } + }, + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "category", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/view": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "Get Bundle data in view mode", + "description": "Retrieve the data of a Lowcoder Bundle in view-mode by its ID.", + "operationId": "getBundleDataInViewMode", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/view_marketplace": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "Get Marketplace Bundle data in view mode", + "description": "Retrieve the DSL data of a Lowcoder Bundle in view-mode by its ID for the Marketplace.", + "operationId": "getMarketplaceBundleDataInViewMode", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/view_agency": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "Get Agency profile Bundle data in view mode", + "description": "Retrieve the DSL data of a Lowcoder Bundle in view-mode by its ID marked as Agency Profile.", + "operationId": "getAgencyProfileBundleDataInViewMode", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/{bundleId}/elements": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "Get Bundle contents", + "description": "Retrieve the contents of an Bundle Bundle within Lowcoder, including Bundles.", + "operationId": "listBundleContents", + "parameters": [ + { + "name": "bundleId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "applicationType", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ALL", + "APPLICATION", + "MODULE", + "NAV_LAYOUT", + "FOLDER", + "MOBILE_TAB_LAYOUT", + "NAVIGATION", + "BUNDLE" + ] + } + }, + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PageResponseViewObject" + } + } + } + } + } + } + }, + "/api/bundles/recycle/list": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "List recycled Bundles in bin", + "description": "List all the recycled Lowcoder Bundles in the recycle bin where the authenticated or impersonated user has access.", + "operationId": "listRecycledBundles", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/marketplace-bundles": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "List Marketplace Bundles", + "description": "Retrieve a list of Lowcoder Bundles that are published to the Marketplace", + "operationId": "listMarketplaceBundles", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListMarketplaceBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/list": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "List Bundles of current User", + "description": "Retrieve a list of Lowcoder Bundles accessible by the authenticated or impersonated user.", + "operationId": "listBundles", + "parameters": [ + { + "name": "bundleStatus", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListBundleInfoView" + } + } + } + } + } + } + }, + "/api/bundles/agency-profiles": { + "get": { + "tags": [ + "Bundle APIs" + ], + "summary": "List agency profile Bundles", + "description": "Retrieve a list of Lowcoder Bundles that are set as agency profiles", + "operationId": "listAgencyProfileBundles", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListMarketplaceBundleInfoView" + } + } + } + } + } + } + }, + "/api/auth/configs": { + "get": { + "tags": [ + "Authentication APIs" + ], + "summary": "Get available authentication configurations", + "description": "Retrieve a list of all available authentication configurations for the current selected Organization, based on the impersonated User", + "operationId": "listAuthConfigs", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListAbstractAuthConfig_Internal" + } + } + } + } + } + } + }, + "/api/auth/api-keys": { + "get": { + "tags": [ + "Authentication APIs" + ], + "summary": "Get API keys of the current User", + "description": "Retrieve a list of LOwcoder API keys associated with the current impersonated user.", + "operationId": "listApiKeys", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListAPIKey" + } + } + } + } + } + } + }, + "/api/application/history-snapshots/{applicationId}": { + "get": { + "tags": [ + "Application History APIs" + ], + "summary": "List Application Snapshots", + "description": "Retrieve a list of Snapshots associated with a specific Application within Lowcoder.", + "operationId": "listApplicationSnapshots", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "compName", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "theme", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "from", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewMapStringObject" + } + } + } + } + } + } + }, + "/api/application/history-snapshots/{applicationId}/{snapshotId}": { + "get": { + "tags": [ + "Application History APIs" + ], + "summary": "Retrieve Application Snapshot", + "description": "Retrieve a specific Application Snapshot within Lowcoder using the Application and Snapshot IDs.", + "operationId": "getApplicationSnapshot", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "snapshotId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewHistorySnapshotDslView" + } + } + } + } + } + } + }, + "/api/application/history-snapshots/archive/{applicationId}": { + "get": { + "tags": [ + "Application History APIs" + ], + "summary": "List Archived Application Snapshots", + "description": "Retrieve a list of Archived Snapshots associated with a specific Application within Lowcoder.", + "operationId": "listApplicationSnapshotsArchived", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "compName", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "theme", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "from", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "to", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewMapStringObject" + } + } + } + } + } + } + }, + "/api/application/history-snapshots/archive/{applicationId}/{snapshotId}": { + "get": { + "tags": [ + "Application History APIs" + ], + "summary": "Retrieve Archived Application Snapshot", + "description": "Retrieve a specific Archived Application Snapshot within Lowcoder using the Application and Snapshot IDs.", + "operationId": "getApplicationSnapshotArchived", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "snapshotId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewHistorySnapshotDslView" + } + } + } + } + } + } + }, + "/api/application-records": { + "get": { + "tags": [ + "Application Record APIs" + ], + "summary": "Get Application Records", + "description": "Retrieve a list of Application Records, which store information related to executed queries within Lowcoder and the current Organization / Workspace by the impersonated User", + "operationId": "listApplicationRecords", + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "applicationRecordId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewMapStringObject" + } + } + } + } + } + } + }, + "/api/application-records/listByApplicationId": { + "get": { + "tags": [ + "Application Record APIs" + ], + "summary": "Get Application Record", + "description": "Retrieve a specific Application Record within Lowcoder using the associated application ID.", + "operationId": "getApplicationRecord", + "parameters": [ + { + "name": "applicationId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewListApplicationRecordMetaView" + } + } + } + } + } + } + }, + "/": { + "get": { + "tags": [ + "API Root Endpoint" + ], + "summary": "Get the hello world Message from Lowcoder API", + "description": "Retrieve the Hello World Message. If the API Service operates normal, the response is: {\"code\":1,\"message\":\"Lowcoder API is up and runnig\",\"success\":true}", + "operationId": "getHelloWorld", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/remove": { + "delete": { + "tags": [ + "Organization APIs" + ], + "summary": "Delete Organization by ID", + "description": "Permanently remove an User from an Organization in Lowcoder using its unique IDs.", + "operationId": "deleteOrganization", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/organizations/{orgId}/leave": { + "delete": { + "tags": [ + "Organization Member APIs" + ], + "summary": "Remove current user from Organization", + "description": "Allow the current user to voluntarily leave an Organization in Lowcoder, removing themselves from the organization's membership.", + "operationId": "leaveOrganization", + "parameters": [ + { + "name": "orgId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/groups/{groupId}/remove": { + "delete": { + "tags": [ + "Group Members APIs" + ], + "summary": "Remove a User from User Group", + "description": "Remove a specific User from a User Group within Lowcoder, revoking their access to the Group resources.", + "operationId": "removeUserFromGroup", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/groups/{groupId}/leave": { + "delete": { + "tags": [ + "Group Members APIs" + ], + "summary": "Remove current User from User Group", + "description": "Allow the current user to voluntarily leave a User Group in Lowcoder, removing themselves from the group's membership.", + "operationId": "leaveGroup", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/groups/{groupId}": { + "delete": { + "tags": [ + "Group APIs" + ], + "summary": "Delete User Group", + "description": "Permanently remove a User Group from Lowcoder using its unique ID.", + "operationId": "deleteGroup", + "parameters": [ + { + "name": "groupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewBoolean" + } + } + } + } + } + } + }, + "/api/library-query-records/{libraryQueryRecordId}": { + "delete": { + "tags": [ + "Library Queries Record APIs" + ], + "summary": "Delete Library Query Record", + "description": "Permanently remove a specific Library Query Record from Lowcoder using its unique record ID.", + "operationId": "deleteLibrartQueryRecord", + "parameters": [ + { + "name": "libraryQueryRecordId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/api/folders/{id}": { + "delete": { + "tags": [ + "Folder APIs" + ], + "summary": "Delete Folder", + "description": "Permanently remove an Application Folder from Lowcoder using its unique ID.", + "operationId": "deleteFolder", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/bundles/{id}": { + "delete": { + "tags": [ + "Bundle APIs" + ], + "summary": "Delete Bundle", + "description": "Permanently remove an Application Bundle from Lowcoder using its unique ID.", + "operationId": "deleteBundle", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/auth/config/{id}": { + "delete": { + "tags": [ + "Authentication APIs" + ], + "summary": "Delete authentication configuration", + "description": "Delete a specific Lowcoder authentication configuration.", + "operationId": "deleteAuthConfig", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "delete", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/auth/api-key/{id}": { + "delete": { + "tags": [ + "Authentication APIs" + ], + "summary": "Delete API key", + "description": "Delete a specific API key associated with the current impersonated user.", + "operationId": "deleteApiKey", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResponseViewVoid" + } + } + } + } + } + } + }, + "/api/application-records/{applicationRecordId}": { + "delete": { + "tags": [ + "Application Record APIs" + ], + "summary": "Delete Application Record", + "description": "Permanently remove a specific Application Record from Lowcoder using its unique record ID.", + "operationId": "deleteApplicationRecord", + "parameters": [ + { + "name": "applicationRecordId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + } + }, + "components": { + "schemas": { + "UpdateUserRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uiLanguage": { + "type": "string" + } + } + }, + "AbstractAuthConfig": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sourceName": { + "type": "string" + }, + "enable": { + "type": "boolean" + }, + "enableRegister": { + "type": "boolean" + }, + "authType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "authType" + } + }, + "Connection": { + "required": [ + "rawId", + "source" + ], + "type": "object", + "properties": { + "authId": { + "type": "string" + }, + "source": { + "type": "string" + }, + "rawId": { + "type": "string", + "writeOnly": true + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "authConnectionAuthToken": { + "$ref": "#/components/schemas/ConnectionAuthToken" + }, + "rawUserInfo": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "tokens": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ConnectionAuthToken": { + "type": "object", + "properties": { + "accessToken": { + "type": "string" + }, + "expireAt": { + "type": "integer", + "format": "int64" + }, + "refreshToken": { + "type": "string" + }, + "refreshTokenExpireAt": { + "type": "integer", + "format": "int64" + }, + "source": { + "type": "string", + "deprecated": true + }, + "accessTokenExpired": { + "type": "boolean" + }, + "refreshTokenExpired": { + "type": "boolean" + } + } + }, + "OrgAndVisitorRoleView": { + "type": "object", + "properties": { + "org": { + "$ref": "#/components/schemas/Organization" + }, + "role": { + "type": "string" + } + } + }, + "Organization": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "name": { + "type": "string" + }, + "isAutoGeneratedOrganization": { + "type": "boolean" + }, + "contactName": { + "type": "string" + }, + "contactEmail": { + "type": "string" + }, + "contactPhoneNumber": { + "type": "string" + }, + "isEmailDisabled": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "thirdPartyCompanyId": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ACTIVE", + "DELETED" + ] + }, + "organizationDomain": { + "$ref": "#/components/schemas/OrganizationDomain" + }, + "commonSettings": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "logoUrl": { + "type": "string" + }, + "authConfigs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AbstractAuthConfig" + } + } + } + }, + "OrganizationDomain": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "configs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AbstractAuthConfig" + } + } + } + }, + "ResponseViewUserProfileView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/UserProfileView" + }, + "success": { + "type": "boolean" + } + } + }, + "UserProfileView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "orgAndRoles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrgAndVisitorRoleView" + } + }, + "currentOrgId": { + "type": "string" + }, + "username": { + "type": "string" + }, + "connections": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/Connection" + } + }, + "uiLanguage": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "avatarUrl": { + "type": "string" + }, + "hasPassword": { + "type": "boolean" + }, + "hasSetNickname": { + "type": "boolean" + }, + "hasShownNewUserGuidance": { + "type": "boolean" + }, + "userStatus": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "createdTimeMs": { + "type": "integer", + "format": "int64" + }, + "ip": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "anonymous": { + "type": "boolean" + }, + "orgDev": { + "type": "boolean" + }, + "isAnonymous": { + "type": "boolean" + }, + "isEnabled": { + "type": "boolean" + } + } + }, + "UpdatePasswordRequest": { + "type": "object", + "properties": { + "oldPassword": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + } + }, + "ResponseViewBoolean": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "boolean" + }, + "success": { + "type": "boolean" + } + } + }, + "MarkUserStatusRequest": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "object" + } + } + }, + "UpdateOrgRequest": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "contactName": { + "type": "string" + }, + "contactEmail": { + "type": "string" + }, + "contactPhoneNumber": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ACTIVE", + "DELETED" + ] + } + } + }, + "ResponseViewOrganization": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/Organization" + }, + "success": { + "type": "boolean" + } + } + }, + "UpdateRoleRequest": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "UpdateOrgCommonSettingsRequest": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "object" + } + } + }, + "ResponseViewObject": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "object" + }, + "success": { + "type": "boolean" + } + } + }, + "UpdateGroupRequest": { + "type": "object", + "properties": { + "groupName": { + "type": "string" + }, + "dynamicRule": { + "type": "string" + } + } + }, + "UpsertDatasourceRequest_Public": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "NORMAL", + "DELETED" + ] + }, + "datasourceConfig": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "DatasourceConnectionConfig_Public": { + "type": "object" + }, + "Datasource_Public": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "creationSource": { + "type": "integer", + "format": "int32" + }, + "datasourceStatus": { + "type": "string", + "enum": [ + "NORMAL", + "DELETED" + ] + }, + "pluginDefinition": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "queryConfigDynamic": { + "type": "boolean" + }, + "datasourceConfigExtraDynamic": { + "type": "boolean" + }, + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "datasourceConfig": { + "$ref": "#/components/schemas/DatasourceConnectionConfig_Public" + } + } + }, + "ResponseViewDatasource_Public": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/Datasource_Public" + }, + "success": { + "type": "boolean" + } + } + }, + "BatchAddPermissionRequest": { + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "userIds": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "groupIds": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "UpdatePermissionRequest": { + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "resourceRole": { + "type": "string", + "enum": [ + "VIEWER", + "EDITOR", + "OWNER" + ] + } + } + }, + "Application": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "orgId": { + "type": "string", + "writeOnly": true + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "applicationType": { + "type": "integer", + "format": "int32" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + }, + "editingApplicationDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean", + "writeOnly": true + }, + "editingUserId": { + "type": "string" + }, + "lastEditedAt": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "editingQueries": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationQuery" + } + }, + "editingModules": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "editingApplicationDSLOrNull": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "ApplicationQuery": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "datasourceId": { + "type": "string", + "writeOnly": true + }, + "comp": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "writeOnly": true + }, + "triggerType": { + "type": "string" + }, + "timeout": { + "type": "string", + "writeOnly": true + }, + "compType": { + "type": "string", + "writeOnly": true + }, + "baseQuery": { + "$ref": "#/components/schemas/BaseQuery" + }, + "timeoutStr": { + "type": "string" + }, + "usingLibraryQuery": { + "type": "boolean" + }, + "libraryRecordQueryId": { + "$ref": "#/components/schemas/LibraryQueryCombineId" + } + } + }, + "BaseQuery": { + "type": "object", + "properties": { + "datasourceId": { + "type": "string" + }, + "compType": { + "type": "string" + }, + "comp": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "timeout": { + "type": "string" + } + } + }, + "LibraryQueryCombineId": { + "type": "object", + "properties": { + "libraryQueryId": { + "type": "string" + }, + "libraryQueryRecordId": { + "type": "string" + }, + "usingLiveRecord": { + "type": "boolean" + }, + "usingEditingRecord": { + "type": "boolean" + } + } + }, + "ResponseViewApplication": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/Application" + }, + "success": { + "type": "boolean" + } + } + }, + "ApplicationPublicToMarketplaceRequest": { + "type": "object", + "properties": { + "publicToMarketplace": { + "type": "boolean" + } + } + }, + "ApplicationPublicToAllRequest": { + "type": "object", + "properties": { + "publicToAll": { + "type": "boolean" + } + } + }, + "ApplicationAsAgencyProfileRequest": { + "type": "object", + "properties": { + "agencyProfile": { + "type": "boolean" + } + } + }, + "ApplicationInfoView": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "applicationId": { + "type": "string" + }, + "applicationGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "role": { + "type": "string" + }, + "applicationType": { + "type": "integer", + "format": "int32" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + }, + "containerSize": { + "type": "object" + }, + "folderId": { + "type": "string" + }, + "folderIdFrom": { + "type": "string" + }, + "lastViewTime": { + "type": "integer", + "format": "int64" + }, + "lastModifyTime": { + "type": "integer", + "format": "int64" + }, + "lastEditedAt": { + "type": "integer", + "format": "int64" + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean" + }, + "editingUserId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "published": { + "type": "boolean" + }, + "publishedVersion": { + "type": "string" + }, + "lastPublishedTime": { + "type": "string", + "format": "date-time" + }, + "folder": { + "type": "boolean" + } + } + }, + "ApplicationView": { + "type": "object", + "properties": { + "applicationInfoView": { + "$ref": "#/components/schemas/ApplicationInfoView" + }, + "applicationDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "moduleDSL": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "orgCommonSettings": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "templateId": { + "type": "string" + } + } + }, + "ResponseViewApplicationView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/ApplicationView" + }, + "success": { + "type": "boolean" + } + } + }, + "UpdateEditStateRequest": { + "type": "object", + "properties": { + "editingFinished": { + "type": "boolean" + } + } + }, + "UpsertLibraryQueryRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "libraryQueryDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "Folder": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "parentFolderId": { + "type": "string" + }, + "parentFolderGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "type": { + "type": "string" + }, + "image": { + "type": "string" + } + } + }, + "FolderInfoView": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "folderId": { + "type": "string" + }, + "folderGid": { + "type": "string" + }, + "parentFolderId": { + "type": "string" + }, + "parentFolderGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "type": { + "type": "string" + }, + "image": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "subFolders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FolderInfoView" + } + }, + "subApplications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationInfoView" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "lastViewTime": { + "type": "integer", + "format": "int64" + }, + "manageable": { + "type": "boolean" + }, + "visible": { + "type": "boolean" + }, + "folder": { + "type": "boolean" + } + } + }, + "ResponseViewFolderInfoView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/FolderInfoView" + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewVoid": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "object" + }, + "success": { + "type": "boolean" + } + } + }, + "Bundle": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "image": { + "type": "string" + }, + "bundleStatus": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean" + }, + "editingBundleDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "publishedBundleDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "BundleInfoView": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "bundleId": { + "type": "string" + }, + "bundleGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "image": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "folderId": { + "type": "string" + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean" + }, + "editingBundleDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "publishedBundleDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "manageable": { + "type": "boolean" + }, + "visible": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + } + } + }, + "ResponseViewBundleInfoView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/BundleInfoView" + }, + "success": { + "type": "boolean" + } + } + }, + "BundlePublicToMarketplaceRequest": { + "type": "object", + "properties": { + "publicToMarketplace": { + "type": "boolean" + } + } + }, + "BundlePublicToAllRequest": { + "type": "object", + "properties": { + "publicToAll": { + "type": "boolean" + } + } + }, + "BundleAsAgencyProfileRequest": { + "type": "object", + "properties": { + "agencyProfile": { + "type": "boolean" + } + } + }, + "ResetPasswordRequest": { + "type": "object", + "properties": { + "userId": { + "type": "string" + } + } + }, + "ResponseViewString": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "string" + }, + "success": { + "type": "boolean" + } + } + }, + "ResetLostPasswordRequest": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "userEmail": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + } + }, + "Part": { + "type": "object" + }, + "CreateUserRequest": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "LostPasswordRequest": { + "type": "object", + "properties": { + "userEmail": { + "type": "string" + } + } + }, + "LibraryQueryRequestFromJs": { + "type": "object", + "properties": { + "libraryQueryName": { + "type": "string" + }, + "libraryQueryRecordId": { + "type": "string" + }, + "params": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Param" + } + } + } + }, + "Param": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "object" + } + } + }, + "JsonNode": { + "type": "object" + }, + "QueryResultView": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "queryCode": { + "type": "string" + }, + "hintMessages": { + "type": "array", + "items": { + "type": "string" + } + }, + "success": { + "type": "boolean" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "headers": { + "$ref": "#/components/schemas/JsonNode" + }, + "data": { + "type": "object" + } + } + }, + "QueryExecutionRequest": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "queryId": { + "type": "string" + }, + "libraryQueryId": { + "type": "string", + "writeOnly": true + }, + "libraryQueryRecordId": { + "type": "string", + "writeOnly": true + }, + "params": { + "type": "array", + "writeOnly": true, + "items": { + "$ref": "#/components/schemas/Param" + } + }, + "viewMode": { + "type": "boolean" + }, + "path": { + "type": "array", + "items": { + "type": "string" + } + }, + "libraryQueryCombineId": { + "$ref": "#/components/schemas/LibraryQueryCombineId" + }, + "applicationQueryRequest": { + "type": "boolean" + } + } + }, + "OrgView": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "orgName": { + "type": "string" + } + } + }, + "ResponseViewOrgView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/OrgView" + }, + "success": { + "type": "boolean" + } + } + }, + "GetMetaDataRequest": { + "type": "object", + "properties": { + "appIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "orgIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "groupIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "bundleIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "datasourceIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "folderIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "libraryQueryIds": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ApplicationMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "icon": { + "type": "string" + } + } + }, + "BundleMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "DatasourceMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "FolderMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "GroupMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "LibraryQueryMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "MetaView": { + "type": "object", + "properties": { + "apps": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationMetaView" + } + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserMetaView" + } + }, + "orgs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrgMetaView" + } + }, + "folders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FolderMetaView" + } + }, + "datasources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DatasourceMetaView" + } + }, + "bundles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleMetaView" + } + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupMetaView" + } + }, + "queries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryQueryMetaView" + } + } + } + }, + "OrgMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "ResponseViewMetaView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/MetaView" + }, + "success": { + "type": "boolean" + } + } + }, + "UserMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "InviteEmailRequest": { + "type": "object", + "properties": { + "emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "orgId": { + "type": "string" + } + } + }, + "InvitationVO": { + "type": "object", + "properties": { + "inviteCode": { + "type": "string" + }, + "createUserName": { + "type": "string" + }, + "invitedOrganizationName": { + "type": "string" + }, + "invitedOrganizationId": { + "type": "string" + } + } + }, + "ResponseViewInvitationVO": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/InvitationVO" + }, + "success": { + "type": "boolean" + } + } + }, + "AddMemberRequest": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "CreateGroupRequest": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "dynamicRule": { + "type": "string" + } + } + }, + "GroupView": { + "type": "object", + "properties": { + "groupId": { + "type": "string" + }, + "groupGid": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "allUsersGroup": { + "type": "boolean" + }, + "visitorRole": { + "type": "string" + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "dynamicRule": { + "type": "string" + }, + "stats": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "syncDelete": { + "type": "boolean" + }, + "devGroup": { + "type": "boolean" + }, + "syncGroup": { + "type": "boolean" + } + } + }, + "ResponseViewGroupView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/GroupView" + }, + "success": { + "type": "boolean" + } + } + }, + "UpsertDatasourceRequest": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "NORMAL", + "DELETED" + ] + }, + "datasourceConfig": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "GetPluginDynamicConfigRequestDTO": { + "type": "object", + "properties": { + "dataSourceId": { + "type": "string" + }, + "pluginName": { + "type": "string" + }, + "path": { + "type": "string" + }, + "dataSourceConfig": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "ResponseViewListObject": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "type": "object" + } + }, + "success": { + "type": "boolean" + } + } + }, + "UpdateConfigRequest": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + }, + "ResponseViewServerConfig": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/ServerConfig" + }, + "success": { + "type": "boolean" + } + } + }, + "ServerConfig": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "type": "object" + } + } + }, + "ApplicationPublishRequest": { + "type": "object", + "properties": { + "commitMessage": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "CreateApplicationRequest": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "applicationType": { + "type": "integer", + "format": "int32" + }, + "editingApplicationDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "folderId": { + "type": "string" + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + } + } + }, + "UploadMaterialRequestDTO": { + "type": "object", + "properties": { + "filename": { + "type": "string" + }, + "content": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "COMMON", + "LOGO", + "FAVICON" + ] + } + } + }, + "MaterialView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "filename": { + "type": "string" + } + } + }, + "ResponseViewMaterialView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/MaterialView" + }, + "success": { + "type": "boolean" + } + } + }, + "LibraryQuery": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "libraryQueryDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "baseQuerySupplier": { + "type": "object" + }, + "query": { + "$ref": "#/components/schemas/BaseQuery" + } + } + }, + "LibraryQueryView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "libraryQueryDSL": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "creatorName": { + "type": "string" + } + } + }, + "ResponseViewLibraryQueryView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/LibraryQueryView" + }, + "success": { + "type": "boolean" + } + } + }, + "LibraryQueryPublishRequest": { + "type": "object", + "properties": { + "commitMessage": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "LibraryQueryRecordMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "libraryQueryId": { + "type": "string" + }, + "datasourceType": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "commitMessage": { + "type": "string" + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "creatorName": { + "type": "string" + } + } + }, + "ResponseViewLibraryQueryRecordMetaView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/LibraryQueryRecordMetaView" + }, + "success": { + "type": "boolean" + } + } + }, + "CreateBundleRequest": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "image": { + "type": "string" + }, + "folderId": { + "type": "string" + } + } + }, + "FormLoginRequest": { + "type": "object", + "properties": { + "loginId": { + "type": "string" + }, + "password": { + "type": "string" + }, + "register": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "authId": { + "type": "string" + } + } + }, + "AuthConfigRequest": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "sourceDescription": { + "type": "string" + }, + "sourceIcon": { + "type": "string" + }, + "sourceCategory": { + "type": "string" + }, + "sourceMappings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "issuerUri": { + "type": "string" + }, + "authorizationEndpoint": { + "type": "string" + }, + "tokenEndpoint": { + "type": "string" + }, + "userInfoEndpoint": { + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "authType": { + "type": "string" + }, + "enableRegister": { + "type": "boolean" + }, + "clientSecret": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "APIKeyRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "description": { + "type": "string" + }, + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "APIKeyVO": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "ResponseViewAPIKeyVO": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/APIKeyVO" + }, + "success": { + "type": "boolean" + } + } + }, + "ApplicationHistorySnapshotRequest": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "dsl": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "context": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "ResponseViewUserDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/UserDetail" + }, + "success": { + "type": "boolean" + } + } + }, + "UserDetail": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatarUrl": { + "type": "string" + }, + "uiLanguage": { + "type": "string" + }, + "email": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "extra": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "userAuth": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "OrgMemberListView": { + "type": "object", + "properties": { + "visitorRole": { + "type": "string" + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrgMemberView" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "pageNum": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "OrgMemberView": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "avatarUrl": { + "type": "string" + }, + "role": { + "type": "string" + }, + "joinTime": { + "type": "integer", + "format": "int64" + }, + "rawUserInfos": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + }, + "ResponseViewOrgMemberListView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/OrgMemberListView" + }, + "success": { + "type": "boolean" + } + } + }, + "DatasourceMetaInfo": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "hasStructureInfo": { + "type": "boolean" + }, + "definition": { + "type": "object" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "ResponseViewListDatasourceMetaInfo": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DatasourceMetaInfo" + } + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewOrganizationCommonSettings": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewLong": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "integer", + "format": "int64" + }, + "success": { + "type": "boolean" + } + } + }, + "PageResponseViewObject": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "type": "object" + } + }, + "pageNum": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + }, + "success": { + "type": "boolean" + } + } + }, + "GroupMemberAggregateView": { + "type": "object", + "properties": { + "visitorRole": { + "type": "string" + }, + "members": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupMemberView" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "pageNum": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + } + } + }, + "GroupMemberView": { + "type": "object", + "properties": { + "avatarUrl": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "orgId": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "joinTime": { + "type": "integer", + "format": "int64" + }, + "groupId": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "ResponseViewGroupMemberAggregateView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/GroupMemberAggregateView" + }, + "success": { + "type": "boolean" + } + } + }, + "GroupListResponseViewListGroupView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupView" + } + }, + "totalAdminsAndDevelopers": { + "type": "integer", + "format": "int32" + }, + "totalDevelopersOnly": { + "type": "integer", + "format": "int32" + }, + "totalAdmins": { + "type": "integer", + "format": "int32" + }, + "totalOtherMembers": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + }, + "pageNum": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "success": { + "type": "boolean" + } + } + }, + "Column": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "defaultValue": { + "type": "string" + }, + "isAutogenerated": { + "type": "boolean" + } + } + }, + "DatasourceStructure": { + "type": "object", + "properties": { + "tables": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Table" + } + } + } + }, + "Key": { + "type": "object", + "properties": { + "type": { + "type": "string" + } + } + }, + "ResponseViewDatasourceStructure": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/DatasourceStructure" + }, + "success": { + "type": "boolean" + } + } + }, + "Table": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "TABLE", + "VIEW", + "ALIAS", + "COLLECTION" + ] + }, + "schema": { + "type": "string" + }, + "name": { + "type": "string" + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Column" + } + }, + "keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Key" + } + } + } + }, + "CommonPermissionView": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "groupPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + }, + "userPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + }, + "creatorId": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + } + } + }, + "PermissionItemView": { + "type": "object", + "properties": { + "permissionId": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "USER", + "GROUP" + ] + }, + "id": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "ResponseViewCommonPermissionView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/CommonPermissionView" + }, + "success": { + "type": "boolean" + } + } + }, + "PageResponseViewObject_Public": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "type": "object" + } + }, + "pageNum": { + "type": "integer", + "format": "int32" + }, + "pageSize": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + }, + "success": { + "type": "boolean" + } + } + }, + "AbstractAuthConfig_Public": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sourceName": { + "type": "string" + }, + "enable": { + "type": "boolean" + }, + "enableRegister": { + "type": "boolean" + }, + "authType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "authType" + } + }, + "ConfigView_Public": { + "type": "object", + "properties": { + "authConfigs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AbstractAuthConfig_Public" + } + }, + "workspaceMode": { + "type": "string", + "enum": [ + "SAAS", + "ENTERPRISE" + ] + }, + "selfDomain": { + "type": "boolean" + }, + "cookieName": { + "type": "string" + }, + "cloudHosting": { + "type": "boolean" + } + } + }, + "ResponseViewConfigView_Public": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/ConfigView_Public" + }, + "success": { + "type": "boolean" + } + } + }, + "ApplicationPermissionView": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "groupPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + }, + "userPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + }, + "creatorId": { + "type": "string" + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + } + } + }, + "ResponseViewApplicationPermissionView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/ApplicationPermissionView" + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewListApplicationInfoView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationInfoView" + } + }, + "success": { + "type": "boolean" + } + } + }, + "MarketplaceApplicationInfoView": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "image": { + "type": "string" + }, + "orgId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "creatorEmail": { + "type": "string" + }, + "applicationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "applicationType": { + "type": "integer", + "format": "int32" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + } + } + }, + "ResponseViewListMarketplaceApplicationInfoView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MarketplaceApplicationInfoView" + } + }, + "success": { + "type": "boolean" + } + } + }, + "APIKey_Public": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "ApplicationInfoView_Public": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "applicationId": { + "type": "string" + }, + "applicationGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "role": { + "type": "string" + }, + "applicationType": { + "type": "integer", + "format": "int32" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + }, + "containerSize": { + "type": "object" + }, + "folderId": { + "type": "string" + }, + "folderIdFrom": { + "type": "string" + }, + "lastViewTime": { + "type": "integer", + "format": "int64" + }, + "lastModifyTime": { + "type": "integer", + "format": "int64" + }, + "lastEditedAt": { + "type": "integer", + "format": "int64" + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean" + }, + "editingUserId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "published": { + "type": "boolean" + }, + "publishedVersion": { + "type": "string" + }, + "lastPublishedTime": { + "type": "string", + "format": "date-time" + }, + "folder": { + "type": "boolean" + } + } + }, + "ConnectionAuthToken_Public": { + "type": "object", + "properties": { + "accessToken": { + "type": "string" + }, + "expireAt": { + "type": "integer", + "format": "int64" + }, + "refreshToken": { + "type": "string" + }, + "refreshTokenExpireAt": { + "type": "integer", + "format": "int64" + }, + "source": { + "type": "string", + "deprecated": true + }, + "accessTokenExpired": { + "type": "boolean" + }, + "refreshTokenExpired": { + "type": "boolean" + } + } + }, + "Connection_Public": { + "required": [ + "rawId", + "source" + ], + "type": "object", + "properties": { + "authId": { + "type": "string" + }, + "source": { + "type": "string" + }, + "rawId": { + "type": "string", + "writeOnly": true + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "authConnectionAuthToken": { + "$ref": "#/components/schemas/ConnectionAuthToken_Public" + }, + "rawUserInfo": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "tokens": { + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "FolderInfoView_Public": { + "type": "object", + "properties": { + "orgId": { + "type": "string" + }, + "folderId": { + "type": "string" + }, + "folderGid": { + "type": "string" + }, + "parentFolderId": { + "type": "string" + }, + "parentFolderGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "type": { + "type": "string" + }, + "image": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "subApplications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationInfoView_Public" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "lastViewTime": { + "type": "integer", + "format": "int64" + }, + "manageable": { + "type": "boolean" + }, + "visible": { + "type": "boolean" + }, + "folder": { + "type": "boolean" + } + } + }, + "OrganizationDomain_Public": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "configs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AbstractAuthConfig_Public" + } + } + } + }, + "Organization_Public": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "gid": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "name": { + "type": "string" + }, + "isAutoGeneratedOrganization": { + "type": "boolean" + }, + "contactName": { + "type": "string" + }, + "contactEmail": { + "type": "string" + }, + "contactPhoneNumber": { + "type": "string" + }, + "isEmailDisabled": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "thirdPartyCompanyId": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ACTIVE", + "DELETED" + ] + }, + "organizationDomain": { + "$ref": "#/components/schemas/OrganizationDomain_Public" + }, + "commonSettings": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "logoUrl": { + "type": "string" + }, + "authConfigs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AbstractAuthConfig_Public" + } + } + } + }, + "ResponseViewUserHomepageView_Public": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/UserHomepageView_Public" + }, + "success": { + "type": "boolean" + } + } + }, + "TransformedUserInfo_Public": { + "type": "object", + "properties": { + "updateTime": { + "type": "integer", + "format": "int64" + }, + "extra": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "UserHomepageView_Public": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/User_Public" + }, + "organization": { + "$ref": "#/components/schemas/Organization_Public" + }, + "folderInfoViews": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FolderInfoView_Public" + } + }, + "homeApplicationViews": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationInfoView_Public" + } + } + } + }, + "User_Public": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "uiLanguage": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "tpAvatarLink": { + "type": "string" + }, + "superAdmin": { + "type": "boolean" + }, + "state": { + "type": "string", + "enum": [ + "NEW", + "INVITED", + "ACTIVATED", + "DELETED" + ] + }, + "isEnabled": { + "type": "boolean" + }, + "activeAuthId": { + "type": "string" + }, + "password": { + "type": "string", + "writeOnly": true + }, + "passwordResetToken": { + "type": "string" + }, + "passwordResetTokenExpiry": { + "type": "string", + "format": "date-time" + }, + "isAnonymous": { + "type": "boolean" + }, + "connections": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/Connection_Public" + } + }, + "apiKeysList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIKey_Public" + } + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object" + } + }, + "hasSetNickname": { + "type": "boolean" + }, + "orgTransformedUserInfo": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + } + }, + "additionalProperties": { + "$ref": "#/components/schemas/TransformedUserInfo_Public" + } + } + } + }, + "JsLibraryMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "latestVersion": { + "type": "string" + }, + "homepage": { + "type": "string" + }, + "description": { + "type": "string" + }, + "downloadUrl": { + "type": "string" + } + } + }, + "ResponseViewListJsLibraryMeta": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JsLibraryMeta" + } + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewListMaterialView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MaterialView" + } + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewMapStringObject": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "success": { + "type": "boolean" + } + } + }, + "LibraryQueryAggregateView": { + "type": "object", + "properties": { + "libraryQueryMetaView": { + "$ref": "#/components/schemas/LibraryQueryMetaView" + }, + "recordMetaViewList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryQueryRecordMetaView" + } + } + } + }, + "ResponseViewListLibraryQueryAggregateView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryQueryAggregateView" + } + }, + "success": { + "type": "boolean" + } + } + }, + "BundlePermissionView": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "groupPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + }, + "userPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + }, + "creatorId": { + "type": "string" + }, + "publicToAll": { + "type": "boolean" + }, + "publicToMarketplace": { + "type": "boolean" + }, + "agencyProfile": { + "type": "boolean" + }, + "permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionItemView" + } + } + } + }, + "ResponseViewBundlePermissionView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/BundlePermissionView" + }, + "success": { + "type": "boolean" + } + } + }, + "ResponseViewListBundleInfoView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleInfoView" + } + }, + "success": { + "type": "boolean" + } + } + }, + "MarketplaceBundleInfoView": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string" + }, + "image": { + "type": "string" + }, + "orgId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "creatorEmail": { + "type": "string" + }, + "bundleId": { + "type": "string" + }, + "bundleGid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "createAt": { + "type": "integer", + "format": "int64" + }, + "createBy": { + "type": "string" + }, + "bundleStatus": { + "type": "string", + "enum": [ + "NORMAL", + "RECYCLED", + "DELETED" + ] + } + } + }, + "ResponseViewListMarketplaceBundleInfoView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MarketplaceBundleInfoView" + } + }, + "success": { + "type": "boolean" + } + } + }, + "AbstractAuthConfig_Internal": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sourceName": { + "type": "string" + }, + "enable": { + "type": "boolean" + }, + "enableRegister": { + "type": "boolean" + }, + "authType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "authType" + } + }, + "ResponseViewListAbstractAuthConfig_Internal": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AbstractAuthConfig_Internal" + } + }, + "success": { + "type": "boolean" + } + } + }, + "APIKey": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "ResponseViewListAPIKey": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIKey" + } + }, + "success": { + "type": "boolean" + } + } + }, + "HistorySnapshotDslView": { + "type": "object", + "properties": { + "applicationsDsl": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "moduleDSL": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + }, + "ResponseViewHistorySnapshotDslView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/HistorySnapshotDslView" + }, + "success": { + "type": "boolean" + } + } + }, + "ApplicationRecordMetaView": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "applicationId": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "commitMessage": { + "type": "string" + }, + "createTime": { + "type": "integer", + "format": "int64" + }, + "creatorName": { + "type": "string" + } + } + }, + "ResponseViewListApplicationRecordMetaView": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApplicationRecordMetaView" + } + }, + "success": { + "type": "boolean" + } + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "description": "JWT Authorization header using the Bearer scheme. Example: 'Authorization: Bearer {token}'" + } + } + } +} \ No newline at end of file diff --git a/server/node-service/src/plugins/n8n/index.ts b/server/node-service/src/plugins/n8n/index.ts index e71a9371da..5722edaddc 100644 --- a/server/node-service/src/plugins/n8n/index.ts +++ b/server/node-service/src/plugins/n8n/index.ts @@ -1,12 +1,17 @@ import { badRequest } from "common/error"; +import path from "path"; import { OpenAPIV3, OpenAPI } from "openapi-types"; import { ConfigToType, DataSourcePlugin } from "lowcoder-sdk/dataSource"; import { runOpenApi } from "../openApi"; import { defaultParseOpenApiOptions, parseOpenApi, ParseOpenApiOptions } from "../openApi/parse"; -import spec from "./spec.json"; -import { specsToOptions, version2spec } from "../../common/util"; +import { readYaml, specsToOptions, version2spec } from "../../common/util"; + +const spec_1_1_0 = readYaml(path.join(__dirname, "./openapi_1_1_0.yml")); +const spec_1_1_1 = readYaml(path.join(__dirname, "./openapi_1_1_1.yml")); + const specs = { - "v1.0": spec, + "v1.1.0": spec_1_1_0, + "v1.1.1": spec_1_1_1 } export function prepareServerUrl(url: string) { diff --git a/server/node-service/src/plugins/n8n/openapi_1_1_0.yml b/server/node-service/src/plugins/n8n/openapi_1_1_0.yml new file mode 100644 index 0000000000..d476667e4d --- /dev/null +++ b/server/node-service/src/plugins/n8n/openapi_1_1_0.yml @@ -0,0 +1,846 @@ +openapi: 3.0.0 +info: + title: n8n Public API + description: n8n Public API + termsOfService: https://n8n.io/legal/terms + contact: + email: hello@n8n.io + license: + name: Sustainable Use License + url: https://github.com/n8n-io/n8n/blob/master/packages/cli/LICENSE.md + version: 1.1.0 +externalDocs: + description: n8n API documentation + url: https://docs.n8n.io/api/ +servers: + - url: https://docs.n8n.io/api/v1 +tags: + - name: Audit + description: Operations about security audit + - name: Execution + description: Operations about executions + - name: Workflow + description: Operations about workflows + - name: Credential + description: Operations about credentials +paths: + /audit: + post: + x-eov-operation-id: generateAudit + x-eov-operation-handler: v1/handlers/audit/audit.handler + tags: + - Audit + summary: Generate an audit + description: Generate a security audit for your n8n instance. + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + additionalOptions: + type: object + properties: + daysAbandonedWorkflow: + type: integer + description: Days for a workflow to be considered abandoned if not executed + categories: + type: array + items: + type: string + enum: + - credentials + - database + - nodes + - filesystem + - instance + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Audit' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + description: Internal server error. + /credentials: + post: + x-eov-operation-id: createCredential + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Credential + summary: Create a credential + description: Creates a credential that can be used by nodes of the specified type. + requestBody: + description: Credential to be created. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Credential' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Credential' + '401': + $ref: '#/components/responses/Unauthorized' + '415': + description: Unsupported media type. + /credentials/{id}: + delete: + x-eov-operation-id: deleteCredential + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Credential + summary: Delete credential by ID + description: Deletes a credential from your instance. You must be the owner of the credentials + operationId: deleteCredential + parameters: + - name: id + in: path + description: The credential ID that needs to be deleted + required: true + schema: + type: string + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Credential' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + /credentials/schema/{credentialTypeName}: + get: + x-eov-operation-id: getCredentialType + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Credential + summary: Show credential data schema + parameters: + - name: credentialTypeName + in: path + description: The credential type name that you want to get the schema for + required: true + schema: + type: string + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + type: object + examples: + freshdeskApi: + value: + additionalProperties: false + type: object + properties: + apiKey: + type: string + domain: + type: string + required: + - apiKey + - domain + slackOAuth2Api: + value: + additionalProperties: false + type: object + properties: + clientId: + type: string + clientSecret: + type: string + required: + - clientId + - clientSecret + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + /executions: + get: + x-eov-operation-id: getExecutions + x-eov-operation-handler: v1/handlers/executions/executions.handler + tags: + - Execution + summary: Retrieve all executions + description: Retrieve all executions from your instance. + parameters: + - $ref: '#/components/parameters/IncludeData' + - name: status + in: query + description: Status to filter the executions by. + required: false + schema: + type: string + enum: + - error + - success + - waiting + - name: workflowId + in: query + description: Workflow to filter the executions by. + required: false + schema: + type: string + example: '1000' + - $ref: '#/components/parameters/Limit' + - $ref: '#/components/parameters/Cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ExecutionList' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + /executions/{id}: + get: + x-eov-operation-id: getExecution + x-eov-operation-handler: v1/handlers/executions/executions.handler + tags: + - Execution + summary: Retrieve an execution + description: Retrieve an execution from you instance. + parameters: + - $ref: '#/components/parameters/ExecutionId' + - $ref: '#/components/parameters/IncludeData' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Execution' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + delete: + x-eov-operation-id: deleteExecution + x-eov-operation-handler: v1/handlers/executions/executions.handler + tags: + - Execution + summary: Delete an execution + description: Deletes an execution from your instance. + parameters: + - $ref: '#/components/parameters/ExecutionId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Execution' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + /workflows: + post: + x-eov-operation-id: createWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Create a workflow + description: Create a workflow in your instance. + requestBody: + description: Created workflow object. + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + required: true + responses: + '200': + description: A workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + get: + x-eov-operation-id: getWorkflows + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Retrieve all workflows + description: Retrieve all workflows from your instance. + parameters: + - name: active + in: query + schema: + type: boolean + example: true + - name: tags + in: query + required: false + explode: false + allowReserved: true + schema: + type: string + example: test,production + - $ref: '#/components/parameters/Limit' + - $ref: '#/components/parameters/Cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowList' + '401': + $ref: '#/components/responses/Unauthorized' + /workflows/{id}: + get: + x-eov-operation-id: getWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Retrieves a workflow + description: Retrieves a workflow. + parameters: + - $ref: '#/components/parameters/WorkflowId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + delete: + x-eov-operation-id: deleteWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Delete a workflow + description: Deletes a workflow. + parameters: + - $ref: '#/components/parameters/WorkflowId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + put: + x-eov-operation-id: updateWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Update a workflow + description: Update a workflow. + parameters: + - $ref: '#/components/parameters/WorkflowId' + requestBody: + description: Updated workflow object. + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + required: true + responses: + '200': + description: Workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + /workflows/{id}/activate: + post: + x-eov-operation-id: activateWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Activate a workflow + description: Active a workflow. + parameters: + - $ref: '#/components/parameters/WorkflowId' + responses: + '200': + description: Workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + /workflows/{id}/deactivate: + post: + x-eov-operation-id: deactivateWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Deactivate a workflow + description: Deactivate a workflow. + parameters: + - $ref: '#/components/parameters/WorkflowId' + responses: + '200': + description: Workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/Workflow' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' +components: + schemas: + Error: + required: + - message + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + Execution: + type: object + properties: + id: + type: string + example: '1000' + data: + type: object + finished: + type: boolean + example: true + mode: + type: string + enum: + - cli + - error + - integrated + - internal + - manual + - retry + - trigger + - webhook + retryOf: + type: string + nullable: true + retrySuccessId: + type: string + nullable: true + example: '2' + startedAt: + type: string + format: date-time + stoppedAt: + type: string + format: date-time + workflowId: + type: string + example: '1000' + waitTill: + type: string + nullable: true + format: date-time + Node: + type: object + additionalProperties: false + properties: + id: + type: string + example: 0f5532f9-36ba-4bef-86c7-30d607400b15 + name: + type: string + example: Jira + webhookId: + type: string + disabled: + type: boolean + notesInFlow: + type: boolean + notes: + type: string + type: + type: string + example: n8n-nodes-base.Jira + typeVersion: + type: number + example: 1 + executeOnce: + type: boolean + example: false + alwaysOutputData: + type: boolean + example: false + retryOnFail: + type: boolean + example: false + maxTries: + type: number + waitBetweenTries: + type: number + continueOnFail: + type: boolean + example: false + position: + type: array + items: + type: number + example: + - -100 + - 80 + parameters: + type: object + example: + additionalProperties: {} + credentials: + type: object + example: + jiraSoftwareCloudApi: + id: '35' + name: jiraApi + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + Tag: + type: object + properties: + id: + type: string + example: '12' + name: + type: string + example: Production + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + Workflow: + type: object + additionalProperties: false + required: + - name + - nodes + - connections + - settings + properties: + id: + type: string + readOnly: true + example: '1' + name: + type: string + example: Workflow 1 + active: + type: boolean + readOnly: true + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + nodes: + type: array + items: + $ref: '#/components/schemas/Node' + connections: + type: object + example: + main: + - node: Jira + type: main + index: 0 + settings: + $ref: '#/components/schemas/WorkflowSettings' + staticData: + example: + lastId: 1 + nullable: true + anyOf: + - type: string + format: jsonString + nullable: true + - type: object + nullable: true + tags: + type: array + items: + $ref: '#/components/schemas/Tag' + readOnly: true + WorkflowSettings: + type: object + additionalProperties: false + properties: + saveExecutionProgress: + type: boolean + saveManualExecutions: + type: boolean + saveDataErrorExecution: + type: string + enum: + - all + - none + saveDataSuccessExecution: + type: string + enum: + - all + - none + executionTimeout: + type: number + example: 3600 + maxLength: 3600 + errorWorkflow: + type: string + example: '10' + description: The ID of the workflow that contains the error trigger node. + timezone: + type: string + example: America/New_York + ExecutionList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/Execution' + nextCursor: + type: string + description: Paginate through executions by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + WorkflowList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/Workflow' + nextCursor: + type: string + description: Paginate through workflows by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + Credential: + required: + - name + - type + - data + type: object + properties: + id: + type: string + readOnly: true + example: '42' + name: + type: string + example: Joe's Github Credentials + type: + type: string + example: github + data: + type: object + writeOnly: true + example: + token: ada612vad6fa5df4adf5a5dsf4389adsf76da7s + createdAt: + type: string + format: date-time + readOnly: true + example: '2022-04-29T11:02:29.842Z' + updatedAt: + type: string + format: date-time + readOnly: true + example: '2022-04-29T11:02:29.842Z' + CredentialType: + type: object + properties: + displayName: + type: string + readOnly: true + example: Email + name: + type: string + readOnly: true + example: email + type: + type: string + readOnly: true + example: string + default: + type: string + readOnly: true + example: string + Audit: + type: object + properties: + Credentials Risk Report: + type: object + example: + risk: credentials + sections: + - title: Credentials not used in any workflow + description: These credentials are not used in any workflow. Keeping unused credentials in your instance is an unneeded security risk. + recommendation: Consider deleting these credentials if you no longer need them. + location: + - kind: credential + id: '1' + name: My Test Account + Database Risk Report: + type: object + example: + risk: database + sections: + - title: Expressions in "Execute Query" fields in SQL nodes + description: This SQL node has an expression in the "Query" field of an "Execute Query" operation. Building a SQL query with an expression may lead to a SQL injection attack. + recommendation: Consider using the "Query Parameters" field to pass parameters to the query + or validating the input of the expression in the "Query" field.: null + location: + - kind: node + workflowId: '1' + workflowName: My Workflow + nodeId: 51eb5852-ce0b-4806-b4ff-e41322a4041a + nodeName: MySQL + nodeType: n8n-nodes-base.mySql + Filesystem Risk Report: + type: object + example: + risk: filesystem + sections: + - title: Nodes that interact with the filesystem + description: This node reads from and writes to any accessible file in the host filesystem. Sensitive file content may be manipulated through a node operation. + recommendation: Consider protecting any sensitive files in the host filesystem + or refactoring the workflow so that it does not require host filesystem interaction.: null + location: + - kind: node + workflowId: '1' + workflowName: My Workflow + nodeId: 51eb5852-ce0b-4806-b4ff-e41322a4041a + nodeName: Ready Binary file + nodeType: n8n-nodes-base.readBinaryFile + Nodes Risk Report: + type: object + example: + risk: nodes + sections: + - title: Community nodes + description: This node is sourced from the community. Community nodes are not vetted by the n8n team and have full access to the host system. + recommendation: Consider reviewing the source code in any community nodes installed in this n8n instance + and uninstalling any community nodes no longer used.: null + location: + - kind: community + nodeType: n8n-nodes-test.test + packageUrl: https://www.npmjs.com/package/n8n-nodes-test + Instance Risk Report: + type: object + example: + risk: execution + sections: + - title: Unprotected webhooks in instance + description: These webhook nodes have the "Authentication" field set to "None" and are not directly connected to a node to validate the payload. Every unprotected webhook allows your workflow to be called by any third party who knows the webhook URL. + recommendation: Consider setting the "Authentication" field to an option other than "None" + or validating the payload with one of the following nodes.: null + location: + - kind: community + nodeType: n8n-nodes-test.test + packageUrl: https://www.npmjs.com/package/n8n-nodes-test + responses: + NotFound: + description: The specified resource was not found. + Unauthorized: + description: Unauthorized + BadRequest: + description: The request is invalid or provides malformed data. + parameters: + Cursor: + name: cursor + in: query + description: Paginate through users by setting the cursor parameter to a nextCursor attribute returned by a previous request's response. Default value fetches the first "page" of the collection. See pagination for more detail. + required: false + style: form + schema: + type: string + Limit: + name: limit + in: query + description: The maximum number of items to return. + required: false + schema: + type: number + example: 100 + default: 100 + maximum: 250 + ExecutionId: + name: id + in: path + description: The ID of the execution. + required: true + schema: + type: string + WorkflowId: + name: id + in: path + description: The ID of the workflow. + required: true + schema: + type: string + IncludeData: + name: includeData + in: query + description: Whether or not to include the execution's detailed data. + required: false + schema: + type: boolean + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: X-N8N-API-KEY +security: + - ApiKeyAuth: [] diff --git a/server/node-service/src/plugins/n8n/openapi_1_1_1.yml b/server/node-service/src/plugins/n8n/openapi_1_1_1.yml new file mode 100644 index 0000000000..d3c3e10e25 --- /dev/null +++ b/server/node-service/src/plugins/n8n/openapi_1_1_1.yml @@ -0,0 +1,1861 @@ +openapi: 3.0.0 +info: + title: n8n Public API + description: n8n Public API + termsOfService: https://n8n.io/legal/terms + contact: + email: hello@n8n.io + license: + name: Sustainable Use License + url: https://github.com/n8n-io/n8n/blob/master/LICENSE.md + version: 1.1.1 +servers: + - url: /api/v1 +security: + - ApiKeyAuth: [] +tags: + - name: User + description: Operations about users + - name: Audit + description: Operations about security audit + - name: Execution + description: Operations about executions + - name: Workflow + description: Operations about workflows + - name: Credential + description: Operations about credentials + - name: Tags + description: Operations about tags + - name: SourceControl + description: Operations about source control + - name: Variables + description: Operations about variables + - name: Projects + description: Operations about projects +externalDocs: + description: n8n API documentation + url: https://docs.n8n.io/api/ +paths: + /audit: + post: + x-eov-operation-id: generateAudit + x-eov-operation-handler: v1/handlers/audit/audit.handler + tags: + - Audit + summary: Generate an audit + description: Generate a security audit for your n8n instance. + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + additionalOptions: + type: object + properties: + daysAbandonedWorkflow: + type: integer + description: Days for a workflow to be considered abandoned if not executed + categories: + type: array + items: + type: string + enum: + - credentials + - database + - nodes + - filesystem + - instance + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/audit' + '401': + $ref: '#/components/responses/unauthorized' + '500': + description: Internal server error. + /credentials: + post: + x-eov-operation-id: createCredential + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Credential + summary: Create a credential + description: Creates a credential that can be used by nodes of the specified type. + requestBody: + description: Credential to be created. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/credential' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/create-credential-response' + '401': + $ref: '#/components/responses/unauthorized' + '415': + description: Unsupported media type. + /credentials/{id}: + delete: + x-eov-operation-id: deleteCredential + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Credential + summary: Delete credential by ID + description: Deletes a credential from your instance. You must be the owner of the credentials + operationId: deleteCredential + parameters: + - name: id + in: path + description: The credential ID that needs to be deleted + required: true + schema: + type: string + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/credential' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /credentials/schema/{credentialTypeName}: + get: + x-eov-operation-id: getCredentialType + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Credential + summary: Show credential data schema + parameters: + - name: credentialTypeName + in: path + description: The credential type name that you want to get the schema for + required: true + schema: + type: string + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + type: object + examples: + freshdeskApi: + value: + additionalProperties: false + type: object + properties: + apiKey: + type: string + domain: + type: string + required: + - apiKey + - domain + slackOAuth2Api: + value: + additionalProperties: false + type: object + properties: + clientId: + type: string + clientSecret: + type: string + required: + - clientId + - clientSecret + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /executions: + get: + x-eov-operation-id: getExecutions + x-eov-operation-handler: v1/handlers/executions/executions.handler + tags: + - Execution + summary: Retrieve all executions + description: Retrieve all executions from your instance. + parameters: + - $ref: '#/components/parameters/includeData' + - name: status + in: query + description: Status to filter the executions by. + required: false + schema: + type: string + enum: + - error + - success + - waiting + - name: workflowId + in: query + description: Workflow to filter the executions by. + required: false + schema: + type: string + example: '1000' + - name: projectId + in: query + required: false + explode: false + allowReserved: true + schema: + type: string + example: VmwOO9HeTEj20kxM + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/executionList' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /executions/{id}: + get: + x-eov-operation-id: getExecution + x-eov-operation-handler: v1/handlers/executions/executions.handler + tags: + - Execution + summary: Retrieve an execution + description: Retrieve an execution from your instance. + parameters: + - $ref: '#/components/parameters/executionId' + - $ref: '#/components/parameters/includeData' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/execution' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + delete: + x-eov-operation-id: deleteExecution + x-eov-operation-handler: v1/handlers/executions/executions.handler + tags: + - Execution + summary: Delete an execution + description: Deletes an execution from your instance. + parameters: + - $ref: '#/components/parameters/executionId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/execution' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /tags: + post: + x-eov-operation-id: createTag + x-eov-operation-handler: v1/handlers/tags/tags.handler + tags: + - Tags + summary: Create a tag + description: Create a tag in your instance. + requestBody: + description: Created tag object. + content: + application/json: + schema: + $ref: '#/components/schemas/tag' + required: true + responses: + '201': + description: A tag object + content: + application/json: + schema: + $ref: '#/components/schemas/tag' + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '409': + $ref: '#/components/responses/conflict' + get: + x-eov-operation-id: getTags + x-eov-operation-handler: v1/handlers/tags/tags.handler + tags: + - Tags + summary: Retrieve all tags + description: Retrieve all tags from your instance. + parameters: + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/tagList' + '401': + $ref: '#/components/responses/unauthorized' + /tags/{id}: + get: + x-eov-operation-id: getTag + x-eov-operation-handler: v1/handlers/tags/tags.handler + tags: + - Tags + summary: Retrieves a tag + description: Retrieves a tag. + parameters: + - $ref: '#/components/parameters/tagId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/tag' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + delete: + x-eov-operation-id: deleteTag + x-eov-operation-handler: v1/handlers/tags/tags.handler + tags: + - Tags + summary: Delete a tag + description: Deletes a tag. + parameters: + - $ref: '#/components/parameters/tagId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/tag' + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + '404': + $ref: '#/components/responses/notFound' + put: + x-eov-operation-id: updateTag + x-eov-operation-handler: v1/handlers/tags/tags.handler + tags: + - Tags + summary: Update a tag + description: Update a tag. + parameters: + - $ref: '#/components/parameters/tagId' + requestBody: + description: Updated tag object. + content: + application/json: + schema: + $ref: '#/components/schemas/tag' + required: true + responses: + '200': + description: Tag object + content: + application/json: + schema: + $ref: '#/components/schemas/tag' + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + '409': + $ref: '#/components/responses/conflict' + /workflows: + post: + x-eov-operation-id: createWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Create a workflow + description: Create a workflow in your instance. + requestBody: + description: Created workflow object. + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + required: true + responses: + '200': + description: A workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + get: + x-eov-operation-id: getWorkflows + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Retrieve all workflows + description: Retrieve all workflows from your instance. + parameters: + - name: active + in: query + schema: + type: boolean + example: true + - name: tags + in: query + required: false + explode: false + allowReserved: true + schema: + type: string + example: test,production + - name: name + in: query + required: false + explode: false + allowReserved: true + schema: + type: string + example: My Workflow + - name: projectId + in: query + required: false + explode: false + allowReserved: true + schema: + type: string + example: VmwOO9HeTEj20kxM + - name: excludePinnedData + in: query + required: false + description: Set this to avoid retrieving pinned data + schema: + type: boolean + example: true + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/workflowList' + '401': + $ref: '#/components/responses/unauthorized' + /workflows/{id}: + get: + x-eov-operation-id: getWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Retrieves a workflow + description: Retrieves a workflow. + parameters: + - name: excludePinnedData + in: query + required: false + description: Set this to avoid retrieving pinned data + schema: + type: boolean + example: true + - $ref: '#/components/parameters/workflowId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + delete: + x-eov-operation-id: deleteWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Delete a workflow + description: Deletes a workflow. + parameters: + - $ref: '#/components/parameters/workflowId' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + put: + x-eov-operation-id: updateWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Update a workflow + description: Update a workflow. + parameters: + - $ref: '#/components/parameters/workflowId' + requestBody: + description: Updated workflow object. + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + required: true + responses: + '200': + description: Workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /workflows/{id}/activate: + post: + x-eov-operation-id: activateWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Activate a workflow + description: Active a workflow. + parameters: + - $ref: '#/components/parameters/workflowId' + responses: + '200': + description: Workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /workflows/{id}/deactivate: + post: + x-eov-operation-id: deactivateWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Deactivate a workflow + description: Deactivate a workflow. + parameters: + - $ref: '#/components/parameters/workflowId' + responses: + '200': + description: Workflow object + content: + application/json: + schema: + $ref: '#/components/schemas/workflow' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /workflows/{id}/transfer: + put: + x-eov-operation-id: transferWorkflow + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Transfer a workflow to another project. + description: Transfer a workflow to another project. + parameters: + - $ref: '#/components/parameters/workflowId' + requestBody: + description: Destination project information for the workflow transfer. + content: + application/json: + schema: + type: object + properties: + destinationProjectId: + type: string + description: The ID of the project to transfer the workflow to. + required: + - destinationProjectId + required: true + responses: + '200': + description: Operation successful. + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /credentials/{id}/transfer: + put: + x-eov-operation-id: transferCredential + x-eov-operation-handler: v1/handlers/credentials/credentials.handler + tags: + - Workflow + summary: Transfer a credential to another project. + description: Transfer a credential to another project. + parameters: + - $ref: '#/components/parameters/credentialId' + requestBody: + description: Destination project for the credential transfer. + content: + application/json: + schema: + type: object + properties: + destinationProjectId: + type: string + description: The ID of the project to transfer the credential to. + required: + - destinationProjectId + required: true + responses: + '200': + description: Operation successful. + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /workflows/{id}/tags: + get: + x-eov-operation-id: getWorkflowTags + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Get workflow tags + description: Get workflow tags. + parameters: + - $ref: '#/components/parameters/workflowId' + responses: + '200': + description: List of tags + content: + application/json: + schema: + $ref: '#/components/schemas/workflowTags' + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + put: + x-eov-operation-id: updateWorkflowTags + x-eov-operation-handler: v1/handlers/workflows/workflows.handler + tags: + - Workflow + summary: Update tags of a workflow + description: Update tags of a workflow. + parameters: + - $ref: '#/components/parameters/workflowId' + requestBody: + description: List of tags + content: + application/json: + schema: + $ref: '#/components/schemas/tagIds' + required: true + responses: + '200': + description: List of tags after add the tag + content: + application/json: + schema: + $ref: '#/components/schemas/workflowTags' + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + /users: + get: + x-eov-operation-id: getUsers + x-eov-operation-handler: v1/handlers/users/users.handler.ee + tags: + - User + summary: Retrieve all users + description: Retrieve all users from your instance. Only available for the instance owner. + parameters: + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/cursor' + - $ref: '#/components/parameters/includeRole' + - name: projectId + in: query + required: false + explode: false + allowReserved: true + schema: + type: string + example: VmwOO9HeTEj20kxM + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/userList' + '401': + $ref: '#/components/responses/unauthorized' + post: + x-eov-operation-id: createUser + x-eov-operation-handler: v1/handlers/users/users.handler.ee + tags: + - User + summary: Create multiple users + description: Create one or more users. + requestBody: + description: Array of users to be created. + required: true + content: + application/json: + schema: + type: array + items: + type: object + properties: + email: + type: string + format: email + role: + type: string + enum: + - global:admin + - global:member + required: + - email + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + type: object + properties: + user: + type: object + properties: + id: + type: string + email: + type: string + inviteAcceptUrl: + type: string + emailSent: + type: boolean + error: + type: string + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + /users/{id}: + get: + x-eov-operation-id: getUser + x-eov-operation-handler: v1/handlers/users/users.handler.ee + tags: + - User + summary: Get user by ID/Email + description: Retrieve a user from your instance. Only available for the instance owner. + parameters: + - $ref: '#/components/parameters/userIdentifier' + - $ref: '#/components/parameters/includeRole' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/user' + '401': + $ref: '#/components/responses/unauthorized' + delete: + x-eov-operation-id: deleteUser + x-eov-operation-handler: v1/handlers/users/users.handler.ee + tags: + - User + summary: Delete a user + description: Delete a user from your instance. + parameters: + - $ref: '#/components/parameters/userIdentifier' + responses: + '204': + description: Operation successful. + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + '404': + $ref: '#/components/responses/notFound' + /users/{id}/role: + patch: + x-eov-operation-id: changeRole + x-eov-operation-handler: v1/handlers/users/users.handler.ee + tags: + - User + summary: Change a user's global role + description: Change a user's global role + parameters: + - $ref: '#/components/parameters/userIdentifier' + requestBody: + description: New role for the user + required: true + content: + application/json: + schema: + type: object + properties: + newRoleName: + type: string + enum: + - global:admin + - global:member + required: + - newRoleName + responses: + '200': + description: Operation successful. + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + '404': + $ref: '#/components/responses/notFound' + /source-control/pull: + post: + x-eov-operation-id: pull + x-eov-operation-handler: v1/handlers/source-control/source-control.handler + tags: + - SourceControl + summary: Pull changes from the remote repository + description: Requires the Source Control feature to be licensed and connected to a repository. + requestBody: + description: Pull options + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/pull' + responses: + '200': + description: Import result + content: + application/json: + schema: + $ref: '#/components/schemas/importResult' + '400': + $ref: '#/components/responses/badRequest' + '409': + $ref: '#/components/responses/conflict' + /variables: + post: + x-eov-operation-id: createVariable + x-eov-operation-handler: v1/handlers/variables/variables.handler + tags: + - Variables + summary: Create a variable + description: Create a variable in your instance. + requestBody: + description: Payload for variable to create. + content: + application/json: + schema: + $ref: '#/components/schemas/variable' + required: true + responses: + '201': + description: Operation successful. + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + get: + x-eov-operation-id: getVariables + x-eov-operation-handler: v1/handlers/variables/variables.handler + tags: + - Variables + summary: Retrieve variables + description: Retrieve variables from your instance. + parameters: + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/variableList' + '401': + $ref: '#/components/responses/unauthorized' + /variables/{id}: + delete: + x-eov-operation-id: deleteVariable + x-eov-operation-handler: v1/handlers/variables/variables.handler + tags: + - Variables + summary: Delete a variable + description: Delete a variable from your instance. + parameters: + - $ref: '#/components/parameters/variableId' + responses: + '204': + description: Operation successful. + '401': + $ref: '#/components/responses/unauthorized' + '404': + $ref: '#/components/responses/notFound' + put: + x-eov-operation-id: updateVariable + x-eov-operation-handler: v1/handlers/variables/variables.handler + tags: + - Variables + summary: Update a variable + description: Update a variable from your instance. + parameters: + - $ref: '#/components/parameters/variableId' + requestBody: + description: Updated variable object. + content: + application/json: + schema: + $ref: '#/components/schemas/variable' + required: true + responses: + '204': + description: Operation successful. + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + '404': + $ref: '#/components/responses/notFound' + /projects: + post: + x-eov-operation-id: createProject + x-eov-operation-handler: v1/handlers/projects/projects.handler + tags: + - Projects + summary: Create a project + description: Create a project in your instance. + requestBody: + description: Payload for project to create. + content: + application/json: + schema: + $ref: '#/components/schemas/project' + required: true + responses: + '201': + description: Operation successful. + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + get: + x-eov-operation-id: getProjects + x-eov-operation-handler: v1/handlers/projects/projects.handler + tags: + - Projects + summary: Retrieve projects + description: Retrieve projects from your instance. + parameters: + - $ref: '#/components/parameters/limit' + - $ref: '#/components/parameters/cursor' + responses: + '200': + description: Operation successful. + content: + application/json: + schema: + $ref: '#/components/schemas/projectList' + '401': + $ref: '#/components/responses/unauthorized' + /projects/{projectId}: + delete: + x-eov-operation-id: deleteProject + x-eov-operation-handler: v1/handlers/projects/projects.handler + tags: + - Projects + summary: Delete a project + description: Delete a project from your instance. + parameters: + - $ref: '#/components/parameters/projectId' + responses: + '204': + description: Operation successful. + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + '404': + $ref: '#/components/responses/notFound' + put: + x-eov-operation-id: updateProject + x-eov-operation-handler: v1/handlers/projects/projects.handler + tags: + - Project + summary: Update a project + description: Update a project. + parameters: + - $ref: '#/components/parameters/projectId' + requestBody: + description: Updated project object. + content: + application/json: + schema: + $ref: '#/components/schemas/project' + required: true + responses: + '204': + description: Operation successful. + '400': + $ref: '#/components/responses/badRequest' + '401': + $ref: '#/components/responses/unauthorized' + '403': + $ref: '#/components/responses/forbidden' + '404': + $ref: '#/components/responses/notFound' +components: + schemas: + audit: + type: object + properties: + Credentials Risk Report: + type: object + example: + risk: credentials + sections: + - title: Credentials not used in any workflow + description: These credentials are not used in any workflow. Keeping unused credentials in your instance is an unneeded security risk. + recommendation: Consider deleting these credentials if you no longer need them. + location: + - kind: credential + id: '1' + name: My Test Account + Database Risk Report: + type: object + example: + risk: database + sections: + - title: Expressions in "Execute Query" fields in SQL nodes + description: This SQL node has an expression in the "Query" field of an "Execute Query" operation. Building a SQL query with an expression may lead to a SQL injection attack. + recommendation: Consider using the "Query Parameters" field to pass parameters to the query + or validating the input of the expression in the "Query" field.: null + location: + - kind: node + workflowId: '1' + workflowName: My Workflow + nodeId: 51eb5852-ce0b-4806-b4ff-e41322a4041a + nodeName: MySQL + nodeType: n8n-nodes-base.mySql + Filesystem Risk Report: + type: object + example: + risk: filesystem + sections: + - title: Nodes that interact with the filesystem + description: This node reads from and writes to any accessible file in the host filesystem. Sensitive file content may be manipulated through a node operation. + recommendation: Consider protecting any sensitive files in the host filesystem + or refactoring the workflow so that it does not require host filesystem interaction.: null + location: + - kind: node + workflowId: '1' + workflowName: My Workflow + nodeId: 51eb5852-ce0b-4806-b4ff-e41322a4041a + nodeName: Ready Binary file + nodeType: n8n-nodes-base.readBinaryFile + Nodes Risk Report: + type: object + example: + risk: nodes + sections: + - title: Community nodes + description: This node is sourced from the community. Community nodes are not vetted by the n8n team and have full access to the host system. + recommendation: Consider reviewing the source code in any community nodes installed in this n8n instance + and uninstalling any community nodes no longer used.: null + location: + - kind: community + nodeType: n8n-nodes-test.test + packageUrl: https://www.npmjs.com/package/n8n-nodes-test + Instance Risk Report: + type: object + example: + risk: execution + sections: + - title: Unprotected webhooks in instance + description: These webhook nodes have the "Authentication" field set to "None" and are not directly connected to a node to validate the payload. Every unprotected webhook allows your workflow to be called by any third party who knows the webhook URL. + recommendation: Consider setting the "Authentication" field to an option other than "None" + or validating the payload with one of the following nodes.: null + location: + - kind: community + nodeType: n8n-nodes-test.test + packageUrl: https://www.npmjs.com/package/n8n-nodes-test + credential: + required: + - name + - type + - data + type: object + properties: + id: + type: string + readOnly: true + example: R2DjclaysHbqn778 + name: + type: string + example: Joe's Github Credentials + type: + type: string + example: github + data: + type: object + writeOnly: true + example: + token: ada612vad6fa5df4adf5a5dsf4389adsf76da7s + createdAt: + type: string + format: date-time + readOnly: true + example: '2022-04-29T11:02:29.842Z' + updatedAt: + type: string + format: date-time + readOnly: true + example: '2022-04-29T11:02:29.842Z' + create-credential-response: + required: + - id + - name + - type + - createdAt + - updatedAt + type: object + properties: + id: + type: string + readOnly: true + example: vHxaz5UaCghVYl9C + name: + type: string + example: John's Github account + type: + type: string + example: github + createdAt: + type: string + format: date-time + readOnly: true + example: '2022-04-29T11:02:29.842Z' + updatedAt: + type: string + format: date-time + readOnly: true + example: '2022-04-29T11:02:29.842Z' + execution: + type: object + properties: + id: + type: number + example: 1000 + data: + type: object + finished: + type: boolean + example: true + mode: + type: string + enum: + - cli + - error + - integrated + - internal + - manual + - retry + - trigger + - webhook + retryOf: + type: number + nullable: true + retrySuccessId: + type: number + nullable: true + example: '2' + startedAt: + type: string + format: date-time + stoppedAt: + type: string + format: date-time + workflowId: + type: number + example: '1000' + waitTill: + type: string + nullable: true + format: date-time + customData: + type: object + executionList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/execution' + nextCursor: + type: string + description: Paginate through executions by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + tag: + type: object + additionalProperties: false + required: + - name + properties: + id: + type: string + readOnly: true + example: 2tUt1wbLX592XDdX + name: + type: string + example: Production + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + tagList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/tag' + nextCursor: + type: string + description: Paginate through tags by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + node: + type: object + additionalProperties: false + properties: + id: + type: string + example: 0f5532f9-36ba-4bef-86c7-30d607400b15 + name: + type: string + example: Jira + webhookId: + type: string + disabled: + type: boolean + notesInFlow: + type: boolean + notes: + type: string + type: + type: string + example: n8n-nodes-base.Jira + typeVersion: + type: number + example: 1 + executeOnce: + type: boolean + example: false + alwaysOutputData: + type: boolean + example: false + retryOnFail: + type: boolean + example: false + maxTries: + type: number + waitBetweenTries: + type: number + continueOnFail: + type: boolean + example: false + description: use onError instead + deprecated: true + onError: + type: string + example: stopWorkflow + position: + type: array + items: + type: number + example: + - -100 + - 80 + parameters: + type: object + example: + additionalProperties: {} + credentials: + type: object + example: + jiraSoftwareCloudApi: + id: '35' + name: jiraApi + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + workflowSettings: + type: object + additionalProperties: false + properties: + saveExecutionProgress: + type: boolean + saveManualExecutions: + type: boolean + saveDataErrorExecution: + type: string + enum: + - all + - none + saveDataSuccessExecution: + type: string + enum: + - all + - none + executionTimeout: + type: number + example: 3600 + maxLength: 3600 + errorWorkflow: + type: string + example: VzqKEW0ShTXA5vPj + description: The ID of the workflow that contains the error trigger node. + timezone: + type: string + example: America/New_York + executionOrder: + type: string + example: v1 + workflow: + type: object + additionalProperties: false + required: + - name + - nodes + - connections + - settings + properties: + id: + type: string + readOnly: true + example: 2tUt1wbLX592XDdX + name: + type: string + example: Workflow 1 + active: + type: boolean + readOnly: true + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + nodes: + type: array + items: + $ref: '#/components/schemas/node' + connections: + type: object + example: + main: + - node: Jira + type: main + index: 0 + settings: + $ref: '#/components/schemas/workflowSettings' + staticData: + example: + lastId: 1 + anyOf: + - type: string + format: jsonString + nullable: true + - type: object + nullable: true + tags: + type: array + items: + $ref: '#/components/schemas/tag' + readOnly: true + workflowList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/workflow' + nextCursor: + type: string + description: Paginate through workflows by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + workflowTags: + type: array + items: + $ref: '#/components/schemas/tag' + tagIds: + type: array + items: + type: object + additionalProperties: false + required: + - id + properties: + id: + type: string + example: 2tUt1wbLX592XDdX + user: + required: + - email + type: object + properties: + id: + type: string + readOnly: true + example: 123e4567-e89b-12d3-a456-426614174000 + email: + type: string + format: email + example: john.doe@company.com + firstName: + maxLength: 32 + type: string + description: User's first name + readOnly: true + example: john + lastName: + maxLength: 32 + type: string + description: User's last name + readOnly: true + example: Doe + isPending: + type: boolean + description: Whether the user finished setting up their account in response to the invitation (true) or not (false). + readOnly: true + createdAt: + type: string + description: Time the user was created. + format: date-time + readOnly: true + updatedAt: + type: string + description: Last time the user was updated. + format: date-time + readOnly: true + role: + type: string + example: owner + readOnly: true + userList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/user' + nextCursor: + type: string + description: Paginate through users by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + pull: + type: object + properties: + force: + type: boolean + example: true + variables: + type: object + example: + foo: bar + importResult: + type: object + additionalProperties: true + properties: + variables: + type: object + properties: + added: + type: array + items: + type: string + changed: + type: array + items: + type: string + credentials: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + workflows: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + tags: + type: object + properties: + tags: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + mappings: + type: array + items: + type: object + properties: + workflowId: + type: string + tagId: + type: string + variable: + type: object + additionalProperties: false + required: + - key + - value + properties: + id: + type: string + readOnly: true + key: + type: string + value: + type: string + example: test + type: + type: string + readOnly: true + variableList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/variable' + nextCursor: + type: string + description: Paginate through variables by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + project: + type: object + additionalProperties: false + required: + - name + properties: + id: + type: string + readOnly: true + name: + type: string + type: + type: string + readOnly: true + projectList: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/project' + nextCursor: + type: string + description: Paginate through projects by setting the cursor parameter to a nextCursor attribute returned by a previous request. Default value fetches the first "page" of the collection. + nullable: true + example: MTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDA + error: + required: + - message + type: object + properties: + code: + type: string + message: + type: string + description: + type: string + role: + readOnly: true + type: object + properties: + id: + type: number + readOnly: true + example: 1 + name: + type: string + example: owner + readOnly: true + scope: + type: string + readOnly: true + example: global + createdAt: + type: string + description: Time the role was created. + format: date-time + readOnly: true + updatedAt: + type: string + description: Last time the role was updated. + format: date-time + readOnly: true + credentialType: + type: object + properties: + displayName: + type: string + readOnly: true + example: Email + name: + type: string + readOnly: true + example: email + type: + type: string + readOnly: true + example: string + default: + type: string + readOnly: true + example: string + Error: + $ref: '#/components/schemas/error' + Role: + $ref: '#/components/schemas/role' + Execution: + $ref: '#/components/schemas/execution' + Node: + $ref: '#/components/schemas/node' + Tag: + $ref: '#/components/schemas/tag' + Workflow: + $ref: '#/components/schemas/workflow' + WorkflowSettings: + $ref: '#/components/schemas/workflowSettings' + ExecutionList: + $ref: '#/components/schemas/executionList' + WorkflowList: + $ref: '#/components/schemas/workflowList' + Credential: + $ref: '#/components/schemas/credential' + CredentialType: + $ref: '#/components/schemas/credentialType' + Audit: + $ref: '#/components/schemas/audit' + Pull: + $ref: '#/components/schemas/pull' + ImportResult: + $ref: '#/components/schemas/importResult' + UserList: + $ref: '#/components/schemas/userList' + User: + $ref: '#/components/schemas/user' + responses: + unauthorized: + description: Unauthorized + notFound: + description: The specified resource was not found. + badRequest: + description: The request is invalid or provides malformed data. + conflict: + description: Conflict + forbidden: + description: Forbidden + NotFound: + $ref: '#/components/responses/notFound' + Unauthorized: + $ref: '#/components/responses/unauthorized' + BadRequest: + $ref: '#/components/responses/badRequest' + Conflict: + $ref: '#/components/responses/conflict' + Forbidden: + $ref: '#/components/responses/forbidden' + parameters: + includeData: + name: includeData + in: query + description: Whether or not to include the execution's detailed data. + required: false + schema: + type: boolean + limit: + name: limit + in: query + description: The maximum number of items to return. + required: false + schema: + type: number + example: 100 + default: 100 + maximum: 250 + cursor: + name: cursor + in: query + description: Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first "page" of the collection. See pagination for more detail. + required: false + style: form + schema: + type: string + executionId: + name: id + in: path + description: The ID of the execution. + required: true + schema: + type: number + tagId: + name: id + in: path + description: The ID of the tag. + required: true + schema: + type: string + workflowId: + name: id + in: path + description: The ID of the workflow. + required: true + schema: + type: string + credentialId: + name: id + in: path + description: The ID of the credential. + required: true + schema: + type: string + includeRole: + name: includeRole + in: query + description: Whether to include the user's role or not. + required: false + schema: + type: boolean + example: true + default: false + userIdentifier: + name: id + in: path + description: The ID or email of the user. + required: true + schema: + type: string + format: identifier + variableId: + name: id + in: path + description: The ID of the variable. + required: true + schema: + type: string + projectId: + name: projectId + in: path + description: The ID of the project. + required: true + schema: + type: string + Cursor: + $ref: '#/components/parameters/cursor' + Limit: + $ref: '#/components/parameters/limit' + ExecutionId: + $ref: '#/components/parameters/executionId' + WorkflowId: + $ref: '#/components/parameters/workflowId' + TagId: + $ref: '#/components/parameters/tagId' + IncludeData: + $ref: '#/components/parameters/includeData' + UserIdentifier: + $ref: '#/components/parameters/userIdentifier' + IncludeRole: + $ref: '#/components/parameters/includeRole' + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: X-N8N-API-KEY diff --git a/server/node-service/src/server.ts b/server/node-service/src/server.ts index 124c8d1e5c..793161ef5a 100644 --- a/server/node-service/src/server.ts +++ b/server/node-service/src/server.ts @@ -9,6 +9,7 @@ import { collectDefaultMetrics } from "prom-client"; import apiRouter from "./routes/apiRouter"; import systemRouter from "./routes/systemRouter"; import cors, { CorsOptions } from "cors"; +import bodyParser from "body-parser"; collectDefaultMetrics(); const prefix = "/node-service"; @@ -32,6 +33,15 @@ router.use(morgan("dev")); /** Parse the request */ router.use(express.urlencoded({ extended: false })); +/** Custom middleware: use raw body for encrypted requests */ +router.use((req, res, next) => { + if (req.headers["x-encrypted"]) { + bodyParser.text({ type: "*/*" })(req, res, next); + } else { + bodyParser.json()(req, res, next); + } +}); + /** Takes care of JSON data */ router.use( express.json({ diff --git a/server/node-service/src/utils/encryption.ts b/server/node-service/src/utils/encryption.ts new file mode 100644 index 0000000000..2240a6571f --- /dev/null +++ b/server/node-service/src/utils/encryption.ts @@ -0,0 +1,42 @@ +import { createDecipheriv, pbkdf2Sync } from "crypto"; +import { badRequest } from "../common/error"; + +// Spring's Encryptors.text uses AES-256-CBC with PBKDF2 (HmacSHA1, 1024 iterations). +const ALGORITHM = "aes-256-cbc"; +const KEY_LENGTH = 32; // 256 bits +const IV_LENGTH = 16; // 128 bits +const ITERATIONS = 1024; +const DIGEST = "sha1"; + +// You must set these to match your Java config: +const PASSWORD = process.env.LOWCODER_NODE_SERVICE_SECRET || "lowcoderpwd"; +const SALT_HEX = process.env.LOWCODER_NODE_SERVICE_SECRET_SALT || "lowcodersalt"; + +/** + * Derive key from password and salt using PBKDF2WithHmacSHA1 (Spring's default). + */ +function deriveKey(password: string, saltHex: string): Buffer { + const salt = Buffer.from(saltHex, "utf8"); + return pbkdf2Sync(password, salt, ITERATIONS, KEY_LENGTH, DIGEST); +} + +/** + * Decrypt a string encrypted by Spring's Encryptors.text. + */ +export async function decryptString(encrypted: string): Promise<string> { + try { + // Spring's format: hex(salt) + encryptedHex(IV + ciphertext) + const key = deriveKey(PASSWORD, SALT_HEX); + + const encryptedBuf = Buffer.from(encrypted, "hex"); + const iv = encryptedBuf.slice(0, IV_LENGTH); + const ciphertext = encryptedBuf.slice(IV_LENGTH); + + const decipher = createDecipheriv(ALGORITHM, key, iv); + let decrypted = decipher.update(ciphertext, undefined, "utf8"); + decrypted += decipher.final("utf8"); + return decrypted; + } catch (e) { + throw badRequest("Failed to decrypt string"); + } +} \ No newline at end of file diff --git a/server/node-service/yarn.lock b/server/node-service/yarn.lock index 14c3ac76cb..64cf824227 100644 --- a/server/node-service/yarn.lock +++ b/server/node-service/yarn.lock @@ -1877,6 +1877,74 @@ __metadata: languageName: node linkType: hard +"@duckdb/node-api@npm:^1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-api@npm:1.3.0-alpha.21" + dependencies: + "@duckdb/node-bindings": 1.3.0-alpha.21 + checksum: 05ca91baa03afc9d765dce7aab5e03b63ee6d25dd7a63dcdcecce9f41a21d46ce95eb5ac86c368620f229608be94631834a5515fd5d937e9f05558d4b97d2aa3 + languageName: node + linkType: hard + +"@duckdb/node-bindings-darwin-arm64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-darwin-arm64@npm:1.3.0-alpha.21" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-darwin-x64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-darwin-x64@npm:1.3.0-alpha.21" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-linux-arm64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-linux-arm64@npm:1.3.0-alpha.21" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-linux-x64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-linux-x64@npm:1.3.0-alpha.21" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@duckdb/node-bindings-win32-x64@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings-win32-x64@npm:1.3.0-alpha.21" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@duckdb/node-bindings@npm:1.3.0-alpha.21": + version: 1.3.0-alpha.21 + resolution: "@duckdb/node-bindings@npm:1.3.0-alpha.21" + dependencies: + "@duckdb/node-bindings-darwin-arm64": 1.3.0-alpha.21 + "@duckdb/node-bindings-darwin-x64": 1.3.0-alpha.21 + "@duckdb/node-bindings-linux-arm64": 1.3.0-alpha.21 + "@duckdb/node-bindings-linux-x64": 1.3.0-alpha.21 + "@duckdb/node-bindings-win32-x64": 1.3.0-alpha.21 + dependenciesMeta: + "@duckdb/node-bindings-darwin-arm64": + optional: true + "@duckdb/node-bindings-darwin-x64": + optional: true + "@duckdb/node-bindings-linux-arm64": + optional: true + "@duckdb/node-bindings-linux-x64": + optional: true + "@duckdb/node-bindings-win32-x64": + optional: true + checksum: c2b71f6d8857d20ba381091584bbec597bf156059aa8af890b6f2016193de02aec2d376d776ede32722cf3752a1defaa02a457ea957e3686e3389c31b4e9055c + languageName: node + linkType: hard + "@fastify/busboy@npm:^3.0.0": version: 3.0.0 resolution: "@fastify/busboy@npm:3.0.0" @@ -2022,13 +2090,6 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - "@google-cloud/bigquery@npm:^6.1.0": version: 6.2.1 resolution: "@google-cloud/bigquery@npm:6.2.1" @@ -2564,25 +2625,6 @@ __metadata: languageName: node linkType: hard -"@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.11 - resolution: "@mapbox/node-pre-gyp@npm:1.0.11" - dependencies: - detect-libc: ^2.0.0 - https-proxy-agent: ^5.0.0 - make-dir: ^3.1.0 - node-fetch: ^2.6.7 - nopt: ^5.0.0 - npmlog: ^5.0.1 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 - bin: - node-pre-gyp: bin/node-pre-gyp - checksum: b848f6abc531a11961d780db813cc510ca5a5b6bf3184d72134089c6875a91c44d571ba6c1879470020803f7803609e7b2e6e429651c026fe202facd11d444b8 - languageName: node - linkType: hard - "@npmcli/agent@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/agent@npm:3.0.0" @@ -2596,16 +2638,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" - dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 - languageName: node - linkType: hard - "@npmcli/fs@npm:^4.0.0": version: 4.0.0 resolution: "@npmcli/fs@npm:4.0.0" @@ -2615,16 +2647,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 - languageName: node - linkType: hard - "@opentelemetry/api@npm:^1.3.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" @@ -4810,17 +4832,10 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - "abbrev@npm:^3.0.0": - version: 3.0.0 - resolution: "abbrev@npm:3.0.0" - checksum: 2500075b5ef85e97c095ab6ab2ea640dcf90bb388f46398f4d347b296f53399f984ec9462c74bee81df6bba56ef5fd9dbc2fb29076b1feb0023e0f52d43eb984 + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: e70b209f5f408dd3a3bbd0eec4b10a2ffd64704a4a3821d0969d84928cc490a8eb60f85b78a95622c1841113edac10161c62e52f5e7d0027aa26786a8136e02e languageName: node linkType: hard @@ -4902,25 +4917,6 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.2.1": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: ^1.2.1 - checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - "ajv-draft-04@npm:^1.0.0": version: 1.0.0 resolution: "ajv-draft-04@npm:1.0.0" @@ -5057,33 +5053,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^2.0.0": - version: 2.0.0 - resolution: "are-we-there-yet@npm:2.0.0" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -5451,32 +5420,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 - tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 - languageName: node - linkType: hard - "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -5592,13 +5535,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -5620,13 +5556,6 @@ __metadata: languageName: node linkType: hard -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - "cliui@npm:^7.0.2": version: 7.0.4 resolution: "cliui@npm:7.0.4" @@ -5695,15 +5624,6 @@ __metadata: languageName: node linkType: hard -"color-support@npm:^1.1.2, color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - "combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -5757,13 +5677,6 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -5984,7 +5897,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -6061,13 +5974,6 @@ __metadata: languageName: node linkType: hard -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - "depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -6082,13 +5988,6 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0": - version: 2.0.3 - resolution: "detect-libc@npm:2.0.3" - checksum: 2ba6a939ae55f189aea996ac67afceb650413c7a34726ee92c40fb0deb2400d57ef94631a8a3f052055eea7efb0f99a9b5e6ce923415daa3e68221f963cfc27d - languageName: node - linkType: hard - "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -6155,26 +6054,6 @@ __metadata: languageName: node linkType: hard -"duckdb-async@npm:^1.1.3": - version: 1.1.3 - resolution: "duckdb-async@npm:1.1.3" - dependencies: - duckdb: 1.1.3 - checksum: f4fe4854811a1818c177540dab36ff95d59f0de4065bdcd8b1a02c609ab52bbf5648f86011af6078db1a07d47f277884d073b7211990ba3d1f6bbf39d17153fe - languageName: node - linkType: hard - -"duckdb@npm:1.1.3": - version: 1.1.3 - resolution: "duckdb@npm:1.1.3" - dependencies: - "@mapbox/node-pre-gyp": ^1.0.0 - node-addon-api: ^7.0.0 - node-gyp: ^9.3.0 - checksum: 026ed420f1884fec5909b334e055dd85e86c3edda4f3e3aab599048fdc81903ddc060837bd04a41de2857959f7a6cba52183a4c39c23b947d3c86113ab9dcd98 - languageName: node - linkType: hard - "duplexify@npm:^4.0.0, duplexify@npm:^4.1.1, duplexify@npm:^4.1.3": version: 4.1.3 resolution: "duplexify@npm:4.1.3" @@ -6495,9 +6374,9 @@ __metadata: linkType: hard "exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 7e191e3dd6edd8c56c88f2c8037c98fbb8034fe48778be53ed8cb30ccef371a061a4e999a469aab939b92f8f12698f3b426d52f4f76b7a20da5f9f98c3cbc862 languageName: node linkType: hard @@ -6650,6 +6529,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.4": + version: 6.4.5 + resolution: "fdir@npm:6.4.5" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 14efd2d6617a6f9fb314916ccff64e00bdb96216f26542ec9dfa532ed60a7ebb45463f7009aa215c14071566bf43caeb8ba268ccb52a11e6b51e4aaa8cb58d81 + languageName: node + linkType: hard + "file-uri-to-path@npm:2": version: 2.0.0 resolution: "file-uri-to-path@npm:2.0.0" @@ -6813,15 +6704,6 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -6881,39 +6763,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^3.0.0": - version: 3.0.2 - resolution: "gauge@npm:3.0.2" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.1 - object-assign: ^4.1.1 - signal-exit: ^3.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - "gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": version: 5.1.3 resolution: "gaxios@npm:5.1.3" @@ -7030,7 +6879,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": +"glob@npm:^10.2.2": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -7060,7 +6909,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1, glob@npm:^8.0.3": +"glob@npm:^8.0.3": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -7235,13 +7084,6 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - "hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -7265,10 +7107,10 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 7a7246ddfce629f96832791176fd643589d954e6f3b49548dadb4290451961237fab8fcea41cd2008fe819d95b41c1e8b97f47d088afc0a1c81705287b4ddbcc languageName: node linkType: hard @@ -7404,20 +7246,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -7540,13 +7368,6 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - "is-module@npm:^1.0.0": version: 1.0.0 resolution: "is-module@npm:1.0.0" @@ -8534,6 +8355,7 @@ __metadata: "@aws-sdk/client-lambda": ^3.332.0 "@aws-sdk/client-s3": ^3.332.0 "@aws-sdk/s3-request-presigner": ^3.332.0 + "@duckdb/node-api": ^1.3.0-alpha.21 "@google-cloud/bigquery": ^6.1.0 "@google-cloud/storage": ^6.10.1 "@supabase/supabase-js": ^2.26.0 @@ -8553,7 +8375,6 @@ __metadata: commander: ^10.0.0 copyfiles: ^2.4.1 cors: ^2.8.5 - duckdb-async: ^1.1.3 dynamodb-data-types: ^4.0.1 express: ^4.21.0 express-async-errors: ^3.1.1 @@ -8624,7 +8445,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": +"lru-cache@npm:^7.14.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 @@ -8650,15 +8471,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -8675,30 +8487,6 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c - languageName: node - linkType: hard - "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -8897,15 +8685,6 @@ __metadata: languageName: node linkType: hard -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -8915,21 +8694,6 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 - languageName: node - linkType: hard - "minipass-fetch@npm:^4.0.0": version: 4.0.1 resolution: "minipass-fetch@npm:4.0.1" @@ -8972,7 +8736,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -8981,13 +8745,6 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" @@ -8995,23 +8752,12 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - "minizlib@npm:^3.0.1": - version: 3.0.1 - resolution: "minizlib@npm:3.0.1" + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" dependencies: - minipass: ^7.0.4 - rimraf: ^5.0.5 - checksum: da0a53899252380475240c587e52c824f8998d9720982ba5c4693c68e89230718884a209858c156c6e08d51aad35700a3589987e540593c36f6713fe30cd7338 + minipass: ^7.1.2 + checksum: 493bed14dcb6118da7f8af356a8947cf1473289c09658e5aabd69a737800a8c3b1736fb7d7931b722268a9c9bc038a6d53c049b6a6af24b34a121823bb709996 languageName: node linkType: hard @@ -9026,7 +8772,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -9107,7 +8853,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -9153,15 +8899,6 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^7.0.0": - version: 7.1.1 - resolution: "node-addon-api@npm:7.1.1" - dependencies: - node-gyp: latest - checksum: 46051999e3289f205799dfaf6bcb017055d7569090f0004811110312e2db94cb4f8654602c7eb77a60a1a05142cc2b96e1b5c56ca4622c41a5c6370787faaf30 - languageName: node - linkType: hard - "node-addon-api@npm:^8.2.1, node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0": version: 8.3.0 resolution: "node-addon-api@npm:8.3.0" @@ -9188,7 +8925,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": +"node-fetch@npm:2, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -9230,44 +8967,23 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.3.0": - version: 9.4.1 - resolution: "node-gyp@npm:9.4.1" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577 - languageName: node - linkType: hard - "node-gyp@npm:latest": - version: 11.1.0 - resolution: "node-gyp@npm:11.1.0" + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 - glob: ^10.3.10 graceful-fs: ^4.2.6 make-fetch-happen: ^14.0.3 nopt: ^8.0.0 proc-log: ^5.0.0 semver: ^7.3.5 tar: ^7.4.3 + tinyglobby: ^0.2.12 which: ^5.0.0 bin: node-gyp: bin/node-gyp.js - checksum: b196da39a7a45f302d6e03cfdb579eeecbfffa1ab3796de45652c2c0dcbf46b83fde715b054e4d00aa53da5f33033ac5791e20cbb7cc11267dac4f8975ef276c + checksum: 2536282ba81f8a94b29482d3622b6ab298611440619e46de4512a6f32396a68b5530357c474b859787069d84a4c537d99e0c71078cce5b9f808bf84eeb78e8fb languageName: node linkType: hard @@ -9322,28 +9038,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" - dependencies: - abbrev: 1 - bin: - nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -9371,30 +9065,6 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^5.0.1": - version: 5.0.1 - resolution: "npmlog@npm:5.0.1" - dependencies: - are-we-there-yet: ^2.0.0 - console-control-strings: ^1.1.0 - gauge: ^3.0.0 - set-blocking: ^2.0.0 - checksum: 516b2663028761f062d13e8beb3f00069c5664925871a9b57989642ebe09f23ab02145bf3ab88da7866c4e112cafff72401f61a672c7c8a20edc585a7016ef5f - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - "nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -9404,7 +9074,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.0.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -9571,15 +9241,6 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - "p-map@npm:^7.0.2": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -9716,6 +9377,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: a7a5188c954f82c6585720e9143297ccd0e35ad8072231608086ca950bee672d51b0ef676254af0788205e59bd4e4deb4e7708769226bed725bf13370a7d1464 + languageName: node + linkType: hard + "pino-abstract-transport@npm:^2.0.0": version: 2.0.0 resolution: "pino-abstract-transport@npm:2.0.0" @@ -9856,13 +9524,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -10068,7 +9729,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -10212,28 +9873,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"rimraf@npm:^5.0.5": - version: 5.0.10 - resolution: "rimraf@npm:5.0.10" - dependencies: - glob: ^10.3.7 - bin: - rimraf: dist/esm/bin.mjs - checksum: 50e27388dd2b3fa6677385fc1e2966e9157c89c86853b96d02e6915663a96b7ff4d590e14f6f70e90f9b554093aa5dbc05ac3012876be558c06a65437337bc05 - languageName: node - linkType: hard - "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -10287,7 +9926,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -10296,7 +9935,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3": +"semver@npm:^7.3.5": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621 + languageName: node + linkType: hard + +"semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -10338,13 +9986,6 @@ __metadata: languageName: node linkType: hard -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -10404,7 +10045,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -10459,17 +10100,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^8.0.3": version: 8.0.5 resolution: "socks-proxy-agent@npm:8.0.5" @@ -10481,7 +10111,7 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.2": +"socks@npm:^2.3.3": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: @@ -10564,15 +10194,6 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" - dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb - languageName: node - linkType: hard - "stack-utils@npm:^2.0.3": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -10651,7 +10272,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -10835,20 +10456,6 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c - languageName: node - linkType: hard - "tar@npm:^7.4.3": version: 7.4.3 resolution: "tar@npm:7.4.3" @@ -10953,6 +10560,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.12": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: ^6.4.4 + picomatch: ^4.0.2 + checksum: 261e986e3f2062dec3a582303bad2ce31b4634b9348648b46828c000d464b012cf474e38f503312367d4117c3f2f18611992738fca684040758bba44c24de522 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -11221,15 +10838,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -11246,15 +10854,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - "unique-slug@npm:^5.0.0": version: 5.0.0 resolution: "unique-slug@npm:5.0.0" @@ -11487,7 +11086,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1, which@npm:^2.0.2": +"which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -11509,15 +11108,6 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - "win-release@npm:^1.0.0": version: 1.1.1 resolution: "win-release@npm:1.1.1" diff --git a/sonar-project.properties b/sonar-project.properties index f1165f8320..5e837c5f1b 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,3 +1,3 @@ sonar.projectKey=lowcoder-org_lowcoder sonar.organization=lowcoder -sonar.java.binaries=server/api-service/lowcoder-domain/target,server/api-service/lowcoder-infra/target,server/api-service/lowcoder-sdk/target,server/api-service/lowcoder-server/target,server/api-service/lowcoder-plugins/clickHousePlugin/target,server/api-service/lowcoder-plugins/elasticSearchPlugin/target,server/api-service/lowcoder-plugins/googleSheetsPlugin/target,server/api-service/lowcoder-plugins/graphqlPlugin/target,server/api-service/lowcoder-plugins/mongoPlugin/target,server/api-service/lowcoder-plugins/mssqlPlugin/target,server/api-service/lowcoder-plugins/mysqlPlugin/target,server/api-service/lowcoder-plugins/lowcoderApiPlugin/target,server/api-service/lowcoder-plugins/oraclePlugin/target,server/api-service/lowcoder-plugins/postgresPlugin/target,server/api-service/lowcoder-plugins/redisPlugin/target,server/api-service/lowcoder-plugins/restApiPlugin/target,server/api-service/lowcoder-plugins/smtpPlugin/target,server/api-service/lowcoder-plugins/snowflakePlugin/target,server/api-service/lowcoder-plugins/sqlBasedPlugin/target +sonar.java.binaries=server/api-service/lowcoder-domain/target,server/api-service/lowcoder-infra/target,server/api-service/lowcoder-sdk/target,server/api-service/lowcoder-server/target,server/api-service/lowcoder-plugins/clickHousePlugin/target,server/api-service/lowcoder-plugins/elasticSearchPlugin/target,server/api-service/lowcoder-plugins/googleSheetsPlugin/target,server/api-service/lowcoder-plugins/graphqlPlugin/target,server/api-service/lowcoder-plugins/mongoPlugin/target,server/api-service/lowcoder-plugins/mssqlPlugin/target,server/api-service/lowcoder-plugins/mysqlPlugin/target,server/api-service/lowcoder-plugins/oraclePlugin/target,server/api-service/lowcoder-plugins/postgresPlugin/target,server/api-service/lowcoder-plugins/redisPlugin/target,server/api-service/lowcoder-plugins/restApiPlugin/target,server/api-service/lowcoder-plugins/smtpPlugin/target,server/api-service/lowcoder-plugins/snowflakePlugin/target,server/api-service/lowcoder-plugins/sqlBasedPlugin/target diff --git a/translations/locales/de-updated.js b/translations/locales/de-updated.js new file mode 100644 index 0000000000..7138069632 --- /dev/null +++ b/translations/locales/de-updated.js @@ -0,0 +1,4844 @@ + +import { en } from "./en.js"; +export const de = { + ...en, + + "productName": "Lowcoder", + "productDesc": "Erstelle Softwareanwendungen für Dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist eine hervorragende Alternative zu Retool, Appsmith und Tooljet.", + "notSupportedBrowser": "Dein aktueller Browser hat möglicherweise Kompatibilitätsprobleme. Um ein optimales Nutzererlebnis zu gewährleisten, verwende bitte die neueste Version von Chrome.", + "create": "Erstellen", + "move": "Verschieben", + "addItem": "Hinzufügen", + "newItem": "Neu", + "copy": "Kopieren", + "rename": "Umbenennen", + "delete": "Löschen", + "deletePermanently": "Dauerhaft löschen", + "remove": "Entfernen", + "recover": "Wiederherstellen", + "edit": "Bearbeiten", + "view": "Ansicht", + "value": "Wert", + "data": "Daten", + "information": "Informationen", + "success": "Erfolg", + "warning": "Warnung", + "error": "Fehler", + "reference": "Referenz", + "text": "Text", + "basic": "Grundlegend", + "label": "Etikett", + "layout": "Layout", + "color": "Farbe", + "form": "Formular", + "menu": "Menü", + "menuItem": "Menüpunkt", + "ok": "OK", + "cancel": "Abbrechen", + "finish": "Beenden", + "reset": "Zurücksetzen", + "icon": "Icon", + "code": "Code", + "title": "Titel", + "emptyContent": "Leer", + "more": "Mehr", + "search": "Suche", + "back": "Zurück", + "accessControl": "Zugangskontrolle", + "copySuccess": "Erfolgreich kopiert", + "copyError": "Kopierfehler", + "api": { + ...en.api, + + "publishSuccess": "Erfolgreich veröffentlicht", + "recoverFailed": "Wiederherstellung fehlgeschlagen", + "needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "Der aktuelle Code-Editor unterstützt keine automatische Formatierung.", + "fold": "Zuklappen", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Eigenschaft einstellen: {property}", + "clearDesc": "Eigenschaft löschen: {property}", + "resetDesc": "{property} auf Standardwert zurücksetzen", + }, + "method": { + ...en.method, + + "focus": "Fokus setzen", + "focusOptions": "Fokus-Optionen. Siehe HTMLElement.focus()", + "blur": "Fokus entfernen", + "click": "Klick", + "select": "Auswählen", + "setSelectionRange": "Start- und Endposition der Textauswahl festlegen", + "selectionStart": "0-basierter Index des ersten ausgewählten Zeichens", + "selectionEnd": "0-basierter Index des Zeichens nach dem letzten ausgewählten Zeichen", + "setRangeText": "Textbereich ersetzen", + "replacement": "String zum Einfügen", + "replaceStart": "0-basierter Index des ersten zu ersetzenden Zeichens", + "replaceEnd": "0-basierter Index des Zeichens nach dem letzten zu ersetzenden Zeichen", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Das Laden einer Komponente ist fehlgeschlagen. Bitte überprüfe deine Konfiguration.", + "clickToReload": "Klicke bitte um Neu zu laden.", + "errorMsg": "Fehler: ", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Unterstützt nur {types} Bild-Dateitypen", + "exceedSizeError": "Die Bildgröße darf {size} nicht überschreiten", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Nicht unterstützt", + "selectAtLeastOneComponent": "Bitte wähle mindestens eine Komponente aus", + "selectCompFirst": "Komponenten vor dem Kopieren auswählen", + "noContainerSelected": "Kein Container ausgewählt", + "deleteCompsSuccess": "Erfolgreich gelöscht. Drücke {undoKey} zum Rückgängigmachen.", + "deleteCompsTitle": "Komponenten löschen", + "deleteCompsBody": "Bist du sicher, dass du die ausgewählten Komponenten {compNum} löschen willst?", + "cutCompsSuccess": "Erfolgreich selektiert und gelöscht. Drücke {pasteKey}, um die Komponente einzufügen, oder {undoKey}, um den Vorgang rückgängig zu machen.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Datenabfragen", + "globals": "Globale Datenvariablen", + "propTipsArr": "{num} Posten", + "propTips": "{num} Tasten", + "propTipArr": "Posten {num}", + "propTip": "{num} Schlüssel", + "stateTab": "Status", + "settingsTab": "Einstellungen", + "toolbarTitle": "Individualisierung", + "toolbarPreload": "Skripte und Stile", + "components": "Aktive Komponenten", + "modals": "Modale Fenster", + "expandTip": "Klicken, um die aktuellen Daten (State) der Komponente zu sehen.", + "collapseTip": "Klicken Sie, um die Ansicht zu reduzieren.", + "layers": "Schichten", + "activatelayers": "Dynamische Ebenen verwenden", + "selectedComponents": "Ausgewählte Komponenten...", + "displayComponents": "Steuerung Display", + "lockComponents": "Kontrolle Position", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Datenabfragen", + "run": "Start", + "noSelectedQuery": "Keine Datenabfrage ausgewählt", + "metaData": "Metadaten der Datenquelle", + "noMetadata": "Keine Metadaten verfügbar", + "metaSearchPlaceholder": "Metadaten suchen", + "allData": "Alle Daten", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Eigenschaften", + "noSelectedComps": "Keine Komponenten ausgewählt. Klicke auf eine Komponente, um ihre Eigenschaften anzuzeigen.", + "createTab": "Einfügen", + "searchPlaceHolder": "Komponenten oder Module suchen", + "uiComponentTab": "Komponenten", + "extensionTab": "Erweiterungen", + "modulesTab": "Module", + "moduleListTitle": "Module", + "pluginListTitle": "Erweiterungen (Plugins)", + "emptyModules": "Module sind wiederverwendbare Mikro-Apps. Du kannst sie in deine App einbetten.", + "searchNotFound": "Kannst du die richtige Komponente nicht finden? Schreibe uns!", + "emptyPlugins": "Keine Plugins hinzugefügt.", + "contactUs": "Kontakt", + "issueHere": "hier.", + "folderListTitle": "Ordner", + }, + "prop": { + ...en.prop, + + "expand": "Erweitern", + "columns": "Spalten", + "videokey": "Video Schlüssel", + "rowSelection": "Zeilenauswahl", + "toolbar": "Symbolleiste", + "pagination": "Paginierung", + "logo": "Logo", + "style": "Stil", + "inputs": "Variablen", + "meta": "Metadaten", + "data": "Daten", + "hide": "Verstecken", + "loading": "Laden", + "disabled": "Deaktiviert", + "placeholder": "Platzhalter", + "showClear": "Schaltfläche \"Löschen\" anzeigen", + "showSearch": "Suche anzeigen", + "defaultValue": "Standardwert", + "required": "Erforderliches Feld", + "showEmptyValidation": "Validierung beim Leeren/Zurücksetzen anzeigen", + "readOnly": "Nur lesbar", + "readOnlyTooltip": "Schreibgeschützte Komponenten erscheinen normal, können aber nicht geändert werden.", + "minimum": "Minimum", + "maximum": "Maximum", + "regex": "Regular Expression", + "minLength": "Mindestlänge", + "maxLength": "Maximale Länge", + "height": "Höhe", + "width": "Breite", + "selectApp": "App auswählen", + "showCount": "Anzahl anzeigen", + "tabIndex": "Registerkarte \"Index", + "textType": "Textart", + "customRule": "Benutzerdefinierte Regel", + "customRuleTooltip": "Eine nicht leere Zeichenkette weist auf einen Fehler hin; eine leere Zeichenkette oder null bedeutet, dass die Validierung erfolgreich war. Beispiel: ", + "manual": "Handbuch", + "map": "Karte", + "json": "JSON", + "use12Hours": "12-Stunden-Format verwenden", + "hourStep": "Stunden Schritt", + "minuteStep": "Minuten Schritt", + "secondStep": "Sekunden Schritt", + "minDate": "Frühestes Datum", + "maxDate": "Spätestes Datum", + "minTime": "Früheste Zeit", + "maxTime": "Späteste Zeit", + "type": "Typ", + "showLabel": "Etikett anzeigen", + "showHeader": "Kopfbereich anzeigen", + "showBody": "Hauptbereich zeigen", + "showSider": "Schieberegler anzeigen", + "innerSider": "Innere Seiten", + "showFooter": "Fußbereich anzeigen", + "maskClosable": "Zum Schließen auf \"Schließen\" klicken", + "escapeClose": "Schließen bei Escape-Taste aktivieren", + "toggleClose": "Schaltfläche \"Schließen\" aktivieren", + "showMask": "Maske darstellen", + "textOverflow": "Textüberlauf", + "scrollbar": "Bildlaufleisten anzeigen", + "showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", + "showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", + "siderScrollbar": "Bildlaufleisten im Sider anzeigen", + "mainScrollbar": "Bildlaufleisten im Hauptinhalt anzeigen", + "modalScrollbar": "Show Scrollbars in Modal", + "drawerScrollbar": "Bildlaufleisten in der Schublade anzeigen", + "textAreaScrollBar": "Show Scrollbars in Text Area", + "siderRight": "Schieberegler rechts", + "siderWidth": "Sider Width", + "siderWidthTooltip": "Die Seitenbreite unterstützt Prozentwerte (%) und Pixel (px).", + "siderCollapsedWidth": "Sider Zusammengeklappte Breite", + "siderCollapsedWidthTooltip": "Die eingeklappte Breite des Siders unterstützt Prozentwerte (%) und Pixel (px).", + "siderCollapsible": "Sider Zusammenklappbar", + "siderCollapsed": "Sider kollabiert", + "contentScrollbar": "Bildlaufleisten im Inhalt anzeigen", + "appID": "App-Id", + "showApp": "Eine App im Inhaltsbereich anzeigen", + "showAppTooltip": "Sie können ganze Apps im Inhaltsbereich anzeigen lassen. Bitte beachten Sie, dass wir für Module keine Inputs, Outputs, Events und Methoden unterstützen.", + "baseURL": "API-Basis-URL", + "horizontal": "Horizontal", + "minHorizontalWidth": "Horizontale Mindestbreite", + "component": "Komponente", + "className": "Klasse", + "dataTestId": "Test ID", + "preventOverwriting": "Überschreiben von Stilen verhindern", + "color": "Farbe", + "horizontalGridCells": "Horizontale Rasterzellen", + "verticalGridCells": "Vertikale Rasterzellen", + "timeZone": "ZeitZone", + "pickerMode": "Picker Mode", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Automatisch", + "fixed": "Festgelegt", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Mouseover", + "wrap": "Wickeln", + }, + "labelProp": { + ...en.labelProp, + + "text": "Etikett Text", + "tooltip": "QuickInfo", + "position": "Position", + "collapse": "Kollabieren", + "left": "Links", + "right": "Rechts", + "top": "Open", + "align": "Ausrichtung", + "width": "Breite", + "widthTooltip": "Die Etikettenbreite unterstützt Prozentwerte (%) und Pixel (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Ereignishandler", + "emptyEventHandlers": "Keine Ereignishandler", + "incomplete": "Unvollständige Auswahl", + "inlineEventTitle": "Bei {eventName}", + "event": "Ereignis", + "action": "Aktion", + "noSelect": "Keine Auswahl", + "runQuery": "Eine Datenabfrage ausführen", + "selectQuery": "Datenabfrage auswählen", + "controlComp": "Eine Komponente steuern", + "runScript": "JavaScript ausführen", + "runScriptPlaceHolder": "Hier kann man JavaScript Code schreiben", + "component": "Komponente", + "method": "Methode", + "setTempState": "Einen temporären Zustand setzen", + "state": "Zustand", + "triggerModuleEvent": "Ein Modulereignis auslösen", + "moduleEvent": "Modulereignis", + "goToApp": "Zu einer anderen App wechseln", + "queryParams": "Abfrageparameter", + "queryVariables": "Abfrage-Variablen", + "hashParams": "Hash-Parameter", + "showNotification": "Eine Benachrichtigung anzeigen", + "text": "Text", + "level": "Stufe", + "duration": "Dauer", + "notifyDurationTooltip": "Zeiteinheit kann 's' (Sekunde, Standard) oder 'ms' (Millisekunde) sein. Maximale Dauer ist {max} Sekunden", + "goToURL": "URL öffnen", + "openInNewTab": "In neuem Tab öffnen", + "copyToClipboard": "In die Zwischenablage kopieren", + "copyToClipboardValue": "Wert", + "export": "Daten exportieren", + "exportNoFileType": "Keine Auswahl (optional)", + "fileName": "Dateiname", + "fileNameTooltip": "Dateiendung angeben, um Dateityp zu spezifizieren, z.B. 'bild.png'.", + "fileType": "Dateityp", + "condition": "Nur ausführen wenn...", + "conditionTooltip": "Ereignis-Handler nur ausführen, wenn diese Bedingung 'wahr' ist.", + "debounce": "Warten für", + "throttle": "Drosseln für", + "slowdownTooltip": "Verwende Warten oder Drosseln, um die Häufigkeit von Aktionen zu steuern. Zeiteinheit kann 'ms' (Millisekunde, Standard) oder 's' (Sekunde) sein.", + "notHandledError": "Nicht behandelter Fehler", + "currentApp": "Aktuelle App", + "inputEventHandlers": "Eingabe-Ereignishandler", + "inputEventHandlersDesc": "Ereignishandler bezüglich Benutzereingaben", + "buttonEventHandlers": "Button-Ereignishandler", + "buttonEventHandlersDesc": "Ereignishandler bezüglich Button-Klicks", + "changeEventHandlers": "Änderungs-Ereignishandler", + "changeEventHandlersDesc": "Ereignishandler bezüglich Wertänderungen", + "editedEventHandlers": "Bearbeitungs-Ereignishandler", + "editedEventHandlersDesc": "Ereignishandler bezüglich Bearbeitungsstatus von Elementen", + "clickEventHandlers": "Klick-Ereignishandler", + "clickEventHandlersDesc": "Ereignishandler bezüglich Klicks", + "keyDownEventHandlers": "Tastendruck-Ereignishandler", + "keyDownEventHandlersDesc": "Ereignishandler bezüglich Tastendrücken", + "checkboxEventHandlers": "Checkbox-Ereignishandler", + "checkboxEventHandlersDesc": "Ereignishandler bezüglich Checkbox-Änderungen", + "dragEventHandlers": "Drag-and-Drop-Ereignishandler", + "dragEventHandlersDesc": "Ereignishandler bezüglich Drag-and-Drop-Ereignissen", + "elementEventHandlers": "Element-Ereignishandler", + "elementEventHandlersDesc": "Ereignishandler bezüglich generischer Element-Ereignisse", + "mediaEventHandlers": "Medien-Ereignishandler", + "mediaEventHandlersDesc": "Ereignishandler bezüglich Medienereignissen", + "scannerEventHandlers": "Scanner-Ereignishandler", + "scannerEventHandlersDesc": "Ereignishandler bezüglich Scanner-Ereignissen", + "chartEventHandlers": "Diagramm-Ereignishandler", + "chartEventHandlersDesc": "Ereignishandler bezüglich Diagrammereignissen", + "geoMapEventHandlers": "Geo-Map-Ereignishandler", + "geoMapEventHandlersDesc": "Ereignishandler bezüglich Geo-Map-Ereignissen", + "stepEventHandlers": "Schritt-Ereignishandler", + "stepEventHandlersDesc": "Ereignishandler bezüglich Schritt-UI-Ereignissen", + "shareEventHandlers": "Teilen-Ereignishandler", + "shareEventHandlersDesc": "Ereignishandler bezüglich Teilen-Ereignissen", + "selectEventHandlers": "Auswahl-Ereignishandler", + "selectEventHandlersDesc": "Ereignishandler bezüglich Auswahl-Ereignissen", + "meetingEventHandlers": "Besprechungs-Ereignishandler", + "meetingEventHandlersDesc": "Ereignishandler bezüglich Besprechungs-Ereignissen", + "collaborationEventHandlers": "Kollaborations-Ereignishandler", + "collaborationEventHandlersDesc": "Ereignishandler bezüglich Kollaborations-Ereignissen", + "set": "Satz", + "clear": "Klar", + "reset": "Reset", + "messageType": "Message Type", + "placement": "Platzierung", + "description": "Beschreibung", + }, + "event": { + ...en.event, + + "submit": "Absenden", + "submitDesc": "Auslöser beim Absenden.", + "change": "Ändern", + "changeDesc": "Auslöser bei Änderungen.", + "focus": "Fokussieren", + "focusDesc": "Auslöser beim Fokussieren.", + "blur": "Verlassen", + "blurDesc": "Auslöser beim Verlassen.", + "click": "Klicken", + "clickDesc": "Auslöser beim Klicken.", + "doubleClick": "Doppelklick", + "doubleClickDesc": "Auslöser beim Doppelklicken.", + "rightClick": "Rechtsklick", + "rightClickDesc": "Auslöser beim Rechtsklicken.", + "keyDown": "Tastendruck", + "keyDownDesc": "Auslöser beim Tastendruck.", + "select": "Auswählen", + "selectDesc": "Auslöser bei Auswahl.", + "checked": "Aktiviert", + "checkedDesc": "Auslöser, wenn eine Checkbox aktiviert wird.", + "unchecked": "Deaktiviert", + "uncheckedDesc": "Auslöser, wenn eine Checkbox deaktiviert wird.", + "drag": "Ziehen", + "dragDesc": "Auslöser beim Ziehen.", + "drop": "Fallen lassen", + "dropDesc": "Auslöser beim Fallenlassen.", + "open": "Öffnen", + "openDesc": "Auslöser beim Öffnen.", + "mute": "Stummschalten", + "muteDesc": "Auslöser beim Stummschalten eines Mikrofons.", + "unmute": "Stummschaltung aufheben", + "unmuteDesc": "Auslöser beim Aufheben der Stummschaltung eines Mikrofons.", + "showCamera": "Kamera zeigen", + "showCameraDesc": "Auslöser, wenn die Kamera gezeigt wird.", + "hideCamera": "Kamera verstecken", + "hideCameraDesc": "Auslöser, wenn die Kamera versteckt wird.", + "shareScreen": "Bildschirm teilen", + "shareScreenDesc": "Auslöser beim Teilen des Bildschirms.", + "shareScreenEnd": "Bildschirmteilen beenden", + "shareScreenEndDesc": "Auslöser beim Beenden des Bildschirmteilens.", + "shareControl": "Steuerung teilen", + "shareControlDesc": "Auslöser beim Teilen der Steuerung.", + "shareControlEnd": "Steuerungsteilen beenden", + "shareControlEndDesc": "Auslöser beim Beenden des Steuerungsteilens.", + "shareContent": "Inhalt teilen", + "shareContentDesc": "Auslöser beim Teilen von Inhalten.", + "shareContentEnd": "Inhaltsteilen beenden", + "shareContentEndDesc": "Auslöser beim Beenden des Inhaltsteilens.", + "stopShare": "Stop Share", + "stopShareDesc": "Auslöser bei Stop Share", + "meetingStart": "Besprechung beginnen", + "meetingStartDesc": "Auslöser beim Start einer Besprechung.", + "meetingEnd": "Besprechung beenden", + "meetingEndDesc": "Auslöser beim Beenden einer Besprechung.", + "meetingJoin": "Besprechung beitreten", + "meetingJoinDesc": "Auslöser beim Beitritt zu einer Besprechung.", + "meetingLeave": "Besprechung verlassen", + "meetingLeaveDesc": "Auslöser beim Verlassen einer Besprechung.", + "play": "Abspielen", + "playDesc": "Auslöser beim Abspielen.", + "pause": "Pausieren", + "pauseDesc": "Auslöser beim Pausieren.", + "ended": "Beendet", + "endedDesc": "Auslöser wenn beendet.", + "step": "Schritt", + "stepDesc": "Auslöser bei einem Schritt.", + "next": "Nächster", + "nextDesc": "Auslöser beim nächsten Schritt.", + "finished": "Abgeschlossen", + "finishedDesc": "Auslöser wenn abgeschlossen.", + "saved": "Gespeichert", + "savedDesc": "Auslöser wenn gespeichert.", + "edited": "Bearbeitet", + "editedDesc": "Auslöser wenn bearbeitet.", + "geoMapMove": "Geo-Map Bewegen", + "geoMapMoveDesc": "Auslöser beim Bewegen der Geo-Map.", + "geoMapZoom": "Geo-Map Zoomen", + "geoMapZoomDesc": "Auslöser beim Zoomen der Geo-Map.", + "geoMapSelect": "Geo-Map Auswahl", + "geoMapSelectDesc": "Auslöser bei einer Auswahl auf der Geo-Map.", + "scannerSuccess": "Scanner Erfolg", + "scannerSuccessDesc": "Auslöser bei erfolgreichem Scan.", + "scannerError": "Scanner Fehler", + "scannerErrorDesc": "Auslöser bei einem Scannerfehler.", + "chartZoom": "Diagramm Zoomen", + "chartZoomDesc": "Auslöser beim Zoomen eines Diagramms.", + "chartHover": "Diagramm Hover", + "chartHoverDesc": "Auslöser beim Hover über einem Diagramm.", + "chartSelect": "Diagramm Auswählen", + "chartSelectDesc": "Auslöser bei der Auswahl eines Diagramms.", + "chartDeselect": "Diagramm Abwählen", + "chartDeselectDesc": "Auslöser beim Abwählen eines Diagramms.", + "close": "Schließen", + "closeDesc": "Auslöser beim Schließen.", + "parse": "Parsen", + "parseDesc": "Auslöser beim Parsen.", + "success": "Erfolg", + "successDesc": "Auslöser bei Erfolg.", + "delete": "Löschen", + "deleteDesc": "Auslöser beim Löschen.", + "mention": "Erwähnung", + "mentionDesc": "Auslöser bei einer Erwähnung.", + "search": "Suche", + "searchDesc": "Auslöser für die Suche", + "selectedChange": "Auswahl ändern", + "selectedChangeDesc": "Auslöser bei geänderter Auswahl", + "clickExtra": "Klicken Sie auf Aktion", + "clickExtraDesc": "Auslöser bei Klick auf Extra-Element", + "start": "Start", + "startDesc": "Auslöser beim Start", + "resume": "Lebenslauf", + "resumeDesc": "Auslöser im Lebenslauf", + "countdown": "Countdown", + "countdownDesc": "Auslöser am Ende des Countdowns", + "reset": "Zurücksetzen endet", + "resetDesc": "Auslöser bei Reset Timer", + "refresh": "Refresh", + "refreshDesc": "Auslöser beim Aktualisieren", + "sortChange": "Sortieren Ändern", + "sortChangeDesc": "Auslöser für Sortieränderungen", + }, + "style": { + ...en.style, + + "boxShadowColor": "Schattenfarbe", + "boxShadow": "Box Schatten", + "opacity": "Deckkraft", + "animation": "Animation", + "animationIterationCount": "Animation Iterationszahl", + "animationDelay": "Animation Verzögerung", + "animationDuration": "Animation Dauer", + "resetTooltip": "Stile zurücksetzen. Lösche das Eingabefeld, um einen einzelnen Stil zurückzusetzen.", + "textColor": "Textfarbe", + "contrastText": "Kontrastreiche Textfarbe", + "generated": "Generiert", + "customize": "Anpassen", + "staticText": "Statischer Text", + "accent": "Akzent", + "validate": "Validierungsmeldung", + "border": "Randfarbe", + "borderRadius": "Randradius", + "borderWidth": "Randbreite", + "borderStyle": "Randstil", + "background": "Hintergrund", + "headerBackground": "Kopfzeilenhintergrund", + "siderBackground": "Seitenleisten-Hintergrund", + "footerBackground": "Fußzeilenhintergrund", + "fill": "Füllung", + "track": "Spur", + "links": "Verknüpfungen", + "thumb": "Schiebereglergriff", + "thumbBorder": "Schieberegler-Rand", + "checked": "Aktiviert", + "unchecked": "Nicht aktiviert", + "handle": "Griff", + "tags": "Etiketten", + "tagsText": "Etiketten-Text", + "multiIcon": "Mehrfachauswahl-Symbol", + "tabText": "Tab-Text", + "tabAccent": "Tab-Akzent", + "checkedBackground": "Aktivierter Hintergrund", + "uncheckedBackground": "Deaktivierter Hintergrund", + "uncheckedBorder": "Deaktivierter Rand", + "indicatorBackground": "Indikator-Hintergrund", + "tableCellText": "Zellentext", + "selectedRowBackground": "Ausgewählter Zeilenhintergrund", + "hoverRowBackground": "Zeilen-Hover-Hintergrund", + "hoverBackground": "Hover-Hintergrund", + "textTransform": "Textumwandlung", + "textDecoration": "Textdekoration", + "alternateRowBackground": "Alternierender Zeilenhintergrund", + "tableHeaderBackground": "Tabellenkopf-Hintergrund", + "tableHeaderText": "Tabellenkopf-Text", + "toolbarBackground": "Werkzeugleisten-Hintergrund", + "toolbarText": "Werkzeugleisten-Text", + "pen": "Stift", + "footerIcon": "Fußzeilen-Symbol", + "tips": "Tipps", + "margin": "Außenabstand", + "padding": "Innenabstand", + "marginLeft": "Linker Außenabstand", + "marginRight": "Rechter Außenabstand", + "marginTop": "Oberer Außenabstand", + "marginBottom": "Unterer Außenabstand", + "containerHeaderPadding": "Kopfzeilen-Innenabstand", + "containerFooterPadding": "Fußzeilen-Innenabstand", + "containerSiderPadding": "Seitenleisten-Innenabstand", + "containerBodyPadding": "Körper-Innenabstand", + "minWidth": "Mindestbreite", + "aspectRatio": "Seitenverhältnis", + "text": "Text", + "textSize": "Textgröße", + "textWeight": "Textgewicht", + "fontFamily": "Schriftart", + "fontStyle": "Schriftstil", + "backgroundImage": "Hintergrundbild", + "backgroundImageRepeat": "Hintergrundbild-Wiederholung", + "backgroundImageSize": "Hintergrundbild-Größe", + "backgroundImagePosition": "Hintergrundbild-Position", + "backgroundImageOrigin": "Hintergrundbild-Ursprung", + "headerBackgroundImage": "Kopfzeilen-Hintergrundbild", + "headerBackgroundImageRepeat": "Kopfzeilen-Bildwiederholung", + "headerBackgroundImageSize": "Kopfzeilen-Bildgröße", + "headerBackgroundImagePosition": "Kopfzeilen-Bildposition", + "headerBackgroundImageOrigin": "Kopfzeilen-Bildursprung", + "footerBackgroundImage": "Fußzeilen-Hintergrundbild", + "footerBackgroundImageRepeat": "Fußzeilen-Bildwiederholung", + "footerBackgroundImageSize": "Fußzeilen-Bildgröße", + "footerBackgroundImagePosition": "Fußzeilen-Bildposition", + "footerBackgroundImageOrigin": "Fußzeilen-Bildursprung", + "rotation": "Drehung", + "alternateBackground": "Alternative Hintergrundfarbe", + "headerText": "Textfarbe der Kopfzeile", + "labelColor": "Etikett Farbe", + "label": "Etikett Farbe", + "lineHeight": "Höhe der Linie", + "subTitleColor": "Untertitel Farbe", + "titleText": "Titel Farbe", + "success": "Erfolg Farbe", + "siderBackgroundImage": "Sider Hintergrundbild", + "siderBackgroundImageRepeat": "Sider Hintergrundbild Wiederholung", + "siderBackgroundImageSize": "Sider Hintergrundbild Größe", + "siderBackgroundImagePosition": "Sider Hintergrundbild Position", + "siderBackgroundImageOrigin": "Sider Hintergrundbild Ursprung", + "activeBackground": "Aktive Hintergrundfarbe", + "labelBackground": "Hintergrundfarbe des Etiketts", + "gradientBackground": "Farbverlauf Hintergrundfarbe", + "direction": "Richtung", + "chartOpacity": "Deckkraft", + "chartBoxShadow": "Box Schatten", + "chartBorderStyle": "Border Style", + "chartBorderRadius": "Border Radius", + "chartBorderWidth": "Border Width", + "chartTextSize": "Text Size", + "chartTextWeight": "Text Gewicht", + "chartFontFamily": "Schriftfamilie", + "chartFontStyle": "Font Style", + "chartBackgroundColor": "Hintergrundfarbe", + "chartGradientColor": "Farbverlauf", + "chartShadowColor": "Schattenfarbe", + "chartBorderColor": "Farbe der Umrandung", + "chartTextColor": "Textfarbe", + "detailSize": "Detail Größe", + "radiusTip": "Legt den Radius der Ecken des Elements fest. Beispiel: 5px, 50% oder 1em.", + "gapTip": "Legt den Abstand zwischen Zeilen und Spalten in einem Raster- oder Flexcontainer fest. Beispiel: 10px, 1rem oder 5%.", + "cardRadiusTip": "Definiert den Eckenradius für Kartenkomponenten. Beispiel: 10px, 15px.", + "borderWidthTip": "Legt die Breite des Randes des Elements fest. Beispiel: 1px, 0.5em oder dünn.", + "borderStyleTip": "Legt den Stil des Randes fest. Beispiel: solid, dashed, dotted oder none.", + "marginTip": "Definiert den äußeren Abstand um ein Element. Beispiel: 10px, 2em oder auto. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 0px 1px 5px 2px.", + "directionTip": "Legt die Richtung des Layouts fest. Beispiel: row, column oder row-reverse.", + "detailSizeTip": "Definiert die Größe bestimmter Details im Layout. Beispiel: 10px, 2em oder 80%.", + "chartOpacityTip": "Legt die Deckkraft des Diagramms fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent).", + "chartBoxShadowTip": "Definiert den Schatten, den das Diagramm wirft. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Legt den Stil der Diagrammrand fest. Beispiel: solid, dashed oder dotted.", + "chartBorderRadiusTip": "Definiert den Eckenradius der Diagrammgrenze. Beispiel: 10px, 20%.", + "chartBorderWidthTip": "Legt die Breite der Diagrammgrenze fest. Beispiel: 2px, 0.5em.", + "chartTextSizeTip": "Legt die Schriftgröße des Diagrammtexts fest. Beispiel: 16px, 1em, 120%.", + "chartTextWeightTip": "Legt die Schriftstärke des Diagrammtexts fest. Beispiel: normal, bold oder 700.", + "chartFontFamilyTip": "Legt die Schriftart für den Diagrammtext fest. Beispiel: Arial, Helvetica oder 'Times New Roman'.", + "chartFontStyleTip": "Legt den Schriftstil des Diagrammtexts fest. Beispiel: normal, italic oder oblique.", + "animationIterationCountTip": "Legt fest, wie oft eine Animation ausgeführt werden soll. Beispiel: infinite, 1 oder 3.", + "opacityTip": "Legt den Transparenzgrad des Elements fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent), 0 (unsichtbar).", + "boxShadowColorTip": "Legt die Farbe des Schattens fest. Beispiel: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Legt die Hintergrundfarbe des Diagramms fest. Beispiel: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Definiert die Farbverläufe für den Diagrammhintergrund. Beispiel: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Legt die Schattenfarbe des Diagramms fest. Beispiel: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Definiert die Farbe der Diagrammgrenze. Beispiel: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Legt die Farbe des Diagrammtexts fest. Beispiel: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Definiert den Schatten, der von einem Element geworfen wird. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Legt die Verzögerung vor Beginn der Animation fest. Beispiel: 1s, 500ms, 0.", + "animationDurationTip": "Legt die Dauer der Animation fest. Beispiel: 2s, 3s, 500ms.", + "paddingTip": "Definiert den inneren Abstand innerhalb eines Elements. Beispiel: 10px, 2em, 5%. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Definiert den Innenabstand für den Container-Header. Beispiel: 10px, 1rem.", + "containerSiderPaddingTip": "Definiert den Innenabstand für die Container-Seitenleiste. Beispiel: 8px, 1em.", + "containerFooterPaddingTip": "Definiert den Innenabstand für den Container-Footer. Beispiel: 12px, 1rem.", + "containerBodyPaddingTip": "Definiert den Innenabstand für den Container-Body. Beispiel: 15px, 2em.", + "textSizeTip": "Legt die Schriftgröße des Textes fest. Beispiel: 14px, 1.2em, 110%.", + "textWeightTip": "Definiert die Schriftstärke des Textes. Beispiel: normal, bold, 400.", + "fontFamilyTip": "Legt die Schriftart des Textes fest. Beispiel: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Definiert die Verzierung des Textes. Beispiel: underline, line-through, none.", + "textTransformTip": "Legt die Groß- und Kleinschreibung des Textes fest. Beispiel: uppercase, lowercase, capitalize.", + "fontStyleTip": "Definiert den Schriftstil des Textes. Beispiel: normal, italic, oblique.", + "backgroundImageTip": "Legt das Hintergrundbild eines Elements fest. Beispiel: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Legt das Hintergrundbild des Headers fest. Beispiel: url('header.jpg').", + "footerBackgroundImageTip": "Legt das Hintergrundbild des Footers fest. Beispiel: url('footer.jpg').", + "backgroundImageRepeatTip": "Definiert, wie das Hintergrundbild wiederholt wird. Beispiel: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Definiert, wie das Header-Hintergrundbild wiederholt wird. Beispiel: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Definiert, wie das Footer-Hintergrundbild wiederholt wird. Beispiel: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Definiert die Größe des Hintergrundbilds. Beispiel: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Legt die Position des Hintergrundbilds fest. Beispiel: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Legt den Bereich fest, in dem das Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Header-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Footer-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", + "rotationTip": "Legt den Rotationswinkel des Elements fest. Beispiel: 45deg, 90deg, -180deg.", + "lineHeightTip": "Legt die Höhe einer Textzeile fest. Beispiel: 1.5, 2, 120%.", + }, + "export": { + ...en.export, + + "hiddenDesc": "Wenn true, wird die Komponente ausgeblendet", + "disabledDesc": "Wenn true, ist die Komponente deaktiviert und nicht interaktiv", + "visibleDesc": "Wenn true, ist die Komponente sichtbar", + "inputValueDesc": "Aktueller Wert der Eingabe", + "invalidDesc": "Zeigt an, ob der Wert ungültig ist", + "placeholderDesc": "Platzhaltertext, wenn kein Wert eingestellt ist", + "requiredDesc": "Wenn true, ist ein gültiger Wert erforderlich", + "submitDesc": "Formular abschicken", + "richTextEditorValueDesc": "Aktueller Inhalt des Text-Editors", + "richTextEditorReadOnlyDesc": "Wenn true, ist der Editor schreibgeschützt", + "richTextEditorHideToolBarDesc": "Wenn true, wird die Symbolleiste ausgeblendet", + "jsonEditorDesc": "Aktuelle JSON-Daten", + "sliderValueDesc": "Aktuell ausgewählter Schieberegler Wert", + "sliderMaxValueDesc": "Maximaler Wert des Schiebereglers", + "sliderMinValueDesc": "Mindestwert des Schiebereglers", + "sliderStartDesc": "Wert des gewählten Startpunkts", + "sliderEndDesc": "Wert des ausgewählten Endpunkts", + "ratingValueDesc": "Aktuell ausgewählte Bewertung", + "ratingMaxDesc": "Maximaler Wert der Bewertung", + "datePickerValueDesc": "Aktuell ausgewähltes Datum", + "datePickerFormattedValueDesc": "Ausgewähltes Datum formatiert", + "datePickerTimestampDesc": "Zeitstempel des ausgewählten Datums", + "dateRangeStartDesc": "Startdatum des Bereichs", + "dateRangeEndDesc": "Enddatum des Bereichs", + "dateRangeStartTimestampDesc": "Zeitstempel des Startdatums", + "dateRangeEndTimestampDesc": "Zeitstempel des Enddatums", + "dateRangeFormattedValueDesc": "Formatierter Datumsbereich", + "dateRangeFormattedStartValueDesc": "Formatiertes Startdatum", + "dateRangeFormattedEndValueDesc": "Formatiertes Enddatum", + "timePickerValueDesc": "Aktuell gewählte Zeit", + "timePickerFormattedValueDesc": "Formatierte ausgewählte Zeit", + "timeRangeStartDesc": "Startzeit des Zeitbereichs", + "timeRangeEndDesc": "Endzeit des Zeitbereichs", + "timeRangeFormattedValueDesc": "Formatierter Zeitbereich", + "timeRangeFormattedStartValueDesc": "Formatierte Startzeit des Zeitbereichs", + "timeRangeFormattedEndValueDesc": "Formatierte Endzeit des Zeitbereichs", + "timeZone": "Zeitzone", + "timeZoneDesc": "Zeitzone des ausgewählten Datums", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Bitte gib eine gültige E-Mail Adresse ein", + "url": "Bitte gib eine gültige URL ein", + "regex": "Die Eingabe muss zum regulären Ausdruck passen.", + "maxLength": "Zu viele Zeichen, aktuell: {length}, maximal: {maxLength}", + "minLength": "Nicht genug Zeichen, aktuell: {length}, minimal: {minLength}", + "maxValue": "Wert überschreitet Maximum, aktuell: {value}, Maximum: {max}", + "minValue": "Wert unter Minimum, aktuell: {value}, Minimum: {min}", + "maxTime": "Zeit überschreitet Maximum, aktuell: {time}, Maximum: {maxTime}", + "minTime": "Zeit unter Minimum, aktuell: {time}, Minimum: {minTime}", + "maxDate": "Datum überschreitet Maximum, aktuell: {date}, Maximum: {maxDate}", + "minDate": "Datum unter Minimum, aktuell: {date}, Minimum: {minDate}", + }, + "query": { + ...en.query, + + "noQueries": "Keine Datenabfragen verfügbar.", + "queryTutorialButton": "Ansicht {value} Dokumente", + "datasource": "Deine Datenquellen", + "newDatasource": "Neue Datenquelle", + "generalTab": "Allgemein", + "notificationTab": "Benachrichtigung", + "variablesTab": "Variablen", + "advancedTab": "Erweiterte Einstellungen", + "showFailNotification": "Benachrichtigung bei Misserfolg anzeigen", + "failCondition": "Fehlerbedingungen für Misserfolg", + "failConditionTooltip1": "Passe die Fehlerbedingungen und die entsprechenden Benachrichtigungen an.", + "failConditionTooltip2": "Wenn eine Bedingung erfüllt ist, wird die Abfrage als fehlgeschlagen markiert und die entsprechende Benachrichtigung ausgelöst.", + "showSuccessNotification": "Benachrichtigung bei Erfolg anzeigen", + "successMessageLabel": "Erfolgsmeldung", + "successMessage": "Datenabfrage ist erfolgreich gelaufen", + "notifyDuration": "Dauer", + "notifyDurationTooltip": "Dauer der Benachrichtigung. Die Zeiteinheit kann \\'s\\' (Sekunde, Standard) oder \\'ms\\' (Millisekunde) sein. Der Standardwert ist {default}s. Das Maximum ist {max}s.", + "successMessageWithName": "{name} Lauf erfolgreich", + "failMessageWithName": "{name} Lauf fehlgeschlagen: {result}", + "showConfirmationModal": "Bestätigungsmodal vor der Ausführung anzeigen", + "confirmationMessageLabel": "Bestätigungsnachricht", + "confirmationMessage": "Bist du sicher, dass du diese Datenabfrage ausführen willst?", + "newQuery": "Neue Datenabfrage", + "newFolder": "Neue Mappe", + "recentlyUsed": "Kürzlich verwendet", + "folder": "Ordner", + "folderNotEmpty": "Der Ordner ist nicht leer", + "dataResponder": "Daten Aktor", + "tempState": "Temporärer Zustand", + "transformer": "Daten Transformator", + "quickRestAPI": "HTTP REST-Abfrage", + "quickStreamAPI": "Daten Stream-Abfrage", + "quickGraphql": "GraphQL-Abfrage", + "quickAlasql": "Local SQL Query", + "databaseType": "Datenbank-Typ", + "chooseDatabase": "Datenbank auswählen", + "lowcoderAPI": "Lowcoder-API", + "executeJSCode": "JavaScript-Code", + "importFromQueryLibrary": "von Abfragebibliothek", + "preparedDataQueries": "Ihre vorbereiteten Datenabfragen", + "adHocDataQueries": "Qick Data Queries (ohne vorbereitete Abfrage oder Datenquelle)", + "queryResultTransformer": "Manipulieren Sie eine Abfrageantwort, um Daten vor der Bindung zu transformieren", + "queryResultReactor": "Reagieren Sie auf jede Änderung eines dynamischen Datenwertes", + "importFromFile": "Aus Datei importieren", + "triggerType": "Ausgelöst, wenn...", + "triggerTypeAuto": "Eingaben ändern sich oder nach dem Laden der Seite", + "triggerTypePageLoad": "Nach dem Laden der Anwendung (Seite)", + "triggerTypeManual": "Manuell auslösen", + "triggerTypeInputChange": "Wenn sich Eingaben ändern", + "triggerTypeQueryExec": "Nach Ausführung einer Daten-Abfrage", + "triggerTypeTimeout": "Nach dem Laden der Anwendung (Seite) und Timeout", + "delayTime": "Verzögerungszeit", + "chooseDataSource": "Datenquelle wählen", + "method": "Methode", + "updateExceptionDataSourceTitle": "Fehlerhafte Datenquelle aktualisieren", + "updateExceptionDataSourceContent": "Aktualisiere die folgende Abfrage mit der gleichen Datenquelle:", + "update": "Update", + "disablePreparedStatement": "SQL Prepared Statements deaktivieren", + "disablePreparedStatementTooltip": "Die Deaktivierung von SQL Prepared Statements kann dynamisches SQL erzeugen, erhöht aber das Risiko von SQL-Injection", + "timeout": "Abbruch nach", + "timeoutTooltip": "Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Standardwert: {defaultSeconds} Sekunden. Maximaler Wert: {maxSeconds} Sekunden. Z.B. 300 (d.h. 300ms), 800ms, 5s.", + "periodic": "Diese Datenabfrage regelmäßig ausführen", + "periodicTime": "Zeitraum", + "periodicTimeTooltip": "Zeitraum zwischen aufeinanderfolgenden Ausführungen. Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Mindestwert: 100 ms. Bei Werten unter 100ms wird die periodische Ausführung deaktiviert. Z.B. 300 (d.h. 300ms), 800ms, 5s.", + "cancelPrevious": "Ignoriere die Ergebnisse früherer unvollendeter Datenabfragen", + "cancelPreviousTooltip": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen unvollständigen Datenabfragen ignoriert, wenn sie nicht abgeschlossen wurden, und diese ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", + "dataSourceStatusError": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen nicht abgeschlossenen Datenabfragen ignoriert, und die ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", + "success": "Erfolg", + "fail": "Fehler", + "successDesc": "Ausgelöst, wenn die Ausführung erfolgreich ist", + "failDesc": "Ausgelöst, wenn die Ausführung fehlschlägt", + "fixedDelayError": "Abfrage nicht ausgeführt", + "execSuccess": "Erfolgreich gelaufen", + "execFail": "Lauf fehlgeschlagen", + "execIgnored": "Die Ergebnisse dieser Datenabfrage wurden ignoriert", + "deleteSuccessMessage": "Erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden", + "dataExportDesc": "Daten, die durch die aktuelle Datenabfrage erhalten wurden", + "codeExportDesc": "Aktueller Query Status Code", + "successExportDesc": "Ob die aktuelle Datenabfrage erfolgreich ausgeführt wurde", + "messageExportDesc": "Von der aktuellen Datenabfrage zurückgegebene Informationen", + "extraExportDesc": "Andere Daten in der aktuellen Datenabfrage", + "isFetchingExportDesc": "Ist die aktuelle Datenabfrage in der Verarbeitung?", + "runTimeExportDesc": "Aktuelle Datenabfrage-Ausführungszeit (ms)", + "latestEndTimeExportDesc": "Letzte Laufzeit", + "triggerTypeExportDesc": "Auslöser Typ", + "chooseResource": "Wähle eine Ressource", + "createDataSource": "Eine neue Datenquelle erstellen", + "editDataSource": "Bearbeiten", + "datasourceName": "Datenquelle Name", + "datasourceNameRuleMessage": "Bitte gib einen Namen für die Datenquelle ein", + "generalSetting": "Allgemeine Einstellungen", + "advancedSetting": "Erweiterte Einstellungen", + "port": "Hafen", + "portRequiredMessage": "Bitte einen Port eingeben", + "portErrorMessage": "Bitte gib einen korrekten Port ein", + "connectionType": "Verbindungstyp", + "regular": "Regulär", + "host": "Gastgeber", + "hostRequiredMessage": "Bitte gib einen Host-Domänennamen oder eine IP-Adresse ein", + "userName": "Benutzer Name", + "password": "Passwort", + "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", + "uriRequiredMessage": "Bitte gib eine URI ein", + "urlRequiredMessage": "Bitte gib eine URL ein", + "uriErrorMessage": "Bitte gib eine korrekte URI ein", + "urlErrorMessage": "Bitte gib eine korrekte URL ein", + "httpRequiredMessage": "Bitte gib http:// oder https:// ein.", + "databaseName": "Datenbank Name", + "databaseNameRequiredMessage": "Bitte gib einen Datenbanknamen ein", + "useSSL": "SSL verwenden", + "userNameRequiredMessage": "Bitte gib deinen User-Namen ein", + "passwordRequiredMessage": "Bitte gib dein Passwort ein", + "authentication": "Authentifizierung", + "authenticationType": "Authentifizierung Typ", + "sslCertVerificationType": "SSL-Zertifikat-Verifizierung", + "sslCertVerificationTypeDefault": "CA-Zertifikat verifizieren", + "sslCertVerificationTypeSelf": "Selbstsigniertes Zertifikat verifizieren", + "sslCertVerificationTypeDisabled": "Deaktiviert", + "selfSignedCert": "Selbstsigniertes Zertifikat", + "selfSignedCertRequireMsg": "Bitte gib dein Zertifikat ein", + "enableTurnOffPreparedStatement": "SQL Prepared Statements für Abfragen aktivieren", + "enableTurnOffPreparedStatementTooltip": "Du kannst SQL Prepared Statements auf der Registerkarte \"Erweitert\" der Abfrage aktivieren oder deaktivieren.", + "serviceName": "Dienst Name", + "serviceNameRequiredMessage": "Bitte gib deinen Dienstnamen ein", + "useSID": "SID verwenden", + "connectSuccessfully": "Verbindung erfolgreich", + "saveSuccessfully": "Erfolgreich gerettet", + "database": "Datenbank", + "cloudHosting": "Der in der Cloud gehostete Lowcoder kann nicht auf lokale Dienste mit 127.0.0.1 oder localhost zugreifen. Versuche, dich mit öffentlichen Netzwerkdatenquellen zu verbinden oder verwende einen Reverse Proxy für private Dienste.", + "notCloudHosting": "Für den Einsatz von Docker-Hosts verwendet Lowcoder Bridge-Netzwerke, daher sind 127.0.0.1 und localhost als Hostadressen ungültig. Für den Zugriff auf Datenquellen auf lokalen Rechnern siehe", + "howToAccessHostDocLink": "Wie man auf die Host-API/DB zugreift", + "returnList": "Rückgabe Liste", + "chooseDatasourceType": "Datenquellentyp auswählen", + "viewDocuments": "Dokumente ansehen", + "testConnection": "Test Verbindung", + "save": "Speichern", + "whitelist": "Whitelist", + "whitelistTooltip": "Füge die IP-Adressen von Lowcoder nach Bedarf zu deiner Datenquellen-Zulassungsliste hinzu.", + "address": "Adresse: ", + "nameExists": "Name {name} existiert bereits", + "jsQueryDocLink": "Über JavaScript Query", + "dynamicDataSourceConfigLoadingText": "Laden einer zusätzlichen Datenquellenkonfiguration...", + "dynamicDataSourceConfigErrText": "Die Konfiguration der zusätzlichen Datenquelle konnte nicht geladen werden.", + "retry": "Wiederholen", + "categoryDatabase": "Datenbank", + "categoryBigdata": "Große Daten", + "categoryAi": "KI", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "App-Entwicklung", + "categoryWorkflow": "Arbeitsablauf", + "categoryMessaging": "Nachrichtenübermittlung", + "categoryAssets": "Assets & Speicher", + "categoryProjectManagement": "Projektmanagement", + "categoryCrm": "CRM", + "categoryEcommerce": "E-Commerce", + "categoryWebscrapers": "Web-Scraper & Open Data", + "categoryDocumentHandling": "Bericht & Dokumentenerstellung", + "categoryRPA": "Roboter Prozess Automatisierung", + "componentsUsingQueryTitle": "Abfrageverwendung", + "componentsUsingQuery": "Wo wird diese Abfrage verwendet", + "variables": "Variablen", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Schlüssel-Werte-Paare", + "object": "Objekt", + "allowMultiModify": "Mehrzeilige Änderungen zulassen", + "allowMultiModifyTooltip": "Wenn diese Option ausgewählt ist, werden alle Zeilen, die die Bedingungen erfüllen, bearbeitet. Andernfalls wird nur die erste Zeile, die die Bedingungen erfüllt, bearbeitet.", + "array": "Array", + "insertList": "Liste einfügen", + "insertListTooltip": "Werte werden eingefügt, wenn sie nicht existieren", + "filterRule": "Filter-Regel", + "updateList": "Liste aktualisieren", + "updateListTooltip": "Vorhandene Werte können durch die gleichen Werte der Einfügeliste überschrieben werden", + "sqlMode": "SQL-Mode", + "guiMode": "GUI-Mode", + "operation": "Operation", + "insert": "Einfügen", + "upsert": "Einfügen, aber aktualisieren, wenn es einen Konflikt gibt", + "update": "Update", + "delete": "Löschen", + "bulkInsert": "Stapel Einfügen", + "bulkUpdate": "Stapel Aktualisieren", + "table": "Tabelle", + "primaryKeyColumn": "Primärschlüsselspalte", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Roh-Abfragebefehl", + "queryTutorialButton": "Elasticsearch API Dokumente anzeigen", + "request": "Abfrage", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Zeilenindex", + "spreadsheetId": "Tabellenkalkulations-ID", + "sheetName": "Tabellen-Blatt Name", + "readData": "Daten lesen", + "appendData": "Zeile anhängen", + "updateData": "Zeile aktualisieren", + "deleteData": "Zeile löschen", + "clearData": "Reihe löschen", + "serviceAccountRequireMessage": "Bitte gib dein Servicekonto ein", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Sortieren", + "sortPlaceholder": "Platzhalter", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Exportieren nach JSON", + "noInput": "Die aktuelle Abfrage hat keine Eingabe", + "inputName": "Name", + "inputDesc": "Beschreibung", + "emptyInputs": "Keine Eingaben", + "clickToAdd": "Hinzufügen", + "chooseQuery": "Abfrage wählen", + "viewQuery": "Ansicht Abfrage", + "chooseVersion": "Version wählen", + "latest": "Neueste", + "publish": "Veröffentlichen", + "historyVersion": "Historische Version", + "deleteQueryLabel": "Abfrage löschen", + "deleteQueryContent": "Die Abfrage kann nach dem Löschen nicht wiederhergestellt werden. Die Abfrage löschen?", + "run": "Lauf", + "readOnly": "Nur lesen", + "exit": "Abbruch", + "recoverAppSnapshotContent": "Die aktuelle Abfrage zur Version {version} wiederherstellen", + "searchPlaceholder": "Suchabfrage", + "allQuery": "Alle Abfragen", + "deleteQueryTitle": "Abfrage löschen", + "unnamed": "Unbenannt", + "publishNewVersion": "Neue Version veröffentlichen", + "publishSuccess": "Erfolgreich veröffentlicht", + "version": "Version", + "desc": "Beschreibung", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Siehe ", + "extParamsTooltip": "Zusätzliche Verbindungsparameter konfigurieren", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Abfrage Arbeitsbereich Benutzer", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Roher Befehl", + "command": "Befehl", + "queryTutorial": "Redis-Befehlsdokumente anzeigen", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Wenn {type} ausgewählt ist, sollte das Werteformat {object} sein. Beispiel: {example}", + "text": "Text", + "file": "Datei", + "extraBodyTooltip": "Schlüsselwerte im Extra Body werden an den Body mit den Datentypen JSON oder Form Data angehängt", + "forwardCookies": "Cookies weiterleiten", + "forwardAllCookies": "Alle Cookies weiterleiten", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Anhang", + "attachmentTooltip": "Kann mit der Datei-Upload-Komponente verwendet werden, die Daten müssen konvertiert werden in: ", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Sender", + "recipient": "Empfänger", + "carbonCopy": "Durchschlag", + "blindCarbonCopy": "Blindkopie", + "subject": "Thema", + "content": "Inhalt", + "contentTooltip": "Unterstützt die Eingabe von Text oder HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Dashboards & Berichte", + "layout": "Layout und Navigation", + "forms": "Datenerhebung & Formulare", + "collaboration": "Meetings & Zusammenarbeit", + "projectmanagement": "Projektmanagement", + "scheduling": "Kalender & Terminplanung", + "documents": "Dokumenten- und Dateiverwaltung", + "itemHandling": "Handhabung von Inventar", + "multimedia": "Multimedia und Animation", + "integration": "Integration & Erweiterung", + "legacy": "Älter & Auslaufend", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Vorschlag Feld", + "autoCompleteCompDesc": "Ein Eingabefeld, das Vorschläge während der Eingabe anbietet und dadurch die Benutzererfahrung und Genauigkeit verbessert.", + "autoCompleteCompKeywords": "Vorschläge, Autovervollständigung, Tippen, Eingabe", + "inputCompName": "Eingabe Feld", + "inputCompDesc": "Ein grundlegendes Texteingabefeld, das es Benutzern ermöglicht, Text einzugeben und zu bearbeiten.", + "inputCompKeywords": "Text, Eingabe, Feld, Bearbeiten", + "textAreaCompName": "Text Bereich Feld", + "textAreaCompDesc": "Ein mehrzeiliges Texteingabefeld für längere Inhalte wie Kommentare oder Beschreibungen.", + "textAreaCompKeywords": "mehrzeilig, Textbereich, Eingabe, Text", + "passwordCompName": "Passwort Feld", + "passwordCompDesc": "Ein sicheres Eingabefeld für Passwörter, das Zeichen aus Datenschutzgründen maskiert.", + "passwordCompKeywords": "Passwort, Sicherheit, Eingabe, versteckt", + "richTextEditorCompName": "Text Editor", + "richTextEditorCompDesc": "Ein fortgeschrittener Texteditor, der reichhaltige Formatierungsoptionen wie Fett, Kursiv und Listen unterstützt.", + "richTextEditorCompKeywords": "Editor, Text, Formatierung, Rich Content", + "numberInputCompName": "Zahlen Feld", + "numberInputCompDesc": "Ein Eingabefeld speziell für numerische Eingaben mit Optionen zum Erhöhen und Verringern der Werte.", + "numberInputCompKeywords": "Nummer, Eingabe, Inkrement, Dekrement", + "sliderCompName": "Regler", + "sliderCompDesc": "Eine grafische Schiebereglerkomponente zur Auswahl eines Wertes oder Bereichs innerhalb einer festgelegten Skala.", + "sliderCompKeywords": "Schieberegler, Bereich, Eingabe, grafisch", + "rangeSliderCompName": "Bereich Regler", + "rangeSliderCompDesc": "Ein Schieberegler mit zwei Griffen zur Auswahl eines Wertebereichs, nützlich für Filterungen oder zum Festlegen von Grenzwerten.", + "rangeSliderCompKeywords": "Bereich, Schieberegler, Zweigriff, Filter", + "ratingCompName": "Bewertung", + "ratingCompDesc": "Eine Komponente zur Erfassung von Benutzerbewertungen, dargestellt durch Sterne.", + "ratingCompKeywords": "Bewertung, Sterne, Rückmeldung, Eingabe", + "switchCompName": "Schalter", + "switchCompDesc": "Ein Umschalter für Ein/Aus- oder Ja/Nein-Entscheidungen.", + "switchCompKeywords": "Umschalter, Schalter, ein/aus, Steuerung", + "selectCompName": "Auswahl", + "selectCompDesc": "Ein Dropdown-Menü zur Auswahl aus einer Liste von Optionen.", + "selectCompKeywords": "Dropdown, auswählen, Optionen, Menü", + "multiSelectCompName": "Mehrfach Auswahl", + "multiSelectCompDesc": "Eine Komponente, die die Auswahl mehrerer Elemente aus einer Dropdown-Liste ermöglicht.", + "multiSelectCompKeywords": "Mehrfachauswahl, mehrere, Dropdown, Auswahlmöglichkeiten", + "cascaderCompName": "Kaskade Auswahl", + "cascaderCompDesc": "Ein mehrstufiges Dropdown für die hierarchische Auswahl von Daten, beispielsweise bei der Standortauswahl.", + "cascaderCompKeywords": "Kaskadierer, hierarchisch, Dropdown, Stufen", + "checkboxCompName": "Kontrollkästchen", + "checkboxCompDesc": "Ein Standardkästchen für Optionen, die ausgewählt oder abgewählt werden können.", + "checkboxCompKeywords": "Kästchen, Optionen, auswählen, umschalten", + "radioCompName": "Options Feld", + "radioCompDesc": "Optionsfelder zur Auswahl einer Option aus einem Set, wobei nur eine Wahl erlaubt ist.", + "radioCompKeywords": "Optionsfeld, Schaltflächen, auswählen, Einzelwahl", + "segmentedControlCompName": "Segmente", + "segmentedControlCompDesc": "Eine Steuerung mit segmentierten Optionen zum schnellen Wechsel zwischen mehreren Auswahlmöglichkeiten.", + "segmentedControlCompKeywords": "segmentiert, Steuerung, wechseln, Optionen", + "stepControlCompName": "Schritte", + "stepControlCompDesc": "Eine Steuerung mit Schrittoptionen, die visuell geführte Schritte für Anwendungen wie Formulare oder Assistenten bietet.", + "stepControlCompKeywords": "Schritte, Steuerung, wechseln, Optionen", + "fileUploadCompName": "Upload", + "fileUploadCompDesc": "Eine Komponente zum Hochladen von Dateien mit Unterstützung für Drag-and-Drop und Dateiauswahl.", + "fileUploadCompKeywords": "Datei, hochladen, ziehen und ablegen, auswählen", + "dateCompName": "Datum Auswahl", + "dateCompDesc": "Eine Datumsauswahlkomponente zum Auswählen von Daten aus einem Kalenderinterface.", + "dateCompKeywords": "Datum, Auswähler, Kalender, auswählen", + "dateRangeCompName": "Datum Bereich Auswahl", + "dateRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitraums, nützlich für Buchungssysteme oder Filter.", + "dateRangeCompKeywords": "Datumsbereich, auswählen, Buchung, filtern", + "timeCompName": "Zeit Auswahl", + "timeCompDesc": "Eine Zeitwahlkomponente zur Auswahl spezifischer Tageszeiten.", + "timeCompKeywords": "Zeit, Auswähler, auswählen, Uhr", + "timeRangeCompName": "Zeitraum Auswahl", + "timeRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitintervalls, oft verwendet in Planungsanwendungen.", + "timeRangeCompKeywords": "Zeitraum, auswählen, Planung, Dauer", + "buttonCompName": "Button", + "buttonCompDesc": "Eine vielseitige Knopfkomponente für das Absenden von Formularen, das Auslösen von Aktionen oder das Navigieren.", + "buttonCompKeywords": "Knopf, absenden, Aktion, navigieren", + "meetingControlCompName": "Icon Taste", + "meetingCompDesc": "Eine Steuerungstaste mit Icons.", + "meetingCompKeywords": "Steuerung, Taste, Icons", + "linkCompName": "Link zu", + "linkCompDesc": "Eine Komponente zur Anzeige von Hyperlinks für die Navigation oder zum Verlinken auf externe Ressourcen.", + "linkCompKeywords": "Verknüpfung, Hyperlink, Navigation, extern", + "scannerCompName": "Code Scanner", + "scannerCompDesc": "Eine Komponente zum Scannen von Barcodes, QR-Codes und anderen ähnlichen Daten.", + "scannerCompKeywords": "Scanner, Barcode, QR-Code, Scannen", + "dropdownCompName": "Auswahlliste", + "dropdownCompDesc": "Ein Dropdown-Menü zur kompakten Darstellung einer Liste von Optionen.", + "dropdownCompKeywords": "Dropdown, Menü, Optionen, auswählen", + "toggleButtonCompName": "Umschalter", + "toggleButtonCompDesc": "Ein Knopf, der zwischen zwei Zuständen oder Optionen umschalten kann.", + "toggleButtonCompKeywords": "Umschalten, Knopf, Schalter, Zustand", + "textCompName": "Text Anzeige", + "textCompDesc": "Eine einfache Komponente zur Anzeige von statischem oder dynamischem Textinhalt einschließlich Markdown-Formatierung.", + "textCompKeywords": "Text, Anzeige, statisch, dynamisch", + "tableCompName": "Tabelle", + "tableCompDesc": "Eine umfangreiche Tabellenkomponente zur Darstellung von Daten in einem strukturierten Tabellenformat, mit Optionen für Sortierung und Filterung, Baumdatenanzeige und erweiterbare Zeilen.", + "tableCompKeywords": "Tabelle, Daten, Sortierung, Filterung", + "imageCompName": "Bild", + "imageCompDesc": "Eine Komponente zur Anzeige von Bildern, die verschiedene Formate basierend auf URI oder Base64-Daten unterstützt.", + "imageCompKeywords": "Bild, Anzeige, Medium, Base64", + "progressCompName": "Fortschritt Anzeige", + "progressCompDesc": "Ein visueller Indikator des Fortschritts, der typischerweise verwendet wird, um den Fertigstellungsstatus einer Aufgabe zu zeigen.", + "progressCompKeywords": "Fortschritt, Indikator, Status, Aufgabe", + "progressCircleCompName": "Fortschritt Anzeige Kreis", + "progressCircleCompDesc": "Ein kreisförmiger Fortschrittsindikator, der häufig für Ladezustände oder zeitgebundene Aufgaben verwendet wird.", + "progressCircleCompKeywords": "Kreis, Fortschritt, Indikator, Laden", + "fileViewerCompName": "Datei Anzeiger", + "fileViewerCompDesc": "Eine Komponente zur Anzeige verschiedener Dateitypen, einschließlich Dokumente und Bilder.", + "fileViewerCompKeywords": "Datei, Anzeiger, Dokument, Bild", + "dividerCompName": "Trennlinie", + "dividerCompDesc": "Eine visuelle Trennkomponente, die verwendet wird, um Inhalte oder Abschnitte innerhalb eines Layouts zu separieren.", + "dividerCompKeywords": "Trennlinie, Separator, Layout, Gestaltung", + "qrCodeCompName": "QRCode Anzeiger", + "qrCodeCompDesc": "Eine Komponente zur Anzeige von QR-Codes, nützlich für schnelles Scannen und Informationsübertragung.", + "qrCodeCompKeywords": "QR-Code, Scannen, Barcode, Information", + "formCompName": "Formular", + "formCompDesc": "Eine Containerkomponente für die Erstellung strukturierter Formulare mit verschiedenen Eingabetypen.", + "formCompKeywords": "Formular, Eingabe, Container, Struktur", + "jsonSchemaFormCompName": "JSON Schema Formular", + "jsonSchemaFormCompDesc": "Eine dynamische Formularkomponente, die basierend auf einem JSON-Schema generiert wird.", + "jsonSchemaFormCompKeywords": "JSON, Schema, Formular, dynamisch", + "containerCompName": "Container", + "containerCompDesc": "Ein Allzweck-Container für das Layout und die Organisation von UI-Elementen.", + "containerCompKeywords": "Container, Layout, Organisation, UI", + "floatTextContainerCompName": "Text Umbruch Container", + "floatTextContainerCompDesc": "Eine Komponente zur Anzeige von Text, die den Inhalt dynamisch anpasst und einfließen lässt.", + "floatTextContainerCompKeywords": "Container, Layout, Text, fließend", + "collapsibleContainerCompName": "Klapp Container", + "collapsibleContainerCompDesc": "Ein Container, der erweitert oder zusammengeklappt werden kann, ideal für die Verwaltung der Sichtbarkeit von Inhalten.", + "collapsibleContainerCompKeywords": "klappbar, Container, erweitern, zusammenklappen", + "tabbedContainerCompName": "Register Karten Container", + "tabbedContainerCompDesc": "Ein Container mit Registerkartennavigation zur Organisation von Inhalten in separaten Bereichen.", + "tabbedContainerCompKeywords": "Registerkarten, Container, Navigation, Bereiche", + "pageLayoutCompName": "Seiten Layout", + "pageLayoutCompDesc": "Ein Container, der es ermöglicht, ein Layout mit Kopfzeile, Seitenleiste, Fußzeile und Hauptinhaltsbereichen zu erstellen.", + "pageLayoutCompKeywords": "Layout, Container, Navigation, Seiten", + "modalCompName": "Modal", + "modalCompDesc": "Eine Pop-up-Modalkomponente zur Anzeige von Inhalten, Alarmen oder Formularen im Fokus.", + "modalCompKeywords": "Modal, Pop-up, Alarm, Formular", + "listViewCompName": "Listen Ansicht", + "listViewCompDesc": "Eine Komponente zur Anzeige einer Liste von Elementen oder Daten, in die andere Komponenten eingefügt werden können, ähnlich einem Repeater.", + "listViewCompKeywords": "Liste, Ansicht, Anzeige, Repeater", + "gridCompName": "Grid Ansicht", + "gridCompDesc": "Eine flexible Gitterkomponente zur Erstellung strukturierter Layouts mit Zeilen und Spalten, eine Erweiterung der Listenansicht.", + "gridCompKeywords": "Gitter, Layout, Zeilen, Spalten", + "navigationCompName": "Navigation", + "navigationCompDesc": "Eine Navigationskomponente zum Erstellen von Menüs, Brotkrumen oder Tabs für die Seitennavigation.", + "navigationCompKeywords": "Navigation, Menü, Brotkrumen, Tabs", + "iframeCompName": "IFrame", + "iframeCompDesc": "Eine Inline-Frame-Komponente zum Einbetten externer Webseiten und Anwendungen oder Inhalte innerhalb der Anwendung.", + "iframeCompKeywords": "IFrame, einbetten, Webseite, Inhalt", + "customCompName": "Code Komponente", + "customCompDesc": "Eine flexible, programmierbare Komponente zur Erstellung einzigartiger, benutzerdefinierter UI-Elemente, die speziell auf Ihre Bedürfnisse zugeschnitten sind.", + "customCompKeywords": "benutzerdefiniert, benutzerdefiniert, flexibel, programmierbar", + "moduleCompName": "App Modul", + "moduleCompDesc": "Verwenden Sie Module, um Mikro-Apps zu erstellen, die spezifische Funktionen oder Merkmale kapseln. Module können dann eingebettet und in allen Apps wiederverwendet werden.", + "moduleCompKeywords": "Modul, Mikro-App, Funktionalität, wiederverwendbar", + "jsonExplorerCompName": "JSON Anzeiger", + "jsonExplorerCompDesc": "Eine Komponente zum visuellen Erkunden und Interagieren mit JSON-Datenstrukturen.", + "jsonExplorerCompKeywords": "JSON, Explorer, Daten, Struktur", + "jsonEditorCompName": "JSON-Editor", + "jsonEditorCompDesc": "Eine Editor-Komponente zum Erstellen und Modifizieren von JSON-Daten mit Validierung und Syntaxhervorhebung.", + "jsonEditorCompKeywords": "JSON, Editor, modifizieren, validieren", + "treeCompName": "Baum Struktur", + "treeCompDesc": "Eine Baumstrukturkomponente zur Darstellung hierarchischer Daten, wie z. B. Dateisysteme oder Organigramme.", + "treeCompKeywords": "Baum, hierarchisch, Daten, Struktur", + "treeSelectCompName": "Baum Auswahl", + "treeSelectCompDesc": "Eine Auswahlkomponente, die Optionen in einem hierarchischen Baumformat präsentiert, was eine organisierte und verschachtelte Auswahl ermöglicht.", + "treeSelectCompKeywords": "Baum, auswählen, hierarchisch, verschachtelt", + "audioCompName": "Audio", + "audioCompDesc": "Eine Komponente zur Einbettung von Audioinhalten, mit Steuerungselementen für Wiedergabe und Lautstärkeregelung.", + "audioCompKeywords": "Audio, Wiedergabe, Ton, Musik", + "videoCompName": "Video", + "videoCompDesc": "Eine Multimediakomponente zum Einbetten und Abspielen von Videoinhalten, unterstützt verschiedene Formate.", + "videoCompKeywords": "Video, Multimedia, Abspielen, Einbetten", + "drawerCompName": "Schublade", + "drawerCompDesc": "Ein schiebbares Paneel, das für zusätzliche Navigation oder zur Inhaltsanzeige verwendet werden kann, typischerweise vom Bildschirmrand ausgehend.", + "drawerCompKeywords": "Schublade, schiebbar, Paneel, Navigation", + "chartCompName": "Diagramm", + "chartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Graphen.", + "chartCompKeywords": "Diagramm, Graph, Daten, Visualisierung", + "carouselCompName": "Bild Karussell", + "carouselCompDesc": "Eine rotierende Karussellkomponente zur Präsentation von Bildern, Bannern oder Inhaltsfolien.", + "carouselCompKeywords": "Karussell, Bilder, Rotation, Präsentation", + "imageEditorCompName": "Bild Editor", + "imageEditorCompDesc": "Eine interaktive Komponente zur Bearbeitung und Manipulation von Bildern, bietet verschiedene Werkzeuge und Filter.", + "imageEditorCompKeywords": "Bild, Editor, bearbeiten, Werkzeuge", + "mermaidCompName": "Mermaid Diagramm", + "mermaidCompDesc": "Eine Komponente zum Erstellen komplexer Diagramme und Flussdiagramme basierend auf der Mermaid-Syntax.", + "mermaidCompKeywords": "Mermaid, Diagramme, Flussdiagramme, Visualisierung", + "calendarCompName": "Kalender", + "calendarCompDesc": "Eine Kalenderkomponente zur Anzeige von Daten und Ereignissen, mit Ansichtsoptionen für Monat, Woche oder Tag.", + "calendarCompKeywords": "Kalender, Daten, Ereignisse, Planung", + "signatureCompName": "Unterschrift", + "signatureCompDesc": "Eine Komponente zur Erfassung digitaler Unterschriften, nützlich für Genehmigungs- und Verifizierungsprozesse.", + "signatureCompKeywords": "Unterschrift, digital, Genehmigung, Verifizierung", + "jsonLottieCompName": "Lottie Animationen", + "jsonLottieCompDesc": "Eine Komponente zur Anzeige von Lottie-Animationen, bietet leichtgewichtige und skalierbare Animationen basierend auf JSON-Daten.", + "jsonLottieCompKeywords": "Lottie, Animation, JSON, skalierbar", + "timelineCompName": "Zeitleiste", + "timelineCompDesc": "Eine Komponente zur Darstellung von Ereignissen oder Aktionen in einer chronologischen Reihenfolge, visuell dargestellt entlang einer linearen Zeitleiste.", + "timelineCompKeywords": "Zeitleiste, Ereignisse, chronologisch, Geschichte", + "commentCompName": "Kommentar", + "commentCompDesc": "Eine Komponente zum Hinzufügen und Anzeigen von Benutzerkommentaren, unterstützt verschachtelte Antworten und Benutzerinteraktion.", + "commentCompKeywords": "Kommentar, Diskussion, Benutzerinteraktion, Rückmeldung", + "mentionCompName": "Erwähnung", + "mentionCompDesc": "Eine Komponente, die das Erwähnen von Benutzern oder Tags innerhalb von Textinhalten unterstützt, typischerweise verwendet in sozialen Medien oder kollaborativen Plattformen.", + "mentionCompKeywords": "Erwähnung, Tag, Benutzer, soziale Medien", + "responsiveLayoutCompName": "Reaktionsfähiges Layout", + "responsiveLayoutCompDesc": "Eine Layoutkomponente, die entwickelt wurde, um sich verschiedenen Bildschirmgrößen und Geräten anzupassen, und so ein konsistentes Benutzererlebnis sicherstellt.", + "responsiveLayoutCompKeywords": "responsiv, Layout, anpassen, Bildschirmgröße", + "splitLayoutCompName": "Split Layout", + "splitLayoutCompDesc": "Eine Layout-Komponente, um mehrere Ansichtsbereiche zu organisieren und Bereiche horizontal oder vertikal zu trennen. Sie bietet dem Benutzer die Möglichkeit, die Breite oder Höhe der Ansichtsbereiche per Drag & Drop anzupassen.", + "splitLayoutCompKeywords": "Teilen, Splitter, Layout, Anpassen, Bildschirmgröße", + "iconCompName": "Icons", + "iconCompDesc": "Verwenden Sie verschiedene Icons, um die visuelle Anziehungskraft und das Benutzererlebnis Ihrer Anwendung zu verbessern.", + "iconCompKeywords": "Icons, Piktogramme, Symbole, Formen", + "tourCompName": "Tour", + "tourCompDesc": "Eine Produktführung zur Anleitung der Benutzer.", + "tourCompKeywords": "Tour, Produktführung, Walkthrough, interaktiver Rundgang", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "Eine Visualisierungskomponente zur Darstellung von Projektmanagement-Zustandsdaten in einem Hill-Chart-Format.", + "hillchartCompKeywords": "projektmanagement, hill chart, visualisierung, daten", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Eine Komponente zur Anzeige interaktiver Karten unter Verwendung von OpenLayers, mit Unterstützung für verschiedene Kartenebenen und Funktionen.", + "openLayersGeoMapCompKeywords": "openlayers, geokarte, interaktiv, kartenebenen", + "chartsGeoMapCompName": "Geo Map Charts", + "chartsGeoMapCompDesc": "Eine Komponente zur Visualisierung von geografischen Daten auf interaktiven Karten mit dynamischen Diagrammen", + "chartsGeoMapCompKeywords": "Geokarte, Diagramme, Visualisierung, geografische Daten", + "bpmnEditorCompName": "BPMN-Editor", + "bpmnEditorCompDesc": "Eine Komponente zum Anzeigen, Erstellen und Bearbeiten von BPMN-Diagrammen, die verschiedene BPMN-Elemente und -Funktionen unterstützt.", + "bpmnEditorCompKeywords": "BPMN, Editor, Diagramme, Elemente, Arbeitsabläufe", + "turnstileCaptchaCompName": "Drehkreuz Captcha", + "turnstileCaptchaCompDesc": "Eine Captcha-Komponente zur Verifizierung von Benutzern gegenüber Bots.", + "turnstileCaptchaCompKeywords": "Captcha, Überprüfung, Identität, Sicherheit", + "pivotTableCompName": "Pivot Table", + "pivotTableCompDesc": "Ein Datenzusammenfassungs- und Analysewerkzeug zum Organisieren und Aggregieren von Daten in einem tabellarischen Format.", + "pivotTableCompKeywords": "Pivot-Tabelle, Daten, Analyse, Aggregation", + "funnelChartCompName": "Trichterdiagramm", + "funnelChartCompDesc": "Ein Visualisierungstool zur Darstellung der fortschreitenden Datenreduzierung in verschiedenen Phasen.", + "funnelChartCompKeywords": "trichterdiagramm, verkauf, umwandlungen, prozess", + "gaugeChartCompName": "Pegelkarte", + "gaugeChartCompDesc": "Ein Diagramm, das Daten als Messwert auf einer Skala anzeigt. Es ist nützlich, um den Status oder das Niveau von etwas anzuzeigen.", + "gaugeChartCompKeywords": "Messdiagramm, Metriken, Leistung, Status", + "sankeyChartCompName": "Sankey-Diagramm", + "sankeyChartCompDesc": "Ein Flussdiagramm, bei dem die Breite der Pfeile proportional zur Flussrate ist. Es dient zur Darstellung von Energie-, Material- oder Kostentransfers.", + "sankeyChartCompKeywords": "Sankey-Diagramm, Fluss, Energie, Kosten", + "candleStickChartCompName": "Candlestick-Diagramm", + "candleStickChartCompDesc": "Eine Art von Finanzdiagramm, das zur Beschreibung von Kursbewegungen eines Wertpapiers, Derivats oder einer Währung verwendet wird.", + "candleStickChartCompKeywords": "Candlestick-Diagramm, Aktien, Handel, Finanzen", + "radarChartCompName": "Radarkarte", + "radarChartCompDesc": "Eine grafische Methode zur Darstellung von multivariaten Daten in Form eines zweidimensionalen Diagramms von drei oder mehr quantitativen Variablen.", + "radarChartCompKeywords": "Radardiagramm, multivariate, Leistungsanalyse", + "heatmapChartCompName": "Heatmap-Diagramm", + "heatmapChartCompDesc": "Eine grafische Darstellung von Daten, bei der einzelne Werte als Farben dargestellt werden.", + "heatmapChartCompKeywords": "Heatmap, Datenvisualisierung, Intensität", + "graphChartCompName": "Graphisches Diagramm", + "graphChartCompDesc": "Ein Diagramm, das ein Netzwerk von Knoten darstellt, die durch Kanten verbunden sind, und das zur Darstellung von Verbindungen und Beziehungen nützlich ist.", + "graphChartCompKeywords": "Diagramm, Netzwerke, Beziehungen, Knoten", + "treeChartCompName": "Baumdiagramm", + "treeChartCompDesc": "Ein Diagramm, das die Hierarchie in einer baumartigen Struktur visuell darstellt und die Beziehungen zwischen den verschiedenen Knoten zeigt.", + "treeChartCompKeywords": "Baumdiagramm, Hierarchie, Organisation", + "treemapChartCompName": "Baumdiagramm", + "treemapChartCompDesc": "Ein Diagramm, das verschachtelte Rechtecke zur proportionalen Darstellung hierarchischer Daten verwendet.", + "treemapChartCompKeywords": "Baumstruktur, Hierarchie, Datenvisualisierung", + "sunburstChartCompName": "Sunburst-Karte", + "sunburstChartCompDesc": "Eine radiale raumfüllende Visualisierungstechnik, die hierarchische Beziehungen durch Schichten eines Kreises veranschaulicht.", + "sunburstChartCompKeywords": "Sonnenglockentabelle, radial, Hierarchie", + "themeriverChartCompName": "Thema Flusskarte", + "themeriverChartCompDesc": "Eine Visualisierung, die einem Flussdiagramm ähnelt, das die Veränderungen eines Datensatzes im Laufe der Zeit über Kategorien hinweg zeigt.", + "themeriverChartCompKeywords": "Thema Fluss, Zeitreihen, Trends", + "basicChartCompName": "Grundlegende Tabelle", + "basicChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Schaubildern.", + "basicChartCompKeywords": "Diagramm, Grafik, Daten, Visualisierung", + "shapeCompName": "Formen", + "shapeCompDesc": "Eine Sammlung geometrischer Formen zur Verwendung in Diagrammen, Illustrationen und Visualisierungen.", + "shapeCompKeywords": "Formen, geometrisch, Diagramme, Illustrationen", + "ganttChartCompName": "Gantt-Diagramm", + "ganttChartCompDesc": "Ein Diagramm, das einen Projektplan mit den Start- und Endterminen von Elementen und Abhängigkeiten darstellt.", + "ganttChartCompKeywords": "Gantt-Diagramm, Projektmanagement, Zeitplan", + "kanbanCompName": "Kanban-Tafel (Vorschau!)", + "kanbanCompDesc": "Eine visuelle Organisationsmethode zur Verwaltung von Aufgaben und Workflows in einem Board mit Spalten und Karten.", + "kanbanCompKeywords": "Kanban, Tafel, Arbeitsablauf, Aufgaben", + "pieChartCompName": "Elster Chart", + "pieChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Kreisdiagrammen.", + "pieChartCompKeywords": "Diagramm, Daten, Visualisierung", + "lineChartCompName": "Liniendiagramm", + "lineChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Liniendiagrammen.", + "lineChartCompKeywords": "Diagramm, Daten, Visualisierung", + "barChartCompName": "Balkendiagramm", + "barChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Balkendiagrammen.", + "barChartCompKeywords": "Diagramm, Daten, Visualisierung", + "scatterChartCompName": "Punktediagramm", + "scatterChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten mit Streudiagrammen.", + "scatterChartCompKeywords": "Diagramm, Daten, Visualisierung", + "colorPickerCompName": "Farbwähler", + "colorPickerCompDesc": "Intuitive Farbauswahl zur individuellen Gestaltung.", + "colorPickerCompKeywords": "farbe, auswahl, anpassung", + "floatButtonCompName": "Schwimmer-Taste", + "floatButtonCompDesc": "Eine schwebende Aktionstaste für markante und schnelle Aktionen.", + "floatButtonCompKeywords": "Schwimmende Taste, Aktion, Schnell", + "avatarCompName": "Avatar", + "avatarCompDesc": "Zeigt Benutzeravatare oder Profilbilder zur persönlichen Identifizierung an.", + "avatarCompKeywords": "Avatar, Profilbild, Benutzerkennung", + "avatarGroupCompName": "Avatar-Gruppe", + "avatarGroupCompDesc": "Eine Gruppe von Avataren, die mehrere Benutzer oder Entitäten auf kompakte und visuell ansprechende Weise repräsentieren.", + "avatarGroupCompKeywords": "Avatar-Gruppe, Benutzer, Entitäten, kompakt", + "transferName": "Übertragung", + "transferDesc": "Erleichtert den Datentransfer zwischen zwei Listen mit Drag-and-Drop-Funktionalität.", + "transferKeywords": "Übertragung, Daten, Drag-and-Drop", + "cardCompName": "Inhalt Karte", + "cardCompDesc": "Eine Kartenkomponente zur strukturierten Darstellung von Informationen oder Inhalten.", + "cardCompKeywords": "Karte, Information, Inhalt, Anzeige", + "timerCompName": "Zeitschaltuhr", + "timerCompDesc": "Eine Komponente, die einen Countdown oder die verstrichene Zeit anzeigt, nützlich für die Verfolgung von Zeiträumen und Fristen.", + "timerCompKeywords": "Timer, Countdown, verstrichene Zeit, Verfolgung, Dauern, Fristen", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Dokumentation ansehen", + "menuViewPlayground": "Interaktiven Spielplatz ansehen", + "menuUpgradeToLatest": "Upgrade auf die neueste Version", + "nameNotEmpty": "Kann nicht leer sein", + "nameRegex": "Muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern und Unterstriche (_) enthalten", + "nameJSKeyword": "Kann kein JavaScript-Schlüsselwort sein", + "nameGlobalVariable": "Kann kein globaler Variablenname sein", + "nameExists": "Name {name} Existiert bereits", + "getLatestVersionMetaError": "Die neueste Version konnte nicht abgerufen werden, bitte versuche es später.", + "needNotUpgrade": "Die aktuelle Version ist bereits die neueste.", + "compNotFoundInLatestVersion": "Aktuelle Komponente nicht in der neuesten Version gefunden.", + "upgradeSuccess": "Erfolgreich auf die neueste Version upgegradet.", + "searchProp": "Suche", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Wiederholen", + "resetAfterSubmit": "Zurücksetzen nach erfolgreichem Absenden des Formulars", + "jsonSchema": "JSON-Schema", + "uiSchema": "UI Schema", + "schemaTooltip": "Siehe", + "defaultData": "Vorausgefüllte Formulardaten", + "dataDesc": "Aktuelle Formulardaten", + "required": "Erforderlich", + "maximum": "Der Maximalwert ist {value}", + "minimum": "Der Mindestwert ist {value}", + "exclusiveMaximum": "Sollte kleiner sein als {value}", + "exclusiveMinimum": "Sollte größer sein als {value}", + "multipleOf": "Sollte ein Vielfaches von {value} sein", + "minLength": "Mindestens {value} Zeichen", + "maxLength": "Höchstens {value} Zeichen", + "pattern": "Sollte dem Muster {value} entsprechen", + "format": "Sollte dem Format {value} entsprechen", + }, + "select": { + ...en.select, + + "inputValueDesc": "Eingabe Suchwert", + }, + "customComp": { + ...en.customComp, + + "text": "Es ist ein guter Tag.", + "triggerQuery": "Trigger-Abfrage", + "updateData": "Daten aktualisieren", + "updateText": "Ich bin auch in guter Stimmung, jetzt meine eigene Komponente mit Lowcoder zu entwickeln!", + "sdkGlobalVarName": "Lowcoder", + "data": "Daten, die du an die benutzerdefinierte Komponente übergeben willst", + "code": "Code deiner benutzerdefinierten Komponente", + }, + "tree": { + ...en.tree, + + "placeholder": "Bitte auswählen", + "selectType": "Typ auswählen", + "noSelect": "Keine Auswahl", + "singleSelect": "Einzeln auswählen", + "multiSelect": "Mehrfachauswahl", + "checkbox": "Kontrollkästchen", + "checkedStrategy": "Geprüfte Strategie", + "showAll": "Alle Knotenpunkte", + "showParent": "Nur übergeordnete Knotenpunkte", + "showChild": "Nur Kind-Knoten", + "autoExpandParent": "Auto Expand Elternteil", + "checkStrictly": "Streng prüfen", + "checkStrictlyTooltip": "TreeNode genau prüfen; Parent TreeNode und Children TreeNodes sind nicht assoziiert", + "treeData": "Baumdaten", + "treeDataDesc": "Aktuelle Baumdaten", + "value": "Standardwerte", + "valueDesc": "Aktuelle Werte", + "expanded": "Erweitert Werte", + "expandedDesc": "Aktuelle erweiterte Werte", + "defaultExpandAll": "Standard Alle Knoten erweitern", + "showLine": "Linie anzeigen", + "showLeafIcon": "Blattsymbol anzeigen", + "treeDataAsia": "Asien", + "treeDataChina": "China", + "treeDataBeijing": "Peking", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Japan", + "treeDataEurope": "Europa", + "treeDataEngland": "England", + "treeDataFrance": "Frankreich", + "treeDataGermany": "Deutschland", + "treeDataNorthAmerica": "Nord-Amerika", + "helpLabel": "Knotenpunkt Etikett", + "helpValue": "Einzigartiger Knotenpunktwert im Baum", + "helpChildren": "Kinder Knoten", + "helpDisabled": "Deaktiviert den Knotenpunkt", + "helpSelectable": "Ob der Knoten wählbar ist (Single/Multi Select Typ)", + "helpCheckable": "Ob ein Kontrollkästchen angezeigt werden soll (Checkbox-Typ)", + "helpDisableCheckbox": "Deaktiviert das Kontrollkästchen (Checkbox-Typ)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Veranstaltungstest", + "methodTest": "Methode Test", + "inputTest": "Eingangstest", + }, + "password": { + ...en.password, + + "label": "Passwort", + "placeholder": "Bitte gib ein sicheres Passwort ein", + "conformLabel": "Passwort Bestätigung", + "conformPlaceholder": "Bitte das Passwort zur Bestätigung nochmal eingeben", + "visibilityToggle": "Sichtbarkeit anzeigen Toggle", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Symbolleiste anpassen", + "toolbarDescription": "Du kannst die Symbolleiste individuell anpassen. Weitere Informationen findest du unter: https://quilljs.com/docs/modules/toolbar/.", + "placeholder": "Bitte eingeben...", + "hideToolbar": "Symbolleiste ausblenden", + "content": "Inhalt", + "title": "Titel", + "save": "Speichern", + "link": "Link:", + "edit": "bearbeiten", + "remove": "entfernen", + "defaultValue": "Basis Inhalt", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Benutzerdefiniert", + "backTop": "Zurück Oben", + "buttonType": "Button Type", + "buttonShape": "Taste Form", + "square": "Platz", + "circle": "Kreis", + "description": "Beschreibung", + "badge": "Abzeichen", + "primary": "Primäre Seite", + "default": "Standard", + "buttonTheme": "Schaltfläche Thema", + "badgeColor": "Farbe des Abzeichens", + "dot": "Abzeichen als Punkt", + "hidden": "Versteckt", + "visibilityHeight": "Sichtbarkeit Höhe", + "visibilityHeightDesc": "Scrollen bis zu einer bestimmten Höhe, bevor die Schaltfläche \"Zurück zum Anfang\" angezeigt wird, 0 wird immer angezeigt, Bearbeitungsmodus kann keine Vorschau in Echtzeit anzeigen", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Auslöser Ereignis", + "click": "Klicken Sie auf", + "hover": "schweben", + "disabledAlpha": "Alpha-Auswahl deaktivieren", + "recommended": "Empfohlen", + "showPresets": "Farbvoreinstellungen anzeigen", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Schaltfläche \"Schließen\" anzeigen", + "Type": "Abzeichen Typ", + "Count": "Abzeichen zählen", + "Size": "Größe des Abzeichens", + "SizeDefault": "Standard", + "SizeSmall": "Klein", + "overflowCount": "Überlaufzahl", + "Title": "Titel des Abzeichens", + "dot": "Punkt", + "number": "Nummer", + "tooltip": "QuickInfo", + }, + "gantt": { + ...en.gantt, + + "key": "Schlüssel", + "title": "Titel", + "project": "Projekt", + "from": "Von", + "minute": "Minute", + "hour": "Stunde", + "day": "Tag", + "week": "Woche", + "month": "Monat", + "year": "Jahr", + "quarter": "Quarter", + "tasks": "Aufgaben Daten", + "level": "Ebene", + "durationUnit": "Duration unit", + "duration": "Duration", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Woche #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "Baum", + "ColumnsData": "Spalten Daten", + "allowChangeTask": "DbClick Aufgabe", + "allowAddLink": "Link hinzufügen", + "allowLinkDelete": "Link Löschen", + "allowProgressDrag": "Fortschritt ziehen", + "allowTaskDrag": "Aufgabe Ziehen", + "links": "Links Data", + "dataFormat": "Datenanalyse Format", + "handleDateChange": "Handhabung von Aufgabenänderungen", + "handleTaskChange": "Handhabung von Aufgabenänderungen", + "handleAddedLink": "Handle Added Link", + "handleDeletedLink": "Gelöschten Link behandeln", + "handleProgressDrag": "Handle Progress Drag", + "showTodayMark": "Heute anzeigen Mark", + "resize": "Größe ändern", + "otherEvents": "Andere Ereignisse", + "openAllBranchInit": "Alle Filialen öffnen Init", + "date": "Date", + "text": "Text", + "progress": "Fortschritte", + "width": "Breite", + "ColumnsType": "Spalten Typ", + "currentId": "Aktuelle ID", + "currentObject": "Aktuelles Objekt", + "addTask": "Aufgabe(n) hinzufügen", + "taskObject": "Aufgabe Objekt", + "taskObjectDesc": "Unterstützt Arrays von Tasks oder einzelne Task-Objekte", + "linkID": "Link-ID", + "linkIDDesc": "Unterstützt Arrays von Link-IDs oder einzelne Link-Objekte", + "removeTask": "Aufgabe entfernen", + "taskID": "Aufgaben-ID", + "taskIDDesc": "Unterstützt Arrays von IDs oder einzelne IDs", + "add": "hinzufügen", + "expandingAll": "Alle ausbauen", + "collapsingAll": "Alle kollabieren", + "addTaskFail": "Die Additionsaufgabe ist fehlgeschlagen, und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", + "addLinkFail": "Der Additionslink ist fehlgeschlagen und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", + "removeTaskFail": "Die Löschaufgabe ist fehlgeschlagen, und der Parametertyp sollte string oder string array sein", + "removeLinkFail": "Die Löschverknüpfungen sind fehlgeschlagen, und der Parametertyp sollte string array sein", + "otherData": "Andere Daten{i}", + "projectText": "Projekt #{i}", + "taskText": "Aufgabe #{i}", + "AutoCalculateProgress": "Automatischer Berechnungsfortschritt", + "allowProjectDrag": "Ziehen von Projekten zulassen", + "showColumns": "Spalten anzeigen", + "exportToPNG": "In PNG exportieren", + "exportToPDF": "In PDF exportieren", + "exportToExcel": "Nach Excel exportieren", + "progressLowBg": "Niedrig BgColor", + "progressLowColor": "Niedrige Progress-Farbe", + "progressMediumBg": "Medium BgColor", + "progressMediumColor": "Medium Progress Farbe", + "progressHighBg": "Höhe BgColor", + "progressHighColor": "Höhe Fortschritt Farbe", + "progresscompletedColor": "Abgeschlossener Fortschritt Farbe", + "lowProgressLine": "Niedrige Progressionslinie", + "mediumProgressLine": "Mittlere Fortschrittslinie", + "SegmentedColor": "Fortschritt Segmentierte Farbe", + "link_f2s": "Verbindung F2S", + "link_s2s": "Link S2S", + "link_f2f": "Link F2F", + "link_s2f": "Link S2F", + "weekScale": "#{i},", + "showHolidays": "Feiertage anzeigen", + "StatutoryHolidays": "Gesetzliche Feiertage Daten", + "skipOffTime": "Ausblenden der Nicht-Arbeitszeit", + "weekend": "Wochenende", + "weekendSelected": "Ausgewähltes Wochenende", + "noWorkHour": "Keine Arbeitsstunde", + "noWorkHourSelected": "keine Arbeitsstunde ausgewählt", + "showWorkTimes": "Arbeitszeiten anzeigen", + "workTimeData": "Arbeitszeitdaten", + "fit": "fit", + "manual": "Handbuch", + "scaleMode": "Skalenmodus", + "startDate": "Start Date", + "endDate": "End Date", + "addLink": "Link(s) hinzufügen", + "linkObject": "link Objekt", + "removeLink": "Link entfernen", + "allowSort": "Sortieren zulassen", + "showTask": "Aufgabe anzeigen", + "toggleOnDBClick": "Umschalten auf DBClick", + "sortOptions": "Erste Sortieroptionen", + "rowHeight": "Zeilenhöhe", + "showTooltip": "Tooltip anzeigen", + "tooltipTemplates": "Tooltip-Vorlage", + "allowResizeTask": "Größenänderung der Aufgabe zulassen", + "projectColor": "Projekt Farbe", + "projectColorBg": "Projekt BgColor", + "taskColor": "Aufgabe Farbe", + "taskColorBg": "Aufgabe BgColor", + "milestoneColor": "Meilenstein Farbe", + "highlightOverdue": "Highlight Überfällig", + "overdueColor": "Überfällige Farbe", + "overdueBgColor": "Überfällig BgColor", + "projectCompletedBgColor": "Abgeschlossenes Projekt BgColor", + "projectCompletedColor": "Projekt fertiggestellt Farbe", + "tag": "Tag", + "tasksTableWidth": "Aufgaben Tabellenbreite", + "allowErrorMessage": "Fehlermeldung zulassen", + "currentProjectId": "Aktuelle Projekt-ID", + "currentProjectLastTask": "Aktuelles Projekt Letzte Aufgabe", + "onlySortProject": "Nur Projekt sortieren", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Source Data", + "targetTitle": "Ziel-Daten", + "content": "Inhalt {i}", + "items": "Artikel", + "targetKeys": "Ausgewählte Schlüssel", + "oneWay": "Einweg", + "pagination": "Paginierung", + "pageSize": "Page Size", + "allowSearch": "Suche zulassen", + "selectedKeys": "Ausgewählte Schlüssel", + "searchInfo": "Infos zur Suche", + "targerObject": "Targer Object", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Maximale Anzahl", + "avatarSize": "Avatar Größe", + "autoColor": "Auto Farbe", + "alignment": "Ausrichtung", + "currentAvatar": "Aktueller Avatar", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "Platz", + "circle": "Kreis", + "icon": "Symbol", + "shape": "Form", + "counts": "Abzeichen", + "title": "Titel", + "src": "src", + "avatarCompTooltip": "Die Anzeigepriorität ist: Bild -> Zeichen -> Symbol. Je nachdem, was zuerst verfügbar ist.", + "iconSize": "Icon Größe", + "avatarBackground": "Hintergrund", + "label": "Etikett", + "caption": "Bildunterschrift", + "labelPosition": "Position", + "alignmentPosition": "Ausrichtung", + "text": "Text", + "enableDropDown": "Enable DropDown", + "containerBackground": "Hintergrund", + }, + "card": { + ...en.card, + + "cardType": "Karte Typ", + "common": "gemeinsame", + "custom": "benutzerdefinierte", + "default": "Standard", + "small": "klein", + "showTitle": "Titel anzeigen", + "title": "Titel", + "more": "Mehr", + "extraTitle": "Aufruf zum Handeln", + "CoverImg": "Titelbild", + "imgSrc": "Bildquelle", + "showMeta": "Inhalt anzeigen", + "metaTitle": "Inhalt Titel", + "metaDesc": "Content Beschreibung", + "imgHeight": "Bildhöhe", + "showActionIcon": "Aktionsoptionen anzeigen", + "actionOptions": "Handlungsoptionen", + "menu": "Menü {i}", + "hoverColor": "Hover Farbe", + "IconColor": "Icon Farbe", + "titleSize": "Titel Größe", + }, + "timer": { + ...en.timer, + + "timerState": "Timer Zustand", + "elapsedTime": "Verstrichene Zeit", + "timer": "Zeitschaltuhr", + "countdown": "Countdown", + "defaultValue": "Standardwert", + "timerType": "Timer Type", + "start": "Start", + "pause": "Pause", + "resume": "Lebenslauf", + "reset": "Reset", + "startPause": "Start/Pause", + "hideButton": "Schaltfläche \"Ausblenden", + "fontColor": "Schriftfarbe", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Icon", + "autoSize": "Symbol AutoSize", + "iconSize": "Icon Größe", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Format", + "precision": "Präzision", + "allowNull": "Nullwert zulassen", + "thousandsSeparator": "Tausendertrennzeichen anzeigen", + "controls": "Schaltflächen zum Erhöhen/Verringern anzeigen", + "step": "Schritt", + "standard": "Standard", + "percent": "Prozente", + }, + "slider": { + ...en.slider, + + "step": "Schritt", + "stepTooltip": "Der Wert muss größer als 0 und durch (Max-Min) teilbar sein", + "vertical": "Vertikale Ausrichtung", + }, + "rating": { + ...en.rating, + + "max": "Maximale Bewertung", + "allowHalf": "Halbe Bewertungspunkte zulassen", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Optionen", + "option": "Option", + "optionI": "Option {i}", + "viewDocs": "Docs ansehen", + "tip": "Die Variablen \\'item\\' und \\'i\\' repräsentieren den Wert und den Index jedes Elements in der Datenmatrix", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Wert / Schlüssel", + "valueTooltip": "Step Value muss eine Zahl sein. Für den ersten Schritt muss er gleich dem Anfangswert sein. Die Zahlen müssen in konsistenter und aufsteigender Reihenfolge stehen.", + "title": "Schritt Titel", + "subTitle": "Schritt Untertitel", + "description": "Schritt Beschreibung", + "status": "Schritt Status", + "icon": "Schritt-Symbol", + }, + "step": { + ...en.step, + + "initialValue": "Start-Nummern bei", + "initialValueTooltip": "Wo soll die visuelle Nummerierung beginnen. Muss 1 oder höher sein.", + "valueDesc": "Aktueller Wert", + "size": "Schritte Größe", + "sizeSmall": "Klein", + "sizeDefault": "Standard", + "percent": "Schritte in Prozent", + "type": "Schritte Typ", + "typeDefault": "Standard", + "typeNavigation": "Navigation", + "typeInline": "Inline", + "direction": "Schritte Richtung", + "directionVertical": "Vertikal", + "directionHorizontal": "Horizontal", + "labelPlacement": "Schritte Etikettenplatzierung", + "status": "Schritte Status", + "statusWait": "Warten", + "statusProcess": "Prozess", + "statusFinish": "Oberfläche", + "statusError": "Fehler", + "showDots": "Punkte statt Symbole anzeigen", + "showIcons": "Icons statt Symbole anzeigen", + "responsive": "Ansprechbar", + "selectable": "Wählbar", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Tag Text", + "color": "Farbe", + "icon": "Icon", + }, + "radio": { + ...en.radio, + + "options": "Optionen", + "horizontal": "Horizontal", + "horizontalTooltip": "Das horizontale Layout wickelt sich selbst ein, wenn es keinen Platz mehr hat", + "vertical": "Vertikal", + "verticalTooltip": "Das vertikale Layout wird immer in einer einzigen Spalte angezeigt", + "autoColumns": "Auto Kolonne", + "autoColumnsTooltip": "Das Auto-Spalten-Layout ordnet die Reihenfolge automatisch neu an, wenn es der Platz erlaubt, und zeigt sie als mehrere Spalten an", + }, + "cascader": { + ...en.cascader, + + "options": "JSON-Daten zur Anzeige kaskadierender Auswahlen", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Aktuell ausgewählter Wert", + "selectedIndexDesc": "Der Index des aktuell ausgewählten Wertes oder -1, wenn kein Wert ausgewählt ist", + "selectedLabelDesc": "Die Bezeichnung des aktuell ausgewählten Wertes", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Muss eine Zahl mit einer gültigen Dateigrößeneinheit oder eine einheitenlose Anzahl von Bytes sein.", + "fileEmptyErrorMsg": "Upload fehlgeschlagen. Die Dateigröße ist leer.", + "fileSizeExceedErrorMsg": "Upload fehlgeschlagen. Die Dateigröße übersteigt das Limit.", + "minSize": "Min Größe", + "minSizeTooltip": "Die Mindestgröße der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", + "maxSize": "Max Größe", + "maxSizeTooltip": "Die maximale Größe der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", + "single": "Einzeln", + "multiple": "Mehrere", + "directory": "Verzeichnis", + "upload": "durchsuchen", + "fileType": "Dateitypen", + "reference": "Bitte beachten Sie", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Eindeutige Dateityp-Angaben", + "uploadType": "Upload Typ", + "showUploadList": "Upload-Liste anzeigen", + "maxFiles": "Max Dateien", + "filesValueDesc": "Der Inhalt der aktuell hochgeladenen Datei ist Base64-kodiert", + "filesDesc": "Liste der aktuell hochgeladenen Dateien. Für Details, siehe", + "clearValueDesc": "Alle Dateien löschen", + "parseFiles": "Dateien parsen", + "parsedValueTooltip1": "Wenn parseFiles True ist, werden die hochgeladenen Dateien als Objekt, Array oder String analysiert. Auf die geparsten Daten kann über das Array parsedValue zugegriffen werden.", + "parsedValueTooltip2": "Unterstützt Excel-, JSON-, CSV- und Textdateien. Andere Formate geben Null zurück.", + "forceCapture": "Force Capture", + "forceCaptureTooltip": "Anstatt hochzuladen, Bild von der Kamera aufnehmen", + "usePhoto": "Foto verwenden", + "retakePhoto": "Foto neu aufnehmen", + "capture": "Erfassen Sie", + }, + "date": { + ...en.date, + + "format": "Format", + "inputFormat": "Eingabeformat", + "formatTip": "Unterstützung: \\'JJJJ-MM-TT HH:mm:ss\\', \\'JJJJ-MM-TT\\', \\'Zeitstempel\\'", + "reference": "Bitte beachten Sie", + "showTime": "Zeit zeigen", + "start": "Startdatum", + "end": "Enddatum", + "year": "Jahr", + "quarter": "Quartal", + "month": "Monat", + "week": "Woche", + "date": "Datum", + "clearAllDesc": "Alle löschen", + "resetAllDesc": "Alle zurücksetzen", + "placeholder": "Datum auswählen", + "placeholderText": "Platzhalter", + "startDate": "Startdatum", + "endDate": "Enddatum", + }, + "time": { + ...en.time, + + "start": "Startzeit", + "end": "Endzeit", + "formatTip": "Unterstützung: \\'HH:mm:ss\\', \\'Zeitstempel\\'", + "format": "Format", + "placeholder": "Zeit wählen", + "placeholderText": "Platzhalter", + "startTime": "Startzeit", + "endTime": "Endzeit", + }, + "button": { + ...en.button, + + "prefixIcon": "Präfix-Symbol", + "prefixText": "Präfix Text", + "suffixIcon": "Suffix-Symbol", + "icon": "Icon", + "iconSize": "Icon Größe", + "button": "Formular Schaltfläche", + "formToSubmit": "Formular zum Einreichen", + "default": "Standard", + "submit": "einreichen", + "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", + "loadingDesc": "Befindet sich der Button im Ladezustand? Wenn wahr, wird die aktuelle Schaltfläche geladen", + "formButtonEvent": "Veranstaltung", + }, + "link": { + ...en.link, + + "link": "Link zu", + "textDesc": "Derzeit auf dem Link angezeigter Text", + "loadingDesc": "Befindet sich der Link im Ladezustand? Wenn wahr, wird der aktuelle Link geladen", + }, + "scanner": { + ...en.scanner, + + "text": "Klicken Sie auf Scannen", + "camera": "Kamera {index}", + "changeCamera": "Kamera wechseln", + "continuous": "Kontinuierliches Scannen", + "uniqueData": "Doppelte Daten ignorieren", + "maskClosable": "Klicke auf die Maske zum Schließen", + "errTip": "Bitte verwende diese Komponente unter HTTPS oder Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Anzeige nur mit Etikett", + "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", + "triggerMode": "Triggermodus", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Hallo, {name}", + "valueTooltip": "Markdown unterstützt die meisten HTML-Tags und -Attribute. iframe, Script und andere Tags sind aus Sicherheitsgründen deaktiviert.", + "verticalAlignment": "Vertikale Ausrichtung", + "horizontalAlignment": "Horizontale Ausrichtung", + "textDesc": "Im aktuellen Textfeld angezeigter Text", + }, + "table": { + ...en.table, + + "editable": "Editierbar", + "columnNum": "Rubriken", + "viewModeResizable": "Spaltenbreite vom Benutzer angepasst", + "viewModeResizableTooltip": "Ob Nutzer die Spaltenbreite anpassen können.", + "visibleResizables": "Handles zur Größenänderung anzeigen", + "visibleResizablesTooltip": "Sichtbare Größenänderungsgriffe im Tabellenkopf anzeigen.", + "showFilter": "Schaltfläche Filter anzeigen", + "showRefresh": "Schaltfläche \"Aktualisieren\" anzeigen", + "showDownload": "Download-Schaltfläche anzeigen", + "columnSeparator": "Spaltentrennzeichen", + "columnSeparatorTooltip": "Spaltentrennzeichen („Trennzeichen“) in der heruntergeladenen CSV-Datei. \n\nEmpfehlungen:\n- Komma (,)\n- Semikolon (;)\n- Pipe (|)\n- Tabulator (\\t)", + "columnSetting": "Schaltfläche Spalteneinstellung anzeigen", + "searchText": "Text suchen", + "searchTextTooltip": "Suche und Filterung der in der Tabelle dargestellten Daten", + "showQuickJumper": "Quick Jumper anzeigen", + "hideOnSinglePage": "Auf einzelner Seite ausblenden", + "showSizeChanger": "Schaltfläche Größenänderer anzeigen", + "pageSizeOptions": "Optionen für die Seitengröße", + "pageSize": "Seitengröße", + "total": "Gesamtzahl der Zeilen", + "totalTooltip": "Der Standardwert ist die Anzahl der aktuellen Datenelemente, die aus der Abfrage abgerufen werden können, z. B: \\'{{query1.data[0].count}}\\'", + "filter": "Filter", + "filterRule": "Filter-Regel", + "chooseColumnName": "Spalte wählen", + "chooseCondition": "Bedingung wählen", + "clear": "Klar", + "columnShows": "Säule zeigt", + "selectAll": "Alle auswählen", + "and": "Und", + "or": "Oder", + "contains": "Enthält", + "notContain": "Enthält nicht", + "equals": "Entspricht", + "isNotEqual": "Ist nicht gleich", + "isEmpty": "Ist leer", + "isNotEmpty": "Ist nicht leer", + "greater": "Größer als", + "greaterThanOrEquals": "Größer als oder gleich", + "lessThan": "Weniger als", + "lessThanOrEquals": "Kleiner als oder gleich", + "action": "Aktion", + "columnValue": "Spalte Wert", + "columnValueTooltip": "\\'{{currentCell}}\\': Aktuelle Zelldaten\n \\'{{currentRow}}\\': Aktuelle Zeilendaten\n \\'{{currentIndex}}\\': Aktueller Datenindex (beginnend bei 0)\n Beispiel: \\'{{currentCell * 5}}\\' Show 5 Times the Original Value Data.", + "columnTooltip": "Spalten-Tooltip", + "imageSrc": "Bildquelle", + "imageSize": "Bildgröße", + "columnTitle": "Titel anzeigen", + "columnTitleTooltip": "Titel-Tooltip", + "showTitle": "Titel anzeigen", + "showTitleTooltip": "Spaltentitel im Tabellenkopf ein-/ausblenden", + "sortable": "Sortierbar", + "align": "Ausrichtung", + "fixedColumn": "Feste Säule", + "autoWidth": "Auto Breite", + "customColumn": "Benutzerdefinierte Säule", + "auto": "Auto", + "fixed": "Festgelegt", + "columnType": "Säule Typ", + "dataMapping": "Datenzuordnung", + "numberStep": "Schritt", + "numberStepTooltip": "Die Zahl, auf die der aktuelle Wert erhöht oder verringert wird. Es kann eine ganze Zahl oder eine Dezimalzahl sein", + "precision": "Präzision", + "float": "Schwimmer", + "prefix": "Präfix", + "suffix": "Nachsilbe", + "avatars": "Avatare", + "avatarGroupAlignment": "Ausrichtung der Avatare", + "text": "Text", + "number": "Nummer", + "link": "Link zu", + "links": "Links", + "tag": "Tag", + "select": "Wählen Sie", + "dropdown": "Auswahlliste", + "time": "Zeit", + "date": "Datum", + "dateTime": "Datum Uhrzeit", + "badgeStatus": "Status", + "button": "Taste", + "image": "Bild", + "boolean": "Boolesche", + "switch": "Schalter", + "rating": "Bewertung", + "progress": "Fortschritt", + "option": "Operation", + "optionList": "Betriebsliste", + "option1": "Betrieb 1", + "status": "Status", + "statusTooltip": "Optionale Werte: Erfolg, Fehler, Standard, Warnung, Verarbeitung", + "primaryButton": "Primäre", + "defaultButton": "Standard", + "type": "Typ", + "tableSize": "Tabelle Größe", + "hideHeader": "Tabellenkopfzeile ausblenden", + "hideToolbar": "Tabellenfußzeile ausblenden", + "fixedHeader": "Feste Tabellenüberschrift", + "fixedHeaderTooltip": "Kopfzeile wird für vertikal scrollbare Tabelle fixiert", + "fixedToolbar": "Feste Symbolleiste", + "fixedToolbarTooltip": "Die Symbolleiste wird für vertikal scrollbare Tabellen je nach Position fixiert", + "hideBordered": "Spaltenumrandung ausblenden", + "showHeaderGridBorder": "Kopfzeilen-Gitterrahmen anzeigen", + "showRowGridBorder": "Rand des Zeilenrasters anzeigen", + "showVerticalRowGridBorder": "Vertikalen Zeilenraster-Rahmen anzeigen", + "showHorizontalRowGridBorder": "Horizontalen Zeilenraster-Rahmen anzeigen", + "deleteColumn": "Spalte löschen", + "confirmDeleteColumn": "Bestätige Spalte löschen: ", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "Die aktuellen Daten ändern sich. Klicke auf , um die Spalte neu zu generieren.", + "changeSetDesc": "Ein Objekt, das Änderungen an einer bearbeitbaren Tabelle darstellt, enthält nur die geänderte Zelle. Zeilen gehen zuerst und Spalten gehen als zweites.", + "selectedRowDesc": "Liefert Daten für die aktuell ausgewählte Zeile und zeigt die Zeile an, die ein Klick-Ereignis auslöst, wenn der Nutzer auf eine Schaltfläche/Link in der Zeile klickt", + "selectedRowsDesc": "Nützlich im Mehrfachauswahlmodus, gleich wie SelectedRow", + "pageNoDesc": "Aktuelle Anzeigeseite, beginnend mit 1", + "pageSizeDesc": "Wie viele Zeilen pro Seite", + "sortColumnDesc": "Der Name der aktuell ausgewählten sortierten Spalte", + "sortDesc": "Ob die aktuelle Zeile in absteigender Reihenfolge ist", + "pageOffsetDesc": "Der aktuelle Beginn des Blätterns, der für das Blättern zum Abrufen von Daten verwendet wird. Beispiel: Select * from Users Limit \\'{{table1.pageSize}}\\' Versatz \\'{{table1.pageOffset}}\\'", + "displayDataDesc": "In der aktuellen Tabelle angezeigte Daten", + "selectedIndexDesc": "Ausgewählter Index in der Datenanzeige", + "filterDesc": "Parameter für die Tabellenfilterung", + "dataDesc": "Die JSON-Daten für die Tabelle", + "saveChanges": "Änderungen speichern", + "cancelChanges": "Änderungen abbrechen", + "rowSelectChange": "Zeile auswählen Ändern", + "rowClick": "Reihe Klicken", + "rowExpand": "Reihe verkleinern", + "rowShrink": "Zeilenverkleinerung", + "search": "Suchen", + "download": "Herunterladen", + "columnEdited": "Spalte bearbeitet", + "filterChange": "Filterwechsel", + "sortChange": "Sortieren Ändern", + "pageChange": "Seitenwechsel", + "refresh": "Auffrischen", + "rowColor": "Bedingte Zeilenfarbe", + "rowColorDesc": "Legt die Zeilenfarbe basierend auf den optionalen Variablen bedingt fest: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: \\'{{ currentRow.id > 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", + "rowHeight": "Bedingte Zeilenhöhe", + "rowHeightDesc": "Bedingte Einstellung der Zeilenhöhe basierend auf den optionalen Variablen: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Bedingte Zellenfarbe", + "cellColorDesc": "Stelle die Zellenfarbe basierend auf dem Zellenwert mit CurrentCell bedingt ein. Beispiel: \\''{{ currentCell == 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", + "saveChangesNotBind": "Es wurde kein Event Handler für das Speichern von Änderungen konfiguriert. Bitte binde mindestens einen Ereignishandler vor dem Klick.", + "dynamicColumn": "Dynamische Spalteneinstellung verwenden", + "dynamicColumnConfig": "Säuleneinstellung", + "dynamicColumnConfigDesc": "Dynamische Spalteneinstellungen. Akzeptiert ein Array von Spaltennamen. In der Standardeinstellung sind alle Spalten sichtbar. Beispiel: [%r@\\\"id%r@\\\", %r@\\\"name%r@\\\"]", + "position": "Position", + "showDataLoadSpinner": "Ladeanzeige anzeigen", + "showValue": "Wert anzeigen", + "expandable": "Ausbaufähig", + "configExpandedView": "Expandierte Ansicht konfigurieren", + "toUpdateRowsDesc": "Ein Array von Objekten für zu aktualisierende Zeilen in bearbeitbaren Tabellen.", + "selectedCellDesc": "Ausgewählte Zelle", + "empty": "Leere", + "falseValues": "Text Wenn Falsch", + "iconTrue": "Symbol Wenn wahr", + "iconFalse": "Icon When False", + "iconNull": "Icon When Null", + "allColumn": "Alle", + "visibleColumn": "Sichtbar", + "emptyColumns": "Derzeit sind keine Spalten sichtbar", + "showSummary": "Zusammenfassungszeile(n) anzeigen", + "totalSummaryRows": "Gesamtzahl der Zeilen", + "inlineAddNewRow": "Inline neue Zeile(n) hinzufügen", + "editMode": "Bearbeitungsmodus", + "singleClick": "Einzelklick", + "doubleClick": "Doppelklick", + "showUpdateButtons": "Schaltflächen zum Speichern/Abbrechen anzeigen", + }, + "image": { + ...en.image, + + "src": "Bildquelle", + "srcDesc": "Die Bildquelle. Kann eine URL, ein Pfad oder ein Base64-String sein. z.B.: data:image/png;base64, AAA... CCC", + "supportPreview": "Zuum Vorschau Unterstützung", + "supportPreviewTip": "Wirksam, wenn die Bildquelle gültig ist", + "previewSrc": "HighRes Bildquelle", + "clipPath": "Bildbeschneidungspfad", + "clipPathTip": "Verwenden Sie clip-path, um eine benutzerdefinierte Form für Ihr Element zu definieren, die auf einer CSS-Definition basiert, eine SVG-Maske referenziert (über die Quell-URL) oder vordefinierte Formen wie circle(), ellipse(), polygon() oder inset() für das Clipping verwendet.", + "enableOverflow": "Überlauf freigeben", + "enableOverflowTip": "Ermöglicht das Überlaufen des Bildes über den Container und damit das Beschneiden über die Grenzen des Containers hinaus. Nützlich, um den Fokus auf bestimmte Teile des Bildes zu legen.", + "overflow": "Überlauf-Verhalten (CSS)", + "overflowTip": "Legt fest, wie sich der Inhalt beim Überlaufen des Containers verhalten soll. Optionen wie \"hidden\", \"scroll\" oder \"visible\" bestimmen die Sichtbarkeit des abgeschnittenen Inhalts.", + "positionX": "Horizontale Position", + "positionXTip": "Gibt die horizontale Ausrichtung des Bildes innerhalb seines Containers an. Beispiele: 'links', 'Mitte', 'rechts' oder Prozentwerte.", + "positionY": "Vertikale Position", + "positionYTip": "Gibt die vertikale Ausrichtung des Bildes innerhalb seines Containers an. Beispiele: 'oben', 'Mitte', 'unten' oder Prozentwerte.", + "aspectRatio": "Bildseitenverhältnis (CSS)", + "aspectRatioTip": "Behält ein einheitliches Verhältnis von Breite zu Höhe für das Bild bei, z. B. \"16/9\" für Breitbild oder \"1/1\" für quadratisch. Bei natürlichen Bildabmessungen leer lassen.", + "placement": "Image Placement", + "placementTip": "Bestimmt, wo und wie das Bild innerhalb des Layouts oder Containers angezeigt wird. Zu den Optionen gehören eine bestimmte Ausrichtung oder Platzierungslogik.", + }, + "progress": { + ...en.progress, + + "value": "Wert", + "valueTooltip": "Der Prozentsatz der Fertigstellung als Wert zwischen 0 und 100", + "showInfo": "Wert anzeigen", + "valueDesc": "Aktueller Fortschrittswert, der von 0 bis 100 reicht", + "showInfoDesc": "Ob der aktuelle Fortschrittswert angezeigt werden soll", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Bitte gib eine gültige URL oder einen Base64-String ein", + "src": "Datei URI", + "srcTooltip": "Vorschau des bereitgestellten Link-Inhalts durch Einbetten von HTML, Base64-kodierte Daten können ebenfalls unterstützt werden, z. B.: data:application/pdf; base64,AAA... CCC", + "srcDesc": "Der Datei-URI", + }, + "divider": { + ...en.divider, + + "title": "Titel", + "align": "Ausrichtung", + "dashed": "Gestrichelt", + "type": "Vertikaler Typ", + "dashedDesc": "Gestrichelte Linie verwenden", + "titleDesc": "Teiler Titel", + "alignDesc": "Teiler Titelausrichtung", + }, + "QRCode": { + ...en.QRCode, + + "value": "QR Code Inhalt Wert", + "valueTooltip": "Der Wert enthält maximal 2953 Zeichen. Der QR-Code-Wert kann verschiedene Datentypen kodieren, z. B. Textnachrichten, URLs, Kontaktdaten (VCard/meCard), Wi-Fi-Anmeldedaten, E-Mail-Adressen, Telefonnummern, SMS-Nachrichten, Geolocation-Koordinaten, Kalenderereignisdetails, Zahlungsinformationen, Kryptowährungsadressen und App-Download-Links.", + "valueDesc": "Der QR-Code-Inhaltswert", + "level": "Fehlertoleranz Level", + "levelTooltip": "Bezieht sich auf die Fähigkeit des QR-Codes, gescannt zu werden, auch wenn ein Teil des Codes blockiert ist. Je höher die Stufe, desto komplexer ist der Code.", + "includeMargin": "Rand anzeigen", + "image": "Bild in der Mitte anzeigen", + "L": "L (Niedrig)", + "M": "M (Mittel)", + "Q": "Q (Quartil)", + "H": "H (Hoch)", + "maxLength": "Der Inhalt ist zu lang. Setze die Länge auf weniger als 2953 Zeichen", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Einrückung der einzelnen Ebenen", + "expandToggle": "JSON-Baum erweitern", + "theme": "Farbe Thema", + "valueDesc": "Aktuelle JSON-Daten", + "default": "Standard", + "defaultDark": "Standard Dunkel", + "neutralLight": "Neutrales Licht", + "neutralDark": "Neutral Dunkel", + "azure": "Azurblau", + "darkBlue": "Dunkelblau", + }, + "audio": { + ...en.audio, + + "src": "Audio Source URI oder Base64 String", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Autoplay", + "loop": "Schleife", + "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:audio/mpeg;base64,AAA... CCC", + "play": "Spielen", + "playDesc": "Ausgelöst, wenn Audio abgespielt wird", + "pause": "Pause", + "pauseDesc": "Ausgelöst, wenn der Ton pausiert wird", + "ended": "Beendet", + "endedDesc": "Ausgelöst, wenn die Audiowiedergabe endet", + }, + "video": { + ...en.video, + + "src": "Video Source URI oder Base64 String", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "Poster-URL", + "defaultPosterUrl": "", + "autoPlay": "Autoplay", + "loop": "Schleife", + "controls": "Steuerelemente ausblenden", + "volume": "Band", + "playbackRate": "Wiedergaberate", + "posterTooltip": "Der Standardwert ist das erste Bild des Videos", + "autoPlayTooltip": "Nachdem das Video geladen wurde, wird es automatisch abgespielt. Wenn du diesen Wert von True auf False änderst, wird das Video angehalten. (Wenn ein Poster eingestellt ist, wird es über die Schaltfläche Poster abgespielt)", + "controlsTooltip": "Steuerelemente für die Videowiedergabe ausblenden. Wird möglicherweise nicht von jeder Videoquelle vollständig unterstützt.", + "volumeTooltip": "Lege die Lautstärke des Players fest, zwischen 0 und 1", + "playbackRateTooltip": "Lege die Rate des Spielers fest, zwischen 1 und 2", + "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:video/mp4;base64, AAA... CCC", + "play": "Spielen", + "playDesc": "Ausgelöst, wenn das Video abgespielt wird", + "pause": "Pause", + "pauseDesc": "Ausgelöst, wenn das Video pausiert wird", + "load": "Laden", + "loadDesc": "Ausgelöst, wenn das Laden der Videoressource abgeschlossen ist", + "ended": "Beendet", + "endedDesc": "Ausgelöst, wenn das Video zu Ende gespielt wird", + "currentTimeStamp": "Die aktuelle Abspielposition des Videos in Sekunden", + "duration": "Die Gesamtdauer des Videos in Sekunden", + }, + "media": { + ...en.media, + + "playDesc": "Beginnt die Wiedergabe der Medien.", + "pauseDesc": "Pausiert die Medienwiedergabe.", + "loadDesc": "Setzt die Medien auf den Anfang zurück und startet die Auswahl der Medienressource neu.", + "seekTo": "Suche nach der angegebenen Anzahl von Sekunden oder einem Bruchteil, wenn der Betrag zwischen 0 und 1 liegt", + "seekToAmount": "Anzahl der Sekunden, oder Bruchteil, wenn sie zwischen 0 und 1 liegt", + "showPreview": "Vorschau anzeigen", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Startwert", + "end": "Endwert", + "step": "Schrittweite", + "stepTooltip": "Die Granularität des Schiebereglers, der Wert muss größer als 0 und teilbar durch (Max-Min) sein", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Wähle ein Symbol", + "searchIcon": "Ein Symbol suchen", + "searchAnimation": "Eine Animation suchen", + "searchIllustration": "Eine Illustration suchen", + "insertIcon": "Ein Icon einfügen", + "insertImage": "Ein Bild einfügen oder ", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Wählen Sie eine Form", + "insertShape": "Einfügen einer Form", + "insertImage": "Ein Bild einfügen oder", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Bitte gib die korrekte Timeout-Zeit in ms ein, die aktuelle Eingabe ist: {value}", + "timeoutLessThanMinError": "Die Eingabe muss größer sein als {left}, die aktuelle Eingabe ist: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Einzeln", + "multiple": "Mehrere", + "close": "Schließen", + "mode": "Modus wählen", + }, + "container": { + ...en.container, + + "title": "Angezeigter Container-Titel", + "titleTooltip": "Der Titel des Containers", + "flowWidth": "Inhalt Breite", + "floatType": "Text Schwebekörper Typ", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Platzierung der Verschlusses", + "placement": "Platzierung der Schubladen", + "size": "Größe", + "top": "Top", + "right": "Rechts", + "center": "Zentrum", + "bottom": "Unten", + "left": "Links", + "title": "Titel der Schublade", + "titleAlign": "Ausrichtung der Titel", + "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", + "heightTooltip": "Pixel, z.B. 378", + "openDrawerDesc": "Offene Schublade", + "closeDrawerDesc": "Schublade schließen", + "width": "Breite der Schublade", + "height": "Höhe der Schublade", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Agora SDK Log Level", + "placement": "Platzierung der Meeting-Schubladen", + "meeting": "Meeting-Einstellungen", + "cameraView": "Kameraansicht", + "cameraViewDesc": "Kameraansicht des lokalen Benutzers (Host)", + "screenShared": "Bildschirm geteilt", + "screenSharedDesc": "Vom lokalen Benutzer (Host) geteilter Bildschirm", + "audioUnmuted": "Audio entstummt", + "audioMuted": "Audio stummgeschaltet", + "videoClicked": "Video Geklickt", + "videoOff": "Video aus", + "videoOn": "Video auf", + "size": "Größe", + "top": "Top", + "host": "Gastgeber des Besprechungsraums. Du müsstest den Gastgeber als eigene Anwendungslogik verwalten", + "participants": "Teilnehmer des Besprechungsraums", + "shareScreen": "Vom lokalen Benutzer geteilter Bildschirm", + "appid": "Agora Anwendungs-ID", + "meetingName": "Treffen Name", + "localUserID": "Host-Benutzer-ID", + "userName": "Host-Benutzername", + "rtmToken": "Agora RTM-Token", + "rtcToken": "Agora RTC-Token", + "noVideo": "Kein Video", + "profileImageUrl": "Profilbild-URL", + "right": "Rechts", + "bottom": "Unten", + "videoId": "Video-Stream-ID", + "audioStatus": "Audio-Status", + "left": "Links", + "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", + "heightTooltip": "Pixel, z.B. 378", + "openDrawerDesc": "Offene Schublade", + "closeDrawerDesc": "Schublade schließen", + "width": "Breite der Schublade", + "height": "Höhe der Schublade", + "actionBtnDesc": "Aktionstaste", + "broadCast": "Broadcast-Nachrichten", + "title": "Meeting Titel", + "meetingCompName": "Agora Meeting Controller", + "sharingCompName": "Bildschirm teilen Stream", + "videoCompName": "Kamera-Stream", + "videoSharingCompName": "Bildschirm teilen Stream", + "meetingControlCompName": "Icon Taste", + "meetingCompDesc": "Meeting-Komponente", + "meetingCompControls": "Meeting-Kontrolle", + "meetingCompKeywords": "Agora Meeting, Web-Meeting, Kollaboration", + "iconSize": "Icon Größe", + "userId": "Host-Benutzer-ID", + "roomId": "Zimmer-ID", + "meetingActive": "Laufendes Treffen", + "messages": "Gesendete Nachrichten", + }, + "settings": { + ...en.settings, + + "title": "Einstellungen", + "userGroups": "Benutzergruppen", + "organization": "Arbeitsräume", + "subscription": "Abonnements", + "audit": "Audit-Logs", + "theme": "Themen", + "plugin": "Plugins", + "advanced": "Fortgeschrittene", + "apiDocs": "API-Dokumente", + "lab": "Labor", + "branding": "Branding", + "oauthProviders": "OAuth-Anbieter", + "appUsage": "App-Nutzungsprotokolle", + "environments": "Umgebungen", + "premium": "Prämie", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "Audit Log Dasboard", + "AuditLogOverview": "Log-Filter", + "USER_LOGIN": "User Login", + "USER_LOGOUT": "User Logout", + "APPLICATION_VIEW": "Bewerbung ansehen", + "APPLICATION_CREATE": "Anwendung erstellen", + "APPLICATION_DELETE": "Anwendung löschen", + "APPLICATION_UPDATE": "Anwendung aktualisieren", + "APPLICATION_MOVE": "Anwendung verschieben", + "APPLICATION_RECYCLED": "Recycle-Anwendung", + "APPLICATION_RESTORE": "Anwendung wiederherstellen", + "APPLICATION_PUBLISH": "Veröffentlichung von Anwendungen", + "APPLICATION_VERSION_CHANGE": "Aktualisierung der Anwendungsversion", + "APPLICATION_SHARING_CHANGE": "Gemeinsame Nutzung von Anwendungen ändern", + "APPLICATION_PERMISSION_CHANGE": "Anwendung Erlaubnis ändern", + "FOLDER_CREATE": "Ordner erstellen", + "FOLDER_DELETE": "Ordner löschen", + "FOLDER_UPDATE": "Update-Ordner", + "QUERY_EXECUTION": "Abfrage ausführen", + "GROUP_CREATE": "Gruppe erstellen", + "GROUP_UPDATE": "Gruppe aktualisieren", + "GROUP_DELETE": "Gruppe löschen", + "GROUP_MEMBER_ADD": "Gruppenmitglied hinzufügen", + "GROUP_MEMBER_ROLE_UPDATE": "Rolle des Gruppenmitglieds aktualisieren", + "GROUP_MEMBER_LEAVE": "Gruppe verlassen", + "GROUP_MEMBER_REMOVE": "Gruppenmitglied entfernen", + "SERVER_START_UP": "Start des Servers", + "SERVER_INFO": "Server-Informationen anzeigen", + "DATA_SOURCE_CREATE": "Datenquelle erstellen", + "DATA_SOURCE_UPDATE": "Update Datasource", + "DATA_SOURCE_DELETE": "Datenquelle löschen", + "DATA_SOURCE_PERMISSION_GRANT": "Grant Datasource Permission", + "DATA_SOURCE_PERMISSION_UPDATE": "Update Datasource Permission", + "DATA_SOURCE_PERMISSION_DELETE": "Berechtigung zum Löschen von Datenquellen", + "LIBRARY_QUERY_CREATE": "Bibliotheksabfrage erstellen", + "LIBRARY_QUERY_UPDATE": "Bibliotheksabfrage aktualisieren", + "LIBRARY_QUERY_DELETE": "Bibliotheksabfrage löschen", + "LIBRARY_QUERY_PUBLISH": "Bibliotheksabfrage veröffentlichen", + "API_CALL_EVENT": "API-Aufruf Ereignis", + "logFilter": "Log-Filter", + "noLogsFound": "Keine Protokolle gefunden. Passen Sie die Filter an und versuchen Sie es erneut.", + "usageLogUserEngagement": "Nutzerbindung nach Region", + "usageLogAppViews": "App-Nutzung im Laufe der Zeit", + "usageLogTopTen": "Top 10 Apps", + "usageLogAnonymousKNown": "Anonyme/bekannte Benutzer", + "usageLogDevices": "Gerät/OS Aufschlüsselung", + "usageLogBrowsers": "Browser/Layout Engine Aufschlüsselung", + "premiumFeaturesNotice": "Alle Premium Features sind in der Enterprise Edition von Lowcoder verfügbar.", + "requestLicense": "Lizenzen für die Enterprise Edition anfordern", + "requestLicensesBtton": "Request Enterprise Access", + "AuditLogsTitle": "Audit Logs", + "AuditLogsIntroTitle": "Leistungsstarker Einblick in die Aktivitäten Ihres Arbeitsbereichs", + "AuditLogsIntro1": "Mithilfe von Audit-Protokollen können Administratoren genau verfolgen, was auf der gesamten Lowcoder-Plattform passiert. Von Benutzeranmeldungen bis hin zu App-Änderungen wird jede relevante Aktion erfasst und gespeichert.", + "AuditLogsIntro2": "Für jedes Ereignis werden detaillierte Metadaten wie Geolocation, Gerätetyp, Browser und Betriebssystem erfasst.", + "AuditLogsIntro3": "Diese Transparenz ermöglicht Ihnen die Überwachung von Aktivitäten in allen verbundenen Umgebungen und bietet einen zuverlässigen Prüfpfad, der die Einhaltung von Vorschriften, die Sicherheit und den betrieblichen Einblick unterstützt.", + "AuditLogsEventsTitle": "Welche Ereignisse werden verfolgt?", + "AuditLogsEventsIntro": "Die folgenden Benutzeraktionen werden in Echtzeit protokolliert:", + "SignIn": "Eintragen", + "Logout": "Abmeldung", + "ViewApp": "App ansehen", + "CreateApp": "Neue Anwendung erstellen", + "DeleteApp": "App löschen", + "UpdateApp": "App aktualisieren", + "MoveToFolder": "In Ordner verschieben", + "MoveToTrash": "In den Papierkorb verschieben", + "RestoreApp": "App wiederherstellen", + "CreateFolder": "Neuen Ordner erstellen", + "DeleteFolder": "Ordner löschen", + "UpdateFolder": "Ordner aktualisieren", + "ExecuteDataQuery": "Ausführen der Datenabfrage", + "CreateUserGroup": "Neue Benutzergruppe erstellen", + "UpdateUserGroup": "Benutzergruppe aktualisieren", + "DeleteUserGroup": "Benutzergruppe löschen", + "AddGroupMember": "Mitglied der Benutzergruppe hinzufügen", + "UpdateGroupMemberRole": "Rolle des Benutzergruppenmitglieds aktualisieren", + "LeaveUserGroup": "Benutzergruppe verlassen", + "RemoveGroupMember": "Mitglied der Benutzergruppe entfernen", + "ServerStartup": "Start des Servers", + "CreateDataSource": "Datenquelle erstellen", + "UpdateDataSource": "Datenquelle aktualisieren", + "DeleteDataSource": "Datenquelle löschen", + "GrantUpdateDeletePermission": "Erteilen oder Aktualisieren von Berechtigungen", + "LibraryQueryActions": "Erstellen / Aktualisieren / Löschen von Bibliotheksabfragen", + "PublishLibraryQuery": "Bibliotheksabfrage veröffentlichen", + "AuditLogsPreviewTitle": "Vorschau des Audit-Logs in Aktion (zum Vergrößern anklicken)", + "ScreenshotPlaceholder1": "[Screenshot 1 Platzhalter]", + "ScreenshotPlaceholder2": "[Screenshot 2 Platzhalter]", + "ScreenshotPlaceholder3": "[Screenshot 3 Platzhalter]", + "PricingTitle": "Preise für die Enterprise Edition", + "PricingIntro": "Wir bieten flexible Preise für Organisationen jeder Größe, die auf Ihr Nutzungsmodell zugeschnitten sind:", + "FlatRateTitle": "Option 1: Pauschalpreis pro Instanz - $169 / Monat", + "FlatRateDesc": "Eine Instanz ist eine vollständige Lowcoder-Umgebung (Metadaten-Datenbank + Laufzeit), die unabhängig eingesetzt werden kann. Dies beinhaltet:", + "FlatRatePoint1": "Ein spezieller MongoDB-Metadatenspeicher", + "FlatRatePoint2": "Ein oder mehrere Anwendungslaufzeiten (\"Api-Service\"- und / oder \"Node-Service\"-Container)", + "UsagePricingTitle": "Option 2: Nutzungsabhängige Preise - $0,001 pro API-Aufruf", + "UsagePricingDesc": "Jede Instanz kann alternativ auf Basis der API-Nutzung lizenziert werden. Wir bieten Prepaid-Pakete an:", + "API100k": "100.000 API-Aufrufe - $100", + "API1M": "1.000.000 API-Aufrufe - $1.000", + "API10M": "10.000.000 API-Aufrufe - $10.000", + "UsageOverrunDesc": "Wenn Ihr API-Paket zur Neige geht, werden Sie von uns benachrichtigt. Sobald das Paket aufgebraucht ist, bleibt Ihre Instanz funktionsfähig, arbeitet aber mit reduzierter Geschwindigkeit, um Missbrauch zu verhindern und Fairness zu wahren.", + "UsageTopUpInfo": "Sie können jederzeit nahtlos zusätzliche Pakete hinzufügen, um einen kontinuierlichen, schnellen Zugang zu gewährleisten - ohne Serviceunterbrechungen.", + "AppUsageTitle": "App-Nutzungsprotokolle", + "AppUsageIntroTitle": "Verstehen, wie Ihre Anwendungen genutzt werden", + "AppUsageIntro1": "App-Nutzungsprotokolle geben Ihnen tiefe Einblicke in die Nutzung Ihrer veröffentlichten Lowcoder-Apps.", + "AppUsageIntro2": "Diese Funktionalität funktioniert wie eine eingebaute, vereinfachte Version von Google Analytics - jedoch vollständig privat und auf Ihre Lowcoder-Instanz beschränkt.", + "AppUsageIntro3": "Administratoren können analysieren, wie Apps im Laufe der Zeit aufgerufen werden, welche am meisten genutzt werden und von wo aus sich die Nutzer verbinden.", + "AppUsageMetricsTitle": "Metriken, die Sie verfolgen können...", + "AppUsageMetricsIntro": "Diese Analysen helfen Ihnen, fundierte Entscheidungen über Engagement und Nutzung der Plattform zu treffen:", + "MetricActiveUsers": "App Views pro Tag / Woche / Monat (basierend auf Zeitfilter)", + "MetricViewsPerApp": "Top 10 Apps", + "MetricDevices": "Zugriff über verschiedene Geräte (Desktop, Tablet, Handy)", + "MetricBrowsers": "Zugang über Browser und Betriebssystem", + "MetricCountries": "Geografische Herkunft der Nutzer", + "AppUsageScreenshotsTitle": "App Usage Analytics in Aktion (zum Vergrößern klicken)", + "AppUsageScreenshot1": "[App Usage Dashboard Screenshot]", + "AppUsageScreenshot2": "[Pro-App-Ansichten-Diagramm]", + "AppUsageScreenshot3": "[ Geo-Verbreitungskarte ]", + "BrandingIntroTitle": "Kundenspezifisches Branding & White-Labeling", + "BrandingIntro1": "Mit Lowcoders Branding-Einstellungen können Sie das Produkterlebnis für Ihre Nutzer verbessern, indem Sie ein vollständig anpassbares Branding anbieten.", + "BrandingIntro2": "Geben Sie Ihren Kunden oder internen Teams die Möglichkeit, die Plattform so zu nutzen, als wäre es ihre eigene - Logo, Farben, Schriftarten und benutzerdefinierte Seiten inklusive.", + "BrandingIntro3": "Oder Sie benötigen eine vollständige White-Label-Lösung, um Ihre Markenidentität an jedem Kontaktpunkt zu unterstreichen.", + "BrandingColorsIntro1": "Sie können Ihr eigenes Farbschema festlegen, das zu Ihrer Corporate Identity passt, einschließlich der primären UI-Elemente und Navigationsleisten.", + "BrandingColorsIntro2": "Passen Sie die Hervorhebungen in der Seitenleiste, die Kopfzeilenabschnitte und sogar den Textkontrast an, um die Benutzerfreundlichkeit und Zugänglichkeit zu verbessern.", + "BrandingFontsIntro": "Wählen Sie aus kuratierten Google-Schriftarten, um Ihre Anwendung in Stil und Lesbarkeit zu gestalten.", + "BrandingLogosIntro": "Natürlich können Sie auch Ihre eigenen Logos hochladen - rechteckig oder quadratisch -, die in Kopfzeilen, Dashboards und Anmeldebildschirmen erscheinen. Behalten Sie die Markenkonsistenz auf allen Geräten und Bildschirmen bei.", + "BrandingPagesIntro1": "Fügen Sie Ihren Fehlerseiten, Anmeldeströmen und Abmeldemeldungen personalisierte Texte und Grafiken hinzu.", + "BrandingPagesIntro2": "Diese Berührungspunkte tragen dazu bei, auch bei unerwarteten Szenarien oder Kontowechseln ein vollständig markengerechtes Erlebnis zu bieten.", + "BrandingMetaIntro": "Definieren Sie Standard-Metadaten wie Seitentitel und -beschreibung, um Ihre SEO-Präsenz und Ihre Markenbotschaft zu verbessern.", + "BrandingHelpLinksIntro": "Fügen Sie kontextabhängige Dokumentationslinks direkt in die Anwendung ein und bieten Sie Ihren Nutzern so eine Just-in-Time-Hilfe.", + "BrandingWhatsNewIntro": "Aktivieren Sie die Rubrik \"Was gibt es Neues\", um Aktualisierungen und Produktankündigungen in einer markengerechten und sichtbaren Weise hervorzuheben.", + "EnvironmentsIntroTitle": "Lowcoder Staging", + "EnvironmentsTitle": "Multi-Environment-Infrastruktur", + "EnvironmentsIntro1": "Lowcoder-Umgebungen ermöglichen es Ihnen, Ihre Entwicklungs-, Test- und Produktionsphasen sauber und sicher zu trennen.", + "EnvironmentsIntro2": "Unternehmensteams profitieren von strukturierten Release-Workflows, Genehmigungsprozessen und stufenübergreifender Versionsstabilität.", + "EnvironmentsIntro3": "Mit der Umgebungsfunktion können Administratoren steuern, was, wann und wo bereitgestellt wird - alles über eine einzige Schnittstelle.", + "EnvironmentsIntro4": "Lowcoder umfasst mehrere Objekttypen wie Arbeitsbereiche, Datenquellen, Datenabfragen und Apps. Da viele dieser Objekte miteinander verbunden sind (z. B. kann eine Datenquelle von mehreren Apps gemeinsam genutzt werden), würde ein reiner Git-basierter Export nicht alle Abhängigkeiten konsistent erfassen. Stattdessen bietet Lowcoder einen selektiven, integrierten Bereitstellungsmechanismus direkt in der Benutzeroberfläche. Apps, Datenquellen und Abfragen können selektiv verwaltet und in verschiedenen Umgebungen bereitgestellt werden. Verwaltete Objekte gewährleisten sichere, kontrollierte Staging- und Produktions-Releases.", + "yourDeploymentID": "Ihre Einsatz-ID", + "EnvironmentsFeaturePreviewTitle": "Environments & Deployment in Aktion (zum Vergrößern anklicken)", + "EnvironmentsUseCasesTitle": "Warum Umgebungen verwenden? (Inszenierung)", + "EnvironmentsUseCase1": "Verhindern Sie unbeabsichtigte Änderungen in der Produktion, indem Sie Anwendungen in speziellen Entwicklungs- oder QA-Umgebungen testen.", + "EnvironmentsUseCase2": "Anpassung an die IT-Governance des Unternehmens durch die Implementierung gestaffelter Implementierungen mit auditfähiger Nachverfolgung.", + "EnvironmentsUseCase3": "Geben Sie Teams die Möglichkeit, mit umgebungsspezifischen Konfigurationen, Daten und Integrationen sicher zu arbeiten.", + "EnvironmentsFeaturesTitle": "Was Sie bekommen", + "EnvironmentsFeature1": "Zentrales Dashboard zur Anzeige und Verwaltung aller Lowcoder-Umgebungen.", + "EnvironmentsFeature2": "Bereitstellung von Anwendungen, Datenquellen und Konfigurationen zwischen Umgebungen direkt über die Benutzeroberfläche, ohne dass zusätzliche CI/CD-Tools erforderlich sind.", + "EnvironmentsFeature3": "Umgebungsspezifische Zugriffskontrollen und Sichtbarkeitsregeln.", + "EnvironmentsFeature5": "Klare Trennung der Belange von Staging-, Sandbox- und Produktionsbetrieb.", + "apiUsage": "API-Aufrufe.", + "loadingApiUsage": "Laden von API-Nutzungsdaten...", + }, + "environments": { + ...en.environments, + + "title": "Umgebungen", + "search": "Suche", + "refresh": "Refresh", + "addEnvironment": "Umgebung hinzufügen", + "errorLoadingEnvironments": "Fehler beim Laden von Umgebungen", + "noEnvironmentsFoundMatching": "Keine Umgebungen gefunden für \"{searchText}\"", + "noEnvironmentsFound": "Keine Umgebungen gefunden. Erstellen Sie Ihre erste Umgebung, um loszulegen.", + "environmentsTypeLabel": "{type} Umgebungen", + "showingAllEnvironments": "Alle {count}-Umgebungen anzeigen", + "unnamedEnvironment": "Unbenannte Umgebung", + "masterEnvironment": "Master-Umgebung", + "viewAuditLogs": "View Audit Logs", + "id": "ID", + "domain": "Domain", + "master": "Meister", + "license": "Lizenz", + "apiCalls": "API-Aufrufe", + "yes": "Ja", + "no": "Nein", + "copyId": "ID kopieren", + "copied": "Kopiert!", + "percentUsed": "{percent}% verwendet", + "licenseStatus_checking": "Prüfen...", + "licenseStatus_licensed": "Lizensiert", + "licenseStatus_unlicensed": "Lizenz erforderlich", + "licenseStatus_error": "Einrichtung erforderlich", + "licenseStatus_unknown": "Unbekannt", + "detail_environmentNotFound": "Umgebung nicht gefunden", + "detail_returnToEnvironmentsList": "Zurück zur Liste der Umgebungen", + "detail_environmentDetail": "Umwelt Detail", + "detail_environmentOverview": "Überblick über die Umwelt", + "detail_noDomainSet": "Keine Domäne festgelegt", + "detail_environmentId": "Umwelt-ID", + "detail_licenseStatus": "Lizenz-Status", + "detail_licenseNeeded": "Erforderliche Lizenz", + "detail_setupRequired": "Einrichtung erforderlich", + "detail_created": "Erstellt", + "detail_unknown": "Unbekannt", + "detail_licenseDetails": "Lizenz-Details", + "detail_apiCallsRemaining": "Verbleibende API-Aufrufe", + "detail_totalApiCallsLimit": "Limit für API-Aufrufe insgesamt", + "detail_enterpriseEdition": "Enterprise-Ausgabe", + "detail_active": "Aktiv", + "detail_inactive": "Inaktiv", + "detail_licenseInformation": "Lizenzinformationen", + "detail_calls": "ruft auf.", + "detail_licenses": "Lizenzen", + "detail_license": "Lizenz", + "detail_workspaces": "Arbeitsbereiche", + "detail_userGroups": "Benutzergruppen", + "detail_type": "Typ", + "detail_status": "Status", + "detail_licensed": "Lizensiert", + "detail_unlicensed": "Nicht lizenziert", + "detail_apiKey": "API-Schlüssel", + "detail_configured": "Konfiguriert", + "detail_notSet": "Nicht festgelegt", + "detail_masterEnv": "Master Env", + "unlicensed_unlicensedDescription": "Diese Umgebung benötigt eine gültige Lizenz, um den vollen Funktionsumfang freizuschalten. Bitte stellen Sie sicher, dass Ihre API Service URL korrekt konfiguriert und das Plugin installiert ist.", + "unlicensed_errorDescription": "Bei der Überprüfung der Lizenz ist ein Problem aufgetreten. Bitte überprüfen Sie die Konfigurationseinstellungen.", + "unlicensed_defaultDescription": "Diese Umgebung erfordert eine Lizenzkonfiguration, um fortfahren zu können.", + "unlicensed_contactLowcoderTeam": "Kontakt zum Lowcoder-Team", + "unlicensed_editEnvironment": "Umgebung bearbeiten", + "unlicensed_backToEnvironments": "Zurück zu Umgebungen", + "unlicensed_helpText": "Benötigen Sie Hilfe? Kontaktieren Sie unser Team für Lizenzierungssupport oder bearbeiten Sie die Umgebungskonfiguration, um dieses Problem zu lösen.", + "unlicensed_type": "Typ", + "unlicensed_status": "Status", + "unlicensed_masterEnv": "Master Env", + "unlicensed_licenseIssue": "Lizenzausgabe", + "unlicensed_error": "Fehler", + "unlicensed_missing": "Fehlt", + "error_itemNotFound": "Der von Ihnen gesuchte Artikel existiert nicht oder Sie haben keine Berechtigung, ihn anzusehen.", + "modal_createNewEnvironment": "Neue Umgebung erstellen", + "modal_editEnvironment": "Umgebung bearbeiten", + "modal_cancel": "Abbrechen", + "modal_createEnvironment": "Umgebung erstellen", + "modal_saveChanges": "Änderungen speichern", + "modal_environmentName": "Umgebung Name", + "modal_pleaseEnterName": "Bitte geben Sie einen Namen ein", + "modal_nameMinLength": "Der Name muss aus mindestens 2 Zeichen bestehen", + "modal_enterEnvironmentName": "Name der Umgebung eingeben", + "modal_description": "Beschreibung", + "modal_enterDescription": "Beschreibung eingeben", + "modal_stage": "Stage", + "modal_pleaseSelectStage": "Bitte wählen Sie eine Etappe", + "modal_selectStage": "Stufe wählen", + "modal_development": "Entwicklung (DEV)", + "modal_testing": "Prüfung (TEST)", + "modal_preProduction": "Vorproduktion (PREPROD)", + "modal_production": "Produktion (PROD)", + "modal_frontendUrl": "Frontend-URL", + "modal_pleaseEnterValidUrl": "Bitte geben Sie eine gültige URL ein", + "modal_apiServiceUrl": "API Service URL", + "modal_nodeServiceUrl": "Node Service URL", + "modal_apiKey": "API-Schlüssel", + "modal_enterApiKey": "API-Schlüssel eingeben", + "modal_masterEnvironment": "Master-Umgebung", + "modal_alreadyMasterEnvironment": "{name} ist bereits die Master-Umgebung", + "modal_willBeMaster": "Wird Meister sein", + "modal_currentlyMaster": "Derzeit Master", + "modal_configurationRequirements": "Anforderungen an die Konfiguration", + "modal_configurationRequirementsDesc": "Vergewissern Sie sich, dass die URL des API-Dienstes konfiguriert und korrekt ist, dass der API-Schlüssel gültig ist und dass sowohl die Lizenz als auch das Plugin ordnungsgemäß installiert sind, um die Lizenz zu überprüfen.", + "workspaces_title": "Arbeitsbereiche", + "workspaces_subtitle": "Verwalten von Arbeitsbereichen in dieser Umgebung", + "workspaces_refresh": "Refresh", + "workspaces_errorLoadingWorkspaces": "Fehler beim Laden von Arbeitsbereichen", + "workspaces_configurationIssue": "Problem der Konfiguration", + "workspaces_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", + "workspaces_totalWorkspaces": "Arbeitsbereiche insgesamt", + "workspaces_managedWorkspaces": "Verwaltete Arbeitsbereiche", + "workspaces_unmanagedWorkspaces": "Nicht verwaltete Arbeitsbereiche", + "workspaces_workspace": "Arbeitsbereich", + "workspaces_role": "Rolle", + "workspaces_status": "Status", + "workspaces_managed": "Verwaltet", + "workspaces_unmanaged": "Unverwaltet", + "workspaces_actions": "Aktionen", + "workspaces_viewAuditLogs": "View Audit Logs", + "workspaces_audit": "Prüfung", + "workspaces_searchWorkspaces": "Arbeitsbereiche nach Name oder ID suchen", + "workspaces_showAll": "Alle anzeigen", + "workspaces_managedOnly": "Nur verwaltet", + "workspaces_showingResults": "Zeigt {count} von {total} Arbeitsbereiche", + "workspaces_paginationTotal": "{start}-{end} von {total} Arbeitsbereichen", + "workspaces_noWorkspacesFound": "Keine Arbeitsbereiche in dieser Umgebung gefunden", + "userGroups_title": "Benutzergruppen", + "userGroups_subtitle": "Verwalten von Benutzergruppen in dieser Umgebung", + "userGroups_refresh": "Refresh", + "userGroups_errorLoadingUserGroups": "Fehler beim Laden von Benutzergruppen", + "userGroups_configurationIssue": "Problem der Konfiguration", + "userGroups_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", + "userGroups_totalGroups": "Gruppen insgesamt", + "userGroups_allUsersGroups": "Alle Benutzergruppen", + "userGroups_developerGroups": "Entwickler-Gruppen", + "userGroups_customGroups": "Benutzerdefinierte Gruppen", + "userGroups_userGroup": "User Group", + "userGroups_type": "Typ", + "userGroups_allUsers": "Alle Benutzer", + "userGroups_developers": "Entwickler", + "userGroups_custom": "Benutzerdefiniert", + "userGroups_members": "Mitglieder", + "userGroups_adminMembers": "Verwaltungsmitglieder", + "userGroups_created": "Erstellt", + "userGroups_totalMembersTooltip": "Gesamtzahl der Mitglieder in dieser Gruppe", + "userGroups_adminMembersTooltip": "Anzahl der Admin-Benutzer in dieser Gruppe", + "userGroups_searchUserGroups": "Benutzergruppen nach Name oder ID suchen", + "userGroups_showingResults": "Zeigt {count} von {total} Benutzergruppen", + "userGroups_paginationTotal": "{start}-{end} von {total} Benutzergruppen", + "userGroups_noUserGroupsFound": "Keine Benutzergruppen in dieser Umgebung gefunden", + "apps_title": "Apps", + "apps_subtitle": "Verwalten von Arbeitsbereichsanwendungen", + "apps_refresh": "Refresh", + "apps_errorLoadingApps": "Fehler beim Laden von Anwendungen", + "apps_configurationIssue": "Problem der Konfiguration", + "apps_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", + "apps_totalApps": "Apps insgesamt", + "apps_publishedApps": "Veröffentlichte Apps", + "apps_managedApps": "Verwaltete Apps", + "apps_unmanagedApps": "Nicht verwaltete Anwendungen", + "apps_app": "App", + "apps_status": "Status", + "apps_published": "Veröffentlicht", + "apps_draft": "Entwurf", + "apps_managed": "Verwaltet", + "apps_unmanaged": "Unverwaltet", + "apps_deploy": "Bereitstellung von", + "apps_audit": "Prüfung", + "apps_appMustBeManagedToDeploy": "Die Anwendung muss verwaltet werden, bevor sie bereitgestellt werden kann", + "apps_deployThisApp": "Diese Anwendung in einer anderen Umgebung bereitstellen", + "apps_viewAuditLogs": "View Audit Logs", + "apps_searchApps": "Anwendungen nach Name oder ID suchen", + "apps_showAll": "Alle anzeigen", + "apps_managedOnly": "Nur verwaltet", + "apps_showingResults": "Zeigt {count} von {total} Anwendungen", + "apps_paginationTotal": "{start}-{end} von {total} Anwendungen", + "apps_noAppsFound": "Keine Anwendungen in diesem Arbeitsbereich gefunden", + "apps_appRecycled": "Diese Anwendung wurde in den Papierkorb verschoben", + "apps_managedSuccess": "{name} wird jetzt verwaltet", + "apps_unmanagedSuccess": "{name} ist jetzt Unverwaltet", + "apps_managedError": "Der verwaltete Status für {name} konnte nicht geändert werden.", + "dataSources_title": "Datenquellen", + "dataSources_subtitle": "Verwalten von Arbeitsbereichsdatenverbindungen", + "dataSources_refresh": "Refresh", + "dataSources_errorLoadingDataSources": "Fehler beim Laden von Datenquellen", + "dataSources_configurationIssue": "Problem der Konfiguration", + "dataSources_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", + "dataSources_totalDataSources": "Datenquellen insgesamt", + "dataSources_availableTypes": "Verfügbare Typen", + "dataSources_managed": "Verwaltet", + "dataSources_unmanaged": "Unverwaltet", + "dataSources_dataSource": "Datenquelle", + "dataSources_type": "Typ", + "dataSources_status": "Status", + "dataSources_deploy": "Bereitstellung von", + "dataSources_audit": "Prüfung", + "dataSources_dataSourceMustBeManagedToDeploy": "Die Datenquelle muss verwaltet werden, bevor sie eingesetzt werden kann.", + "dataSources_deployThisDataSource": "Diese Datenquelle in einer anderen Umgebung bereitstellen", + "dataSources_viewAuditLogs": "View Audit Logs", + "dataSources_searchDataSources": "Datenquellen nach Name oder ID suchen", + "dataSources_showAll": "Alle anzeigen", + "dataSources_managedOnly": "Nur verwaltet", + "dataSources_showingResults": "Anzeige von {count} von {total} Datenquellen", + "dataSources_paginationTotal": "{start}-{end} von {total} Datenquellen", + "dataSources_noDataSourcesFound": "Keine Datenquellen in diesem Arbeitsbereich gefunden", + "dataSources_managedSuccess": "{name} wird jetzt verwaltet", + "dataSources_unmanagedSuccess": "{name} ist jetzt Unverwaltet", + "dataSources_managedError": "Der verwaltete Status für {name} konnte nicht geändert werden.", + "queries_title": "Abfragen", + "queries_subtitle": "Verwalten von Arbeitsbereich-API-Abfragen", + "queries_refresh": "Refresh", + "queries_errorLoadingQueries": "Fehler beim Laden von Abfragen", + "queries_configurationIssue": "Problem der Konfiguration", + "queries_missingConfiguration": "Fehlende erforderliche Konfiguration: API-Schlüssel oder API-Dienst-URL", + "queries_totalQueries": "Abfragen insgesamt", + "queries_managed": "Verwaltet", + "queries_unmanaged": "Unverwaltet", + "queries_query": "Query", + "queries_creator": "Schöpfer", + "queries_status": "Status", + "queries_deploy": "Bereitstellung von", + "queries_audit": "Prüfung", + "queries_queryMustBeManagedToDeploy": "Die Abfrage muss verwaltet werden, bevor sie eingesetzt werden kann", + "queries_deployThisQuery": "Diese Abfrage in einer anderen Umgebung bereitstellen", + "queries_viewAuditLogs": "View Audit Logs", + "queries_searchQueries": "Suchanfragen nach Name oder ID", + "queries_showAll": "Alle anzeigen", + "queries_managedOnly": "Nur verwaltet", + "queries_showingResults": "Zeigt {count} von {total} Abfragen", + "queries_paginationTotal": "{start}-{end} von {total} Abfragen", + "queries_noQueriesFound": "Keine Abfragen in diesem Arbeitsbereich gefunden", + "queries_managedSuccess": "{name} wird jetzt verwaltet", + "queries_unmanagedSuccess": "{name} ist jetzt Unverwaltet", + "queries_managedError": "Der verwaltete Status für {name} konnte nicht geändert werden.", + "deployModal_deployTitle": "Setzen Sie {singularLabel} ein: ___PLATZHALTER1___", + "deployModal_loadingEnvironments": "Umgebungen laden...", + "deployModal_sourceEnvironment": "Quelle: Umwelt", + "deployModal_targetEnvironment": "Zielumgebung", + "deployModal_selectTargetEnvironment": "Zielumgebung auswählen", + "deployModal_selectTargetEnvironmentValidation": "Bitte wählen Sie eine Zielumgebung", + "deployModal_confirmed": "Bestätigt", + "deployModal_cancel": "Abbrechen", + "deployModal_deploy": "Bereitstellung von", + "deployModal_targetEnvironmentNotFound": "Zielumgebung nicht gefunden", + "deployModal_confirmCredentialOverwrite": "Bitte bestätigen Sie das Überschreiben der Anmeldeinformationen vor der Bereitstellung", + "deployModal_deploySuccess": "Erfolgreiche Bereitstellung von {name} in der Zielumgebung", + "deployModal_deployFailed": "Bereitstellung von {singularLabel} fehlgeschlagen", + "deployModal_selectFieldValidation": "Bitte wählen Sie ___PLATZHALTER0___", + "deployModal_selectFieldPlaceholder": "Wählen Sie {label}", + "deployModal_inputFieldValidation": "Bitte geben Sie {label} ein.", + "deployModal_inputFieldPlaceholder": "Geben Sie {label} ein", + "contactLowcoder_title": "Kontakt zum Lowcoder-Team", + "contactLowcoder_environmentLabel": "Umwelt:", + "contactLowcoder_environmentIdLabel": "Umwelt-ID:", + "contactLowcoder_deploymentIdLabel": "Einsatz-ID:", + "contactLowcoder_loading": "Laden...", + "contactLowcoder_notAvailable": "Nicht verfügbar", + "contactLowcoder_unnamedEnvironment": "Unbenannte Umgebung", + "contactLowcoder_fetchingDeploymentInfo": "Abrufen von Einsatzinformationen...", + "contactLowcoder_unableToLoadContactForm": "Kontakt-Formular kann nicht geladen werden", + "contactLowcoder_apiConfigurationError": "Umgebung API-Dienst-URL oder API-Schlüssel nicht konfiguriert", + "contactLowcoder_failedToFetchDeploymentId": "Einsatz-ID konnte nicht abgerufen werden", + "contactLowcoder_ensureProperConfiguration": "Bitte stellen Sie sicher, dass die Umgebung richtig konfiguriert ist, um den Support zu kontaktieren.", + "credentialConfirmations_firstConfirmation_title": "Warnung zum Überschreiben von Anmeldeinformationen", + "credentialConfirmations_firstConfirmation_message": "Diese Aktion überschreibt die vorhandenen Anmeldeinformationen in der Zielumgebung.", + "credentialConfirmations_firstConfirmation_description": "Dies ist ein schwerwiegender Vorgang, der andere Anwendungen und Benutzer beeinträchtigen kann.", + "credentialConfirmations_firstConfirmation_question": "Sind Sie sicher, dass Sie fortfahren wollen?", + "credentialConfirmations_firstConfirmation_continueButton": "Weiter", + "credentialConfirmations_firstConfirmation_cancelButton": "Abbrechen", + "credentialConfirmations_secondConfirmation_title": "Endgültige Bestätigung erforderlich", + "credentialConfirmations_secondConfirmation_message": "Letzte Warnung: Überschreiben von Anmeldeinformationen", + "credentialConfirmations_secondConfirmation_description": "Sie sind im Begriff, Anmeldedaten in der Zielumgebung zu überschreiben. Diese Aktion kann nicht rückgängig gemacht werden und kann bestehende Integrationen unterbrechen.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Bitte bestätigen Sie noch einmal.", + "credentialConfirmations_secondConfirmation_finalQuestion": "Sind Sie absolut sicher, dass Sie die Anmeldeinformationen überschreiben wollen?", + "credentialConfirmations_secondConfirmation_confirmButton": "Ja, Anmeldeinformationen überschreiben", + "credentialConfirmations_secondConfirmation_cancelButton": "Abbrechen", + "config_singularLabels_app": "App", + "config_singularLabels_dataSource": "Datenquelle", + "config_singularLabels_query": "Query", + "config_singularLabels_workspace": "Arbeitsbereich", + "config_fields_updateDependenciesIfNeeded": "Abhängigkeiten bei Bedarf aktualisieren", + "config_fields_publishOnTarget": "Zielgenaue Veröffentlichung", + "config_fields_publicToAll": "Öffentlich für alle", + "config_fields_publicToMarketplace": "Öffentlich zum Marktplatz", + "config_fields_overwriteCredentials": "Anmeldeinformationen überschreiben", + "services_environments_missingEnvironmentId": "Fehlende Umgebungs-ID", + "services_environments_failedToUpdateEnvironment": "Aktualisierung der Umgebung fehlgeschlagen", + "services_environments_environmentCreatedSuccessfully": "Umgebung erfolgreich erstellt", + "services_environments_failedToCreateEnvironment": "Umgebung konnte nicht erstellt werden", + "services_environments_failedToFetchEnvironments": "Abrufen von Umgebungen fehlgeschlagen", + "services_environments_failedToFetchEnvironment": "Umgebung konnte nicht abgerufen werden", + "services_environments_environmentIdRequired": "Umwelt-ID ist erforderlich", + "services_environments_apiKeyRequiredForWorkspaces": "API-Schlüssel ist erforderlich, um Arbeitsbereiche abzurufen", + "services_environments_apiServiceUrlRequiredForWorkspaces": "Die URL des API-Dienstes ist erforderlich, um Arbeitsbereiche abzurufen.", + "services_environments_failedToFetchWorkspaces": "Abrufen von Arbeitsbereichen fehlgeschlagen", + "services_environments_apiKeyRequiredForUserGroups": "API-Schlüssel ist erforderlich, um Benutzergruppen abzurufen", + "services_environments_apiServiceUrlRequiredForUserGroups": "Die URL des API-Dienstes ist erforderlich, um Benutzergruppen abzurufen.", + "services_environments_failedToFetchUserGroups": "Abrufen von Benutzergruppen fehlgeschlagen", + "services_environments_workspaceIdRequired": "Arbeitsbereich-ID ist erforderlich", + "services_environments_apiKeyRequiredForApps": "API-Schlüssel ist erforderlich, um Anwendungen abzurufen", + "services_environments_apiServiceUrlRequiredForApps": "Die URL des API-Dienstes ist erforderlich, um Anwendungen abzurufen.", + "services_environments_failedToFetchWorkspaceApps": "Arbeitsbereich-Apps konnten nicht abgerufen werden", + "services_environments_apiKeyRequiredForDataSources": "API-Schlüssel ist erforderlich, um Datenquellen abzurufen", + "services_environments_apiServiceUrlRequiredForDataSources": "Die URL des API-Dienstes ist erforderlich, um Datenquellen abzurufen.", + "services_environments_failedToFetchWorkspaceDataSources": "Datenquellen für den Arbeitsbereich konnten nicht abgerufen werden", + "services_environments_apiKeyRequiredForQueries": "API-Schlüssel ist erforderlich, um Abfragen abzurufen", + "services_environments_apiServiceUrlRequiredForQueries": "Die URL des API-Dienstes ist zum Abrufen von Abfragen erforderlich", + "services_environments_failedToFetchWorkspaceQueries": "Abfragen zum Arbeitsbereich konnten nicht abgerufen werden", + "services_environments_apiServiceUrlNotConfigured": "API-Dienst-URL nicht konfiguriert", + "services_environments_licenseCheckFailed": "Lizenzprüfung fehlgeschlagen", + "services_environments_apiKeyRequiredForDeploymentId": "Der API-Schlüssel ist erforderlich, um die Einsatz-ID abzurufen.", + "services_environments_failedToFetchDeploymentId": "Einsatz-ID konnte nicht abgerufen werden", + "services_enterprise_missingEnvironmentId": "Fehlende Umgebungs-ID", + "services_enterprise_failedToFetchManagedWorkspaces": "Verwaltete Arbeitsbereiche konnten nicht abgerufen werden", + "services_enterprise_missingRequiredParamsToConnectOrg": "Erforderliche Parameter für die Verbindung des Arbeitsbereichs fehlen", + "services_enterprise_failedToConnectOrg": "Verbindung zum Arbeitsbereich fehlgeschlagen", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "Fehlende Arbeitsbereich-GID, um die Verbindung zum Arbeitsbereich zu trennen", + "services_enterprise_failedToUnconnectOrg": "Verbindung zum Arbeitsbereich konnte nicht getrennt werden", + "services_enterprise_failedToConnectApp": "Verbindung zur App fehlgeschlagen", + "services_enterprise_failedToUnconnectApp": "Verbindung zur Anwendung konnte nicht getrennt werden", + "services_enterprise_failedToFetchDataSources": "Datenquellen konnten nicht abgerufen werden", + "services_enterprise_failedToDeployDataSource": "Datenquelle konnte nicht bereitgestellt werden", + "services_enterprise_failedToDisconnectManagedDataSource": "Verwaltete Datenquelle konnte nicht getrennt werden", + "services_enterprise_environmentIdRequired": "Umwelt-ID ist erforderlich", + "services_enterprise_failedToFetchQueries": "Abfragen konnten nicht abgerufen werden", + "services_enterprise_environmentIdAndQueryGidRequired": "Environment ID und Query GID sind erforderlich", + "services_enterprise_failedToDeployQuery": "Abfrage konnte nicht bereitgestellt werden", + "services_enterprise_queryGidRequired": "Abfrage der GID ist erforderlich", + "services_enterprise_failedToDisconnectQuery": "Abfrage konnte nicht getrennt werden", + "services_apps_failedToFetchApps": "Anwendungen können nicht abgerufen werden", + "services_apps_failedToDeployApp": "Anwendung kann nicht bereitgestellt werden", + "services_datasources_workspaceIdRequired": "Arbeitsbereich-ID ist erforderlich", + "services_datasources_apiKeyRequiredToFetchDataSources": "API-Schlüssel ist erforderlich, um Datenquellen abzurufen", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "Die URL des API-Dienstes ist erforderlich, um Datenquellen abzurufen.", + "services_datasources_failedToFetchDataSources": "Datenquellen konnten nicht abgerufen werden", + "services_datasources_failedToDeployDataSource": "Datenquelle konnte nicht bereitgestellt werden", + "services_workspace_failedToFetchWorkspaces": "Abrufen von Arbeitsbereichen fehlgeschlagen", + "services_workspace_failedToDeployWorkspace": "Bereitstellung des Arbeitsbereichs fehlgeschlagen", + "services_managedObjects_missingRequiredParameters": "Fehlende erforderliche Parameter", + "services_managedObjects_failedToCheckManagedStatus": "Prüfung des verwalteten Status fehlgeschlagen", + "services_managedObjects_failedToSetAsManaged": "{{objType}} konnte nicht als verwaltet festgelegt werden", + "services_managedObjects_failedToRemoveFromManaged": "{{objType}} konnte nicht aus verwalteten Dateien entfernt werden", + "services_managedObjects_missingEnvironmentId": "Fehlende Umgebungs-ID", + "services_managedObjects_failedToFetchManagedObjects": "Verwaltete Objekte konnten nicht abgerufen werden", + "services_managedObjects_failedToFetchManagedObject": "Verwaltetes Objekt konnte nicht geholt werden", + "services_managedObjects_managedObjectNotFound": "Verwaltetes Objekt für objGid nicht gefunden: ___PLATZHALTER0___}", + "services_license_apiServiceUrlRequired": "Die URL des API-Dienstes ist erforderlich", + "services_license_licenseInformationUnavailable": "Lizenzinformationen nicht verfügbar", + "services_license_licenseCheckTookTooLong": "Lizenzkontrolle dauerte zu lange", + "services_license_licenseServiceNotAvailable": "Lizenzservice nicht verfügbar", + "services_license_authenticationRequired": "Authentifizierung erforderlich - bitte prüfen Sie den API-Schlüssel", + "services_license_licenseServiceTemporarilyUnavailable": "Lizenzdienst vorübergehend nicht verfügbar", + "services_license_remainingAPICalls": "{{remaining}} verbleibend ({{used}}/{{total}} verwendet, {{percentage}}%)", + }, + "subscription": { + ...en.subscription, + + "details": "Details zum Abonnement", + "productDetails": "Details zum Produkt", + "productName": "Produktname", + "productDescription": "Beschreibung des Produkts", + "productPrice": "Produkt Preis", + "subscriptionDetails": "Details zum Abonnement", + "status": "Status", + "startDate": "Start Date", + "currentPeriodEnd": "Ende des laufenden Zeitraums", + "customerId": "Kunden-ID", + "subscriptionItems": "Abonnement-Artikel", + "itemId": "Artikel-ID", + "plan": "Plan", + "quantity": "Menge", + "product": "Produkt", + "invoices": "Rechnungen", + "invoiceNumber": "Rechnungsnummer", + "date": "Date", + "amount": "Betrag", + "link": "Link zu", + "viewInvoice": "Rechnung ansehen", + "downloadPDF": "PDF herunterladen", + "billingReason": "Grund der Abrechnung", + "subscriptionCycle": "monatliches Abonnement", + "customer": "Kunde", + "links": "Links", + "paid": "Bezahlt", + "unpaid": "Unbezahlt", + "noInvoices": "Keine Rechnungen verfügbar", + "costVolumeDevelopment": "Kosten-/Volumenentwicklung", + "noUsageRecords": "Keine Nutzungsaufzeichnungen verfügbar", + "itemDescription": "Artikel Beschreibung", + "periodStart": "Zeitraum Beginn", + "periodEnd": "Ende des Zeitraums", + "billingReason.subscription_cycle": "Abonnement-Zyklus", + "billingReason.subscription_create": "Erstellung von Abonnements", + "billingReason.manual": "Manuelle Abrechnung", + "billingReason.upcoming": "Kommende Abrechnung", + "billingReason.subscription_threshold": "Schwellenwert für Abonnements", + "billingReason.subscription_update": "Abonnement-Update", + "backToSubscriptions": "Zurück zu Abonnements", + "manageSubscription": "Verwalten Sie Ihre Abonnements", + "subscriptionHelp": "Hilfe zum Abonnement", + "subscriptionHelpDescription": "Wenn Sie Fragen haben, kontaktieren Sie uns bitte. Wir helfen Ihnen gerne weiter. service@lowcoder.cloud", + "success": "Zahlung & Abonnement Erfolg", + "successTitle": "Danke, dass Sie der Lowcoder-Familie beigetreten sind!", + "successThankYou": "Wir freuen uns sehr, Sie an Bord zu haben! Ihr Vertrauen in Lowcoder bedeutet uns alles, und wir sind bestrebt, Ihnen vom ersten Tag an ein außergewöhnliches Erlebnis zu bieten.\n\nBei Lowcoder sind Sie nicht nur ein Kunde, sondern Teil einer Gemeinschaft, die Innovation und Wachstum vorantreibt. Unser Ziel ist es, Ihnen dabei zu helfen, Ihre Ziele mit Leichtigkeit zu erreichen, sei es, dass wir Herausforderungen schnell lösen, innovative Lösungen entwickeln oder für Sie da sind, wenn Sie Unterstützung benötigen.\n\nDarauf können Sie sich freuen:\n\n- Erstklassige Unterstützung: Unser Team ist bereit, Sie bei jedem Schritt zu unterstützen.\n- Kontinuierliche Innovation: Wir verbessern uns ständig, um Ihnen die besten Tools und Funktionen zu bieten.\n- Eine Partnerschaft für den Erfolg: Ihr Erfolg ist unsere Priorität.\n\nVielen Dank, dass Sie uns inspirieren, Grenzen zu überschreiten und jeden Tag nach Spitzenleistungen zu streben. Wir können es kaum erwarten, zu sehen, was wir gemeinsam aufbauen werden.\n\nWillkommen an Bord! Lassen Sie uns außergewöhnliche Dinge schaffen.", + "successLowcoderTeam": "Das Lowcoder-Team", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "Fehler beim Abrufen von Produktdetails.", + "fetchSubscriptionDetails": "Fehler beim Abrufen von Abonnementdetails.", + "fetchInvoices": "Fehler beim Abrufen von Rechnungen.", + }, + "auditLog": { + ...en.auditLog, + + "title": "Audit Log Detail", + "geoLocation": "Geo-Standort", + "browserData": "Browser / System Metadata", + "browser": "Browser", + "OS": "OS", + "device": "Gerät", + "deviceType": "Gerätetyp", + "engine": "Motor", + "webview": "Webansicht", + "eventDetail": "Ereignis Detail", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Verwaltung", + "superAdmin": "Super Verwalter", + "adminGroupRoleInfo": "Admin kann Gruppenmitglieder und Ressourcen verwalten", + "adminOrgRoleInfo": "Admins besitzen alle Ressourcen und können Gruppen verwalten.", + "member": "Mitglied", + "memberGroupRoleInfo": "Mitglied kann Gruppenmitglieder sehen", + "memberOrgRoleInfo": "Mitglieder können nur Ressourcen nutzen oder besuchen, zu denen sie Zugang haben.", + "title": "Mitglieder", + "createGroup": "Gruppe erstellen", + "newGroupPrefix": "Neue Gruppe ", + "allMembers": "Alle Mitglieder", + "deleteModalTitle": "Diese Gruppe löschen", + "deleteModalContent": "Die gelöschte Gruppe kann nicht wiederhergestellt werden. Bist du sicher, dass du die Gruppe löschen willst?", + "addMember": "Mitglieder hinzufügen", + "nameColumn": "Benutzer Name", + "joinTimeColumn": "Beitrittszeit", + "actionColumn": "Operation", + "roleColumn": "Rolle", + "exitGroup": "Ausstiegsgruppe", + "moveOutGroup": "Aus Gruppe entfernen", + "inviteUser": "Mitglieder einladen", + "exitOrg": "Lass", + "exitOrgDesc": "Bist du sicher, dass du diesen Arbeitsplatz verlassen willst?", + "moveOutOrg": "entfernen", + "moveOutOrgDescSaasMode": "Bist du sicher, dass du den Benutzer {name} aus diesem Arbeitsbereich entfernen möchtest?", + "moveOutOrgDesc": "Bist du sicher, dass du Benutzer {name} entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", + "devGroupTip": "Mitglieder der Entwicklergruppe haben die Berechtigung, Apps und Datenquellen zu erstellen.", + "lastAdminQuit": "Der letzte Administrator kann nicht aussteigen.", + "organizationNotExist": "Der aktuelle Arbeitsbereich ist nicht vorhanden", + "inviteUserHelp": "Du kannst den Einladungslink zum Versenden an den Nutzer kopieren", + "inviteUserLabel": "Einladungslink:", + "inviteCopyLink": "Link kopieren", + "inviteText": "{userName} lädt dich ein, dem Arbeitsbereich %r@\\\"{organization}%r@\\\" beizutreten, Klicke auf den Link, um beizutreten: {inviteLink}", + "inviteByEmailHelp": "Sie können eine oder mehrere E-Mail-Adressen eingeben, um Einladungslinks zu versenden", + "inviteByEmailLabel": "Emails eingeben:", + "inviteByEmailButton": "Einladungen versenden", + "inviteByEmailSuccess": "Einladungen erfolgreich verschickt!", + "inviteByEmailError": "Beim Versenden der Einladungen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", + "noValidEmails": "Keine gültigen Emails gefunden", + "groupName": "Gruppe Name", + "createTime": "Erstellt", + "manageBtn": "Verwalte", + "userDetail": "Einzelheiten", + "syncDeleteTip": "Diese Gruppe wurde aus der Adressbuchquelle gelöscht", + "syncGroupTip": "Diese Gruppe ist eine Adressbuch-Synchronisationsgruppe und kann nicht bearbeitet werden", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Neuer Arbeitsbereich (Organisation)", + "title": "Arbeitsbereich", + "createOrg": "Arbeitsbereich erstellen (Organisation)", + "deleteModalTitle": "Bist du sicher, dass du diesen Arbeitsbereich löschen willst?", + "deleteModalContent": "Du bist dabei, diesen Arbeitsbereich {permanentlyDelete} zu löschen. Sobald er gelöscht ist, wird der Arbeitsbereich {notRestored}.", + "permanentlyDelete": "Dauerhaft", + "notRestored": "Kann nicht wiederhergestellt werden", + "deleteModalLabel": "Bitte gib den Arbeitsbereichsnamen {name} ein, um den Vorgang zu bestätigen:", + "deleteModalTip": "Bitte Arbeitsbereichsname eingeben", + "deleteModalErr": "Der Name des Arbeitsbereichs ist inkorrekt", + "deleteModalBtn": "löschen", + "editOrgTitle": "Arbeitsbereich-Informationen bearbeiten", + "orgNameLabel": "Arbeitsbereich Name:", + "orgNameCheckMsg": "Der Name des Arbeitsbereichs darf nicht leer sein", + "orgLogo": "Arbeitsbereich Logo:", + "logoModify": "Bild ändern", + "inviteSuccessMessage": "Erfolgreich dem Arbeitsbereich beitreten", + "inviteFailMessage": "Beitritt zum Arbeitsbereich fehlgeschlagen", + "uploadErrorMessage": "Upload-Fehler", + "orgName": "Arbeitsbereich Name", + }, + "freeLimit": "Kostenlose Probefahrt", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Registerkarte wechseln", + "switchTabDesc": "Ausgelöst beim Wechsel der Registerkarten", + "tab": "Registerkarten", + "atLeastOneTabError": "Der Tab-Container hält mindestens einen Tab fest", + "selectedTabKeyDesc": "Aktuell ausgewählte Registerkarte", + "iconPosition": "Icon Position", + "placement": "Platzierung der Registerkarten", + "showTabs": "Registerkarten anzeigen", + "gutter": "Lücke", + "gutterTooltip": "Der Abstand zwischen den Tabs in px", + "tabsCentered": "Zentrierte Registerkarten", + "destroyInactiveTab": "Inaktives TabPane zerstören", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Ziehen Sie Komponenten aus dem rechten Fenster oder", + "openDialogButton": "Erstelle ein Formular aus einer deiner Datenquellen", + "resetAfterSubmit": "Zurücksetzen nach erfolgreicher Übermittlung", + "initialData": "Erste Daten", + "disableSubmit": "Abschicken deaktivieren", + "success": "Erfolgreich generiertes Formular", + "selectCompType": "Komponententyp auswählen", + "dataSource": "Datenquelle: ", + "invalidFormMessage": "Benutzerdefinierte Meldung bei ungültigem Formular", + "selectSource": "Quelle wählen", + "table": "Tabelle: ", + "selectTable": "Tabelle auswählen", + "columnName": "Spalte Name", + "dataType": "Datentyp", + "compType": "Komponente Typ", + "required": "Erforderlich", + "generateForm": "Formular generieren", + "compSelectionError": "Unkonfigurierter Spaltentyp", + "compTypeNameError": "Der Name des Komponententyps konnte nicht ermittelt werden", + "noDataSourceSelected": "Keine Datenquelle ausgewählt", + "noTableSelected": "Kein Tisch ausgewählt", + "noColumn": "Keine Säule", + "noColumnSelected": "Keine Spalte ausgewählt", + "noDataSourceFound": "Keine unterstützte Datenquelle gefunden. Eine neue Datenquelle erstellen", + "noTableFound": "Es wurden keine Tabellen in dieser Datenquelle gefunden, bitte wähle eine andere Datenquelle", + "noColumnFound": "In dieser Tabelle wurde keine unterstützte Spalte gefunden. Bitte wähle eine andere Tabelle", + "formTitle": "Formular Titel", + "name": "Name", + "nameTooltip": "Der Name des Attributs in den Daten des Formulars ist standardmäßig der Komponentenname, wenn er leer gelassen wird.", + "notSupportMethod": "Nicht unterstützte Methoden: ", + "notValidForm": "Das Formular ist nicht gültig", + "resetDesc": "Formulardaten auf Standardwert zurücksetzen", + "clearDesc": "Formulardaten löschen", + "setDataDesc": "Formulardaten einstellen", + "valuesLengthError": "Parameter Nummer Fehler", + "valueTypeError": "Parameter Typ Fehler", + "dataDesc": "Aktuelle Formulardaten", + "loadingDesc": "Ob das Formular geladen ist?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Öffnen Sie", + "openDesc": "Ausgelöst, wenn das modale Dialogfeld geöffnet wird", + "close": "Schließen", + "closeDesc": "Ausgelöst, wenn das modale Dialogfeld geschlossen wird", + "openModalDesc": "Öffnen Sie das Dialogfeld", + "closeModalDesc": "Das Dialogfeld schließen", + "visibleDesc": "Ist es sichtbar? Wenn ja, wird das aktuelle Dialogfeld eingeblendet", + "title": "Titel der Schublade", + "titleAlign": "Ausrichtung der Titel", + "modalHeight": "Modale Höhe", + "modalHeightTooltip": "Pixel, Beispiel: 222", + "modalWidth": "Modale Breite", + "modalWidthTooltip": "Zahl oder Prozentsatz, Beispiel: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Zeilenanzahl", + "noOfRowsTooltip": "Anzahl der Zeilen in der Liste - wird normalerweise auf eine Variable gesetzt (z. B. \\'{{query1.data.length}}\\'), um Abfrageergebnisse zu präsentieren", + "noOfColumns": "Anzahl der Kolonnen", + "itemIndexName": "Datenelement Index Name", + "itemIndexNameDesc": "Der Variablenname, der sich auf den Index des Elements bezieht, Standard: {default}", + "itemDataName": "Datenelement Objektname", + "itemDataNameDesc": "Der Variablenname, der sich auf das Datenobjekt des Items bezieht, Standard als {default}", + "itemsDesc": "Daten der Komponenten in der Liste offenlegen", + "dataDesc": "Die in der aktuellen Liste verwendeten JSON-Daten", + "dataTooltip": "Wenn du nur eine Zahl einträgst, wird dieses Feld als Zeilenzahl betrachtet und die Daten werden als leer angesehen.", + "enableSorting": "Sortierung zulassen", + }, + "navigation": { + ...en.navigation, + + "addText": "Untermenüpunkt hinzufügen", + "logoURL": "Navigation Logo URL", + "horizontalAlignment": "Horizontale Ausrichtung", + "logoURLDesc": "Du kannst ein Logo auf der linken Seite anzeigen, indem du einen URI-Wert oder einen Base64-String eingibst, z.B. data:image/png;base64,AAA... CCC", + "itemsDesc": "Hierarchische Navigationsmenüpunkte", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Untermenü {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Aktiv", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "Die Quell-URL für den IFrame-Inhalt. Achte darauf, dass die URL HTTPS oder localhost ist. Vergewissere dich auch, dass die URL nicht durch die Content Security Policy (CSP) des Browsers blockiert wird. Der Header \\'X-Frame-Options\\' sollte nicht auf \\'DENY\\' oder \\'SAMEORIGIN\\' gesetzt sein.", + "allowDownload": "Downloads zulassen", + "allowSubmitForm": "Formular einreichen zulassen", + "allowMicrophone": "Mikrofon zulassen", + "allowCamera": "Kamera zulassen", + "allowPopup": "Popups zulassen", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Standard Boolescher Wert", + "open": "Auf", + "close": "Aus", + "openDesc": "Ausgelöst, wenn der Schalter eingeschaltet wird", + "closeDesc": "Ausgelöst, wenn der Schalter ausgeschaltet ist", + "valueDesc": "Aktueller Status des Schalters", + }, + "signature": { + ...en.signature, + + "tips": "Hinweistext", + "signHere": "Hier unterschreiben", + "showUndo": "Rückgängig machen anzeigen", + "showClear": "Löschen anzeigen", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Alle derzeit gespeicherten Datenelemente", + "setItemDesc": "Einen Artikel hinzufügen", + "removeItemDesc": "Einen Artikel entfernen", + "clearItemDesc": "Alle Artikel löschen", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "URL öffnen", + "openApp": "App öffnen", + "copyToClipboard": "In die Zwischenablage kopieren", + "downloadFile": "Datei herunterladen", + "logoutUser": "Benutzer abmelden", + "resetPassword": "Passwort zurücksetzen", + }, + "messageComp": { + ...en.messageComp, + + "info": "Eine Benachrichtigung senden", + "loading": "Ladebestätigung senden", + "success": "Erfolgsbenachrichtigung senden", + "warn": "Eine Warnmeldung senden", + "error": "Eine Fehlerbenachrichtigung senden", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "eine Benachrichtigung schließen", + "info": "Eine Benachrichtigung senden", + "loading": "Ladebestätigung senden", + "success": "Erfolgsbenachrichtigung senden", + "warn": "Eine Warnmeldung senden", + "error": "Eine Fehlerbenachrichtigung senden", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Thema wechseln", + }, + "transformer": { + ...en.transformer, + + "preview": "Vorschau", + "docLink": "Lies mehr über Transformers...", + "previewSuccess": "Vorschau Erfolg", + "previewFail": "Vorschau Fail", + "deleteMessage": "Transformator löschen Erfolg. Du kannst {undoKey} zum Rückgängigmachen verwenden.", + "documentationText": "Transformers sind für die Datenumwandlung und Wiederverwendung deines mehrzeiligen JavaScript-Codes gedacht. Verwende Transformers, um Daten aus Abfragen oder Komponenten an deine lokalen App-Anforderungen anzupassen. Im Gegensatz zu JavaScript-Abfragen sind Transformer nur für Leseoperationen ausgelegt. Das bedeutet, dass du innerhalb eines Transformers keine Abfrage auslösen oder einen temporären Zustand aktualisieren kannst.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Anfangswert", + "valueTooltip": "Der Anfangswert, der im temporären Zustand gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.", + "docLink": "Lies mehr über temporäre Zustände...", + "pathTypeError": "Pfad muss entweder ein String oder ein Array von Werten sein", + "unStructuredError": "Unstrukturierte Daten {prev} können nicht von {path} aktualisiert werden", + "valueDesc": "Vorläufiger Zustandswert", + "deleteMessage": "Der temporäre Zustand wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", + "documentationText": "Temporäre Zustände sind eine leistungsstarke Funktion zur Verwaltung komplexer Variablen, die den Zustand von Komponenten in deiner Anwendung dynamisch aktualisieren. Diese Zustände dienen als Zwischenspeicher für Daten, die sich im Laufe der Zeit aufgrund von Benutzerinteraktionen oder anderen Prozessen ändern können.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Daten", + "dataDesc": "Daten des aktuellen Data Responders", + "dataTooltip": "Wenn diese Daten geändert werden, lösen sie nachfolgende Aktionen aus.", + "docLink": "Lies mehr über die Data Responders...", + "deleteMessage": "Der Data Responder wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", + "documentationText": "Wenn du eine App entwickelst, kannst du den Komponenten Ereignisse zuweisen, um Änderungen an bestimmten Daten zu überwachen. Eine Tabellenkomponente kann zum Beispiel Ereignisse wie %r@\\\"Row select change%r@\\\", %r@\\\"Filter change%r@\\\", %r@\\\"Sort change%r@\\\" und %r@\\\"Page change%r@\\\" haben, um Änderungen in der selectedRow-Eigenschaft zu verfolgen. Für Änderungen in temporären Zuständen, Transformatoren oder Abfrageergebnissen, für die keine Standardereignisse zur Verfügung stehen, werden jedoch Data Responder verwendet. Mit ihnen kannst du alle Datenänderungen erkennen und darauf reagieren.", + }, + "theme": { + ...en.theme, + + "title": "Themen", + "createTheme": "Thema erstellen", + "themeName": "Themenname:", + "themeNamePlaceholder": "Bitte gib einen Themennamen ein", + "defaultThemeTip": "Standard-Theme:", + "createdThemeTip": "Das Thema, das du erstellt hast:", + "option": "Option{index}", + "input": "Eingabe", + "confirm": "Ok", + "emptyTheme": "Keine Themen verfügbar", + "click": "", + "toCreate": "", + "nameColumn": "Name", + "defaultTip": "Standard", + "updateTimeColumn": "Update Zeit", + "edit": "bearbeiten", + "cancelDefaultTheme": "Standardthema aufheben", + "setDefaultTheme": "Als Standardthema festlegen", + "copyTheme": "Thema duplizieren", + "setSuccessMsg": "Einstellung Erfolglos", + "cancelSuccessMsg": "Unsetting Erfolglos", + "deleteSuccessMsg": "Löschung Erfolglos", + "checkDuplicateNames": "Der Themenname existiert bereits, bitte gib ihn erneut ein", + "copySuffix": " Kopiere", + "saveSuccessMsg": "Erfolgreich gerettet", + "leaveTipTitle": "Tipps", + "leaveTipContent": "Du bist noch nicht gerettet, bestätigst du den Austritt?", + "leaveTipOkText": "Lass", + "goList": "Zurück zur Liste", + "saveBtn": "Speichern", + "mainColor": "Hauptfarben", + "text": "Textfarben", + "layout": "Layout-Einstellungen", + "fonts": "Schriftart-Einstellungen", + "components": "Komponentenvorlagen", + "charts": "eCharts Definition", + "defaultTheme": "Standard", + "yellow": "Gelb", + "green": "Grün", + "previewTitle": "Themenvorschau\nBeispielkomponenten, die deine Themenfarben verwenden", + "dateColumn": "Datum", + "emailColumn": "E-Mail", + "phoneColumn": "Telefon", + "subTitle": "Titel", + "linkLabel": "Link zu", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Fortschritt", + "sliderLabel": "Schieber", + "radioLabel": "Radio", + "checkboxLabel": "Kontrollkästchen", + "buttonLabel": "Formular Schaltfläche", + "switch": "Schalter", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.de", + "previewEmail3": "imgur.com", + "previewEmail4": "globo.de", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Diagrammstil-Vorschau", + "chartSpending": "Ausgaben", + "chartBudget": "Haushalt", + "chartAdmin": "Verwaltung", + "chartFinance": "Finanzen", + "chartSales": "Verkäufe", + "chartFunnel": "Trichterdiagramm", + "chartShow": "anzeigen", + "chartClick": "Klick", + "chartVisit": "Besuche", + "chartQuery": "Abfrage", + "chartBuy": "Kaufen", + "canvas": "Canvas-Einstellungen", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Primärfarbe", + "primaryDesc": "Standard-Primärfarbe, die von den meisten Komponenten verwendet wird", + "textDark": "Dunkle Textfarbe", + "textDarkDesc": "Wird verwendet, wenn die Hintergrundfarbe hell ist", + "textLight": "Helle Textfarbe", + "textLightDesc": "Wird verwendet, wenn die Hintergrundfarbe dunkel ist", + "canvas": "Canvas Farbe", + "canvasDesc": "Standard-Hintergrundfarbe der App", + "primarySurface": "Container Farbe", + "primarySurfaceDesc": "Standard-Hintergrundfarbe für Komponenten wie z.B. Tabellen", + "borders": "Border Styles", + "spacing": "Abstandsstile", + "font": "Font Styles", + "fonts": "Schriftarten", + "borderRadius": "Radius des Rahmens", + "borderRadiusDesc": "Standard-Radius des Rahmens, der von den meisten Komponenten verwendet wird", + "borderColor": "Farbe der Umrandung", + "borderColorDesc": "Standard-Rahmenfarbe, die von den meisten Komponenten verwendet wird", + "borderWidth": "Border Width", + "borderWidthDesc": "Standard-Rahmenbreite, die von den meisten Komponenten verwendet wird", + "borderStyle": "Border Style", + "borderStyleDesc": "Standard-Rahmenstil, der von den meisten Komponenten verwendet wird", + "fontFamily": "Schriftfamilie", + "fontFamilyDesc": "Standard-Schriftfamilie, die von den meisten Komponenten verwendet wird", + "chart": "Chart-Stil", + "chartDesc": "JSON Eingabe für Echarts", + "echartsJson": "Chart-Stil JSON", + "margin": "Außenabstand", + "marginDesc": "Standard Außenabstand, der typischerweise für die meisten Komponenten verwendet wird", + "padding": "Innenabstand", + "paddingDesc": "Standard Innenabstand, der für die meisten Komponenten verwendet wird", + "containerHeaderPadding": "Kopfbereich Innenabstand", + "containerheaderpaddingDesc": "Standard Kopfbereich Innenabstand, der für die meisten Komponenten verwendet wird", + "gridColumns": "Canvas Rasterspalten", + "gridColumnsDesc": "Standardanzahl von Spalten, welcher für den Canvas verwendet wird", + "loadingIndicators": "Ladeindikatoren", + "showComponentLoadingIndicators": "Ladeindikatoren beim Laden einer Komponente anzeigen", + "showDataLoadingIndicators": "Zeige Ladeindikatoren während des Ladens von Daten", + "dataLoadingIndicator": "Daten-Ladeindikator", + "background": "Hintergrund Stile", + "gridSettings": "Raster-Einstellungen", + "gridRowHeight": "Raster Zeilenhöhe", + "gridRowHeightDesc": "Höhe der einzelnen Zeilen im Gitter", + "gridRowCount": "Anzahl der Rasterzeilen", + "gridRowCountDesc": "Maximale Anzahl von Zeilen im Gitter", + "gridPaddingX": "Horizontale Polsterung", + "gridPaddingXDesc": "Horizontale Polsterung der Leinwand", + "gridPaddingY": "Vertikale Polsterung", + "gridPaddingYDesc": "Vertikale Polsterung der Leinwand", + "gridBgImage": "Hintergrundbild", + "gridBgImageDesc": "Hintergrundbild auf der Leinwand", + "gridBgImageRepeat": "Hintergrundbild wiederholen", + "gridBgImageRepeatDesc": "Wiederholung des Hintergrundbildes auf der Leinwand", + "gridBgImageSize": "Größe des Hintergrundbildes", + "gridBgImageSizeDesc": "Größe des Hintergrundbildes auf der Leinwand", + "gridBgImagePosition": "Hintergrundbild Position", + "gridBgImagePositionDesc": "Position des Hintergrundbildes auf der Leinwand", + "gridBgImageOrigin": "Hintergrundbild Ursprung", + "gridBgImageOriginDesc": "Ursprung des Hintergrundbildes der Leinwand", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugins", + "npmPluginTitle": "npm-Plugins", + "npmPluginDesc": "Richte npm-Plugins für alle Anwendungen im aktuellen Arbeitsbereich ein.", + "npmPluginEmpty": "Es wurden keine npm-Plugins hinzugefügt.", + "npmPluginAddButton": "Ein npm-Plugin hinzufügen", + "saveSuccess": "Erfolgreich gerettet", + }, + "advanced": { + ...en.advanced, + + "title": "Fortgeschrittene", + "defaultHomeTitle": "Standard-Homepage", + "defaultHomeHelp": "Die Homepage ist die App, die alle Nicht-Entwickler standardmäßig sehen, wenn sie sich anmelden. Hinweis: Stelle sicher, dass die ausgewählte App auch für Nicht-Entwickler zugänglich ist.", + "defaultHomePlaceholder": "Wähle die Standard-Homepage", + "saveBtn": "Speichern", + "preloadJSTitle": "JavaScript vorladen", + "preloadJSHelp": "Richte vorgeladenen JavaScript-Code für alle Apps im aktuellen Arbeitsbereich ein.", + "preloadCSSTitle": "CSS vorladen", + "preloadCSSHelp": "Richte vorgeladenen CSS-Code für alle Apps im aktuellen Arbeitsbereich ein.", + "preloadCSSApply": "Auf die Startseite des Arbeitsbereichs anwenden", + "preloadLibsTitle": "JavaScript-Bibliothek", + "preloadLibsHelp": "Richte vorgeladene JavaScript-Bibliotheken für alle Anwendungen im aktuellen Arbeitsbereich ein, und das System hat lodash, day.js, uuid, numbro zur direkten Verwendung eingebaut. Die JavaScript-Bibliotheken werden vor der Initialisierung der App geladen, was einen gewissen Einfluss auf die Leistung der App hat.", + "preloadLibsEmpty": "Es wurden keine JavaScript-Bibliotheken hinzugefügt", + "preloadLibsAddBtn": "Eine Bibliothek hinzufügen", + "saveSuccess": "Erfolgreich gerettet", + "AuthOrgTitle": "Willkommensbildschirm des Arbeitsbereichs", + "AuthOrgDescrition": "Die URL, unter der sich deine Nutzer beim aktuellen Arbeitsbereich anmelden können.", + "APIConsumption": "API-Verbrauch", + "APIConsumptionDescription": "Hier können Sie den API-Verbrauch für alle Apps im aktuellen Arbeitsbereich sehen.", + "overallAPIConsumption": "Gesamter API-Verbrauch in diesem Arbeitsbereich bis jetzt", + "lastMonthAPIConsumption": "API-Verbrauch des letzten Monats, in diesem Arbeitsbereich", + "npmRegistryTitle": "Benutzerdefinierte NPM-Registrierung", + "npmRegistryHelp": "Richten Sie eine benutzerdefinierte NPM-Registry ein, um den Abruf von Plugins aus einer privaten NPM-Registry zu ermöglichen.", + "showHeaderInPublicApps": "Kopfzeile öffentlich anzeigen", + "showHeaderInPublicAppsHelp": "Legen Sie die Sichtbarkeit des Headers in der öffentlichen Ansicht für alle Apps fest", + }, + "branding": { + ...en.branding, + + "title": "Branding-Einstellungen", + "general": "Allgemeine Einstellungen", + "selectWorkspace": "Arbeitsbereich auswählen", + "brandingName": "Markenname", + "brandingNamePlaceholder": "Markenname eingeben", + "brandingDescription": "Branding Beschreibung", + "brandingDescriptionPlaceholder": "Beschreibung des Brandings eingeben", + "logoSection": "Logos", + "logo": "Logo", + "logoHelp": "Laden Sie das Logo Ihres Unternehmens im SVG- oder PNG-Format hoch.", + "logoUrlHelp": "Geben Sie eine gültige Bildurl für das Logo an.", + "logoUrlPlaceholder": "Bildurl für Logo bereitstellen", + "squareLogo": "Quadratisches Logo", + "squareLogoHelp": "Laden Sie eine quadratische Version Ihres Logos im SVG- oder PNG-Format hoch.", + "squareLogoUrlHelp": "Geben Sie eine gültige Bildurl für das quadratische Logo an.", + "squareLogoUrlPlaceholder": "Geben Sie die URL für das quadratische Logo an.", + "colorFontSection": "Farben und Schriftarten", + "mainBrandingColor": "Hauptbrandingfarbe", + "mainBrandingColorHelp": "Wählen Sie die Hauptfarbe für Ihr Branding.", + "editorHeaderColor": "Editor-Header-Farbe", + "editorHeaderColorHelp": "Wählen Sie die Farbe des Headers des Editors.", + "adminSidebarColor": "Admin-Seitenleistenfarbe", + "adminSidebarColorHelp": "Wählen Sie die Farbe der Admin-Seitenleiste.", + "adminSidebarFontColor": "Schriftfarbe der Admin-Seitenleiste", + "adminSidebarFontColorHelp": "Wählen Sie die Schriftfarbe für die Seitenleiste des Administrators.", + "adminSidebarActiveBgColor": "Hintergrundfarbe der Admin-Seitenleiste für ausgewählte Elemente", + "adminSidebarActiveBgColorHelp": "Wählen Sie die Hintergrundfarbe des ausgewählten Elements für die Seitenleiste des Administrators.", + "adminSidebarActiveFontColor": "Schriftfarbe des ausgewählten Elements in der Admin-Seitenleiste", + "adminSidebarActiveFontColorHelp": "Wählen Sie die Schriftfarbe des ausgewählten Elements für die Seitenleiste des Administrators.", + "editorSidebarColor": "Editor-Seitenleistenfarbe", + "editorSidebarColorHelp": "Wählen Sie die Farbe der Seitenleiste des Editors.", + "editorSidebarFontColor": "Editor Seitenleiste Schriftfarbe", + "editorSidebarFontColorHelp": "Wählen Sie die Schriftfarbe für die Seitenleiste des Editors.", + "editorSidebarActiveBgColor": "Hintergrundfarbe des ausgewählten Elements in der Editor-Seitenleiste", + "editorSidebarActiveBgColorHelp": "Wählen Sie die Hintergrundfarbe des ausgewählten Elements für die Seitenleiste des Editors.", + "editorSidebarActiveFontColor": "Schriftfarbe des ausgewählten Elements in der Editor-Seitenleiste", + "editorSidebarActiveFontColorHelp": "Wählen Sie die Schriftfarbe des ausgewählten Elements für die Seitenleiste des Editors.", + "font": "Schriftart", + "fontHelp": "Wählen Sie eine Schriftart aus Google Fonts für Ihre Anwendung.", + "textSection": "Texte und Seiten", + "errorPage": "Fehlerseiten-Text", + "errorPageHelp": "Geben Sie den Text ein, der auf der Fehlerseite angezeigt wird.", + "signUpPage": "Anmeldeseiten-Text", + "signUpPageHelp": "Geben Sie den Text ein, der auf der Anmeldeseite angezeigt wird.", + "loggedOutPage": "Abmeldeseiten-Text", + "loggedOutPageHelp": "Geben Sie den Text ein, der auf der Abmeldeseite angezeigt wird.", + "standardDescription": "Standardbeschreibung", + "standardDescriptionHelp": "Geben Sie die Standardbeschreibung für SEO-Metainformationen ein.", + "standardTitle": "Standardtitel", + "standardTitleHelp": "Geben Sie den Standardtitel für SEO-Metainformationen ein.", + "showDocumentation": "Dokumentation anzeigen", + "submitIssue": "Problem melden erlauben", + "whatsNew": "„Neuigkeiten“ aktivieren", + "saveButton": "Einstellungen speichern", + "errorPageImage": "Laden Sie ein Bild für die Fehlerseite im SVG- oder PNG-Format hoch.", + "errorPageImageUrl": "Bild-URL für die Fehlerseite", + "errorPageImageUrlPlaceholder": "Provider-Bildurl für Fehlerseite", + "errorPageImageUrlHelp": "Geben Sie eine gültige Bildurl an, die auf der Fehlerseite angezeigt werden soll.", + "signUpPageImage": "Laden Sie ein Bild für die Registrierungsseite im SVG- oder PNG-Format hoch.", + "signUpPageImageUrl": "Bild-URL für die Anmeldeseite", + "signUpPageImageUrlPlaceholder": "Provider-Bildurl für die Anmeldeseite", + "signUpPageImageUrlHelp": "Geben Sie eine gültige Bildurl an, die auf der Anmeldeseite angezeigt werden soll.", + "loggedOutPageImage": "Laden Sie ein Bild für die Abmeldeseite im SVG- oder PNG-Format hoch.", + "showDocumentationSection": "Dokumentation Link-Einstellungen", + "showWhatsNewSection": "Was ist neu Link-Einstellungen", + "documentationLink": "Dokumentationslink", + "documentationLinkPlaceholder": "Geben Sie die URL für Ihre Dokumentation ein...", + "documentationLinkHelp": "Geben Sie eine gültige URL an, die Benutzer für die Dokumentation besuchen können.", + "whatsNewSection": "Dokumentationseinstellungen", + "whatsNewLink": "Dokumentationslink", + "whatsNewLinkPlaceholder": "Geben Sie die URL für Ihre Dokumentation ein...", + "whatsNewLinkHelp": "Geben Sie eine gültige URL an, die Benutzer für Ihre Neuigkeiten besuchen können.", + "deleteBranding": "Branding löschen", + "deleteBrandingContent": "Sind Sie sicher, dass Sie das Branding \"{orgName}\" löschen wollen?", + "fetchBrandingError": "Beim Abrufen der Markendetails ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", + "upload": "Hochladen", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Verbindung zum Server fehlgeschlagen, bitte überprüfe dein Netzwerk", + "200": "Erfolg", + "201": "Erstellt", + "204": "Kein Inhalt", + "400": "Bad Request", + "401": "Authentifizierung fehlgeschlagen, bitte melde dich erneut an", + "403": "Keine Erlaubnis, bitte kontaktiere den Administrator für eine Genehmigung", + "404": "Nicht gefunden", + "500": "Besetzter Dienst, bitte versuche es später noch einmal", + "timeout": "Zeitüberschreitung anfordern", + }, + "share": { + ...en.share, + + "title": "Teilen", + "viewer": "Betrachter", + "editor": "Herausgeber", + "owner": "Besitzer", + "datasourceViewer": "Kann verwenden", + "datasourceOwner": "Kann Managen", + }, + "debug": { + ...en.debug, + + "title": "Titel", + "switch": "Schalterkomponente: ", + }, + "module": { + ...en.module, + + "folderNotEmpty": "Ordner ist nicht leer", + "emptyText": "Keine Daten", + "docLink": "Lesen Sie mehr über Module...", + "documentationText": "Module sind vollständige Anwendungen, die in andere Anwendungen eingebunden und wiederholt werden können und wie eine einzelne Komponente funktionieren. Da Module eingebettet werden können, müssen sie in der Lage sein, mit Ihren externen Anwendungen oder Websites zu interagieren. Diese vier Einstellungen helfen, die Kommunikation mit einem Modul zu unterstützen.", + "circularReference": "Zirkuläre Referenz, aktuelles Modul/Anwendung kann nicht verwendet werden!", + "emptyTestInput": "Das aktuelle Modul hat keinen Eingang zum Testen", + "emptyTestMethod": "Das aktuelle Modul hat keine Methode zum Testen", + "name": "Name", + "input": "Eingabe", + "params": "Params", + "emptyParams": "Es wurden keine Params hinzugefügt", + "emptyInput": "Es wurde keine Eingabe hinzugefügt", + "emptyMethod": "Es wurde keine Methode hinzugefügt", + "emptyOutput": "Es wurde keine Ausgabe hinzugefügt", + "data": "Daten", + "string": "Zeichenfolge", + "number": "Nummer", + "array": "Array", + "boolean": "Boolesche", + "query": "Abfrage", + "autoScaleCompHeight": "Bauteilhöhenwaage mit Container", + "excuteMethod": "Methode {name} ausführen", + "method": "Methode", + "action": "Aktion", + "output": "Ausgabe", + "nameExists": "Name {name} bereits vorhanden", + "eventTriggered": "Ereignis {name} wird ausgelöst", + "globalPromptWhenEventTriggered": "Zeigt eine globale Aufforderung an, wenn ein Ereignis ausgelöst wird", + "emptyEventTest": "Das aktuelle Modul hat keine zu prüfenden Ereignisse", + "emptyEvent": "Es wurde kein Ereignis hinzugefügt", + "event": "Veranstaltung", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "Der Rückgabewert ist eine Funktion.", + "consume": "{Zeit}", + "JSON": "JSON anzeigen", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Erstellen...", + "created": "Erstelle {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Benutzerauthentifizierung fehlgeschlagen, bitte melde dich erneut an", + "verifyAccount": "Konto muss verifiziert werden", + "functionNotSupported": "Die aktuelle Version unterstützt diese Funktion nicht. Bitte kontaktiere das Lowcoder Business Team, um dein Konto zu aktualisieren.", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Komponente erstellen {comp} Fehlgeschlagen", + "notHandledError": "{method} Nicht ausgeführte Methode", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Navigationsleiste", + "chooseApp": "App wählen", + "iconTooltip": "Unterstützt Image src Link oder Base64 String wie data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Versteckt für nicht autorisierte Benutzer", + "queryParam": "URL-Abfrage-Parameter", + "hashParam": "URL-Hash-Parameter", + "tabBar": "Registerkarte Bar", + "emptyTabTooltip": "Konfiguriere diese Seite im rechten Fensterbereich", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Mobile)", + "800": "800px (Tablet)", + "1440": "1440px (Laptop)", + "1920": "1920px (Breitbild)", + "3200": "3200px (Super Large Screen)", + "title": "Allgemeine App-Einstellungen", + "autofill": "Autofill", + "userDefined": "Benutzerdefiniert", + "default": "Standard", + "tooltip": "Das Popover nach der Einstellung schließen", + "canvasMaxWidth": "Maximale Bildschirmbreite für diese App", + "userDefinedMaxWidth": "Benutzerdefinierte maximale Breite", + "inputUserDefinedPxValue": "Bitte gib einen benutzerdefinierten Pixelwert ein", + "maxWidthTip": "Die maximale Breite sollte größer als oder gleich 350 sein", + "themeSetting": "Angewandter Stil Thema", + "themeSettingDefault": "Standard", + "themeCreate": "Thema erstellen", + "appTitle": "Titel", + "appDescription": "Beschreibung", + "appCategory": "Kategorie", + "showPublicHeader": "Kopfzeile in der öffentlichen Ansicht anzeigen", + "canvas": "Canvas-Einstellungen", + "gridColumns": "Rasterspalten", + "gridRowHeight": "Raster Zeilenhöhe", + "gridRowCount": "Anzahl der Rasterzeilen", + "gridPaddingX": "Horizontale Polsterung der Leinwand", + "gridPaddingY": "Vertikale Polsterung der Leinwand", + "gridBgImage": "Hintergrundbild", + "gridBgImageRepeat": "Hintergrundbild wiederholen", + "gridBgImageSize": "Größe des Hintergrundbildes", + "gridBgImagePosition": "Hintergrundbild Position", + "gridBgImageOrigin": "Hintergrundbild Ursprung", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Benutzerdefinierte Abkürzungen", + "shortcut": "Abkürzung", + "action": "Aktion", + "empty": "Keine Abkürzungen", + "placeholder": "Shortcut drücken", + "otherPlatform": "Andere", + "space": "Raum", + }, + "profile": { + ...en.profile, + + "orgSettings": "Arbeitsbereich-Einstellungen", + "switchOrg": "Bereich wechseln", + "joinedOrg": "Meine Arbeitsbereiche", + "createOrg": "Arbeitsbereich erstellen", + "logout": "Abmelden", + "personalInfo": "Mein Profil", + "bindingSuccess": "Bindung {sourceName} Erfolg", + "uploadError": "Upload-Fehler", + "editProfilePicture": "Ändern Sie", + "saveUserNameTooltip": "Drücken Sie die Eingabetaste, um Ihren neuen Benutzernamen zu speichern. Wenn Sie Ihre E-Mail-Adresse sehen, bedeutet dies, dass wir sie als Benutzernamen übernommen haben und Sie sie in einen besseren ändern können. Ihre E-Mail als technischer Benutzername bleibt unangetastet.", + "changeAvatarTooltip": "Sie können PNG- oder JPG-Dateien hochladen", + "nameCheck": "Der Name darf nicht leer sein", + "name": "Name:", + "namePlaceholder": "Bitte gib deinen Namen ein", + "toBind": "Zum Binden", + "binding": "Ist Verbindlich", + "bindError": "Parameter Error, Currently Not Supported Binding.", + "bindName": "Binden {name}", + "loginAfterBind": "Nach der Bindung kannst du dich mit {name} anmelden", + "bindEmail": "E-Mail binden:", + "email": "E-Mail", + "emailCheck": "Bitte gib eine gültige E-Mail ein", + "emailPlaceholder": "Bitte gib deine E-Mail ein", + "submit": "einreichen", + "bindEmailSuccess": "Erfolgreiche E-Mail-Bindung", + "passwordModifiedSuccess": "Passwort erfolgreich geändert", + "passwordSetSuccess": "Passwort erfolgreich gesetzt", + "oldPassword": "Altes Passwort:", + "inputCurrentPassword": "Bitte gib dein aktuelles Passwort ein", + "newPassword": "Neues Passwort:", + "inputNewPassword": "Bitte gib dein neues Passwort ein", + "confirmNewPassword": "Bestätige das neue Passwort:", + "inputNewPasswordAgain": "Bitte gib dein neues Passwort erneut ein", + "password": "Passwort:", + "modifyPassword": "Passwort ändern", + "setPassword": "Passwort setzen", + "alreadySetPassword": "Passwort setzen", + "setPassPlaceholder": "Du kannst dich mit Passwort anmelden", + "setPassAfterBind": "Du kannst das Passwort nach der Kontobindung festlegen", + "socialConnections": "Soziale Bindungen", + "changeAvatar": "Avatar ändern", + "about": "Dein Account", + "userId": "Benutzer-ID", + "createdAt": "Erstellt am", + "currentOrg": "aktuelle Organisation", + "settings": "Einstellungen", + "uiLanguage": "UI-Sprache", + "info": "Info", + "createdApps": "Erstellte Apps", + "createdModules": "Erstellte Module", + "sharedApps": "Mit Ihnen geteilte Apps", + "sharedModules": "Mit Ihnen geteilte Module", + "onMarketplace": "Auf dem Marktplatz", + "howToPublish": "So veröffentlichen Sie auf dem Marktplatz", + "memberOfOrgs": "Workspaces-Mitgliedschaft", + "apiKeys": "API-Schlüssel", + "createApiKey": "API-Schlüssel erstellen", + "apiKeyInfo": "Stellen Sie sicher, dass Sie Ihren neuen API-Schlüssel jetzt kopieren. Sie werden ihn nicht mehr sehen können.", + "apiKeyName": "Name", + "apiKeyDescription": "Beschreibung", + "apiKeyCopy": "Klicke auf den API Schlüssel um den Key in die Zwischenablage zu kopieren", + "apiKey": "API-Schlüssel", + "deleteApiKey": "API-Schlüssel löschen", + "deleteApiKeyContent": "Sind Sie sicher, dass Sie diesen API-Schlüssel löschen möchten?", + "deleteApiKeyError": "Etwas ist schief gelaufen. Bitte versuche es erneut.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Tastaturkürzel", + "click": "Klick", + "global": "Global", + "toggleShortcutList": "Tastaturkurzbefehle umschalten", + "editor": "Herausgeber", + "toggleLeftPanel": "Linkes Fenster umschalten", + "toggleBottomPanel": "Unteres Fenster umschalten", + "toggleRightPanel": "Rechtes Fenster umschalten", + "toggleAllPanels": "Alle Fenster umschalten", + "preview": "Vorschau", + "undo": "Rückgängig machen", + "redo": "Redo", + "showGrid": "Raster anzeigen", + "component": "Komponente", + "multiSelect": "Mehrere auswählen", + "selectAll": "Alle auswählen", + "copy": "Kopiere", + "cut": "Schnitt", + "paste": "Kleister", + "move": "Verschiebe", + "zoom": "Größe ändern", + "delete": "löschen", + "deSelect": "Deselektiere", + "queryEditor": "Abfrage-Editor", + "excuteQuery": "Aktuelle Abfrage ausführen", + "editBox": "Text-Editor", + "formatting": "Format", + "openInLeftPanel": "Im linken Fenster öffnen", + }, + "help": { + ...en.help, + + "videoText": "Übersicht", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Du kannst keine neue Anwendung oder Datenquelle erstellen?", + "permissionDenyContent": "Du hast nicht die Berechtigung, die Anwendung und die Datenquelle zu erstellen. Bitte kontaktiere den Administrator, um der Entwicklergruppe beizutreten.", + "appName": "Tutorial Anwendung", + "chat": "Chatte mit uns", + "docs": "Dokumentation ansehen", + "editorTutorial": "Tutorial-Editor", + "update": "Was gibt's Neues?", + "version": "Version", + "versionWithColon": "Version:", + "submitIssue": "Problem melden", + }, + "header": { + ...en.header, + + "nameCheckMessage": "Der Name kann nicht leer sein", + "viewOnly": "Nur Ansicht", + "recoverAppSnapshotTitle": "Diese Version wiederherstellen?", + "recoverAppSnapshotContent": "Stelle die aktuelle App auf die Version wieder her, die zum Zeitpunkt {time} erstellt wurde.", + "recoverAppSnapshotMessage": "Diese Version wiederherstellen", + "returnEdit": "Zurück zum Bearbeiten", + "deploy": "Veröffentlichen", + "export": "Exportieren nach JSON", + "editName": "Name bearbeiten", + "duplicate": "{type} Duplizieren", + "snapshot": "Bearbeitungs-Historie", + "scriptsAndStyles": "Skripte und Stil", + "appSettings": "App-Einstellungen", + "preview": "Vorschau", + "editError": "Verlaufsvorschau-Modus, kein Betrieb wird unterstützt.", + "clone": "Klonen", + "editorMode_layout": "Layout", + "editorMode_logic": "Logik", + "editorMode_both": "Beide", + "editorMode_layout_tooltip": "Passen Sie im rechten Fenster das Erscheinungsbild und Layout der Komponente an. Passen Sie Aussehen, Stil und Animationen an.", + "editorMode_logic_tooltip": "Richten Sie im rechten Fenster ein, wie Ihre Komponente funktioniert und interagiert. Verwalten Sie den Inhalt und das interaktive Verhalten.", + "AppEditingBlocked": "App-Bearbeitung blockiert für:", + "AppEditingBlockedHint": "Änderungen werden nicht gespeichert, während ein anderer Benutzer diese App bearbeitet.", + "AppEditingBlockedMessage": "Bitte warten Sie, bevor Sie den Bearbeitungsstatus der App überprüfen.", + "AppEditingBlockedCheckStatus": "App-Status prüfen", + "AppEditingBlockedSomeone": "Jemand", + "AppEditingBlockedMessageSnipped": "bearbeitet diese App", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Anmelden", + "email": "E-Mail:", + "inputEmail": "Bitte gib deine E-Mail ein", + "inputValidEmail": "Bitte gib eine gültige E-Mail ein", + "forgotPassword": "Passwort vergessen", + "forgotPasswordInfo": "Geben Sie Ihre E-Mail-Adresse ein, und wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts zu.", + "forgotPasswordSuccess": "Bitte überprüfen Sie Ihre E-Mail auf den Link zum Zurücksetzen des Passworts.", + "forgotPasswordError": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", + "register": "Neu Registrieren", + "userLogin": "Anmelden", + "login": "Anmelden", + "bind": "Binde", + "passwordCheckLength": "Mindestens {min} Zeichen", + "passwordCheckContainsNumberAndLetter": "Muss Buchstaben und Ziffern enthalten", + "passwordCheckSpace": "Kann keine Leerzeichen enthalten", + "welcomeTitle": "Willkommen bei {productName}", + "inviteWelcomeTitle": "{username} lädt dich zur Mitarbeit ein", + "terms": "Geschäftsbedingungen", + "privacy": "Datenschutzrichtlinie", + "registerHint": "Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu.", + "chooseAccount": "Wähle dein Konto", + "signInLabel": "Melde dich mit {name} an", + "bindAccount": "Konto zusammenführen", + "scanQrCode": "Scanne den QR-Code mit {name}", + "invalidThirdPartyParam": "Ungültige Drittpartei Param", + "account": "Konto", + "inputAccount": "Bitte gib dein Konto ein", + "ldapLogin": "LDAP-Anmeldung", + "resetPassword": "Passwort zurücksetzen", + "resetPasswordDesc": "Setze das Passwort von Benutzer {name} zurück. Nach dem Zurücksetzen wird ein neues Passwort generiert.", + "resetSuccess": "Zurücksetzen Erfolglos", + "resetSuccessDesc": "Passwort zurücksetzen war erfolgreich. Das neue Passwort lautet: {password}", + "resetLostPasswordSuccess": "Passwort zurücksetzen war erfolgreich. Bitte melden Sie sich erneut an.", + "copyPassword": "Passwort kopieren", + "poweredByLowcoder": "Powered by: Lowcoder.cloud", + "continue": "Weiter", + "enterPassword": "Geben Sie Ihr Passwort ein", + "selectAuthProvider": "Authentifizierungsanbieter auswählen", + "selectWorkspace": "Wählen Sie Ihren Arbeitsbereich", + "userNotFound": "Benutzer nicht gefunden. Bitte stellen Sie sicher, dass Sie die richtige E-Mail-Adresse eingegeben haben.", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Füge JavaScript-Bibliotheken über URL-Adressen zu deiner aktuellen Anwendung hinzu. lodash, day.js, uuid, numbro sind zur sofortigen Verwendung in das System integriert. JavaScript-Bibliotheken werden geladen, bevor die Anwendung initialisiert wird, was sich auf die Leistung der Anwendung auswirken kann.", + "exportedAs": "Exportiert als", + "urlTooltip": "URL-Adresse der JavaScript-Bibliothek, [unpkg.com](https://unpkg.com/) oder [jsdelivr.net](https://www.jsdelivr.com/) wird empfohlen", + "externalLibsHelperText": "Es werden nur Bibliotheken unterstützt, die den UMD-Ansatz (Universal Module Definition) verwenden. Lesen Sie hier mehr: https://github.com/umdjs/umd", + "recommended": "Empfohlen", + "viewJSLibraryDocument": "Dokument", + "jsLibraryURLError": "Ungültige URL", + "jsLibraryExist": "JavaScript-Bibliothek existiert bereits", + "jsLibraryEmptyContent": "Keine JavaScript-Bibliotheken hinzugefügt", + "jsLibraryDownloadError": "Fehler beim Herunterladen der JavaScript-Bibliothek", + "jsLibraryInstallSuccess": "Die JavaScript-Bibliothek wurde erfolgreich installiert", + "jsLibraryInstallFailed": "Installation der JavaScript-Bibliothek fehlgeschlagen", + "jsLibraryInstallFailedCloud": "Vielleicht ist die Bibliothek in der Sandbox nicht verfügbar, [Dokumentation](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{Nachricht}", + "add": "Neu hinzufügen", + "jsHelpText": "Füge eine globale Methode oder Variable zur aktuellen Anwendung hinzu.", + "cssHelpText": "Füge der aktuellen Anwendung Stile hinzu. Die DOM-Struktur kann sich ändern, wenn das System iteriert. Versuche, Stile über Komponenteneigenschaften zu ändern.", + "scriptsAndStyles": "Skripte und Stile", + "jsLibrary": "JavaScript-Bibliothek", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Komponente", + "componentContent": "Die rechte Komponentenleiste bietet dir viele vorgefertigte Anwendungsblöcke (Komponenten). Diese können zur Verwendung auf die Leinwand gezogen werden. Mit ein wenig Programmierkenntnissen kannst du auch deine eigenen Komponenten erstellen.", + "canvas": "Segeltuch", + "canvasContent": "Erstelle deine Apps auf dem Canvas mit dem Ansatz \"What You See Is What You Get\". Ziehe die Komponenten einfach per Drag & Drop, um dein Layout zu gestalten, und verwende Tastenkombinationen zum schnellen Bearbeiten wie Löschen, Kopieren und Einfügen. Sobald du eine Komponente ausgewählt hast, kannst du jedes Detail anpassen - vom Styling und Layout bis hin zur Datenbindung und dem logischen Verhalten. Ein weiterer Vorteil ist das responsive Design, das dafür sorgt, dass deine Apps auf jedem Gerät gut aussehen.", + "queryData": "Daten abfragen", + "queryDataContent": "Du kannst hier Datenabfragen erstellen und dich mit MySQL, MongoDB, Redis, Airtable und vielen anderen Datenquellen verbinden. Nachdem du die Abfrage konfiguriert hast, klickst du auf \\'Run\\', um die Daten abzurufen und das Tutorial fortzusetzen.", + "compProperties": "Komponenten-Eigenschaften", + "interactiveDemo": "Interaktive Demo", + "interactiveDemoToolTip": "Klicken Sie hier, um eine interaktive Demo dieser Funktion zu starten", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "🎉 Willkommen! Klicke auf \\'App\\' und beginne, deine erste Anwendung zu erstellen.", + "createAppTitle": "App erstellen", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Benutzerdefinierte NPM-Registrierung aktivieren", + "npmRegistryUrl": "NPM-Registrierungsurl", + "npmRegistryUrlRequired": "Bitte geben Sie die Registrierungs-URL ein", + "npmRegistryUrlInvalid": "Bitte geben Sie eine gültige URL ein", + "npmRegistryScope": "Umfang des Pakets", + "npmRegistryPattern": "Muster", + "npmRegistryPatternInvalid": "Bitte geben Sie ein gültiges Muster ein (beginnend mit @ für Organisationen).", + "npmRegistryAuth": "Authentifizierung", + "npmRegistryAuthType": "Art der Authentifizierung", + "npmRegistryAuthCredentials": "Berechtigungsnachweise zur Authentifizierung", + "npmRegistryAuthCredentialsRequired": "Bitte geben Sie die Anmeldedaten für die Registrierung ein", + "npmRegistryAuthCredentialsHelp": "Für die Basisauthentifizierung geben Sie den base64-kodierten Benutzernamen und das Passwort im Format \"base64(Benutzername:Passwort)\" an, für die Tokenauthentifizierung das Token.", + }, + "history": { + ...en.history, + + "layout": "\\'{0}' Layout-Anpassung", + "upgrade": "Upgrade \\'{0}\\'", + "delete": "Löschen \\'{0}\\'", + "add": "Hinzufügen \\'{0}\\'", + "modify": "Ändern \\'{0}\\'", + "rename": "\\'{1}\\' in \\'{0}\\' umbenennen", + "recover": "Wiederherstellen der '2'-Version", + "recoverVersion": "Version wiederherstellen", + "andSoOn": "und so weiter", + "timeFormat": "MM DD um hh:mm A", + "emptyHistory": "Keine Geschichte", + "currentVersionWithBracket": " (Aktuell)", + "currentVersion": "Aktuelle Version", + "justNow": "Gerade jetzt", + "history": "Geschichte", + }, + "home": { + ...en.home, + + "profile": "Profil", + "news": "Nachrichten", + "newsLoading": "Das Laden dauert ein wenig...", + "orgHome": "Homepage (Org)", + "yourOrg": "Ihre Organisation", + "orgHomeTitle": "Organisation Homepage", + "appMarketplace": "Anwendungsmarktplatz", + "allApplications": "Alle Apps", + "allModules": "Alle Module", + "allFolders": "Alle Ordner", + "yourFolders": "Deine Ordner", + "modules": "Module", + "module": "Modul", + "api": "Lowcoder-API", + "trash": "Papierkorb", + "marketplace": "Marktplatz", + "allCategories": "Alle Kategorien", + "queryLibrary": "Abfragebibliothek", + "datasource": "Datenquellen", + "selectDatasourceType": "Datenquellentyp auswählen", + "home": "Startseite | Verwaltungsbereich", + "all": "Alle", + "app": "App", + "navigation": "Navigation", + "navLayout": "PC-Navigation", + "navLayoutDesc": "Menü auf der linken Seite für eine einfache Desktop-Navigation.", + "mobileTabLayout": "Mobile Navigation", + "mobileTabLayoutDesc": "Untere Navigationsleiste für reibungsloses mobiles Surfen.", + "folders": "Ordner", + "folder": "Mappe", + "rootFolder": "Wurzel", + "import": "Importieren", + "export": "Exportieren nach JSON", + "show": "anzeigen", + "inviteUser": "Mitglieder einladen", + "createFolder": "Ordner erstellen", + "createFolderSubTitle": "Name des Ordners:", + "moveToFolder": "In Ordner verschieben", + "moveToTrash": "In den Papierkorb verschieben", + "moveToFolderSubTitle": "Bewege dich zu:", + "folderName": "Name des Ordners:", + "resCardSubTitle": "{time} von {creator}", + "trashEmpty": "Der Papierkorb ist leer.", + "projectEmpty": "Hier ist nichts.", + "projectEmptyCanAdd": "Du hast noch keine Apps. Klicke auf Neu, um loszulegen.", + "name": "Name", + "type": "Typ", + "creator": "Erstellt von", + "lastModified": "Zuletzt geändert", + "deleteTime": "Zeit löschen", + "createTime": "Zeit schaffen", + "datasourceName": "Name der Datenquelle", + "databaseName": "Name der Datenbank", + "nameCheckMessage": "Der Name darf nicht leer sein", + "deleteElementTitle": "Dauerhaft löschen", + "moveToTrashSubTitle": "{type} {name} wird in den Papierkorb verschoben.", + "deleteElementSubTitle": "Lösche {type} {name} dauerhaft, er kann nicht wiederhergestellt werden.", + "deleteSuccessMsg": "Gelöscht erfolgreich", + "deleteErrorMsg": "Gelöschter Fehler", + "recoverSuccessMsg": "Erfolgreich wiederhergestellt", + "newDatasource": "Neue Datenquelle", + "creating": "Erstellen...", + "chooseDataSourceType": "Datenquellentyp auswählen", + "folderAlreadyExists": "Der Ordner existiert bereits", + "newNavLayout": "{userName}'s {name}", + "newApp": "{userName}'s neuer {name} ", + "importError": "Importfehler, {message}", + "exportError": "Exportfehler, {message}", + "importSuccess": "Erfolg importieren", + "fileUploadError": "Datei-Upload-Fehler", + "fileFormatError": "Fehler im Dateiformat", + "groupWithSquareBrackets": "[Gruppe] ", + "allPermissions": "Besitzer", + "appSharingDialogueTitle": "App-Freigabe und Berechtigungen", + "appSocialSharing": "Teilen Sie Ihre App und Erfahrungen auf:", + "appSocialSharingMessage": "Ich habe diese App mit Lowcoder erstellt, schau sie dir an!", + "socialShare": "Weitergeben", + "shareLink": "Link teilen: ", + "copyLink": "Link kopieren", + "appPublicMessage": "App veröffentlichen. Die App wird damit für jeden sichtbar.", + "modulePublicMessage": "Module veröffentlichen. Das Module wird damit für jeden sichtbar.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Veröffentlichen Sie Ihre App auf dem öffentlichen Marktplatz. Jeder kann sie dort sehen und kopieren.", + "moduleMarketplaceMessage": "Veröffentlichen Sie Ihr Modul auf dem öffentlichen Marktplatz. Jeder kann es dort sehen und kopieren.", + "marketplaceGoodPublishing": "Bitte stellen Sie sicher, dass Ihre App gut benannt und einfach zu bedienen ist. Entfernen Sie alle sensiblen Informationen vor der Veröffentlichung. Entfernen Sie außerdem lokale Datenquellen und ersetzen Sie sie durch statische, integrierte temporäre Daten.", + "noMarketplaceApps": "Noch sind keine Anwendungen auf dem Marktplatz.", + "errorMarketplaceApps": "Fehler beim Laden von Marketplace Apps", + "localMarketplaceTitle": "Lokaler Marktplatz", + "globalMarketplaceTitle": "Öffentlicher Marktplatz", + "memberPermissionList": "Berechtigungen: ", + "orgName": "{orgName} admins", + "addMember": "Mitglieder hinzufügen", + "addPermissionPlaceholder": "Bitte gib einen Namen ein, um Mitglieder zu suchen", + "searchMemberOrGroup": "Suche nach Mitgliedern oder Gruppen: ", + "addPermissionErrorMessage": "Berechtigung kann nicht hinzugefügt werden, {message}", + "copyModalTitle": "Klonen", + "copyNameLabel": "{type} Name", + "copyModalfolderLabel": "Zum Ordner hinzufügen", + "copyNamePlaceholder": "Bitte gib einen {type} Namen ein", + "chooseNavType": "Bitte wähle die Art der Navigation", + "createNavigation": "Navigation erstellen", + "howToUseAPI": "Verwendung der Open Rest API", + "support": "Unterstützung", + }, + "support": { + ...en.support, + + "selfUser": "Sie", + "supportTitle": "Lowcoder-Support", + "supportContent": "Wenn Sie Fragen haben oder Hilfe benötigen, nutzen Sie bitte das Ticketsystem, um Ihr Problem schnell zu lösen.", + "newSupportTicket": "Neues Support-Ticket", + "ticketTitle": "Titel", + "priority": "Priorität", + "assignee": "Zuständiger", + "status": "Ticketstatus", + "updatedTime": "Aktualisierte Zeit", + "active": "Aktiv", + "inactive": "Inaktiv", + "noEmail": "Keine E-Mail", + "details": "Einzelheiten", + "reloadTickets": "Tickets neu laden", + "createdDate": "Erstellungsdatum", + "updatedDate": "Aktualisierungsdatum", + "description": "Problembeschreibung", + "subtasks": "Unteraufgaben", + "subtasksProgress": "Fortschritt aller Unteraufgaben", + "attachments": "Anhänge", + "comments": "Kommentare", + "addComment": "Kommentar hinzufügen", + "addAttachment": "Anhang hinzufügen", + "edit": "Ticketbeschreibung bearbeiten", + "save": "Ticketbeschreibung speichern", + "cancel": "Abbrechen", + "submitComment": "Kommentar absenden", + "upload": "Anhang hochladen", + "selectFile": "Datei auswählen", + "ticketDescriptionUpdated": "Ticketbeschreibung erfolgreich aktualisiert!", + "ticketDescriptionUpdateFailed": "Ticketbeschreibung konnte nicht aktualisiert werden.", + "writeComment": "Einen Kommentar schreiben...", + "ticketCommentAdded": "Kommentar erfolgreich hinzugefügt!", + "ticketCommentFailed": "Kommentar konnte nicht hinzugefügt werden.", + "ticketCommentEmpty": "Bitte schreiben Sie einen Kommentar, bevor Sie ihn absenden.", + "ticketAttachmentUploaded": "Anhang erfolgreich hochgeladen!", + "ticketAttachmentFailed": "Anhang konnte nicht hochgeladen werden.", + "ticketAttachmentEmpty": "Bitte wählen Sie eine Datei zum Hochladen aus.", + "ticketFetchError": "Ticket konnte nicht geladen werden.", + "ticketNotFound": "Ticket nicht gefunden.", + "addAttachmentFileSize": "Datei muss kleiner als 5 MB sein!", + "goBack": "Zurück", + "noDescription": "Keine Beschreibung verfügbar.", + "createTicket": "Neues Support-Ticket erstellen", + "createTicketTitlePlaceholder": "Titel eingeben (max. 150 Zeichen)", + "createTicketDescriptionTitle": "Beschreiben Sie Ihr Problem - je mehr Details, desto besser:", + "createTicketDescriptionPlaceholder": "Beschreiben Sie das Problem im Detail, einschließlich: 1) Schritte zur Reproduktion des Problems, 2) Erwartetes Verhalten im Vergleich zum tatsächlichen Verhalten, 3) Code-Snippets, falls zutreffend, 4) Betroffene Komponenten, APIs oder Konfigurationen", + "createTicketSubmit": "Ticket absenden", + "createTicketInfoText": "Wenn Ihr Ticket erstellt wurde, können Sie im Abschnitt 'Details' Screenshots und Kommentare hinzufügen.", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Position der Navigationspunkte", + "autoPlay": "AutoPlay", + "showDots": "Navigationspunkte anzeigen", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Ungültiger npm-Paketname oder URL.", + "pluginExisted": "Dieses npm Plugin existierte bereits", + "compNotFound": "Komponente {compName} nicht gefunden.", + "addPluginModalTitle": "Plugin aus einem npm-Repository hinzufügen", + "pluginNameLabel": "URL oder Name des npm-Pakets", + "noCompText": "Keine Komponenten.", + "compsLoading": "Laden...", + "removePluginBtnText": "entfernen", + "addPluginBtnText": "npm-Plugin hinzufügen", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "Der Standardwert des Toggle-Buttons, zum Beispiel: Falsch", + "trueDefaultText": "Verstecken", + "falseDefaultText": "anzeigen", + "trueLabel": "Text für Wahr", + "falseLabel": "Text für Falsch", + "trueIconLabel": "Icon für Wahr", + "falseIconLabel": "Icon für Falsch", + "iconPosition": "Icon Position", + "showText": "Text anzeigen", + "alignment": "Ausrichtung", + "showBorder": "Grenze anzeigen", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", + "demoText": "Lowcoder | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", + "submit": "einreichen", + "style": "Stil", + "danger": "Gefahr", + "warning": "Warnung", + "success": "Erfolg", + "menu": "Menü", + "link": "Link zu", + "customAppearance": "Benutzerdefiniertes Erscheinungsbild", + "search": "Suche", + "pleaseInputNumber": "Bitte eine Nummer eingeben", + "mostValue": "Größter Wert", + "maxRating": "Maximale Bewertung", + "notSelect": "Nicht ausgewählt", + "halfSelect": "Halbe Auswahl", + "pleaseSelect": "Bitte wählen", + "title": "Titel", + "content": "Inhalt", + "componentNotFound": "Komponente ist nicht vorhanden", + "example": "Beispiele", + "defaultMethodDesc": "Den Wert der Eigenschaft {name} festlegen", + "propertyUsage": "Du kannst komponentenbezogene Informationen lesen, indem du über den Komponentennamen auf die Komponenteneigenschaften zugreifst, wo immer du JavaScript schreiben kannst.", + "property": "Eigenschaften", + "propertyName": "Eigenschaft Name", + "propertyType": "Typ", + "propertyDesc": "Beschreibung", + "event": "Veranstaltungen", + "eventName": "Name der Veranstaltung", + "eventDesc": "Beschreibung", + "mehtod": "Methoden", + "methodUsage": "Du kannst mit Komponenten über ihre Methoden interagieren und sie überall dort, wo du JavaScript schreiben kannst, mit ihrem Namen aufrufen. Oder du kannst sie über die Aktion \"Komponente\" eines Ereignisses aufrufen.", + "methodName": "Methode Name", + "methodDesc": "Beschreibung", + "showBorder": "Grenze anzeigen", + "haveTry": "Versuch es selbst", + "settings": "Einstellung", + "settingValues": "Einstellung Wert", + "defaultValue": "Standardwert", + "time": "Zeit", + "date": "Datum", + "noValue": "Keine", + "xAxisType": "X-Achse Typ", + "hAlignType": "Horizontale Ausrichtung", + "leftLeftAlign": "Links-Links-Ausrichtung", + "leftRightAlign": "Links-Rechts-Ausrichtung", + "topLeftAlign": "Ausrichtung von oben nach links", + "topRightAlign": "Ausrichtung oben-rechts", + "validation": "Validierung", + "required": "Erforderlich", + "defaultStartDateValue": "Standard Startdatum", + "defaultEndDateValue": "Standard-Enddatum", + "basicUsage": "Grundlegende Verwendung", + "basicDemoDescription": "Die folgenden Beispiele zeigen die grundlegende Verwendung der Komponente.", + "noDefaultValue": "Kein Standardwert", + "forbid": "Verboten", + "placeholder": "Platzhalter", + "pleaseInputPassword": "Bitte gib ein Passwort ein", + "password": "Passwort", + "textAlign": "Textausrichtung", + "length": "Länge", + "top": "Top", + "pleaseInputName": "Bitte gib deinen Namen ein", + "userName": "Name", + "fixed": "Festgelegt", + "responsive": "Ansprechbar", + "workCount": "Wortzahl", + "cascaderOptions": "Kaskadenoptionen", + "pleaseSelectCity": "Bitte wähle eine Stadt", + "advanced": "Fortgeschrittene", + "showClearIcon": "Löschen-Symbol anzeigen", + "appleOptionLabel": "Apfel", + "waterMelonOptionLabel": "Wassermelone", + "berryOptionLabel": "Erdbeere", + "lemonOptionLabel": "Zitrone", + "coconutOptionLabel": "Kokosnuss", + "likedFruits": "Favoriten", + "option": "Option", + "singleFileUpload": "Einzelner Datei-Upload", + "multiFileUpload": "Mehrere Dateien hochladen", + "folderUpload": "Ordner hochladen", + "multiFile": "Mehrere Dateien", + "folder": "Mappe", + "open": "Öffnen Sie", + "favoriteFruits": "Lieblingsfrüchte", + "pleaseSelectOneFruit": "Wähle eine Frucht", + "notComplete": "Nicht vollständig", + "complete": "Vollständig", + "echart": "EChart", + "lineChart": "Liniendiagramm", + "basicLineChart": "Grundlegendes Liniendiagramm", + "lineChartType": "Liniendiagramm Typ", + "stackLineChart": "Gestapelte Linie", + "areaLineChart": "Bereich Linie", + "scatterChart": "Punktediagramm", + "scatterShape": "Streuung Form", + "scatterShapeCircle": "Kreis", + "scatterShapeRect": "Rechteck", + "scatterShapeTri": "Dreieck", + "scatterShapeDiamond": "Diamant", + "scatterShapePin": "Stecknadel", + "scatterShapeArrow": "Pfeil", + "pieChart": "Kreisdiagramm", + "basicPieChart": "Grundlegendes Kreisdiagramm", + "pieChatType": "Kreisdiagramm Typ", + "pieChartTypeCircle": "Donut-Tabelle", + "pieChartTypeRose": "Rosenkarte", + "titleAlign": "Titel Position", + "color": "Farbe", + "dashed": "Gestrichelt", + "imADivider": "Ich bin eine Trennungslinie", + "tableSize": "Tabelle Größe", + "subMenuItem": "UnterMenü {num}", + "menuItem": "Menü {num}", + "labelText": "Etikett", + "labelPosition": "Etikett - Position", + "labelAlign": "Etikett - Ausrichten", + "optionsOptionType": "Konfiguration Methode", + "styleBackgroundColor": "Hintergrundfarbe", + "styleBorderColor": "Farbe der Umrandung", + "styleColor": "Schriftfarbe", + "selectionMode": "Zeilenauswahl-Modus", + "paginationSetting": "Paginierung Einstellung", + "paginationShowSizeChanger": "Unterstützung der Benutzer bei der Änderung der Anzahl von Einträgen pro Seite", + "paginationShowSizeChangerButton": "Schaltfläche Größenänderer anzeigen", + "paginationShowQuickJumper": "Quick Jumper anzeigen", + "paginationHideOnSinglePage": "Verstecken, wenn es nur eine Seite gibt", + "paginationPageSizeOptions": "Seitengröße", + "chartConfigCompType": "Chart-Typ", + "xConfigType": "X-Achse Typ", + "loading": "Laden", + "disabled": "Deaktiviert", + "minLength": "Mindestlänge", + "maxLength": "Maximale Länge", + "showCount": "Wortzahl anzeigen", + "autoHeight": "Höhe", + "thousandsSeparator": "Tausendertrennzeichen", + "precision": "Nachkommastellen", + "value": "Standardwert", + "formatter": "Format", + "min": "Mindestwert", + "max": "Maximaler Wert", + "step": "Schrittweite", + "start": "Startzeit", + "end": "Endzeit", + "allowHalf": "Halbe Auswahl zulassen", + "filetype": "Dateityp", + "showUploadList": "Upload-Liste anzeigen", + "uploadType": "Upload Typ", + "allowClear": "Löschen-Symbol anzeigen", + "minSize": "Minimale Dateigröße", + "maxSize": "Maximale Dateigröße", + "maxFiles": "Maximale Anzahl von hochgeladenen Dateien", + "format": "Format", + "minDate": "Minimum Datum", + "maxDate": "Maximales Datum", + "minTime": "Mindestzeit", + "maxTime": "Maximale Zeit", + "text": "Text", + "type": "Typ", + "hideHeader": "Kopfzeile ausblenden", + "hideBordered": "Grenze ausblenden", + "src": "Bild-URL", + "showInfo": "Wert anzeigen", + "mode": "Modus", + "onlyMenu": "Nur Menü", + "horizontalAlignment": "Horizontale Ausrichtung", + "row": "Links", + "column": "Top", + "leftAlign": "Linke Ausrichtung", + "rightAlign": "Rechts ausrichten", + "percent": "Prozentsatz", + "fixedHeight": "Feste Höhe", + "auto": "Anpassungsfähig", + "directory": "Mappe", + "multiple": "Mehrere Dateien", + "singleFile": "Einzelne Datei", + "manual": "Handbuch", + "default": "Standard", + "small": "Klein", + "middle": "Mittel", + "large": "Groß", + "single": "Einzeln", + "multi": "Mehrere", + "close": "Schließen", + "ui": "UI-Modus", + "line": "Liniendiagramm", + "scatter": "Punktwolke", + "pie": "Kreisdiagramm", + "basicLine": "Grundlegendes Liniendiagramm", + "stackedLine": "Gestapeltes Liniendiagramm", + "areaLine": "Gebiet Gebietskarte", + "basicPie": "Grundlegendes Kreisdiagramm", + "doughnutPie": "Donut-Tabelle", + "rosePie": "Rosenkarte", + "category": "Kategorie Achse", + "circle": "Kreis", + "rect": "Rechteck", + "triangle": "Dreieck", + "diamond": "Diamant", + "pin": "Stecknadel", + "arrow": "Pfeil", + "left": "Links", + "right": "Rechts", + "center": "Zentrum", + "bottom": "Unten", + "justify": "Beide Enden rechtfertigen", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Aktueller Datenstand", + "preview": "Vorschau", + "property": "Eigenschaften", + "console": "Visual Script-Konsole", + "executeMethods": "Ausführen von Methoden", + "noMethods": "Keine Methoden.", + "methodParams": "Parameter der Methode", + "methodParamsHelp": "Parameter der Eingabemethode mit JSON. Zum Beispiel kannst du die Parameter von setValue\\ wie folgt festlegen: [1] oder 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Schaltfläche Hintergrund", + "btnText": "Schaltfläche Text", + "title": "Titel", + "selectBackground": "Ausgewählter Hintergrund", + }, + "idSource": { + ...en.idSource, + + "title": "OAuth-Anbieter", + "form": "E-Mail", + "pay": "Prämie", + "enable": "Aktiviere", + "unEnable": "Nicht aktiviert", + "loginType": "Anmeldung Typ", + "status": "Status", + "desc": "Beschreibung", + "manual": "Adressbuch:", + "syncManual": "Adressbuch synchronisieren", + "syncManualSuccess": "Sync Erfolgreich", + "enableRegister": "Registrierung zulassen", + "saveBtn": "Speichern und Aktivieren", + "save": "Speichern", + "none": "Keine", + "formPlaceholder": "Bitte {label} eingeben", + "formSelectPlaceholder": "Bitte wähle das {label}", + "saveSuccess": "Erfolgreich gespeichert", + "dangerLabel": "Gefahrenzone", + "dangerTip": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Gehe mit Vorsicht vor.", + "lastEnabledConfig": "Sie können die Konfiguration nicht deaktivieren/löschen, da dies die einzige aktivierte Konfiguration ist.", + "disable": "Deaktivieren", + "disableSuccess": "Erfolgreich deaktiviert", + "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", + "disableTip": "Tipps", + "disableContent": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Bist du sicher, dass du fortfahren kannst?", + "manualTip": "", + "lockTip": "Der Inhalt ist gesperrt. Um Änderungen vorzunehmen, klicke bitte auf das {icon}, um die Sperre aufzuheben.", + "lockModalContent": "Die Änderung des Feldes \"ID-Attribut\" kann erhebliche Auswirkungen auf die Benutzeridentifizierung haben. Bitte vergewissere dich, dass du die Auswirkungen dieser Änderung verstehst, bevor du fortfährst.", + "payUserTag": "Prämie", + "source": "Quelle", + "sourceName": "Auth Provider Name", + "sourceDescription": "Auth Provider Beschreibung", + "sourceIcon": "Auth-Provider-Symbol", + "sourceCategory": "Auth Provider Kategorie", + "souceIssuerURI": "Auth Provider Issuer URI", + "souceAuthorizationEndpoint": "Auth Provider Autorisierungsendpunkt", + "souceTokenEndpoint": "Auth Provider Token Endpunkt", + "souceUserInfoEndpoint": "Auth Provider Benutzerinfo Endpunkt", + "userInfoIntrospection": "OpenID-Benutzer-Introspektion verwenden", + "userCanSelectAccounts": "Benutzer kann aus Konten auswählen", + "sourceCategoryEnterprise": "Unternehmensidentität", + "sourceCategoryCloud": "Cloud-Dienste", + "sourceCategorySocial": "Soziale Medien", + "sourceCategoryDevelopment": "Entwicklung", + "sourceCategoryTools": "Tools & Produktivität", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Slot-Ansicht konfigurieren", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "searchAnimation": "Suche Animation", + "speed": "Geschwindigkeit", + "width": "Breite", + "height": "Höhe", + "backgroundColor": "Hintergrundfarbe", + "animationStart": "Animation Start", + "valueDesc": "Aktuelle JSON-Daten", + "loop": "Schleife", + "auto": "Auto", + "onHover": "Beim Schweben", + "onTrigger": "Bei Auslösung", + "singlePlay": "Einzelspiel", + "endlessLoop": "Endlosschleife", + "keepLastFrame": "Letzten Frame anzeigen lassen", + "fit": "Fit", + "align": "Ausrichten", + "load": "Unter Last", + "play": "Im Spiel", + "pause": "Auf Pause", + "stop": "On Stop", + "complete": "Vollständig", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Titel Farbe", + "subTitleColor": "Untertitel Farbe", + "labelColor": "Etikett Farbe", + "value": "Zeitleiste Daten", + "mode": "Bestellung anzeigen", + "left": "Inhalt Rechts", + "right": "Inhalt Links", + "alternate": "Alternative Reihenfolge der Inhalte", + "modeTooltip": "Einstellen, dass der Inhalt links/rechts oder abwechselnd auf beiden Seiten der Zeitleiste angezeigt wird", + "reverse": "Neueste Ereignisse zuerst", + "pending": "Ausstehender Knotenpunkt Text", + "pendingDescription": "Wenn diese Option aktiviert ist, wird ein letzter Knoten mit dem Text und einer Warteanzeige angezeigt.", + "defaultPending": "Kontinuierliche Verbesserung", + "clickTitleEvent": "Klick Titel Ereignis", + "clickTitleEventDesc": "Klick Titel Ereignis", + "Introduction": "Einführung Tasten", + "helpTitle": "Titel der Zeitleiste (erforderlich)", + "helpsubTitle": "Untertitel der Zeitleiste", + "helpLabel": "Beschriftung der Zeitleiste, die zur Anzeige von Daten verwendet wird", + "helpColor": "Zeigt die Farbe des Zeitachsenknotens an", + "helpDot": "Timeline-Knoten als Ameisendesign-Symbole rendern", + "helpTitleColor": "Individuell die Farbe des Knotentitels steuern", + "helpSubTitleColor": "Individuelle Steuerung der Farbe der Knotenuntertitel", + "helpLabelColor": "Individuelle Steuerung der Farbe des Knotensymbols", + "valueDesc": "Daten der Zeitleiste", + "clickedObjectDesc": "Daten zum angeklickten Objekt", + "clickedIndexDesc": "Index der angeklickten Objekte", + }, + "comment": { + ...en.comment, + + "value": "Daten der Kommentarliste", + "showSendButton": "Kommentare zulassen", + "title": "Titel", + "titledDefaultValue": "%d Kommentar in Summe", + "placeholder": "Shift + Enter zum Kommentieren; @ oder # für Schnelleingabe eingeben", + "placeholderDec": "Platzhalter", + "buttonTextDec": "Schaltfläche Titel", + "buttonText": "Kommentar", + "mentionList": "Daten der Erwähnungsliste", + "mentionListDec": "Key-Mention Keywords; Value-Mention Listendaten", + "userInfo": "Benutzerinfo", + "dateErr": "Datum Fehler", + "commentList": "Kommentar Liste", + "deletedItem": "Gelöschter Artikel", + "submitedItem": "Eingereichter Artikel", + "deleteAble": "Schaltfläche \"Löschen\" anzeigen", + "Introduction": "Einführung Tasten", + "helpUser": "Benutzerinformationen (erforderlich)", + "helpname": "Nutzername (erforderlich)", + "helpavatar": "Avatar URL (Hohe Priorität)", + "helpdisplayName": "Name anzeigen (niedrige Priorität)", + "helpvalue": "Kommentar Inhalt", + "helpcreatedAt": "Datum erstellen", + }, + "mention": { + ...en.mention, + + "mentionList": "Daten der Erwähnungsliste", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Komplett Wert", + "checkedValueFrom": "Geprüfter Wert von", + "ignoreCase": "Suche ignorieren Fall", + "searchLabelOnly": "Nur Label suchen", + "searchFirstPY": "Erste Pinyin-Suche", + "searchCompletePY": "Vollständiges Pinyin suchen", + "searchText": "Text suchen", + "SectionDataName": "AutoVervollständigen Daten", + "valueInItems": "Wert in Positionen", + "type": "Typ", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Schlüssel", + "selectLable": "Etikett", + "ComponentType": "Komponente Typ", + "colorIcon": "Blau", + "grewIcon": "Grau", + "noneIcon": "Keine", + "small": "Klein", + "large": "Groß", + "componentSize": "Komponente Größe", + "Introduction": "Einführung Tasten", + "helpLabel": "Etikett", + "helpValue": "Wert", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Rubriken", + "addColumn": "Spalte hinzufügen", + "columnDefinition": "Definition einer Spalte", + "rowDefinition": "Zeile Definition", + "columnGap": "Lücke in der Spalte", + "rowGap": "Zeile Lücke", + "atLeastOneColumnError": "Responsive Layout behält mindestens eine Spalte bei", + "columnsPerRow": "Spalten pro Zeile", + "columnsSpacing": "Abstand zwischen den Spalten (px)", + "horizontal": "Horizontal", + "vertical": "Vertikal", + "mobile": "Mobil", + "tablet": "Tablette", + "desktop": "Desktop", + "rowStyle": "Reihe Stil", + "columnStyle": "Säulenstil", + "minWidth": "Min. Breite", + "rowBreak": "Reihenpause", + "useComponentWidth": "Eigene Größe verwenden", + "useComponentWidthDesc": "Verwende die Containerbreite anstelle der App-Breite", + "matchColumnsHeight": "Höhe der Säulen anpassen", + "rowLayout": "Zeilenlayout", + "columnsLayout": "Spalten Layout", + "columnsDefinitionTooltip": "Spalten können auf der Grundlage der CSS-Spalteneigenschaften frei definiert werden. Mit \"auto auto\" werden zum Beispiel zwei Spalten mit gleicher Breite erstellt. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Die Zeilen können auf der Grundlage der CSS-Eigenschaften für Zeilen frei definiert werden. Zum Beispiel erzeugt 'auto auto' zwei Zeilen mit gleicher Höhe. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "Bereiche anzeigen", + "addColumn": "Bereiche hinzufügen", + "columnDefinition": "Bereich Definition", + "atLeastOneColumnError": "Responsives Layout behält mindestens eine Spalte bei", + "horizontal": "Horizontal", + "vertical": "Vertikal", + "areaStyle": "Säule Stil", + "minWidth": "Min. Breite", + "maxWidth": "Max. Breite", + "width": "Breite", + "collapsible": "Ist der Bereich zusammenklappbar?", + "matchColumnsHeight": "Spielbereiche Höhe", + "orientation": "Ausrichtung des geteilten Layouts", + "orientationTooltip": "Die visuelle Reihenfolge, in der die Bereiche ausgerichtet sind. Sie können Splitlayout-Komponenten auch innerhalb von Splitlayout-Komponenten anordnen, um komplexe Layouts zu erstellen.", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modus", + "modeInline": "Inline", + "modeVertical": "Vertikal", + "modeHorizontal": "Horizontal", + "width": "Breite", + "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", + "navStyle": "Menü-Stil", + "navItemStyle": "Menüpunkt Stil", + "navBackground": "Hintergrundbild", + "mobileNavVerticalOrientation": "Vertikale Ausrichtung", + "mobileNavVerticalMaxWidth": "Maximale Breite", + "mobileNavBarHeight": "Höhe der Navigationsleiste", + "mobileNavVerticalShowSeparator": "Trennzeichen anzeigen", + "mobileNavIconSize": "Icon Größe", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Int'l Date Line W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Pazifische Zeit (US)", + "UTC-06:00": "(UTC-06:00) Zentrale Zeit (US)", + "UTC-05:00": "(UTC-05:00) Östliche Zeit (US)", + "UTC-04:00": "(UTC-04:00) Atlantische Zeit", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Kap Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlin, Rom", + "UTC+02:00": "(UTC+02:00) Athen, Bukarest", + "UTC+03:00": "(UTC+03:00) Moskau", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karatschi", + "UTC+05:30": "(UTC+05:30) Neu Delhi", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Peking, HK", + "UTC+09:00": "(UTC+09:00) Tokio, Seoul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Salomonen, Neukaledonien", + "UTC+12:00": "(UTC+12:00) Auckland, Fidschi", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "UserChoice", + }, + "tour": { + ...en.tour, + + "section1Title": "Schritte", + "section1Subtitle": "Schritte", + "tooltipExampleHeader": "Beispiel:", + "tooltipSignatureHeader": "Unterschrift:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Titel", + "placeholder": "Willkommen", + "tooltip": "Der Titel des Schrittes. Jeder HTML-Code ist hier gültig.", + }, + "description": { + ...en.tour.options.description, + + "label": "Beschreibung", + "placeholder": "Willkommen bei lowcoder!", + "tooltip": "Die Beschreibung des Schrittes. Jeder HTML-Code ist hier gültig.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Maske", + "tooltip": "Ob die Maskierung zu aktivieren, ändern Sie die Maske Stil und Farbe füllen, indem Sie benutzerdefinierte Requisiten, die Standardeinstellung folgt der `Maske` Eigenschaft von Tour.", + "tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Pfeil", + "tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht; andernfalls zeigt der Pfeil immer in die Nähe der Oberseite der Komponente.", + "tooltipFunctionSignature": "boolesch | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Typ", + "tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt zur Gestaltung der Haupttour gesteuert werden.", + }, + "target": { + ...en.tour.options.target, + + "label": "Komponente", + "tooltip": "Die Komponente, auf die Sie den Tooltip setzen wollen, oder lassen Sie es leer, wenn Sie einfach ein Modal in der Mitte des Bildschirms haben wollen.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "Cover Image URI", + "tooltip": "Ein URI für ein Bild, das Sie mit dem Schritt anzeigen möchten", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Indikatoren rendern", + "tooltip": "Bietet einen benutzerdefinierten Indikator dafür, in welchem Schritt Sie sich befinden", + "tooltipValidTypes": "Format ist eine Funktion, die zwei Argumente akzeptiert, `current` und `total` und einen ReactNode zurückgibt", + "tooltipFunctionSignatureHeader": "Unterschrift:", + "tooltipFunctionSignature": "(aktuell: Zahl, gesamt: Zahl) => ReactNode", + "tooltipExampleHeader": "Beispiel:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Interaktion deaktivieren", + "tooltip": "Deaktivieren Sie die Interaktion in dem markierten Bereich.", + }, + "mask": { + ...en.tour.mask, + + "label": "Maske", + "tooltip": "Aktivieren der Maskierung, Ändern des Maskenstils und der Füllfarbe durch Übergabe von benutzerdefinierten Requisiten, die Vorgabe folgt der Eigenschaft `Maske` von Tour. Kann auf der Ebene der Stufe überschrieben werden.", + "tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Platzierung", + "tooltip": "Position der Leitkarte in Bezug auf das Zielelement. Kann auf Schrittebene überschrieben werden.", + "tooltipValidOptions": "Gültige Optionen", + "tooltipValidOptionsAbove": "Oberhalb des Bauteils:", + "tooltipValidOptionsLeft": "Links neben der Komponente:", + "tooltipValidOptionsRight": "Rechts neben der Komponente:", + "tooltipValidOptionsBelow": "Unterhalb des Bauteils:", + "tooltipValidOptionsOnTop": "Oben auf der Komponente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Pfeil", + "tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht, andernfalls zeigt der Pfeil immer in die Nähe des oberen Teils der Komponente. Kann auf der Schrittebene außer Kraft gesetzt werden.", + "tooltipFunctionSignature": "boolesch | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Typ", + "tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt \"Styling der Haupttour\" gesteuert werden. Kann auf Schritt-Ebene überschrieben werden.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Wie man ein npm-Plugin entwickelt", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Bibliotheken von Drittanbietern verwenden", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/vorlage-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "Bild suchen", + "searchAnimation": "Suche Animation", + "searchIcon": "Suchsymbol", + "noResults": "Keine Ergebnisse gefunden.", + "buySubscriptionTitle": "Premium-Assets freischalten", + "buySubscriptionContent": "Dieses Asset ist exklusiv für Media-Package-Abonnenten. Abonnieren Sie das Medienpaket und laden Sie unbegrenzt hochwertige Assets herunter!", + "buySubscriptionButton": "Jetzt abonnieren", + }, + +}; diff --git a/translations/locales/de.js b/translations/locales/de.js index 04418179b1..1ffa559de1 100644 --- a/translations/locales/de.js +++ b/translations/locales/de.js @@ -1,2949 +1,4060 @@ -// import table from "./componentDocExtra/table.md?url"; + import { en } from "./en.js"; export const de = { ...en, - "productName": "Lowcoder", - "productDesc": "Erstelle Softwareanwendungen für Dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist eine hervorragende Alternative zu Retool, Appsmith und Tooljet.", - "notSupportedBrowser": "Dein aktueller Browser hat möglicherweise Kompatibilitätsprobleme. Um ein optimales Nutzererlebnis zu gewährleisten, verwende bitte die neueste Version von Chrome.", - "create": "Erstellen", - "move": "Verschieben", - "addItem": "Hinzufügen", - "newItem": "Neu", - "copy": "Kopieren", - "rename": "Umbenennen", - "delete": "Löschen", - "deletePermanently": "Dauerhaft löschen", - "remove": "Entfernen", - "recover": "Wiederherstellen", - "edit": "Bearbeiten", - "view": "Ansicht", - "value": "Wert", - "data": "Daten", - "information": "Informationen", - "success": "Erfolg", - "warning": "Warnung", - "error": "Fehler", - "reference": "Referenz", - "text": "Text", - "label": "Label", - "color": "Farbe", - "form": "Formular", - "menu": "Menü", - "menuItem": "Menüpunkt", - "ok": "OK", - "cancel": "Abbrechen", - "finish": "Beenden", - "reset": "Zurücksetzen", - "icon": "Icon", - "code": "Code", - "title": "Titel", - "emptyContent": "Leer", - "more": "Mehr", - "search": "Suche", - "back": "Zurück", - "accessControl": "Zugangskontrolle", - "copySuccess": "Erfolgreich kopiert", - "copyError": "Kopierfehler", - "api": { - ...en.api, - "publishSuccess": "Erfolgreich veröffentlicht", - "recoverFailed": "Wiederherstellung fehlgeschlagen", - "needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version." - }, - "codeEditor": { - ...en.codeEditor, - "notSupportAutoFormat": "Der aktuelle Code-Editor unterstützt keine automatische Formatierung.", - "fold": "Zuklappen", - }, - "exportMethod": { - ...en.exportMethod, - "setDesc": "Eigenschaft einstellen: {property}", - "clearDesc": "Eigenschaft löschen: {property}", - "resetDesc": "{property} auf Standardwert zurücksetzen" - }, - "method": { - ...en.method, - "focus": "Fokus setzen", - "focusOptions": "Fokus-Optionen. Siehe HTMLElement.focus()", - "blur": "Fokus entfernen", - "click": "Klick", - "select": "Auswählen", - "setSelectionRange": "Start- und Endposition der Textauswahl festlegen", - "selectionStart": "0-basierter Index des ersten ausgewählten Zeichens", - "selectionEnd": "0-basierter Index des Zeichens nach dem letzten ausgewählten Zeichen", - "setRangeText": "Textbereich ersetzen", - "replacement": "String zum Einfügen", - "replaceStart": "0-basierter Index des ersten zu ersetzenden Zeichens", - "replaceEnd": "0-basierter Index des Zeichens nach dem letzten zu ersetzenden Zeichen" - }, - "errorBoundary": { - ...en.errorBoundary, - "encounterError": "Das Laden einer Komponente ist fehlgeschlagen. Bitte überprüfe deine Konfiguration.", - "clickToReload": "Klicke bitte um Neu zu laden.", - "errorMsg": "Fehler: " - }, - "imgUpload": { - ...en.imgUpload, - "notSupportError": "Unterstützt nur {types} Bild-Dateitypen", - "exceedSizeError": "Die Bildgröße darf {size} nicht überschreiten" - }, - "gridCompOperator": { - ...en.gridCompOperator, - "notSupport": "Nicht unterstützt", - "selectAtLeastOneComponent": "Bitte wähle mindestens eine Komponente aus", - "selectCompFirst": "Komponenten vor dem Kopieren auswählen", - "noContainerSelected": "Kein Container ausgewählt", - "deleteCompsSuccess": "Erfolgreich gelöscht. Drücke {undoKey} zum Rückgängigmachen.", - "deleteCompsTitle": "Komponenten löschen", - "deleteCompsBody": "Bist du sicher, dass du die ausgewählten Komponenten {compNum} löschen willst?", - "cutCompsSuccess": "Erfolgreich selektiert und gelöscht. Drücke {pasteKey}, um die Komponente einzufügen, oder {undoKey}, um den Vorgang rückgängig zu machen." - }, - "leftPanel": { - ...en.leftPanel, - "queries": "Datenabfragen", - "globals": "Globale Datenvariablen", - "propTipsArr": "{num} Posten", - "propTips": "{num} Tasten", - "propTipArr": "Posten {num}", - "propTip": "{num} Schlüssel", - "stateTab": "Status", - "settingsTab": "Einstellungen", - "toolbarTitle": "Individualisierung", - "toolbarPreload": "Skripte und Stile", - "components": "Aktive Komponenten", - "modals": "Modale Fenster", - "expandTip": "Klicken, um die aktuellen Daten (State) der Komponente zu sehen.", - "collapseTip": "Klicken Sie, um die Ansicht zu reduzieren." - }, - "bottomPanel": { - ...en.bottomPanel, - "title": "Datenabfragen", - "run": "Start", - "noSelectedQuery": "Keine Datenabfrage ausgewählt", - "metaData": "Metadaten der Datenquelle", - "noMetadata": "Keine Metadaten verfügbar", - "metaSearchPlaceholder": "Metadaten suchen", - "allData": "Alle Daten" - }, - "rightPanel": { - ...en.rightPanel, - "propertyTab": "Eigenschaften", - "noSelectedComps": "Keine Komponenten ausgewählt. Klicke auf eine Komponente, um ihre Eigenschaften anzuzeigen.", - "createTab": "Einfügen", - "searchPlaceHolder": "Komponenten oder Module suchen", - "uiComponentTab": "Komponenten", - "extensionTab": "Erweiterungen", - "modulesTab": "Module", - "moduleListTitle": "Module", - "pluginListTitle": "Erweiterungen (Plugins)", - "emptyModules": "Module sind wiederverwendbare Mikro-Apps. Du kannst sie in deine App einbetten.", - "searchNotFound": "Kannst du die richtige Komponente nicht finden? Schreibe uns!", - "emptyPlugins": "Keine Plugins hinzugefügt.", - "contactUs": "Kontakt", - "issueHere": "hier." - }, - "prop": { - ...en.prop, - "expand": "Erweitern", - "columns": "Spalten", - "videokey": "Video Schlüssel", - "rowSelection": "Zeilenauswahl", - "toolbar": "Symbolleiste", - "pagination": "Paginierung", - "logo": "Logo", - "style": "Stil", - "inputs": "Variablen", - "meta": "Metadaten", - "data": "Daten", - "hide": "Verstecken", - "loading": "Laden", - "disabled": "Deaktiviert", - "placeholder": "Platzhalter", - "showClear": "Schaltfläche \"Löschen\" anzeigen", - "showSearch": "Suche anzeigen", - "defaultValue": "Standardwert", - "required": "Erforderliches Feld", - "readOnly": "Nur lesbar", - "readOnlyTooltip": "Schreibgeschützte Komponenten erscheinen normal, können aber nicht geändert werden.", - "minimum": "Minimum", - "maximum": "Maximum", - "regex": "Regular Expression", - "minLength": "Mindestlänge", - "maxLength": "Maximale Länge", - "height": "Höhe", - "width": "Breite", - "selectApp": "App auswählen", - "showCount": "Anzahl anzeigen", - "textType": "Textart", - "customRule": "Benutzerdefinierte Regel", - "customRuleTooltip": "Eine nicht leere Zeichenkette weist auf einen Fehler hin; eine leere Zeichenkette oder null bedeutet, dass die Validierung erfolgreich war. Beispiel: ", - "manual": "Handbuch", - "map": "Karte", - "json": "JSON", - "use12Hours": "12-Stunden-Format verwenden", - "hourStep": "Stunden Schritt", - "minuteStep": "Minuten Schritt", - "secondStep": "Sekunden Schritt", - "minDate": "Frühestes Datum", - "maxDate": "Spätestes Datum", - "minTime": "Früheste Zeit", - "maxTime": "Späteste Zeit", - "type": "Typ", - "showLabel": "Etikett anzeigen", - "showHeader": "Kopfbereich anzeigen", - "showBody": "Hauptbereich zeigen", - "showFooter": "Fußbereich anzeigen", - "maskClosable": "Zum Schließen auf \"Schließen\" klicken", - "showMask": "Maske darstellen", - "component": "Komponente", - "className": "Klasse", - "dataTestId": "Test ID", - "horizontalGridCells": "Horizontale Gitterzellen", - "showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", - "showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", - }, - "autoHeightProp": { - ...en.autoHeightProp, - "auto": "Automatisch", - "fixed": "Festgelegt" - }, - "labelProp": { - ...en.labelProp, - "text": "Etikett Text", - "tooltip": "Tooltip", - "position": "Position", - "left": "Links", - "top": "Open", - "align": "Ausrichtung", - "width": "Breite", - "widthTooltip": "Die Etikettenbreite unterstützt Prozentwerte (%) und Pixel (px)." - }, - "eventHandler": { - ...en.eventHandler, - "eventHandlers": "Ereignishandler", - "emptyEventHandlers": "Keine Ereignishandler", - "incomplete": "Unvollständige Auswahl", - "inlineEventTitle": "Bei {eventName}", - "event": "Ereignis", - "action": "Aktion", - "noSelect": "Keine Auswahl", - "runQuery": "Eine Datenabfrage ausführen", - "selectQuery": "Datenabfrage auswählen", - "controlComp": "Eine Komponente steuern", - "runScript": "JavaScript ausführen", - "runScriptPlaceHolder": "Hier kann man JavaScript Code schreiben", - "component": "Komponente", - "method": "Methode", - "setTempState": "Einen temporären Zustand setzen", - "state": "Zustand", - "triggerModuleEvent": "Ein Modulereignis auslösen", - "moduleEvent": "Modulereignis", - "goToApp": "Zu einer anderen App wechseln", - "queryParams": "Abfrageparameter", - "hashParams": "Hash-Parameter", - "showNotification": "Eine Benachrichtigung anzeigen", - "text": "Text", - "level": "Stufe", - "duration": "Dauer", - "notifyDurationTooltip": "Zeiteinheit kann 's' (Sekunde, Standard) oder 'ms' (Millisekunde) sein. Maximale Dauer ist {max} Sekunden", - "goToURL": "URL öffnen", - "openInNewTab": "In neuem Tab öffnen", - "copyToClipboard": "In die Zwischenablage kopieren", - "copyToClipboardValue": "Wert", - "export": "Daten exportieren", - "exportNoFileType": "Keine Auswahl (optional)", - "fileName": "Dateiname", - "fileNameTooltip": "Dateiendung angeben, um Dateityp zu spezifizieren, z.B. 'bild.png'.", - "fileType": "Dateityp", - "condition": "Nur ausführen wenn...", - "conditionTooltip": "Ereignis-Handler nur ausführen, wenn diese Bedingung 'wahr' ist.", - "debounce": "Warten für", - "throttle": "Drosseln für", - "slowdownTooltip": "Verwende Warten oder Drosseln, um die Häufigkeit von Aktionen zu steuern. Zeiteinheit kann 'ms' (Millisekunde, Standard) oder 's' (Sekunde) sein.", - "notHandledError": "Nicht behandelter Fehler", - "currentApp": "Aktuelle App", - "inputEventHandlers": "Eingabe-Ereignishandler", - "inputEventHandlersDesc": "Ereignishandler bezüglich Benutzereingaben", - "buttonEventHandlers": "Button-Ereignishandler", - "buttonEventHandlersDesc": "Ereignishandler bezüglich Button-Klicks", - "changeEventHandlers": "Änderungs-Ereignishandler", - "changeEventHandlersDesc": "Ereignishandler bezüglich Wertänderungen", - "editedEventHandlers": "Bearbeitungs-Ereignishandler", - "editedEventHandlersDesc": "Ereignishandler bezüglich Bearbeitungsstatus von Elementen", - "clickEventHandlers": "Klick-Ereignishandler", - "clickEventHandlersDesc": "Ereignishandler bezüglich Klicks", - "keyDownEventHandlers": "Tastendruck-Ereignishandler", - "keyDownEventHandlersDesc": "Ereignishandler bezüglich Tastendrücken", - "checkboxEventHandlers": "Checkbox-Ereignishandler", - "checkboxEventHandlersDesc": "Ereignishandler bezüglich Checkbox-Änderungen", - "dragEventHandlers": "Drag-and-Drop-Ereignishandler", - "dragEventHandlersDesc": "Ereignishandler bezüglich Drag-and-Drop-Ereignissen", - "elementEventHandlers": "Element-Ereignishandler", - "elementEventHandlersDesc": "Ereignishandler bezüglich generischer Element-Ereignisse", - "mediaEventHandlers": "Medien-Ereignishandler", - "mediaEventHandlersDesc": "Ereignishandler bezüglich Medienereignissen", - "scannerEventHandlers": "Scanner-Ereignishandler", - "scannerEventHandlersDesc": "Ereignishandler bezüglich Scanner-Ereignissen", - "chartEventHandlers": "Diagramm-Ereignishandler", - "chartEventHandlersDesc": "Ereignishandler bezüglich Diagrammereignissen", - "geoMapEventHandlers": "Geo-Map-Ereignishandler", - "geoMapEventHandlersDesc": "Ereignishandler bezüglich Geo-Map-Ereignissen", - "stepEventHandlers": "Schritt-Ereignishandler", - "stepEventHandlersDesc": "Ereignishandler bezüglich Schritt-UI-Ereignissen", - "shareEventHandlers": "Teilen-Ereignishandler", - "shareEventHandlersDesc": "Ereignishandler bezüglich Teilen-Ereignissen", - "selectEventHandlers": "Auswahl-Ereignishandler", - "selectEventHandlersDesc": "Ereignishandler bezüglich Auswahl-Ereignissen", - "meetingEventHandlers": "Besprechungs-Ereignishandler", - "meetingEventHandlersDesc": "Ereignishandler bezüglich Besprechungs-Ereignissen", - "collaborationEventHandlers": "Kollaborations-Ereignishandler", - "collaborationEventHandlersDesc": "Ereignishandler bezüglich Kollaborations-Ereignissen" - }, - "event": { - ...en.event, - "submit": "Absenden", - "submitDesc": "Auslöser beim Absenden.", - "change": "Ändern", - "changeDesc": "Auslöser bei Änderungen.", - "focus": "Fokussieren", - "focusDesc": "Auslöser beim Fokussieren.", - "blur": "Verlassen", - "blurDesc": "Auslöser beim Verlassen.", - "click": "Klicken", - "clickDesc": "Auslöser beim Klicken.", - "doubleClick": "Doppelklick", - "doubleClickDesc": "Auslöser beim Doppelklicken.", - "rightClick": "Rechtsklick", - "rightClickDesc": "Auslöser beim Rechtsklicken.", - "keyDown": "Tastendruck", - "keyDownDesc": "Auslöser beim Tastendruck.", - "select": "Auswählen", - "selectDesc": "Auslöser bei Auswahl.", - "checked": "Aktiviert", - "checkedDesc": "Auslöser, wenn eine Checkbox aktiviert wird.", - "unchecked": "Deaktiviert", - "uncheckedDesc": "Auslöser, wenn eine Checkbox deaktiviert wird.", - "drag": "Ziehen", - "dragDesc": "Auslöser beim Ziehen.", - "drop": "Fallen lassen", - "dropDesc": "Auslöser beim Fallenlassen.", - "open": "Öffnen", - "openDesc": "Auslöser beim Öffnen.", - "mute": "Stummschalten", - "muteDesc": "Auslöser beim Stummschalten eines Mikrofons.", - "unmute": "Stummschaltung aufheben", - "unmuteDesc": "Auslöser beim Aufheben der Stummschaltung eines Mikrofons.", - "showCamera": "Kamera zeigen", - "showCameraDesc": "Auslöser, wenn die Kamera gezeigt wird.", - "hideCamera": "Kamera verstecken", - "hideCameraDesc": "Auslöser, wenn die Kamera versteckt wird.", - "shareScreen": "Bildschirm teilen", - "shareScreenDesc": "Auslöser beim Teilen des Bildschirms.", - "shareScreenEnd": "Bildschirmteilen beenden", - "shareScreenEndDesc": "Auslöser beim Beenden des Bildschirmteilens.", - "shareControl": "Steuerung teilen", - "shareControlDesc": "Auslöser beim Teilen der Steuerung.", - "shareControlEnd": "Steuerungsteilen beenden", - "shareControlEndDesc": "Auslöser beim Beenden des Steuerungsteilens.", - "shareContent": "Inhalt teilen", - "shareContentDesc": "Auslöser beim Teilen von Inhalten.", - "shareContentEnd": "Inhaltsteilen beenden", - "shareContentEndDesc": "Auslöser beim Beenden des Inhaltsteilens.", - "meetingStart": "Besprechung beginnen", - "meetingStartDesc": "Auslöser beim Start einer Besprechung.", - "meetingEnd": "Besprechung beenden", - "meetingEndDesc": "Auslöser beim Beenden einer Besprechung.", - "meetingJoin": "Besprechung beitreten", - "meetingJoinDesc": "Auslöser beim Beitritt zu einer Besprechung.", - "meetingLeave": "Besprechung verlassen", - "meetingLeaveDesc": "Auslöser beim Verlassen einer Besprechung.", - "play": "Abspielen", - "playDesc": "Auslöser beim Abspielen.", - "pause": "Pausieren", - "pauseDesc": "Auslöser beim Pausieren.", - "ended": "Beendet", - "endedDesc": "Auslöser wenn beendet.", - "step": "Schritt", - "stepDesc": "Auslöser bei einem Schritt.", - "next": "Nächster", - "nextDesc": "Auslöser beim nächsten Schritt.", - "finished": "Abgeschlossen", - "finishedDesc": "Auslöser wenn abgeschlossen.", - "saved": "Gespeichert", - "savedDesc": "Auslöser wenn gespeichert.", - "edited": "Bearbeitet", - "editedDesc": "Auslöser wenn bearbeitet.", - "geoMapMove": "Geo-Map Bewegen", - "geoMapMoveDesc": "Auslöser beim Bewegen der Geo-Map.", - "geoMapZoom": "Geo-Map Zoomen", - "geoMapZoomDesc": "Auslöser beim Zoomen der Geo-Map.", - "geoMapSelect": "Geo-Map Auswahl", - "geoMapSelectDesc": "Auslöser bei einer Auswahl auf der Geo-Map.", - "scannerSuccess": "Scanner Erfolg", - "scannerSuccessDesc": "Auslöser bei erfolgreichem Scan.", - "scannerError": "Scanner Fehler", - "scannerErrorDesc": "Auslöser bei einem Scannerfehler.", - "chartZoom": "Diagramm Zoomen", - "chartZoomDesc": "Auslöser beim Zoomen eines Diagramms.", - "chartHover": "Diagramm Hover", - "chartHoverDesc": "Auslöser beim Hover über einem Diagramm.", - "chartSelect": "Diagramm Auswählen", - "chartSelectDesc": "Auslöser bei der Auswahl eines Diagramms.", - "chartDeselect": "Diagramm Abwählen", - "chartDeselectDesc": "Auslöser beim Abwählen eines Diagramms.", - "close": "Schließen", - "closeDesc": "Auslöser beim Schließen.", - "parse": "Parsen", - "parseDesc": "Auslöser beim Parsen.", - "success": "Erfolg", - "successDesc": "Auslöser bei Erfolg.", - "delete": "Löschen", - "deleteDesc": "Auslöser beim Löschen.", - "mention": "Erwähnung", - "mentionDesc": "Auslöser bei einer Erwähnung." - }, - "themeDetail": { - ...en.themeDetail, - "primary": "Primärfarbe", - "primaryDesc": "Standard-Primärfarbe, die von den meisten Komponenten verwendet wird", - "textDark": "Dunkle Textfarbe", - "textDarkDesc": "Wird verwendet, wenn die Hintergrundfarbe hell ist", - "textLight": "Helle Textfarbe", - "textLightDesc": "Wird verwendet, wenn die Hintergrundfarbe dunkel ist", - "canvas": "Canvas Farbe", - "canvasDesc": "Standard-Hintergrundfarbe der App", - "primarySurface": "Container Farbe", - "primarySurfaceDesc": "Standard-Hintergrundfarbe für Komponenten wie z.B. Tabellen", - "borderRadius": "Radius des Rahmens", - "borderRadiusDesc": "Standard-Radius des Rahmens, der von den meisten Komponenten verwendet wird", - "chart": "Chart-Stil", - "chartDesc": "JSON Eingabe für Echarts", - "echartsJson": "Chart-Stil JSON", - "margin": "Außenabstand", - "marginDesc": "Standard Außenabstand, der typischerweise für die meisten Komponenten verwendet wird", - "padding": "Innenabstand", - "paddingDesc": "Standard Innenabstand, der für die meisten Komponenten verwendet wird", - "containerHeaderPadding": "Kopfbereich Innenabstand", - "containerheaderpaddingDesc": "Standard Kopfbereich Innenabstand, der für die meisten Komponenten verwendet wird", - "gridColumns": "Canvas Rasterspalten", - "gridColumnsDesc": "Standardanzahl von Spalten, welcher für den Canvas verwendet wird" - }, - "style": { - ...en.style, - "resetTooltip": "Stile zurücksetzen. Lösche das Eingabefeld, um einen einzelnen Stil zurückzusetzen.", - "textColor": "Textfarbe", - "contrastText": "Kontrastreiche Textfarbe", - "generated": "Generiert", - "customize": "Anpassen", - "staticText": "Statischer Text", - "accent": "Akzent", - "validate": "Validierungsmeldung", - "border": "Randfarbe", - "borderRadius": "Randradius", - "borderWidth": "Randbreite", - "borderStyle": "Randstil", - "background": "Hintergrund", - "headerBackground": "Kopfzeilenhintergrund", - "siderBackground": "Seitenleisten-Hintergrund", - "footerBackground": "Fußzeilenhintergrund", - "fill": "Füllung", - "track": "Spur", - "links": "Verknüpfungen", - "thumb": "Schiebereglergriff", - "thumbBorder": "Schieberegler-Rand", - "checked": "Aktiviert", - "unchecked": "Nicht aktiviert", - "handle": "Griff", - "tags": "Etiketten", - "tagsText": "Etiketten-Text", - "multiIcon": "Mehrfachauswahl-Symbol", - "tabText": "Tab-Text", - "tabAccent": "Tab-Akzent", - "checkedBackground": "Aktivierter Hintergrund", - "uncheckedBackground": "Deaktivierter Hintergrund", - "uncheckedBorder": "Deaktivierter Rand", - "indicatorBackground": "Indikator-Hintergrund", - "tableCellText": "Zellentext", - "selectedRowBackground": "Ausgewählter Zeilenhintergrund", - "hoverRowBackground": "Zeilen-Hover-Hintergrund", - "hoverBackground": "Hover-Hintergrund", - "textTransform": "Textumwandlung", - "textDecoration": "Textdekoration", - "alternateRowBackground": "Alternierender Zeilenhintergrund", - "tableHeaderBackground": "Tabellenkopf-Hintergrund", - "tableHeaderText": "Tabellenkopf-Text", - "toolbarBackground": "Werkzeugleisten-Hintergrund", - "toolbarText": "Werkzeugleisten-Text", - "pen": "Stift", - "footerIcon": "Fußzeilen-Symbol", - "tips": "Tipps", - "margin": "Außenabstand", - "padding": "Innenabstand", - "marginLeft": "Linker Außenabstand", - "marginRight": "Rechter Außenabstand", - "marginTop": "Oberer Außenabstand", - "marginBottom": "Unterer Außenabstand", - "containerHeaderPadding": "Kopfzeilen-Innenabstand", - "containerFooterPadding": "Fußzeilen-Innenabstand", - "containerSiderPadding": "Seitenleisten-Innenabstand", - "containerBodyPadding": "Körper-Innenabstand", - "minWidth": "Mindestbreite", - "aspectRatio": "Seitenverhältnis", - "textSize": "Textgröße", - "textWeight": "Textgewicht", - "fontFamily": "Schriftart", - "fontStyle": "Schriftstil", - "backgroundImage": "Hintergrundbild", - "backgroundImageRepeat": "Hintergrundbild-Wiederholung", - "backgroundImageSize": "Hintergrundbild-Größe", - "backgroundImagePosition": "Hintergrundbild-Position", - "backgroundImageOrigin": "Hintergrundbild-Ursprung", - "headerBackgroundImage": "Kopfzeilen-Hintergrundbild", - "headerBackgroundImageRepeat": "Kopfzeilen-Bildwiederholung", - "headerBackgroundImageSize": "Kopfzeilen-Bildgröße", - "headerBackgroundImagePosition": "Kopfzeilen-Bildposition", - "headerBackgroundImageOrigin": "Kopfzeilen-Bildursprung", - "footerBackgroundImage": "Fußzeilen-Hintergrundbild", - "footerBackgroundImageRepeat": "Fußzeilen-Bildwiederholung", - "footerBackgroundImageSize": "Fußzeilen-Bildgröße", - "footerBackgroundImagePosition": "Fußzeilen-Bildposition", - "footerBackgroundImageOrigin": "Fußzeilen-Bildursprung" - }, - "export": { - ...en.export, - "hiddenDesc": "Wenn true, wird die Komponente ausgeblendet", - "disabledDesc": "Wenn true, ist die Komponente deaktiviert und nicht interaktiv", - "visibleDesc": "Wenn true, ist die Komponente sichtbar", - "inputValueDesc": "Aktueller Wert der Eingabe", - "invalidDesc": "Zeigt an, ob der Wert ungültig ist", - "placeholderDesc": "Platzhaltertext, wenn kein Wert eingestellt ist", - "requiredDesc": "Wenn true, ist ein gültiger Wert erforderlich", - "submitDesc": "Formular abschicken", - "richTextEditorValueDesc": "Aktueller Inhalt des Text-Editors", - "richTextEditorReadOnlyDesc": "Wenn true, ist der Editor schreibgeschützt", - "richTextEditorHideToolBarDesc": "Wenn true, wird die Symbolleiste ausgeblendet", - "jsonEditorDesc": "Aktuelle JSON-Daten", - "sliderValueDesc": "Aktuell ausgewählter Schieberegler Wert", - "sliderMaxValueDesc": "Maximaler Wert des Schiebereglers", - "sliderMinValueDesc": "Mindestwert des Schiebereglers", - "sliderStartDesc": "Wert des gewählten Startpunkts", - "sliderEndDesc": "Wert des ausgewählten Endpunkts", - "ratingValueDesc": "Aktuell ausgewählte Bewertung", - "ratingMaxDesc": "Maximaler Wert der Bewertung", - "datePickerValueDesc": "Aktuell ausgewähltes Datum", - "datePickerFormattedValueDesc": "Ausgewähltes Datum formatiert", - "datePickerTimestampDesc": "Zeitstempel des ausgewählten Datums", - "dateRangeStartDesc": "Startdatum des Bereichs", - "dateRangeEndDesc": "Enddatum des Bereichs", - "dateRangeStartTimestampDesc": "Zeitstempel des Startdatums", - "dateRangeEndTimestampDesc": "Zeitstempel des Enddatums", - "dateRangeFormattedValueDesc": "Formatierter Datumsbereich", - "dateRangeFormattedStartValueDesc": "Formatiertes Startdatum", - "dateRangeFormattedEndValueDesc": "Formatiertes Enddatum", - "timePickerValueDesc": "Aktuell gewählte Zeit", - "timePickerFormattedValueDesc": "Formatierte ausgewählte Zeit", - "timeRangeStartDesc": "Startzeit des Zeitbereichs", - "timeRangeEndDesc": "Endzeit des Zeitbereichs", - "timeRangeFormattedValueDesc": "Formatierter Zeitbereich", - "timeRangeFormattedStartValueDesc": "Formatierte Startzeit des Zeitbereichs", - "timeRangeFormattedEndValueDesc": "Formatierte Endzeit des Zeitbereichs" - }, - "validationDesc": { - ...en.validationDesc, - "email": "Bitte gib eine gültige E-Mail Adresse ein", - "url": "Bitte gib eine gültige URL ein", - "regex": "Die Eingabe muss zum regulären Ausdruck passen.", - "maxLength": "Zu viele Zeichen, aktuell: {length}, maximal: {maxLength}", - "minLength": "Nicht genug Zeichen, aktuell: {length}, minimal: {minLength}", - "maxValue": "Wert überschreitet Maximum, aktuell: {value}, Maximum: {max}", - "minValue": "Wert unter Minimum, aktuell: {value}, Minimum: {min}", - "maxTime": "Zeit überschreitet Maximum, aktuell: {time}, Maximum: {maxTime}", - "minTime": "Zeit unter Minimum, aktuell: {time}, Minimum: {minTime}", - "maxDate": "Datum überschreitet Maximum, aktuell: {date}, Maximum: {maxDate}", - "minDate": "Datum unter Minimum, aktuell: {date}, Minimum: {minDate}" - }, - "query": { - ...en.query, - "noQueries": "Keine Datenabfragen verfügbar.", - "queryTutorialButton": "Ansicht {value} Dokumente", - "datasource": "Deine Datenquellen", - "newDatasource": "Neue Datenquelle", - "generalTab": "Allgemein", - "notificationTab": "Benachrichtigung", - "advancedTab": "Erweiterte Einstellungen", - "showFailNotification": "Benachrichtigung bei Misserfolg anzeigen", - "failCondition": "Fehlerbedingungen für Misserfolg", - "failConditionTooltip1": "Passe die Fehlerbedingungen und die entsprechenden Benachrichtigungen an.", - "failConditionTooltip2": "Wenn eine Bedingung erfüllt ist, wird die Abfrage als fehlgeschlagen markiert und die entsprechende Benachrichtigung ausgelöst.", - "showSuccessNotification": "Benachrichtigung bei Erfolg anzeigen", - "successMessageLabel": "Erfolgsmeldung", - "successMessage": "Datenabfrage ist erfolgreich gelaufen", - "notifyDuration": "Dauer", - "notifyDurationTooltip": "Dauer der Benachrichtigung. Die Zeiteinheit kann \\'s\\' (Sekunde, Standard) oder \\'ms\\' (Millisekunde) sein. Der Standardwert ist {default}s. Das Maximum ist {max}s.", - "successMessageWithName": "{name} Lauf erfolgreich", - "failMessageWithName": "{name} Lauf fehlgeschlagen: {result}", - "showConfirmationModal": "Bestätigungsmodal vor der Ausführung anzeigen", - "confirmationMessageLabel": "Bestätigungsnachricht", - "confirmationMessage": "Bist du sicher, dass du diese Datenabfrage ausführen willst?", - "newQuery": "Neue Datenabfrage", - "newFolder": "Neue Mappe", - "recentlyUsed": "Kürzlich verwendet", - "folder": "Ordner", - "folderNotEmpty": "Der Ordner ist nicht leer", - "dataResponder": "Daten Aktor", - "tempState": "Temporärer Zustand", - "transformer": "Daten Transformator", - "quickRestAPI": "HTTP REST-Abfrage", - "quickStreamAPI": "Daten Stream-Abfrage", - "quickGraphql": "GraphQL-Abfrage", - "lowcoderAPI": "Lowcoder API", - "executeJSCode": "JavaScript-Code", - "importFromQueryLibrary": "von Abfragebibliothek", - "importFromFile": "Aus Datei importieren", - "triggerType": "Ausgelöst, wenn...", - "triggerTypeAuto": "Wenn sich Eingaben in der App ändern oder beim Laden der Seite", - "triggerTypePageLoad": "Wenn die Anwendung (Seite) geladen wird", - "triggerTypeManual": "Nur Manuell auslösen", - "chooseDataSource": "Datenquelle wählen", - "method": "Methode", - "updateExceptionDataSourceTitle": "Fehlerhafte Datenquelle aktualisieren", - "updateExceptionDataSourceContent": "Aktualisiere die folgende Abfrage mit der gleichen Datenquelle:", - "update": "Update", - "disablePreparedStatement": "SQL Prepared Statements deaktivieren", - "disablePreparedStatementTooltip": "Die Deaktivierung von SQL Prepared Statements kann dynamisches SQL erzeugen, erhöht aber das Risiko von SQL-Injection", - "timeout": "Abbruch nach", - "timeoutTooltip": "Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Standardwert: {defaultSeconds} Sekunden. Maximaler Wert: {maxSeconds} Sekunden. Z.B. 300 (d.h. 300ms), 800ms, 5s.", - "periodic": "Diese Datenabfrage regelmäßig ausführen", - "periodicTime": "Zeitraum", - "periodicTimeTooltip": "Zeitraum zwischen aufeinanderfolgenden Ausführungen. Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Mindestwert: 100 ms. Bei Werten unter 100ms wird die periodische Ausführung deaktiviert. Z.B. 300 (d.h. 300ms), 800ms, 5s.", - "cancelPrevious": "Ignoriere die Ergebnisse früherer unvollendeter Datenabfragen", - "cancelPreviousTooltip": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen unvollständigen Datenabfragen ignoriert, wenn sie nicht abgeschlossen wurden, und diese ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", - "dataSourceStatusError": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen nicht abgeschlossenen Datenabfragen ignoriert, und die ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", - "success": "Erfolg", - "fail": "Fehler", - "successDesc": "Ausgelöst, wenn die Ausführung erfolgreich ist", - "failDesc": "Ausgelöst, wenn die Ausführung fehlschlägt", - "fixedDelayError": "Abfrage nicht ausgeführt", - "execSuccess": "Erfolgreich gelaufen", - "execFail": "Lauf fehlgeschlagen", - "execIgnored": "Die Ergebnisse dieser Datenabfrage wurden ignoriert", - "deleteSuccessMessage": "Erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden", - "dataExportDesc": "Daten, die durch die aktuelle Datenabfrage erhalten wurden", - "codeExportDesc": "Aktueller Query Status Code", - "successExportDesc": "Ob die aktuelle Datenabfrage erfolgreich ausgeführt wurde", - "messageExportDesc": "Von der aktuellen Datenabfrage zurückgegebene Informationen", - "extraExportDesc": "Andere Daten in der aktuellen Datenabfrage", - "isFetchingExportDesc": "Ist die aktuelle Datenabfrage in der Verarbeitung?", - "runTimeExportDesc": "Aktuelle Datenabfrage-Ausführungszeit (ms)", - "latestEndTimeExportDesc": "Letzte Laufzeit", - "triggerTypeExportDesc": "Auslöser Typ", - "chooseResource": "Wähle eine Ressource", - "createDataSource": "Eine neue Datenquelle erstellen", - "editDataSource": "Bearbeiten", - "datasourceName": "Datenquelle Name", - "datasourceNameRuleMessage": "Bitte gib einen Namen für die Datenquelle ein", - "generalSetting": "Allgemeine Einstellungen", - "advancedSetting": "Erweiterte Einstellungen", - "port": "Port", - "portRequiredMessage": "Bitte einen Port eingeben", - "portErrorMessage": "Bitte gib einen korrekten Port ein", - "connectionType": "Verbindungstyp", - "regular": "Regulär", - "host": "Host", - "hostRequiredMessage": "Bitte gib einen Host-Domänennamen oder eine IP-Adresse ein", - "userName": "Benutzer Name", - "password": "Passwort", - "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", - "uriRequiredMessage": "Bitte gib eine URI ein", - "urlRequiredMessage": "Bitte gib eine URL ein", - "uriErrorMessage": "Bitte gib eine korrekte URI ein", - "urlErrorMessage": "Bitte gib eine korrekte URL ein", - "httpRequiredMessage": "Bitte gib http:// oder https:// ein.", - "databaseName": "Datenbank Name", - "databaseNameRequiredMessage": "Bitte gib einen Datenbanknamen ein", - "useSSL": "SSL verwenden", - "userNameRequiredMessage": "Bitte gib deinen User-Namen ein", - "passwordRequiredMessage": "Bitte gib dein Passwort ein", - "authentication": "Authentifizierung", - "authenticationType": "Authentifizierung Typ", - "sslCertVerificationType": "SSL-Zertifikat-Verifizierung", - "sslCertVerificationTypeDefault": "CA-Zertifikat verifizieren", - "sslCertVerificationTypeSelf": "Selbstsigniertes Zertifikat verifizieren", - "sslCertVerificationTypeDisabled": "Deaktiviert", - "selfSignedCert": "Selbstsigniertes Zertifikat", - "selfSignedCertRequireMsg": "Bitte gib dein Zertifikat ein", - "enableTurnOffPreparedStatement": "SQL Prepared Statements für Abfragen aktivieren", - "enableTurnOffPreparedStatementTooltip": "Du kannst SQL Prepared Statements auf der Registerkarte \"Erweitert\" der Abfrage aktivieren oder deaktivieren.", - "serviceName": "Dienst Name", - "serviceNameRequiredMessage": "Bitte gib deinen Dienstnamen ein", - "useSID": "SID verwenden", - "connectSuccessfully": "Verbindung erfolgreich", - "saveSuccessfully": "Erfolgreich gerettet", - "database": "Datenbank", - "cloudHosting": "Der in der Cloud gehostete Lowcoder kann nicht auf lokale Dienste mit 127.0.0.1 oder localhost zugreifen. Versuche, dich mit öffentlichen Netzwerkdatenquellen zu verbinden oder verwende einen Reverse Proxy für private Dienste.", - "notCloudHosting": "Für den Einsatz von Docker-Hosts verwendet Lowcoder Bridge-Netzwerke, daher sind 127.0.0.1 und localhost als Hostadressen ungültig. Für den Zugriff auf Datenquellen auf lokalen Rechnern siehe", - "howToAccessHostDocLink": "Wie man auf die Host-API/DB zugreift", - "returnList": "Rückgabe Liste", - "chooseDatasourceType": "Datenquellentyp auswählen", - "viewDocuments": "Dokumente ansehen", - "testConnection": "Test Verbindung", - "save": "Speichern", - "whitelist": "Whitelist", - "whitelistTooltip": "Füge die IP-Adressen von Lowcoder nach Bedarf zu deiner Datenquellen-Zulassungsliste hinzu.", - "address": "Adresse: ", - "nameExists": "Name {name} existiert bereits", - "jsQueryDocLink": "Über JavaScript Query", - "dynamicDataSourceConfigLoadingText": "Laden einer zusätzlichen Datenquellenkonfiguration...", - "dynamicDataSourceConfigErrText": "Die Konfiguration der zusätzlichen Datenquelle konnte nicht geladen werden.", - "retry": "Wiederholen" - }, - "sqlQuery": { - ...en.sqlQuery, - "keyValuePairs": "Schlüssel-Werte-Paare", - "object": "Objekt", - "allowMultiModify": "Mehrzeilige Änderungen zulassen", - "allowMultiModifyTooltip": "Wenn diese Option ausgewählt ist, werden alle Zeilen, die die Bedingungen erfüllen, bearbeitet. Andernfalls wird nur die erste Zeile, die die Bedingungen erfüllt, bearbeitet.", - "array": "Array", - "insertList": "Liste einfügen", - "insertListTooltip": "Werte werden eingefügt, wenn sie nicht existieren", - "filterRule": "Filter-Regel", - "updateList": "Liste aktualisieren", - "updateListTooltip": "Vorhandene Werte können durch die gleichen Werte der Einfügeliste überschrieben werden", - "sqlMode": "SQL-Mode", - "guiMode": "GUI-Mode", - "operation": "Operation", - "insert": "Einfügen", - "upsert": "Einfügen, aber aktualisieren, wenn es einen Konflikt gibt", - "update": "Update", - "delete": "Löschen", - "bulkInsert": "Stapel Einfügen", - "bulkUpdate": "Stapel Aktualisieren", - "table": "Tabelle", - "primaryKeyColumn": "Primärschlüsselspalte" - }, - "EsQuery": { - ...en.EsQuery, - "rawCommand": "Roh-Abfragebefehl", - "queryTutorialButton": "Elasticsearch API Dokumente anzeigen", - "request": "Abfrage" - }, - "googleSheets": { - ...en.googleSheets, - "rowIndex": "Zeilenindex", - "spreadsheetId": "Tabellenkalkulations-ID", - "sheetName": "Tabellen-Blatt Name", - "readData": "Daten lesen", - "appendData": "Zeile anhängen", - "updateData": "Zeile aktualisieren", - "deleteData": "Zeile löschen", - "clearData": "Reihe löschen", - "serviceAccountRequireMessage": "Bitte gib dein Servicekonto ein", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Sortieren", - "sortPlaceholder": "Platzhalter" - }, - "queryLibrary": { - ...en.queryLibrary, - "export": "Exportieren nach JSON", - "noInput": "Die aktuelle Abfrage hat keine Eingabe", - "inputName": "Name", - "inputDesc": "Beschreibung", - "emptyInputs": "Keine Eingaben", - "clickToAdd": "Hinzufügen", - "chooseQuery": "Abfrage wählen", - "viewQuery": "Ansicht Abfrage", - "chooseVersion": "Version wählen", - "latest": "Neueste", - "publish": "Veröffentlichen", - "historyVersion": "Historische Version", - "deleteQueryLabel": "Abfrage löschen", - "deleteQueryContent": "Die Abfrage kann nach dem Löschen nicht wiederhergestellt werden. Die Abfrage löschen?", - "run": "Lauf", - "readOnly": "Nur lesen", - "exit": "Abbruch", - "recoverAppSnapshotContent": "Die aktuelle Abfrage zur Version {version} wiederherstellen", - "searchPlaceholder": "Suchabfrage", - "allQuery": "Alle Abfragen", - "deleteQueryTitle": "Abfrage löschen", - "unnamed": "Unbenannt", - "publishNewVersion": "Neue Version veröffentlichen", - "publishSuccess": "Erfolgreich veröffentlicht", - "version": "Version", - "desc": "Beschreibung" - }, - "snowflake": { - ...en.snowflake, - "accountIdentifierTooltip": "Siehe ", - "extParamsTooltip": "Zusätzliche Verbindungsparameter konfigurieren" - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - "queryOrgUsers": "Abfrage Arbeitsbereich Benutzer" - }, - "redisQuery": { - ...en.redisQuery, - "rawCommand": "Roher Befehl", - "command": "Befehl", - "queryTutorial": "Redis-Befehlsdokumente anzeigen" - }, - "httpQuery": { - ...en.httpQuery, - "bodyFormDataTooltip": "Wenn {type} ausgewählt ist, sollte das Werteformat {object} sein. Beispiel: {example}", - "text": "Text", - "file": "Datei", - "extraBodyTooltip": "Schlüsselwerte im Extra Body werden an den Body mit den Datentypen JSON oder Form Data angehängt", - "forwardCookies": "Cookies weiterleiten", - "forwardAllCookies": "Alle Cookies weiterleiten" - }, - "smtpQuery": { - ...en.smtpQuery, - "attachment": "Anhang", - "attachmentTooltip": "Kann mit der Datei-Upload-Komponente verwendet werden, die Daten müssen konvertiert werden in: ", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Sender", - "recipient": "Empfänger", - "carbonCopy": "Durchschlag", - "blindCarbonCopy": "Blindkopie", - "subject": "Thema", - "content": "Inhalt", - "contentTooltip": "Unterstützt die Eingabe von Text oder HTML" - }, - "uiCompCategory": { - ...en.uiCompCategory, - "dashboards": "Dashboards & Berichte", - "layout": "Layout & Navigation", - "forms": "Datenerhebung & Formulare", - "collaboration": "Meetings & Zusammenarbeit", - "projectmanagement": "Projektmanagement", - "scheduling": "Kalender & Terminplanung", - "documents": "Dokumenten- und Dateiverwaltung", - "itemHandling": "Handhabung von Inventar", - "multimedia": "Multimedia & Animation", - "integration": "Integration & Erweiterung" - }, - "uiComp": { - ...en.uiComp, - "autoCompleteCompName": "Vorschlag Feld", - "autoCompleteCompDesc": "Ein Eingabefeld, das Vorschläge während der Eingabe anbietet und dadurch die Benutzererfahrung und Genauigkeit verbessert.", - "autoCompleteCompKeywords": "Vorschläge, Autovervollständigung, Tippen, Eingabe", - "inputCompName": "Eingabe Feld", - "inputCompDesc": "Ein grundlegendes Texteingabefeld, das es Benutzern ermöglicht, Text einzugeben und zu bearbeiten.", - "inputCompKeywords": "Text, Eingabe, Feld, Bearbeiten", - "textAreaCompName": "Text Bereich Feld", - "textAreaCompDesc": "Ein mehrzeiliges Texteingabefeld für längere Inhalte wie Kommentare oder Beschreibungen.", - "textAreaCompKeywords": "mehrzeilig, Textbereich, Eingabe, Text", - "passwordCompName": "Passwort Feld", - "passwordCompDesc": "Ein sicheres Eingabefeld für Passwörter, das Zeichen aus Datenschutzgründen maskiert.", - "passwordCompKeywords": "Passwort, Sicherheit, Eingabe, versteckt", - "richTextEditorCompName": "Text Editor", - "richTextEditorCompDesc": "Ein fortgeschrittener Texteditor, der reichhaltige Formatierungsoptionen wie Fett, Kursiv und Listen unterstützt.", - "richTextEditorCompKeywords": "Editor, Text, Formatierung, Rich Content", - "numberInputCompName": "Zahlen Feld", - "numberInputCompDesc": "Ein Eingabefeld speziell für numerische Eingaben mit Optionen zum Erhöhen und Verringern der Werte.", - "numberInputCompKeywords": "Nummer, Eingabe, Inkrement, Dekrement", - "sliderCompName": "Regler", - "sliderCompDesc": "Eine grafische Schiebereglerkomponente zur Auswahl eines Wertes oder Bereichs innerhalb einer festgelegten Skala.", - "sliderCompKeywords": "Schieberegler, Bereich, Eingabe, grafisch", - "rangeSliderCompName": "Bereich Regler", - "rangeSliderCompDesc": "Ein Schieberegler mit zwei Griffen zur Auswahl eines Wertebereichs, nützlich für Filterungen oder zum Festlegen von Grenzwerten.", - "rangeSliderCompKeywords": "Bereich, Schieberegler, Zweigriff, Filter", - "ratingCompName": "Bewertung", - "ratingCompDesc": "Eine Komponente zur Erfassung von Benutzerbewertungen, dargestellt durch Sterne.", - "ratingCompKeywords": "Bewertung, Sterne, Rückmeldung, Eingabe", - "switchCompName": "Schalter", - "switchCompDesc": "Ein Umschalter für Ein/Aus- oder Ja/Nein-Entscheidungen.", - "switchCompKeywords": "Umschalter, Schalter, ein/aus, Steuerung", - "selectCompName": "Auswahl", - "selectCompDesc": "Ein Dropdown-Menü zur Auswahl aus einer Liste von Optionen.", - "selectCompKeywords": "Dropdown, auswählen, Optionen, Menü", - "multiSelectCompName": "Mehrfach Auswahl", - "multiSelectCompDesc": "Eine Komponente, die die Auswahl mehrerer Elemente aus einer Dropdown-Liste ermöglicht.", - "multiSelectCompKeywords": "Mehrfachauswahl, mehrere, Dropdown, Auswahlmöglichkeiten", - "cascaderCompName": "Kaskade Auswahl", - "cascaderCompDesc": "Ein mehrstufiges Dropdown für die hierarchische Auswahl von Daten, beispielsweise bei der Standortauswahl.", - "cascaderCompKeywords": "Kaskadierer, hierarchisch, Dropdown, Stufen", - "checkboxCompName": "Checkbox", - "checkboxCompDesc": "Ein Standardkästchen für Optionen, die ausgewählt oder abgewählt werden können.", - "checkboxCompKeywords": "Kästchen, Optionen, auswählen, umschalten", - "radioCompName": "Options Feld", - "radioCompDesc": "Optionsfelder zur Auswahl einer Option aus einem Set, wobei nur eine Wahl erlaubt ist.", - "radioCompKeywords": "Optionsfeld, Schaltflächen, auswählen, Einzelwahl", - "segmentedControlCompName": "Segmente", - "segmentedControlCompDesc": "Eine Steuerung mit segmentierten Optionen zum schnellen Wechsel zwischen mehreren Auswahlmöglichkeiten.", - "segmentedControlCompKeywords": "segmentiert, Steuerung, wechseln, Optionen", - "stepControlCompName": "Schritte", - "stepControlCompDesc": "Eine Steuerung mit Schrittoptionen, die visuell geführte Schritte für Anwendungen wie Formulare oder Assistenten bietet.", - "stepControlCompKeywords": "Schritte, Steuerung, wechseln, Optionen", - "fileUploadCompName": "Upload", - "fileUploadCompDesc": "Eine Komponente zum Hochladen von Dateien mit Unterstützung für Drag-and-Drop und Dateiauswahl.", - "fileUploadCompKeywords": "Datei, hochladen, ziehen und ablegen, auswählen", - "dateCompName": "Datum Auswahl", - "dateCompDesc": "Eine Datumsauswahlkomponente zum Auswählen von Daten aus einem Kalenderinterface.", - "dateCompKeywords": "Datum, Auswähler, Kalender, auswählen", - "dateRangeCompName": "Datum Bereich Auswahl", - "dateRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitraums, nützlich für Buchungssysteme oder Filter.", - "dateRangeCompKeywords": "Datumsbereich, auswählen, Buchung, filtern", - "timeCompName": "Zeit Auswahl", - "timeCompDesc": "Eine Zeitwahlkomponente zur Auswahl spezifischer Tageszeiten.", - "timeCompKeywords": "Zeit, Auswähler, auswählen, Uhr", - "timeRangeCompName": "Zeitraum Auswahl", - "timeRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitintervalls, oft verwendet in Planungsanwendungen.", - "timeRangeCompKeywords": "Zeitraum, auswählen, Planung, Dauer", - "buttonCompName": "Button", - "buttonCompDesc": "Eine vielseitige Knopfkomponente für das Absenden von Formularen, das Auslösen von Aktionen oder das Navigieren.", - "buttonCompKeywords": "Knopf, absenden, Aktion, navigieren", - "linkCompName": "Link", - "linkCompDesc": "Eine Komponente zur Anzeige von Hyperlinks für die Navigation oder zum Verlinken auf externe Ressourcen.", - "linkCompKeywords": "Verknüpfung, Hyperlink, Navigation, extern", - "scannerCompName": "Code Scanner", - "scannerCompDesc": "Eine Komponente zum Scannen von Barcodes, QR-Codes und anderen ähnlichen Daten.", - "scannerCompKeywords": "Scanner, Barcode, QR-Code, Scannen", - "dropdownCompName": "Dropdown", - "dropdownCompDesc": "Ein Dropdown-Menü zur kompakten Darstellung einer Liste von Optionen.", - "dropdownCompKeywords": "Dropdown, Menü, Optionen, auswählen", - "toggleButtonCompName": "Umschalter", - "toggleButtonCompDesc": "Ein Knopf, der zwischen zwei Zuständen oder Optionen umschalten kann.", - "toggleButtonCompKeywords": "Umschalten, Knopf, Schalter, Zustand", - "meetingControlCompName": "Icon Taste", - "meetingCompDesc": "Eine Steuerungstaste mit Icons.", - "meetingCompKeywords": "Steuerung, Taste, Icons", - "textCompName": "Text Anzeige", - "textCompDesc": "Eine einfache Komponente zur Anzeige von statischem oder dynamischem Textinhalt einschließlich Markdown-Formatierung.", - "textCompKeywords": "Text, Anzeige, statisch, dynamisch", - "tableCompName": "Tabelle", - "tableCompDesc": "Eine umfangreiche Tabellenkomponente zur Darstellung von Daten in einem strukturierten Tabellenformat, mit Optionen für Sortierung und Filterung, Baumdatenanzeige und erweiterbare Zeilen.", - "tableCompKeywords": "Tabelle, Daten, Sortierung, Filterung", - "imageCompName": "Bild", - "imageCompDesc": "Eine Komponente zur Anzeige von Bildern, die verschiedene Formate basierend auf URI oder Base64-Daten unterstützt.", - "imageCompKeywords": "Bild, Anzeige, Medium, Base64", - "progressCompName": "Fortschritt Anzeige", - "progressCompDesc": "Ein visueller Indikator des Fortschritts, der typischerweise verwendet wird, um den Fertigstellungsstatus einer Aufgabe zu zeigen.", - "progressCompKeywords": "Fortschritt, Indikator, Status, Aufgabe", - "progressCircleCompName": "Fortschritt Anzeige Kreis", - "progressCircleCompDesc": "Ein kreisförmiger Fortschrittsindikator, der häufig für Ladezustände oder zeitgebundene Aufgaben verwendet wird.", - "progressCircleCompKeywords": "Kreis, Fortschritt, Indikator, Laden", - "fileViewerCompName": "Datei Anzeiger", - "fileViewerCompDesc": "Eine Komponente zur Anzeige verschiedener Dateitypen, einschließlich Dokumente und Bilder.", - "fileViewerCompKeywords": "Datei, Anzeiger, Dokument, Bild", - "dividerCompName": "Trennlinie", - "dividerCompDesc": "Eine visuelle Trennkomponente, die verwendet wird, um Inhalte oder Abschnitte innerhalb eines Layouts zu separieren.", - "dividerCompKeywords": "Trennlinie, Separator, Layout, Gestaltung", - "qrCodeCompName": "QRCode Anzeiger", - "qrCodeCompDesc": "Eine Komponente zur Anzeige von QR-Codes, nützlich für schnelles Scannen und Informationsübertragung.", - "qrCodeCompKeywords": "QR-Code, Scannen, Barcode, Information", - "formCompName": "Formular", - "formCompDesc": "Eine Containerkomponente für die Erstellung strukturierter Formulare mit verschiedenen Eingabetypen.", - "formCompKeywords": "Formular, Eingabe, Container, Struktur", - "jsonSchemaFormCompName": "JSON Schema Formular", - "jsonSchemaFormCompDesc": "Eine dynamische Formularkomponente, die basierend auf einem JSON-Schema generiert wird.", - "jsonSchemaFormCompKeywords": "JSON, Schema, Formular, dynamisch", - "containerCompName": "Container", - "containerCompDesc": "Ein Allzweck-Container für das Layout und die Organisation von UI-Elementen.", - "containerCompKeywords": "Container, Layout, Organisation, UI", - "floatTextContainerCompName": "Text Umbruch Container", - "floatTextContainerCompDesc": "Eine Komponente zur Anzeige von Text, die den Inhalt dynamisch anpasst und einfließen lässt.", - "floatTextContainerCompKeywords": "Container, Layout, Text, fließend", - "collapsibleContainerCompName": "Klapp Container", - "collapsibleContainerCompDesc": "Ein Container, der erweitert oder zusammengeklappt werden kann, ideal für die Verwaltung der Sichtbarkeit von Inhalten.", - "collapsibleContainerCompKeywords": "klappbar, Container, erweitern, zusammenklappen", - "tabbedContainerCompName": "Register Karten Container", - "tabbedContainerCompDesc": "Ein Container mit Registerkartennavigation zur Organisation von Inhalten in separaten Bereichen.", - "tabbedContainerCompKeywords": "Registerkarten, Container, Navigation, Bereiche", - "pageLayoutCompName": "Seiten Layout", - "pageLayoutCompDesc": "Ein Container, der es ermöglicht, ein Layout mit Kopfzeile, Seitenleiste, Fußzeile und Hauptinhaltsbereichen zu erstellen.", - "pageLayoutCompKeywords": "Layout, Container, Navigation, Seiten", - "modalCompName": "Modal", - "modalCompDesc": "Eine Pop-up-Modalkomponente zur Anzeige von Inhalten, Alarmen oder Formularen im Fokus.", - "modalCompKeywords": "Modal, Pop-up, Alarm, Formular", - "listViewCompName": "Listen Ansicht", - "listViewCompDesc": "Eine Komponente zur Anzeige einer Liste von Elementen oder Daten, in die andere Komponenten eingefügt werden können, ähnlich einem Repeater.", - "listViewCompKeywords": "Liste, Ansicht, Anzeige, Repeater", - "gridCompName": "Grid Ansicht", - "gridCompDesc": "Eine flexible Gitterkomponente zur Erstellung strukturierter Layouts mit Zeilen und Spalten, eine Erweiterung der Listenansicht.", - "gridCompKeywords": "Gitter, Layout, Zeilen, Spalten", - "navigationCompName": "Navigation", - "navigationCompDesc": "Eine Navigationskomponente zum Erstellen von Menüs, Brotkrumen oder Tabs für die Seitennavigation.", - "navigationCompKeywords": "Navigation, Menü, Brotkrumen, Tabs", - "iframeCompName": "IFrame", - "iframeCompDesc": "Eine Inline-Frame-Komponente zum Einbetten externer Webseiten und Anwendungen oder Inhalte innerhalb der Anwendung.", - "iframeCompKeywords": "IFrame, einbetten, Webseite, Inhalt", - "customCompName": "Code Komponente", - "customCompDesc": "Eine flexible, programmierbare Komponente zur Erstellung einzigartiger, benutzerdefinierter UI-Elemente, die speziell auf Ihre Bedürfnisse zugeschnitten sind.", - "customCompKeywords": "benutzerdefiniert, benutzerdefiniert, flexibel, programmierbar", - "moduleCompName": "App Modul", - "moduleCompDesc": "Verwenden Sie Module, um Mikro-Apps zu erstellen, die spezifische Funktionen oder Merkmale kapseln. Module können dann eingebettet und in allen Apps wiederverwendet werden.", - "moduleCompKeywords": "Modul, Mikro-App, Funktionalität, wiederverwendbar", - "jsonExplorerCompName": "JSON Anzeiger", - "jsonExplorerCompDesc": "Eine Komponente zum visuellen Erkunden und Interagieren mit JSON-Datenstrukturen.", - "jsonExplorerCompKeywords": "JSON, Explorer, Daten, Struktur", - "jsonEditorCompName": "JSON Editor", - "jsonEditorCompDesc": "Eine Editor-Komponente zum Erstellen und Modifizieren von JSON-Daten mit Validierung und Syntaxhervorhebung.", - "jsonEditorCompKeywords": "JSON, Editor, modifizieren, validieren", - "treeCompName": "Baum Struktur", - "treeCompDesc": "Eine Baumstrukturkomponente zur Darstellung hierarchischer Daten, wie z. B. Dateisysteme oder Organigramme.", - "treeCompKeywords": "Baum, hierarchisch, Daten, Struktur", - "treeSelectCompName": "Baum Auswahl", - "treeSelectCompDesc": "Eine Auswahlkomponente, die Optionen in einem hierarchischen Baumformat präsentiert, was eine organisierte und verschachtelte Auswahl ermöglicht.", - "treeSelectCompKeywords": "Baum, auswählen, hierarchisch, verschachtelt", - "audioCompName": "Audio", - "audioCompDesc": "Eine Komponente zur Einbettung von Audioinhalten, mit Steuerungselementen für Wiedergabe und Lautstärkeregelung.", - "audioCompKeywords": "Audio, Wiedergabe, Ton, Musik", - "videoCompName": "Video", - "videoCompDesc": "Eine Multimediakomponente zum Einbetten und Abspielen von Videoinhalten, unterstützt verschiedene Formate.", - "videoCompKeywords": "Video, Multimedia, Abspielen, Einbetten", - "drawerCompName": "Schublade", - "drawerCompDesc": "Ein schiebbares Paneel, das für zusätzliche Navigation oder zur Inhaltsanzeige verwendet werden kann, typischerweise vom Bildschirmrand ausgehend.", - "drawerCompKeywords": "Schublade, schiebbar, Paneel, Navigation", - "chartCompName": "Diagramm", - "chartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Graphen.", - "chartCompKeywords": "Diagramm, Graph, Daten, Visualisierung", - "carouselCompName": "Bild Karussell", - "carouselCompDesc": "Eine rotierende Karussellkomponente zur Präsentation von Bildern, Bannern oder Inhaltsfolien.", - "carouselCompKeywords": "Karussell, Bilder, Rotation, Präsentation", - "imageEditorCompName": "Bild Editor", - "imageEditorCompDesc": "Eine interaktive Komponente zur Bearbeitung und Manipulation von Bildern, bietet verschiedene Werkzeuge und Filter.", - "imageEditorCompKeywords": "Bild, Editor, bearbeiten, Werkzeuge", - "mermaidCompName": "Mermaid Diagramm", - "mermaidCompDesc": "Eine Komponente zum Erstellen komplexer Diagramme und Flussdiagramme basierend auf der Mermaid-Syntax.", - "mermaidCompKeywords": "Mermaid, Diagramme, Flussdiagramme, Visualisierung", - "calendarCompName": "Kalender", - "calendarCompDesc": "Eine Kalenderkomponente zur Anzeige von Daten und Ereignissen, mit Ansichtsoptionen für Monat, Woche oder Tag.", - "calendarCompKeywords": "Kalender, Daten, Ereignisse, Planung", - "signatureCompName": "Unterschrift", - "signatureCompDesc": "Eine Komponente zur Erfassung digitaler Unterschriften, nützlich für Genehmigungs- und Verifizierungsprozesse.", - "signatureCompKeywords": "Unterschrift, digital, Genehmigung, Verifizierung", - "jsonLottieCompName": "Lottie Animationen", - "jsonLottieCompDesc": "Eine Komponente zur Anzeige von Lottie-Animationen, bietet leichtgewichtige und skalierbare Animationen basierend auf JSON-Daten.", - "jsonLottieCompKeywords": "Lottie, Animation, JSON, skalierbar", - "timelineCompName": "Zeitleiste", - "timelineCompDesc": "Eine Komponente zur Darstellung von Ereignissen oder Aktionen in einer chronologischen Reihenfolge, visuell dargestellt entlang einer linearen Zeitleiste.", - "timelineCompKeywords": "Zeitleiste, Ereignisse, chronologisch, Geschichte", - "commentCompName": "Kommentar", - "commentCompDesc": "Eine Komponente zum Hinzufügen und Anzeigen von Benutzerkommentaren, unterstützt verschachtelte Antworten und Benutzerinteraktion.", - "commentCompKeywords": "Kommentar, Diskussion, Benutzerinteraktion, Rückmeldung", - "mentionCompName": "Erwähnung", - "mentionCompDesc": "Eine Komponente, die das Erwähnen von Benutzern oder Tags innerhalb von Textinhalten unterstützt, typischerweise verwendet in sozialen Medien oder kollaborativen Plattformen.", - "mentionCompKeywords": "Erwähnung, Tag, Benutzer, soziale Medien", - "responsiveLayoutCompName": "Responsive Layout", - "responsiveLayoutCompDesc": "Eine Layoutkomponente, die entwickelt wurde, um sich verschiedenen Bildschirmgrößen und Geräten anzupassen, und so ein konsistentes Benutzererlebnis sicherstellt.", - "responsiveLayoutCompKeywords": "responsiv, Layout, anpassen, Bildschirmgröße", - "iconCompName": "Icons", - "iconCompDesc": "Verwenden Sie verschiedene Icons, um die visuelle Anziehungskraft und das Benutzererlebnis Ihrer Anwendung zu verbessern.", - "iconCompKeywords": "Icons, Piktogramme, Symbole, Formen", - "tourCompName": "Tour", - "tourCompDesc": "Eine Produktführung zur Anleitung der Benutzer.", - "tourCompKeywords": "Tour, Produktführung, Walkthrough, interaktiver Rundgang" - }, - "comp": { - ...en.comp, - "menuViewDocs": "Dokumentation ansehen", - "menuViewPlayground": "Interaktiven Spielplatz ansehen", - "menuUpgradeToLatest": "Upgrade auf die neueste Version", - "nameNotEmpty": "Kann nicht leer sein", - "nameRegex": "Muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern und Unterstriche (_) enthalten", - "nameJSKeyword": "Kann kein JavaScript-Schlüsselwort sein", - "nameGlobalVariable": "Kann kein globaler Variablenname sein", - "nameExists": "Name {name} Existiert bereits", - "getLatestVersionMetaError": "Die neueste Version konnte nicht abgerufen werden, bitte versuche es später.", - "needNotUpgrade": "Die aktuelle Version ist bereits die neueste.", - "compNotFoundInLatestVersion": "Aktuelle Komponente nicht in der neuesten Version gefunden.", - "upgradeSuccess": "Erfolgreich auf die neueste Version upgegradet.", - "searchProp": "Suche" - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - "retry": "Wiederholen", - "resetAfterSubmit": "Zurücksetzen nach erfolgreichem Absenden des Formulars", - "jsonSchema": "JSON-Schema", - "uiSchema": "UI Schema", - "schemaTooltip": "Siehe", - "defaultData": "Vorausgefüllte Formulardaten", - "dataDesc": "Aktuelle Formulardaten", - "required": "Erforderlich", - "maximum": "Der Maximalwert ist {value}", - "minimum": "Der Mindestwert ist {value}", - "exclusiveMaximum": "Sollte kleiner sein als {value}", - "exclusiveMinimum": "Sollte größer sein als {value}", - "multipleOf": "Sollte ein Vielfaches von {value} sein", - "minLength": "Mindestens {value} Zeichen", - "maxLength": "Höchstens {value} Zeichen", - "pattern": "Sollte dem Muster {value} entsprechen", - "format": "Sollte dem Format {value} entsprechen" - }, - "select": { - ...en.select, - "inputValueDesc": "Eingabe Suchwert" - }, - "customComp": { - ...en.customComp, - "text": "Es ist ein guter Tag.", - "triggerQuery": "Trigger-Abfrage", - "updateData": "Daten aktualisieren", - "updateText": "Ich bin auch in guter Stimmung, jetzt meine eigene Komponente mit Lowcoder zu entwickeln!", - "sdkGlobalVarName": "Lowcoder", - "data": "Daten, die du an die benutzerdefinierte Komponente übergeben willst", - "code": "Code deiner benutzerdefinierten Komponente" - }, - "tree": { - ...en.tree, - "selectType": "Typ auswählen", - "noSelect": "Keine Auswahl", - "singleSelect": "Einzeln auswählen", - "multiSelect": "Multi Select", - "checkbox": "Kontrollkästchen", - "checkedStrategy": "Geprüfte Strategie", - "showAll": "Alle Knotenpunkte", - "showParent": "Nur übergeordnete Knotenpunkte", - "showChild": "Nur Kind-Knoten", - "autoExpandParent": "Auto Expand Elternteil", - "checkStrictly": "Streng prüfen", - "checkStrictlyTooltip": "TreeNode genau prüfen; Parent TreeNode und Children TreeNodes sind nicht assoziiert", - "treeData": "Baumdaten", - "treeDataDesc": "Aktuelle Baumdaten", - "value": "Standardwerte", - "valueDesc": "Aktuelle Werte", - "expanded": "Erweitert Werte", - "expandedDesc": "Aktuelle erweiterte Werte", - "defaultExpandAll": "Standard Alle Knoten erweitern", - "showLine": "Linie anzeigen", - "showLeafIcon": "Blattsymbol anzeigen", - "treeDataAsia": "Asien", - "treeDataChina": "China", - "treeDataBeijing": "Peking", - "treeDataShanghai": "Shanghai", - "treeDataJapan": "Japan", - "treeDataEurope": "Europa", - "treeDataEngland": "England", - "treeDataFrance": "Frankreich", - "treeDataGermany": "Deutschland", - "treeDataNorthAmerica": "Nord-Amerika", - "helpLabel": "Knotenpunkt Etikett", - "helpValue": "Einzigartiger Knotenpunktwert im Baum", - "helpChildren": "Kinder Knoten", - "helpDisabled": "Deaktiviert den Knotenpunkt", - "helpSelectable": "Ob der Knoten wählbar ist (Single/Multi Select Typ)", - "helpCheckable": "Ob ein Kontrollkästchen angezeigt werden soll (Checkbox-Typ)", - "helpDisableCheckbox": "Deaktiviert das Kontrollkästchen (Checkbox-Typ)" - }, - "moduleContainer": { - ...en.moduleContainer, - "eventTest": "Veranstaltungstest", - "methodTest": "Methode Test", - "inputTest": "Eingangstest" - }, - "password": { - ...en.password, - "label": "Passwort", - "placeholder": "Bitte gib ein sicheres Passwort ein", - "conformLabel": "Passwort Bestätigung", - "conformPlaceholder": "Bitte das Passwort zur Bestätigung nochmal eingeben", - "visibilityToggle": "Sichtbarkeit anzeigen Toggle" - }, - "richTextEditor": { - ...en.richTextEditor, - "toolbar": "Symbolleiste anpassen", - "toolbarDescription": "Du kannst die Symbolleiste individuell anpassen. Weitere Informationen findest du unter: https://quilljs.com/docs/modules/toolbar/.", - "placeholder": "Bitte eingeben...", - "hideToolbar": "Symbolleiste ausblenden", - "content": "Inhalt", - "title": "Titel", - "save": "Speichern", - "link": "Link: ", - "edit": "bearbeiten", - "remove": "entfernen", - "defaultValue": "Basis Inhalt" - }, - "numberInput": { - ...en.numberInput, - "formatter": "Format", - "precision": "Präzision", - "allowNull": "Nullwert zulassen", - "thousandsSeparator": "Tausendertrennzeichen anzeigen", - "controls": "Schaltflächen zum Erhöhen/Verringern anzeigen", - "step": "Schritt", - "standard": "Standard", - "percent": "Prozente" - }, - "slider": { - ...en.slider, - "step": "Schritt", - "stepTooltip": "Der Wert muss größer als 0 und durch (Max-Min) teilbar sein" - }, - "rating": { - ...en.rating, - "max": "Maximale Bewertung", - "allowHalf": "Halbe Bewertungspunkte zulassen" - }, - "optionsControl": { - ...en.optionsControl, - "optionList": "Optionen", - "option": "Option", - "optionI": "Option {i}", - "viewDocs": "Docs ansehen", - "tip": "Die Variablen \\'item\\' und \\'i\\' repräsentieren den Wert und den Index jedes Elements in der Datenmatrix" - }, - "radio": { - ...en.radio, - "options": "Optionen", - "horizontal": "Horizontal", - "horizontalTooltip": "Das horizontale Layout wickelt sich selbst ein, wenn es keinen Platz mehr hat", - "vertical": "Vertikal", - "verticalTooltip": "Das vertikale Layout wird immer in einer einzigen Spalte angezeigt", - "autoColumns": "Auto Kolonne", - "autoColumnsTooltip": "Das Auto-Spalten-Layout ordnet die Reihenfolge automatisch neu an, wenn es der Platz erlaubt, und zeigt sie als mehrere Spalten an" - }, - "cascader": { - ...en.cascader, - "options": "JSON-Daten zur Anzeige kaskadierender Auswahlen" - }, - "selectInput": { - ...en.selectInput, - "valueDesc": "Aktuell ausgewählter Wert", - "selectedIndexDesc": "Der Index des aktuell ausgewählten Wertes oder -1, wenn kein Wert ausgewählt ist", - "selectedLabelDesc": "Die Bezeichnung des aktuell ausgewählten Wertes" - }, - "file": { - ...en.file, - "typeErrorMsg": "Muss eine Zahl mit einer gültigen Dateigrößeneinheit oder eine einheitenlose Anzahl von Bytes sein.", - "fileEmptyErrorMsg": "Upload fehlgeschlagen. Die Dateigröße ist leer.", - "fileSizeExceedErrorMsg": "Upload fehlgeschlagen. Die Dateigröße übersteigt das Limit.", - "minSize": "Min Größe", - "minSizeTooltip": "Die Mindestgröße der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", - "maxSize": "Max Größe", - "maxSizeTooltip": "Die maximale Größe der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", - "single": "Single", - "multiple": "Mehrere", - "directory": "Verzeichnis", - "upload": "durchsuchen", - "fileType": "Dateitypen", - "reference": "Bitte beachten Sie", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Eindeutige Dateityp-Angaben", - "uploadType": "Upload Typ", - "showUploadList": "Upload-Liste anzeigen", - "maxFiles": "Max Dateien", - "filesValueDesc": "Der Inhalt der aktuell hochgeladenen Datei ist Base64-kodiert", - "filesDesc": "Liste der aktuell hochgeladenen Dateien. Für Details, siehe", - "clearValueDesc": "Alle Dateien löschen", - "parseFiles": "Dateien parsen", - "parsedValueTooltip1": "Wenn parseFiles True ist, werden die hochgeladenen Dateien als Objekt, Array oder String analysiert. Auf die geparsten Daten kann über das Array parsedValue zugegriffen werden.", - "parsedValueTooltip2": "Unterstützt Excel-, JSON-, CSV- und Textdateien. Andere Formate geben Null zurück." - }, - "date": { - ...en.date, - "format": "Format", - "formatTip": "Unterstützung: \\'JJJJ-MM-TT HH:mm:ss\\', \\'JJJJ-MM-TT\\', \\'Zeitstempel\\'", - "reference": "Bitte beachten Sie", - "showTime": "Zeit zeigen", - "start": "Startdatum", - "end": "Enddatum", - "year": "Jahr", - "quarter": "Quartal", - "month": "Monat", - "week": "Woche", - "date": "Datum", - "clearAllDesc": "Alle löschen", - "resetAllDesc": "Alle zurücksetzen", - "placeholder": "Datum auswählen", - "placeholderText": "Platzhalter", - "startDate": "Startdatum", - "endDate": "Enddatum" - }, - "time": { - ...en.time, - "start": "Startzeit", - "end": "Endzeit", - "formatTip": "Unterstützung: \\'HH:mm:ss\\', \\'Zeitstempel\\'", - "format": "Format", - "placeholder": "Zeit wählen", - "placeholderText": "Platzhalter", - "startTime": "Startzeit", - "endTime": "Endzeit" - }, - "button": { - ...en.button, - "prefixIcon": "Präfix-Symbol", - "suffixIcon": "Suffix-Symbol", - "icon": "Icon", - "iconSize": "Icon Größe", - "button": "Formular Schaltfläche", - "formToSubmit": "Formular zum Einreichen", - "default": "Standard", - "submit": "einreichen", - "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", - "loadingDesc": "Befindet sich der Button im Ladezustand? Wenn wahr, wird die aktuelle Schaltfläche geladen", - "formButtonEvent": "Veranstaltung" - }, - "link": { - ...en.link, - "link": "Link", - "textDesc": "Derzeit auf dem Link angezeigter Text", - "loadingDesc": "Befindet sich der Link im Ladezustand? Wenn wahr, wird der aktuelle Link geladen" - }, - "scanner": { - ...en.scanner, - "text": "Klicken Sie auf Scannen", - "camera": "Kamera {index}", - "changeCamera": "Kamera wechseln", - "continuous": "Kontinuierliches Scannen", - "uniqueData": "Doppelte Daten ignorieren", - "maskClosable": "Klicke auf die Maske zum Schließen", - "errTip": "Bitte verwende diese Komponente unter HTTPS oder Localhost" - }, - "dropdown": { - ...en.dropdown, - "onlyMenu": "Anzeige nur mit Etikett", - "textDesc": "Derzeit auf der Schaltfläche angezeigter Text" - }, - "textShow": { - ...en.textShow, - "text": "### 👋 Hallo, {name}", - "valueTooltip": "Markdown unterstützt die meisten HTML-Tags und -Attribute. iframe, Script und andere Tags sind aus Sicherheitsgründen deaktiviert.", - "verticalAlignment": "Vertikale Ausrichtung", - "horizontalAlignment": "Horizontale Ausrichtung", - "textDesc": "Im aktuellen Textfeld angezeigter Text" - }, - "table": { - ...en.table, - "editable": "Editierbar", - "columnNum": "Rubriken", - "viewModeResizable": "Spaltenbreite vom Benutzer angepasst", - "viewModeResizableTooltip": "Ob Nutzer die Spaltenbreite anpassen können.", - "showFilter": "Schaltfläche Filter anzeigen", - "showRefresh": "Schaltfläche \"Aktualisieren\" anzeigen", - "showDownload": "Download-Schaltfläche anzeigen", - "columnSeparator": "Spaltentrennzeichen", - "columnSeparatorTooltip": "Spaltentrennzeichen („Trennzeichen“) in der heruntergeladenen CSV-Datei. \n\nEmpfehlungen:\n- Komma (,)\n- Semikolon (;)\n- Pipe (|)\n- Tabulator (\\t)", - "columnSetting": "Schaltfläche Spalteneinstellung anzeigen", - "searchText": "Text suchen", - "searchTextTooltip": "Suche und Filterung der in der Tabelle dargestellten Daten", - "showQuickJumper": "Quick Jumper anzeigen", - "hideOnSinglePage": "Auf einzelner Seite ausblenden", - "showSizeChanger": "Schaltfläche Größenänderer anzeigen", - "pageSizeOptions": "Optionen für die Seitengröße", - "pageSize": "Seitengröße", - "total": "Gesamtzahl der Zeilen", - "totalTooltip": "Der Standardwert ist die Anzahl der aktuellen Datenelemente, die aus der Abfrage abgerufen werden können, z. B: \\'{{query1.data[0].count}}\\'", - "filter": "Filter", - "filterRule": "Filter-Regel", - "chooseColumnName": "Spalte wählen", - "chooseCondition": "Bedingung wählen", - "clear": "Klar", - "columnShows": "Säule zeigt", - "selectAll": "Alle auswählen", - "and": "Und", - "or": "Oder", - "contains": "Enthält", - "notContain": "Enthält nicht", - "equals": "Entspricht", - "isNotEqual": "Ist nicht gleich", - "isEmpty": "Ist leer", - "isNotEmpty": "Ist nicht leer", - "greater": "Größer als", - "greaterThanOrEquals": "Größer als oder gleich", - "lessThan": "Weniger als", - "lessThanOrEquals": "Kleiner als oder gleich", - "action": "Aktion", - "columnValue": "Spalte Wert", - "columnValueTooltip": "\\'{{currentCell}}\\': Aktuelle Zelldaten\n \\'{{currentRow}}\\': Aktuelle Zeilendaten\n \\'{{currentIndex}}\\': Aktueller Datenindex (beginnend bei 0)\n Beispiel: \\'{{currentCell * 5}}\\' Show 5 Times the Original Value Data.", - "columnTooltip": "Spalten-Tooltip", - "imageSrc": "Bildquelle", - "imageSize": "Bildgröße", - "columnTitle": "Titel anzeigen", - "columnTitleTooltip": "Titel-Tooltip", - "showTitle": "Titel anzeigen", - "showTitleTooltip": "Spaltentitel im Tabellenkopf ein-/ausblenden", - "sortable": "Sortierbar", - "align": "Ausrichtung", - "fixedColumn": "Feste Säule", - "autoWidth": "Auto Breite", - "customColumn": "Benutzerdefinierte Säule", - "auto": "Auto", - "fixed": "Festgelegt", - "columnType": "Säule Typ", - "dataMapping": "Datenzuordnung", - "numberStep": "Schritt", - "numberStepTooltip": "Die Zahl, auf die der aktuelle Wert erhöht oder verringert wird. Es kann eine ganze Zahl oder eine Dezimalzahl sein", - "precision": "Präzision", - "float": "Schwimmer", - "prefix": "Präfix", - "suffix": "Nachsilbe", - "text": "Text", - "number": "Nummer", - "link": "Link", - "links": "Links", - "tag": "Tag", - "date": "Datum", - "dateTime": "Datum Uhrzeit", - "badgeStatus": "Status", - "button": "Taste", - "image": "Bild", - "boolean": "Boolesche", - "rating": "Bewertung", - "progress": "Fortschritt", - "option": "Operation", - "optionList": "Betriebsliste", - "option1": "Betrieb 1", - "status": "Status", - "statusTooltip": "Optionale Werte: Erfolg, Fehler, Standard, Warnung, Verarbeitung", - "primaryButton": "Primäre", - "defaultButton": "Standard", - "type": "Typ", - "tableSize": "Tabelle Größe", - "hideHeader": "Tabellenüberschrift ausblenden", - "fixedHeader": "Feste Tabellenüberschrift", - "fixedHeaderTooltip": "Kopfzeile wird für vertikal scrollbare Tabelle fixiert", - "fixedToolbar": "Feste Symbolleiste", - "fixedToolbarTooltip": "Die Symbolleiste wird für vertikal scrollbare Tabellen je nach Position fixiert", - "hideBordered": "Spaltenumrandung ausblenden", - "deleteColumn": "Spalte löschen", - "confirmDeleteColumn": "Bestätige Spalte löschen: ", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "Die aktuellen Daten ändern sich. Klicke auf , um die Spalte neu zu generieren.", - "changeSetDesc": "Ein Objekt, das Änderungen an einer bearbeitbaren Tabelle darstellt, enthält nur die geänderte Zelle. Zeilen gehen zuerst und Spalten gehen als zweites.", - "selectedRowDesc": "Liefert Daten für die aktuell ausgewählte Zeile und zeigt die Zeile an, die ein Klick-Ereignis auslöst, wenn der Nutzer auf eine Schaltfläche/Link in der Zeile klickt", - "selectedRowsDesc": "Nützlich im Mehrfachauswahlmodus, gleich wie SelectedRow", - "pageNoDesc": "Aktuelle Anzeigeseite, beginnend mit 1", - "pageSizeDesc": "Wie viele Zeilen pro Seite", - "sortColumnDesc": "Der Name der aktuell ausgewählten sortierten Spalte", - "sortDesc": "Ob die aktuelle Zeile in absteigender Reihenfolge ist", - "pageOffsetDesc": "Der aktuelle Beginn des Blätterns, der für das Blättern zum Abrufen von Daten verwendet wird. Beispiel: Select * from Users Limit \\'{{table1.pageSize}}\\' Versatz \\'{{table1.pageOffset}}\\'", - "displayDataDesc": "In der aktuellen Tabelle angezeigte Daten", - "selectedIndexDesc": "Ausgewählter Index in der Datenanzeige", - "filterDesc": "Parameter für die Tabellenfilterung", - "dataDesc": "Die JSON-Daten für die Tabelle", - "saveChanges": "Änderungen speichern", - "cancelChanges": "Änderungen abbrechen", - "rowSelectChange": "Zeile auswählen Ändern", - "rowClick": "Reihe Klicken", - "rowExpand": "Reihe verkleinern", - "rowShrink": "Zeilenverkleinerung", - "search": "Suchen", - "download": "Herunterladen", - "columnEdited": "Spalte bearbeitet", - "filterChange": "Filterwechsel", - "sortChange": "Sortieren Ändern", - "pageChange": "Seitenwechsel", - "refresh": "Auffrischen", - "rowColor": "Bedingte Zeilenfarbe", - "rowColorDesc": "Legt die Zeilenfarbe basierend auf den optionalen Variablen bedingt fest: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: \\'{{ currentRow.id > 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", - "cellColor": "Bedingte Zellenfarbe", - "cellColorDesc": "Stelle die Zellenfarbe basierend auf dem Zellenwert mit CurrentCell bedingt ein. Beispiel: \\''{{ currentCell == 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", - "saveChangesNotBind": "Es wurde kein Event Handler für das Speichern von Änderungen konfiguriert. Bitte binde mindestens einen Ereignishandler vor dem Klick.", - "dynamicColumn": "Dynamische Spalteneinstellung verwenden", - "dynamicColumnConfig": "Säuleneinstellung", - "dynamicColumnConfigDesc": "Dynamische Spalteneinstellungen. Akzeptiert ein Array von Spaltennamen. In der Standardeinstellung sind alle Spalten sichtbar. Beispiel: [%r@\\\"id%r@\\\", %r@\\\"name%r@\\\"]", - "position": "Position", - "showDataLoadSpinner": "Ladeanzeige anzeigen", - "showValue": "Wert anzeigen", - "expandable": "Ausbaufähig", - "configExpandedView": "Expandierte Ansicht konfigurieren", - "toUpdateRowsDesc": "Ein Array von Objekten für zu aktualisierende Zeilen in bearbeitbaren Tabellen.", - "empty": "Leere", - "falseValues": "Text Wenn Falsch", - "allColumn": "Alle", - "visibleColumn": "Sichtbar", - "emptyColumns": "Derzeit sind keine Spalten sichtbar", - "showSummary": "Zusammenfassungszeile(n) anzeigen", - "totalSummaryRows": "Gesamtzahl der Zeilen", - "inlineAddNewRow": "Inline neue Zeile(n) hinzufügen", - "editMode": "Bearbeitungsmodus", - "singleClick": "Einzelklick", - "doubleClick": "Doppelklick", - "showUpdateButtons": "Schaltflächen zum Speichern/Abbrechen anzeigen" - }, - "image": { - ...en.image, - "src": "Bildquelle", - "srcDesc": "Die Bildquelle. Kann eine URL, ein Pfad oder ein Base64-String sein. z.B.: data:image/png;base64, AAA... CCC", - "supportPreview": "Unterstützung Klickvorschau (Zoom)", - "supportPreviewTip": "Wirksam, wenn die Bildquelle gültig ist" - }, - "progress": { - ...en.progress, - "value": "Wert", - "valueTooltip": "Der Prozentsatz der Fertigstellung als Wert zwischen 0 und 100", - "showInfo": "Wert anzeigen", - "valueDesc": "Aktueller Fortschrittswert, der von 0 bis 100 reicht", - "showInfoDesc": "Ob der aktuelle Fortschrittswert angezeigt werden soll" - }, - "fileViewer": { - ...en.fileViewer, - "invalidURL": "Bitte gib eine gültige URL oder einen Base64-String ein", - "src": "Datei URI", - "srcTooltip": "Vorschau des bereitgestellten Link-Inhalts durch Einbetten von HTML, Base64-kodierte Daten können ebenfalls unterstützt werden, z. B.: data:application/pdf; base64,AAA... CCC", - "srcDesc": "Der Datei-URI" - }, - "divider": { - ...en.divider, - "title": "Titel", - "align": "Ausrichtung", - "dashed": "Gestrichelt", - "dashedDesc": "Gestrichelte Linie verwenden", - "titleDesc": "Teiler Titel", - "alignDesc": "Teiler Titelausrichtung" - }, - "QRCode": { - ...en.QRCode, - "value": "QR Code Inhalt Wert", - "valueTooltip": "Der Wert enthält maximal 2953 Zeichen. Der QR-Code-Wert kann verschiedene Datentypen kodieren, z. B. Textnachrichten, URLs, Kontaktdaten (VCard/meCard), Wi-Fi-Anmeldedaten, E-Mail-Adressen, Telefonnummern, SMS-Nachrichten, Geolocation-Koordinaten, Kalenderereignisdetails, Zahlungsinformationen, Kryptowährungsadressen und App-Download-Links.", - "valueDesc": "Der QR-Code-Inhaltswert", - "level": "Fehlertoleranz Level", - "levelTooltip": "Bezieht sich auf die Fähigkeit des QR-Codes, gescannt zu werden, auch wenn ein Teil des Codes blockiert ist. Je höher die Stufe, desto komplexer ist der Code.", - "includeMargin": "Rand anzeigen", - "image": "Bild in der Mitte anzeigen", - "L": "L (Niedrig)", - "M": "M (Mittel)", - "Q": "Q (Quartil)", - "H": "H (Hoch)", - "maxLength": "Der Inhalt ist zu lang. Setze die Länge auf weniger als 2953 Zeichen" - }, - "jsonExplorer": { - ...en.jsonExplorer, - "indent": "Einrückung der einzelnen Ebenen", - "expandToggle": "JSON-Baum erweitern", - "theme": "Farbe Thema", - "valueDesc": "Aktuelle JSON-Daten", - "default": "Standard", - "defaultDark": "Standard Dunkel", - "neutralLight": "Neutrales Licht", - "neutralDark": "Neutral Dunkel", - "azure": "Azurblau", - "darkBlue": "Dunkelblau" - }, - "audio": { - ...en.audio, - "src": "Audio Source URI oder Base64 String", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Autoplay", - "loop": "Schleife", - "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:audio/mpeg;base64,AAA... CCC", - "play": "Spielen", - "playDesc": "Ausgelöst, wenn Audio abgespielt wird", - "pause": "Pause", - "pauseDesc": "Ausgelöst, wenn der Ton pausiert wird", - "ended": "Beendet", - "endedDesc": "Ausgelöst, wenn die Audiowiedergabe endet" - }, - "video": { - ...en.video, - "src": "Video Source URI oder Base64 String", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "Poster URL", - "defaultPosterUrl": "", - "autoPlay": "Autoplay", - "loop": "Schleife", - "controls": "Steuerelemente ausblenden", - "volume": "Band", - "playbackRate": "Wiedergaberate", - "posterTooltip": "Der Standardwert ist das erste Bild des Videos", - "autoPlayTooltip": "Nachdem das Video geladen wurde, wird es automatisch abgespielt. Wenn du diesen Wert von True auf False änderst, wird das Video angehalten. (Wenn ein Poster eingestellt ist, wird es über die Schaltfläche Poster abgespielt)", - "controlsTooltip": "Steuerelemente für die Videowiedergabe ausblenden. Wird möglicherweise nicht von jeder Videoquelle vollständig unterstützt.", - "volumeTooltip": "Lege die Lautstärke des Players fest, zwischen 0 und 1", - "playbackRateTooltip": "Lege die Rate des Spielers fest, zwischen 1 und 2", - "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:video/mp4;base64, AAA... CCC", - "play": "Spielen", - "playDesc": "Ausgelöst, wenn das Video abgespielt wird", - "pause": "Pause", - "pauseDesc": "Ausgelöst, wenn das Video pausiert wird", - "load": "Laden", - "loadDesc": "Ausgelöst, wenn das Laden der Videoressource abgeschlossen ist", - "ended": "Beendet", - "endedDesc": "Ausgelöst, wenn das Video zu Ende gespielt wird", - "currentTimeStamp": "Die aktuelle Abspielposition des Videos in Sekunden", - "duration": "Die Gesamtdauer des Videos in Sekunden" - }, - "media": { - ...en.media, - "playDesc": "Beginnt die Wiedergabe der Medien.", - "pauseDesc": "Pausiert die Medienwiedergabe.", - "loadDesc": "Setzt die Medien auf den Anfang zurück und startet die Auswahl der Medienressource neu.", - "seekTo": "Suche nach der angegebenen Anzahl von Sekunden oder einem Bruchteil, wenn der Betrag zwischen 0 und 1 liegt", - "seekToAmount": "Anzahl der Sekunden, oder Bruchteil, wenn sie zwischen 0 und 1 liegt", - "showPreview": "Vorschau anzeigen" - }, - "rangeSlider": { - ...en.rangeSlider, - "start": "Startwert", - "end": "Endwert", - "step": "Schrittweite", - "stepTooltip": "Die Granularität des Schiebereglers, der Wert muss größer als 0 und teilbar durch (Max-Min) sein" - }, - "iconControl": { - ...en.iconControl, - "selectIcon": "Wähle ein Symbol", - "insertIcon": "Ein Icon einfügen", - "insertImage": "Ein Bild einfügen oder " - }, - "millisecondsControl": { - ...en.millisecondsControl, - "timeoutTypeError": "Bitte gib die korrekte Timeout-Zeit in ms ein, die aktuelle Eingabe ist: {value}", - "timeoutLessThanMinError": "Die Eingabe muss größer sein als {left}, die aktuelle Eingabe ist: {value}" - }, - "selectionControl": { - ...en.selectionControl, - "single": "Single", - "multiple": "Mehrere", - "close": "Schließen", - "mode": "Modus wählen" - }, - "container": { - ...en.container, - "title": "Angezeigter Container-Titel" - }, - "drawer": { - ...en.drawer, - "closePosition": "Platzierung der Verschlusses", - "placement": "Platzierung der Schubladen", - "size": "Größe", - "top": "Top", - "right": "Rechts", - "bottom": "Unten", - "left": "Links", - "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", - "heightTooltip": "Pixel, z.B. 378", - "openDrawerDesc": "Offene Schublade", - "closeDrawerDesc": "Schublade schließen", - "width": "Breite der Schublade", - "height": "Höhe der Schublade" - }, - "meeting": { - ...en.meeting, - "logLevel": "Agora SDK Log Level", - "placement": "Platzierung der Meeting-Schubladen", - "meeting": "Meeting-Einstellungen", - "cameraView": "Kameraansicht", - "cameraViewDesc": "Kameraansicht des lokalen Benutzers (Host)", - "screenShared": "Bildschirm geteilt", - "screenSharedDesc": "Vom lokalen Benutzer (Host) geteilter Bildschirm", - "audioUnmuted": "Audio entstummt", - "audioMuted": "Audio stummgeschaltet", - "videoClicked": "Video Geklickt", - "videoOff": "Video aus", - "videoOn": "Video auf", - "size": "Größe", - "top": "Top", - "host": "Gastgeber des Besprechungsraums. Du müsstest den Gastgeber als eigene Anwendungslogik verwalten", - "participants": "Teilnehmer des Besprechungsraums", - "shareScreen": "Vom lokalen Benutzer geteilter Bildschirm", - "appid": "Agora Anwendungs-ID", - "meetingName": "Treffen Name", - "localUserID": "Host-Benutzer-ID", - "userName": "Host-Benutzername", - "rtmToken": "Agora RTM Token", - "rtcToken": "Agora RTC Token", - "noVideo": "Kein Video", - "profileImageUrl": "Profilbild-URL", - "right": "Rechts", - "bottom": "Unten", - "videoId": "Video Stream ID", - "audioStatus": "Audio Status", - "left": "Links", - "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", - "heightTooltip": "Pixel, z.B. 378", - "openDrawerDesc": "Offene Schublade", - "closeDrawerDesc": "Schublade schließen", - "width": "Breite der Schublade", - "height": "Höhe der Schublade", - "actionBtnDesc": "Aktionstaste", - "broadCast": "Broadcast-Nachrichten", - "title": "Meeting Titel", - "meetingCompName": "Agora Meeting Controller", - "sharingCompName": "Bildschirm teilen Stream", - "videoCompName": "Kamera-Stream", - "videoSharingCompName": "Bildschirm teilen Stream", - "meetingControlCompName": "Icon Taste", - "meetingCompDesc": "Meeting-Komponente", - "meetingCompControls": "Meeting-Kontrolle", - "meetingCompKeywords": "Agora Meeting, Web-Meeting, Kollaboration", - "iconSize": "Icon Größe", - "userId": "Host-Benutzer-ID", - "roomId": "Zimmer-ID", - "meetingActive": "Laufendes Treffen", - "messages": "Gesendete Nachrichten" - }, - "settings": { - ...en.settings, - "title": "Einstellungen", - "userGroups": "Benutzergruppen", - "organization": "Arbeitsräume", - "audit": "Audit-Logs", - "theme": "Themen", - "plugin": "Plugins", - "advanced": "Fortgeschrittene", - "lab": "Labor", - "branding": "Branding", - "oauthProviders": "OAuth-Anbieter", - "appUsage": "App-Nutzungsprotokolle", - "environments": "Umgebungen", - "premium": "Premium" - }, - "memberSettings": { - ...en.memberSettings, - "admin": "Admin", - "adminGroupRoleInfo": "Admin kann Gruppenmitglieder und Ressourcen verwalten", - "adminOrgRoleInfo": "Admins besitzen alle Ressourcen und können Gruppen verwalten.", - "member": "Mitglied", - "memberGroupRoleInfo": "Mitglied kann Gruppenmitglieder sehen", - "memberOrgRoleInfo": "Mitglieder können nur Ressourcen nutzen oder besuchen, zu denen sie Zugang haben.", - "title": "Mitglieder", - "createGroup": "Gruppe erstellen", - "newGroupPrefix": "Neue Gruppe ", - "allMembers": "Alle Mitglieder", - "deleteModalTitle": "Diese Gruppe löschen", - "deleteModalContent": "Die gelöschte Gruppe kann nicht wiederhergestellt werden. Bist du sicher, dass du die Gruppe löschen willst?", - "addMember": "Mitglieder hinzufügen", - "nameColumn": "Benutzer Name", - "joinTimeColumn": "Beitrittszeit", - "actionColumn": "Operation", - "roleColumn": "Rolle", - "exitGroup": "Ausstiegsgruppe", - "moveOutGroup": "Aus Gruppe entfernen", - "inviteUser": "Mitglieder einladen", - "exitOrg": "Lass", - "exitOrgDesc": "Bist du sicher, dass du diesen Arbeitsplatz verlassen willst?", - "moveOutOrg": "entfernen", - "moveOutOrgDescSaasMode": "Bist du sicher, dass du den Benutzer {name} aus diesem Arbeitsbereich entfernen möchtest?", - "moveOutOrgDesc": "Bist du sicher, dass du Benutzer {name} entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", - "devGroupTip": "Mitglieder der Entwicklergruppe haben die Berechtigung, Apps und Datenquellen zu erstellen.", - "lastAdminQuit": "Der letzte Administrator kann nicht aussteigen.", - "organizationNotExist": "Der aktuelle Arbeitsbereich ist nicht vorhanden", - "inviteUserHelp": "Du kannst den Einladungslink zum Versenden an den Nutzer kopieren", - "inviteUserLabel": "Einladungslink:", - "inviteCopyLink": "Link kopieren", - "inviteText": "{userName} lädt dich ein, dem Arbeitsbereich %r@\\\"{organization}%r@\\\" beizutreten, Klicke auf den Link, um beizutreten: {inviteLink}", - "groupName": "Gruppe Name", - "createTime": "Erstellt", - "manageBtn": "Verwalte", - "userDetail": "Detail", - "syncDeleteTip": "Diese Gruppe wurde aus der Adressbuchquelle gelöscht", - "syncGroupTip": "Diese Gruppe ist eine Adressbuch-Synchronisationsgruppe und kann nicht bearbeitet werden" - }, - "orgSettings": { - ...en.orgSettings, - "newOrg": "Neuer Arbeitsbereich (Organisation)", - "title": "Arbeitsbereich", - "createOrg": "Arbeitsbereich erstellen (Organisation)", - "deleteModalTitle": "Bist du sicher, dass du diesen Arbeitsbereich löschen willst?", - "deleteModalContent": "Du bist dabei, diesen Arbeitsbereich {permanentlyDelete} zu löschen. Sobald er gelöscht ist, wird der Arbeitsbereich {notRestored}.", - "permanentlyDelete": "Dauerhaft", - "notRestored": "Kann nicht wiederhergestellt werden", - "deleteModalLabel": "Bitte gib den Arbeitsbereichsnamen {name} ein, um den Vorgang zu bestätigen:", - "deleteModalTip": "Bitte Arbeitsbereichsname eingeben", - "deleteModalErr": "Der Name des Arbeitsbereichs ist inkorrekt", - "deleteModalBtn": "löschen", - "editOrgTitle": "Arbeitsbereich-Informationen bearbeiten", - "orgNameLabel": "Arbeitsbereich Name:", - "orgNameCheckMsg": "Der Name des Arbeitsbereichs darf nicht leer sein", - "orgLogo": "Workspace Logo:", - "logoModify": "Bild ändern", - "inviteSuccessMessage": "Erfolgreich dem Arbeitsbereich beitreten", - "inviteFailMessage": "Beitritt zum Arbeitsbereich fehlgeschlagen", - "uploadErrorMessage": "Upload-Fehler", - "orgName": "Arbeitsbereich Name" - }, - "freeLimit": "Kostenlose Probefahrt", - "tabbedContainer": { - ...en.tabbedContainer, - "switchTab": "Registerkarte wechseln", - "switchTabDesc": "Ausgelöst beim Wechsel der Registerkarten", - "tab": "Tabs", - "atLeastOneTabError": "Der Tab-Container hält mindestens einen Tab fest", - "selectedTabKeyDesc": "Aktuell ausgewählte Registerkarte", - "iconPosition": "Icon Position" - }, - "formComp": { - ...en.formComp, - "containerPlaceholder": "Ziehen Sie Komponenten aus dem rechten Fenster oder", - "openDialogButton": "Erstelle ein Formular aus einer deiner Datenquellen", - "resetAfterSubmit": "Zurücksetzen nach erfolgreicher Übermittlung", - "initialData": "Erste Daten", - "disableSubmit": "Abschicken deaktivieren", - "success": "Erfolgreich generiertes Formular", - "selectCompType": "Komponententyp auswählen", - "dataSource": "Datenquelle: ", - "selectSource": "Quelle wählen", - "table": "Tabelle: ", - "selectTable": "Tabelle auswählen", - "columnName": "Spalte Name", - "dataType": "Datentyp", - "compType": "Komponente Typ", - "required": "Erforderlich", - "generateForm": "Formular generieren", - "compSelectionError": "Unkonfigurierter Spaltentyp", - "compTypeNameError": "Der Name des Komponententyps konnte nicht ermittelt werden", - "noDataSourceSelected": "Keine Datenquelle ausgewählt", - "noTableSelected": "Kein Tisch ausgewählt", - "noColumn": "Keine Säule", - "noColumnSelected": "Keine Spalte ausgewählt", - "noDataSourceFound": "Keine unterstützte Datenquelle gefunden. Eine neue Datenquelle erstellen", - "noTableFound": "Es wurden keine Tabellen in dieser Datenquelle gefunden, bitte wähle eine andere Datenquelle", - "noColumnFound": "In dieser Tabelle wurde keine unterstützte Spalte gefunden. Bitte wähle eine andere Tabelle", - "formTitle": "Formular Titel", - "name": "Name", - "nameTooltip": "Der Name des Attributs in den Daten des Formulars ist standardmäßig der Komponentenname, wenn er leer gelassen wird.", - "notSupportMethod": "Nicht unterstützte Methoden: ", - "notValidForm": "Das Formular ist nicht gültig", - "resetDesc": "Formulardaten auf Standardwert zurücksetzen", - "clearDesc": "Formulardaten löschen", - "setDataDesc": "Formulardaten einstellen", - "valuesLengthError": "Parameter Nummer Fehler", - "valueTypeError": "Parameter Typ Fehler", - "dataDesc": "Aktuelle Formulardaten", - "loadingDesc": "Ob das Formular geladen ist?" - }, - "modalComp": { - ...en.modalComp, - "close": "Schließen", - "closeDesc": "Ausgelöst, wenn das modale Dialogfeld geschlossen wird", - "openModalDesc": "Öffnen Sie das Dialogfeld", - "closeModalDesc": "Das Dialogfeld schließen", - "visibleDesc": "Ist es sichtbar? Wenn ja, wird das aktuelle Dialogfeld eingeblendet", - "modalHeight": "Modale Höhe", - "modalHeightTooltip": "Pixel, Beispiel: 222", - "modalWidth": "Modale Breite", - "modalWidthTooltip": "Zahl oder Prozentsatz, Beispiel: 520, 60%" - }, - "listView": { - ...en.listView, - "noOfRows": "Zeilenanzahl", - "noOfRowsTooltip": "Anzahl der Zeilen in der Liste - wird normalerweise auf eine Variable gesetzt (z. B. \\'{{query1.data.length}}\\'), um Abfrageergebnisse zu präsentieren", - "noOfColumns": "Anzahl der Kolonnen", - "itemIndexName": "Datenelement Index Name", - "itemIndexNameDesc": "Der Variablenname, der sich auf den Index des Elements bezieht, Standard: {default}", - "itemDataName": "Datenelement Objektname", - "itemDataNameDesc": "Der Variablenname, der sich auf das Datenobjekt des Items bezieht, Standard als {default}", - "itemsDesc": "Daten der Komponenten in der Liste offenlegen", - "dataDesc": "Die in der aktuellen Liste verwendeten JSON-Daten", - "dataTooltip": "Wenn du nur eine Zahl einträgst, wird dieses Feld als Zeilenzahl betrachtet und die Daten werden als leer angesehen." - }, - "navigation": { - ...en.navigation, - "addText": "Untermenüpunkt hinzufügen", - "logoURL": "Navigation Logo URL", - "horizontalAlignment": "Horizontale Ausrichtung", - "logoURLDesc": "Du kannst ein Logo auf der linken Seite anzeigen, indem du einen URI-Wert oder einen Base64-String eingibst, z.B. data:image/png;base64,AAA... CCC", - "itemsDesc": "Hierarchische Navigationsmenüpunkte" - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - "subMenu": "Untermenü {number}" - }, - "navItemComp": { - ...en.navItemComp, - "active": "Aktiv" - }, - "iframe": { - ...en.iframe, - "URLDesc": "Die Quell-URL für den IFrame-Inhalt. Achte darauf, dass die URL HTTPS oder localhost ist. Vergewissere dich auch, dass die URL nicht durch die Content Security Policy (CSP) des Browsers blockiert wird. Der Header \\'X-Frame-Options\\' sollte nicht auf \\'DENY\\' oder \\'SAMEORIGIN\\' gesetzt sein.", - "allowDownload": "Downloads zulassen", - "allowSubmitForm": "Formular einreichen zulassen", - "allowMicrophone": "Mikrofon zulassen", - "allowCamera": "Kamera zulassen", - "allowPopup": "Popups zulassen" - }, - "switchComp": { - ...en.switchComp, - "defaultValue": "Standard Boolescher Wert", - "open": "Auf", - "close": "Aus", - "openDesc": "Ausgelöst, wenn der Schalter eingeschaltet wird", - "closeDesc": "Ausgelöst, wenn der Schalter ausgeschaltet ist", - "valueDesc": "Aktueller Status des Schalters" - }, - "signature": { - ...en.signature, - "tips": "Hinweistext", - "signHere": "Hier unterschreiben", - "showUndo": "Rückgängig machen anzeigen", - "showClear": "Löschen anzeigen" - }, - "localStorageComp": { - ...en.localStorageComp, - "valueDesc": "Alle derzeit gespeicherten Datenelemente", - "setItemDesc": "Einen Artikel hinzufügen", - "removeItemDesc": "Einen Artikel entfernen", - "clearItemDesc": "Alle Artikel löschen" - }, - "utilsComp": { - ...en.utilsComp, - "openUrl": "URL öffnen", - "openApp": "App öffnen", - "copyToClipboard": "In die Zwischenablage kopieren", - "downloadFile": "Datei herunterladen" - }, - "messageComp": { - ...en.messageComp, - "info": "Eine Benachrichtigung senden", - "loading": "Ladebestätigung senden", - "success": "Erfolgsbenachrichtigung senden", - "warn": "Eine Warnmeldung senden", - "error": "Eine Fehlerbenachrichtigung senden" - }, - "toastComp": { - ...en.toastComp, - "info": "Eine Benachrichtigung senden", - "loading": "Ladebestätigung senden", - "success": "Erfolgsbenachrichtigung senden", - "warn": "Eine Warnmeldung senden", - "error": "Eine Fehlerbenachrichtigung senden" - }, - "themeComp": { - ...en.themeComp, - "switchTo": "Thema wechseln" - }, - "transformer": { - ...en.transformer, - "preview": "Vorschau", - "docLink": "Lies mehr über Transformers...", - "previewSuccess": "Vorschau Erfolg", - "previewFail": "Vorschau Fail", - "deleteMessage": "Transformator löschen Erfolg. Du kannst {undoKey} zum Rückgängigmachen verwenden.", - "documentationText": "Transformers sind für die Datenumwandlung und Wiederverwendung deines mehrzeiligen JavaScript-Codes gedacht. Verwende Transformers, um Daten aus Abfragen oder Komponenten an deine lokalen App-Anforderungen anzupassen. Im Gegensatz zu JavaScript-Abfragen sind Transformer nur für Leseoperationen ausgelegt. Das bedeutet, dass du innerhalb eines Transformers keine Abfrage auslösen oder einen temporären Zustand aktualisieren kannst." - }, - "temporaryState": { - ...en.temporaryState, - "value": "Anfangswert", - "valueTooltip": "Der Anfangswert, der im temporären Zustand gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.", - "docLink": "Lies mehr über temporäre Zustände...", - "pathTypeError": "Pfad muss entweder ein String oder ein Array von Werten sein", - "unStructuredError": "Unstrukturierte Daten {prev} können nicht von {path} aktualisiert werden", - "valueDesc": "Vorläufiger Zustandswert", - "deleteMessage": "Der temporäre Zustand wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", - "documentationText": "Temporäre Zustände sind eine leistungsstarke Funktion zur Verwaltung komplexer Variablen, die den Zustand von Komponenten in deiner Anwendung dynamisch aktualisieren. Diese Zustände dienen als Zwischenspeicher für Daten, die sich im Laufe der Zeit aufgrund von Benutzerinteraktionen oder anderen Prozessen ändern können." - }, - "dataResponder": { - ...en.dataResponder, - "data": "Daten", - "dataDesc": "Daten des aktuellen Data Responders", - "dataTooltip": "Wenn diese Daten geändert werden, lösen sie nachfolgende Aktionen aus.", - "docLink": "Lies mehr über die Data Responders...", - "deleteMessage": "Der Data Responder wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", - "documentationText": "Wenn du eine App entwickelst, kannst du den Komponenten Ereignisse zuweisen, um Änderungen an bestimmten Daten zu überwachen. Eine Tabellenkomponente kann zum Beispiel Ereignisse wie %r@\\\"Row select change%r@\\\", %r@\\\"Filter change%r@\\\", %r@\\\"Sort change%r@\\\" und %r@\\\"Page change%r@\\\" haben, um Änderungen in der selectedRow-Eigenschaft zu verfolgen. Für Änderungen in temporären Zuständen, Transformatoren oder Abfrageergebnissen, für die keine Standardereignisse zur Verfügung stehen, werden jedoch Data Responder verwendet. Mit ihnen kannst du alle Datenänderungen erkennen und darauf reagieren." - }, - "theme": { - ...en.theme, - "title": "Themen", - "createTheme": "Thema erstellen", - "themeName": "Themenname:", - "themeNamePlaceholder": "Bitte gib einen Themennamen ein", - "defaultThemeTip": "Standard-Theme:", - "createdThemeTip": "Das Thema, das du erstellt hast:", - "option": "Option{index}", - "input": "Eingabe", - "confirm": "Ok", - "emptyTheme": "Keine Themen verfügbar", - "click": "", - "toCreate": "", - "nameColumn": "Name", - "defaultTip": "Standard", - "updateTimeColumn": "Update Zeit", - "edit": "bearbeiten", - "cancelDefaultTheme": "Standardthema aufheben", - "setDefaultTheme": "Als Standardthema festlegen", - "copyTheme": "Thema duplizieren", - "setSuccessMsg": "Einstellung Erfolglos", - "cancelSuccessMsg": "Unsetting Erfolglos", - "deleteSuccessMsg": "Löschung Erfolglos", - "checkDuplicateNames": "Der Themenname existiert bereits, bitte gib ihn erneut ein", - "copySuffix": " Kopiere", - "saveSuccessMsg": "Erfolgreich gerettet", - "leaveTipTitle": "Tipps", - "leaveTipContent": "Du bist noch nicht gerettet, bestätigst du den Austritt?", - "leaveTipOkText": "Lass", - "goList": "Zurück zur Liste", - "saveBtn": "Speichern", - "mainColor": "Hauptfarben", - "text": "Textfarben", - "defaultTheme": "Standard", - "yellow": "Gelb", - "green": "Grün", - "previewTitle": "Themenvorschau\nBeispielkomponenten, die deine Themenfarben verwenden", - "dateColumn": "Datum", - "emailColumn": "E-Mail", - "phoneColumn": "Telefon", - "subTitle": "Titel", - "linkLabel": "Link", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Fortschritt", - "sliderLabel": "Schieber", - "radioLabel": "Radio", - "checkboxLabel": "Kontrollkästchen", - "buttonLabel": "Formular Schaltfläche", - "switch": "Schalter", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.de", - "previewEmail3": "imgur.com", - "previewEmail4": "globo.de", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Diagrammstil-Vorschau", - "chartSpending": "Ausgaben", - "chartBudget": "Budget", - "chartAdmin": "Verwaltung", - "chartFinance": "Finanzen", - "chartSales": "Verkäufe", - "chartFunnel": "Trichterdiagramm", - "chartShow": "anzeigen", - "chartClick": "Klick", - "chartVisit": "Besuche", - "chartQuery": "Abfrage", - "chartBuy": "Kaufen" - }, - "pluginSetting": { - ...en.pluginSetting, - "title": "Plugins", - "npmPluginTitle": "npm-Plugins", - "npmPluginDesc": "Richte npm-Plugins für alle Anwendungen im aktuellen Arbeitsbereich ein.", - "npmPluginEmpty": "Es wurden keine npm-Plugins hinzugefügt.", - "npmPluginAddButton": "Ein npm-Plugin hinzufügen", - "saveSuccess": "Erfolgreich gerettet" - }, - "advanced": { - ...en.advanced, - "title": "Fortgeschrittene", - "defaultHomeTitle": "Standard-Homepage", - "defaultHomeHelp": "Die Homepage ist die App, die alle Nicht-Entwickler standardmäßig sehen, wenn sie sich anmelden. Hinweis: Stelle sicher, dass die ausgewählte App auch für Nicht-Entwickler zugänglich ist.", - "defaultHomePlaceholder": "Wähle die Standard-Homepage", - "saveBtn": "Speichern", - "preloadJSTitle": "JavaScript vorladen", - "preloadJSHelp": "Richte vorgeladenen JavaScript-Code für alle Apps im aktuellen Arbeitsbereich ein.", - "preloadCSSTitle": "CSS vorladen", - "preloadCSSHelp": "Richte vorgeladenen CSS-Code für alle Apps im aktuellen Arbeitsbereich ein.", - "preloadCSSApply": "Auf die Startseite des Arbeitsbereichs anwenden", - "preloadLibsTitle": "JavaScript-Bibliothek", - "preloadLibsHelp": "Richte vorgeladene JavaScript-Bibliotheken für alle Anwendungen im aktuellen Arbeitsbereich ein, und das System hat lodash, day.js, uuid, numbro zur direkten Verwendung eingebaut. Die JavaScript-Bibliotheken werden vor der Initialisierung der App geladen, was einen gewissen Einfluss auf die Leistung der App hat.", - "preloadLibsEmpty": "Es wurden keine JavaScript-Bibliotheken hinzugefügt", - "preloadLibsAddBtn": "Eine Bibliothek hinzufügen", - "saveSuccess": "Erfolgreich gerettet", - "AuthOrgTitle": "Willkommensbildschirm des Arbeitsbereichs", - "AuthOrgDescrition": "Die URL, unter der sich deine Nutzer beim aktuellen Arbeitsbereich anmelden können.", - "showHeaderInPublicApps": "Kopfzeile öffentlich anzeigen", - "showHeaderInPublicAppsHelp": "Legen Sie die Sichtbarkeit des Headers in der öffentlichen Ansicht für alle Apps fest", - }, - "branding": { - ...en.branding, - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": "Nur .JPG, .SVG oder .PNG", - "faviconTitle": "Favicon", - "faviconHelp": "Nur .JPG, .SVG oder .PNG", - "brandNameTitle": "Markenname", - "headColorTitle": "Kopffarbe", - "save": "Speichern", - "saveSuccessMsg": "Erfolgreich gerettet", - "upload": "Zum Hochladen klicken" - }, - "networkMessage": { - ...en.networkMessage, - "0": "Verbindung zum Server fehlgeschlagen, bitte überprüfe dein Netzwerk", - "401": "Authentifizierung fehlgeschlagen, bitte melde dich erneut an", - "403": "Keine Erlaubnis, bitte kontaktiere den Administrator für eine Genehmigung", - "500": "Besetzter Dienst, bitte versuche es später noch einmal", - "timeout": "Zeitüberschreitung anfordern" - }, - "share": { - ...en.share, - "title": "Teilen", - "viewer": "Betrachter", - "editor": "Herausgeber", - "owner": "Besitzer", - "datasourceViewer": "Kann verwenden", - "datasourceOwner": "Kann Managen" - }, - "debug": { - ...en.debug, - "title": "Titel", - "switch": "Schalterkomponente: " - }, - "module": { - ...en.module, - "emptyText": "Keine Daten", - "circularReference": "Zirkuläre Referenz, aktuelles Modul/Anwendung kann nicht verwendet werden!", - "emptyTestInput": "Das aktuelle Modul hat keinen Eingang zum Testen", - "emptyTestMethod": "Das aktuelle Modul hat keine Methode zum Testen", - "name": "Name", - "input": "Eingabe", - "params": "Params", - "emptyParams": "Es wurden keine Params hinzugefügt", - "emptyInput": "Es wurde keine Eingabe hinzugefügt", - "emptyMethod": "Es wurde keine Methode hinzugefügt", - "emptyOutput": "Es wurde keine Ausgabe hinzugefügt", - "data": "Daten", - "string": "String", - "number": "Nummer", - "array": "Array", - "boolean": "Boolesche", - "query": "Abfrage", - "autoScaleCompHeight": "Bauteilhöhenwaage mit Container", - "excuteMethod": "Methode {name} ausführen", - "method": "Methode", - "action": "Aktion", - "output": "Ausgabe", - "nameExists": "Name {name} bereits vorhanden", - "eventTriggered": "Ereignis {name} wird ausgelöst", - "globalPromptWhenEventTriggered": "Zeigt eine globale Aufforderung an, wenn ein Ereignis ausgelöst wird", - "emptyEventTest": "Das aktuelle Modul hat keine zu prüfenden Ereignisse", - "emptyEvent": "Es wurde kein Ereignis hinzugefügt", - "event": "Veranstaltung" - }, - "resultPanel": { - ...en.resultPanel, - "returnFunction": "Der Rückgabewert ist eine Funktion.", - "consume": "{time}", - "JSON": "JSON anzeigen" - }, - "createAppButton": { - ...en.createAppButton, - "creating": "Erstellen...", - "created": "Erstelle {name}" - }, - "apiMessage": { - ...en.apiMessage, - "authenticationFail": "Benutzerauthentifizierung fehlgeschlagen, bitte melde dich erneut an", - "verifyAccount": "Konto muss verifiziert werden", - "functionNotSupported": "Die aktuelle Version unterstützt diese Funktion nicht. Bitte kontaktiere das Lowcoder Business Team, um dein Konto zu aktualisieren." - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - "createCompFail": "Komponente erstellen {comp} Fehlgeschlagen", - "notHandledError": "{method} Nicht ausgeführte Methode" - }, - "aggregation": { - ...en.aggregation, - "navLayout": "Navigationsleiste", - "chooseApp": "App wählen", - "iconTooltip": "Unterstützt Image src Link oder Base64 String wie data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Versteckt für nicht autorisierte Benutzer", - "queryParam": "URL-Abfrage-Parameter", - "hashParam": "URL-Hash-Parameter", - "tabBar": "Registerkarte Bar", - "emptyTabTooltip": "Konfiguriere diese Seite im rechten Fensterbereich" - }, - "appSetting": { - ...en.appSetting, - "450": "450px (Mobile)", - "800": "800px (Tablet)", - "1440": "1440px (Laptop)", - "1920": "1920px (Breitbild)", - "3200": "3200px (Super Large Screen)", - "title": "Allgemeine App-Einstellungen", - "autofill": "Autofill", - "userDefined": "Benutzerdefiniert", - "default": "Standard", - "tooltip": "Das Popover nach der Einstellung schließen", - "canvasMaxWidth": "Maximale Bildschirmbreite für diese App", - "userDefinedMaxWidth": "Benutzerdefinierte maximale Breite", - "inputUserDefinedPxValue": "Bitte gib einen benutzerdefinierten Pixelwert ein", - "maxWidthTip": "Die maximale Breite sollte größer als oder gleich 350 sein", - "themeSetting": "Angewandter Stil Thema", - "themeSettingDefault": "Standard", - "themeCreate": "Thema erstellen", - "appTitle": "Titel", - "appDescription": "Beschreibung", - "appCategory": "Kategorie", - }, - "customShortcut": { - ...en.customShortcut, - "title": "Benutzerdefinierte Abkürzungen", - "shortcut": "Shortcut", - "action": "Aktion", - "empty": "Keine Abkürzungen", - "placeholder": "Shortcut drücken", - "otherPlatform": "Andere", - "space": "Raum" - }, - "profile": { - ...en.profile, - "orgSettings": "Arbeitsbereich-Einstellungen", - "switchOrg": "Bereich wechseln", - "joinedOrg": "Meine Arbeitsbereiche", - "createOrg": "Arbeitsbereich erstellen", - "logout": "Abmelden", - "personalInfo": "Mein Profil", - "bindingSuccess": "Bindung {sourceName} Erfolg", - "uploadError": "Upload-Fehler", - "editProfilePicture": "Ändern Sie", - "nameCheck": "Der Name darf nicht leer sein", - "name": "Name: ", - "namePlaceholder": "Bitte gib deinen Namen ein", - "toBind": "Zum Binden", - "binding": "Ist Verbindlich", - "bindError": "Parameter Error, Currently Not Supported Binding.", - "bindName": "Binden {name}", - "loginAfterBind": "Nach der Bindung kannst du dich mit {name} anmelden", - "bindEmail": "E-Mail binden:", - "email": "E-Mail", - "emailCheck": "Bitte gib eine gültige E-Mail ein", - "emailPlaceholder": "Bitte gib deine E-Mail ein", - "submit": "einreichen", - "bindEmailSuccess": "Erfolgreiche E-Mail-Bindung", - "passwordModifiedSuccess": "Passwort erfolgreich geändert", - "passwordSetSuccess": "Passwort erfolgreich gesetzt", - "oldPassword": "Altes Passwort:", - "inputCurrentPassword": "Bitte gib dein aktuelles Passwort ein", - "newPassword": "Neues Passwort:", - "inputNewPassword": "Bitte gib dein neues Passwort ein", - "confirmNewPassword": "Bestätige das neue Passwort:", - "inputNewPasswordAgain": "Bitte gib dein neues Passwort erneut ein", - "password": "Passwort:", - "modifyPassword": "Passwort ändern", - "setPassword": "Passwort setzen", - "alreadySetPassword": "Passwort setzen", - "setPassPlaceholder": "Du kannst dich mit Passwort anmelden", - "setPassAfterBind": "Du kannst das Passwort nach der Kontobindung festlegen", - "socialConnections": "Soziale Bindungen", - "changeAvatar": "Avatar ändern", - "about": "Dein Account", - "userId": "Benutzer-ID", - "createdAt": "Erstellt am", - "currentOrg": "aktuelle Organisation", - "settings": "Einstellungen", - "uiLanguage": "UI-Sprache", - "info": "Info", - "createdApps": "Erstellte Apps", - "createdModules": "Erstellte Module", - "onMarketplace": "Auf dem Marktplatz", - "howToPublish": "So veröffentlichen Sie auf dem Marktplatz", - "apiKeys": "API-Schlüssel", - "createApiKey": "API-Schlüssel erstellen", - "apiKeyName": "Name", - "apiKeyDescription": "Beschreibung", - "apiKeyCopy": "Klicke auf den API Schlüssel um den Key in die Zwischenablage zu kopieren", - "apiKey": "API-Schlüssel", - "deleteApiKey": "API-Schlüssel löschen", - "deleteApiKeyContent": "Sind Sie sicher, dass Sie diesen API-Schlüssel löschen möchten?", - "deleteApiKeyError": "Etwas ist schief gelaufen. Bitte versuche es erneut." - }, - "shortcut": { - ...en.shortcut, - "shortcutList": "Tastaturkürzel", - "click": "Klick", - "global": "Global", - "toggleShortcutList": "Tastaturkurzbefehle umschalten", - "editor": "Herausgeber", - "toggleLeftPanel": "Linkes Fenster umschalten", - "toggleBottomPanel": "Unteres Fenster umschalten", - "toggleRightPanel": "Rechtes Fenster umschalten", - "toggleAllPanels": "Alle Fenster umschalten", - "preview": "Vorschau", - "undo": "Rückgängig machen", - "redo": "Redo", - "showGrid": "Raster anzeigen", - "component": "Komponente", - "multiSelect": "Mehrere auswählen", - "selectAll": "Alle auswählen", - "copy": "Kopiere", - "cut": "Schnitt", - "paste": "Kleister", - "move": "Verschiebe", - "zoom": "Größe ändern", - "delete": "löschen", - "deSelect": "Deselektiere", - "queryEditor": "Abfrage-Editor", - "excuteQuery": "Aktuelle Abfrage ausführen", - "editBox": "Text-Editor", - "formatting": "Format", - "openInLeftPanel": "Im linken Fenster öffnen" - }, - "help": { - ...en.help, - "videoText": "Übersicht", - "onBtnText": "OK", - "permissionDenyTitle": "💡 Du kannst keine neue Anwendung oder Datenquelle erstellen?", - "permissionDenyContent": "Du hast nicht die Berechtigung, die Anwendung und die Datenquelle zu erstellen. Bitte kontaktiere den Administrator, um der Entwicklergruppe beizutreten.", - "appName": "Tutorial Anwendung", - "chat": "Chatte mit uns", - "docs": "Dokumentation ansehen", - "editorTutorial": "Editor Tutorial", - "update": "Was gibt's Neues?", - "version": "Version", - "versionWithColon": "Version: ", - "submitIssue": "Problem melden" - }, - "header": { - ...en.header, - "nameCheckMessage": "Der Name kann nicht leer sein", - "viewOnly": "Nur Ansicht", - "recoverAppSnapshotTitle": "Diese Version wiederherstellen?", - "recoverAppSnapshotContent": "Stelle die aktuelle App auf die Version wieder her, die zum Zeitpunkt {time} erstellt wurde.", - "recoverAppSnapshotMessage": "Diese Version wiederherstellen", - "returnEdit": "Zurück zum Bearbeiten", - "deploy": "Veröffentlichen", - "export": "Exportieren nach JSON", - "editName": "Name bearbeiten", - "duplicate": "{type} Duplizieren", - "snapshot": "Bearbeitungs-Historie", - "scriptsAndStyles": "Skripte und Stil", - "appSettings": "App-Einstellungen", - "preview": "Vorschau", - "editError": "History Preview Mode, No Operation is Supported.", - "clone": "Klonen", - "editorMode_layout": "Layout", - "editorMode_logic": "Logik", - "editorMode_both": "Beide", - "editorMode_layout_tooltip": "Passen Sie im rechten Fenster das Erscheinungsbild und Layout der Komponente an. Passen Sie Aussehen, Stil und Animationen an.", - "editorMode_logic_tooltip": "Richten Sie im rechten Fenster ein, wie Ihre Komponente funktioniert und interagiert. Verwalten Sie den Inhalt und das interaktive Verhalten." - }, - "userAuth": { - ...en.userAuth, - "registerByEmail": "Anmelden", - "email": "E-Mail:", - "inputEmail": "Bitte gib deine E-Mail ein", - "inputValidEmail": "Bitte gib eine gültige E-Mail ein", - "register": "Neu Registrieren", - "userLogin": "Anmelden", - "login": "Anmelden", - "bind": "Binde", - "passwordCheckLength": "Mindestens {min} Zeichen", - "passwordCheckContainsNumberAndLetter": "Muss Buchstaben und Ziffern enthalten", - "passwordCheckSpace": "Kann keine Leerzeichen enthalten", - "welcomeTitle": "Willkommen bei {productName}", - "inviteWelcomeTitle": "{username} lädt dich zur Mitarbeit ein", - "terms": "Geschäftsbedingungen", - "privacy": "Datenschutzrichtlinie", - "registerHint": "Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu.", - "chooseAccount": "Wähle dein Konto", - "signInLabel": "Melde dich mit {name} an", - "bindAccount": "Konto zusammenführen", - "scanQrCode": "Scanne den QR-Code mit {name}", - "invalidThirdPartyParam": "Ungültige Drittpartei Param", - "account": "Konto", - "inputAccount": "Bitte gib dein Konto ein", - "ldapLogin": "LDAP-Anmeldung", - "resetPassword": "Passwort zurücksetzen", - "resetPasswordDesc": "Setze das Passwort von Benutzer {name} zurück. Nach dem Zurücksetzen wird ein neues Passwort generiert.", - "resetSuccess": "Zurücksetzen Erfolglos", - "resetSuccessDesc": "Passwort zurücksetzen war erfolgreich. Das neue Passwort lautet: {password}", - "copyPassword": "Passwort kopieren", - "poweredByLowcoder": "Powered by: Lowcoder.cloud" - }, - "preLoad": { - ...en.preLoad, - "jsLibraryHelpText": "Füge JavaScript-Bibliotheken über URL-Adressen zu deiner aktuellen Anwendung hinzu. lodash, day.js, uuid, numbro sind zur sofortigen Verwendung in das System integriert. JavaScript-Bibliotheken werden geladen, bevor die Anwendung initialisiert wird, was sich auf die Leistung der Anwendung auswirken kann.", - "exportedAs": "Exportiert als", - "urlTooltip": "URL-Adresse der JavaScript-Bibliothek, [unpkg.com](https://unpkg.com/) oder [jsdelivr.net](https://www.jsdelivr.com/) wird empfohlen", - "recommended": "Empfohlen", - "viewJSLibraryDocument": "Dokument", - "jsLibraryURLError": "Ungültige URL", - "jsLibraryExist": "JavaScript-Bibliothek existiert bereits", - "jsLibraryEmptyContent": "Keine JavaScript-Bibliotheken hinzugefügt", - "jsLibraryDownloadError": "Fehler beim Herunterladen der JavaScript-Bibliothek", - "jsLibraryInstallSuccess": "Die JavaScript-Bibliothek wurde erfolgreich installiert", - "jsLibraryInstallFailed": "Installation der JavaScript-Bibliothek fehlgeschlagen", - "jsLibraryInstallFailedCloud": "Vielleicht ist die Bibliothek in der Sandbox nicht verfügbar, [Dokumentation](https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries#manually-import-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{message}", - "add": "Neu hinzufügen", - "jsHelpText": "Füge eine globale Methode oder Variable zur aktuellen Anwendung hinzu.", - "cssHelpText": "Füge der aktuellen Anwendung Stile hinzu. Die DOM-Struktur kann sich ändern, wenn das System iteriert. Versuche, Stile über Komponenteneigenschaften zu ändern.", - "scriptsAndStyles": "Skripte und Stile", - "jsLibrary": "JavaScript-Bibliothek" - }, - "editorTutorials": { - ...en.editorTutorials, - "component": "Komponente", - "componentContent": "Die rechte Komponentenleiste bietet dir viele vorgefertigte Anwendungsblöcke (Komponenten). Diese können zur Verwendung auf die Leinwand gezogen werden. Mit ein wenig Programmierkenntnissen kannst du auch deine eigenen Komponenten erstellen.", - "canvas": "Segeltuch", - "canvasContent": "Erstelle deine Apps auf dem Canvas mit dem Ansatz \"What You See Is What You Get\". Ziehe die Komponenten einfach per Drag & Drop, um dein Layout zu gestalten, und verwende Tastenkombinationen zum schnellen Bearbeiten wie Löschen, Kopieren und Einfügen. Sobald du eine Komponente ausgewählt hast, kannst du jedes Detail anpassen - vom Styling und Layout bis hin zur Datenbindung und dem logischen Verhalten. Ein weiterer Vorteil ist das responsive Design, das dafür sorgt, dass deine Apps auf jedem Gerät gut aussehen.", - "queryData": "Daten abfragen", - "queryDataContent": "Du kannst hier Datenabfragen erstellen und dich mit MySQL, MongoDB, Redis, Airtable und vielen anderen Datenquellen verbinden. Nachdem du die Abfrage konfiguriert hast, klickst du auf \\'Run\\', um die Daten abzurufen und das Tutorial fortzusetzen.", - "compProperties": "Komponenten-Eigenschaften" - }, - "homeTutorials": { - ...en.homeTutorials, - "createAppContent": "🎉 Willkommen! Klicke auf \\'App\\' und beginne, deine erste Anwendung zu erstellen.", - "createAppTitle": "App erstellen" - }, - "history": { - ...en.history, - "layout": "\\'{0}' Layout-Anpassung", - "upgrade": "Upgrade \\'{0}\\'", - "delete": "Löschen \\'{0}\\'", - "add": "Hinzufügen \\'{0}\\'", - "modify": "Ändern \\'{0}\\'", - "rename": "\\'{1}\\' in \\'{0}\\' umbenennen", - "recover": "Wiederherstellen der '2'-Version", - "recoverVersion": "Version wiederherstellen", - "andSoOn": "und so weiter", - "timeFormat": "MM DD um hh:mm A", - "emptyHistory": "Keine Geschichte", - "currentVersionWithBracket": " (Aktuell)", - "currentVersion": "Aktuelle Version", - "justNow": "Gerade jetzt", - "history": "Geschichte" - }, - "home": { - ...en.home, - "profile": "Profil", - "news": "News", - "newsLoading": "Das Laden dauert ein wenig...", - "allApplications": "Alle Apps", - "allModules": "Alle Module", - "allFolders": "Alle Ordner", - "yourFolders": "Deine Ordner", - "modules": "Module", - "module": "Modul", - "trash": "Papierkorb", - "marketplace": "Marktplatz", - "queryLibrary": "Abfragebibliothek", - "datasource": "Datenquellen", - "selectDatasourceType": "Datenquellentyp auswählen", - "home": "Startseite | Verwaltungsbereich", - "all": "Alle", - "app": "App", - "navigation": "Navigation", - "navLayout": "PC Navigation", - "navLayoutDesc": "Menü auf der linken Seite für eine einfache Desktop-Navigation.", - "mobileTabLayout": "Mobile Navigation", - "mobileTabLayoutDesc": "Untere Navigationsleiste für reibungsloses mobiles Surfen.", - "folders": "Ordner", - "folder": "Mappe", - "rootFolder": "Wurzel", - "import": "Importieren", - "export": "Exportieren nach JSON", - "inviteUser": "Mitglieder einladen", - "createFolder": "Ordner erstellen", - "createFolderSubTitle": "Name des Ordners:", - "moveToFolder": "In Ordner verschieben", - "moveToTrash": "In den Papierkorb verschieben", - "moveToFolderSubTitle": "Bewege dich zu:", - "folderName": "Name des Ordners:", - "resCardSubTitle": "{time} von {creator}", - "trashEmpty": "Der Papierkorb ist leer.", - "projectEmpty": "Hier ist nichts.", - "projectEmptyCanAdd": "Du hast noch keine Apps. Klicke auf Neu, um loszulegen.", - "name": "Name", - "type": "Typ", - "creator": "Erstellt von", - "lastModified": "Zuletzt geändert", - "deleteTime": "Zeit löschen", - "createTime": "Zeit schaffen", - "datasourceName": "Name der Datenquelle", - "databaseName": "Name der Datenbank", - "nameCheckMessage": "Der Name darf nicht leer sein", - "deleteElementTitle": "Dauerhaft löschen", - "moveToTrashSubTitle": "{type} {name} wird in den Papierkorb verschoben.", - "deleteElementSubTitle": "Lösche {type} {name} dauerhaft, er kann nicht wiederhergestellt werden.", - "deleteSuccessMsg": "Gelöscht erfolgreich", - "deleteErrorMsg": "Gelöschter Fehler", - "recoverSuccessMsg": "Erfolgreich wiederhergestellt", - "newDatasource": "Neue Datenquelle", - "creating": "Erstellen...", - "chooseDataSourceType": "Datenquellentyp auswählen", - "folderAlreadyExists": "Der Ordner existiert bereits", - "newNavLayout": "{userName}'s {name} ", - "newApp": "{userName}'s neuer {name} ", - "importError": "Importfehler, {message}", - "exportError": "Exportfehler, {message}", - "importSuccess": "Erfolg importieren", - "fileUploadError": "Datei-Upload-Fehler", - "fileFormatError": "Fehler im Dateiformat", - "groupWithSquareBrackets": "[Gruppe] ", - "allPermissions": "Besitzer", - "shareLink": "Link teilen: ", - "copyLink": "Link kopieren", - "appPublicMessage": "App veröffentlichen. Die App wird damit für jeden sichtbar.", - "modulePublicMessage": "Module veröffentlichen. Das Module wird damit für jeden sichtbar.", - "appMarketplaceMessage": "Veröffentlichen Sie Ihre App auf dem öffentlichen Marktplatz. Jeder kann sie dort sehen und kopieren.", - "moduleMarketplaceMessage": "Veröffentlichen Sie Ihr Modul auf dem öffentlichen Marktplatz. Jeder kann es dort sehen und kopieren.", - "marketplaceGoodPublishing": "Bitte stellen Sie sicher, dass Ihre App gut benannt und einfach zu bedienen ist. Entfernen Sie alle sensiblen Informationen vor der Veröffentlichung. Entfernen Sie außerdem lokale Datenquellen und ersetzen Sie sie durch statische, integrierte temporäre Daten.", - "noMarketplaceApps": "Noch sind keine Anwendungen auf dem Marktplatz.", - "memberPermissionList": "Berechtigungen: ", - "orgName": "{orgName} admins", - "addMember": "Mitglieder hinzufügen", - "addPermissionPlaceholder": "Bitte gib einen Namen ein, um Mitglieder zu suchen", - "searchMemberOrGroup": "Suche nach Mitgliedern oder Gruppen: ", - "addPermissionErrorMessage": "Berechtigung kann nicht hinzugefügt werden, {message}", - "copyModalTitle": "Klonen", - "copyNameLabel": "{type} Name", - "copyModalfolderLabel": "Zum Ordner hinzufügen", - "copyNamePlaceholder": "Bitte gib einen {type} Namen ein", - "chooseNavType": "Bitte wähle die Art der Navigation", - "createNavigation": "Navigation erstellen" - }, - "support": { - ...en.support, - "supportTitle": "Lowcoder-Support", - "supportContent": "Wenn Sie Fragen haben oder Hilfe benötigen, nutzen Sie bitte das Ticketsystem, um Ihr Problem schnell zu lösen.", - "newSupportTicket": "Neues Support-Ticket", - "ticketTitle": "Titel", - "priority": "Priorität", - "assignee": "Zuständiger", - "status": "Ticketstatus", - "updatedTime": "Aktualisierte Zeit", - "active": "Aktiv", - "inactive": "Inaktiv", - "noEmail": "Keine E-Mail", - "details": "Details", - "reloadTickets": "Tickets neu laden", - "createdDate": "Erstellungsdatum", - "updatedDate": "Aktualisierungsdatum", - "description": "Problembeschreibung", - "subtasks": "Unteraufgaben", - "subtasksProgress": "Fortschritt aller Unteraufgaben", - "attachments": "Anhänge", - "comments": "Kommentare", - "addComment": "Kommentar hinzufügen", - "addAttachment": "Anhang hinzufügen", - "edit": "Ticketbeschreibung bearbeiten", - "save": "Ticketbeschreibung speichern", - "cancel": "Abbrechen", - "submitComment": "Kommentar absenden", - "upload": "Anhang hochladen", - "selectFile": "Datei auswählen", - "ticketDescriptionUpdated": "Ticketbeschreibung erfolgreich aktualisiert!", - "ticketDescriptionUpdateFailed": "Ticketbeschreibung konnte nicht aktualisiert werden.", - "writeComment": "Einen Kommentar schreiben...", - "ticketCommentAdded": "Kommentar erfolgreich hinzugefügt!", - "ticketCommentFailed": "Kommentar konnte nicht hinzugefügt werden.", - "ticketCommentEmpty": "Bitte schreiben Sie einen Kommentar, bevor Sie ihn absenden.", - "ticketAttachmentUploaded": "Anhang erfolgreich hochgeladen!", - "ticketAttachmentFailed": "Anhang konnte nicht hochgeladen werden.", - "ticketAttachmentEmpty": "Bitte wählen Sie eine Datei zum Hochladen aus.", - "ticketFetchError": "Ticket konnte nicht geladen werden.", - "ticketNotFound": "Ticket nicht gefunden.", - "addAttachmentFileSize": "Datei muss kleiner als 5 MB sein!", - "goBack": "Zurück", - "noDescription": "Keine Beschreibung verfügbar.", - "createTicket": "Neues Support-Ticket erstellen", - "createTicketTitlePlaceholder": "Titel eingeben (max. 150 Zeichen)", - "createTicketDescriptionTitle": "Beschreiben Sie Ihr Problem - je mehr Details, desto besser:", - "createTicketDescriptionPlaceholder": "Beschreiben Sie das Problem im Detail, einschließlich: 1) Schritte zur Reproduktion des Problems, 2) Erwartetes Verhalten im Vergleich zum tatsächlichen Verhalten, 3) Code-Snippets, falls zutreffend, 4) Betroffene Komponenten, APIs oder Konfigurationen", - "createTicketSubmit": "Ticket absenden", - "createTicketInfoText": "Wenn Ihr Ticket erstellt wurde, können Sie im Abschnitt 'Details' Screenshots und Kommentare hinzufügen." - }, - "carousel": { - ...en.carousel, - "dotPosition": "Position der Navigationspunkte", - "autoPlay": "AutoPlay", - "showDots": "Navigationspunkte anzeigen" - }, - "npm": { - ...en.npm, - "invalidNpmPackageName": "Ungültiger npm-Paketname oder URL.", - "pluginExisted": "Dieses npm Plugin existierte bereits", - "compNotFound": "Komponente {compName} nicht gefunden.", - "addPluginModalTitle": "Plugin aus einem npm-Repository hinzufügen", - "pluginNameLabel": "URL oder Name des npm-Pakets", - "noCompText": "Keine Komponenten.", - "compsLoading": "Laden...", - "removePluginBtnText": "entfernen", - "addPluginBtnText": "npm-Plugin hinzufügen" - }, - "toggleButton": { - ...en.toggleButton, - "valueDesc": "Der Standardwert des Toggle-Buttons, zum Beispiel: Falsch", - "trueDefaultText": "Verstecken", - "falseDefaultText": "anzeigen", - "trueLabel": "Text für Wahr", - "falseLabel": "Text für Falsch", - "trueIconLabel": "Icon für Wahr", - "falseIconLabel": "Icon für Falsch", - "iconPosition": "Icon Position", - "showText": "Text anzeigen", - "alignment": "Ausrichtung", - "showBorder": "Grenze anzeigen" - }, - "componentDoc": { - ...en.componentDoc, - "markdownDemoText": "**Lowcoder** | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", - "demoText": "Lowcoder | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", - "submit": "einreichen", - "style": "Stil", - "danger": "Gefahr", - "warning": "Warnung", - "success": "Erfolg", - "menu": "Menü", - "link": "Link", - "customAppearance": "Benutzerdefiniertes Erscheinungsbild", - "search": "Suche", - "pleaseInputNumber": "Bitte eine Nummer eingeben", - "mostValue": "Größter Wert", - "maxRating": "Maximale Bewertung", - "notSelect": "Nicht ausgewählt", - "halfSelect": "Halbe Auswahl", - "pleaseSelect": "Bitte wählen", - "title": "Titel", - "content": "Inhalt", - "componentNotFound": "Komponente ist nicht vorhanden", - "example": "Beispiele", - "defaultMethodDesc": "Den Wert der Eigenschaft {name} festlegen", - "propertyUsage": "Du kannst komponentenbezogene Informationen lesen, indem du über den Komponentennamen auf die Komponenteneigenschaften zugreifst, wo immer du JavaScript schreiben kannst.", - "property": "Eigenschaften", - "propertyName": "Eigenschaft Name", - "propertyType": "Typ", - "propertyDesc": "Beschreibung", - "event": "Veranstaltungen", - "eventName": "Name der Veranstaltung", - "eventDesc": "Beschreibung", - "mehtod": "Methoden", - "methodUsage": "Du kannst mit Komponenten über ihre Methoden interagieren und sie überall dort, wo du JavaScript schreiben kannst, mit ihrem Namen aufrufen. Oder du kannst sie über die Aktion \"Komponente\" eines Ereignisses aufrufen.", - "methodName": "Methode Name", - "methodDesc": "Beschreibung", - "showBorder": "Grenze anzeigen", - "haveTry": "Versuch es selbst", - "settings": "Einstellung", - "settingValues": "Einstellung Wert", - "defaultValue": "Standardwert", - "time": "Zeit", - "date": "Datum", - "noValue": "Keine", - "xAxisType": "X-Achse Typ", - "hAlignType": "Horizontale Ausrichtung", - "leftLeftAlign": "Links-Links-Ausrichtung", - "leftRightAlign": "Links-Rechts-Ausrichtung", - "topLeftAlign": "Ausrichtung von oben nach links", - "topRightAlign": "Ausrichtung oben-rechts", - "validation": "Validierung", - "required": "Erforderlich", - "defaultStartDateValue": "Standard Startdatum", - "defaultEndDateValue": "Standard-Enddatum", - "basicUsage": "Grundlegende Verwendung", - "basicDemoDescription": "Die folgenden Beispiele zeigen die grundlegende Verwendung der Komponente.", - "noDefaultValue": "Kein Standardwert", - "forbid": "Verboten", - "placeholder": "Platzhalter", - "pleaseInputPassword": "Bitte gib ein Passwort ein", - "password": "Passwort", - "textAlign": "Textausrichtung", - "length": "Länge", - "top": "Top", - "pleaseInputName": "Bitte gib deinen Namen ein", - "userName": "Name", - "fixed": "Festgelegt", - "responsive": "Responsive", - "workCount": "Wortzahl", - "cascaderOptions": "Kaskadenoptionen", - "pleaseSelectCity": "Bitte wähle eine Stadt", - "advanced": "Fortgeschrittene", - "showClearIcon": "Löschen-Symbol anzeigen", - "likedFruits": "Favoriten", - "option": "Option", - "singleFileUpload": "Einzelner Datei-Upload", - "multiFileUpload": "Mehrere Dateien hochladen", - "folderUpload": "Ordner hochladen", - "multiFile": "Mehrere Dateien", - "folder": "Mappe", - "open": "Öffnen Sie", - "favoriteFruits": "Lieblingsfrüchte", - "pleaseSelectOneFruit": "Wähle eine Frucht", - "notComplete": "Nicht vollständig", - "complete": "Vollständig", - "echart": "EChart", - "lineChart": "Liniendiagramm", - "basicLineChart": "Grundlegendes Liniendiagramm", - "lineChartType": "Liniendiagramm Typ", - "stackLineChart": "Gestapelte Linie", - "areaLineChart": "Bereich Linie", - "scatterChart": "Punktediagramm", - "scatterShape": "Streuung Form", - "scatterShapeCircle": "Kreis", - "scatterShapeRect": "Rectangle", - "scatterShapeTri": "Dreieck", - "scatterShapeDiamond": "Diamant", - "scatterShapePin": "Stecknadel", - "scatterShapeArrow": "Pfeil", - "pieChart": "Kreisdiagramm", - "basicPieChart": "Grundlegendes Kreisdiagramm", - "pieChatType": "Kreisdiagramm Typ", - "pieChartTypeCircle": "Donut-Tabelle", - "pieChartTypeRose": "Rose Chart", - "titleAlign": "Titel Position", - "color": "Farbe", - "dashed": "Gestrichelt", - "imADivider": "Ich bin eine Trennungslinie", - "tableSize": "Tabelle Größe", - "subMenuItem": "UnterMenü {num}", - "menuItem": "Menü {num}", - "labelText": "Etikett", - "labelPosition": "Etikett - Position", - "labelAlign": "Etikett - Ausrichten", - "optionsOptionType": "Konfiguration Methode", - "styleBackgroundColor": "Hintergrundfarbe", - "styleBorderColor": "Farbe der Umrandung", - "styleColor": "Schriftfarbe", - "selectionMode": "Zeilenauswahl-Modus", - "paginationSetting": "Paginierung Einstellung", - "paginationShowSizeChanger": "Unterstützung der Benutzer bei der Änderung der Anzahl von Einträgen pro Seite", - "paginationShowSizeChangerButton": "Schaltfläche Größenänderer anzeigen", - "paginationShowQuickJumper": "Quick Jumper anzeigen", - "paginationHideOnSinglePage": "Verstecken, wenn es nur eine Seite gibt", - "paginationPageSizeOptions": "Seitengröße", - "chartConfigCompType": "Chart-Typ", - "xConfigType": "X-Achse Typ", - "loading": "Laden", - "disabled": "Deaktiviert", - "minLength": "Mindestlänge", - "maxLength": "Maximale Länge", - "showCount": "Wortzahl anzeigen", - "autoHeight": "Höhe", - "thousandsSeparator": "Tausendertrennzeichen", - "precision": "Nachkommastellen", - "value": "Standardwert", - "formatter": "Format", - "min": "Mindestwert", - "max": "Maximaler Wert", - "step": "Schrittweite", - "start": "Startzeit", - "end": "Endzeit", - "allowHalf": "Halbe Auswahl zulassen", - "filetype": "Dateityp", - "showUploadList": "Upload-Liste anzeigen", - "uploadType": "Upload Typ", - "allowClear": "Löschen-Symbol anzeigen", - "minSize": "Minimale Dateigröße", - "maxSize": "Maximale Dateigröße", - "maxFiles": "Maximale Anzahl von hochgeladenen Dateien", - "format": "Format", - "minDate": "Minimum Datum", - "maxDate": "Maximales Datum", - "minTime": "Mindestzeit", - "maxTime": "Maximale Zeit", - "text": "Text", - "type": "Typ", - "hideHeader": "Kopfzeile ausblenden", - "hideBordered": "Grenze ausblenden", - "src": "Bild-URL", - "showInfo": "Wert anzeigen", - "mode": "Modus", - "onlyMenu": "Nur Menü", - "horizontalAlignment": "Horizontale Ausrichtung", - "row": "Links", - "column": "Top", - "leftAlign": "Linke Ausrichtung", - "rightAlign": "Rechts ausrichten", - "percent": "Prozentsatz", - "fixedHeight": "Feste Höhe", - "auto": "Anpassungsfähig", - "directory": "Mappe", - "multiple": "Mehrere Dateien", - "singleFile": "Einzelne Datei", - "manual": "Handbuch", - "default": "Standard", - "small": "Klein", - "middle": "Medium", - "large": "Groß", - "single": "Single", - "multi": "Mehrere", - "close": "Schließen", - "ui": "UI-Modus", - "line": "Liniendiagramm", - "scatter": "Punktwolke", - "pie": "Kreisdiagramm", - "basicLine": "Grundlegendes Liniendiagramm", - "stackedLine": "Gestapeltes Liniendiagramm", - "areaLine": "Gebiet Gebietskarte", - "basicPie": "Grundlegendes Kreisdiagramm", - "doughnutPie": "Donut-Tabelle", - "rosePie": "Rose Chart", - "category": "Kategorie Achse", - "circle": "Kreis", - "rect": "Rectangle", - "triangle": "Dreieck", - "diamond": "Diamant", - "pin": "Stecknadel", - "arrow": "Pfeil", - "left": "Links", - "right": "Rechts", - "center": "Zentrum", - "bottom": "Unten", - "justify": "Beide Enden rechtfertigen" - }, - "playground": { - ...en.playground, - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Aktueller Datenstand", - "preview": "Vorschau", - "property": "Eigenschaften", - "console": "Visual Script-Konsole", - "executeMethods": "Ausführen von Methoden", - "noMethods": "Keine Methoden.", - "methodParams": "Parameter der Methode", - "methodParamsHelp": "Parameter der Eingabemethode mit JSON. Zum Beispiel kannst du die Parameter von setValue\\ wie folgt festlegen: [1] oder 1" - }, - "calendar": { - ...en.calendar, - "headerBtnBackground": "Schaltfläche Hintergrund", - "btnText": "Schaltfläche Text", - "title": "Titel", - "selectBackground": "Ausgewählter Hintergrund" - }, - /* "componentDocExtra": { - ...en.componentDocExtra, - "table": table, - }, */ - "idSource": { - ...en.idSource, - "title": "OAuth-Anbieter", - "form": "E-Mail", - "pay": "Premium", - "enable": "Aktiviere", - "unEnable": "Nicht aktiviert", - "loginType": "Anmeldung Typ", - "status": "Status", - "desc": "Beschreibung", - "manual": "Adressbuch:", - "syncManual": "Adressbuch synchronisieren", - "syncManualSuccess": "Sync Erfolgreich", - "enableRegister": "Registrierung zulassen", - "saveBtn": "Speichern und Aktivieren", - "save": "Speichern", - "none": "Keine", - "formPlaceholder": "Bitte {label} eingeben", - "formSelectPlaceholder": "Bitte wähle das {label}", - "saveSuccess": "Erfolgreich gespeichert", - "dangerLabel": "Gefahrenzone", - "dangerTip": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Gehe mit Vorsicht vor.", - "disable": "Deaktivieren", - "disableSuccess": "Erfolgreich deaktiviert", - "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", - "disableTip": "Tipps", - "disableContent": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Bist du sicher, dass du fortfahren kannst?", - "manualTip": "", - "lockTip": "Der Inhalt ist gesperrt. Um Änderungen vorzunehmen, klicke bitte auf das {icon}, um die Sperre aufzuheben.", - "lockModalContent": "Die Änderung des Feldes \"ID-Attribut\" kann erhebliche Auswirkungen auf die Benutzeridentifizierung haben. Bitte vergewissere dich, dass du die Auswirkungen dieser Änderung verstehst, bevor du fortfährst.", - "payUserTag": "Premium" - }, - "slotControl": { - ...en.slotControl, - "configSlotView": "Slot-Ansicht konfigurieren" - }, - "jsonLottie": { - ...en.jsonLottie, - "lottieJson": "Lottie JSON", - "speed": "Geschwindigkeit", - "width": "Breite", - "height": "Höhe", - "backgroundColor": "Hintergrundfarbe", - "animationStart": "Animation Start", - "valueDesc": "Aktuelle JSON-Daten", - "loop": "Schleife", - "auto": "Auto", - "onHover": "Beim Schweben", - "singlePlay": "Einzelspiel", - "endlessLoop": "Endlosschleife", - "keepLastFrame": "Letzten Frame anzeigen lassen" - }, - "timeLine": { - ...en.timeLine, - "titleColor": "Titel Farbe", - "subTitleColor": "Untertitel Farbe", - "labelColor": "Etikett Farbe", - "value": "Zeitleiste Daten", - "mode": "Bestellung anzeigen", - "left": "Inhalt Rechts", - "right": "Inhalt Links", - "alternate": "Alternative Reihenfolge der Inhalte", - "modeTooltip": "Einstellen, dass der Inhalt links/rechts oder abwechselnd auf beiden Seiten der Zeitleiste angezeigt wird", - "reverse": "Neueste Ereignisse zuerst", - "pending": "Ausstehender Knotenpunkt Text", - "pendingDescription": "Wenn diese Option aktiviert ist, wird ein letzter Knoten mit dem Text und einer Warteanzeige angezeigt.", - "defaultPending": "Kontinuierliche Verbesserung", - "clickTitleEvent": "Klick Titel Ereignis", - "clickTitleEventDesc": "Klick Titel Ereignis", - "Introduction": "Einführung Tasten", - "helpTitle": "Titel der Zeitleiste (erforderlich)", - "helpsubTitle": "Untertitel der Zeitleiste", - "helpLabel": "Beschriftung der Zeitleiste, die zur Anzeige von Daten verwendet wird", - "helpColor": "Zeigt die Farbe des Zeitachsenknotens an", - "helpDot": "Timeline-Knoten als Ameisendesign-Symbole rendern", - "helpTitleColor": "Individuell die Farbe des Knotentitels steuern", - "helpSubTitleColor": "Individuelle Steuerung der Farbe der Knotenuntertitel", - "helpLabelColor": "Individuelle Steuerung der Farbe des Knotensymbols", - "valueDesc": "Daten der Zeitleiste", - "clickedObjectDesc": "Daten zum angeklickten Objekt", - "clickedIndexDesc": "Index der angeklickten Objekte" - }, - "comment": { - ...en.comment, - "value": "Daten der Kommentarliste", - "showSendButton": "Kommentare zulassen", - "title": "Titel", - "titledDefaultValue": "%d Kommentar in Summe", - "placeholder": "Shift + Enter zum Kommentieren; @ oder # für Schnelleingabe eingeben", - "placeholderDec": "Platzhalter", - "buttonTextDec": "Schaltfläche Titel", - "buttonText": "Kommentar", - "mentionList": "Daten der Erwähnungsliste", - "mentionListDec": "Key-Mention Keywords; Value-Mention Listendaten", - "userInfo": "Benutzerinfo", - "dateErr": "Datum Fehler", - "commentList": "Kommentar Liste", - "deletedItem": "Gelöschter Artikel", - "submitedItem": "Eingereichter Artikel", - "deleteAble": "Schaltfläche \"Löschen\" anzeigen", - "Introduction": "Einführung Tasten", - "helpUser": "Benutzerinformationen (erforderlich)", - "helpname": "Nutzername (erforderlich)", - "helpavatar": "Avatar URL (Hohe Priorität)", - "helpdisplayName": "Name anzeigen (niedrige Priorität)", - "helpvalue": "Kommentar Inhalt", - "helpcreatedAt": "Datum erstellen" - }, - "mention": { - ...en.mention, - "mentionList": "Daten der Erwähnungsliste" - }, - "autoComplete": { - ...en.autoComplete, - "value": "Auto Complete Value", - "checkedValueFrom": "Geprüfter Wert von", - "ignoreCase": "Suche ignorieren Fall", - "searchLabelOnly": "Nur Label suchen", - "searchFirstPY": "Erste Pinyin-Suche", - "searchCompletePY": "Vollständiges Pinyin suchen", - "searchText": "Text suchen", - "SectionDataName": "AutoVervollständigen Daten", - "valueInItems": "Wert in Positionen", - "type": "Typ", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Schlüssel", - "selectLable": "Etikett", - "ComponentType": "Komponente Typ", - "colorIcon": "Blau", - "grewIcon": "Grau", - "noneIcon": "Keine", - "small": "Klein", - "large": "Groß", - "componentSize": "Komponente Größe", - "Introduction": "Einführung Tasten", - "helpLabel": "Etikett", - "helpValue": "Wert" - }, - "responsiveLayout": { - ...en.responsiveLayout, - "column": "Rubriken", - "atLeastOneColumnError": "Responsive Layout behält mindestens eine Spalte bei", - "columnsPerRow": "Spalten pro Zeile", - "columnsSpacing": "Abstand zwischen den Spalten (px)", - "horizontal": "Horizontal", - "vertical": "Vertikal", - "mobile": "Mobil", - "tablet": "Tablet", - "desktop": "Desktop", - "rowStyle": "Reihe Stil", - "columnStyle": "Säulenstil", - "minWidth": "Min. Breite", - "rowBreak": "Reihenpause", - "matchColumnsHeight": "Höhe der Säulen anpassen", - "rowLayout": "Zeilenlayout", - "columnsLayout": "Spalten Layout" - }, - "navLayout": { - ...en.navLayout, - "mode": "Modus", - "modeInline": "Inline", - "modeVertical": "Vertikal", - "width": "Breite", - "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", - "navStyle": "Menü-Stil", - "navItemStyle": "Menüpunkt Stil" - } -}; + + "productName": "Lowcoder", + "productDesc": "Erstelle Softwareanwendungen für Dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist eine hervorragende Alternative zu Retool, Appsmith und Tooljet.", + "notSupportedBrowser": "Dein aktueller Browser hat möglicherweise Kompatibilitätsprobleme. Um ein optimales Nutzererlebnis zu gewährleisten, verwende bitte die neueste Version von Chrome.", + "create": "Erstellen", + "move": "Verschieben", + "addItem": "Hinzufügen", + "newItem": "Neu", + "copy": "Kopieren", + "rename": "Umbenennen", + "delete": "Löschen", + "deletePermanently": "Dauerhaft löschen", + "remove": "Entfernen", + "recover": "Wiederherstellen", + "edit": "Bearbeiten", + "view": "Ansicht", + "value": "Wert", + "data": "Daten", + "information": "Informationen", + "success": "Erfolg", + "warning": "Warnung", + "error": "Fehler", + "reference": "Referenz", + "text": "Text", + "basic": "Grundlegend", + "label": "Etikett", + "layout": "Layout", + "color": "Farbe", + "form": "Formular", + "menu": "Menü", + "menuItem": "Menüpunkt", + "ok": "OK", + "cancel": "Abbrechen", + "finish": "Beenden", + "reset": "Zurücksetzen", + "icon": "Icon", + "code": "Code", + "title": "Titel", + "emptyContent": "Leer", + "more": "Mehr", + "search": "Suche", + "back": "Zurück", + "accessControl": "Zugangskontrolle", + "copySuccess": "Erfolgreich kopiert", + "copyError": "Kopierfehler", + "api": { + ...en.api, + + "publishSuccess": "Erfolgreich veröffentlicht", + "recoverFailed": "Wiederherstellung fehlgeschlagen", + "needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "Der aktuelle Code-Editor unterstützt keine automatische Formatierung.", + "fold": "Zuklappen", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Eigenschaft einstellen: {property}", + "clearDesc": "Eigenschaft löschen: {property}", + "resetDesc": "{property} auf Standardwert zurücksetzen", + }, + "method": { + ...en.method, + + "focus": "Fokus setzen", + "focusOptions": "Fokus-Optionen. Siehe HTMLElement.focus()", + "blur": "Fokus entfernen", + "click": "Klick", + "select": "Auswählen", + "setSelectionRange": "Start- und Endposition der Textauswahl festlegen", + "selectionStart": "0-basierter Index des ersten ausgewählten Zeichens", + "selectionEnd": "0-basierter Index des Zeichens nach dem letzten ausgewählten Zeichen", + "setRangeText": "Textbereich ersetzen", + "replacement": "String zum Einfügen", + "replaceStart": "0-basierter Index des ersten zu ersetzenden Zeichens", + "replaceEnd": "0-basierter Index des Zeichens nach dem letzten zu ersetzenden Zeichen", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Das Laden einer Komponente ist fehlgeschlagen. Bitte überprüfe deine Konfiguration.", + "clickToReload": "Klicke bitte um Neu zu laden.", + "errorMsg": "Fehler: ", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Unterstützt nur {types} Bild-Dateitypen", + "exceedSizeError": "Die Bildgröße darf {size} nicht überschreiten", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Nicht unterstützt", + "selectAtLeastOneComponent": "Bitte wähle mindestens eine Komponente aus", + "selectCompFirst": "Komponenten vor dem Kopieren auswählen", + "noContainerSelected": "Kein Container ausgewählt", + "deleteCompsSuccess": "Erfolgreich gelöscht. Drücke {undoKey} zum Rückgängigmachen.", + "deleteCompsTitle": "Komponenten löschen", + "deleteCompsBody": "Bist du sicher, dass du die ausgewählten Komponenten {compNum} löschen willst?", + "cutCompsSuccess": "Erfolgreich selektiert und gelöscht. Drücke {pasteKey}, um die Komponente einzufügen, oder {undoKey}, um den Vorgang rückgängig zu machen.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Datenabfragen", + "globals": "Globale Datenvariablen", + "propTipsArr": "{num} Posten", + "propTips": "{num} Tasten", + "propTipArr": "Posten {num}", + "propTip": "{num} Schlüssel", + "stateTab": "Status", + "settingsTab": "Einstellungen", + "toolbarTitle": "Individualisierung", + "toolbarPreload": "Skripte und Stile", + "components": "Aktive Komponenten", + "modals": "Modale Fenster", + "expandTip": "Klicken, um die aktuellen Daten (State) der Komponente zu sehen.", + "collapseTip": "Klicken Sie, um die Ansicht zu reduzieren.", + "layers": "Schichten", + "activatelayers": "Dynamische Ebenen verwenden", + "selectedComponents": "Ausgewählte Komponenten...", + "displayComponents": "Steuerung Display", + "lockComponents": "Kontrolle Position", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Datenabfragen", + "run": "Start", + "noSelectedQuery": "Keine Datenabfrage ausgewählt", + "metaData": "Metadaten der Datenquelle", + "noMetadata": "Keine Metadaten verfügbar", + "metaSearchPlaceholder": "Metadaten suchen", + "allData": "Alle Daten", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Eigenschaften", + "noSelectedComps": "Keine Komponenten ausgewählt. Klicke auf eine Komponente, um ihre Eigenschaften anzuzeigen.", + "createTab": "Einfügen", + "searchPlaceHolder": "Komponenten oder Module suchen", + "uiComponentTab": "Komponenten", + "extensionTab": "Erweiterungen", + "modulesTab": "Module", + "moduleListTitle": "Module", + "pluginListTitle": "Erweiterungen (Plugins)", + "emptyModules": "Module sind wiederverwendbare Mikro-Apps. Du kannst sie in deine App einbetten.", + "searchNotFound": "Kannst du die richtige Komponente nicht finden? Schreibe uns!", + "emptyPlugins": "Keine Plugins hinzugefügt.", + "contactUs": "Kontakt", + "issueHere": "hier.", + }, + "prop": { + ...en.prop, + + "expand": "Erweitern", + "columns": "Spalten", + "videokey": "Video Schlüssel", + "rowSelection": "Zeilenauswahl", + "toolbar": "Symbolleiste", + "pagination": "Paginierung", + "logo": "Logo", + "style": "Stil", + "inputs": "Variablen", + "meta": "Metadaten", + "data": "Daten", + "hide": "Verstecken", + "loading": "Laden", + "disabled": "Deaktiviert", + "placeholder": "Platzhalter", + "showClear": "Schaltfläche \"Löschen\" anzeigen", + "showSearch": "Suche anzeigen", + "defaultValue": "Standardwert", + "required": "Erforderliches Feld", + "readOnly": "Nur lesbar", + "readOnlyTooltip": "Schreibgeschützte Komponenten erscheinen normal, können aber nicht geändert werden.", + "minimum": "Minimum", + "maximum": "Maximum", + "regex": "Regular Expression", + "minLength": "Mindestlänge", + "maxLength": "Maximale Länge", + "height": "Höhe", + "width": "Breite", + "selectApp": "App auswählen", + "showCount": "Anzahl anzeigen", + "textType": "Textart", + "customRule": "Benutzerdefinierte Regel", + "customRuleTooltip": "Eine nicht leere Zeichenkette weist auf einen Fehler hin; eine leere Zeichenkette oder null bedeutet, dass die Validierung erfolgreich war. Beispiel: ", + "manual": "Handbuch", + "map": "Karte", + "json": "JSON", + "use12Hours": "12-Stunden-Format verwenden", + "hourStep": "Stunden Schritt", + "minuteStep": "Minuten Schritt", + "secondStep": "Sekunden Schritt", + "minDate": "Frühestes Datum", + "maxDate": "Spätestes Datum", + "minTime": "Früheste Zeit", + "maxTime": "Späteste Zeit", + "type": "Typ", + "showLabel": "Etikett anzeigen", + "showHeader": "Kopfbereich anzeigen", + "showBody": "Hauptbereich zeigen", + "showSider": "Schieberegler anzeigen", + "innerSider": "Innere Seiten", + "showFooter": "Fußbereich anzeigen", + "maskClosable": "Zum Schließen auf \"Schließen\" klicken", + "toggleClose": "Schaltfläche \"Schließen\" aktivieren", + "showMask": "Maske darstellen", + "textOverflow": "Textüberlauf", + "scrollbar": "Bildlaufleisten anzeigen", + "siderScrollbar": "Bildlaufleisten im Sider anzeigen", + "siderRight": "Schieberegler rechts", + "siderWidth": "Sider Width", + "siderWidthTooltip": "Die Seitenbreite unterstützt Prozentwerte (%) und Pixel (px).", + "siderCollapsedWidth": "Sider Zusammengeklappte Breite", + "siderCollapsedWidthTooltip": "Die eingeklappte Breite des Siders unterstützt Prozentwerte (%) und Pixel (px).", + "siderCollapsible": "Sider Zusammenklappbar", + "siderCollapsed": "Sider kollabiert", + "contentScrollbar": "Bildlaufleisten im Inhalt anzeigen", + "appID": "App-Id", + "showApp": "Eine App im Inhaltsbereich anzeigen", + "showAppTooltip": "Sie können ganze Apps im Inhaltsbereich anzeigen lassen. Bitte beachten Sie, dass wir für Module keine Inputs, Outputs, Events und Methoden unterstützen.", + "baseURL": "API-Basis-URL", + "horizontal": "Horizontal", + "minHorizontalWidth": "Horizontale Mindestbreite", + "component": "Komponente", + "className": "Klasse", + "dataTestId": "Test ID", + "preventOverwriting": "Überschreiben von Stilen verhindern", + "color": "Farbe", + "horizontalGridCells": "Horizontale Rasterzellen", + "verticalGridCells": "Vertikale Rasterzellen", + "showHorizontalScrollbar": "Horizontale Bildlaufleiste anzeigen", + "showVerticalScrollbar": "Vertikale Bildlaufleiste anzeigen", + "timeZone": "ZeitZone", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Automatisch", + "fixed": "Festgelegt", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Mouseover", + "wrap": "Wickeln", + }, + "labelProp": { + ...en.labelProp, + + "text": "Etikett Text", + "tooltip": "QuickInfo", + "position": "Position", + "collapse": "Kollabieren", + "left": "Links", + "right": "Rechts", + "top": "Open", + "align": "Ausrichtung", + "width": "Breite", + "widthTooltip": "Die Etikettenbreite unterstützt Prozentwerte (%) und Pixel (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Ereignishandler", + "emptyEventHandlers": "Keine Ereignishandler", + "incomplete": "Unvollständige Auswahl", + "inlineEventTitle": "Bei {eventName}", + "event": "Ereignis", + "action": "Aktion", + "noSelect": "Keine Auswahl", + "runQuery": "Eine Datenabfrage ausführen", + "selectQuery": "Datenabfrage auswählen", + "controlComp": "Eine Komponente steuern", + "runScript": "JavaScript ausführen", + "runScriptPlaceHolder": "Hier kann man JavaScript Code schreiben", + "component": "Komponente", + "method": "Methode", + "setTempState": "Einen temporären Zustand setzen", + "state": "Zustand", + "triggerModuleEvent": "Ein Modulereignis auslösen", + "moduleEvent": "Modulereignis", + "goToApp": "Zu einer anderen App wechseln", + "queryParams": "Abfrageparameter", + "hashParams": "Hash-Parameter", + "showNotification": "Eine Benachrichtigung anzeigen", + "text": "Text", + "level": "Stufe", + "duration": "Dauer", + "notifyDurationTooltip": "Zeiteinheit kann 's' (Sekunde, Standard) oder 'ms' (Millisekunde) sein. Maximale Dauer ist {max} Sekunden", + "goToURL": "URL öffnen", + "openInNewTab": "In neuem Tab öffnen", + "copyToClipboard": "In die Zwischenablage kopieren", + "copyToClipboardValue": "Wert", + "export": "Daten exportieren", + "exportNoFileType": "Keine Auswahl (optional)", + "fileName": "Dateiname", + "fileNameTooltip": "Dateiendung angeben, um Dateityp zu spezifizieren, z.B. 'bild.png'.", + "fileType": "Dateityp", + "condition": "Nur ausführen wenn...", + "conditionTooltip": "Ereignis-Handler nur ausführen, wenn diese Bedingung 'wahr' ist.", + "debounce": "Warten für", + "throttle": "Drosseln für", + "slowdownTooltip": "Verwende Warten oder Drosseln, um die Häufigkeit von Aktionen zu steuern. Zeiteinheit kann 'ms' (Millisekunde, Standard) oder 's' (Sekunde) sein.", + "notHandledError": "Nicht behandelter Fehler", + "currentApp": "Aktuelle App", + "inputEventHandlers": "Eingabe-Ereignishandler", + "inputEventHandlersDesc": "Ereignishandler bezüglich Benutzereingaben", + "buttonEventHandlers": "Button-Ereignishandler", + "buttonEventHandlersDesc": "Ereignishandler bezüglich Button-Klicks", + "changeEventHandlers": "Änderungs-Ereignishandler", + "changeEventHandlersDesc": "Ereignishandler bezüglich Wertänderungen", + "editedEventHandlers": "Bearbeitungs-Ereignishandler", + "editedEventHandlersDesc": "Ereignishandler bezüglich Bearbeitungsstatus von Elementen", + "clickEventHandlers": "Klick-Ereignishandler", + "clickEventHandlersDesc": "Ereignishandler bezüglich Klicks", + "keyDownEventHandlers": "Tastendruck-Ereignishandler", + "keyDownEventHandlersDesc": "Ereignishandler bezüglich Tastendrücken", + "checkboxEventHandlers": "Checkbox-Ereignishandler", + "checkboxEventHandlersDesc": "Ereignishandler bezüglich Checkbox-Änderungen", + "dragEventHandlers": "Drag-and-Drop-Ereignishandler", + "dragEventHandlersDesc": "Ereignishandler bezüglich Drag-and-Drop-Ereignissen", + "elementEventHandlers": "Element-Ereignishandler", + "elementEventHandlersDesc": "Ereignishandler bezüglich generischer Element-Ereignisse", + "mediaEventHandlers": "Medien-Ereignishandler", + "mediaEventHandlersDesc": "Ereignishandler bezüglich Medienereignissen", + "scannerEventHandlers": "Scanner-Ereignishandler", + "scannerEventHandlersDesc": "Ereignishandler bezüglich Scanner-Ereignissen", + "chartEventHandlers": "Diagramm-Ereignishandler", + "chartEventHandlersDesc": "Ereignishandler bezüglich Diagrammereignissen", + "geoMapEventHandlers": "Geo-Map-Ereignishandler", + "geoMapEventHandlersDesc": "Ereignishandler bezüglich Geo-Map-Ereignissen", + "stepEventHandlers": "Schritt-Ereignishandler", + "stepEventHandlersDesc": "Ereignishandler bezüglich Schritt-UI-Ereignissen", + "shareEventHandlers": "Teilen-Ereignishandler", + "shareEventHandlersDesc": "Ereignishandler bezüglich Teilen-Ereignissen", + "selectEventHandlers": "Auswahl-Ereignishandler", + "selectEventHandlersDesc": "Ereignishandler bezüglich Auswahl-Ereignissen", + "meetingEventHandlers": "Besprechungs-Ereignishandler", + "meetingEventHandlersDesc": "Ereignishandler bezüglich Besprechungs-Ereignissen", + "collaborationEventHandlers": "Kollaborations-Ereignishandler", + "collaborationEventHandlersDesc": "Ereignishandler bezüglich Kollaborations-Ereignissen", + "set": "Satz", + "clear": "Klar", + "reset": "Reset", + "messageType": "Message Type", + "placement": "Platzierung", + "description": "Beschreibung", + }, + "event": { + ...en.event, + + "submit": "Absenden", + "submitDesc": "Auslöser beim Absenden.", + "change": "Ändern", + "changeDesc": "Auslöser bei Änderungen.", + "focus": "Fokussieren", + "focusDesc": "Auslöser beim Fokussieren.", + "blur": "Verlassen", + "blurDesc": "Auslöser beim Verlassen.", + "click": "Klicken", + "clickDesc": "Auslöser beim Klicken.", + "doubleClick": "Doppelklick", + "doubleClickDesc": "Auslöser beim Doppelklicken.", + "rightClick": "Rechtsklick", + "rightClickDesc": "Auslöser beim Rechtsklicken.", + "keyDown": "Tastendruck", + "keyDownDesc": "Auslöser beim Tastendruck.", + "select": "Auswählen", + "selectDesc": "Auslöser bei Auswahl.", + "checked": "Aktiviert", + "checkedDesc": "Auslöser, wenn eine Checkbox aktiviert wird.", + "unchecked": "Deaktiviert", + "uncheckedDesc": "Auslöser, wenn eine Checkbox deaktiviert wird.", + "drag": "Ziehen", + "dragDesc": "Auslöser beim Ziehen.", + "drop": "Fallen lassen", + "dropDesc": "Auslöser beim Fallenlassen.", + "open": "Öffnen", + "openDesc": "Auslöser beim Öffnen.", + "mute": "Stummschalten", + "muteDesc": "Auslöser beim Stummschalten eines Mikrofons.", + "unmute": "Stummschaltung aufheben", + "unmuteDesc": "Auslöser beim Aufheben der Stummschaltung eines Mikrofons.", + "showCamera": "Kamera zeigen", + "showCameraDesc": "Auslöser, wenn die Kamera gezeigt wird.", + "hideCamera": "Kamera verstecken", + "hideCameraDesc": "Auslöser, wenn die Kamera versteckt wird.", + "shareScreen": "Bildschirm teilen", + "shareScreenDesc": "Auslöser beim Teilen des Bildschirms.", + "shareScreenEnd": "Bildschirmteilen beenden", + "shareScreenEndDesc": "Auslöser beim Beenden des Bildschirmteilens.", + "shareControl": "Steuerung teilen", + "shareControlDesc": "Auslöser beim Teilen der Steuerung.", + "shareControlEnd": "Steuerungsteilen beenden", + "shareControlEndDesc": "Auslöser beim Beenden des Steuerungsteilens.", + "shareContent": "Inhalt teilen", + "shareContentDesc": "Auslöser beim Teilen von Inhalten.", + "shareContentEnd": "Inhaltsteilen beenden", + "shareContentEndDesc": "Auslöser beim Beenden des Inhaltsteilens.", + "stopShare": "Stop Share", + "stopShareDesc": "Auslöser bei Stop Share", + "meetingStart": "Besprechung beginnen", + "meetingStartDesc": "Auslöser beim Start einer Besprechung.", + "meetingEnd": "Besprechung beenden", + "meetingEndDesc": "Auslöser beim Beenden einer Besprechung.", + "meetingJoin": "Besprechung beitreten", + "meetingJoinDesc": "Auslöser beim Beitritt zu einer Besprechung.", + "meetingLeave": "Besprechung verlassen", + "meetingLeaveDesc": "Auslöser beim Verlassen einer Besprechung.", + "play": "Abspielen", + "playDesc": "Auslöser beim Abspielen.", + "pause": "Pausieren", + "pauseDesc": "Auslöser beim Pausieren.", + "ended": "Beendet", + "endedDesc": "Auslöser wenn beendet.", + "step": "Schritt", + "stepDesc": "Auslöser bei einem Schritt.", + "next": "Nächster", + "nextDesc": "Auslöser beim nächsten Schritt.", + "finished": "Abgeschlossen", + "finishedDesc": "Auslöser wenn abgeschlossen.", + "saved": "Gespeichert", + "savedDesc": "Auslöser wenn gespeichert.", + "edited": "Bearbeitet", + "editedDesc": "Auslöser wenn bearbeitet.", + "geoMapMove": "Geo-Map Bewegen", + "geoMapMoveDesc": "Auslöser beim Bewegen der Geo-Map.", + "geoMapZoom": "Geo-Map Zoomen", + "geoMapZoomDesc": "Auslöser beim Zoomen der Geo-Map.", + "geoMapSelect": "Geo-Map Auswahl", + "geoMapSelectDesc": "Auslöser bei einer Auswahl auf der Geo-Map.", + "scannerSuccess": "Scanner Erfolg", + "scannerSuccessDesc": "Auslöser bei erfolgreichem Scan.", + "scannerError": "Scanner Fehler", + "scannerErrorDesc": "Auslöser bei einem Scannerfehler.", + "chartZoom": "Diagramm Zoomen", + "chartZoomDesc": "Auslöser beim Zoomen eines Diagramms.", + "chartHover": "Diagramm Hover", + "chartHoverDesc": "Auslöser beim Hover über einem Diagramm.", + "chartSelect": "Diagramm Auswählen", + "chartSelectDesc": "Auslöser bei der Auswahl eines Diagramms.", + "chartDeselect": "Diagramm Abwählen", + "chartDeselectDesc": "Auslöser beim Abwählen eines Diagramms.", + "close": "Schließen", + "closeDesc": "Auslöser beim Schließen.", + "parse": "Parsen", + "parseDesc": "Auslöser beim Parsen.", + "success": "Erfolg", + "successDesc": "Auslöser bei Erfolg.", + "delete": "Löschen", + "deleteDesc": "Auslöser beim Löschen.", + "mention": "Erwähnung", + "mentionDesc": "Auslöser bei einer Erwähnung.", + "search": "Suche", + "searchDesc": "Auslöser für die Suche", + "selectedChange": "Auswahl ändern", + "selectedChangeDesc": "Auslöser bei geänderter Auswahl", + "clickExtra": "Klicken Sie auf Aktion", + "clickExtraDesc": "Auslöser bei Klick auf Extra-Element", + "start": "Start", + "startDesc": "Auslöser beim Start", + "resume": "Lebenslauf", + "resumeDesc": "Auslöser im Lebenslauf", + "countdown": "Countdown", + "countdownDesc": "Auslöser am Ende des Countdowns", + "reset": "Zurücksetzen endet", + "resetDesc": "Auslöser bei Reset Timer", + "refresh": "Refresh", + "refreshDesc": "Auslöser beim Aktualisieren", + }, + "style": { + ...en.style, + + "boxShadowColor": "Schattenfarbe", + "boxShadow": "Box Schatten", + "opacity": "Deckkraft", + "animation": "Animation", + "animationIterationCount": "Animation Iterationszahl", + "animationDelay": "Animation Verzögerung", + "animationDuration": "Animation Dauer", + "resetTooltip": "Stile zurücksetzen. Lösche das Eingabefeld, um einen einzelnen Stil zurückzusetzen.", + "textColor": "Textfarbe", + "contrastText": "Kontrastreiche Textfarbe", + "generated": "Generiert", + "customize": "Anpassen", + "staticText": "Statischer Text", + "accent": "Akzent", + "validate": "Validierungsmeldung", + "border": "Randfarbe", + "borderRadius": "Randradius", + "borderWidth": "Randbreite", + "borderStyle": "Randstil", + "background": "Hintergrund", + "headerBackground": "Kopfzeilenhintergrund", + "siderBackground": "Seitenleisten-Hintergrund", + "footerBackground": "Fußzeilenhintergrund", + "fill": "Füllung", + "track": "Spur", + "links": "Verknüpfungen", + "thumb": "Schiebereglergriff", + "thumbBorder": "Schieberegler-Rand", + "checked": "Aktiviert", + "unchecked": "Nicht aktiviert", + "handle": "Griff", + "tags": "Etiketten", + "tagsText": "Etiketten-Text", + "multiIcon": "Mehrfachauswahl-Symbol", + "tabText": "Tab-Text", + "tabAccent": "Tab-Akzent", + "checkedBackground": "Aktivierter Hintergrund", + "uncheckedBackground": "Deaktivierter Hintergrund", + "uncheckedBorder": "Deaktivierter Rand", + "indicatorBackground": "Indikator-Hintergrund", + "tableCellText": "Zellentext", + "selectedRowBackground": "Ausgewählter Zeilenhintergrund", + "hoverRowBackground": "Zeilen-Hover-Hintergrund", + "hoverBackground": "Hover-Hintergrund", + "textTransform": "Textumwandlung", + "textDecoration": "Textdekoration", + "alternateRowBackground": "Alternierender Zeilenhintergrund", + "tableHeaderBackground": "Tabellenkopf-Hintergrund", + "tableHeaderText": "Tabellenkopf-Text", + "toolbarBackground": "Werkzeugleisten-Hintergrund", + "toolbarText": "Werkzeugleisten-Text", + "pen": "Stift", + "footerIcon": "Fußzeilen-Symbol", + "tips": "Tipps", + "margin": "Außenabstand", + "padding": "Innenabstand", + "marginLeft": "Linker Außenabstand", + "marginRight": "Rechter Außenabstand", + "marginTop": "Oberer Außenabstand", + "marginBottom": "Unterer Außenabstand", + "containerHeaderPadding": "Kopfzeilen-Innenabstand", + "containerFooterPadding": "Fußzeilen-Innenabstand", + "containerSiderPadding": "Seitenleisten-Innenabstand", + "containerBodyPadding": "Körper-Innenabstand", + "minWidth": "Mindestbreite", + "aspectRatio": "Seitenverhältnis", + "text": "Text", + "textSize": "Textgröße", + "textWeight": "Textgewicht", + "fontFamily": "Schriftart", + "fontStyle": "Schriftstil", + "backgroundImage": "Hintergrundbild", + "backgroundImageRepeat": "Hintergrundbild-Wiederholung", + "backgroundImageSize": "Hintergrundbild-Größe", + "backgroundImagePosition": "Hintergrundbild-Position", + "backgroundImageOrigin": "Hintergrundbild-Ursprung", + "headerBackgroundImage": "Kopfzeilen-Hintergrundbild", + "headerBackgroundImageRepeat": "Kopfzeilen-Bildwiederholung", + "headerBackgroundImageSize": "Kopfzeilen-Bildgröße", + "headerBackgroundImagePosition": "Kopfzeilen-Bildposition", + "headerBackgroundImageOrigin": "Kopfzeilen-Bildursprung", + "footerBackgroundImage": "Fußzeilen-Hintergrundbild", + "footerBackgroundImageRepeat": "Fußzeilen-Bildwiederholung", + "footerBackgroundImageSize": "Fußzeilen-Bildgröße", + "footerBackgroundImagePosition": "Fußzeilen-Bildposition", + "footerBackgroundImageOrigin": "Fußzeilen-Bildursprung", + "rotation": "Drehung", + "alternateBackground": "Alternative Hintergrundfarbe", + "headerText": "Textfarbe der Kopfzeile", + "labelColor": "Etikett Farbe", + "label": "Etikett Farbe", + "lineHeight": "Höhe der Linie", + "subTitleColor": "Untertitel Farbe", + "titleText": "Titel Farbe", + "success": "Erfolg Farbe", + "siderBackgroundImage": "Sider Hintergrundbild", + "siderBackgroundImageRepeat": "Sider Hintergrundbild Wiederholung", + "siderBackgroundImageSize": "Sider Hintergrundbild Größe", + "siderBackgroundImagePosition": "Sider Hintergrundbild Position", + "siderBackgroundImageOrigin": "Sider Hintergrundbild Ursprung", + "activeBackground": "Aktive Hintergrundfarbe", + "labelBackground": "Hintergrundfarbe des Etiketts", + + "radiusTip": "Legt den Radius der Ecken des Elements fest. Beispiel: 5px, 50% oder 1em.", + "gapTip": "Legt den Abstand zwischen Zeilen und Spalten in einem Raster- oder Flexcontainer fest. Beispiel: 10px, 1rem oder 5%.", + "cardRadiusTip": "Definiert den Eckenradius für Kartenkomponenten. Beispiel: 10px, 15px.", + "borderWidthTip": "Legt die Breite des Randes des Elements fest. Beispiel: 1px, 0.5em oder dünn.", + "borderStyleTip": "Legt den Stil des Randes fest. Beispiel: solid, dashed, dotted oder none.", + "marginTip": "Definiert den äußeren Abstand um ein Element. Beispiel: 10px, 2em oder auto. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 0px 1px 5px 2px.", + "directionTip": "Legt die Richtung des Layouts fest. Beispiel: row, column oder row-reverse.", + "detailSizeTip": "Definiert die Größe bestimmter Details im Layout. Beispiel: 10px, 2em oder 80%.", + "chartOpacityTip": "Legt die Deckkraft des Diagramms fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent).", + "chartBoxShadowTip": "Definiert den Schatten, den das Diagramm wirft. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Legt den Stil der Diagrammrand fest. Beispiel: solid, dashed oder dotted.", + "chartBorderRadiusTip": "Definiert den Eckenradius der Diagrammgrenze. Beispiel: 10px, 20%.", + "chartBorderWidthTip": "Legt die Breite der Diagrammgrenze fest. Beispiel: 2px, 0.5em.", + "chartTextSizeTip": "Legt die Schriftgröße des Diagrammtexts fest. Beispiel: 16px, 1em, 120%.", + "chartTextWeightTip": "Legt die Schriftstärke des Diagrammtexts fest. Beispiel: normal, bold oder 700.", + "chartFontFamilyTip": "Legt die Schriftart für den Diagrammtext fest. Beispiel: Arial, Helvetica oder 'Times New Roman'.", + "chartFontStyleTip": "Legt den Schriftstil des Diagrammtexts fest. Beispiel: normal, italic oder oblique.", + "animationIterationCountTip": "Legt fest, wie oft eine Animation ausgeführt werden soll. Beispiel: infinite, 1 oder 3.", + "opacityTip": "Legt den Transparenzgrad des Elements fest. Beispiel: 1 (undurchsichtig), 0.5 (50% transparent), 0 (unsichtbar).", + "boxShadowColorTip": "Legt die Farbe des Schattens fest. Beispiel: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Legt die Hintergrundfarbe des Diagramms fest. Beispiel: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Definiert die Farbverläufe für den Diagrammhintergrund. Beispiel: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Legt die Schattenfarbe des Diagramms fest. Beispiel: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Definiert die Farbe der Diagrammgrenze. Beispiel: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Legt die Farbe des Diagrammtexts fest. Beispiel: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Definiert den Schatten, der von einem Element geworfen wird. Beispiel: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Legt die Verzögerung vor Beginn der Animation fest. Beispiel: 1s, 500ms, 0.", + "animationDurationTip": "Legt die Dauer der Animation fest. Beispiel: 2s, 3s, 500ms.", + "paddingTip": "Definiert den inneren Abstand innerhalb eines Elements. Beispiel: 10px, 2em, 5%. Kann kombiniert werden: 0px 20px oder für alle 4 Seiten: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Definiert den Innenabstand für den Container-Header. Beispiel: 10px, 1rem.", + "containerSiderPaddingTip": "Definiert den Innenabstand für die Container-Seitenleiste. Beispiel: 8px, 1em.", + "containerFooterPaddingTip": "Definiert den Innenabstand für den Container-Footer. Beispiel: 12px, 1rem.", + "containerBodyPaddingTip": "Definiert den Innenabstand für den Container-Body. Beispiel: 15px, 2em.", + "textSizeTip": "Legt die Schriftgröße des Textes fest. Beispiel: 14px, 1.2em, 110%.", + "textWeightTip": "Definiert die Schriftstärke des Textes. Beispiel: normal, bold, 400.", + "fontFamilyTip": "Legt die Schriftart des Textes fest. Beispiel: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Definiert die Verzierung des Textes. Beispiel: underline, line-through, none.", + "textTransformTip": "Legt die Groß- und Kleinschreibung des Textes fest. Beispiel: uppercase, lowercase, capitalize.", + "fontStyleTip": "Definiert den Schriftstil des Textes. Beispiel: normal, italic, oblique.", + "backgroundImageTip": "Legt das Hintergrundbild eines Elements fest. Beispiel: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Legt das Hintergrundbild des Headers fest. Beispiel: url('header.jpg').", + "footerBackgroundImageTip": "Legt das Hintergrundbild des Footers fest. Beispiel: url('footer.jpg').", + "backgroundImageRepeatTip": "Definiert, wie das Hintergrundbild wiederholt wird. Beispiel: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Definiert, wie das Header-Hintergrundbild wiederholt wird. Beispiel: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Definiert, wie das Footer-Hintergrundbild wiederholt wird. Beispiel: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Definiert die Größe des Hintergrundbilds. Beispiel: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Legt die Position des Hintergrundbilds fest. Beispiel: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Legt den Bereich fest, in dem das Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Header-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Legt den Bereich fest, in dem das Footer-Hintergrundbild positioniert wird. Beispiel: padding-box, border-box, content-box.", + "rotationTip": "Legt den Rotationswinkel des Elements fest. Beispiel: 45deg, 90deg, -180deg.", + "lineHeightTip": "Legt die Höhe einer Textzeile fest. Beispiel: 1.5, 2, 120%." + + }, + "export": { + ...en.export, + + "hiddenDesc": "Wenn true, wird die Komponente ausgeblendet", + "disabledDesc": "Wenn true, ist die Komponente deaktiviert und nicht interaktiv", + "visibleDesc": "Wenn true, ist die Komponente sichtbar", + "inputValueDesc": "Aktueller Wert der Eingabe", + "invalidDesc": "Zeigt an, ob der Wert ungültig ist", + "placeholderDesc": "Platzhaltertext, wenn kein Wert eingestellt ist", + "requiredDesc": "Wenn true, ist ein gültiger Wert erforderlich", + "submitDesc": "Formular abschicken", + "richTextEditorValueDesc": "Aktueller Inhalt des Text-Editors", + "richTextEditorReadOnlyDesc": "Wenn true, ist der Editor schreibgeschützt", + "richTextEditorHideToolBarDesc": "Wenn true, wird die Symbolleiste ausgeblendet", + "jsonEditorDesc": "Aktuelle JSON-Daten", + "sliderValueDesc": "Aktuell ausgewählter Schieberegler Wert", + "sliderMaxValueDesc": "Maximaler Wert des Schiebereglers", + "sliderMinValueDesc": "Mindestwert des Schiebereglers", + "sliderStartDesc": "Wert des gewählten Startpunkts", + "sliderEndDesc": "Wert des ausgewählten Endpunkts", + "ratingValueDesc": "Aktuell ausgewählte Bewertung", + "ratingMaxDesc": "Maximaler Wert der Bewertung", + "datePickerValueDesc": "Aktuell ausgewähltes Datum", + "datePickerFormattedValueDesc": "Ausgewähltes Datum formatiert", + "datePickerTimestampDesc": "Zeitstempel des ausgewählten Datums", + "dateRangeStartDesc": "Startdatum des Bereichs", + "dateRangeEndDesc": "Enddatum des Bereichs", + "dateRangeStartTimestampDesc": "Zeitstempel des Startdatums", + "dateRangeEndTimestampDesc": "Zeitstempel des Enddatums", + "dateRangeFormattedValueDesc": "Formatierter Datumsbereich", + "dateRangeFormattedStartValueDesc": "Formatiertes Startdatum", + "dateRangeFormattedEndValueDesc": "Formatiertes Enddatum", + "timePickerValueDesc": "Aktuell gewählte Zeit", + "timePickerFormattedValueDesc": "Formatierte ausgewählte Zeit", + "timeRangeStartDesc": "Startzeit des Zeitbereichs", + "timeRangeEndDesc": "Endzeit des Zeitbereichs", + "timeRangeFormattedValueDesc": "Formatierter Zeitbereich", + "timeRangeFormattedStartValueDesc": "Formatierte Startzeit des Zeitbereichs", + "timeRangeFormattedEndValueDesc": "Formatierte Endzeit des Zeitbereichs", + "timeZone": "Zeitzone", + "timeZoneDesc": "Zeitzone des ausgewählten Datums", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Bitte gib eine gültige E-Mail Adresse ein", + "url": "Bitte gib eine gültige URL ein", + "regex": "Die Eingabe muss zum regulären Ausdruck passen.", + "maxLength": "Zu viele Zeichen, aktuell: {length}, maximal: {maxLength}", + "minLength": "Nicht genug Zeichen, aktuell: {length}, minimal: {minLength}", + "maxValue": "Wert überschreitet Maximum, aktuell: {value}, Maximum: {max}", + "minValue": "Wert unter Minimum, aktuell: {value}, Minimum: {min}", + "maxTime": "Zeit überschreitet Maximum, aktuell: {time}, Maximum: {maxTime}", + "minTime": "Zeit unter Minimum, aktuell: {time}, Minimum: {minTime}", + "maxDate": "Datum überschreitet Maximum, aktuell: {date}, Maximum: {maxDate}", + "minDate": "Datum unter Minimum, aktuell: {date}, Minimum: {minDate}", + }, + "query": { + ...en.query, + + "noQueries": "Keine Datenabfragen verfügbar.", + "queryTutorialButton": "Ansicht {value} Dokumente", + "datasource": "Deine Datenquellen", + "newDatasource": "Neue Datenquelle", + "generalTab": "Allgemein", + "notificationTab": "Benachrichtigung", + "advancedTab": "Erweiterte Einstellungen", + "showFailNotification": "Benachrichtigung bei Misserfolg anzeigen", + "failCondition": "Fehlerbedingungen für Misserfolg", + "failConditionTooltip1": "Passe die Fehlerbedingungen und die entsprechenden Benachrichtigungen an.", + "failConditionTooltip2": "Wenn eine Bedingung erfüllt ist, wird die Abfrage als fehlgeschlagen markiert und die entsprechende Benachrichtigung ausgelöst.", + "showSuccessNotification": "Benachrichtigung bei Erfolg anzeigen", + "successMessageLabel": "Erfolgsmeldung", + "successMessage": "Datenabfrage ist erfolgreich gelaufen", + "notifyDuration": "Dauer", + "notifyDurationTooltip": "Dauer der Benachrichtigung. Die Zeiteinheit kann \\'s\\' (Sekunde, Standard) oder \\'ms\\' (Millisekunde) sein. Der Standardwert ist {default}s. Das Maximum ist {max}s.", + "successMessageWithName": "{name} Lauf erfolgreich", + "failMessageWithName": "{name} Lauf fehlgeschlagen: {result}", + "showConfirmationModal": "Bestätigungsmodal vor der Ausführung anzeigen", + "confirmationMessageLabel": "Bestätigungsnachricht", + "confirmationMessage": "Bist du sicher, dass du diese Datenabfrage ausführen willst?", + "newQuery": "Neue Datenabfrage", + "newFolder": "Neue Mappe", + "recentlyUsed": "Kürzlich verwendet", + "folder": "Ordner", + "folderNotEmpty": "Der Ordner ist nicht leer", + "dataResponder": "Daten Aktor", + "tempState": "Temporärer Zustand", + "transformer": "Daten Transformator", + "quickRestAPI": "HTTP REST-Abfrage", + "quickStreamAPI": "Daten Stream-Abfrage", + "quickGraphql": "GraphQL-Abfrage", + "lowcoderAPI": "Lowcoder-API", + "executeJSCode": "JavaScript-Code", + "importFromQueryLibrary": "von Abfragebibliothek", + "importFromFile": "Aus Datei importieren", + "triggerType": "Ausgelöst, wenn...", + "triggerTypeAuto": "Eingaben ändern sich oder nach dem Laden der Seite", + "triggerTypePageLoad": "Nach dem Laden der Anwendung (Seite)", + "triggerTypeManual": "Manuell auslösen", + "triggerTypeInputChange": "Wenn sich Eingaben ändern", + "triggerTypeQueryExec": "Nach Ausführung einer Daten-Abfrage", + "triggerTypeTimeout": "Nach dem Laden der Anwendung (Seite) und Timeout", + "delayTime": "Verzögerungszeit", + "chooseDataSource": "Datenquelle wählen", + "method": "Methode", + "updateExceptionDataSourceTitle": "Fehlerhafte Datenquelle aktualisieren", + "updateExceptionDataSourceContent": "Aktualisiere die folgende Abfrage mit der gleichen Datenquelle:", + "update": "Update", + "disablePreparedStatement": "SQL Prepared Statements deaktivieren", + "disablePreparedStatementTooltip": "Die Deaktivierung von SQL Prepared Statements kann dynamisches SQL erzeugen, erhöht aber das Risiko von SQL-Injection", + "timeout": "Abbruch nach", + "timeoutTooltip": "Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Standardwert: {defaultSeconds} Sekunden. Maximaler Wert: {maxSeconds} Sekunden. Z.B. 300 (d.h. 300ms), 800ms, 5s.", + "periodic": "Diese Datenabfrage regelmäßig ausführen", + "periodicTime": "Zeitraum", + "periodicTimeTooltip": "Zeitraum zwischen aufeinanderfolgenden Ausführungen. Standardeinheit: ms. Unterstützte Eingabeeinheiten: ms, s. Mindestwert: 100 ms. Bei Werten unter 100ms wird die periodische Ausführung deaktiviert. Z.B. 300 (d.h. 300ms), 800ms, 5s.", + "cancelPrevious": "Ignoriere die Ergebnisse früherer unvollendeter Datenabfragen", + "cancelPreviousTooltip": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen unvollständigen Datenabfragen ignoriert, wenn sie nicht abgeschlossen wurden, und diese ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", + "dataSourceStatusError": "Wenn eine neue Datenabfrage ausgelöst wird, wird das Ergebnis der vorherigen nicht abgeschlossenen Datenabfragen ignoriert, und die ignorierten Datenabfragen lösen die Ereignisliste der Abfrage nicht aus.", + "success": "Erfolg", + "fail": "Fehler", + "successDesc": "Ausgelöst, wenn die Ausführung erfolgreich ist", + "failDesc": "Ausgelöst, wenn die Ausführung fehlschlägt", + "fixedDelayError": "Abfrage nicht ausgeführt", + "execSuccess": "Erfolgreich gelaufen", + "execFail": "Lauf fehlgeschlagen", + "execIgnored": "Die Ergebnisse dieser Datenabfrage wurden ignoriert", + "deleteSuccessMessage": "Erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden", + "dataExportDesc": "Daten, die durch die aktuelle Datenabfrage erhalten wurden", + "codeExportDesc": "Aktueller Query Status Code", + "successExportDesc": "Ob die aktuelle Datenabfrage erfolgreich ausgeführt wurde", + "messageExportDesc": "Von der aktuellen Datenabfrage zurückgegebene Informationen", + "extraExportDesc": "Andere Daten in der aktuellen Datenabfrage", + "isFetchingExportDesc": "Ist die aktuelle Datenabfrage in der Verarbeitung?", + "runTimeExportDesc": "Aktuelle Datenabfrage-Ausführungszeit (ms)", + "latestEndTimeExportDesc": "Letzte Laufzeit", + "triggerTypeExportDesc": "Auslöser Typ", + "chooseResource": "Wähle eine Ressource", + "createDataSource": "Eine neue Datenquelle erstellen", + "editDataSource": "Bearbeiten", + "datasourceName": "Datenquelle Name", + "datasourceNameRuleMessage": "Bitte gib einen Namen für die Datenquelle ein", + "generalSetting": "Allgemeine Einstellungen", + "advancedSetting": "Erweiterte Einstellungen", + "port": "Hafen", + "portRequiredMessage": "Bitte einen Port eingeben", + "portErrorMessage": "Bitte gib einen korrekten Port ein", + "connectionType": "Verbindungstyp", + "regular": "Regulär", + "host": "Gastgeber", + "hostRequiredMessage": "Bitte gib einen Host-Domänennamen oder eine IP-Adresse ein", + "userName": "Benutzer Name", + "password": "Passwort", + "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", + "uriRequiredMessage": "Bitte gib eine URI ein", + "urlRequiredMessage": "Bitte gib eine URL ein", + "uriErrorMessage": "Bitte gib eine korrekte URI ein", + "urlErrorMessage": "Bitte gib eine korrekte URL ein", + "httpRequiredMessage": "Bitte gib http:// oder https:// ein.", + "databaseName": "Datenbank Name", + "databaseNameRequiredMessage": "Bitte gib einen Datenbanknamen ein", + "useSSL": "SSL verwenden", + "userNameRequiredMessage": "Bitte gib deinen User-Namen ein", + "passwordRequiredMessage": "Bitte gib dein Passwort ein", + "authentication": "Authentifizierung", + "authenticationType": "Authentifizierung Typ", + "sslCertVerificationType": "SSL-Zertifikat-Verifizierung", + "sslCertVerificationTypeDefault": "CA-Zertifikat verifizieren", + "sslCertVerificationTypeSelf": "Selbstsigniertes Zertifikat verifizieren", + "sslCertVerificationTypeDisabled": "Deaktiviert", + "selfSignedCert": "Selbstsigniertes Zertifikat", + "selfSignedCertRequireMsg": "Bitte gib dein Zertifikat ein", + "enableTurnOffPreparedStatement": "SQL Prepared Statements für Abfragen aktivieren", + "enableTurnOffPreparedStatementTooltip": "Du kannst SQL Prepared Statements auf der Registerkarte \"Erweitert\" der Abfrage aktivieren oder deaktivieren.", + "serviceName": "Dienst Name", + "serviceNameRequiredMessage": "Bitte gib deinen Dienstnamen ein", + "useSID": "SID verwenden", + "connectSuccessfully": "Verbindung erfolgreich", + "saveSuccessfully": "Erfolgreich gerettet", + "database": "Datenbank", + "cloudHosting": "Der in der Cloud gehostete Lowcoder kann nicht auf lokale Dienste mit 127.0.0.1 oder localhost zugreifen. Versuche, dich mit öffentlichen Netzwerkdatenquellen zu verbinden oder verwende einen Reverse Proxy für private Dienste.", + "notCloudHosting": "Für den Einsatz von Docker-Hosts verwendet Lowcoder Bridge-Netzwerke, daher sind 127.0.0.1 und localhost als Hostadressen ungültig. Für den Zugriff auf Datenquellen auf lokalen Rechnern siehe", + "howToAccessHostDocLink": "Wie man auf die Host-API/DB zugreift", + "returnList": "Rückgabe Liste", + "chooseDatasourceType": "Datenquellentyp auswählen", + "viewDocuments": "Dokumente ansehen", + "testConnection": "Test Verbindung", + "save": "Speichern", + "whitelist": "Whitelist", + "whitelistTooltip": "Füge die IP-Adressen von Lowcoder nach Bedarf zu deiner Datenquellen-Zulassungsliste hinzu.", + "address": "Adresse: ", + "nameExists": "Name {name} existiert bereits", + "jsQueryDocLink": "Über JavaScript Query", + "dynamicDataSourceConfigLoadingText": "Laden einer zusätzlichen Datenquellenkonfiguration...", + "dynamicDataSourceConfigErrText": "Die Konfiguration der zusätzlichen Datenquelle konnte nicht geladen werden.", + "retry": "Wiederholen", + "categoryDatabase": "Datenbank", + "categoryBigdata": "Big Data", + "categoryAi": "KI", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "App-Entwicklung", + "categoryWorkflow": "Arbeitsablauf", + "categoryMessaging": "Messaging", + "categoryAssets": "Assets & Speicher", + "categoryProjectManagement": "Projektmanagement", + "categoryCrm": "CRM", + "categoryEcommerce": "E-Commerce", + "categoryWebscrapers": "Web-Scraper & Open Data", + "categoryDocumentHandling": "Bericht & Dokumentenerstellung", + "categoryRPA": "Roboter Prozess Automatisierung", + "componentsUsingQueryTitle": "Abfrageverwendung", + "componentsUsingQuery": "Wo wird diese Abfrage verwendet", + "variables": "Variablen" + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Schlüssel-Werte-Paare", + "object": "Objekt", + "allowMultiModify": "Mehrzeilige Änderungen zulassen", + "allowMultiModifyTooltip": "Wenn diese Option ausgewählt ist, werden alle Zeilen, die die Bedingungen erfüllen, bearbeitet. Andernfalls wird nur die erste Zeile, die die Bedingungen erfüllt, bearbeitet.", + "array": "Array", + "insertList": "Liste einfügen", + "insertListTooltip": "Werte werden eingefügt, wenn sie nicht existieren", + "filterRule": "Filter-Regel", + "updateList": "Liste aktualisieren", + "updateListTooltip": "Vorhandene Werte können durch die gleichen Werte der Einfügeliste überschrieben werden", + "sqlMode": "SQL-Mode", + "guiMode": "GUI-Mode", + "operation": "Operation", + "insert": "Einfügen", + "upsert": "Einfügen, aber aktualisieren, wenn es einen Konflikt gibt", + "update": "Update", + "delete": "Löschen", + "bulkInsert": "Stapel Einfügen", + "bulkUpdate": "Stapel Aktualisieren", + "table": "Tabelle", + "primaryKeyColumn": "Primärschlüsselspalte", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Roh-Abfragebefehl", + "queryTutorialButton": "Elasticsearch API Dokumente anzeigen", + "request": "Abfrage", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Zeilenindex", + "spreadsheetId": "Tabellenkalkulations-ID", + "sheetName": "Tabellen-Blatt Name", + "readData": "Daten lesen", + "appendData": "Zeile anhängen", + "updateData": "Zeile aktualisieren", + "deleteData": "Zeile löschen", + "clearData": "Reihe löschen", + "serviceAccountRequireMessage": "Bitte gib dein Servicekonto ein", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Sortieren", + "sortPlaceholder": "Platzhalter", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Exportieren nach JSON", + "noInput": "Die aktuelle Abfrage hat keine Eingabe", + "inputName": "Name", + "inputDesc": "Beschreibung", + "emptyInputs": "Keine Eingaben", + "clickToAdd": "Hinzufügen", + "chooseQuery": "Abfrage wählen", + "viewQuery": "Ansicht Abfrage", + "chooseVersion": "Version wählen", + "latest": "Neueste", + "publish": "Veröffentlichen", + "historyVersion": "Historische Version", + "deleteQueryLabel": "Abfrage löschen", + "deleteQueryContent": "Die Abfrage kann nach dem Löschen nicht wiederhergestellt werden. Die Abfrage löschen?", + "run": "Lauf", + "readOnly": "Nur lesen", + "exit": "Abbruch", + "recoverAppSnapshotContent": "Die aktuelle Abfrage zur Version {version} wiederherstellen", + "searchPlaceholder": "Suchabfrage", + "allQuery": "Alle Abfragen", + "deleteQueryTitle": "Abfrage löschen", + "unnamed": "Unbenannt", + "publishNewVersion": "Neue Version veröffentlichen", + "publishSuccess": "Erfolgreich veröffentlicht", + "version": "Version", + "desc": "Beschreibung", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Siehe ", + "extParamsTooltip": "Zusätzliche Verbindungsparameter konfigurieren", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Abfrage Arbeitsbereich Benutzer", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Roher Befehl", + "command": "Befehl", + "queryTutorial": "Redis-Befehlsdokumente anzeigen", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Wenn {type} ausgewählt ist, sollte das Werteformat {object} sein. Beispiel: {example}", + "text": "Text", + "file": "Datei", + "extraBodyTooltip": "Schlüsselwerte im Extra Body werden an den Body mit den Datentypen JSON oder Form Data angehängt", + "forwardCookies": "Cookies weiterleiten", + "forwardAllCookies": "Alle Cookies weiterleiten", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Anhang", + "attachmentTooltip": "Kann mit der Datei-Upload-Komponente verwendet werden, die Daten müssen konvertiert werden in: ", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Sender", + "recipient": "Empfänger", + "carbonCopy": "Durchschlag", + "blindCarbonCopy": "Blindkopie", + "subject": "Thema", + "content": "Inhalt", + "contentTooltip": "Unterstützt die Eingabe von Text oder HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Dashboards & Berichte", + "layout": "Layout und Navigation", + "forms": "Datenerhebung & Formulare", + "collaboration": "Meetings & Zusammenarbeit", + "projectmanagement": "Projektmanagement", + "scheduling": "Kalender & Terminplanung", + "documents": "Dokumenten- und Dateiverwaltung", + "itemHandling": "Handhabung von Inventar", + "multimedia": "Multimedia und Animation", + "integration": "Integration & Erweiterung", + "legacy" : "Älter & Auslaufend" + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Vorschlag Feld", + "autoCompleteCompDesc": "Ein Eingabefeld, das Vorschläge während der Eingabe anbietet und dadurch die Benutzererfahrung und Genauigkeit verbessert.", + "autoCompleteCompKeywords": "Vorschläge, Autovervollständigung, Tippen, Eingabe", + "inputCompName": "Eingabe Feld", + "inputCompDesc": "Ein grundlegendes Texteingabefeld, das es Benutzern ermöglicht, Text einzugeben und zu bearbeiten.", + "inputCompKeywords": "Text, Eingabe, Feld, Bearbeiten", + "textAreaCompName": "Text Bereich Feld", + "textAreaCompDesc": "Ein mehrzeiliges Texteingabefeld für längere Inhalte wie Kommentare oder Beschreibungen.", + "textAreaCompKeywords": "mehrzeilig, Textbereich, Eingabe, Text", + "passwordCompName": "Passwort Feld", + "passwordCompDesc": "Ein sicheres Eingabefeld für Passwörter, das Zeichen aus Datenschutzgründen maskiert.", + "passwordCompKeywords": "Passwort, Sicherheit, Eingabe, versteckt", + "richTextEditorCompName": "Text Editor", + "richTextEditorCompDesc": "Ein fortgeschrittener Texteditor, der reichhaltige Formatierungsoptionen wie Fett, Kursiv und Listen unterstützt.", + "richTextEditorCompKeywords": "Editor, Text, Formatierung, Rich Content", + "numberInputCompName": "Zahlen Feld", + "numberInputCompDesc": "Ein Eingabefeld speziell für numerische Eingaben mit Optionen zum Erhöhen und Verringern der Werte.", + "numberInputCompKeywords": "Nummer, Eingabe, Inkrement, Dekrement", + "sliderCompName": "Regler", + "sliderCompDesc": "Eine grafische Schiebereglerkomponente zur Auswahl eines Wertes oder Bereichs innerhalb einer festgelegten Skala.", + "sliderCompKeywords": "Schieberegler, Bereich, Eingabe, grafisch", + "rangeSliderCompName": "Bereich Regler", + "rangeSliderCompDesc": "Ein Schieberegler mit zwei Griffen zur Auswahl eines Wertebereichs, nützlich für Filterungen oder zum Festlegen von Grenzwerten.", + "rangeSliderCompKeywords": "Bereich, Schieberegler, Zweigriff, Filter", + "ratingCompName": "Bewertung", + "ratingCompDesc": "Eine Komponente zur Erfassung von Benutzerbewertungen, dargestellt durch Sterne.", + "ratingCompKeywords": "Bewertung, Sterne, Rückmeldung, Eingabe", + "switchCompName": "Schalter", + "switchCompDesc": "Ein Umschalter für Ein/Aus- oder Ja/Nein-Entscheidungen.", + "switchCompKeywords": "Umschalter, Schalter, ein/aus, Steuerung", + "selectCompName": "Auswahl", + "selectCompDesc": "Ein Dropdown-Menü zur Auswahl aus einer Liste von Optionen.", + "selectCompKeywords": "Dropdown, auswählen, Optionen, Menü", + "multiSelectCompName": "Mehrfach Auswahl", + "multiSelectCompDesc": "Eine Komponente, die die Auswahl mehrerer Elemente aus einer Dropdown-Liste ermöglicht.", + "multiSelectCompKeywords": "Mehrfachauswahl, mehrere, Dropdown, Auswahlmöglichkeiten", + "cascaderCompName": "Kaskade Auswahl", + "cascaderCompDesc": "Ein mehrstufiges Dropdown für die hierarchische Auswahl von Daten, beispielsweise bei der Standortauswahl.", + "cascaderCompKeywords": "Kaskadierer, hierarchisch, Dropdown, Stufen", + "checkboxCompName": "Kontrollkästchen", + "checkboxCompDesc": "Ein Standardkästchen für Optionen, die ausgewählt oder abgewählt werden können.", + "checkboxCompKeywords": "Kästchen, Optionen, auswählen, umschalten", + "radioCompName": "Options Feld", + "radioCompDesc": "Optionsfelder zur Auswahl einer Option aus einem Set, wobei nur eine Wahl erlaubt ist.", + "radioCompKeywords": "Optionsfeld, Schaltflächen, auswählen, Einzelwahl", + "segmentedControlCompName": "Segmente", + "segmentedControlCompDesc": "Eine Steuerung mit segmentierten Optionen zum schnellen Wechsel zwischen mehreren Auswahlmöglichkeiten.", + "segmentedControlCompKeywords": "segmentiert, Steuerung, wechseln, Optionen", + "stepControlCompName": "Schritte", + "stepControlCompDesc": "Eine Steuerung mit Schrittoptionen, die visuell geführte Schritte für Anwendungen wie Formulare oder Assistenten bietet.", + "stepControlCompKeywords": "Schritte, Steuerung, wechseln, Optionen", + "fileUploadCompName": "Upload", + "fileUploadCompDesc": "Eine Komponente zum Hochladen von Dateien mit Unterstützung für Drag-and-Drop und Dateiauswahl.", + "fileUploadCompKeywords": "Datei, hochladen, ziehen und ablegen, auswählen", + "dateCompName": "Datum Auswahl", + "dateCompDesc": "Eine Datumsauswahlkomponente zum Auswählen von Daten aus einem Kalenderinterface.", + "dateCompKeywords": "Datum, Auswähler, Kalender, auswählen", + "dateRangeCompName": "Datum Bereich Auswahl", + "dateRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitraums, nützlich für Buchungssysteme oder Filter.", + "dateRangeCompKeywords": "Datumsbereich, auswählen, Buchung, filtern", + "timeCompName": "Zeit Auswahl", + "timeCompDesc": "Eine Zeitwahlkomponente zur Auswahl spezifischer Tageszeiten.", + "timeCompKeywords": "Zeit, Auswähler, auswählen, Uhr", + "timeRangeCompName": "Zeitraum Auswahl", + "timeRangeCompDesc": "Eine Komponente zur Auswahl eines Zeitintervalls, oft verwendet in Planungsanwendungen.", + "timeRangeCompKeywords": "Zeitraum, auswählen, Planung, Dauer", + "buttonCompName": "Button", + "buttonCompDesc": "Eine vielseitige Knopfkomponente für das Absenden von Formularen, das Auslösen von Aktionen oder das Navigieren.", + "buttonCompKeywords": "Knopf, absenden, Aktion, navigieren", + "meetingControlCompName": "Icon Taste", + "meetingCompDesc": "Eine Steuerungstaste mit Icons.", + "meetingCompKeywords": "Steuerung, Taste, Icons", + "linkCompName": "Link zu", + "linkCompDesc": "Eine Komponente zur Anzeige von Hyperlinks für die Navigation oder zum Verlinken auf externe Ressourcen.", + "linkCompKeywords": "Verknüpfung, Hyperlink, Navigation, extern", + "scannerCompName": "Code Scanner", + "scannerCompDesc": "Eine Komponente zum Scannen von Barcodes, QR-Codes und anderen ähnlichen Daten.", + "scannerCompKeywords": "Scanner, Barcode, QR-Code, Scannen", + "dropdownCompName": "Auswahlliste", + "dropdownCompDesc": "Ein Dropdown-Menü zur kompakten Darstellung einer Liste von Optionen.", + "dropdownCompKeywords": "Dropdown, Menü, Optionen, auswählen", + "toggleButtonCompName": "Umschalter", + "toggleButtonCompDesc": "Ein Knopf, der zwischen zwei Zuständen oder Optionen umschalten kann.", + "toggleButtonCompKeywords": "Umschalten, Knopf, Schalter, Zustand", + "textCompName": "Text Anzeige", + "textCompDesc": "Eine einfache Komponente zur Anzeige von statischem oder dynamischem Textinhalt einschließlich Markdown-Formatierung.", + "textCompKeywords": "Text, Anzeige, statisch, dynamisch", + "tableCompName": "Tabelle", + "tableCompDesc": "Eine umfangreiche Tabellenkomponente zur Darstellung von Daten in einem strukturierten Tabellenformat, mit Optionen für Sortierung und Filterung, Baumdatenanzeige und erweiterbare Zeilen.", + "tableCompKeywords": "Tabelle, Daten, Sortierung, Filterung", + "imageCompName": "Bild", + "imageCompDesc": "Eine Komponente zur Anzeige von Bildern, die verschiedene Formate basierend auf URI oder Base64-Daten unterstützt.", + "imageCompKeywords": "Bild, Anzeige, Medium, Base64", + "progressCompName": "Fortschritt Anzeige", + "progressCompDesc": "Ein visueller Indikator des Fortschritts, der typischerweise verwendet wird, um den Fertigstellungsstatus einer Aufgabe zu zeigen.", + "progressCompKeywords": "Fortschritt, Indikator, Status, Aufgabe", + "progressCircleCompName": "Fortschritt Anzeige Kreis", + "progressCircleCompDesc": "Ein kreisförmiger Fortschrittsindikator, der häufig für Ladezustände oder zeitgebundene Aufgaben verwendet wird.", + "progressCircleCompKeywords": "Kreis, Fortschritt, Indikator, Laden", + "fileViewerCompName": "Datei Anzeiger", + "fileViewerCompDesc": "Eine Komponente zur Anzeige verschiedener Dateitypen, einschließlich Dokumente und Bilder.", + "fileViewerCompKeywords": "Datei, Anzeiger, Dokument, Bild", + "dividerCompName": "Trennlinie", + "dividerCompDesc": "Eine visuelle Trennkomponente, die verwendet wird, um Inhalte oder Abschnitte innerhalb eines Layouts zu separieren.", + "dividerCompKeywords": "Trennlinie, Separator, Layout, Gestaltung", + "qrCodeCompName": "QRCode Anzeiger", + "qrCodeCompDesc": "Eine Komponente zur Anzeige von QR-Codes, nützlich für schnelles Scannen und Informationsübertragung.", + "qrCodeCompKeywords": "QR-Code, Scannen, Barcode, Information", + "formCompName": "Formular", + "formCompDesc": "Eine Containerkomponente für die Erstellung strukturierter Formulare mit verschiedenen Eingabetypen.", + "formCompKeywords": "Formular, Eingabe, Container, Struktur", + "jsonSchemaFormCompName": "JSON Schema Formular", + "jsonSchemaFormCompDesc": "Eine dynamische Formularkomponente, die basierend auf einem JSON-Schema generiert wird.", + "jsonSchemaFormCompKeywords": "JSON, Schema, Formular, dynamisch", + "containerCompName": "Container", + "containerCompDesc": "Ein Allzweck-Container für das Layout und die Organisation von UI-Elementen.", + "containerCompKeywords": "Container, Layout, Organisation, UI", + "floatTextContainerCompName": "Text Umbruch Container", + "floatTextContainerCompDesc": "Eine Komponente zur Anzeige von Text, die den Inhalt dynamisch anpasst und einfließen lässt.", + "floatTextContainerCompKeywords": "Container, Layout, Text, fließend", + "collapsibleContainerCompName": "Klapp Container", + "collapsibleContainerCompDesc": "Ein Container, der erweitert oder zusammengeklappt werden kann, ideal für die Verwaltung der Sichtbarkeit von Inhalten.", + "collapsibleContainerCompKeywords": "klappbar, Container, erweitern, zusammenklappen", + "tabbedContainerCompName": "Register Karten Container", + "tabbedContainerCompDesc": "Ein Container mit Registerkartennavigation zur Organisation von Inhalten in separaten Bereichen.", + "tabbedContainerCompKeywords": "Registerkarten, Container, Navigation, Bereiche", + "pageLayoutCompName": "Seiten Layout", + "pageLayoutCompDesc": "Ein Container, der es ermöglicht, ein Layout mit Kopfzeile, Seitenleiste, Fußzeile und Hauptinhaltsbereichen zu erstellen.", + "pageLayoutCompKeywords": "Layout, Container, Navigation, Seiten", + "modalCompName": "Modal", + "modalCompDesc": "Eine Pop-up-Modalkomponente zur Anzeige von Inhalten, Alarmen oder Formularen im Fokus.", + "modalCompKeywords": "Modal, Pop-up, Alarm, Formular", + "listViewCompName": "Listen Ansicht", + "listViewCompDesc": "Eine Komponente zur Anzeige einer Liste von Elementen oder Daten, in die andere Komponenten eingefügt werden können, ähnlich einem Repeater.", + "listViewCompKeywords": "Liste, Ansicht, Anzeige, Repeater", + "gridCompName": "Grid Ansicht", + "gridCompDesc": "Eine flexible Gitterkomponente zur Erstellung strukturierter Layouts mit Zeilen und Spalten, eine Erweiterung der Listenansicht.", + "gridCompKeywords": "Gitter, Layout, Zeilen, Spalten", + "navigationCompName": "Navigation", + "navigationCompDesc": "Eine Navigationskomponente zum Erstellen von Menüs, Brotkrumen oder Tabs für die Seitennavigation.", + "navigationCompKeywords": "Navigation, Menü, Brotkrumen, Tabs", + "iframeCompName": "IFrame", + "iframeCompDesc": "Eine Inline-Frame-Komponente zum Einbetten externer Webseiten und Anwendungen oder Inhalte innerhalb der Anwendung.", + "iframeCompKeywords": "IFrame, einbetten, Webseite, Inhalt", + "customCompName": "Code Komponente", + "customCompDesc": "Eine flexible, programmierbare Komponente zur Erstellung einzigartiger, benutzerdefinierter UI-Elemente, die speziell auf Ihre Bedürfnisse zugeschnitten sind.", + "customCompKeywords": "benutzerdefiniert, benutzerdefiniert, flexibel, programmierbar", + "moduleCompName": "App Modul", + "moduleCompDesc": "Verwenden Sie Module, um Mikro-Apps zu erstellen, die spezifische Funktionen oder Merkmale kapseln. Module können dann eingebettet und in allen Apps wiederverwendet werden.", + "moduleCompKeywords": "Modul, Mikro-App, Funktionalität, wiederverwendbar", + "jsonExplorerCompName": "JSON Anzeiger", + "jsonExplorerCompDesc": "Eine Komponente zum visuellen Erkunden und Interagieren mit JSON-Datenstrukturen.", + "jsonExplorerCompKeywords": "JSON, Explorer, Daten, Struktur", + "jsonEditorCompName": "JSON-Editor", + "jsonEditorCompDesc": "Eine Editor-Komponente zum Erstellen und Modifizieren von JSON-Daten mit Validierung und Syntaxhervorhebung.", + "jsonEditorCompKeywords": "JSON, Editor, modifizieren, validieren", + "treeCompName": "Baum Struktur", + "treeCompDesc": "Eine Baumstrukturkomponente zur Darstellung hierarchischer Daten, wie z. B. Dateisysteme oder Organigramme.", + "treeCompKeywords": "Baum, hierarchisch, Daten, Struktur", + "treeSelectCompName": "Baum Auswahl", + "treeSelectCompDesc": "Eine Auswahlkomponente, die Optionen in einem hierarchischen Baumformat präsentiert, was eine organisierte und verschachtelte Auswahl ermöglicht.", + "treeSelectCompKeywords": "Baum, auswählen, hierarchisch, verschachtelt", + "audioCompName": "Audio", + "audioCompDesc": "Eine Komponente zur Einbettung von Audioinhalten, mit Steuerungselementen für Wiedergabe und Lautstärkeregelung.", + "audioCompKeywords": "Audio, Wiedergabe, Ton, Musik", + "videoCompName": "Video", + "videoCompDesc": "Eine Multimediakomponente zum Einbetten und Abspielen von Videoinhalten, unterstützt verschiedene Formate.", + "videoCompKeywords": "Video, Multimedia, Abspielen, Einbetten", + "drawerCompName": "Schublade", + "drawerCompDesc": "Ein schiebbares Paneel, das für zusätzliche Navigation oder zur Inhaltsanzeige verwendet werden kann, typischerweise vom Bildschirmrand ausgehend.", + "drawerCompKeywords": "Schublade, schiebbar, Paneel, Navigation", + "chartCompName": "Diagramm", + "chartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Graphen.", + "chartCompKeywords": "Diagramm, Graph, Daten, Visualisierung", + "carouselCompName": "Bild Karussell", + "carouselCompDesc": "Eine rotierende Karussellkomponente zur Präsentation von Bildern, Bannern oder Inhaltsfolien.", + "carouselCompKeywords": "Karussell, Bilder, Rotation, Präsentation", + "imageEditorCompName": "Bild Editor", + "imageEditorCompDesc": "Eine interaktive Komponente zur Bearbeitung und Manipulation von Bildern, bietet verschiedene Werkzeuge und Filter.", + "imageEditorCompKeywords": "Bild, Editor, bearbeiten, Werkzeuge", + "mermaidCompName": "Mermaid Diagramm", + "mermaidCompDesc": "Eine Komponente zum Erstellen komplexer Diagramme und Flussdiagramme basierend auf der Mermaid-Syntax.", + "mermaidCompKeywords": "Mermaid, Diagramme, Flussdiagramme, Visualisierung", + "calendarCompName": "Kalender", + "calendarCompDesc": "Eine Kalenderkomponente zur Anzeige von Daten und Ereignissen, mit Ansichtsoptionen für Monat, Woche oder Tag.", + "calendarCompKeywords": "Kalender, Daten, Ereignisse, Planung", + "signatureCompName": "Unterschrift", + "signatureCompDesc": "Eine Komponente zur Erfassung digitaler Unterschriften, nützlich für Genehmigungs- und Verifizierungsprozesse.", + "signatureCompKeywords": "Unterschrift, digital, Genehmigung, Verifizierung", + "jsonLottieCompName": "Lottie Animationen", + "jsonLottieCompDesc": "Eine Komponente zur Anzeige von Lottie-Animationen, bietet leichtgewichtige und skalierbare Animationen basierend auf JSON-Daten.", + "jsonLottieCompKeywords": "Lottie, Animation, JSON, skalierbar", + "timelineCompName": "Zeitleiste", + "timelineCompDesc": "Eine Komponente zur Darstellung von Ereignissen oder Aktionen in einer chronologischen Reihenfolge, visuell dargestellt entlang einer linearen Zeitleiste.", + "timelineCompKeywords": "Zeitleiste, Ereignisse, chronologisch, Geschichte", + "commentCompName": "Kommentar", + "commentCompDesc": "Eine Komponente zum Hinzufügen und Anzeigen von Benutzerkommentaren, unterstützt verschachtelte Antworten und Benutzerinteraktion.", + "commentCompKeywords": "Kommentar, Diskussion, Benutzerinteraktion, Rückmeldung", + "mentionCompName": "Erwähnung", + "mentionCompDesc": "Eine Komponente, die das Erwähnen von Benutzern oder Tags innerhalb von Textinhalten unterstützt, typischerweise verwendet in sozialen Medien oder kollaborativen Plattformen.", + "mentionCompKeywords": "Erwähnung, Tag, Benutzer, soziale Medien", + "responsiveLayoutCompName": "Reaktionsfähiges Layout", + "responsiveLayoutCompDesc": "Eine Layoutkomponente, die entwickelt wurde, um sich verschiedenen Bildschirmgrößen und Geräten anzupassen, und so ein konsistentes Benutzererlebnis sicherstellt.", + "responsiveLayoutCompKeywords": "responsiv, Layout, anpassen, Bildschirmgröße", + "iconCompName": "Icons", + "iconCompDesc": "Verwenden Sie verschiedene Icons, um die visuelle Anziehungskraft und das Benutzererlebnis Ihrer Anwendung zu verbessern.", + "iconCompKeywords": "Icons, Piktogramme, Symbole, Formen", + "tourCompName": "Tour", + "tourCompDesc": "Eine Produktführung zur Anleitung der Benutzer.", + "tourCompKeywords": "Tour, Produktführung, Walkthrough, interaktiver Rundgang", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "Eine Visualisierungskomponente zur Darstellung von Projektmanagement-Zustandsdaten in einem Hill-Chart-Format.", + "hillchartCompKeywords": "projektmanagement, hill chart, visualisierung, daten", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Eine Komponente zur Anzeige interaktiver Karten unter Verwendung von OpenLayers, mit Unterstützung für verschiedene Kartenebenen und Funktionen.", + "openLayersGeoMapCompKeywords": "openlayers, geokarte, interaktiv, kartenebenen", + "chartsGeoMapCompName": "Geo Map Charts", + "chartsGeoMapCompDesc": "Eine Komponente zur Visualisierung von geografischen Daten auf interaktiven Karten mit dynamischen Diagrammen", + "chartsGeoMapCompKeywords": "Geokarte, Diagramme, Visualisierung, geografische Daten", + "bpmnEditorCompName": "BPMN-Editor", + "bpmnEditorCompDesc": "Eine Komponente zum Anzeigen, Erstellen und Bearbeiten von BPMN-Diagrammen, die verschiedene BPMN-Elemente und -Funktionen unterstützt.", + "bpmnEditorCompKeywords": "BPMN, Editor, Diagramme, Elemente, Arbeitsabläufe", + "turnstileCaptchaCompName": "Drehkreuz Captcha", + "turnstileCaptchaCompDesc": "Eine Captcha-Komponente zur Verifizierung von Benutzern gegenüber Bots.", + "turnstileCaptchaCompKeywords": "Captcha, Überprüfung, Identität, Sicherheit", + "pivotTableCompName": "Pivot Table", + "pivotTableCompDesc": "Ein Datenzusammenfassungs- und Analysewerkzeug zum Organisieren und Aggregieren von Daten in einem tabellarischen Format.", + "pivotTableCompKeywords": "Pivot-Tabelle, Daten, Analyse, Aggregation", + "funnelChartCompName": "Trichterdiagramm", + "funnelChartCompDesc": "Ein Visualisierungstool zur Darstellung der fortschreitenden Datenreduzierung in verschiedenen Phasen.", + "funnelChartCompKeywords": "trichterdiagramm, verkauf, umwandlungen, prozess", + "gaugeChartCompName": "Pegelkarte", + "gaugeChartCompDesc": "Ein Diagramm, das Daten als Messwert auf einer Skala anzeigt. Es ist nützlich, um den Status oder das Niveau von etwas anzuzeigen.", + "gaugeChartCompKeywords": "Messdiagramm, Metriken, Leistung, Status", + "sankeyChartCompName": "Sankey-Diagramm", + "sankeyChartCompDesc": "Ein Flussdiagramm, bei dem die Breite der Pfeile proportional zur Flussrate ist. Es dient zur Darstellung von Energie-, Material- oder Kostentransfers.", + "sankeyChartCompKeywords": "Sankey-Diagramm, Fluss, Energie, Kosten", + "candleStickChartCompName": "Candlestick-Diagramm", + "candleStickChartCompDesc": "Eine Art von Finanzdiagramm, das zur Beschreibung von Kursbewegungen eines Wertpapiers, Derivats oder einer Währung verwendet wird.", + "candleStickChartCompKeywords": "Candlestick-Diagramm, Aktien, Handel, Finanzen", + "radarChartCompName": "Radarkarte", + "radarChartCompDesc": "Eine grafische Methode zur Darstellung von multivariaten Daten in Form eines zweidimensionalen Diagramms von drei oder mehr quantitativen Variablen.", + "radarChartCompKeywords": "Radardiagramm, multivariate, Leistungsanalyse", + "heatmapChartCompName": "Heatmap-Diagramm", + "heatmapChartCompDesc": "Eine grafische Darstellung von Daten, bei der einzelne Werte als Farben dargestellt werden.", + "heatmapChartCompKeywords": "Heatmap, Datenvisualisierung, Intensität", + "graphChartCompName": "Graphisches Diagramm", + "graphChartCompDesc": "Ein Diagramm, das ein Netzwerk von Knoten darstellt, die durch Kanten verbunden sind, und das zur Darstellung von Verbindungen und Beziehungen nützlich ist.", + "graphChartCompKeywords": "Diagramm, Netzwerke, Beziehungen, Knoten", + "treeChartCompName": "Baumdiagramm", + "treeChartCompDesc": "Ein Diagramm, das die Hierarchie in einer baumartigen Struktur visuell darstellt und die Beziehungen zwischen den verschiedenen Knoten zeigt.", + "treeChartCompKeywords": "Baumdiagramm, Hierarchie, Organisation", + "treemapChartCompName": "Baumdiagramm", + "treemapChartCompDesc": "Ein Diagramm, das verschachtelte Rechtecke zur proportionalen Darstellung hierarchischer Daten verwendet.", + "treemapChartCompKeywords": "Baumstruktur, Hierarchie, Datenvisualisierung", + "sunburstChartCompName": "Sunburst-Karte", + "sunburstChartCompDesc": "Eine radiale raumfüllende Visualisierungstechnik, die hierarchische Beziehungen durch Schichten eines Kreises veranschaulicht.", + "sunburstChartCompKeywords": "Sonnenglockentabelle, radial, Hierarchie", + "themeriverChartCompName": "Thema Flusskarte", + "themeriverChartCompDesc": "Eine Visualisierung, die einem Flussdiagramm ähnelt, das die Veränderungen eines Datensatzes im Laufe der Zeit über Kategorien hinweg zeigt.", + "themeriverChartCompKeywords": "Thema Fluss, Zeitreihen, Trends", + "basicChartCompName": "Grundlegende Tabelle", + "basicChartCompDesc": "Eine vielseitige Komponente zur Visualisierung von Daten durch verschiedene Arten von Diagrammen und Schaubildern.", + "basicChartCompKeywords": "Diagramm, Grafik, Daten, Visualisierung", + "shapeCompName": "Formen", + "shapeCompDesc": "Eine Sammlung geometrischer Formen zur Verwendung in Diagrammen, Illustrationen und Visualisierungen.", + "shapeCompKeywords": "Formen, geometrisch, Diagramme, Illustrationen", + "ganttChartCompName": "Gantt-Diagramm", + "ganttChartCompDesc": "Ein Diagramm, das einen Projektplan mit den Start- und Endterminen von Elementen und Abhängigkeiten darstellt.", + "ganttChartCompKeywords": "Gantt-Diagramm, Projektmanagement, Zeitplan", + "kanbanCompName" : "Kanban Board (preview!)", + "kanbanCompDesc" : "Eine visuelle Organisationsmethode zur Verwaltung von Aufgaben und Workflows in einem Board mit Spalten und Karten.", + "kanbanCompKeywords" : "kanban, board, workflow, tasks", + "colorPickerCompName": "Farbwähler", + "colorPickerCompDesc": "Intuitive Farbauswahl zur individuellen Gestaltung.", + "colorPickerCompKeywords": "farbe, auswahl, anpassung", + "floatButtonCompName": "Schwimmer-Taste", + "floatButtonCompDesc": "Eine schwebende Aktionstaste für markante und schnelle Aktionen.", + "floatButtonCompKeywords": "Schwimmende Taste, Aktion, Schnell", + "avatarCompName": "Avatar", + "avatarCompDesc": "Zeigt Benutzeravatare oder Profilbilder zur persönlichen Identifizierung an.", + "avatarCompKeywords": "Avatar, Profilbild, Benutzerkennung", + "avatarGroupCompName": "Avatar-Gruppe", + "avatarGroupCompDesc": "Eine Gruppe von Avataren, die mehrere Benutzer oder Entitäten auf kompakte und visuell ansprechende Weise repräsentieren.", + "avatarGroupCompKeywords": "Avatar-Gruppe, Benutzer, Entitäten, kompakt", + "transferName": "Übertragung", + "transferDesc": "Erleichtert den Datentransfer zwischen zwei Listen mit Drag-and-Drop-Funktionalität.", + "transferKeywords": "Übertragung, Daten, Drag-and-Drop", + "cardCompName": "Inhalt Karte", + "cardCompDesc": "Eine Kartenkomponente zur strukturierten Darstellung von Informationen oder Inhalten.", + "cardCompKeywords": "Karte, Information, Inhalt, Anzeige", + "timerCompName": "Zeitschaltuhr", + "timerCompDesc": "Eine Komponente, die einen Countdown oder die verstrichene Zeit anzeigt, nützlich für die Verfolgung von Zeiträumen und Fristen.", + "timerCompKeywords": "Timer, Countdown, verstrichene Zeit, Verfolgung, Dauern, Fristen", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Dokumentation ansehen", + "menuViewPlayground": "Interaktiven Spielplatz ansehen", + "menuUpgradeToLatest": "Upgrade auf die neueste Version", + "nameNotEmpty": "Kann nicht leer sein", + "nameRegex": "Muss mit einem Buchstaben beginnen und darf nur Buchstaben, Ziffern und Unterstriche (_) enthalten", + "nameJSKeyword": "Kann kein JavaScript-Schlüsselwort sein", + "nameGlobalVariable": "Kann kein globaler Variablenname sein", + "nameExists": "Name {name} Existiert bereits", + "getLatestVersionMetaError": "Die neueste Version konnte nicht abgerufen werden, bitte versuche es später.", + "needNotUpgrade": "Die aktuelle Version ist bereits die neueste.", + "compNotFoundInLatestVersion": "Aktuelle Komponente nicht in der neuesten Version gefunden.", + "upgradeSuccess": "Erfolgreich auf die neueste Version upgegradet.", + "searchProp": "Suche", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Wiederholen", + "resetAfterSubmit": "Zurücksetzen nach erfolgreichem Absenden des Formulars", + "jsonSchema": "JSON-Schema", + "uiSchema": "UI Schema", + "schemaTooltip": "Siehe", + "defaultData": "Vorausgefüllte Formulardaten", + "dataDesc": "Aktuelle Formulardaten", + "required": "Erforderlich", + "maximum": "Der Maximalwert ist {value}", + "minimum": "Der Mindestwert ist {value}", + "exclusiveMaximum": "Sollte kleiner sein als {value}", + "exclusiveMinimum": "Sollte größer sein als {value}", + "multipleOf": "Sollte ein Vielfaches von {value} sein", + "minLength": "Mindestens {value} Zeichen", + "maxLength": "Höchstens {value} Zeichen", + "pattern": "Sollte dem Muster {value} entsprechen", + "format": "Sollte dem Format {value} entsprechen", + }, + "select": { + ...en.select, + + "inputValueDesc": "Eingabe Suchwert", + }, + "customComp": { + ...en.customComp, + + "text": "Es ist ein guter Tag.", + "triggerQuery": "Trigger-Abfrage", + "updateData": "Daten aktualisieren", + "updateText": "Ich bin auch in guter Stimmung, jetzt meine eigene Komponente mit Lowcoder zu entwickeln!", + "sdkGlobalVarName": "Lowcoder", + "data": "Daten, die du an die benutzerdefinierte Komponente übergeben willst", + "code": "Code deiner benutzerdefinierten Komponente", + }, + "tree": { + ...en.tree, + + "placeholder": "Bitte auswählen", + "selectType": "Typ auswählen", + "noSelect": "Keine Auswahl", + "singleSelect": "Einzeln auswählen", + "multiSelect": "Mehrfachauswahl", + "checkbox": "Kontrollkästchen", + "checkedStrategy": "Geprüfte Strategie", + "showAll": "Alle Knotenpunkte", + "showParent": "Nur übergeordnete Knotenpunkte", + "showChild": "Nur Kind-Knoten", + "autoExpandParent": "Auto Expand Elternteil", + "checkStrictly": "Streng prüfen", + "checkStrictlyTooltip": "TreeNode genau prüfen; Parent TreeNode und Children TreeNodes sind nicht assoziiert", + "treeData": "Baumdaten", + "treeDataDesc": "Aktuelle Baumdaten", + "value": "Standardwerte", + "valueDesc": "Aktuelle Werte", + "expanded": "Erweitert Werte", + "expandedDesc": "Aktuelle erweiterte Werte", + "defaultExpandAll": "Standard Alle Knoten erweitern", + "showLine": "Linie anzeigen", + "showLeafIcon": "Blattsymbol anzeigen", + "treeDataAsia": "Asien", + "treeDataChina": "China", + "treeDataBeijing": "Peking", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Japan", + "treeDataEurope": "Europa", + "treeDataEngland": "England", + "treeDataFrance": "Frankreich", + "treeDataGermany": "Deutschland", + "treeDataNorthAmerica": "Nord-Amerika", + "helpLabel": "Knotenpunkt Etikett", + "helpValue": "Einzigartiger Knotenpunktwert im Baum", + "helpChildren": "Kinder Knoten", + "helpDisabled": "Deaktiviert den Knotenpunkt", + "helpSelectable": "Ob der Knoten wählbar ist (Single/Multi Select Typ)", + "helpCheckable": "Ob ein Kontrollkästchen angezeigt werden soll (Checkbox-Typ)", + "helpDisableCheckbox": "Deaktiviert das Kontrollkästchen (Checkbox-Typ)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Veranstaltungstest", + "methodTest": "Methode Test", + "inputTest": "Eingangstest", + }, + "password": { + ...en.password, + + "label": "Passwort", + "placeholder": "Bitte gib ein sicheres Passwort ein", + "conformLabel": "Passwort Bestätigung", + "conformPlaceholder": "Bitte das Passwort zur Bestätigung nochmal eingeben", + "visibilityToggle": "Sichtbarkeit anzeigen Toggle", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Symbolleiste anpassen", + "toolbarDescription": "Du kannst die Symbolleiste individuell anpassen. Weitere Informationen findest du unter: https://quilljs.com/docs/modules/toolbar/.", + "placeholder": "Bitte eingeben...", + "hideToolbar": "Symbolleiste ausblenden", + "content": "Inhalt", + "title": "Titel", + "save": "Speichern", + "link": "Link:", + "edit": "bearbeiten", + "remove": "entfernen", + "defaultValue": "Basis Inhalt", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Benutzerdefiniert", + "backTop": "Zurück Oben", + "buttonType": "Button Type", + "buttonShape": "Taste Form", + "square": "Platz", + "circle": "Kreis", + "description": "Beschreibung", + "badge": "Abzeichen", + "primary": "Primäre Seite", + "default": "Standard", + "buttonTheme": "Schaltfläche Thema", + "badgeColor": "Farbe des Abzeichens", + "dot": "Abzeichen als Punkt", + "hidden": "Versteckt", + "visibilityHeight": "Sichtbarkeit Höhe", + "visibilityHeightDesc": "Scrollen bis zu einer bestimmten Höhe, bevor die Schaltfläche \"Zurück zum Anfang\" angezeigt wird, 0 wird immer angezeigt, Bearbeitungsmodus kann keine Vorschau in Echtzeit anzeigen", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Auslöser Ereignis", + "click": "Klicken Sie auf", + "hover": "schweben", + "disabledAlpha": "Alpha-Auswahl deaktivieren", + "recommended": "Empfohlen", + "showPresets": "Farbvoreinstellungen anzeigen", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Schaltfläche \"Schließen\" anzeigen", + "Type": "Abzeichen Typ", + "Count": "Abzeichen zählen", + "Size": "Größe des Abzeichens", + "SizeDefault": "Standard", + "SizeSmall": "Klein", + "overflowCount": "Überlaufzahl", + "Title": "Titel des Abzeichens", + "dot": "Punkt", + "number": "Nummer", + "tooltip": "QuickInfo", + }, + "gantt": { + ...en.gantt, + + "key": "Schlüssel", + "title": "Titel", + "project": "Projekt", + "from": "Von", + "minute": "Minute", + "hour": "Stunde", + "day": "Tag", + "week": "Woche", + "month": "Monat", + "year": "Jahr", + "quarter": "Quarter", + "tasks": "Aufgaben Daten", + "level": "Ebene", + "durationUnit": "Duration unit", + "duration": "Duration", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Woche #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "Baum", + "ColumnsData": "Spalten Daten", + "allowChangeTask": "DbClick Aufgabe", + "allowAddLink": "Link hinzufügen", + "allowLinkDelete": "Link Löschen", + "allowProgressDrag": "Fortschritt ziehen", + "allowTaskDrag": "Aufgabe Ziehen", + "links": "Links Data", + "dataFormat": "Datenanalyse Format", + "handleDateChange": "Handhabung von Aufgabenänderungen", + "handleTaskChange": "Handhabung von Aufgabenänderungen", + "handleAddedLink": "Handle Added Link", + "handleDeletedLink": "Gelöschten Link behandeln", + "handleProgressDrag": "Handle Progress Drag", + "showTodayMark": "Heute anzeigen Mark", + "resize": "Größe ändern", + "otherEvents": "Andere Ereignisse", + "openAllBranchInit": "Alle Filialen öffnen Init", + "date": "Date", + "text": "Text", + "progress": "Fortschritte", + "width": "Breite", + "ColumnsType": "Spalten Typ", + "currentId": "Aktuelle ID", + "currentObject": "Aktuelles Objekt", + "addTask": "Aufgabe(n) hinzufügen", + "taskObject": "Aufgabe Objekt", + "taskObjectDesc": "Unterstützt Arrays von Tasks oder einzelne Task-Objekte", + "linkID": "Link-ID", + "linkIDDesc": "Unterstützt Arrays von Link-IDs oder einzelne Link-Objekte", + "removeTask": "Aufgabe entfernen", + "taskID": "Aufgaben-ID", + "taskIDDesc": "Unterstützt Arrays von IDs oder einzelne IDs", + "add": "hinzufügen", + "expandingAll": "Alle ausbauen", + "collapsingAll": "Alle kollabieren", + "addTaskFail": "Die Additionsaufgabe ist fehlgeschlagen, und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", + "addLinkFail": "Der Additionslink ist fehlgeschlagen und der Parametertyp sollte ein Objekt oder ein Array-Objekt sein", + "removeTaskFail": "Die Löschaufgabe ist fehlgeschlagen, und der Parametertyp sollte string oder string array sein", + "removeLinkFail": "Die Löschverknüpfungen sind fehlgeschlagen, und der Parametertyp sollte string array sein", + "otherData": "Andere Daten{i}", + "projectText": "Projekt #{i}", + "taskText": "Aufgabe #{i}", + "AutoCalculateProgress": "Automatischer Berechnungsfortschritt", + "allowProjectDrag": "Ziehen von Projekten zulassen", + "showColumns": "Spalten anzeigen", + "exportToPNG": "In PNG exportieren", + "exportToPDF": "In PDF exportieren", + "exportToExcel": "Nach Excel exportieren", + "progressLowBg": "Niedrig BgColor", + "progressLowColor": "Niedrige Progress-Farbe", + "progressMediumBg": "Medium BgColor", + "progressMediumColor": "Medium Progress Farbe", + "progressHighBg": "Höhe BgColor", + "progressHighColor": "Höhe Fortschritt Farbe", + "progresscompletedColor": "Abgeschlossener Fortschritt Farbe", + "lowProgressLine": "Niedrige Progressionslinie", + "mediumProgressLine": "Mittlere Fortschrittslinie", + "SegmentedColor": "Fortschritt Segmentierte Farbe", + "link_f2s": "Verbindung F2S", + "link_s2s": "Link S2S", + "link_f2f": "Link F2F", + "link_s2f": "Link S2F", + "weekScale": "#{i},", + "showHolidays": "Feiertage anzeigen", + "StatutoryHolidays": "Gesetzliche Feiertage Daten", + "skipOffTime": "Ausblenden der Nicht-Arbeitszeit", + "weekend": "Wochenende", + "weekendSelected": "Ausgewähltes Wochenende", + "noWorkHour": "Keine Arbeitsstunde", + "noWorkHourSelected": "keine Arbeitsstunde ausgewählt", + "showWorkTimes": "Arbeitszeiten anzeigen", + "workTimeData": "Arbeitszeitdaten", + "fit": "fit", + "manual": "Handbuch", + "scaleMode": "Skalenmodus", + "startDate": "Start Date", + "endDate": "End Date", + "addLink": "Link(s) hinzufügen", + "linkObject": "link Objekt", + "removeLink": "Link entfernen", + "allowSort": "Sortieren zulassen", + "showTask": "Aufgabe anzeigen", + "toggleOnDBClick": "Umschalten auf DBClick", + "sortOptions": "Erste Sortieroptionen", + "rowHeight": "Zeilenhöhe", + "showTooltip": "Tooltip anzeigen", + "tooltipTemplates": "Tooltip-Vorlage", + "allowResizeTask": "Größenänderung der Aufgabe zulassen", + "projectColor": "Projekt Farbe", + "projectColorBg": "Projekt BgColor", + "taskColor": "Aufgabe Farbe", + "taskColorBg": "Aufgabe BgColor", + "milestoneColor": "Meilenstein Farbe", + "highlightOverdue": "Highlight Überfällig", + "overdueColor": "Überfällige Farbe", + "overdueBgColor": "Überfällig BgColor", + "projectCompletedBgColor": "Abgeschlossenes Projekt BgColor", + "projectCompletedColor": "Projekt fertiggestellt Farbe", + "tag": "Tag", + "tasksTableWidth": "Aufgaben Tabellenbreite", + "allowErrorMessage": "Fehlermeldung zulassen", + "currentProjectId": "Aktuelle Projekt-ID", + "currentProjectLastTask": "Aktuelles Projekt Letzte Aufgabe", + "onlySortProject": "Nur Projekt sortieren", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Source Data", + "targetTitle": "Ziel-Daten", + "content": "Inhalt {i}", + "items": "Artikel", + "targetKeys": "Ausgewählte Schlüssel", + "oneWay": "Einweg", + "pagination": "Paginierung", + "pageSize": "Page Size", + "allowSearch": "Suche zulassen", + "selectedKeys": "Ausgewählte Schlüssel", + "searchInfo": "Infos zur Suche", + "targerObject": "Targer Object", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Maximale Anzahl", + "avatarSize": "Avatar Größe", + "autoColor": "Auto Farbe", + "alignment": "Ausrichtung", + "currentAvatar": "Aktueller Avatar", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "Platz", + "circle": "Kreis", + "icon": "Symbol", + "shape": "Form", + "counts": "Abzeichen", + "title": "Titel", + "src": "src", + "avatarCompTooltip": "Die Anzeigepriorität ist: Bild -> Zeichen -> Symbol. Je nachdem, was zuerst verfügbar ist.", + "iconSize": "Icon Größe", + "avatarBackground": "Hintergrund", + "label": "Etikett", + "caption": "Bildunterschrift", + "labelPosition": "Position", + "alignmentPosition": "Ausrichtung", + "text": "Text", + "enableDropDown": "Enable DropDown", + "containerBackground": "Hintergrund", + }, + "card": { + ...en.card, + + "cardType": "Karte Typ", + "common": "gemeinsame", + "custom": "benutzerdefinierte", + "default": "Standard", + "small": "klein", + "showTitle": "Titel anzeigen", + "title": "Titel", + "more": "Mehr", + "extraTitle": "Aufruf zum Handeln", + "CoverImg": "Titelbild", + "imgSrc": "Bildquelle", + "showMeta": "Inhalt anzeigen", + "metaTitle": "Inhalt Titel", + "metaDesc": "Content Beschreibung", + "imgHeight": "Bildhöhe", + "showActionIcon": "Aktionsoptionen anzeigen", + "actionOptions": "Handlungsoptionen", + "menu": "Menü {i}", + "hoverColor": "Hover Farbe", + "IconColor": "Icon Farbe", + "titleSize": "Titel Größe", + }, + "timer": { + ...en.timer, + + "timerState": "Timer Zustand", + "elapsedTime": "Verstrichene Zeit", + "timer": "Zeitschaltuhr", + "countdown": "Countdown", + "defaultValue": "Standardwert", + "timerType": "Timer Type", + "start": "Start", + "pause": "Pause", + "resume": "Lebenslauf", + "reset": "Reset", + "startPause": "Start/Pause", + "hideButton": "Schaltfläche \"Ausblenden", + "fontColor": "Schriftfarbe", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Icon", + "autoSize": "Symbol AutoSize", + "iconSize": "Icon Größe", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Format", + "precision": "Präzision", + "allowNull": "Nullwert zulassen", + "thousandsSeparator": "Tausendertrennzeichen anzeigen", + "controls": "Schaltflächen zum Erhöhen/Verringern anzeigen", + "step": "Schritt", + "standard": "Standard", + "percent": "Prozente", + }, + "slider": { + ...en.slider, + + "step": "Schritt", + "stepTooltip": "Der Wert muss größer als 0 und durch (Max-Min) teilbar sein", + "vertical": "Vertikale Ausrichtung", + }, + "rating": { + ...en.rating, + + "max": "Maximale Bewertung", + "allowHalf": "Halbe Bewertungspunkte zulassen", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Optionen", + "option": "Option", + "optionI": "Option {i}", + "viewDocs": "Docs ansehen", + "tip": "Die Variablen \\'item\\' und \\'i\\' repräsentieren den Wert und den Index jedes Elements in der Datenmatrix", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Wert / Schlüssel", + "valueTooltip": "Step Value muss eine Zahl sein. Für den ersten Schritt muss er gleich dem Anfangswert sein. Die Zahlen müssen in konsistenter und aufsteigender Reihenfolge stehen.", + "title": "Schritt Titel", + "subTitle": "Schritt Untertitel", + "description": "Schritt Beschreibung", + "status": "Schritt Status", + "icon": "Schritt-Symbol", + }, + "step": { + ...en.step, + + "initialValue": "Start-Nummern bei", + "initialValueTooltip": "Wo soll die visuelle Nummerierung beginnen. Muss 1 oder höher sein.", + "valueDesc": "Aktueller Wert", + "size": "Schritte Größe", + "sizeSmall": "Klein", + "sizeDefault": "Standard", + "percent": "Schritte in Prozent", + "type": "Schritte Typ", + "typeDefault": "Standard", + "typeNavigation": "Navigation", + "typeInline": "Inline", + "direction": "Schritte Richtung", + "directionVertical": "Vertikal", + "directionHorizontal": "Horizontal", + "labelPlacement": "Schritte Etikettenplatzierung", + "status": "Schritte Status", + "statusWait": "Warten", + "statusProcess": "Prozess", + "statusFinish": "Oberfläche", + "statusError": "Fehler", + "showDots": "Punkte statt Symbole anzeigen", + "showIcons": "Icons statt Symbole anzeigen", + "responsive": "Ansprechbar", + "selectable": "Wählbar", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Tag Text", + "color": "Farbe", + "icon": "Icon", + }, + "radio": { + ...en.radio, + + "options": "Optionen", + "horizontal": "Horizontal", + "horizontalTooltip": "Das horizontale Layout wickelt sich selbst ein, wenn es keinen Platz mehr hat", + "vertical": "Vertikal", + "verticalTooltip": "Das vertikale Layout wird immer in einer einzigen Spalte angezeigt", + "autoColumns": "Auto Kolonne", + "autoColumnsTooltip": "Das Auto-Spalten-Layout ordnet die Reihenfolge automatisch neu an, wenn es der Platz erlaubt, und zeigt sie als mehrere Spalten an", + }, + "cascader": { + ...en.cascader, + + "options": "JSON-Daten zur Anzeige kaskadierender Auswahlen", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Aktuell ausgewählter Wert", + "selectedIndexDesc": "Der Index des aktuell ausgewählten Wertes oder -1, wenn kein Wert ausgewählt ist", + "selectedLabelDesc": "Die Bezeichnung des aktuell ausgewählten Wertes", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Muss eine Zahl mit einer gültigen Dateigrößeneinheit oder eine einheitenlose Anzahl von Bytes sein.", + "fileEmptyErrorMsg": "Upload fehlgeschlagen. Die Dateigröße ist leer.", + "fileSizeExceedErrorMsg": "Upload fehlgeschlagen. Die Dateigröße übersteigt das Limit.", + "minSize": "Min Größe", + "minSizeTooltip": "Die Mindestgröße der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", + "maxSize": "Max Größe", + "maxSizeTooltip": "Die maximale Größe der hochgeladenen Dateien mit optionalen Dateigrößeneinheiten (z. B. \\'5kb\\', \\'10 MB\\'). Wenn keine Einheit angegeben wird, wird der Wert als Anzahl der Bytes betrachtet.", + "single": "Einzeln", + "multiple": "Mehrere", + "directory": "Verzeichnis", + "upload": "durchsuchen", + "fileType": "Dateitypen", + "reference": "Bitte beachten Sie", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Eindeutige Dateityp-Angaben", + "uploadType": "Upload Typ", + "showUploadList": "Upload-Liste anzeigen", + "maxFiles": "Max Dateien", + "filesValueDesc": "Der Inhalt der aktuell hochgeladenen Datei ist Base64-kodiert", + "filesDesc": "Liste der aktuell hochgeladenen Dateien. Für Details, siehe", + "clearValueDesc": "Alle Dateien löschen", + "parseFiles": "Dateien parsen", + "parsedValueTooltip1": "Wenn parseFiles True ist, werden die hochgeladenen Dateien als Objekt, Array oder String analysiert. Auf die geparsten Daten kann über das Array parsedValue zugegriffen werden.", + "parsedValueTooltip2": "Unterstützt Excel-, JSON-, CSV- und Textdateien. Andere Formate geben Null zurück.", + }, + "date": { + ...en.date, + + "format": "Format", + "formatTip": "Unterstützung: \\'JJJJ-MM-TT HH:mm:ss\\', \\'JJJJ-MM-TT\\', \\'Zeitstempel\\'", + "reference": "Bitte beachten Sie", + "showTime": "Zeit zeigen", + "start": "Startdatum", + "end": "Enddatum", + "year": "Jahr", + "quarter": "Quartal", + "month": "Monat", + "week": "Woche", + "date": "Datum", + "clearAllDesc": "Alle löschen", + "resetAllDesc": "Alle zurücksetzen", + "placeholder": "Datum auswählen", + "placeholderText": "Platzhalter", + "startDate": "Startdatum", + "endDate": "Enddatum", + }, + "time": { + ...en.time, + + "start": "Startzeit", + "end": "Endzeit", + "formatTip": "Unterstützung: \\'HH:mm:ss\\', \\'Zeitstempel\\'", + "format": "Format", + "placeholder": "Zeit wählen", + "placeholderText": "Platzhalter", + "startTime": "Startzeit", + "endTime": "Endzeit", + }, + "button": { + ...en.button, + + "prefixIcon": "Präfix-Symbol", + "prefixText": "Präfix Text", + "suffixIcon": "Suffix-Symbol", + "icon": "Icon", + "iconSize": "Icon Größe", + "button": "Formular Schaltfläche", + "formToSubmit": "Formular zum Einreichen", + "default": "Standard", + "submit": "einreichen", + "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", + "loadingDesc": "Befindet sich der Button im Ladezustand? Wenn wahr, wird die aktuelle Schaltfläche geladen", + "formButtonEvent": "Veranstaltung", + }, + "link": { + ...en.link, + + "link": "Link zu", + "textDesc": "Derzeit auf dem Link angezeigter Text", + "loadingDesc": "Befindet sich der Link im Ladezustand? Wenn wahr, wird der aktuelle Link geladen", + }, + "scanner": { + ...en.scanner, + + "text": "Klicken Sie auf Scannen", + "camera": "Kamera {index}", + "changeCamera": "Kamera wechseln", + "continuous": "Kontinuierliches Scannen", + "uniqueData": "Doppelte Daten ignorieren", + "maskClosable": "Klicke auf die Maske zum Schließen", + "errTip": "Bitte verwende diese Komponente unter HTTPS oder Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Anzeige nur mit Etikett", + "textDesc": "Derzeit auf der Schaltfläche angezeigter Text", + "triggerMode": "Triggermodus" + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Hallo, {name}", + "valueTooltip": "Markdown unterstützt die meisten HTML-Tags und -Attribute. iframe, Script und andere Tags sind aus Sicherheitsgründen deaktiviert.", + "verticalAlignment": "Vertikale Ausrichtung", + "horizontalAlignment": "Horizontale Ausrichtung", + "textDesc": "Im aktuellen Textfeld angezeigter Text", + }, + "table": { + ...en.table, + + "editable": "Editierbar", + "columnNum": "Rubriken", + "viewModeResizable": "Spaltenbreite vom Benutzer angepasst", + "viewModeResizableTooltip": "Ob Nutzer die Spaltenbreite anpassen können.", + "visibleResizables": "Handles zur Größenänderung anzeigen", + "visibleResizablesTooltip": "Sichtbare Größenänderungsgriffe im Tabellenkopf anzeigen.", + "showFilter": "Schaltfläche Filter anzeigen", + "showRefresh": "Schaltfläche \"Aktualisieren\" anzeigen", + "showDownload": "Download-Schaltfläche anzeigen", + "columnSeparator": "Spaltentrennzeichen", + "columnSeparatorTooltip": "Spaltentrennzeichen („Trennzeichen“) in der heruntergeladenen CSV-Datei. \n\nEmpfehlungen:\n- Komma (,)\n- Semikolon (;)\n- Pipe (|)\n- Tabulator (\\t)", + "columnSetting": "Schaltfläche Spalteneinstellung anzeigen", + "searchText": "Text suchen", + "searchTextTooltip": "Suche und Filterung der in der Tabelle dargestellten Daten", + "showQuickJumper": "Quick Jumper anzeigen", + "hideOnSinglePage": "Auf einzelner Seite ausblenden", + "showSizeChanger": "Schaltfläche Größenänderer anzeigen", + "pageSizeOptions": "Optionen für die Seitengröße", + "pageSize": "Seitengröße", + "total": "Gesamtzahl der Zeilen", + "totalTooltip": "Der Standardwert ist die Anzahl der aktuellen Datenelemente, die aus der Abfrage abgerufen werden können, z. B: \\'{{query1.data[0].count}}\\'", + "filter": "Filter", + "filterRule": "Filter-Regel", + "chooseColumnName": "Spalte wählen", + "chooseCondition": "Bedingung wählen", + "clear": "Klar", + "columnShows": "Säule zeigt", + "selectAll": "Alle auswählen", + "and": "Und", + "or": "Oder", + "contains": "Enthält", + "notContain": "Enthält nicht", + "equals": "Entspricht", + "isNotEqual": "Ist nicht gleich", + "isEmpty": "Ist leer", + "isNotEmpty": "Ist nicht leer", + "greater": "Größer als", + "greaterThanOrEquals": "Größer als oder gleich", + "lessThan": "Weniger als", + "lessThanOrEquals": "Kleiner als oder gleich", + "action": "Aktion", + "columnValue": "Spalte Wert", + "columnValueTooltip": "\\'{{currentCell}}\\': Aktuelle Zelldaten\n \\'{{currentRow}}\\': Aktuelle Zeilendaten\n \\'{{currentIndex}}\\': Aktueller Datenindex (beginnend bei 0)\n Beispiel: \\'{{currentCell * 5}}\\' Show 5 Times the Original Value Data.", + "columnTooltip": "Spalten-Tooltip", + "imageSrc": "Bildquelle", + "imageSize": "Bildgröße", + "columnTitle": "Titel anzeigen", + "columnTitleTooltip": "Titel-Tooltip", + "showTitle": "Titel anzeigen", + "showTitleTooltip": "Spaltentitel im Tabellenkopf ein-/ausblenden", + "sortable": "Sortierbar", + "align": "Ausrichtung", + "fixedColumn": "Feste Säule", + "autoWidth": "Auto Breite", + "customColumn": "Benutzerdefinierte Säule", + "auto": "Auto", + "fixed": "Festgelegt", + "columnType": "Säule Typ", + "dataMapping": "Datenzuordnung", + "numberStep": "Schritt", + "numberStepTooltip": "Die Zahl, auf die der aktuelle Wert erhöht oder verringert wird. Es kann eine ganze Zahl oder eine Dezimalzahl sein", + "precision": "Präzision", + "float": "Schwimmer", + "prefix": "Präfix", + "suffix": "Nachsilbe", + "avatars": "Avatare", + "avatarGroupAlignment": "Ausrichtung der Avatare", + "text": "Text", + "number": "Nummer", + "link": "Link zu", + "links": "Links", + "tag": "Tag", + "select": "Wählen Sie", + "dropdown": "Auswahlliste", + "date": "Datum", + "dateTime": "Datum Uhrzeit", + "badgeStatus": "Status", + "button": "Taste", + "image": "Bild", + "boolean": "Boolesche", + "switch": "Schalter", + "rating": "Bewertung", + "progress": "Fortschritt", + "option": "Operation", + "optionList": "Betriebsliste", + "option1": "Betrieb 1", + "status": "Status", + "statusTooltip": "Optionale Werte: Erfolg, Fehler, Standard, Warnung, Verarbeitung", + "primaryButton": "Primäre", + "defaultButton": "Standard", + "type": "Typ", + "tableSize": "Tabelle Größe", + "hideHeader": "Tabellenkopfzeile ausblenden", + "hideToolbar" : "Tabellenfußzeile ausblenden", + "fixedHeader": "Feste Tabellenüberschrift", + "fixedHeaderTooltip": "Kopfzeile wird für vertikal scrollbare Tabelle fixiert", + "fixedToolbar": "Feste Symbolleiste", + "fixedToolbarTooltip": "Die Symbolleiste wird für vertikal scrollbare Tabellen je nach Position fixiert", + "hideBordered": "Spaltenumrandung ausblenden", + "showHeaderGridBorder": "Kopfzeilen-Gitterrahmen anzeigen", + "showRowGridBorder": "Rand des Zeilenrasters anzeigen", + "showVerticalRowGridBorder": "Vertikalen Zeilenraster-Rahmen anzeigen", + "showHorizontalRowGridBorder": "Horizontalen Zeilenraster-Rahmen anzeigen", + "deleteColumn": "Spalte löschen", + "confirmDeleteColumn": "Bestätige Spalte löschen: ", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "Die aktuellen Daten ändern sich. Klicke auf , um die Spalte neu zu generieren.", + "changeSetDesc": "Ein Objekt, das Änderungen an einer bearbeitbaren Tabelle darstellt, enthält nur die geänderte Zelle. Zeilen gehen zuerst und Spalten gehen als zweites.", + "selectedRowDesc": "Liefert Daten für die aktuell ausgewählte Zeile und zeigt die Zeile an, die ein Klick-Ereignis auslöst, wenn der Nutzer auf eine Schaltfläche/Link in der Zeile klickt", + "selectedRowsDesc": "Nützlich im Mehrfachauswahlmodus, gleich wie SelectedRow", + "pageNoDesc": "Aktuelle Anzeigeseite, beginnend mit 1", + "pageSizeDesc": "Wie viele Zeilen pro Seite", + "sortColumnDesc": "Der Name der aktuell ausgewählten sortierten Spalte", + "sortDesc": "Ob die aktuelle Zeile in absteigender Reihenfolge ist", + "pageOffsetDesc": "Der aktuelle Beginn des Blätterns, der für das Blättern zum Abrufen von Daten verwendet wird. Beispiel: Select * from Users Limit \\'{{table1.pageSize}}\\' Versatz \\'{{table1.pageOffset}}\\'", + "displayDataDesc": "In der aktuellen Tabelle angezeigte Daten", + "selectedIndexDesc": "Ausgewählter Index in der Datenanzeige", + "filterDesc": "Parameter für die Tabellenfilterung", + "dataDesc": "Die JSON-Daten für die Tabelle", + "saveChanges": "Änderungen speichern", + "cancelChanges": "Änderungen abbrechen", + "rowSelectChange": "Zeile auswählen Ändern", + "rowClick": "Reihe Klicken", + "rowExpand": "Reihe verkleinern", + "rowShrink": "Zeilenverkleinerung", + "search": "Suchen", + "download": "Herunterladen", + "columnEdited": "Spalte bearbeitet", + "filterChange": "Filterwechsel", + "sortChange": "Sortieren Ändern", + "pageChange": "Seitenwechsel", + "refresh": "Auffrischen", + "rowColor": "Bedingte Zeilenfarbe", + "rowColorDesc": "Legt die Zeilenfarbe basierend auf den optionalen Variablen bedingt fest: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: \\'{{ currentRow.id > 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", + "rowHeight": "Bedingte Zeilenhöhe", + "rowHeightDesc": "Bedingte Einstellung der Zeilenhöhe basierend auf den optionalen Variablen: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Zum Beispiel: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Bedingte Zellenfarbe", + "cellColorDesc": "Stelle die Zellenfarbe basierend auf dem Zellenwert mit CurrentCell bedingt ein. Beispiel: \\''{{ currentCell == 3 ? %r@\\\"green%r@\\\" : %r@\\\"red%r@\\\" }}\\'", + "saveChangesNotBind": "Es wurde kein Event Handler für das Speichern von Änderungen konfiguriert. Bitte binde mindestens einen Ereignishandler vor dem Klick.", + "dynamicColumn": "Dynamische Spalteneinstellung verwenden", + "dynamicColumnConfig": "Säuleneinstellung", + "dynamicColumnConfigDesc": "Dynamische Spalteneinstellungen. Akzeptiert ein Array von Spaltennamen. In der Standardeinstellung sind alle Spalten sichtbar. Beispiel: [%r@\\\"id%r@\\\", %r@\\\"name%r@\\\"]", + "position": "Position", + "showDataLoadSpinner": "Ladeanzeige anzeigen", + "showValue": "Wert anzeigen", + "expandable": "Ausbaufähig", + "configExpandedView": "Expandierte Ansicht konfigurieren", + "toUpdateRowsDesc": "Ein Array von Objekten für zu aktualisierende Zeilen in bearbeitbaren Tabellen.", + "selectedCellDesc": "Ausgewählte Zelle", + "empty": "Leere", + "falseValues": "Text Wenn Falsch", + "iconTrue": "Symbol Wenn wahr", + "iconFalse": "Icon When False", + "iconNull": "Icon When Null", + "allColumn": "Alle", + "visibleColumn": "Sichtbar", + "emptyColumns": "Derzeit sind keine Spalten sichtbar", + "showSummary": "Zusammenfassungszeile(n) anzeigen", + "totalSummaryRows": "Gesamtzahl der Zeilen", + "inlineAddNewRow": "Inline neue Zeile(n) hinzufügen", + "editMode": "Bearbeitungsmodus", + "singleClick": "Einzelklick", + "doubleClick": "Doppelklick", + "showUpdateButtons": "Schaltflächen zum Speichern/Abbrechen anzeigen", + }, + "image": { + ...en.image, + + "src": "Bildquelle", + "srcDesc": "Die Bildquelle. Kann eine URL, ein Pfad oder ein Base64-String sein. z.B.: data:image/png;base64, AAA... CCC", + "supportPreview": "Zuum Vorschau Unterstützung", + "supportPreviewTip": "Wirksam, wenn die Bildquelle gültig ist", + "previewSrc": "HighRes Bildquelle" + }, + "progress": { + ...en.progress, + + "value": "Wert", + "valueTooltip": "Der Prozentsatz der Fertigstellung als Wert zwischen 0 und 100", + "showInfo": "Wert anzeigen", + "valueDesc": "Aktueller Fortschrittswert, der von 0 bis 100 reicht", + "showInfoDesc": "Ob der aktuelle Fortschrittswert angezeigt werden soll", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Bitte gib eine gültige URL oder einen Base64-String ein", + "src": "Datei URI", + "srcTooltip": "Vorschau des bereitgestellten Link-Inhalts durch Einbetten von HTML, Base64-kodierte Daten können ebenfalls unterstützt werden, z. B.: data:application/pdf; base64,AAA... CCC", + "srcDesc": "Der Datei-URI", + }, + "divider": { + ...en.divider, + + "title": "Titel", + "align": "Ausrichtung", + "dashed": "Gestrichelt", + "type": "Vertikaler Typ", + "dashedDesc": "Gestrichelte Linie verwenden", + "titleDesc": "Teiler Titel", + "alignDesc": "Teiler Titelausrichtung", + }, + "QRCode": { + ...en.QRCode, + + "value": "QR Code Inhalt Wert", + "valueTooltip": "Der Wert enthält maximal 2953 Zeichen. Der QR-Code-Wert kann verschiedene Datentypen kodieren, z. B. Textnachrichten, URLs, Kontaktdaten (VCard/meCard), Wi-Fi-Anmeldedaten, E-Mail-Adressen, Telefonnummern, SMS-Nachrichten, Geolocation-Koordinaten, Kalenderereignisdetails, Zahlungsinformationen, Kryptowährungsadressen und App-Download-Links.", + "valueDesc": "Der QR-Code-Inhaltswert", + "level": "Fehlertoleranz Level", + "levelTooltip": "Bezieht sich auf die Fähigkeit des QR-Codes, gescannt zu werden, auch wenn ein Teil des Codes blockiert ist. Je höher die Stufe, desto komplexer ist der Code.", + "includeMargin": "Rand anzeigen", + "image": "Bild in der Mitte anzeigen", + "L": "L (Niedrig)", + "M": "M (Mittel)", + "Q": "Q (Quartil)", + "H": "H (Hoch)", + "maxLength": "Der Inhalt ist zu lang. Setze die Länge auf weniger als 2953 Zeichen", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Einrückung der einzelnen Ebenen", + "expandToggle": "JSON-Baum erweitern", + "theme": "Farbe Thema", + "valueDesc": "Aktuelle JSON-Daten", + "default": "Standard", + "defaultDark": "Standard Dunkel", + "neutralLight": "Neutrales Licht", + "neutralDark": "Neutral Dunkel", + "azure": "Azurblau", + "darkBlue": "Dunkelblau", + }, + "audio": { + ...en.audio, + + "src": "Audio Source URI oder Base64 String", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Autoplay", + "loop": "Schleife", + "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:audio/mpeg;base64,AAA... CCC", + "play": "Spielen", + "playDesc": "Ausgelöst, wenn Audio abgespielt wird", + "pause": "Pause", + "pauseDesc": "Ausgelöst, wenn der Ton pausiert wird", + "ended": "Beendet", + "endedDesc": "Ausgelöst, wenn die Audiowiedergabe endet", + }, + "video": { + ...en.video, + + "src": "Video Source URI oder Base64 String", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "Poster-URL", + "defaultPosterUrl": "", + "autoPlay": "Autoplay", + "loop": "Schleife", + "controls": "Steuerelemente ausblenden", + "volume": "Band", + "playbackRate": "Wiedergaberate", + "posterTooltip": "Der Standardwert ist das erste Bild des Videos", + "autoPlayTooltip": "Nachdem das Video geladen wurde, wird es automatisch abgespielt. Wenn du diesen Wert von True auf False änderst, wird das Video angehalten. (Wenn ein Poster eingestellt ist, wird es über die Schaltfläche Poster abgespielt)", + "controlsTooltip": "Steuerelemente für die Videowiedergabe ausblenden. Wird möglicherweise nicht von jeder Videoquelle vollständig unterstützt.", + "volumeTooltip": "Lege die Lautstärke des Players fest, zwischen 0 und 1", + "playbackRateTooltip": "Lege die Rate des Spielers fest, zwischen 1 und 2", + "srcDesc": "Aktuelle Audio-URI oder Base64-String wie data:video/mp4;base64, AAA... CCC", + "play": "Spielen", + "playDesc": "Ausgelöst, wenn das Video abgespielt wird", + "pause": "Pause", + "pauseDesc": "Ausgelöst, wenn das Video pausiert wird", + "load": "Laden", + "loadDesc": "Ausgelöst, wenn das Laden der Videoressource abgeschlossen ist", + "ended": "Beendet", + "endedDesc": "Ausgelöst, wenn das Video zu Ende gespielt wird", + "currentTimeStamp": "Die aktuelle Abspielposition des Videos in Sekunden", + "duration": "Die Gesamtdauer des Videos in Sekunden", + }, + "media": { + ...en.media, + + "playDesc": "Beginnt die Wiedergabe der Medien.", + "pauseDesc": "Pausiert die Medienwiedergabe.", + "loadDesc": "Setzt die Medien auf den Anfang zurück und startet die Auswahl der Medienressource neu.", + "seekTo": "Suche nach der angegebenen Anzahl von Sekunden oder einem Bruchteil, wenn der Betrag zwischen 0 und 1 liegt", + "seekToAmount": "Anzahl der Sekunden, oder Bruchteil, wenn sie zwischen 0 und 1 liegt", + "showPreview": "Vorschau anzeigen", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Startwert", + "end": "Endwert", + "step": "Schrittweite", + "stepTooltip": "Die Granularität des Schiebereglers, der Wert muss größer als 0 und teilbar durch (Max-Min) sein", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Wähle ein Symbol", + "insertIcon": "Ein Icon einfügen", + "insertImage": "Ein Bild einfügen oder ", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Wählen Sie eine Form", + "insertShape": "Einfügen einer Form", + "insertImage": "Ein Bild einfügen oder", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Bitte gib die korrekte Timeout-Zeit in ms ein, die aktuelle Eingabe ist: {value}", + "timeoutLessThanMinError": "Die Eingabe muss größer sein als {left}, die aktuelle Eingabe ist: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Einzeln", + "multiple": "Mehrere", + "close": "Schließen", + "mode": "Modus wählen", + }, + "container": { + ...en.container, + + "title": "Angezeigter Container-Titel", + "titleTooltip": "Der Titel des Containers", + "flowWidth": "Inhalt Breite", + "floatType": "Text Schwebekörper Typ", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Platzierung der Verschlusses", + "placement": "Platzierung der Schubladen", + "size": "Größe", + "top": "Top", + "right": "Rechts", + "center": "Zentrum", + "bottom": "Unten", + "left": "Links", + "title": "Titel der Schublade", + "titleAlign": "Ausrichtung der Titel", + "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", + "heightTooltip": "Pixel, z.B. 378", + "openDrawerDesc": "Offene Schublade", + "closeDrawerDesc": "Schublade schließen", + "width": "Breite der Schublade", + "height": "Höhe der Schublade", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Agora SDK Log Level", + "placement": "Platzierung der Meeting-Schubladen", + "meeting": "Meeting-Einstellungen", + "cameraView": "Kameraansicht", + "cameraViewDesc": "Kameraansicht des lokalen Benutzers (Host)", + "screenShared": "Bildschirm geteilt", + "screenSharedDesc": "Vom lokalen Benutzer (Host) geteilter Bildschirm", + "audioUnmuted": "Audio entstummt", + "audioMuted": "Audio stummgeschaltet", + "videoClicked": "Video Geklickt", + "videoOff": "Video aus", + "videoOn": "Video auf", + "size": "Größe", + "top": "Top", + "host": "Gastgeber des Besprechungsraums. Du müsstest den Gastgeber als eigene Anwendungslogik verwalten", + "participants": "Teilnehmer des Besprechungsraums", + "shareScreen": "Vom lokalen Benutzer geteilter Bildschirm", + "appid": "Agora Anwendungs-ID", + "meetingName": "Treffen Name", + "localUserID": "Host-Benutzer-ID", + "userName": "Host-Benutzername", + "rtmToken": "Agora RTM-Token", + "rtcToken": "Agora RTC-Token", + "noVideo": "Kein Video", + "profileImageUrl": "Profilbild-URL", + "right": "Rechts", + "bottom": "Unten", + "videoId": "Video-Stream-ID", + "audioStatus": "Audio-Status", + "left": "Links", + "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", + "heightTooltip": "Pixel, z.B. 378", + "openDrawerDesc": "Offene Schublade", + "closeDrawerDesc": "Schublade schließen", + "width": "Breite der Schublade", + "height": "Höhe der Schublade", + "actionBtnDesc": "Aktionstaste", + "broadCast": "Broadcast-Nachrichten", + "title": "Meeting Titel", + "meetingCompName": "Agora Meeting Controller", + "sharingCompName": "Bildschirm teilen Stream", + "videoCompName": "Kamera-Stream", + "videoSharingCompName": "Bildschirm teilen Stream", + "meetingControlCompName": "Icon Taste", + "meetingCompDesc": "Meeting-Komponente", + "meetingCompControls": "Meeting-Kontrolle", + "meetingCompKeywords": "Agora Meeting, Web-Meeting, Kollaboration", + "iconSize": "Icon Größe", + "userId": "Host-Benutzer-ID", + "roomId": "Zimmer-ID", + "meetingActive": "Laufendes Treffen", + "messages": "Gesendete Nachrichten", + }, + "settings": { + ...en.settings, + + "title": "Einstellungen", + "userGroups": "Benutzergruppen", + "organization": "Arbeitsräume", + "subscription": "Abonnements", + "audit": "Audit-Logs", + "theme": "Themen", + "plugin": "Plugins", + "advanced": "Fortgeschrittene", + "apiDocs": "API-Dokumente", + "lab": "Labor", + "branding": "Branding", + "oauthProviders": "OAuth-Anbieter", + "appUsage": "App-Nutzungsprotokolle", + "environments": "Umgebungen", + "premium": "Prämie", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Verwaltung", + "superAdmin": "Super Admin", + "adminGroupRoleInfo": "Admin kann Gruppenmitglieder und Ressourcen verwalten", + "adminOrgRoleInfo": "Admins besitzen alle Ressourcen und können Gruppen verwalten.", + "member": "Mitglied", + "memberGroupRoleInfo": "Mitglied kann Gruppenmitglieder sehen", + "memberOrgRoleInfo": "Mitglieder können nur Ressourcen nutzen oder besuchen, zu denen sie Zugang haben.", + "title": "Mitglieder", + "createGroup": "Gruppe erstellen", + "newGroupPrefix": "Neue Gruppe ", + "allMembers": "Alle Mitglieder", + "deleteModalTitle": "Diese Gruppe löschen", + "deleteModalContent": "Die gelöschte Gruppe kann nicht wiederhergestellt werden. Bist du sicher, dass du die Gruppe löschen willst?", + "addMember": "Mitglieder hinzufügen", + "nameColumn": "Benutzer Name", + "joinTimeColumn": "Beitrittszeit", + "actionColumn": "Operation", + "roleColumn": "Rolle", + "exitGroup": "Ausstiegsgruppe", + "moveOutGroup": "Aus Gruppe entfernen", + "inviteUser": "Mitglieder einladen", + "exitOrg": "Lass", + "exitOrgDesc": "Bist du sicher, dass du diesen Arbeitsplatz verlassen willst?", + "moveOutOrg": "entfernen", + "moveOutOrgDescSaasMode": "Bist du sicher, dass du den Benutzer {name} aus diesem Arbeitsbereich entfernen möchtest?", + "moveOutOrgDesc": "Bist du sicher, dass du Benutzer {name} entfernen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.", + "devGroupTip": "Mitglieder der Entwicklergruppe haben die Berechtigung, Apps und Datenquellen zu erstellen.", + "lastAdminQuit": "Der letzte Administrator kann nicht aussteigen.", + "organizationNotExist": "Der aktuelle Arbeitsbereich ist nicht vorhanden", + "inviteUserHelp": "Du kannst den Einladungslink zum Versenden an den Nutzer kopieren", + "inviteUserLabel": "Einladungslink:", + "inviteCopyLink": "Link kopieren", + "inviteText": "{userName} lädt dich ein, dem Arbeitsbereich %r@\\\"{organization}%r@\\\" beizutreten, Klicke auf den Link, um beizutreten: {inviteLink}", + "groupName": "Gruppe Name", + "createTime": "Erstellt", + "manageBtn": "Verwalte", + "userDetail": "Einzelheiten", + "syncDeleteTip": "Diese Gruppe wurde aus der Adressbuchquelle gelöscht", + "syncGroupTip": "Diese Gruppe ist eine Adressbuch-Synchronisationsgruppe und kann nicht bearbeitet werden", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Neuer Arbeitsbereich (Organisation)", + "title": "Arbeitsbereich", + "createOrg": "Arbeitsbereich erstellen (Organisation)", + "deleteModalTitle": "Bist du sicher, dass du diesen Arbeitsbereich löschen willst?", + "deleteModalContent": "Du bist dabei, diesen Arbeitsbereich {permanentlyDelete} zu löschen. Sobald er gelöscht ist, wird der Arbeitsbereich {notRestored}.", + "permanentlyDelete": "Dauerhaft", + "notRestored": "Kann nicht wiederhergestellt werden", + "deleteModalLabel": "Bitte gib den Arbeitsbereichsnamen {name} ein, um den Vorgang zu bestätigen:", + "deleteModalTip": "Bitte Arbeitsbereichsname eingeben", + "deleteModalErr": "Der Name des Arbeitsbereichs ist inkorrekt", + "deleteModalBtn": "löschen", + "editOrgTitle": "Arbeitsbereich-Informationen bearbeiten", + "orgNameLabel": "Arbeitsbereich Name:", + "orgNameCheckMsg": "Der Name des Arbeitsbereichs darf nicht leer sein", + "orgLogo": "Arbeitsbereich Logo:", + "logoModify": "Bild ändern", + "inviteSuccessMessage": "Erfolgreich dem Arbeitsbereich beitreten", + "inviteFailMessage": "Beitritt zum Arbeitsbereich fehlgeschlagen", + "uploadErrorMessage": "Upload-Fehler", + "orgName": "Arbeitsbereich Name", + }, + "freeLimit": "Kostenlose Probefahrt", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Registerkarte wechseln", + "switchTabDesc": "Ausgelöst beim Wechsel der Registerkarten", + "tab": "Registerkarten", + "atLeastOneTabError": "Der Tab-Container hält mindestens einen Tab fest", + "selectedTabKeyDesc": "Aktuell ausgewählte Registerkarte", + "iconPosition": "Icon Position", + "placement": "Platzierung der Registerkarten", + "showTabs": "Registerkarten anzeigen", + "gutter": "Lücke", + "gutterTooltip": "Der Abstand zwischen den Tabs in px", + "tabsCentered": "Zentrierte Registerkarten", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Ziehen Sie Komponenten aus dem rechten Fenster oder", + "openDialogButton": "Erstelle ein Formular aus einer deiner Datenquellen", + "resetAfterSubmit": "Zurücksetzen nach erfolgreicher Übermittlung", + "initialData": "Erste Daten", + "disableSubmit": "Abschicken deaktivieren", + "success": "Erfolgreich generiertes Formular", + "selectCompType": "Komponententyp auswählen", + "dataSource": "Datenquelle: ", + "selectSource": "Quelle wählen", + "table": "Tabelle: ", + "selectTable": "Tabelle auswählen", + "columnName": "Spalte Name", + "dataType": "Datentyp", + "compType": "Komponente Typ", + "required": "Erforderlich", + "generateForm": "Formular generieren", + "compSelectionError": "Unkonfigurierter Spaltentyp", + "compTypeNameError": "Der Name des Komponententyps konnte nicht ermittelt werden", + "noDataSourceSelected": "Keine Datenquelle ausgewählt", + "noTableSelected": "Kein Tisch ausgewählt", + "noColumn": "Keine Säule", + "noColumnSelected": "Keine Spalte ausgewählt", + "noDataSourceFound": "Keine unterstützte Datenquelle gefunden. Eine neue Datenquelle erstellen", + "noTableFound": "Es wurden keine Tabellen in dieser Datenquelle gefunden, bitte wähle eine andere Datenquelle", + "noColumnFound": "In dieser Tabelle wurde keine unterstützte Spalte gefunden. Bitte wähle eine andere Tabelle", + "formTitle": "Formular Titel", + "name": "Name", + "nameTooltip": "Der Name des Attributs in den Daten des Formulars ist standardmäßig der Komponentenname, wenn er leer gelassen wird.", + "notSupportMethod": "Nicht unterstützte Methoden: ", + "notValidForm": "Das Formular ist nicht gültig", + "resetDesc": "Formulardaten auf Standardwert zurücksetzen", + "clearDesc": "Formulardaten löschen", + "setDataDesc": "Formulardaten einstellen", + "valuesLengthError": "Parameter Nummer Fehler", + "valueTypeError": "Parameter Typ Fehler", + "dataDesc": "Aktuelle Formulardaten", + "loadingDesc": "Ob das Formular geladen ist?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Öffnen Sie", + "openDesc": "Ausgelöst, wenn das modale Dialogfeld geöffnet wird", + "close": "Schließen", + "closeDesc": "Ausgelöst, wenn das modale Dialogfeld geschlossen wird", + "openModalDesc": "Öffnen Sie das Dialogfeld", + "closeModalDesc": "Das Dialogfeld schließen", + "visibleDesc": "Ist es sichtbar? Wenn ja, wird das aktuelle Dialogfeld eingeblendet", + "title": "Titel der Schublade", + "titleAlign": "Ausrichtung der Titel", + "modalHeight": "Modale Höhe", + "modalHeightTooltip": "Pixel, Beispiel: 222", + "modalWidth": "Modale Breite", + "modalWidthTooltip": "Zahl oder Prozentsatz, Beispiel: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Zeilenanzahl", + "noOfRowsTooltip": "Anzahl der Zeilen in der Liste - wird normalerweise auf eine Variable gesetzt (z. B. \\'{{query1.data.length}}\\'), um Abfrageergebnisse zu präsentieren", + "noOfColumns": "Anzahl der Kolonnen", + "itemIndexName": "Datenelement Index Name", + "itemIndexNameDesc": "Der Variablenname, der sich auf den Index des Elements bezieht, Standard: {default}", + "itemDataName": "Datenelement Objektname", + "itemDataNameDesc": "Der Variablenname, der sich auf das Datenobjekt des Items bezieht, Standard als {default}", + "itemsDesc": "Daten der Komponenten in der Liste offenlegen", + "dataDesc": "Die in der aktuellen Liste verwendeten JSON-Daten", + "dataTooltip": "Wenn du nur eine Zahl einträgst, wird dieses Feld als Zeilenzahl betrachtet und die Daten werden als leer angesehen.", + }, + "navigation": { + ...en.navigation, + + "addText": "Untermenüpunkt hinzufügen", + "logoURL": "Navigation Logo URL", + "horizontalAlignment": "Horizontale Ausrichtung", + "logoURLDesc": "Du kannst ein Logo auf der linken Seite anzeigen, indem du einen URI-Wert oder einen Base64-String eingibst, z.B. data:image/png;base64,AAA... CCC", + "itemsDesc": "Hierarchische Navigationsmenüpunkte", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Untermenü {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Aktiv", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "Die Quell-URL für den IFrame-Inhalt. Achte darauf, dass die URL HTTPS oder localhost ist. Vergewissere dich auch, dass die URL nicht durch die Content Security Policy (CSP) des Browsers blockiert wird. Der Header \\'X-Frame-Options\\' sollte nicht auf \\'DENY\\' oder \\'SAMEORIGIN\\' gesetzt sein.", + "allowDownload": "Downloads zulassen", + "allowSubmitForm": "Formular einreichen zulassen", + "allowMicrophone": "Mikrofon zulassen", + "allowCamera": "Kamera zulassen", + "allowPopup": "Popups zulassen", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Standard Boolescher Wert", + "open": "Auf", + "close": "Aus", + "openDesc": "Ausgelöst, wenn der Schalter eingeschaltet wird", + "closeDesc": "Ausgelöst, wenn der Schalter ausgeschaltet ist", + "valueDesc": "Aktueller Status des Schalters", + }, + "signature": { + ...en.signature, + + "tips": "Hinweistext", + "signHere": "Hier unterschreiben", + "showUndo": "Rückgängig machen anzeigen", + "showClear": "Löschen anzeigen", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Alle derzeit gespeicherten Datenelemente", + "setItemDesc": "Einen Artikel hinzufügen", + "removeItemDesc": "Einen Artikel entfernen", + "clearItemDesc": "Alle Artikel löschen", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "URL öffnen", + "openApp": "App öffnen", + "copyToClipboard": "In die Zwischenablage kopieren", + "downloadFile": "Datei herunterladen", + }, + "messageComp": { + ...en.messageComp, + + "info": "Eine Benachrichtigung senden", + "loading": "Ladebestätigung senden", + "success": "Erfolgsbenachrichtigung senden", + "warn": "Eine Warnmeldung senden", + "error": "Eine Fehlerbenachrichtigung senden", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "eine Benachrichtigung schließen", + "info": "Eine Benachrichtigung senden", + "loading": "Ladebestätigung senden", + "success": "Erfolgsbenachrichtigung senden", + "warn": "Eine Warnmeldung senden", + "error": "Eine Fehlerbenachrichtigung senden", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Thema wechseln", + }, + "transformer": { + ...en.transformer, + + "preview": "Vorschau", + "docLink": "Lies mehr über Transformers...", + "previewSuccess": "Vorschau Erfolg", + "previewFail": "Vorschau Fail", + "deleteMessage": "Transformator löschen Erfolg. Du kannst {undoKey} zum Rückgängigmachen verwenden.", + "documentationText": "Transformers sind für die Datenumwandlung und Wiederverwendung deines mehrzeiligen JavaScript-Codes gedacht. Verwende Transformers, um Daten aus Abfragen oder Komponenten an deine lokalen App-Anforderungen anzupassen. Im Gegensatz zu JavaScript-Abfragen sind Transformer nur für Leseoperationen ausgelegt. Das bedeutet, dass du innerhalb eines Transformers keine Abfrage auslösen oder einen temporären Zustand aktualisieren kannst.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Anfangswert", + "valueTooltip": "Der Anfangswert, der im temporären Zustand gespeichert wird, kann ein beliebiger gültiger JSON-Wert sein.", + "docLink": "Lies mehr über temporäre Zustände...", + "pathTypeError": "Pfad muss entweder ein String oder ein Array von Werten sein", + "unStructuredError": "Unstrukturierte Daten {prev} können nicht von {path} aktualisiert werden", + "valueDesc": "Vorläufiger Zustandswert", + "deleteMessage": "Der temporäre Zustand wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", + "documentationText": "Temporäre Zustände sind eine leistungsstarke Funktion zur Verwaltung komplexer Variablen, die den Zustand von Komponenten in deiner Anwendung dynamisch aktualisieren. Diese Zustände dienen als Zwischenspeicher für Daten, die sich im Laufe der Zeit aufgrund von Benutzerinteraktionen oder anderen Prozessen ändern können.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Daten", + "dataDesc": "Daten des aktuellen Data Responders", + "dataTooltip": "Wenn diese Daten geändert werden, lösen sie nachfolgende Aktionen aus.", + "docLink": "Lies mehr über die Data Responders...", + "deleteMessage": "Der Data Responder wurde erfolgreich gelöscht. Du kannst {undoKey} zum Rückgängigmachen verwenden.", + "documentationText": "Wenn du eine App entwickelst, kannst du den Komponenten Ereignisse zuweisen, um Änderungen an bestimmten Daten zu überwachen. Eine Tabellenkomponente kann zum Beispiel Ereignisse wie %r@\\\"Row select change%r@\\\", %r@\\\"Filter change%r@\\\", %r@\\\"Sort change%r@\\\" und %r@\\\"Page change%r@\\\" haben, um Änderungen in der selectedRow-Eigenschaft zu verfolgen. Für Änderungen in temporären Zuständen, Transformatoren oder Abfrageergebnissen, für die keine Standardereignisse zur Verfügung stehen, werden jedoch Data Responder verwendet. Mit ihnen kannst du alle Datenänderungen erkennen und darauf reagieren.", + }, + "theme": { + ...en.theme, + + "title": "Themen", + "createTheme": "Thema erstellen", + "themeName": "Themenname:", + "themeNamePlaceholder": "Bitte gib einen Themennamen ein", + "defaultThemeTip": "Standard-Theme:", + "createdThemeTip": "Das Thema, das du erstellt hast:", + "option": "Option{index}", + "input": "Eingabe", + "confirm": "Ok", + "emptyTheme": "Keine Themen verfügbar", + "click": "", + "toCreate": "", + "nameColumn": "Name", + "defaultTip": "Standard", + "updateTimeColumn": "Update Zeit", + "edit": "bearbeiten", + "cancelDefaultTheme": "Standardthema aufheben", + "setDefaultTheme": "Als Standardthema festlegen", + "copyTheme": "Thema duplizieren", + "setSuccessMsg": "Einstellung Erfolglos", + "cancelSuccessMsg": "Unsetting Erfolglos", + "deleteSuccessMsg": "Löschung Erfolglos", + "checkDuplicateNames": "Der Themenname existiert bereits, bitte gib ihn erneut ein", + "copySuffix": " Kopiere", + "saveSuccessMsg": "Erfolgreich gerettet", + "leaveTipTitle": "Tipps", + "leaveTipContent": "Du bist noch nicht gerettet, bestätigst du den Austritt?", + "leaveTipOkText": "Lass", + "goList": "Zurück zur Liste", + "saveBtn": "Speichern", + "mainColor": "Hauptfarben", + "text": "Textfarben", + "layout": "Layout-Einstellungen", + "fonts": "Schriftart-Einstellungen", + "components": "Komponentenvorlagen", + "charts": "eCharts Definition", + "defaultTheme": "Standard", + "yellow": "Gelb", + "green": "Grün", + "previewTitle": "Themenvorschau\nBeispielkomponenten, die deine Themenfarben verwenden", + "dateColumn": "Datum", + "emailColumn": "E-Mail", + "phoneColumn": "Telefon", + "subTitle": "Titel", + "linkLabel": "Link zu", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Fortschritt", + "sliderLabel": "Schieber", + "radioLabel": "Radio", + "checkboxLabel": "Kontrollkästchen", + "buttonLabel": "Formular Schaltfläche", + "switch": "Schalter", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.de", + "previewEmail3": "imgur.com", + "previewEmail4": "globo.de", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Diagrammstil-Vorschau", + "chartSpending": "Ausgaben", + "chartBudget": "Haushalt", + "chartAdmin": "Verwaltung", + "chartFinance": "Finanzen", + "chartSales": "Verkäufe", + "chartFunnel": "Trichterdiagramm", + "chartShow": "anzeigen", + "chartClick": "Klick", + "chartVisit": "Besuche", + "chartQuery": "Abfrage", + "chartBuy": "Kaufen", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Primärfarbe", + "primaryDesc": "Standard-Primärfarbe, die von den meisten Komponenten verwendet wird", + "textDark": "Dunkle Textfarbe", + "textDarkDesc": "Wird verwendet, wenn die Hintergrundfarbe hell ist", + "textLight": "Helle Textfarbe", + "textLightDesc": "Wird verwendet, wenn die Hintergrundfarbe dunkel ist", + "canvas": "Canvas Farbe", + "canvasDesc": "Standard-Hintergrundfarbe der App", + "primarySurface": "Container Farbe", + "primarySurfaceDesc": "Standard-Hintergrundfarbe für Komponenten wie z.B. Tabellen", + "borders": "Border Styles", + "spacing": "Abstandsstile", + "font": "Font Styles", + "fonts": "Schriftarten", + "borderRadius": "Radius des Rahmens", + "borderRadiusDesc": "Standard-Radius des Rahmens, der von den meisten Komponenten verwendet wird", + "borderColor": "Farbe der Umrandung", + "borderColorDesc": "Standard-Rahmenfarbe, die von den meisten Komponenten verwendet wird", + "borderWidth": "Border Width", + "borderWidthDesc": "Standard-Rahmenbreite, die von den meisten Komponenten verwendet wird", + "borderStyle": "Border Style", + "borderStyleDesc": "Standard-Rahmenstil, der von den meisten Komponenten verwendet wird", + "fontFamily": "Schriftfamilie", + "fontFamilyDesc": "Standard-Schriftfamilie, die von den meisten Komponenten verwendet wird", + "chart": "Chart-Stil", + "chartDesc": "JSON Eingabe für Echarts", + "echartsJson": "Chart-Stil JSON", + "margin": "Außenabstand", + "marginDesc": "Standard Außenabstand, der typischerweise für die meisten Komponenten verwendet wird", + "padding": "Innenabstand", + "paddingDesc": "Standard Innenabstand, der für die meisten Komponenten verwendet wird", + "containerHeaderPadding": "Kopfbereich Innenabstand", + "containerheaderpaddingDesc": "Standard Kopfbereich Innenabstand, der für die meisten Komponenten verwendet wird", + "gridColumns": "Canvas Rasterspalten", + "gridColumnsDesc": "Standardanzahl von Spalten, welcher für den Canvas verwendet wird", + "loadingIndicators": "Ladeindikatoren", + "showComponentLoadingIndicators": "Ladeindikatoren beim Laden einer Komponente anzeigen", + "showDataLoadingIndicators": "Zeige Ladeindikatoren während des Ladens von Daten", + "showIndicatorsDuringDataLoading": "Zeige Indikatoren während des Datenladens", + "dataLoadingIndicator": "Daten-Ladeindikator" + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugins", + "npmPluginTitle": "npm-Plugins", + "npmPluginDesc": "Richte npm-Plugins für alle Anwendungen im aktuellen Arbeitsbereich ein.", + "npmPluginEmpty": "Es wurden keine npm-Plugins hinzugefügt.", + "npmPluginAddButton": "Ein npm-Plugin hinzufügen", + "saveSuccess": "Erfolgreich gerettet", + }, + "advanced": { + ...en.advanced, + + "title": "Fortgeschrittene", + "defaultHomeTitle": "Standard-Homepage", + "defaultHomeHelp": "Die Homepage ist die App, die alle Nicht-Entwickler standardmäßig sehen, wenn sie sich anmelden. Hinweis: Stelle sicher, dass die ausgewählte App auch für Nicht-Entwickler zugänglich ist.", + "defaultHomePlaceholder": "Wähle die Standard-Homepage", + "saveBtn": "Speichern", + "preloadJSTitle": "JavaScript vorladen", + "preloadJSHelp": "Richte vorgeladenen JavaScript-Code für alle Apps im aktuellen Arbeitsbereich ein.", + "preloadCSSTitle": "CSS vorladen", + "preloadCSSHelp": "Richte vorgeladenen CSS-Code für alle Apps im aktuellen Arbeitsbereich ein.", + "preloadCSSApply": "Auf die Startseite des Arbeitsbereichs anwenden", + "preloadLibsTitle": "JavaScript-Bibliothek", + "preloadLibsHelp": "Richte vorgeladene JavaScript-Bibliotheken für alle Anwendungen im aktuellen Arbeitsbereich ein, und das System hat lodash, day.js, uuid, numbro zur direkten Verwendung eingebaut. Die JavaScript-Bibliotheken werden vor der Initialisierung der App geladen, was einen gewissen Einfluss auf die Leistung der App hat.", + "preloadLibsEmpty": "Es wurden keine JavaScript-Bibliotheken hinzugefügt", + "preloadLibsAddBtn": "Eine Bibliothek hinzufügen", + "saveSuccess": "Erfolgreich gerettet", + "AuthOrgTitle": "Willkommensbildschirm des Arbeitsbereichs", + "AuthOrgDescrition": "Die URL, unter der sich deine Nutzer beim aktuellen Arbeitsbereich anmelden können.", + "APIConsumption": "API-Verbrauch", + "APIConsumptionDescription": "Hier können Sie den API-Verbrauch für alle Apps im aktuellen Arbeitsbereich sehen.", + "overallAPIConsumption": "Gesamter API-Verbrauch in diesem Arbeitsbereich bis jetzt", + "lastMonthAPIConsumption": "API-Verbrauch des letzten Monats, in diesem Arbeitsbereich", + "npmRegistryTitle": "Benutzerdefinierte NPM-Registrierung", + "npmRegistryHelp": "Richten Sie eine benutzerdefinierte NPM-Registry ein, um den Abruf von Plugins aus einer privaten NPM-Registry zu ermöglichen.", + "showHeaderInPublicApps": "Kopfzeile öffentlich anzeigen", + "showHeaderInPublicAppsHelp": "Legen Sie die Sichtbarkeit des Headers in der öffentlichen Ansicht für alle Apps fest", + }, + "branding": { + ...en.branding, + "title": "Branding-Einstellungen", + "logoSection": "Logos", + "logo": "Logo", + "logoHelp": "Laden Sie das Logo Ihres Unternehmens im SVG- oder PNG-Format hoch.", + "squareLogo": "Quadratisches Logo", + "squareLogoHelp": "Laden Sie eine quadratische Version Ihres Logos im SVG- oder PNG-Format hoch.", + "colorFontSection": "Farben und Schriftarten", + "mainBrandingColor": "Hauptbrandingfarbe", + "mainBrandingColorHelp": "Wählen Sie die Hauptfarbe für Ihr Branding.", + "editorHeaderColor": "Editor-Header-Farbe", + "editorHeaderColorHelp": "Wählen Sie die Farbe des Headers des Editors.", + "adminSidebarColor": "Admin-Seitenleistenfarbe", + "adminSidebarColorHelp": "Wählen Sie die Farbe der Admin-Seitenleiste.", + "editorSidebarColor": "Editor-Seitenleistenfarbe", + "editorSidebarColorHelp": "Wählen Sie die Farbe der Seitenleiste des Editors.", + "font": "Schriftart", + "fontHelp": "Wählen Sie eine Schriftart aus Google Fonts für Ihre Anwendung.", + "textSection": "Texte und Seiten", + "errorPage": "Fehlerseiten-Text", + "errorPageHelp": "Geben Sie den Text ein, der auf der Fehlerseite angezeigt wird.", + "signUpPage": "Anmeldeseiten-Text", + "signUpPageHelp": "Geben Sie den Text ein, der auf der Anmeldeseite angezeigt wird.", + "loggedOutPage": "Abmeldeseiten-Text", + "loggedOutPageHelp": "Geben Sie den Text ein, der auf der Abmeldeseite angezeigt wird.", + "standardDescription": "Standardbeschreibung", + "standardDescriptionHelp": "Geben Sie die Standardbeschreibung für SEO-Metainformationen ein.", + "standardTitle": "Standardtitel", + "standardTitleHelp": "Geben Sie den Standardtitel für SEO-Metainformationen ein.", + "showDocumentation": "Dokumentation anzeigen", + "submitIssue": "Problem melden erlauben", + "whatsNew": "„Neuigkeiten“ aktivieren", + "saveButton": "Einstellungen speichern", + "errorPageImage": "Laden Sie ein Bild für die Fehlerseite im SVG- oder PNG-Format hoch.", + "signUpPageImage": "Laden Sie ein Bild für die Registrierungsseite im SVG- oder PNG-Format hoch.", + "loggedOutPageImage": "Laden Sie ein Bild für die Abmeldeseite im SVG- oder PNG-Format hoch.", + "documentationLink": "Dokumentationslink", + "documentationLinkPlaceholder": "Geben Sie die URL für Ihre Dokumentation ein...", + "documentationLinkHelp": "Geben Sie eine gültige URL an, die Benutzer für die Dokumentation besuchen können.", + "whatsNewSection": "Dokumentationseinstellungen", + "whatsNewLink": "Dokumentationslink", + "whatsNewLinkPlaceholder": "Geben Sie die URL für Ihre Dokumentation ein...", + "whatsNewLinkHelp": "Geben Sie eine gültige URL an, die Benutzer für Ihre Neuigkeiten besuchen können." + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Verbindung zum Server fehlgeschlagen, bitte überprüfe dein Netzwerk", + "200": "Erfolg", + "201": "Erstellt", + "204": "Kein Inhalt", + "400": "Bad Request", + "401": "Authentifizierung fehlgeschlagen, bitte melde dich erneut an", + "403": "Keine Erlaubnis, bitte kontaktiere den Administrator für eine Genehmigung", + "404": "Nicht gefunden", + "500": "Besetzter Dienst, bitte versuche es später noch einmal", + "timeout": "Zeitüberschreitung anfordern", + }, + "share": { + ...en.share, + + "title": "Teilen", + "viewer": "Betrachter", + "editor": "Herausgeber", + "owner": "Besitzer", + "datasourceViewer": "Kann verwenden", + "datasourceOwner": "Kann Managen", + }, + "debug": { + ...en.debug, + + "title": "Titel", + "switch": "Schalterkomponente: ", + }, + "module": { + ...en.module, + + "emptyText": "Keine Daten", + "docLink": "Lesen Sie mehr über Module...", + "documentationText": "Module sind vollständige Anwendungen, die in andere Anwendungen eingebunden und wiederholt werden können und wie eine einzelne Komponente funktionieren. Da Module eingebettet werden können, müssen sie in der Lage sein, mit Ihren externen Anwendungen oder Websites zu interagieren. Diese vier Einstellungen helfen, die Kommunikation mit einem Modul zu unterstützen.", + "circularReference": "Zirkuläre Referenz, aktuelles Modul/Anwendung kann nicht verwendet werden!", + "emptyTestInput": "Das aktuelle Modul hat keinen Eingang zum Testen", + "emptyTestMethod": "Das aktuelle Modul hat keine Methode zum Testen", + "name": "Name", + "input": "Eingabe", + "params": "Params", + "emptyParams": "Es wurden keine Params hinzugefügt", + "emptyInput": "Es wurde keine Eingabe hinzugefügt", + "emptyMethod": "Es wurde keine Methode hinzugefügt", + "emptyOutput": "Es wurde keine Ausgabe hinzugefügt", + "data": "Daten", + "string": "Zeichenfolge", + "number": "Nummer", + "array": "Array", + "boolean": "Boolesche", + "query": "Abfrage", + "autoScaleCompHeight": "Bauteilhöhenwaage mit Container", + "excuteMethod": "Methode {name} ausführen", + "method": "Methode", + "action": "Aktion", + "output": "Ausgabe", + "nameExists": "Name {name} bereits vorhanden", + "eventTriggered": "Ereignis {name} wird ausgelöst", + "globalPromptWhenEventTriggered": "Zeigt eine globale Aufforderung an, wenn ein Ereignis ausgelöst wird", + "emptyEventTest": "Das aktuelle Modul hat keine zu prüfenden Ereignisse", + "emptyEvent": "Es wurde kein Ereignis hinzugefügt", + "event": "Veranstaltung", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "Der Rückgabewert ist eine Funktion.", + "consume": "{Zeit}", + "JSON": "JSON anzeigen", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Erstellen...", + "created": "Erstelle {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Benutzerauthentifizierung fehlgeschlagen, bitte melde dich erneut an", + "verifyAccount": "Konto muss verifiziert werden", + "functionNotSupported": "Die aktuelle Version unterstützt diese Funktion nicht. Bitte kontaktiere das Lowcoder Business Team, um dein Konto zu aktualisieren.", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Komponente erstellen {comp} Fehlgeschlagen", + "notHandledError": "{method} Nicht ausgeführte Methode", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Navigationsleiste", + "chooseApp": "App wählen", + "iconTooltip": "Unterstützt Image src Link oder Base64 String wie data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Versteckt für nicht autorisierte Benutzer", + "queryParam": "URL-Abfrage-Parameter", + "hashParam": "URL-Hash-Parameter", + "tabBar": "Registerkarte Bar", + "emptyTabTooltip": "Konfiguriere diese Seite im rechten Fensterbereich", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Mobile)", + "800": "800px (Tablet)", + "1440": "1440px (Laptop)", + "1920": "1920px (Breitbild)", + "3200": "3200px (Super Large Screen)", + "title": "Allgemeine App-Einstellungen", + "autofill": "Autofill", + "userDefined": "Benutzerdefiniert", + "default": "Standard", + "tooltip": "Das Popover nach der Einstellung schließen", + "canvasMaxWidth": "Maximale Bildschirmbreite für diese App", + "userDefinedMaxWidth": "Benutzerdefinierte maximale Breite", + "inputUserDefinedPxValue": "Bitte gib einen benutzerdefinierten Pixelwert ein", + "maxWidthTip": "Die maximale Breite sollte größer als oder gleich 350 sein", + "themeSetting": "Angewandter Stil Thema", + "themeSettingDefault": "Standard", + "themeCreate": "Thema erstellen", + "appTitle": "Titel", + "appDescription": "Beschreibung", + "appCategory": "Kategorie", + "showPublicHeader": "Kopfzeile in der öffentlichen Ansicht anzeigen", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Benutzerdefinierte Abkürzungen", + "shortcut": "Abkürzung", + "action": "Aktion", + "empty": "Keine Abkürzungen", + "placeholder": "Shortcut drücken", + "otherPlatform": "Andere", + "space": "Raum", + }, + "profile": { + ...en.profile, + + "orgSettings": "Arbeitsbereich-Einstellungen", + "switchOrg": "Bereich wechseln", + "joinedOrg": "Meine Arbeitsbereiche", + "createOrg": "Arbeitsbereich erstellen", + "logout": "Abmelden", + "personalInfo": "Mein Profil", + "bindingSuccess": "Bindung {sourceName} Erfolg", + "uploadError": "Upload-Fehler", + "editProfilePicture": "Ändern Sie", + "saveUserNameTooltip": "Drücken Sie die Eingabetaste, um Ihren neuen Benutzernamen zu speichern. Wenn Sie Ihre E-Mail-Adresse sehen, bedeutet dies, dass wir sie als Benutzernamen übernommen haben und Sie sie in einen besseren ändern können. Ihre E-Mail als technischer Benutzername bleibt unangetastet.", + "changeAvatarTooltip": "Sie können PNG- oder JPG-Dateien hochladen", + "nameCheck": "Der Name darf nicht leer sein", + "name": "Name:", + "namePlaceholder": "Bitte gib deinen Namen ein", + "toBind": "Zum Binden", + "binding": "Ist Verbindlich", + "bindError": "Parameter Error, Currently Not Supported Binding.", + "bindName": "Binden {name}", + "loginAfterBind": "Nach der Bindung kannst du dich mit {name} anmelden", + "bindEmail": "E-Mail binden:", + "email": "E-Mail", + "emailCheck": "Bitte gib eine gültige E-Mail ein", + "emailPlaceholder": "Bitte gib deine E-Mail ein", + "submit": "einreichen", + "bindEmailSuccess": "Erfolgreiche E-Mail-Bindung", + "passwordModifiedSuccess": "Passwort erfolgreich geändert", + "passwordSetSuccess": "Passwort erfolgreich gesetzt", + "oldPassword": "Altes Passwort:", + "inputCurrentPassword": "Bitte gib dein aktuelles Passwort ein", + "newPassword": "Neues Passwort:", + "inputNewPassword": "Bitte gib dein neues Passwort ein", + "confirmNewPassword": "Bestätige das neue Passwort:", + "inputNewPasswordAgain": "Bitte gib dein neues Passwort erneut ein", + "password": "Passwort:", + "modifyPassword": "Passwort ändern", + "setPassword": "Passwort setzen", + "alreadySetPassword": "Passwort setzen", + "setPassPlaceholder": "Du kannst dich mit Passwort anmelden", + "setPassAfterBind": "Du kannst das Passwort nach der Kontobindung festlegen", + "socialConnections": "Soziale Bindungen", + "changeAvatar": "Avatar ändern", + "about": "Dein Account", + "userId": "Benutzer-ID", + "createdAt": "Erstellt am", + "currentOrg": "aktuelle Organisation", + "settings": "Einstellungen", + "uiLanguage": "UI-Sprache", + "info": "Info", + "createdApps": "Erstellte Apps", + "createdModules": "Erstellte Module", + "sharedApps": "Mit Ihnen geteilte Apps", + "sharedModules": "Mit Ihnen geteilte Module", + "onMarketplace": "Auf dem Marktplatz", + "howToPublish": "So veröffentlichen Sie auf dem Marktplatz", + "memberOfOrgs": "Workspaces-Mitgliedschaft", + "apiKeys": "API-Schlüssel", + "createApiKey": "API-Schlüssel erstellen", + "apiKeyName": "Name", + "apiKeyDescription": "Beschreibung", + "apiKeyCopy": "Klicke auf den API Schlüssel um den Key in die Zwischenablage zu kopieren", + "apiKey": "API-Schlüssel", + "deleteApiKey": "API-Schlüssel löschen", + "deleteApiKeyContent": "Sind Sie sicher, dass Sie diesen API-Schlüssel löschen möchten?", + "deleteApiKeyError": "Etwas ist schief gelaufen. Bitte versuche es erneut.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Tastaturkürzel", + "click": "Klick", + "global": "Global", + "toggleShortcutList": "Tastaturkurzbefehle umschalten", + "editor": "Herausgeber", + "toggleLeftPanel": "Linkes Fenster umschalten", + "toggleBottomPanel": "Unteres Fenster umschalten", + "toggleRightPanel": "Rechtes Fenster umschalten", + "toggleAllPanels": "Alle Fenster umschalten", + "preview": "Vorschau", + "undo": "Rückgängig machen", + "redo": "Redo", + "showGrid": "Raster anzeigen", + "component": "Komponente", + "multiSelect": "Mehrere auswählen", + "selectAll": "Alle auswählen", + "copy": "Kopiere", + "cut": "Schnitt", + "paste": "Kleister", + "move": "Verschiebe", + "zoom": "Größe ändern", + "delete": "löschen", + "deSelect": "Deselektiere", + "queryEditor": "Abfrage-Editor", + "excuteQuery": "Aktuelle Abfrage ausführen", + "editBox": "Text-Editor", + "formatting": "Format", + "openInLeftPanel": "Im linken Fenster öffnen", + }, + "help": { + ...en.help, + + "videoText": "Übersicht", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Du kannst keine neue Anwendung oder Datenquelle erstellen?", + "permissionDenyContent": "Du hast nicht die Berechtigung, die Anwendung und die Datenquelle zu erstellen. Bitte kontaktiere den Administrator, um der Entwicklergruppe beizutreten.", + "appName": "Tutorial Anwendung", + "chat": "Chatte mit uns", + "docs": "Dokumentation ansehen", + "editorTutorial": "Tutorial-Editor", + "update": "Was gibt's Neues?", + "version": "Version", + "versionWithColon": "Version:", + "submitIssue": "Problem melden", + }, + "header": { + ...en.header, + + "nameCheckMessage": "Der Name kann nicht leer sein", + "viewOnly": "Nur Ansicht", + "recoverAppSnapshotTitle": "Diese Version wiederherstellen?", + "recoverAppSnapshotContent": "Stelle die aktuelle App auf die Version wieder her, die zum Zeitpunkt {time} erstellt wurde.", + "recoverAppSnapshotMessage": "Diese Version wiederherstellen", + "returnEdit": "Zurück zum Bearbeiten", + "deploy": "Veröffentlichen", + "export": "Exportieren nach JSON", + "editName": "Name bearbeiten", + "duplicate": "{type} Duplizieren", + "snapshot": "Bearbeitungs-Historie", + "scriptsAndStyles": "Skripte und Stil", + "appSettings": "App-Einstellungen", + "preview": "Vorschau", + "editError": "Verlaufsvorschau-Modus, kein Betrieb wird unterstützt.", + "clone": "Klonen", + "editorMode_layout": "Layout", + "editorMode_logic": "Logik", + "editorMode_both": "Beide", + "editorMode_layout_tooltip": "Passen Sie im rechten Fenster das Erscheinungsbild und Layout der Komponente an. Passen Sie Aussehen, Stil und Animationen an.", + "editorMode_logic_tooltip": "Richten Sie im rechten Fenster ein, wie Ihre Komponente funktioniert und interagiert. Verwalten Sie den Inhalt und das interaktive Verhalten.", + "AppEditingBlocked": "App-Bearbeitung blockiert für:", + "AppEditingBlockedHint": "Änderungen werden nicht gespeichert, während ein anderer Benutzer diese App bearbeitet.", + "AppEditingBlockedMessage": "Bitte warten Sie, bevor Sie den Bearbeitungsstatus der App überprüfen.", + "AppEditingBlockedCheckStatus": "App-Status prüfen", + "AppEditingBlockedSomeone": "Jemand", + "AppEditingBlockedMessageSnipped": "bearbeitet diese App", +}, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Anmelden", + "email": "E-Mail:", + "inputEmail": "Bitte gib deine E-Mail ein", + "inputValidEmail": "Bitte gib eine gültige E-Mail ein", + "forgotPassword": "Passwort vergessen", + "forgotPasswordInfo": "Geben Sie Ihre E-Mail-Adresse ein, und wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts zu.", + "forgotPasswordSuccess": "Bitte überprüfen Sie Ihre E-Mail auf den Link zum Zurücksetzen des Passworts.", + "forgotPasswordError": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", + "register": "Neu Registrieren", + "userLogin": "Anmelden", + "login": "Anmelden", + "bind": "Binde", + "passwordCheckLength": "Mindestens {min} Zeichen", + "passwordCheckContainsNumberAndLetter": "Muss Buchstaben und Ziffern enthalten", + "passwordCheckSpace": "Kann keine Leerzeichen enthalten", + "welcomeTitle": "Willkommen bei {productName}", + "inviteWelcomeTitle": "{username} lädt dich zur Mitarbeit ein", + "terms": "Geschäftsbedingungen", + "privacy": "Datenschutzrichtlinie", + "registerHint": "Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu.", + "chooseAccount": "Wähle dein Konto", + "signInLabel": "Melde dich mit {name} an", + "bindAccount": "Konto zusammenführen", + "scanQrCode": "Scanne den QR-Code mit {name}", + "invalidThirdPartyParam": "Ungültige Drittpartei Param", + "account": "Konto", + "inputAccount": "Bitte gib dein Konto ein", + "ldapLogin": "LDAP-Anmeldung", + "resetPassword": "Passwort zurücksetzen", + "resetPasswordDesc": "Setze das Passwort von Benutzer {name} zurück. Nach dem Zurücksetzen wird ein neues Passwort generiert.", + "resetSuccess": "Zurücksetzen Erfolglos", + "resetSuccessDesc": "Passwort zurücksetzen war erfolgreich. Das neue Passwort lautet: {password}", + "resetLostPasswordSuccess": "Passwort zurücksetzen war erfolgreich. Bitte melden Sie sich erneut an.", + "copyPassword": "Passwort kopieren", + "poweredByLowcoder": "Powered by: Lowcoder.cloud", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Füge JavaScript-Bibliotheken über URL-Adressen zu deiner aktuellen Anwendung hinzu. lodash, day.js, uuid, numbro sind zur sofortigen Verwendung in das System integriert. JavaScript-Bibliotheken werden geladen, bevor die Anwendung initialisiert wird, was sich auf die Leistung der Anwendung auswirken kann.", + "exportedAs": "Exportiert als", + "urlTooltip": "URL-Adresse der JavaScript-Bibliothek, [unpkg.com](https://unpkg.com/) oder [jsdelivr.net](https://www.jsdelivr.com/) wird empfohlen", + "externalLibsHelperText": "Es werden nur Bibliotheken unterstützt, die den UMD-Ansatz (Universal Module Definition) verwenden. Lesen Sie hier mehr: https://github.com/umdjs/umd", + "recommended": "Empfohlen", + "viewJSLibraryDocument": "Dokument", + "jsLibraryURLError": "Ungültige URL", + "jsLibraryExist": "JavaScript-Bibliothek existiert bereits", + "jsLibraryEmptyContent": "Keine JavaScript-Bibliotheken hinzugefügt", + "jsLibraryDownloadError": "Fehler beim Herunterladen der JavaScript-Bibliothek", + "jsLibraryInstallSuccess": "Die JavaScript-Bibliothek wurde erfolgreich installiert", + "jsLibraryInstallFailed": "Installation der JavaScript-Bibliothek fehlgeschlagen", + "jsLibraryInstallFailedCloud": "Vielleicht ist die Bibliothek in der Sandbox nicht verfügbar, [Dokumentation](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{Nachricht}", + "add": "Neu hinzufügen", + "jsHelpText": "Füge eine globale Methode oder Variable zur aktuellen Anwendung hinzu.", + "cssHelpText": "Füge der aktuellen Anwendung Stile hinzu. Die DOM-Struktur kann sich ändern, wenn das System iteriert. Versuche, Stile über Komponenteneigenschaften zu ändern.", + "scriptsAndStyles": "Skripte und Stile", + "jsLibrary": "JavaScript-Bibliothek", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Komponente", + "componentContent": "Die rechte Komponentenleiste bietet dir viele vorgefertigte Anwendungsblöcke (Komponenten). Diese können zur Verwendung auf die Leinwand gezogen werden. Mit ein wenig Programmierkenntnissen kannst du auch deine eigenen Komponenten erstellen.", + "canvas": "Segeltuch", + "canvasContent": "Erstelle deine Apps auf dem Canvas mit dem Ansatz \"What You See Is What You Get\". Ziehe die Komponenten einfach per Drag & Drop, um dein Layout zu gestalten, und verwende Tastenkombinationen zum schnellen Bearbeiten wie Löschen, Kopieren und Einfügen. Sobald du eine Komponente ausgewählt hast, kannst du jedes Detail anpassen - vom Styling und Layout bis hin zur Datenbindung und dem logischen Verhalten. Ein weiterer Vorteil ist das responsive Design, das dafür sorgt, dass deine Apps auf jedem Gerät gut aussehen.", + "queryData": "Daten abfragen", + "queryDataContent": "Du kannst hier Datenabfragen erstellen und dich mit MySQL, MongoDB, Redis, Airtable und vielen anderen Datenquellen verbinden. Nachdem du die Abfrage konfiguriert hast, klickst du auf \\'Run\\', um die Daten abzurufen und das Tutorial fortzusetzen.", + "compProperties": "Komponenten-Eigenschaften", + "interactiveDemo": "Interaktive Demo", + "interactiveDemoToolTip": "Klicken Sie hier, um eine interaktive Demo dieser Funktion zu starten", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "🎉 Willkommen! Klicke auf \\'App\\' und beginne, deine erste Anwendung zu erstellen.", + "createAppTitle": "App erstellen", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Benutzerdefinierte NPM-Registrierung aktivieren", + "npmRegistryUrl": "NPM-Registrierungsurl", + "npmRegistryUrlRequired": "Bitte geben Sie die Registrierungs-URL ein", + "npmRegistryUrlInvalid": "Bitte geben Sie eine gültige URL ein", + "npmRegistryScope": "Umfang des Pakets", + "npmRegistryPattern": "Muster", + "npmRegistryPatternInvalid": "Bitte geben Sie ein gültiges Muster ein (beginnend mit @ für Organisationen).", + "npmRegistryAuth": "Authentifizierung", + "npmRegistryAuthType": "Art der Authentifizierung", + "npmRegistryAuthCredentials": "Berechtigungsnachweise zur Authentifizierung", + "npmRegistryAuthCredentialsRequired": "Bitte geben Sie die Anmeldedaten für die Registrierung ein", + "npmRegistryAuthCredentialsHelp": "Für die Basisauthentifizierung geben Sie den base64-kodierten Benutzernamen und das Passwort im Format \"base64(Benutzername:Passwort)\" an, für die Tokenauthentifizierung das Token.", + }, + "history": { + ...en.history, + + "layout": "\\'{0}' Layout-Anpassung", + "upgrade": "Upgrade \\'{0}\\'", + "delete": "Löschen \\'{0}\\'", + "add": "Hinzufügen \\'{0}\\'", + "modify": "Ändern \\'{0}\\'", + "rename": "\\'{1}\\' in \\'{0}\\' umbenennen", + "recover": "Wiederherstellen der '2'-Version", + "recoverVersion": "Version wiederherstellen", + "andSoOn": "und so weiter", + "timeFormat": "MM DD um hh:mm A", + "emptyHistory": "Keine Geschichte", + "currentVersionWithBracket": " (Aktuell)", + "currentVersion": "Aktuelle Version", + "justNow": "Gerade jetzt", + "history": "Geschichte", + }, + "home": { + ...en.home, + + "profile": "Profil", + "news": "Nachrichten", + "newsLoading": "Das Laden dauert ein wenig...", + "orgHome": "Homepage (Org)", + "yourOrg": "Ihre Organisation", + "orgHomeTitle": "Organisation Homepage", + "appMarketplace": "Anwendungsmarktplatz", + "allApplications": "Alle Apps", + "allModules": "Alle Module", + "allFolders": "Alle Ordner", + "yourFolders": "Deine Ordner", + "modules": "Module", + "module": "Modul", + "api": "Lowcoder-API", + "trash": "Papierkorb", + "marketplace": "Marktplatz", + "allCategories": "Alle Kategorien", + "queryLibrary": "Abfragebibliothek", + "datasource": "Datenquellen", + "selectDatasourceType": "Datenquellentyp auswählen", + "home": "Startseite | Verwaltungsbereich", + "all": "Alle", + "app": "App", + "navigation": "Navigation", + "navLayout": "PC-Navigation", + "navLayoutDesc": "Menü auf der linken Seite für eine einfache Desktop-Navigation.", + "mobileTabLayout": "Mobile Navigation", + "mobileTabLayoutDesc": "Untere Navigationsleiste für reibungsloses mobiles Surfen.", + "folders": "Ordner", + "folder": "Mappe", + "rootFolder": "Wurzel", + "import": "Importieren", + "export": "Exportieren nach JSON", + "show": "anzeigen", + "inviteUser": "Mitglieder einladen", + "createFolder": "Ordner erstellen", + "createFolderSubTitle": "Name des Ordners:", + "moveToFolder": "In Ordner verschieben", + "moveToTrash": "In den Papierkorb verschieben", + "moveToFolderSubTitle": "Bewege dich zu:", + "folderName": "Name des Ordners:", + "resCardSubTitle": "{time} von {creator}", + "trashEmpty": "Der Papierkorb ist leer.", + "projectEmpty": "Hier ist nichts.", + "projectEmptyCanAdd": "Du hast noch keine Apps. Klicke auf Neu, um loszulegen.", + "name": "Name", + "type": "Typ", + "creator": "Erstellt von", + "lastModified": "Zuletzt geändert", + "deleteTime": "Zeit löschen", + "createTime": "Zeit schaffen", + "datasourceName": "Name der Datenquelle", + "databaseName": "Name der Datenbank", + "nameCheckMessage": "Der Name darf nicht leer sein", + "deleteElementTitle": "Dauerhaft löschen", + "moveToTrashSubTitle": "{type} {name} wird in den Papierkorb verschoben.", + "deleteElementSubTitle": "Lösche {type} {name} dauerhaft, er kann nicht wiederhergestellt werden.", + "deleteSuccessMsg": "Gelöscht erfolgreich", + "deleteErrorMsg": "Gelöschter Fehler", + "recoverSuccessMsg": "Erfolgreich wiederhergestellt", + "newDatasource": "Neue Datenquelle", + "creating": "Erstellen...", + "chooseDataSourceType": "Datenquellentyp auswählen", + "folderAlreadyExists": "Der Ordner existiert bereits", + "newNavLayout": "{userName}'s {name}", + "newApp": "{userName}'s neuer {name} ", + "importError": "Importfehler, {message}", + "exportError": "Exportfehler, {message}", + "importSuccess": "Erfolg importieren", + "fileUploadError": "Datei-Upload-Fehler", + "fileFormatError": "Fehler im Dateiformat", + "groupWithSquareBrackets": "[Gruppe] ", + "allPermissions": "Besitzer", + "shareLink": "Link teilen: ", + "copyLink": "Link kopieren", + "appPublicMessage": "App veröffentlichen. Die App wird damit für jeden sichtbar.", + "modulePublicMessage": "Module veröffentlichen. Das Module wird damit für jeden sichtbar.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Veröffentlichen Sie Ihre App auf dem öffentlichen Marktplatz. Jeder kann sie dort sehen und kopieren.", + "moduleMarketplaceMessage": "Veröffentlichen Sie Ihr Modul auf dem öffentlichen Marktplatz. Jeder kann es dort sehen und kopieren.", + "marketplaceGoodPublishing": "Bitte stellen Sie sicher, dass Ihre App gut benannt und einfach zu bedienen ist. Entfernen Sie alle sensiblen Informationen vor der Veröffentlichung. Entfernen Sie außerdem lokale Datenquellen und ersetzen Sie sie durch statische, integrierte temporäre Daten.", + "noMarketplaceApps": "Noch sind keine Anwendungen auf dem Marktplatz.", + "errorMarketplaceApps": "Fehler beim Laden von Marketplace Apps", + "localMarketplaceTitle": "Lokaler Marktplatz", + "globalMarketplaceTitle": "Öffentlicher Marktplatz", + "memberPermissionList": "Berechtigungen: ", + "orgName": "{orgName} admins", + "addMember": "Mitglieder hinzufügen", + "addPermissionPlaceholder": "Bitte gib einen Namen ein, um Mitglieder zu suchen", + "searchMemberOrGroup": "Suche nach Mitgliedern oder Gruppen: ", + "addPermissionErrorMessage": "Berechtigung kann nicht hinzugefügt werden, {message}", + "copyModalTitle": "Klonen", + "copyNameLabel": "{type} Name", + "copyModalfolderLabel": "Zum Ordner hinzufügen", + "copyNamePlaceholder": "Bitte gib einen {type} Namen ein", + "chooseNavType": "Bitte wähle die Art der Navigation", + "createNavigation": "Navigation erstellen", + "howToUseAPI": "Verwendung der Open Rest API", + "support": "Unterstützung", + }, + "support": { + ...en.support, + + "supportTitle": "Lowcoder-Support", + "supportContent": "Wenn Sie Fragen haben oder Hilfe benötigen, nutzen Sie bitte das Ticketsystem, um Ihr Problem schnell zu lösen.", + "newSupportTicket": "Neues Support-Ticket", + "ticketTitle": "Titel", + "priority": "Priorität", + "assignee": "Zuständiger", + "status": "Ticketstatus", + "updatedTime": "Aktualisierte Zeit", + "active": "Aktiv", + "inactive": "Inaktiv", + "noEmail": "Keine E-Mail", + "details": "Einzelheiten", + "reloadTickets": "Tickets neu laden", + "createdDate": "Erstellungsdatum", + "updatedDate": "Aktualisierungsdatum", + "description": "Problembeschreibung", + "subtasks": "Unteraufgaben", + "subtasksProgress": "Fortschritt aller Unteraufgaben", + "attachments": "Anhänge", + "comments": "Kommentare", + "addComment": "Kommentar hinzufügen", + "addAttachment": "Anhang hinzufügen", + "edit": "Ticketbeschreibung bearbeiten", + "save": "Ticketbeschreibung speichern", + "cancel": "Abbrechen", + "submitComment": "Kommentar absenden", + "upload": "Anhang hochladen", + "selectFile": "Datei auswählen", + "ticketDescriptionUpdated": "Ticketbeschreibung erfolgreich aktualisiert!", + "ticketDescriptionUpdateFailed": "Ticketbeschreibung konnte nicht aktualisiert werden.", + "writeComment": "Einen Kommentar schreiben...", + "ticketCommentAdded": "Kommentar erfolgreich hinzugefügt!", + "ticketCommentFailed": "Kommentar konnte nicht hinzugefügt werden.", + "ticketCommentEmpty": "Bitte schreiben Sie einen Kommentar, bevor Sie ihn absenden.", + "ticketAttachmentUploaded": "Anhang erfolgreich hochgeladen!", + "ticketAttachmentFailed": "Anhang konnte nicht hochgeladen werden.", + "ticketAttachmentEmpty": "Bitte wählen Sie eine Datei zum Hochladen aus.", + "ticketFetchError": "Ticket konnte nicht geladen werden.", + "ticketNotFound": "Ticket nicht gefunden.", + "addAttachmentFileSize": "Datei muss kleiner als 5 MB sein!", + "goBack": "Zurück", + "noDescription": "Keine Beschreibung verfügbar.", + "createTicket": "Neues Support-Ticket erstellen", + "createTicketTitlePlaceholder": "Titel eingeben (max. 150 Zeichen)", + "createTicketDescriptionTitle": "Beschreiben Sie Ihr Problem - je mehr Details, desto besser:", + "createTicketDescriptionPlaceholder": "Beschreiben Sie das Problem im Detail, einschließlich: 1) Schritte zur Reproduktion des Problems, 2) Erwartetes Verhalten im Vergleich zum tatsächlichen Verhalten, 3) Code-Snippets, falls zutreffend, 4) Betroffene Komponenten, APIs oder Konfigurationen", + "createTicketSubmit": "Ticket absenden", + "createTicketInfoText": "Wenn Ihr Ticket erstellt wurde, können Sie im Abschnitt 'Details' Screenshots und Kommentare hinzufügen.", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Position der Navigationspunkte", + "autoPlay": "AutoPlay", + "showDots": "Navigationspunkte anzeigen", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Ungültiger npm-Paketname oder URL.", + "pluginExisted": "Dieses npm Plugin existierte bereits", + "compNotFound": "Komponente {compName} nicht gefunden.", + "addPluginModalTitle": "Plugin aus einem npm-Repository hinzufügen", + "pluginNameLabel": "URL oder Name des npm-Pakets", + "noCompText": "Keine Komponenten.", + "compsLoading": "Laden...", + "removePluginBtnText": "entfernen", + "addPluginBtnText": "npm-Plugin hinzufügen", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "Der Standardwert des Toggle-Buttons, zum Beispiel: Falsch", + "trueDefaultText": "Verstecken", + "falseDefaultText": "anzeigen", + "trueLabel": "Text für Wahr", + "falseLabel": "Text für Falsch", + "trueIconLabel": "Icon für Wahr", + "falseIconLabel": "Icon für Falsch", + "iconPosition": "Icon Position", + "showText": "Text anzeigen", + "alignment": "Ausrichtung", + "showBorder": "Grenze anzeigen", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", + "demoText": "Lowcoder | Erstelle Softwareanwendungen für dein Unternehmen und deine Kunden mit minimaler Programmiererfahrung. Lowcoder ist die beste Alternative zu Retool, Appsmith oder Tooljet.", + "submit": "einreichen", + "style": "Stil", + "danger": "Gefahr", + "warning": "Warnung", + "success": "Erfolg", + "menu": "Menü", + "link": "Link zu", + "customAppearance": "Benutzerdefiniertes Erscheinungsbild", + "search": "Suche", + "pleaseInputNumber": "Bitte eine Nummer eingeben", + "mostValue": "Größter Wert", + "maxRating": "Maximale Bewertung", + "notSelect": "Nicht ausgewählt", + "halfSelect": "Halbe Auswahl", + "pleaseSelect": "Bitte wählen", + "title": "Titel", + "content": "Inhalt", + "componentNotFound": "Komponente ist nicht vorhanden", + "example": "Beispiele", + "defaultMethodDesc": "Den Wert der Eigenschaft {name} festlegen", + "propertyUsage": "Du kannst komponentenbezogene Informationen lesen, indem du über den Komponentennamen auf die Komponenteneigenschaften zugreifst, wo immer du JavaScript schreiben kannst.", + "property": "Eigenschaften", + "propertyName": "Eigenschaft Name", + "propertyType": "Typ", + "propertyDesc": "Beschreibung", + "event": "Veranstaltungen", + "eventName": "Name der Veranstaltung", + "eventDesc": "Beschreibung", + "mehtod": "Methoden", + "methodUsage": "Du kannst mit Komponenten über ihre Methoden interagieren und sie überall dort, wo du JavaScript schreiben kannst, mit ihrem Namen aufrufen. Oder du kannst sie über die Aktion \"Komponente\" eines Ereignisses aufrufen.", + "methodName": "Methode Name", + "methodDesc": "Beschreibung", + "showBorder": "Grenze anzeigen", + "haveTry": "Versuch es selbst", + "settings": "Einstellung", + "settingValues": "Einstellung Wert", + "defaultValue": "Standardwert", + "time": "Zeit", + "date": "Datum", + "noValue": "Keine", + "xAxisType": "X-Achse Typ", + "hAlignType": "Horizontale Ausrichtung", + "leftLeftAlign": "Links-Links-Ausrichtung", + "leftRightAlign": "Links-Rechts-Ausrichtung", + "topLeftAlign": "Ausrichtung von oben nach links", + "topRightAlign": "Ausrichtung oben-rechts", + "validation": "Validierung", + "required": "Erforderlich", + "defaultStartDateValue": "Standard Startdatum", + "defaultEndDateValue": "Standard-Enddatum", + "basicUsage": "Grundlegende Verwendung", + "basicDemoDescription": "Die folgenden Beispiele zeigen die grundlegende Verwendung der Komponente.", + "noDefaultValue": "Kein Standardwert", + "forbid": "Verboten", + "placeholder": "Platzhalter", + "pleaseInputPassword": "Bitte gib ein Passwort ein", + "password": "Passwort", + "textAlign": "Textausrichtung", + "length": "Länge", + "top": "Top", + "pleaseInputName": "Bitte gib deinen Namen ein", + "userName": "Name", + "fixed": "Festgelegt", + "responsive": "Ansprechbar", + "workCount": "Wortzahl", + "cascaderOptions": "Kaskadenoptionen", + "pleaseSelectCity": "Bitte wähle eine Stadt", + "advanced": "Fortgeschrittene", + "showClearIcon": "Löschen-Symbol anzeigen", + "appleOptionLabel": "Apfel", + "waterMelonOptionLabel": "Wassermelone", + "berryOptionLabel": "Erdbeere", + "lemonOptionLabel": "Zitrone", + "coconutOptionLabel": "Kokosnuss", + "likedFruits": "Favoriten", + "option": "Option", + "singleFileUpload": "Einzelner Datei-Upload", + "multiFileUpload": "Mehrere Dateien hochladen", + "folderUpload": "Ordner hochladen", + "multiFile": "Mehrere Dateien", + "folder": "Mappe", + "open": "Öffnen Sie", + "favoriteFruits": "Lieblingsfrüchte", + "pleaseSelectOneFruit": "Wähle eine Frucht", + "notComplete": "Nicht vollständig", + "complete": "Vollständig", + "echart": "EChart", + "lineChart": "Liniendiagramm", + "basicLineChart": "Grundlegendes Liniendiagramm", + "lineChartType": "Liniendiagramm Typ", + "stackLineChart": "Gestapelte Linie", + "areaLineChart": "Bereich Linie", + "scatterChart": "Punktediagramm", + "scatterShape": "Streuung Form", + "scatterShapeCircle": "Kreis", + "scatterShapeRect": "Rechteck", + "scatterShapeTri": "Dreieck", + "scatterShapeDiamond": "Diamant", + "scatterShapePin": "Stecknadel", + "scatterShapeArrow": "Pfeil", + "pieChart": "Kreisdiagramm", + "basicPieChart": "Grundlegendes Kreisdiagramm", + "pieChatType": "Kreisdiagramm Typ", + "pieChartTypeCircle": "Donut-Tabelle", + "pieChartTypeRose": "Rosenkarte", + "titleAlign": "Titel Position", + "color": "Farbe", + "dashed": "Gestrichelt", + "imADivider": "Ich bin eine Trennungslinie", + "tableSize": "Tabelle Größe", + "subMenuItem": "UnterMenü {num}", + "menuItem": "Menü {num}", + "labelText": "Etikett", + "labelPosition": "Etikett - Position", + "labelAlign": "Etikett - Ausrichten", + "optionsOptionType": "Konfiguration Methode", + "styleBackgroundColor": "Hintergrundfarbe", + "styleBorderColor": "Farbe der Umrandung", + "styleColor": "Schriftfarbe", + "selectionMode": "Zeilenauswahl-Modus", + "paginationSetting": "Paginierung Einstellung", + "paginationShowSizeChanger": "Unterstützung der Benutzer bei der Änderung der Anzahl von Einträgen pro Seite", + "paginationShowSizeChangerButton": "Schaltfläche Größenänderer anzeigen", + "paginationShowQuickJumper": "Quick Jumper anzeigen", + "paginationHideOnSinglePage": "Verstecken, wenn es nur eine Seite gibt", + "paginationPageSizeOptions": "Seitengröße", + "chartConfigCompType": "Chart-Typ", + "xConfigType": "X-Achse Typ", + "loading": "Laden", + "disabled": "Deaktiviert", + "minLength": "Mindestlänge", + "maxLength": "Maximale Länge", + "showCount": "Wortzahl anzeigen", + "autoHeight": "Höhe", + "thousandsSeparator": "Tausendertrennzeichen", + "precision": "Nachkommastellen", + "value": "Standardwert", + "formatter": "Format", + "min": "Mindestwert", + "max": "Maximaler Wert", + "step": "Schrittweite", + "start": "Startzeit", + "end": "Endzeit", + "allowHalf": "Halbe Auswahl zulassen", + "filetype": "Dateityp", + "showUploadList": "Upload-Liste anzeigen", + "uploadType": "Upload Typ", + "allowClear": "Löschen-Symbol anzeigen", + "minSize": "Minimale Dateigröße", + "maxSize": "Maximale Dateigröße", + "maxFiles": "Maximale Anzahl von hochgeladenen Dateien", + "format": "Format", + "minDate": "Minimum Datum", + "maxDate": "Maximales Datum", + "minTime": "Mindestzeit", + "maxTime": "Maximale Zeit", + "text": "Text", + "type": "Typ", + "hideHeader": "Kopfzeile ausblenden", + "hideBordered": "Grenze ausblenden", + "src": "Bild-URL", + "showInfo": "Wert anzeigen", + "mode": "Modus", + "onlyMenu": "Nur Menü", + "horizontalAlignment": "Horizontale Ausrichtung", + "row": "Links", + "column": "Top", + "leftAlign": "Linke Ausrichtung", + "rightAlign": "Rechts ausrichten", + "percent": "Prozentsatz", + "fixedHeight": "Feste Höhe", + "auto": "Anpassungsfähig", + "directory": "Mappe", + "multiple": "Mehrere Dateien", + "singleFile": "Einzelne Datei", + "manual": "Handbuch", + "default": "Standard", + "small": "Klein", + "middle": "Mittel", + "large": "Groß", + "single": "Einzeln", + "multi": "Mehrere", + "close": "Schließen", + "ui": "UI-Modus", + "line": "Liniendiagramm", + "scatter": "Punktwolke", + "pie": "Kreisdiagramm", + "basicLine": "Grundlegendes Liniendiagramm", + "stackedLine": "Gestapeltes Liniendiagramm", + "areaLine": "Gebiet Gebietskarte", + "basicPie": "Grundlegendes Kreisdiagramm", + "doughnutPie": "Donut-Tabelle", + "rosePie": "Rosenkarte", + "category": "Kategorie Achse", + "circle": "Kreis", + "rect": "Rechteck", + "triangle": "Dreieck", + "diamond": "Diamant", + "pin": "Stecknadel", + "arrow": "Pfeil", + "left": "Links", + "right": "Rechts", + "center": "Zentrum", + "bottom": "Unten", + "justify": "Beide Enden rechtfertigen", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Aktueller Datenstand", + "preview": "Vorschau", + "property": "Eigenschaften", + "console": "Visual Script-Konsole", + "executeMethods": "Ausführen von Methoden", + "noMethods": "Keine Methoden.", + "methodParams": "Parameter der Methode", + "methodParamsHelp": "Parameter der Eingabemethode mit JSON. Zum Beispiel kannst du die Parameter von setValue\\ wie folgt festlegen: [1] oder 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Schaltfläche Hintergrund", + "btnText": "Schaltfläche Text", + "title": "Titel", + "selectBackground": "Ausgewählter Hintergrund", + }, + "idSource": { + ...en.idSource, + + "title": "OAuth-Anbieter", + "form": "E-Mail", + "pay": "Prämie", + "enable": "Aktiviere", + "unEnable": "Nicht aktiviert", + "loginType": "Anmeldung Typ", + "status": "Status", + "desc": "Beschreibung", + "manual": "Adressbuch:", + "syncManual": "Adressbuch synchronisieren", + "syncManualSuccess": "Sync Erfolgreich", + "enableRegister": "Registrierung zulassen", + "saveBtn": "Speichern und Aktivieren", + "save": "Speichern", + "none": "Keine", + "formPlaceholder": "Bitte {label} eingeben", + "formSelectPlaceholder": "Bitte wähle das {label}", + "saveSuccess": "Erfolgreich gespeichert", + "dangerLabel": "Gefahrenzone", + "dangerTip": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Gehe mit Vorsicht vor.", + "disable": "Deaktivieren", + "disableSuccess": "Erfolgreich deaktiviert", + "encryptedServer": "-------- Verschlüsselt auf der Serverseite --------", + "disableTip": "Tipps", + "disableContent": "Die Deaktivierung dieses ID-Anbieters kann dazu führen, dass sich einige Nutzer nicht mehr anmelden können. Bist du sicher, dass du fortfahren kannst?", + "manualTip": "", + "lockTip": "Der Inhalt ist gesperrt. Um Änderungen vorzunehmen, klicke bitte auf das {icon}, um die Sperre aufzuheben.", + "lockModalContent": "Die Änderung des Feldes \"ID-Attribut\" kann erhebliche Auswirkungen auf die Benutzeridentifizierung haben. Bitte vergewissere dich, dass du die Auswirkungen dieser Änderung verstehst, bevor du fortfährst.", + "payUserTag": "Prämie", + "source": "Quelle", + "sourceName": "Auth Provider Name", + "sourceDescription": "Auth Provider Beschreibung", + "sourceIcon": "Auth-Provider-Symbol", + "sourceCategory": "Auth Provider Kategorie", + "souceIssuerURI": "Auth Provider Issuer URI", + "souceAuthorizationEndpoint": "Auth Provider Autorisierungsendpunkt", + "souceTokenEndpoint": "Auth Provider Token Endpunkt", + "souceUserInfoEndpoint": "Auth Provider Benutzerinfo Endpunkt", + "userInfoIntrospection": "OpenID-Benutzer-Introspektion verwenden", + "userCanSelectAccounts": "Benutzer kann aus Konten auswählen", + "sourceCategoryEnterprise": "Unternehmensidentität", + "sourceCategoryCloud": "Cloud-Dienste", + "sourceCategorySocial": "Soziale Medien", + "sourceCategoryDevelopment": "Entwicklung", + "sourceCategoryTools": "Tools & Produktivität", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Slot-Ansicht konfigurieren", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "speed": "Geschwindigkeit", + "width": "Breite", + "height": "Höhe", + "backgroundColor": "Hintergrundfarbe", + "animationStart": "Animation Start", + "valueDesc": "Aktuelle JSON-Daten", + "loop": "Schleife", + "auto": "Auto", + "onHover": "Beim Schweben", + "singlePlay": "Einzelspiel", + "endlessLoop": "Endlosschleife", + "keepLastFrame": "Letzten Frame anzeigen lassen", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Titel Farbe", + "subTitleColor": "Untertitel Farbe", + "labelColor": "Etikett Farbe", + "value": "Zeitleiste Daten", + "mode": "Bestellung anzeigen", + "left": "Inhalt Rechts", + "right": "Inhalt Links", + "alternate": "Alternative Reihenfolge der Inhalte", + "modeTooltip": "Einstellen, dass der Inhalt links/rechts oder abwechselnd auf beiden Seiten der Zeitleiste angezeigt wird", + "reverse": "Neueste Ereignisse zuerst", + "pending": "Ausstehender Knotenpunkt Text", + "pendingDescription": "Wenn diese Option aktiviert ist, wird ein letzter Knoten mit dem Text und einer Warteanzeige angezeigt.", + "defaultPending": "Kontinuierliche Verbesserung", + "clickTitleEvent": "Klick Titel Ereignis", + "clickTitleEventDesc": "Klick Titel Ereignis", + "Introduction": "Einführung Tasten", + "helpTitle": "Titel der Zeitleiste (erforderlich)", + "helpsubTitle": "Untertitel der Zeitleiste", + "helpLabel": "Beschriftung der Zeitleiste, die zur Anzeige von Daten verwendet wird", + "helpColor": "Zeigt die Farbe des Zeitachsenknotens an", + "helpDot": "Timeline-Knoten als Ameisendesign-Symbole rendern", + "helpTitleColor": "Individuell die Farbe des Knotentitels steuern", + "helpSubTitleColor": "Individuelle Steuerung der Farbe der Knotenuntertitel", + "helpLabelColor": "Individuelle Steuerung der Farbe des Knotensymbols", + "valueDesc": "Daten der Zeitleiste", + "clickedObjectDesc": "Daten zum angeklickten Objekt", + "clickedIndexDesc": "Index der angeklickten Objekte", + }, + "comment": { + ...en.comment, + + "value": "Daten der Kommentarliste", + "showSendButton": "Kommentare zulassen", + "title": "Titel", + "titledDefaultValue": "%d Kommentar in Summe", + "placeholder": "Shift + Enter zum Kommentieren; @ oder # für Schnelleingabe eingeben", + "placeholderDec": "Platzhalter", + "buttonTextDec": "Schaltfläche Titel", + "buttonText": "Kommentar", + "mentionList": "Daten der Erwähnungsliste", + "mentionListDec": "Key-Mention Keywords; Value-Mention Listendaten", + "userInfo": "Benutzerinfo", + "dateErr": "Datum Fehler", + "commentList": "Kommentar Liste", + "deletedItem": "Gelöschter Artikel", + "submitedItem": "Eingereichter Artikel", + "deleteAble": "Schaltfläche \"Löschen\" anzeigen", + "Introduction": "Einführung Tasten", + "helpUser": "Benutzerinformationen (erforderlich)", + "helpname": "Nutzername (erforderlich)", + "helpavatar": "Avatar URL (Hohe Priorität)", + "helpdisplayName": "Name anzeigen (niedrige Priorität)", + "helpvalue": "Kommentar Inhalt", + "helpcreatedAt": "Datum erstellen", + }, + "mention": { + ...en.mention, + + "mentionList": "Daten der Erwähnungsliste", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Komplett Wert", + "checkedValueFrom": "Geprüfter Wert von", + "ignoreCase": "Suche ignorieren Fall", + "searchLabelOnly": "Nur Label suchen", + "searchFirstPY": "Erste Pinyin-Suche", + "searchCompletePY": "Vollständiges Pinyin suchen", + "searchText": "Text suchen", + "SectionDataName": "AutoVervollständigen Daten", + "valueInItems": "Wert in Positionen", + "type": "Typ", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Schlüssel", + "selectLable": "Etikett", + "ComponentType": "Komponente Typ", + "colorIcon": "Blau", + "grewIcon": "Grau", + "noneIcon": "Keine", + "small": "Klein", + "large": "Groß", + "componentSize": "Komponente Größe", + "Introduction": "Einführung Tasten", + "helpLabel": "Etikett", + "helpValue": "Wert", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Rubriken", + "addColumn": "Spalte hinzufügen", + "columnDefinition": "Definition einer Spalte", + "rowDefinition": "Zeile Definition", + "columnGap": "Lücke in der Spalte", + "rowGap": "Zeile Lücke", + "atLeastOneColumnError": "Responsive Layout behält mindestens eine Spalte bei", + "columnsPerRow": "Spalten pro Zeile", + "columnsSpacing": "Abstand zwischen den Spalten (px)", + "horizontal": "Horizontal", + "vertical": "Vertikal", + "mobile": "Mobil", + "tablet": "Tablette", + "desktop": "Desktop", + "rowStyle": "Reihe Stil", + "columnStyle": "Säulenstil", + "minWidth": "Min. Breite", + "rowBreak": "Reihenpause", + "useComponentWidth": "Eigene Größe verwenden", + "useComponentWidthDesc": "Verwende die Containerbreite anstelle der App-Breite", + "matchColumnsHeight": "Höhe der Säulen anpassen", + "rowLayout": "Zeilenlayout", + "columnsLayout": "Spalten Layout", + "columnsDefinitionTooltip": "Spalten können auf der Grundlage der CSS-Spalteneigenschaften frei definiert werden. Mit \"auto auto\" werden zum Beispiel zwei Spalten mit gleicher Breite erstellt. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Die Zeilen können auf der Grundlage der CSS-Eigenschaften für Zeilen frei definiert werden. Zum Beispiel erzeugt 'auto auto' zwei Zeilen mit gleicher Höhe. Lesen Sie hier mehr: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modus", + "modeInline": "Inline", + "modeVertical": "Vertikal", + "modeHorizontal": "Horizontal", + "width": "Breite", + "widthTooltip": "Pixel oder Prozentsatz, z.B. 520, 60%", + "navStyle": "Menü-Stil", + "navItemStyle": "Menüpunkt Stil", + "navBackground": "Hintergrundbild", + "mobileNavVerticalOrientation": "Vertikale Ausrichtung", + "mobileNavVerticalMaxWidth": "Maximale Breite", + "mobileNavBarHeight": "Höhe der Navigationsleiste", + "mobileNavVerticalShowSeparator": "Trennzeichen anzeigen", + "mobileNavIconSize": "Icon Größe", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Int'l Date Line W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Pazifische Zeit (US)", + "UTC-06:00": "(UTC-06:00) Zentrale Zeit (US)", + "UTC-05:00": "(UTC-05:00) Östliche Zeit (US)", + "UTC-04:00": "(UTC-04:00) Atlantische Zeit", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Kap Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlin, Rom", + "UTC+02:00": "(UTC+02:00) Athen, Bukarest", + "UTC+03:00": "(UTC+03:00) Moskau", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karatschi", + "UTC+05:30": "(UTC+05:30) Neu Delhi", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Peking, HK", + "UTC+09:00": "(UTC+09:00) Tokio, Seoul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Salomonen, Neukaledonien", + "UTC+12:00": "(UTC+12:00) Auckland, Fidschi", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "UserChoice", + }, + "tour": { + ...en.tour, + + "section1Title": "Schritte", + "section1Subtitle": "Schritte", + "tooltipExampleHeader": "Beispiel:", + "tooltipSignatureHeader": "Unterschrift:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Titel", + "placeholder": "Willkommen", + "tooltip": "Der Titel des Schrittes. Jeder HTML-Code ist hier gültig.", + }, + "description": { + ...en.tour.options.description, + + "label": "Beschreibung", + "placeholder": "Willkommen bei lowcoder!", + "tooltip": "Die Beschreibung des Schrittes. Jeder HTML-Code ist hier gültig.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Maske", + "tooltip": "Ob die Maskierung zu aktivieren, ändern Sie die Maske Stil und Farbe füllen, indem Sie benutzerdefinierte Requisiten, die Standardeinstellung folgt der `Maske` Eigenschaft von Tour.", + "tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Pfeil", + "tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht; andernfalls zeigt der Pfeil immer in die Nähe der Oberseite der Komponente.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Typ", + "tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt zur Gestaltung der Haupttour gesteuert werden.", + }, + "target": { + ...en.tour.options.target, + + "label": "Komponente", + "tooltip": "Die Komponente, auf die Sie den Tooltip setzen wollen, oder lassen Sie es leer, wenn Sie einfach ein Modal in der Mitte des Bildschirms haben wollen.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "Cover Image URI", + "tooltip": "Ein URI für ein Bild, das Sie mit dem Schritt anzeigen möchten", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Indikatoren rendern", + "tooltip": "Bietet einen benutzerdefinierten Indikator dafür, in welchem Schritt Sie sich befinden", + "tooltipValidTypes": "Format ist eine Funktion, die zwei Argumente akzeptiert, `current` und `total` und einen ReactNode zurückgibt", + "tooltipFunctionSignatureHeader": "Unterschrift:", + "tooltipFunctionSignature": "(aktuell: Zahl, gesamt: Zahl) => ReactNode", + "tooltipExampleHeader": "Beispiel:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Interaktion deaktivieren", + "tooltip": "Deaktivieren Sie die Interaktion in dem markierten Bereich.", + }, + "mask": { + ...en.tour.mask, + + "label": "Maske", + "tooltip": "Aktivieren der Maskierung, Ändern des Maskenstils und der Füllfarbe durch Übergabe von benutzerdefinierten Requisiten, die Vorgabe folgt der Eigenschaft `Maske` von Tour. Kann auf der Ebene der Stufe überschrieben werden.", + "tooltipValidTypes": "Gültige Eingabetypen: `true`, `false`, empty, oder ein JSON-Objekt nach dem CSSProperties-Schema von Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Platzierung", + "tooltip": "Position der Leitkarte in Bezug auf das Zielelement. Kann auf Schrittebene überschrieben werden.", + "tooltipValidOptions": "Gültige Optionen", + "tooltipValidOptionsAbove": "Oberhalb des Bauteils:", + "tooltipValidOptionsLeft": "Links neben der Komponente:", + "tooltipValidOptionsRight": "Rechts neben der Komponente:", + "tooltipValidOptionsBelow": "Unterhalb des Bauteils:", + "tooltipValidOptionsOnTop": "Oben auf der Komponente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Pfeil", + "tooltip": "Schaltet den Pfeil ein und aus oder verschiebt ihn so, dass er auf die Mitte der Komponente zeigt, falls gewünscht, andernfalls zeigt der Pfeil immer in die Nähe des oberen Teils der Komponente. Kann auf der Schrittebene außer Kraft gesetzt werden.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Typ", + "tooltip": "Die Art der QuickInfo, die sich auf die Hintergrundfarbe und die Textfarbe auswirkt. Die Farben können über den Abschnitt \"Styling der Haupttour\" gesteuert werden. Kann auf Schritt-Ebene überschrieben werden.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Wie man ein npm-Plugin entwickelt", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Bibliotheken von Drittanbietern verwenden", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/vorlage-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + +}; \ No newline at end of file diff --git a/translations/locales/en.js b/translations/locales/en.js index aafb078ed8..0628515d6b 100644 --- a/translations/locales/en.js +++ b/translations/locales/en.js @@ -1,4 +1,3 @@ -// import table from "./componentDocExtra/table.md?url"; export const en = { "productName": "Lowcoder", "productDesc": "Create software applications for your company and customers with minimal coding experience. Lowcoder is an excellent alternative to Retool, Appsmith, and Tooljet.", @@ -44,3596 +43,4683 @@ export const en = { "accessControl": "Access Control", "copySuccess": "Copied Successfully", "copyError": "Copy Error", + "api": { - "publishSuccess": "Published Successfully", - "recoverFailed": "Recovery Failed", - "needUpdate": "Your current version is outdated. Please upgrade to the latest version." + "publishSuccess": "Published Successfully", + "recoverFailed": "Recovery Failed", + "needUpdate": "Your current version is outdated. Please upgrade to the latest version." }, "codeEditor": { - "notSupportAutoFormat": "The current code editor does not support auto-formatting.", - "fold": "Fold" + "notSupportAutoFormat": "The current code editor does not support auto-formatting.", + "fold": "Fold" }, "exportMethod": { - "setDesc": "Set Property: {property}", - "clearDesc": "Clear Property: {property}", - "resetDesc": "Reset Property: {property} to Default Value" + "setDesc": "Set Property: {property}", + "clearDesc": "Clear Property: {property}", + "resetDesc": "Reset Property: {property} to Default Value" }, "method": { - "focus": "Set Focus", - "focusOptions": "Focus options. See HTMLElement.focus()", - "blur": "Remove Focus", - "click": "Click", - "select": "Select All Text", - "setSelectionRange": "Set Start and End Positions of Text Selection", - "selectionStart": "0-based Index of First Selected Character", - "selectionEnd": "0-based Index of Character After Last Selected Character", - "setRangeText": "Replace Text Range", - "replacement": "String to Insert", - "replaceStart": "0-based Index of First Character to Replace", - "replaceEnd": "0-based Index of Character After Last Character to Replace" + "focus": "Set Focus", + "focusOptions": "Focus options. See HTMLElement.focus()", + "blur": "Remove Focus", + "click": "Click", + "select": "Select All Text", + "setSelectionRange": "Set Start and End Positions of Text Selection", + "selectionStart": "0-based Index of First Selected Character", + "selectionEnd": "0-based Index of Character After Last Selected Character", + "setRangeText": "Replace Text Range", + "replacement": "String to Insert", + "replaceStart": "0-based Index of First Character to Replace", + "replaceEnd": "0-based Index of Character After Last Character to Replace" }, "errorBoundary": { - "encounterError": "Component loading failed. Please check your configuration.", - "clickToReload": "Click to Reload", - "errorMsg": "Error: " + "encounterError": "Component loading failed. Please check your configuration.", + "clickToReload": "Click to Reload", + "errorMsg": "Error: " }, "imgUpload": { - "notSupportError": "Supports only {types} image types", - "exceedSizeError": "Image size must not exceed {size}" + "notSupportError": "Supports only {types} image types", + "exceedSizeError": "Image size must not exceed {size}" }, "gridCompOperator": { - "notSupport": "Not Supported", - "selectAtLeastOneComponent": "Please select at least one component", - "selectCompFirst": "Select components before copying", - "noContainerSelected": "[Bug] No container selected", - "deleteCompsSuccess": "Deleted successfully. Press {undoKey} to undo.", - "deleteCompsTitle": "Delete Components", - "deleteCompsBody": "Are you sure you want to delete {compNum} selected components?", - "cutCompsSuccess": "Cut successfully. Press {pasteKey} to paste, or {undoKey} to undo." + "notSupport": "Not Supported", + "selectAtLeastOneComponent": "Please select at least one component", + "selectCompFirst": "Select components before copying", + "noContainerSelected": "[Bug] No container selected", + "deleteCompsSuccess": "Deleted successfully. Press {undoKey} to undo.", + "deleteCompsTitle": "Delete Components", + "deleteCompsBody": "Are you sure you want to delete {compNum} selected components?", + "cutCompsSuccess": "Cut successfully. Press {pasteKey} to paste, or {undoKey} to undo." }, "leftPanel": { - "queries": "Data Queries in your App", - "globals": "Global Data Variables", - "propTipsArr": "{num} Items", - "propTips": "{num} Keys", - "propTipArr": "{num} Item", - "propTip": "{num} Key", - "stateTab": "State", - "settingsTab": "Settings", - "toolbarTitle": "Individualization", - "toolbarPreload": "Scripts and Styles", - "components": "Active Components", - "modals": "in-App Modals", - "expandTip": "Click to Show {component}'s Data", - "collapseTip": "Click to Hide {component}'s Data", - "layers": "Layers", - "activatelayers": "Use dynamic Layers", - "selectedComponents": "Selected Components...", - "displayComponents": "control Display", - "lockComponents": "control Position", - }, + "queries": "Data Queries in your App", + "globals": "Global Data Variables", + "propTipsArr": "{num} Items", + "propTips": "{num} Keys", + "propTipArr": "{num} Item", + "propTip": "{num} Key", + "stateTab": "State", + "settingsTab": "Settings", + "toolbarTitle": "Individualization", + "toolbarPreload": "Scripts and Styles", + "components": "Active Components", + "modals": "in-App Modals", + "expandTip": "Click to Show {component}'s Data", + "collapseTip": "Click to Hide {component}'s Data", + "layers": "Layers", + "activatelayers": "Use dynamic Layers", + "selectedComponents": "Selected Components...", + "displayComponents": "control Display", + "lockComponents": "control Position", + }, + // second part + + "bottomPanel": { - "title": "Data Queries", - "run": "Run", - "noSelectedQuery": "No Query Selected", - "metaData": "Datasource Metadata", - "noMetadata": "No Metadata Available", - "metaSearchPlaceholder": "Search Metadata", - "allData": "All Tables" + "title": "Data Queries", + "run": "Run", + "noSelectedQuery": "No Query Selected", + "metaData": "Datasource Metadata", + "noMetadata": "No Metadata Available", + "metaSearchPlaceholder": "Search Metadata", + "allData": "All Tables" }, "rightPanel": { - "propertyTab": "Properties", - "noSelectedComps": "No Components selected. Click a Component to view its Properties.", - "createTab": "Insert", - "searchPlaceHolder": "Search Components or Modules", - "uiComponentTab": "Components", - "extensionTab": "Extensions", - "modulesTab": "Modules", - "moduleListTitle": "Modules", - "pluginListTitle": "Plugins", - "emptyModules": "Modules are reusable Mikro-Apps. You can embed them in your App.", - "searchNotFound": "Can't find the right component?", - "emptyPlugins": "No Plugins Added", - "contactUs": "Contact Us", - "issueHere": "here." + "propertyTab": "Properties", + "noSelectedComps": "No Components selected. Click a Component to view its Properties.", + "createTab": "Insert", + "searchPlaceHolder": "Search Components or Modules", + "uiComponentTab": "Components", + "extensionTab": "Extensions", + "modulesTab": "Modules", + "moduleListTitle": "Modules", + "pluginListTitle": "Plugins", + "emptyModules": "Modules are reusable Mikro-Apps. You can embed them in your App.", + "searchNotFound": "Can't find the right component?", + "emptyPlugins": "No plugins added yet. Add npm plugins to enhance your project.", + "contactUs": "Contact Us", + "issueHere": "here.", + "folderListTitle": "Folders" }, "prop": { - "expand": "Expand", - "columns": "Columns", - "videokey": "Video Key", - "rowSelection": "Row Selection", - "toolbar": "Toolbar", - "pagination": "Pagination", - "logo": "Logo", - "style": "Style", - "inputs": "Inputs", - "meta": "Metadata", - "data": "Data", - "hide": "Hide", - "loading": "Loading", - "disabled": "Disabled", - "placeholder": "Placeholder", - "showClear": "Show Clear Button", - "showSearch": "Searchable", - "defaultValue": "Default Value", - "required": "Required Field", - "readOnly": "Read Only", - "readOnlyTooltip": "Read-only components appear normal but cannot be modified.", - "minimum": "Minimum", - "maximum": "Maximum", - "regex": "Regex", - "minLength": "Minimum Length", - "maxLength": "Maximum Length", - "height": "Height", - "width": "Width", - "selectApp": "Select App", - "showCount": "Show Count", - "textType": "Text Type", - "customRule": "Custom Rule", - "customRuleTooltip": "Non-empty string indicates an error; empty or null means validation passed. Example: ", - "manual": "Manual", - "map": "Map", - "json": "JSON", - "use12Hours": "Use 12-Hour Format", - "hourStep": "Hour Step", - "minuteStep": "Minute Step", - "secondStep": "Second Step", - "minDate": "Minimum Date", - "maxDate": "Maximum Date", - "minTime": "Minimum Time", - "maxTime": "Maximum Time", - "type": "Type", - "showLabel": "Show Label", - "showHeader": "Show Header", - "showBody": "Show Body", - "showSider": "Show Sider", - "innerSider": "Inner Sider", - "showFooter": "Show Footer", - "maskClosable": "Click Outside to Close", - "toggleClose": "Enable Close Button", - "showMask": "Show Mask", - "textOverflow": "Text Overflow", - "scrollbar": "Show Scrollbars", - "siderScrollbar": "Show Scrollbars in Sider", - "mainScrollbar": "Show Scrollbars in main content", - "modalScrollbar": "Show Scrollbars in Modal", - "drawerScrollbar": "Show Scrollbars in Drawer", - "textAreaScrollBar": "Show Scrollbars in Text Area", - "siderRight": "Show sider on the Right", - "siderWidth": "Sider Width", - "siderWidthTooltip": "Sider width supports percentages (%) and pixels (px).", - "siderCollapsedWidth": "Sider Collapsed Width", - "siderCollapsedWidthTooltip": "Sider collapsed width supports percentages (%) and pixels (px).", - "siderCollapsible": "Sider Collapsible", - "siderCollapsed": "Sider Collapsed", - "contentScrollbar": "Show Scrollbars in Content", - "appID": "App Id", - "showApp": "Show an App in the content area", - "showAppTooltip": "You can display whole Apps in the content area. Please mind, that for Modules we do not support Inputs, Outputs Events and Methods.", - "baseURL": "API Base URL", - "horizontal": "Horizontal", - "minHorizontalWidth": "Minimum Horizontal Width", - "component": "Own Component Identifiers", - "className": "CSS Class name", - "dataTestId": "Individual ID", - "preventOverwriting": "Prevent overwriting styles", - "color": "Color", - "horizontalGridCells": "Horizontal Grid Cells", - "showHorizontalScrollbar": "Show Horizontal Scrollbar", - "showVerticalScrollbar": "Show Vertical Scrollbar", - "timeZone": "TimeZone", + "expand": "Expand", + "columns": "Columns", + "videokey": "Video Key", + "rowSelection": "Row Selection", + "toolbar": "Toolbar", + "pagination": "Pagination", + "logo": "Logo", + "style": "Style", + "inputs": "Inputs", + "meta": "Metadata", + "data": "Data", + "hide": "Hide", + "loading": "Loading", + "disabled": "Disabled", + "placeholder": "Placeholder", + "showClear": "Show Clear Button", + "showSearch": "Searchable", + "defaultValue": "Default Value", + "required": "Required Field", + "showEmptyValidation": "Show Validation On Empty/Reset", + "readOnly": "Read Only", + "readOnlyTooltip": "Read-only components appear normal but cannot be modified.", + "minimum": "Minimum", + "maximum": "Maximum", + "regex": "Regex", + "minLength": "Minimum Length", + "maxLength": "Maximum Length", + "height": "Height", + "width": "Width", + "selectApp": "Select App", + "showCount": "Show Count", + "tabIndex": "Tab Index", + "textType": "Text Type", + "customRule": "Custom Rule", + "customRuleTooltip": "Non-empty string indicates an error; empty or null means validation passed. Example: ", + "manual": "Manual", + "map": "Map", + "json": "JSON", + "use12Hours": "Use 12-Hour Format", + "hourStep": "Hour Step", + "minuteStep": "Minute Step", + "secondStep": "Second Step", + "minDate": "Minimum Date", + "maxDate": "Maximum Date", + "minTime": "Minimum Time", + "maxTime": "Maximum Time", + "type": "Type", + "showLabel": "Show Label", + "showHeader": "Show Header", + "showBody": "Show Body", + "showSider": "Show Sider", + "innerSider" : "Inner Sider", + "showFooter": "Show Footer", + "maskClosable": "Click Outside to Close", + "escapeClose": "Enable Close on Escape key", + "toggleClose": "Enable Close Button", + "showMask": "Show Mask", + "textOverflow": "Text Overflow", + "scrollbar" : "Show Scrollbars", + "showVerticalScrollbar" : "Show Vertical Scrollbar", + "showHorizontalScrollbar" : "Show Horizontal Scrollbar", + "siderScrollbar" : "Show Scrollbars in Sider", + "mainScrollbar": "Show Scrollbars in main content", + "modalScrollbar": "Show Scrollbars in Modal", + "drawerScrollbar": "Show Scrollbars in Drawer", + "textAreaScrollBar": "Show Scrollbars in Text Area", + "siderRight" : "Show sider on the Right", + "siderWidth" : "Sider Width", + "siderWidthTooltip" : "Sider width supports percentages (%) and pixels (px).", + "siderCollapsedWidth" : "Sider Collapsed Width", + "siderCollapsedWidthTooltip" : "Sider collapsed width supports percentages (%) and pixels (px).", + "siderCollapsible" : "Sider Collapsible", + "siderCollapsed" : "Sider Collapsed", + "contentScrollbar" : "Show Scrollbars in Content", + "appID": "App Id", + "showApp": "Show an App in the content area", + "showAppTooltip": "You can display whole Apps in the content area. Please mind, that for Modules we do not support Inputs, Outputs Events and Methods.", + "baseURL": "API Base URL", + "horizontal": "Horizontal", + "minHorizontalWidth": "Minimum Horizontal Width", + "component": "Own Component Identifiers", + "className": "CSS Class name", + "dataTestId": "Individual ID", + "preventOverwriting": "Prevent overwriting styles", + "color": "Color", + "horizontalGridCells": "Horizontal Grid Cells", + "verticalGridCells": "Vertical Grid Cells", + "timeZone": "TimeZone", + "pickerMode": "Picker Mode", }, "autoHeightProp": { - "auto": "Auto", - "fixed": "Fixed" + "auto": "Auto", + "fixed": "Fixed" }, "textOverflowProp": { - "ellipsis": "Mouseover", - "wrap": "Wrap" + "ellipsis": "Mouseover", + "wrap": "Wrap" }, "labelProp": { - "text": "Label", - "tooltip": "Tooltip", - "position": "Position", - "collapse": "Collapse", - "left": "Left", - "right": "Right", - "top": "Top", - "align": "Alignment", - "width": "Width", - "widthTooltip": "Label width supports percentages (%) and pixels (px)." - }, + "text": "Label", + "tooltip": "Tooltip", + "position": "Position", + "collapse": "Collapse", + "left": "Left", + "right": "Right", + "top": "Top", + "align": "Alignment", + "width": "Width", + "widthTooltip": "Label width supports percentages (%) and pixels (px)." + }, + // third part + "eventHandler": { - "eventHandlers": "Event Handlers", - "emptyEventHandlers": "No Event Handlers", - "incomplete": "Incomplete Selection", - "inlineEventTitle": "On {eventName}", - "event": "Event", - "action": "Action", - "noSelect": "No Selection", - "runQuery": "Run a Data Query", - "selectQuery": "Select Data Query", - "controlComp": "Control a Component", - "runScript": "Run JavaScript", - "runScriptPlaceHolder": "Write Code Here", - "component": "Component", - "method": "Method", - "setTempState": "Set a Temporary State value", - "state": "State", - "triggerModuleEvent": "Trigger a Module Event", - "moduleEvent": "Module Event", - "goToApp": "Go to an other App", - "queryParams": "Query Parameters", - "hashParams": "Hash Parameters", - "showNotification": "Show a Notification", - "text": "Text", - "level": "Level", - "duration": "Duration", - "notifyDurationTooltip": "Time unit can be 's' (second, default) or 'ms' (millisecond). Max duration is {max} seconds", - "goToURL": "Open a URL", - "openInNewTab": "Open in New Tab", - "copyToClipboard": "Copy a value to Clipboard", - "copyToClipboardValue": "Value", - "export": "Export Data", - "exportNoFileType": "No Selection (Optional)", - "fileName": "File Name", - "fileNameTooltip": "Include extension to specify file type, e.g., 'image.png'", - "fileType": "File Type", - "condition": "Run Only When...", - "conditionTooltip": "Run the event handler only when this condition evaluates to 'true'", - "debounce": "Debounce for", - "throttle": "Throttle for", - "slowdownTooltip": "Use debounce or throttle to control the frequency of action triggers. Time unit can be 'ms' (millisecond, default) or 's' (second).", - "notHandledError": "Not Handled", - "currentApp": "Current", - "inputEventHandlers": "Input Event Handlers", - "inputEventHandlersDesc": "Event Handlers related to User Input", - "buttonEventHandlers": "Button Event Handlers", - "buttonEventHandlersDesc": "Event Handlers related to Button Clicks", - "changeEventHandlers": "Change Event Handlers", - "changeEventHandlersDesc": "Event Handlers related to Value Changes", - "editedEventHandlers": "Edit Event Handlers", - "editedEventHandlersDesc": "Event Handlers related to edited state of Elements", - "clickEventHandlers": "Click Event Handlers", - "clickEventHandlersDesc": "Event Handlers related to Clicks", - "keyDownEventHandlers": "Key Down Event Handlers", - "keyDownEventHandlersDesc": "Event Handlers related to Key Down Events", - "checkboxEventHandlers": "Checkbox Event Handlers", - "checkboxEventHandlersDesc": "Event Handlers related to Checkbox Changes", - "dragEventHandlers": "Drag Event Handlers", - "dragEventHandlersDesc": "Event Handlers related to Drag and Drop Events", - "elementEventHandlers": "Element Event Handlers", - "elementEventHandlersDesc": "Event Handlers related to generic Data Element Events", - "mediaEventHandlers": "Media Event Handlers", - "mediaEventHandlersDesc": "Event Handlers related to Media Events", - "scannerEventHandlers": "Scanner Event Handlers", - "scannerEventHandlersDesc": "Event Handlers related to Scanner Events", - "chartEventHandlers": "Chart Event Handlers", - "chartEventHandlersDesc": "Event Handlers related to Chart Events", - "geoMapEventHandlers": "Geo Map Event Handlers", - "geoMapEventHandlersDesc": "Event Handlers related to Geo Map Events", - "stepEventHandlers": "Step Event Handlers", - "stepEventHandlersDesc": "Event Handlers related to Step UI Events", - "shareEventHandlers": "Share Event Handlers", - "shareEventHandlersDesc": "Event Handlers related to Share Events", - "selectEventHandlers": "Select Event Handlers", - "selectEventHandlersDesc": "Event Handlers related to Select Events", - "meetingEventHandlers": "Meeting Event Handlers", - "meetingEventHandlersDesc": "Event Handlers related to Meeting Events", - "collaborationEventHandlers": "Collaboration Event Handlers", - "collaborationEventHandlersDesc": "Event Handlers related to Collaboration Events", - "set": "Set", - "clear": "Clear", - "reset": "Reset", - "messageType": "Message Type", - "placement": "Placement", - "description": "Description" + "eventHandlers": "Event Handlers", + "emptyEventHandlers": "No Event Handlers", + "incomplete": "Incomplete Selection", + "inlineEventTitle": "On {eventName}", + "event": "Event", + "action": "Action", + "noSelect": "No Selection", + "runQuery": "Run a Data Query", + "selectQuery": "Select Data Query", + "controlComp": "Control a Component", + "runScript": "Run JavaScript", + "runScriptPlaceHolder": "Write Code Here", + "component": "Component", + "method": "Method", + "setTempState": "Set a Temporary State value", + "state": "State", + "triggerModuleEvent": "Trigger a Module Event", + "moduleEvent": "Module Event", + "goToApp": "Go to an other App", + "queryParams": "Query Parameters", + "queryVariables": "Query Variables", + "hashParams": "Hash Parameters", + "showNotification": "Show a Notification", + "text": "Text", + "level": "Level", + "duration": "Duration", + "notifyDurationTooltip": "Time unit can be 's' (second, default) or 'ms' (millisecond). Max duration is {max} seconds", + "goToURL": "Open a URL", + "openInNewTab": "Open in New Tab", + "copyToClipboard": "Copy a value to Clipboard", + "copyToClipboardValue": "Value", + "export": "Export Data", + "exportNoFileType": "No Selection (Optional)", + "fileName": "File Name", + "fileNameTooltip": "Include extension to specify file type, e.g., 'image.png'", + "fileType": "File Type", + "condition": "Run Only When...", + "conditionTooltip": "Run the event handler only when this condition evaluates to 'true'", + "debounce": "Debounce for", + "throttle": "Throttle for", + "slowdownTooltip": "Use debounce or throttle to control the frequency of action triggers. Time unit can be 'ms' (millisecond, default) or 's' (second).", + "notHandledError": "Not Handled", + "currentApp": "Current", + "inputEventHandlers": "Input Event Handlers", + "inputEventHandlersDesc": "Event Handlers related to User Input", + "buttonEventHandlers": "Button Event Handlers", + "buttonEventHandlersDesc": "Event Handlers related to Button Clicks", + "changeEventHandlers": "Change Event Handlers", + "changeEventHandlersDesc": "Event Handlers related to Value Changes", + "editedEventHandlers": "Edit Event Handlers", + "editedEventHandlersDesc": "Event Handlers related to edited state of Elements", + "clickEventHandlers": "Click Event Handlers", + "clickEventHandlersDesc": "Event Handlers related to Clicks", + "keyDownEventHandlers": "Key Down Event Handlers", + "keyDownEventHandlersDesc": "Event Handlers related to Key Down Events", + "checkboxEventHandlers": "Checkbox Event Handlers", + "checkboxEventHandlersDesc": "Event Handlers related to Checkbox Changes", + "dragEventHandlers": "Drag Event Handlers", + "dragEventHandlersDesc": "Event Handlers related to Drag and Drop Events", + "elementEventHandlers": "Element Event Handlers", + "elementEventHandlersDesc": "Event Handlers related to generic Data Element Events", + "mediaEventHandlers": "Media Event Handlers", + "mediaEventHandlersDesc": "Event Handlers related to Media Events", + "scannerEventHandlers": "Scanner Event Handlers", + "scannerEventHandlersDesc": "Event Handlers related to Scanner Events", + "chartEventHandlers": "Chart Event Handlers", + "chartEventHandlersDesc": "Event Handlers related to Chart Events", + "geoMapEventHandlers": "Geo Map Event Handlers", + "geoMapEventHandlersDesc": "Event Handlers related to Geo Map Events", + "stepEventHandlers": "Step Event Handlers", + "stepEventHandlersDesc": "Event Handlers related to Step UI Events", + "shareEventHandlers": "Share Event Handlers", + "shareEventHandlersDesc": "Event Handlers related to Share Events", + "selectEventHandlers": "Select Event Handlers", + "selectEventHandlersDesc": "Event Handlers related to Select Events", + "meetingEventHandlers": "Meeting Event Handlers", + "meetingEventHandlersDesc": "Event Handlers related to Meeting Events", + "collaborationEventHandlers": "Collaboration Event Handlers", + "collaborationEventHandlersDesc": "Event Handlers related to Collaboration Events", + "set": "Set", + "clear": "Clear", + "reset": "Reset", + "messageType": "Message Type", + "placement": "Placement", + "description": "Description" }, "event": { - "submit": "Submit", - "submitDesc": "Triggers on Submit", - "change": "Change", - "changeDesc": "Triggers on Value Changes", - "focus": "Focus", - "focusDesc": "Triggers on Focus", - "blur": "Blur", - "blurDesc": "Triggers on Blur", - "click": "Click", - "clickDesc": "Triggers on Click", - "doubleClick": "Double Click", - "doubleClickDesc": "Triggers on Double Click", - "rightClick": "Right Click", - "rightClickDesc": "Triggers on Right Click", - "keyDown": "Key Down", - "keyDownDesc": "Triggers on Key Down", - "select": "Select", - "selectDesc": "Triggers on Select", - "checked": "Checked", - "checkedDesc": "Triggers when a checkbox is Checked", - "unchecked": "Unchecked", - "uncheckedDesc": "Triggers when a checkbox is Unchecked", - "drag": "Drag", - "dragDesc": "Triggers on Drag", - "drop": "Drop", - "dropDesc": "Triggers on Drop", - "open": "Open", - "openDesc": "Triggers on Open", - "mute": "Mute", - "muteDesc": "Triggers on Mute of a Microphone", - "unmute": "Unmute", - "unmuteDesc": "Triggers on Unmute of a Microphone", - "showCamera": "Show Camera", - "showCameraDesc": "Triggers when Show Camera is on", - "hideCamera": "Hide Camera", - "hideCameraDesc": "Triggers when Show Camera is off", - "shareScreen": "Share Screen", - "shareScreenDesc": "Triggers on Share Screen", - "shareScreenEnd": "Share Screen End", - "shareScreenEndDesc": "Triggers on Share Screen End", - "shareControl": "Share Control", - "shareControlDesc": "Triggers on Share Control", - "shareControlEnd": "Share Control End", - "shareControlEndDesc": "Triggers on Share Control End", - "shareContent": "Share Content", - "shareContentDesc": "Triggers on Share Content", - "shareContentEnd": "Share Content End", - "shareContentEndDesc": "Triggers on Share Content End", - "stopShare": "Stop Share", - "stopShareDesc": "Triggers on Stop Share", - "meetingStart": "Meeting Start", - "meetingStartDesc": "Triggers on Meeting Start", - "meetingEnd": "Meeting End", - "meetingEndDesc": "Triggers on Meeting End", - "meetingJoin": "Meeting Join", - "meetingJoinDesc": "Triggers on Meeting Join", - "meetingLeave": "Meeting Leave", - "meetingLeaveDesc": "Triggers on Meeting Leave", - "play": "Play", - "playDesc": "Triggers on Play", - "pause": "Pause", - "pauseDesc": "Triggers on Pause", - "ended": "Ended", - "endedDesc": "Triggers on Ended", - "step": "Step", - "stepDesc": "Triggers on Step", - "next": "Next", - "nextDesc": "Triggers on Next", - "finished": "Finished", - "finishedDesc": "Triggers on Finished", - "saved": "Saved", - "savedDesc": "Triggers when an element is Saved", - "edited": "Edited", - "editedDesc": "Triggers when an element is Edited", - "geoMapMove": "Geo Map Move", - "geoMapMoveDesc": "Triggers when Users move Geo Map", - "geoMapZoom": "Geo Map Zoom", - "geoMapZoomDesc": "Triggers when Users zoom Geo Map", - "geoMapSelect": "Geo Map Select", - "geoMapSelectDesc": "Triggers when Users select an Element on Geo Map", - "scannerSuccess": "Scanner Success", - "scannerSuccessDesc": "Triggers when a Scanner successfully scans", - "scannerError": "Scanner Error", - "scannerErrorDesc": "Triggers when a Scanner fails to scan", - "chartZoom": "Chart Zoom", - "chartZoomDesc": "Triggers on Chart Zoom", - "chartHover": "Chart Hover", - "chartHoverDesc": "Triggers on Chart Hover", - "chartSelect": "Chart Select", - "chartSelectDesc": "Triggers on Chart Select", - "chartDeselect": "Chart Deselect", - "chartDeselectDesc": "Triggers on Chart Deselect", - "close": "Close", - "closeDesc": "Triggers on Close", - "parse": "Parse", - "parseDesc": "Triggers on Parse", - "success": "Success", - "successDesc": "Triggers on Success", - "delete": "Delete", - "deleteDesc": "Triggers on Delete", - "mention": "Mention", - "mentionDesc": "Triggers on Mention", - "search": "Search", - "searchDesc": "Triggers on Search", - "selectedChange": "Selection Change", - "selectedChangeDesc": "Triggers on changed Selection", - "clickExtra": "Click on Action", - "clickExtraDesc": "Triggers on Click on Extra Element", - "start": "Start", - "startDesc": "Triggers on Start", - "resume": "Resume", - "resumeDesc": "Triggers on Resume", - "countdown": "Countdown", - "countdownDesc": "Triggers on Countdown ends", - "reset": "Reset ends", - "resetDesc": "Triggers on Reset timer", - "refresh": "Refresh", - "refreshDesc": "Triggers on Refresh", - }, + "submit": "Submit", + "submitDesc": "Triggers on Submit", + "change": "Change", + "changeDesc": "Triggers on Value Changes", + "focus": "Focus", + "focusDesc": "Triggers on Focus", + "blur": "Blur", + "blurDesc": "Triggers on Blur", + "click": "Click", + "clickDesc": "Triggers on Click", + "doubleClick": "Double Click", + "doubleClickDesc": "Triggers on Double Click", + "rightClick": "Right Click", + "rightClickDesc": "Triggers on Right Click", + "keyDown": "Key Down", + "keyDownDesc": "Triggers on Key Down", + "select": "Select", + "selectDesc": "Triggers on Select", + "checked": "Checked", + "checkedDesc": "Triggers when a checkbox is Checked", + "unchecked": "Unchecked", + "uncheckedDesc": "Triggers when a checkbox is Unchecked", + "drag": "Drag", + "dragDesc": "Triggers on Drag", + "drop": "Drop", + "dropDesc": "Triggers on Drop", + "open": "Open", + "openDesc": "Triggers on Open", + "mute": "Mute", + "muteDesc": "Triggers on Mute of a Microphone", + "unmute": "Unmute", + "unmuteDesc": "Triggers on Unmute of a Microphone", + "showCamera": "Show Camera", + "showCameraDesc": "Triggers when Show Camera is on", + "hideCamera": "Hide Camera", + "hideCameraDesc": "Triggers when Show Camera is off", + "shareScreen": "Share Screen", + "shareScreenDesc": "Triggers on Share Screen", + "shareScreenEnd": "Share Screen End", + "shareScreenEndDesc": "Triggers on Share Screen End", + "shareControl": "Share Control", + "shareControlDesc": "Triggers on Share Control", + "shareControlEnd": "Share Control End", + "shareControlEndDesc": "Triggers on Share Control End", + "shareContent": "Share Content", + "shareContentDesc": "Triggers on Share Content", + "shareContentEnd": "Share Content End", + "shareContentEndDesc": "Triggers on Share Content End", + "stopShare": "Stop Share", + "stopShareDesc": "Triggers on Stop Share", + "meetingStart": "Meeting Start", + "meetingStartDesc": "Triggers on Meeting Start", + "meetingEnd": "Meeting End", + "meetingEndDesc": "Triggers on Meeting End", + "meetingJoin": "Meeting Join", + "meetingJoinDesc": "Triggers on Meeting Join", + "meetingLeave": "Meeting Leave", + "meetingLeaveDesc": "Triggers on Meeting Leave", + "play": "Play", + "playDesc": "Triggers on Play", + "pause": "Pause", + "pauseDesc": "Triggers on Pause", + "ended": "Ended", + "endedDesc": "Triggers on Ended", + "step": "Step", + "stepDesc": "Triggers on Step", + "next": "Next", + "nextDesc": "Triggers on Next", + "finished": "Finished", + "finishedDesc": "Triggers on Finished", + "saved": "Saved", + "savedDesc": "Triggers when an element is Saved", + "edited": "Edited", + "editedDesc": "Triggers when an element is Edited", + "geoMapMove": "Geo Map Move", + "geoMapMoveDesc": "Triggers when Users move Geo Map", + "geoMapZoom": "Geo Map Zoom", + "geoMapZoomDesc": "Triggers when Users zoom Geo Map", + "geoMapSelect": "Geo Map Select", + "geoMapSelectDesc": "Triggers when Users select an Element on Geo Map", + "scannerSuccess": "Scanner Success", + "scannerSuccessDesc": "Triggers when a Scanner successfully scans", + "scannerError": "Scanner Error", + "scannerErrorDesc": "Triggers when a Scanner fails to scan", + "chartZoom": "Chart Zoom", + "chartZoomDesc": "Triggers on Chart Zoom", + "chartHover": "Chart Hover", + "chartHoverDesc": "Triggers on Chart Hover", + "chartSelect": "Chart Select", + "chartSelectDesc": "Triggers on Chart Select", + "chartDeselect": "Chart Deselect", + "chartDeselectDesc": "Triggers on Chart Deselect", + "close": "Close", + "closeDesc": "Triggers on Close", + "parse": "Parse", + "parseDesc": "Triggers on Parse", + "success": "Success", + "successDesc": "Triggers on Success", + "delete": "Delete", + "deleteDesc": "Triggers on Delete", + "mention": "Mention", + "mentionDesc": "Triggers on Mention", + "search": "Search", + "searchDesc": "Triggers on Search", + "selectedChange": "Selection Change", + "selectedChangeDesc": "Triggers on changed Selection", + "clickExtra": "Click on Action", + "clickExtraDesc": "Triggers on Click on Extra Element", + "start": "Start", + "startDesc": "Triggers on Start", + "resume": "Resume", + "resumeDesc": "Triggers on Resume", + "countdown": "Countdown", + "countdownDesc": "Triggers on Countdown ends", + "reset": "Reset ends", + "resetDesc": "Triggers on Reset timer", + "refresh": "Refresh", + "refreshDesc": "Triggers on Refresh", + "sortChange": "Sort Change", + "sortChangeDesc": "Triggers on Sorting Changes", + }, + + // fourth part + "style": { - "boxShadowColor": 'Shadow Color', - "boxShadow": 'Box Shadow', - "opacity": 'Opacity', - "animation": 'Animation', - "animationIterationCount": 'Animation Iteration Count', - "animationDelay": 'Animation Delay', - "animationDuration": 'Animation Duration', - "resetTooltip": "Reset styles. Clear the input field to reset an individual style.", - "textColor": "Text Color", - "contrastText": "Contrast Text Color", - "generated": "Generated", - "customize": "Customize", - "staticText": "Static Text", - "accent": "Accent", - "validate": "Validation Message", - "border": "Border Color", - "borderRadius": "Border Radius", - "borderWidth": "Border Width", - "borderStyle": "Border Style", - "background": "Background Color", - "headerBackground": "Header Background Color", - "siderBackground": "Sider Background Color", - "footerBackground": "Footer Background Color", - "fill": "Fill", - "track": "Track", - "links": "Links", - "thumb": "Thumb", - "thumbBorder": "Thumb Border", - "checked": "Checked", - "unchecked": "Unchecked", - "handle": "Handle", - "tags": "Tags", - "tagsText": "Tags Text", - "multiIcon": "Multiselect Icon", - "tabText": "Tab Text", - "tabAccent": "Tab Accent", - "checkedBackground": "Checked Background Color", - "uncheckedBackground": "Unchecked Background Color", - "uncheckedBorder": "Unchecked Border Color", - "indicatorBackground": "Indicator Background Color", - "tableCellText": "Cell Text", - "selectedRowBackground": "Selected Row Background Color", - "hoverRowBackground": "Hover Row Background Color", - "hoverBackground": "Hover Background Color", - "textTransform": "Text Transform", - "textDecoration": "Text Decoration", - "alternateRowBackground": "Alternate Row Background Color", - "tableHeaderBackground": "Header Background Color", - "tableHeaderText": "Header Text", - "toolbarBackground": "Toolbar Background Color", - "toolbarText": "Toolbar Text", - "pen": "Pen", - "footerIcon": "Footer Icon", - "tips": "Tips", - "margin": "Margin", - "padding": "Padding", - "marginLeft": "Margin Left", - "marginRight": "Margin Right", - "marginTop": "Margin Top", - "marginBottom": "Margin Bottom", - "containerHeaderPadding": "Header Padding", - "containerFooterPadding": "Footer Padding", - "containerSiderPadding": "Sider Padding", - "containerBodyPadding": "Body Padding", - "minWidth": "Minimum Width", - "aspectRatio": "Aspect Ratio", - "text": "Text", - "textSize": "Text Size", - "textWeight": "Text Weight", - "fontFamily": "Font Family", - "fontStyle": "Font Style", - "backgroundImage": "Background Image", - "backgroundImageRepeat": "Background Repeat", - "backgroundImageSize": "Background Size", - "backgroundImagePosition": "Background Position", - "backgroundImageOrigin": "Background Origin", - "headerBackgroundImage": "Background Image", - "headerBackgroundImageRepeat": "Background Image Repeat", - "headerBackgroundImageSize": "Background Image Size", - "headerBackgroundImagePosition": "Background Image Position", - "headerBackgroundImageOrigin": "Background Image Origin", - "footerBackgroundImage": "Background Image", - "footerBackgroundImageRepeat": "Background Image Repeat", - "footerBackgroundImageSize": "Background Image Size", - "footerBackgroundImagePosition": "Background Image Position", - "footerBackgroundImageOrigin": "Background Image Origin", - "rotation": "Rotation", - "alternateBackground": "Alternate Background Color", - "headerText": "Header Text Color", - "labelColor": "Label Color", - "label": "Label Color", - "lineHeight": "Line Height", - "subTitleColor": "SubTitle Color", - "titleText": "Title Color", - "success": "Success Color", - "siderBackgroundImage": "Sider Background Image", - "siderBackgroundImageRepeat": "Sider Background Image Repeat", - "siderBackgroundImageSize": "Sider Background Image Size", - "siderBackgroundImagePosition": "Sider Background Image Position", - "siderBackgroundImageOrigin": "Sider Background Image Origin", - "activeBackground": "Active Background Color", - "labelBackground": "Label Background Color", + "boxShadowColor": 'Shadow Color', + "boxShadow": 'Box Shadow', + "opacity": 'Opacity', + "animation": 'Animation', + "animationIterationCount": 'Animation Iteration Count', + "animationDelay": 'Animation Delay', + "animationDuration": 'Animation Duration', + "resetTooltip": "Reset styles. Clear the input field to reset an individual style.", + "textColor": "Text Color", + "contrastText": "Contrast Text Color", + "generated": "Generated", + "customize": "Customize", + "staticText": "Static Text", + "accent": "Accent", + "validate": "Validation Message", + "border": "Border Color", + "borderRadius": "Border Radius", + "borderWidth": "Border Width", + "borderStyle":"Border Style", + "background": "Background Color", + "headerBackground": "Header Background Color", + "siderBackground": "Sider Background Color", + "footerBackground": "Footer Background Color", + "fill": "Fill", + "track": "Track", + "links": "Links", + "thumb": "Thumb", + "thumbBorder": "Thumb Border", + "checked": "Checked", + "unchecked": "Unchecked", + "handle": "Handle", + "tags": "Tags", + "tagsText": "Tags Text", + "multiIcon": "Multiselect Icon", + "tabText": "Tab Text", + "tabAccent": "Tab Accent", + "checkedBackground": "Checked Background Color", + "uncheckedBackground": "Unchecked Background Color", + "uncheckedBorder": "Unchecked Border Color", + "indicatorBackground": "Indicator Background Color", + "tableCellText": "Cell Text", + "selectedRowBackground": "Selected Row Background Color", + "hoverRowBackground": "Hover Row Background Color", + "hoverBackground":"Hover Background Color", + "textTransform":"Text Transform", + "textDecoration":"Text Decoration", + "alternateRowBackground": "Alternate Row Background Color", + "tableHeaderBackground": "Header Background Color", + "tableHeaderText": "Header Text", + "toolbarBackground": "Toolbar Background Color", + "toolbarText": "Toolbar Text", + "pen": "Pen", + "footerIcon": "Footer Icon", + "tips": "Tips", + "margin": "Margin", + "padding": "Padding", + "marginLeft": "Margin Left", + "marginRight": "Margin Right", + "marginTop": "Margin Top", + "marginBottom": "Margin Bottom", + "containerHeaderPadding": "Header Padding", + "containerFooterPadding": "Footer Padding", + "containerSiderPadding": "Sider Padding", + "containerBodyPadding": "Body Padding", + "minWidth": "Minimum Width", + "aspectRatio": "Aspect Ratio", + "text": "Text", + "textSize": "Text Size", + "textWeight": "Text Weight", + "fontFamily": "Font Family", + "fontStyle":"Font Style", + "backgroundImage": "Background Image", + "backgroundImageRepeat": "Background Repeat", + "backgroundImageSize": "Background Size", + "backgroundImagePosition": "Background Position", + "backgroundImageOrigin": "Background Origin", + "headerBackgroundImage": "Background Image", + "headerBackgroundImageRepeat": "Background Image Repeat", + "headerBackgroundImageSize": "Background Image Size", + "headerBackgroundImagePosition": "Background Image Position", + "headerBackgroundImageOrigin": "Background Image Origin", + "footerBackgroundImage": "Background Image", + "footerBackgroundImageRepeat": "Background Image Repeat", + "footerBackgroundImageSize": "Background Image Size", + "footerBackgroundImagePosition": "Background Image Position", + "footerBackgroundImageOrigin": "Background Image Origin", + "rotation": "Rotation", + "alternateBackground": "Alternate Background Color", + "headerText": "Header Text Color", + "labelColor": "Label Color", + "label": "Label Color", + "lineHeight":"Line Height", + "subTitleColor": "SubTitle Color", + "titleText": "Title Color", + "success": "Success Color", + "siderBackgroundImage": "Sider Background Image", + "siderBackgroundImageRepeat": "Sider Background Image Repeat", + "siderBackgroundImageSize": "Sider Background Image Size", + "siderBackgroundImagePosition": "Sider Background Image Position", + "siderBackgroundImageOrigin": "Sider Background Image Origin", + "activeBackground": "Active Background Color", + "labelBackground": "Label Background Color", + "gradientBackground": "Gradient Background Color", + "direction": "Direction", + "chartOpacity": "Opacity", + "chartBoxShadow": "Box Shadow", + "chartBorderStyle": "Border Style", + "chartBorderRadius": "Border Radius", + "chartBorderWidth": "Border Width", + "chartTextSize": "Text Size", + "chartTextWeight": "Text Weight", + "chartFontFamily": "Font Family", + "chartFontStyle": "Font Style", + "chartBackgroundColor": "Background Color", + "chartGradientColor": "Gradient Color", + "chartShadowColor": "Shadow Color", + "chartBorderColor": "Border Color", + "chartTextColor": "Text Color", + "detailSize": "Detail Size", + + "radiusTip": "Specifies the radius of the element's corners. Example: 5px, 50%, or 1em.", + "gapTip": "Specifies the gap between rows and columns in a grid or flex container. Example: 10px, 1rem, or 5%.", + "cardRadiusTip": "Defines the corner radius for card components. Example: 10px, 15px.", + "borderWidthTip": "Specifies the width of the element's border. Example: 1px, 0.5em, or thin.", + "borderStyleTip": "Sets the style of the border. Example: solid, dashed, dotted, or none.", + "marginTip": "Defines the outer margin space around an element. Example: 10px, 2em, or auto. Also you can combine it like: 0px 20px. Or even separate for all 4 directions like: 0px 1px 5px 2px", + "directionTip": "Specifies the direction of the layout. Example: row, column, or row-reverse.", + "detailSizeTip": "Defines the size of specific details in the layout. Example: 10px, 2em, or 80%.", + "chartOpacityTip": "Specifies the opacity of the chart. Example: 1 (opaque), 0.5 (50% transparent).", + "chartBoxShadowTip": "Defines the shadow cast by the chart's box. Example: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Sets the style of the chart's border. Example: solid, dashed, dotted.", + "chartBorderRadiusTip": "Specifies the corner radius of the chart's border. Example: 10px, 20%.", + "chartBorderWidthTip": "Specifies the width of the chart's border. Example: 2px, 0.5em.", + "chartTextSizeTip": "Specifies the font size for chart text. Example: 16px, 1em, or 120%.", + "chartTextWeightTip": "Specifies the font weight for chart text. Example: normal, bold, or 700.", + "chartFontFamilyTip": "Specifies the font family for chart text. Example: Arial, Helvetica, or 'Times New Roman'.", + "chartFontStyleTip": "Specifies the font style for chart text. Example: normal, italic, or oblique.", + "animationIterationCountTip": "Defines how many times an animation should run. Example: infinite, 1, or 3.", + "opacityTip": "Sets the transparency level of the element. Example: 1 (opaque), 0.5 (50% transparent), or 0 (invisible).", + "boxShadowColorTip": "Defines the color of the box shadow. Example: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Sets the background color of the chart. Example: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Specifies the gradient colors for the chart background. Example: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Defines the color of the chart's shadow. Example: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Specifies the color of the chart's border. Example: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Sets the color of the chart's text. Example: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Defines the shadow cast by an element's box. Example: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Specifies the delay before the animation starts. Example: 1s, 500ms, 0.", + "animationDurationTip": "Sets the duration of the animation. Example: 2s, 3s, 500ms.", + "paddingTip": "Defines the inner padding space inside an element. Example: 10px, 2em, 5%. Also you can combine it like: 0px 20px. Or even separate for all 4 directions like: 10px 21px 5px 20px", + "containerHeaderPaddingTip": "Defines the padding for the container header. Example: 10px, 1rem. Also you can combine it like: 0px 20px. Or even separate for all 4 directions like: 10px 21px 5px 20px", + "containerSiderPaddingTip": "Defines the padding for the container sider. Example: 8px, 1em. Also you can combine it like: 0px 20px. Or even separate for all 4 directions like: 10px 21px 5px 20px", + "containerFooterPaddingTip": "Defines the padding for the container footer. Example: 12px, 1rem. Also you can combine it like: 0px 20px. Or even separate for all 4 directions like: 10px 21px 5px 20px", + "containerBodyPaddingTip": "Defines the padding for the container body. Example: 15px, 2em. Also you can combine it like: 0px 20px. Or even separate for all 4 directions like: 10px 21px 5px 20px", + "textSizeTip": "Specifies the font size of the text. Example: 14px, 1.2em, 110%.", + "textWeightTip": "Specifies the font weight of the text. Example: normal, bold, 400.", + "fontFamilyTip": "Specifies the font family of the text. Example: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Defines the decoration of the text. Example: underline, line-through, none.", + "textTransformTip": "Specifies the capitalization of the text. Example: uppercase, lowercase, capitalize.", + "fontStyleTip": "Sets the font style of the text. Example: normal, italic, oblique.", + "backgroundImageTip": "Specifies the background image of an element. Example: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Specifies the background image for the header. Example: url('header.jpg').", + "footerBackgroundImageTip": "Specifies the background image for the footer. Example: url('footer.jpg').", + "backgroundImageRepeatTip": "Defines how the background image is repeated. Example: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Defines how the header background image is repeated. Example: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Defines how the footer background image is repeated. Example: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Defines the size of the background image. Example: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Defines the position of the background image. Example: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Specifies the positioning area of the header's background image. Example: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Specifies the positioning area of the header's background image. Example: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Specifies the positioning area of the footer's background image. Example: padding-box, border-box, content-box.", + "rotationTip": "Specifies the rotation angle of the element. Example: 45deg, 90deg, -180deg.", + "lineHeightTip": "Sets the height of a line of text. Example: 1.5, 2, 120%." }, "export": { - "hiddenDesc": "If true, the component is hidden", - "disabledDesc": "If true, the component is disabled and non-interactive", - "visibleDesc": "If true, the component is visible", - "inputValueDesc": "Current value of the input", - "invalidDesc": "Indicates whether the value is invalid", - "placeholderDesc": "Placeholder text when no value is set", - "requiredDesc": "If true, a valid value is required", - "submitDesc": "Submit Form", - "richTextEditorValueDesc": "Current value of the Editor", - "richTextEditorReadOnlyDesc": "If true, the Editor is read-only", - "richTextEditorHideToolBarDesc": "If true, the toolbar is hidden", - "jsonEditorDesc": "Current JSON data", - "sliderValueDesc": "Currently selected value", - "sliderMaxValueDesc": "Maximum value of the slider", - "sliderMinValueDesc": "Minimum value of the slider", - "sliderStartDesc": "Value of the selected starting point", - "sliderEndDesc": "Value of the selected end point", - "ratingValueDesc": "Currently selected rating", - "ratingMaxDesc": "Maximum rating value", - "datePickerValueDesc": "Currently selected date", - "datePickerFormattedValueDesc": "Formatted selected date", - "datePickerTimestampDesc": "Timestamp of the selected date", - "dateRangeStartDesc": "Start date of the range", - "dateRangeEndDesc": "End date of the range", - "dateRangeStartTimestampDesc": "Timestamp of the start date", - "dateRangeEndTimestampDesc": "Timestamp of the end date", - "dateRangeFormattedValueDesc": "Formatted date range", - "dateRangeFormattedStartValueDesc": "Formatted start date", - "dateRangeFormattedEndValueDesc": "Formatted end date", - "timePickerValueDesc": "Currently selected time", - "timePickerFormattedValueDesc": "Formatted selected time", - "timeRangeStartDesc": "Start time of the range", - "timeRangeEndDesc": "End time of the range", - "timeRangeFormattedValueDesc": "Formatted time range", - "timeRangeFormattedStartValueDesc": "Formatted start time", - "timeRangeFormattedEndValueDesc": "Formatted end time", - "timeZone": "Time Zone", - "timeZoneDesc": "Timezone of the selected date", + "hiddenDesc": "If true, the component is hidden", + "disabledDesc": "If true, the component is disabled and non-interactive", + "visibleDesc": "If true, the component is visible", + "inputValueDesc": "Current value of the input", + "invalidDesc": "Indicates whether the value is invalid", + "placeholderDesc": "Placeholder text when no value is set", + "requiredDesc": "If true, a valid value is required", + "submitDesc": "Submit Form", + "richTextEditorValueDesc": "Current value of the Editor", + "richTextEditorReadOnlyDesc": "If true, the Editor is read-only", + "richTextEditorHideToolBarDesc": "If true, the toolbar is hidden", + "jsonEditorDesc": "Current JSON data", + "sliderValueDesc": "Currently selected value", + "sliderMaxValueDesc": "Maximum value of the slider", + "sliderMinValueDesc": "Minimum value of the slider", + "sliderStartDesc": "Value of the selected starting point", + "sliderEndDesc": "Value of the selected end point", + "ratingValueDesc": "Currently selected rating", + "ratingMaxDesc": "Maximum rating value", + "datePickerValueDesc": "Currently selected date", + "datePickerFormattedValueDesc": "Formatted selected date", + "datePickerTimestampDesc": "Timestamp of the selected date", + "dateRangeStartDesc": "Start date of the range", + "dateRangeEndDesc": "End date of the range", + "dateRangeStartTimestampDesc": "Timestamp of the start date", + "dateRangeEndTimestampDesc": "Timestamp of the end date", + "dateRangeFormattedValueDesc": "Formatted date range", + "dateRangeFormattedStartValueDesc": "Formatted start date", + "dateRangeFormattedEndValueDesc": "Formatted end date", + "timePickerValueDesc": "Currently selected time", + "timePickerFormattedValueDesc": "Formatted selected time", + "timeRangeStartDesc": "Start time of the range", + "timeRangeEndDesc": "End time of the range", + "timeRangeFormattedValueDesc": "Formatted time range", + "timeRangeFormattedStartValueDesc": "Formatted start time", + "timeRangeFormattedEndValueDesc": "Formatted end time", + "timeZone": "Time Zone", + "timeZoneDesc": "Timezone of the selected date", + + }, "validationDesc": { - "email": "Please enter a valid email address", - "url": "Please enter a valid URL", - "regex": "Please match the specified pattern", - "maxLength": "Too many characters, current: {length}, maximum: {maxLength}", - "minLength": "Not enough characters, current: {length}, minimum: {minLength}", - "maxValue": "Value exceeds maximum, current: {value}, maximum: {max}", - "minValue": "Value below minimum, current: {value}, minimum: {min}", - "maxTime": "Time exceeds maximum, current: {time}, maximum: {maxTime}", - "minTime": "Time below minimum, current: {time}, minimum: {minTime}", - "maxDate": "Date exceeds maximum, current: {date}, maximum: {maxDate}", - "minDate": "Date below minimum, current: {date}, minimum: {minDate}" - }, + "email": "Please enter a valid email address", + "url": "Please enter a valid URL", + "regex": "Please match the specified pattern", + "maxLength": "Too many characters, current: {length}, maximum: {maxLength}", + "minLength": "Not enough characters, current: {length}, minimum: {minLength}", + "maxValue": "Value exceeds maximum, current: {value}, maximum: {max}", + "minValue": "Value below minimum, current: {value}, minimum: {min}", + "maxTime": "Time exceeds maximum, current: {time}, maximum: {maxTime}", + "minTime": "Time below minimum, current: {time}, minimum: {minTime}", + "maxDate": "Date exceeds maximum, current: {date}, maximum: {maxDate}", + "minDate": "Date below minimum, current: {date}, minimum: {minDate}" + }, + // fifth part + "query": { - "noQueries": "No Data Queries available.", - "queryTutorialButton": "View {value} documents", - "datasource": "Your Data Sources", - "newDatasource": "New Data Source", - "generalTab": "General", - "notificationTab": "Notification", - "advancedTab": "Advanced", - "showFailNotification": "Show Notification on Failure", - "failCondition": "Failure Conditions", - "failConditionTooltip1": "Customize failure conditions and corresponding notifications.", - "failConditionTooltip2": "If any condition returns true, the query is marked as failed and triggers the corresponding notification.", - "showSuccessNotification": "Show Notification on Success", - "successMessageLabel": "Success Message", - "successMessage": "Run Successful", - "notifyDuration": "Duration", - "notifyDurationTooltip": "Notification duration. Time unit can be 's' (second, default) or 'ms' (millisecond). Default value is {default}s. Maximum is {max}s.", - "successMessageWithName": "{name} run successful", - "failMessageWithName": "{name} run failed: {result}", - "showConfirmationModal": "Show Confirmation Modal Before Running", - "confirmationMessageLabel": "Confirmation Message", - "confirmationMessage": "Are you sure you want to run this Data Query?", - "newQuery": "New Data Query", - "newFolder": "New Folder", - "recentlyUsed": "Recently Used", - "folder": "Folder", - "folderNotEmpty": "Folder is not empty", - "dataResponder": "Data Responder", - "tempState": "Temporary State", - "transformer": "Transformer", - "quickRestAPI": "REST Query", - "quickStreamAPI": "Stream Query", - "quickGraphql": "GraphQL Query", - "lowcoderAPI": "Lowcoder API", - "executeJSCode": "Run JavaScript Code", - "importFromQueryLibrary": "Import from Query Library", - "importFromFile": "Import from File", - "triggerType": "Triggered when...", - "triggerTypeAuto": "Inputs Change or On Page Load", - "triggerTypePageLoad": "When the Application (Page) loads", - "triggerTypeManual": "Only when you trigger it manually", - "chooseDataSource": "Choose Data Source", - "method": "Method", - "updateExceptionDataSourceTitle": "Update Failing Data Source", - "updateExceptionDataSourceContent": "Update the following query with the same failing data source:", - "update": "Update", - "disablePreparedStatement": "Disable Prepared Statements", - "disablePreparedStatementTooltip": "Disabling prepared statements can generate dynamic SQL, but increases the risk of SQL injection", - "timeout": "Timeout After", - "timeoutTooltip": "Default unit: ms. Supported input units: ms, s. Default value: {defaultSeconds} seconds. Maximum value: {maxSeconds} seconds. E.g., 300 (i.e., 300ms), 800ms, 5s.", - "periodic": "Run This Data Query Periodically", - "periodicTime": "Period", - "periodicTimeTooltip": "Period between successive executions. Default unit: ms. Supported input units: ms, s. Minimum value: 100ms. Periodical execution is disabled for values below 100ms. E.g., 300 (i.e., 300ms), 800ms, 5s.", - "cancelPrevious": "Ignore Results of Previous Uncompleted Executions", - "cancelPreviousTooltip": "If a new execution is triggered, the result of the previous uncompleted executions will be ignored if they did not complete, and these ignored executions will not trigger the event list of the query.", - "dataSourceStatusError": "If a new execution is triggered, the result of the previous uncompleted executions will be ignored if the previous executions did not complete, and the ignored executions will not trigger the event list of the query.", - "success": "Success", - "fail": "Failure", - "successDesc": "Triggered When Execution is Successful", - "failDesc": "Triggered When Execution Fails", - "fixedDelayError": "Query Not Run", - "execSuccess": "Run Successful", - "execFail": "Run Failed", - "execIgnored": "The Results of This Query Were Ignored", - "deleteSuccessMessage": "Successfully Deleted. You Can Use {undoKey} to Undo", - "dataExportDesc": "Data Obtained by the Current Query", - "codeExportDesc": "Current Query Status Code", - "successExportDesc": "Whether the Current Query Was Executed Successfully", - "messageExportDesc": "Information Returned by the Current Query", - "extraExportDesc": "Other Data in the Current Query", - "isFetchingExportDesc": "Is the Current Query in the Request", - "runTimeExportDesc": "Current Query Execution Time (ms)", - "latestEndTimeExportDesc": "Last Run Time", - "triggerTypeExportDesc": "Trigger Type", - "chooseResource": "Choose a Resource", - "createDataSource": "Create a New Data Source", - "editDataSource": "Edit", - "datasourceName": "Name", - "datasourceNameRuleMessage": "Please Enter a Data Source Name", - "generalSetting": "General Settings", - "advancedSetting": "Advanced Settings", - "port": "Port", - "portRequiredMessage": "Please Enter a Port", - "portErrorMessage": "Please Enter a Correct Port", - "connectionType": "Connection Type", - "regular": "Regular", - "host": "Host", - "hostRequiredMessage": "Please Enter a Host Domain Name or IP Address", - "userName": "User Name", - "password": "Password", - "encryptedServer": "-------- Encrypted on the Server Side --------", - "uriRequiredMessage": "Please Enter a URI", - "urlRequiredMessage": "Please Enter a URL", - "uriErrorMessage": "Please Enter a Correct URI", - "urlErrorMessage": "Please Enter a Correct URL", - "httpRequiredMessage": "Please Enter http:// or https://", - "databaseName": "Database Name", - "databaseNameRequiredMessage": "Please Enter a Database Name", - "useSSL": "Use SSL", - "userNameRequiredMessage": "Please Enter Your Name", - "passwordRequiredMessage": "Please Enter Your Password", - "authentication": "Authentication", - "authenticationType": "Authentication Type", - "sslCertVerificationType": "SSL Cert Verification", - "sslCertVerificationTypeDefault": "Verify CA Cert", - "sslCertVerificationTypeSelf": "Verify Self-Signed Cert", - "sslCertVerificationTypeDisabled": "Disabled", - "selfSignedCert": "Self-Signed Cert", - "selfSignedCertRequireMsg": "Please Enter Your Certificate", - "enableTurnOffPreparedStatement": "Enable Toggling Prepared Statements for Queries", - "enableTurnOffPreparedStatementTooltip": "You can enable or disable prepared statements in the query's Advanced tab", - "serviceName": "Service Name", - "serviceNameRequiredMessage": "Please Enter Your Service Name", - "useSID": "Use SID", - "connectSuccessfully": "Connection Successful", - "saveSuccessfully": "Saved Successfully", - "database": "Database", - "cloudHosting": "Cloud-hosted Lowcoder cannot access local services using 127.0.0.1 or localhost. Try connecting to public network data sources or use a reverse proxy for private services.", - "notCloudHosting": "For docker-hosted deployment, Lowcoder uses bridge networks, so 127.0.0.1 and localhost are invalid for host addresses. To access local machine data sources, refer to", - "howToAccessHostDocLink": "How to Access Host API/DB", - "returnList": "Return", - "chooseDatasourceType": "Choose Data Source Type", - "viewDocuments": "View Documents", - "testConnection": "Test Connection", - "save": "Save", - "whitelist": "Allowlist", - "whitelistTooltip": "Add Lowcoder's IP addresses to your data source allowlist as needed.", - "address": "Address: ", - "nameExists": "Name {name} already exists", - "jsQueryDocLink": "About JavaScript Query", - "dynamicDataSourceConfigLoadingText": "Loading extra datasource configuration...", - "dynamicDataSourceConfigErrText": "Failed to load extra datasource configuration.", - "retry": "Retry", - "categoryDatabase": "Database", - "categoryBigdata": "Big Data", - "categoryAi": "AI", - "categoryDevops": "DevOps", - "categoryAppdevelopment": "App Development", - "categoryWorkflow": "Workflow", - "categoryMessaging": "Messaging", - "categoryAssets": "Assets & Storage", - "categoryProjectManagement": "Project Management", - "categoryCrm": "CRM", - "categoryEcommerce": "E-commerce", - "categoryApis": "Others", - }, + "noQueries": "No Data Queries available.", + "queryTutorialButton": "View {value} documents", + "datasource": "Your Data Sources", + "newDatasource": "New Data Source", + "generalTab": "General", + "notificationTab": "Notification", + "variablesTab": "Variables", + "advancedTab": "Advanced", + "showFailNotification": "Show Notification on Failure", + "failCondition": "Failure Conditions", + "failConditionTooltip1": "Customize failure conditions and corresponding notifications.", + "failConditionTooltip2": "If any condition returns true, the query is marked as failed and triggers the corresponding notification.", + "showSuccessNotification": "Show Notification on Success", + "successMessageLabel": "Success Message", + "successMessage": "Run Successful", + "notifyDuration": "Duration", + "notifyDurationTooltip": "Notification duration. Time unit can be 's' (second, default) or 'ms' (millisecond). Default value is {default}s. Maximum is {max}s.", + "successMessageWithName": "{name} run successful", + "failMessageWithName": "{name} run failed: {result}", + "showConfirmationModal": "Show Confirmation Modal Before Running", + "confirmationMessageLabel": "Confirmation Message", + "confirmationMessage": "Are you sure you want to run this Data Query?", + "newQuery": "New Data Query", + "newFolder": "New Folder", + "recentlyUsed": "Recently Used", + "folder": "Folder", + "folderNotEmpty": "Folder is not empty", + "dataResponder": "Data Responder", + "tempState": "Temporary State", + "transformer": "Transformer", + "quickRestAPI": "REST Query", + "quickStreamAPI": "Stream Query", + "quickGraphql": "GraphQL Query", + "quickAlasql": "Local SQL Query", + "databaseType": "Database Type", + "chooseDatabase": "Choose Database", + "lowcoderAPI": "Lowcoder API", + "executeJSCode": "Run JavaScript Code", + "importFromQueryLibrary": "Prepared Data Query", + "preparedDataQueries" : "Your prepared Data Queries", + "adHocDataQueries" : "Qick Data Queries (without prepared Query or Data Source)", + "queryResultTransformer" : "Manipulate a Query Response to transform Data before binding", + "queryResultReactor" : "React to any change of a dynamic Data value", + "importFromFile": "Import from File", + "triggerType": "Triggered when...", + "triggerTypeAuto": "When Inputs Change or after Application (Page) loads", + "triggerTypePageLoad": "After the Application (Page) loads", + "triggerTypeManual": "Only when you trigger it manually", + "triggerTypeInputChange": "When Inputs Change", + "triggerTypeQueryExec": "After Query Execution", + "triggerTypeTimeout": "After Application (Page) loads and Timeout", + "delayTime": "Delay Time", + "chooseDataSource": "Choose Data Source", + "method": "Method", + "updateExceptionDataSourceTitle": "Update Failing Data Source", + "updateExceptionDataSourceContent": "Update the following query with the same failing data source:", + "update": "Update", + "disablePreparedStatement": "Disable Prepared Statements", + "disablePreparedStatementTooltip": "Disabling prepared statements can generate dynamic SQL, but increases the risk of SQL injection", + "timeout": "Timeout After", + "timeoutTooltip": "Default unit: ms. Supported input units: ms, s. Default value: {defaultSeconds} seconds. Maximum value: {maxSeconds} seconds. E.g., 300 (i.e., 300ms), 800ms, 5s.", + "periodic": "Run This Data Query Periodically", + "periodicTime": "Period", + "periodicTimeTooltip": "Period between successive executions. Default unit: ms. Supported input units: ms, s. Minimum value: 100ms. Periodical execution is disabled for values below 100ms. E.g., 300 (i.e., 300ms), 800ms, 5s.", + "cancelPrevious": "Ignore Results of Previous Uncompleted Executions", + "cancelPreviousTooltip": "If a new execution is triggered, the result of the previous uncompleted executions will be ignored if they did not complete, and these ignored executions will not trigger the event list of the query.", + "dataSourceStatusError": "If a new execution is triggered, the result of the previous uncompleted executions will be ignored if the previous executions did not complete, and the ignored executions will not trigger the event list of the query.", + "success": "Success", + "fail": "Failure", + "successDesc": "Triggered When Execution is Successful", + "failDesc": "Triggered When Execution Fails", + "fixedDelayError": "Query Not Run", + "execSuccess": "Run Successful", + "execFail": "Run Failed", + "execIgnored": "The Results of This Query Were Ignored", + "deleteSuccessMessage": "Successfully Deleted. You Can Use {undoKey} to Undo", + "dataExportDesc": "Data Obtained by the Current Query", + "codeExportDesc": "Current Query Status Code", + "successExportDesc": "Whether the Current Query Was Executed Successfully", + "messageExportDesc": "Information Returned by the Current Query", + "extraExportDesc": "Other Data in the Current Query", + "isFetchingExportDesc": "Is the Current Query in the Request", + "runTimeExportDesc": "Current Query Execution Time (ms)", + "latestEndTimeExportDesc": "Last Run Time", + "triggerTypeExportDesc": "Trigger Type", + "chooseResource": "Choose a Resource", + "createDataSource": "Create a New Data Source", + "editDataSource": "Edit", + "datasourceName": "Name", + "datasourceNameRuleMessage": "Please Enter a Data Source Name", + "generalSetting": "General Settings", + "advancedSetting": "Advanced Settings", + "port": "Port", + "portRequiredMessage": "Please Enter a Port", + "portErrorMessage": "Please Enter a Correct Port", + "connectionType": "Connection Type", + "regular": "Regular", + "host": "Host", + "hostRequiredMessage": "Please Enter a Host Domain Name or IP Address", + "userName": "User Name", + "password": "Password", + "encryptedServer": "-------- Encrypted on the Server Side --------", + "uriRequiredMessage": "Please Enter a URI", + "urlRequiredMessage": "Please Enter a URL", + "uriErrorMessage": "Please Enter a Correct URI", + "urlErrorMessage": "Please Enter a Correct URL", + "httpRequiredMessage": "Please Enter http:// or https://", + "databaseName": "Database Name", + "databaseNameRequiredMessage": "Please Enter a Database Name", + "useSSL": "Use SSL", + "userNameRequiredMessage": "Please Enter Your Name", + "passwordRequiredMessage": "Please Enter Your Password", + "authentication": "Authentication", + "authenticationType": "Authentication Type", + "sslCertVerificationType": "SSL Cert Verification", + "sslCertVerificationTypeDefault": "Verify CA Cert", + "sslCertVerificationTypeSelf": "Verify Self-Signed Cert", + "sslCertVerificationTypeDisabled": "Disabled", + "selfSignedCert": "Self-Signed Cert", + "selfSignedCertRequireMsg": "Please Enter Your Certificate", + "enableTurnOffPreparedStatement": "Enable Toggling Prepared Statements for Queries", + "enableTurnOffPreparedStatementTooltip": "You can enable or disable prepared statements in the query's Advanced tab", + "serviceName": "Service Name", + "serviceNameRequiredMessage": "Please Enter Your Service Name", + "useSID": "Use SID", + "connectSuccessfully": "Connection Successful", + "saveSuccessfully": "Saved Successfully", + "database": "Database", + "cloudHosting": "Cloud-hosted Lowcoder cannot access local services using 127.0.0.1 or localhost. Try connecting to public network data sources or use a reverse proxy for private services.", + "notCloudHosting": "For docker-hosted deployment, Lowcoder uses bridge networks, so 127.0.0.1 and localhost are invalid for host addresses. To access local machine data sources, refer to", + "howToAccessHostDocLink": "How to Access Host API/DB", + "returnList": "Return", + "chooseDatasourceType": "Choose Data Source Type", + "viewDocuments": "View Documents", + "testConnection": "Test Connection", + "save": "Save", + "whitelist": "Allowlist", + "whitelistTooltip": "Add Lowcoder's IP addresses to your data source allowlist as needed.", + "address": "Address: ", + "nameExists": "Name {name} already exists", + "jsQueryDocLink": "About JavaScript Query", + "dynamicDataSourceConfigLoadingText": "Loading extra datasource configuration...", + "dynamicDataSourceConfigErrText": "Failed to load extra datasource configuration.", + "retry": "Retry", + "categoryDatabase" : "Database", + "categoryBigdata" : "Big Data", + "categoryAi" : "AI", + "categoryDevops" : "DevOps", + "categoryAppdevelopment" : "App Development", + "categoryWorkflow" : "Workflow", + "categoryMessaging" : "Messaging", + "categoryAssets" : "Assets & Storage", + "categoryProjectManagement" : "Project Management", + "categoryCrm" : "CRM", + "categoryEcommerce" : "E-commerce", + "categoryWebscrapers" : "Webscrapers & Open Data", + "categoryDocumentHandling" : "Report & Document Generation", + "categoryRPA" : "Robotic Process Automation", + "componentsUsingQueryTitle" : "Query Usage", + "componentsUsingQuery" : "Where is this Query in use", + "variables" : "Variables" + }, + + // sixth part + "sqlQuery": { - "keyValuePairs": "Key-Value Pairs", - "object": "Object", - "allowMultiModify": "Allow Multi-Row Modification", - "allowMultiModifyTooltip": "If selected, all rows meeting the conditions are operated on. Otherwise, only the first row meeting the conditions is operated on.", - "array": "Array", - "insertList": "Insert List", - "insertListTooltip": "Values inserted when they do not exist", - "filterRule": "Filter Rule", - "updateList": "Update List", - "updateListTooltip": "Values updated as they exist can be overridden by the same insertion list values", - "sqlMode": "SQL Mode", - "guiMode": "GUI Mode", - "operation": "Operation", - "insert": "Insert", - "upsert": "Insert, but Update if Conflict", - "update": "Update", - "delete": "Delete", - "bulkInsert": "Bulk Insert", - "bulkUpdate": "Bulk Update", - "table": "Table", - "primaryKeyColumn": "Primary Key Column" + "keyValuePairs": "Key-Value Pairs", + "object": "Object", + "allowMultiModify": "Allow Multi-Row Modification", + "allowMultiModifyTooltip": "If selected, all rows meeting the conditions are operated on. Otherwise, only the first row meeting the conditions is operated on.", + "array": "Array", + "insertList": "Insert List", + "insertListTooltip": "Values inserted when they do not exist", + "filterRule": "Filter Rule", + "updateList": "Update List", + "updateListTooltip": "Values updated as they exist can be overridden by the same insertion list values", + "sqlMode": "SQL Mode", + "guiMode": "GUI Mode", + "operation": "Operation", + "insert": "Insert", + "upsert": "Insert, but Update if Conflict", + "update": "Update", + "delete": "Delete", + "bulkInsert": "Bulk Insert", + "bulkUpdate": "Bulk Update", + "table": "Table", + "primaryKeyColumn": "Primary Key Column" }, "EsQuery": { - "rawCommand": "Raw Command", - "queryTutorialButton": "View Elasticsearch API Documents", - "request": "Request" + "rawCommand": "Raw Command", + "queryTutorialButton": "View Elasticsearch API Documents", + "request": "Request" }, "googleSheets": { - "rowIndex": "Row Index", - "spreadsheetId": "Spreadsheet ID", - "sheetName": "Sheet Name", - "readData": "Read Data", - "appendData": "Append Row", - "updateData": "Update Row", - "deleteData": "Delete Row", - "clearData": "Clear Row", - "serviceAccountRequireMessage": "Please Enter Your Service Account", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Sort", - "sortPlaceholder": "Name" + "rowIndex": "Row Index", + "spreadsheetId": "Spreadsheet ID", + "sheetName": "Sheet Name", + "readData": "Read Data", + "appendData": "Append Row", + "updateData": "Update Row", + "deleteData": "Delete Row", + "clearData": "Clear Row", + "serviceAccountRequireMessage": "Please Enter Your Service Account", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Sort", + "sortPlaceholder": "Name" }, "queryLibrary": { - "export": "Export to JSON", - "noInput": "The Current Query Has No Input", - "inputName": "Name", - "inputDesc": "Description", - "emptyInputs": "No Inputs", - "clickToAdd": "Add", - "chooseQuery": "Choose Query", - "viewQuery": "View Query", - "chooseVersion": "Choose Version", - "latest": "Latest", - "publish": "Publish", - "historyVersion": "History Version", - "deleteQueryLabel": "Delete Query", - "deleteQueryContent": "The query cannot be recovered after deletion. Delete the query?", - "run": "Run", - "readOnly": "Read Only", - "exit": "Exit", - "recoverAppSnapshotContent": "Restore the current query to version {version}", - "searchPlaceholder": "Search Query", - "allQuery": "All Queries", - "deleteQueryTitle": "Delete Query", - "unnamed": "Unnamed", - "publishNewVersion": "Publish New Version", - "publishSuccess": "Published Successfully", - "version": "Version", - "desc": "Description" + "export": "Export to JSON", + "noInput": "The Current Query Has No Input", + "inputName": "Name", + "inputDesc": "Description", + "emptyInputs": "No Inputs", + "clickToAdd": "Add", + "chooseQuery": "Choose Query", + "viewQuery": "View Query", + "chooseVersion": "Choose Version", + "latest": "Latest", + "publish": "Publish", + "historyVersion": "History Version", + "deleteQueryLabel": "Delete Query", + "deleteQueryContent": "The query cannot be recovered after deletion. Delete the query?", + "run": "Run", + "readOnly": "Read Only", + "exit": "Exit", + "recoverAppSnapshotContent": "Restore the current query to version {version}", + "searchPlaceholder": "Search Query", + "allQuery": "All Queries", + "deleteQueryTitle": "Delete Query", + "unnamed": "Unnamed", + "publishNewVersion": "Publish New Version", + "publishSuccess": "Published Successfully", + "version": "Version", + "desc": "Description" }, "snowflake": { - "accountIdentifierTooltip": "See ", - "extParamsTooltip": "Configure Additional Connection Parameters" + "accountIdentifierTooltip": "See ", + "extParamsTooltip": "Configure Additional Connection Parameters" }, "lowcoderQuery": { - "queryOrgUsers": "Query Workspace Users" + "queryOrgUsers": "Query Workspace Users" }, "redisQuery": { - "rawCommand": "Raw Command", - "command": "Command", - "queryTutorial": "View Redis Commands Documents" + "rawCommand": "Raw Command", + "command": "Command", + "queryTutorial": "View Redis Commands Documents" }, "httpQuery": { - "bodyFormDataTooltip": "If {type} is selected, the value format should be {object}. Example: {example}", - "text": "Text", - "file": "File", - "extraBodyTooltip": "Key-values in Extra Body will be appended to the body with JSON or Form Data types", - "forwardCookies": "Forward Cookies", - "forwardAllCookies": "Forward All Cookies" + "bodyFormDataTooltip": "If {type} is selected, the value format should be {object}. Example: {example}", + "text": "Text", + "file": "File", + "extraBodyTooltip": "Key-values in Extra Body will be appended to the body with JSON or Form Data types", + "forwardCookies": "Forward Cookies", + "forwardAllCookies": "Forward All Cookies" }, "smtpQuery": { - "attachment": "Attachment", - "attachmentTooltip": "Can be used with file upload component, data needs to be converted to: ", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Sender", - "recipient": "Recipient", - "carbonCopy": "Carbon Copy", - "blindCarbonCopy": "Blind Carbon Copy", - "subject": "Subject", - "content": "Content", - "contentTooltip": "Supports input text or HTML" - }, + "attachment": "Attachment", + "attachmentTooltip": "Can be used with file upload component, data needs to be converted to: ", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Sender", + "recipient": "Recipient", + "carbonCopy": "Carbon Copy", + "blindCarbonCopy": "Blind Carbon Copy", + "subject": "Subject", + "content": "Content", + "contentTooltip": "Supports input text or HTML" + }, + // seventh part + "uiCompCategory": { - "dashboards": "Dashboards & Reporting", - "layout": "Layout & Navigation", - "forms": "Data Collection & Forms", - "collaboration": "Meeting & Collaboration", - "projectmanagement": "Project Management", - "scheduling": "Calendar & Scheduling", - "documents": "Document & File Management", - "itemHandling": "Item & Signature Handling", - "multimedia": "Multimedia & Animation", - "integration": "Integration & Extension" + "dashboards": "Dashboards & Reporting", + "layout": "Layout & Navigation", + "forms": "Data Collection & Forms", + "collaboration": "Meeting & Collaboration", + "projectmanagement": "Project Management", + "scheduling": "Calendar & Scheduling", + "documents": "Document & File Management", + "itemHandling": "Item & Signature Handling", + "multimedia": "Multimedia & Animation", + "integration": "Integration & Extension", + "legacy" : "Legacy & Deprecated" }, "uiComp": { - "autoCompleteCompName": "Auto Complete", - "autoCompleteCompDesc": "An input field that provides suggestions as you type, enhancing user experience and accuracy.", - "autoCompleteCompKeywords": "suggestions, autocomplete, typing, input", - "inputCompName": "Input", - "inputCompDesc": "A basic text input field allowing users to enter and edit text.", - "inputCompKeywords": "text, input, field, edit", - "textAreaCompName": "Text Area", - "textAreaCompDesc": "A multi-line text input for longer form content, such as comments or descriptions.", - "textAreaCompKeywords": "multiline, textarea, input, text", - "passwordCompName": "Password", - "passwordCompDesc": "A secure field for password input, masking the characters for privacy.", - "passwordCompKeywords": "password, security, input, hidden", - "richTextEditorCompName": "Rich Text Editor", - "richTextEditorCompDesc": "An advanced text editor supporting rich formatting options like bold, italics, and lists.", - "richTextEditorCompKeywords": "editor, text, formatting, rich content", - "numberInputCompName": "Number Input", - "numberInputCompDesc": "A field specifically for numerical input, with controls for incrementing and decrementing values.", - "numberInputCompKeywords": "number, input, increment, decrement", - "sliderCompName": "Slider", - "sliderCompDesc": "A graphical slider component for selecting a value or range within a defined scale.", - "sliderCompKeywords": "slider, range, input, graphical", - "rangeSliderCompName": "Range Slider", - "rangeSliderCompDesc": "A dual-handle slider to select a range of values, useful for filtering or setting limits.", - "rangeSliderCompKeywords": "range, slider, dual-handle, filter", - "ratingCompName": "Rating", - "ratingCompDesc": "A component for capturing user ratings, displayed as stars.", - "ratingCompKeywords": "rating, stars, feedback, input", - "switchCompName": "Switch", - "switchCompDesc": "A toggle switch for on/off or yes/no type decisions.", - "switchCompKeywords": "toggle, switch, on/off, control", - "selectCompName": "Select", - "selectCompDesc": "A dropdown menu for selecting from a list of options.", - "selectCompKeywords": "dropdown, select, options, menu", - "multiSelectCompName": "Multiselect", - "multiSelectCompDesc": "A component that allows selection of multiple items from a dropdown list.", - "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", - "cascaderCompName": "Cascader", - "cascaderCompDesc": "A multi-level dropdown for hierarchical data selection, such as selecting a location.", - "cascaderCompKeywords": "cascader, hierarchical, dropdown, levels", - "checkboxCompName": "Checkbox", - "checkboxCompDesc": "A standard checkbox for options that can be selected or deselected.", - "checkboxCompKeywords": "checkbox, options, select, toggle", - "radioCompName": "Radio", - "radioCompDesc": "Radio buttons for selecting one option from a set, where only one choice is allowed.", - "radioCompKeywords": "radio, buttons, select, single choice", - "segmentedControlCompName": "Segmented Control", - "segmentedControlCompDesc": "A control with segmented options for quickly toggling between multiple choices.", - "segmentedControlCompKeywords": "segmented, control, toggle, options", - "stepControlCompName": "Step Control", - "stepControlCompDesc": "A control with step options to offer visual guided steps for applications like forms or wizards.", - "stepControlCompKeywords": "steps, control, toggle, options", - "fileUploadCompName": "File Upload", - "fileUploadCompDesc": "A component for uploading files, with support for drag-and-drop and file selection.", - "fileUploadCompKeywords": "file, upload, drag and drop, select", - "dateCompName": "Date", - "dateCompDesc": "A date picker component for selecting dates from a calendar interface.", - "dateCompKeywords": "date, picker, calendar, select", - "dateRangeCompName": "Date Range", - "dateRangeCompDesc": "A component for selecting a range of dates, useful for booking systems or filters.", - "dateRangeCompKeywords": "daterange, select, booking, filter", - "timeCompName": "Time", - "timeCompDesc": "A time selection component for choosing specific times of the day.", - "timeCompKeywords": "time, picker, select, clock", - "timeRangeCompName": "Time Range", - "timeRangeCompDesc": "A component for selecting a range of time, often used in scheduling applications.", - "timeRangeCompKeywords": "timerange, select, scheduling, duration", - "buttonCompName": "Form Button", - "buttonCompDesc": "A versatile button component for submitting forms, triggering actions, or navigating.", - "buttonCompKeywords": "button, submit, action, navigate", - "meetingControlCompName": "Icon Button", - "meetingCompDesc": "A button for controlling functions like start, end, mute, or share.", - "meetingCompKeywords": "control, button, start, end", - "linkCompName": "Link", - "linkCompDesc": "A hyperlink display component for navigation or linking to external resources.", - "linkCompKeywords": "link, hyperlink, navigation, external", - "scannerCompName": "Scanner", - "scannerCompDesc": "A component for scanning barcodes, QR codes, and other similar data.", - "scannerCompKeywords": "scanner, barcode, QR code, scan", - "dropdownCompName": "Dropdown", - "dropdownCompDesc": "A dropdown menu for compactly displaying a list of options.", - "dropdownCompKeywords": "dropdown, menu, options, select", - "toggleButtonCompName": "Toggle Button", - "toggleButtonCompDesc": "A button that can toggle between two states or options.", - "toggleButtonCompKeywords": "toggle, button, switch, state", - "textCompName": "Text Display", - "textCompDesc": "A simple component for displaying static or dynamic text content inclusive Markdown formatting.", - "textCompKeywords": "text, display, static, dynamic", - "tableCompName": "Table", - "tableCompDesc": "A rich table component for displaying data in a structured table format, with options for sorting and filtering, tree Data display and extensible Rows.", - "tableCompKeywords": "table, data, sorting, filtering", - "imageCompName": "Image", - "imageCompDesc": "A component for displaying images, supporting various formats based on URI or Base64 Data.", - "imageCompKeywords": "image, display, media, Base64", - "progressCompName": "Progress", - "progressCompDesc": "A visual indicator of progress, typically used to show the completion status of a task.", - "progressCompKeywords": "progress, indicator, status, task", - "progressCircleCompName": "Progress Circle", - "progressCircleCompDesc": "A circular progress indicator, often used for loading states or time-bound tasks.", - "progressCircleCompKeywords": "circle, progress, indicator, loading", - "fileViewerCompName": "File Viewer", - "fileViewerCompDesc": "A component for viewing various types of files, including documents and images.", - "fileViewerCompKeywords": "file, viewer, document, image", - "dividerCompName": "Divider", - "dividerCompDesc": "A visual divider component, used to separate content or sections in a layout.", - "dividerCompKeywords": "divider, separator, layout, design", - "qrCodeCompName": "QR Code", - "qrCodeCompDesc": "A component for displaying QR codes, useful for quick scanning and information transfer.", - "qrCodeCompKeywords": "QR code, scanning, barcode, information", - "formCompName": "Form", - "formCompDesc": "A container component for building structured forms with various input types.", - "formCompKeywords": "form, input, container, structure", - "jsonSchemaFormCompName": "JSON Schema Form", - "jsonSchemaFormCompDesc": "A dynamic form component generated based on a JSON schema.", - "jsonSchemaFormCompKeywords": "JSON, schema, form, dynamic", - "containerCompName": "Container", - "containerCompDesc": "A general-purpose container for layout and organization of UI elements.", - "containerCompKeywords": "container, layout, organization, UI", - "floatTextContainerCompName": "Float Text Container", - "floatTextContainerCompDesc": "Float Text Container component", - "floatTextContainerCompKeywords": "container, layout, text, flow", - "collapsibleContainerCompName": "Collapsible Container", - "collapsibleContainerCompDesc": "A container that can be expanded or collapsed, ideal for managing content visibility.", - "collapsibleContainerCompKeywords": "collapsible, container, expand, collapse", - "tabbedContainerCompName": "Tabbed Container", - "tabbedContainerCompDesc": "A container with tabbed navigation for organizing content into separate panels.", - "tabbedContainerCompKeywords": "tabbed, container, navigation, panels", - "pageLayoutCompName": "Page Layout", - "pageLayoutCompDesc": "A container which offers to create a layout with header, sider, footer and main content areas", - "pageLayoutCompKeywords": "layout, container, navigation, pages", - "modalCompName": "Modal", - "modalCompDesc": "A pop-up modal component for displaying content, alerts, or forms in focus.", - "modalCompKeywords": "modal, popup, alert, form", - "listViewCompName": "List View", - "listViewCompDesc": "A component for displaying a list of items or data, where you can place other components inside. Like a repeater.", - "listViewCompKeywords": "list, view, display, repeater", - "gridCompName": "Grid", - "gridCompDesc": "A flexible grid component for creating structured layouts with rows and columns as an extension to the List View component.", - "gridCompKeywords": "grid, layout, rows, columns", - "navigationCompName": "Navigation", - "navigationCompDesc": "A navigation component for creating menus, breadcrumbs, or tabs for site navigation.", - "navigationCompKeywords": "navigation, menu, breadcrumbs, tabs", - "iframeCompName": "IFrame", - "iframeCompDesc": "An inline frame component for embedding external web pages and apps or content within the application.", - "iframeCompKeywords": "iframe, embed, web page, content", - "customCompName": "Custom Component", - "customCompDesc": "A flexible, programmable component for creating unique, user-defined UI elements tailored to your specific needs.", - "customCompKeywords": "custom, user-defined, flexible, programmable", - "moduleCompName": "Module", - "moduleCompDesc": "Use Modules to create Micro-Apps designed for encapsulating specific functionalities or features. Modules can be then embedded and reused across all Apps.", - "moduleCompKeywords": "module, micro-app, functionality, reusable", - "jsonExplorerCompName": "JSON Explorer", - "jsonExplorerCompDesc": "A component for visually exploring and interacting with JSON data structures.", - "jsonExplorerCompKeywords": "JSON, explorer, data, structure", - "jsonEditorCompName": "JSON Editor", - "jsonEditorCompDesc": "An editor component for creating and modifying JSON data with validation and syntax highlighting.", - "jsonEditorCompKeywords": "JSON, editor, modify, validate", - "treeCompName": "Tree", - "treeCompDesc": "A tree structure component for displaying hierarchical data, such as file systems or organizational charts.", - "treeCompKeywords": "tree, hierarchical, data, structure", - "treeSelectCompName": "Tree Select", - "treeSelectCompDesc": "A selection component that presents options in a hierarchical tree format, allowing for organized and nested selections.", - "treeSelectCompKeywords": "tree, select, hierarchical, nested", - "audioCompName": "Audio", - "audioCompDesc": "A component for embedding audio content, with controls for playback and volume adjustment.", - "audioCompKeywords": "audio, playback, sound, music", - "videoCompName": "Video", - "videoCompDesc": "A multimedia component for embedding and playing video content, with support for various formats.", - "videoCompKeywords": "video, multimedia, playback, embed", - "drawerCompName": "Drawer", - "drawerCompDesc": "A sliding panel component that can be used for additional navigation or content display, typically emerging from the edge of the screen.", - "drawerCompKeywords": "drawer, sliding, panel, navigation", - "chartCompName": "Chart", - "chartCompDesc": "A versatile component for visualizing data through various types of charts and graphs.", - "chartCompKeywords": "chart, graph, data, visualization", - "carouselCompName": "Image Carousel", - "carouselCompDesc": "A rotating carousel component for showcasing images, banners, or content slides.", - "carouselCompKeywords": "carousel, images, rotation, showcase", - "imageEditorCompName": "Image Editor", - "imageEditorCompDesc": "An interactive component for editing and manipulating images, offering various tools and filters.", - "imageEditorCompKeywords": "image, editor, manipulate, tools", - "mermaidCompName": "Mermaid Chart", - "mermaidCompDesc": "A component for rendering complex diagrams and flowcharts based on Mermaid syntax.", - "mermaidCompKeywords": "mermaid, charts, diagrams, flowcharts", - "calendarCompName": "Calendar", - "calendarCompDesc": "A calendar component for displaying dates and events, with options for month, week, or day views.", - "calendarCompKeywords": "calendar, dates, events, scheduling", - "signatureCompName": "Signature", - "signatureCompDesc": "A component for capturing digital signatures, useful for approvals and verification processes.", - "signatureCompKeywords": "signature, digital, approval, verification", - "jsonLottieCompName": "Lottie Animation", - "jsonLottieCompDesc": "A component for displaying Lottie animations, providing lightweight and scalable animations based on JSON data.", - "jsonLottieCompKeywords": "lottie, animation, JSON, scalable", - "timelineCompName": "Timeline", - "timelineCompDesc": "A component for displaying events or actions in a chronological order, visually represented along a linear timeline.", - "timelineCompKeywords": "timeline, events, chronological, history", - "commentCompName": "Comment", - "commentCompDesc": "A component for adding and displaying user comments, supporting threaded replies and user interaction.", - "commentCompKeywords": "comment, discussion, user interaction, feedback", - "mentionCompName": "Mention", - "mentionCompDesc": "A component that supports mentioning users or tags within text content, typically used in social media or collaborative platforms.", - "mentionCompKeywords": "mention, tag, user, social media", - "responsiveLayoutCompName": "Responsive Layout", - "responsiveLayoutCompDesc": "A layout component designed to adapt and respond to different screen sizes and devices, ensuring a consistent user experience.", - "responsiveLayoutCompKeywords": "responsive, layout, adapt, screen size", - "iconCompName": "Icons", - "iconCompDesc": "Use various Icons to enhance the visual appeal and user experience of your application.", - "iconCompKeywords": "Icons, pictograms, symbols, shapes", - "tourCompName": "Tour", - "tourCompDesc": "A product tour for guiding users.", - "tourCompKeywords": "tour, product tour, walkthrough, interactive walkthrough", - "hillchartCompName": "Hillchart", - "hillchartCompDesc": "A visualization component for displaying project management state data in a hill chart format.", - "hillchartCompKeywords": "project management, hill chart, visualization, data", - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "A component for displaying interactive maps using OpenLayers, with support for various map layers and features.", - "openLayersGeoMapCompKeywords": "openlayers, geo map, interactive, map layers", - "chartsGeoMapCompName": "Geo Map Charts", - "chartsGeoMapCompDesc": "A component for visualizing geographical data on interactive maps with dynamic charts", - "chartsGeoMapCompKeywords": "geo map, charts, visualization, geographical data", - "bpmnEditorCompName": "BPMN Editor", - "bpmnEditorCompDesc": "A component for viewing, creating and editing BPMN diagrams, supporting various BPMN elements and features.", - "bpmnEditorCompKeywords": "BPMN, editor, diagrams, elements, workflows", - "turnstileCaptchaCompName": "Turnstile Captcha", - "turnstileCaptchaCompDesc": "A captcha component to verify users against bots.", - "turnstileCaptchaCompKeywords": "captcha, verification, identity, security", - "pivotTableCompName": "Pivot Table", - "pivotTableCompDesc": "A data summarization and analysis tool for organizing and aggregating data in a tabular format.", - "pivotTableCompKeywords": "pivot table, data, analysis, aggregation", - "funnelChartCompName": "Funnel Chart", - "funnelChartCompDesc": "A visualization tool for displaying the progressive reduction of data as it passes through stages.", - "funnelChartCompKeywords": "funnel chart, sales, conversions, process", - "gaugeChartCompName": "Gauge Chart", - "gaugeChartCompDesc": "A chart that displays data as a reading on a dial, useful for indicating the status or level of something.", - "gaugeChartCompKeywords": "gauge chart, metrics, performance, status", - "sankeyChartCompName": "Sankey Chart", - "sankeyChartCompDesc": "A flow diagram in which the width of the arrows is proportional to the flow rate, used to show energy, material, or cost transfers.", - "sankeyChartCompKeywords": "sankey chart, flow, energy, costs", - "candleStickChartCompName": "Candlestick Chart", - "candleStickChartCompDesc": "A style of financial chart used to describe price movements of a security, derivative, or currency.", - "candleStickChartCompKeywords": "candlestick chart, stocks, trading, finance", - "radarChartCompName": "Radar Chart", - "radarChartCompDesc": "A graphical method of displaying multivariate data in the form of a two-dimensional chart of three or more quantitative variables.", - "radarChartCompKeywords": "radar chart, multivariate, performance analysis", - "heatmapChartCompName": "Heatmap Chart", - "heatmapChartCompDesc": "A graphical representation of data where individual values are represented as colors.", - "heatmapChartCompKeywords": "heatmap, data visualization, intensity", - "graphChartCompName": "Graph Chart", - "graphChartCompDesc": "A diagram representing a network of nodes connected by edges, useful for showing interconnections and relationships.", - "graphChartCompKeywords": "graph chart, networks, relationships, nodes", - "treeChartCompName": "Tree Chart", - "treeChartCompDesc": "A diagram that visually represents hierarchy in a tree-like structure, showing relationships among various nodes.", - "treeChartCompKeywords": "tree chart, hierarchy, organizational", - "treemapChartCompName": "Treemap Chart", - "treemapChartCompDesc": "A chart that uses nested rectangles to represent hierarchical data proportionately.", - "treemapChartCompKeywords": "treemap, hierarchy, data visualization", - "sunburstChartCompName": "Sunburst Chart", - "sunburstChartCompDesc": "A radial space-filling visualization technique that illustrates hierarchical relationships through layers of a circle.", - "sunburstChartCompKeywords": "sunburst chart, radial, hierarchy", - "themeriverChartCompName": "Theme River Chart", - "themeriverChartCompDesc": "A visualization resembling a stream graph that shows changes in a data set over time across categories.", - "themeriverChartCompKeywords": "theme river, time series, trends", - "basicChartCompName": "Basic Chart", - "basicChartCompDesc": "A versatile component for visualizing data through various types of charts and graphs.", - "basicChartCompKeywords": "chart, graph, data, visualization", - "shapeCompName": "Shapes", - "shapeCompDesc": "A collection of geometric shapes for use with diagrams, illustrations, and visualizations.", - "shapeCompKeywords": "shapes, geometric, diagrams, illustrations", - "ganttChartCompName": "Gantt Chart", - "ganttChartCompDesc": "A chart that illustrates a project schedule, showing the start and finish dates of elements and dependencies.", - "ganttChartCompKeywords": "gantt chart, project management, schedule", - // by mousheng - "colorPickerCompName": "Color Picker", - "colorPickerCompDesc": "Intuitive color selection for customization.", - "colorPickerCompKeywords": "color, picker, customization", - "floatButtonCompName": "Float Button", - "floatButtonCompDesc": "A floating action button for prominent and quick actions.", - "floatButtonCompKeywords": "float button, action, quick", - "avatarCompName": "Avatar", - "avatarCompDesc": "Displays user avatars or profile images for personalized identification.", - "avatarCompKeywords": "avatar, profile image, user identification", - "avatarGroupCompName": "Avatar Group", - "avatarGroupCompDesc": "A group of avatars to represent multiple users or entities in a compact and visually appealing way.", - "avatarGroupCompKeywords": "avatar group, users, entities, compact", - "transferName": "Transfer", - "transferDesc": "Facilitates data transfer between two lists with drag-and-drop functionality.", - "transferKeywords": "transfer, data, drag-and-drop", - "cardCompName": "Content Card", - "cardCompDesc": "A card component for displaying organized information or content in a structured manner.", - "cardCompKeywords": "card, information, content, display", - "timerCompName": "Timer", - "timerCompDesc": "A component that displays a countdown or elapsed time, useful for tracking durations and deadlines.", - "timerCompKeywords": "timer, countdown, elapsed time, tracking, durations, deadlines", - }, + "autoCompleteCompName": "Auto Complete", + "autoCompleteCompDesc": "An input field that provides suggestions as you type, enhancing user experience and accuracy.", + "autoCompleteCompKeywords": "suggestions, autocomplete, typing, input", + + "inputCompName": "Input", + "inputCompDesc": "A basic text input field allowing users to enter and edit text.", + "inputCompKeywords": "text, input, field, edit", + + "textAreaCompName": "Text Area", + "textAreaCompDesc": "A multi-line text input for longer form content, such as comments or descriptions.", + "textAreaCompKeywords": "multiline, textarea, input, text", + + "passwordCompName": "Password", + "passwordCompDesc": "A secure field for password input, masking the characters for privacy.", + "passwordCompKeywords": "password, security, input, hidden", + + "richTextEditorCompName": "Rich Text Editor", + "richTextEditorCompDesc": "An advanced text editor supporting rich formatting options like bold, italics, and lists.", + "richTextEditorCompKeywords": "editor, text, formatting, rich content", + + "numberInputCompName": "Number Input", + "numberInputCompDesc": "A field specifically for numerical input, with controls for incrementing and decrementing values.", + "numberInputCompKeywords": "number, input, increment, decrement", + + "sliderCompName": "Slider", + "sliderCompDesc": "A graphical slider component for selecting a value or range within a defined scale.", + "sliderCompKeywords": "slider, range, input, graphical", + + "rangeSliderCompName": "Range Slider", + "rangeSliderCompDesc": "A dual-handle slider to select a range of values, useful for filtering or setting limits.", + "rangeSliderCompKeywords": "range, slider, dual-handle, filter", + + "ratingCompName": "Rating", + "ratingCompDesc": "A component for capturing user ratings, displayed as stars.", + "ratingCompKeywords": "rating, stars, feedback, input", + + "switchCompName": "Switch", + "switchCompDesc": "A toggle switch for on/off or yes/no type decisions.", + "switchCompKeywords": "toggle, switch, on/off, control", + + "selectCompName": "Select", + "selectCompDesc": "A dropdown menu for selecting from a list of options.", + "selectCompKeywords": "dropdown, select, options, menu", + + "multiSelectCompName": "Multiselect", + "multiSelectCompDesc": "A component that allows selection of multiple items from a dropdown list.", + "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", + + "cascaderCompName": "Cascader", + "cascaderCompDesc": "A multi-level dropdown for hierarchical data selection, such as selecting a location.", + "cascaderCompKeywords": "cascader, hierarchical, dropdown, levels", + + "checkboxCompName": "Checkbox", + "checkboxCompDesc": "A standard checkbox for options that can be selected or deselected.", + "checkboxCompKeywords": "checkbox, options, select, toggle", + + "radioCompName": "Radio", + "radioCompDesc": "Radio buttons for selecting one option from a set, where only one choice is allowed.", + "radioCompKeywords": "radio, buttons, select, single choice", + + "segmentedControlCompName": "Segmented Control", + "segmentedControlCompDesc": "A control with segmented options for quickly toggling between multiple choices.", + "segmentedControlCompKeywords": "segmented, control, toggle, options", + + "stepControlCompName": "Step Control", + "stepControlCompDesc": "A control with step options to offer visual guided steps for applications like forms or wizards.", + "stepControlCompKeywords": "steps, control, toggle, options", + + "fileUploadCompName": "File Upload", + "fileUploadCompDesc": "A component for uploading files, with support for drag-and-drop and file selection.", + "fileUploadCompKeywords": "file, upload, drag and drop, select", + + "dateCompName": "Date", + "dateCompDesc": "A date picker component for selecting dates from a calendar interface.", + "dateCompKeywords": "date, picker, calendar, select", + + "dateRangeCompName": "Date Range", + "dateRangeCompDesc": "A component for selecting a range of dates, useful for booking systems or filters.", + "dateRangeCompKeywords": "daterange, select, booking, filter", + + "timeCompName": "Time", + "timeCompDesc": "A time selection component for choosing specific times of the day.", + "timeCompKeywords": "time, picker, select, clock", + + "timeRangeCompName": "Time Range", + "timeRangeCompDesc": "A component for selecting a range of time, often used in scheduling applications.", + "timeRangeCompKeywords": "timerange, select, scheduling, duration", + + "buttonCompName": "Form Button", + "buttonCompDesc": "A versatile button component for submitting forms, triggering actions, or navigating.", + "buttonCompKeywords": "button, submit, action, navigate", + + "meetingControlCompName": "Icon Button", + "meetingCompDesc": "A button for controlling functions like start, end, mute, or share.", + "meetingCompKeywords": "control, button, start, end", + + "linkCompName": "Link", + "linkCompDesc": "A hyperlink display component for navigation or linking to external resources.", + "linkCompKeywords": "link, hyperlink, navigation, external", + + "scannerCompName": "Scanner", + "scannerCompDesc": "A component for scanning barcodes, QR codes, and other similar data.", + "scannerCompKeywords": "scanner, barcode, QR code, scan", + + "dropdownCompName": "Dropdown", + "dropdownCompDesc": "A dropdown menu for compactly displaying a list of options.", + "dropdownCompKeywords": "dropdown, menu, options, select", + + "toggleButtonCompName": "Toggle Button", + "toggleButtonCompDesc": "A button that can toggle between two states or options.", + "toggleButtonCompKeywords": "toggle, button, switch, state", + + "textCompName": "Text Display", + "textCompDesc": "A simple component for displaying static or dynamic text content inclusive Markdown formatting.", + "textCompKeywords": "text, display, static, dynamic", + + "tableCompName": "Table", + "tableCompDesc": "A rich table component for displaying data in a structured table format, with options for sorting and filtering, tree Data display and extensible Rows.", + "tableCompKeywords": "table, data, sorting, filtering", + + "imageCompName": "Image", + "imageCompDesc": "A component for displaying images, supporting various formats based on URI or Base64 Data.", + "imageCompKeywords": "image, display, media, Base64", + + "progressCompName": "Progress", + "progressCompDesc": "A visual indicator of progress, typically used to show the completion status of a task.", + "progressCompKeywords": "progress, indicator, status, task", + + "progressCircleCompName": "Progress Circle", + "progressCircleCompDesc": "A circular progress indicator, often used for loading states or time-bound tasks.", + "progressCircleCompKeywords": "circle, progress, indicator, loading", + + "fileViewerCompName": "File Viewer", + "fileViewerCompDesc": "A component for viewing various types of files, including documents and images.", + "fileViewerCompKeywords": "file, viewer, document, image", + + "dividerCompName": "Divider", + "dividerCompDesc": "A visual divider component, used to separate content or sections in a layout.", + "dividerCompKeywords": "divider, separator, layout, design", + + "qrCodeCompName": "QR Code", + "qrCodeCompDesc": "A component for displaying QR codes, useful for quick scanning and information transfer.", + "qrCodeCompKeywords": "QR code, scanning, barcode, information", + + "formCompName": "Form", + "formCompDesc": "A container component for building structured forms with various input types.", + "formCompKeywords": "form, input, container, structure", + + "jsonSchemaFormCompName": "JSON Schema Form", + "jsonSchemaFormCompDesc": "A dynamic form component generated based on a JSON schema.", + "jsonSchemaFormCompKeywords": "JSON, schema, form, dynamic", + + "containerCompName": "Container", + "containerCompDesc": "A general-purpose container for layout and organization of UI elements.", + "containerCompKeywords": "container, layout, organization, UI", + + "floatTextContainerCompName": "Float Text Container", + "floatTextContainerCompDesc": "Float Text Container component", + "floatTextContainerCompKeywords": "container, layout, text, flow", + + "collapsibleContainerCompName": "Collapsible Container", + "collapsibleContainerCompDesc": "A container that can be expanded or collapsed, ideal for managing content visibility.", + "collapsibleContainerCompKeywords": "collapsible, container, expand, collapse", + + "tabbedContainerCompName": "Tabbed Container", + "tabbedContainerCompDesc": "A container with tabbed navigation for organizing content into separate panels.", + "tabbedContainerCompKeywords": "tabbed, container, navigation, panels", + + "pageLayoutCompName": "Page Layout", + "pageLayoutCompDesc": "A container which offers to create a layout with header, sider, footer and main content areas", + "pageLayoutCompKeywords": "layout, container, navigation, pages", + + "modalCompName": "Modal", + "modalCompDesc": "A pop-up modal component for displaying content, alerts, or forms in focus.", + "modalCompKeywords": "modal, popup, alert, form", + + "listViewCompName": "List View", + "listViewCompDesc": "A component for displaying a list of items or data, where you can place other components inside. Like a repeater.", + "listViewCompKeywords": "list, view, display, repeater", + + "gridCompName": "Grid", + "gridCompDesc": "A flexible grid component for creating structured layouts with rows and columns as an extension to the List View component.", + "gridCompKeywords": "grid, layout, rows, columns", + + "navigationCompName": "Navigation", + "navigationCompDesc": "A navigation component for creating menus, breadcrumbs, or tabs for site navigation.", + "navigationCompKeywords": "navigation, menu, breadcrumbs, tabs", + + "iframeCompName": "IFrame", + "iframeCompDesc": "An inline frame component for embedding external web pages and apps or content within the application.", + "iframeCompKeywords": "iframe, embed, web page, content", + + "customCompName": "Custom Component", + "customCompDesc": "A flexible, programmable component for creating unique, user-defined UI elements tailored to your specific needs.", + "customCompKeywords": "custom, user-defined, flexible, programmable", + + "moduleCompName": "Module", + "moduleCompDesc": "Use Modules to create Micro-Apps designed for encapsulating specific functionalities or features. Modules can be then embedded and reused across all Apps.", + "moduleCompKeywords": "module, micro-app, functionality, reusable", + + "jsonExplorerCompName": "JSON Explorer", + "jsonExplorerCompDesc": "A component for visually exploring and interacting with JSON data structures.", + "jsonExplorerCompKeywords": "JSON, explorer, data, structure", + + "jsonEditorCompName": "JSON Editor", + "jsonEditorCompDesc": "An editor component for creating and modifying JSON data with validation and syntax highlighting.", + "jsonEditorCompKeywords": "JSON, editor, modify, validate", + + "treeCompName": "Tree", + "treeCompDesc": "A tree structure component for displaying hierarchical data, such as file systems or organizational charts.", + "treeCompKeywords": "tree, hierarchical, data, structure", + + "treeSelectCompName": "Tree Select", + "treeSelectCompDesc": "A selection component that presents options in a hierarchical tree format, allowing for organized and nested selections.", + "treeSelectCompKeywords": "tree, select, hierarchical, nested", + + "audioCompName": "Audio", + "audioCompDesc": "A component for embedding audio content, with controls for playback and volume adjustment.", + "audioCompKeywords": "audio, playback, sound, music", + + "videoCompName": "Video", + "videoCompDesc": "A multimedia component for embedding and playing video content, with support for various formats.", + "videoCompKeywords": "video, multimedia, playback, embed", + + "drawerCompName": "Drawer", + "drawerCompDesc": "A sliding panel component that can be used for additional navigation or content display, typically emerging from the edge of the screen.", + "drawerCompKeywords": "drawer, sliding, panel, navigation", + + "chartCompName": "Chart (deprecated)", + "chartCompDesc": "A versatile component for visualizing data through various types of charts and graphs.", + "chartCompKeywords": "chart, graph, data, visualization", + + "carouselCompName": "Image Carousel", + "carouselCompDesc": "A rotating carousel component for showcasing images, banners, or content slides.", + "carouselCompKeywords": "carousel, images, rotation, showcase", + + "imageEditorCompName": "Image Editor", + "imageEditorCompDesc": "An interactive component for editing and manipulating images, offering various tools and filters.", + "imageEditorCompKeywords": "image, editor, manipulate, tools", + + "mermaidCompName": "Mermaid Chart", + "mermaidCompDesc": "A component for rendering complex diagrams and flowcharts based on Mermaid syntax.", + "mermaidCompKeywords": "mermaid, charts, diagrams, flowcharts", + + "calendarCompName": "Calendar", + "calendarCompDesc": "A calendar component for displaying dates and events, with options for month, week, or day views.", + "calendarCompKeywords": "calendar, dates, events, scheduling", + + "signatureCompName": "Signature", + "signatureCompDesc": "A component for capturing digital signatures, useful for approvals and verification processes.", + "signatureCompKeywords": "signature, digital, approval, verification", + + "jsonLottieCompName": "Lottie Animation", + "jsonLottieCompDesc": "A component for displaying Lottie animations, providing lightweight and scalable animations based on JSON data.", + "jsonLottieCompKeywords": "lottie, animation, JSON, scalable", + + "timelineCompName": "Timeline", + "timelineCompDesc": "A component for displaying events or actions in a chronological order, visually represented along a linear timeline.", + "timelineCompKeywords": "timeline, events, chronological, history", + + "commentCompName": "Comment", + "commentCompDesc": "A component for adding and displaying user comments, supporting threaded replies and user interaction.", + "commentCompKeywords": "comment, discussion, user interaction, feedback", + + "mentionCompName": "Mention", + "mentionCompDesc": "A component that supports mentioning users or tags within text content, typically used in social media or collaborative platforms.", + "mentionCompKeywords": "mention, tag, user, social media", + + "responsiveLayoutCompName": "Responsive Layout", + "responsiveLayoutCompDesc": "A layout component designed to adapt and respond to different screen sizes and devices, ensuring a consistent user experience.", + "responsiveLayoutCompKeywords": "responsive, layout, adapt, screen size", + + "splitLayoutCompName": "Split Layout", + "splitLayoutCompDesc": "A layout component to organize multiple view areas and separate areas horizontally or vertically. It offers the user drag n drop adaption of the view areas width or height.", + "splitLayoutCompKeywords": "split, splitter, layout, adapt, screen size", + + "iconCompName": "Icons", + "iconCompDesc": "Use various Icons to enhance the visual appeal and user experience of your application.", + "iconCompKeywords": "Icons, pictograms, symbols, shapes", + + "tourCompName": "Tour", + "tourCompDesc": "A product tour for guiding users.", + "tourCompKeywords": "tour, product tour, walkthrough, interactive walkthrough", + + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "A visualization component for displaying project management state data in a hill chart format.", + "hillchartCompKeywords": "project management, hill chart, visualization, data", + + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "A component for displaying interactive maps using OpenLayers, with support for various map layers and features.", + "openLayersGeoMapCompKeywords": "openlayers, geo map, interactive, map layers", + + "chartsGeoMapCompName": "Geo Map Charts", + "chartsGeoMapCompDesc": "A component for visualizing geographical data on interactive maps with dynamic charts", + "chartsGeoMapCompKeywords": "geo map, charts, visualization, geographical data", + + "bpmnEditorCompName": "BPMN Editor", + "bpmnEditorCompDesc": "A component for viewing, creating and editing BPMN diagrams, supporting various BPMN elements and features.", + "bpmnEditorCompKeywords": "BPMN, editor, diagrams, elements, workflows", + + "turnstileCaptchaCompName": "Turnstile Captcha", + "turnstileCaptchaCompDesc": "A captcha component to verify users against bots.", + "turnstileCaptchaCompKeywords": "captcha, verification, identity, security", + + "pivotTableCompName": "Pivot Table", + "pivotTableCompDesc": "A data summarization and analysis tool for organizing and aggregating data in a tabular format.", + "pivotTableCompKeywords": "pivot table, data, analysis, aggregation", + + "funnelChartCompName": "Funnel Chart", + "funnelChartCompDesc": "A visualization tool for displaying the progressive reduction of data as it passes through stages.", + "funnelChartCompKeywords": "funnel chart, sales, conversions, process", + + "gaugeChartCompName": "Gauge Chart", + "gaugeChartCompDesc": "A chart that displays data as a reading on a dial, useful for indicating the status or level of something.", + "gaugeChartCompKeywords": "gauge chart, metrics, performance, status", + + "sankeyChartCompName": "Sankey Chart", + "sankeyChartCompDesc": "A flow diagram in which the width of the arrows is proportional to the flow rate, used to show energy, material, or cost transfers.", + "sankeyChartCompKeywords": "sankey chart, flow, energy, costs", + + "candleStickChartCompName": "Candlestick Chart", + "candleStickChartCompDesc": "A style of financial chart used to describe price movements of a security, derivative, or currency.", + "candleStickChartCompKeywords": "candlestick chart, stocks, trading, finance", + + "radarChartCompName": "Radar Chart", + "radarChartCompDesc": "A graphical method of displaying multivariate data in the form of a two-dimensional chart of three or more quantitative variables.", + "radarChartCompKeywords": "radar chart, multivariate, performance analysis", + + "heatmapChartCompName": "Heatmap Chart", + "heatmapChartCompDesc": "A graphical representation of data where individual values are represented as colors.", + "heatmapChartCompKeywords": "heatmap, data visualization, intensity", + + "graphChartCompName": "Graph Chart", + "graphChartCompDesc": "A diagram representing a network of nodes connected by edges, useful for showing interconnections and relationships.", + "graphChartCompKeywords": "graph chart, networks, relationships, nodes", + + "treeChartCompName": "Tree Chart", + "treeChartCompDesc": "A diagram that visually represents hierarchy in a tree-like structure, showing relationships among various nodes.", + "treeChartCompKeywords": "tree chart, hierarchy, organizational", + + "treemapChartCompName": "Treemap Chart", + "treemapChartCompDesc": "A chart that uses nested rectangles to represent hierarchical data proportionately.", + "treemapChartCompKeywords": "treemap, hierarchy, data visualization", + + "sunburstChartCompName": "Sunburst Chart", + "sunburstChartCompDesc": "A radial space-filling visualization technique that illustrates hierarchical relationships through layers of a circle.", + "sunburstChartCompKeywords": "sunburst chart, radial, hierarchy", + + "themeriverChartCompName": "Theme River Chart", + "themeriverChartCompDesc": "A visualization resembling a stream graph that shows changes in a data set over time across categories.", + "themeriverChartCompKeywords": "theme river, time series, trends", + + "basicChartCompName": "Multitype Chart", + "basicChartCompDesc": "A versatile component for visualizing data through various types of charts and graphs.", + "basicChartCompKeywords": "chart, graph, data, visualization", + + "shapeCompName": "Shapes", + "shapeCompDesc": "A collection of geometric shapes for use with diagrams, illustrations, and visualizations.", + "shapeCompKeywords": "shapes, geometric, diagrams, illustrations", + + "ganttChartCompName" : "Gantt Chart", + "ganttChartCompDesc" : "A chart that illustrates a project schedule, showing the start and finish dates of elements and dependencies.", + "ganttChartCompKeywords" : "gantt chart, project management, schedule", + + "kanbanCompName" : "Kanban Board (preview!)", + "kanbanCompDesc" : "A board for visualizing workflow, with columns representing stages of work and cards representing tasks.", + "kanbanCompKeywords" : "kanban, board, workflow, tasks", + + "pieChartCompName": "Pie Chart", + "pieChartCompDesc": "A versatile component for visualizing data with Pie Charts.", + "pieChartCompKeywords": "chart, data, visualization", + + "lineChartCompName": "Line Chart", + "lineChartCompDesc": "A versatile component for visualizing data with Line Charts.", + "lineChartCompKeywords": "chart, data, visualization", + + "barChartCompName": "Bar Chart", + "barChartCompDesc": "A versatile component for visualizing data with Bar Charts.", + "barChartCompKeywords": "chart, data, visualization", + + "scatterChartCompName": "Scatter Chart", + "scatterChartCompDesc": "A versatile component for visualizing data with Scatter Charts.", + "scatterChartCompKeywords": "chart, data, visualization", + + // by mousheng + + "colorPickerCompName": "Color Picker", + "colorPickerCompDesc": "Intuitive color selection for customization.", + "colorPickerCompKeywords": "color, picker, customization", + + "floatButtonCompName": "Float Button", + "floatButtonCompDesc": "A floating action button for prominent and quick actions.", + "floatButtonCompKeywords": "float button, action, quick", + + "avatarCompName": "Avatar", + "avatarCompDesc": "Displays user avatars or profile images for personalized identification.", + "avatarCompKeywords": "avatar, profile image, user identification", + + "avatarGroupCompName": "Avatar Group", + "avatarGroupCompDesc": "A group of avatars to represent multiple users or entities in a compact and visually appealing way.", + "avatarGroupCompKeywords": "avatar group, users, entities, compact", + + "transferName": "Transfer", + "transferDesc": "Facilitates data transfer between two lists with drag-and-drop functionality.", + "transferKeywords": "transfer, data, drag-and-drop", + + "cardCompName": "Content Card", + "cardCompDesc": "A card component for displaying organized information or content in a structured manner.", + "cardCompKeywords": "card, information, content, display", + + "timerCompName": "Timer", + "timerCompDesc": "A component that displays a countdown or elapsed time, useful for tracking durations and deadlines.", + "timerCompKeywords": "timer, countdown, elapsed time, tracking, durations, deadlines", + + }, + + // eighth part + + "comp": { - "menuViewDocs": "View Documentation", - "menuViewPlayground": "View interactive Playground", - "menuUpgradeToLatest": "Upgrade to Latest Version", - "nameNotEmpty": "Cannot Be Empty", - "nameRegex": "Must Start with a Letter and Contain Only Letters, Digits, and Underscores (_)", - "nameJSKeyword": "Cannot Be a JavaScript Keyword", - "nameGlobalVariable": "Cannot Be Global Variable Name", - "nameExists": "Name {name} Already Exists", - "getLatestVersionMetaError": "Failed to Fetch Latest Version, Please Try Later.", - "needNotUpgrade": "Current Version is Already Latest.", - "compNotFoundInLatestVersion": "Current Component Not Found in the Latest Version.", - "upgradeSuccess": "Successfully Upgraded to Latest Version.", - "searchProp": "Search" + "menuViewDocs": "View Documentation", + "menuViewPlayground": "View interactive Playground", + "menuUpgradeToLatest": "Upgrade to Latest Version", + "nameNotEmpty": "Cannot Be Empty", + "nameRegex": "Must Start with a Letter and Contain Only Letters, Digits, and Underscores (_)", + "nameJSKeyword": "Cannot Be a JavaScript Keyword", + "nameGlobalVariable": "Cannot Be Global Variable Name", + "nameExists": "Name {name} Already Exists", + "getLatestVersionMetaError": "Failed to Fetch Latest Version, Please Try Later.", + "needNotUpgrade": "Current Version is Already Latest.", + "compNotFoundInLatestVersion": "Current Component Not Found in the Latest Version.", + "upgradeSuccess": "Successfully Upgraded to Latest Version.", + "searchProp": "Search" }, "jsonSchemaForm": { - "retry": "Retry", - "resetAfterSubmit": "Reset After Successful Form Submit", - "jsonSchema": "JSON Schema", - "uiSchema": "UI Schema", - "schemaTooltip": "See", - "defaultData": "Pre-filled Form Data", - "dataDesc": "Current Form Data", - "required": "Required", - "maximum": "The Maximum Value is {value}", - "minimum": "The Minimum Value is {value}", - "exclusiveMaximum": "Should Be Less Than {value}", - "exclusiveMinimum": "Should Be Greater Than {value}", - "multipleOf": "Should Be a Multiple of {value}", - "minLength": "At Least {value} Characters", - "maxLength": "At Most {value} Characters", - "pattern": "Should Match the Pattern {value}", - "format": "Should Match the Format {value}" + "retry": "Retry", + "resetAfterSubmit": "Reset After Successful Form Submit", + "jsonSchema": "JSON Schema", + "uiSchema": "UI Schema", + "schemaTooltip": "See", + "defaultData": "Pre-filled Form Data", + "dataDesc": "Current Form Data", + "required": "Required", + "maximum": "The Maximum Value is {value}", + "minimum": "The Minimum Value is {value}", + "exclusiveMaximum": "Should Be Less Than {value}", + "exclusiveMinimum": "Should Be Greater Than {value}", + "multipleOf": "Should Be a Multiple of {value}", + "minLength": "At Least {value} Characters", + "maxLength": "At Most {value} Characters", + "pattern": "Should Match the Pattern {value}", + "format": "Should Match the Format {value}" }, "select": { - "inputValueDesc": "Input Search Value" + "inputValueDesc": "Input Search Value" }, "customComp": { - "text": "It's a Good Day.", - "triggerQuery": "Trigger Query", - "updateData": "Update Data", - "updateText": "I'm Also in a Good Mood to Develop now my own Custom Component with Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Data you want to pass to the Custom Component", - "code": "Code of your Custom Component", + "text": "It's a Good Day.", + "triggerQuery": "Trigger Query", + "updateData": "Update Data", + "updateText": "I'm Also in a Good Mood to Develop now my own Custom Component with Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Data you want to pass to the Custom Component", + "code": "Code of your Custom Component", }, "tree": { - "placeholder": "Please Select", - "selectType": "Select Type", - "noSelect": "No Select", - "singleSelect": "Single Select", - "multiSelect": "Multi Select", - "checkbox": "Checkbox", - "checkedStrategy": "Checked Strategy", - "showAll": "All Nodes", - "showParent": "Only Parent Nodes", - "showChild": "Only Child Nodes", - "autoExpandParent": "Auto Expand Parent", - "checkStrictly": "Check Strictly", - "checkStrictlyTooltip": "Check TreeNode Precisely; Parent TreeNode and Children TreeNodes are Not Associated", - "treeData": "Tree Data", - "treeDataDesc": "Current Tree Data", - "value": "Default Values", - "valueDesc": "Current Values", - "expanded": "Expanded Values", - "expandedDesc": "Current Expanded Values", - "defaultExpandAll": "Default Expand All Nodes", - "showLine": "Show Line", - "showLeafIcon": "Show Leaf Icon", - "treeDataAsia": "Asia", - "treeDataChina": "China", - "treeDataBeijing": "Beijing", - "treeDataShanghai": "Shanghai", - "treeDataJapan": "Japan", - "treeDataEurope": "Europe", - "treeDataEngland": "England", - "treeDataFrance": "France", - "treeDataGermany": "Germany", - "treeDataNorthAmerica": "North America", - "helpLabel": "Node Label", - "helpValue": "Unique Node Value in Tree", - "helpChildren": "Children Nodes", - "helpDisabled": "Disables the Node", - "helpSelectable": "Whether Node is Selectable (Single/Multi Select Type)", - "helpCheckable": "Whether to Display Checkbox (Checkbox Type)", - "helpDisableCheckbox": "Disables the Checkbox (Checkbox Type)" + "placeholder": "Please Select", + "selectType": "Select Type", + "noSelect": "No Select", + "singleSelect": "Single Select", + "multiSelect": "Multi Select", + "checkbox": "Checkbox", + "checkedStrategy": "Checked Strategy", + "showAll": "All Nodes", + "showParent": "Only Parent Nodes", + "showChild": "Only Child Nodes", + "autoExpandParent": "Auto Expand Parent", + "checkStrictly": "Check Strictly", + "checkStrictlyTooltip": "Check TreeNode Precisely; Parent TreeNode and Children TreeNodes are Not Associated", + "treeData": "Tree Data", + "treeDataDesc": "Current Tree Data", + "value": "Default Values", + "valueDesc": "Current Values", + "expanded": "Expanded Values", + "expandedDesc": "Current Expanded Values", + "defaultExpandAll": "Default Expand All Nodes", + "showLine": "Show Line", + "showLeafIcon": "Show Leaf Icon", + "treeDataAsia": "Asia", + "treeDataChina": "China", + "treeDataBeijing": "Beijing", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Japan", + "treeDataEurope": "Europe", + "treeDataEngland": "England", + "treeDataFrance": "France", + "treeDataGermany": "Germany", + "treeDataNorthAmerica": "North America", + "helpLabel": "Node Label", + "helpValue": "Unique Node Value in Tree", + "helpChildren": "Children Nodes", + "helpDisabled": "Disables the Node", + "helpSelectable": "Whether Node is Selectable (Single/Multi Select Type)", + "helpCheckable": "Whether to Display Checkbox (Checkbox Type)", + "helpDisableCheckbox": "Disables the Checkbox (Checkbox Type)" }, "moduleContainer": { - "eventTest": "Event Test", - "methodTest": "Method Test", - "inputTest": "Input Test" + "eventTest": "Event Test", + "methodTest": "Method Test", + "inputTest": "Input Test" }, "password": { - "label": "Password", - "placeholder": "Please Enter Password", - "conformLabel": "Confirm Password", - "conformPlaceholder": "Please Confirm Password", - "visibilityToggle": "Show Visibility Toggle" + "label": "Password", + "placeholder": "Please Enter Password", + "conformLabel": "Confirm Password", + "conformPlaceholder": "Please Confirm Password", + "visibilityToggle": "Show Visibility Toggle" }, "richTextEditor": { - "toolbar": "Customize Toolbar", - "toolbarDescription": "You can customize the toolbar. Please refer to: https://quilljs.com/docs/modules/toolbar/ for more details.", - "placeholder": "Please Input...", - "hideToolbar": "Hide Toolbar", - "content": "Content", - "title": "Title", - "save": "Save", - "link": "Link: ", - "edit": "Edit", - "remove": "Remove", - "defaultValue": "Base Content" - }, + "toolbar": "Customize Toolbar", + "toolbarDescription": "You can customize the toolbar. Please refer to: https://quilljs.com/docs/modules/toolbar/ for more details.", + "placeholder": "Please Input...", + "hideToolbar": "Hide Toolbar", + "content": "Content", + "title": "Title", + "save": "Save", + "link": "Link: ", + "edit": "Edit", + "remove": "Remove", + "defaultValue" : "Base Content" + }, + // mousheng + "floatButton": { - "custom": "Custom", - "backTop": "Back Top", - "buttonType": "Button Type", - "buttonShape": "Button Shape", - "square": "Square", - "circle": "Circle", - "description": "Description", - "badge": "Badge", - "primary": "Primary", - "default": "Default", - "buttonTheme": "Button Theme", - "badgeColor": "Badge Color", - "dot": "Badge As Dot", - "hidden": "Hidden", - "visibilityHeight": "Visibility Height", - "visibilityHeightDesc": "Scroll to a certain height before displaying the return to top button, 0 is always displayed,Editing mode cannot preview in real-time" - }, + "custom": "Custom", + "backTop": "Back Top", + "buttonType": "Button Type", + "buttonShape": "Button Shape", + "square": "Square", + "circle": "Circle", + "description": "Description", + "badge": "Badge", + "primary": "Primary", + "default": "Default", + "buttonTheme": "Button Theme", + "badgeColor": "Badge Color", + "dot": "Badge As Dot", + "hidden": "Hidden", + "visibilityHeight": "Visibility Height", + "visibilityHeightDesc": "Scroll to a certain height before displaying the return to top button, 0 is always displayed,Editing mode cannot preview in real-time" + }, + "colorPicker": { - "trigger": "Triggers Event", - "click": "Click", - "hover": "Hover", - "disabledAlpha": "Disable Alpha Selection", - "recommended": "Recommended", - "showPresets": "Show Color Presets" - }, + "trigger": "Triggers Event", + "click": "Click", + "hover": "Hover", + "disabledAlpha": "Disable Alpha Selection", + "recommended": "Recommended", + "showPresets": "Show Color Presets" + }, + "badge": { - "showCloseButton": "Show close button", - "Type": "Badge type", - "Count": "Badge count", - "Size": "Badge size", - "SizeDefault": "default", - "SizeSmall": "Small", - "overflowCount": "Overflow count", - "Title": "Badge title", - "dot": "Dot", - "number": "Number", - "tooltip": "Tooltip" - }, + "showCloseButton": "Show close button", + "Type": "Badge type", + "Count": "Badge count", + "Size": "Badge size", + "SizeDefault": "default", + "SizeSmall": "Small", + "overflowCount": "Overflow count", + "Title": "Badge title", + "dot": "Dot", + "number": "Number", + "tooltip": "Tooltip" + }, + "gantt": { - "key": "Key", - "title": "Title", - "project": "Project", - "from": "From", - "minute": "minute", - "hour": "Hour", - "day": "Day", - "week": "Week", - "month": "Month", - "year": "Year", - "quarter": "Quarter", - "tasks": "Tasks Data", - "level": "level", - "durationUnit": "Duration unit", - "duration": "Duration", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Week #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "tree", - "ColumnsData": "Columns Data", - "allowChangeTask": "DbClick Task", - "allowAddLink": "Add Link", - "allowLinkDelete": "Link Delete", - "allowProgressDrag": "Progress Drag", - "allowTaskDrag": "Task Drag", - "links": "Links Data", - "dataFormat": "Data parse Format", - "handleDateChange": "Handle Task Change", - "handleTaskChange": "Handle Task Change", - "handleAddedLink": "Handle Added Link", - "handleDeletedLink": "Handle Deleted Link", - "handleProgressDrag": "Handle Progress Drag", - "showTodayMark": "Show Today Mark", - "resize": "Resize", - "otherEvents": "Other Events", - "openAllBranchInit": "Open All Branch Init", - "date": "Date", - "text": "Text", - "progress": "progress", - "width": "Width", - "ColumnsType": "Cloumns Type", - "currentId": "Current ID", - "currentObject": "Current Object", - "addTask": "Add Task(s)", - "taskObject": "Task Object", - "taskObjectDesc": "Supports arrays of Tasks or single Task Object", - "linkID": "link ID", - "linkIDDesc": "Supports arrays of Links ID or single Link Object", - "removeTask": "Remove Task", - "taskID": "Task ID", - "taskIDDesc": "Supports arrays of IDs or single ID", - "add": "Add", - "expandingAll": "Expanding All", - "collapsingAll": "Collapsing All", - "addTaskFail": "The addition task failed, and the parameter type should be an object or an array object", - "addLinkFail": "The addition link failed, and the parameter type should be an object or an array object", - "removeTaskFail": "The deletion task failed, and the parameter type should be string or string array", - "removeLinkFail": "The deletion links failed, and the parameter type should be string array", - "otherData": "Other Data{i}", - "projectText": "Project #{i}", - "taskText": "Task #{i}", - "AutoCalculateProgress": "Auto Calculation Progress", - "allowProjectDrag": "Allow Project Drag", - "showColumns": "Show Columns", - "exportToPNG": "Export to PNG", - "exportToPDF": "Export to PDF", - "exportToExcel": "Export to Excel", - "progressLowBg": "Low BgColor", - "progressLowColor": "Low Progress Color", - "progressMediumBg": "Medium BgColor", - "progressMediumColor": "Medium Progress Color", - "progressHighBg": "Heigh BgColor", - "progressHighColor": "Heigh Progress Color", - "progresscompletedColor": "Completed Progress Color", - "lowProgressLine": "Low Progress Line", - "mediumProgressLine": "Medium Progress Line", - "SegmentedColor": "Progress Segmented Color", - "link_f2s": "Link F2S", - "link_s2s": "Link S2S", - "link_f2f": "Link F2F", - "link_s2f": "Link S2F", - "weekScale": "#{i}, ", - "showHolidays": "Show Holidays", - "StatutoryHolidays": "Statutory Holidays Data", - "skipOffTime": "Hides Non-Working Time", - "weekend": "Weekend", - "weekendSelected": "Weekend Selected", - "noWorkHour": "No Work Hour", - "noWorkHourSelected": "no Work Hour Selected", - "showWorkTimes": "Show Work Times", - "workTimeData": "Work Time Data", - "fit": "fit", - "manual": "manual", - "scaleMode": "Scale Mode", - "startDate": "Start Date", - "endDate": "End Date", - "addLink": "Add Link(s)", - "linkObject": "link Object", - "removeLink": "remove Link", - "allowSort": "Allow Sort", - "showTask": "Show Task", - "toggleOnDBClick": "Toggle On DBClick", - "sortOptions": "Initial Sorting Options", - "rowHeight": "Row Height", - "showTooltip": "Show Tooltip", - "tooltipTemplates": "Tooltip Template", - "allowResizeTask": "Allow Resize Task", - "projectColor": "Project Color", - "projectColorBg": "Project BgColor", - "taskColor": "Task Color", - "taskColorBg": "Task BgColor", - "milestoneColor": "Milestone Color", - "highlightOverdue": "Highlight Overdue", - "overdueColor": "Overdue Color", - "overdueBgColor": "Overdue BgColor", - "projectCompletedBgColor": "Project Completed BgColor", - "projectCompletedColor": "Project Completed Color", - "tag": "tag", - "tasksTableWidth": "Tasks Table Width", - "allowErrorMessage": "Allow Error Message", - "currentProjectId": "Current Project Id", - "currentProjectLastTask": "Current Project Last Task", - "onlySortProject": "Only Sort Project" - }, + "key": "Key", + "title": "Title", + "project": "Project", + "from": "From", + "minute": "minute", + "hour": "Hour", + "day": "Day", + "week": "Week", + "month": "Month", + "year": "Year", + "quarter": "Quarter", + "tasks": "Tasks Data", + "level": "level", + "durationUnit": "Duration unit", + "duration": "Duration", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Week #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "tree", + "ColumnsData": "Columns Data", + "allowChangeTask": "DbClick Task", + "allowAddLink": "Add Link", + "allowLinkDelete": "Link Delete", + "allowProgressDrag": "Progress Drag", + "allowTaskDrag": "Task Drag", + "links": "Links Data", + "dataFormat": "Data parse Format", + "handleDateChange": "Handle Task Change", + "handleTaskChange": "Handle Task Change", + "handleAddedLink": "Handle Added Link", + "handleDeletedLink": "Handle Deleted Link", + "handleProgressDrag": "Handle Progress Drag", + "showTodayMark": "Show Today Mark", + "resize": "Resize", + "otherEvents": "Other Events", + "openAllBranchInit": "Open All Branch Init", + "date": "Date", + "text": "Text", + "progress": "progress", + "width": "Width", + "ColumnsType": "Cloumns Type", + "currentId": "Current ID", + "currentObject": "Current Object", + "addTask": "Add Task(s)", + "taskObject": "Task Object", + "taskObjectDesc": "Supports arrays of Tasks or single Task Object", + "linkID": "link ID", + "linkIDDesc": "Supports arrays of Links ID or single Link Object", + "removeTask": "Remove Task", + "taskID": "Task ID", + "taskIDDesc": "Supports arrays of IDs or single ID", + "add": "Add", + "expandingAll": "Expanding All", + "collapsingAll": "Collapsing All", + "addTaskFail": "The addition task failed, and the parameter type should be an object or an array object", + "addLinkFail": "The addition link failed, and the parameter type should be an object or an array object", + "removeTaskFail": "The deletion task failed, and the parameter type should be string or string array", + "removeLinkFail": "The deletion links failed, and the parameter type should be string array", + "otherData": "Other Data{i}", + "projectText": "Project #{i}", + "taskText": "Task #{i}", + "AutoCalculateProgress": "Auto Calculation Progress", + "allowProjectDrag": "Allow Project Drag", + "showColumns": "Show Columns", + "exportToPNG": "Export to PNG", + "exportToPDF": "Export to PDF", + "exportToExcel": "Export to Excel", + "progressLowBg": "Low BgColor", + "progressLowColor": "Low Progress Color", + "progressMediumBg": "Medium BgColor", + "progressMediumColor": "Medium Progress Color", + "progressHighBg": "Heigh BgColor", + "progressHighColor": "Heigh Progress Color", + "progresscompletedColor": "Completed Progress Color", + "lowProgressLine": "Low Progress Line", + "mediumProgressLine": "Medium Progress Line", + "SegmentedColor": "Progress Segmented Color", + "link_f2s": "Link F2S", + "link_s2s": "Link S2S", + "link_f2f": "Link F2F", + "link_s2f": "Link S2F", + "weekScale": "#{i}, ", + "showHolidays": "Show Holidays", + "StatutoryHolidays": "Statutory Holidays Data", + "skipOffTime": "Hides Non-Working Time", + "weekend": "Weekend", + "weekendSelected": "Weekend Selected", + "noWorkHour": "No Work Hour", + "noWorkHourSelected": "no Work Hour Selected", + "showWorkTimes": "Show Work Times", + "workTimeData": "Work Time Data", + "fit": "fit", + "manual": "manual", + "scaleMode": "Scale Mode", + "startDate": "Start Date", + "endDate": "End Date", + "addLink": "Add Link(s)", + "linkObject": "link Object", + "removeLink": "remove Link", + "allowSort": "Allow Sort", + "showTask": "Show Task", + "toggleOnDBClick": "Toggle On DBClick", + "sortOptions": "Initial Sorting Options", + "rowHeight": "Row Height", + "showTooltip": "Show Tooltip", + "tooltipTemplates": "Tooltip Template", + "allowResizeTask": "Allow Resize Task", + "projectColor": "Project Color", + "projectColorBg": "Project BgColor", + "taskColor": "Task Color", + "taskColorBg": "Task BgColor", + "milestoneColor": "Milestone Color", + "highlightOverdue": "Highlight Overdue", + "overdueColor": "Overdue Color", + "overdueBgColor": "Overdue BgColor", + "projectCompletedBgColor": "Project Completed BgColor", + "projectCompletedColor": "Project Completed Color", + "tag": "tag", + "tasksTableWidth": "Tasks Table Width", + "allowErrorMessage": "Allow Error Message", + "currentProjectId": "Current Project Id", + "currentProjectLastTask": "Current Project Last Task", + "onlySortProject": "Only Sort Project" + }, + "transfer": { - "sourceTitle": "Source Data", - "targetTitle": "Target Data", - "content": "Content {i}", - "items": "Items", - "targetKeys": "Selected Keys", - "oneWay": "One Way", - "pagination": "Pagination", - "pageSize": "Page Size", - "allowSearch": "Allow Search", - "selectedKeys": "Selected Keys", - "searchInfo": "Search Info", - "targerObject": "Targer Object" - }, + "sourceTitle": "Source Data", + "targetTitle": "Target Data", + "content": "Content {i}", + "items": "Items", + "targetKeys": "Selected Keys", + "oneWay": "One Way", + "pagination": "Pagination", + "pageSize": "Page Size", + "allowSearch": "Allow Search", + "selectedKeys": "Selected Keys", + "searchInfo": "Search Info", + "targerObject": "Targer Object" + }, + "avatarGroup": { - "maxCount": "Max Count", - "avatarSize": "Avatar Size", - "autoColor": "Auto Color", - "alignment": "Alignment", - "currentAvatar": "Current Avatar" + "maxCount": "Max Count", + "avatarSize": "Avatar Size", + "autoColor": "Auto Color", + "alignment": "Alignment", + "currentAvatar": "Current Avatar" }, + "avatarComp": { - "square": "square", - "circle": "circle", - "icon": "icon", - "shape": "shape", - "counts": "Badge", - "title": "title", - "src": "src", - "avatarCompTooltip": "The display priority is: image -> characters -> icon. Depending on what is first available.", - "iconSize": "Icon Size", - "avatarBackground": "Background", - "label": "Label", - "caption": "Caption", - "labelPosition": "Position", - "alignmentPosition": "alignment", - "text": "Text", - "enableDropDown": "Enable DropDown", - "containerBackground": "Background" - }, + "square": "square", + "circle": "circle", + "icon": "icon", + "shape": "shape", + "counts": "Badge", + "title": "title", + "src": "src", + "avatarCompTooltip": "The display priority is: image -> characters -> icon. Depending on what is first available.", + "iconSize": "Icon Size", + "avatarBackground": "Background", + "label": "Label", + "caption": "Caption", + "labelPosition": "Position", + "alignmentPosition": "alignment", + "text": "Text", + "enableDropDown": "Enable DropDown", + "containerBackground": "Background" + }, + "card": { - "cardType": "Card Type", - "common": "common", - "custom": "custom", - "default": "default", - "small": "small", - "showTitle": "Show title", - "title": "Title", - "more": "More", - "extraTitle": "Call to Action", - "CoverImg": "Cover Image", - "imgSrc": "Image Source", - "showMeta": "Show Content", - "metaTitle": "Content Title", - "metaDesc": "Content Description", - "imgHeight": "Image Height", - "showActionIcon": "Show Action Options", - "actionOptions": "Action Options", - "menu": "Menu {i}", - "hoverColor": "hover Color", - "IconColor": "Icon Color", - "titleSize": "Title Size" - }, + "cardType": "Card Type", + "common": "common", + "custom": "custom", + "default": "default", + "small": "small", + "showTitle": "Show title", + "title": "Title", + "more": "More", + "extraTitle": "Call to Action", + "CoverImg": "Cover Image", + "imgSrc": "Image Source", + "showMeta": "Show Content", + "metaTitle": "Content Title", + "metaDesc": "Content Description", + "imgHeight": "Image Height", + "showActionIcon": "Show Action Options", + "actionOptions": "Action Options", + "menu": "Menu {i}", + "hoverColor": "hover Color", + "IconColor": "Icon Color", + "titleSize": "Title Size" + }, + "timer": { - "timerState": "timer State", - "elapsedTime": "Elapsed Time", - "timer": "Timer", - "countdown": "Countdown", - "defaultValue": "Default Value", - "timerType": "Timer Type", - "start": "Start", - "pause": "Pause", - "resume": "Resume", - "reset": "Reset", - "startPause": "Start/Pause", - "hideButton": "Hide Button", - "fontColor": "Font Color" - }, + "timerState": "timer State", + "elapsedTime": "Elapsed Time", + "timer": "Timer", + "countdown": "Countdown", + "defaultValue": "Default Value", + "timerType": "Timer Type", + "start": "Start", + "pause": "Pause", + "resume": "Resume", + "reset": "Reset", + "startPause": "Start/Pause", + "hideButton": "Hide Button", + "fontColor": "Font Color" + }, + + // ninth part + "iconComp": { - "icon": "Icon", - "autoSize": "Icon AutoSize", - "iconSize": "Icon Size", + "icon": "Icon", + "autoSize": "Icon AutoSize", + "iconSize": "Icon Size", }, "numberInput": { - "formatter": "Format", - "precision": "Precision", - "allowNull": "Allow Null Value", - "thousandsSeparator": "Show Thousands Separator", - "controls": "Show Increment/Decrement Buttons", - "step": "Step", - "standard": "Standard", - "percent": "Percent" + "formatter": "Format", + "precision": "Precision", + "allowNull": "Allow Null Value", + "thousandsSeparator": "Show Thousands Separator", + "controls": "Show Increment/Decrement Buttons", + "step": "Step", + "standard": "Standard", + "percent": "Percent" }, "slider": { - "step": "Step", - "stepTooltip": "The Value Must Be Greater Than 0 and Divisible by (Max-Min)", - "vertical": "Vertical Orientation", + "step": "Step", + "stepTooltip": "The Value Must Be Greater Than 0 and Divisible by (Max-Min)", + "vertical": "Vertical Orientation", }, "rating": { - "max": "Max Rating", - "allowHalf": "Allow Half Rating Points" + "max": "Max Rating", + "allowHalf": "Allow Half Rating Points" }, "optionsControl": { - "optionList": "Options", - "option": "Option", - "optionI": "Option {i}", - "viewDocs": "View Docs", - "tip": "The 'item' and 'i' Variables Represent the Value and Index of Each Item in the Data Array" + "optionList": "Options", + "option": "Option", + "optionI": "Option {i}", + "viewDocs": "View Docs", + "tip": "The 'item' and 'i' Variables Represent the Value and Index of Each Item in the Data Array" }, "stepOptionsControl": { - "value": "Value / Key", - "valueTooltip": "Step Value must be a number. For the first Step, it must be equal to the initial value. Numbers must be in consistent and ascending order", - "title": "Step Title", - "subTitle": "Step Subtitle", - "description": "Step Description", - "status": "Step Status", - "icon": "Step Icon", - }, - "step": { - "initialValue": "Start Numbers at", - "initialValueTooltip": "Where to start the visual Numbering. Must be 1 or higher.", - "valueDesc": "Current Value", - "size": "Steps Size", - "sizeSmall": "Small", - "sizeDefault": "Default", - "percent": "Steps Percent", - "type": "Steps Type", - "typeDefault": "Standard", - "typeNavigation": "Navigation", - "typeInline": "Inline", - "direction": "Steps Direction", - "directionVertical": "Vertical", - "directionHorizontal": "Horizontal", - "labelPlacement": "Steps Label Placement", - "status": "Steps Status", - "statusWait": "Wait", - "statusProcess": "Process", - "statusFinish": "Finish", - "statusError": "Error", - "showDots": "Show Dots instead Symbols", - "showIcons": "Show Icons instead Symbols", - "responsive": "Responsive", - "selectable": "Selectable", - }, - "coloredTagOptionControl": { - "tag": "Tag Text", - "color": "Color", - "icon": "Icon", + "value": "Value / Key", + "valueTooltip": "Step Value must be a number. For the first Step, it must be equal to the initial value. Numbers must be in consistent and ascending order", + "title": "Step Title", + "subTitle": "Step Subtitle", + "description": "Step Description", + "status": "Step Status", + "icon": "Step Icon", + }, + "step" : { + "initialValue": "Start Numbers at", + "initialValueTooltip": "Where to start the visual Numbering. Must be 1 or higher.", + "valueDesc": "Current Value", + "size" : "Steps Size", + "sizeSmall" : "Small", + "sizeDefault" : "Default", + "percent" : "Steps Percent", + "type" : "Steps Type", + "typeDefault" : "Standard", + "typeNavigation" : "Navigation", + "typeInline" : "Inline", + "direction" : "Steps Direction", + "directionVertical" : "Vertical", + "directionHorizontal" : "Horizontal", + "labelPlacement" : "Steps Label Placement", + "status" : "Steps Status", + "statusWait" : "Wait", + "statusProcess" : "Process", + "statusFinish" : "Finish", + "statusError" : "Error", + "showDots" : "Show Dots instead Symbols", + "showIcons" : "Show Icons instead Symbols", + "responsive" : "Responsive", + "selectable" : "Selectable", + }, + "coloredTagOptionControl" : { + "tag" : "Tag Text", + "color" : "Color", + "icon" : "Icon", }, "radio": { - "options": "Options", - "horizontal": "Horizontal", - "horizontalTooltip": "The Horizontal Layout Wraps Itself When It Runs Out of Space", - "vertical": "Vertical", - "verticalTooltip": "The Vertical Layout Will Always Be Displayed in a Single Column", - "autoColumns": "Auto Column", - "autoColumnsTooltip": "The Auto Column Layout Automatically Rearranges the Order as Space Permits and Displays as Multiple Columns" + "options": "Options", + "horizontal": "Horizontal", + "horizontalTooltip": "The Horizontal Layout Wraps Itself When It Runs Out of Space", + "vertical": "Vertical", + "verticalTooltip": "The Vertical Layout Will Always Be Displayed in a Single Column", + "autoColumns": "Auto Column", + "autoColumnsTooltip": "The Auto Column Layout Automatically Rearranges the Order as Space Permits and Displays as Multiple Columns" }, "cascader": { - "options": "JSON Data to show cascading selections", + "options": "JSON Data to show cascading selections", }, "selectInput": { - "valueDesc": "Currently Selected Value", - "selectedIndexDesc": "The Index of the Currently Selected Value, or -1 if No Value Is Selected", - "selectedLabelDesc": "The Label of the Currently Selected Value" + "valueDesc": "Currently Selected Value", + "selectedIndexDesc": "The Index of the Currently Selected Value, or -1 if No Value Is Selected", + "selectedLabelDesc": "The Label of the Currently Selected Value" }, "file": { - "typeErrorMsg": "Must Be a Number with a Valid File Size Unit, or a Unitless Number of Bytes.", - "fileEmptyErrorMsg": "Upload Failed. The File Size Is Empty.", - "fileSizeExceedErrorMsg": "Upload Failed. The File Size Exceeds the Limit.", - "minSize": "Min Size", - "minSizeTooltip": "The Minimum Size of Uploaded Files with Optional File Size Units (e.g., '5kb', '10 MB'). If No Unit Is Provided, the Value Will Be Considered a Number of Bytes.", - "maxSize": "Max Size", - "maxSizeTooltip": "The Maximum Size of Uploaded Files with Optional File Size Units (e.g., '5kb', '10 MB'). If No Unit Is Provided, the Value Will Be Considered a Number of Bytes.", - "single": "Single", - "multiple": "Multiple", - "directory": "Directory", - "upload": "Browse", - "fileType": "File Types", - "reference": "Please Refer to", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Unique File Type Specifiers", - "uploadType": "Upload Type", - "showUploadList": "Show Upload List", - "maxFiles": "Max Files", - "filesValueDesc": "The Contents of the Currently Uploaded File Are Base64 Encoded", - "filesDesc": "List of the Current Uploaded Files. For Details, Refer to", - "clearValueDesc": "Clear All Files", - "parseFiles": "Parse Files", - "parsedValueTooltip1": "If parseFiles Is True, Upload Files Will Parse to Object, Array, or String. Parsed Data Can Be Accessed via the parsedValue Array.", - "parsedValueTooltip2": "Supports Excel, JSON, CSV, and Text Files. Other Formats Will Return Null." + "typeErrorMsg": "Must Be a Number with a Valid File Size Unit, or a Unitless Number of Bytes.", + "fileEmptyErrorMsg": "Upload Failed. The File Size Is Empty.", + "fileSizeExceedErrorMsg": "Upload Failed. The File Size Exceeds the Limit.", + "minSize": "Min Size", + "minSizeTooltip": "The Minimum Size of Uploaded Files with Optional File Size Units (e.g., '5kb', '10 MB'). If No Unit Is Provided, the Value Will Be Considered a Number of Bytes.", + "maxSize": "Max Size", + "maxSizeTooltip": "The Maximum Size of Uploaded Files with Optional File Size Units (e.g., '5kb', '10 MB'). If No Unit Is Provided, the Value Will Be Considered a Number of Bytes.", + "single": "Single", + "multiple": "Multiple", + "directory": "Directory", + "upload": "Browse", + "fileType": "File Types", + "reference": "Please Refer to", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Unique File Type Specifiers", + "uploadType": "Upload Type", + "showUploadList": "Show Upload List", + "maxFiles": "Max Files", + "filesValueDesc": "The Contents of the Currently Uploaded File Are Base64 Encoded", + "filesDesc": "List of the Current Uploaded Files. For Details, Refer to", + "clearValueDesc": "Clear All Files", + "parseFiles": "Parse Files", + "parsedValueTooltip1": "If parseFiles Is True, Upload Files Will Parse to Object, Array, or String. Parsed Data Can Be Accessed via the parsedValue Array.", + "parsedValueTooltip2": "Supports Excel, JSON, CSV, and Text Files. Other Formats Will Return Null.", + "forceCapture": "Force Capture", + "forceCaptureTooltip": "Instead of upload, capture image from camera", + "usePhoto": "Use Photo", + "retakePhoto": "Retake Photo", + "capture": "Capture", }, "date": { - "format": "Format", - "formatTip": "Support: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", - "reference": "Please Refer to", - "showTime": "Show Time", - "start": "Start Date", - "end": "End Date", - "year": "Year", - "quarter": "Quarter", - "month": "Month", - "week": "Week", - "date": "Date", - "clearAllDesc": "Clear All", - "resetAllDesc": "Reset All", - "placeholder": "Select Date", - "placeholderText": "Placeholder", - "startDate": "Start Date", - "endDate": "End Date" + "format": "Format", + "inputFormat": "Input Format", + "formatTip": "Support: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", + "reference": "Please Refer to", + "showTime": "Show Time", + "start": "Start Date", + "end": "End Date", + "year": "Year", + "quarter": "Quarter", + "month": "Month", + "week": "Week", + "date": "Date", + "clearAllDesc": "Clear All", + "resetAllDesc": "Reset All", + "placeholder": "Select Date", + "placeholderText": "Placeholder", + "startDate": "Start Date", + "endDate": "End Date" }, "time": { - "start": "Start Time", - "end": "End Time", - "formatTip": "Support: 'HH:mm:ss', 'Timestamp'", - "format": "Format", - "placeholder": "Select Time", - "placeholderText": "Placeholder", - "startTime": "Start Time", - "endTime": "End Time" + "start": "Start Time", + "end": "End Time", + "formatTip": "Support: 'HH:mm:ss', 'Timestamp'", + "format": "Format", + "placeholder": "Select Time", + "placeholderText": "Placeholder", + "startTime": "Start Time", + "endTime": "End Time" }, "button": { - "prefixIcon": "Prefix Icon", - "prefixText": "Prefix Text", - "suffixIcon": "Suffix Icon", - "icon": "Icon", - "iconSize": "Icon Size", - "button": "Form Button", - "formToSubmit": "Form to Submit", - "default": "Default", - "submit": "Submit", - "textDesc": "Text Currently Displayed on Button", - "loadingDesc": "Is the Button in Loading State? If True the Current Button Is Loading", - "formButtonEvent": "Event" + "prefixIcon": "Prefix Icon", + "prefixText": "Prefix Text", + "suffixIcon": "Suffix Icon", + "icon": "Icon", + "iconSize": "Icon Size", + "button": "Form Button", + "formToSubmit": "Form to Submit", + "default": "Default", + "submit": "Submit", + "textDesc": "Text Currently Displayed on Button", + "loadingDesc": "Is the Button in Loading State? If True the Current Button Is Loading", + "formButtonEvent": "Event" }, "link": { - "link": "Link", - "textDesc": "Text Currently Displayed on Link", - "loadingDesc": "Is the Link in Loading State? If True the Current Link Is Loading" + "link": "Link", + "textDesc": "Text Currently Displayed on Link", + "loadingDesc": "Is the Link in Loading State? If True the Current Link Is Loading" }, "scanner": { - "text": "Click Scan", - "camera": "Camera {index}", - "changeCamera": "Switch Camera", - "continuous": "Continuous Scanning", - "uniqueData": "Ignore Duplicate Data", - "maskClosable": "Click the Mask to Close", - "errTip": "Please Use This Component Under HTTPS or Localhost" + "text": "Click Scan", + "camera": "Camera {index}", + "changeCamera": "Switch Camera", + "continuous": "Continuous Scanning", + "uniqueData": "Ignore Duplicate Data", + "maskClosable": "Click the Mask to Close", + "errTip": "Please Use This Component Under HTTPS or Localhost" }, "dropdown": { - "onlyMenu": "Display with Label Only", - "textDesc": "Text Currently Displayed on Button" + "onlyMenu": "Display with Label Only", + "textDesc": "Text Currently Displayed on Button", + "triggerMode": "Trigger Mode" }, "textShow": { - "text": "### 👋 Hello, {name}", - "valueTooltip": "Markdown Supports Most HTML Tags and Attributes. iframe, Script, and Other Tags Are Disabled for Security Reasons.", - "verticalAlignment": "Vertical Alignment", - "horizontalAlignment": "Horizontal Alignment", - "textDesc": "Text Displayed in the Current Text Box" - }, + "text": "### 👋 Hello, {name}", + "valueTooltip": "Markdown Supports Most HTML Tags and Attributes. iframe, Script, and Other Tags Are Disabled for Security Reasons.", + "verticalAlignment": "Vertical Alignment", + "horizontalAlignment": "Horizontal Alignment", + "textDesc": "Text Displayed in the Current Text Box" + }, + + // tenth part + + "table": { - "editable": "Editable", - "columnNum": "Columns", - "viewModeResizable": "Column Width Adjusted by User", - "viewModeResizableTooltip": "Whether Users Can Adjust Column Width.", - "visibleResizables": "Show Resize Handles", - "visibleResizablesTooltip": "Display visible Resize Handles in the Table Header.", - "showFilter": "Show Filter Button", - "showRefresh": "Show Refresh Button", - "showDownload": "Show Download Button", - "columnSeparator": "Column Separator", - "columnSeparatorTooltip": "Column Separator (\"delimiter\") in downloaded CSV file. \n\nRecommendations:\n- Comma (,)\n- Semicolon (;)\n- Pipe (|)\n- Tab (\\t)", - "columnSetting": "Show Columns Visibility Button", - "searchText": "Search Text", - "searchTextTooltip": "Search and Filter the Data, which is currently Presented in the Table. This is a frontend-only Search and Does Not Affect the Data Source Query.)", - "showQuickJumper": "Show Quick Jumper", - "hideOnSinglePage": "Hide on Single Page", - "showSizeChanger": "Show Size Changer Button", - "pageSizeOptions": "Page Size Options", - "pageSize": "Page Size", - "total": "Total Row Count", - "totalTooltip": "The Default Value is the Number of Current Data Items, Which Can Be Obtained from the Query, for Example: '{{query1.data[0].count}}'", - "filter": "Filter", - "filterRule": "Filter Rule", - "chooseColumnName": "Choose Column", - "chooseCondition": "Choose Condition", - "clear": "Clear", - "columnShows": "Column Shows", - "selectAll": "Select All", - "and": "And", - "or": "Or", - "contains": "Contains", - "notContain": "Does Not Contain", - "equals": "Equals", - "isNotEqual": "Is Not Equal", - "isEmpty": "Is Empty", - "isNotEmpty": "Is Not Empty", - "greater": "Greater Than", - "greaterThanOrEquals": "Greater Than or Equals", - "lessThan": "Less Than", - "lessThanOrEquals": "Less Than or Equals", - "action": "Action", - "columnValue": "Column Value", - "columnValueTooltip": "'{{currentCell}}': Current Cell Data\n '{{currentRow}}': Current Row Data\n '{{currentIndex}}': Current Data Index (Starting from 0)\n Example: '{{currentCell * 5}}' Show 5 Times the Original Value Data.", - "columnTooltip": "Column Tooltip", - "imageSrc": "Image Source", - "imageSize": "Image Size", - "columnTitle": "Title", - "columnTitleTooltip": "Title Tooltip", - "showTitle": "Show Title", - "showTitleTooltip": "Show/Hide column title in table header", - "sortable": "Sortable", - "align": "Alignment", - "fixedColumn": "Fixed Column", - "autoWidth": "Auto Width", - "customColumn": "Custom Column", - "auto": "Auto", - "fixed": "Fixed", - "columnType": "Column Type", - "dataMapping": "Data Mapping", - "numberStep": "Step", - "numberStepTooltip": "The number to which the current value is increased or decreased. It can be an integer or decimal", - "precision": "Precision", - "float": "Float", - "prefix": "Prefix", - "suffix": "Suffix", - "avatars": "Avatars", - "avatarGroupAlignment": "Avatars Alignment", - "text": "Text", - "number": "Number", - "link": "Link", - "links": "Links", - "tag": "Tag", - "select": "Select", - "dropdown": "Dropdown", - "date": "Date", - "dateTime": "Date Time", - "badgeStatus": "Status", - "button": "Button", - "image": "Image", - "boolean": "Boolean", - "switch": "Switch", - "rating": "Rating", - "progress": "Progress", - "option": "Operation", - "optionList": "Operation List", - "option1": "Operation 1", - "status": "Status", - "statusTooltip": "Optional Values: Success, Error, Default, Warning, Processing", - "primaryButton": "Primary", - "defaultButton": "Default", - "type": "Type", - "tableSize": "Table Size", - "hideHeader": "Hide Table Header", - "fixedHeader": "Fixed Table Header", - "fixedHeaderTooltip": "Header Will Be Fixed for Vertically Scrollable Table", - "fixedToolbar": "Fixed Toolbar", - "fixedToolbarTooltip": "Toolbar Will Be Fixed for Vertically Scrollable Table Based on Position", - "hideBordered": "Show Resize Handles", - "showHeaderGridBorder": "Show Header Grid Border", - "showRowGridBorder": "Show Row Grid Border", - "showVerticalRowGridBorder": "Show vertical Row Grid Border", - "showHorizontalRowGridBorder": "Show horizontal Row Grid Border", - "deleteColumn": "Delete Column", - "confirmDeleteColumn": "Confirm Delete Column: ", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "The Current Data Changes, Click to Regenerate the Column.", - "changeSetDesc": "An Object Representing Changes to an Editable Table, Only Contains the Changed Cell. Rows Go First and Columns Go Second.", - "selectedRowDesc": "Provides Data for the Currently Selected Row, Indicating the Row That Triggers a Click Event If the User Clicks a Button/Link on the Row", - "selectedRowsDesc": "Useful in Multiple Selection Mode, Same as SelectedRow", - "pageNoDesc": "Current Display Page, Starting from 1", - "pageSizeDesc": "How Many Rows per Page", - "sortColumnDesc": "The Name of the Currently Selected Sorted Column", - "sortDesc": "Whether the Current Row Is in Descending Order", - "pageOffsetDesc": "The Current Start of Paging, Used for Paging to Get Data. Example: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", - "displayDataDesc": "Data Displayed in the Current Table", - "selectedIndexDesc": "Selected Index in Display Data", - "filterDesc": "Table Filtering Parameters", - "dataDesc": "The JSON Data for the Table", - "saveChanges": "Save Changes", - "cancelChanges": "Cancel Changes", - "rowSelectChange": "Row Select Change", - "rowClick": "Row Click", - "rowExpand": "Row Expand", - "rowShrink": "Row Shrink", - "search": "Search", - "download": "Download", - "columnEdited": "Column Edited", - "filterChange": "Filter Change", - "sortChange": "Sort Change", - "pageChange": "Page Change", - "refresh": "Refresh", - "rowColor": "Conditional row color", - "rowColorDesc": "Conditionally Set the Row Color Based on the Optional Variables: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. For Example: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - "rowHeight": "Conditional row height", - "rowHeightDesc": "Conditionally Set the Row Height Based on the Optional Variables: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. For Example: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Conditional cell color", - "cellColorDesc": "Conditionally Set the Cell Color Based on the Cell Value Using CurrentCell. For Example: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "No Event Handler Configured for Saving Changes. Please Bind at Least One Event Handler Before Click.", - "dynamicColumn": "Use Dynamic Column Visibility", - "dynamicColumnConfig": "Visible Columns", - "dynamicColumnConfigDesc": "Dynamic Column Visibility. Accepts an Array of Column Names. All Columns Are Visible by Default. Example: [\"id\", \"name\"]", - "position": "Position", - "showDataLoadSpinner": "Show Loading Indicator", - "showValue": "Show Value", - "expandable": "Expandable", - "configExpandedView": "Configure Expanded View", - "toUpdateRowsDesc": "An Array of Objects for Rows to Be Updated in Editable Tables.", - "selectedCellDesc": "Selected Cell", - "empty": "Empty", - "falseValues": "Text When False", - "iconTrue": "Icon When True", - "iconFalse": "Icon When False", - "iconNull": "Icon When Null", - "allColumn": "All", - "visibleColumn": "Visible", - "emptyColumns": "No Columns Are Currently Visible", - "showSummary": "Show Summary Row(s)", - "totalSummaryRows": "Total Rows", - "inlineAddNewRow": "Inline Add New Row(s)", - "editMode": "Edit Mode", - "singleClick": "Single Click", - "doubleClick": "Double Click", - "showUpdateButtons": "Show Save/Cancel Buttons", - }, + "editable": "Editable", + "columnNum": "Columns", + "viewModeResizable": "Column Width Adjusted by User", + "viewModeResizableTooltip": "Whether Users Can Adjust Column Width.", + "visibleResizables": "Show Resize Handles", + "visibleResizablesTooltip": "Display visible Resize Handles in the Table Header.", + "showFilter": "Show Filter Button", + "showRefresh": "Show Refresh Button", + "showDownload": "Show Download Button", + "columnSeparator": "Column Separator", + "columnSeparatorTooltip": "Column Separator (\"delimiter\") in downloaded CSV file. \n\nRecommendations:\n- Comma (,)\n- Semicolon (;)\n- Pipe (|)\n- Tab (\\t)", + "columnSetting": "Show Columns Visibility Button", + "searchText": "Search Text", + "searchTextTooltip": "Search and Filter the Data, which is currently Presented in the Table. This is a frontend-only Search and Does Not Affect the Data Source Query.)", + "showQuickJumper": "Show Quick Jumper", + "hideOnSinglePage": "Hide on Single Page", + "showSizeChanger": "Show Size Changer Button", + "pageSizeOptions": "Page Size Options", + "pageSize": "Page Size", + "total": "Total Row Count", + "totalTooltip": "The Default Value is the Number of Current Data Items, Which Can Be Obtained from the Query, for Example: '{{query1.data[0].count}}'", + "filter": "Filter", + "filterRule": "Filter Rule", + "chooseColumnName": "Choose Column", + "chooseCondition": "Choose Condition", + "clear": "Clear", + "columnShows": "Column Shows", + "selectAll": "Select All", + "and": "And", + "or": "Or", + "contains": "Contains", + "notContain": "Does Not Contain", + "equals": "Equals", + "isNotEqual": "Is Not Equal", + "isEmpty": "Is Empty", + "isNotEmpty": "Is Not Empty", + "greater": "Greater Than", + "greaterThanOrEquals": "Greater Than or Equals", + "lessThan": "Less Than", + "lessThanOrEquals": "Less Than or Equals", + "action": "Action", + "columnValue": "Column Value", + "columnValueTooltip": "'{{currentCell}}': Current Cell Data\n '{{currentRow}}': Current Row Data\n '{{currentIndex}}': Current Data Index (Starting from 0)\n Example: '{{currentCell * 5}}' Show 5 Times the Original Value Data.", + "columnTooltip": "Column Tooltip", + "imageSrc": "Image Source", + "imageSize": "Image Size", + "columnTitle": "Title", + "columnTitleTooltip": "Title Tooltip", + "showTitle": "Show Title", + "showTitleTooltip": "Show/Hide column title in table header", + "sortable": "Sortable", + "align": "Alignment", + "fixedColumn": "Fixed Column", + "autoWidth": "Auto Width", + "customColumn": "Custom Column", + "auto": "Auto", + "fixed": "Fixed", + "columnType": "Column Type", + "dataMapping": "Data Mapping", + "numberStep": "Step", + "numberStepTooltip": "The number to which the current value is increased or decreased. It can be an integer or decimal", + "precision": "Precision", + "float": "Float", + "prefix": "Prefix", + "suffix": "Suffix", + "avatars": "Avatars", + "avatarGroupAlignment": "Avatars Alignment", + "text": "Text", + "number": "Number", + "link": "Link", + "links": "Links", + "tag": "Tag", + "select": "Select", + "dropdown": "Dropdown", + "time" : "Time", + "date": "Date", + "dateTime": "Date Time", + "badgeStatus": "Status", + "button": "Button", + "image": "Image", + "boolean": "Boolean", + "switch": "Switch", + "rating": "Rating", + "progress": "Progress", + "option": "Operation", + "optionList": "Operation List", + "option1": "Operation 1", + "status": "Status", + "statusTooltip": "Optional Values: Success, Error, Default, Warning, Processing", + "primaryButton": "Primary", + "defaultButton": "Default", + "type": "Type", + "tableSize": "Table Size", + "hideHeader": "Hide Table Header", + "hideToolbar": "Hide Table Toolbar (Footer)", + "fixedHeader": "Fixed Table Header", + "fixedHeaderTooltip": "Header Will Be Fixed for Vertically Scrollable Table", + "fixedToolbar": "Fixed Toolbar", + "fixedToolbarTooltip": "Toolbar Will Be Fixed for Vertically Scrollable Table Based on Position", + "hideBordered": "Show Resize Handles", + "showHeaderGridBorder": "Show Header Grid Border", + "showRowGridBorder": "Show Row Grid Border", + "showVerticalRowGridBorder": "Show vertical Row Grid Border", + "showHorizontalRowGridBorder": "Show horizontal Row Grid Border", + "deleteColumn": "Delete Column", + "confirmDeleteColumn": "Confirm Delete Column: ", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "The Current Data Changes, Click to Regenerate the Column.", + "changeSetDesc": "An Object Representing Changes to an Editable Table, Only Contains the Changed Cell. Rows Go First and Columns Go Second.", + "selectedRowDesc": "Provides Data for the Currently Selected Row, Indicating the Row That Triggers a Click Event If the User Clicks a Button/Link on the Row", + "selectedRowsDesc": "Useful in Multiple Selection Mode, Same as SelectedRow", + "pageNoDesc": "Current Display Page, Starting from 1", + "pageSizeDesc": "How Many Rows per Page", + "sortColumnDesc": "The Name of the Currently Selected Sorted Column", + "sortDesc": "Whether the Current Row Is in Descending Order", + "pageOffsetDesc": "The Current Start of Paging, Used for Paging to Get Data. Example: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", + "displayDataDesc": "Data Displayed in the Current Table", + "selectedIndexDesc": "Selected Index in Display Data", + "filterDesc": "Table Filtering Parameters", + "dataDesc": "The JSON Data for the Table", + "saveChanges": "Save Changes", + "cancelChanges": "Cancel Changes", + "rowSelectChange": "Row Select Change", + "rowClick": "Row Click", + "rowExpand": "Row Expand", + "rowShrink": "Row Shrink", + "search": "Search", + "download": "Download", + "columnEdited": "Column Edited", + "filterChange": "Filter Change", + "sortChange": "Sort Change", + "pageChange": "Page Change", + "refresh": "Refresh", + "rowColor": "Conditional row color", + "rowColorDesc": "Conditionally Set the Row Color Based on the Optional Variables: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. For Example: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "Conditional row height", + "rowHeightDesc": "Conditionally Set the Row Height Based on the Optional Variables: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. For Example: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Conditional cell color", + "cellColorDesc": "Conditionally Set the Cell Color Based on the Cell Value Using CurrentCell. For Example: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "No Event Handler Configured for Saving Changes. Please Bind at Least One Event Handler Before Click.", + "dynamicColumn": "Use Dynamic Column Visibility", + "dynamicColumnConfig": "Visible Columns", + "dynamicColumnConfigDesc": "Dynamic Column Visibility. Accepts an Array of Column Names. All Columns Are Visible by Default. Example: [\"id\", \"name\"]", + "position": "Position", + "showDataLoadSpinner": "Show Loading Indicator", + "showValue": "Show Value", + "expandable": "Expandable", + "configExpandedView": "Configure Expanded View", + "toUpdateRowsDesc": "An Array of Objects for Rows to Be Updated in Editable Tables.", + "selectedCellDesc": "Selected Cell", + "empty": "Empty", + "falseValues": "Text When False", + "iconTrue": "Icon When True", + "iconFalse": "Icon When False", + "iconNull": "Icon When Null", + "allColumn": "All", + "visibleColumn": "Visible", + "emptyColumns": "No Columns Are Currently Visible", + "showSummary": "Show Summary Row(s)", + "totalSummaryRows": "Total Rows", + "inlineAddNewRow": "Inline Add New Row(s)", + "editMode": "Edit Mode", + "singleClick": "Single Click", + "doubleClick": "Double Click", + "showUpdateButtons": "Show Save/Cancel Buttons", + }, + + // eleventh part + + "image": { - "src": "Image Source", - "srcDesc": "The Image Source. Can be an URL, Path or Base64 String. for Example: data:image/png;base64, AAA... CCC", - "supportPreview": "Support Click Preview (zoom)", - "supportPreviewTip": "Effective When the Image Source is Valid" + "src": "Image Source", + "srcDesc": "The Image Source. Can be an URL, Path or Base64 String. for Example: data:image/png;base64, AAA... CCC", + "supportPreview": "Support Zoom Preview (on Click)", + "supportPreviewTip": "Effective When the Image Source is Valid", + "previewSrc": "HighRes Image Source", + "clipPath" : "Image Clipping Path", + "clipPathTip" : "Use clip-path to define a custom shape for your element based on CSS definition, referencing an SVG mask (via source URL) or using predefined shapes like circle(), ellipse(), polygon(), or inset() for clipping.", + "enableOverflow": "Enable Overflow", + "enableOverflowTip": "Allows the image to overflow its container, enabling cropping beyond the container's bounds. Useful for maintaining focus on specific parts of the image.", + "overflow": "Overflow Behavior (CSS)", + "overflowTip": "Defines how the content should behave when overflowing the container. Options like 'hidden', 'scroll', or 'visible' determine visibility of cropped content.", + "positionX": "Horizontal Position", + "positionXTip": "Specifies the horizontal alignment of the image within its container. Examples: 'left', 'center', 'right', or percentage values.", + "positionY": "Vertical Position", + "positionYTip": "Specifies the vertical alignment of the image within its container. Examples: 'top', 'center', 'bottom', or percentage values.", + "aspectRatio": "Aspect Ratio (CSS)", + "aspectRatioTip": "Maintains a consistent width-to-height ratio for the image, such as '16/9' for widescreen or '1/1' for square. Leave blank for natural image dimensions.", + "placement": "Image Placement", + "placementTip": "Determines where and how the image is displayed within the layout or container. Options include specific alignment or placement logic." }, "progress": { - "value": "Value", - "valueTooltip": "The Percentage Complete as a Value Between 0 and 100", - "showInfo": "Show Value", - "valueDesc": "Current Progress Value, Ranging from 0 to 100", - "showInfoDesc": "Whether to Display the Current Progress Value" + "value": "Value", + "valueTooltip": "The Percentage Complete as a Value Between 0 and 100", + "showInfo": "Show Value", + "valueDesc": "Current Progress Value, Ranging from 0 to 100", + "showInfoDesc": "Whether to Display the Current Progress Value" }, "fileViewer": { - "invalidURL": "Please Enter a Valid URL or Base64 String", - "src": "File URI", - "srcTooltip": "Preview Provided Link Content by Embedding HTML, Base64 Encoded Data Can Also Be Supported, for Example: data:application/pdf; base64,AAA... CCC", - "srcDesc": "The File URI" + "invalidURL": "Please Enter a Valid URL or Base64 String", + "src": "File URI", + "srcTooltip": "Preview Provided Link Content by Embedding HTML, Base64 Encoded Data Can Also Be Supported, for Example: data:application/pdf; base64,AAA... CCC", + "srcDesc": "The File URI" }, "divider": { - "title": "Title", - "align": "Alignment", - "dashed": "Dashed", - "type": "Vertical type", - "dashedDesc": "Whether to Use Dashed Line", - "titleDesc": "Divider Title", - "alignDesc": "Divider Title Alignment" + "title": "Title", + "align": "Alignment", + "dashed": "Dashed", + "type": "Vertical type", + "dashedDesc": "Whether to Use Dashed Line", + "titleDesc": "Divider Title", + "alignDesc": "Divider Title Alignment" }, "QRCode": { - "value": "QR Code Content Value", - "valueTooltip": "The Value Contains a Maximum of 2953 Characters. The QR Code Value can encode various data types, including text messages, URLs, contact details (VCard/meCard), Wi-Fi login credentials, email addresses, phone numbers, SMS messages, geolocation coordinates, calendar event details, payment information, cryptocurrency addresses, and app download links", - "valueDesc": "The QR Code Content Value", - "level": "Fault Tolerance Level", - "levelTooltip": "Refers to the QR Code's Ability to Be Scanned Even if Part of It is Blocked. The Higher the Level, the More Complex the Code.", - "includeMargin": "Show Margin", - "image": "Display Image at the Center", - "L": "L (Low)", - "M": "M (Medium)", - "Q": "Q (Quartile)", - "H": "H (High)", - "maxLength": "The Content is Too Long. Set the Length to Less Than 2953 Characters" + "value": "QR Code Content Value", + "valueTooltip": "The Value Contains a Maximum of 2953 Characters. The QR Code Value can encode various data types, including text messages, URLs, contact details (VCard/meCard), Wi-Fi login credentials, email addresses, phone numbers, SMS messages, geolocation coordinates, calendar event details, payment information, cryptocurrency addresses, and app download links", + "valueDesc": "The QR Code Content Value", + "level": "Fault Tolerance Level", + "levelTooltip": "Refers to the QR Code's Ability to Be Scanned Even if Part of It is Blocked. The Higher the Level, the More Complex the Code.", + "includeMargin": "Show Margin", + "image": "Display Image at the Center", + "L": "L (Low)", + "M": "M (Medium)", + "Q": "Q (Quartile)", + "H": "H (High)", + "maxLength": "The Content is Too Long. Set the Length to Less Than 2953 Characters" }, "jsonExplorer": { - "indent": "Indent of Each Level", - "expandToggle": "Expand JSON Tree", - "theme": "Color Theme", - "valueDesc": "Current JSON Data", - "default": "Default", - "defaultDark": "Default Dark", - "neutralLight": "Neutral Light", - "neutralDark": "Neutral Dark", - "azure": "Azure", - "darkBlue": "Dark Blue" + "indent": "Indent of Each Level", + "expandToggle": "Expand JSON Tree", + "theme": "Color Theme", + "valueDesc": "Current JSON Data", + "default": "Default", + "defaultDark": "Default Dark", + "neutralLight": "Neutral Light", + "neutralDark": "Neutral Dark", + "azure": "Azure", + "darkBlue": "Dark Blue" }, "audio": { - "src": "Audio Source URI or Base64 String", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Autoplay", - "loop": "Loop", - "srcDesc": "Current Audio URI or Base64 String like data:audio/mpeg;base64,AAA... CCC", - "play": "Play", - "playDesc": "Triggered When Audio is Played", - "pause": "Pause", - "pauseDesc": "Triggered When Audio is Paused", - "ended": "Ended", - "endedDesc": "Triggered When the Audio Ends Playing" + "src": "Audio Source URI or Base64 String", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Autoplay", + "loop": "Loop", + "srcDesc": "Current Audio URI or Base64 String like data:audio/mpeg;base64,AAA... CCC", + "play": "Play", + "playDesc": "Triggered When Audio is Played", + "pause": "Pause", + "pauseDesc": "Triggered When Audio is Paused", + "ended": "Ended", + "endedDesc": "Triggered When the Audio Ends Playing" }, "video": { - "src": "Video Source URI or Base64 String", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "Poster URL", - "defaultPosterUrl": "", - "autoPlay": "Autoplay", - "loop": "Loop", - "controls": "Hide Controls", - "volume": "Volume", - "playbackRate": "Playback Rate", - "posterTooltip": "The Default Value is the First Frame of the Video", - "autoPlayTooltip": "After the Video is Loaded, It Will Play Automatically. Changing This Value from True to False Will Pause the Video. (If a Poster is Set, It Will Be Played by the Poster Button)", - "controlsTooltip": "Hide Video Playback Controls. May Not Be Fully Supported by Every Video Source.", - "volumeTooltip": "Set the Volume of the Player, Between 0 and 1", - "playbackRateTooltip": "Set the Rate of the Player, Between 1 and 2", - "srcDesc": "Current Audio URI or Base64 String like data:video/mp4;base64, AAA... CCC", - "play": "Play", - "playDesc": "Triggered When Video is Played", - "pause": "Pause", - "pauseDesc": "Triggered When Video is Paused", - "load": "Load", - "loadDesc": "Triggered When the Video Resource has Finished Loading", - "ended": "Ended", - "endedDesc": "Triggered When the Video Ends Playing", - "currentTimeStamp": "The Current Playback Position of the Video in Seconds", - "duration": "The Total Duration of the Video in Seconds" + "src": "Video Source URI or Base64 String", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "Poster URL", + "defaultPosterUrl": "", + "autoPlay": "Autoplay", + "loop": "Loop", + "controls": "Hide Controls", + "volume": "Volume", + "playbackRate": "Playback Rate", + "posterTooltip": "The Default Value is the First Frame of the Video", + "autoPlayTooltip": "After the Video is Loaded, It Will Play Automatically. Changing This Value from True to False Will Pause the Video. (If a Poster is Set, It Will Be Played by the Poster Button)", + "controlsTooltip": "Hide Video Playback Controls. May Not Be Fully Supported by Every Video Source.", + "volumeTooltip": "Set the Volume of the Player, Between 0 and 1", + "playbackRateTooltip": "Set the Rate of the Player, Between 1 and 2", + "srcDesc": "Current Audio URI or Base64 String like data:video/mp4;base64, AAA... CCC", + "play": "Play", + "playDesc": "Triggered When Video is Played", + "pause": "Pause", + "pauseDesc": "Triggered When Video is Paused", + "load": "Load", + "loadDesc": "Triggered When the Video Resource has Finished Loading", + "ended": "Ended", + "endedDesc": "Triggered When the Video Ends Playing", + "currentTimeStamp": "The Current Playback Position of the Video in Seconds", + "duration": "The Total Duration of the Video in Seconds" }, "media": { - "playDesc": "Begins Playback of the Media.", - "pauseDesc": "Pauses the Media Playback.", - "loadDesc": "Resets the Media to the Beginning and Restart Selecting the Media Resource.", - "seekTo": "Seek to the Given Number of Seconds, or Fraction if Amount is Between 0 and 1", - "seekToAmount": "Number of Seconds, or Fraction if It is Between 0 and 1", - "showPreview": "Show Preview" + "playDesc": "Begins Playback of the Media.", + "pauseDesc": "Pauses the Media Playback.", + "loadDesc": "Resets the Media to the Beginning and Restart Selecting the Media Resource.", + "seekTo": "Seek to the Given Number of Seconds, or Fraction if Amount is Between 0 and 1", + "seekToAmount": "Number of Seconds, or Fraction if It is Between 0 and 1", + "showPreview": "Show Preview" }, "rangeSlider": { - "start": "Start Value", - "end": "End Value", - "step": "Step Size", - "stepTooltip": "The Slider's Granularity, the Value Must Be Greater Than 0 and Divisible by (Max-Min)" + "start": "Start Value", + "end": "End Value", + "step": "Step Size", + "stepTooltip": "The Slider's Granularity, the Value Must Be Greater Than 0 and Divisible by (Max-Min)" }, "iconControl": { - "selectIcon": "Select an Icon", - "insertIcon": "Insert an Icon", - "insertImage": "Insert an Image or " - }, + "selectIcon": "Select an Icon", + "searchIcon" : "Search an Icon", + "searchAnimation" : "Search an Animation", + "searchIllustration" : "Search an Illustration", + "insertIcon": "Insert an Icon", + "insertImage": "Insert an Image or " + }, + "shapeControl": { - "selectShape": "Select an Shape", - "insertShape": "Insert an Shape", - "insertImage": "Insert an Image or ", + "selectShape": "Select an Shape", + "insertShape": "Insert an Shape", + "insertImage": "Insert an Image or ", }, + // twelfth part + + "millisecondsControl": { - "timeoutTypeError": "Please Enter the Correct Timeout Period in ms, the Current Input is: {value}", - "timeoutLessThanMinError": "Input Must Be Greater Than {left}, the Current Input is: {value}" + "timeoutTypeError": "Please Enter the Correct Timeout Period in ms, the Current Input is: {value}", + "timeoutLessThanMinError": "Input Must Be Greater Than {left}, the Current Input is: {value}" }, "selectionControl": { - "single": "Single", - "multiple": "Multiple", - "close": "Close", - "mode": "Row Select Mode" + "single": "Single", + "multiple": "Multiple", + "close": "Close", + "mode": "Row Select Mode" }, "container": { - "title": "Displayed Container Title", - "titleTooltip": "The Title of the Container", - "flowWidth": "Content Width", - "floatType": "Text Float Type", + "title": "Displayed Container Title", + "titleTooltip": "The Title of the Container", + "flowWidth": "Content Width", + "floatType": "Text Float Type", }, "drawer": { - "closePosition": "Close Button Placement", - "placement": "Drawer Placement", - "size": "Size", - "top": "Top", - "right": "Right", - "center": "Center", - "bottom": "Bottom", - "left": "Left", - "title": "Drawer Title", - "titleAlign": "Title Alignment", - "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", - "heightTooltip": "Pixel, e.g. 378", - "openDrawerDesc": "Open Drawer", - "closeDrawerDesc": "Close Drawer", - "width": "Drawer Width", - "height": "Drawer Height" + "closePosition": "Close Button Placement", + "placement": "Drawer Placement", + "size": "Size", + "top": "Top", + "right": "Right", + "center": "Center", + "bottom": "Bottom", + "left": "Left", + "title": "Drawer Title", + "titleAlign": "Title Alignment", + "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", + "heightTooltip": "Pixel, e.g. 378", + "openDrawerDesc": "Open Drawer", + "closeDrawerDesc": "Close Drawer", + "width": "Drawer Width", + "height": "Drawer Height" }, "meeting": { - "logLevel": "Agora SDK Log Level", - "placement": "Meeting Drawer Placement", - "meeting": "Meeting Settings", - "cameraView": "Camera View", - "cameraViewDesc": "Camera View of the Local User (Host)", - "screenShared": "Screen Shared", - "screenSharedDesc": "Screen Shared by the Local User (Host)", - "audioUnmuted": "Audio Unmuted", - "audioMuted": "Audio Muted", - "videoClicked": "Video Clicked", - "videoOff": "Video Off", - "videoOn": "Video On", - "size": "Size", - "top": "Top", - "host": "Host of the Meeting Room. You would need to manage the host as own Application Logic", - "participants": "Participants of the Meeting Room", - "shareScreen": "Display Screen Shared by the Local User", - "appid": "Agora Application ID", - "meetingName": "Meeting Name", - "localUserID": "Host User ID", - "userName": "Host User Name", - "rtmToken": "Agora RTM Token", - "rtcToken": "Agora RTC Token", - "noVideo": "No Video", - "profileImageUrl": "Profile Image URL", - "right": "Right", - "bottom": "Bottom", - "videoId": "Video Stream ID", - "audioStatus": "Audio Status", - "left": "Left", - "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", - "heightTooltip": "Pixel, e.g. 378", - "openDrawerDesc": "Open Drawer", - "closeDrawerDesc": "Close Drawer", - "width": "Drawer Width", - "height": "Drawer Height", - "actionBtnDesc": "Action Button", - "broadCast": "Broadcast Messages", - "title": "Meeting Title", - "meetingCompName": "Agora Meeting Controller", - "sharingCompName": "Screen Share Stream", - "videoCompName": "Camera Stream", - "videoSharingCompName": "Screen Share Stream", - "meetingControlCompName": "Icon Button", - "meetingCompDesc": "Meeting Component", - "meetingCompControls": "Meeting Control", - "meetingCompKeywords": "Agora Meeting, Web Meeting, Collaboration", - "iconSize": "Icon Size", - "userId": "Host User ID", - "roomId": "Room ID", - "meetingActive": "Ongoing Meeting", - "messages": "Broadcasted Messages" + "logLevel": "Agora SDK Log Level", + "placement": "Meeting Drawer Placement", + "meeting": "Meeting Settings", + "cameraView": "Camera View", + "cameraViewDesc": "Camera View of the Local User (Host)", + "screenShared": "Screen Shared", + "screenSharedDesc": "Screen Shared by the Local User (Host)", + "audioUnmuted": "Audio Unmuted", + "audioMuted": "Audio Muted", + "videoClicked": "Video Clicked", + "videoOff": "Video Off", + "videoOn": "Video On", + "size": "Size", + "top": "Top", + "host": "Host of the Meeting Room. You would need to manage the host as own Application Logic", + "participants": "Participants of the Meeting Room", + "shareScreen": "Display Screen Shared by the Local User", + "appid": "Agora Application ID", + "meetingName": "Meeting Name", + "localUserID": "Host User ID", + "userName": "Host User Name", + "rtmToken": "Agora RTM Token", + "rtcToken": "Agora RTC Token", + "noVideo": "No Video", + "profileImageUrl": "Profile Image URL", + "right": "Right", + "bottom": "Bottom", + "videoId": "Video Stream ID", + "audioStatus": "Audio Status", + "left": "Left", + "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", + "heightTooltip": "Pixel, e.g. 378", + "openDrawerDesc": "Open Drawer", + "closeDrawerDesc": "Close Drawer", + "width": "Drawer Width", + "height": "Drawer Height", + "actionBtnDesc": "Action Button", + "broadCast": "Broadcast Messages", + "title": "Meeting Title", + "meetingCompName": "Agora Meeting Controller", + "sharingCompName": "Screen Share Stream", + "videoCompName": "Camera Stream", + "videoSharingCompName": "Screen Share Stream", + "meetingControlCompName": "Icon Button", + "meetingCompDesc": "Meeting Component", + "meetingCompControls": "Meeting Control", + "meetingCompKeywords": "Agora Meeting, Web Meeting, Collaboration", + "iconSize": "Icon Size", + "userId": "Host User ID", + "roomId": "Room ID", + "meetingActive": "Ongoing Meeting", + "messages": "Broadcasted Messages" }, "settings": { - "title": "Settings", - "userGroups": "User Groups", - "organization": "Workspaces", - "subscription": "Subscriptions", - "audit": "Audit Logs", - "theme": "Themes", - "plugin": "Plugins", - "advanced": "Advanced", - "apiDocs": "API Docs", - "lab": "Lab", - "branding": "Branding", - "oauthProviders": "User Authentication", - "appUsage": "App Usage Logs", - "environments": "Environments", - "premium": "Premium", - "AppUsage": "Global App Usage", - }, + "title": "Settings", + "userGroups": "User Groups", + "organization": "Workspaces", + "subscription": "Subscriptions", + "audit": "Audit Logs", + "theme": "Themes", + "plugin": "Plugins", + "advanced": "Advanced", + "apiDocs": "API Docs", + "lab": "Lab", + "branding": "Branding", + "oauthProviders": "User Authentication", + "appUsage": "App Usage Logs", + "environments": "Environments", + "premium": "Premium", + }, + + "enterprise" : { + "AuditLogTitle": "Audit Log Dasboard", + "AuditLogOverview": "Log Filter", + "USER_LOGIN" : "User Login ", + "USER_LOGOUT" : "User Logout ", + "APPLICATION_VIEW" : "View Application ", + "APPLICATION_CREATE" : "Create Application ", + "APPLICATION_DELETE" : "Delete Application ", + "APPLICATION_UPDATE" : "Update Application ", + "APPLICATION_MOVE" : "Move Application ", + "APPLICATION_RECYCLED" : "Recycle Application ", + "APPLICATION_RESTORE" : "Restore Application ", + "APPLICATION_PUBLISH" : "Application Publishing ", + "APPLICATION_VERSION_CHANGE" : "Application Version Update ", + "APPLICATION_SHARING_CHANGE" : "Application Sharing Change ", + "APPLICATION_PERMISSION_CHANGE" : "Application Permission Change ", + "FOLDER_CREATE" : "Create Folder ", + "FOLDER_DELETE" : "Delete Folder ", + "FOLDER_UPDATE" : "Update Folder ", + "QUERY_EXECUTION" : "Execute Query ", + "GROUP_CREATE" : "Create Group ", + "GROUP_UPDATE" : "Update Group ", + "GROUP_DELETE" : "Delete Group ", + "GROUP_MEMBER_ADD" : "Add Group Member ", + "GROUP_MEMBER_ROLE_UPDATE" : "Update Group Member Role ", + "GROUP_MEMBER_LEAVE" : "Leave Group ", + "GROUP_MEMBER_REMOVE" : "Remove Group Member ", + "SERVER_START_UP" : "Server Startup ", + "SERVER_INFO" : "View Server Info ", + "DATA_SOURCE_CREATE" : "Create Datasource ", + "DATA_SOURCE_UPDATE" : "Update Datasource ", + "DATA_SOURCE_DELETE" : "Delete Datasource ", + "DATA_SOURCE_PERMISSION_GRANT" : "Grant Datasource Permission ", + "DATA_SOURCE_PERMISSION_UPDATE" : "Update Datasource Permission ", + "DATA_SOURCE_PERMISSION_DELETE" : "Delete Datasource Permission ", + "LIBRARY_QUERY_CREATE" : "Create Library Query ", + "LIBRARY_QUERY_UPDATE" : "Update Library Query ", + "LIBRARY_QUERY_DELETE" : "Delete Library Query ", + "LIBRARY_QUERY_PUBLISH" : "Publish Library Query ", + "API_CALL_EVENT" : "API Call Event ", + "logFilter" : "Log Filter", + "noLogsFound" : "No logs found. Adjust the filters and try again.", + "usageLogUserEngagement" : "User Engagement By Region", + "usageLogAppViews" : "App Usage over time", + "usageLogTopTen" : "Top 10 Apps", + "usageLogAnonymousKNown" : "Anonymous/Known Users", + "usageLogDevices" : "Device/OS Breakdown", + "usageLogBrowsers" : "Browser/Layout Engine Breakdown", + "premiumFeaturesNotice" : "All Premium Features are avilable in the Enterprise Edition of Lowcoder.", + "requestLicense" : "Request Enterprise Edition Licenses", + "requestLicensesBtton" : "Request Enterprise Access", + "AuditLogsTitle": "Audit Logs", + "AuditLogsIntroTitle": "Powerful visibility into your workspace activity", + "AuditLogsIntro1": "Audit Logs enable administrators to track exactly what happens across the entire Lowcoder platform. From user sign-ins to app modifications, every relevant action is captured and stored.", + "AuditLogsIntro2": "We include detailed metadata such as geolocation, device type, browser, and operating system for each event.", + "AuditLogsIntro3": "This transparency allows you to monitor activity across all connected environments, providing a robust audit trail to support compliance, security, and operational insight.", + "AuditLogsEventsTitle": "What events are tracked?", + "AuditLogsEventsIntro": "The following user actions are logged in real time:", + "SignIn": "Sign in", + "Logout": "Logout", + "ViewApp": "View app", + "CreateApp": "Create new app", + "DeleteApp": "Delete app", + "UpdateApp": "Update app", + "MoveToFolder": "Move to folder", + "MoveToTrash": "Move to Trash", + "RestoreApp": "Restore app", + "CreateFolder": "Create new folder", + "DeleteFolder": "Delete folder", + "UpdateFolder": "Update folder", + "ExecuteDataQuery": "Execute data query", + "CreateUserGroup": "Create new user-group", + "UpdateUserGroup": "Update user-group", + "DeleteUserGroup": "Delete user-group", + "AddGroupMember": "Add user-group member", + "UpdateGroupMemberRole": "Update user-group member's role", + "LeaveUserGroup": "Leave user-group", + "RemoveGroupMember": "Remove user-group member", + "ServerStartup": "Server startup", + "CreateDataSource": "Create data source", + "UpdateDataSource": "Update data source", + "DeleteDataSource": "Delete data source", + "GrantUpdateDeletePermission": "Grant or update permissions", + "LibraryQueryActions": "Create / Update / Delete library queries", + "PublishLibraryQuery": "Publish library query", + "AuditLogsPreviewTitle": "Preview the Audit Log in action (click to zoom)", + "ScreenshotPlaceholder1": "[ Screenshot 1 Placeholder ]", + "ScreenshotPlaceholder2": "[ Screenshot 2 Placeholder ]", + "ScreenshotPlaceholder3": "[ Screenshot 3 Placeholder ]", + "PricingTitle": "Enterprise Edition Pricing", + "PricingIntro": "We offer flexible pricing for organizations of any size, tailored to your usage model:", + "FlatRateTitle": "Option 1: Flat-rate per instance — $169 / month", + "FlatRateDesc": "An instance is a full Lowcoder environment (metadata database + runtime) that can be independently deployed. This includes:", + "FlatRatePoint1": "A dedicated MongoDB metadata store", + "FlatRatePoint2": "One or more app runtimes (\"Api-Service\" and / or \"Node-Service\" containers)", + "UsagePricingTitle": "Option 2: Usage-based pricing — $0.001 per API Call", + "UsagePricingDesc": "Each instance can alternatively be licensed based on API usage. We offer prepaid packages:", + "API100k": "100,000 API Calls — $100", + "API1M": "1,000,000 API Calls — $1,000", + "API10M": "10,000,000 API Calls — $10,000", + "UsageOverrunDesc": "When your API package runs low, we'll alert you. Once the package is consumed, your instance remains functional but will operate at a reduced speed to prevent abuse and maintain fairness.", + "UsageTopUpInfo": "You can seamlessly add additional packages anytime to ensure continuous, fast access — no service interruptions.", + "AppUsageTitle": "App Usage Logs", + "AppUsageIntroTitle": "Understand how your apps are used", + "AppUsageIntro1": "App Usage Logs give you deep insights into how your published Lowcoder apps are consumed.", + "AppUsageIntro2": "This functionality works like a built-in, simplified version of Google Analytics — but fully private and scoped to your Lowcoder instance.", + "AppUsageIntro3": "Admins can analyze how apps are accessed over time, which ones are most used, and from where users are connecting.", + + "AppUsageMetricsTitle": "Metrics you can track...", + "AppUsageMetricsIntro": "These analytics help you make informed decisions about engagement and platform usage:", + "MetricActiveUsers": "App Views per day / week / month (based on time filter)", + "MetricViewsPerApp": "Top 10 Apps", + "MetricDevices": "Access by device (desktop, tablet, mobile)", + "MetricBrowsers": "Access by browser and OS", + "MetricCountries": "Geographic origin of users", + "AppUsageScreenshotsTitle": "App Usage Analytics in action (click to zoom)", + "AppUsageScreenshot1": "[ App Usage Dashboard Screenshot ]", + "AppUsageScreenshot2": "[ Per-App Views Chart ]", + "AppUsageScreenshot3": "[ Geo Distribution Map ]", + + "BrandingIntroTitle": "Custom Branding & White-Labeling", + "BrandingIntro1": "With Lowcoders Branding settings, you can elevate product experience for your users by offering fully customizable branding.", + "BrandingIntro2": "Empower your customers or internal teams to use the platform as if it were their own — logo, colors, fonts, and custom pages included.", + "BrandingIntro3": "Or you need a fully white-label solution and reinforce your brand identity at every touchpoint.", + "BrandingColorsIntro1": "You can set your own color scheme to match your corporate identity, including primary UI elements and navigation bars.", + "BrandingColorsIntro2": "Customize sidebar highlights, header sections, and even text contrast to enhance user experience and accessibility.", + "BrandingFontsIntro": "Select from curated Google Fonts to make your application truly yours in both style and readability.", + "BrandingLogosIntro": "Naturally, you also can upload your own logos — rectangular and square — to appear in headers, dashboards, and login screens. Maintain brand consistency across devices and screens.", + "BrandingPagesIntro1": "Add personalized text and visuals to your error pages, signup flows, and logout messages.", + "BrandingPagesIntro2": "These touchpoints help deliver a fully branded experience even during unexpected scenarios or account transitions.", + "BrandingMetaIntro": "Define standard metadata like page title and description to improve your SEO presence and brand messaging.", + "BrandingHelpLinksIntro": "Add context-sensitive documentation links directly inside the app, providing just-in-time help to your users.", + "BrandingWhatsNewIntro": "Activate the 'What's New' section to highlight updates and product announcements in a branded and visible manner.", + + "EnvironmentsIntroTitle": "Lowcoder Staging", + "EnvironmentsTitle" : "Multi-Environment Infrastructure", + "EnvironmentsIntro1": "Lowcoder Environments allow you to separate your Dev, Test, and Prod stages cleanly and safely.", + "EnvironmentsIntro2": "Enterprise teams benefit from structured release workflows, approval processes, and version stability across stages.", + "EnvironmentsIntro3": "With the Environments feature, admins can control what gets deployed, when, and where — all from a single interface.", + "EnvironmentsIntro4" : "Lowcoder includes multiple object types like Workspaces, Data Sources, Data Queries, and Apps. Since many of these objects are interconnected (e.g. a Data Source can be shared across multiple Apps), a pure Git-based export would not capture all dependencies consistently. Instead, Lowcoder offers a selective, integrated deployment mechanism directly within the UI. Apps, data sources, and queries can be selectively managed and deployed across environments. Managed objects ensure safe, controlled staging and production releases.", + "yourDeploymentID" : "Your Deployment ID", + "EnvironmentsFeaturePreviewTitle" : "Environments & Deployment in action (click to zoom)", + + "EnvironmentsUseCasesTitle": "Why Use Environments? (Staging)", + "EnvironmentsUseCase1": "Prevent unintended changes in production by testing apps in dedicated Dev or QA environments.", + "EnvironmentsUseCase2": "Align with corporate IT governance by implementing staged deployments with audit-ready tracking.", + "EnvironmentsUseCase3": "Empower teams to build confidently with environment-specific configurations, data, and integrations.", + + "EnvironmentsFeaturesTitle": "What You Get", + "EnvironmentsFeature1": "Centralized dashboard to view and manage all Lowcoder environments.", + "EnvironmentsFeature2": "Deployment of applications, data sources, and configurations between environments, directly from the UI without the need for Additional CI/CD tools.", + "EnvironmentsFeature3": "Environment-specific access controls and visibility rules.", + "EnvironmentsFeature5": "Clear separation of concerns for staging, sandbox, and production operations.", + "apiUsage" : "API Calls.", + "loadingApiUsage" : "Loading API usage data..." + }, + // Environments page translations + "environments": { + "title": "Environments", + "search": "Search", + "refresh": "Refresh", + "addEnvironment": "Add Environment", + "errorLoadingEnvironments": "Error loading environments", + "noEnvironmentsFoundMatching": "No environments found matching \"{searchText}\"", + "noEnvironmentsFound": "No environments found. Create your first environment to get started.", + "environmentsTypeLabel": "{type} Environments", + "showingAllEnvironments": "Showing all {count} environments", + "unnamedEnvironment": "Unnamed Environment", + "masterEnvironment": "Master Environment", + "viewAuditLogs": "View Audit Logs", + "id": "ID", + "domain": "Domain", + "master": "Master", + "license": "License", + "apiCalls": "API Calls", + "yes": "Yes", + "no": "No", + "copyId": "Copy ID", + "copied": "Copied!", + "percentUsed": "{percent}% used", + "licenseStatus_checking": "Checking...", + "licenseStatus_licensed": "Licensed", + "licenseStatus_unlicensed": "License Required", + "licenseStatus_error": "Setup Required", + "licenseStatus_unknown": "Unknown", + "detail_environmentNotFound": "Environment Not Found", + "detail_returnToEnvironmentsList": "Return to Environments List", + "detail_environmentDetail": "Environment Detail", + "detail_environmentOverview": "Environment Overview", + "detail_noDomainSet": "No domain set", + "detail_environmentId": "Environment ID", + "detail_licenseStatus": "License Status", + "detail_licenseNeeded": "License Needed", + "detail_setupRequired": "Setup Required", + "detail_created": "Created", + "detail_unknown": "Unknown", + "detail_licenseDetails": "License Details", + "detail_apiCallsRemaining": "API Calls Remaining", + "detail_totalApiCallsLimit": "Total API Calls Limit", + "detail_enterpriseEdition": "Enterprise Edition", + "detail_active": "Active", + "detail_inactive": "Inactive", + "detail_licenseInformation": "License Information", + "detail_calls": "calls", + "detail_licenses": "Licenses", + "detail_license": "License", + "detail_workspaces": "Workspaces", + "detail_userGroups": "User Groups", + "detail_type": "Type", + "detail_status": "Status", + "detail_licensed": "Licensed", + "detail_unlicensed": "Unlicensed", + "detail_apiKey": "API Key", + "detail_configured": "Configured", + "detail_notSet": "Not Set", + "detail_masterEnv": "Master Env", + "unlicensed_unlicensedDescription": "This environment needs a valid license to unlock its full capabilities and features. Please make sure your API Service URL is correctly configured and Plugin is installed.", + "unlicensed_errorDescription": "We encountered an issue while checking the license. Please review the configuration settings.", + "unlicensed_defaultDescription": "This environment requires license configuration to proceed.", + "unlicensed_contactLowcoderTeam": "Contact Lowcoder Team", + "unlicensed_editEnvironment": "Edit Environment", + "unlicensed_backToEnvironments": "Back to Environments", + "unlicensed_helpText": "Need assistance? Contact our team for licensing support or edit the environment configuration to resolve this issue.", + "unlicensed_type": "Type", + "unlicensed_status": "Status", + "unlicensed_masterEnv": "Master Env", + "unlicensed_licenseIssue": "License Issue", + "unlicensed_error": "Error", + "unlicensed_missing": "Missing", + "error_itemNotFound": "The item you're looking for doesn't exist or you don't have permission to view it.", + "modal_createNewEnvironment": "Create New Environment", + "modal_editEnvironment": "Edit Environment", + "modal_cancel": "Cancel", + "modal_createEnvironment": "Create Environment", + "modal_saveChanges": "Save Changes", + "modal_environmentName": "Environment Name", + "modal_pleaseEnterName": "Please enter a name", + "modal_nameMinLength": "Name must be at least 2 characters", + "modal_enterEnvironmentName": "Enter environment name", + "modal_description": "Description", + "modal_enterDescription": "Enter description", + "modal_stage": "Stage", + "modal_pleaseSelectStage": "Please select a stage", + "modal_selectStage": "Select stage", + "modal_development": "Development (DEV)", + "modal_testing": "Testing (TEST)", + "modal_preProduction": "Pre-Production (PREPROD)", + "modal_production": "Production (PROD)", + "modal_frontendUrl": "Frontend URL", + "modal_pleaseEnterValidUrl": "Please enter a valid URL", + "modal_apiServiceUrl": "API Service URL", + "modal_nodeServiceUrl": "Node Service URL", + "modal_apiKey": "API Key", + "modal_enterApiKey": "Enter API key", + "modal_masterEnvironment": "Master Environment", + "modal_alreadyMasterEnvironment": "{name} is already the Master environment", + "modal_willBeMaster": "Will be Master", + "modal_currentlyMaster": "Currently Master", + "modal_configurationRequirements": "Configuration Requirements", + "modal_configurationRequirementsDesc": "Ensure that the API Service URL is configured and correct, the API key is valid, and for license verification make sure you have both the license and plugin properly installed.", + "workspaces_title": "Workspaces", + "workspaces_subtitle": "Manage workspaces in this environment", + "workspaces_refresh": "Refresh", + "workspaces_errorLoadingWorkspaces": "Error loading workspaces", + "workspaces_configurationIssue": "Configuration Issue", + "workspaces_missingConfiguration": "Missing required configuration: API key or API service URL", + "workspaces_totalWorkspaces": "Total Workspaces", + "workspaces_managedWorkspaces": "Managed Workspaces", + "workspaces_unmanagedWorkspaces": "Unmanaged Workspaces", + "workspaces_workspace": "Workspace", + "workspaces_role": "Role", + "workspaces_status": "Status", + "workspaces_managed": "Managed", + "workspaces_unmanaged": "Unmanaged", + "workspaces_actions": "Actions", + "workspaces_viewAuditLogs": "View Audit Logs", + "workspaces_audit": "Audit", + "workspaces_searchWorkspaces": "Search workspaces by name or ID", + "workspaces_showAll": "Show All", + "workspaces_managedOnly": "Managed Only", + "workspaces_showingResults": "Showing {count} of {total} workspaces", + "workspaces_paginationTotal": "{start}-{end} of {total} workspaces", + "workspaces_noWorkspacesFound": "No workspaces found in this environment", + "userGroups_title": "User Groups", + "userGroups_subtitle": "Manage user groups in this environment", + "userGroups_refresh": "Refresh", + "userGroups_errorLoadingUserGroups": "Error loading user groups", + "userGroups_configurationIssue": "Configuration Issue", + "userGroups_missingConfiguration": "Missing required configuration: API key or API service URL", + "userGroups_totalGroups": "Total Groups", + "userGroups_allUsersGroups": "All Users Groups", + "userGroups_developerGroups": "Developer Groups", + "userGroups_customGroups": "Custom Groups", + "userGroups_userGroup": "User Group", + "userGroups_type": "Type", + "userGroups_allUsers": "All Users", + "userGroups_developers": "Developers", + "userGroups_custom": "Custom", + "userGroups_members": "Members", + "userGroups_adminMembers": "Admin Members", + "userGroups_created": "Created", + "userGroups_totalMembersTooltip": "Total number of members in this group", + "userGroups_adminMembersTooltip": "Number of admin users in this group", + "userGroups_searchUserGroups": "Search user groups by name or ID", + "userGroups_showingResults": "Showing {count} of {total} user groups", + "userGroups_paginationTotal": "{start}-{end} of {total} user groups", + "userGroups_noUserGroupsFound": "No user groups found in this environment", + "apps_title": "Apps", + "apps_subtitle": "Manage workspace applications", + "apps_refresh": "Refresh", + "apps_errorLoadingApps": "Error loading apps", + "apps_configurationIssue": "Configuration Issue", + "apps_missingConfiguration": "Missing required configuration: API key or API service URL", + "apps_totalApps": "Total Apps", + "apps_publishedApps": "Published Apps", + "apps_managedApps": "Managed Apps", + "apps_unmanagedApps": "Unmanaged Apps", + "apps_app": "App", + "apps_status": "Status", + "apps_published": "Published", + "apps_draft": "Draft", + "apps_managed": "Managed", + "apps_unmanaged": "Unmanaged", + "apps_deploy": "Deploy", + "apps_audit": "Audit", + "apps_appMustBeManagedToDeploy": "App must be managed before it can be deployed", + "apps_deployThisApp": "Deploy this app to another environment", + "apps_viewAuditLogs": "View Audit Logs", + "apps_searchApps": "Search apps by name or ID", + "apps_showAll": "Show All", + "apps_managedOnly": "Managed Only", + "apps_showingResults": "Showing {count} of {total} apps", + "apps_paginationTotal": "{start}-{end} of {total} apps", + "apps_noAppsFound": "No apps found in this workspace", + "apps_appRecycled": "This app has been moved to recycle bin", + "apps_managedSuccess": "{name} is now Managed", + "apps_unmanagedSuccess": "{name} is now Unmanaged", + "apps_managedError": "Failed to change managed status for {name}", + "dataSources_title": "Data Sources", + "dataSources_subtitle": "Manage workspace data connections", + "dataSources_refresh": "Refresh", + "dataSources_errorLoadingDataSources": "Error loading data sources", + "dataSources_configurationIssue": "Configuration Issue", + "dataSources_missingConfiguration": "Missing required configuration: API key or API service URL", + "dataSources_totalDataSources": "Total Data Sources", + "dataSources_availableTypes": "Available Types", + "dataSources_managed": "Managed", + "dataSources_unmanaged": "Unmanaged", + "dataSources_dataSource": "Data Source", + "dataSources_type": "Type", + "dataSources_status": "Status", + "dataSources_deploy": "Deploy", + "dataSources_audit": "Audit", + "dataSources_dataSourceMustBeManagedToDeploy": "Data source must be managed before it can be deployed", + "dataSources_deployThisDataSource": "Deploy this data source to another environment", + "dataSources_viewAuditLogs": "View Audit Logs", + "dataSources_searchDataSources": "Search data sources by name or ID", + "dataSources_showAll": "Show All", + "dataSources_managedOnly": "Managed Only", + "dataSources_showingResults": "Showing {count} of {total} data sources", + "dataSources_paginationTotal": "{start}-{end} of {total} data sources", + "dataSources_noDataSourcesFound": "No data sources found in this workspace", + "dataSources_managedSuccess": "{name} is now Managed", + "dataSources_unmanagedSuccess": "{name} is now Unmanaged", + "dataSources_managedError": "Failed to change managed status for {name}", + "queries_title": "Queries", + "queries_subtitle": "Manage workspace API queries", + "queries_refresh": "Refresh", + "queries_errorLoadingQueries": "Error loading queries", + "queries_configurationIssue": "Configuration Issue", + "queries_missingConfiguration": "Missing required configuration: API key or API service URL", + "queries_totalQueries": "Total Queries", + "queries_managed": "Managed", + "queries_unmanaged": "Unmanaged", + "queries_query": "Query", + "queries_creator": "Creator", + "queries_status": "Status", + "queries_deploy": "Deploy", + "queries_audit": "Audit", + "queries_queryMustBeManagedToDeploy": "Query must be managed before it can be deployed", + "queries_deployThisQuery": "Deploy this query to another environment", + "queries_viewAuditLogs": "View Audit Logs", + "queries_searchQueries": "Search queries by name or ID", + "queries_showAll": "Show All", + "queries_managedOnly": "Managed Only", + "queries_showingResults": "Showing {count} of {total} queries", + "queries_paginationTotal": "{start}-{end} of {total} queries", + "queries_noQueriesFound": "No queries found in this workspace", + "queries_managedSuccess": "{name} is now Managed", + "queries_unmanagedSuccess": "{name} is now Unmanaged", + "queries_managedError": "Failed to change managed status for {name}", + + // Deploy Modal and Credential Confirmations + "deployModal_deployTitle": "Deploy {singularLabel}: {name}", + "deployModal_loadingEnvironments": "Loading environments...", + "deployModal_sourceEnvironment": "Source Environment", + "deployModal_targetEnvironment": "Target Environment", + "deployModal_selectTargetEnvironment": "Select target environment", + "deployModal_selectTargetEnvironmentValidation": "Please select a target environment", + "deployModal_confirmed": "Confirmed", + "deployModal_cancel": "Cancel", + "deployModal_deploy": "Deploy", + "deployModal_targetEnvironmentNotFound": "Target environment not found", + "deployModal_confirmCredentialOverwrite": "Please confirm credential overwrite before deploying", + "deployModal_deploySuccess": "Successfully deployed {name} to target environment", + "deployModal_deployFailed": "Failed to deploy {singularLabel}", + "deployModal_selectFieldValidation": "Please select {label}", + "deployModal_selectFieldPlaceholder": "Select {label}", + "deployModal_inputFieldValidation": "Please input {label}", + "deployModal_inputFieldPlaceholder": "Enter {label}", + + // Add contact lowcoder modal + "contactLowcoder_title": "Contact Lowcoder Team", + "contactLowcoder_environmentLabel": "Environment:", + "contactLowcoder_environmentIdLabel": "Environment ID:", + "contactLowcoder_deploymentIdLabel": "Deployment ID:", + "contactLowcoder_loading": "Loading...", + "contactLowcoder_notAvailable": "Not available", + "contactLowcoder_unnamedEnvironment": "Unnamed Environment", + "contactLowcoder_fetchingDeploymentInfo": "Fetching deployment information...", + "contactLowcoder_unableToLoadContactForm": "Unable to Load Contact Form", + "contactLowcoder_apiConfigurationError": "Environment API service URL or API key not configured", + "contactLowcoder_failedToFetchDeploymentId": "Failed to fetch deployment ID", + "contactLowcoder_ensureProperConfiguration": "Please ensure the environment is properly configured to contact support.", + + "credentialConfirmations_firstConfirmation_title": "Overwrite Credentials Warning", + "credentialConfirmations_firstConfirmation_message": "This action will overwrite existing credentials in the target environment.", + "credentialConfirmations_firstConfirmation_description": "This is a serious operation that may affect other applications and users.", + "credentialConfirmations_firstConfirmation_question": "Are you sure you want to proceed?", + "credentialConfirmations_firstConfirmation_continueButton": "Continue", + "credentialConfirmations_firstConfirmation_cancelButton": "Cancel", + "credentialConfirmations_secondConfirmation_title": "Final Confirmation Required", + "credentialConfirmations_secondConfirmation_message": "Final Warning: Credential Overwrite", + "credentialConfirmations_secondConfirmation_description": "You are about to overwrite credentials in the target environment. This action cannot be undone and may break existing integrations.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Please confirm one more time.", + "credentialConfirmations_secondConfirmation_finalQuestion": "Are you absolutely certain you want to overwrite the credentials?", + "credentialConfirmations_secondConfirmation_confirmButton": "Yes, Overwrite Credentials", + "credentialConfirmations_secondConfirmation_cancelButton": "Cancel", + + "config_singularLabels_app": "App", + "config_singularLabels_dataSource": "Data Source", + "config_singularLabels_query": "Query", + "config_singularLabels_workspace": "Workspace", + "config_fields_updateDependenciesIfNeeded": "Update Dependencies If Needed", + "config_fields_publishOnTarget": "Publish On Target", + "config_fields_publicToAll": "Public To All", + "config_fields_publicToMarketplace": "Public To Marketplace", + "config_fields_overwriteCredentials": "Overwrite Credentials", + + // Service error messages + "services_environments_missingEnvironmentId": "Missing environment ID", + "services_environments_failedToUpdateEnvironment": "Failed to update environment", + "services_environments_environmentCreatedSuccessfully": "Environment created successfully", + "services_environments_failedToCreateEnvironment": "Failed to create environment", + "services_environments_failedToFetchEnvironments": "Failed to fetch environments", + "services_environments_failedToFetchEnvironment": "Failed to fetch environment", + "services_environments_environmentIdRequired": "Environment ID is required", + "services_environments_apiKeyRequiredForWorkspaces": "API key is required to fetch workspaces", + "services_environments_apiServiceUrlRequiredForWorkspaces": "API service URL is required to fetch workspaces", + "services_environments_failedToFetchWorkspaces": "Failed to fetch workspaces", + "services_environments_apiKeyRequiredForUserGroups": "API key is required to fetch user groups", + "services_environments_apiServiceUrlRequiredForUserGroups": "API service URL is required to fetch user groups", + "services_environments_failedToFetchUserGroups": "Failed to fetch user groups", + "services_environments_workspaceIdRequired": "Workspace ID is required", + "services_environments_apiKeyRequiredForApps": "API key is required to fetch apps", + "services_environments_apiServiceUrlRequiredForApps": "API service URL is required to fetch apps", + "services_environments_failedToFetchWorkspaceApps": "Failed to fetch workspace apps", + "services_environments_apiKeyRequiredForDataSources": "API key is required to fetch data sources", + "services_environments_apiServiceUrlRequiredForDataSources": "API service URL is required to fetch data sources", + "services_environments_failedToFetchWorkspaceDataSources": "Failed to fetch workspace data sources", + "services_environments_apiKeyRequiredForQueries": "API key is required to fetch queries", + "services_environments_apiServiceUrlRequiredForQueries": "API service URL is required to fetch queries", + "services_environments_failedToFetchWorkspaceQueries": "Failed to fetch workspace queries", + "services_environments_apiServiceUrlNotConfigured": "API service URL not configured", + "services_environments_licenseCheckFailed": "License check failed", + "services_environments_apiKeyRequiredForDeploymentId": "API key is required to fetch deployment ID", + "services_environments_failedToFetchDeploymentId": "Failed to fetch deployment ID", + "services_enterprise_missingEnvironmentId": "Missing environment ID", + "services_enterprise_failedToFetchManagedWorkspaces": "Failed to fetch managed workspaces", + "services_enterprise_missingRequiredParamsToConnectOrg": "Missing required params to connect workspace", + "services_enterprise_failedToConnectOrg": "Failed to connect workspace", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "Missing workspace GID to unconnect workspace", + "services_enterprise_failedToUnconnectOrg": "Failed to unconnect workspace", + "services_enterprise_failedToConnectApp": "Failed to connect app", + "services_enterprise_failedToUnconnectApp": "Failed to unconnect app", + "services_enterprise_failedToFetchDataSources": "Failed to fetch data sources", + "services_enterprise_failedToDeployDataSource": "Failed to deploy data source", + "services_enterprise_failedToDisconnectManagedDataSource": "Failed to disconnect managed data source", + "services_enterprise_environmentIdRequired": "Environment ID is required", + "services_enterprise_failedToFetchQueries": "Failed to fetch queries", + "services_enterprise_environmentIdAndQueryGidRequired": "Environment ID and Query GID are required", + "services_enterprise_failedToDeployQuery": "Failed to deploy query", + "services_enterprise_queryGidRequired": "Query GID is required", + "services_enterprise_failedToDisconnectQuery": "Failed to disconnect query", + "services_apps_failedToFetchApps": "Failed to fetch apps", + "services_apps_failedToDeployApp": "Failed to deploy app", + "services_datasources_workspaceIdRequired": "Workspace ID is required", + "services_datasources_apiKeyRequiredToFetchDataSources": "API key is required to fetch data sources", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "API service URL is required to fetch data sources", + "services_datasources_failedToFetchDataSources": "Failed to fetch data sources", + "services_datasources_failedToDeployDataSource": "Failed to deploy data source", + "services_workspace_failedToFetchWorkspaces": "Failed to fetch workspaces", + "services_workspace_failedToDeployWorkspace": "Failed to deploy workspace", + "services_managedObjects_missingRequiredParameters": "Missing required parameters", + "services_managedObjects_failedToCheckManagedStatus": "Failed to check managed status", + "services_managedObjects_failedToSetAsManaged": "Failed to set {{objType}} as managed", + "services_managedObjects_failedToRemoveFromManaged": "Failed to remove {{objType}} from managed", + "services_managedObjects_missingEnvironmentId": "Missing environment ID", + "services_managedObjects_failedToFetchManagedObjects": "Failed to fetch managed objects", + "services_managedObjects_failedToFetchManagedObject": "Failed to fetch managed object", + "services_managedObjects_managedObjectNotFound": "Managed object not found for objGid: {{objGid}}", + "services_license_apiServiceUrlRequired": "API service URL is required", + "services_license_licenseInformationUnavailable": "License information unavailable", + "services_license_licenseCheckTookTooLong": "License check took too long", + "services_license_licenseServiceNotAvailable": "License service not available", + "services_license_authenticationRequired": "Authentication required - please check API key", + "services_license_licenseServiceTemporarilyUnavailable": "License service temporarily unavailable", + "services_license_remainingAPICalls": "{{remaining}} remaining ({{used}}/{{total}} used, {{percentage}}%)", + }, + "subscription": { + "details": "Subscription Details", + "productDetails": "Product Details", + "productName": "Product Name", + "productDescription": "Product Description", + "productPrice": "Product Price", + "subscriptionDetails": "Subscription Details", + "status": "Status", + "startDate": "Start Date", + "currentPeriodEnd": "Current Period End", + "customerId": "Customer ID", + "subscriptionItems": "Subscription Items", + "itemId": "Item ID", + "plan": "Plan", + "quantity": "Quantity", + "product": "Product", + "invoices": "Invoices", + "invoiceNumber": "Invoice Number", + "date": "Date", + "amount": "Amount", + "link": "Link", + "viewInvoice": "View Invoice", + "downloadPDF": "Download PDF", + "billingReason": "Billing Reason", + "subscriptionCycle": "monthly Subscription", + "customer": "Customer", + "links": "Links", + "paid": "Paid", + "unpaid": "Unpaid", + "noInvoices": "No invoices available", + "costVolumeDevelopment": "Cost/Volume Development", + "noUsageRecords": "No usage records available", + "itemDescription": "Item Description", + "periodStart": "Period Start", + "periodEnd": "Period End", + "billingReason.subscription_cycle": "Subscription Cycle", + "billingReason.subscription_create": "Subscription Creation", + "billingReason.manual": "Manual Billing", + "billingReason.upcoming": "Upcoming Billing", + "billingReason.subscription_threshold": "Subscription Threshold", + "billingReason.subscription_update": "Subscription Update", + "backToSubscriptions": "Back to Subscriptions", + "manageSubscription" : "Manage Your Subscriptions", + "subscriptionHelp" : "Subscription Help", + "subscriptionHelpDescription" : "If you have any questions, please contact us. We are happy to help you. service@lowcoder.cloud", + "success" : "Payment & Subscription Success", + "successTitle" : "Thank You for Joining the Lowcoder Family!", + "successThankYou" : "We're thrilled to have you on board! Your trust in Lowcoder means everything to us, and we're committed to delivering an exceptional experience from day one.\n\nAt Lowcoder, you're not just a customer but you're part of a community that drives innovation and growth. Our mission is to help you achieve your goals with ease, whether that means solving challenges quickly, building innovative solutions, or being there whenever you need support.\n\nHere's what you can look forward to:\n\n• Top-notch support: Our team is ready to assist you at every step.\n• Continuous innovation: We're always improving to bring you the best tools and features.\n• A partnership for success: Your success is our priority.\n\nThank you for inspiring us to push boundaries and strive for excellence every day. We can't wait to see what we'll build together.\n\nWelcome aboard! Let's make extraordinary things happen.", + "successLowcoderTeam" : "The Lowcoder Team", + }, + "subscriptionError": { + "fetchProductDetails": "Error fetching product details.", + "fetchSubscriptionDetails": "Error fetching subscription details.", + "fetchInvoices": "Error fetching invoices." + }, + + "auditLog": { + "title": "Audit Log Detail", + "geoLocation": "Geo Location", + "browserData": "Browser / System Metadata", + "browser": "Browser", + "OS": "OS", + "device": "Device", + "deviceType": "Device Type", + "engine": "Engine", + "webview": "Webview", + "eventDetail": "Event Detail" + }, + // thirteenth part + + "memberSettings": { - "admin": "Admin", - "adminGroupRoleInfo": "Admin Can Manage Group Members and Resources", - "adminOrgRoleInfo": "Admins Own All Resources and Can Manage Groups.", - "member": "Member", - "memberGroupRoleInfo": "Member Can View Group Members", - "memberOrgRoleInfo": "Members Can Only Use or Visit Resources They Have Access To.", - "title": "Members", - "createGroup": "Create Group", - "newGroupPrefix": "New Group ", - "allMembers": "All Members", - "deleteModalTitle": "Delete This Group", - "deleteModalContent": "The Deleted Group Cannot Be Restored. Are You Sure to Delete the Group?", - "addMember": "Add Members", - "nameColumn": "User Name", - "joinTimeColumn": "Joining Time", - "actionColumn": "Operation", - "roleColumn": "Role", - "exitGroup": "Exit Group", - "moveOutGroup": "Remove from Group", - "inviteUser": "Invite Members", - "exitOrg": "Leave", - "exitOrgDesc": "Are You Sure You Want to Leave This Workspace.", - "moveOutOrg": "Remove", - "moveOutOrgDescSaasMode": "Are You Sure You Want to Remove User {name} from This Workspace?", - "moveOutOrgDesc": "Are You Sure You Want to Remove User {name}? This Action Cannot Be Recovered.", - "devGroupTip": "Members of the Developer Group Have Privileges to Create Apps and Data Sources.", - "lastAdminQuit": "The Last Administrator Cannot Exit.", - "organizationNotExist": "The Current Workspace Does Not Exist", - "inviteUserHelp": "You Can Copy the Invitation Link to Send to the User", - "inviteUserLabel": "Invitation Link:", - "inviteCopyLink": "Copy Link", - "inviteText": "{userName} Invites You to Join the Workspace \"{organization}\", Click on the Link to Join: {inviteLink}", - "groupName": "Group Name", - "createTime": "Create Time", - "manageBtn": "Manage", - "userDetail": "Detail", - "syncDeleteTip": "This Group Has Been Deleted from the Address Book Source", - "syncGroupTip": "This Group is an Address Book Synchronization Group and Cannot Be Edited" + "admin": "Admin", + "superAdmin": "Super Admin", + "adminGroupRoleInfo": "Admin Can Manage Group Members and Resources", + "adminOrgRoleInfo": "Admins Own All Resources and Can Manage Groups.", + "member": "Member", + "memberGroupRoleInfo": "Member Can View Group Members", + "memberOrgRoleInfo": "Members Can Only Use or Visit Resources They Have Access To.", + "title": "Members", + "createGroup": "Create Group", + "newGroupPrefix": "New Group ", + "allMembers": "All Members", + "deleteModalTitle": "Delete This Group", + "deleteModalContent": "The Deleted Group Cannot Be Restored. Are You Sure to Delete the Group?", + "addMember": "Add Members", + "nameColumn": "User Name", + "joinTimeColumn": "Joining Time", + "actionColumn": "Operation", + "roleColumn": "Role", + "exitGroup": "Exit Group", + "moveOutGroup": "Remove from Group", + "inviteUser": "Invite Members", + "exitOrg": "Leave", + "exitOrgDesc": "Are You Sure You Want to Leave This Workspace.", + "moveOutOrg": "Remove", + "moveOutOrgDescSaasMode": "Are You Sure You Want to Remove User {name} from This Workspace?", + "moveOutOrgDesc": "Are You Sure You Want to Remove User {name}? This Action Cannot Be Recovered.", + "devGroupTip": "Members of the Developer Group Have Privileges to Create Apps and Data Sources.", + "lastAdminQuit": "The Last Administrator Cannot Exit.", + "organizationNotExist": "The Current Workspace Does Not Exist", + "inviteUserHelp": "You Can Copy the Invitation Link to Send to the User", + "inviteUserLabel": "Invitation Link:", + "inviteCopyLink": "Copy Link", + "inviteText": "{userName} Invites You to Join the Workspace \"{organization}\", Click on the Link to Join: {inviteLink}", + "inviteByEmailHelp": "You can enter one or more email addresses to send invitation links", + "inviteByEmailLabel": "Enter emails:", + "inviteByEmailButton": "Send Invitations", + "inviteByEmailSuccess": "Invitations sent successfully!", + "inviteByEmailError": "Something went wrong while sending invitations. Please try again.", + "noValidEmails": "No valid emails found", + "groupName": "Group Name", + "createTime": "Create Time", + "manageBtn": "Manage", + "userDetail": "Detail", + "syncDeleteTip": "This Group Has Been Deleted from the Address Book Source", + "syncGroupTip": "This Group is an Address Book Synchronization Group and Cannot Be Edited" }, "orgSettings": { - "newOrg": "New Workspace (Organization)", - "title": "Workspace", - "createOrg": "Create Workspace (Organization)", - "deleteModalTitle": "Are You Sure to Delete This Workspace?", - "deleteModalContent": "You Are About to Delete This Workspace {permanentlyDelete}. Once Deleted, the Workspace {notRestored}.", - "permanentlyDelete": "Permanently", - "notRestored": "Cannot Be Restored", - "deleteModalLabel": "Please Enter Workspace Name {name} to Confirm the Operation:", - "deleteModalTip": "Please Enter Workspace Name", - "deleteModalErr": "Workspace Name is Incorrect", - "deleteModalBtn": "Delete", - "editOrgTitle": "Edit Workspace Information", - "orgNameLabel": "Workspace Name:", - "orgNameCheckMsg": "Workspace Name Cannot Be Empty", - "orgLogo": "Workspace Logo:", - "logoModify": "Modify Picture", - "inviteSuccessMessage": "Join the Workspace Successfully", - "inviteFailMessage": "Failed to Join Workspace", - "uploadErrorMessage": "Upload Error", - "orgName": "Workspace Name" + "newOrg": "New Workspace (Organization)", + "title": "Workspace", + "createOrg": "Create Workspace (Organization)", + "deleteModalTitle": "Are You Sure to Delete This Workspace?", + "deleteModalContent": "You Are About to Delete This Workspace {permanentlyDelete}. Once Deleted, the Workspace {notRestored}.", + "permanentlyDelete": "Permanently", + "notRestored": "Cannot Be Restored", + "deleteModalLabel": "Please Enter Workspace Name {name} to Confirm the Operation:", + "deleteModalTip": "Please Enter Workspace Name", + "deleteModalErr": "Workspace Name is Incorrect", + "deleteModalBtn": "Delete", + "editOrgTitle": "Edit Workspace Information", + "orgNameLabel": "Workspace Name:", + "orgNameCheckMsg": "Workspace Name Cannot Be Empty", + "orgLogo": "Workspace Logo:", + "logoModify": "Modify Picture", + "inviteSuccessMessage": "Join the Workspace Successfully", + "inviteFailMessage": "Failed to Join Workspace", + "uploadErrorMessage": "Upload Error", + "orgName": "Workspace Name" }, "freeLimit": "Free Trial", + "tabbedContainer": { - "switchTab": "Switch Tab", - "switchTabDesc": "Triggered When Switching Tabs", - "tab": "Tabs", - "atLeastOneTabError": "The Tab Container Keeps at Least One Tab", - "selectedTabKeyDesc": "Currently Selected Tab", - "iconPosition": "Icon Position", - "placement": "Tabs Placement", - "showTabs": "Show Tabs", - "gutter": "Gap", - "gutterTooltip": "The distance between tabs in px", - "tabsCentered": "Centered Tabs", + "switchTab": "Switch Tab", + "switchTabDesc": "Triggered When Switching Tabs", + "tab": "Tabs", + "atLeastOneTabError": "The Tab Container Keeps at Least One Tab", + "selectedTabKeyDesc": "Currently Selected Tab", + "iconPosition": "Icon Position", + "placement" : "Tabs Placement", + "showTabs": "Show Tabs", + "gutter" : "Gap", + "gutterTooltip" : "The distance between tabs in px", + "tabsCentered" : "Centered Tabs", + "destroyInactiveTab": "Destroy Inactive TabPane" }, "formComp": { - "containerPlaceholder": "Drag Components from the Right Pane or", - "openDialogButton": "Generate a Form from one of your Data Sources", - "resetAfterSubmit": "Reset After Successful Submit", - "initialData": "Initial Data", - "disableSubmit": "Disable Submit", - "success": "Form Generated Successfully", - "selectCompType": "Select Component Type", - "dataSource": "Data Source: ", - "selectSource": "Select Source", - "table": "Table: ", - "selectTable": "Select Table", - "columnName": "Column Name", - "dataType": "Data Type", - "compType": "Component Type", - "required": "Required", - "generateForm": "Generate Form", - "compSelectionError": "Unconfigured Column Type", - "compTypeNameError": "Could Not Get the Component Type Name", - "noDataSourceSelected": "No Data Source Selected", - "noTableSelected": "No Table Selected", - "noColumn": "No Column", - "noColumnSelected": "No Column Selected", - "noDataSourceFound": "No Supported Data Source Found. Create a New Data Source", - "noTableFound": "No Tables Were Found in This Data Source, Please Select Another Data Source", - "noColumnFound": "No Supported Column Was Found in This Table. Please Select Another Table", - "formTitle": "Form Title", - "name": "Name", - "nameTooltip": "The Attribute Name in the Data of the Form, When Left Blank, Defaults to the Component Name", - "notSupportMethod": "Not Supported Methods: ", - "notValidForm": "The Form is Not Valid", - "resetDesc": "Reset Form Data to Default Value", - "clearDesc": "Clear Form Data", - "setDataDesc": "Set Form Data", - "valuesLengthError": "Parameter Number Error", - "valueTypeError": "Parameter Type Error", - "dataDesc": "Current Form Data", - "loadingDesc": "Whether the Form is Loading?" - }, + "containerPlaceholder": "Drag Components from the Right Pane or", + "openDialogButton": "Generate a Form from one of your Data Sources", + "resetAfterSubmit": "Reset After Successful Submit", + "initialData": "Initial Data", + "disableSubmit": "Disable Submit", + "success": "Form Generated Successfully", + "selectCompType": "Select Component Type", + "dataSource": "Data Source: ", + "invalidFormMessage": "Custom Invalid Form Message", + "selectSource": "Select Source", + "table": "Table: ", + "selectTable": "Select Table", + "columnName": "Column Name", + "dataType": "Data Type", + "compType": "Component Type", + "required": "Required", + "generateForm": "Generate Form", + "compSelectionError": "Unconfigured Column Type", + "compTypeNameError": "Could Not Get the Component Type Name", + "noDataSourceSelected": "No Data Source Selected", + "noTableSelected": "No Table Selected", + "noColumn": "No Column", + "noColumnSelected": "No Column Selected", + "noDataSourceFound": "No Supported Data Source Found. Create a New Data Source", + "noTableFound": "No Tables Were Found in This Data Source, Please Select Another Data Source", + "noColumnFound": "No Supported Column Was Found in This Table. Please Select Another Table", + "formTitle": "Form Title", + "name": "Name", + "nameTooltip": "The Attribute Name in the Data of the Form, When Left Blank, Defaults to the Component Name", + "notSupportMethod": "Not Supported Methods: ", + "notValidForm": "The Form is Not Valid", + "resetDesc": "Reset Form Data to Default Value", + "clearDesc": "Clear Form Data", + "setDataDesc": "Set Form Data", + "valuesLengthError": "Parameter Number Error", + "valueTypeError": "Parameter Type Error", + "dataDesc": "Current Form Data", + "loadingDesc": "Whether the Form is Loading?" + }, + + // fourteenth part + + "modalComp": { - "open": "Open", - "openDesc": "Triggered When the Modal Dialog Box is Opened", - "close": "Close", - "closeDesc": "Triggered When the Modal Dialog Box is Closed", - "openModalDesc": "Open the Dialog Box", - "closeModalDesc": "Close the Dialog Box", - "visibleDesc": "Is it Visible? If True, the Current Dialog Box Will Pop Up", - "title": "Drawer Title", - "titleAlign": "Title Alignment", - "modalHeight": "Modal Height", - "modalHeightTooltip": "Pixel, Example: 222", - "modalWidth": "Modal Width", - "modalWidthTooltip": "Number or Percentage, Example: 520, 60%" + "open": "Open", + "openDesc": "Triggered When the Modal Dialog Box is Opened", + "close": "Close", + "closeDesc": "Triggered When the Modal Dialog Box is Closed", + "openModalDesc": "Open the Dialog Box", + "closeModalDesc": "Close the Dialog Box", + "visibleDesc": "Is it Visible? If True, the Current Dialog Box Will Pop Up", + "title": "Drawer Title", + "titleAlign": "Title Alignment", + "modalHeight": "Modal Height", + "modalHeightTooltip": "Pixel, Example: 222", + "modalWidth": "Modal Width", + "modalWidthTooltip": "Number or Percentage, Example: 520, 60%" }, "listView": { - "noOfRows": "Row Count", - "noOfRowsTooltip": "Number of Rows in the List - Usually Set to a Variable (e.g., '{{query1.data.length}}') to Present Query Results", - "noOfColumns": "Column Count", - "itemIndexName": "Data Item Index Name", - "itemIndexNameDesc": "The Variable Name Referring to the Item's Index, Default as {default}", - "itemDataName": "Data Item Object Name", - "itemDataNameDesc": "The Variable Name Referring to the Item's Data Object, Default as {default}", - "itemsDesc": "Exposing Data of Components in List", - "dataDesc": "The JSON Data Used in the Current List", - "dataTooltip": "If You just Set a Number, This Field Will Be Regarded as Row Count, and the Data Will Be Regarded as Empty." + "noOfRows": "Row Count", + "noOfRowsTooltip": "Number of Rows in the List - Usually Set to a Variable (e.g., '{{query1.data.length}}') to Present Query Results", + "noOfColumns": "Column Count", + "itemIndexName": "Data Item Index Name", + "itemIndexNameDesc": "The Variable Name Referring to the Item's Index, Default as {default}", + "itemDataName": "Data Item Object Name", + "itemDataNameDesc": "The Variable Name Referring to the Item's Data Object, Default as {default}", + "itemsDesc": "Exposing Data of Components in List", + "dataDesc": "The JSON Data Used in the Current List", + "dataTooltip": "If You just Set a Number, This Field Will Be Regarded as Row Count, and the Data Will Be Regarded as Empty.", + "enableSorting": "Allow Sorting" }, "navigation": { - "addText": "Add Submenu Item", - "logoURL": "Navigation Logo URL", - "horizontalAlignment": "Horizontal Alignment", - "logoURLDesc": "You can display a Logo on the left side by entering URI Value or Base64 String like data:image/png;base64,AAA... CCC", - "itemsDesc": "Hierarchical Navigation Menu Items" + "addText": "Add Submenu Item", + "logoURL": "Navigation Logo URL", + "horizontalAlignment": "Horizontal Alignment", + "logoURLDesc": "You can display a Logo on the left side by entering URI Value or Base64 String like data:image/png;base64,AAA... CCC", + "itemsDesc": "Hierarchical Navigation Menu Items" }, "droppadbleMenuItem": { - "subMenu": "Submenu {number}" + "subMenu": "Submenu {number}" }, "navItemComp": { - "active": "Active" + "active": "Active" }, "iframe": { - "URLDesc": "The Source URL for the IFrame Content. Make sure the URL is HTTPS or localhost. Also make sure the URL is not blocked by the browser's Content Security Policy (CSP). The header 'X-Frame-Options' should not be set to 'DENY' or 'SAMEORIGIN'.", - "allowDownload": "Allow Downloads", - "allowSubmitForm": "Allow Submit Form", - "allowMicrophone": "Allow Microphone", - "allowCamera": "Allow Camera", - "allowPopup": "Allow Popups" + "URLDesc": "The Source URL for the IFrame Content. Make sure the URL is HTTPS or localhost. Also make sure the URL is not blocked by the browser's Content Security Policy (CSP). The header 'X-Frame-Options' should not be set to 'DENY' or 'SAMEORIGIN'.", + "allowDownload": "Allow Downloads", + "allowSubmitForm": "Allow Submit Form", + "allowMicrophone": "Allow Microphone", + "allowCamera": "Allow Camera", + "allowPopup": "Allow Popups" }, "switchComp": { - "defaultValue": "Default Boolean Value", - "open": "On", - "close": "Off", - "openDesc": "Triggered When the Switch is Turned On", - "closeDesc": "Triggered When the Switch is Turned Off", - "valueDesc": "Current Switch Status" + "defaultValue" : "Default Boolean Value", + "open": "On", + "close": "Off", + "openDesc": "Triggered When the Switch is Turned On", + "closeDesc": "Triggered When the Switch is Turned Off", + "valueDesc": "Current Switch Status" }, "signature": { - "tips": "Hint Text", - "signHere": "Sign Here", - "showUndo": "Show Undo", - "showClear": "Show Clear" + "tips": "Hint Text", + "signHere": "Sign Here", + "showUndo": "Show Undo", + "showClear": "Show Clear" }, "localStorageComp": { - "valueDesc": "All Data Items Currently Stored", - "setItemDesc": "Add an Item", - "removeItemDesc": "Remove an Item", - "clearItemDesc": "Clear All Items" + "valueDesc": "All Data Items Currently Stored", + "setItemDesc": "Add an Item", + "removeItemDesc": "Remove an Item", + "clearItemDesc": "Clear All Items" }, "utilsComp": { - "openUrl": "Open URL", - "openApp": "Open App", - "copyToClipboard": "Copy to Clipboard", - "downloadFile": "Download File" + "openUrl": "Open URL", + "openApp": "Open App", + "copyToClipboard": "Copy to Clipboard", + "downloadFile": "Download File", + "logoutUser" : "Logout User", + "resetPassword" : "Reset Password", }, "messageComp": { - "info": "Send a Notification", - "loading": "Send a Loading Notification", - "success": "Send a Success Notification", - "warn": "Send a Warning Notification", - "error": "Send an Error Notification" + "info": "Send a Notification", + "loading": "Send a Loading Notification", + "success": "Send a Success Notification", + "warn": "Send a Warning Notification", + "error": "Send an Error Notification" }, "toastComp": { - "destroy": "close a Notification", - "info": "Send a Notification", - "loading": "Send a Loading Notification", - "success": "Send a Success Notification", - "warn": "Send a Warning Notification", - "error": "Send an Error Notification" + "destroy": "close a Notification", + "info": "Send a Notification", + "loading": "Send a Loading Notification", + "success": "Send a Success Notification", + "warn": "Send a Warning Notification", + "error": "Send an Error Notification" }, "themeComp": { - "switchTo": "Switch Theme" + "switchTo": "Switch Theme" }, "transformer": { - "preview": "Preview", - "docLink": "Read More About Transformers...", - "previewSuccess": "Preview Success", - "previewFail": "Preview Fail", - "deleteMessage": "Delete Transformer Success. You Can Use {undoKey} to Undo.", - "documentationText": "Transformers are designed for data transformation and reuse of your multi-line JavaScript code. Use Transformers to adapt Data from queries or components to your local App needs. Unlike JavaScript query, transformer is designed to do read-only operations, which means that you cannot trigger a query or update a temporary state inside a transformer." + "preview": "Preview", + "docLink": "Read More About Transformers...", + "previewSuccess": "Preview Success", + "previewFail": "Preview Fail", + "deleteMessage": "Delete Transformer Success. You Can Use {undoKey} to Undo.", + "documentationText" : "Transformers are designed for data transformation and reuse of your multi-line JavaScript code. Use Transformers to adapt Data from queries or components to your local App needs. Unlike JavaScript query, transformer is designed to do read-only operations, which means that you cannot trigger a query or update a temporary state inside a transformer." }, "temporaryState": { - "value": "Init Value", - "valueTooltip": "The Initial Value Stored in the Temporary State Can Be a boolean, string, number or Any Valid JSON Value.", - "docLink": "Read More About Temporary States...", - "pathTypeError": "Path Must Be Either a String or an Array of Values", - "unStructuredError": "Unstructured Data {prev} Can't Be Updated by {path}", - "valueDesc": "Temporary State Value", - "deleteMessage": "The Temporary State is Deleted Successfully. You Can Use {undoKey} to Undo.", - "documentationText": "Temporary states are a powerful feature used to manage complex variables that dynamically update the state of components in your application. These states act as intermediary or transient storage for data that can change over time due to user interactions or other processes." + "value": "Init Value", + "valueTooltip": "The Initial Value Stored in the Temporary State Can Be a boolean, string, number or Any Valid JSON Value.", + "docLink": "Read More About Temporary States...", + "pathTypeError": "Path Must Be Either a String or an Array of Values", + "unStructuredError": "Unstructured Data {prev} Can't Be Updated by {path}", + "valueDesc": "Temporary State Value", + "deleteMessage": "The Temporary State is Deleted Successfully. You Can Use {undoKey} to Undo.", + "documentationText" : "Temporary states are a powerful feature used to manage complex variables that dynamically update the state of components in your application. These states act as intermediary or transient storage for data that can change over time due to user interactions or other processes." }, "dataResponder": { - "data": "Data", - "dataDesc": "Data of Current Data Responder", - "dataTooltip": "When This Data is Changed, It Will Trigger Subsequent Actions.", - "docLink": "Read More About the Data Responders...", - "deleteMessage": "The Data Responder is Deleted Successfully. You Can Use {undoKey} to Undo.", - "documentationText": "When developing an app, you can assign events to components to monitor changes in specific data. For instance, a Table component might have events like \"Row select change\", \"Filter change\", \"Sort change\", and \"Page change\" to track changes in the selectedRow property. However, for changes in temporary states, transformers, or query results, where standard events are not available, Data responders are utilized. They enable you to detect and react to any data modifications." - }, + "data": "Data", + "dataDesc": "Data of Current Data Responder", + "dataTooltip": "When This Data is Changed, It Will Trigger Subsequent Actions.", + "docLink": "Read More About the Data Responders...", + "deleteMessage": "The Data Responder is Deleted Successfully. You Can Use {undoKey} to Undo.", + "documentationText" : "When developing an app, you can assign events to components to monitor changes in specific data. For instance, a Table component might have events like \"Row select change\", \"Filter change\", \"Sort change\", and \"Page change\" to track changes in the selectedRow property. However, for changes in temporary states, transformers, or query results, where standard events are not available, Data responders are utilized. They enable you to detect and react to any data modifications." + }, + + // fifteenth part + + "theme": { - "title": "Themes", - "createTheme": "Create Theme", - "themeName": "Theme Name:", - "themeNamePlaceholder": "Please Enter a Theme Name", - "defaultThemeTip": "Default Theme:", - "createdThemeTip": "The Theme That You Have Created:", - "option": "Option{index}", - "input": "Input", - "confirm": "Ok", - "emptyTheme": "No Themes Available", - "click": "", - "toCreate": "", - "nameColumn": "Name", - "defaultTip": "Default", - "updateTimeColumn": "Update Time", - "edit": "Edit", - "cancelDefaultTheme": "Unset Default Theme", - "setDefaultTheme": "Set as Default Theme", - "copyTheme": "Duplicate Theme", - "setSuccessMsg": "Setting Succeeded", - "cancelSuccessMsg": "Unsetting Succeeded", - "deleteSuccessMsg": "Deletion Succeeded", - "checkDuplicateNames": "The Theme Name Already Exists, Please Re-Enter It", - "copySuffix": " Copy", - "saveSuccessMsg": "Saved Successfully", - "leaveTipTitle": "Tips", - "leaveTipContent": "You Haven't Saved Yet, Confirm Leaving?", - "leaveTipOkText": "Leave", - "goList": "Back to the List", - "saveBtn": "Save", - "mainColor": "Main Colors", - "text": "Text Colors", - "layout": "Layout Settings", - "fonts": "Font Settings", - "components": "Component Templates", - "charts": "eCharts Definition", - "defaultTheme": "Default", - "yellow": "Yellow", - "green": "Green", - "previewTitle": "Theme Preview\nExample Components That Use Your Theme Colors", - "dateColumn": "Date", - "emailColumn": "Email", - "phoneColumn": "Phone", - "subTitle": "Title", - "linkLabel": "Link", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Progress", - "sliderLabel": "Slider", - "radioLabel": "Radio", - "checkboxLabel": "Checkbox", - "buttonLabel": "Form Button", - "switch": "Switch", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "globo.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Chart Style Preview", - "chartSpending": "Spending", - "chartBudget": "Budget", - "chartAdmin": "Administration", - "chartFinance": "Finance", - "chartSales": "Sales", - "chartFunnel": "Funnel Chart", - "chartShow": "Show", - "chartClick": "Click", - "chartVisit": "Visit", - "chartQuery": "Query", - "chartBuy": "Buy" + "title": "Themes", + "createTheme": "Create Theme", + "themeName": "Theme Name:", + "themeNamePlaceholder": "Please Enter a Theme Name", + "defaultThemeTip": "Default Theme:", + "createdThemeTip": "The Theme That You Have Created:", + "option": "Option{index}", + "input": "Input", + "confirm": "Ok", + "emptyTheme": "No Themes Available", + "click": "", + "toCreate": "", + "nameColumn": "Name", + "defaultTip": "Default", + "updateTimeColumn": "Update Time", + "edit": "Edit", + "cancelDefaultTheme": "Unset Default Theme", + "setDefaultTheme": "Set as Default Theme", + "copyTheme": "Duplicate Theme", + "setSuccessMsg": "Setting Succeeded", + "cancelSuccessMsg": "Unsetting Succeeded", + "deleteSuccessMsg": "Deletion Succeeded", + "checkDuplicateNames": "The Theme Name Already Exists, Please Re-Enter It", + "copySuffix": " Copy", + "saveSuccessMsg": "Saved Successfully", + "leaveTipTitle": "Tips", + "leaveTipContent": "You Haven't Saved Yet, Confirm Leaving?", + "leaveTipOkText": "Leave", + "goList": "Back to the List", + "saveBtn": "Save", + "mainColor": "Main Colors", + "text": "Text Colors", + "layout" : "Layout Settings", + "fonts" : "Font Settings", + "components" : "Component Templates", + "charts" : "eCharts Definition", + "defaultTheme": "Default", + "yellow": "Yellow", + "green": "Green", + "previewTitle": "Theme Preview\nExample Components That Use Your Theme Colors", + "dateColumn": "Date", + "emailColumn": "Email", + "phoneColumn": "Phone", + "subTitle": "Title", + "linkLabel": "Link", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progress", + "sliderLabel": "Slider", + "radioLabel": "Radio", + "checkboxLabel": "Checkbox", + "buttonLabel": "Form Button", + "switch": "Switch", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "globo.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Chart Style Preview", + "chartSpending": "Spending", + "chartBudget": "Budget", + "chartAdmin": "Administration", + "chartFinance": "Finance", + "chartSales": "Sales", + "chartFunnel": "Funnel Chart", + "chartShow": "Show", + "chartClick": "Click", + "chartVisit": "Visit", + "chartQuery": "Query", + "chartBuy": "Buy", + "canvas": "Canvas Settings", }, "themeDetail": { - "primary": "Brand Color", - "primaryDesc": "Default primary color used by most components", - "textDark": "Dark Text Color", - "textDarkDesc": "Used when the background color is light", - "textLight": "Light Text Color", - "textLightDesc": "Used when the background color is dark", - "canvas": "Canvas Color", - "canvasDesc": "Default background color of the app", - "primarySurface": "Container Color", - "primarySurfaceDesc": "Default background color for components like tables", - "borders": "Border Styles", - "spacing": "Spacing Styles", - "font": "Font Styles", - "fonts": "Fonts", - "borderRadius": "Border Radius", - "borderRadiusDesc": "Default border radius used by most components", - "borderColor": "Border Color", - "borderColorDesc": "Default border color used by most components", - "borderWidth": "Border Width", - "borderWidthDesc": "Default border width used by most components", - "borderStyle": "Border Style", - "borderStyleDesc": "Default border style used by most components", - "fontFamily": "Font Family", - "fontFamilyDesc": "Default font family used by most components", - "chart": "Chart Style", - "chartDesc": "Here you can place eCharts Theme JSON to define the style of your charts in all Details.", - "echartsJson": "You can use here the Theme JSON Generator. Copy the JSON from the Generator and paste it here.", - "margin": "Margin", - "marginDesc": "Default margin typically used for most components", - "padding": "Padding", - "paddingDesc": "Default padding typically used for most components", - "containerHeaderPadding": "Header Padding", - "containerheaderpaddingDesc": "Default header padding typically used for most components", - "gridColumns": "Canvas Grid Columns", - "gridColumnsDesc": "Default number of columns typically used for most containers", - "loadingIndicators": "Loading Indicators", - "showComponentLoadingIndicators": "Show loading indicators when component load", - "showDataLoadingIndicators": "Show loading indicators when data load" + "primary": "Brand Color", + "primaryDesc": "Default primary color used by most components", + "textDark": "Dark Text Color", + "textDarkDesc": "Used when the background color is light", + "textLight": "Light Text Color", + "textLightDesc": "Used when the background color is dark", + "canvas": "Canvas Color", + "canvasDesc": "Default background color of the app", + "primarySurface": "Container Color", + "primarySurfaceDesc": "Default background color for components like tables", + "borders": "Border Styles", + "spacing": "Spacing Styles", + "font": "Font Styles", + "fonts" : "Fonts", + "borderRadius": "Border Radius", + "borderRadiusDesc": "Default border radius used by most components", + "borderColor": "Border Color", + "borderColorDesc": "Default border color used by most components", + "borderWidth": "Border Width", + "borderWidthDesc": "Default border width used by most components", + "borderStyle": "Border Style", + "borderStyleDesc": "Default border style used by most components", + "fontFamily": "Font Family", + "fontFamilyDesc": "Default font family used by most components", + "chart": "Chart Style", + "chartDesc": "Here you can place eCharts Theme JSON to define the style of your charts in all Details.", + "echartsJson": "You can use here the Theme JSON Generator. Copy the JSON from the Generator and paste it here.", + "margin": "Margin", + "marginDesc": "Default margin typically used for most components", + "padding": "Padding", + "paddingDesc": "Default padding typically used for most components", + "containerHeaderPadding": "Header Padding", + "containerheaderpaddingDesc": "Default header padding typically used for most components", + "gridColumns": "Grid Columns", + "gridColumnsDesc": "Default number of columns typically used for most containers", + "loadingIndicators": "Loading Indicators", + "showComponentLoadingIndicators": "Show loading indicators when component load", + "showDataLoadingIndicators": "Show indicators during data loading", + "dataLoadingIndicator": "Data loading indicator", + "background": "Background Styles", + "gridSettings": "Grid Settings", + "gridRowHeight": "Grid Row Height", + "gridRowHeightDesc": "Height of each row in grid", + "gridRowCount": "Grid Row Count", + "gridRowCountDesc": "Max. number of rows in grid", + "gridPaddingX": "Horizontal Padding", + "gridPaddingXDesc": "Canvas horizontal padding", + "gridPaddingY": "Vertical Padding", + "gridPaddingYDesc": "Canvas vertical padding", + "gridBgImage": "Background Image", + "gridBgImageDesc": "Canvas background image", + "gridBgImageRepeat": "Background Image Repeat", + "gridBgImageRepeatDesc": "Canvas background image repeat", + "gridBgImageSize": "Background Image Size", + "gridBgImageSizeDesc": "Canvas background image size", + "gridBgImagePosition": "Background Image Position", + "gridBgImagePositionDesc": "Canvas background image position", + "gridBgImageOrigin": "Background Image Origin", + "gridBgImageOriginDesc": "Canvas background image origin", }, "pluginSetting": { - "title": "Plugins", - "npmPluginTitle": "npm Plugins", - "npmPluginDesc": "Set Up npm Plugins for All Applications in the Current Workspace.", - "npmPluginEmpty": "No npm Plugins Were Added.", - "npmPluginAddButton": "Add a npm Plugin", - "saveSuccess": "Saved Successfully" + "title": "Plugins", + "npmPluginTitle": "npm Plugins", + "npmPluginDesc": "Set Up npm Plugins for All Applications in the Current Workspace.", + "npmPluginEmpty": "No npm Plugins Were Added.", + "npmPluginAddButton": "Add a npm Plugin", + "saveSuccess": "Saved Successfully" }, "advanced": { - "title": "Advanced", - "defaultHomeTitle": "Default Homepage", - "defaultHomeHelp": "The Homepage is the App All Non-Developers Will See by Default When They Log In. Note: Make Sure the Selected App is Accessible to Non-Developers.", - "defaultHomePlaceholder": "Select the Default Homepage", - "saveBtn": "Save", - "preloadJSTitle": "Preload JavaScript", - "preloadJSHelp": "Set Up Preloaded JavaScript Code for All Apps in the Current Workspace.", - "preloadCSSTitle": "Preload CSS", - "preloadCSSHelp": "Set Up Preloaded CSS Code for All Apps in the Current Workspace.", - "preloadCSSApply": "Apply to the Homepage of the Workspace", - "preloadLibsTitle": "JavaScript Library", - "preloadLibsHelp": "Set Up Preloaded JavaScript Libraries for All Applications in the Current Workspace, and the System Has Built-In lodash, day.js, uuid, numbro for Direct Use. JavaScript Libraries are Loaded Before the App is Initialized, So There is a Certain Impact on App Performance.", - "preloadLibsEmpty": "No JavaScript Libraries Were Added", - "preloadLibsAddBtn": "Add a Library", - "saveSuccess": "Saved Successfully", - "AuthOrgTitle": "Workspace Welcome Screen", - "AuthOrgDescrition": "The URL for Your Users to Sign In to the Current Workspace.", - "APIConsumption": "API Consumption", - "APIConsumptionDescription": "Here you can see the API Consumption for All Apps in the Current Workspace.", - "overallAPIConsumption": "Overall API Consumption in this Workspace till now", - "lastMonthAPIConsumption": "Last Month API Consumption, in this Workspace", - "npmRegistryTitle": "Custom NPM Registry", - "npmRegistryHelp": "Setup a custom NPM Registry to enable fetching of plugins from a private NPM registry.", - "showHeaderInPublicApps": "Show Header In Public View", - "showHeaderInPublicAppsHelp": "Set visibility of header in public view for all apps", - }, + "title": "Advanced", + "defaultHomeTitle": "Default Homepage", + "defaultHomeHelp": "The Homepage is the App All Non-Developers Will See by Default When They Log In. Note: Make Sure the Selected App is Accessible to Non-Developers.", + "defaultHomePlaceholder": "Select the Default Homepage", + "saveBtn": "Save", + "preloadJSTitle": "Preload JavaScript", + "preloadJSHelp": "Set Up Preloaded JavaScript Code for All Apps in the Current Workspace.", + "preloadCSSTitle": "Preload CSS", + "preloadCSSHelp": "Set Up Preloaded CSS Code for All Apps in the Current Workspace.", + "preloadCSSApply": "Apply to the Homepage of the Workspace", + "preloadLibsTitle": "JavaScript Library", + "preloadLibsHelp": "Set Up Preloaded JavaScript Libraries for All Applications in the Current Workspace, and the System Has Built-In lodash, day.js, uuid, numbro for Direct Use. JavaScript Libraries are Loaded Before the App is Initialized, So There is a Certain Impact on App Performance.", + "preloadLibsEmpty": "No JavaScript Libraries Were Added", + "preloadLibsAddBtn": "Add a Library", + "saveSuccess": "Saved Successfully", + "AuthOrgTitle": "Workspace Welcome Screen", + "AuthOrgDescrition": "The URL for Your Users to Sign In to the Current Workspace.", + "APIConsumption": "API Consumption", + "APIConsumptionDescription": "Here you can see the API Consumption for All Apps in the Current Workspace.", + "overallAPIConsumption": "Overall API Consumption in this Workspace till now", + "lastMonthAPIConsumption": "Last Month API Consumption, in this Workspace", + "npmRegistryTitle": "Custom NPM Registry", + "npmRegistryHelp": "Setup a custom NPM Registry to enable fetching of plugins from a private NPM registry.", + "showHeaderInPublicApps": "Show Header In Public View", + "showHeaderInPublicAppsHelp": "Set visibility of header in public view for all apps", + }, + + // sixteenth part + "branding": { - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": ".JPG, .SVG or .PNG Only", - "faviconTitle": "Favicon", - "faviconHelp": ".JPG, .SVG or .PNG Only", - "brandNameTitle": "Brand Name", - "headColorTitle": "Head Color", - "save": "Save", - "saveSuccessMsg": "Saved Successfully", - "upload": "Click to Upload" + "title": "Branding Settings", + "general": "General Settings", + "selectWorkspace": "Select Workspace", + "brandingName": "Branding Name", + "brandingNamePlaceholder": "Enter branding name", + "brandingDescription": "Branding Description", + "brandingDescriptionPlaceholder": "Enter branding description", + "logoSection": "Logos", + "logo": "Logo", + "logoHelp": "Upload your company's logo in SVG or PNG format.", + "logoUrlHelp": "Provide valid image url for Logo.", + "logoUrlPlaceholder" : "Provider image url for Logo", + "squareLogo": "Square Logo", + "squareLogoHelp": "Upload a square version of your logo in SVG or PNG format.", + "squareLogoUrlHelp": "Provide valid image url for Square Logo.", + "squareLogoUrlPlaceholder": "Provide url for Square Logo.", + "colorFontSection": "Colors and Fonts", + "mainBrandingColor": "Main Branding Color", + "mainBrandingColorHelp": "Choose the primary color for your branding.", + "editorHeaderColor": "App Header Color", + "editorHeaderColorHelp": "Choose the color for the app's header.", + "adminSidebarColor": "Admin Sidebar Color", + "adminSidebarColorHelp": "Choose the color for the admin's sidebar.", + "adminSidebarFontColor": "Admin Sidebar Font Color", + "adminSidebarFontColorHelp": "Choose the font color for the admin's sidebar.", + "adminSidebarActiveBgColor": "Admin Sidebar Selected Item's Backround Color", + "adminSidebarActiveBgColorHelp": "Choose the selected item's background color for the admin's sidebar.", + "adminSidebarActiveFontColor": "Admin Sidebar Selected Item's Font Color", + "adminSidebarActiveFontColorHelp": "Choose the selected item's font color for the admin's sidebar.", + "editorSidebarColor": "Editor Sidebar Color", + "editorSidebarColorHelp": "Choose the color for the editor's sidebar.", + "editorSidebarFontColor": "Editor Sidebar Font Color", + "editorSidebarFontColorHelp": "Choose the font color for the editor's sidebar.", + "editorSidebarActiveBgColor": "Editor Sidebar Selected Item's Backround Color", + "editorSidebarActiveBgColorHelp": "Choose the selected item's background color for the editor's sidebar.", + "editorSidebarActiveFontColor": "Editor Sidebar Selected Item's Font Color", + "editorSidebarActiveFontColorHelp": "Choose the selected item's font color for the editor's sidebar.", + "font": "Font", + "fontHelp": "Select a font from Google Fonts for your application.", + "textSection": "Texts and Pages", + "errorPage": "Error Page Text", + "errorPageHelp": "Enter the text displayed on the error page.", + "signUpPage": "Sign-Up Page Text", + "signUpPageHelp": "Enter the text displayed on the sign-up page.", + "loggedOutPage": "Logged-Out Page Text", + "loggedOutPageHelp": "Enter the text displayed on the logged-out page.", + "standardDescription": "Standard Description", + "standardDescriptionHelp": "Enter the standard description for SEO meta information.", + "standardTitle": "Standard Title", + "standardTitleHelp": "Enter the standard title for SEO meta information.", + "showDocumentation": "Show Documentation", + "submitIssue": "Allow Submit Issue", + "whatsNew": "Enable What's New", + "saveButton": "Save Settings", + "errorPageImage" : "Upload an image for the Error Page in SVG or PNG format.", + "errorPageImageUrl" : "Image URL for the Error Page", + "errorPageImageUrlPlaceholder" : "Provider image url for Error Page", + "errorPageImageUrlHelp" : "Provider a valid image url to show on Error Page.", + "signUpPageImage" : "Upload an image for the Sign Up Page in SVG or PNG format.", + "signUpPageImageUrl" : "Image URL for the Sign Up Page", + "signUpPageImageUrlPlaceholder" : "Provider image url for Sign Up Page", + "signUpPageImageUrlHelp" : "Provider a valid image url to show on Sign Up Page.", + "loggedOutPageImage" : "Upload an image for the Logged-out Page in SVG or PNG format.", + "showDocumentationSection": "Documentation Link Settings", + "showWhatsNewSection" : "Whats New Link Settings", + "documentationLink": "Documentation Link", + "documentationLinkPlaceholder": "Enter the URL for your documentation...", + "documentationLinkHelp": "Provide a valid URL that users can visit for documentation.", + "whatsNewSection": "Documentation Settings", + "whatsNewLink": "What's New Link", + "whatsNewLinkPlaceholder": "Enter the URL for your documentation...", + "whatsNewLinkHelp": "Provide a valid URL that users can visit for your news.", + "deleteBranding": "Delete Branding", + "deleteBrandingContent": "Are you sure you want to delete \"{orgName}\" branding?", + "fetchBrandingError": "Something went wrong while fetching branding details. Please try again.", + "upload": "Upload" }, "networkMessage": { - "200": "Success", - "201": "Created", - "204": "No Content", - "400": "Bad Request", - "404": "Not Found", - "500": "Busy Service, Please Try Again Later", - "0": "Failed to Connect to Server, Please Check Your Network", - "401": "Authentication Failed, Please Log On Again", - "403": "No Permission, Please Contact the Administrator for Authorization", - "timeout": "Request Timeout" + "200": "Success", + "201": "Created", + "204": "No Content", + "400": "Bad Request", + "404": "Not Found", + "500": "Busy Service, Please Try Again Later", + "0": "Failed to Connect to Server, Please Check Your Network", + "401": "Authentication Failed, Please Log On Again", + "403": "No Permission, Please Contact the Administrator for Authorization", + "timeout": "Request Timeout" }, "share": { - "title": "Share", - "viewer": "Viewer", - "editor": "Editor", - "owner": "Owner", - "datasourceViewer": "Can Use", - "datasourceOwner": "Can Manage" + "title": "Share", + "viewer": "Viewer", + "editor": "Editor", + "owner": "Owner", + "datasourceViewer": "Can Use", + "datasourceOwner": "Can Manage" }, "debug": { - "title": "Title", - "switch": "Switch Component: " + "title": "Title", + "switch": "Switch Component: " }, "module": { - "emptyText": "No Data", - "docLink": "Read More About Modules...", - "documentationText": "Modules are complete Applications, that can get included and repeated in other Applications and it functions just like a single component. As modules can get embedded, they need to be able to interact with your outside apps or websites. This four settings help to support communication with a Module.", - "circularReference": "Circular Reference, Current Module/Application Cannot Be Used!", - "emptyTestInput": "The Current Module Has No Input to Test", - "emptyTestMethod": "The Current Module Has No Method to Test", - "name": "Name", - "input": "Input", - "params": "Params", - "emptyParams": "No Params Has Been Added", - "emptyInput": "No Input Has Been Added", - "emptyMethod": "No Method Has Been Added", - "emptyOutput": "No Output Has Been Added", - "data": "Data", - "string": "String", - "number": "Number", - "array": "Array", - "boolean": "Boolean", - "query": "Query", - "autoScaleCompHeight": "Component Height Scales with Container", - "excuteMethod": "Execute Method {name}", - "method": "Method", - "action": "Action", - "output": "Output", - "nameExists": "Name {name} Already Exist", - "eventTriggered": "Event {name} is Triggered", - "globalPromptWhenEventTriggered": "Displays a Global Prompt When an Event is Triggered", - "emptyEventTest": "The Current Module Has No Events to Test", - "emptyEvent": "No Event Has Been Added", - "event": "Event" + "folderNotEmpty": "Folder is not empty", + "emptyText": "No Data", + "docLink": "Read More About Modules...", + "documentationText" : "Modules are complete Applications, that can get included and repeated in other Applications and it functions just like a single component. As modules can get embedded, they need to be able to interact with your outside apps or websites. This four settings help to support communication with a Module.", + "circularReference": "Circular Reference, Current Module/Application Cannot Be Used!", + "emptyTestInput": "The Current Module Has No Input to Test", + "emptyTestMethod": "The Current Module Has No Method to Test", + "name": "Name", + "input": "Input", + "params": "Params", + "emptyParams": "No Params Has Been Added", + "emptyInput": "No Input Has Been Added", + "emptyMethod": "No Method Has Been Added", + "emptyOutput": "No Output Has Been Added", + "data": "Data", + "string": "String", + "number": "Number", + "array": "Array", + "boolean": "Boolean", + "query": "Query", + "autoScaleCompHeight": "Component Height Scales with Container", + "excuteMethod": "Execute Method {name}", + "method": "Method", + "action": "Action", + "output": "Output", + "nameExists": "Name {name} Already Exist", + "eventTriggered": "Event {name} is Triggered", + "globalPromptWhenEventTriggered": "Displays a Global Prompt When an Event is Triggered", + "emptyEventTest": "The Current Module Has No Events to Test", + "emptyEvent": "No Event Has Been Added", + "event": "Event" }, "resultPanel": { - "returnFunction": "The Return Value is a Function.", - "consume": "{time}", - "JSON": "Show JSON" + "returnFunction": "The Return Value is a Function.", + "consume": "{time}", + "JSON": "Show JSON" }, "createAppButton": { - "creating": "Creating...", - "created": "Create {name}" + "creating": "Creating...", + "created": "Create {name}" }, "apiMessage": { - "authenticationFail": "User Authentication Failed, Please Sign In Again", - "verifyAccount": "Need to Verify Account", - "functionNotSupported": "The Current Version Does Not Support This Function. Please Contact the Lowcoder Business Team to Upgrade Your Account" + "authenticationFail": "User Authentication Failed, Please Sign In Again", + "verifyAccount": "Need to Verify Account", + "functionNotSupported": "The Current Version Does Not Support This Function. Please Contact the Lowcoder Business Team to Upgrade Your Account" }, "globalErrorMessage": { - "createCompFail": "Create Component {comp} Failed", - "notHandledError": "{method} Method Not Executed" + "createCompFail": "Create Component {comp} Failed", + "notHandledError": "{method} Method Not Executed" }, "aggregation": { - "navLayout": "Navigation Bar", - "chooseApp": "Choose App", - "iconTooltip": "Support Image src Link or Base64 String like data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Hidden for Unauthorized Users", - "queryParam": "URL Query Params", - "hashParam": "URL Hash Params", - "tabBar": "Tab Bar", - "emptyTabTooltip": "Configure This Page on the Right Pane" - }, + "navLayout": "Navigation Bar", + "chooseApp": "Choose App", + "iconTooltip": "Support Image src Link or Base64 String like data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Hidden for Unauthorized Users", + "queryParam": "URL Query Params", + "hashParam": "URL Hash Params", + "tabBar": "Tab Bar", + "emptyTabTooltip": "Configure This Page on the Right Pane" + }, + + // seventeenth part + + "appSetting": { - "title": "General App Settings", - "450": "450px (Phone)", - "800": "800px (Tablet)", - "1440": "1440px (Laptop)", - "1920": "1920px (Wide Screen)", - "3200": "3200px (Super Large Screen)", - "autofill": "Autofill", - "userDefined": "Custom", - "default": "Default", - "tooltip": "Close the Popover After Setting", - "canvasMaxWidth": "Maximum Canvas Width for this App", - "userDefinedMaxWidth": "Custom Maximum Width", - "inputUserDefinedPxValue": "Please Enter a Custom Pixel Value", - "maxWidthTip": "Max Width Should Be Greater Than or Equal to 350", - "themeSetting": "Applied Style Theme", - "themeSettingDefault": "Default", - "themeCreate": "Create Theme", - "appTitle": "Title", - "appDescription": "Description", - "appCategory": "Category", - "showPublicHeader": "Show header in public view" + "title": "General App Settings", + "450": "450px (Phone)", + "800": "800px (Tablet)", + "1440": "1440px (Laptop)", + "1920": "1920px (Wide Screen)", + "3200": "3200px (Super Large Screen)", + "autofill": "Autofill", + "userDefined": "Custom", + "default": "Default", + "tooltip": "Close the Popover After Setting", + "canvasMaxWidth": "Maximum Canvas Width for this App", + "userDefinedMaxWidth": "Custom Maximum Width", + "inputUserDefinedPxValue": "Please Enter a Custom Pixel Value", + "maxWidthTip": "Max Width Should Be Greater Than or Equal to 350", + "themeSetting": "Applied Style Theme", + "themeSettingDefault": "Default", + "themeCreate": "Create Theme", + "appTitle": "Title", + "appDescription": "Description", + "appCategory": "Category", + "showPublicHeader": "Show header in public view", + "canvas": "Canvas Settings", + "gridColumns": "Grid Columns", + "gridRowHeight": "Grid Row Height", + "gridRowCount": "Grid Row Count", + "gridPaddingX": "Canvas Horizontal Padding", + "gridPaddingY": "Canvas Vertical Padding", + "gridBgImage": "Background Image", + "gridBgImageRepeat": "Background Image Repeat", + "gridBgImageSize": "Background Image Size", + "gridBgImagePosition": "Background Image Position", + "gridBgImageOrigin": "Background Image Origin" }, "customShortcut": { - "title": "Custom Shortcuts", - "shortcut": "Shortcut", - "action": "Action", - "empty": "No Shortcuts", - "placeholder": "Press Shortcut", - "otherPlatform": "Other", - "space": "Space" + "title": "Custom Shortcuts", + "shortcut": "Shortcut", + "action": "Action", + "empty": "No Shortcuts", + "placeholder": "Press Shortcut", + "otherPlatform": "Other", + "space": "Space" }, "profile": { - "orgSettings": "Workspace Settings", - "switchOrg": "Switch Workspace", - "joinedOrg": "My Workspaces", - "createOrg": "Create Workspace", - "logout": "Log Out", - "personalInfo": "My Profile", - "bindingSuccess": "Binding {sourceName} Success", - "uploadError": "Upload Error", - "editProfilePicture": "Modify", - "saveUserNameTooltip": "Hit Enter to Save your new NicName. If you see your Email, it means that we just hijacked it as Username and you can change it to a better one. Your Email as technical username stays untouched.", - "changeAvatarTooltip": "You can Upload PNG or JPG files", - "nameCheck": "Name Cannot Be Empty", - "name": "Name: ", - "namePlaceholder": "Please Enter Your Name", - "toBind": "To Bind", - "binding": "Is Binding", - "bindError": "Parameter Error, Currently Not Supported Binding.", - "bindName": "Bind {name}", - "loginAfterBind": "After Binding, You Can Use {name} to Log In", - "bindEmail": "Bind Email:", - "email": "Email", - "emailCheck": "Please Enter a Valid Email", - "emailPlaceholder": "Please Enter Your Email", - "submit": "Submit", - "bindEmailSuccess": "Email Binding Success", - "passwordModifiedSuccess": "Password Changed Successfully", - "passwordSetSuccess": "Password Set Successfully", - "oldPassword": "Old Password:", - "inputCurrentPassword": "Please Enter Your Current Password", - "newPassword": "New Password:", - "inputNewPassword": "Please Enter Your New Password", - "confirmNewPassword": "Confirm New Password:", - "inputNewPasswordAgain": "Please Enter Your New Password Again", - "password": "Password:", - "modifyPassword": "Modify Password", - "setPassword": "Set Password", - "alreadySetPassword": "Password Set", - "setPassPlaceholder": "You Can Login with Password", - "setPassAfterBind": "You Can Set Password After Account Bind", - "socialConnections": "Social Connections", - "changeAvatar": "Change Avatar", - "about": "About", - "userId": "User ID", - "createdAt": "Created At", - "currentOrg": "Current Organization", - "settings": "Settings", - "uiLanguage": "UI Language", - "info": "Info", - "createdApps": "Your Created Apps", - "createdModules": "Your Created Modules", - "sharedApps": "Apps Shared with You", - "sharedModules": "Modules Shared with You", - "onMarketplace": "On Marketplace", - "howToPublish": "How to publish on Marketplace", - "memberOfOrgs": "Workspaces Membership", - "apiKeys": "API Keys", - "createApiKey": "Create API Key", - "apiKeyName": "Name", - "apiKeyDescription": "Description", - "apiKeyCopy": "Click the Api Key to get the value in your clipboard", - "apiKey": "API Key", - "deleteApiKey": "Delete API Key", - "deleteApiKeyContent": "Are you sure you want to delete this API key?", - "deleteApiKeyError": "Something went wrong. Please try again." + "orgSettings": "Workspace Settings", + "switchOrg": "Switch Workspace", + "joinedOrg": "My Workspaces", + "createOrg": "Create Workspace", + "logout": "Log Out", + "personalInfo": "My Profile", + "bindingSuccess": "Binding {sourceName} Success", + "uploadError": "Upload Error", + "editProfilePicture": "Modify", + "saveUserNameTooltip": "Hit Enter to Save your new NicName. If you see your Email, it means that we just hijacked it as Username and you can change it to a better one. Your Email as technical username stays untouched.", + "changeAvatarTooltip": "You can Upload PNG or JPG files", + "nameCheck": "Name Cannot Be Empty", + "name": "Name: ", + "namePlaceholder": "Please Enter Your Name", + "toBind": "To Bind", + "binding": "Is Binding", + "bindError": "Parameter Error, Currently Not Supported Binding.", + "bindName": "Bind {name}", + "loginAfterBind": "After Binding, You Can Use {name} to Log In", + "bindEmail": "Bind Email:", + "email": "Email", + "emailCheck": "Please Enter a Valid Email", + "emailPlaceholder": "Please Enter Your Email", + "submit": "Submit", + "bindEmailSuccess": "Email Binding Success", + "passwordModifiedSuccess": "Password Changed Successfully", + "passwordSetSuccess": "Password Set Successfully", + "oldPassword": "Old Password:", + "inputCurrentPassword": "Please Enter Your Current Password", + "newPassword": "New Password:", + "inputNewPassword": "Please Enter Your New Password", + "confirmNewPassword": "Confirm New Password:", + "inputNewPasswordAgain": "Please Enter Your New Password Again", + "password": "Password:", + "modifyPassword": "Modify Password", + "setPassword": "Set Password", + "alreadySetPassword": "Password Set", + "setPassPlaceholder": "You Can Login with Password", + "setPassAfterBind": "You Can Set Password After Account Bind", + "socialConnections": "Social Connections", + "changeAvatar": "Change Avatar", + "about": "About", + "userId": "User ID", + "createdAt": "Created At", + "currentOrg": "Current Organization", + "settings": "Settings", + "uiLanguage": "UI Language", + "info": "Info", + "createdApps": "Your Created Apps", + "createdModules": "Your Created Modules", + "sharedApps": "Apps Shared with You", + "sharedModules": "Modules Shared with You", + "onMarketplace": "On Marketplace", + "howToPublish": "How to publish on Marketplace", + "memberOfOrgs": "Workspaces Membership", + "apiKeys": "API Keys", + "createApiKey": "Create API Key", + "apiKeyInfo": "Make sure to copy your new API key now. You won't be able to see it again.", + "apiKeyName": "Name", + "apiKeyDescription": "Description", + "apiKeyCopy": "Click the Api Key to get the value in your clipboard", + "apiKey": "API Key", + "deleteApiKey": "Delete API Key", + "deleteApiKeyContent": "Are you sure you want to delete this API key?", + "deleteApiKeyError": "Something went wrong. Please try again." }, "shortcut": { - "shortcutList": "Keyboard Shortcuts", - "click": "Click", - "global": "Global", - "toggleShortcutList": "Toggle Keyboard Shortcuts", - "editor": "Editor", - "toggleLeftPanel": "Toggle Left Pane", - "toggleBottomPanel": "Toggle Bottom Pane", - "toggleRightPanel": "Toggle Right Pane", - "toggleAllPanels": "Toggle All Panes", - "preview": "Preview", - "undo": "Undo", - "redo": "Redo", - "showGrid": "Show Grid", - "component": "Component", - "multiSelect": "Select Multiple", - "selectAll": "Select All", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "move": "Move", - "zoom": "Resize", - "delete": "Delete", - "deSelect": "Deselect", - "queryEditor": "Query Editor", - "excuteQuery": "Run Current Query", - "editBox": "Text Editor", - "formatting": "Format", - "openInLeftPanel": "Open in Left Pane" - }, + "shortcutList": "Keyboard Shortcuts", + "click": "Click", + "global": "Global", + "toggleShortcutList": "Toggle Keyboard Shortcuts", + "editor": "Editor", + "toggleLeftPanel": "Toggle Left Pane", + "toggleBottomPanel": "Toggle Bottom Pane", + "toggleRightPanel": "Toggle Right Pane", + "toggleAllPanels": "Toggle All Panes", + "preview": "Preview", + "undo": "Undo", + "redo": "Redo", + "showGrid": "Show Grid", + "component": "Component", + "multiSelect": "Select Multiple", + "selectAll": "Select All", + "copy": "Copy", + "cut": "Cut", + "paste": "Paste", + "move": "Move", + "zoom": "Resize", + "delete": "Delete", + "deSelect": "Deselect", + "queryEditor": "Query Editor", + "excuteQuery": "Run Current Query", + "editBox": "Text Editor", + "formatting": "Format", + "openInLeftPanel": "Open in Left Pane" + }, + + // eighteenth part + + "help": { - "videoText": "Overview", - "onBtnText": "OK", - // eslint-disable-next-line only-ascii/only-ascii - "permissionDenyTitle": "💡 Unable to Create a New Application or Data Source?", - "permissionDenyContent": "You Don't Have Permission to Create the Application and Data Source. Please Contact the Administrator to Join the Developer Group.", - "appName": "Tutorial Application", - "chat": "Chat with Us", - "docs": "View Documentation", - "editorTutorial": "Editor Tutorial", - "update": "What's New?", - "version": "Version", - "versionWithColon": "Version: ", - "submitIssue": "Submit an Issue" + "videoText": "Overview", + "onBtnText": "OK", + // eslint-disable-next-line only-ascii/only-ascii + "permissionDenyTitle": "💡 Unable to Create a New Application or Data Source?", + "permissionDenyContent": "You Don't Have Permission to Create the Application and Data Source. Please Contact the Administrator to Join the Developer Group.", + "appName": "Tutorial Application", + "chat": "Chat with Us", + "docs": "View Documentation", + "editorTutorial": "Editor Tutorial", + "update": "What's New?", + "version": "Version", + "versionWithColon": "Version: ", + "submitIssue": "Submit an Issue" }, "header": { - "nameCheckMessage": "The Name Cannot Be Empty", - "viewOnly": "View Only", - "recoverAppSnapshotTitle": "Restore This Version?", - "recoverAppSnapshotContent": "Restore Current App to the Version Created at {time}.", - "recoverAppSnapshotMessage": "Restore This Version", - "returnEdit": "Return to Editor", - "deploy": "Publish", - "export": "Export to JSON", - "editName": "Edit Name", - "duplicate": "Duplicate {type}", - "snapshot": "History", - "scriptsAndStyles": "Scripts and Style", - "appSettings": "App Settings", - "preview": "Preview", - "editError": "History Preview Mode, No Operation is Supported.", - "clone": "Clone", - "editorMode_layout": "Layout", - "editorMode_logic": "Logic", - "editorMode_both": "Both", - "editorMode_layout_tooltip": "Customise the component's appearance and layout, in the right window. Adjust how it looks, styles, and animates.", - "editorMode_logic_tooltip": "Set up how your component works and interacts, in the right window. Manage its content and interactive behaviours." + "nameCheckMessage": "The Name Cannot Be Empty", + "viewOnly": "View Only", + "recoverAppSnapshotTitle": "Restore This Version?", + "recoverAppSnapshotContent": "Restore Current App to the Version Created at {time}.", + "recoverAppSnapshotMessage": "Restore This Version", + "returnEdit": "Return to Editor", + "deploy": "Publish", + "export": "Export to JSON", + "editName": "Edit Name", + "duplicate": "Duplicate {type}", + "snapshot": "History", + "scriptsAndStyles": "Scripts and Style", + "appSettings": "App Settings", + "preview": "Preview", + "editError": "History Preview Mode, No Operation is Supported.", + "clone": "Clone", + "editorMode_layout": "Layout", + "editorMode_logic": "Logic", + "editorMode_both": "Both", + "editorMode_layout_tooltip": "Customise the component's appearance and layout, in the right window. Adjust how it looks, styles, and animates.", + "editorMode_logic_tooltip": "Set up how your component works and interacts, in the right window. Manage its content and interactive behaviours.", + "AppEditingBlocked": "App Editing Blocked for:", + "AppEditingBlockedHint": "Changes will not be saved while another user is editing this app.", + "AppEditingBlockedMessage": "Please wait before check the editing status of the App.", + "AppEditingBlockedCheckStatus": "Check App Status", + "AppEditingBlockedSomeone": "Someone", + "AppEditingBlockedMessageSnipped": "is editing this app", }, "userAuth": { - "registerByEmail": "Sign Up", - "email": "Email:", - "inputEmail": "Please enter your email", - "inputValidEmail": "Please enter a valid email", - "forgotPassword": "Forgot Password", - "forgotPasswordInfo": "Enter your email and we'll send you a link to reset your password.", - "forgotPasswordSuccess": "Please check your email for reset password link.", - "forgotPasswordError": "Something went wrong. Please try again.", - "register": "Sign Up", - "userLogin": "Sign In", - "login": "Sign In", - "bind": "Bind", - "passwordCheckLength": "At Least {min} Characters", - "passwordCheckContainsNumberAndLetter": "Must Contain Letters and Numbers", - "passwordCheckSpace": "Cannot Contain Whitespace Characters", - "welcomeTitle": "Welcome to {productName}", - "inviteWelcomeTitle": "{username} invites You to work together", - "terms": "Terms", - "privacy": "Privacy Policy", - "registerHint": "I Have Read and Agree to the", - "chooseAccount": "Choose Your Account", - "signInLabel": "Sign In with {name}", - "bindAccount": "Bind Account", - "scanQrCode": "Scan the QR Code with {name}", - "invalidThirdPartyParam": "Invalid Third-Party Param", - "account": "Account", - "inputAccount": "Please Enter Your Account", - "ldapLogin": "LDAP Sign In", - "resetPassword": "Reset Password", - "resetPasswordDesc": "Reset User {name}'s Password. A New Password Will Be Generated After Reset.", - "resetSuccess": "Reset Succeeded", - "resetSuccessDesc": "Password Reset Succeeded. The New Password is: {password}", - "resetLostPasswordSuccess": "Password Reset Succeeded. Please login again.", - "copyPassword": "Copy Password", - "poweredByLowcoder": "Powered by: Lowcoder.cloud" + "registerByEmail": "Sign Up", + "email": "Email:", + "inputEmail": "Please enter your email", + "inputValidEmail": "Please enter a valid email", + "forgotPassword": "Forgot Password", + "forgotPasswordInfo": "Enter your email and we'll send you a link to reset your password.", + "forgotPasswordSuccess": "Please check your email for reset password link.", + "forgotPasswordError": "Something went wrong. Please try again.", + "register": "Sign Up", + "userLogin": "Sign In", + "login": "Sign In", + "bind": "Bind", + "passwordCheckLength": "At Least {min} Characters", + "passwordCheckContainsNumberAndLetter": "Must Contain Letters and Numbers", + "passwordCheckSpace": "Cannot Contain Whitespace Characters", + "welcomeTitle": "Welcome to {productName}", + "inviteWelcomeTitle": "{username} invites You to work together", + "terms": "Terms", + "privacy": "Privacy Policy", + "registerHint": "I Have Read and Agree to the", + "chooseAccount": "Choose Your Account", + "signInLabel": "Sign In with {name}", + "bindAccount": "Bind Account", + "scanQrCode": "Scan the QR Code with {name}", + "invalidThirdPartyParam": "Invalid Third-Party Param", + "account": "Account", + "inputAccount": "Please Enter Your Account", + "ldapLogin": "LDAP Sign In", + "resetPassword": "Reset Password", + "resetPasswordDesc": "Reset User {name}'s Password. A New Password Will Be Generated After Reset.", + "resetSuccess": "Reset Succeeded", + "resetSuccessDesc": "Password Reset Succeeded. The New Password is: {password}", + "resetLostPasswordSuccess": "Password Reset Succeeded. Please login again.", + "copyPassword": "Copy Password", + "poweredByLowcoder": "Powered by: Lowcoder.cloud", + "continue": "Continue", + "enterPassword": "Enter your password", + "selectAuthProvider": "Select Authentication Provider", + "selectWorkspace": "Select your workspace", + "userNotFound": "User not found. Please make sure you entered the correct email." }, "preLoad": { - "jsLibraryHelpText": "Add JavaScript Libraries to Your Current Application via URL Addresses. lodash, day.js, uuid, numbro are Built into the System for Immediate Use. JavaScript Libraries are Loaded Before the Application is Initialized, Which Can Have an Impact on Application Performance.", - "exportedAs": "Exported As", - "urlTooltip": "URL Address of the JavaScript Library, [unpkg.com](https://unpkg.com/) or [jsdelivr.net](https://www.jsdelivr.com/) is Recommended", - "externalLibsHelperText": "Only libraries using the UMD (Universal Module Definition) approach are supported. Read more here: https://github.com/umdjs/umd", - "recommended": "Recommended", - "viewJSLibraryDocument": "Document", - "jsLibraryURLError": "Invalid URL", - "jsLibraryExist": "JavaScript Library Already Exists", - "jsLibraryEmptyContent": "No JavaScript Libraries Added", - "jsLibraryDownloadError": "JavaScript Library Download Error", - "jsLibraryInstallSuccess": "JavaScript Library Installed Successfully", - "jsLibraryInstallFailed": "JavaScript Library Installation Failed", - "jsLibraryInstallFailedCloud": "Perhaps the Library is Not Available in the Sandbox, [Documentation](https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries#manually-import-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{message}", - "add": "Add New", - "jsHelpText": "Add a Global Method or Variable to the Current Application.", - "cssHelpText": "Add Styles to the Current Application. The DOM Structure May Change as the System Iterates. Try to Modify Styles Through Component Properties.", - "scriptsAndStyles": "Scripts and Styles", - "jsLibrary": "JavaScript Library" + "jsLibraryHelpText": "Add JavaScript Libraries to Your Current Application via URL Addresses. lodash, day.js, uuid, numbro are Built into the System for Immediate Use. JavaScript Libraries are Loaded Before the Application is Initialized, Which Can Have an Impact on Application Performance.", + "exportedAs": "Exported As", + "urlTooltip": "URL Address of the JavaScript Library, [unpkg.com](https://unpkg.com/) or [jsdelivr.net](https://www.jsdelivr.com/) is Recommended", + "externalLibsHelperText" : "Only libraries using the UMD (Universal Module Definition) approach are supported. Read more here: https://github.com/umdjs/umd", + "recommended": "Recommended", + "viewJSLibraryDocument": "Document", + "jsLibraryURLError": "Invalid URL", + "jsLibraryExist": "JavaScript Library Already Exists", + "jsLibraryEmptyContent": "No JavaScript Libraries Added", + "jsLibraryDownloadError": "JavaScript Library Download Error", + "jsLibraryInstallSuccess": "JavaScript Library Installed Successfully", + "jsLibraryInstallFailed": "JavaScript Library Installation Failed", + "jsLibraryInstallFailedCloud": "Perhaps the Library is Not Available in the Sandbox, [Documentation](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{message}", + "add": "Add New", + "jsHelpText": "Add a Global Method or Variable to the Current Application.", + "cssHelpText": "Add Styles to the Current Application. The DOM Structure May Change as the System Iterates. Try to Modify Styles Through Component Properties.", + "scriptsAndStyles": "Scripts and Styles", + "jsLibrary": "JavaScript Library" }, "editorTutorials": { - "component": "Component", - "componentContent": "The Right Component Panel offers you many ready made Application Blocks (Components). These Can Be Dragged onto the Canvas for Use. You Can Also Create Your Own Components with a little coding knowledge.", - "canvas": "Canvas", - "canvasContent": "Build your apps on the Canvas with a 'What You See Is What You Get' approach. Simply drag and drop components to design your layout, and use keyboard shortcuts for quick editing like delete, copy, and paste. Once a component is selected, you can fine-tune every detail—from styling and layout to data binding and logical behavior. Plus, enjoy the added benefit of responsive design, ensuring your apps look great on any device.", - "queryData": "Query Data", - "queryDataContent": "You can create Data Queries Here and Connect to Your MySQL, MongoDB, Redis, Airtable, and many Other Data Sources. After Configuring the Query, Click 'Run' to Obtain the Data and continue the Tutorial.", - "compProperties": "Component Properties", - "interactiveDemo": "Interactive Demo", - "interactiveDemoToolTip": "Click to Start an Interactive Demo of this Feature", + "component": "Component", + "componentContent": "The Right Component Panel offers you many ready made Application Blocks (Components). These Can Be Dragged onto the Canvas for Use. You Can Also Create Your Own Components with a little coding knowledge.", + "canvas": "Canvas", + "canvasContent": "Build your apps on the Canvas with a 'What You See Is What You Get' approach. Simply drag and drop components to design your layout, and use keyboard shortcuts for quick editing like delete, copy, and paste. Once a component is selected, you can fine-tune every detail—from styling and layout to data binding and logical behavior. Plus, enjoy the added benefit of responsive design, ensuring your apps look great on any device.", + "queryData": "Query Data", + "queryDataContent": "You can create Data Queries Here and Connect to Your MySQL, MongoDB, Redis, Airtable, and many Other Data Sources. After Configuring the Query, Click 'Run' to Obtain the Data and continue the Tutorial.", + "compProperties": "Component Properties", + "interactiveDemo": "Interactive Demo", + "interactiveDemoToolTip": "Click to Start an Interactive Demo of this Feature", }, "supademos": { - "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", + "transformer" : "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder" : "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate" : "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table" : "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", }, "homeTutorials": { - "createAppContent": "Welcome! Click 'App' and Start to Create Your First Application.", - "createAppTitle": "Create App" + "createAppContent": "Welcome! Click 'App' and Start to Create Your First Application.", + "createAppTitle": "Create App" }, "npmRegistry": { - "npmRegistryEnable": "Enable custom NPM Registry", - "npmRegistryUrl": "NPM Registry Url", - "npmRegistryUrlRequired": "Please input the registry URL", - "npmRegistryUrlInvalid": "Please input a valid URL", - "npmRegistryScope": "Package Scope", - "npmRegistryPattern": "Pattern", - "npmRegistryPatternInvalid": "Please input a valid pattern (starting with @ for oragnizations).", - "npmRegistryAuth": "Authentication", - "npmRegistryAuthType": "Authentication Type", - "npmRegistryAuthCredentials": "Authentication Credentials", - "npmRegistryAuthCredentialsRequired": "Please input the registry credentials", - "npmRegistryAuthCredentialsHelp": "For basic auth provide the base64 encoded username and password in the format 'base64(username:password)', for token auth provide the token.", - }, + "npmRegistryEnable": "Enable custom NPM Registry", + "npmRegistryUrl": "NPM Registry Url", + "npmRegistryUrlRequired": "Please input the registry URL", + "npmRegistryUrlInvalid": "Please input a valid URL", + "npmRegistryScope": "Package Scope", + "npmRegistryPattern": "Pattern", + "npmRegistryPatternInvalid": "Please input a valid pattern (starting with @ for oragnizations).", + "npmRegistryAuth": "Authentication", + "npmRegistryAuthType": "Authentication Type", + "npmRegistryAuthCredentials": "Authentication Credentials", + "npmRegistryAuthCredentialsRequired": "Please input the registry credentials", + "npmRegistryAuthCredentialsHelp": "For basic auth provide the base64 encoded username and password in the format 'base64(username:password)', for token auth provide the token.", + }, + + // nineteenth part + + "history": { - "layout": "'{0}' layout adjustment", - "upgrade": "Upgrade '{0}'", - "delete": "Delete '{0}'", - "add": "Add '{0}'", - "modify": "Modify '{0}'", - "rename": "Rename '{1}' to '{0}'", - "recover": "Recover '{2}' version", - "recoverVersion": "Recover version", - "andSoOn": "and so on", - "timeFormat": "MM DD at hh:mm A", - "emptyHistory": "No history", - "currentVersionWithBracket": " (Current)", - "currentVersion": "Current version", - "justNow": "Just now", - "history": "History" + "layout": "'{0}' layout adjustment", + "upgrade": "Upgrade '{0}'", + "delete": "Delete '{0}'", + "add": "Add '{0}'", + "modify": "Modify '{0}'", + "rename": "Rename '{1}' to '{0}'", + "recover": "Recover '{2}' version", + "recoverVersion": "Recover version", + "andSoOn": "and so on", + "timeFormat": "MM DD at hh:mm A", + "emptyHistory": "No history", + "currentVersionWithBracket": " (Current)", + "currentVersion": "Current version", + "justNow": "Just now", + "history": "History" }, "home": { - "profile": "Your Profile", - "news": "News", - "newsLoading": "It will load some seconds.", - "orgHome": "Homepage (Org)", - "yourOrg": "Your Organization", - "orgHomeTitle": "Organization Homepage", - "appMarketplace": "Application Marketplace", - "allApplications": "Your Apps", - "allModules": "Your Modules", - "allFolders": "Your Folders", - "yourFolders": "Your Folders", - "modules": "Modules", - "module": "Module", - "api": "Lowcoder API", - "trash": "Trash", - "marketplace": "Marketplace", - "allCategories": "All Categories", - "queryLibrary": "Query Library", - "datasource": "Data Sources", - "selectDatasourceType": "Select Data Source Type", - "home": "Home", - "all": "All", - "app": "App", - "navigation": "Navigation", - "navLayout": "PC Navigation", - "navLayoutDesc": "Left-side menu for easy desktop navigation.", - "mobileTabLayout": "Mobile Navigation", - "mobileTabLayoutDesc": "Bottom navigation bar for smooth mobile browsing.", - "folders": "Folders", - "folder": "Folder", - "rootFolder": "Root", - "import": "Import", - "export": "Export to JSON", - "show": "Show", - "inviteUser": "Invite members", - "createFolder": "Create Folder", - "createFolderSubTitle": "Folder name:", - "moveToFolder": "Move to folder", - "moveToTrash": "Move to trash", - "moveToFolderSubTitle": 'Move "{name}" to:', - "folderName": "Folder name:", - "resCardSubTitle": "{time} by {creator}", - "trashEmpty": "Trash is empty.", - "projectEmpty": "Nothing here.", - "projectEmptyCanAdd": "You don't have any apps yet. Click New to get started.", - "name": "Name", - "type": "Type", - "creator": "Created by", - "lastModified": "Last modified", - "deleteTime": "Delete time", - "createTime": "Create time", - "datasourceName": "Data source name", - "databaseName": "Database name", - "nameCheckMessage": "The name cannot be empty", - "deleteElementTitle": "Delete permanently", - "moveToTrashSubTitle": "{type} {name} will be moved to trash.", - "deleteElementSubTitle": "Delete {type} {name} permanently, it cannot be recovered.", - "deleteSuccessMsg": "Deleted successfully", - "deleteErrorMsg": "Deleted error", - "recoverSuccessMsg": "Recovered successfully", - "newDatasource": "New data source", - "creating": "Creating...", - "chooseDataSourceType": "Choose data source type", - "folderAlreadyExists": "The folder already exists", - "newNavLayout": "{userName}'s {name} ", - "newApp": "{userName}'s new {name} ", - "importError": "Import error, {message}", - "exportError": "Export error, {message}", - "importSuccess": "Import success", - "fileUploadError": "File upload error", - "fileFormatError": "File format error", - "groupWithSquareBrackets": "[Group] ", - "allPermissions": "Owner", - "shareLink": "Share link: ", - "copyLink": "Copy link", - "appPublicMessage": "Make the app public. Anyone can view.", - "modulePublicMessage": "Make the module public. Anyone can view.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Publish your App on the Public Marketplace. Anyone can view and copy it from there.", - "moduleMarketplaceMessage": "Publish your Module on the Public Marketplace. Anyone can view and copy it from there.", - "marketplaceGoodPublishing": "Please make sure your app is well-named and easy to use. Remove any sensitive information before publishing. Also, remove local datasources and replace by static built-in temporary data.", - "noMarketplaceApps": "No apps yet in the marketplace", - "errorMarketplaceApps": "Error while loading Marketplace Apps", - "localMarketplaceTitle": "Local Marketplace", - "globalMarketplaceTitle": "Public Marketplace", - "memberPermissionList": "Member permissions: ", - "orgName": "{orgName} admins", - "addMember": "Add members", - "addPermissionPlaceholder": "Please enter a name to search members", - "searchMemberOrGroup": "Search for members or groups: ", - "addPermissionErrorMessage": "Failed to add permission, {message}", - "copyModalTitle": 'Clone "{name}"', - "copyNameLabel": "{type} name", - "copyModalfolderLabel": "Add to folder", - "copyNamePlaceholder": "Please enter a {type} name", - "chooseNavType": "Please choose navigation type", - "createNavigation": "Create Navigation", - "howToUseAPI": "How to use the Open Rest API", - "support": "Support", - }, - "support": { - "supportTitle": "Lowcoder Support", - "supportContent": "If you have any questions or need help, please use the ticket system get your issue solved fast.", - "newSupportTicket": "New Support Ticket", - "ticketTitle": "Title", - "priority": "Priority", - "assignee": "Assignee", - "status": "Ticket Status", - "updatedTime": "Updated Time", - "active": "Active", - "inactive": "Inactive", - "noEmail": "No Email", - "details": "Details", - "reloadTickets": "Reload Tickets", - "createdDate": "Created Date", - "updatedDate": "Updated Date", - "description": "Issue Description", - "subtasks": "Subtasks", - "subtasksProgress": "Progress of all Subtasks", - "attachments": "Issue Attachments", - "comments": "Comments", - "addComment": "Add Comment", - "addAttachment": "Add Attachment", - "edit": "Edit Ticket Description", - "save": "Save Ticket Description", - "cancel": "Cancel", - "submitComment": "Submit Comment", - "upload": "Submit Attachment", - "selectFile": "Select File", - "ticketDescriptionUpdated": "Ticket description updated successfully!", - "ticketDescriptionUpdateFailed": "Failed to update ticket description.", - "writeComment": "Write a comment...", - "ticketCommentAdded": "Comment added successfully!", - "ticketCommentFailed": "Failed to add comment.", - "ticketCommentEmpty": "Please write a comment before submitting.", - "ticketAttachmentUploaded": "Attachment uploaded successfully!", - "ticketAttachmentFailed": "Failed to upload attachment.", - "ticketAttachmentEmpty": "Please select a file to upload.", - "ticketFetchError": "Failed to load the ticket.", - "ticketNotFound": "Ticket not found.", - "addAttachmentFileSize": "File must be smaller than 5MB!", - "goBack": "Go Back", - "noDescription": "No description available.", - "createTicket": "Create a new Support Ticket", - "createTicketTitlePlaceholder": "Enter Title (max 150 chars)", - "createTicketDescriptionTitle": "Describe your problem - the more details, the better:", - "createTicketDescriptionPlaceholder": "Describe the issue in detail, including: 1) Steps to reproduce the issue, 2) Expected behavior versus actual behavior, 3) Code snippets, if applicable, 4) Any specific components, APIs, or configurations affected", - "createTicketSubmit": "Submit Ticket", - "createTicketInfoText": "When your Ticket is created, you can then add Screenshots, Comments in the 'Details' section." - }, + "profile": "Your Profile", + "news": "News", + "newsLoading": "It will load some seconds.", + "orgHome" : "Homepage (Org)", + "yourOrg": "Your Organization", + "orgHomeTitle": "Organization Homepage", + "appMarketplace": "Application Marketplace", + "allApplications": "Your Apps", + "allModules": "Your Modules", + "allFolders": "Your Folders", + "yourFolders" : "Your Folders", + "modules": "Modules", + "module": "Module", + "api" : "Lowcoder API", + "trash": "Trash", + "marketplace": "Marketplace", + "allCategories": "All Categories", + "queryLibrary": "Data Queries", + "datasource": "Data Sources", + "selectDatasourceType": "Select Data Source Type", + "home": "Home", + "all": "All", + "app": "App", + "navigation": "Navigation", + "navLayout": "PC Navigation", + "navLayoutDesc": "Left-side menu for easy desktop navigation.", + "mobileTabLayout": "Mobile Navigation", + "mobileTabLayoutDesc": "Bottom navigation bar for smooth mobile browsing.", + "folders": "Folders", + "folder": "Folder", + "rootFolder": "Root", + "import": "Import", + "export": "Export to JSON", + "show": "Show", + "inviteUser": "Invite members", + "createFolder": "Create Folder", + "createFolderSubTitle": "Folder name:", + "moveToFolder": "Move to folder", + "moveToTrash": "Move to trash", + "moveToFolderSubTitle": 'Move "{name}" to:', + "folderName": "Folder name:", + "resCardSubTitle": "{time} by {creator}", + "trashEmpty": "Trash is empty.", + "projectEmpty": "Nothing here.", + "projectEmptyCanAdd": "You don't have any apps yet. Click New to get started.", + "name": "Name", + "type": "Type", + "creator": "Created by", + "lastModified": "Last modified", + "deleteTime": "Delete time", + "createTime": "Create time", + "datasourceName": "Data source name", + "databaseName": "Database name", + "nameCheckMessage": "The name cannot be empty", + "deleteElementTitle": "Delete permanently", + "moveToTrashSubTitle": "{type} {name} will be moved to trash.", + "deleteElementSubTitle": "Delete {type} {name} permanently, it cannot be recovered.", + "deleteSuccessMsg": "Deleted successfully", + "deleteErrorMsg": "Deleted error", + "recoverSuccessMsg": "Recovered successfully", + "newDatasource": "New data source", + "creating": "Creating...", + "chooseDataSourceType": "Choose data source type", + "folderAlreadyExists": "The folder already exists", + "newNavLayout": "{userName}'s {name} ", + "newApp": "{userName}'s new {name} ", + "importError": "Import error, {message}", + "exportError": "Export error, {message}", + "importSuccess": "Import success", + "fileUploadError": "File upload error", + "fileFormatError": "File format error", + "groupWithSquareBrackets": "[Group] ", + "allPermissions": "Owner", + "appSharingDialogueTitle" : "App Sharing and Permissions", + "appSocialSharing" : "Share Your App and Experience on:", + "appSocialSharingMessage" : "I made this App with Lowcoder, check it out!", + "socialShare" : "Share on", + "shareLink": "Share link: ", + "copyLink": "Copy link", + "appPublicMessage": "Make the app public. Anyone can view.", + "modulePublicMessage": "Make the module public. Anyone can view.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Publish your App on the Public Marketplace. Anyone can view and copy it from there.", + "moduleMarketplaceMessage": "Publish your Module on the Public Marketplace. Anyone can view and copy it from there.", + "marketplaceGoodPublishing": "Please make sure your app is well-named and easy to use. Remove any sensitive information before publishing. Also, remove local datasources and replace by static built-in temporary data.", + "noMarketplaceApps": "No apps yet in the marketplace", + "errorMarketplaceApps": "Error while loading Marketplace Apps", + "localMarketplaceTitle": "Local Marketplace", + "globalMarketplaceTitle": "Public Marketplace", + "memberPermissionList": "Member permissions: ", + "orgName": "{orgName} admins", + "addMember": "Add members", + "addPermissionPlaceholder": "Please enter a name to search members", + "searchMemberOrGroup": "Search for members or groups: ", + "addPermissionErrorMessage": "Failed to add permission, {message}", + "copyModalTitle": 'Clone "{name}"', + "copyNameLabel": "{type} name", + "copyModalfolderLabel": "Add to folder", + "copyNamePlaceholder": "Please enter a {type} name", + "chooseNavType": "Please choose navigation type", + "createNavigation": "Create Navigation", + "howToUseAPI": "How to use the Open Rest API", + "support": "Support", + }, + + "support" : { + "selfUser" : "You", + "supportTitle": "Lowcoder Support", + "supportContent": "If you have any questions or need help, please use the ticket system get your issue solved fast.", + "newSupportTicket": "New Support Ticket", + "ticketTitle": "Title", + "priority": "Priority", + "assignee": "Assignee", + "status": "Ticket Status", + "updatedTime": "Updated Time", + "active": "Active", + "inactive": "Inactive", + "noEmail": "No Email", + "details": "Details", + "reloadTickets": "Reload Tickets", + "createdDate": "Created Date", + "updatedDate": "Updated Date", + "description": "Issue Description", + "subtasks": "Subtasks", + "subtasksProgress": "Progress of all Subtasks", + "attachments": "Issue Attachments", + "comments": "Comments", + "addComment": "Add Comment", + "addAttachment": "Add Attachment", + "edit": "Edit Ticket Description", + "save": "Save Ticket Description", + "cancel": "Cancel", + "submitComment": "Submit Comment", + "upload": "Submit Attachment", + "selectFile": "Select File", + "ticketDescriptionUpdated": "Ticket description updated successfully!", + "ticketDescriptionUpdateFailed": "Failed to update ticket description.", + "writeComment": "Write a comment...", + "ticketCommentAdded": "Comment added successfully!", + "ticketCommentFailed": "Failed to add comment.", + "ticketCommentEmpty": "Please write a comment before submitting.", + "ticketAttachmentUploaded": "Attachment uploaded successfully!", + "ticketAttachmentFailed": "Failed to upload attachment.", + "ticketAttachmentEmpty": "Please select a file to upload.", + "ticketFetchError": "Failed to load the ticket.", + "ticketNotFound": "Ticket not found.", + "addAttachmentFileSize": "File must be smaller than 5MB!", + "goBack": "Go Back", + "noDescription": "No description available.", + "createTicket": "Create a new Support Ticket", + "createTicketTitlePlaceholder": "Enter Title (max 150 chars)", + "createTicketDescriptionTitle": "Describe your problem - the more details, the better:", + "createTicketDescriptionPlaceholder": "Describe the issue in detail, including: 1) Steps to reproduce the issue, 2) Expected behavior versus actual behavior, 3) Code snippets, if applicable, 4) Any specific components, APIs, or configurations affected", + "createTicketSubmit": "Submit Ticket", + "createTicketInfoText": "When your Ticket is created, you can then add Screenshots, Comments in the 'Details' section." + }, + "carousel": { - "dotPosition": "Navigation Dots position", - "autoPlay": "AutoPlay", - "showDots": "Show Navigation Dots" + "dotPosition": "Navigation Dots position", + "autoPlay": "AutoPlay", + "showDots": "Show Navigation Dots" }, + // twentieth part + + "npm": { - "invalidNpmPackageName": "Invalid npm Package Name or URL.", - "pluginExisted": "This npm Plugin Already Existed", - "compNotFound": "Component {compName} Not Found.", - "addPluginModalTitle": "Add Plugin from a npm Repository", - "pluginNameLabel": "npm Package's URL or Name", - "noCompText": "No Components.", - "compsLoading": "Loading...", - "removePluginBtnText": "Remove", - "addPluginBtnText": "Add npm Plugin" + "invalidNpmPackageName": "Invalid npm Package Name or URL.", + "pluginExisted": "This npm Plugin Already Existed", + "compNotFound": "Component {compName} Not Found.", + "addPluginModalTitle": "Add Plugin from a npm Repository", + "pluginNameLabel": "npm Package's URL or Name", + "noCompText": "No Components.", + "compsLoading": "Loading...", + "removePluginBtnText": "Remove", + "addPluginBtnText": "Add npm Plugin" }, "toggleButton": { - "valueDesc": "The Default Value of the Toggle Button, For Example: False", - "trueDefaultText": "Hide", - "falseDefaultText": "Show", - "trueLabel": "Text for True", - "falseLabel": "Text for False", - "trueIconLabel": "Icon for True", - "falseIconLabel": "Icon for False", - "iconPosition": "Icon Position", - "showText": "Show Text", - "alignment": "Alignment", - "showBorder": "Show Border" - }, + "valueDesc": "The Default Value of the Toggle Button, For Example: False", + "trueDefaultText": "Hide", + "falseDefaultText": "Show", + "trueLabel": "Text for True", + "falseLabel": "Text for False", + "trueIconLabel": "Icon for True", + "falseIconLabel": "Icon for False", + "iconPosition": "Icon Position", + "showText": "Show Text", + "alignment": "Alignment", + "showBorder": "Show Border" + }, + // twenty-first part + + "componentDoc": { - "markdownDemoText": "**Lowcoder** | Create software applications for your Company and your Customers with minimal coding experience. Lowcoder is the best Retool, Appsmith or Tooljet Alternative.", - "demoText": "Lowcoder | Create software applications for your Company and your Customers with minimal coding experience. Lowcoder is the best Retool, Appsmith or Tooljet Alternative.", - "submit": "Submit", - "style": "Style", - "danger": "Danger", - "warning": "Warning", - "success": "Success", - "menu": "Menu", - "link": "Link", - "customAppearance": "Custom Appearance", - "search": "Search", - "pleaseInputNumber": "Please Enter a Number", - "mostValue": "Most Value", - "maxRating": "Maximum Rating", - "notSelect": "Not Selected", - "halfSelect": "Half Selection", - "pleaseSelect": "Please Select", - "title": "Title", - "content": "Content", - "componentNotFound": "Component Does Not Exist", - "example": "Examples", - "defaultMethodDesc": "Set the Value of Property {name}", - "propertyUsage": "You Can Read Component-Related Information by Accessing Component Properties by Component Name Anywhere You Can Write JavaScript.", - "property": "Properties", - "propertyName": "Property Name", - "propertyType": "Type", - "propertyDesc": "Description", - "event": "Events", - "eventName": "Event Name", - "eventDesc": "Description", - "mehtod": "Methods", - "methodUsage": "You have the capability to engage with components via their respective methods, which can be accessed by their designated names within any segment where JavaScript is utilized. Additionally, these components can be activated through the 'Control Component' action, which is triggered in response to specific events", - "methodName": "Method Name", - "methodDesc": "Description", - "showBorder": "Show Border", - "haveTry": "Try It Yourself", - "settings": "Setting", - "settingValues": "Setting Value", - "defaultValue": "Default Value", - "time": "Time", - "date": "Date", - "noValue": "None", - "xAxisType": "X-Axis Type", - "hAlignType": "Horizontal Alignment", - "leftLeftAlign": "Left-Left Alignment", - "leftRightAlign": "Left-Right Alignment", - "topLeftAlign": "Top-Left Alignment", - "topRightAlign": "Top-Right Alignment", - "validation": "Validation", - "required": "Required", - "defaultStartDateValue": "Default Start Date", - "defaultEndDateValue": "Default End Date", - "basicUsage": "Basic Usage", - "basicDemoDescription": "The Following Examples Show the Basic Usage of the Component.", - "noDefaultValue": "No Default Value", - "forbid": "Forbidden", - "placeholder": "Placeholder", - "pleaseInputPassword": "Please Enter a Password", - "password": "Password", - "textAlign": "Text Alignment", - "length": "Length", - "top": "Top", - "pleaseInputName": "Please Enter Your Name", - "userName": "Name", - "fixed": "Fixed", - "responsive": "Responsive", - "workCount": "Word Count", - "cascaderOptions": "Cascader Options", - "pleaseSelectCity": "Please Select a City", - "advanced": "Advanced", - "showClearIcon": "Show Clear Icon", - /* eslint-disable only-ascii/only-ascii */ - appleOptionLabel: "🍎 Apple", - waterMelonOptionLabel: "🍉 Watermelon", - berryOptionLabel: "🍓 Strawberry", - lemonOptionLabel: "🍋 Lemon", - coconutOptionLabel: "🥥 Coconut", - /* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Favorites", - "option": "Option", - "singleFileUpload": "Single File Upload", - "multiFileUpload": "Multiple File Upload", - "folderUpload": "Folder Upload", - "multiFile": "Multiple Files", - "folder": "Folder", - "open": "Open", - "favoriteFruits": "Favorite Fruits", - "pleaseSelectOneFruit": "Select a Fruit", - "notComplete": "Not Complete", - "complete": "Complete", - "echart": "EChart", - "lineChart": "Line Chart", - "basicLineChart": "Basic Line Chart", - "lineChartType": "Line Chart Type", - "stackLineChart": "Stacked Line", - "areaLineChart": "Area Line", - "scatterChart": "Scatter Chart", - "scatterShape": "Scatter Shape", - "scatterShapeCircle": "Circle", - "scatterShapeRect": "Rectangle", - "scatterShapeTri": "Triangle", - "scatterShapeDiamond": "Diamond", - "scatterShapePin": "Pushpin", - "scatterShapeArrow": "Arrow", - "pieChart": "Pie Chart", - "basicPieChart": "Basic Pie Chart", - "pieChatType": "Pie Chart Type", - "pieChartTypeCircle": "Donut Chart", - "pieChartTypeRose": "Rose Chart", - "titleAlign": "Title Position", - "color": "Color", - "dashed": "Dashed", - "imADivider": "I am a Dividing Line", - "tableSize": "Table Size", - "subMenuItem": "SubMenu {num}", - "menuItem": "Menu {num}", - "labelText": "Label", - "labelPosition": "Label - Position", - "labelAlign": "Label - Align", - "optionsOptionType": "Configuration Method", - "styleBackgroundColor": "Background Color", - "styleBorderColor": "Border Color", - "styleColor": "Font Color", - "selectionMode": "Row Selection Mode", - "paginationSetting": "Pagination Setting", - "paginationShowSizeChanger": "Support Users to Modify the Number of Entries per Page", - "paginationShowSizeChangerButton": "Show Size Changer Button", - "paginationShowQuickJumper": "Show Quick Jumper", - "paginationHideOnSinglePage": "Hide When There is Only One Page", - "paginationPageSizeOptions": "Page Size", - "chartConfigCompType": "Chart Type", - "xConfigType": "X Axis Type", - "loading": "Loading", - "disabled": "Disabled", - "minLength": "Minimum Length", - "maxLength": "Maximum Length", - "showCount": "Show Word Count", - "autoHeight": "Height", - "thousandsSeparator": "Thousands Separator", - "precision": "Decimal Places", - "value": "Default Value", - "formatter": "Format", - "min": "Minimum Value", - "max": "Maximum Value", - "step": "Step Size", - "start": "Start Time", - "end": "End Time", - "allowHalf": "Allow Half Selection", - "filetype": "File Type", - "showUploadList": "Show Upload List", - "uploadType": "Upload Type", - "allowClear": "Show Clear Icon", - "minSize": "Minimum File Size", - "maxSize": "Maximum File Size", - "maxFiles": "Maximum Number of Uploaded Files", - "format": "Format", - "minDate": "Minimum Date", - "maxDate": "Maximum Date", - "minTime": "Minimum Time", - "maxTime": "Maximum Time", - "text": "Text", - "type": "Type", - "hideHeader": "Hide Header", - "hideBordered": "Hide Border", - "src": "Image URL", - "showInfo": "Display Value", - "mode": "Mode", - "onlyMenu": "Only Menu", - "horizontalAlignment": "Horizontal Alignment", - "row": "Left", - "column": "Top", - "leftAlign": "Left Alignment", - "rightAlign": "Right Alignment", - "percent": "Percentage", - "fixedHeight": "Fixed Height", - "auto": "Adaptive", - "directory": "Folder", - "multiple": "Multiple Files", - "singleFile": "Single File", - "manual": "Manual", - "default": "Default", - "small": "Small", - "middle": "Medium", - "large": "Large", - "single": "Single", - "multi": "Multiple", - "close": "Close", - "ui": "UI Mode", - "line": "Line Chart", - "scatter": "Scatter Plot", - "pie": "Pie Chart", - "basicLine": "Basic Line Chart", - "stackedLine": "Stacked Line Chart", - "areaLine": "Area Area Map", - "basicPie": "Basic Pie Chart", - "doughnutPie": "Donut Chart", - "rosePie": "Rose Chart", - "category": "Category Axis", - "circle": "Circle", - "rect": "Rectangle", - "triangle": "Triangle", - "diamond": "Diamond", - "pin": "Pushpin", - "arrow": "Arrow", - "left": "Left", - "right": "Right", - "center": "Center", - "bottom": "Bottom", - "justify": "Justify Both Ends" - }, + "markdownDemoText": "**Lowcoder** | Create software applications for your Company and your Customers with minimal coding experience. Lowcoder is the best Retool, Appsmith or Tooljet Alternative.", + "demoText": "Lowcoder | Create software applications for your Company and your Customers with minimal coding experience. Lowcoder is the best Retool, Appsmith or Tooljet Alternative.", + "submit": "Submit", + "style": "Style", + "danger": "Danger", + "warning": "Warning", + "success": "Success", + "menu": "Menu", + "link": "Link", + "customAppearance": "Custom Appearance", + "search": "Search", + "pleaseInputNumber": "Please Enter a Number", + "mostValue": "Most Value", + "maxRating": "Maximum Rating", + "notSelect": "Not Selected", + "halfSelect": "Half Selection", + "pleaseSelect": "Please Select", + "title": "Title", + "content": "Content", + "componentNotFound": "Component Does Not Exist", + "example": "Examples", + "defaultMethodDesc": "Set the Value of Property {name}", + "propertyUsage": "You Can Read Component-Related Information by Accessing Component Properties by Component Name Anywhere You Can Write JavaScript.", + "property": "Properties", + "propertyName": "Property Name", + "propertyType": "Type", + "propertyDesc": "Description", + "event": "Events", + "eventName": "Event Name", + "eventDesc": "Description", + "mehtod": "Methods", + "methodUsage": "You have the capability to engage with components via their respective methods, which can be accessed by their designated names within any segment where JavaScript is utilized. Additionally, these components can be activated through the 'Control Component' action, which is triggered in response to specific events", + "methodName": "Method Name", + "methodDesc": "Description", + "showBorder": "Show Border", + "haveTry": "Try It Yourself", + "settings": "Setting", + "settingValues": "Setting Value", + "defaultValue": "Default Value", + "time": "Time", + "date": "Date", + "noValue": "None", + "xAxisType": "X-Axis Type", + "hAlignType": "Horizontal Alignment", + "leftLeftAlign": "Left-Left Alignment", + "leftRightAlign": "Left-Right Alignment", + "topLeftAlign": "Top-Left Alignment", + "topRightAlign": "Top-Right Alignment", + "validation": "Validation", + "required": "Required", + "defaultStartDateValue": "Default Start Date", + "defaultEndDateValue": "Default End Date", + "basicUsage": "Basic Usage", + "basicDemoDescription": "The Following Examples Show the Basic Usage of the Component.", + "noDefaultValue": "No Default Value", + "forbid": "Forbidden", + "placeholder": "Placeholder", + "pleaseInputPassword": "Please Enter a Password", + "password": "Password", + "textAlign": "Text Alignment", + "length": "Length", + "top": "Top", + "pleaseInputName": "Please Enter Your Name", + "userName": "Name", + "fixed": "Fixed", + "responsive": "Responsive", + "workCount": "Word Count", + "cascaderOptions": "Cascader Options", + "pleaseSelectCity": "Please Select a City", + "advanced": "Advanced", + "showClearIcon": "Show Clear Icon", + "appleOptionLabel": "Apple", + "waterMelonOptionLabel": "Watermelon", + "berryOptionLabel": "Strawberry", + "lemonOptionLabel": "Lemon", + "coconutOptionLabel": "Coconut", + "likedFruits": "Favorites", + "option": "Option", + "singleFileUpload": "Single File Upload", + "multiFileUpload": "Multiple File Upload", + "folderUpload": "Folder Upload", + "multiFile": "Multiple Files", + "folder": "Folder", + "open": "Open", + "favoriteFruits": "Favorite Fruits", + "pleaseSelectOneFruit": "Select a Fruit", + "notComplete": "Not Complete", + "complete": "Complete", + "echart": "EChart", + "lineChart": "Line Chart", + "basicLineChart": "Basic Line Chart", + "lineChartType": "Line Chart Type", + "stackLineChart": "Stacked Line", + "areaLineChart": "Area Line", + "scatterChart": "Scatter Chart", + "scatterShape": "Scatter Shape", + "scatterShapeCircle": "Circle", + "scatterShapeRect": "Rectangle", + "scatterShapeTri": "Triangle", + "scatterShapeDiamond": "Diamond", + "scatterShapePin": "Pushpin", + "scatterShapeArrow": "Arrow", + "pieChart": "Pie Chart", + "basicPieChart": "Basic Pie Chart", + "pieChatType": "Pie Chart Type", + "pieChartTypeCircle": "Donut Chart", + "pieChartTypeRose": "Rose Chart", + "titleAlign": "Title Position", + "color": "Color", + "dashed": "Dashed", + "imADivider": "I am a Dividing Line", + "tableSize": "Table Size", + "subMenuItem": "SubMenu {num}", + "menuItem": "Menu {num}", + "labelText": "Label", + "labelPosition": "Label - Position", + "labelAlign": "Label - Align", + "optionsOptionType": "Configuration Method", + "styleBackgroundColor": "Background Color", + "styleBorderColor": "Border Color", + "styleColor": "Font Color", + "selectionMode": "Row Selection Mode", + "paginationSetting": "Pagination Setting", + "paginationShowSizeChanger": "Support Users to Modify the Number of Entries per Page", + "paginationShowSizeChangerButton": "Show Size Changer Button", + "paginationShowQuickJumper": "Show Quick Jumper", + "paginationHideOnSinglePage": "Hide When There is Only One Page", + "paginationPageSizeOptions": "Page Size", + "chartConfigCompType": "Chart Type", + "xConfigType": "X Axis Type", + "loading": "Loading", + "disabled": "Disabled", + "minLength": "Minimum Length", + "maxLength": "Maximum Length", + "showCount": "Show Word Count", + "autoHeight": "Height", + "thousandsSeparator": "Thousands Separator", + "precision": "Decimal Places", + "value": "Default Value", + "formatter": "Format", + "min": "Minimum Value", + "max": "Maximum Value", + "step": "Step Size", + "start": "Start Time", + "end": "End Time", + "allowHalf": "Allow Half Selection", + "filetype": "File Type", + "showUploadList": "Show Upload List", + "uploadType": "Upload Type", + "allowClear": "Show Clear Icon", + "minSize": "Minimum File Size", + "maxSize": "Maximum File Size", + "maxFiles": "Maximum Number of Uploaded Files", + "format": "Format", + "minDate": "Minimum Date", + "maxDate": "Maximum Date", + "minTime": "Minimum Time", + "maxTime": "Maximum Time", + "text": "Text", + "type": "Type", + "hideHeader": "Hide Header", + "hideBordered": "Hide Border", + "src": "Image URL", + "showInfo": "Display Value", + "mode": "Mode", + "onlyMenu": "Only Menu", + "horizontalAlignment": "Horizontal Alignment", + "row": "Left", + "column": "Top", + "leftAlign": "Left Alignment", + "rightAlign": "Right Alignment", + "percent": "Percentage", + "fixedHeight": "Fixed Height", + "auto": "Adaptive", + "directory": "Folder", + "multiple": "Multiple Files", + "singleFile": "Single File", + "manual": "Manual", + "default": "Default", + "small": "Small", + "middle": "Medium", + "large": "Large", + "single": "Single", + "multi": "Multiple", + "close": "Close", + "ui": "UI Mode", + "line": "Line Chart", + "scatter": "Scatter Plot", + "pie": "Pie Chart", + "basicLine": "Basic Line Chart", + "stackedLine": "Stacked Line Chart", + "areaLine": "Area Area Map", + "basicPie": "Basic Pie Chart", + "doughnutPie": "Donut Chart", + "rosePie": "Rose Chart", + "category": "Category Axis", + "circle": "Circle", + "rect": "Rectangle", + "triangle": "Triangle", + "diamond": "Diamond", + "pin": "Pushpin", + "arrow": "Arrow", + "left": "Left", + "right": "Right", + "center": "Center", + "bottom": "Bottom", + "justify": "Justify Both Ends" + }, + + // twenty-second part + + "playground": { - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Current Data State", - "preview": "Preview", - "property": "Properties", - "console": "Visual Script Console", - "executeMethods": "Execute Methods", - "noMethods": "No Methods.", - "methodParams": "Method Parameters", - "methodParamsHelp": "Input Method Parameters Using JSON. For Example, You Can Set setValue's Parameters With: [1] or 1" + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Current Data State", + "preview": "Preview", + "property": "Properties", + "console": "Visual Script Console", + "executeMethods": "Execute Methods", + "noMethods": "No Methods.", + "methodParams": "Method Parameters", + "methodParamsHelp": "Input Method Parameters Using JSON. For Example, You Can Set setValue's Parameters With: [1] or 1" }, "calendar": { - "headerBtnBackground": "Button Background", - "btnText": "Button Text", - "title": "Title", - "selectBackground": "Selected Background" + "headerBtnBackground": "Button Background", + "btnText": "Button Text", + "title": "Title", + "selectBackground": "Selected Background" }, /*"componentDocExtra": { "table": table, },*/ "idSource": { - "title": "User Authentication Provider", - "form": "Email", - "pay": "Premium", - "enable": "Enable", - "unEnable": "Not Enabled", - "loginType": "Login Type", - "status": "Status", - "desc": "Description", - "manual": "Address Book:", - "syncManual": "Sync Address Book", - "syncManualSuccess": "Sync Succeeded", - "enableRegister": "Allow Registration", - "saveBtn": "Save and Enable", - "save": "Save", - "none": "None", - "formPlaceholder": "Please Enter {label}", - "formSelectPlaceholder": "Please Select the {label}", - "saveSuccess": "Saved Successfully", - "dangerLabel": "Danger Zone", - "dangerTip": "Disabling This ID Provider May Result in Some Users Being Unable to Log In. Proceed With Caution.", - "disable": "Disable", - "disableSuccess": "Disabled Successfully", - "encryptedServer": "-------- Encrypted on the Server Side --------", - "disableTip": "Tips", - "disableContent": "Disabling This ID Provider May Result in Some Users Being Unable to Log In. Are You Sure to Proceed?", - "manualTip": "", - "lockTip": "The Content is Locked. To Make Changes, Please Click the {icon} to Unlock.", - "lockModalContent": "Changing the 'ID Attribute' Field Can Have Significant Impacts on User Identification. Please Confirm That You Understand the Implications of This Change Before Proceeding.", - "payUserTag": "Premium", - "source": "Source", - "sourceName": "Auth Provider Name", - "sourceDescription": "Auth Provider Description", - "sourceIcon": "Auth Provider Icon", - "sourceCategory": "Auth Provider Category", - "souceIssuerURI": "Auth Provider Issuer URI", - "souceAuthorizationEndpoint": "Auth Provider Authorization Endpoint", - "souceTokenEndpoint": "Auth Provider Token Endpoint", - "souceUserInfoEndpoint": "Auth Provider User Info Endpoint", - "userInfoIntrospection": "Use OpenID User Introspection", - "userCanSelectAccounts": "User Can Select from Accounts", - "sourceCategoryEnterprise": "Enterprise Identity", - "sourceCategoryCloud": "Cloud Services", - "sourceCategorySocial": "Social Media", - "sourceCategoryDevelopment": "Development", - "sourceCategoryTools": "Tools & Productivity", + "title": "User Authentication Provider", + "form": "Email", + "pay": "Premium", + "enable": "Enable", + "unEnable": "Not Enabled", + "loginType": "Login Type", + "status": "Status", + "desc": "Description", + "manual": "Address Book:", + "syncManual": "Sync Address Book", + "syncManualSuccess": "Sync Succeeded", + "enableRegister": "Allow Registration", + "saveBtn": "Save and Enable", + "save": "Save", + "none": "None", + "formPlaceholder": "Please Enter {label}", + "formSelectPlaceholder": "Please Select the {label}", + "saveSuccess": "Saved Successfully", + "dangerLabel": "Danger Zone", + "dangerTip": "Disabling or Deleting This ID Provider May Result in Some Users Being Unable to Log In. Proceed With Caution.", + "lastEnabledConfig": "You can't disable/delete config as this is the only enabled configuration.", + "disable": "Disable", + "disableSuccess": "Disabled Successfully", + "encryptedServer": "-------- Encrypted on the Server Side --------", + "disableTip": "Tips", + "disableContent": "{action} This ID Provider May Result in Some Users Being Unable to Log In. Are You Sure to Proceed?", + "manualTip": "", + "lockTip": "The Content is Locked. To Make Changes, Please Click the {icon} to Unlock.", + "lockModalContent": "Changing the 'ID Attribute' Field Can Have Significant Impacts on User Identification. Please Confirm That You Understand the Implications of This Change Before Proceeding.", + "payUserTag": "Premium", + "source" : "Source", + "sourceName" : "Auth Provider Name", + "sourceDescription" : "Auth Provider Description", + "sourceIcon" : "Auth Provider Icon", + "sourceCategory" : "Auth Provider Category", + "souceIssuerURI" : "Auth Provider Issuer URI", + "souceAuthorizationEndpoint" : "Auth Provider Authorization Endpoint", + "souceTokenEndpoint" : "Auth Provider Token Endpoint", + "souceUserInfoEndpoint" : "Auth Provider User Info Endpoint", + "userInfoIntrospection" : "Use OpenID User Introspection", + "userCanSelectAccounts" : "User Can Select from Accounts", + "sourceCategoryEnterprise" : "Enterprise Identity", + "sourceCategoryCloud" : "Cloud Services", + "sourceCategorySocial" : "Social Media", + "sourceCategoryDevelopment" : "Development", + "sourceCategoryTools" : "Tools & Productivity", }, "slotControl": { - "configSlotView": "Configure Slot View" + "configSlotView": "Configure Slot View" }, "jsonLottie": { - "lottieJson": "Lottie JSON", - "speed": "Speed", - "width": "Width", - "height": "Height", - "backgroundColor": "Background Color", - "animationStart": "Animation Start", - "valueDesc": "Current JSON Data", - "loop": "Loop", - "auto": "Auto", - "onHover": "On Hover", - "singlePlay": "Single Play", - "endlessLoop": "Endless Loop", - "keepLastFrame": "Keep Last Frame displayed" + "lottieJson": "Lottie JSON", + "searchAnimation" : "Search Animation", + "speed": "Speed", + "width": "Width", + "height": "Height", + "backgroundColor": "Background Color", + "animationStart": "Animation Start", + "valueDesc": "Current JSON Data", + "loop": "Loop", + "auto": "Auto", + "onHover": "On Hover", + "onTrigger": "On Trigger", + "singlePlay": "Single Play", + "endlessLoop": "Endless Loop", + "keepLastFrame": "Keep Last Frame displayed", + "fit": "Fit", + "align": "Align", + "load": "On Load", + "play": "On Play", + "pause": "On Pause", + "stop": "On Stop", + "complete": "On Complete", }, "timeLine": { - "titleColor": "Title Color", - "subTitleColor": "Subtitle Color", - "labelColor": "Label Color", - "value": "Timeline Data", - "mode": "Display Order", - "left": "Content Right", - "right": "Content Left", - "alternate": "Alternate Content Order", - "modeTooltip": "Set the Content to Appear Left/Right or Alternately on Both Sides of the Timeline", - "reverse": "Newest Events First", - "pending": "Pending Node Text", - "pendingDescription": "When Set, Then a Last Node With the Text and a Waiting Indicator Will Be Displayed.", - "defaultPending": "Continuous Improvement", - "clickTitleEvent": "Click Title Event", - "clickTitleEventDesc": "Click Title Event", - "Introduction": "Introduction Keys", - "helpTitle": "Title of Timeline (Required)", - "helpsubTitle": "Subtitle of Timeline", - "helpLabel": "Label of Timeline, Used to Display Dates", - "helpColor": "Indicates Timeline Node Color", - "helpDot": "Rendering Timeline Nodes as Ant Design Icons", - "helpTitleColor": "Individually Control the Color of Node Title", - "helpSubTitleColor": "Individually Control the Color of Node Subtitle", - "helpLabelColor": "Individually Control the Color of Node Icon", - "valueDesc": "Data of Timeline", - "clickedObjectDesc": "Clicked Item Data", - "clickedIndexDesc": "Clicked Item Index" - }, + "titleColor": "Title Color", + "subTitleColor": "Subtitle Color", + "labelColor": "Label Color", + "value": "Timeline Data", + "mode": "Display Order", + "left": "Content Right", + "right": "Content Left", + "alternate": "Alternate Content Order", + "modeTooltip": "Set the Content to Appear Left/Right or Alternately on Both Sides of the Timeline", + "reverse": "Newest Events First", + "pending": "Pending Node Text", + "pendingDescription": "When Set, Then a Last Node With the Text and a Waiting Indicator Will Be Displayed.", + "defaultPending": "Continuous Improvement", + "clickTitleEvent": "Click Title Event", + "clickTitleEventDesc": "Click Title Event", + "Introduction": "Introduction Keys", + "helpTitle": "Title of Timeline (Required)", + "helpsubTitle": "Subtitle of Timeline", + "helpLabel": "Label of Timeline, Used to Display Dates", + "helpColor": "Indicates Timeline Node Color", + "helpDot": "Rendering Timeline Nodes as Ant Design Icons", + "helpTitleColor": "Individually Control the Color of Node Title", + "helpSubTitleColor": "Individually Control the Color of Node Subtitle", + "helpLabelColor": "Individually Control the Color of Node Icon", + "valueDesc": "Data of Timeline", + "clickedObjectDesc": "Clicked Item Data", + "clickedIndexDesc": "Clicked Item Index" + }, + + // twenty-third part + + "comment": { - "value": "Comment List Data", - "showSendButton": "Allowing Comments", - "title": "Title", - "titledDefaultValue": "%d Comment in Total", - "placeholder": "Shift + Enter to Comment; Enter @ or # for Quick Input", - "placeholderDec": "Placeholder", - "buttonTextDec": "Button Title", - "buttonText": "Comment", - "mentionList": "Mention List Data", - "mentionListDec": "Key-Mention Keywords; Value-Mention List Data", - "userInfo": "User Info", - "dateErr": "Date Error", - "commentList": "Comment List", - "deletedItem": "Deleted Item", - "submitedItem": "Submitted Item", - "deleteAble": "Show Delete Button", - "Introduction": "Introduction Keys", - "helpUser": "User Info (Required)", - "helpname": "User Name (Required)", - "helpavatar": "Avatar URL (High Priority)", - "helpdisplayName": "Display Name (Low Priority)", - "helpvalue": "Comment Content", - "helpcreatedAt": "Create Date" + "value": "Comment List Data", + "showSendButton": "Allowing Comments", + "title": "Title", + "titledDefaultValue": "%d Comment in Total", + "placeholder": "Shift + Enter to Comment; Enter @ or # for Quick Input", + "placeholderDec": "Placeholder", + "buttonTextDec": "Button Title", + "buttonText": "Comment", + "mentionList": "Mention List Data", + "mentionListDec": "Key-Mention Keywords; Value-Mention List Data", + "userInfo": "User Info", + "dateErr": "Date Error", + "commentList": "Comment List", + "deletedItem": "Deleted Item", + "submitedItem": "Submitted Item", + "deleteAble": "Show Delete Button", + "Introduction": "Introduction Keys", + "helpUser": "User Info (Required)", + "helpname": "User Name (Required)", + "helpavatar": "Avatar URL (High Priority)", + "helpdisplayName": "Display Name (Low Priority)", + "helpvalue": "Comment Content", + "helpcreatedAt": "Create Date" }, "mention": { - "mentionList": "Mention List Data" + "mentionList": "Mention List Data" }, "autoComplete": { - "value": "Auto Complete Value", - "checkedValueFrom": "Checked Value From", - "ignoreCase": "Search Ignore Case", - "searchLabelOnly": "Search Label Only", - "searchFirstPY": "Search First Pinyin", - "searchCompletePY": "Search Complete Pinyin", - "searchText": "Search Text", - "SectionDataName": "AutoComplete Data", - "valueInItems": "Value in Items", - "type": "Type", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Key", - "selectLable": "Label", - "ComponentType": "Component Type", - "colorIcon": "Blue", - "grewIcon": "Grey", - "noneIcon": "None", - "small": "Small", - "large": "Large", - "componentSize": "Component Size", - "Introduction": "Introduction Keys", - "helpLabel": "Label", - "helpValue": "Value" + "value": "Auto Complete Value", + "checkedValueFrom": "Checked Value From", + "ignoreCase": "Search Ignore Case", + "searchLabelOnly": "Search Label Only", + "searchFirstPY": "Search First Pinyin", + "searchCompletePY": "Search Complete Pinyin", + "searchText": "Search Text", + "SectionDataName": "AutoComplete Data", + "valueInItems": "Value in Items", + "type": "Type", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Key", + "selectLable": "Label", + "ComponentType": "Component Type", + "colorIcon": "Blue", + "grewIcon": "Grey", + "noneIcon": "None", + "small": "Small", + "large": "Large", + "componentSize": "Component Size", + "Introduction": "Introduction Keys", + "helpLabel": "Label", + "helpValue": "Value" }, "responsiveLayout": { - "column": "Columns", - "addColumn": "Add Column", - "columnDefinition": "Column Definition", - "rowDefinition": "Row Definition", - "columnGap": "Column Gap", - "rowGap": "Row Gap", - "atLeastOneColumnError": "Responsive Layout Keeps at Least One Column", - "columnsPerRow": "Columns per Row", - "columnsSpacing": "Columns Spacing (px)", - "horizontal": "Horizontal", - "vertical": "Vertical", - "mobile": "Mobile", - "tablet": "Tablet", - "desktop": "Desktop", - "rowStyle": "Row Style", - "columnStyle": "Column Style", - "minWidth": "Min. Width", - "rowBreak": "Row Break", - "matchColumnsHeight": "Match Columns Height", - "rowLayout": "Row Layout", - "columnsLayout": "Columns Layout", - "columnsDefinitionTooltip": "Columns can be defined freely based on the CSS columns properties. For example, 'auto auto' will create two columns with equal width. Read more here: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "Rows can be defined freely based on the CSS rows properties. For example, 'auto auto' will create two rows with equal height. Read more here: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, + "column": "Columns", + "addColumn": "Add Column", + "columnDefinition": "Column Definition", + "rowDefinition": "Row Definition", + "columnGap": "Column Gap", + "rowGap": "Row Gap", + "atLeastOneColumnError": "Responsive Layout Keeps at Least One Column", + "columnsPerRow": "Columns per Row", + "columnsSpacing": "Columns Spacing (px)", + "horizontal": "Horizontal", + "vertical": "Vertical", + "mobile": "Mobile", + "tablet": "Tablet", + "desktop": "Desktop", + "rowStyle": "Row Style", + "columnStyle": "Column Style", + "minWidth": "Min. Width", + "rowBreak": "Row Break", + "useComponentWidth" : "Use Self Size", + "useComponentWidthDesc" : "Use the container width instead the App width", + "matchColumnsHeight": "Match Columns Height", + "rowLayout": "Row Layout", + "columnsLayout": "Columns Layout", + "columnsDefinitionTooltip": "Columns can be defined freely based on the CSS columns properties. For example, 'auto auto' will create two columns with equal width. Read more here: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Rows can be defined freely based on the CSS rows properties. For example, 'auto auto' will create two rows with equal height. Read more here: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout" : { + "column": "View Areas", + "addColumn": "Add Areas", + "columnDefinition": "Area Definition", + "atLeastOneColumnError": "Responsive Layout Keeps at Least One Column", + "horizontal": "Horizontal", + "vertical": "Vertical", + "areaStyle": "Column Style", + "minWidth": "Min. Width", + "maxWidth": "Max. Width", + "width": "Width", + "collapsible" : "Area is collapsible?", + "matchColumnsHeight" : "Match Areas Height", + "orientation" : "Splitlayout orientation", + "orientationTooltip" : "The visual order in which the areas aligned. You can next Splitlayout Components inside Splitlayout Components too to achieve complex layouts." + }, + "navLayout": { - "mode": "Mode", - "modeInline": "Inline", - "modeVertical": "Vertical", - "modeHorizontal": "Horizontal", - "width": "Width", - "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", - "navStyle": "Menu Style", - "navItemStyle": "Menu Item Style", - "navBackground": "Background Image", - "mobileNavVerticalOrientation": "Vertical Orientation", - "mobileNavVerticalMaxWidth": "Max Width", - "mobileNavBarHeight": "Navbar Height", - "mobileNavVerticalShowSeparator": "Show Separator", - "mobileNavIconSize": "Icon Size", - }, - "timeZone": { - "UTC-12:00": "(UTC-12:00) Int'l Date Line W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Hawaii", - "UTC-09:00": "(UTC-09:00) Alaska", - "UTC-08:00": "(UTC-08:00) Baja CA", - "UTC-07:00": "(UTC-07:00) Pacific Time (US)", - "UTC-06:00": "(UTC-06:00) Central Time (US)", - "UTC-05:00": "(UTC-05:00) Eastern Time (US)", - "UTC-04:00": "(UTC-04:00) Atlantic Time", - "UTC-03:00": "(UTC-03:00) Buenos Aires", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Cape Verde", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Berlin, Rome", - "UTC+02:00": "(UTC+02:00) Athens, Bucharest", - "UTC+03:00": "(UTC+03:00) Moscow", - "UTC+04:00": "(UTC+04:00) Dubai, Muscat", - "UTC+05:00": "(UTC+05:00) Karachi", - "UTC+05:30": "(UTC+05:30) New Delhi", - "UTC+05:45": "(UTC+05:45) Kathmandu", - "UTC+06:00": "(UTC+06:00) Dhaka", - "UTC+06:30": "(UTC+06:30) Yangon", - "UTC+07:00": "(UTC+07:00) Bangkok", - "UTC+08:00": "(UTC+08:00) Beijing, HK", - "UTC+09:00": "(UTC+09:00) Tokyo, Seoul", - "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", - "UTC+10:00": "(UTC+10:00) Sydney", - "UTC+11:00": "(UTC+11:00) Solomon Islands, New Caledonia", - "UTC+12:00": "(UTC+12:00) Auckland, Fiji", - "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", - "UserChoice": "UserChoice" - }, - tour: { - section1Title: "Steps", - section1Subtitle: "Steps", - tooltipExampleHeader: "Example:", - tooltipSignatureHeader: "Signature:", - options: { - title: { - label: "Title", - placeholder: "Welcome", - tooltip: "The title of the step. Any HTML is valid here.", - }, - description: { - label: "Description", - placeholder: "Welcome to lowcoder!", - tooltip: "The description of the step. Any HTML is valid here.", - }, - mask: { - label: "Mask", - tooltip: "Whether to enable masking, change mask style and fill color by pass custom props, the default follows the `mask` property of Tour.", - tooltipValidTypes: "Valid input types: `true`, `false`, empty, or a JSON object following the CSSProperties Schema from Antd.", - }, - arrow: { - label: "Arrow", - tooltip: "Turns the arrow on and off or moves it to point at the center of the component, if desired, otherwise the arrow will always point near the top of the component.", - tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", - }, - type: { - label: "Type", - tooltip: "The type of tooltip, this affects the background color and text color. The colors can be controlled with the main tour styling section." - }, - target: { - label: "Component", - tooltip: "The component you want to put the tooltip on, or leave it empty if you simply want a modal in the middle of the screen." - }, - coverImage: { - label: "Cover Image URI", - tooltip: "A URI for an image you would like to display with the step", - } - }, - indicatorsRender: { - label: "Indicators Render", - tooltip: "Provides a custom indicator for which step you are on", - tooltipValidTypes: "Format is a function that accepts two args, `current` and `total` and returns a ReactNode", - tooltipFunctionSignatureHeader: "Signature:", - tooltipFunctionSignature: "(current: number, total: number) => ReactNode", - tooltipExampleHeader: "Example:", + "mode": "Mode", + "modeInline": "Inline", + "modeVertical": "Vertical", + "modeHorizontal": "Horizontal", + "width": "Width", + "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", + "navStyle": "Menu Style", + "navItemStyle": "Menu Item Style", + "navBackground": "Background Image", + "mobileNavVerticalOrientation": "Vertical Orientation", + "mobileNavVerticalMaxWidth": "Max Width", + "mobileNavBarHeight": "Navbar Height", + "mobileNavVerticalShowSeparator": "Show Separator", + "mobileNavIconSize": "Icon Size", + }, + + "timeZone": { + "UTC-12:00": "(UTC-12:00) Int'l Date Line W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Pacific Time (US)", + "UTC-06:00": "(UTC-06:00) Central Time (US)", + "UTC-05:00": "(UTC-05:00) Eastern Time (US)", + "UTC-04:00": "(UTC-04:00) Atlantic Time", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Cape Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlin, Rome", + "UTC+02:00": "(UTC+02:00) Athens, Bucharest", + "UTC+03:00": "(UTC+03:00) Moscow", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) New Delhi", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Beijing, HK", + "UTC+09:00": "(UTC+09:00) Tokyo, Seoul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Solomon Islands, New Caledonia", + "UTC+12:00": "(UTC+12:00) Auckland, Fiji", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "UserChoice" + }, + + tour: { + section1Title: "Steps", + section1Subtitle: "Steps", + tooltipExampleHeader: "Example:", + tooltipSignatureHeader: "Signature:", + options: { + title: { + label: "Title", + placeholder: "Welcome", + tooltip: "The title of the step. Any HTML is valid here.", }, - disabledInteraction: { - label: "Disable Interaction", - tooltip: "Disable interaction in the highlighted area." + description: { + label: "Description", + placeholder: "Welcome to lowcoder!", + tooltip: "The description of the step. Any HTML is valid here.", }, mask: { - label: "Mask", - tooltip: "Whether to enable masking, change mask style and fill color by pass custom props, the default follows the `mask` property of Tour. Can be overridden at the step level.", - tooltipValidTypes: "Valid input types: `true`, `false`, empty, or a JSON object following the CSSProperties Schema from Antd.", - }, - placement: { - label: "Placement", - tooltip: "Position of the guide card relative to the target element. Can be overridden at the step level.", - tooltipValidOptions: "Valid options", - tooltipValidOptionsAbove: "Above the component:", - tooltipValidOptionsLeft: "To the left of the component:", - tooltipValidOptionsRight: "To the right of the component:", - tooltipValidOptionsBelow: "Below the component:", - tooltipValidOptionsOnTop: "On top of the component:", + label: "Mask", + tooltip: "Whether to enable masking, change mask style and fill color by pass custom props, the default follows the `mask` property of Tour.", + tooltipValidTypes: "Valid input types: `true`, `false`, empty, or a JSON object following the CSSProperties Schema from Antd.", }, arrow: { - label: "Arrow", - tooltip: "Turns the arrow on and off or moves it to point at the center of the component, if desired, otherwise the arrow will always point near the top of the component. Can be overridden at the step level.", - tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", + label: "Arrow", + tooltip: "Turns the arrow on and off or moves it to point at the center of the component, if desired, otherwise the arrow will always point near the top of the component.", + tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", }, type: { - label: "Type", - tooltip: "The type of tooltip, this affects the background color and text color. The colors can be controlled with the main tour styling section. Can be overridden at the step level." + label: "Type", + tooltip: "The type of tooltip, this affects the background color and text color. The colors can be controlled with the main tour styling section." }, - }, + target: { + label: "Component", + tooltip: "The component you want to put the tooltip on, or leave it empty if you simply want a modal in the middle of the screen." + }, + coverImage: { + label: "Cover Image URI", + tooltip: "A URI for an image you would like to display with the step", + } + }, + indicatorsRender: { + label: "Indicators Render", + tooltip: "Provides a custom indicator for which step you are on", + tooltipValidTypes: "Format is a function that accepts two args, `current` and `total` and returns a ReactNode", + tooltipFunctionSignatureHeader: "Signature:", + tooltipFunctionSignature: "(current: number, total: number) => ReactNode", + tooltipExampleHeader: "Example:", + }, + disabledInteraction: { + label: "Disable Interaction", + tooltip: "Disable interaction in the highlighted area." + }, + mask: { + label: "Mask", + tooltip: "Whether to enable masking, change mask style and fill color by pass custom props, the default follows the `mask` property of Tour. Can be overridden at the step level.", + tooltipValidTypes: "Valid input types: `true`, `false`, empty, or a JSON object following the CSSProperties Schema from Antd.", + }, + placement: { + label: "Placement", + tooltip: "Position of the guide card relative to the target element. Can be overridden at the step level.", + tooltipValidOptions: "Valid options", + tooltipValidOptionsAbove: "Above the component:", + tooltipValidOptionsLeft: "To the left of the component:", + tooltipValidOptionsRight: "To the right of the component:", + tooltipValidOptionsBelow: "Below the component:", + tooltipValidOptionsOnTop: "On top of the component:", + }, + arrow: { + label: "Arrow", + tooltip: "Turns the arrow on and off or moves it to point at the center of the component, if desired, otherwise the arrow will always point near the top of the component. Can be overridden at the step level.", + tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", + }, + type: { + label: "Type", + tooltip: "The type of tooltip, this affects the background color and text color. The colors can be controlled with the main tour styling section. Can be overridden at the step level." + }, + }, + docUrls: { - docHome: "https://docs.lowcoder.cloud/", - apiDocHome: "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - components: "https://app.lowcoder.cloud/components/{compType}", - module: "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - optionList: "", - terms: "https://lowcoder.cloud/terms", - privacy: "https://lowcoder.cloud/privacy", - aboutUs: "https://lowcoder.cloud/about", - changeLog: "https://github.com/lowcoder-org/lowcoder/releases", - introVideo: "", - devNpmPlugin: "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - devNpmPluginText: "How to develop npm plugin", - useHost: "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - eventHandlerSlowdown: "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - thirdLib: "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - thirdLibUrlText: "Use third-party libraries", + docHome: "https://docs.lowcoder.cloud/", + apiDocHome: "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + components: "https://app.lowcoder.cloud/components/{compType}", + module: "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + optionList: "", + terms: "https://lowcoder.cloud/terms", + privacy: "https://lowcoder.cloud/privacy", + aboutUs: "https://lowcoder.cloud/about", + changeLog: "https://github.com/lowcoder-org/lowcoder/releases", + introVideo: "", + devNpmPlugin: "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + devNpmPluginText: "How to develop npm plugin", + useHost: "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + eventHandlerSlowdown: "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + thirdLib: "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + thirdLibUrlText: "Use third-party libraries", }, datasourceTutorial: { - mysql: "", - mongodb: "", - postgres: "", - redis: "", - es: "", - smtp: "", - clickHouse: "", + mysql: "", + mongodb: "", + postgres: "", + redis: "", + es: "", + smtp: "", + clickHouse: "", }, queryTutorial: { - js: "", - transformer: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - tempState: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - dataResponder: "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + js: "", + transformer: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + tempState: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + dataResponder: "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", }, customComponent: { - entryUrl: "https://sdk.lowcoder.cloud/custom_component.html", + entryUrl: "https://sdk.lowcoder.cloud/custom_component.html", }, template: { - cloneUrl: "/apps/template-import/", + cloneUrl: "/apps/template-import/", }, lowcoderUrl: { - createIssue: "https://github.com/lowcoder-org/lowcoder/issues", - discord: "https://discord.com/invite/qMG9uTmAx2", - }, -}; -// const jsonString = JSON.stringify(en, null, 2); -// console.log(jsonString); -// If you want to write this to a file, you can use the fs module -// const fs = require('fs'); -// fs.writeFileSync('output.json', jsonString, 'utf8'); + createIssue: "https://github.com/lowcoder-org/lowcoder/issues", + discord: "https://discord.com/invite/qMG9uTmAx2", + }, + + "iconScout": { + "searchImage": "Search Image", + "searchAnimation": "Search Animation", + "searchIcon": "Search Icon", + "noResults": "No results found.", + "buySubscriptionTitle": "Unlock Premium Assets", + "buySubscriptionContent": "This asset is exclusive to Media Package Subscribers. Subscribe to Media Package and download high-quality assets without limits!", + "buySubscriptionButton": "Subscribe Now", + } + }; \ No newline at end of file diff --git a/translations/locales/en.ts b/translations/locales/en.ts deleted file mode 100644 index 75c7036bb5..0000000000 --- a/translations/locales/en.ts +++ /dev/null @@ -1,3837 +0,0 @@ -// import table from "./componentDocExtra/table.md?url"; - -export const en = { - "productName": "Lowcoder", - "productDesc": "Create software applications for your company and customers with minimal coding experience. Lowcoder is an excellent alternative to Retool, Appsmith, and Tooljet.", - "notSupportedBrowser": "Your current browser may have compatibility issues. For an optimal user experience, please use the latest version of Chrome.", - "create": "Create", - "move": "Move", - "addItem": "Add", - "newItem": "New", - "copy": "Copy", - "rename": "Rename", - "delete": "Delete", - "deletePermanently": "Delete Permanently", - "remove": "Remove", - "recover": "Recover", - "edit": "Edit", - "view": "View", - "value": "Value", - "data": "Data", - "information": "Information", - "success": "Success", - "warning": "Warning", - "error": "Error", - "reference": "Reference", - "text": "Text", - "basic": "Basic", - "label": "Label", - "layout": "Layout", - "color": "Color", - "form": "Form", - "menu": "Menu", - "menuItem": "Menu Item", - "ok": "OK", - "cancel": "Cancel", - "finish": "Finish", - "reset": "Reset", - "icon": "Icon", - "code": "Code", - "title": "Title", - "emptyContent": "Empty Content", - "more": "More", - "search": "Search", - "back": "Back", - "accessControl": "Access Control", - "copySuccess": "Copied Successfully", - "copyError": "Copy Error", - - "api": { - "publishSuccess": "Published Successfully", - "recoverFailed": "Recovery Failed", - "needUpdate": "Your current version is outdated. Please upgrade to the latest version." - }, - "codeEditor": { - "notSupportAutoFormat": "The current code editor does not support auto-formatting.", - "fold": "Fold" - }, - "exportMethod": { - "setDesc": "Set Property: {property}", - "clearDesc": "Clear Property: {property}", - "resetDesc": "Reset Property: {property} to Default Value" - }, - "method": { - "focus": "Set Focus", - "focusOptions": "Focus options. See HTMLElement.focus()", - "blur": "Remove Focus", - "click": "Click", - "select": "Select All Text", - "setSelectionRange": "Set Start and End Positions of Text Selection", - "selectionStart": "0-based Index of First Selected Character", - "selectionEnd": "0-based Index of Character After Last Selected Character", - "setRangeText": "Replace Text Range", - "replacement": "String to Insert", - "replaceStart": "0-based Index of First Character to Replace", - "replaceEnd": "0-based Index of Character After Last Character to Replace" - }, - "errorBoundary": { - "encounterError": "Component loading failed. Please check your configuration.", - "clickToReload": "Click to Reload", - "errorMsg": "Error: " - }, - "imgUpload": { - "notSupportError": "Supports only {types} image types", - "exceedSizeError": "Image size must not exceed {size}" - }, - "gridCompOperator": { - "notSupport": "Not Supported", - "selectAtLeastOneComponent": "Please select at least one component", - "selectCompFirst": "Select components before copying", - "noContainerSelected": "[Bug] No container selected", - "deleteCompsSuccess": "Deleted successfully. Press {undoKey} to undo.", - "deleteCompsTitle": "Delete Components", - "deleteCompsBody": "Are you sure you want to delete {compNum} selected components?", - "cutCompsSuccess": "Cut successfully. Press {pasteKey} to paste, or {undoKey} to undo." - }, - "leftPanel": { - "queries": "Data Queries in your App", - "globals": "Global Data Variables", - "propTipsArr": "{num} Items", - "propTips": "{num} Keys", - "propTipArr": "{num} Item", - "propTip": "{num} Key", - "stateTab": "State", - "settingsTab": "Settings", - "toolbarTitle": "Individualization", - "toolbarPreload": "Scripts and Styles", - "components": "Active Components", - "modals": "in-App Modals", - "expandTip": "Click to Show {component}'s Data", - "collapseTip": "Click to Hide {component}'s Data", - "layers": "Layers", - "activatelayers": "Use dynamic Layers", - "selectedComponents": "Selected Components...", - "displayComponents": "control Display", - "lockComponents": "control Position", - }, - - // second part - - - "bottomPanel": { - "title": "Data Queries", - "run": "Run", - "noSelectedQuery": "No Query Selected", - "metaData": "Datasource Metadata", - "noMetadata": "No Metadata Available", - "metaSearchPlaceholder": "Search Metadata", - "allData": "All Tables" - }, - "rightPanel": { - "propertyTab": "Properties", - "noSelectedComps": "No Components selected. Click a Component to view its Properties.", - "createTab": "Insert", - "searchPlaceHolder": "Search Components or Modules", - "uiComponentTab": "Components", - "extensionTab": "Extensions", - "modulesTab": "Modules", - "moduleListTitle": "Modules", - "pluginListTitle": "Plugins", - "emptyModules": "Modules are reusable Mikro-Apps. You can embed them in your App.", - "searchNotFound": "Can't find the right component?", - "emptyPlugins": "No Plugins Added", - "contactUs": "Contact Us", - "issueHere": "here." - }, - "prop": { - "expand": "Expand", - "columns": "Columns", - "videokey": "Video Key", - "rowSelection": "Row Selection", - "toolbar": "Toolbar", - "pagination": "Pagination", - "logo": "Logo", - "style": "Style", - "inputs": "Inputs", - "meta": "Metadata", - "data": "Data", - "hide": "Hide", - "loading": "Loading", - "disabled": "Disabled", - "placeholder": "Placeholder", - "showClear": "Show Clear Button", - "showSearch": "Searchable", - "defaultValue": "Default Value", - "required": "Required Field", - "readOnly": "Read Only", - "readOnlyTooltip": "Read-only components appear normal but cannot be modified.", - "minimum": "Minimum", - "maximum": "Maximum", - "regex": "Regex", - "minLength": "Minimum Length", - "maxLength": "Maximum Length", - "height": "Height", - "width": "Width", - "selectApp": "Select App", - "showCount": "Show Count", - "textType": "Text Type", - "customRule": "Custom Rule", - "customRuleTooltip": "Non-empty string indicates an error; empty or null means validation passed. Example: ", - "manual": "Manual", - "map": "Map", - "json": "JSON", - "use12Hours": "Use 12-Hour Format", - "hourStep": "Hour Step", - "minuteStep": "Minute Step", - "secondStep": "Second Step", - "minDate": "Minimum Date", - "maxDate": "Maximum Date", - "minTime": "Minimum Time", - "maxTime": "Maximum Time", - "type": "Type", - "showLabel": "Show Label", - "showHeader": "Show Header", - "showBody": "Show Body", - "showSider": "Show Sider", - "innerSider" : "Inner Sider", - "showFooter": "Show Footer", - "maskClosable": "Click Outside to Close", - "toggleClose": "Enable Close Button", - "showMask": "Show Mask", - "textOverflow": "Text Overflow", - "scrollbar": "Show Scrollbars", - "siderScrollbar" : "Show Scrollbars in Sider", - "mainScrollbar": "Show Scrollbars in main content", - "modalScrollbar": "Show Scrollbars in Modal", - "drawerScrollbar": "Show Scrollbars in Drawer", - "textAreaScrollBar": "Show Scrollbars in Text Area", - "siderRight" : "Show sider on the Right", - "siderWidth" : "Sider Width", - "siderWidthTooltip" : "Sider width supports percentages (%) and pixels (px).", - "siderCollapsedWidth" : "Sider Collapsed Width", - "siderCollapsedWidthTooltip" : "Sider collapsed width supports percentages (%) and pixels (px).", - "siderCollapsible" : "Sider Collapsible", - "siderCollapsed" : "Sider Collapsed", - "contentScrollbar" : "Show Scrollbars in Content", - "appID": "App Id", - "showApp": "Show an App in the content area", - "showAppTooltip": "You can display whole Apps in the content area. Please mind, that for Modules we do not support Inputs, Outputs Events and Methods.", - "baseURL": "API Base URL", - "horizontal": "Horizontal", - "minHorizontalWidth": "Minimum Horizontal Width", - "component": "Own Component Identifiers", - "className": "CSS Class name", - "dataTestId": "Individual ID", - "preventOverwriting": "Prevent overwriting styles", - "color": "Color", - "horizontalGridCells": "Horizontal Grid Cells", - "showHorizontalScrollbar": "Show Horizontal Scrollbar", - "showVerticalScrollbar": "Show Vertical Scrollbar", - "timeZone": "TimeZone", - }, - "autoHeightProp": { - "auto": "Auto", - "fixed": "Fixed" - }, - "textOverflowProp": { - "ellipsis": "Mouseover", - "wrap": "Wrap" - }, - "labelProp": { - "text": "Label", - "tooltip": "Tooltip", - "position": "Position", - "collapse": "Collapse", - "left": "Left", - "right": "Right", - "top": "Top", - "align": "Alignment", - "width": "Width", - "widthTooltip": "Label width supports percentages (%) and pixels (px)." - }, - - // third part - - "eventHandler": { - "eventHandlers": "Event Handlers", - "emptyEventHandlers": "No Event Handlers", - "incomplete": "Incomplete Selection", - "inlineEventTitle": "On {eventName}", - "event": "Event", - "action": "Action", - "noSelect": "No Selection", - "runQuery": "Run a Data Query", - "selectQuery": "Select Data Query", - "controlComp": "Control a Component", - "runScript": "Run JavaScript", - "runScriptPlaceHolder": "Write Code Here", - "component": "Component", - "method": "Method", - "setTempState": "Set a Temporary State value", - "state": "State", - "triggerModuleEvent": "Trigger a Module Event", - "moduleEvent": "Module Event", - "goToApp": "Go to an other App", - "queryParams": "Query Parameters", - "hashParams": "Hash Parameters", - "showNotification": "Show a Notification", - "text": "Text", - "level": "Level", - "duration": "Duration", - "notifyDurationTooltip": "Time unit can be 's' (second, default) or 'ms' (millisecond). Max duration is {max} seconds", - "goToURL": "Open a URL", - "openInNewTab": "Open in New Tab", - "copyToClipboard": "Copy a value to Clipboard", - "copyToClipboardValue": "Value", - "export": "Export Data", - "exportNoFileType": "No Selection (Optional)", - "fileName": "File Name", - "fileNameTooltip": "Include extension to specify file type, e.g., 'image.png'", - "fileType": "File Type", - "condition": "Run Only When...", - "conditionTooltip": "Run the event handler only when this condition evaluates to 'true'", - "debounce": "Debounce for", - "throttle": "Throttle for", - "slowdownTooltip": "Use debounce or throttle to control the frequency of action triggers. Time unit can be 'ms' (millisecond, default) or 's' (second).", - "notHandledError": "Not Handled", - "currentApp": "Current", - "inputEventHandlers": "Input Event Handlers", - "inputEventHandlersDesc": "Event Handlers related to User Input", - "buttonEventHandlers": "Button Event Handlers", - "buttonEventHandlersDesc": "Event Handlers related to Button Clicks", - "changeEventHandlers": "Change Event Handlers", - "changeEventHandlersDesc": "Event Handlers related to Value Changes", - "editedEventHandlers": "Edit Event Handlers", - "editedEventHandlersDesc": "Event Handlers related to edited state of Elements", - "clickEventHandlers": "Click Event Handlers", - "clickEventHandlersDesc": "Event Handlers related to Clicks", - "keyDownEventHandlers": "Key Down Event Handlers", - "keyDownEventHandlersDesc": "Event Handlers related to Key Down Events", - "checkboxEventHandlers": "Checkbox Event Handlers", - "checkboxEventHandlersDesc": "Event Handlers related to Checkbox Changes", - "dragEventHandlers": "Drag Event Handlers", - "dragEventHandlersDesc": "Event Handlers related to Drag and Drop Events", - "elementEventHandlers": "Element Event Handlers", - "elementEventHandlersDesc": "Event Handlers related to generic Data Element Events", - "mediaEventHandlers": "Media Event Handlers", - "mediaEventHandlersDesc": "Event Handlers related to Media Events", - "scannerEventHandlers": "Scanner Event Handlers", - "scannerEventHandlersDesc": "Event Handlers related to Scanner Events", - "chartEventHandlers": "Chart Event Handlers", - "chartEventHandlersDesc": "Event Handlers related to Chart Events", - "geoMapEventHandlers": "Geo Map Event Handlers", - "geoMapEventHandlersDesc": "Event Handlers related to Geo Map Events", - "stepEventHandlers": "Step Event Handlers", - "stepEventHandlersDesc": "Event Handlers related to Step UI Events", - "shareEventHandlers": "Share Event Handlers", - "shareEventHandlersDesc": "Event Handlers related to Share Events", - "selectEventHandlers": "Select Event Handlers", - "selectEventHandlersDesc": "Event Handlers related to Select Events", - "meetingEventHandlers": "Meeting Event Handlers", - "meetingEventHandlersDesc": "Event Handlers related to Meeting Events", - "collaborationEventHandlers": "Collaboration Event Handlers", - "collaborationEventHandlersDesc": "Event Handlers related to Collaboration Events", - "set": "Set", - "clear": "Clear", - "reset": "Reset", - "messageType": "Message Type", - "placement": "Placement", - "description": "Description" - }, - "event": { - "submit": "Submit", - "submitDesc": "Triggers on Submit", - "change": "Change", - "changeDesc": "Triggers on Value Changes", - "focus": "Focus", - "focusDesc": "Triggers on Focus", - "blur": "Blur", - "blurDesc": "Triggers on Blur", - "click": "Click", - "clickDesc": "Triggers on Click", - "doubleClick": "Double Click", - "doubleClickDesc": "Triggers on Double Click", - "rightClick": "Right Click", - "rightClickDesc": "Triggers on Right Click", - "keyDown": "Key Down", - "keyDownDesc": "Triggers on Key Down", - "select": "Select", - "selectDesc": "Triggers on Select", - "checked": "Checked", - "checkedDesc": "Triggers when a checkbox is Checked", - "unchecked": "Unchecked", - "uncheckedDesc": "Triggers when a checkbox is Unchecked", - "drag": "Drag", - "dragDesc": "Triggers on Drag", - "drop": "Drop", - "dropDesc": "Triggers on Drop", - "open": "Open", - "openDesc": "Triggers on Open", - "mute": "Mute", - "muteDesc": "Triggers on Mute of a Microphone", - "unmute": "Unmute", - "unmuteDesc": "Triggers on Unmute of a Microphone", - "showCamera": "Show Camera", - "showCameraDesc": "Triggers when Show Camera is on", - "hideCamera": "Hide Camera", - "hideCameraDesc": "Triggers when Show Camera is off", - "shareScreen": "Share Screen", - "shareScreenDesc": "Triggers on Share Screen", - "shareScreenEnd": "Share Screen End", - "shareScreenEndDesc": "Triggers on Share Screen End", - "shareControl": "Share Control", - "shareControlDesc": "Triggers on Share Control", - "shareControlEnd": "Share Control End", - "shareControlEndDesc": "Triggers on Share Control End", - "shareContent": "Share Content", - "shareContentDesc": "Triggers on Share Content", - "shareContentEnd": "Share Content End", - "shareContentEndDesc": "Triggers on Share Content End", - "stopShare": "Stop Share", - "stopShareDesc": "Triggers on Stop Share", - "meetingStart": "Meeting Start", - "meetingStartDesc": "Triggers on Meeting Start", - "meetingEnd": "Meeting End", - "meetingEndDesc": "Triggers on Meeting End", - "meetingJoin": "Meeting Join", - "meetingJoinDesc": "Triggers on Meeting Join", - "meetingLeave": "Meeting Leave", - "meetingLeaveDesc": "Triggers on Meeting Leave", - "play": "Play", - "playDesc": "Triggers on Play", - "pause": "Pause", - "pauseDesc": "Triggers on Pause", - "ended": "Ended", - "endedDesc": "Triggers on Ended", - "step": "Step", - "stepDesc": "Triggers on Step", - "next": "Next", - "nextDesc": "Triggers on Next", - "finished": "Finished", - "finishedDesc": "Triggers on Finished", - "saved": "Saved", - "savedDesc": "Triggers when an element is Saved", - "edited": "Edited", - "editedDesc": "Triggers when an element is Edited", - "geoMapMove": "Geo Map Move", - "geoMapMoveDesc": "Triggers when Users move Geo Map", - "geoMapZoom": "Geo Map Zoom", - "geoMapZoomDesc": "Triggers when Users zoom Geo Map", - "geoMapSelect": "Geo Map Select", - "geoMapSelectDesc": "Triggers when Users select an Element on Geo Map", - "scannerSuccess": "Scanner Success", - "scannerSuccessDesc": "Triggers when a Scanner successfully scans", - "scannerError": "Scanner Error", - "scannerErrorDesc": "Triggers when a Scanner fails to scan", - "chartZoom": "Chart Zoom", - "chartZoomDesc": "Triggers on Chart Zoom", - "chartHover": "Chart Hover", - "chartHoverDesc": "Triggers on Chart Hover", - "chartSelect": "Chart Select", - "chartSelectDesc": "Triggers on Chart Select", - "chartDeselect": "Chart Deselect", - "chartDeselectDesc": "Triggers on Chart Deselect", - "close": "Close", - "closeDesc": "Triggers on Close", - "parse": "Parse", - "parseDesc": "Triggers on Parse", - "success": "Success", - "successDesc": "Triggers on Success", - "delete": "Delete", - "deleteDesc": "Triggers on Delete", - "mention": "Mention", - "mentionDesc": "Triggers on Mention", - "search": "Search", - "searchDesc": "Triggers on Search", - "selectedChange": "Selection Change", - "selectedChangeDesc": "Triggers on changed Selection", - "clickExtra": "Click on Action", - "clickExtraDesc": "Triggers on Click on Extra Element", - "start": "Start", - "startDesc": "Triggers on Start", - "resume": "Resume", - "resumeDesc": "Triggers on Resume", - "countdown": "Countdown", - "countdownDesc": "Triggers on Countdown ends", - "reset": "Reset ends", - "resetDesc": "Triggers on Reset timer", - "refresh": "Refresh", - "refreshDesc": "Triggers on Refresh", - }, - - - // fourth part - - "style": { - "boxShadowColor": 'Shadow Color', - "boxShadow": 'Box Shadow', - "opacity": 'Opacity', - "animation": 'Animation', - "animationIterationCount": 'Animation Iteration Count', - "animationDelay": 'Animation Delay', - "animationDuration": 'Animation Duration', - "resetTooltip": "Reset styles. Clear the input field to reset an individual style.", - "textColor": "Text Color", - "contrastText": "Contrast Text Color", - "generated": "Generated", - "customize": "Customize", - "staticText": "Static Text", - "accent": "Accent", - "validate": "Validation Message", - "border": "Border Color", - "borderRadius": "Border Radius", - "borderWidth": "Border Width", - "borderStyle":"Border Style", - "background": "Background Color", - "headerBackground": "Header Background Color", - "siderBackground": "Sider Background Color", - "footerBackground": "Footer Background Color", - "fill": "Fill", - "track": "Track", - "links": "Links", - "thumb": "Thumb", - "thumbBorder": "Thumb Border", - "checked": "Checked", - "unchecked": "Unchecked", - "handle": "Handle", - "tags": "Tags", - "tagsText": "Tags Text", - "multiIcon": "Multiselect Icon", - "tabText": "Tab Text", - "tabAccent": "Tab Accent", - "checkedBackground": "Checked Background Color", - "uncheckedBackground": "Unchecked Background Color", - "uncheckedBorder": "Unchecked Border Color", - "indicatorBackground": "Indicator Background Color", - "tableCellText": "Cell Text", - "selectedRowBackground": "Selected Row Background Color", - "hoverRowBackground": "Hover Row Background Color", - "hoverBackground":"Hover Background Color", - "textTransform":"Text Transform", - "textDecoration":"Text Decoration", - "alternateRowBackground": "Alternate Row Background Color", - "tableHeaderBackground": "Header Background Color", - "tableHeaderText": "Header Text", - "toolbarBackground": "Toolbar Background Color", - "toolbarText": "Toolbar Text", - "pen": "Pen", - "footerIcon": "Footer Icon", - "tips": "Tips", - "margin": "Margin", - "padding": "Padding", - "marginLeft": "Margin Left", - "marginRight": "Margin Right", - "marginTop": "Margin Top", - "marginBottom": "Margin Bottom", - "containerHeaderPadding": "Header Padding", - "containerFooterPadding": "Footer Padding", - "containerSiderPadding": "Sider Padding", - "containerBodyPadding": "Body Padding", - "minWidth": "Minimum Width", - "aspectRatio": "Aspect Ratio", - "text": "Text", - "textSize": "Text Size", - "textWeight": "Text Weight", - "fontFamily": "Font Family", - "fontStyle":"Font Style", - "backgroundImage": "Background Image", - "backgroundImageRepeat": "Background Repeat", - "backgroundImageSize": "Background Size", - "backgroundImagePosition": "Background Position", - "backgroundImageOrigin": "Background Origin", - "headerBackgroundImage": "Background Image", - "headerBackgroundImageRepeat": "Background Image Repeat", - "headerBackgroundImageSize": "Background Image Size", - "headerBackgroundImagePosition": "Background Image Position", - "headerBackgroundImageOrigin": "Background Image Origin", - "footerBackgroundImage": "Background Image", - "footerBackgroundImageRepeat": "Background Image Repeat", - "footerBackgroundImageSize": "Background Image Size", - "footerBackgroundImagePosition": "Background Image Position", - "footerBackgroundImageOrigin": "Background Image Origin", - "rotation": "Rotation", - "alternateBackground": "Alternate Background Color", - "headerText": "Header Text Color", - "labelColor": "Label Color", - "label": "Label Color", - "lineHeight":"Line Height", - "subTitleColor": "SubTitle Color", - "titleText": "Title Color", - "success": "Success Color", - "siderBackgroundImage": "Sider Background Image", - "siderBackgroundImageRepeat": "Sider Background Image Repeat", - "siderBackgroundImageSize": "Sider Background Image Size", - "siderBackgroundImagePosition": "Sider Background Image Position", - "siderBackgroundImageOrigin": "Sider Background Image Origin", - "activeBackground": "Active Background Color", - "labelBackground": "Label Background Color", - - }, - "export": { - "hiddenDesc": "If true, the component is hidden", - "disabledDesc": "If true, the component is disabled and non-interactive", - "visibleDesc": "If true, the component is visible", - "inputValueDesc": "Current value of the input", - "invalidDesc": "Indicates whether the value is invalid", - "placeholderDesc": "Placeholder text when no value is set", - "requiredDesc": "If true, a valid value is required", - "submitDesc": "Submit Form", - "richTextEditorValueDesc": "Current value of the Editor", - "richTextEditorReadOnlyDesc": "If true, the Editor is read-only", - "richTextEditorHideToolBarDesc": "If true, the toolbar is hidden", - "jsonEditorDesc": "Current JSON data", - "sliderValueDesc": "Currently selected value", - "sliderMaxValueDesc": "Maximum value of the slider", - "sliderMinValueDesc": "Minimum value of the slider", - "sliderStartDesc": "Value of the selected starting point", - "sliderEndDesc": "Value of the selected end point", - "ratingValueDesc": "Currently selected rating", - "ratingMaxDesc": "Maximum rating value", - "datePickerValueDesc": "Currently selected date", - "datePickerFormattedValueDesc": "Formatted selected date", - "datePickerTimestampDesc": "Timestamp of the selected date", - "dateRangeStartDesc": "Start date of the range", - "dateRangeEndDesc": "End date of the range", - "dateRangeStartTimestampDesc": "Timestamp of the start date", - "dateRangeEndTimestampDesc": "Timestamp of the end date", - "dateRangeFormattedValueDesc": "Formatted date range", - "dateRangeFormattedStartValueDesc": "Formatted start date", - "dateRangeFormattedEndValueDesc": "Formatted end date", - "timePickerValueDesc": "Currently selected time", - "timePickerFormattedValueDesc": "Formatted selected time", - "timeRangeStartDesc": "Start time of the range", - "timeRangeEndDesc": "End time of the range", - "timeRangeFormattedValueDesc": "Formatted time range", - "timeRangeFormattedStartValueDesc": "Formatted start time", - "timeRangeFormattedEndValueDesc": "Formatted end time", - "timeZone": "Time Zone", - "timeZoneDesc": "Timezone of the selected date", - - - }, - "validationDesc": { - "email": "Please enter a valid email address", - "url": "Please enter a valid URL", - "regex": "Please match the specified pattern", - "maxLength": "Too many characters, current: {length}, maximum: {maxLength}", - "minLength": "Not enough characters, current: {length}, minimum: {minLength}", - "maxValue": "Value exceeds maximum, current: {value}, maximum: {max}", - "minValue": "Value below minimum, current: {value}, minimum: {min}", - "maxTime": "Time exceeds maximum, current: {time}, maximum: {maxTime}", - "minTime": "Time below minimum, current: {time}, minimum: {minTime}", - "maxDate": "Date exceeds maximum, current: {date}, maximum: {maxDate}", - "minDate": "Date below minimum, current: {date}, minimum: {minDate}" - }, - - // fifth part - - "query": { - "noQueries": "No Data Queries available.", - "queryTutorialButton": "View {value} documents", - "datasource": "Your Data Sources", - "newDatasource": "New Data Source", - "generalTab": "General", - "notificationTab": "Notification", - "advancedTab": "Advanced", - "showFailNotification": "Show Notification on Failure", - "failCondition": "Failure Conditions", - "failConditionTooltip1": "Customize failure conditions and corresponding notifications.", - "failConditionTooltip2": "If any condition returns true, the query is marked as failed and triggers the corresponding notification.", - "showSuccessNotification": "Show Notification on Success", - "successMessageLabel": "Success Message", - "successMessage": "Run Successful", - "notifyDuration": "Duration", - "notifyDurationTooltip": "Notification duration. Time unit can be 's' (second, default) or 'ms' (millisecond). Default value is {default}s. Maximum is {max}s.", - "successMessageWithName": "{name} run successful", - "failMessageWithName": "{name} run failed: {result}", - "showConfirmationModal": "Show Confirmation Modal Before Running", - "confirmationMessageLabel": "Confirmation Message", - "confirmationMessage": "Are you sure you want to run this Data Query?", - "newQuery": "New Data Query", - "newFolder": "New Folder", - "recentlyUsed": "Recently Used", - "folder": "Folder", - "folderNotEmpty": "Folder is not empty", - "dataResponder": "Data Responder", - "tempState": "Temporary State", - "transformer": "Transformer", - "quickRestAPI": "REST Query", - "quickStreamAPI": "Stream Query", - "quickGraphql": "GraphQL Query", - "lowcoderAPI": "Lowcoder API", - "executeJSCode": "Run JavaScript Code", - "importFromQueryLibrary": "Import from Query Library", - "importFromFile": "Import from File", - "triggerType": "Triggered when...", - "triggerTypeAuto": "Inputs Change or On Page Load", - "triggerTypePageLoad": "When the Application (Page) loads", - "triggerTypeManual": "Only when you trigger it manually", - "chooseDataSource": "Choose Data Source", - "method": "Method", - "updateExceptionDataSourceTitle": "Update Failing Data Source", - "updateExceptionDataSourceContent": "Update the following query with the same failing data source:", - "update": "Update", - "disablePreparedStatement": "Disable Prepared Statements", - "disablePreparedStatementTooltip": "Disabling prepared statements can generate dynamic SQL, but increases the risk of SQL injection", - "timeout": "Timeout After", - "timeoutTooltip": "Default unit: ms. Supported input units: ms, s. Default value: {defaultSeconds} seconds. Maximum value: {maxSeconds} seconds. E.g., 300 (i.e., 300ms), 800ms, 5s.", - "periodic": "Run This Data Query Periodically", - "periodicTime": "Period", - "periodicTimeTooltip": "Period between successive executions. Default unit: ms. Supported input units: ms, s. Minimum value: 100ms. Periodical execution is disabled for values below 100ms. E.g., 300 (i.e., 300ms), 800ms, 5s.", - "cancelPrevious": "Ignore Results of Previous Uncompleted Executions", - "cancelPreviousTooltip": "If a new execution is triggered, the result of the previous uncompleted executions will be ignored if they did not complete, and these ignored executions will not trigger the event list of the query.", - "dataSourceStatusError": "If a new execution is triggered, the result of the previous uncompleted executions will be ignored if the previous executions did not complete, and the ignored executions will not trigger the event list of the query.", - "success": "Success", - "fail": "Failure", - "successDesc": "Triggered When Execution is Successful", - "failDesc": "Triggered When Execution Fails", - "fixedDelayError": "Query Not Run", - "execSuccess": "Run Successful", - "execFail": "Run Failed", - "execIgnored": "The Results of This Query Were Ignored", - "deleteSuccessMessage": "Successfully Deleted. You Can Use {undoKey} to Undo", - "dataExportDesc": "Data Obtained by the Current Query", - "codeExportDesc": "Current Query Status Code", - "successExportDesc": "Whether the Current Query Was Executed Successfully", - "messageExportDesc": "Information Returned by the Current Query", - "extraExportDesc": "Other Data in the Current Query", - "isFetchingExportDesc": "Is the Current Query in the Request", - "runTimeExportDesc": "Current Query Execution Time (ms)", - "latestEndTimeExportDesc": "Last Run Time", - "triggerTypeExportDesc": "Trigger Type", - "chooseResource": "Choose a Resource", - "createDataSource": "Create a New Data Source", - "editDataSource": "Edit", - "datasourceName": "Name", - "datasourceNameRuleMessage": "Please Enter a Data Source Name", - "generalSetting": "General Settings", - "advancedSetting": "Advanced Settings", - "port": "Port", - "portRequiredMessage": "Please Enter a Port", - "portErrorMessage": "Please Enter a Correct Port", - "connectionType": "Connection Type", - "regular": "Regular", - "host": "Host", - "hostRequiredMessage": "Please Enter a Host Domain Name or IP Address", - "userName": "User Name", - "password": "Password", - "encryptedServer": "-------- Encrypted on the Server Side --------", - "uriRequiredMessage": "Please Enter a URI", - "urlRequiredMessage": "Please Enter a URL", - "uriErrorMessage": "Please Enter a Correct URI", - "urlErrorMessage": "Please Enter a Correct URL", - "httpRequiredMessage": "Please Enter http:// or https://", - "databaseName": "Database Name", - "databaseNameRequiredMessage": "Please Enter a Database Name", - "useSSL": "Use SSL", - "userNameRequiredMessage": "Please Enter Your Name", - "passwordRequiredMessage": "Please Enter Your Password", - "authentication": "Authentication", - "authenticationType": "Authentication Type", - "sslCertVerificationType": "SSL Cert Verification", - "sslCertVerificationTypeDefault": "Verify CA Cert", - "sslCertVerificationTypeSelf": "Verify Self-Signed Cert", - "sslCertVerificationTypeDisabled": "Disabled", - "selfSignedCert": "Self-Signed Cert", - "selfSignedCertRequireMsg": "Please Enter Your Certificate", - "enableTurnOffPreparedStatement": "Enable Toggling Prepared Statements for Queries", - "enableTurnOffPreparedStatementTooltip": "You can enable or disable prepared statements in the query's Advanced tab", - "serviceName": "Service Name", - "serviceNameRequiredMessage": "Please Enter Your Service Name", - "useSID": "Use SID", - "connectSuccessfully": "Connection Successful", - "saveSuccessfully": "Saved Successfully", - "database": "Database", - "cloudHosting": "Cloud-hosted Lowcoder cannot access local services using 127.0.0.1 or localhost. Try connecting to public network data sources or use a reverse proxy for private services.", - "notCloudHosting": "For docker-hosted deployment, Lowcoder uses bridge networks, so 127.0.0.1 and localhost are invalid for host addresses. To access local machine data sources, refer to", - "howToAccessHostDocLink": "How to Access Host API/DB", - "returnList": "Return", - "chooseDatasourceType": "Choose Data Source Type", - "viewDocuments": "View Documents", - "testConnection": "Test Connection", - "save": "Save", - "whitelist": "Allowlist", - "whitelistTooltip": "Add Lowcoder's IP addresses to your data source allowlist as needed.", - "address": "Address: ", - "nameExists": "Name {name} already exists", - "jsQueryDocLink": "About JavaScript Query", - "dynamicDataSourceConfigLoadingText": "Loading extra datasource configuration...", - "dynamicDataSourceConfigErrText": "Failed to load extra datasource configuration.", - "retry": "Retry", - "categoryDatabase" : "Database", - "categoryBigdata" : "Big Data", - "categoryAi" : "AI", - "categoryDevops" : "DevOps", - "categoryAppdevelopment" : "App Development", - "categoryWorkflow" : "Workflow", - "categoryMessaging" : "Messaging", - "categoryAssets" : "Assets & Storage", - "categoryProjectManagement" : "Project Management", - "categoryCrm" : "CRM", - "categoryEcommerce" : "E-commerce", - "categoryApis" : "Others", - }, - - - // sixth part - - "sqlQuery": { - "keyValuePairs": "Key-Value Pairs", - "object": "Object", - "allowMultiModify": "Allow Multi-Row Modification", - "allowMultiModifyTooltip": "If selected, all rows meeting the conditions are operated on. Otherwise, only the first row meeting the conditions is operated on.", - "array": "Array", - "insertList": "Insert List", - "insertListTooltip": "Values inserted when they do not exist", - "filterRule": "Filter Rule", - "updateList": "Update List", - "updateListTooltip": "Values updated as they exist can be overridden by the same insertion list values", - "sqlMode": "SQL Mode", - "guiMode": "GUI Mode", - "operation": "Operation", - "insert": "Insert", - "upsert": "Insert, but Update if Conflict", - "update": "Update", - "delete": "Delete", - "bulkInsert": "Bulk Insert", - "bulkUpdate": "Bulk Update", - "table": "Table", - "primaryKeyColumn": "Primary Key Column" - }, - "EsQuery": { - "rawCommand": "Raw Command", - "queryTutorialButton": "View Elasticsearch API Documents", - "request": "Request" - }, - "googleSheets": { - "rowIndex": "Row Index", - "spreadsheetId": "Spreadsheet ID", - "sheetName": "Sheet Name", - "readData": "Read Data", - "appendData": "Append Row", - "updateData": "Update Row", - "deleteData": "Delete Row", - "clearData": "Clear Row", - "serviceAccountRequireMessage": "Please Enter Your Service Account", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Sort", - "sortPlaceholder": "Name" - }, - "queryLibrary": { - "export": "Export to JSON", - "noInput": "The Current Query Has No Input", - "inputName": "Name", - "inputDesc": "Description", - "emptyInputs": "No Inputs", - "clickToAdd": "Add", - "chooseQuery": "Choose Query", - "viewQuery": "View Query", - "chooseVersion": "Choose Version", - "latest": "Latest", - "publish": "Publish", - "historyVersion": "History Version", - "deleteQueryLabel": "Delete Query", - "deleteQueryContent": "The query cannot be recovered after deletion. Delete the query?", - "run": "Run", - "readOnly": "Read Only", - "exit": "Exit", - "recoverAppSnapshotContent": "Restore the current query to version {version}", - "searchPlaceholder": "Search Query", - "allQuery": "All Queries", - "deleteQueryTitle": "Delete Query", - "unnamed": "Unnamed", - "publishNewVersion": "Publish New Version", - "publishSuccess": "Published Successfully", - "version": "Version", - "desc": "Description" - }, - "snowflake": { - "accountIdentifierTooltip": "See ", - "extParamsTooltip": "Configure Additional Connection Parameters" - }, - "lowcoderQuery": { - "queryOrgUsers": "Query Workspace Users" - }, - "redisQuery": { - "rawCommand": "Raw Command", - "command": "Command", - "queryTutorial": "View Redis Commands Documents" - }, - "httpQuery": { - "bodyFormDataTooltip": "If {type} is selected, the value format should be {object}. Example: {example}", - "text": "Text", - "file": "File", - "extraBodyTooltip": "Key-values in Extra Body will be appended to the body with JSON or Form Data types", - "forwardCookies": "Forward Cookies", - "forwardAllCookies": "Forward All Cookies" - }, - "smtpQuery": { - "attachment": "Attachment", - "attachmentTooltip": "Can be used with file upload component, data needs to be converted to: ", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Sender", - "recipient": "Recipient", - "carbonCopy": "Carbon Copy", - "blindCarbonCopy": "Blind Carbon Copy", - "subject": "Subject", - "content": "Content", - "contentTooltip": "Supports input text or HTML" - }, - - // seventh part - - "uiCompCategory": { - "dashboards": "Dashboards & Reporting", - "layout": "Layout & Navigation", - "forms": "Data Collection & Forms", - "collaboration": "Meeting & Collaboration", - "projectmanagement": "Project Management", - "scheduling": "Calendar & Scheduling", - "documents": "Document & File Management", - "itemHandling": "Item & Signature Handling", - "multimedia": "Multimedia & Animation", - "integration": "Integration & Extension" - }, - "uiComp": { - "autoCompleteCompName": "Auto Complete", - "autoCompleteCompDesc": "An input field that provides suggestions as you type, enhancing user experience and accuracy.", - "autoCompleteCompKeywords": "suggestions, autocomplete, typing, input", - - "inputCompName": "Input", - "inputCompDesc": "A basic text input field allowing users to enter and edit text.", - "inputCompKeywords": "text, input, field, edit", - - "textAreaCompName": "Text Area", - "textAreaCompDesc": "A multi-line text input for longer form content, such as comments or descriptions.", - "textAreaCompKeywords": "multiline, textarea, input, text", - - "passwordCompName": "Password", - "passwordCompDesc": "A secure field for password input, masking the characters for privacy.", - "passwordCompKeywords": "password, security, input, hidden", - - "richTextEditorCompName": "Rich Text Editor", - "richTextEditorCompDesc": "An advanced text editor supporting rich formatting options like bold, italics, and lists.", - "richTextEditorCompKeywords": "editor, text, formatting, rich content", - - "numberInputCompName": "Number Input", - "numberInputCompDesc": "A field specifically for numerical input, with controls for incrementing and decrementing values.", - "numberInputCompKeywords": "number, input, increment, decrement", - - "sliderCompName": "Slider", - "sliderCompDesc": "A graphical slider component for selecting a value or range within a defined scale.", - "sliderCompKeywords": "slider, range, input, graphical", - - "rangeSliderCompName": "Range Slider", - "rangeSliderCompDesc": "A dual-handle slider to select a range of values, useful for filtering or setting limits.", - "rangeSliderCompKeywords": "range, slider, dual-handle, filter", - - "ratingCompName": "Rating", - "ratingCompDesc": "A component for capturing user ratings, displayed as stars.", - "ratingCompKeywords": "rating, stars, feedback, input", - - "switchCompName": "Switch", - "switchCompDesc": "A toggle switch for on/off or yes/no type decisions.", - "switchCompKeywords": "toggle, switch, on/off, control", - - "selectCompName": "Select", - "selectCompDesc": "A dropdown menu for selecting from a list of options.", - "selectCompKeywords": "dropdown, select, options, menu", - - "multiSelectCompName": "Multiselect", - "multiSelectCompDesc": "A component that allows selection of multiple items from a dropdown list.", - "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", - - "cascaderCompName": "Cascader", - "cascaderCompDesc": "A multi-level dropdown for hierarchical data selection, such as selecting a location.", - "cascaderCompKeywords": "cascader, hierarchical, dropdown, levels", - - "checkboxCompName": "Checkbox", - "checkboxCompDesc": "A standard checkbox for options that can be selected or deselected.", - "checkboxCompKeywords": "checkbox, options, select, toggle", - - "radioCompName": "Radio", - "radioCompDesc": "Radio buttons for selecting one option from a set, where only one choice is allowed.", - "radioCompKeywords": "radio, buttons, select, single choice", - - "segmentedControlCompName": "Segmented Control", - "segmentedControlCompDesc": "A control with segmented options for quickly toggling between multiple choices.", - "segmentedControlCompKeywords": "segmented, control, toggle, options", - - "stepControlCompName": "Step Control", - "stepControlCompDesc": "A control with step options to offer visual guided steps for applications like forms or wizards.", - "stepControlCompKeywords": "steps, control, toggle, options", - - "fileUploadCompName": "File Upload", - "fileUploadCompDesc": "A component for uploading files, with support for drag-and-drop and file selection.", - "fileUploadCompKeywords": "file, upload, drag and drop, select", - - "dateCompName": "Date", - "dateCompDesc": "A date picker component for selecting dates from a calendar interface.", - "dateCompKeywords": "date, picker, calendar, select", - - "dateRangeCompName": "Date Range", - "dateRangeCompDesc": "A component for selecting a range of dates, useful for booking systems or filters.", - "dateRangeCompKeywords": "daterange, select, booking, filter", - - "timeCompName": "Time", - "timeCompDesc": "A time selection component for choosing specific times of the day.", - "timeCompKeywords": "time, picker, select, clock", - - "timeRangeCompName": "Time Range", - "timeRangeCompDesc": "A component for selecting a range of time, often used in scheduling applications.", - "timeRangeCompKeywords": "timerange, select, scheduling, duration", - - "buttonCompName": "Form Button", - "buttonCompDesc": "A versatile button component for submitting forms, triggering actions, or navigating.", - "buttonCompKeywords": "button, submit, action, navigate", - - "meetingControlCompName": "Icon Button", - "meetingCompDesc": "A button for controlling functions like start, end, mute, or share.", - "meetingCompKeywords": "control, button, start, end", - - "linkCompName": "Link", - "linkCompDesc": "A hyperlink display component for navigation or linking to external resources.", - "linkCompKeywords": "link, hyperlink, navigation, external", - - "scannerCompName": "Scanner", - "scannerCompDesc": "A component for scanning barcodes, QR codes, and other similar data.", - "scannerCompKeywords": "scanner, barcode, QR code, scan", - - "dropdownCompName": "Dropdown", - "dropdownCompDesc": "A dropdown menu for compactly displaying a list of options.", - "dropdownCompKeywords": "dropdown, menu, options, select", - - "toggleButtonCompName": "Toggle Button", - "toggleButtonCompDesc": "A button that can toggle between two states or options.", - "toggleButtonCompKeywords": "toggle, button, switch, state", - - "textCompName": "Text Display", - "textCompDesc": "A simple component for displaying static or dynamic text content inclusive Markdown formatting.", - "textCompKeywords": "text, display, static, dynamic", - - "tableCompName": "Table", - "tableCompDesc": "A rich table component for displaying data in a structured table format, with options for sorting and filtering, tree Data display and extensible Rows.", - "tableCompKeywords": "table, data, sorting, filtering", - - "imageCompName": "Image", - "imageCompDesc": "A component for displaying images, supporting various formats based on URI or Base64 Data.", - "imageCompKeywords": "image, display, media, Base64", - - "progressCompName": "Progress", - "progressCompDesc": "A visual indicator of progress, typically used to show the completion status of a task.", - "progressCompKeywords": "progress, indicator, status, task", - - "progressCircleCompName": "Progress Circle", - "progressCircleCompDesc": "A circular progress indicator, often used for loading states or time-bound tasks.", - "progressCircleCompKeywords": "circle, progress, indicator, loading", - - "fileViewerCompName": "File Viewer", - "fileViewerCompDesc": "A component for viewing various types of files, including documents and images.", - "fileViewerCompKeywords": "file, viewer, document, image", - - "dividerCompName": "Divider", - "dividerCompDesc": "A visual divider component, used to separate content or sections in a layout.", - "dividerCompKeywords": "divider, separator, layout, design", - - "qrCodeCompName": "QR Code", - "qrCodeCompDesc": "A component for displaying QR codes, useful for quick scanning and information transfer.", - "qrCodeCompKeywords": "QR code, scanning, barcode, information", - - "formCompName": "Form", - "formCompDesc": "A container component for building structured forms with various input types.", - "formCompKeywords": "form, input, container, structure", - - "jsonSchemaFormCompName": "JSON Schema Form", - "jsonSchemaFormCompDesc": "A dynamic form component generated based on a JSON schema.", - "jsonSchemaFormCompKeywords": "JSON, schema, form, dynamic", - - "containerCompName": "Container", - "containerCompDesc": "A general-purpose container for layout and organization of UI elements.", - "containerCompKeywords": "container, layout, organization, UI", - - "floatTextContainerCompName": "Float Text Container", - "floatTextContainerCompDesc": "Float Text Container component", - "floatTextContainerCompKeywords": "container, layout, text, flow", - - "collapsibleContainerCompName": "Collapsible Container", - "collapsibleContainerCompDesc": "A container that can be expanded or collapsed, ideal for managing content visibility.", - "collapsibleContainerCompKeywords": "collapsible, container, expand, collapse", - - "tabbedContainerCompName": "Tabbed Container", - "tabbedContainerCompDesc": "A container with tabbed navigation for organizing content into separate panels.", - "tabbedContainerCompKeywords": "tabbed, container, navigation, panels", - - "pageLayoutCompName": "Page Layout", - "pageLayoutCompDesc": "A container which offers to create a layout with header, sider, footer and main content areas", - "pageLayoutCompKeywords": "layout, container, navigation, pages", - - "modalCompName": "Modal", - "modalCompDesc": "A pop-up modal component for displaying content, alerts, or forms in focus.", - "modalCompKeywords": "modal, popup, alert, form", - - "listViewCompName": "List View", - "listViewCompDesc": "A component for displaying a list of items or data, where you can place other components inside. Like a repeater.", - "listViewCompKeywords": "list, view, display, repeater", - - "gridCompName": "Grid", - "gridCompDesc": "A flexible grid component for creating structured layouts with rows and columns as an extension to the List View component.", - "gridCompKeywords": "grid, layout, rows, columns", - - "navigationCompName": "Navigation", - "navigationCompDesc": "A navigation component for creating menus, breadcrumbs, or tabs for site navigation.", - "navigationCompKeywords": "navigation, menu, breadcrumbs, tabs", - - "iframeCompName": "IFrame", - "iframeCompDesc": "An inline frame component for embedding external web pages and apps or content within the application.", - "iframeCompKeywords": "iframe, embed, web page, content", - - "customCompName": "Custom Component", - "customCompDesc": "A flexible, programmable component for creating unique, user-defined UI elements tailored to your specific needs.", - "customCompKeywords": "custom, user-defined, flexible, programmable", - - "moduleCompName": "Module", - "moduleCompDesc": "Use Modules to create Micro-Apps designed for encapsulating specific functionalities or features. Modules can be then embedded and reused across all Apps.", - "moduleCompKeywords": "module, micro-app, functionality, reusable", - - "jsonExplorerCompName": "JSON Explorer", - "jsonExplorerCompDesc": "A component for visually exploring and interacting with JSON data structures.", - "jsonExplorerCompKeywords": "JSON, explorer, data, structure", - - "jsonEditorCompName": "JSON Editor", - "jsonEditorCompDesc": "An editor component for creating and modifying JSON data with validation and syntax highlighting.", - "jsonEditorCompKeywords": "JSON, editor, modify, validate", - - "treeCompName": "Tree", - "treeCompDesc": "A tree structure component for displaying hierarchical data, such as file systems or organizational charts.", - "treeCompKeywords": "tree, hierarchical, data, structure", - - "treeSelectCompName": "Tree Select", - "treeSelectCompDesc": "A selection component that presents options in a hierarchical tree format, allowing for organized and nested selections.", - "treeSelectCompKeywords": "tree, select, hierarchical, nested", - - "audioCompName": "Audio", - "audioCompDesc": "A component for embedding audio content, with controls for playback and volume adjustment.", - "audioCompKeywords": "audio, playback, sound, music", - - "videoCompName": "Video", - "videoCompDesc": "A multimedia component for embedding and playing video content, with support for various formats.", - "videoCompKeywords": "video, multimedia, playback, embed", - - "drawerCompName": "Drawer", - "drawerCompDesc": "A sliding panel component that can be used for additional navigation or content display, typically emerging from the edge of the screen.", - "drawerCompKeywords": "drawer, sliding, panel, navigation", - - "chartCompName": "Chart", - "chartCompDesc": "A versatile component for visualizing data through various types of charts and graphs.", - "chartCompKeywords": "chart, graph, data, visualization", - - "carouselCompName": "Image Carousel", - "carouselCompDesc": "A rotating carousel component for showcasing images, banners, or content slides.", - "carouselCompKeywords": "carousel, images, rotation, showcase", - - "imageEditorCompName": "Image Editor", - "imageEditorCompDesc": "An interactive component for editing and manipulating images, offering various tools and filters.", - "imageEditorCompKeywords": "image, editor, manipulate, tools", - - "mermaidCompName": "Mermaid Chart", - "mermaidCompDesc": "A component for rendering complex diagrams and flowcharts based on Mermaid syntax.", - "mermaidCompKeywords": "mermaid, charts, diagrams, flowcharts", - - "calendarCompName": "Calendar", - "calendarCompDesc": "A calendar component for displaying dates and events, with options for month, week, or day views.", - "calendarCompKeywords": "calendar, dates, events, scheduling", - - "signatureCompName": "Signature", - "signatureCompDesc": "A component for capturing digital signatures, useful for approvals and verification processes.", - "signatureCompKeywords": "signature, digital, approval, verification", - - "jsonLottieCompName": "Lottie Animation", - "jsonLottieCompDesc": "A component for displaying Lottie animations, providing lightweight and scalable animations based on JSON data.", - "jsonLottieCompKeywords": "lottie, animation, JSON, scalable", - - "timelineCompName": "Timeline", - "timelineCompDesc": "A component for displaying events or actions in a chronological order, visually represented along a linear timeline.", - "timelineCompKeywords": "timeline, events, chronological, history", - - "commentCompName": "Comment", - "commentCompDesc": "A component for adding and displaying user comments, supporting threaded replies and user interaction.", - "commentCompKeywords": "comment, discussion, user interaction, feedback", - - "mentionCompName": "Mention", - "mentionCompDesc": "A component that supports mentioning users or tags within text content, typically used in social media or collaborative platforms.", - "mentionCompKeywords": "mention, tag, user, social media", - - "responsiveLayoutCompName": "Responsive Layout", - "responsiveLayoutCompDesc": "A layout component designed to adapt and respond to different screen sizes and devices, ensuring a consistent user experience.", - "responsiveLayoutCompKeywords": "responsive, layout, adapt, screen size", - - "iconCompName": "Icons", - "iconCompDesc": "Use various Icons to enhance the visual appeal and user experience of your application.", - "iconCompKeywords": "Icons, pictograms, symbols, shapes", - - "tourCompName": "Tour", - "tourCompDesc": "A product tour for guiding users.", - "tourCompKeywords": "tour, product tour, walkthrough, interactive walkthrough", - - "hillchartCompName": "Hillchart", - "hillchartCompDesc": "A visualization component for displaying project management state data in a hill chart format.", - "hillchartCompKeywords": "project management, hill chart, visualization, data", - - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "A component for displaying interactive maps using OpenLayers, with support for various map layers and features.", - "openLayersGeoMapCompKeywords": "openlayers, geo map, interactive, map layers", - - "chartsGeoMapCompName": "Geo Map Charts", - "chartsGeoMapCompDesc": "A component for visualizing geographical data on interactive maps with dynamic charts", - "chartsGeoMapCompKeywords": "geo map, charts, visualization, geographical data", - - "bpmnEditorCompName": "BPMN Editor", - "bpmnEditorCompDesc": "A component for viewing, creating and editing BPMN diagrams, supporting various BPMN elements and features.", - "bpmnEditorCompKeywords": "BPMN, editor, diagrams, elements, workflows", - - "turnstileCaptchaCompName": "Turnstile Captcha", - "turnstileCaptchaCompDesc": "A captcha component to verify users against bots.", - "turnstileCaptchaCompKeywords": "captcha, verification, identity, security", - - "pivotTableCompName": "Pivot Table", - "pivotTableCompDesc": "A data summarization and analysis tool for organizing and aggregating data in a tabular format.", - "pivotTableCompKeywords": "pivot table, data, analysis, aggregation", - - "funnelChartCompName": "Funnel Chart", - "funnelChartCompDesc": "A visualization tool for displaying the progressive reduction of data as it passes through stages.", - "funnelChartCompKeywords": "funnel chart, sales, conversions, process", - - "gaugeChartCompName": "Gauge Chart", - "gaugeChartCompDesc": "A chart that displays data as a reading on a dial, useful for indicating the status or level of something.", - "gaugeChartCompKeywords": "gauge chart, metrics, performance, status", - - "sankeyChartCompName": "Sankey Chart", - "sankeyChartCompDesc": "A flow diagram in which the width of the arrows is proportional to the flow rate, used to show energy, material, or cost transfers.", - "sankeyChartCompKeywords": "sankey chart, flow, energy, costs", - - "candleStickChartCompName": "Candlestick Chart", - "candleStickChartCompDesc": "A style of financial chart used to describe price movements of a security, derivative, or currency.", - "candleStickChartCompKeywords": "candlestick chart, stocks, trading, finance", - - "radarChartCompName": "Radar Chart", - "radarChartCompDesc": "A graphical method of displaying multivariate data in the form of a two-dimensional chart of three or more quantitative variables.", - "radarChartCompKeywords": "radar chart, multivariate, performance analysis", - - "heatmapChartCompName": "Heatmap Chart", - "heatmapChartCompDesc": "A graphical representation of data where individual values are represented as colors.", - "heatmapChartCompKeywords": "heatmap, data visualization, intensity", - - "graphChartCompName": "Graph Chart", - "graphChartCompDesc": "A diagram representing a network of nodes connected by edges, useful for showing interconnections and relationships.", - "graphChartCompKeywords": "graph chart, networks, relationships, nodes", - - "treeChartCompName": "Tree Chart", - "treeChartCompDesc": "A diagram that visually represents hierarchy in a tree-like structure, showing relationships among various nodes.", - "treeChartCompKeywords": "tree chart, hierarchy, organizational", - - "treemapChartCompName": "Treemap Chart", - "treemapChartCompDesc": "A chart that uses nested rectangles to represent hierarchical data proportionately.", - "treemapChartCompKeywords": "treemap, hierarchy, data visualization", - - "sunburstChartCompName": "Sunburst Chart", - "sunburstChartCompDesc": "A radial space-filling visualization technique that illustrates hierarchical relationships through layers of a circle.", - "sunburstChartCompKeywords": "sunburst chart, radial, hierarchy", - - "themeriverChartCompName": "Theme River Chart", - "themeriverChartCompDesc": "A visualization resembling a stream graph that shows changes in a data set over time across categories.", - "themeriverChartCompKeywords": "theme river, time series, trends", - - "basicChartCompName": "Basic Chart", - "basicChartCompDesc": "A versatile component for visualizing data through various types of charts and graphs.", - "basicChartCompKeywords": "chart, graph, data, visualization", - - "shapeCompName": "Shapes", - "shapeCompDesc": "A collection of geometric shapes for use with diagrams, illustrations, and visualizations.", - "shapeCompKeywords": "shapes, geometric, diagrams, illustrations", - - "ganttChartCompName" : "Gantt Chart", - "ganttChartCompDesc" : "A chart that illustrates a project schedule, showing the start and finish dates of elements and dependencies.", - "ganttChartCompKeywords" : "gantt chart, project management, schedule", - - // by mousheng - - "colorPickerCompName": "Color Picker", - "colorPickerCompDesc": "Intuitive color selection for customization.", - "colorPickerCompKeywords": "color, picker, customization", - - "floatButtonCompName": "Float Button", - "floatButtonCompDesc": "A floating action button for prominent and quick actions.", - "floatButtonCompKeywords": "float button, action, quick", - - "avatarCompName": "Avatar", - "avatarCompDesc": "Displays user avatars or profile images for personalized identification.", - "avatarCompKeywords": "avatar, profile image, user identification", - - "avatarGroupCompName": "Avatar Group", - "avatarGroupCompDesc": "A group of avatars to represent multiple users or entities in a compact and visually appealing way.", - "avatarGroupCompKeywords": "avatar group, users, entities, compact", - - "transferName": "Transfer", - "transferDesc": "Facilitates data transfer between two lists with drag-and-drop functionality.", - "transferKeywords": "transfer, data, drag-and-drop", - - "cardCompName": "Content Card", - "cardCompDesc": "A card component for displaying organized information or content in a structured manner.", - "cardCompKeywords": "card, information, content, display", - - "timerCompName": "Timer", - "timerCompDesc": "A component that displays a countdown or elapsed time, useful for tracking durations and deadlines.", - "timerCompKeywords": "timer, countdown, elapsed time, tracking, durations, deadlines", - - }, - - - // eighth part - - - "comp": { - "menuViewDocs": "View Documentation", - "menuViewPlayground": "View interactive Playground", - "menuUpgradeToLatest": "Upgrade to Latest Version", - "nameNotEmpty": "Cannot Be Empty", - "nameRegex": "Must Start with a Letter and Contain Only Letters, Digits, and Underscores (_)", - "nameJSKeyword": "Cannot Be a JavaScript Keyword", - "nameGlobalVariable": "Cannot Be Global Variable Name", - "nameExists": "Name {name} Already Exists", - "getLatestVersionMetaError": "Failed to Fetch Latest Version, Please Try Later.", - "needNotUpgrade": "Current Version is Already Latest.", - "compNotFoundInLatestVersion": "Current Component Not Found in the Latest Version.", - "upgradeSuccess": "Successfully Upgraded to Latest Version.", - "searchProp": "Search" - }, - "jsonSchemaForm": { - "retry": "Retry", - "resetAfterSubmit": "Reset After Successful Form Submit", - "jsonSchema": "JSON Schema", - "uiSchema": "UI Schema", - "schemaTooltip": "See", - "defaultData": "Pre-filled Form Data", - "dataDesc": "Current Form Data", - "required": "Required", - "maximum": "The Maximum Value is {value}", - "minimum": "The Minimum Value is {value}", - "exclusiveMaximum": "Should Be Less Than {value}", - "exclusiveMinimum": "Should Be Greater Than {value}", - "multipleOf": "Should Be a Multiple of {value}", - "minLength": "At Least {value} Characters", - "maxLength": "At Most {value} Characters", - "pattern": "Should Match the Pattern {value}", - "format": "Should Match the Format {value}" - }, - "select": { - "inputValueDesc": "Input Search Value" - }, - "customComp": { - "text": "It's a Good Day.", - "triggerQuery": "Trigger Query", - "updateData": "Update Data", - "updateText": "I'm Also in a Good Mood to Develop now my own Custom Component with Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Data you want to pass to the Custom Component", - "code": "Code of your Custom Component", - }, - "tree": { - "placeholder": "Please Select", - "selectType": "Select Type", - "noSelect": "No Select", - "singleSelect": "Single Select", - "multiSelect": "Multi Select", - "checkbox": "Checkbox", - "checkedStrategy": "Checked Strategy", - "showAll": "All Nodes", - "showParent": "Only Parent Nodes", - "showChild": "Only Child Nodes", - "autoExpandParent": "Auto Expand Parent", - "checkStrictly": "Check Strictly", - "checkStrictlyTooltip": "Check TreeNode Precisely; Parent TreeNode and Children TreeNodes are Not Associated", - "treeData": "Tree Data", - "treeDataDesc": "Current Tree Data", - "value": "Default Values", - "valueDesc": "Current Values", - "expanded": "Expanded Values", - "expandedDesc": "Current Expanded Values", - "defaultExpandAll": "Default Expand All Nodes", - "showLine": "Show Line", - "showLeafIcon": "Show Leaf Icon", - "treeDataAsia": "Asia", - "treeDataChina": "China", - "treeDataBeijing": "Beijing", - "treeDataShanghai": "Shanghai", - "treeDataJapan": "Japan", - "treeDataEurope": "Europe", - "treeDataEngland": "England", - "treeDataFrance": "France", - "treeDataGermany": "Germany", - "treeDataNorthAmerica": "North America", - "helpLabel": "Node Label", - "helpValue": "Unique Node Value in Tree", - "helpChildren": "Children Nodes", - "helpDisabled": "Disables the Node", - "helpSelectable": "Whether Node is Selectable (Single/Multi Select Type)", - "helpCheckable": "Whether to Display Checkbox (Checkbox Type)", - "helpDisableCheckbox": "Disables the Checkbox (Checkbox Type)" - }, - "moduleContainer": { - "eventTest": "Event Test", - "methodTest": "Method Test", - "inputTest": "Input Test" - }, - "password": { - "label": "Password", - "placeholder": "Please Enter Password", - "conformLabel": "Confirm Password", - "conformPlaceholder": "Please Confirm Password", - "visibilityToggle": "Show Visibility Toggle" - }, - "richTextEditor": { - "toolbar": "Customize Toolbar", - "toolbarDescription": "You can customize the toolbar. Please refer to: https://quilljs.com/docs/modules/toolbar/ for more details.", - "placeholder": "Please Input...", - "hideToolbar": "Hide Toolbar", - "content": "Content", - "title": "Title", - "save": "Save", - "link": "Link: ", - "edit": "Edit", - "remove": "Remove", - "defaultValue" : "Base Content" - }, - - // mousheng - - "floatButton": { - "custom": "Custom", - "backTop": "Back Top", - "buttonType": "Button Type", - "buttonShape": "Button Shape", - "square": "Square", - "circle": "Circle", - "description": "Description", - "badge": "Badge", - "primary": "Primary", - "default": "Default", - "buttonTheme": "Button Theme", - "badgeColor": "Badge Color", - "dot": "Badge As Dot", - "hidden": "Hidden", - "visibilityHeight": "Visibility Height", - "visibilityHeightDesc": "Scroll to a certain height before displaying the return to top button, 0 is always displayed,Editing mode cannot preview in real-time" - }, - - "colorPicker": { - "trigger": "Triggers Event", - "click": "Click", - "hover": "Hover", - "disabledAlpha": "Disable Alpha Selection", - "recommended": "Recommended", - "showPresets": "Show Color Presets" - }, - - "badge": { - "showCloseButton": "Show close button", - "Type": "Badge type", - "Count": "Badge count", - "Size": "Badge size", - "SizeDefault": "default", - "SizeSmall": "Small", - "overflowCount": "Overflow count", - "Title": "Badge title", - "dot": "Dot", - "number": "Number", - "tooltip": "Tooltip" -}, - - "gantt": { - "key": "Key", - "title": "Title", - "project": "Project", - "from": "From", - "minute": "minute", - "hour": "Hour", - "day": "Day", - "week": "Week", - "month": "Month", - "year": "Year", - "quarter": "Quarter", - "tasks": "Tasks Data", - "level": "level", - "durationUnit": "Duration unit", - "duration": "Duration", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Week #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "tree", - "ColumnsData": "Columns Data", - "allowChangeTask": "DbClick Task", - "allowAddLink": "Add Link", - "allowLinkDelete": "Link Delete", - "allowProgressDrag": "Progress Drag", - "allowTaskDrag": "Task Drag", - "links": "Links Data", - "dataFormat": "Data parse Format", - "handleDateChange": "Handle Task Change", - "handleTaskChange": "Handle Task Change", - "handleAddedLink": "Handle Added Link", - "handleDeletedLink": "Handle Deleted Link", - "handleProgressDrag": "Handle Progress Drag", - "showTodayMark": "Show Today Mark", - "resize": "Resize", - "otherEvents": "Other Events", - "openAllBranchInit": "Open All Branch Init", - "date": "Date", - "text": "Text", - "progress": "progress", - "width": "Width", - "ColumnsType": "Cloumns Type", - "currentId": "Current ID", - "currentObject": "Current Object", - "addTask": "Add Task(s)", - "taskObject": "Task Object", - "taskObjectDesc": "Supports arrays of Tasks or single Task Object", - "linkID": "link ID", - "linkIDDesc": "Supports arrays of Links ID or single Link Object", - "removeTask": "Remove Task", - "taskID": "Task ID", - "taskIDDesc": "Supports arrays of IDs or single ID", - "add": "Add", - "expandingAll": "Expanding All", - "collapsingAll": "Collapsing All", - "addTaskFail": "The addition task failed, and the parameter type should be an object or an array object", - "addLinkFail": "The addition link failed, and the parameter type should be an object or an array object", - "removeTaskFail": "The deletion task failed, and the parameter type should be string or string array", - "removeLinkFail": "The deletion links failed, and the parameter type should be string array", - "otherData": "Other Data{i}", - "projectText": "Project #{i}", - "taskText": "Task #{i}", - "AutoCalculateProgress": "Auto Calculation Progress", - "allowProjectDrag": "Allow Project Drag", - "showColumns": "Show Columns", - "exportToPNG": "Export to PNG", - "exportToPDF": "Export to PDF", - "exportToExcel": "Export to Excel", - "progressLowBg": "Low BgColor", - "progressLowColor": "Low Progress Color", - "progressMediumBg": "Medium BgColor", - "progressMediumColor": "Medium Progress Color", - "progressHighBg": "Heigh BgColor", - "progressHighColor": "Heigh Progress Color", - "progresscompletedColor": "Completed Progress Color", - "lowProgressLine": "Low Progress Line", - "mediumProgressLine": "Medium Progress Line", - "SegmentedColor": "Progress Segmented Color", - "link_f2s": "Link F2S", - "link_s2s": "Link S2S", - "link_f2f": "Link F2F", - "link_s2f": "Link S2F", - "weekScale": "#{i}, ", - "showHolidays": "Show Holidays", - "StatutoryHolidays": "Statutory Holidays Data", - "skipOffTime": "Hides Non-Working Time", - "weekend": "Weekend", - "weekendSelected": "Weekend Selected", - "noWorkHour": "No Work Hour", - "noWorkHourSelected": "no Work Hour Selected", - "showWorkTimes": "Show Work Times", - "workTimeData": "Work Time Data", - "fit": "fit", - "manual": "manual", - "scaleMode": "Scale Mode", - "startDate": "Start Date", - "endDate": "End Date", - "addLink": "Add Link(s)", - "linkObject": "link Object", - "removeLink": "remove Link", - "allowSort": "Allow Sort", - "showTask": "Show Task", - "toggleOnDBClick": "Toggle On DBClick", - "sortOptions": "Initial Sorting Options", - "rowHeight": "Row Height", - "showTooltip": "Show Tooltip", - "tooltipTemplates": "Tooltip Template", - "allowResizeTask": "Allow Resize Task", - "projectColor": "Project Color", - "projectColorBg": "Project BgColor", - "taskColor": "Task Color", - "taskColorBg": "Task BgColor", - "milestoneColor": "Milestone Color", - "highlightOverdue": "Highlight Overdue", - "overdueColor": "Overdue Color", - "overdueBgColor": "Overdue BgColor", - "projectCompletedBgColor": "Project Completed BgColor", - "projectCompletedColor": "Project Completed Color", - "tag": "tag", - "tasksTableWidth": "Tasks Table Width", - "allowErrorMessage": "Allow Error Message", - "currentProjectId": "Current Project Id", - "currentProjectLastTask": "Current Project Last Task", - "onlySortProject": "Only Sort Project" - }, - - "transfer": { - "sourceTitle": "Source Data", - "targetTitle": "Target Data", - "content": "Content {i}", - "items": "Items", - "targetKeys": "Selected Keys", - "oneWay": "One Way", - "pagination": "Pagination", - "pageSize": "Page Size", - "allowSearch": "Allow Search", - "selectedKeys": "Selected Keys", - "searchInfo": "Search Info", - "targerObject": "Targer Object" - }, - - "avatarGroup": { - "maxCount": "Max Count", - "avatarSize": "Avatar Size", - "autoColor": "Auto Color", - "alignment": "Alignment", - "currentAvatar": "Current Avatar" - }, - - "avatarComp": { - "square": "square", - "circle": "circle", - "icon": "icon", - "shape": "shape", - "counts": "Badge", - "title": "title", - "src": "src", - "avatarCompTooltip": "The display priority is: image -> characters -> icon. Depending on what is first available.", - "iconSize": "Icon Size", - "avatarBackground": "Background", - "label": "Label", - "caption": "Caption", - "labelPosition": "Position", - "alignmentPosition": "alignment", - "text": "Text", - "enableDropDown": "Enable DropDown", - "containerBackground": "Background" - }, - - "card": { - "cardType": "Card Type", - "common": "common", - "custom": "custom", - "default": "default", - "small": "small", - "showTitle": "Show title", - "title": "Title", - "more": "More", - "extraTitle": "Call to Action", - "CoverImg": "Cover Image", - "imgSrc": "Image Source", - "showMeta": "Show Content", - "metaTitle": "Content Title", - "metaDesc": "Content Description", - "imgHeight": "Image Height", - "showActionIcon": "Show Action Options", - "actionOptions": "Action Options", - "menu": "Menu {i}", - "hoverColor": "hover Color", - "IconColor": "Icon Color", - "titleSize": "Title Size" - }, - - "timer": { - "timerState": "timer State", - "elapsedTime": "Elapsed Time", - "timer": "Timer", - "countdown": "Countdown", - "defaultValue": "Default Value", - "timerType": "Timer Type", - "start": "Start", - "pause": "Pause", - "resume": "Resume", - "reset": "Reset", - "startPause": "Start/Pause", - "hideButton": "Hide Button", - "fontColor": "Font Color" - }, - - - // ninth part - - "iconComp": { - "icon": "Icon", - "autoSize": "Icon AutoSize", - "iconSize": "Icon Size", - }, - "numberInput": { - "formatter": "Format", - "precision": "Precision", - "allowNull": "Allow Null Value", - "thousandsSeparator": "Show Thousands Separator", - "controls": "Show Increment/Decrement Buttons", - "step": "Step", - "standard": "Standard", - "percent": "Percent" - }, - "slider": { - "step": "Step", - "stepTooltip": "The Value Must Be Greater Than 0 and Divisible by (Max-Min)", - "vertical": "Vertical Orientation", - }, - "rating": { - "max": "Max Rating", - "allowHalf": "Allow Half Rating Points" - }, - "optionsControl": { - "optionList": "Options", - "option": "Option", - "optionI": "Option {i}", - "viewDocs": "View Docs", - "tip": "The 'item' and 'i' Variables Represent the Value and Index of Each Item in the Data Array" - }, - "stepOptionsControl": { - "value": "Value / Key", - "valueTooltip": "Step Value must be a number. For the first Step, it must be equal to the initial value. Numbers must be in consistent and ascending order", - "title": "Step Title", - "subTitle": "Step Subtitle", - "description": "Step Description", - "status": "Step Status", - "icon": "Step Icon", - }, - "step" : { - "initialValue": "Start Numbers at", - "initialValueTooltip": "Where to start the visual Numbering. Must be 1 or higher.", - "valueDesc": "Current Value", - "size" : "Steps Size", - "sizeSmall" : "Small", - "sizeDefault" : "Default", - "percent" : "Steps Percent", - "type" : "Steps Type", - "typeDefault" : "Standard", - "typeNavigation" : "Navigation", - "typeInline" : "Inline", - "direction" : "Steps Direction", - "directionVertical" : "Vertical", - "directionHorizontal" : "Horizontal", - "labelPlacement" : "Steps Label Placement", - "status" : "Steps Status", - "statusWait" : "Wait", - "statusProcess" : "Process", - "statusFinish" : "Finish", - "statusError" : "Error", - "showDots" : "Show Dots instead Symbols", - "showIcons" : "Show Icons instead Symbols", - "responsive" : "Responsive", - "selectable" : "Selectable", - }, - "coloredTagOptionControl" : { - "tag" : "Tag Text", - "color" : "Color", - "icon" : "Icon", - }, - "radio": { - "options": "Options", - "horizontal": "Horizontal", - "horizontalTooltip": "The Horizontal Layout Wraps Itself When It Runs Out of Space", - "vertical": "Vertical", - "verticalTooltip": "The Vertical Layout Will Always Be Displayed in a Single Column", - "autoColumns": "Auto Column", - "autoColumnsTooltip": "The Auto Column Layout Automatically Rearranges the Order as Space Permits and Displays as Multiple Columns" - }, - "cascader": { - "options": "JSON Data to show cascading selections", - }, - "selectInput": { - "valueDesc": "Currently Selected Value", - "selectedIndexDesc": "The Index of the Currently Selected Value, or -1 if No Value Is Selected", - "selectedLabelDesc": "The Label of the Currently Selected Value" - }, - "file": { - "typeErrorMsg": "Must Be a Number with a Valid File Size Unit, or a Unitless Number of Bytes.", - "fileEmptyErrorMsg": "Upload Failed. The File Size Is Empty.", - "fileSizeExceedErrorMsg": "Upload Failed. The File Size Exceeds the Limit.", - "minSize": "Min Size", - "minSizeTooltip": "The Minimum Size of Uploaded Files with Optional File Size Units (e.g., '5kb', '10 MB'). If No Unit Is Provided, the Value Will Be Considered a Number of Bytes.", - "maxSize": "Max Size", - "maxSizeTooltip": "The Maximum Size of Uploaded Files with Optional File Size Units (e.g., '5kb', '10 MB'). If No Unit Is Provided, the Value Will Be Considered a Number of Bytes.", - "single": "Single", - "multiple": "Multiple", - "directory": "Directory", - "upload": "Browse", - "fileType": "File Types", - "reference": "Please Refer to", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Unique File Type Specifiers", - "uploadType": "Upload Type", - "showUploadList": "Show Upload List", - "maxFiles": "Max Files", - "filesValueDesc": "The Contents of the Currently Uploaded File Are Base64 Encoded", - "filesDesc": "List of the Current Uploaded Files. For Details, Refer to", - "clearValueDesc": "Clear All Files", - "parseFiles": "Parse Files", - "parsedValueTooltip1": "If parseFiles Is True, Upload Files Will Parse to Object, Array, or String. Parsed Data Can Be Accessed via the parsedValue Array.", - "parsedValueTooltip2": "Supports Excel, JSON, CSV, and Text Files. Other Formats Will Return Null." - }, - "date": { - "format": "Format", - "formatTip": "Support: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", - "reference": "Please Refer to", - "showTime": "Show Time", - "start": "Start Date", - "end": "End Date", - "year": "Year", - "quarter": "Quarter", - "month": "Month", - "week": "Week", - "date": "Date", - "clearAllDesc": "Clear All", - "resetAllDesc": "Reset All", - "placeholder": "Select Date", - "placeholderText": "Placeholder", - "startDate": "Start Date", - "endDate": "End Date" - }, - "time": { - "start": "Start Time", - "end": "End Time", - "formatTip": "Support: 'HH:mm:ss', 'Timestamp'", - "format": "Format", - "placeholder": "Select Time", - "placeholderText": "Placeholder", - "startTime": "Start Time", - "endTime": "End Time" - }, - "button": { - "prefixIcon": "Prefix Icon", - "prefixText": "Prefix Text", - "suffixIcon": "Suffix Icon", - "icon": "Icon", - "iconSize": "Icon Size", - "button": "Form Button", - "formToSubmit": "Form to Submit", - "default": "Default", - "submit": "Submit", - "textDesc": "Text Currently Displayed on Button", - "loadingDesc": "Is the Button in Loading State? If True the Current Button Is Loading", - "formButtonEvent": "Event" - }, - "link": { - "link": "Link", - "textDesc": "Text Currently Displayed on Link", - "loadingDesc": "Is the Link in Loading State? If True the Current Link Is Loading" - }, - "scanner": { - "text": "Click Scan", - "camera": "Camera {index}", - "changeCamera": "Switch Camera", - "continuous": "Continuous Scanning", - "uniqueData": "Ignore Duplicate Data", - "maskClosable": "Click the Mask to Close", - "errTip": "Please Use This Component Under HTTPS or Localhost" - }, - "dropdown": { - "onlyMenu": "Display with Label Only", - "textDesc": "Text Currently Displayed on Button" - }, - "textShow": { - "text": "### 👋 Hello, {name}", - "valueTooltip": "Markdown Supports Most HTML Tags and Attributes. iframe, Script, and Other Tags Are Disabled for Security Reasons.", - "verticalAlignment": "Vertical Alignment", - "horizontalAlignment": "Horizontal Alignment", - "textDesc": "Text Displayed in the Current Text Box" - }, - - - // tenth part - - - "table": { - "editable": "Editable", - "columnNum": "Columns", - "viewModeResizable": "Column Width Adjusted by User", - "viewModeResizableTooltip": "Whether Users Can Adjust Column Width.", - "visibleResizables": "Show Resize Handles", - "visibleResizablesTooltip": "Display visible Resize Handles in the Table Header.", - "showFilter": "Show Filter Button", - "showRefresh": "Show Refresh Button", - "showDownload": "Show Download Button", - "columnSeparator": "Column Separator", - "columnSeparatorTooltip": "Column Separator (\"delimiter\") in downloaded CSV file. \n\nRecommendations:\n- Comma (,)\n- Semicolon (;)\n- Pipe (|)\n- Tab (\\t)", - "columnSetting": "Show Columns Visibility Button", - "searchText": "Search Text", - "searchTextTooltip": "Search and Filter the Data, which is currently Presented in the Table. This is a frontend-only Search and Does Not Affect the Data Source Query.)", - "showQuickJumper": "Show Quick Jumper", - "hideOnSinglePage": "Hide on Single Page", - "showSizeChanger": "Show Size Changer Button", - "pageSizeOptions": "Page Size Options", - "pageSize": "Page Size", - "total": "Total Row Count", - "totalTooltip": "The Default Value is the Number of Current Data Items, Which Can Be Obtained from the Query, for Example: '{{query1.data[0].count}}'", - "filter": "Filter", - "filterRule": "Filter Rule", - "chooseColumnName": "Choose Column", - "chooseCondition": "Choose Condition", - "clear": "Clear", - "columnShows": "Column Shows", - "selectAll": "Select All", - "and": "And", - "or": "Or", - "contains": "Contains", - "notContain": "Does Not Contain", - "equals": "Equals", - "isNotEqual": "Is Not Equal", - "isEmpty": "Is Empty", - "isNotEmpty": "Is Not Empty", - "greater": "Greater Than", - "greaterThanOrEquals": "Greater Than or Equals", - "lessThan": "Less Than", - "lessThanOrEquals": "Less Than or Equals", - "action": "Action", - "columnValue": "Column Value", - "columnValueTooltip": "'{{currentCell}}': Current Cell Data\n '{{currentRow}}': Current Row Data\n '{{currentIndex}}': Current Data Index (Starting from 0)\n Example: '{{currentCell * 5}}' Show 5 Times the Original Value Data.", - "columnTooltip": "Column Tooltip", - "imageSrc": "Image Source", - "imageSize": "Image Size", - "columnTitle": "Title", - "columnTitleTooltip": "Title Tooltip", - "showTitle": "Show Title", - "showTitleTooltip": "Show/Hide column title in table header", - "sortable": "Sortable", - "align": "Alignment", - "fixedColumn": "Fixed Column", - "autoWidth": "Auto Width", - "customColumn": "Custom Column", - "auto": "Auto", - "fixed": "Fixed", - "columnType": "Column Type", - "dataMapping": "Data Mapping", - "numberStep": "Step", - "numberStepTooltip": "The number to which the current value is increased or decreased. It can be an integer or decimal", - "precision": "Precision", - "float": "Float", - "prefix": "Prefix", - "suffix": "Suffix", - "avatars": "Avatars", - "avatarGroupAlignment": "Avatars Alignment", - "text": "Text", - "number": "Number", - "link": "Link", - "links": "Links", - "tag": "Tag", - "select": "Select", - "dropdown": "Dropdown", - "date": "Date", - "dateTime": "Date Time", - "badgeStatus": "Status", - "button": "Button", - "image": "Image", - "boolean": "Boolean", - "switch": "Switch", - "rating": "Rating", - "progress": "Progress", - "option": "Operation", - "optionList": "Operation List", - "option1": "Operation 1", - "status": "Status", - "statusTooltip": "Optional Values: Success, Error, Default, Warning, Processing", - "primaryButton": "Primary", - "defaultButton": "Default", - "type": "Type", - "tableSize": "Table Size", - "hideHeader": "Hide Table Header", - "fixedHeader": "Fixed Table Header", - "fixedHeaderTooltip": "Header Will Be Fixed for Vertically Scrollable Table", - "fixedToolbar": "Fixed Toolbar", - "fixedToolbarTooltip": "Toolbar Will Be Fixed for Vertically Scrollable Table Based on Position", - "hideBordered": "Show Resize Handles", - "showHeaderGridBorder": "Show Header Grid Border", - "showRowGridBorder": "Show Row Grid Border", - "showVerticalRowGridBorder": "Show vertical Row Grid Border", - "showHorizontalRowGridBorder": "Show horizontal Row Grid Border", - "deleteColumn": "Delete Column", - "confirmDeleteColumn": "Confirm Delete Column: ", - "small": "S", - "middle": "M", - "large": "L", - "refreshButtonTooltip": "The Current Data Changes, Click to Regenerate the Column.", - "changeSetDesc": "An Object Representing Changes to an Editable Table, Only Contains the Changed Cell. Rows Go First and Columns Go Second.", - "selectedRowDesc": "Provides Data for the Currently Selected Row, Indicating the Row That Triggers a Click Event If the User Clicks a Button/Link on the Row", - "selectedRowsDesc": "Useful in Multiple Selection Mode, Same as SelectedRow", - "pageNoDesc": "Current Display Page, Starting from 1", - "pageSizeDesc": "How Many Rows per Page", - "sortColumnDesc": "The Name of the Currently Selected Sorted Column", - "sortDesc": "Whether the Current Row Is in Descending Order", - "pageOffsetDesc": "The Current Start of Paging, Used for Paging to Get Data. Example: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", - "displayDataDesc": "Data Displayed in the Current Table", - "selectedIndexDesc": "Selected Index in Display Data", - "filterDesc": "Table Filtering Parameters", - "dataDesc": "The JSON Data for the Table", - "saveChanges": "Save Changes", - "cancelChanges": "Cancel Changes", - "rowSelectChange": "Row Select Change", - "rowClick": "Row Click", - "rowExpand": "Row Expand", - "rowShrink": "Row Shrink", - "search": "Search", - "download": "Download", - "columnEdited": "Column Edited", - "filterChange": "Filter Change", - "sortChange": "Sort Change", - "pageChange": "Page Change", - "refresh": "Refresh", - "rowColor": "Conditional row color", - "rowColorDesc": "Conditionally Set the Row Color Based on the Optional Variables: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. For Example: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - "rowHeight": "Conditional row height", - "rowHeightDesc": "Conditionally Set the Row Height Based on the Optional Variables: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. For Example: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Conditional cell color", - "cellColorDesc": "Conditionally Set the Cell Color Based on the Cell Value Using CurrentCell. For Example: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "No Event Handler Configured for Saving Changes. Please Bind at Least One Event Handler Before Click.", - "dynamicColumn": "Use Dynamic Column Visibility", - "dynamicColumnConfig": "Visible Columns", - "dynamicColumnConfigDesc": "Dynamic Column Visibility. Accepts an Array of Column Names. All Columns Are Visible by Default. Example: [\"id\", \"name\"]", - "position": "Position", - "showDataLoadSpinner": "Show Loading Indicator", - "showValue": "Show Value", - "expandable": "Expandable", - "configExpandedView": "Configure Expanded View", - "toUpdateRowsDesc": "An Array of Objects for Rows to Be Updated in Editable Tables.", - "selectedCellDesc": "Selected Cell", - "empty": "Empty", - "falseValues": "Text When False", - "iconTrue": "Icon When True", - "iconFalse": "Icon When False", - "iconNull": "Icon When Null", - "allColumn": "All", - "visibleColumn": "Visible", - "emptyColumns": "No Columns Are Currently Visible", - "showSummary": "Show Summary Row(s)", - "totalSummaryRows": "Total Rows", - "inlineAddNewRow": "Inline Add New Row(s)", - "editMode": "Edit Mode", - "singleClick": "Single Click", - "doubleClick": "Double Click", - "showUpdateButtons": "Show Save/Cancel Buttons", - }, - - - // eleventh part - - - "image": { - "src": "Image Source", - "srcDesc": "The Image Source. Can be an URL, Path or Base64 String. for Example: data:image/png;base64, AAA... CCC", - "supportPreview": "Support Click Preview (zoom)", - "supportPreviewTip": "Effective When the Image Source is Valid" - }, - "progress": { - "value": "Value", - "valueTooltip": "The Percentage Complete as a Value Between 0 and 100", - "showInfo": "Show Value", - "valueDesc": "Current Progress Value, Ranging from 0 to 100", - "showInfoDesc": "Whether to Display the Current Progress Value" - }, - "fileViewer": { - "invalidURL": "Please Enter a Valid URL or Base64 String", - "src": "File URI", - "srcTooltip": "Preview Provided Link Content by Embedding HTML, Base64 Encoded Data Can Also Be Supported, for Example: data:application/pdf; base64,AAA... CCC", - "srcDesc": "The File URI" - }, - "divider": { - "title": "Title", - "align": "Alignment", - "dashed": "Dashed", - "type": "Vertical type", - "dashedDesc": "Whether to Use Dashed Line", - "titleDesc": "Divider Title", - "alignDesc": "Divider Title Alignment" - }, - "QRCode": { - "value": "QR Code Content Value", - "valueTooltip": "The Value Contains a Maximum of 2953 Characters. The QR Code Value can encode various data types, including text messages, URLs, contact details (VCard/meCard), Wi-Fi login credentials, email addresses, phone numbers, SMS messages, geolocation coordinates, calendar event details, payment information, cryptocurrency addresses, and app download links", - "valueDesc": "The QR Code Content Value", - "level": "Fault Tolerance Level", - "levelTooltip": "Refers to the QR Code's Ability to Be Scanned Even if Part of It is Blocked. The Higher the Level, the More Complex the Code.", - "includeMargin": "Show Margin", - "image": "Display Image at the Center", - "L": "L (Low)", - "M": "M (Medium)", - "Q": "Q (Quartile)", - "H": "H (High)", - "maxLength": "The Content is Too Long. Set the Length to Less Than 2953 Characters" - }, - "jsonExplorer": { - "indent": "Indent of Each Level", - "expandToggle": "Expand JSON Tree", - "theme": "Color Theme", - "valueDesc": "Current JSON Data", - "default": "Default", - "defaultDark": "Default Dark", - "neutralLight": "Neutral Light", - "neutralDark": "Neutral Dark", - "azure": "Azure", - "darkBlue": "Dark Blue" - }, - "audio": { - "src": "Audio Source URI or Base64 String", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Autoplay", - "loop": "Loop", - "srcDesc": "Current Audio URI or Base64 String like data:audio/mpeg;base64,AAA... CCC", - "play": "Play", - "playDesc": "Triggered When Audio is Played", - "pause": "Pause", - "pauseDesc": "Triggered When Audio is Paused", - "ended": "Ended", - "endedDesc": "Triggered When the Audio Ends Playing" - }, - "video": { - "src": "Video Source URI or Base64 String", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "Poster URL", - "defaultPosterUrl": "", - "autoPlay": "Autoplay", - "loop": "Loop", - "controls": "Hide Controls", - "volume": "Volume", - "playbackRate": "Playback Rate", - "posterTooltip": "The Default Value is the First Frame of the Video", - "autoPlayTooltip": "After the Video is Loaded, It Will Play Automatically. Changing This Value from True to False Will Pause the Video. (If a Poster is Set, It Will Be Played by the Poster Button)", - "controlsTooltip": "Hide Video Playback Controls. May Not Be Fully Supported by Every Video Source.", - "volumeTooltip": "Set the Volume of the Player, Between 0 and 1", - "playbackRateTooltip": "Set the Rate of the Player, Between 1 and 2", - "srcDesc": "Current Audio URI or Base64 String like data:video/mp4;base64, AAA... CCC", - "play": "Play", - "playDesc": "Triggered When Video is Played", - "pause": "Pause", - "pauseDesc": "Triggered When Video is Paused", - "load": "Load", - "loadDesc": "Triggered When the Video Resource has Finished Loading", - "ended": "Ended", - "endedDesc": "Triggered When the Video Ends Playing", - "currentTimeStamp": "The Current Playback Position of the Video in Seconds", - "duration": "The Total Duration of the Video in Seconds" - }, - "media": { - "playDesc": "Begins Playback of the Media.", - "pauseDesc": "Pauses the Media Playback.", - "loadDesc": "Resets the Media to the Beginning and Restart Selecting the Media Resource.", - "seekTo": "Seek to the Given Number of Seconds, or Fraction if Amount is Between 0 and 1", - "seekToAmount": "Number of Seconds, or Fraction if It is Between 0 and 1", - "showPreview": "Show Preview" - }, - "rangeSlider": { - "start": "Start Value", - "end": "End Value", - "step": "Step Size", - "stepTooltip": "The Slider's Granularity, the Value Must Be Greater Than 0 and Divisible by (Max-Min)" - }, - "iconControl": { - "selectIcon": "Select an Icon", - "insertIcon": "Insert an Icon", - "insertImage": "Insert an Image or " - }, - - "shapeControl": { - "selectShape": "Select an Shape", - "insertShape": "Insert an Shape", - "insertImage": "Insert an Image or ", - }, - - // twelfth part - - - "millisecondsControl": { - "timeoutTypeError": "Please Enter the Correct Timeout Period in ms, the Current Input is: {value}", - "timeoutLessThanMinError": "Input Must Be Greater Than {left}, the Current Input is: {value}" - }, - "selectionControl": { - "single": "Single", - "multiple": "Multiple", - "close": "Close", - "mode": "Row Select Mode" - }, - "container": { - "title": "Displayed Container Title", - "titleTooltip": "The Title of the Container", - "flowWidth": "Content Width", - "floatType": "Text Float Type", - }, - "drawer": { - "closePosition": "Close Button Placement", - "placement": "Drawer Placement", - "size": "Size", - "top": "Top", - "right": "Right", - "center": "Center", - "bottom": "Bottom", - "left": "Left", - "title": "Drawer Title", - "titleAlign": "Title Alignment", - "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", - "heightTooltip": "Pixel, e.g. 378", - "openDrawerDesc": "Open Drawer", - "closeDrawerDesc": "Close Drawer", - "width": "Drawer Width", - "height": "Drawer Height" - }, - "meeting": { - "logLevel": "Agora SDK Log Level", - "placement": "Meeting Drawer Placement", - "meeting": "Meeting Settings", - "cameraView": "Camera View", - "cameraViewDesc": "Camera View of the Local User (Host)", - "screenShared": "Screen Shared", - "screenSharedDesc": "Screen Shared by the Local User (Host)", - "audioUnmuted": "Audio Unmuted", - "audioMuted": "Audio Muted", - "videoClicked": "Video Clicked", - "videoOff": "Video Off", - "videoOn": "Video On", - "size": "Size", - "top": "Top", - "host": "Host of the Meeting Room. You would need to manage the host as own Application Logic", - "participants": "Participants of the Meeting Room", - "shareScreen": "Display Screen Shared by the Local User", - "appid": "Agora Application ID", - "meetingName": "Meeting Name", - "localUserID": "Host User ID", - "userName": "Host User Name", - "rtmToken": "Agora RTM Token", - "rtcToken": "Agora RTC Token", - "noVideo": "No Video", - "profileImageUrl": "Profile Image URL", - "right": "Right", - "bottom": "Bottom", - "videoId": "Video Stream ID", - "audioStatus": "Audio Status", - "left": "Left", - "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", - "heightTooltip": "Pixel, e.g. 378", - "openDrawerDesc": "Open Drawer", - "closeDrawerDesc": "Close Drawer", - "width": "Drawer Width", - "height": "Drawer Height", - "actionBtnDesc": "Action Button", - "broadCast": "Broadcast Messages", - "title": "Meeting Title", - "meetingCompName": "Agora Meeting Controller", - "sharingCompName": "Screen Share Stream", - "videoCompName": "Camera Stream", - "videoSharingCompName": "Screen Share Stream", - "meetingControlCompName": "Icon Button", - "meetingCompDesc": "Meeting Component", - "meetingCompControls": "Meeting Control", - "meetingCompKeywords": "Agora Meeting, Web Meeting, Collaboration", - "iconSize": "Icon Size", - "userId": "Host User ID", - "roomId": "Room ID", - "meetingActive": "Ongoing Meeting", - "messages": "Broadcasted Messages" - }, - "settings": { - "title": "Settings", - "userGroups": "User Groups", - "organization": "Workspaces", - "subscription": "Subscriptions", - "audit": "Audit Logs", - "theme": "Themes", - "plugin": "Plugins", - "advanced": "Advanced", - "apiDocs": "API Docs", - "lab": "Lab", - "branding": "Branding", - "oauthProviders": "User Authentication", - "appUsage": "App Usage Logs", - "environments": "Environments", - "premium": "Premium", - "AppUsage": "Global App Usage", - }, - - - // thirteenth part - - - "memberSettings": { - "admin": "Admin", - "adminGroupRoleInfo": "Admin Can Manage Group Members and Resources", - "adminOrgRoleInfo": "Admins Own All Resources and Can Manage Groups.", - "member": "Member", - "memberGroupRoleInfo": "Member Can View Group Members", - "memberOrgRoleInfo": "Members Can Only Use or Visit Resources They Have Access To.", - "title": "Members", - "createGroup": "Create Group", - "newGroupPrefix": "New Group ", - "allMembers": "All Members", - "deleteModalTitle": "Delete This Group", - "deleteModalContent": "The Deleted Group Cannot Be Restored. Are You Sure to Delete the Group?", - "addMember": "Add Members", - "nameColumn": "User Name", - "joinTimeColumn": "Joining Time", - "actionColumn": "Operation", - "roleColumn": "Role", - "exitGroup": "Exit Group", - "moveOutGroup": "Remove from Group", - "inviteUser": "Invite Members", - "exitOrg": "Leave", - "exitOrgDesc": "Are You Sure You Want to Leave This Workspace.", - "moveOutOrg": "Remove", - "moveOutOrgDescSaasMode": "Are You Sure You Want to Remove User {name} from This Workspace?", - "moveOutOrgDesc": "Are You Sure You Want to Remove User {name}? This Action Cannot Be Recovered.", - "devGroupTip": "Members of the Developer Group Have Privileges to Create Apps and Data Sources.", - "lastAdminQuit": "The Last Administrator Cannot Exit.", - "organizationNotExist": "The Current Workspace Does Not Exist", - "inviteUserHelp": "You Can Copy the Invitation Link to Send to the User", - "inviteUserLabel": "Invitation Link:", - "inviteCopyLink": "Copy Link", - "inviteText": "{userName} Invites You to Join the Workspace \"{organization}\", Click on the Link to Join: {inviteLink}", - "groupName": "Group Name", - "createTime": "Create Time", - "manageBtn": "Manage", - "userDetail": "Detail", - "syncDeleteTip": "This Group Has Been Deleted from the Address Book Source", - "syncGroupTip": "This Group is an Address Book Synchronization Group and Cannot Be Edited" - }, - "orgSettings": { - "newOrg": "New Workspace (Organization)", - "title": "Workspace", - "createOrg": "Create Workspace (Organization)", - "deleteModalTitle": "Are You Sure to Delete This Workspace?", - "deleteModalContent": "You Are About to Delete This Workspace {permanentlyDelete}. Once Deleted, the Workspace {notRestored}.", - "permanentlyDelete": "Permanently", - "notRestored": "Cannot Be Restored", - "deleteModalLabel": "Please Enter Workspace Name {name} to Confirm the Operation:", - "deleteModalTip": "Please Enter Workspace Name", - "deleteModalErr": "Workspace Name is Incorrect", - "deleteModalBtn": "Delete", - "editOrgTitle": "Edit Workspace Information", - "orgNameLabel": "Workspace Name:", - "orgNameCheckMsg": "Workspace Name Cannot Be Empty", - "orgLogo": "Workspace Logo:", - "logoModify": "Modify Picture", - "inviteSuccessMessage": "Join the Workspace Successfully", - "inviteFailMessage": "Failed to Join Workspace", - "uploadErrorMessage": "Upload Error", - "orgName": "Workspace Name" - }, - "freeLimit": "Free Trial", - - "tabbedContainer": { - "switchTab": "Switch Tab", - "switchTabDesc": "Triggered When Switching Tabs", - "tab": "Tabs", - "atLeastOneTabError": "The Tab Container Keeps at Least One Tab", - "selectedTabKeyDesc": "Currently Selected Tab", - "iconPosition": "Icon Position", - "placement" : "Tabs Placement", - "showTabs": "Show Tabs", - "gutter" : "Gap", - "gutterTooltip" : "The distance between tabs in px", - "tabsCentered" : "Centered Tabs", - }, - "formComp": { - "containerPlaceholder": "Drag Components from the Right Pane or", - "openDialogButton": "Generate a Form from one of your Data Sources", - "resetAfterSubmit": "Reset After Successful Submit", - "initialData": "Initial Data", - "disableSubmit": "Disable Submit", - "success": "Form Generated Successfully", - "selectCompType": "Select Component Type", - "dataSource": "Data Source: ", - "selectSource": "Select Source", - "table": "Table: ", - "selectTable": "Select Table", - "columnName": "Column Name", - "dataType": "Data Type", - "compType": "Component Type", - "required": "Required", - "generateForm": "Generate Form", - "compSelectionError": "Unconfigured Column Type", - "compTypeNameError": "Could Not Get the Component Type Name", - "noDataSourceSelected": "No Data Source Selected", - "noTableSelected": "No Table Selected", - "noColumn": "No Column", - "noColumnSelected": "No Column Selected", - "noDataSourceFound": "No Supported Data Source Found. Create a New Data Source", - "noTableFound": "No Tables Were Found in This Data Source, Please Select Another Data Source", - "noColumnFound": "No Supported Column Was Found in This Table. Please Select Another Table", - "formTitle": "Form Title", - "name": "Name", - "nameTooltip": "The Attribute Name in the Data of the Form, When Left Blank, Defaults to the Component Name", - "notSupportMethod": "Not Supported Methods: ", - "notValidForm": "The Form is Not Valid", - "resetDesc": "Reset Form Data to Default Value", - "clearDesc": "Clear Form Data", - "setDataDesc": "Set Form Data", - "valuesLengthError": "Parameter Number Error", - "valueTypeError": "Parameter Type Error", - "dataDesc": "Current Form Data", - "loadingDesc": "Whether the Form is Loading?" - }, - - - // fourteenth part - - - "modalComp": { - "open": "Open", - "openDesc": "Triggered When the Modal Dialog Box is Opened", - "close": "Close", - "closeDesc": "Triggered When the Modal Dialog Box is Closed", - "openModalDesc": "Open the Dialog Box", - "closeModalDesc": "Close the Dialog Box", - "visibleDesc": "Is it Visible? If True, the Current Dialog Box Will Pop Up", - "title": "Drawer Title", - "titleAlign": "Title Alignment", - "modalHeight": "Modal Height", - "modalHeightTooltip": "Pixel, Example: 222", - "modalWidth": "Modal Width", - "modalWidthTooltip": "Number or Percentage, Example: 520, 60%" - }, - "listView": { - "noOfRows": "Row Count", - "noOfRowsTooltip": "Number of Rows in the List - Usually Set to a Variable (e.g., '{{query1.data.length}}') to Present Query Results", - "noOfColumns": "Column Count", - "itemIndexName": "Data Item Index Name", - "itemIndexNameDesc": "The Variable Name Referring to the Item's Index, Default as {default}", - "itemDataName": "Data Item Object Name", - "itemDataNameDesc": "The Variable Name Referring to the Item's Data Object, Default as {default}", - "itemsDesc": "Exposing Data of Components in List", - "dataDesc": "The JSON Data Used in the Current List", - "dataTooltip": "If You just Set a Number, This Field Will Be Regarded as Row Count, and the Data Will Be Regarded as Empty." - }, - "navigation": { - "addText": "Add Submenu Item", - "logoURL": "Navigation Logo URL", - "horizontalAlignment": "Horizontal Alignment", - "logoURLDesc": "You can display a Logo on the left side by entering URI Value or Base64 String like data:image/png;base64,AAA... CCC", - "itemsDesc": "Hierarchical Navigation Menu Items" - }, - "droppadbleMenuItem": { - "subMenu": "Submenu {number}" - }, - "navItemComp": { - "active": "Active" - }, - "iframe": { - "URLDesc": "The Source URL for the IFrame Content. Make sure the URL is HTTPS or localhost. Also make sure the URL is not blocked by the browser's Content Security Policy (CSP). The header 'X-Frame-Options' should not be set to 'DENY' or 'SAMEORIGIN'.", - "allowDownload": "Allow Downloads", - "allowSubmitForm": "Allow Submit Form", - "allowMicrophone": "Allow Microphone", - "allowCamera": "Allow Camera", - "allowPopup": "Allow Popups" - }, - "switchComp": { - "defaultValue" : "Default Boolean Value", - "open": "On", - "close": "Off", - "openDesc": "Triggered When the Switch is Turned On", - "closeDesc": "Triggered When the Switch is Turned Off", - "valueDesc": "Current Switch Status" - }, - "signature": { - "tips": "Hint Text", - "signHere": "Sign Here", - "showUndo": "Show Undo", - "showClear": "Show Clear" - }, - "localStorageComp": { - "valueDesc": "All Data Items Currently Stored", - "setItemDesc": "Add an Item", - "removeItemDesc": "Remove an Item", - "clearItemDesc": "Clear All Items" - }, - "utilsComp": { - "openUrl": "Open URL", - "openApp": "Open App", - "copyToClipboard": "Copy to Clipboard", - "downloadFile": "Download File" - }, - "messageComp": { - "info": "Send a Notification", - "loading": "Send a Loading Notification", - "success": "Send a Success Notification", - "warn": "Send a Warning Notification", - "error": "Send an Error Notification" - }, - "toastComp": { - "destroy": "close a Notification", - "info": "Send a Notification", - "loading": "Send a Loading Notification", - "success": "Send a Success Notification", - "warn": "Send a Warning Notification", - "error": "Send an Error Notification" - }, - "themeComp": { - "switchTo": "Switch Theme" - }, - "transformer": { - "preview": "Preview", - "docLink": "Read More About Transformers...", - "previewSuccess": "Preview Success", - "previewFail": "Preview Fail", - "deleteMessage": "Delete Transformer Success. You Can Use {undoKey} to Undo.", - "documentationText" : "Transformers are designed for data transformation and reuse of your multi-line JavaScript code. Use Transformers to adapt Data from queries or components to your local App needs. Unlike JavaScript query, transformer is designed to do read-only operations, which means that you cannot trigger a query or update a temporary state inside a transformer." - }, - "temporaryState": { - "value": "Init Value", - "valueTooltip": "The Initial Value Stored in the Temporary State Can Be a boolean, string, number or Any Valid JSON Value.", - "docLink": "Read More About Temporary States...", - "pathTypeError": "Path Must Be Either a String or an Array of Values", - "unStructuredError": "Unstructured Data {prev} Can't Be Updated by {path}", - "valueDesc": "Temporary State Value", - "deleteMessage": "The Temporary State is Deleted Successfully. You Can Use {undoKey} to Undo.", - "documentationText" : "Temporary states are a powerful feature used to manage complex variables that dynamically update the state of components in your application. These states act as intermediary or transient storage for data that can change over time due to user interactions or other processes." - }, - "dataResponder": { - "data": "Data", - "dataDesc": "Data of Current Data Responder", - "dataTooltip": "When This Data is Changed, It Will Trigger Subsequent Actions.", - "docLink": "Read More About the Data Responders...", - "deleteMessage": "The Data Responder is Deleted Successfully. You Can Use {undoKey} to Undo.", - "documentationText" : "When developing an app, you can assign events to components to monitor changes in specific data. For instance, a Table component might have events like \"Row select change\", \"Filter change\", \"Sort change\", and \"Page change\" to track changes in the selectedRow property. However, for changes in temporary states, transformers, or query results, where standard events are not available, Data responders are utilized. They enable you to detect and react to any data modifications." - }, - - - // fifteenth part - - - "theme": { - "title": "Themes", - "createTheme": "Create Theme", - "themeName": "Theme Name:", - "themeNamePlaceholder": "Please Enter a Theme Name", - "defaultThemeTip": "Default Theme:", - "createdThemeTip": "The Theme That You Have Created:", - "option": "Option{index}", - "input": "Input", - "confirm": "Ok", - "emptyTheme": "No Themes Available", - "click": "", - "toCreate": "", - "nameColumn": "Name", - "defaultTip": "Default", - "updateTimeColumn": "Update Time", - "edit": "Edit", - "cancelDefaultTheme": "Unset Default Theme", - "setDefaultTheme": "Set as Default Theme", - "copyTheme": "Duplicate Theme", - "setSuccessMsg": "Setting Succeeded", - "cancelSuccessMsg": "Unsetting Succeeded", - "deleteSuccessMsg": "Deletion Succeeded", - "checkDuplicateNames": "The Theme Name Already Exists, Please Re-Enter It", - "copySuffix": " Copy", - "saveSuccessMsg": "Saved Successfully", - "leaveTipTitle": "Tips", - "leaveTipContent": "You Haven't Saved Yet, Confirm Leaving?", - "leaveTipOkText": "Leave", - "goList": "Back to the List", - "saveBtn": "Save", - "mainColor": "Main Colors", - "text": "Text Colors", - "layout" : "Layout Settings", - "fonts" : "Font Settings", - "components" : "Component Templates", - "charts" : "eCharts Definition", - "defaultTheme": "Default", - "yellow": "Yellow", - "green": "Green", - "previewTitle": "Theme Preview\nExample Components That Use Your Theme Colors", - "dateColumn": "Date", - "emailColumn": "Email", - "phoneColumn": "Phone", - "subTitle": "Title", - "linkLabel": "Link", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Progress", - "sliderLabel": "Slider", - "radioLabel": "Radio", - "checkboxLabel": "Checkbox", - "buttonLabel": "Form Button", - "switch": "Switch", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "globo.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Chart Style Preview", - "chartSpending": "Spending", - "chartBudget": "Budget", - "chartAdmin": "Administration", - "chartFinance": "Finance", - "chartSales": "Sales", - "chartFunnel": "Funnel Chart", - "chartShow": "Show", - "chartClick": "Click", - "chartVisit": "Visit", - "chartQuery": "Query", - "chartBuy": "Buy" - }, - "themeDetail": { - "primary": "Brand Color", - "primaryDesc": "Default primary color used by most components", - "textDark": "Dark Text Color", - "textDarkDesc": "Used when the background color is light", - "textLight": "Light Text Color", - "textLightDesc": "Used when the background color is dark", - "canvas": "Canvas Color", - "canvasDesc": "Default background color of the app", - "primarySurface": "Container Color", - "primarySurfaceDesc": "Default background color for components like tables", - "borders": "Border Styles", - "spacing": "Spacing Styles", - "font": "Font Styles", - "fonts" : "Fonts", - "borderRadius": "Border Radius", - "borderRadiusDesc": "Default border radius used by most components", - "borderColor": "Border Color", - "borderColorDesc": "Default border color used by most components", - "borderWidth": "Border Width", - "borderWidthDesc": "Default border width used by most components", - "borderStyle": "Border Style", - "borderStyleDesc": "Default border style used by most components", - "fontFamily": "Font Family", - "fontFamilyDesc": "Default font family used by most components", - "chart": "Chart Style", - "chartDesc": "Here you can place eCharts Theme JSON to define the style of your charts in all Details.", - "echartsJson": "You can use here the Theme JSON Generator. Copy the JSON from the Generator and paste it here.", - "margin": "Margin", - "marginDesc": "Default margin typically used for most components", - "padding": "Padding", - "paddingDesc": "Default padding typically used for most components", - "containerHeaderPadding": "Header Padding", - "containerheaderpaddingDesc": "Default header padding typically used for most components", - "gridColumns": "Canvas Grid Columns", - "gridColumnsDesc": "Default number of columns typically used for most containers", - "loadingIndicators": "Loading Indicators", - "showComponentLoadingIndicators": "Show loading indicators when component load", - "showDataLoadingIndicators": "Show loading indicators when data load" - }, - "pluginSetting": { - "title": "Plugins", - "npmPluginTitle": "npm Plugins", - "npmPluginDesc": "Set Up npm Plugins for All Applications in the Current Workspace.", - "npmPluginEmpty": "No npm Plugins Were Added.", - "npmPluginAddButton": "Add a npm Plugin", - "saveSuccess": "Saved Successfully" - }, - "advanced": { - "title": "Advanced", - "defaultHomeTitle": "Default Homepage", - "defaultHomeHelp": "The Homepage is the App All Non-Developers Will See by Default When They Log In. Note: Make Sure the Selected App is Accessible to Non-Developers.", - "defaultHomePlaceholder": "Select the Default Homepage", - "saveBtn": "Save", - "preloadJSTitle": "Preload JavaScript", - "preloadJSHelp": "Set Up Preloaded JavaScript Code for All Apps in the Current Workspace.", - "preloadCSSTitle": "Preload CSS", - "preloadCSSHelp": "Set Up Preloaded CSS Code for All Apps in the Current Workspace.", - "preloadCSSApply": "Apply to the Homepage of the Workspace", - "preloadLibsTitle": "JavaScript Library", - "preloadLibsHelp": "Set Up Preloaded JavaScript Libraries for All Applications in the Current Workspace, and the System Has Built-In lodash, day.js, uuid, numbro for Direct Use. JavaScript Libraries are Loaded Before the App is Initialized, So There is a Certain Impact on App Performance.", - "preloadLibsEmpty": "No JavaScript Libraries Were Added", - "preloadLibsAddBtn": "Add a Library", - "saveSuccess": "Saved Successfully", - "AuthOrgTitle": "Workspace Welcome Screen", - "AuthOrgDescrition": "The URL for Your Users to Sign In to the Current Workspace.", - "APIConsumption": "API Consumption", - "APIConsumptionDescription": "Here you can see the API Consumption for All Apps in the Current Workspace.", - "overallAPIConsumption": "Overall API Consumption in this Workspace till now", - "lastMonthAPIConsumption": "Last Month API Consumption, in this Workspace", - "npmRegistryTitle": "Custom NPM Registry", - "npmRegistryHelp": "Setup a custom NPM Registry to enable fetching of plugins from a private NPM registry.", - "showHeaderInPublicApps": "Show Header In Public View", - "showHeaderInPublicAppsHelp": "Set visibility of header in public view for all apps", - }, - - - // sixteenth part - - - "branding": { - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": ".JPG, .SVG or .PNG Only", - "faviconTitle": "Favicon", - "faviconHelp": ".JPG, .SVG or .PNG Only", - "brandNameTitle": "Brand Name", - "headColorTitle": "Head Color", - "save": "Save", - "saveSuccessMsg": "Saved Successfully", - "upload": "Click to Upload" - }, - "networkMessage": { - "200": "Success", - "201": "Created", - "204": "No Content", - "400": "Bad Request", - "404": "Not Found", - "500": "Busy Service, Please Try Again Later", - "0": "Failed to Connect to Server, Please Check Your Network", - "401": "Authentication Failed, Please Log On Again", - "403": "No Permission, Please Contact the Administrator for Authorization", - "timeout": "Request Timeout" - }, - "share": { - "title": "Share", - "viewer": "Viewer", - "editor": "Editor", - "owner": "Owner", - "datasourceViewer": "Can Use", - "datasourceOwner": "Can Manage" - }, - "debug": { - "title": "Title", - "switch": "Switch Component: " - }, - "module": { - "emptyText": "No Data", - "docLink": "Read More About Modules...", - "documentationText" : "Modules are complete Applications, that can get included and repeated in other Applications and it functions just like a single component. As modules can get embedded, they need to be able to interact with your outside apps or websites. This four settings help to support communication with a Module.", - "circularReference": "Circular Reference, Current Module/Application Cannot Be Used!", - "emptyTestInput": "The Current Module Has No Input to Test", - "emptyTestMethod": "The Current Module Has No Method to Test", - "name": "Name", - "input": "Input", - "params": "Params", - "emptyParams": "No Params Has Been Added", - "emptyInput": "No Input Has Been Added", - "emptyMethod": "No Method Has Been Added", - "emptyOutput": "No Output Has Been Added", - "data": "Data", - "string": "String", - "number": "Number", - "array": "Array", - "boolean": "Boolean", - "query": "Query", - "autoScaleCompHeight": "Component Height Scales with Container", - "excuteMethod": "Execute Method {name}", - "method": "Method", - "action": "Action", - "output": "Output", - "nameExists": "Name {name} Already Exist", - "eventTriggered": "Event {name} is Triggered", - "globalPromptWhenEventTriggered": "Displays a Global Prompt When an Event is Triggered", - "emptyEventTest": "The Current Module Has No Events to Test", - "emptyEvent": "No Event Has Been Added", - "event": "Event" - }, - "resultPanel": { - "returnFunction": "The Return Value is a Function.", - "consume": "{time}", - "JSON": "Show JSON" - }, - "createAppButton": { - "creating": "Creating...", - "created": "Create {name}" - }, - "apiMessage": { - "authenticationFail": "User Authentication Failed, Please Sign In Again", - "verifyAccount": "Need to Verify Account", - "functionNotSupported": "The Current Version Does Not Support This Function. Please Contact the Lowcoder Business Team to Upgrade Your Account" - }, - "globalErrorMessage": { - "createCompFail": "Create Component {comp} Failed", - "notHandledError": "{method} Method Not Executed" - }, - "aggregation": { - "navLayout": "Navigation Bar", - "chooseApp": "Choose App", - "iconTooltip": "Support Image src Link or Base64 String like data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Hidden for Unauthorized Users", - "queryParam": "URL Query Params", - "hashParam": "URL Hash Params", - "tabBar": "Tab Bar", - "emptyTabTooltip": "Configure This Page on the Right Pane" - }, - - - // seventeenth part - - - "appSetting": { - "title": "General App Settings", - "450": "450px (Phone)", - "800": "800px (Tablet)", - "1440": "1440px (Laptop)", - "1920": "1920px (Wide Screen)", - "3200": "3200px (Super Large Screen)", - "autofill": "Autofill", - "userDefined": "Custom", - "default": "Default", - "tooltip": "Close the Popover After Setting", - "canvasMaxWidth": "Maximum Canvas Width for this App", - "userDefinedMaxWidth": "Custom Maximum Width", - "inputUserDefinedPxValue": "Please Enter a Custom Pixel Value", - "maxWidthTip": "Max Width Should Be Greater Than or Equal to 350", - "themeSetting": "Applied Style Theme", - "themeSettingDefault": "Default", - "themeCreate": "Create Theme", - "appTitle": "Title", - "appDescription": "Description", - "appCategory": "Category", - "showPublicHeader": "Show header in public view" - }, - "customShortcut": { - "title": "Custom Shortcuts", - "shortcut": "Shortcut", - "action": "Action", - "empty": "No Shortcuts", - "placeholder": "Press Shortcut", - "otherPlatform": "Other", - "space": "Space" - }, - "profile": { - "orgSettings": "Workspace Settings", - "switchOrg": "Switch Workspace", - "joinedOrg": "My Workspaces", - "createOrg": "Create Workspace", - "logout": "Log Out", - "personalInfo": "My Profile", - "bindingSuccess": "Binding {sourceName} Success", - "uploadError": "Upload Error", - "editProfilePicture": "Modify", - "saveUserNameTooltip": "Hit Enter to Save your new NicName. If you see your Email, it means that we just hijacked it as Username and you can change it to a better one. Your Email as technical username stays untouched.", - "changeAvatarTooltip": "You can Upload PNG or JPG files", - "nameCheck": "Name Cannot Be Empty", - "name": "Name: ", - "namePlaceholder": "Please Enter Your Name", - "toBind": "To Bind", - "binding": "Is Binding", - "bindError": "Parameter Error, Currently Not Supported Binding.", - "bindName": "Bind {name}", - "loginAfterBind": "After Binding, You Can Use {name} to Log In", - "bindEmail": "Bind Email:", - "email": "Email", - "emailCheck": "Please Enter a Valid Email", - "emailPlaceholder": "Please Enter Your Email", - "submit": "Submit", - "bindEmailSuccess": "Email Binding Success", - "passwordModifiedSuccess": "Password Changed Successfully", - "passwordSetSuccess": "Password Set Successfully", - "oldPassword": "Old Password:", - "inputCurrentPassword": "Please Enter Your Current Password", - "newPassword": "New Password:", - "inputNewPassword": "Please Enter Your New Password", - "confirmNewPassword": "Confirm New Password:", - "inputNewPasswordAgain": "Please Enter Your New Password Again", - "password": "Password:", - "modifyPassword": "Modify Password", - "setPassword": "Set Password", - "alreadySetPassword": "Password Set", - "setPassPlaceholder": "You Can Login with Password", - "setPassAfterBind": "You Can Set Password After Account Bind", - "socialConnections": "Social Connections", - "changeAvatar": "Change Avatar", - "about": "About", - "userId": "User ID", - "createdAt": "Created At", - "currentOrg": "Current Organization", - "settings": "Settings", - "uiLanguage": "UI Language", - "info": "Info", - "createdApps": "Your Created Apps", - "createdModules": "Your Created Modules", - "sharedApps": "Apps Shared with You", - "sharedModules": "Modules Shared with You", - "onMarketplace": "On Marketplace", - "howToPublish": "How to publish on Marketplace", - "memberOfOrgs": "Workspaces Membership", - "apiKeys": "API Keys", - "createApiKey": "Create API Key", - "apiKeyName": "Name", - "apiKeyDescription": "Description", - "apiKeyCopy": "Click the Api Key to get the value in your clipboard", - "apiKey": "API Key", - "deleteApiKey": "Delete API Key", - "deleteApiKeyContent": "Are you sure you want to delete this API key?", - "deleteApiKeyError": "Something went wrong. Please try again." - }, - "shortcut": { - "shortcutList": "Keyboard Shortcuts", - "click": "Click", - "global": "Global", - "toggleShortcutList": "Toggle Keyboard Shortcuts", - "editor": "Editor", - "toggleLeftPanel": "Toggle Left Pane", - "toggleBottomPanel": "Toggle Bottom Pane", - "toggleRightPanel": "Toggle Right Pane", - "toggleAllPanels": "Toggle All Panes", - "preview": "Preview", - "undo": "Undo", - "redo": "Redo", - "showGrid": "Show Grid", - "component": "Component", - "multiSelect": "Select Multiple", - "selectAll": "Select All", - "copy": "Copy", - "cut": "Cut", - "paste": "Paste", - "move": "Move", - "zoom": "Resize", - "delete": "Delete", - "deSelect": "Deselect", - "queryEditor": "Query Editor", - "excuteQuery": "Run Current Query", - "editBox": "Text Editor", - "formatting": "Format", - "openInLeftPanel": "Open in Left Pane" - }, - - - // eighteenth part - - - "help": { - "videoText": "Overview", - "onBtnText": "OK", - // eslint-disable-next-line only-ascii/only-ascii - "permissionDenyTitle": "💡 Unable to Create a New Application or Data Source?", - "permissionDenyContent": "You Don't Have Permission to Create the Application and Data Source. Please Contact the Administrator to Join the Developer Group.", - "appName": "Tutorial Application", - "chat": "Chat with Us", - "docs": "View Documentation", - "editorTutorial": "Editor Tutorial", - "update": "What's New?", - "version": "Version", - "versionWithColon": "Version: ", - "submitIssue": "Submit an Issue" - }, - "header": { - "nameCheckMessage": "The Name Cannot Be Empty", - "viewOnly": "View Only", - "recoverAppSnapshotTitle": "Restore This Version?", - "recoverAppSnapshotContent": "Restore Current App to the Version Created at {time}.", - "recoverAppSnapshotMessage": "Restore This Version", - "returnEdit": "Return to Editor", - "deploy": "Publish", - "export": "Export to JSON", - "editName": "Edit Name", - "duplicate": "Duplicate {type}", - "snapshot": "History", - "scriptsAndStyles": "Scripts and Style", - "appSettings": "App Settings", - "preview": "Preview", - "editError": "History Preview Mode, No Operation is Supported.", - "clone": "Clone", - "editorMode_layout": "Layout", - "editorMode_logic": "Logic", - "editorMode_both": "Both", - "editorMode_layout_tooltip": "Customise the component's appearance and layout, in the right window. Adjust how it looks, styles, and animates.", - "editorMode_logic_tooltip": "Set up how your component works and interacts, in the right window. Manage its content and interactive behaviours." - }, - "userAuth": { - "registerByEmail": "Sign Up", - "email": "Email:", - "inputEmail": "Please enter your email", - "inputValidEmail": "Please enter a valid email", - "forgotPassword": "Forgot Password", - "forgotPasswordInfo": "Enter your email and we'll send you a link to reset your password.", - "forgotPasswordSuccess": "Please check your email for reset password link.", - "forgotPasswordError": "Something went wrong. Please try again.", - "register": "Sign Up", - "userLogin": "Sign In", - "login": "Sign In", - "bind": "Bind", - "passwordCheckLength": "At Least {min} Characters", - "passwordCheckContainsNumberAndLetter": "Must Contain Letters and Numbers", - "passwordCheckSpace": "Cannot Contain Whitespace Characters", - "welcomeTitle": "Welcome to {productName}", - "inviteWelcomeTitle": "{username} invites You to work together", - "terms": "Terms", - "privacy": "Privacy Policy", - "registerHint": "I Have Read and Agree to the", - "chooseAccount": "Choose Your Account", - "signInLabel": "Sign In with {name}", - "bindAccount": "Bind Account", - "scanQrCode": "Scan the QR Code with {name}", - "invalidThirdPartyParam": "Invalid Third-Party Param", - "account": "Account", - "inputAccount": "Please Enter Your Account", - "ldapLogin": "LDAP Sign In", - "resetPassword": "Reset Password", - "resetPasswordDesc": "Reset User {name}'s Password. A New Password Will Be Generated After Reset.", - "resetSuccess": "Reset Succeeded", - "resetSuccessDesc": "Password Reset Succeeded. The New Password is: {password}", - "resetLostPasswordSuccess": "Password Reset Succeeded. Please login again.", - "copyPassword": "Copy Password", - "poweredByLowcoder": "Powered by: Lowcoder.cloud" - }, - "preLoad": { - "jsLibraryHelpText": "Add JavaScript Libraries to Your Current Application via URL Addresses. lodash, day.js, uuid, numbro are Built into the System for Immediate Use. JavaScript Libraries are Loaded Before the Application is Initialized, Which Can Have an Impact on Application Performance.", - "exportedAs": "Exported As", - "urlTooltip": "URL Address of the JavaScript Library, [unpkg.com](https://unpkg.com/) or [jsdelivr.net](https://www.jsdelivr.com/) is Recommended", - "externalLibsHelperText" : "Only libraries using the UMD (Universal Module Definition) approach are supported. Read more here: https://github.com/umdjs/umd", - "recommended": "Recommended", - "viewJSLibraryDocument": "Document", - "jsLibraryURLError": "Invalid URL", - "jsLibraryExist": "JavaScript Library Already Exists", - "jsLibraryEmptyContent": "No JavaScript Libraries Added", - "jsLibraryDownloadError": "JavaScript Library Download Error", - "jsLibraryInstallSuccess": "JavaScript Library Installed Successfully", - "jsLibraryInstallFailed": "JavaScript Library Installation Failed", - "jsLibraryInstallFailedCloud": "Perhaps the Library is Not Available in the Sandbox, [Documentation](https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries#manually-import-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{message}", - "add": "Add New", - "jsHelpText": "Add a Global Method or Variable to the Current Application.", - "cssHelpText": "Add Styles to the Current Application. The DOM Structure May Change as the System Iterates. Try to Modify Styles Through Component Properties.", - "scriptsAndStyles": "Scripts and Styles", - "jsLibrary": "JavaScript Library" - }, - "editorTutorials": { - "component": "Component", - "componentContent": "The Right Component Panel offers you many ready made Application Blocks (Components). These Can Be Dragged onto the Canvas for Use. You Can Also Create Your Own Components with a little coding knowledge.", - "canvas": "Canvas", - "canvasContent": "Build your apps on the Canvas with a 'What You See Is What You Get' approach. Simply drag and drop components to design your layout, and use keyboard shortcuts for quick editing like delete, copy, and paste. Once a component is selected, you can fine-tune every detail—from styling and layout to data binding and logical behavior. Plus, enjoy the added benefit of responsive design, ensuring your apps look great on any device.", - "queryData": "Query Data", - "queryDataContent": "You can create Data Queries Here and Connect to Your MySQL, MongoDB, Redis, Airtable, and many Other Data Sources. After Configuring the Query, Click 'Run' to Obtain the Data and continue the Tutorial.", - "compProperties": "Component Properties", - "interactiveDemo": "Interactive Demo", - "interactiveDemoToolTip": "Click to Start an Interactive Demo of this Feature", - }, - "supademos": { - "transformer" : "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", - "dataresponder" : "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", - "temporarystate" : "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", - "dataquery2table" : "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", - "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", - "jsQuery": "", - "streamApiQuery": "", - "mongodbQuery": "", - "libraryQuery": "", - "googleSheets": "", - "graphqlQuery": "", - "snowflakeQuery": "", - }, - "homeTutorials": { - "createAppContent": "Welcome! Click 'App' and Start to Create Your First Application.", - "createAppTitle": "Create App" - }, - "npmRegistry": { - "npmRegistryEnable": "Enable custom NPM Registry", - "npmRegistryUrl": "NPM Registry Url", - "npmRegistryUrlRequired": "Please input the registry URL", - "npmRegistryUrlInvalid": "Please input a valid URL", - "npmRegistryScope": "Package Scope", - "npmRegistryPattern": "Pattern", - "npmRegistryPatternInvalid": "Please input a valid pattern (starting with @ for oragnizations).", - "npmRegistryAuth": "Authentication", - "npmRegistryAuthType": "Authentication Type", - "npmRegistryAuthCredentials": "Authentication Credentials", - "npmRegistryAuthCredentialsRequired": "Please input the registry credentials", - "npmRegistryAuthCredentialsHelp": "For basic auth provide the base64 encoded username and password in the format 'base64(username:password)', for token auth provide the token.", - }, - - - // nineteenth part - - - "history": { - "layout": "'{0}' layout adjustment", - "upgrade": "Upgrade '{0}'", - "delete": "Delete '{0}'", - "add": "Add '{0}'", - "modify": "Modify '{0}'", - "rename": "Rename '{1}' to '{0}'", - "recover": "Recover '{2}' version", - "recoverVersion": "Recover version", - "andSoOn": "and so on", - "timeFormat": "MM DD at hh:mm A", - "emptyHistory": "No history", - "currentVersionWithBracket": " (Current)", - "currentVersion": "Current version", - "justNow": "Just now", - "history": "History" - }, - "home": { - "profile": "Your Profile", - "news": "News", - "newsLoading": "It will load some seconds.", - "orgHome" : "Homepage (Org)", - "yourOrg": "Your Organization", - "orgHomeTitle": "Organization Homepage", - "appMarketplace": "Application Marketplace", - "allApplications": "Your Apps", - "allModules": "Your Modules", - "allFolders": "Your Folders", - "yourFolders" : "Your Folders", - "modules": "Modules", - "module": "Module", - "api" : "Lowcoder API", - "trash": "Trash", - "marketplace": "Marketplace", - "allCategories": "All Categories", - "queryLibrary": "Query Library", - "datasource": "Data Sources", - "selectDatasourceType": "Select Data Source Type", - "home": "Home", - "all": "All", - "app": "App", - "navigation": "Navigation", - "navLayout": "PC Navigation", - "navLayoutDesc": "Left-side menu for easy desktop navigation.", - "mobileTabLayout": "Mobile Navigation", - "mobileTabLayoutDesc": "Bottom navigation bar for smooth mobile browsing.", - "folders": "Folders", - "folder": "Folder", - "rootFolder": "Root", - "import": "Import", - "export": "Export to JSON", - "show": "Show", - "inviteUser": "Invite members", - "createFolder": "Create Folder", - "createFolderSubTitle": "Folder name:", - "moveToFolder": "Move to folder", - "moveToTrash": "Move to trash", - "moveToFolderSubTitle": 'Move "{name}" to:', - "folderName": "Folder name:", - "resCardSubTitle": "{time} by {creator}", - "trashEmpty": "Trash is empty.", - "projectEmpty": "Nothing here.", - "projectEmptyCanAdd": "You don't have any apps yet. Click New to get started.", - "name": "Name", - "type": "Type", - "creator": "Created by", - "lastModified": "Last modified", - "deleteTime": "Delete time", - "createTime": "Create time", - "datasourceName": "Data source name", - "databaseName": "Database name", - "nameCheckMessage": "The name cannot be empty", - "deleteElementTitle": "Delete permanently", - "moveToTrashSubTitle": "{type} {name} will be moved to trash.", - "deleteElementSubTitle": "Delete {type} {name} permanently, it cannot be recovered.", - "deleteSuccessMsg": "Deleted successfully", - "deleteErrorMsg": "Deleted error", - "recoverSuccessMsg": "Recovered successfully", - "newDatasource": "New data source", - "creating": "Creating...", - "chooseDataSourceType": "Choose data source type", - "folderAlreadyExists": "The folder already exists", - "newNavLayout": "{userName}'s {name} ", - "newApp": "{userName}'s new {name} ", - "importError": "Import error, {message}", - "exportError": "Export error, {message}", - "importSuccess": "Import success", - "fileUploadError": "File upload error", - "fileFormatError": "File format error", - "groupWithSquareBrackets": "[Group] ", - "allPermissions": "Owner", - "shareLink": "Share link: ", - "copyLink": "Copy link", - "appPublicMessage": "Make the app public. Anyone can view.", - "modulePublicMessage": "Make the module public. Anyone can view.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Publish your App on the Public Marketplace. Anyone can view and copy it from there.", - "moduleMarketplaceMessage": "Publish your Module on the Public Marketplace. Anyone can view and copy it from there.", - "marketplaceGoodPublishing": "Please make sure your app is well-named and easy to use. Remove any sensitive information before publishing. Also, remove local datasources and replace by static built-in temporary data.", - "noMarketplaceApps": "No apps yet in the marketplace", - "errorMarketplaceApps": "Error while loading Marketplace Apps", - "localMarketplaceTitle": "Local Marketplace", - "globalMarketplaceTitle": "Public Marketplace", - "memberPermissionList": "Member permissions: ", - "orgName": "{orgName} admins", - "addMember": "Add members", - "addPermissionPlaceholder": "Please enter a name to search members", - "searchMemberOrGroup": "Search for members or groups: ", - "addPermissionErrorMessage": "Failed to add permission, {message}", - "copyModalTitle": 'Clone "{name}"', - "copyNameLabel": "{type} name", - "copyModalfolderLabel": "Add to folder", - "copyNamePlaceholder": "Please enter a {type} name", - "chooseNavType": "Please choose navigation type", - "createNavigation": "Create Navigation", - "howToUseAPI": "How to use the Open Rest API", - "support": "Support", - }, - - "support" : { - "supportTitle": "Lowcoder Support", - "supportContent": "If you have any questions or need help, please use the ticket system get your issue solved fast.", - "newSupportTicket": "New Support Ticket", - "ticketTitle": "Title", - "priority": "Priority", - "assignee": "Assignee", - "status": "Ticket Status", - "updatedTime": "Updated Time", - "active": "Active", - "inactive": "Inactive", - "noEmail": "No Email", - "details": "Details", - "reloadTickets": "Reload Tickets", - "createdDate": "Created Date", - "updatedDate": "Updated Date", - "description": "Issue Description", - "subtasks": "Subtasks", - "subtasksProgress": "Progress of all Subtasks", - "attachments": "Issue Attachments", - "comments": "Comments", - "addComment": "Add Comment", - "addAttachment": "Add Attachment", - "edit": "Edit Ticket Description", - "save": "Save Ticket Description", - "cancel": "Cancel", - "submitComment": "Submit Comment", - "upload": "Submit Attachment", - "selectFile": "Select File", - "ticketDescriptionUpdated": "Ticket description updated successfully!", - "ticketDescriptionUpdateFailed": "Failed to update ticket description.", - "writeComment": "Write a comment...", - "ticketCommentAdded": "Comment added successfully!", - "ticketCommentFailed": "Failed to add comment.", - "ticketCommentEmpty": "Please write a comment before submitting.", - "ticketAttachmentUploaded": "Attachment uploaded successfully!", - "ticketAttachmentFailed": "Failed to upload attachment.", - "ticketAttachmentEmpty": "Please select a file to upload.", - "ticketFetchError": "Failed to load the ticket.", - "ticketNotFound": "Ticket not found.", - "addAttachmentFileSize": "File must be smaller than 5MB!", - "goBack": "Go Back", - "noDescription": "No description available.", - "createTicket": "Create a new Support Ticket", - "createTicketTitlePlaceholder": "Enter Title (max 150 chars)", - "createTicketDescriptionTitle": "Describe your problem - the more details, the better:", - "createTicketDescriptionPlaceholder": "Describe the issue in detail, including: 1) Steps to reproduce the issue, 2) Expected behavior versus actual behavior, 3) Code snippets, if applicable, 4) Any specific components, APIs, or configurations affected", - "createTicketSubmit": "Submit Ticket", - "createTicketInfoText": "When your Ticket is created, you can then add Screenshots, Comments in the 'Details' section." - }, - - "carousel": { - "dotPosition": "Navigation Dots position", - "autoPlay": "AutoPlay", - "showDots": "Show Navigation Dots" - }, - - // twentieth part - - - "npm": { - "invalidNpmPackageName": "Invalid npm Package Name or URL.", - "pluginExisted": "This npm Plugin Already Existed", - "compNotFound": "Component {compName} Not Found.", - "addPluginModalTitle": "Add Plugin from a npm Repository", - "pluginNameLabel": "npm Package's URL or Name", - "noCompText": "No Components.", - "compsLoading": "Loading...", - "removePluginBtnText": "Remove", - "addPluginBtnText": "Add npm Plugin" - }, - "toggleButton": { - "valueDesc": "The Default Value of the Toggle Button, For Example: False", - "trueDefaultText": "Hide", - "falseDefaultText": "Show", - "trueLabel": "Text for True", - "falseLabel": "Text for False", - "trueIconLabel": "Icon for True", - "falseIconLabel": "Icon for False", - "iconPosition": "Icon Position", - "showText": "Show Text", - "alignment": "Alignment", - "showBorder": "Show Border" - }, - - // twenty-first part - - - "componentDoc": { - "markdownDemoText": "**Lowcoder** | Create software applications for your Company and your Customers with minimal coding experience. Lowcoder is the best Retool, Appsmith or Tooljet Alternative.", - "demoText": "Lowcoder | Create software applications for your Company and your Customers with minimal coding experience. Lowcoder is the best Retool, Appsmith or Tooljet Alternative.", - "submit": "Submit", - "style": "Style", - "danger": "Danger", - "warning": "Warning", - "success": "Success", - "menu": "Menu", - "link": "Link", - "customAppearance": "Custom Appearance", - "search": "Search", - "pleaseInputNumber": "Please Enter a Number", - "mostValue": "Most Value", - "maxRating": "Maximum Rating", - "notSelect": "Not Selected", - "halfSelect": "Half Selection", - "pleaseSelect": "Please Select", - "title": "Title", - "content": "Content", - "componentNotFound": "Component Does Not Exist", - "example": "Examples", - "defaultMethodDesc": "Set the Value of Property {name}", - "propertyUsage": "You Can Read Component-Related Information by Accessing Component Properties by Component Name Anywhere You Can Write JavaScript.", - "property": "Properties", - "propertyName": "Property Name", - "propertyType": "Type", - "propertyDesc": "Description", - "event": "Events", - "eventName": "Event Name", - "eventDesc": "Description", - "mehtod": "Methods", - "methodUsage": "You have the capability to engage with components via their respective methods, which can be accessed by their designated names within any segment where JavaScript is utilized. Additionally, these components can be activated through the 'Control Component' action, which is triggered in response to specific events", - "methodName": "Method Name", - "methodDesc": "Description", - "showBorder": "Show Border", - "haveTry": "Try It Yourself", - "settings": "Setting", - "settingValues": "Setting Value", - "defaultValue": "Default Value", - "time": "Time", - "date": "Date", - "noValue": "None", - "xAxisType": "X-Axis Type", - "hAlignType": "Horizontal Alignment", - "leftLeftAlign": "Left-Left Alignment", - "leftRightAlign": "Left-Right Alignment", - "topLeftAlign": "Top-Left Alignment", - "topRightAlign": "Top-Right Alignment", - "validation": "Validation", - "required": "Required", - "defaultStartDateValue": "Default Start Date", - "defaultEndDateValue": "Default End Date", - "basicUsage": "Basic Usage", - "basicDemoDescription": "The Following Examples Show the Basic Usage of the Component.", - "noDefaultValue": "No Default Value", - "forbid": "Forbidden", - "placeholder": "Placeholder", - "pleaseInputPassword": "Please Enter a Password", - "password": "Password", - "textAlign": "Text Alignment", - "length": "Length", - "top": "Top", - "pleaseInputName": "Please Enter Your Name", - "userName": "Name", - "fixed": "Fixed", - "responsive": "Responsive", - "workCount": "Word Count", - "cascaderOptions": "Cascader Options", - "pleaseSelectCity": "Please Select a City", - "advanced": "Advanced", - "showClearIcon": "Show Clear Icon", -/* eslint-disable only-ascii/only-ascii */ - appleOptionLabel: "🍎 Apple", - waterMelonOptionLabel: "🍉 Watermelon", - berryOptionLabel: "🍓 Strawberry", - lemonOptionLabel: "🍋 Lemon", - coconutOptionLabel: "🥥 Coconut", -/* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Favorites", - "option": "Option", - "singleFileUpload": "Single File Upload", - "multiFileUpload": "Multiple File Upload", - "folderUpload": "Folder Upload", - "multiFile": "Multiple Files", - "folder": "Folder", - "open": "Open", - "favoriteFruits": "Favorite Fruits", - "pleaseSelectOneFruit": "Select a Fruit", - "notComplete": "Not Complete", - "complete": "Complete", - "echart": "EChart", - "lineChart": "Line Chart", - "basicLineChart": "Basic Line Chart", - "lineChartType": "Line Chart Type", - "stackLineChart": "Stacked Line", - "areaLineChart": "Area Line", - "scatterChart": "Scatter Chart", - "scatterShape": "Scatter Shape", - "scatterShapeCircle": "Circle", - "scatterShapeRect": "Rectangle", - "scatterShapeTri": "Triangle", - "scatterShapeDiamond": "Diamond", - "scatterShapePin": "Pushpin", - "scatterShapeArrow": "Arrow", - "pieChart": "Pie Chart", - "basicPieChart": "Basic Pie Chart", - "pieChatType": "Pie Chart Type", - "pieChartTypeCircle": "Donut Chart", - "pieChartTypeRose": "Rose Chart", - "titleAlign": "Title Position", - "color": "Color", - "dashed": "Dashed", - "imADivider": "I am a Dividing Line", - "tableSize": "Table Size", - "subMenuItem": "SubMenu {num}", - "menuItem": "Menu {num}", - "labelText": "Label", - "labelPosition": "Label - Position", - "labelAlign": "Label - Align", - "optionsOptionType": "Configuration Method", - "styleBackgroundColor": "Background Color", - "styleBorderColor": "Border Color", - "styleColor": "Font Color", - "selectionMode": "Row Selection Mode", - "paginationSetting": "Pagination Setting", - "paginationShowSizeChanger": "Support Users to Modify the Number of Entries per Page", - "paginationShowSizeChangerButton": "Show Size Changer Button", - "paginationShowQuickJumper": "Show Quick Jumper", - "paginationHideOnSinglePage": "Hide When There is Only One Page", - "paginationPageSizeOptions": "Page Size", - "chartConfigCompType": "Chart Type", - "xConfigType": "X Axis Type", - "loading": "Loading", - "disabled": "Disabled", - "minLength": "Minimum Length", - "maxLength": "Maximum Length", - "showCount": "Show Word Count", - "autoHeight": "Height", - "thousandsSeparator": "Thousands Separator", - "precision": "Decimal Places", - "value": "Default Value", - "formatter": "Format", - "min": "Minimum Value", - "max": "Maximum Value", - "step": "Step Size", - "start": "Start Time", - "end": "End Time", - "allowHalf": "Allow Half Selection", - "filetype": "File Type", - "showUploadList": "Show Upload List", - "uploadType": "Upload Type", - "allowClear": "Show Clear Icon", - "minSize": "Minimum File Size", - "maxSize": "Maximum File Size", - "maxFiles": "Maximum Number of Uploaded Files", - "format": "Format", - "minDate": "Minimum Date", - "maxDate": "Maximum Date", - "minTime": "Minimum Time", - "maxTime": "Maximum Time", - "text": "Text", - "type": "Type", - "hideHeader": "Hide Header", - "hideBordered": "Hide Border", - "src": "Image URL", - "showInfo": "Display Value", - "mode": "Mode", - "onlyMenu": "Only Menu", - "horizontalAlignment": "Horizontal Alignment", - "row": "Left", - "column": "Top", - "leftAlign": "Left Alignment", - "rightAlign": "Right Alignment", - "percent": "Percentage", - "fixedHeight": "Fixed Height", - "auto": "Adaptive", - "directory": "Folder", - "multiple": "Multiple Files", - "singleFile": "Single File", - "manual": "Manual", - "default": "Default", - "small": "Small", - "middle": "Medium", - "large": "Large", - "single": "Single", - "multi": "Multiple", - "close": "Close", - "ui": "UI Mode", - "line": "Line Chart", - "scatter": "Scatter Plot", - "pie": "Pie Chart", - "basicLine": "Basic Line Chart", - "stackedLine": "Stacked Line Chart", - "areaLine": "Area Area Map", - "basicPie": "Basic Pie Chart", - "doughnutPie": "Donut Chart", - "rosePie": "Rose Chart", - "category": "Category Axis", - "circle": "Circle", - "rect": "Rectangle", - "triangle": "Triangle", - "diamond": "Diamond", - "pin": "Pushpin", - "arrow": "Arrow", - "left": "Left", - "right": "Right", - "center": "Center", - "bottom": "Bottom", - "justify": "Justify Both Ends" - }, - - - // twenty-second part - - - "playground": { - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Current Data State", - "preview": "Preview", - "property": "Properties", - "console": "Visual Script Console", - "executeMethods": "Execute Methods", - "noMethods": "No Methods.", - "methodParams": "Method Parameters", - "methodParamsHelp": "Input Method Parameters Using JSON. For Example, You Can Set setValue's Parameters With: [1] or 1" - }, - "calendar": { - "headerBtnBackground": "Button Background", - "btnText": "Button Text", - "title": "Title", - "selectBackground": "Selected Background" - }, - /*"componentDocExtra": { - "table": table, - },*/ - "idSource": { - "title": "User Authentication Provider", - "form": "Email", - "pay": "Premium", - "enable": "Enable", - "unEnable": "Not Enabled", - "loginType": "Login Type", - "status": "Status", - "desc": "Description", - "manual": "Address Book:", - "syncManual": "Sync Address Book", - "syncManualSuccess": "Sync Succeeded", - "enableRegister": "Allow Registration", - "saveBtn": "Save and Enable", - "save": "Save", - "none": "None", - "formPlaceholder": "Please Enter {label}", - "formSelectPlaceholder": "Please Select the {label}", - "saveSuccess": "Saved Successfully", - "dangerLabel": "Danger Zone", - "dangerTip": "Disabling This ID Provider May Result in Some Users Being Unable to Log In. Proceed With Caution.", - "disable": "Disable", - "disableSuccess": "Disabled Successfully", - "encryptedServer": "-------- Encrypted on the Server Side --------", - "disableTip": "Tips", - "disableContent": "Disabling This ID Provider May Result in Some Users Being Unable to Log In. Are You Sure to Proceed?", - "manualTip": "", - "lockTip": "The Content is Locked. To Make Changes, Please Click the {icon} to Unlock.", - "lockModalContent": "Changing the 'ID Attribute' Field Can Have Significant Impacts on User Identification. Please Confirm That You Understand the Implications of This Change Before Proceeding.", - "payUserTag": "Premium", - "source" : "Source", - "sourceName" : "Auth Provider Name", - "sourceDescription" : "Auth Provider Description", - "sourceIcon" : "Auth Provider Icon", - "sourceCategory" : "Auth Provider Category", - "souceIssuerURI" : "Auth Provider Issuer URI", - "souceAuthorizationEndpoint" : "Auth Provider Authorization Endpoint", - "souceTokenEndpoint" : "Auth Provider Token Endpoint", - "souceUserInfoEndpoint" : "Auth Provider User Info Endpoint", - "userInfoIntrospection" : "Use OpenID User Introspection", - "userCanSelectAccounts" : "User Can Select from Accounts", - "sourceCategoryEnterprise" : "Enterprise Identity", - "sourceCategoryCloud" : "Cloud Services", - "sourceCategorySocial" : "Social Media", - "sourceCategoryDevelopment" : "Development", - "sourceCategoryTools" : "Tools & Productivity", - }, - "slotControl": { - "configSlotView": "Configure Slot View" - }, - "jsonLottie": { - "lottieJson": "Lottie JSON", - "speed": "Speed", - "width": "Width", - "height": "Height", - "backgroundColor": "Background Color", - "animationStart": "Animation Start", - "valueDesc": "Current JSON Data", - "loop": "Loop", - "auto": "Auto", - "onHover": "On Hover", - "singlePlay": "Single Play", - "endlessLoop": "Endless Loop", - "keepLastFrame": "Keep Last Frame displayed" - }, - "timeLine": { - "titleColor": "Title Color", - "subTitleColor": "Subtitle Color", - "labelColor": "Label Color", - "value": "Timeline Data", - "mode": "Display Order", - "left": "Content Right", - "right": "Content Left", - "alternate": "Alternate Content Order", - "modeTooltip": "Set the Content to Appear Left/Right or Alternately on Both Sides of the Timeline", - "reverse": "Newest Events First", - "pending": "Pending Node Text", - "pendingDescription": "When Set, Then a Last Node With the Text and a Waiting Indicator Will Be Displayed.", - "defaultPending": "Continuous Improvement", - "clickTitleEvent": "Click Title Event", - "clickTitleEventDesc": "Click Title Event", - "Introduction": "Introduction Keys", - "helpTitle": "Title of Timeline (Required)", - "helpsubTitle": "Subtitle of Timeline", - "helpLabel": "Label of Timeline, Used to Display Dates", - "helpColor": "Indicates Timeline Node Color", - "helpDot": "Rendering Timeline Nodes as Ant Design Icons", - "helpTitleColor": "Individually Control the Color of Node Title", - "helpSubTitleColor": "Individually Control the Color of Node Subtitle", - "helpLabelColor": "Individually Control the Color of Node Icon", - "valueDesc": "Data of Timeline", - "clickedObjectDesc": "Clicked Item Data", - "clickedIndexDesc": "Clicked Item Index" - }, - - - // twenty-third part - - - "comment": { - "value": "Comment List Data", - "showSendButton": "Allowing Comments", - "title": "Title", - "titledDefaultValue": "%d Comment in Total", - "placeholder": "Shift + Enter to Comment; Enter @ or # for Quick Input", - "placeholderDec": "Placeholder", - "buttonTextDec": "Button Title", - "buttonText": "Comment", - "mentionList": "Mention List Data", - "mentionListDec": "Key-Mention Keywords; Value-Mention List Data", - "userInfo": "User Info", - "dateErr": "Date Error", - "commentList": "Comment List", - "deletedItem": "Deleted Item", - "submitedItem": "Submitted Item", - "deleteAble": "Show Delete Button", - "Introduction": "Introduction Keys", - "helpUser": "User Info (Required)", - "helpname": "User Name (Required)", - "helpavatar": "Avatar URL (High Priority)", - "helpdisplayName": "Display Name (Low Priority)", - "helpvalue": "Comment Content", - "helpcreatedAt": "Create Date" - }, - "mention": { - "mentionList": "Mention List Data" - }, - "autoComplete": { - "value": "Auto Complete Value", - "checkedValueFrom": "Checked Value From", - "ignoreCase": "Search Ignore Case", - "searchLabelOnly": "Search Label Only", - "searchFirstPY": "Search First Pinyin", - "searchCompletePY": "Search Complete Pinyin", - "searchText": "Search Text", - "SectionDataName": "AutoComplete Data", - "valueInItems": "Value in Items", - "type": "Type", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Key", - "selectLable": "Label", - "ComponentType": "Component Type", - "colorIcon": "Blue", - "grewIcon": "Grey", - "noneIcon": "None", - "small": "Small", - "large": "Large", - "componentSize": "Component Size", - "Introduction": "Introduction Keys", - "helpLabel": "Label", - "helpValue": "Value" - }, - "responsiveLayout": { - "column": "Columns", - "addColumn": "Add Column", - "columnDefinition": "Column Definition", - "rowDefinition": "Row Definition", - "columnGap": "Column Gap", - "rowGap": "Row Gap", - "atLeastOneColumnError": "Responsive Layout Keeps at Least One Column", - "columnsPerRow": "Columns per Row", - "columnsSpacing": "Columns Spacing (px)", - "horizontal": "Horizontal", - "vertical": "Vertical", - "mobile": "Mobile", - "tablet": "Tablet", - "desktop": "Desktop", - "rowStyle": "Row Style", - "columnStyle": "Column Style", - "minWidth": "Min. Width", - "rowBreak": "Row Break", - "matchColumnsHeight": "Match Columns Height", - "rowLayout": "Row Layout", - "columnsLayout": "Columns Layout", - "columnsDefinitionTooltip": "Columns can be defined freely based on the CSS columns properties. For example, 'auto auto' will create two columns with equal width. Read more here: https://css-tricks.com/almanac/properties/g/grid-template-columns", - "rowsDefinitionTooltip": "Rows can be defined freely based on the CSS rows properties. For example, 'auto auto' will create two rows with equal height. Read more here: https://css-tricks.com/almanac/properties/g/grid-template-rows", - }, - - "navLayout": { - "mode": "Mode", - "modeInline": "Inline", - "modeVertical": "Vertical", - "modeHorizontal": "Horizontal", - "width": "Width", - "widthTooltip": "Pixel or Percentage, e.g. 520, 60%", - "navStyle": "Menu Style", - "navItemStyle": "Menu Item Style", - "navBackground": "Background Image", - "mobileNavVerticalOrientation": "Vertical Orientation", - "mobileNavVerticalMaxWidth": "Max Width", - "mobileNavBarHeight": "Navbar Height", - "mobileNavVerticalShowSeparator": "Show Separator", - "mobileNavIconSize": "Icon Size", - }, - -"timeZone": { - "UTC-12:00": "(UTC-12:00) Int'l Date Line W", - "UTC-11:00": "(UTC-11:00) UTC-11", - "UTC-10:00": "(UTC-10:00) Hawaii", - "UTC-09:00": "(UTC-09:00) Alaska", - "UTC-08:00": "(UTC-08:00) Baja CA", - "UTC-07:00": "(UTC-07:00) Pacific Time (US)", - "UTC-06:00": "(UTC-06:00) Central Time (US)", - "UTC-05:00": "(UTC-05:00) Eastern Time (US)", - "UTC-04:00": "(UTC-04:00) Atlantic Time", - "UTC-03:00": "(UTC-03:00) Buenos Aires", - "UTC-02:00": "(UTC-02:00) UTC-02", - "UTC-01:00": "(UTC-01:00) Cape Verde", - "UTC+00:00": "(UTC 00:00) UTC", - "UTC+01:00": "(UTC+01:00) Berlin, Rome", - "UTC+02:00": "(UTC+02:00) Athens, Bucharest", - "UTC+03:00": "(UTC+03:00) Moscow", - "UTC+04:00": "(UTC+04:00) Dubai, Muscat", - "UTC+05:00": "(UTC+05:00) Karachi", - "UTC+05:30": "(UTC+05:30) New Delhi", - "UTC+05:45": "(UTC+05:45) Kathmandu", - "UTC+06:00": "(UTC+06:00) Dhaka", - "UTC+06:30": "(UTC+06:30) Yangon", - "UTC+07:00": "(UTC+07:00) Bangkok", - "UTC+08:00": "(UTC+08:00) Beijing, HK", - "UTC+09:00": "(UTC+09:00) Tokyo, Seoul", - "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", - "UTC+10:00": "(UTC+10:00) Sydney", - "UTC+11:00": "(UTC+11:00) Solomon Islands, New Caledonia", - "UTC+12:00": "(UTC+12:00) Auckland, Fiji", - "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", - "UserChoice": "UserChoice" -}, - tour: { - section1Title: "Steps", - section1Subtitle: "Steps", - tooltipExampleHeader: "Example:", - tooltipSignatureHeader: "Signature:", - options: { - title: { - label: "Title", - placeholder: "Welcome", - tooltip: "The title of the step. Any HTML is valid here.", - }, - description: { - label: "Description", - placeholder: "Welcome to lowcoder!", - tooltip: "The description of the step. Any HTML is valid here.", - }, - mask: { - label: "Mask", - tooltip: "Whether to enable masking, change mask style and fill color by pass custom props, the default follows the `mask` property of Tour.", - tooltipValidTypes: "Valid input types: `true`, `false`, empty, or a JSON object following the CSSProperties Schema from Antd.", - }, - arrow: { - label: "Arrow", - tooltip: "Turns the arrow on and off or moves it to point at the center of the component, if desired, otherwise the arrow will always point near the top of the component.", - tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", - }, - type: { - label: "Type", - tooltip: "The type of tooltip, this affects the background color and text color. The colors can be controlled with the main tour styling section." - }, - target: { - label: "Component", - tooltip: "The component you want to put the tooltip on, or leave it empty if you simply want a modal in the middle of the screen." - }, - coverImage: { - label: "Cover Image URI", - tooltip: "A URI for an image you would like to display with the step", - } - }, - indicatorsRender: { - label: "Indicators Render", - tooltip: "Provides a custom indicator for which step you are on", - tooltipValidTypes: "Format is a function that accepts two args, `current` and `total` and returns a ReactNode", - tooltipFunctionSignatureHeader: "Signature:", - tooltipFunctionSignature: "(current: number, total: number) => ReactNode", - tooltipExampleHeader: "Example:", - }, - disabledInteraction: { - label: "Disable Interaction", - tooltip: "Disable interaction in the highlighted area." - }, - mask: { - label: "Mask", - tooltip: "Whether to enable masking, change mask style and fill color by pass custom props, the default follows the `mask` property of Tour. Can be overridden at the step level.", - tooltipValidTypes: "Valid input types: `true`, `false`, empty, or a JSON object following the CSSProperties Schema from Antd.", - }, - placement: { - label: "Placement", - tooltip: "Position of the guide card relative to the target element. Can be overridden at the step level.", - tooltipValidOptions: "Valid options", - tooltipValidOptionsAbove: "Above the component:", - tooltipValidOptionsLeft: "To the left of the component:", - tooltipValidOptionsRight: "To the right of the component:", - tooltipValidOptionsBelow: "Below the component:", - tooltipValidOptionsOnTop: "On top of the component:", - }, - arrow: { - label: "Arrow", - tooltip: "Turns the arrow on and off or moves it to point at the center of the component, if desired, otherwise the arrow will always point near the top of the component. Can be overridden at the step level.", - tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", - }, - type: { - label: "Type", - tooltip: "The type of tooltip, this affects the background color and text color. The colors can be controlled with the main tour styling section. Can be overridden at the step level." - }, - }, - - docUrls: { - docHome: "https://docs.lowcoder.cloud/", - apiDocHome: "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - components: "https://app.lowcoder.cloud/components/{compType}", - module: "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - optionList: "", - terms: "https://lowcoder.cloud/terms", - privacy: "https://lowcoder.cloud/privacy", - aboutUs: "https://lowcoder.cloud/about", - changeLog: "https://github.com/lowcoder-org/lowcoder/releases", - introVideo: "", - devNpmPlugin: "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - devNpmPluginText: "How to develop npm plugin", - useHost: "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - eventHandlerSlowdown: "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - thirdLib: "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - thirdLibUrlText: "Use third-party libraries", - }, - datasourceTutorial: { - mysql: "", - mongodb: "", - postgres: "", - redis: "", - es: "", - smtp: "", - clickHouse: "", - }, - queryTutorial: { - js: "", - transformer: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - tempState: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - dataResponder: "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - customComponent: { - entryUrl: "https://sdk.lowcoder.cloud/custom_component.html", - }, - template: { - cloneUrl: "/apps/template-import/", - }, - lowcoderUrl: { - createIssue: "https://github.com/lowcoder-org/lowcoder/issues", - discord: "https://discord.com/invite/qMG9uTmAx2", - }, - -}; - -// const jsonString = JSON.stringify(en, null, 2); -// console.log(jsonString); - -// If you want to write this to a file, you can use the fs module -// const fs = require('fs'); -// fs.writeFileSync('output.json', jsonString, 'utf8'); diff --git a/translations/locales/es-updated.js b/translations/locales/es-updated.js new file mode 100644 index 0000000000..c4ea4c8c77 --- /dev/null +++ b/translations/locales/es-updated.js @@ -0,0 +1,4844 @@ + +import { en } from "./en.js"; +export const es = { + ...en, + + "productName": "Lowcoder", + "productDesc": "Cree aplicaciones de software para su empresa y sus clientes con una experiencia mínima en codificación. Lowcoder es una excelente alternativa a Retool, Appsmith y Tooljet.", + "notSupportedBrowser": "Su navegador actual puede tener problemas de compatibilidad. Para una experiencia de usuario óptima, utilice la última versión de Chrome.", + "create": "Cree", + "move": "Mover", + "addItem": "Añadir", + "newItem": "Nuevo", + "copy": "Copia", + "rename": "Cambie el nombre de", + "delete": "Borrar", + "deletePermanently": "Borrar permanentemente", + "remove": "Eliminar", + "recover": "Recuperar", + "edit": "Editar", + "view": "Ver", + "value": "Valor", + "data": "Datos", + "information": "Información", + "success": "Éxito", + "warning": "Advertencia", + "error": "Error", + "reference": "Referencia", + "text": "Texto", + "basic": "Básico", + "label": "Etiqueta", + "layout": "Diseño", + "color": "Color", + "form": "Forma", + "menu": "Menú", + "menuItem": "Elemento del menú", + "ok": "OK", + "cancel": "Cancelar", + "finish": "Acabado", + "reset": "Restablecer", + "icon": "Icono", + "code": "Código", + "title": "Título", + "emptyContent": "Contenido vacío", + "more": "Más", + "search": "Buscar en", + "back": "Volver", + "accessControl": "Control de acceso", + "copySuccess": "Copiado correctamente", + "copyError": "Error de copia", + "api": { + ...en.api, + + "publishSuccess": "Publicado con éxito", + "recoverFailed": "Recuperación fallida", + "needUpdate": "Su versión actual es obsoleta. Por favor, actualice a la última versión.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "El editor de código actual no soporta el autoformateo.", + "fold": "Pliegue", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Establecer propiedad: ___MARCADOR0___", + "clearDesc": "Borrar propiedad: ___TITULAR0___", + "resetDesc": "Restablecer propiedad: {property} al valor por defecto", + }, + "method": { + ...en.method, + + "focus": "Fijar el foco", + "focusOptions": "Opciones de enfoque. Véase HTMLElement.focus()", + "blur": "Quitar el foco", + "click": "Haga clic en", + "select": "Seleccionar todo el texto", + "setSelectionRange": "Fijar las posiciones inicial y final de la selección de texto", + "selectionStart": "Índice basado en 0 del primer carácter seleccionado", + "selectionEnd": "Índice basado en 0 del carácter después del último carácter seleccionado", + "setRangeText": "Reemplazar rango de texto", + "replacement": "Cadena a insertar", + "replaceStart": "Índice basado en 0 del primer carácter a sustituir", + "replaceEnd": "Índice basado en 0 del carácter después del último carácter a sustituir", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Error al cargar el componente. Compruebe la configuración.", + "clickToReload": "Haga clic para recargar", + "errorMsg": "Error:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Sólo admite tipos de imagen {types}.", + "exceedSizeError": "El tamaño de la imagen no debe superar {size}.", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "No se admite", + "selectAtLeastOneComponent": "Seleccione al menos un componente", + "selectCompFirst": "Seleccionar componentes antes de copiar", + "noContainerSelected": "[Bug] No hay contenedor seleccionado", + "deleteCompsSuccess": "Eliminado con éxito. Pulse {undoKey} para deshacer.", + "deleteCompsTitle": "Eliminar componentes", + "deleteCompsBody": "¿Seguro que desea suprimir {compNum} componentes seleccionados?", + "cutCompsSuccess": "Cortar con éxito. Pulse ___CARTER0___ para pegar, o ___CARTER1___ para deshacer.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Consultas de datos en su aplicación", + "globals": "Global Data Variables", + "propTipsArr": "{num} Artículos", + "propTips": "{num} Claves", + "propTipArr": "PLACEHOLDER0___ Artículo", + "propTip": "{num} Clave", + "stateTab": "Estado", + "settingsTab": "Ajustes", + "toolbarTitle": "Individualización", + "toolbarPreload": "Guiones y estilos", + "components": "Componentes activos", + "modals": "modales in-app", + "expandTip": "Haga clic para mostrar los datos de {component}.", + "collapseTip": "Haga clic para ocultar los datos de {component}.", + "layers": "Capas", + "activatelayers": "Utilizar capas dinámicas", + "selectedComponents": "Componentes seleccionados...", + "displayComponents": "control Pantalla", + "lockComponents": "control Posición", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Consultas de datos", + "run": "Ejecutar", + "noSelectedQuery": "Ninguna consulta seleccionada", + "metaData": "Metadatos de la fuente de datos", + "noMetadata": "No hay metadatos disponibles", + "metaSearchPlaceholder": "Buscar metadatos", + "allData": "Todas las mesas", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Propiedades", + "noSelectedComps": "No hay componentes seleccionados. Haga clic en un componente para ver sus propiedades.", + "createTab": "Inserte", + "searchPlaceHolder": "Buscar componentes o módulos", + "uiComponentTab": "Componentes", + "extensionTab": "Extensiones", + "modulesTab": "Módulos", + "moduleListTitle": "Módulos", + "pluginListTitle": "Plugins", + "emptyModules": "Los módulos son Mikro-Apps reutilizables. Puede incrustarlos en su App.", + "searchNotFound": "¿No encuentra el componente adecuado?", + "emptyPlugins": "No se han añadido plugins", + "contactUs": "Contacte con nosotros", + "issueHere": "aquí.", + "folderListTitle": "Carpetas", + }, + "prop": { + ...en.prop, + + "expand": "Ampliar", + "columns": "Columnas", + "videokey": "Llave de vídeo", + "rowSelection": "Selección de filas", + "toolbar": "Barra de herramientas", + "pagination": "Paginación", + "logo": "Logotipo", + "style": "Estilo", + "inputs": "Entradas", + "meta": "Metadatos", + "data": "Datos", + "hide": "Ocultar", + "loading": "Cargando", + "disabled": "Discapacitados", + "placeholder": "Marcador de posición", + "showClear": "Mostrar botón de borrado", + "showSearch": "Búsqueda en", + "defaultValue": "Valor por defecto", + "required": "Campo obligatorio", + "showEmptyValidation": "Mostrar validación en vacío/reinicio", + "readOnly": "Sólo lectura", + "readOnlyTooltip": "Los componentes de sólo lectura parecen normales pero no pueden modificarse.", + "minimum": "Mínimo", + "maximum": "Máximo", + "regex": "Regex", + "minLength": "Longitud mínima", + "maxLength": "Longitud máxima", + "height": "Altura", + "width": "Anchura", + "selectApp": "Seleccionar aplicación", + "showCount": "Mostrar recuento", + "tabIndex": "Ficha Índice", + "textType": "Tipo de texto", + "customRule": "Norma personalizada", + "customRuleTooltip": "Una cadena no vacía indica un error; vacía o nula significa que se ha superado la validación. Ejemplo:", + "manual": "Manual", + "map": "Mapa", + "json": "JSON", + "use12Hours": "Utilice el formato de 12 horas", + "hourStep": "Hora Paso", + "minuteStep": "Paso del minuto", + "secondStep": "Segundo paso", + "minDate": "Fecha mínima", + "maxDate": "Fecha máxima", + "minTime": "Tiempo mínimo", + "maxTime": "Tiempo máximo", + "type": "Tipo", + "showLabel": "Mostrar etiqueta", + "showHeader": "Mostrar cabecera", + "showBody": "Mostrar cuerpo", + "showSider": "Mostrar Sider", + "innerSider": "Páginas interiores", + "showFooter": "Mostrar pie de página", + "maskClosable": "Haga clic fuera para cerrar", + "escapeClose": "Activar el cierre con la tecla Escape", + "toggleClose": "Activar el botón Cerrar", + "showMask": "Mostrar máscara", + "textOverflow": "Desbordamiento de texto", + "scrollbar": "Mostrar barras de desplazamiento", + "showVerticalScrollbar": "Mostrar barra de desplazamiento vertical", + "showHorizontalScrollbar": "Mostrar barra de desplazamiento horizontal", + "siderScrollbar": "Mostrar barras de desplazamiento en Sider", + "mainScrollbar": "Mostrar barras de desplazamiento en el contenido principal", + "modalScrollbar": "Mostrar barras de desplazamiento en Modal", + "drawerScrollbar": "Mostrar barras de desplazamiento en el cajón", + "textAreaScrollBar": "Mostrar barras de desplazamiento en el área de texto", + "siderRight": "Show sider a la derecha", + "siderWidth": "Ancho Sider", + "siderWidthTooltip": "La anchura del navegador admite porcentajes (%) y píxeles (px).", + "siderCollapsedWidth": "Sider Anchura colapsada", + "siderCollapsedWidthTooltip": "La anchura colapsada de Sider admite porcentajes (%) y píxeles (px).", + "siderCollapsible": "Sider plegable", + "siderCollapsed": "Sider Colapsado", + "contentScrollbar": "Mostrar barras de desplazamiento en el contenido", + "appID": "Id de aplicación", + "showApp": "Mostrar una aplicación en el área de contenido", + "showAppTooltip": "Puede mostrar aplicaciones completas en el área de contenido. Tenga en cuenta que los módulos no admiten entradas, salidas, eventos ni métodos.", + "baseURL": "URL base de la API", + "horizontal": "Horizontal", + "minHorizontalWidth": "Anchura horizontal mínima", + "component": "Identificadores de componentes propios", + "className": "Nombre de la clase CSS", + "dataTestId": "Identificación individual", + "preventOverwriting": "Evitar la sobreescritura de estilos", + "color": "Color", + "horizontalGridCells": "Celdas de cuadrícula horizontales", + "verticalGridCells": "Celdas de cuadrícula vertical", + "timeZone": "Zona horaria", + "pickerMode": "Modo selector", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Coche", + "fixed": "Fijo", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Mouseover", + "wrap": "Envolver", + }, + "labelProp": { + ...en.labelProp, + + "text": "Etiqueta", + "tooltip": "Información sobre herramientas", + "position": "Posición", + "collapse": "Colapso", + "left": "Izquierda", + "right": "Derecha", + "top": "Top", + "align": "Alineación", + "width": "Anchura", + "widthTooltip": "La anchura de la etiqueta admite porcentajes (%) y píxeles (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Controladores de eventos", + "emptyEventHandlers": "Sin controladores de eventos", + "incomplete": "Selección incompleta", + "inlineEventTitle": "En {eventName}", + "event": "Evento", + "action": "Acción", + "noSelect": "Sin selección", + "runQuery": "Ejecutar una consulta de datos", + "selectQuery": "Seleccionar consulta de datos", + "controlComp": "Control a Component", + "runScript": "Ejecutar JavaScript", + "runScriptPlaceHolder": "Escriba aquí el código", + "component": "Componente", + "method": "Método", + "setTempState": "Establecer un valor de Estado Temporal", + "state": "Estado", + "triggerModuleEvent": "Activar un evento de módulo", + "moduleEvent": "Módulo Evento", + "goToApp": "Ir a otra aplicación", + "queryParams": "Parámetros de consulta", + "queryVariables": "Variables de consulta", + "hashParams": "Parámetros Hash", + "showNotification": "Mostrar una notificación", + "text": "Texto", + "level": "Nivel", + "duration": "Duración", + "notifyDurationTooltip": "La unidad de tiempo puede ser 's' (segundo, por defecto) o 'ms' (milisegundo). La duración máxima es {max} segundos", + "goToURL": "Abrir una URL", + "openInNewTab": "Abrir en una nueva pestaña", + "copyToClipboard": "Copiar un valor en el portapapeles", + "copyToClipboardValue": "Valor", + "export": "Exportar datos", + "exportNoFileType": "Sin selección (opcional)", + "fileName": "Nombre del archivo", + "fileNameTooltip": "Incluya la extensión para especificar el tipo de archivo, por ejemplo, 'imagen.png'", + "fileType": "Tipo de archivo", + "condition": "Corre sólo cuando...", + "conditionTooltip": "Ejecutar el controlador de eventos sólo cuando esta condición se evalúa como \"true\".", + "debounce": "Rebote para", + "throttle": "Acelerador para", + "slowdownTooltip": "Utiliza debounce o throttle para controlar la frecuencia de los disparos de acción. La unidad de tiempo puede ser \"ms\" (milisegundo, por defecto) o \"s\" (segundo).", + "notHandledError": "No manipulado", + "currentApp": "Actual", + "inputEventHandlers": "Manejadores de eventos de entrada", + "inputEventHandlersDesc": "Controladores de eventos relacionados con la entrada del usuario", + "buttonEventHandlers": "Controladores de eventos de botones", + "buttonEventHandlersDesc": "Controladores de eventos relacionados con pulsaciones de botones", + "changeEventHandlers": "Cambiar los controladores de eventos", + "changeEventHandlersDesc": "Controladores de eventos relacionados con cambios de valor", + "editedEventHandlers": "Editar controladores de eventos", + "editedEventHandlersDesc": "Controladores de eventos relacionados con el estado editado de los elementos", + "clickEventHandlers": "Controladores de eventos de clic", + "clickEventHandlersDesc": "Controladores de eventos relacionados con los clics", + "keyDownEventHandlers": "Manejadores de eventos de teclas pulsadas", + "keyDownEventHandlersDesc": "Controladores de eventos relacionados con eventos de teclas pulsadas", + "checkboxEventHandlers": "Controladores de eventos de casillas de verificación", + "checkboxEventHandlersDesc": "Controladores de Eventos relacionados con Cambios de Casilla", + "dragEventHandlers": "Controladores de eventos de arrastre", + "dragEventHandlersDesc": "Controladores de Eventos relacionados con Eventos de Arrastrar y Soltar", + "elementEventHandlers": "Controladores de eventos de elementos", + "elementEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Elementos de Datos genéricos", + "mediaEventHandlers": "Controladores de eventos multimedia", + "mediaEventHandlersDesc": "Controladores de eventos relacionados con eventos multimedia", + "scannerEventHandlers": "Controladores de eventos del escáner", + "scannerEventHandlersDesc": "Manejadores de eventos relacionados con eventos de escáner", + "chartEventHandlers": "Controladores de eventos de gráficos", + "chartEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Gráficos", + "geoMapEventHandlers": "Manejadores de eventos de Geo Map", + "geoMapEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Geo Mapas", + "stepEventHandlers": "Manejadores de eventos por pasos", + "stepEventHandlersDesc": "Controladores de eventos relacionados con Step UI Events", + "shareEventHandlers": "Compartir controladores de eventos", + "shareEventHandlersDesc": "Manejadores de Eventos relacionados con Compartir Eventos", + "selectEventHandlers": "Seleccionar controladores de eventos", + "selectEventHandlersDesc": "Manejadores de Eventos relacionados con Seleccionar Eventos", + "meetingEventHandlers": "Manejadores de eventos de reuniones", + "meetingEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Reunión", + "collaborationEventHandlers": "Manejadores de eventos de colaboración", + "collaborationEventHandlersDesc": "Manejadores de eventos relacionados con eventos de colaboración", + "set": "Establecer", + "clear": "Claro", + "reset": "Restablecer", + "messageType": "Tipo de mensaje", + "placement": "Colocación", + "description": "Descripción", + }, + "event": { + ...en.event, + + "submit": "Enviar", + "submitDesc": "Activadores al enviar", + "change": "Cambia", + "changeDesc": "Activadores de cambios de valor", + "focus": "Enfoque", + "focusDesc": "Activadores de Focus", + "blur": "Desenfoque", + "blurDesc": "Desenfoque", + "click": "Haga clic en", + "clickDesc": "Disparadores al hacer clic", + "doubleClick": "Doble clic", + "doubleClickDesc": "Disparadores al hacer doble clic", + "rightClick": "Clic derecho", + "rightClickDesc": "Disparadores al hacer clic con el botón derecho", + "keyDown": "Tecla Abajo", + "keyDownDesc": "Disparos al pulsar una tecla", + "select": "Seleccione", + "selectDesc": "Activadores al seleccionar", + "checked": "Comprobado", + "checkedDesc": "Disparadores cuando se marca una casilla de verificación", + "unchecked": "Sin marcar", + "uncheckedDesc": "Disparadores cuando una casilla de verificación está Desmarcada", + "drag": "Arrastre", + "dragDesc": "Activadores de arrastre", + "drop": "Drop", + "dropDesc": "Disparadores al caer", + "open": "Abrir", + "openDesc": "Desencadenantes al abrir", + "mute": "Silenciar", + "muteDesc": "Disparos al silenciar un micrófono", + "unmute": "Desactivar", + "unmuteDesc": "Disparadores al anular el silencio de un micrófono", + "showCamera": "Mostrar cámara", + "showCameraDesc": "Se activa cuando Mostrar cámara está activado", + "hideCamera": "Ocultar cámara", + "hideCameraDesc": "Se activa cuando Mostrar cámara está desactivado", + "shareScreen": "Compartir pantalla", + "shareScreenDesc": "Activadores en la pantalla Compartir", + "shareScreenEnd": "Compartir pantalla Fin", + "shareScreenEndDesc": "Disparadores al final de la pantalla Compartir", + "shareControl": "Compartir Control", + "shareControlDesc": "Activadores del control de acciones", + "shareControlEnd": "Control de acciones Fin", + "shareControlEndDesc": "Activadores en el extremo de control de acciones", + "shareContent": "Compartir contenido", + "shareContentDesc": "Desencadenantes al compartir contenido", + "shareContentEnd": "Compartir contenido Fin", + "shareContentEndDesc": "Desencadenantes al final de Compartir contenido", + "stopShare": "Dejar de compartir", + "stopShareDesc": "Activadores en Stop Share", + "meetingStart": "Inicio de la reunión", + "meetingStartDesc": "Activadores al inicio de la reunión", + "meetingEnd": "Fin de la reunión", + "meetingEndDesc": "Desencadenantes al final de la reunión", + "meetingJoin": "Reunión Únete", + "meetingJoinDesc": "Desencadenantes al unirse a una reunión", + "meetingLeave": "Permiso de reunión", + "meetingLeaveDesc": "Desencadenantes de la baja por reunión", + "play": "Jugar", + "playDesc": "Activadores en Play", + "pause": "Pausa", + "pauseDesc": "Disparadores en pausa", + "ended": "Finalizado", + "endedDesc": "Disparadores en Ended", + "step": "Paso", + "stepDesc": "Desencadenantes en Step", + "next": "Siguiente", + "nextDesc": "Activadores en Siguiente", + "finished": "Terminado", + "finishedDesc": "Desencadenantes al finalizar", + "saved": "Guardado", + "savedDesc": "Disparadores cuando se guarda un elemento", + "edited": "Editado", + "editedDesc": "Se activa cuando se edita un elemento", + "geoMapMove": "Mapa geográfico Mover", + "geoMapMoveDesc": "Disparadores cuando los usuarios mueven Geo Map", + "geoMapZoom": "Mapa geográfico Zoom", + "geoMapZoomDesc": "Disparadores cuando los usuarios hacen zoom en Geo Map", + "geoMapSelect": "Seleccionar mapa geográfico", + "geoMapSelectDesc": "Disparadores cuando los usuarios seleccionan un elemento en Geo Map", + "scannerSuccess": "Éxito del escáner", + "scannerSuccessDesc": "Se activa cuando un escáner explora correctamente", + "scannerError": "Error de escáner", + "scannerErrorDesc": "Disparadores cuando un escáner falla al escanear", + "chartZoom": "Zoom del gráfico", + "chartZoomDesc": "Disparadores en el Zoom del Gráfico", + "chartHover": "Gráfico Hover", + "chartHoverDesc": "Disparadores al pasar el ratón por encima del gráfico", + "chartSelect": "Seleccionar gráfico", + "chartSelectDesc": "Disparadores en la selección de gráficos", + "chartDeselect": "Deseleccionar gráfico", + "chartDeselectDesc": "Desmarcar disparadores en el gráfico", + "close": "Cerrar", + "closeDesc": "Desencadenantes al cerrar", + "parse": "Parse", + "parseDesc": "Disparadores en Parse", + "success": "Éxito", + "successDesc": "Activadores del éxito", + "delete": "Borrar", + "deleteDesc": "Disparadores al suprimir", + "mention": "Mencione", + "mentionDesc": "Activadores de mención", + "search": "Buscar en", + "searchDesc": "Activadores de búsqueda", + "selectedChange": "Cambio de selección", + "selectedChangeDesc": "Desencadenantes de la selección modificada", + "clickExtra": "Haga clic en Acción", + "clickExtraDesc": "Disparadores al hacer clic en un elemento adicional", + "start": "Inicio", + "startDesc": "Disparadores al inicio", + "resume": "Currículum", + "resumeDesc": "Desencadenantes en el currículum", + "countdown": "Cuenta atrás", + "countdownDesc": "Disparos al finalizar la cuenta atrás", + "reset": "Fin de la reinicialización", + "resetDesc": "Disparos al reiniciar el temporizador", + "refresh": "Actualizar", + "refreshDesc": "Activadores al actualizar", + "sortChange": "Ordenar Cambio", + "sortChangeDesc": "Desencadenantes de los cambios de clasificación", + }, + "style": { + ...en.style, + + "boxShadowColor": "Sombra Color", + "boxShadow": "Caja Sombra", + "opacity": "Opacidad", + "animation": "Animación", + "animationIterationCount": "Recuento de iteraciones de animación", + "animationDelay": "Retraso de animación", + "animationDuration": "Duración de la animación", + "resetTooltip": "Restablecer estilos. Borre el campo de entrada para restablecer un estilo individual.", + "textColor": "Color del texto", + "contrastText": "Contraste Color del texto", + "generated": "Generado", + "customize": "Personalice", + "staticText": "Texto estático", + "accent": "Acento", + "validate": "Mensaje de validación", + "border": "Color del borde", + "borderRadius": "Radio del borde", + "borderWidth": "Anchura del borde", + "borderStyle": "Estilo de borde", + "background": "Color de fondo", + "headerBackground": "Color de fondo de la cabecera", + "siderBackground": "Sider Color de fondo", + "footerBackground": "Color de fondo del pie de página", + "fill": "Rellene", + "track": "Pista", + "links": "Enlaces", + "thumb": "Pulgar", + "thumbBorder": "Borde del pulgar", + "checked": "Comprobado", + "unchecked": "Sin marcar", + "handle": "Mango", + "tags": "Etiquetas", + "tagsText": "Etiquetas Texto", + "multiIcon": "Icono de selección múltiple", + "tabText": "Texto de la pestaña", + "tabAccent": "Acento de lengüeta", + "checkedBackground": "Color de fondo marcado", + "uncheckedBackground": "Color de fondo sin marcar", + "uncheckedBorder": "Color del borde sin marcar", + "indicatorBackground": "Indicador Color de fondo", + "tableCellText": "Texto celular", + "selectedRowBackground": "Color de fondo de la fila seleccionada", + "hoverRowBackground": "Color de fondo de la fila Hover", + "hoverBackground": "Color de fondo", + "textTransform": "Transformación de texto", + "textDecoration": "Decoración de texto", + "alternateRowBackground": "Color de fondo de fila alternativo", + "tableHeaderBackground": "Color de fondo de la cabecera", + "tableHeaderText": "Texto de cabecera", + "toolbarBackground": "Color de fondo de la barra de herramientas", + "toolbarText": "Texto de la barra de herramientas", + "pen": "Pluma", + "footerIcon": "Icono de pie de página", + "tips": "Consejos", + "margin": "Margen", + "padding": "Acolchado", + "marginLeft": "Margen izquierdo", + "marginRight": "Margen derecho", + "marginTop": "Margen superior", + "marginBottom": "Margen inferior", + "containerHeaderPadding": "Relleno de cabecera", + "containerFooterPadding": "Relleno de pie de página", + "containerSiderPadding": "Acolchado Sider", + "containerBodyPadding": "Acolchado corporal", + "minWidth": "Anchura mínima", + "aspectRatio": "Relación de aspecto", + "text": "Texto", + "textSize": "Tamaño del texto", + "textWeight": "Peso del texto", + "fontFamily": "Familia de fuentes", + "fontStyle": "Estilo de fuente", + "backgroundImage": "Imagen de fondo", + "backgroundImageRepeat": "Repetición de fondo", + "backgroundImageSize": "Tamaño del fondo", + "backgroundImagePosition": "Antecedentes", + "backgroundImageOrigin": "Antecedentes Origen", + "headerBackgroundImage": "Imagen de fondo", + "headerBackgroundImageRepeat": "Repetición de la imagen de fondo", + "headerBackgroundImageSize": "Tamaño de la imagen de fondo", + "headerBackgroundImagePosition": "Posición de la imagen de fondo", + "headerBackgroundImageOrigin": "Origen de la imagen de fondo", + "footerBackgroundImage": "Imagen de fondo", + "footerBackgroundImageRepeat": "Repetición de la imagen de fondo", + "footerBackgroundImageSize": "Tamaño de la imagen de fondo", + "footerBackgroundImagePosition": "Posición de la imagen de fondo", + "footerBackgroundImageOrigin": "Origen de la imagen de fondo", + "rotation": "Rotación", + "alternateBackground": "Color de fondo alternativo", + "headerText": "Color del texto de cabecera", + "labelColor": "Color de la etiqueta", + "label": "Color de la etiqueta", + "lineHeight": "Altura de línea", + "subTitleColor": "Color del subtítulo", + "titleText": "Título Color", + "success": "Éxito Color", + "siderBackgroundImage": "Sider Imagen de fondo", + "siderBackgroundImageRepeat": "Sider Repetición de la imagen de fondo", + "siderBackgroundImageSize": "Sider Tamaño de la imagen de fondo", + "siderBackgroundImagePosition": "Sider Posición de la imagen de fondo", + "siderBackgroundImageOrigin": "Sider Origen de la imagen de fondo", + "activeBackground": "Color de fondo activo", + "labelBackground": "Color de fondo de la etiqueta", + "gradientBackground": "Color de fondo degradado", + "direction": "Dirección", + "chartOpacity": "Opacidad", + "chartBoxShadow": "Caja Sombra", + "chartBorderStyle": "Estilo de borde", + "chartBorderRadius": "Radio del borde", + "chartBorderWidth": "Anchura del borde", + "chartTextSize": "Tamaño del texto", + "chartTextWeight": "Peso del texto", + "chartFontFamily": "Familia de fuentes", + "chartFontStyle": "Estilo de fuente", + "chartBackgroundColor": "Color de fondo", + "chartGradientColor": "Color degradado", + "chartShadowColor": "Sombra Color", + "chartBorderColor": "Color del borde", + "chartTextColor": "Color del texto", + "detailSize": "Detalle Tamaño", + "radiusTip": "Especifica el radio de las esquinas del elemento. Ejemplo: 5px, 50% o 1em.", + "gapTip": "Especifica el espacio entre filas y columnas en un contenedor de cuadrícula o flex. Ejemplo: 10px, 1rem o 5%.", + "cardRadiusTip": "Define el radio de las esquinas para los componentes de tarjeta. Ejemplo: 10px, 15px.", + "borderWidthTip": "Especifica el ancho del borde del elemento. Ejemplo: 1px, 0.5em o fino.", + "borderStyleTip": "Establece el estilo del borde. Ejemplo: sólido, discontinuo, punteado o ninguno.", + "marginTip": "Define el margen exterior alrededor de un elemento. Ejemplo: 10px, 2em o auto. También se puede combinar como: 0px 20px. O incluso separar para las 4 direcciones como: 0px 1px 5px 2px.", + "directionTip": "Especifica la dirección del diseño. Ejemplo: row, column o row-reverse.", + "detailSizeTip": "Define el tamaño de detalles específicos en el diseño. Ejemplo: 10px, 2em o 80%.", + "chartOpacityTip": "Especifica la opacidad del gráfico. Ejemplo: 1 (opaco), 0.5 (50% transparente).", + "chartBoxShadowTip": "Define la sombra proyectada por el cuadro del gráfico. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Establece el estilo del borde del gráfico. Ejemplo: sólido, discontinuo o punteado.", + "chartBorderRadiusTip": "Especifica el radio de las esquinas del borde del gráfico. Ejemplo: 10px, 20%.", + "chartBorderWidthTip": "Especifica el ancho del borde del gráfico. Ejemplo: 2px, 0.5em.", + "chartTextSizeTip": "Especifica el tamaño de la fuente para el texto del gráfico. Ejemplo: 16px, 1em o 120%.", + "chartTextWeightTip": "Especifica el peso de la fuente para el texto del gráfico. Ejemplo: normal, negrita o 700.", + "chartFontFamilyTip": "Especifica la familia de fuentes para el texto del gráfico. Ejemplo: Arial, Helvetica o 'Times New Roman'.", + "chartFontStyleTip": "Especifica el estilo de la fuente para el texto del gráfico. Ejemplo: normal, cursiva o oblicua.", + "animationIterationCountTip": "Define cuántas veces debe ejecutarse una animación. Ejemplo: infinito, 1 o 3.", + "opacityTip": "Establece el nivel de transparencia del elemento. Ejemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisible).", + "boxShadowColorTip": "Define el color de la sombra del cuadro. Ejemplo: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Establece el color de fondo del gráfico. Ejemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Especifica los colores degradados para el fondo del gráfico. Ejemplo: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Define el color de la sombra del gráfico. Ejemplo: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Especifica el color del borde del gráfico. Ejemplo: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Establece el color del texto del gráfico. Ejemplo: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Define la sombra proyectada por un elemento. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Especifica el retraso antes de que comience la animación. Ejemplo: 1s, 500ms, 0.", + "animationDurationTip": "Establece la duración de la animación. Ejemplo: 2s, 3s, 500ms.", + "paddingTip": "Define el espacio interior dentro de un elemento. Ejemplo: 10px, 2em, 5%. También se puede combinar como: 0px 20px. O separar para las 4 direcciones: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Define el espacio interior para el encabezado del contenedor. Ejemplo: 10px, 1rem.", + "containerSiderPaddingTip": "Define el espacio interior para el lateral del contenedor. Ejemplo: 8px, 1em.", + "containerFooterPaddingTip": "Define el espacio interior para el pie de página del contenedor. Ejemplo: 12px, 1rem.", + "containerBodyPaddingTip": "Define el espacio interior para el cuerpo del contenedor. Ejemplo: 15px, 2em.", + "textSizeTip": "Especifica el tamaño de la fuente del texto. Ejemplo: 14px, 1.2em, 110%.", + "textWeightTip": "Especifica el peso de la fuente del texto. Ejemplo: normal, negrita, 400.", + "fontFamilyTip": "Especifica la familia de fuentes del texto. Ejemplo: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Define la decoración del texto. Ejemplo: subrayado, tachado, ninguno.", + "textTransformTip": "Especifica la capitalización del texto. Ejemplo: mayúsculas, minúsculas, capitalizar.", + "fontStyleTip": "Define el estilo de la fuente del texto. Ejemplo: normal, cursiva, oblicua.", + "backgroundImageTip": "Especifica la imagen de fondo de un elemento. Ejemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Especifica la imagen de fondo para el encabezado. Ejemplo: url('header.jpg').", + "footerBackgroundImageTip": "Especifica la imagen de fondo para el pie de página. Ejemplo: url('footer.jpg').", + "backgroundImageRepeatTip": "Define cómo se repite la imagen de fondo. Ejemplo: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del encabezado. Ejemplo: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del pie de página. Ejemplo: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Define el tamaño de la imagen de fondo. Ejemplo: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Define la posición de la imagen de fondo. Ejemplo: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo. Ejemplo: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del encabezado. Ejemplo: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del pie de página. Ejemplo: padding-box, border-box, content-box.", + "rotationTip": "Especifica el ángulo de rotación del elemento. Ejemplo: 45deg, 90deg, -180deg.", + "lineHeightTip": "Define la altura de una línea de texto. Ejemplo: 1.5, 2, 120%.", + }, + "export": { + ...en.export, + + "hiddenDesc": "Si es true, el componente se oculta", + "disabledDesc": "Si es true, el componente está desactivado y no es interactivo", + "visibleDesc": "Si es verdadero, el componente es visible", + "inputValueDesc": "Valor actual de la entrada", + "invalidDesc": "Indica si el valor no es válido", + "placeholderDesc": "Texto de marcador de posición cuando no se establece ningún valor", + "requiredDesc": "Si es verdadero, se requiere un valor válido", + "submitDesc": "Enviar formulario", + "richTextEditorValueDesc": "Valor actual del Editor", + "richTextEditorReadOnlyDesc": "Si es true, el Editor es de sólo lectura", + "richTextEditorHideToolBarDesc": "Si es true, la barra de herramientas se oculta", + "jsonEditorDesc": "Datos JSON actuales", + "sliderValueDesc": "Valor seleccionado actualmente", + "sliderMaxValueDesc": "Valor máximo de la corredera", + "sliderMinValueDesc": "Valor mínimo de la corredera", + "sliderStartDesc": "Valor del punto de partida seleccionado", + "sliderEndDesc": "Valor del punto final seleccionado", + "ratingValueDesc": "Clasificación seleccionada actualmente", + "ratingMaxDesc": "Valor nominal máximo", + "datePickerValueDesc": "Fecha seleccionada actualmente", + "datePickerFormattedValueDesc": "Fecha seleccionada con formato", + "datePickerTimestampDesc": "Marca de tiempo de la fecha seleccionada", + "dateRangeStartDesc": "Fecha de inicio de la serie", + "dateRangeEndDesc": "Fecha final del intervalo", + "dateRangeStartTimestampDesc": "Fecha de inicio", + "dateRangeEndTimestampDesc": "Fecha de finalización", + "dateRangeFormattedValueDesc": "Intervalo de fechas formateado", + "dateRangeFormattedStartValueDesc": "Fecha de inicio con formato", + "dateRangeFormattedEndValueDesc": "Fecha final con formato", + "timePickerValueDesc": "Hora seleccionada actualmente", + "timePickerFormattedValueDesc": "Hora seleccionada con formato", + "timeRangeStartDesc": "Hora de inicio de la cadena", + "timeRangeEndDesc": "Hora de finalización de la gama", + "timeRangeFormattedValueDesc": "Intervalo de tiempo formateado", + "timeRangeFormattedStartValueDesc": "Hora de inicio con formato", + "timeRangeFormattedEndValueDesc": "Hora final con formato", + "timeZone": "Huso horario", + "timeZoneDesc": "Zona horaria de la fecha seleccionada", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Introduzca una dirección de correo electrónico válida", + "url": "Introduzca una URL válida", + "regex": "Haga coincidir el patrón especificado", + "maxLength": "Demasiados caracteres, actual: {length}, máximo: {maxLength}", + "minLength": "No hay suficientes caracteres, actual: {length}, mínimo: {minLength}", + "maxValue": "El valor excede el máximo, actual: {value}, máximo: {max}", + "minValue": "Valor por debajo del mínimo, actual: {value}, mínimo: {min}", + "maxTime": "El tiempo excede el máximo, actual: {time}, máximo: {maxTime}", + "minTime": "Tiempo por debajo del mínimo, actual: {time}, mínimo: {minTime}", + "maxDate": "La fecha excede el máximo, actual: {date}, máximo: {maxDate}", + "minDate": "Fecha por debajo del mínimo, actual: {date}, mínimo: {minDate}", + }, + "query": { + ...en.query, + + "noQueries": "No hay consultas de datos disponibles.", + "queryTutorialButton": "Ver los documentos de {value}.", + "datasource": "Sus fuentes de datos", + "newDatasource": "Nueva fuente de datos", + "generalTab": "General", + "notificationTab": "Notificación", + "variablesTab": "Variables", + "advancedTab": "Avanzado", + "showFailNotification": "Mostrar notificación en caso de fallo", + "failCondition": "Condiciones de fallo", + "failConditionTooltip1": "Personalice las condiciones de fallo y las notificaciones correspondientes.", + "failConditionTooltip2": "Si alguna condición resulta verdadera, la consulta se marca como fallida y se activa la notificación correspondiente.", + "showSuccessNotification": "Mostrar notificación de éxito", + "successMessageLabel": "Mensaje de éxito", + "successMessage": "Corre con éxito", + "notifyDuration": "Duración", + "notifyDurationTooltip": "Duración de la notificación. La unidad de tiempo puede ser \"s\" (segundo, por defecto) o \"ms\" (milisegundo). El valor por defecto es {default}s. El valor máximo es {max}s.", + "successMessageWithName": "{name} ejecución correcta", + "failMessageWithName": "{name} ejecución fallida: {result}", + "showConfirmationModal": "Mostrar modal de confirmación antes de ejecutar", + "confirmationMessageLabel": "Mensaje de confirmación", + "confirmationMessage": "¿Está seguro de que desea ejecutar esta consulta de datos?", + "newQuery": "Nueva consulta de datos", + "newFolder": "Nueva carpeta", + "recentlyUsed": "Usado recientemente", + "folder": "Carpeta", + "folderNotEmpty": "La carpeta no está vacía", + "dataResponder": "Respuesta de datos", + "tempState": "Estado Temporal", + "transformer": "Transformador", + "quickRestAPI": "Consulta REST", + "quickStreamAPI": "Consulta de flujos", + "quickGraphql": "Consulta GraphQL", + "quickAlasql": "Consulta SQL local", + "databaseType": "Tipo de base de datos", + "chooseDatabase": "Elegir base de datos", + "lowcoderAPI": "API Lowcoder", + "executeJSCode": "Ejecutar código JavaScript", + "importFromQueryLibrary": "Importar desde la biblioteca de consultas", + "preparedDataQueries": "Sus consultas de datos preparadas", + "adHocDataQueries": "Consultas rápidas de datos (sin consulta preparada ni fuente de datos)", + "queryResultTransformer": "Manipular una respuesta de consulta para transformar los datos antes de vincularlos", + "queryResultReactor": "Reaccionar ante cualquier cambio de un valor dinámico de Datos", + "importFromFile": "Importar desde archivo", + "triggerType": "Activado cuando...", + "triggerTypeAuto": "Cuando cambian las entradas o después de que se cargue la aplicación (página)", + "triggerTypePageLoad": "Después de que se cargue la aplicación (página)", + "triggerTypeManual": "Solo cuando lo activas manualmente", + "triggerTypeInputChange": "Cuando cambian las entradas", + "triggerTypeQueryExec": "Después de la ejecución de la consulta", + "triggerTypeTimeout": "Después de que la aplicación (página) se carga y se produce el tiempo de espera", + "delayTime": "Tiempo de retraso", + "chooseDataSource": "Elegir fuente de datos", + "method": "Método", + "updateExceptionDataSourceTitle": "Actualizar fuente de datos que falla", + "updateExceptionDataSourceContent": "Actualice la siguiente consulta con la misma fuente de datos que falla:", + "update": "Actualización", + "disablePreparedStatement": "Desactivar declaraciones preparadas", + "disablePreparedStatementTooltip": "Desactivar las sentencias preparadas puede generar SQL dinámico, pero aumenta el riesgo de inyección SQL.", + "timeout": "Tiempo de espera después de", + "timeoutTooltip": "Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor por defecto: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Por ejemplo, 300 (es decir, 300 ms), 800 ms, 5 s.", + "periodic": "Ejecute esta consulta de datos periódicamente", + "periodicTime": "Periodo", + "periodicTimeTooltip": "Periodo entre ejecuciones sucesivas. Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor mínimo: 100ms. La ejecución periódica se desactiva para valores inferiores a 100ms. Por ejemplo, 300 (es decir, 300ms), 800ms, 5s.", + "cancelPrevious": "Ignorar los resultados de ejecuciones anteriores no finalizadas", + "cancelPreviousTooltip": "Si se desencadena una nueva ejecución, se ignorará el resultado de las ejecuciones anteriores no completadas si no se completaron, y estas ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", + "dataSourceStatusError": "Si se desencadena una nueva ejecución, el resultado de las ejecuciones anteriores no completadas se ignorará si las ejecuciones anteriores no se completaron, y las ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", + "success": "Éxito", + "fail": "Fallo", + "successDesc": "Se activa cuando la ejecución tiene éxito", + "failDesc": "Se activa cuando falla la ejecución", + "fixedDelayError": "Consulta no ejecutada", + "execSuccess": "Corre con éxito", + "execFail": "Ejecución fallida", + "execIgnored": "Los resultados de esta consulta fueron ignorados", + "deleteSuccessMessage": "Eliminado con éxito. Puede utilizar {undoKey} para deshacer el borrado.", + "dataExportDesc": "Datos obtenidos por la consulta actual", + "codeExportDesc": "Código de estado actual de la consulta", + "successExportDesc": "Si la consulta actual se ha ejecutado correctamente", + "messageExportDesc": "Información devuelta por la consulta actual", + "extraExportDesc": "Otros datos de la consulta actual", + "isFetchingExportDesc": "Es la consulta actual en la solicitud", + "runTimeExportDesc": "Tiempo de ejecución de la consulta actual (ms)", + "latestEndTimeExportDesc": "Último tiempo de ejecución", + "triggerTypeExportDesc": "Tipo de disparador", + "chooseResource": "Elija un recurso", + "createDataSource": "Crear una nueva fuente de datos", + "editDataSource": "Editar", + "datasourceName": "Nombre", + "datasourceNameRuleMessage": "Introduzca un nombre de fuente de datos", + "generalSetting": "Ajustes generales", + "advancedSetting": "Configuración avanzada", + "port": "Puerto", + "portRequiredMessage": "Introduzca un puerto", + "portErrorMessage": "Introduzca un puerto correcto", + "connectionType": "Tipo de conexión", + "regular": "Regular", + "host": "Anfitrión", + "hostRequiredMessage": "Introduzca un nombre de dominio de host o una dirección IP", + "userName": "Nombre de usuario", + "password": "Contraseña", + "encryptedServer": "-------- Cifrado en el lado del servidor --------", + "uriRequiredMessage": "Introduzca un URI", + "urlRequiredMessage": "Introduzca una URL", + "uriErrorMessage": "Introduzca un URI correcto", + "urlErrorMessage": "Introduzca una URL correcta", + "httpRequiredMessage": "Introduzca http:// o https://", + "databaseName": "Nombre de la base de datos", + "databaseNameRequiredMessage": "Introduzca el nombre de la base de datos", + "useSSL": "Utilizar SSL", + "userNameRequiredMessage": "Introduzca su nombre", + "passwordRequiredMessage": "Introduzca su contraseña", + "authentication": "Autenticación", + "authenticationType": "Tipo de autenticación", + "sslCertVerificationType": "Verificación de certificados SSL", + "sslCertVerificationTypeDefault": "Verificar CA Cert", + "sslCertVerificationTypeSelf": "Verificar certificado autofirmado", + "sslCertVerificationTypeDisabled": "Discapacitados", + "selfSignedCert": "Certificado autofirmado", + "selfSignedCertRequireMsg": "Introduzca su certificado", + "enableTurnOffPreparedStatement": "Activar la conmutación de sentencias preparadas para consultas", + "enableTurnOffPreparedStatementTooltip": "Puede activar o desactivar las sentencias preparadas en la pestaña Avanzadas de la consulta", + "serviceName": "Nombre del servicio", + "serviceNameRequiredMessage": "Introduzca el nombre de su servicio", + "useSID": "Utilizar SID", + "connectSuccessfully": "Conexión correcta", + "saveSuccessfully": "Guardado correctamente", + "database": "Base de datos", + "cloudHosting": "Lowcoder alojado en la nube no puede acceder a los servicios locales utilizando 127.0.0.1 o localhost. Intente conectarse a fuentes de datos de redes públicas o utilice un proxy inverso para servicios privados.", + "notCloudHosting": "Para el despliegue alojado en Docker, Lowcoder utiliza redes puente, por lo que 127.0.0.1 y localhost no son válidos para las direcciones de host. Para acceder a las fuentes de datos de la máquina local, consulte", + "howToAccessHostDocLink": "Cómo acceder a la API/DB del host", + "returnList": "Devolución", + "chooseDatasourceType": "Elija el tipo de fuente de datos", + "viewDocuments": "Ver documentos", + "testConnection": "Conexión de prueba", + "save": "Guardar", + "whitelist": "Lista de permisos", + "whitelistTooltip": "Añada las direcciones IP de Lowcoder a su lista de fuentes de datos permitidas según sea necesario.", + "address": "Dirección:", + "nameExists": "El nombre {name} ya existe", + "jsQueryDocLink": "Acerca de JavaScript Query", + "dynamicDataSourceConfigLoadingText": "Cargando configuración de fuente de datos adicional...", + "dynamicDataSourceConfigErrText": "No se ha podido cargar la configuración adicional de la fuente de datos.", + "retry": "Reintentar", + "categoryDatabase": "Base de Datos", + "categoryBigdata": "Grandes datos", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Desarrollo de Aplicaciones", + "categoryWorkflow": "Flujo de Trabajo", + "categoryMessaging": "Mensajería", + "categoryAssets": "Recursos y Almacenamiento", + "categoryProjectManagement": "Gestión de Proyectos", + "categoryCrm": "CRM", + "categoryEcommerce": "Comercio Electrónico", + "categoryWebscrapers": "Raspadores Web & Open Data", + "categoryDocumentHandling": "Generación de Informes y Documentos", + "categoryRPA": "Automatización de Procesos Robóticos", + "componentsUsingQueryTitle": "Uso de la consulta", + "componentsUsingQuery": "Dónde se usa esta consulta", + "variables": "Variables", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Pares clave-valor", + "object": "Objeto", + "allowMultiModify": "Permitir la modificación de varias filas", + "allowMultiModifyTooltip": "Si se selecciona, se operan todas las filas que cumplen las condiciones. En caso contrario, sólo se operará sobre la primera fila que cumpla las condiciones.", + "array": "Matriz", + "insertList": "Insertar lista", + "insertListTooltip": "Valores insertados cuando no existen", + "filterRule": "Regla de filtrado", + "updateList": "Actualizar lista", + "updateListTooltip": "Los valores actualizados tal como existen pueden ser anulados por los mismos valores de la lista de inserción", + "sqlMode": "Modo SQL", + "guiMode": "Modo GUI", + "operation": "Operación", + "insert": "Inserte", + "upsert": "Insertar, pero actualizar si hay conflicto", + "update": "Actualización", + "delete": "Borrar", + "bulkInsert": "Inserción a granel", + "bulkUpdate": "Actualización masiva", + "table": "Cuadro", + "primaryKeyColumn": "Columna de clave primaria", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Comando en bruto", + "queryTutorialButton": "Ver documentos de la API de Elasticsearch", + "request": "Solicitar", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Índice de filas", + "spreadsheetId": "ID de la hoja de cálculo", + "sheetName": "Nombre de la hoja", + "readData": "Leer datos", + "appendData": "Añadir fila", + "updateData": "Actualizar Fila", + "deleteData": "Borrar fila", + "clearData": "Borrar fila", + "serviceAccountRequireMessage": "Introduzca su cuenta de servicio", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Ordenar", + "sortPlaceholder": "Nombre", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Exportar a JSON", + "noInput": "La consulta actual no tiene entrada", + "inputName": "Nombre", + "inputDesc": "Descripción", + "emptyInputs": "Sin entradas", + "clickToAdd": "Añadir", + "chooseQuery": "Seleccione Consulta", + "viewQuery": "Ver consulta", + "chooseVersion": "Elegir versión", + "latest": "Última", + "publish": "Publique", + "historyVersion": "Historia Versión", + "deleteQueryLabel": "Borrar consulta", + "deleteQueryContent": "No se puede recuperar la consulta después de borrarla. ¿Borrar la consulta?", + "run": "Ejecutar", + "readOnly": "Sólo lectura", + "exit": "Salida", + "recoverAppSnapshotContent": "Restaurar la consulta actual a la versión {version}.", + "searchPlaceholder": "Consulta de búsqueda", + "allQuery": "Todas las consultas", + "deleteQueryTitle": "Borrar consulta", + "unnamed": "Sin nombre", + "publishNewVersion": "Publicar nueva versión", + "publishSuccess": "Publicado con éxito", + "version": "Versión", + "desc": "Descripción", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Véase", + "extParamsTooltip": "Configurar parámetros de conexión adicionales", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Consulta de usuarios del espacio de trabajo", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Comando en bruto", + "command": "Comando", + "queryTutorial": "Ver documentos sobre los comandos de Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Si se selecciona {type}, el formato del valor debe ser {object}. Ejemplo: ___TITULAR2___", + "text": "Texto", + "file": "Archivo", + "extraBodyTooltip": "Los valores clave del cuerpo adicional se añadirán al cuerpo con tipos de datos JSON o de formulario.", + "forwardCookies": "Adelante Cookies", + "forwardAllCookies": "Reenviar todas las cookies", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Adjunto", + "attachmentTooltip": "Se puede utilizar con el componente de carga de archivos, los datos deben ser convertidos a:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Transmisor", + "recipient": "Recipient", + "carbonCopy": "Copia al carbón", + "blindCarbonCopy": "Copia oculta", + "subject": "Asunto", + "content": "Contenido", + "contentTooltip": "Admite la introducción de texto o HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Cuadros de mando e informes", + "layout": "Diseño y navegación", + "forms": "Recogida de datos y formularios", + "collaboration": "Reuniones y colaboración", + "projectmanagement": "Gestión de proyectos", + "scheduling": "Calendario y programación", + "documents": "Gestión de documentos y archivos", + "itemHandling": "Gestión de artículos y firmas", + "multimedia": "Multimedia y animación", + "integration": "Integración y ampliación", + "legacy": "Legado y obsoleto", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Auto Complete", + "autoCompleteCompDesc": "Un campo de entrada que ofrece sugerencias a medida que se escribe, lo que mejora la experiencia del usuario y la precisión.", + "autoCompleteCompKeywords": "sugerencias, autocompletar, escribir, entrada", + "inputCompName": "Entrada", + "inputCompDesc": "Un campo de entrada de texto básico que permite a los usuarios introducir y editar texto.", + "inputCompKeywords": "texto, entrada, campo, editar", + "textAreaCompName": "Área de texto", + "textAreaCompDesc": "Una entrada de texto de varias líneas para contenidos más largos, como comentarios o descripciones.", + "textAreaCompKeywords": "multilínea, textarea, entrada, texto", + "passwordCompName": "Contraseña", + "passwordCompDesc": "Un campo seguro para introducir la contraseña, enmascarando los caracteres para mayor privacidad.", + "passwordCompKeywords": "contraseña, seguridad, entrada, oculto", + "richTextEditorCompName": "Editor de texto enriquecido", + "richTextEditorCompDesc": "Un editor de texto avanzado que admite numerosas opciones de formato, como negrita, cursiva y listas.", + "richTextEditorCompKeywords": "editor, texto, formato, contenido enriquecido", + "numberInputCompName": "Número Entrada", + "numberInputCompDesc": "Un campo específico para la introducción de datos numéricos, con controles para aumentar y disminuir los valores.", + "numberInputCompKeywords": "número, entrada, incremento, decremento", + "sliderCompName": "Deslizador", + "sliderCompDesc": "Componente gráfico deslizante que permite seleccionar un valor o un intervalo dentro de una escala definida.", + "sliderCompKeywords": "deslizador, gama, entrada, gráfico", + "rangeSliderCompName": "Deslizador de gama", + "rangeSliderCompDesc": "Un control deslizante de doble asa para seleccionar un rango de valores, útil para filtrar o establecer límites.", + "rangeSliderCompKeywords": "gama, corredera, doble asa, filtro", + "ratingCompName": "Clasificación", + "ratingCompDesc": "Un componente para capturar las valoraciones de los usuarios, mostradas en forma de estrellas.", + "ratingCompKeywords": "valoración, estrellas, comentarios, aportaciones", + "switchCompName": "Interruptor", + "switchCompDesc": "Un interruptor basculante para decisiones del tipo encendido/apagado o sí/no.", + "switchCompKeywords": "conmutador, interruptor, encendido/apagado, control", + "selectCompName": "Seleccione", + "selectCompDesc": "Un menú desplegable para seleccionar entre una lista de opciones.", + "selectCompKeywords": "desplegable, seleccionar, opciones, menú", + "multiSelectCompName": "Multiselect", + "multiSelectCompDesc": "Componente que permite seleccionar varios elementos de una lista desplegable.", + "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", + "cascaderCompName": "Cascader", + "cascaderCompDesc": "Un desplegable de varios niveles para la selección jerárquica de datos, como la selección de una ubicación.", + "cascaderCompKeywords": "cascada, jerárquico, desplegable, niveles", + "checkboxCompName": "Casilla de verificación", + "checkboxCompDesc": "Una casilla de verificación estándar para opciones que pueden seleccionarse o deseleccionarse.", + "checkboxCompKeywords": "casilla, opciones, seleccionar, alternar", + "radioCompName": "Radio", + "radioCompDesc": "Botones de radio para seleccionar una opción de un conjunto, donde sólo se permite una elección.", + "radioCompKeywords": "radio, botones, seleccionar, elección única", + "segmentedControlCompName": "Control segmentado", + "segmentedControlCompDesc": "Un control con opciones segmentadas para alternar rápidamente entre varias opciones.", + "segmentedControlCompKeywords": "segmentado, control, alternar, opciones", + "stepControlCompName": "Control de pasos", + "stepControlCompDesc": "Un control con opciones de pasos para ofrecer pasos visuales guiados para aplicaciones como formularios o asistentes.", + "stepControlCompKeywords": "pasos, control, alternar, opciones", + "fileUploadCompName": "Carga de archivos", + "fileUploadCompDesc": "Un componente para cargar archivos, con soporte para arrastrar y soltar y selección de archivos.", + "fileUploadCompKeywords": "archivo, cargar, arrastrar y soltar, seleccionar", + "dateCompName": "Fecha", + "dateCompDesc": "Un componente selector de fechas para seleccionar fechas de una interfaz de calendario.", + "dateCompKeywords": "fecha, selector, calendario, seleccionar", + "dateRangeCompName": "Intervalo de fechas", + "dateRangeCompDesc": "Componente que permite seleccionar un intervalo de fechas, útil para sistemas de reservas o filtros.", + "dateRangeCompKeywords": "daterange, seleccionar, reservar, filtrar", + "timeCompName": "Tiempo", + "timeCompDesc": "Un componente de selección horaria para elegir determinadas horas del día.", + "timeCompKeywords": "hora, selector, seleccionar, reloj", + "timeRangeCompName": "Intervalo de tiempo", + "timeRangeCompDesc": "Componente que permite seleccionar un intervalo de tiempo, utilizado a menudo en aplicaciones de programación.", + "timeRangeCompKeywords": "timerange, seleccionar, programación, duración", + "buttonCompName": "Botón de formulario", + "buttonCompDesc": "Un componente de botón versátil para enviar formularios, desencadenar acciones o navegar.", + "buttonCompKeywords": "botón, enviar, acción, navegar", + "meetingControlCompName": "Botón Icono", + "meetingCompDesc": "Un botón para controlar funciones como iniciar, finalizar, silenciar o compartir.", + "meetingCompKeywords": "control, botón, inicio, fin", + "linkCompName": "Enlace", + "linkCompDesc": "Componente de visualización de hipervínculos para navegar o enlazar con recursos externos.", + "linkCompKeywords": "enlace, hipervínculo, navegación, externo", + "scannerCompName": "Escáner", + "scannerCompDesc": "Un componente para escanear códigos de barras, códigos QR y otros datos similares.", + "scannerCompKeywords": "escáner, código de barras, código QR, escanear", + "dropdownCompName": "Desplegable", + "dropdownCompDesc": "Un menú desplegable para mostrar de forma compacta una lista de opciones.", + "dropdownCompKeywords": "desplegable, menú, opciones, seleccionar", + "toggleButtonCompName": "Botón Toggle", + "toggleButtonCompDesc": "Botón que puede alternar entre dos estados u opciones.", + "toggleButtonCompKeywords": "conmutar, botón, interruptor, estado", + "textCompName": "Visualización de texto", + "textCompDesc": "Un componente sencillo para mostrar contenido de texto estático o dinámico con formato Markdown incluido.", + "textCompKeywords": "texto, visualización, estático, dinámico", + "tableCompName": "Cuadro", + "tableCompDesc": "Un componente de tabla enriquecido para mostrar datos en formato de tabla estructurada, con opciones de ordenación y filtrado, visualización de datos en árbol y filas extensibles.", + "tableCompKeywords": "tabla, datos, clasificación, filtrado", + "imageCompName": "Imagen", + "imageCompDesc": "Componente para la visualización de imágenes, compatible con varios formatos basados en URI o datos Base64.", + "imageCompKeywords": "imagen, visualización, medios, Base64", + "progressCompName": "Progreso", + "progressCompDesc": "Indicador visual de progreso, utilizado normalmente para mostrar el estado de finalización de una tarea.", + "progressCompKeywords": "progreso, indicador, estado, tarea", + "progressCircleCompName": "Círculo de Progreso", + "progressCircleCompDesc": "Un indicador de progreso circular, a menudo utilizado para estados de carga o tareas de tiempo limitado.", + "progressCircleCompKeywords": "círculo, progreso, indicador, carga", + "fileViewerCompName": "Visor de archivos", + "fileViewerCompDesc": "Un componente para visualizar varios tipos de archivos, incluidos documentos e imágenes.", + "fileViewerCompKeywords": "archivo, visor, documento, imagen", + "dividerCompName": "Divisor", + "dividerCompDesc": "Componente divisor visual, utilizado para separar contenidos o secciones en un diseño.", + "dividerCompKeywords": "divisor, separador, disposición, diseño", + "qrCodeCompName": "Código QR", + "qrCodeCompDesc": "Componente para mostrar códigos QR, útil para escanearlos rápidamente y transferir información.", + "qrCodeCompKeywords": "Código QR, escaneado, código de barras, información", + "formCompName": "Forma", + "formCompDesc": "Un componente contenedor para construir formularios estructurados con varios tipos de entrada.", + "formCompKeywords": "formulario, entrada, contenedor, estructura", + "jsonSchemaFormCompName": "Formulario de esquema JSON", + "jsonSchemaFormCompDesc": "Un componente de formulario dinámico generado a partir de un esquema JSON.", + "jsonSchemaFormCompKeywords": "JSON, esquema, formulario, dinámico", + "containerCompName": "Contenedor", + "containerCompDesc": "Contenedor de uso general para el diseño y la organización de los elementos de la interfaz de usuario.", + "containerCompKeywords": "contenedor, diseño, organización, interfaz de usuario", + "floatTextContainerCompName": "Contenedor de texto flotante", + "floatTextContainerCompDesc": "Componente contenedor de texto flotante", + "floatTextContainerCompKeywords": "contenedor, diseño, texto, flujo", + "collapsibleContainerCompName": "Contenedor plegable", + "collapsibleContainerCompDesc": "Un contenedor que puede expandirse o contraerse, ideal para gestionar la visibilidad de los contenidos.", + "collapsibleContainerCompKeywords": "plegable, contenedor, expandir, colapsar", + "tabbedContainerCompName": "Contenedor con pestañas", + "tabbedContainerCompDesc": "Un contenedor con navegación por pestañas para organizar el contenido en paneles separados.", + "tabbedContainerCompKeywords": "pestañas, contenedor, navegación, paneles", + "pageLayoutCompName": "Diseño de página", + "pageLayoutCompDesc": "Un contenedor que permite crear un diseño con áreas de cabecera, lateral, pie de página y contenido principal.", + "pageLayoutCompKeywords": "diseño, contenedor, navegación, páginas", + "modalCompName": "Modal", + "modalCompDesc": "Un componente modal emergente para mostrar contenido, alertas o formularios en foco.", + "modalCompKeywords": "modal, popup, alerta, formulario", + "listViewCompName": "Ver lista", + "listViewCompDesc": "Componente para mostrar una lista de elementos o datos, en cuyo interior se pueden colocar otros componentes. Como un repetidor.", + "listViewCompKeywords": "lista, vista, visualización, repetidor", + "gridCompName": "Rejilla", + "gridCompDesc": "Un componente de cuadrícula flexible para crear diseños estructurados con filas y columnas como extensión del componente Vista Lista.", + "gridCompKeywords": "cuadrícula, diseño, filas, columnas", + "navigationCompName": "Navegación", + "navigationCompDesc": "Un componente de navegación para crear menús, migas de pan o pestañas para la navegación por el sitio.", + "navigationCompKeywords": "navegación, menú, migas de pan, pestañas", + "iframeCompName": "IFrame", + "iframeCompDesc": "Un componente de marco en línea para incrustar páginas web externas y aplicaciones o contenido dentro de la aplicación.", + "iframeCompKeywords": "iframe, incrustar, página web, contenido", + "customCompName": "Componente personalizado", + "customCompDesc": "Un componente flexible y programable para crear elementos de interfaz de usuario únicos, definidos por el usuario y adaptados a sus necesidades específicas.", + "customCompKeywords": "personalizado, definido por el usuario, flexible, programable", + "moduleCompName": "Módulo", + "moduleCompDesc": "Utilice módulos para crear microaplicaciones diseñadas para encapsular funcionalidades o características específicas. Los módulos pueden incrustarse y reutilizarse en todas las aplicaciones.", + "moduleCompKeywords": "módulo, microaplicación, funcionalidad, reutilizable", + "jsonExplorerCompName": "Explorador JSON", + "jsonExplorerCompDesc": "Componente para explorar visualmente estructuras de datos JSON e interactuar con ellas.", + "jsonExplorerCompKeywords": "JSON, explorador, datos, estructura", + "jsonEditorCompName": "Editor JSON", + "jsonEditorCompDesc": "Un componente editor para crear y modificar datos JSON con validación y resaltado de sintaxis.", + "jsonEditorCompKeywords": "JSON, editor, modificar, validar", + "treeCompName": "Árbol", + "treeCompDesc": "Componente de estructura de árbol para visualizar datos jerárquicos, como sistemas de archivos u organigramas.", + "treeCompKeywords": "árbol, jerárquico, datos, estructura", + "treeSelectCompName": "Seleccionar árbol", + "treeSelectCompDesc": "Componente de selección que presenta las opciones en formato de árbol jerárquico, lo que permite realizar selecciones organizadas y anidadas.", + "treeSelectCompKeywords": "árbol, seleccionar, jerárquico, anidado", + "audioCompName": "Audio", + "audioCompDesc": "Componente para incrustar contenidos de audio, con controles de reproducción y ajuste del volumen.", + "audioCompKeywords": "audio, reproducción, sonido, música", + "videoCompName": "Vídeo", + "videoCompDesc": "Componente multimedia para incrustar y reproducir contenidos de vídeo, compatible con varios formatos.", + "videoCompKeywords": "vídeo, multimedia, reproducción, incrustación", + "drawerCompName": "Cajón", + "drawerCompDesc": "Componente de panel deslizante que puede utilizarse para navegación adicional o visualización de contenidos, y que suele emerger del borde de la pantalla.", + "drawerCompKeywords": "cajón, corredera, panel, navegación", + "chartCompName": "Gráfico", + "chartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", + "chartCompKeywords": "tabla, gráfico, datos, visualización", + "carouselCompName": "Carrusel de imágenes", + "carouselCompDesc": "Un componente de carrusel giratorio para mostrar imágenes, banners o diapositivas de contenido.", + "carouselCompKeywords": "carrusel, imágenes, rotación, escaparate", + "imageEditorCompName": "Editor de imágenes", + "imageEditorCompDesc": "Componente interactivo para editar y manipular imágenes, que ofrece diversas herramientas y filtros.", + "imageEditorCompKeywords": "imagen, editor, manipular, herramientas", + "mermaidCompName": "Cuadro de sirenas", + "mermaidCompDesc": "Componente para la representación de diagramas y organigramas complejos basados en la sintaxis Mermaid.", + "mermaidCompKeywords": "sirena, gráficos, diagramas, organigramas", + "calendarCompName": "Calendario", + "calendarCompDesc": "Un componente de calendario para mostrar fechas y eventos, con opciones para vistas de mes, semana o día.", + "calendarCompKeywords": "calendario, fechas, eventos, programación", + "signatureCompName": "Firma", + "signatureCompDesc": "Componente para la captura de firmas digitales, útil para procesos de aprobación y verificación.", + "signatureCompKeywords": "firma, digital, aprobación, verificación", + "jsonLottieCompName": "Animación Lottie", + "jsonLottieCompDesc": "Un componente para mostrar animaciones Lottie, que proporciona animaciones ligeras y escalables basadas en datos JSON.", + "jsonLottieCompKeywords": "lottie, animación, JSON, escalable", + "timelineCompName": "Cronología", + "timelineCompDesc": "Componente para mostrar eventos o acciones en orden cronológico, representados visualmente a lo largo de una línea de tiempo lineal.", + "timelineCompKeywords": "cronología, acontecimientos, cronológico, historia", + "commentCompName": "Cómo", + "commentCompDesc": "Un componente para añadir y mostrar comentarios de usuarios, con soporte para respuestas hilvanadas e interacción entre usuarios.", + "commentCompKeywords": "comentario, debate, interacción con el usuario, retroalimentación", + "mentionCompName": "Mencione", + "mentionCompDesc": "Componente que permite mencionar usuarios o etiquetas dentro de un contenido de texto, utilizado normalmente en redes sociales o plataformas colaborativas.", + "mentionCompKeywords": "mencionar, etiquetar, usuario, redes sociales", + "responsiveLayoutCompName": "Diseño adaptable", + "responsiveLayoutCompDesc": "Un componente de maquetación diseñado para adaptarse y responder a diferentes tamaños de pantalla y dispositivos, garantizando una experiencia de usuario coherente.", + "responsiveLayoutCompKeywords": "responsive, diseño, adaptar, tamaño de pantalla", + "splitLayoutCompName": "Diseño dividido", + "splitLayoutCompDesc": "Un componente de diseño para organizar múltiples áreas de visualización y separar áreas horizontal o verticalmente. Ofrece al usuario la posibilidad de adaptar la anchura o la altura de las áreas de visualización mediante arrastrar y soltar.", + "splitLayoutCompKeywords": "dividir, divisor, diseño, adaptar, tamaño de pantalla", + "iconCompName": "Iconos", + "iconCompDesc": "Utilice varios iconos para mejorar el atractivo visual y la experiencia de usuario de su aplicación.", + "iconCompKeywords": "Iconos, pictogramas, símbolos, formas", + "tourCompName": "Visita", + "tourCompDesc": "Un recorrido por los productos para guiar a los usuarios.", + "tourCompKeywords": "visita, visita de producto, recorrido, recorrido interactivo", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "Un componente de visualización para mostrar datos sobre el estado de la gestión de proyectos en formato de gráfico de colinas.", + "hillchartCompKeywords": "gestión de proyectos, gráfico de colinas, visualización, datos", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Un componente para mostrar mapas interactivos utilizando OpenLayers, con soporte para varias capas de mapas y características.", + "openLayersGeoMapCompKeywords": "openlayers, geo mapa, interactivo, capas de mapa", + "chartsGeoMapCompName": "Gráficos de mapas geográficos", + "chartsGeoMapCompDesc": "Un componente para visualizar datos geográficos en mapas interactivos con gráficos dinámicos", + "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualización, datos geográficos", + "bpmnEditorCompName": "BPMN Editor", + "bpmnEditorCompDesc": "Componente para visualizar, crear y editar diagramas BPMN, compatible con diversos elementos y características de BPMN.", + "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, flujos de trabajo", + "turnstileCaptchaCompName": "Torniquete Captcha", + "turnstileCaptchaCompDesc": "Un componente captcha para verificar usuarios contra bots.", + "turnstileCaptchaCompKeywords": "captcha, verificación, identidad, seguridad", + "pivotTableCompName": "Tabla dinámica", + "pivotTableCompDesc": "Herramienta de resumen y análisis de datos para organizar y agregar datos en formato tabular.", + "pivotTableCompKeywords": "tabla dinámica, datos, análisis, agregación", + "funnelChartCompName": "Gráfico de embudo", + "funnelChartCompDesc": "Una herramienta de visualización para mostrar la reducción progresiva de los datos a medida que pasan por etapas.", + "funnelChartCompKeywords": "gráfico de embudo, ventas, conversiones, proceso", + "gaugeChartCompName": "Cuadro de gálibos", + "gaugeChartCompDesc": "Gráfico que muestra los datos como una lectura en un dial, útil para indicar el estado o nivel de algo.", + "gaugeChartCompKeywords": "gráfico de indicadores, métricas, rendimiento, estado", + "sankeyChartCompName": "Gráfico Sankey", + "sankeyChartCompDesc": "Diagrama de flujo en el que la anchura de las flechas es proporcional al caudal, utilizado para mostrar transferencias de energía, material o costes.", + "sankeyChartCompKeywords": "diagrama de sankey, flujo, energía, costes", + "candleStickChartCompName": "Gráfico de velas", + "candleStickChartCompDesc": "Estilo de gráfico financiero utilizado para describir los movimientos de precios de un valor, derivado o divisa.", + "candleStickChartCompKeywords": "gráfico de velas, acciones, trading, finanzas", + "radarChartCompName": "Gráfico de radar", + "radarChartCompDesc": "Método gráfico de visualización de datos multivariantes en forma de gráfico bidimensional de tres o más variables cuantitativas.", + "radarChartCompKeywords": "gráfico radar, multivariante, análisis de resultados", + "heatmapChartCompName": "Mapa de calor", + "heatmapChartCompDesc": "Representación gráfica de datos en la que los valores individuales se representan como colores.", + "heatmapChartCompKeywords": "mapa de calor, visualización de datos, intensidad", + "graphChartCompName": "Gráfico", + "graphChartCompDesc": "Diagrama que representa una red de nodos conectados por aristas, útil para mostrar interconexiones y relaciones.", + "graphChartCompKeywords": "gráfico, redes, relaciones, nodos", + "treeChartCompName": "Gráfico de árbol", + "treeChartCompDesc": "Diagrama que representa visualmente la jerarquía en una estructura arborescente, mostrando las relaciones entre los distintos nodos.", + "treeChartCompKeywords": "organigrama, jerarquía, organización", + "treemapChartCompName": "Gráfico Treemap", + "treemapChartCompDesc": "Gráfico que utiliza rectángulos anidados para representar proporcionalmente datos jerárquicos.", + "treemapChartCompKeywords": "mapa de árbol, jerarquía, visualización de datos", + "sunburstChartCompName": "Gráfico Sunburst", + "sunburstChartCompDesc": "Técnica de visualización radial de relleno de espacio que ilustra las relaciones jerárquicas a través de capas de un círculo.", + "sunburstChartCompKeywords": "gráfico de sol, radial, jerarquía", + "themeriverChartCompName": "Mapa del río temático", + "themeriverChartCompDesc": "Una visualización parecida a un gráfico de flujo que muestra los cambios en un conjunto de datos a lo largo del tiempo en todas las categorías.", + "themeriverChartCompKeywords": "tema río, series temporales, tendencias", + "basicChartCompName": "Cuadro básico", + "basicChartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", + "basicChartCompKeywords": "tabla, gráfico, datos, visualización", + "shapeCompName": "Formas", + "shapeCompDesc": "Una colección de formas geométricas para diagramas, ilustraciones y visualizaciones.", + "shapeCompKeywords": "formas, geométricas, diagramas, ilustraciones", + "ganttChartCompName": "Diagrama de Gantt", + "ganttChartCompDesc": "Gráfico que ilustra el calendario de un proyecto, mostrando las fechas de inicio y fin de los elementos y las dependencias.", + "ganttChartCompKeywords": "diagrama de gantt, gestión de proyectos, calendario", + "kanbanCompName": "Tablero Kanban (¡previsualización!)", + "kanbanCompDesc": "Un tablero de Kanban interactivo para la gestión visual de tareas y flujos de trabajo.", + "kanbanCompKeywords": "kanban, tablero, flujo de trabajo, tareas", + "pieChartCompName": "Gráfico circular", + "pieChartCompDesc": "Un componente versátil para visualizar datos con gráficos circulares.", + "pieChartCompKeywords": "gráfico, datos, visualización", + "lineChartCompName": "Gráfico lineal", + "lineChartCompDesc": "Un componente versátil para visualizar datos con gráficos de líneas.", + "lineChartCompKeywords": "gráfico, datos, visualización", + "barChartCompName": "Gráfico de barras", + "barChartCompDesc": "Un componente versátil para visualizar datos con gráficos de barras.", + "barChartCompKeywords": "gráfico, datos, visualización", + "scatterChartCompName": "Gráfico de dispersión", + "scatterChartCompDesc": "Un componente versátil para visualizar datos con gráficos de dispersión.", + "scatterChartCompKeywords": "gráfico, datos, visualización", + "colorPickerCompName": "Selector de color", + "colorPickerCompDesc": "Selección intuitiva de colores para personalizar.", + "colorPickerCompKeywords": "color, selector, personalización", + "floatButtonCompName": "Botón de flotador", + "floatButtonCompDesc": "Un botón de acción flotante para acciones destacadas y rápidas.", + "floatButtonCompKeywords": "botón flotante, acción, rápida", + "avatarCompName": "Avatar", + "avatarCompDesc": "Muestra avatares de usuario o imágenes de perfil para una identificación personalizada.", + "avatarCompKeywords": "avatar, imagen de perfil, identificación del usuario", + "avatarGroupCompName": "Grupo Avatar", + "avatarGroupCompDesc": "Un grupo de avatares para representar a varios usuarios o entidades de forma compacta y visualmente atractiva.", + "avatarGroupCompKeywords": "grupo de avatares, usuarios, entidades, compacto", + "transferName": "Transferencia", + "transferDesc": "Facilita la transferencia de datos entre dos listas mediante la función de arrastrar y soltar.", + "transferKeywords": "transferencia, datos, arrastrar y soltar", + "cardCompName": "Tarjeta de contenido", + "cardCompDesc": "Un componente de tarjeta para mostrar información o contenidos organizados de forma estructurada.", + "cardCompKeywords": "tarjeta, información, contenido, pantalla", + "timerCompName": "Timer", + "timerCompDesc": "Componente que muestra una cuenta atrás o el tiempo transcurrido, útil para el seguimiento de duraciones y plazos.", + "timerCompKeywords": "temporizador, cuenta atrás, tiempo transcurrido, seguimiento, duraciones, plazos", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Ver documentación", + "menuViewPlayground": "Ver zona de juegos interactiva", + "menuUpgradeToLatest": "Actualizar a la última versión", + "nameNotEmpty": "No puede estar vacío", + "nameRegex": "Debe empezar por una letra y contener sólo letras, cifras y guiones bajos (_)", + "nameJSKeyword": "No puede ser una palabra clave JavaScript", + "nameGlobalVariable": "No puede ser un nombre de variable global", + "nameExists": "Nombre {name} Ya existe", + "getLatestVersionMetaError": "No se ha podido obtener la última versión, inténtelo más tarde.", + "needNotUpgrade": "La versión actual ya es la última.", + "compNotFoundInLatestVersion": "Componente actual no encontrado en la última versión.", + "upgradeSuccess": "Actualizado correctamente a la última versión.", + "searchProp": "Buscar en", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Reintentar", + "resetAfterSubmit": "Restablecer después de enviar correctamente el formulario", + "jsonSchema": "Esquema JSON", + "uiSchema": "Esquema de IU", + "schemaTooltip": "Véase", + "defaultData": "Datos de formulario precargados", + "dataDesc": "Datos del formulario actual", + "required": "Requerido", + "maximum": "El valor máximo es {value}.", + "minimum": "El valor mínimo es {value}.", + "exclusiveMaximum": "Debe ser inferior a {value}", + "exclusiveMinimum": "Debe ser mayor que {value}.", + "multipleOf": "Debe ser múltiplo de {value}.", + "minLength": "Al menos {value} Caracteres", + "maxLength": "Como máximo {value} Caracteres", + "pattern": "Debe coincidir con el patrón {value}", + "format": "Debe coincidir con el formato {value}.", + }, + "select": { + ...en.select, + + "inputValueDesc": "Valor de búsqueda de entrada", + }, + "customComp": { + ...en.customComp, + + "text": "Es un buen día.", + "triggerQuery": "Consulta de activación", + "updateData": "Actualizar datos", + "updateText": "¡También estoy de buen humor para desarrollar ahora mi propio componente personalizado con Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Datos que desea pasar al componente personalizado", + "code": "Código de su componente personalizado", + }, + "tree": { + ...en.tree, + + "placeholder": "Seleccione una opción", + "selectType": "Seleccionar tipo", + "noSelect": "No Seleccionar", + "singleSelect": "Selección individual", + "multiSelect": "Selección múltiple", + "checkbox": "Casilla de verificación", + "checkedStrategy": "Estrategia verificada", + "showAll": "Todos los nodos", + "showParent": "Sólo nodos padre", + "showChild": "Nodos hijos únicos", + "autoExpandParent": "Auto Expandir Padre", + "checkStrictly": "Comprobar estrictamente", + "checkStrictlyTooltip": "Compruebe el TreeNode con precisión; el TreeNode padre y los TreeNodes hijos no están asociados", + "treeData": "Datos del árbol", + "treeDataDesc": "Datos actuales del árbol", + "value": "Valores por defecto", + "valueDesc": "Valores actuales", + "expanded": "Valores ampliados", + "expandedDesc": "Valores ampliados actuales", + "defaultExpandAll": "Por defecto Expandir todos los nodos", + "showLine": "Mostrar línea", + "showLeafIcon": "Mostrar icono de hoja", + "treeDataAsia": "Asia", + "treeDataChina": "China", + "treeDataBeijing": "Pekín", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Japón", + "treeDataEurope": "Europa", + "treeDataEngland": "Inglaterra", + "treeDataFrance": "Francia", + "treeDataGermany": "Alemania", + "treeDataNorthAmerica": "Norteamérica", + "helpLabel": "Etiqueta de nodo", + "helpValue": "Valor de nodo único en el árbol", + "helpChildren": "Niños Nodos", + "helpDisabled": "Desactiva el Nodo", + "helpSelectable": "Si el nodo es seleccionable (tipo de selección única/múltiple)", + "helpCheckable": "Si mostrar casilla de verificación (Tipo de casilla de verificación)", + "helpDisableCheckbox": "Desactiva la casilla de verificación (Tipo de casilla de verificación)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Prueba de eventos", + "methodTest": "Método de ensayo", + "inputTest": "Prueba de entrada", + }, + "password": { + ...en.password, + + "label": "Contraseña", + "placeholder": "Introduzca la contraseña", + "conformLabel": "Confirmar contraseña", + "conformPlaceholder": "Confirmar contraseña", + "visibilityToggle": "Conmutar visibilidad", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Personalizar la barra de herramientas", + "toolbarDescription": "Puede personalizar la barra de herramientas. Por favor, consulte: https://quilljs.com/docs/modules/toolbar/ para más detalles.", + "placeholder": "Por favor, introduzca...", + "hideToolbar": "Ocultar barra de herramientas", + "content": "Contenido", + "title": "Título", + "save": "Guardar", + "link": "Enlace:", + "edit": "Editar", + "remove": "Eliminar", + "defaultValue": "Contenido básico", + }, + "floatButton": { + ...en.floatButton, + + "custom": "A medida", + "backTop": "Volver Arriba", + "buttonType": "Tipo de botón", + "buttonShape": "Forma del botón", + "square": "Cuadrado", + "circle": "Círculo", + "description": "Descripción", + "badge": "Insignia", + "primary": "Principal", + "default": "Por defecto", + "buttonTheme": "Tema del botón", + "badgeColor": "Color del distintivo", + "dot": "Insignia Como Punto", + "hidden": "Oculto", + "visibilityHeight": "Altura de visibilidad", + "visibilityHeightDesc": "Desplácese hasta una altura determinada antes de mostrar el botón de volver al principio, siempre se muestra 0,El modo de edición no puede previsualizar en tiempo real", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Evento desencadenante", + "click": "Haga clic en", + "hover": "pase el ratón por", + "disabledAlpha": "Desactivar selección alfa", + "recommended": "Recomendado", + "showPresets": "Mostrar preajustes de color", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Mostrar botón de cierre", + "Type": "Tipo de placa", + "Count": "Recuento de insignias", + "Size": "Tamaño del distintivo", + "SizeDefault": "por defecto", + "SizeSmall": "Pequeño", + "overflowCount": "Recuento de desbordamientos", + "Title": "Título de la insignia", + "dot": "Punto", + "number": "Número", + "tooltip": "Información sobre herramientas", + }, + "gantt": { + ...en.gantt, + + "key": "Clave", + "title": "Título", + "project": "Proyecto", + "from": "En", + "minute": "minuto", + "hour": "Hora", + "day": "Día", + "week": "Semana", + "month": "Mes", + "year": "Año", + "quarter": "Cuarto", + "tasks": "Datos de tareas", + "level": "nivel", + "durationUnit": "Unidad de duración", + "duration": "Duración", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Semana #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "árbol", + "ColumnsData": "Columnas Datos", + "allowChangeTask": "Tarea DbClick", + "allowAddLink": "Añadir enlace", + "allowLinkDelete": "Enlace Eliminar", + "allowProgressDrag": "Arrastre de progreso", + "allowTaskDrag": "Arrastre de tareas", + "links": "Datos de enlaces", + "dataFormat": "Formato de análisis de datos", + "handleDateChange": "Gestionar el cambio de tarea", + "handleTaskChange": "Gestionar el cambio de tarea", + "handleAddedLink": "Mango Enlace añadido", + "handleDeletedLink": "Manejar enlace eliminado", + "handleProgressDrag": "Manejar el arrastre de progreso", + "showTodayMark": "Mostrar hoy Mark", + "resize": "Cambie el tamaño de", + "otherEvents": "Otros eventos", + "openAllBranchInit": "Abrir todas las sucursales Init", + "date": "Fecha", + "text": "Texto", + "progress": "progreso", + "width": "Anchura", + "ColumnsType": "Tipo de nubes", + "currentId": "Identificación actual", + "currentObject": "Objeto actual", + "addTask": "Añadir tarea(s)", + "taskObject": "Objeto de la tarea", + "taskObjectDesc": "Admite matrices de tareas o un único objeto de tarea", + "linkID": "ID del enlace", + "linkIDDesc": "Admite matrices de ID de enlaces o un único objeto de enlace", + "removeTask": "Eliminar tarea", + "taskID": "ID de tarea", + "taskIDDesc": "Admite matrices de ID o un único ID", + "add": "Añadir", + "expandingAll": "Ampliar todo", + "collapsingAll": "Colapsar todo", + "addTaskFail": "La tarea de adición ha fallado, y el tipo de parámetro debe ser un objeto o un objeto array", + "addLinkFail": "El enlace de adición falló, y el tipo de parámetro debe ser un objeto o un objeto de matriz", + "removeTaskFail": "La tarea de eliminación ha fallado, y el tipo de parámetro debe ser cadena o matriz de cadenas", + "removeLinkFail": "Los enlaces de borrado fallaron, y el tipo de parámetro debe ser string array", + "otherData": "Otros datos{i}", + "projectText": "Proyecto #{i}", + "taskText": "Tarea #{i}", + "AutoCalculateProgress": "Progreso del cálculo automático", + "allowProjectDrag": "Permitir el arrastre de proyectos", + "showColumns": "Mostrar columnas", + "exportToPNG": "Exportar a PNG", + "exportToPDF": "Exportar a PDF", + "exportToExcel": "Exportar a Excel", + "progressLowBg": "Bajo BgColor", + "progressLowColor": "Bajo Progreso Color", + "progressMediumBg": "Medio BgColor", + "progressMediumColor": "Medio Color Progress", + "progressHighBg": "Altura BgColor", + "progressHighColor": "Heigh Progress Color", + "progresscompletedColor": "Color de progreso completado", + "lowProgressLine": "Línea de progreso baja", + "mediumProgressLine": "Línea de progreso medio", + "SegmentedColor": "Color segmentado Progress", + "link_f2s": "Enlace F2S", + "link_s2s": "Enlace S2S", + "link_f2f": "Enlace F2F", + "link_s2f": "Enlace S2F", + "weekScale": "#{i},", + "showHolidays": "Mostrar vacaciones", + "StatutoryHolidays": "Datos sobre las vacaciones legales", + "skipOffTime": "Oculta el tiempo no trabajado", + "weekend": "Fin de semana", + "weekendSelected": "Fin de semana seleccionado", + "noWorkHour": "Ninguna hora de trabajo", + "noWorkHourSelected": "ninguna hora de trabajo seleccionada", + "showWorkTimes": "Mostrar horarios de trabajo", + "workTimeData": "Datos sobre el tiempo de trabajo", + "fit": "ajuste", + "manual": "manual", + "scaleMode": "Modo Escala", + "startDate": "Fecha de inicio", + "endDate": "Fecha final", + "addLink": "Añadir enlace(s)", + "linkObject": "enlace Objeto", + "removeLink": "eliminar enlace", + "allowSort": "Permitir clasificación", + "showTask": "Mostrar tarea", + "toggleOnDBClick": "Activar DBClick", + "sortOptions": "Opciones iniciales de clasificación", + "rowHeight": "Altura de fila", + "showTooltip": "Mostrar información sobre herramientas", + "tooltipTemplates": "Plantilla Tooltip", + "allowResizeTask": "Permitir redimensionar tarea", + "projectColor": "Proyecto Color", + "projectColorBg": "Proyecto BgColor", + "taskColor": "Tarea Color", + "taskColorBg": "Tarea BgColor", + "milestoneColor": "Hito Color", + "highlightOverdue": "Resaltar Atrasado", + "overdueColor": "Color atrasado", + "overdueBgColor": "Atrasado BgColor", + "projectCompletedBgColor": "Proyecto finalizado BgColor", + "projectCompletedColor": "Proyecto finalizado Color", + "tag": "etiqueta", + "tasksTableWidth": "Anchura de la tabla de tareas", + "allowErrorMessage": "Permitir mensaje de error", + "currentProjectId": "Id de proyecto actual", + "currentProjectLastTask": "Proyecto actual Última tarea", + "onlySortProject": "Sólo Ordenar Proyecto", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Fuente de datos", + "targetTitle": "Datos objetivo", + "content": "Contenido {i}", + "items": "Artículos", + "targetKeys": "Claves seleccionadas", + "oneWay": "Una vía", + "pagination": "Paginación", + "pageSize": "Tamaño de página", + "allowSearch": "Permitir búsqueda", + "selectedKeys": "Claves seleccionadas", + "searchInfo": "Buscar información", + "targerObject": "Objeto Targer", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Recuento máximo", + "avatarSize": "Tamaño del avatar", + "autoColor": "Auto Color", + "alignment": "Alineación", + "currentAvatar": "Avatar actual", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "cuadrado", + "circle": "círculo", + "icon": "icono", + "shape": "forma", + "counts": "Insignia", + "title": "título", + "src": "src", + "avatarCompTooltip": "La prioridad de visualización es: imagen -> caracteres -> icono. En función de lo que esté disponible en primer lugar.", + "iconSize": "Tamaño del icono", + "avatarBackground": "Fondo", + "label": "Etiqueta", + "caption": "Leyenda", + "labelPosition": "Posición", + "alignmentPosition": "alineación", + "text": "Texto", + "enableDropDown": "Activar desplegable", + "containerBackground": "Fondo", + }, + "card": { + ...en.card, + + "cardType": "Tipo de tarjeta", + "common": "común", + "custom": "personalizado", + "default": "por defecto", + "small": "pequeño", + "showTitle": "Mostrar título", + "title": "Título", + "more": "Más", + "extraTitle": "Llamamiento a la acción", + "CoverImg": "Imagen de portada", + "imgSrc": "Fuente de la imagen", + "showMeta": "Mostrar contenido", + "metaTitle": "Título del contenido", + "metaDesc": "Descripción del contenido", + "imgHeight": "Altura de la imagen", + "showActionIcon": "Mostrar opciones de acción", + "actionOptions": "Opciones de acción", + "menu": "Menú {i}", + "hoverColor": "hover Color", + "IconColor": "Icono Color", + "titleSize": "Título Tamaño", + }, + "timer": { + ...en.timer, + + "timerState": "Estado del temporizador", + "elapsedTime": "Tiempo transcurrido", + "timer": "Timer", + "countdown": "Cuenta atrás", + "defaultValue": "Valor por defecto", + "timerType": "Tipo de temporizador", + "start": "Inicio", + "pause": "Pausa", + "resume": "Currículum", + "reset": "Restablecer", + "startPause": "Inicio/Pausa", + "hideButton": "Botón Ocultar", + "fontColor": "Color de fuente", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Icono", + "autoSize": "Icono AutoSize", + "iconSize": "Tamaño del icono", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Formato", + "precision": "Precisión", + "allowNull": "Permitir valor nulo", + "thousandsSeparator": "Mostrar separador de miles", + "controls": "Mostrar botones de aumento/disminución", + "step": "Paso", + "standard": "Estándar", + "percent": "Porcentaje", + }, + "slider": { + ...en.slider, + + "step": "Paso", + "stepTooltip": "El valor debe ser mayor que 0 y divisible por (Máx-Mín)", + "vertical": "Orientación vertical", + }, + "rating": { + ...en.rating, + + "max": "Clasificación máxima", + "allowHalf": "Permitir la mitad de puntos de valoración", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Opciones", + "option": "Opción", + "optionI": "Opción {i}", + "viewDocs": "Ver documentos", + "tip": "Las variables \"item\" e \"i\" representan el valor y el índice de cada elemento de la matriz de datos.", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Valor / Clave", + "valueTooltip": "El valor del paso debe ser un número. Para el primer Paso, debe ser igual al valor inicial. Los números deben estar en orden coherente y ascendente", + "title": "Paso Título", + "subTitle": "Paso Subtítulo", + "description": "Paso Descripción", + "status": "Paso Estado", + "icon": "Paso Icono", + }, + "step": { + ...en.step, + + "initialValue": "Números iniciales en", + "initialValueTooltip": "Dónde empezar la numeración visual. Debe ser 1 o superior.", + "valueDesc": "Valor actual", + "size": "Pasos Tamaño", + "sizeSmall": "Pequeño", + "sizeDefault": "Por defecto", + "percent": "Pasos Porcentaje", + "type": "Tipo de pasos", + "typeDefault": "Estándar", + "typeNavigation": "Navegación", + "typeInline": "En línea", + "direction": "Pasos Dirección", + "directionVertical": "Vertical", + "directionHorizontal": "Horizontal", + "labelPlacement": "Pasos Colocación de etiquetas", + "status": "Pasos Estado", + "statusWait": "Espere", + "statusProcess": "Proceso", + "statusFinish": "Acabado", + "statusError": "Error", + "showDots": "Mostrar puntos en lugar de símbolos", + "showIcons": "Mostrar iconos en lugar de símbolos", + "responsive": "Respuesta", + "selectable": "Seleccionable", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Texto de la etiqueta", + "color": "Color", + "icon": "Icono", + }, + "radio": { + ...en.radio, + + "options": "Opciones", + "horizontal": "Horizontal", + "horizontalTooltip": "El diseño horizontal se enrolla cuando se queda sin espacio", + "vertical": "Vertical", + "verticalTooltip": "El diseño vertical siempre se mostrará en una sola columna", + "autoColumns": "Columna Auto", + "autoColumnsTooltip": "La disposición en autocolumnas reordena automáticamente el orden según lo permita el espacio y muestra varias columnas.", + }, + "cascader": { + ...en.cascader, + + "options": "Datos JSON para mostrar selecciones en cascada", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Valor seleccionado actualmente", + "selectedIndexDesc": "El índice del valor seleccionado actualmente, o -1 si no hay ningún valor seleccionado.", + "selectedLabelDesc": "Etiqueta del valor seleccionado actualmente", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Debe ser un número con una unidad de tamaño de archivo válida, o un número de bytes sin unidad.", + "fileEmptyErrorMsg": "Carga fallida. El tamaño del archivo está vacío.", + "fileSizeExceedErrorMsg": "Carga fallida. El tamaño del archivo excede el límite.", + "minSize": "Tamaño mínimo", + "minSizeTooltip": "El tamaño mínimo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", + "maxSize": "Tamaño máximo", + "maxSizeTooltip": "El tamaño máximo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", + "single": "Único", + "multiple": "Múltiples", + "directory": "Directorio", + "upload": "Visite", + "fileType": "Tipos de ficheros", + "reference": "Consulte", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Especificadores únicos de tipo de archivo", + "uploadType": "Tipo de carga", + "showUploadList": "Mostrar lista de cargas", + "maxFiles": "Archivos Max", + "filesValueDesc": "El contenido del archivo cargado actualmente está codificado en Base64", + "filesDesc": "Lista de los archivos cargados actualmente. Para más detalles, consulte", + "clearValueDesc": "Borrar todos los archivos", + "parseFiles": "Analizar archivos", + "parsedValueTooltip1": "Si parseFiles es True, los archivos se convertirán en objetos, matrices o cadenas. Se puede acceder a los datos analizados a través de la matriz parsedValue.", + "parsedValueTooltip2": "Admite archivos Excel, JSON, CSV y de texto. Otros formatos devolverán un valor nulo.", + "forceCapture": "Captura forzosa", + "forceCaptureTooltip": "En lugar de cargar, captura la imagen desde la cámara", + "usePhoto": "Utilizar foto", + "retakePhoto": "Retomar foto", + "capture": "Capture", + }, + "date": { + ...en.date, + + "format": "Formato", + "inputFormat": "Formato de entrada", + "formatTip": "Admite: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", + "reference": "Consulte", + "showTime": "Hora del espectáculo", + "start": "Fecha de inicio", + "end": "Fecha final", + "year": "Año", + "quarter": "Cuarto", + "month": "Mes", + "week": "Semana", + "date": "Fecha", + "clearAllDesc": "Borrar todo", + "resetAllDesc": "Restablecer todo", + "placeholder": "Seleccionar fecha", + "placeholderText": "Marcador de posición", + "startDate": "Fecha de inicio", + "endDate": "Fecha final", + }, + "time": { + ...en.time, + + "start": "Hora de inicio", + "end": "Fin de los tiempos", + "formatTip": "Soporte: 'HH:mm:ss', 'Timestamp'", + "format": "Formato", + "placeholder": "Seleccionar hora", + "placeholderText": "Marcador de posición", + "startTime": "Hora de inicio", + "endTime": "Fin de los tiempos", + }, + "button": { + ...en.button, + + "prefixIcon": "Prefijo Icono", + "prefixText": "Texto del prefijo", + "suffixIcon": "Icono de sufijo", + "icon": "Icono", + "iconSize": "Tamaño del icono", + "button": "Botón de formulario", + "formToSubmit": "Formulario de envío", + "default": "Por defecto", + "submit": "Enviar", + "textDesc": "Texto que aparece actualmente en el botón", + "loadingDesc": "¿Está el botón en estado de carga? Si es verdadero, el botón actual está cargando", + "formButtonEvent": "Evento", + }, + "link": { + ...en.link, + + "link": "Enlace", + "textDesc": "Texto que aparece actualmente en el enlace", + "loadingDesc": "¿Está el enlace en estado de carga? Si es verdadero, el enlace actual está cargando", + }, + "scanner": { + ...en.scanner, + + "text": "Haga clic en Escanear", + "camera": "Cámara {index}", + "changeCamera": "Cambiar cámara", + "continuous": "Escaneado continuo", + "uniqueData": "Ignorar datos duplicados", + "maskClosable": "Haga clic en la máscara para cerrar", + "errTip": "Utilice este componente bajo HTTPS o Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Pantalla sólo con etiqueta", + "textDesc": "Texto que aparece actualmente en el botón", + "triggerMode": "Modo de disparo", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Hola, {name}", + "valueTooltip": "Markdown admite la mayoría de las etiquetas y atributos HTML. iframe, Script y otras etiquetas están desactivadas por motivos de seguridad.", + "verticalAlignment": "Alineación vertical", + "horizontalAlignment": "Alineación horizontal", + "textDesc": "Texto mostrado en el cuadro de texto actual", + }, + "table": { + ...en.table, + + "editable": "Editable", + "columnNum": "Columnas", + "viewModeResizable": "Ancho de columna ajustado por el usuario", + "viewModeResizableTooltip": "Si los usuarios pueden ajustar el ancho de columna.", + "visibleResizables": "Mostrar asas de cambio de tamaño", + "visibleResizablesTooltip": "Mostrar los Manejadores de Redimensionamiento visibles en la Cabecera de la Tabla.", + "showFilter": "Botón Mostrar filtro", + "showRefresh": "Mostrar botón de actualización", + "showDownload": "Mostrar botón de descarga", + "columnSeparator": "Separador de columna", + "columnSeparatorTooltip": "Separador de columnas (\"delimitador\") en el archivo CSV descargado.\n\nRecomendaciones:\n- Coma (,)\n- Punto y coma (;)\n- Tubo (|)\n- Tabulación (\\t)", + "columnSetting": "Botón Mostrar visibilidad de columnas", + "searchText": "Buscar texto", + "searchTextTooltip": "Buscar y Filtrar los Datos, que se presentan actualmente en la Tabla. Esta es una Búsqueda sólo frontal y No Afecta a la Consulta de la Fuente de Datos).", + "showQuickJumper": "Mostrar Quick Jumper", + "hideOnSinglePage": "Ocultar en una sola página", + "showSizeChanger": "Botón de cambio de talla", + "pageSizeOptions": "Opciones de tamaño de página", + "pageSize": "Tamaño de página", + "total": "Recuento total de filas", + "totalTooltip": "El valor por defecto es el número de elementos de datos actuales que pueden obtenerse de la consulta, por ejemplo: '{{query1.data[0].count}}'.", + "filter": "Filtros", + "filterRule": "Regla de filtrado", + "chooseColumnName": "Elegir columna", + "chooseCondition": "Elegir condición", + "clear": "Claro", + "columnShows": "Columnas", + "selectAll": "Seleccionar todo", + "and": "Y", + "or": "O", + "contains": "Contiene", + "notContain": "No contiene", + "equals": "Es igual a", + "isNotEqual": "No es igual", + "isEmpty": "Está vacío", + "isNotEmpty": "No está vacío", + "greater": "Mayor que", + "greaterThanOrEquals": "Mayor o igual que", + "lessThan": "Menos de", + "lessThanOrEquals": "Menor o igual que", + "action": "Acción", + "columnValue": "Valor de columna", + "columnValueTooltip": "'{{currentCell}}': Datos de la celda actual\n '{{currentRow}}': Datos de la fila actual\n '{{currentIndex}}': Índice de datos actual (empezando por 0)\n Ejemplo: '{{currentCell * 5}}' Mostrar 5 Veces el Valor Original de los Datos.", + "columnTooltip": "Columna Tooltip", + "imageSrc": "Fuente de la imagen", + "imageSize": "Tamaño de la imagen", + "columnTitle": "Título", + "columnTitleTooltip": "Información sobre el título", + "showTitle": "Mostrar título", + "showTitleTooltip": "Mostrar/Ocultar el título de la columna en la cabecera de la tabla", + "sortable": "Clasificable", + "align": "Alineación", + "fixedColumn": "Columna fija", + "autoWidth": "Ancho automático", + "customColumn": "Columna personalizada", + "auto": "Coche", + "fixed": "Fijo", + "columnType": "Tipo de columna", + "dataMapping": "Cartografía de datos", + "numberStep": "Paso", + "numberStepTooltip": "El número al que aumenta o disminuye el valor actual. Puede ser un número entero o decimal", + "precision": "Precisión", + "float": "Flotador", + "prefix": "Prefijo", + "suffix": "Sufijo", + "avatars": "Avatares", + "avatarGroupAlignment": "Alineación de avatares", + "text": "Texto", + "number": "Número", + "link": "Enlace", + "links": "Enlaces", + "tag": "Etiqueta", + "select": "Seleccione", + "dropdown": "Desplegable", + "time": "Tiempo", + "date": "Fecha", + "dateTime": "Fecha Hora", + "badgeStatus": "Estado", + "button": "Botón", + "image": "Imagen", + "boolean": "Booleano", + "switch": "Interruptor", + "rating": "Clasificación", + "progress": "Progreso", + "option": "Operación", + "optionList": "Lista de operaciones", + "option1": "Operación 1", + "status": "Estado", + "statusTooltip": "Valores opcionales: Correcto, Error, Predeterminado, Advertencia, Procesando", + "primaryButton": "Principal", + "defaultButton": "Por defecto", + "type": "Tipo", + "tableSize": "Tamaño de la tabla", + "hideHeader": "Ocultar cabecera de tabla", + "hideToolbar": "Ocultar pie de página", + "fixedHeader": "Cabecera de tabla fija", + "fixedHeaderTooltip": "La cabecera será fija para la tabla desplazable verticalmente", + "fixedToolbar": "Barra de herramientas fija", + "fixedToolbarTooltip": "La barra de herramientas se fijará para la tabla desplazable verticalmente en función de la posición", + "hideBordered": "Mostrar asas de cambio de tamaño", + "showHeaderGridBorder": "Mostrar borde de cuadrícula de cabecera", + "showRowGridBorder": "Mostrar borde de cuadrícula de fila", + "showVerticalRowGridBorder": "Mostrar el borde vertical de la cuadrícula de filas", + "showHorizontalRowGridBorder": "Mostrar el borde horizontal de la cuadrícula de filas", + "deleteColumn": "Borrar columna", + "confirmDeleteColumn": "Confirme Borrar columna:", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "Los Datos Actuales Cambian, Pulse para Regenerar la Columna.", + "changeSetDesc": "Un Objeto que Representa Cambios en una Tabla Editable, Sólo Contiene la Celda Cambiada. Las filas van primero y las columnas después.", + "selectedRowDesc": "Proporciona datos para la fila seleccionada actualmente, indicando la fila que desencadena un evento de clic si el usuario hace clic en un botón/enlace de la fila.", + "selectedRowsDesc": "Útil en el modo de selección múltiple, igual que SelectedRow", + "pageNoDesc": "Página de visualización actual, empezando por 1", + "pageSizeDesc": "Cuántas filas por página", + "sortColumnDesc": "Nombre de la columna ordenada actualmente seleccionada", + "sortDesc": "Si la fila actual está en orden descendente", + "pageOffsetDesc": "El inicio actual de la paginación, utilizado para la paginación para obtener datos. Ejemplo: Select * from Usuarios Limite '{{table1.pageSize}}' Desplazamiento '{{table1.pageOffset}}'", + "displayDataDesc": "Datos mostrados en la tabla actual", + "selectedIndexDesc": "Índice seleccionado en los datos de visualización", + "filterDesc": "Parámetros de filtrado de tablas", + "dataDesc": "Los datos JSON de la tabla", + "saveChanges": "Guardar cambios", + "cancelChanges": "Cancelar cambios", + "rowSelectChange": "Cambio de selección de fila", + "rowClick": "Fila Click", + "rowExpand": "Fila Ampliar", + "rowShrink": "Reducción de filas", + "search": "Buscar en", + "download": "Descargar", + "columnEdited": "Columna editada", + "filterChange": "Cambio de filtro", + "sortChange": "Ordenar Cambio", + "pageChange": "Cambio de página", + "refresh": "Actualizar", + "rowColor": "Color de fila condicional", + "rowColorDesc": "Establece Condicionalmente el Color de la Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "Alto de línea condicional", + "rowHeightDesc": "Establece Condicionalmente el Alto de Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Color de celda condicional", + "cellColorDesc": "Establezca Condicionalmente el Color de la Celda Basado en el Valor de la Celda Usando CurrentCell. Por ejemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "No hay ningún manejador de eventos configurado para guardar cambios. Vincule al menos un controlador de eventos antes de hacer clic.", + "dynamicColumn": "Utilizar la visibilidad dinámica de columnas", + "dynamicColumnConfig": "Columnas visibles", + "dynamicColumnConfigDesc": "Visibilidad dinámica de columnas. Acepta un array de nombres de columnas. Todas las columnas son visibles por defecto. Ejemplo: [\"id\", \"nombre\"]", + "position": "Posición", + "showDataLoadSpinner": "Mostrar indicador de carga", + "showValue": "Mostrar valor", + "expandable": "Ampliable", + "configExpandedView": "Configurar vista ampliada", + "toUpdateRowsDesc": "Una Matriz de Objetos para Filas a Actualizar en Tablas Editables.", + "selectedCellDesc": "Célula seleccionada", + "empty": "Vacío", + "falseValues": "Texto en falso", + "iconTrue": "Icono Cuando es verdadero", + "iconFalse": "Icono en falso", + "iconNull": "Icono A cero", + "allColumn": "Todos", + "visibleColumn": "Visible", + "emptyColumns": "Actualmente no hay columnas visibles", + "showSummary": "Mostrar fila(s) de resumen", + "totalSummaryRows": "Total de filas", + "inlineAddNewRow": "Inline Añadir nueva(s) fila(s)", + "editMode": "Modo Edición", + "singleClick": "Un solo clic", + "doubleClick": "Doble clic", + "showUpdateButtons": "Mostrar botones Guardar/Cancelar", + }, + "image": { + ...en.image, + + "src": "Fuente de la imagen", + "srcDesc": "Fuente de la imagen. Puede ser una URL, una ruta o una cadena Base64. Por ejemplo: data:image/png;base64, AAA... CCC", + "supportPreview": "Soporte Click Preview (zoom)", + "supportPreviewTip": "Efectivo cuando la fuente de la imagen es válida", + "previewSrc": "Fuente de imágenes de alta resolución", + "clipPath": "Recorte de imagen", + "clipPathTip": "Utilice clip-path para definir una forma personalizada para su elemento basada en la definición CSS, haciendo referencia a una máscara SVG (a través de la URL de origen) o utilizando formas predefinidas como circle(), ellipse(), polygon(), o inset() para el recorte.", + "enableOverflow": "Activar desbordamiento", + "enableOverflowTip": "Permite que la imagen desborde su contenedor, posibilitando el recorte más allá de los límites del contenedor. Resulta útil para mantener el enfoque en partes específicas de la imagen.", + "overflow": "Comportamiento de desbordamiento (CSS)", + "overflowTip": "Define cómo debe comportarse el contenido cuando desborda el contenedor. Opciones como \"oculto\", \"desplazamiento\" o \"visible\" determinan la visibilidad del contenido recortado.", + "positionX": "Posición horizontal", + "positionXTip": "Especifica la alineación horizontal de la imagen dentro de su contenedor. Ejemplos: 'izquierda', 'centro', 'derecha', o valores porcentuales.", + "positionY": "Posición vertical", + "positionYTip": "Especifica la alineación vertical de la imagen dentro de su contenedor. Ejemplos: 'arriba', 'centro', 'abajo', o valores porcentuales.", + "aspectRatio": "Relación de aspecto (CSS)", + "aspectRatioTip": "Mantiene una relación anchura-altura coherente para la imagen, como \"16/9\" para pantalla panorámica o \"1/1\" para cuadrada. Déjelo en blanco para las dimensiones naturales de la imagen.", + "placement": "Colocación de imágenes", + "placementTip": "Determina dónde y cómo se muestra la imagen dentro del diseño o contenedor. Las opciones incluyen una lógica específica de alineación o colocación.", + }, + "progress": { + ...en.progress, + + "value": "Valor", + "valueTooltip": "El Porcentaje Completo como valor entre 0 y 100", + "showInfo": "Mostrar valor", + "valueDesc": "Valor de progreso actual, de 0 a 100", + "showInfoDesc": "Mostrar o no el valor de progreso actual", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Introduzca una URL válida o una cadena Base64", + "src": "Archivos URI", + "srcTooltip": "Vista previa del contenido del enlace proporcionado mediante la incrustación de HTML, también se pueden admitir datos codificados en Base64, por ejemplo: data:application/pdf; base64,AAA... CCC", + "srcDesc": "URI del archivo", + }, + "divider": { + ...en.divider, + + "title": "Título", + "align": "Alineación", + "dashed": "Dashed", + "type": "Tipo vertical", + "dashedDesc": "Utilizar o no línea discontinua", + "titleDesc": "Título del divisor", + "alignDesc": "Alineación del título del divisor", + }, + "QRCode": { + ...en.QRCode, + + "value": "Valor del contenido del código QR", + "valueTooltip": "El valor contiene un máximo de 2953 caracteres. El valor del código QR puede codificar varios tipos de datos, incluidos mensajes de texto, URL, detalles de contacto (VCard/meCard), credenciales de inicio de sesión Wi-Fi, direcciones de correo electrónico, números de teléfono, mensajes SMS, coordenadas de geolocalización, detalles de eventos de calendario, información de pago, direcciones de criptomonedas y enlaces de descarga de aplicaciones.", + "valueDesc": "El valor del contenido del código QR", + "level": "Nivel de tolerancia a fallos", + "levelTooltip": "Se refiere a la capacidad del código QR para ser escaneado incluso si una parte del mismo está bloqueada. Cuanto más alto es el nivel, más complejo es el código.", + "includeMargin": "Mostrar margen", + "image": "Mostrar imagen en el centro", + "L": "L (Bajo)", + "M": "M (Medio)", + "Q": "Q (Cuartil)", + "H": "H (Alto)", + "maxLength": "El contenido es demasiado largo. Ajuste la longitud a menos de 2953 caracteres", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Sangría de cada nivel", + "expandToggle": "Expandir árbol JSON", + "theme": "Tema de color", + "valueDesc": "Datos JSON actuales", + "default": "Por defecto", + "defaultDark": "Por defecto Oscuro", + "neutralLight": "Luz neutra", + "neutralDark": "Neutro Oscuro", + "azure": "Azure", + "darkBlue": "Azul oscuro", + }, + "audio": { + ...en.audio, + + "src": "URI de la fuente de audio o cadena Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Reproducción automática", + "loop": "Bucle", + "srcDesc": "URI de audio actual o cadena Base64 como data:audio/mpeg;base64,AAA... CCC", + "play": "Jugar", + "playDesc": "Se activa cuando se reproduce audio", + "pause": "Pausa", + "pauseDesc": "Se activa cuando se pausa el audio", + "ended": "Finalizado", + "endedDesc": "Se activa cuando el audio termina de reproducirse", + }, + "video": { + ...en.video, + + "src": "URI de la fuente de vídeo o cadena Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL del póster", + "defaultPosterUrl": "", + "autoPlay": "Reproducción automática", + "loop": "Bucle", + "controls": "Ocultar controles", + "volume": "Volumen", + "playbackRate": "Velocidad de reproducción", + "posterTooltip": "El valor por defecto es el primer fotograma del vídeo", + "autoPlayTooltip": "Después de cargar el vídeo, se reproducirá automáticamente. Si cambia este valor de True a False, el vídeo se pausará. (Si se configura un póster, se reproducirá con el botón de póster).", + "controlsTooltip": "Ocultar controles de reproducción de vídeo. Puede no ser totalmente compatible con todas las fuentes de vídeo.", + "volumeTooltip": "Ajustar el volumen del reproductor, entre 0 y 1", + "playbackRateTooltip": "Ajustar la velocidad del reproductor, entre 1 y 2", + "srcDesc": "URI de audio actual o cadena Base64 como data:video/mp4;base64, AAA... CCC", + "play": "Jugar", + "playDesc": "Se activa cuando se reproduce el vídeo", + "pause": "Pausa", + "pauseDesc": "Se activa al pausar el vídeo", + "load": "Carga", + "loadDesc": "Se activa cuando el recurso de vídeo ha terminado de cargarse", + "ended": "Finalizado", + "endedDesc": "Se activa cuando el vídeo termina de reproducirse", + "currentTimeStamp": "Posición actual de reproducción del vídeo en segundos", + "duration": "La duración total del vídeo en segundos", + }, + "media": { + ...en.media, + + "playDesc": "Inicia la reproducción del medio.", + "pauseDesc": "Pone en pausa la reproducción multimedia.", + "loadDesc": "Restablece el medio al principio y reinicia Seleccionando el recurso multimedia.", + "seekTo": "Buscar hasta el número de segundos dado, o fracción si la cantidad está entre 0 y 1", + "seekToAmount": "Número de segundos, o fracción si está entre 0 y 1", + "showPreview": "Avance del espectáculo", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Valor inicial", + "end": "Valor final", + "step": "Tamaño del escalón", + "stepTooltip": "Granularidad del control deslizante, el valor debe ser mayor que 0 y divisible por (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Seleccione un icono", + "searchIcon": "Buscar un icono", + "searchAnimation": "Buscar una animación", + "searchIllustration": "Buscar una ilustración", + "insertIcon": "Insertar un icono", + "insertImage": "Insertar una imagen o", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Seleccione una forma", + "insertShape": "Insertar una forma", + "insertImage": "Insertar una imagen o", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Por favor, introduzca el período de tiempo de espera correcto en ms, la entrada actual es: ___MARCADOR0___", + "timeoutLessThanMinError": "La entrada debe ser mayor que {left}, la entrada actual es: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Único", + "multiple": "Múltiples", + "close": "Cerrar", + "mode": "Modo de selección de filas", + }, + "container": { + ...en.container, + + "title": "Título del contenedor mostrado", + "titleTooltip": "Título del contenedor", + "flowWidth": "Anchura del contenido", + "floatType": "Texto Tipo flotante", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Colocación del botón Cerrar", + "placement": "Colocación de cajones", + "size": "Talla", + "top": "Top", + "right": "Derecha", + "center": "Centro", + "bottom": "Fondo", + "left": "Izquierda", + "title": "Título del cajón", + "titleAlign": "Alineación de títulos", + "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", + "heightTooltip": "Píxel, por ejemplo 378", + "openDrawerDesc": "Cajón abierto", + "closeDrawerDesc": "Cerrar cajón", + "width": "Ancho del cajón", + "height": "Altura del cajón", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Nivel de registro de Agora SDK", + "placement": "Colocación de cajones para reuniones", + "meeting": "Configuración de la reunión", + "cameraView": "Ver habitación", + "cameraViewDesc": "Vista de cámara del usuario local (host)", + "screenShared": "Pantalla compartida", + "screenSharedDesc": "Pantalla compartida por el usuario local (host)", + "audioUnmuted": "Audio sin silenciar", + "audioMuted": "Audio silenciado", + "videoClicked": "Vídeo pulsado", + "videoOff": "Video Off", + "videoOn": "Vídeo", + "size": "Talla", + "top": "Top", + "host": "Anfitrión de la sala de reuniones. Deberá gestionar el anfitrión como una aplicación lógica propia.", + "participants": "Participantes en la sala de reuniones", + "shareScreen": "Pantalla compartida por el usuario local", + "appid": "ID de la aplicación Agora", + "meetingName": "Nombre de la reunión", + "localUserID": "ID de usuario de host", + "userName": "Nombre de usuario del host", + "rtmToken": "Ficha Agora RTM", + "rtcToken": "Ficha Agora RTC", + "noVideo": "Sin vídeo", + "profileImageUrl": "URL de la imagen del perfil", + "right": "Derecha", + "bottom": "Fondo", + "videoId": "ID de secuencia de vídeo", + "audioStatus": "Estado de audio", + "left": "Izquierda", + "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", + "heightTooltip": "Píxel, por ejemplo 378", + "openDrawerDesc": "Cajón abierto", + "closeDrawerDesc": "Cerrar cajón", + "width": "Ancho del cajón", + "height": "Altura del cajón", + "actionBtnDesc": "Botón de acción", + "broadCast": "Difusión de mensajes", + "title": "Título de la reunión", + "meetingCompName": "Controlador de reuniones Agora", + "sharingCompName": "Compartir pantalla Stream", + "videoCompName": "Flujo de cámara", + "videoSharingCompName": "Compartir pantalla Stream", + "meetingControlCompName": "Botón Icono", + "meetingCompDesc": "Componente de reunión", + "meetingCompControls": "Control de reuniones", + "meetingCompKeywords": "Agora Meeting, Web Meeting, Colaboración", + "iconSize": "Tamaño del icono", + "userId": "ID de usuario de host", + "roomId": "ID de habitación", + "meetingActive": "Reunión en curso", + "messages": "Mensajes difundidos", + }, + "settings": { + ...en.settings, + + "title": "Ajustes", + "userGroups": "Grupos de usuarios", + "organization": "Espacios de trabajo", + "subscription": "Suscripciones", + "audit": "Registros de auditoría", + "theme": "Temas", + "plugin": "Plugins", + "advanced": "Avanzado", + "apiDocs": "Documentos API", + "lab": "Laboratorio", + "branding": "Marca", + "oauthProviders": "Autenticación de usuarios", + "appUsage": "Registros de uso de aplicaciones", + "environments": "Entornos", + "premium": "Premium", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "Registro de auditoría Dasboard", + "AuditLogOverview": "Filtro de registro", + "USER_LOGIN": "Inicio de sesión de usuario", + "USER_LOGOUT": "Cierre de sesión de usuario", + "APPLICATION_VIEW": "Ver solicitud", + "APPLICATION_CREATE": "Crear aplicación", + "APPLICATION_DELETE": "Eliminar aplicación", + "APPLICATION_UPDATE": "Actualizar solicitud", + "APPLICATION_MOVE": "Solicitud de traslado", + "APPLICATION_RECYCLED": "Aplicación de reciclaje", + "APPLICATION_RESTORE": "Restaurar aplicación", + "APPLICATION_PUBLISH": "Publicación de aplicaciones", + "APPLICATION_VERSION_CHANGE": "Actualización de la versión de la aplicación", + "APPLICATION_SHARING_CHANGE": "Cambio en el uso compartido de aplicaciones", + "APPLICATION_PERMISSION_CHANGE": "Solicitud Permiso Cambio", + "FOLDER_CREATE": "Crear carpeta", + "FOLDER_DELETE": "Eliminar carpeta", + "FOLDER_UPDATE": "Carpeta de actualización", + "QUERY_EXECUTION": "Ejecutar consulta", + "GROUP_CREATE": "Crear grupo", + "GROUP_UPDATE": "Grupo de actualización", + "GROUP_DELETE": "Borrar grupo", + "GROUP_MEMBER_ADD": "Añadir miembro del grupo", + "GROUP_MEMBER_ROLE_UPDATE": "Actualizar la función de los miembros del grupo", + "GROUP_MEMBER_LEAVE": "Dejar Grupo", + "GROUP_MEMBER_REMOVE": "Eliminar miembro del grupo", + "SERVER_START_UP": "Inicio del servidor", + "SERVER_INFO": "Ver información del servidor", + "DATA_SOURCE_CREATE": "Crear fuente de datos", + "DATA_SOURCE_UPDATE": "Actualizar fuente de datos", + "DATA_SOURCE_DELETE": "Borrar fuente de datos", + "DATA_SOURCE_PERMISSION_GRANT": "Conceder permiso de fuente de datos", + "DATA_SOURCE_PERMISSION_UPDATE": "Actualizar permiso de fuente de datos", + "DATA_SOURCE_PERMISSION_DELETE": "Borrar fuente de datos Permiso", + "LIBRARY_QUERY_CREATE": "Crear consulta de biblioteca", + "LIBRARY_QUERY_UPDATE": "Actualizar consulta de biblioteca", + "LIBRARY_QUERY_DELETE": "Borrar consulta de biblioteca", + "LIBRARY_QUERY_PUBLISH": "Publicar consulta de biblioteca", + "API_CALL_EVENT": "Evento de llamada a la API", + "logFilter": "Filtro de registro", + "noLogsFound": "No se han encontrado registros. Ajusta los filtros e inténtalo de nuevo.", + "usageLogUserEngagement": "Participación de los usuarios por región", + "usageLogAppViews": "Uso de la aplicación a lo largo del tiempo", + "usageLogTopTen": "Las 10 mejores aplicaciones", + "usageLogAnonymousKNown": "Usuarios anónimos/conocidos", + "usageLogDevices": "Desglose de dispositivos/OS", + "usageLogBrowsers": "Desglose del navegador/motor de diseño", + "premiumFeaturesNotice": "Todas las características Premium están disponibles en la Edición Enterprise de Lowcoder.", + "requestLicense": "Solicitar licencias de Enterprise Edition", + "requestLicensesBtton": "Solicitar acceso para empresas", + "AuditLogsTitle": "Registros de auditoría", + "AuditLogsIntroTitle": "Potente visibilidad de la actividad de su espacio de trabajo", + "AuditLogsIntro1": "Los registros de auditoría permiten a los administradores hacer un seguimiento exacto de lo que ocurre en toda la plataforma Lowcoder. Desde los inicios de sesión de los usuarios hasta las modificaciones de las aplicaciones, todas las acciones relevantes se capturan y almacenan.", + "AuditLogsIntro2": "Incluimos metadatos detallados como geolocalización, tipo de dispositivo, navegador y sistema operativo para cada evento.", + "AuditLogsIntro3": "Esta transparencia le permite supervisar la actividad en todos los entornos conectados, proporcionando una sólida pista de auditoría para apoyar el cumplimiento, la seguridad y la visión operativa.", + "AuditLogsEventsTitle": "¿Qué eventos se rastrean?", + "AuditLogsEventsIntro": "Las siguientes acciones del usuario se registran en tiempo real:", + "SignIn": "Iniciar sesión", + "Logout": "Cierre de sesión", + "ViewApp": "Ver aplicación", + "CreateApp": "Crear una nueva aplicación", + "DeleteApp": "Eliminar aplicación", + "UpdateApp": "Actualizar la aplicación", + "MoveToFolder": "Mover a carpeta", + "MoveToTrash": "Mover a la papelera", + "RestoreApp": "Restaurar aplicación", + "CreateFolder": "Crear nueva carpeta", + "DeleteFolder": "Eliminar carpeta", + "UpdateFolder": "Actualizar carpeta", + "ExecuteDataQuery": "Ejecutar la consulta de datos", + "CreateUserGroup": "Crear un nuevo grupo de usuarios", + "UpdateUserGroup": "Actualizar grupo de usuarios", + "DeleteUserGroup": "Eliminar grupo de usuarios", + "AddGroupMember": "Añadir un miembro al grupo de usuarios", + "UpdateGroupMemberRole": "Actualizar el rol de un miembro del grupo de usuarios", + "LeaveUserGroup": "Dejar grupo de usuarios", + "RemoveGroupMember": "Eliminar miembro del grupo de usuarios", + "ServerStartup": "Inicio del servidor", + "CreateDataSource": "Crear fuente de datos", + "UpdateDataSource": "Actualizar fuente de datos", + "DeleteDataSource": "Borrar fuente de datos", + "GrantUpdateDeletePermission": "Conceder o actualizar permisos", + "LibraryQueryActions": "Crear / Actualizar / Borrar consultas de biblioteca", + "PublishLibraryQuery": "Publicar consulta de biblioteca", + "AuditLogsPreviewTitle": "Vista previa del registro de auditoría en acción (haga clic para ampliar)", + "ScreenshotPlaceholder1": "[ Captura de pantalla 1 Marcador de posición ]", + "ScreenshotPlaceholder2": "[ Captura de pantalla 2 Marcador de posición ]", + "ScreenshotPlaceholder3": "[ Captura de pantalla 3 Marcador de posición ]", + "PricingTitle": "Precios de la edición Enterprise", + "PricingIntro": "Ofrecemos precios flexibles para organizaciones de cualquier tamaño, adaptados a su modelo de uso:", + "FlatRateTitle": "Opción 1: Tarifa plana por instancia - 169 $ / mes", + "FlatRateDesc": "Una instancia es un entorno Lowcoder completo (base de metadatos + tiempo de ejecución) que puede desplegarse de forma independiente. Esto incluye:", + "FlatRatePoint1": "Un almacén de metadatos MongoDB dedicado", + "FlatRatePoint2": "Uno o varios tiempos de ejecución de aplicaciones (contenedores \"Api-Service\" y/o \"Node-Service\")", + "UsagePricingTitle": "Opción 2: Precios basados en el uso - 0,001 $ por llamada API", + "UsagePricingDesc": "Alternativamente, cada instancia puede licenciarse en función del uso de la API. Ofrecemos paquetes de prepago:", + "API100k": "100.000 llamadas API - 100", + "API1M": "1.000.000 de llamadas API - 1.000 $.", + "API10M": "10.000.000 de llamadas API - 10.000 dólares", + "UsageOverrunDesc": "Cuando su paquete API se agote, le avisaremos. Una vez consumido el paquete, su instancia seguirá funcionando, pero lo hará a una velocidad reducida para evitar abusos y mantener la equidad.", + "UsageTopUpInfo": "Puede añadir paquetes adicionales en cualquier momento para garantizar un acceso rápido y continuo, sin interrupciones del servicio.", + "AppUsageTitle": "Registros de uso de aplicaciones", + "AppUsageIntroTitle": "Entender cómo se utilizan sus aplicaciones", + "AppUsageIntro1": "Los registros de uso de aplicaciones le ofrecen información detallada sobre cómo se consumen sus aplicaciones Lowcoder publicadas.", + "AppUsageIntro2": "Esta funcionalidad funciona como una versión integrada y simplificada de Google Analytics, pero totalmente privada y limitada a su instancia de Lowcoder.", + "AppUsageIntro3": "Los administradores pueden analizar cómo se accede a las aplicaciones a lo largo del tiempo, cuáles son las más utilizadas y desde dónde se conectan los usuarios.", + "AppUsageMetricsTitle": "Métricas de las que puede hacer un seguimiento...", + "AppUsageMetricsIntro": "Estos análisis le ayudan a tomar decisiones informadas sobre la participación y el uso de la plataforma:", + "MetricActiveUsers": "Vistas de la aplicación por día / semana / mes (según el filtro de tiempo)", + "MetricViewsPerApp": "Las 10 mejores aplicaciones", + "MetricDevices": "Acceso por dispositivo (ordenador, tableta, móvil)", + "MetricBrowsers": "Acceso por navegador y sistema operativo", + "MetricCountries": "Origen geográfico de los usuarios", + "AppUsageScreenshotsTitle": "App Usage Analytics en acción (haga clic para ampliar)", + "AppUsageScreenshot1": "[ Captura de pantalla del panel de control de uso de aplicaciones ]", + "AppUsageScreenshot2": "[Gráfico de visitas por aplicación]", + "AppUsageScreenshot3": "[Mapa de distribución geográfica]", + "BrandingIntroTitle": "Marca personalizada y marca blanca", + "BrandingIntro1": "Con la configuración de Lowcoders Branding, puede elevar la experiencia del producto para sus usuarios ofreciendo una marca totalmente personalizable.", + "BrandingIntro2": "Permita que sus clientes o equipos internos utilicen la plataforma como si fuera suya: logotipo, colores, fuentes y páginas personalizadas incluidos.", + "BrandingIntro3": "O necesita una solución totalmente de marca blanca y reforzar su identidad de marca en cada punto de contacto.", + "BrandingColorsIntro1": "Puede establecer su propio esquema de colores para que coincida con su identidad corporativa, incluidos los elementos primarios de la interfaz de usuario y las barras de navegación.", + "BrandingColorsIntro2": "Personalice los destacados de la barra lateral, las secciones de cabecera e incluso el contraste del texto para mejorar la experiencia del usuario y la accesibilidad.", + "BrandingFontsIntro": "Selecciona una de las fuentes de Google para que tu aplicación sea realmente tuya, tanto en estilo como en legibilidad.", + "BrandingLogosIntro": "Naturalmente, también puedes subir tus propios logotipos -rectangulares y cuadrados- para que aparezcan en cabeceras, cuadros de mando y pantallas de inicio de sesión. Mantén la coherencia de tu marca en todos los dispositivos y pantallas.", + "BrandingPagesIntro1": "Añada texto y elementos visuales personalizados a sus páginas de error, flujos de registro y mensajes de cierre de sesión.", + "BrandingPagesIntro2": "Estos puntos de contacto ayudan a ofrecer una experiencia de marca completa incluso en situaciones inesperadas o transiciones de cuentas.", + "BrandingMetaIntro": "Defina metadatos estándar como el título y la descripción de la página para mejorar su presencia SEO y el mensaje de la marca.", + "BrandingHelpLinksIntro": "Añada enlaces a documentación contextual directamente dentro de la aplicación, proporcionando ayuda en tiempo real a sus usuarios.", + "BrandingWhatsNewIntro": "Active la sección \"Novedades\" para destacar las actualizaciones y los anuncios de productos de forma visible y con su marca.", + "EnvironmentsIntroTitle": "Puesta en escena Lowcoder", + "EnvironmentsTitle": "Infraestructura multientorno", + "EnvironmentsIntro1": "Los entornos Lowcoder le permiten separar las fases de desarrollo, prueba y producción de forma limpia y segura.", + "EnvironmentsIntro2": "Los equipos empresariales se benefician de flujos de trabajo de publicación estructurados, procesos de aprobación y estabilidad de la versión en todas las fases.", + "EnvironmentsIntro3": "Con la función Entornos, los administradores pueden controlar qué se despliega, cuándo y dónde, todo desde una única interfaz.", + "EnvironmentsIntro4": "Lowcoder incluye múltiples tipos de objetos como espacios de trabajo, fuentes de datos, consultas de datos y aplicaciones. Dado que muchos de estos objetos están interconectados (por ejemplo, una fuente de datos puede compartirse a través de múltiples aplicaciones), una exportación basada puramente en Git no capturaría todas las dependencias de forma coherente. En su lugar, Lowcoder ofrece un mecanismo de despliegue selectivo e integrado directamente dentro de la interfaz de usuario. Las aplicaciones, las fuentes de datos y las consultas pueden gestionarse de forma selectiva y desplegarse en distintos entornos. Los objetos gestionados garantizan la seguridad y el control de las versiones de producción y puesta en escena.", + "yourDeploymentID": "Su ID de despliegue", + "EnvironmentsFeaturePreviewTitle": "Entornos y despliegue en acción (haga clic para ampliar)", + "EnvironmentsUseCasesTitle": "¿Por qué utilizar entornos? (Puesta en escena)", + "EnvironmentsUseCase1": "Evite cambios involuntarios en producción probando las aplicaciones en entornos dedicados de desarrollo o control de calidad.", + "EnvironmentsUseCase2": "Alinearse con la gobernanza corporativa de TI mediante la implementación de despliegues escalonados con seguimiento listo para auditoría.", + "EnvironmentsUseCase3": "Permita a los equipos construir con confianza con configuraciones, datos e integraciones específicas del entorno.", + "EnvironmentsFeaturesTitle": "Lo que obtiene", + "EnvironmentsFeature1": "Panel de control centralizado para ver y gestionar todos los entornos Lowcoder.", + "EnvironmentsFeature2": "Despliegue de aplicaciones, fuentes de datos y configuraciones entre entornos, directamente desde la interfaz de usuario sin necesidad de herramientas adicionales de CI/CD.", + "EnvironmentsFeature3": "Controles de acceso y reglas de visibilidad específicos del entorno.", + "EnvironmentsFeature5": "Separación clara de preocupaciones para las operaciones de puesta en escena, sandbox y producción.", + "apiUsage": "Llamadas a la API.", + "loadingApiUsage": "Cargando datos de uso de la API...", + }, + "environments": { + ...en.environments, + + "title": "Entornos", + "search": "Buscar en", + "refresh": "Actualizar", + "addEnvironment": "Añadir medio ambiente", + "errorLoadingEnvironments": "Error al cargar entornos", + "noEnvironmentsFoundMatching": "No se ha encontrado ningún entorno que coincida con \"{searchText}\"", + "noEnvironmentsFound": "No se ha encontrado ningún entorno. Crea tu primer entorno para empezar.", + "environmentsTypeLabel": "{type} Entornos", + "showingAllEnvironments": "Mostrando todos los entornos {count}.", + "unnamedEnvironment": "Entorno sin nombre", + "masterEnvironment": "Entorno maestro", + "viewAuditLogs": "Ver registros de auditoría", + "id": "ID", + "domain": "Dominio", + "master": "Maestro", + "license": "Licencia", + "apiCalls": "Llamadas a la API", + "yes": "Sí", + "no": "No", + "copyId": "Copiar ID", + "copied": "¡Copiado!", + "percentUsed": "{percent}% utilizado", + "licenseStatus_checking": "Comprobando...", + "licenseStatus_licensed": "Licencia", + "licenseStatus_unlicensed": "Licencia necesaria", + "licenseStatus_error": "Configuración necesaria", + "licenseStatus_unknown": "Desconocido", + "detail_environmentNotFound": "Entorno no encontrado", + "detail_returnToEnvironmentsList": "Volver a la lista de entornos", + "detail_environmentDetail": "Medio ambiente Detalle", + "detail_environmentOverview": "Medio ambiente", + "detail_noDomainSet": "Ningún dominio establecido", + "detail_environmentId": "Identificación del entorno", + "detail_licenseStatus": "Estado de la licencia", + "detail_licenseNeeded": "Licencia necesaria", + "detail_setupRequired": "Configuración necesaria", + "detail_created": "Creado", + "detail_unknown": "Desconocido", + "detail_licenseDetails": "Detalles de la licencia", + "detail_apiCallsRemaining": "Llamadas API restantes", + "detail_totalApiCallsLimit": "Límite total de llamadas API", + "detail_enterpriseEdition": "Edición para empresas", + "detail_active": "Activo", + "detail_inactive": "Inactivo", + "detail_licenseInformation": "Información sobre la licencia", + "detail_calls": "llama a", + "detail_licenses": "Licencias", + "detail_license": "Licencia", + "detail_workspaces": "Espacios de trabajo", + "detail_userGroups": "Grupos de usuarios", + "detail_type": "Tipo", + "detail_status": "Estado", + "detail_licensed": "Licencia", + "detail_unlicensed": "Sin licencia", + "detail_apiKey": "Clave API", + "detail_configured": "Configurado", + "detail_notSet": "No fijado", + "detail_masterEnv": "Master Env", + "unlicensed_unlicensedDescription": "Este entorno necesita una licencia válida para desbloquear todas sus capacidades y características. Asegúrese de que la URL del servicio API está correctamente configurada y de que el plugin está instalado.", + "unlicensed_errorDescription": "Hemos encontrado un problema al comprobar la licencia. Por favor, revise los ajustes de configuración.", + "unlicensed_defaultDescription": "Este entorno requiere la configuración de la licencia para proceder.", + "unlicensed_contactLowcoderTeam": "Contactar con el equipo de Lowcoder", + "unlicensed_editEnvironment": "Editar entorno", + "unlicensed_backToEnvironments": "Volver a Entornos", + "unlicensed_helpText": "¿Necesita ayuda? Póngase en contacto con nuestro equipo de asistencia sobre licencias o edite la configuración del entorno para resolver este problema.", + "unlicensed_type": "Tipo", + "unlicensed_status": "Estado", + "unlicensed_masterEnv": "Master Env", + "unlicensed_licenseIssue": "Problema de licencia", + "unlicensed_error": "Error", + "unlicensed_missing": "Falta", + "error_itemNotFound": "El artículo que buscas no existe o no tienes permiso para verlo.", + "modal_createNewEnvironment": "Crear nuevo entorno", + "modal_editEnvironment": "Editar entorno", + "modal_cancel": "Cancelar", + "modal_createEnvironment": "Crear un entorno", + "modal_saveChanges": "Guardar cambios", + "modal_environmentName": "Nombre del entorno", + "modal_pleaseEnterName": "Introduzca un nombre", + "modal_nameMinLength": "El nombre debe tener al menos 2 caracteres", + "modal_enterEnvironmentName": "Introduzca el nombre del entorno", + "modal_description": "Descripción", + "modal_enterDescription": "Introducir descripción", + "modal_stage": "Escenario", + "modal_pleaseSelectStage": "Seleccione una etapa", + "modal_selectStage": "Seleccionar etapa", + "modal_development": "Desarrollo (DEV)", + "modal_testing": "Pruebas (TEST)", + "modal_preProduction": "Preproducción (PREPROD)", + "modal_production": "Producción (PROD)", + "modal_frontendUrl": "URL del frontend", + "modal_pleaseEnterValidUrl": "Introduzca una URL válida", + "modal_apiServiceUrl": "URL del servicio API", + "modal_nodeServiceUrl": "Nodo URL de servicio", + "modal_apiKey": "Clave API", + "modal_enterApiKey": "Introduzca la clave API", + "modal_masterEnvironment": "Entorno maestro", + "modal_alreadyMasterEnvironment": "{name} ya es el entorno Maestro", + "modal_willBeMaster": "Será Maestro", + "modal_currentlyMaster": "Actualmente Maestro", + "modal_configurationRequirements": "Requisitos de configuración", + "modal_configurationRequirementsDesc": "Asegúrese de que la URL del servicio API está configurada y es correcta, la clave API es válida y, para la verificación de la licencia, asegúrese de que tanto la licencia como el plugin están correctamente instalados.", + "workspaces_title": "Espacios de trabajo", + "workspaces_subtitle": "Gestionar espacios de trabajo en este entorno", + "workspaces_refresh": "Actualizar", + "workspaces_errorLoadingWorkspaces": "Error al cargar los espacios de trabajo", + "workspaces_configurationIssue": "Problema de configuración", + "workspaces_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", + "workspaces_totalWorkspaces": "Total de espacios de trabajo", + "workspaces_managedWorkspaces": "Espacios de trabajo gestionados", + "workspaces_unmanagedWorkspaces": "Espacios de trabajo no gestionados", + "workspaces_workspace": "Espacio de trabajo", + "workspaces_role": "Papel", + "workspaces_status": "Estado", + "workspaces_managed": "Gestionado", + "workspaces_unmanaged": "Sin gestión", + "workspaces_actions": "Acciones", + "workspaces_viewAuditLogs": "Ver registros de auditoría", + "workspaces_audit": "Auditoría", + "workspaces_searchWorkspaces": "Buscar espacios de trabajo por nombre o ID", + "workspaces_showAll": "Mostrar todo", + "workspaces_managedOnly": "Sólo gestionado", + "workspaces_showingResults": "Mostrando {count} de {total} espacios de trabajo", + "workspaces_paginationTotal": "{start}-{end} de {total} espacios de trabajo", + "workspaces_noWorkspacesFound": "No se han encontrado espacios de trabajo en este entorno", + "userGroups_title": "Grupos de usuarios", + "userGroups_subtitle": "Gestionar grupos de usuarios en este entorno", + "userGroups_refresh": "Actualizar", + "userGroups_errorLoadingUserGroups": "Error al cargar grupos de usuarios", + "userGroups_configurationIssue": "Problema de configuración", + "userGroups_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", + "userGroups_totalGroups": "Total Grupos", + "userGroups_allUsersGroups": "Todos los grupos de usuarios", + "userGroups_developerGroups": "Grupos de desarrolladores", + "userGroups_customGroups": "Grupos personalizados", + "userGroups_userGroup": "Grupo de usuarios", + "userGroups_type": "Tipo", + "userGroups_allUsers": "Todos los usuarios", + "userGroups_developers": "Desarrolladores", + "userGroups_custom": "A medida", + "userGroups_members": "Miembros", + "userGroups_adminMembers": "Admin Miembros", + "userGroups_created": "Creado", + "userGroups_totalMembersTooltip": "Número total de miembros de este grupo", + "userGroups_adminMembersTooltip": "Número de usuarios administradores en este grupo", + "userGroups_searchUserGroups": "Buscar grupos de usuarios por nombre o ID", + "userGroups_showingResults": "Mostrando grupos de usuarios {count} de {total}.", + "userGroups_paginationTotal": "{start}-{end} de {total} grupos de usuarios", + "userGroups_noUserGroupsFound": "No se han encontrado grupos de usuarios en este entorno", + "apps_title": "Aplicaciones", + "apps_subtitle": "Gestionar las aplicaciones del espacio de trabajo", + "apps_refresh": "Actualizar", + "apps_errorLoadingApps": "Error al cargar aplicaciones", + "apps_configurationIssue": "Problema de configuración", + "apps_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", + "apps_totalApps": "Total de aplicaciones", + "apps_publishedApps": "Aplicaciones publicadas", + "apps_managedApps": "Aplicaciones gestionadas", + "apps_unmanagedApps": "Aplicaciones no gestionadas", + "apps_app": "Aplicación", + "apps_status": "Estado", + "apps_published": "Publicado en", + "apps_draft": "Borrador", + "apps_managed": "Gestionado", + "apps_unmanaged": "Sin gestión", + "apps_deploy": "Despliegue", + "apps_audit": "Auditoría", + "apps_appMustBeManagedToDeploy": "La aplicación debe gestionarse antes de implantarse", + "apps_deployThisApp": "Despliegue esta aplicación en otro entorno", + "apps_viewAuditLogs": "Ver registros de auditoría", + "apps_searchApps": "Buscar aplicaciones por nombre o ID", + "apps_showAll": "Mostrar todo", + "apps_managedOnly": "Sólo gestionado", + "apps_showingResults": "Mostrando aplicaciones {count} de {total}.", + "apps_paginationTotal": "{start}-{end} de {total} aplicaciones", + "apps_noAppsFound": "No se han encontrado aplicaciones en este espacio de trabajo", + "apps_appRecycled": "Esta aplicación se ha movido a la papelera de reciclaje", + "apps_managedSuccess": "{name} está ahora Gestionado", + "apps_unmanagedSuccess": "{name} ahora no está gestionado", + "apps_managedError": "Error al cambiar el estado de gestión de {name}.", + "dataSources_title": "Fuentes de datos", + "dataSources_subtitle": "Gestionar las conexiones de datos del espacio de trabajo", + "dataSources_refresh": "Actualizar", + "dataSources_errorLoadingDataSources": "Error al cargar fuentes de datos", + "dataSources_configurationIssue": "Problema de configuración", + "dataSources_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", + "dataSources_totalDataSources": "Total de fuentes de datos", + "dataSources_availableTypes": "Tipos disponibles", + "dataSources_managed": "Gestionado", + "dataSources_unmanaged": "Sin gestión", + "dataSources_dataSource": "Fuente de datos", + "dataSources_type": "Tipo", + "dataSources_status": "Estado", + "dataSources_deploy": "Despliegue", + "dataSources_audit": "Auditoría", + "dataSources_dataSourceMustBeManagedToDeploy": "La fuente de datos debe gestionarse antes de su despliegue", + "dataSources_deployThisDataSource": "Despliegue esta fuente de datos en otro entorno", + "dataSources_viewAuditLogs": "Ver registros de auditoría", + "dataSources_searchDataSources": "Buscar fuentes de datos por nombre o ID", + "dataSources_showAll": "Mostrar todo", + "dataSources_managedOnly": "Sólo gestionado", + "dataSources_showingResults": "Mostrando {count} de {total} fuentes de datos", + "dataSources_paginationTotal": "{start}-{end} de {total} fuentes de datos", + "dataSources_noDataSourcesFound": "No se han encontrado fuentes de datos en este espacio de trabajo", + "dataSources_managedSuccess": "{name} está ahora Gestionado", + "dataSources_unmanagedSuccess": "{name} ahora no está gestionado", + "dataSources_managedError": "Error al cambiar el estado de gestión de {name}.", + "queries_title": "Consultas", + "queries_subtitle": "Gestionar las consultas a la API del espacio de trabajo", + "queries_refresh": "Actualizar", + "queries_errorLoadingQueries": "Error al cargar consultas", + "queries_configurationIssue": "Problema de configuración", + "queries_missingConfiguration": "Falta la configuración requerida: Clave API o URL de servicio API", + "queries_totalQueries": "Total Queries", + "queries_managed": "Gestionado", + "queries_unmanaged": "Sin gestión", + "queries_query": "Consulta", + "queries_creator": "Creador", + "queries_status": "Estado", + "queries_deploy": "Despliegue", + "queries_audit": "Auditoría", + "queries_queryMustBeManagedToDeploy": "La consulta debe gestionarse antes de poder desplegarse", + "queries_deployThisQuery": "Despliegue esta consulta en otro entorno", + "queries_viewAuditLogs": "Ver registros de auditoría", + "queries_searchQueries": "Consultas de búsqueda por nombre o ID", + "queries_showAll": "Mostrar todo", + "queries_managedOnly": "Sólo gestionado", + "queries_showingResults": "Mostrando consultas {count} de {total}.", + "queries_paginationTotal": "{start}-{end} de {total} consultas", + "queries_noQueriesFound": "No se han encontrado consultas en este espacio de trabajo", + "queries_managedSuccess": "{name} está ahora Gestionado", + "queries_unmanagedSuccess": "{name} ahora no está gestionado", + "queries_managedError": "Error al cambiar el estado de gestión de {name}.", + "deployModal_deployTitle": "Despliega {singularLabel}: {name}", + "deployModal_loadingEnvironments": "Cargando entornos...", + "deployModal_sourceEnvironment": "Fuente Medio ambiente", + "deployModal_targetEnvironment": "Entorno objetivo", + "deployModal_selectTargetEnvironment": "Seleccione el entorno de destino", + "deployModal_selectTargetEnvironmentValidation": "Seleccione un entorno de destino", + "deployModal_confirmed": "Confirmado", + "deployModal_cancel": "Cancelar", + "deployModal_deploy": "Despliegue", + "deployModal_targetEnvironmentNotFound": "Entorno de destino no encontrado", + "deployModal_confirmCredentialOverwrite": "Por favor, confirme la sobreescritura de credenciales antes de desplegar", + "deployModal_deploySuccess": "Desplegado con éxito {name} en el entorno de destino", + "deployModal_deployFailed": "Error al desplegar {singularLabel}.", + "deployModal_selectFieldValidation": "Por favor, seleccione {label}.", + "deployModal_selectFieldPlaceholder": "Seleccione {label}.", + "deployModal_inputFieldValidation": "Por favor, introduzca {label}.", + "deployModal_inputFieldPlaceholder": "Introduzca {label}.", + "contactLowcoder_title": "Contactar con el equipo de Lowcoder", + "contactLowcoder_environmentLabel": "Medio ambiente:", + "contactLowcoder_environmentIdLabel": "ID de entorno:", + "contactLowcoder_deploymentIdLabel": "ID de despliegue:", + "contactLowcoder_loading": "Cargando...", + "contactLowcoder_notAvailable": "No disponible", + "contactLowcoder_unnamedEnvironment": "Entorno sin nombre", + "contactLowcoder_fetchingDeploymentInfo": "Obtención de información de despliegue...", + "contactLowcoder_unableToLoadContactForm": "No se puede cargar el formulario de contacto", + "contactLowcoder_apiConfigurationError": "URL del servicio API de entorno o clave API no configurada", + "contactLowcoder_failedToFetchDeploymentId": "Error al recuperar el ID de despliegue", + "contactLowcoder_ensureProperConfiguration": "Asegúrese de que el entorno está correctamente configurado para ponerse en contacto con el servicio de asistencia.", + "credentialConfirmations_firstConfirmation_title": "Aviso de sobrescritura de credenciales", + "credentialConfirmations_firstConfirmation_message": "Esta acción sobrescribirá las credenciales existentes en el entorno de destino.", + "credentialConfirmations_firstConfirmation_description": "Se trata de una operación grave que puede afectar a otras aplicaciones y usuarios.", + "credentialConfirmations_firstConfirmation_question": "¿Estás seguro de que quieres continuar?", + "credentialConfirmations_firstConfirmation_continueButton": "Continúe en", + "credentialConfirmations_firstConfirmation_cancelButton": "Cancelar", + "credentialConfirmations_secondConfirmation_title": "Confirmación final requerida", + "credentialConfirmations_secondConfirmation_message": "Advertencia final: Sobrescritura de credenciales", + "credentialConfirmations_secondConfirmation_description": "Está a punto de sobrescribir credenciales en el entorno de destino. Esta acción no se puede deshacer y puede romper las integraciones existentes.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Por favor, confirme una vez más.", + "credentialConfirmations_secondConfirmation_finalQuestion": "¿Estás completamente seguro de que quieres sobrescribir las credenciales?", + "credentialConfirmations_secondConfirmation_confirmButton": "Sí, sobrescribir credenciales", + "credentialConfirmations_secondConfirmation_cancelButton": "Cancelar", + "config_singularLabels_app": "Aplicación", + "config_singularLabels_dataSource": "Fuente de datos", + "config_singularLabels_query": "Consulta", + "config_singularLabels_workspace": "Espacio de trabajo", + "config_fields_updateDependenciesIfNeeded": "Actualice las dependencias si es necesario", + "config_fields_publishOnTarget": "Publicar en el blanco", + "config_fields_publicToAll": "Público A Todos", + "config_fields_publicToMarketplace": "Del público al mercado", + "config_fields_overwriteCredentials": "Sobrescribir credenciales", + "services_environments_missingEnvironmentId": "Falta el ID de entorno", + "services_environments_failedToUpdateEnvironment": "Error al actualizar el entorno", + "services_environments_environmentCreatedSuccessfully": "Entorno creado con éxito", + "services_environments_failedToCreateEnvironment": "Error al crear el entorno", + "services_environments_failedToFetchEnvironments": "Error en la búsqueda de entornos", + "services_environments_failedToFetchEnvironment": "Fallo al recuperar el entorno", + "services_environments_environmentIdRequired": "Se requiere ID de entorno", + "services_environments_apiKeyRequiredForWorkspaces": "La clave API es necesaria para recuperar los espacios de trabajo", + "services_environments_apiServiceUrlRequiredForWorkspaces": "La URL del servicio API es necesaria para recuperar los espacios de trabajo", + "services_environments_failedToFetchWorkspaces": "Error al recuperar espacios de trabajo", + "services_environments_apiKeyRequiredForUserGroups": "La clave API es necesaria para obtener los grupos de usuarios", + "services_environments_apiServiceUrlRequiredForUserGroups": "La URL del servicio API es necesaria para obtener los grupos de usuarios", + "services_environments_failedToFetchUserGroups": "Error al recuperar grupos de usuarios", + "services_environments_workspaceIdRequired": "Se requiere ID de espacio de trabajo", + "services_environments_apiKeyRequiredForApps": "La clave API es necesaria para obtener aplicaciones", + "services_environments_apiServiceUrlRequiredForApps": "La URL del servicio API es necesaria para obtener aplicaciones", + "services_environments_failedToFetchWorkspaceApps": "Fallo al recuperar aplicaciones del espacio de trabajo", + "services_environments_apiKeyRequiredForDataSources": "La clave API es necesaria para obtener fuentes de datos", + "services_environments_apiServiceUrlRequiredForDataSources": "La URL del servicio API es necesaria para obtener fuentes de datos", + "services_environments_failedToFetchWorkspaceDataSources": "Fallo al recuperar las fuentes de datos del área de trabajo", + "services_environments_apiKeyRequiredForQueries": "La clave API es necesaria para realizar consultas", + "services_environments_apiServiceUrlRequiredForQueries": "La URL del servicio API es necesaria para obtener consultas", + "services_environments_failedToFetchWorkspaceQueries": "Fallo al recuperar consultas del área de trabajo", + "services_environments_apiServiceUrlNotConfigured": "URL de servicio API no configurada", + "services_environments_licenseCheckFailed": "Comprobación de licencia fallida", + "services_environments_apiKeyRequiredForDeploymentId": "La clave API es necesaria para obtener el ID de despliegue", + "services_environments_failedToFetchDeploymentId": "Error al recuperar el ID de despliegue", + "services_enterprise_missingEnvironmentId": "Falta el ID de entorno", + "services_enterprise_failedToFetchManagedWorkspaces": "Error al recuperar espacios de trabajo gestionados", + "services_enterprise_missingRequiredParamsToConnectOrg": "Faltan parámetros necesarios para conectar el espacio de trabajo", + "services_enterprise_failedToConnectOrg": "Error al conectar el espacio de trabajo", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "Falta el GID del espacio de trabajo para desconectar el espacio de trabajo", + "services_enterprise_failedToUnconnectOrg": "Error al desconectar el espacio de trabajo", + "services_enterprise_failedToConnectApp": "Error al conectar la aplicación", + "services_enterprise_failedToUnconnectApp": "Error al desconectar la aplicación", + "services_enterprise_failedToFetchDataSources": "Fallo al recuperar fuentes de datos", + "services_enterprise_failedToDeployDataSource": "Error al desplegar la fuente de datos", + "services_enterprise_failedToDisconnectManagedDataSource": "Error al desconectar la fuente de datos gestionada", + "services_enterprise_environmentIdRequired": "Se requiere ID de entorno", + "services_enterprise_failedToFetchQueries": "Fallo en la obtención de consultas", + "services_enterprise_environmentIdAndQueryGidRequired": "El ID de entorno y el GID de consulta son obligatorios", + "services_enterprise_failedToDeployQuery": "Error al desplegar la consulta", + "services_enterprise_queryGidRequired": "Se requiere GID de consulta", + "services_enterprise_failedToDisconnectQuery": "Error al desconectar la consulta", + "services_apps_failedToFetchApps": "Fallo al buscar aplicaciones", + "services_apps_failedToDeployApp": "Error al desplegar la aplicación", + "services_datasources_workspaceIdRequired": "Se requiere ID de espacio de trabajo", + "services_datasources_apiKeyRequiredToFetchDataSources": "La clave API es necesaria para obtener fuentes de datos", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "La URL del servicio API es necesaria para obtener fuentes de datos", + "services_datasources_failedToFetchDataSources": "Fallo al recuperar fuentes de datos", + "services_datasources_failedToDeployDataSource": "Error al desplegar la fuente de datos", + "services_workspace_failedToFetchWorkspaces": "Error al recuperar espacios de trabajo", + "services_workspace_failedToDeployWorkspace": "Error al desplegar el espacio de trabajo", + "services_managedObjects_missingRequiredParameters": "Faltan parámetros obligatorios", + "services_managedObjects_failedToCheckManagedStatus": "No se ha podido comprobar el estado de la gestión", + "services_managedObjects_failedToSetAsManaged": "Error al establecer {{objType}} como administrado", + "services_managedObjects_failedToRemoveFromManaged": "No se ha podido eliminar {{objType}} de la gestión", + "services_managedObjects_missingEnvironmentId": "Falta el ID de entorno", + "services_managedObjects_failedToFetchManagedObjects": "Error al recuperar objetos gestionados", + "services_managedObjects_failedToFetchManagedObject": "Error al recuperar el objeto gestionado", + "services_managedObjects_managedObjectNotFound": "Objeto gestionado no encontrado para objGid: {{objGid}}", + "services_license_apiServiceUrlRequired": "Se requiere la URL del servicio API", + "services_license_licenseInformationUnavailable": "Información de licencia no disponible", + "services_license_licenseCheckTookTooLong": "La comprobación de la licencia tardó demasiado", + "services_license_licenseServiceNotAvailable": "Servicio de licencias no disponible", + "services_license_authenticationRequired": "Autenticación necesaria - compruebe la clave API", + "services_license_licenseServiceTemporarilyUnavailable": "Servicio de licencias temporalmente no disponible", + "services_license_remainingAPICalls": "{{remaining}} restante ({{used}}/{{total}} utilizado, {{percentage}}%)", + }, + "subscription": { + ...en.subscription, + + "details": "Detalles de la suscripción", + "productDetails": "Detalles del producto", + "productName": "Nombre del producto", + "productDescription": "Descripción del producto", + "productPrice": "Precio del producto", + "subscriptionDetails": "Detalles de la suscripción", + "status": "Estado", + "startDate": "Fecha de inicio", + "currentPeriodEnd": "Fin del período actual", + "customerId": "Identificación del cliente", + "subscriptionItems": "Artículos de suscripción", + "itemId": "Número de artículo", + "plan": "Plan", + "quantity": "Cantidad", + "product": "Producto", + "invoices": "Facturas", + "invoiceNumber": "Número de factura", + "date": "Fecha", + "amount": "Importe", + "link": "Enlace", + "viewInvoice": "Ver factura", + "downloadPDF": "Descargar PDF", + "billingReason": "Motivo de facturación", + "subscriptionCycle": "Suscripción mensual", + "customer": "Cliente", + "links": "Enlaces", + "paid": "Pagado", + "unpaid": "Sin pagar", + "noInvoices": "No hay facturas disponibles", + "costVolumeDevelopment": "Evolución de costes y volúmenes", + "noUsageRecords": "No se dispone de registros de uso", + "itemDescription": "Descripción del artículo", + "periodStart": "Inicio del período", + "periodEnd": "Fin de periodo", + "billingReason.subscription_cycle": "Ciclo de suscripción", + "billingReason.subscription_create": "Creación de suscripciones", + "billingReason.manual": "Facturación manual", + "billingReason.upcoming": "Próxima facturación", + "billingReason.subscription_threshold": "Umbral de suscripción", + "billingReason.subscription_update": "Actualización de la suscripción", + "backToSubscriptions": "Volver a Suscripciones", + "manageSubscription": "Gestione sus suscripciones", + "subscriptionHelp": "Ayuda para la suscripción", + "subscriptionHelpDescription": "Si tiene alguna duda, póngase en contacto con nosotros. Estaremos encantados de ayudarle. service@lowcoder.cloud", + "success": "Éxito de pagos y suscripciones", + "successTitle": "¡Gracias por unirte a la familia Lowcoder!", + "successThankYou": "Estamos encantados de tenerte a bordo. Tu confianza en Lowcoder lo es todo para nosotros y nos comprometemos a ofrecerte una experiencia excepcional desde el primer día.\n\nEn Lowcoder, no eres sólo un cliente, sino que formas parte de una comunidad que impulsa la innovación y el crecimiento. Nuestra misión es ayudarte a alcanzar tus objetivos con facilidad, ya sea resolviendo retos rápidamente, creando soluciones innovadoras o estando ahí siempre que necesites ayuda.\n\nEsto es lo que le espera:\n\n- Asistencia de primera: Nuestro equipo está preparado para ayudarle en cada paso.\n- Innovación continua: Siempre estamos mejorando para ofrecerle las mejores herramientas y funciones.\n- Una asociación para el éxito: Su éxito es nuestra prioridad.\n\nGracias por inspirarnos para superar los límites y buscar la excelencia cada día. Estamos impacientes por ver lo que construiremos juntos.\n\nBienvenido a bordo. Hagamos que ocurran cosas extraordinarias.", + "successLowcoderTeam": "El equipo de Lowcoder", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "Error al obtener los detalles del producto.", + "fetchSubscriptionDetails": "Error al obtener los detalles de la suscripción.", + "fetchInvoices": "Error al recuperar facturas.", + }, + "auditLog": { + ...en.auditLog, + + "title": "Detalle del registro de auditoría", + "geoLocation": "Geolocalización", + "browserData": "Navegador / Metadatos del sistema", + "browser": "Navegador", + "OS": "OS", + "device": "Dispositivo", + "deviceType": "Tipo de dispositivo", + "engine": "Motor", + "webview": "Vista web", + "eventDetail": "Detalle del evento", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Admin", + "superAdmin": "Súper administrador", + "adminGroupRoleInfo": "El administrador puede gestionar los miembros y recursos del grupo", + "adminOrgRoleInfo": "Los administradores son propietarios de todos los recursos y pueden gestionar grupos.", + "member": "Miembro", + "memberGroupRoleInfo": "Los miembros pueden ver a los miembros del grupo", + "memberOrgRoleInfo": "Los miembros sólo pueden utilizar o visitar los recursos a los que tienen acceso.", + "title": "Miembros", + "createGroup": "Crear grupo", + "newGroupPrefix": "Nuevo Grupo", + "allMembers": "Todos los diputados", + "deleteModalTitle": "Borrar este grupo", + "deleteModalContent": "No se puede restaurar el grupo eliminado. Está seguro de eliminar el grupo?", + "addMember": "Añadir miembros", + "nameColumn": "Nombre de usuario", + "joinTimeColumn": "Hora de incorporación", + "actionColumn": "Operación", + "roleColumn": "Papel", + "exitGroup": "Grupo de salida", + "moveOutGroup": "Eliminar del Grupo", + "inviteUser": "Invitar a miembros", + "exitOrg": "Deja", + "exitOrgDesc": "¿Estás seguro de que quieres dejar este espacio de trabajo.", + "moveOutOrg": "Eliminar", + "moveOutOrgDescSaasMode": "¿Está seguro de que desea eliminar al usuario {name} de este espacio de trabajo?", + "moveOutOrgDesc": "¿Está seguro de que desea eliminar al usuario {name}? Esta acción no se puede recuperar.", + "devGroupTip": "Los miembros del grupo de desarrolladores tienen privilegios para crear aplicaciones y fuentes de datos.", + "lastAdminQuit": "El último administrador no puede salir.", + "organizationNotExist": "El espacio de trabajo actual no existe", + "inviteUserHelp": "Puede copiar el enlace de invitación para enviarlo al usuario", + "inviteUserLabel": "Enlace de invitación:", + "inviteCopyLink": "Copiar enlace", + "inviteText": "{userName} le invita a unirse al espacio de trabajo \"{organization}\", haga clic en el enlace para unirse: {inviteLink}", + "inviteByEmailHelp": "Puede introducir una o varias direcciones de correo electrónico para enviar enlaces de invitación", + "inviteByEmailLabel": "Introduzca los correos electrónicos:", + "inviteByEmailButton": "Enviar invitaciones", + "inviteByEmailSuccess": "Invitaciones enviadas con éxito", + "inviteByEmailError": "Algo ha ido mal al enviar las invitaciones. Por favor, inténtelo de nuevo.", + "noValidEmails": "No se han encontrado correos electrónicos válidos", + "groupName": "Nombre del grupo", + "createTime": "Crear tiempo", + "manageBtn": "Gestione", + "userDetail": "Detalle", + "syncDeleteTip": "Este grupo ha sido eliminado de la libreta de direcciones Fuente", + "syncGroupTip": "Este grupo es un grupo de sincronización de la libreta de direcciones y no se puede editar", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Nuevo espacio de trabajo (Organización)", + "title": "Espacio de trabajo", + "createOrg": "Crear espacio de trabajo (Organización)", + "deleteModalTitle": "¿Está seguro de eliminar este espacio de trabajo?", + "deleteModalContent": "Está a punto de eliminar este espacio de trabajo {permanentlyDelete}. Una vez eliminado, el espacio de trabajo {notRestored}.", + "permanentlyDelete": "Permanentemente", + "notRestored": "No se puede restaurar", + "deleteModalLabel": "Introduzca el nombre del espacio de trabajo {name} para confirmar la operación:", + "deleteModalTip": "Introduzca el nombre del espacio de trabajo", + "deleteModalErr": "El nombre del espacio de trabajo es incorrecto", + "deleteModalBtn": "Borrar", + "editOrgTitle": "Editar la información del espacio de trabajo", + "orgNameLabel": "Nombre del espacio de trabajo:", + "orgNameCheckMsg": "El nombre del espacio de trabajo no puede estar vacío", + "orgLogo": "Logotipo del espacio de trabajo:", + "logoModify": "Modificar imagen", + "inviteSuccessMessage": "Unirse con éxito al espacio de trabajo", + "inviteFailMessage": "Error al unirse al espacio de trabajo", + "uploadErrorMessage": "Error de carga", + "orgName": "Nombre del espacio de trabajo", + }, + "freeLimit": "Prueba gratuita", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Pestaña Switch", + "switchTabDesc": "Se activa al cambiar de pestaña", + "tab": "Fichas", + "atLeastOneTabError": "El contenedor de fichas guarda al menos una ficha", + "selectedTabKeyDesc": "Pestaña Actualmente Seleccionado", + "iconPosition": "Icono Posición", + "placement": "Colocación de pestañas", + "showTabs": "Mostrar pestañas", + "gutter": "Brecha", + "gutterTooltip": "La distancia entre pestañas en px", + "tabsCentered": "Pestañas centradas", + "destroyInactiveTab": "Destruir TabPane inactivo", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Arrastrar componentes desde el panel derecho o", + "openDialogButton": "Generar un formulario a partir de una de sus fuentes de datos", + "resetAfterSubmit": "Restablecer tras envío correcto", + "initialData": "Datos iniciales", + "disableSubmit": "Desactivar Enviar", + "success": "Formulario generado correctamente", + "selectCompType": "Seleccione el tipo de componente", + "dataSource": "Fuente de datos:", + "invalidFormMessage": "Mensaje personalizado de formulario no válido", + "selectSource": "Seleccionar fuente", + "table": "Mesa:", + "selectTable": "Seleccionar tabla", + "columnName": "Nombre de la columna", + "dataType": "Tipo de datos", + "compType": "Tipo de componente", + "required": "Requerido", + "generateForm": "Generar formulario", + "compSelectionError": "Tipo de columna no configurada", + "compTypeNameError": "No se ha podido obtener el nombre del tipo de componente", + "noDataSourceSelected": "No se ha seleccionado ninguna fuente de datos", + "noTableSelected": "Ninguna mesa seleccionada", + "noColumn": "Sin columna", + "noColumnSelected": "Sin columna seleccionada", + "noDataSourceFound": "No se ha encontrado ninguna fuente de datos compatible. Crear una nueva fuente de datos", + "noTableFound": "No se encontraron tablas en esta fuente de datos, por favor seleccione otra fuente de datos", + "noColumnFound": "No se ha encontrado ninguna columna compatible en esta tabla. Seleccione otra tabla", + "formTitle": "Título del formulario", + "name": "Nombre", + "nameTooltip": "El nombre del atributo en los datos del formulario, cuando se deja en blanco, es por defecto el nombre del componente", + "notSupportMethod": "Métodos no admitidos:", + "notValidForm": "El formulario no es válido", + "resetDesc": "Restablecer el valor predeterminado de los datos del formulario", + "clearDesc": "Borrar datos del formulario", + "setDataDesc": "Establecer datos del formulario", + "valuesLengthError": "Número de parámetro Error", + "valueTypeError": "Parámetro Tipo Error", + "dataDesc": "Datos del formulario actual", + "loadingDesc": "¿Se está cargando el formulario?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Abrir", + "openDesc": "Se activa al abrir el cuadro de diálogo modal", + "close": "Cerrar", + "closeDesc": "Se activa al cerrar el cuadro de diálogo modal", + "openModalDesc": "Abrir el cuadro de diálogo", + "closeModalDesc": "Cerrar el cuadro de diálogo", + "visibleDesc": "¿Es visible? Si es verdadero, aparecerá el cuadro de diálogo actual", + "title": "Título del cajón", + "titleAlign": "Alineación de títulos", + "modalHeight": "Altura modal", + "modalHeightTooltip": "Pixel, Ejemplo: 222", + "modalWidth": "Anchura modal", + "modalWidthTooltip": "Número o porcentaje, Ejemplo: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Recuento de filas", + "noOfRowsTooltip": "Número de filas de la lista - Suele establecerse en una variable (por ejemplo, '{{query1.data.length}}') para presentar los resultados de la consulta", + "noOfColumns": "Recuento de columnas", + "itemIndexName": "Elemento de datos Índice Nombre", + "itemIndexNameDesc": "El nombre de la variable que hace referencia al índice del artículo, por defecto {default}.", + "itemDataName": "Elemento de datos Nombre del objeto", + "itemDataNameDesc": "El nombre de la variable que se refiere al objeto de datos del artículo, por defecto {default}.", + "itemsDesc": "Exposición de datos de componentes en lista", + "dataDesc": "Los datos JSON utilizados en la lista actual", + "dataTooltip": "Si sólo establece un número, este campo se considerará como recuento de filas y los datos se considerarán vacíos.", + "enableSorting": "Permitir la clasificación", + }, + "navigation": { + ...en.navigation, + + "addText": "Añadir elemento de submenú", + "logoURL": "Navegación Logo URL", + "horizontalAlignment": "Alineación horizontal", + "logoURLDesc": "Puede mostrar un logotipo en el lado izquierdo introduciendo un valor URI o una cadena Base64 como data:image/png;base64,AAA... CCC", + "itemsDesc": "Elementos del menú de navegación jerárquica", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Submenú {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Activo", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "La URL de origen para el contenido IFrame. Asegúrese de que la URL es HTTPS o localhost. Asegúrese también de que la URL no esté bloqueada por la Política de seguridad de contenidos (CSP) del navegador. El encabezado \"X-Frame-Options\" no debe tener el valor \"DENY\" o \"SAMEORIGIN\".", + "allowDownload": "Permitir descargas", + "allowSubmitForm": "Permitir enviar formulario", + "allowMicrophone": "Permitir micrófono", + "allowCamera": "Permitir cámara", + "allowPopup": "Permitir ventanas emergentes", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Valor booleano por defecto", + "open": "En", + "close": "Fuera de", + "openDesc": "Se activa al encender el interruptor", + "closeDesc": "Se activa cuando el interruptor está apagado", + "valueDesc": "Estado actual del interruptor", + }, + "signature": { + ...en.signature, + + "tips": "Texto de sugerencia", + "signHere": "Firme aquí", + "showUndo": "Mostrar Deshacer", + "showClear": "Mostrar claro", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Todos los datos almacenados actualmente", + "setItemDesc": "Añadir un artículo", + "removeItemDesc": "Eliminar un artículo", + "clearItemDesc": "Borrar todos los artículos", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "Abrir URL", + "openApp": "Aplicación abierta", + "copyToClipboard": "Copiar al portapapeles", + "downloadFile": "Descargar archivo", + "logoutUser": "Cerrar sesión de usuario", + "resetPassword": "Restablecer contraseña", + }, + "messageComp": { + ...en.messageComp, + + "info": "Enviar una notificación", + "loading": "Enviar una notificación de carga", + "success": "Enviar una notificación de éxito", + "warn": "Enviar una notificación de advertencia", + "error": "Enviar una notificación de error", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "cerrar una notificación", + "info": "Enviar una notificación", + "loading": "Enviar una notificación de carga", + "success": "Enviar una notificación de éxito", + "warn": "Enviar una notificación de advertencia", + "error": "Enviar una notificación de error", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Cambiar tema", + }, + "transformer": { + ...en.transformer, + + "preview": "Vista previa", + "docLink": "Leer más sobre Transformers...", + "previewSuccess": "Vista previa Éxito", + "previewFail": "Vista previa Fracaso", + "deleteMessage": "Borrar Transformador con éxito. Puede utilizar {undoKey} para deshacer.", + "documentationText": "Los Transformadores están diseñados para la transformación de datos y la reutilización de su código JavaScript multilínea. Utilice los transformadores para adaptar los datos de consultas o componentes a las necesidades de su aplicación local. A diferencia de las consultas de JavaScript, los transformadores están diseñados para realizar operaciones de sólo lectura, lo que significa que no se puede activar una consulta o actualizar un estado temporal dentro de un transformador.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Valor Init", + "valueTooltip": "El valor inicial almacenado en el estado temporal puede ser un booleano, una cadena, un número o cualquier valor JSON válido.", + "docLink": "Más información sobre los Estados temporales...", + "pathTypeError": "La ruta debe ser una cadena o una matriz de valores", + "unStructuredError": "Los datos no estructurados {prev} no pueden ser actualizados por {path}", + "valueDesc": "Valor temporal del Estado", + "deleteMessage": "El estado temporal se ha eliminado correctamente. Puede utilizar {undoKey} para deshacer.", + "documentationText": "Los estados temporales son una potente característica utilizada para gestionar variables complejas que actualizan dinámicamente el estado de los componentes de tu aplicación. Estos estados actúan como almacenamiento intermedio o transitorio de datos que pueden cambiar con el tiempo debido a interacciones del usuario u otros procesos.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Datos", + "dataDesc": "Datos del respondedor de datos actual", + "dataTooltip": "Cuando se modifiquen estos datos, se desencadenarán acciones posteriores.", + "docLink": "Más información sobre los respondedores de datos...", + "deleteMessage": "El Data Responder se ha borrado correctamente. Puede utilizar {undoKey} para deshacer.", + "documentationText": "Al desarrollar una aplicación, puede asignar eventos a los componentes para controlar los cambios en datos específicos. Por ejemplo, un componente Tabla puede tener eventos como \"Cambio de selección de fila\", \"Cambio de filtro\", \"Cambio de ordenación\" y \"Cambio de página\" para controlar los cambios en la propiedad selectedRow. Sin embargo, para los cambios en estados temporales, transformadores o resultados de consultas, en los que no se dispone de eventos estándar, se utilizan los respondedores de datos. Permiten detectar y reaccionar ante cualquier modificación de los datos.", + }, + "theme": { + ...en.theme, + + "title": "Temas", + "createTheme": "Crear tema", + "themeName": "Nombre del tema:", + "themeNamePlaceholder": "Introduzca un nombre para el tema", + "defaultThemeTip": "Tema por defecto:", + "createdThemeTip": "El tema que ha creado:", + "option": "Option{index}", + "input": "Entrada", + "confirm": "Ok", + "emptyTheme": "No hay temas disponibles", + "click": "", + "toCreate": "", + "nameColumn": "Nombre", + "defaultTip": "Por defecto", + "updateTimeColumn": "Hora de actualización", + "edit": "Editar", + "cancelDefaultTheme": "Desactivar tema por defecto", + "setDefaultTheme": "Establecer como tema predeterminado", + "copyTheme": "Tema duplicado", + "setSuccessMsg": "Ajuste superado", + "cancelSuccessMsg": "Desestabilización lograda", + "deleteSuccessMsg": "Supresión Efectuada", + "checkDuplicateNames": "El nombre del tema ya existe, vuelva a introducirlo", + "copySuffix": " Copia", + "saveSuccessMsg": "Guardado correctamente", + "leaveTipTitle": "Consejos", + "leaveTipContent": "Aún no ha ahorrado, ¿confirma su marcha?", + "leaveTipOkText": "Deja", + "goList": "Volver a la lista", + "saveBtn": "Guardar", + "mainColor": "Colores principales", + "text": "Colores del texto", + "layout": "Configuración del diseño", + "fonts": "Configuración de fuentes", + "components": "Plantillas de componentes", + "charts": "Definición de eCharts", + "defaultTheme": "Por defecto", + "yellow": "Amarillo", + "green": "Verde", + "previewTitle": "Vista previa del tema\nComponentes de ejemplo que utilizan los colores de su tema", + "dateColumn": "Fecha", + "emailColumn": "Correo electrónico", + "phoneColumn": "Teléfono", + "subTitle": "Título", + "linkLabel": "Enlace", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progreso", + "sliderLabel": "Deslizador", + "radioLabel": "Radio", + "checkboxLabel": "Casilla de verificación", + "buttonLabel": "Botón de formulario", + "switch": "Interruptor", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "globo.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Vista previa del estilo de gráfico", + "chartSpending": "Gasto", + "chartBudget": "Presupuesto", + "chartAdmin": "Administración", + "chartFinance": "Finanzas", + "chartSales": "Sales", + "chartFunnel": "Gráfico de embudo", + "chartShow": "Mostrar", + "chartClick": "Haga clic en", + "chartVisit": "Visite", + "chartQuery": "Consulta", + "chartBuy": "Comprar", + "canvas": "Configuración del lienzo", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Color de la marca", + "primaryDesc": "Color primario por defecto utilizado por la mayoría de los componentes", + "textDark": "Color de texto oscuro", + "textDarkDesc": "Se utiliza cuando el color de fondo es claro", + "textLight": "Color de texto claro", + "textLightDesc": "Se utiliza cuando el color de fondo es oscuro", + "canvas": "Canvas Color", + "canvasDesc": "Color de fondo por defecto de la aplicación", + "primarySurface": "Color del contenedor", + "primarySurfaceDesc": "Color de fondo por defecto para componentes como tablas", + "borders": "Estilos de bordes", + "spacing": "Estilos de espaciado", + "font": "Estilos de fuente", + "fonts": "Fuentes", + "borderRadius": "Radio del borde", + "borderRadiusDesc": "Radio del borde por defecto utilizado por la mayoría de los componentes", + "borderColor": "Color del borde", + "borderColorDesc": "Color de borde por defecto utilizado por la mayoría de los componentes", + "borderWidth": "Anchura del borde", + "borderWidthDesc": "Ancho de borde por defecto utilizado por la mayoría de los componentes", + "borderStyle": "Estilo de borde", + "borderStyleDesc": "Estilo de borde por defecto utilizado por la mayoría de los componentes", + "fontFamily": "Familia de fuentes", + "fontFamilyDesc": "Familia de fuentes por defecto utilizada por la mayoría de los componentes", + "chart": "Estilo de gráfico", + "chartDesc": "Aquí puede colocar eCharts Theme JSON para definir el estilo de sus gráficos en todos los Detalles.", + "echartsJson": "Puede utilizar aquí el Generador de JSON del Tema. Copie el JSON del Generador y péguelo aquí.", + "margin": "Margen", + "marginDesc": "Margen por defecto utilizado normalmente para la mayoría de los componentes", + "padding": "Acolchado", + "paddingDesc": "Relleno por defecto utilizado normalmente para la mayoría de los componentes", + "containerHeaderPadding": "Relleno de cabecera", + "containerheaderpaddingDesc": "Relleno de cabecera por defecto utilizado normalmente para la mayoría de los componentes.", + "gridColumns": "Columnas de cuadrícula de lienzo", + "gridColumnsDesc": "Número predeterminado de columnas utilizado normalmente para la mayoría de los contenedores", + "loadingIndicators": "Indicadores de carga", + "showComponentLoadingIndicators": "Mostrar indicadores de carga cuando se carga el componente", + "showDataLoadingIndicators": "Mostrar indicadores de carga al cargar los datos", + "dataLoadingIndicator": "Indicador de carga de datos", + "background": "Estilos de fondo", + "gridSettings": "Ajustes de cuadrícula", + "gridRowHeight": "Altura de la fila de la cuadrícula", + "gridRowHeightDesc": "Altura de cada fila de la cuadrícula", + "gridRowCount": "Recuento de filas de la cuadrícula", + "gridRowCountDesc": "Número máximo de filas en la cuadrícula", + "gridPaddingX": "Acolchado horizontal", + "gridPaddingXDesc": "Relleno horizontal del lienzo", + "gridPaddingY": "Acolchado vertical", + "gridPaddingYDesc": "Relleno vertical del lienzo", + "gridBgImage": "Imagen de fondo", + "gridBgImageDesc": "Imagen de fondo del lienzo", + "gridBgImageRepeat": "Repetición de la imagen de fondo", + "gridBgImageRepeatDesc": "Repetición de la imagen de fondo del lienzo", + "gridBgImageSize": "Tamaño de la imagen de fondo", + "gridBgImageSizeDesc": "Tamaño de la imagen de fondo del lienzo", + "gridBgImagePosition": "Posición de la imagen de fondo", + "gridBgImagePositionDesc": "Posición de la imagen de fondo del lienzo", + "gridBgImageOrigin": "Origen de la imagen de fondo", + "gridBgImageOriginDesc": "Origen de la imagen de fondo del lienzo", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugins", + "npmPluginTitle": "plugins npm", + "npmPluginDesc": "Configurar plugins npm para todas las aplicaciones en el espacio de trabajo actual.", + "npmPluginEmpty": "No se han añadido plugins npm.", + "npmPluginAddButton": "Añadir un plugin npm", + "saveSuccess": "Guardado correctamente", + }, + "advanced": { + ...en.advanced, + + "title": "Avanzado", + "defaultHomeTitle": "Página de inicio por defecto", + "defaultHomeHelp": "La página de inicio es la aplicación que todos los no desarrolladores verán por defecto cuando inicien sesión. Nota: Asegúrese de que la aplicación seleccionada es accesible para los no desarrolladores.", + "defaultHomePlaceholder": "Seleccione la página de inicio por defecto", + "saveBtn": "Guardar", + "preloadJSTitle": "Precargar JavaScript", + "preloadJSHelp": "Configurar código JavaScript precargado para todas las aplicaciones del área de trabajo actual.", + "preloadCSSTitle": "Precargar CSS", + "preloadCSSHelp": "Configurar código CSS precargado para todas las aplicaciones del área de trabajo actual.", + "preloadCSSApply": "Aplicar a la página de inicio del espacio de trabajo", + "preloadLibsTitle": "Biblioteca JavaScript", + "preloadLibsHelp": "Configure bibliotecas JavaScript precargadas para todas las aplicaciones en el espacio de trabajo actual, y el sistema tiene lodash, day.js, uuid, numbro incorporados para uso directo. Las bibliotecas JavaScript se cargan antes de que se inicialice la aplicación, por lo que se produce un cierto impacto en el rendimiento de la aplicación.", + "preloadLibsEmpty": "No se han añadido bibliotecas JavaScript", + "preloadLibsAddBtn": "Añadir una biblioteca", + "saveSuccess": "Guardado correctamente", + "AuthOrgTitle": "Pantalla de bienvenida al espacio de trabajo", + "AuthOrgDescrition": "La URL para que sus usuarios inicien sesión en el espacio de trabajo actual.", + "APIConsumption": "Consumo de API", + "APIConsumptionDescription": "Aquí puede ver el consumo de API para todas las aplicaciones en el área de trabajo actual.", + "overallAPIConsumption": "Consumo global de API en este espacio de trabajo hasta ahora", + "lastMonthAPIConsumption": "Consumo de API del último mes, en este espacio de trabajo", + "npmRegistryTitle": "Registro NPM personalizado", + "npmRegistryHelp": "Configurar un Registro NPM personalizado para permitir la obtención de plugins de un registro NPM privado.", + "showHeaderInPublicApps": "Mostrar cabecera en vista pública", + "showHeaderInPublicAppsHelp": "Fijar la visibilidad de la cabecera en la vista pública para todas las aplicaciones", + }, + "branding": { + ...en.branding, + + "title": "Configuraciones de Marca", + "general": "Ajustes generales", + "selectWorkspace": "Seleccionar espacio de trabajo", + "brandingName": "Nombre de la marca", + "brandingNamePlaceholder": "Introduzca el nombre de la marca", + "brandingDescription": "Descripción de la marca", + "brandingDescriptionPlaceholder": "Introduzca la descripción de la marca", + "logoSection": "Logotipos", + "logo": "Logotipo", + "logoHelp": "Sube el logotipo de tu empresa en formato SVG o PNG.", + "logoUrlHelp": "Proporcione una url de imagen válida para el logotipo.", + "logoUrlPlaceholder": "URL de la imagen del proveedor para el logotipo", + "squareLogo": "Logotipo Cuadrado", + "squareLogoHelp": "Sube una versión cuadrada de tu logotipo en formato SVG o PNG.", + "squareLogoUrlHelp": "Proporcione una url de imagen válida para el logotipo cuadrado.", + "squareLogoUrlPlaceholder": "Proporcionar url para el logotipo cuadrado.", + "colorFontSection": "Colores y Fuentes", + "mainBrandingColor": "Color Principal de la Marca", + "mainBrandingColorHelp": "Selecciona el color principal para tu marca.", + "editorHeaderColor": "Color del Encabezado del Editor", + "editorHeaderColorHelp": "Selecciona el color del encabezado del editor.", + "adminSidebarColor": "Color de la Barra Lateral del Administrador", + "adminSidebarColorHelp": "Selecciona el color de la barra lateral del administrador.", + "adminSidebarFontColor": "Admin Sidebar Font Color", + "adminSidebarFontColorHelp": "Elija el color de la fuente para la barra lateral del administrador.", + "adminSidebarActiveBgColor": "Color de fondo del elemento seleccionado en Admin Sidebar", + "adminSidebarActiveBgColorHelp": "Elija el color de fondo del elemento seleccionado para la barra lateral del administrador.", + "adminSidebarActiveFontColor": "Color de fuente del elemento seleccionado en Admin Sidebar", + "adminSidebarActiveFontColorHelp": "Elija el color de fuente del elemento seleccionado para la barra lateral del administrador.", + "editorSidebarColor": "Color de la Barra Lateral del Editor", + "editorSidebarColorHelp": "Selecciona el color de la barra lateral del editor.", + "editorSidebarFontColor": "Color de la fuente de la barra lateral del editor", + "editorSidebarFontColorHelp": "Elija el color de la fuente para la barra lateral del editor.", + "editorSidebarActiveBgColor": "Color de fondo del elemento seleccionado de la barra lateral del editor", + "editorSidebarActiveBgColorHelp": "Elija el color de fondo del elemento seleccionado para la barra lateral del editor.", + "editorSidebarActiveFontColor": "Color de fuente del elemento seleccionado de la barra lateral del editor", + "editorSidebarActiveFontColorHelp": "Elija el color de fuente del elemento seleccionado para la barra lateral del editor.", + "font": "Fuente", + "fontHelp": "Selecciona una fuente de Google Fonts para tu aplicación.", + "textSection": "Textos y Páginas", + "errorPage": "Texto de la Página de Error", + "errorPageHelp": "Introduce el texto que se mostrará en la página de error.", + "signUpPage": "Texto de la Página de Registro", + "signUpPageHelp": "Introduce el texto que se mostrará en la página de registro.", + "loggedOutPage": "Texto de la Página de Cierre de Sesión", + "loggedOutPageHelp": "Introduce el texto que se mostrará en la página de cierre de sesión.", + "standardDescription": "Descripción Estándar", + "standardDescriptionHelp": "Introduce la descripción estándar para la información meta de SEO.", + "standardTitle": "Título Estándar", + "standardTitleHelp": "Introduce el título estándar para la información meta de SEO.", + "showDocumentation": "Mostrar Documentación", + "submitIssue": "Permitir Enviar Problema", + "whatsNew": "Habilitar \"Novedades\"", + "saveButton": "Guardar Configuraciones", + "errorPageImage": "Sube una imagen para la página de error en formato SVG o PNG.", + "errorPageImageUrl": "URL de la imagen de la página de error", + "errorPageImageUrlPlaceholder": "URL de la imagen del proveedor para la página de error", + "errorPageImageUrlHelp": "Proveedor de una imagen válida url para mostrar en la página de error.", + "signUpPageImage": "Sube una imagen para la página de registro en formato SVG o PNG.", + "signUpPageImageUrl": "URL de la imagen para la página de inscripción", + "signUpPageImageUrlPlaceholder": "URL de la imagen del proveedor para la página de registro", + "signUpPageImageUrlHelp": "Proveedor de una imagen válida url para mostrar en la página de registro.", + "loggedOutPageImage": "Sube una imagen para la página de cierre de sesión en formato SVG o PNG.", + "showDocumentationSection": "Configuración del enlace a la documentación", + "showWhatsNewSection": "Novedades Configuración de enlaces", + "documentationLink": "Enlace a la documentación", + "documentationLinkPlaceholder": "Introduce la URL de tu documentación...", + "documentationLinkHelp": "Proporciona una URL válida que los usuarios puedan visitar para la documentación.", + "whatsNewSection": "Configuraciones de documentación", + "whatsNewLink": "Enlace a la documentación", + "whatsNewLinkPlaceholder": "Introduce la URL de tu documentación...", + "whatsNewLinkHelp": "Proporciona una URL válida que los usuarios puedan visitar para conocer las novedades.", + "deleteBranding": "Eliminar marca", + "deleteBrandingContent": "¿Está seguro de que desea eliminar la marca \"{orgName}\"?", + "fetchBrandingError": "Se ha producido un error al obtener los datos de la marca. Por favor, inténtelo de nuevo.", + "upload": "Cargar", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "No se ha podido conectar con el servidor, compruebe la red.", + "200": "Éxito", + "201": "Creado", + "204": "Sin contenido", + "400": "Mala petición", + "401": "Autenticación fallida, por favor conéctese de nuevo", + "403": "Sin permiso, póngase en contacto con el administrador para obtener autorización", + "404": "No se ha encontrado", + "500": "Servicio ocupado, inténtelo más tarde", + "timeout": "Tiempo de espera de la solicitud", + }, + "share": { + ...en.share, + + "title": "Compartir", + "viewer": "Visor", + "editor": "Editor", + "owner": "Propietario", + "datasourceViewer": "Puede utilizar", + "datasourceOwner": "Puede gestionar", + }, + "debug": { + ...en.debug, + + "title": "Título", + "switch": "Componente del interruptor:", + }, + "module": { + ...en.module, + + "folderNotEmpty": "La carpeta no está vacía", + "emptyText": "Sin datos", + "docLink": "Más información sobre los módulos...", + "documentationText": "Los módulos son aplicaciones completas que pueden incluirse y repetirse en otras aplicaciones y que funcionan como un único componente. Como los módulos pueden ser incrustados, necesitan ser capaces de interactuar con sus aplicaciones externas o sitios web. Estas cuatro opciones ayudan a mantener la comunicación con un módulo.", + "circularReference": "Referencia circular, ¡no se puede utilizar el módulo/aplicación actual!", + "emptyTestInput": "El módulo actual no tiene ninguna entrada que comprobar", + "emptyTestMethod": "El módulo actual no tiene método de prueba", + "name": "Nombre", + "input": "Entrada", + "params": "Parámetros", + "emptyParams": "No se ha añadido ningún parámetro", + "emptyInput": "No se ha añadido ninguna entrada", + "emptyMethod": "No se ha añadido ningún método", + "emptyOutput": "No se ha añadido ninguna salida", + "data": "Datos", + "string": "Cadena", + "number": "Número", + "array": "Matriz", + "boolean": "Booleano", + "query": "Consulta", + "autoScaleCompHeight": "Balanzas de altura de componentes con contenedor", + "excuteMethod": "Ejecutar método {name}", + "method": "Método", + "action": "Acción", + "output": "Salida", + "nameExists": "Nombre {name} Ya existe", + "eventTriggered": "Se activa el evento {name}.", + "globalPromptWhenEventTriggered": "Muestra un aviso global cuando se activa un evento", + "emptyEventTest": "El módulo actual no tiene eventos que probar", + "emptyEvent": "No se ha añadido ningún evento", + "event": "Evento", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "El valor de retorno es una función.", + "consume": "___TITULAR0___", + "JSON": "Mostrar JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Crear...", + "created": "Crear {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "La autenticación de usuario ha fallado, por favor inicie sesión de nuevo", + "verifyAccount": "Necesidad de verificar la cuenta", + "functionNotSupported": "La versión actual no soporta esta función. Póngase en contacto con el equipo de Lowcoder Business para actualizar su cuenta.", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Crear componente {comp} Fallido", + "notHandledError": "{method} Método no ejecutado", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Barra de navegación", + "chooseApp": "Elegir aplicación", + "iconTooltip": "Soporta Image src Link o Base64 String como data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Oculto para usuarios no autorizados", + "queryParam": "Parámetros de consulta de URL", + "hashParam": "Parámetros hash de URL", + "tabBar": "Barra de pestañas", + "emptyTabTooltip": "Configurar esta página en el panel derecho", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Teléfono)", + "800": "800px (Tableta)", + "1440": "1440px (portátil)", + "1920": "1920px (pantalla ancha)", + "3200": "3200px (pantalla supergrande)", + "title": "Configuración general de la aplicación", + "autofill": "Autorrelleno", + "userDefined": "A medida", + "default": "Por defecto", + "tooltip": "Cerrar la ventana emergente después de la configuración", + "canvasMaxWidth": "Ancho máximo del lienzo para esta aplicación", + "userDefinedMaxWidth": "Anchura máxima personalizada", + "inputUserDefinedPxValue": "Introduzca un valor de píxel personalizado", + "maxWidthTip": "La anchura máxima debe ser mayor o igual a 350", + "themeSetting": "Tema de estilo aplicado", + "themeSettingDefault": "Por defecto", + "themeCreate": "Crear tema", + "appTitle": "Título", + "appDescription": "Descripción", + "appCategory": "Categoría", + "showPublicHeader": "Mostrar cabecera en vista pública", + "canvas": "Configuración del lienzo", + "gridColumns": "Columnas de cuadrícula", + "gridRowHeight": "Altura de la fila de la cuadrícula", + "gridRowCount": "Recuento de filas de la cuadrícula", + "gridPaddingX": "Acolchado horizontal del lienzo", + "gridPaddingY": "Acolchado vertical del lienzo", + "gridBgImage": "Imagen de fondo", + "gridBgImageRepeat": "Repetición de la imagen de fondo", + "gridBgImageSize": "Tamaño de la imagen de fondo", + "gridBgImagePosition": "Posición de la imagen de fondo", + "gridBgImageOrigin": "Origen de la imagen de fondo", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Atajos personalizados", + "shortcut": "Atajo", + "action": "Acción", + "empty": "Sin atajos", + "placeholder": "Pulsar acceso directo", + "otherPlatform": "Otros", + "space": "Espacio", + }, + "profile": { + ...en.profile, + + "orgSettings": "Configuración del espacio de trabajo", + "switchOrg": "Cambiar de espacio de trabajo", + "joinedOrg": "Mis espacios de trabajo", + "createOrg": "Crear espacio de trabajo", + "logout": "Cerrar sesión", + "personalInfo": "Mi perfil", + "bindingSuccess": "Vinculación {sourceName} Éxito", + "uploadError": "Error de carga", + "editProfilePicture": "Modifique", + "saveUserNameTooltip": "Pulsa Enter para guardar tu nuevo NicName. Si ves tu Email, significa que acabamos de secuestrarlo como Nombre de Usuario y puedes cambiarlo por uno mejor. Tu Email como nombre de usuario técnico permanece intacto.", + "changeAvatarTooltip": "Puede cargar archivos PNG o JPG", + "nameCheck": "El nombre no puede estar vacío", + "name": "Nombre:", + "namePlaceholder": "Introduzca su nombre", + "toBind": "Encuadernar", + "binding": "Es vinculante", + "bindError": "Parameter Error, Currently Not Supported Binding.", + "bindName": "Enlazar {name}", + "loginAfterBind": "Tras la vinculación, puede utilizar {name} para iniciar sesión", + "bindEmail": "Vincular correo electrónico:", + "email": "Correo electrónico", + "emailCheck": "Introduzca una dirección de correo electrónico válida", + "emailPlaceholder": "Introduzca su dirección de correo electrónico", + "submit": "Enviar", + "bindEmailSuccess": "Éxito de la encuadernación por correo electrónico", + "passwordModifiedSuccess": "Contraseña cambiada con éxito", + "passwordSetSuccess": "Contraseña establecida correctamente", + "oldPassword": "Contraseña antigua:", + "inputCurrentPassword": "Introduzca su contraseña actual", + "newPassword": "Nueva contraseña:", + "inputNewPassword": "Introduzca su nueva contraseña", + "confirmNewPassword": "Confirme la nueva contraseña:", + "inputNewPasswordAgain": "Vuelva a introducir su nueva contraseña", + "password": "Contraseña:", + "modifyPassword": "Modificar contraseña", + "setPassword": "Establecer contraseña", + "alreadySetPassword": "Conjunto de contraseñas", + "setPassPlaceholder": "Puede iniciar sesión con contraseña", + "setPassAfterBind": "Puede establecer la contraseña después de vincular la cuenta", + "socialConnections": "Conexiones sociales", + "changeAvatar": "Cambiar avatar", + "about": "Acerca de", + "userId": "ID de usuario", + "createdAt": "Creado en", + "currentOrg": "Organización actual", + "settings": "Ajustes", + "uiLanguage": "Lenguaje de interfaz de usuario", + "info": "Información", + "createdApps": "Sus aplicaciones creadas", + "createdModules": "Sus módulos creados", + "sharedApps": "Aplicaciones compartidas con usted", + "sharedModules": "Módulos compartidos con usted", + "onMarketplace": "En el mercado", + "howToPublish": "Cómo publicar en Marketplace", + "memberOfOrgs": "Espacios de trabajo Afiliación", + "apiKeys": "Claves API", + "createApiKey": "Crear clave API", + "apiKeyInfo": "Asegúrate de copiar tu nueva clave API ahora. No podrás volver a verla.", + "apiKeyName": "Nombre", + "apiKeyDescription": "Descripción", + "apiKeyCopy": "Haga clic en la clave Api para obtener el valor en su portapapeles", + "apiKey": "Clave API", + "deleteApiKey": "Borrar clave API", + "deleteApiKeyContent": "¿Está seguro de que desea eliminar esta clave API?", + "deleteApiKeyError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Atajos de teclado", + "click": "Haga clic en", + "global": "Global", + "toggleShortcutList": "Alternar atajos de teclado", + "editor": "Editor", + "toggleLeftPanel": "Alternar panel izquierdo", + "toggleBottomPanel": "Alternar panel inferior", + "toggleRightPanel": "Alternar panel derecho", + "toggleAllPanels": "Conmutar todos los paneles", + "preview": "Vista previa", + "undo": "Deshacer", + "redo": "Rehacer", + "showGrid": "Mostrar cuadrícula", + "component": "Componente", + "multiSelect": "Seleccionar varios", + "selectAll": "Seleccionar todo", + "copy": "Copia", + "cut": "Corte", + "paste": "Pegar", + "move": "Mover", + "zoom": "Cambie el tamaño de", + "delete": "Borrar", + "deSelect": "Desmarque", + "queryEditor": "Editor de consultas", + "excuteQuery": "Ejecutar consulta actual", + "editBox": "Editor de texto", + "formatting": "Formato", + "openInLeftPanel": "Abrir en el panel izquierdo", + }, + "help": { + ...en.help, + + "videoText": "Visión general", + "onBtnText": "OK", + "permissionDenyTitle": "💡 ¿No se puede crear una nueva aplicación o fuente de datos?", + "permissionDenyContent": "No tiene permiso para crear la aplicación y la fuente de datos. Póngase en contacto con el administrador para unirse al grupo de desarrolladores.", + "appName": "Aplicación tutorial", + "chat": "Chatea con nosotros", + "docs": "Ver documentación", + "editorTutorial": "Editor de tutoriales", + "update": "¿Qué hay de nuevo?", + "version": "Versión", + "versionWithColon": "Versión:", + "submitIssue": "Presentar un asunto", + }, + "header": { + ...en.header, + + "nameCheckMessage": "El nombre no puede estar vacío", + "viewOnly": "Ver sólo", + "recoverAppSnapshotTitle": "¿Restaurar esta versión?", + "recoverAppSnapshotContent": "Restaurar la aplicación actual a la versión creada en {time}.", + "recoverAppSnapshotMessage": "Restaurar esta versión", + "returnEdit": "Volver al editor", + "deploy": "Publique", + "export": "Exportar a JSON", + "editName": "Editar nombre", + "duplicate": "Duplicar {type}", + "snapshot": "Historia", + "scriptsAndStyles": "Guiones y estilo", + "appSettings": "Configuración de la aplicación", + "preview": "Vista previa", + "editError": "Modo de vista previa de la historia, no se admite ninguna operación.", + "clone": "Clon", + "editorMode_layout": "Diseño", + "editorMode_logic": "Lógica", + "editorMode_both": "Ambos", + "editorMode_layout_tooltip": "Personalice la apariencia y el diseño del componente en la ventana derecha. Ajusta su aspecto, estilo y animación.", + "editorMode_logic_tooltip": "Configure el funcionamiento y la interacción de su componente, en la ventana adecuada. Gestione su contenido y sus comportamientos interactivos.", + "AppEditingBlocked": "Edición de la App bloqueada para:", + "AppEditingBlockedHint": "Los cambios no se guardarán mientras otro usuario esté editando esta aplicación.", + "AppEditingBlockedMessage": "Por favor, espere antes de verificar el estado de edición de la aplicación.", + "AppEditingBlockedCheckStatus": "Verificar estado de la aplicación", + "AppEditingBlockedSomeone": "Alguien", + "AppEditingBlockedMessageSnipped": "está editando esta aplicación", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Inscribirse", + "email": "Correo electrónico:", + "inputEmail": "Introduzca su dirección de correo electrónico", + "inputValidEmail": "Introduzca una dirección de correo electrónico válida", + "forgotPassword": "Contraseña olvidada", + "forgotPasswordInfo": "Introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.", + "forgotPasswordSuccess": "Consulta tu correo electrónico para ver el enlace para restablecer la contraseña.", + "forgotPasswordError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", + "register": "Inscribirse", + "userLogin": "Iniciar sesión", + "login": "Iniciar sesión", + "bind": "Encuadernación", + "passwordCheckLength": "Al menos {min} Caracteres", + "passwordCheckContainsNumberAndLetter": "Debe contener letras y números", + "passwordCheckSpace": "No puede contener espacios en blanco", + "welcomeTitle": "Bienvenido a {productName}", + "inviteWelcomeTitle": "{username} le invita a trabajar juntos", + "terms": "Términos", + "privacy": "Política de privacidad", + "registerHint": "He leído y acepto la", + "chooseAccount": "Elija su cuenta", + "signInLabel": "Iniciar sesión con {name}", + "bindAccount": "Vincular cuenta", + "scanQrCode": "Escanee el código QR con {name}.", + "invalidThirdPartyParam": "Parámetros de terceros no válidos", + "account": "Cuenta", + "inputAccount": "Introduzca su cuenta", + "ldapLogin": "Inicio de sesión LDAP", + "resetPassword": "Restablecer contraseña", + "resetPasswordDesc": "Restablecer la contraseña del usuario {name}. Se generará una nueva contraseña después del restablecimiento.", + "resetSuccess": "Reinicio efectuado", + "resetSuccessDesc": "Se ha restablecido la contraseña. La nueva contraseña es: {password}.", + "resetLostPasswordSuccess": "Se ha restablecido la contraseña. Vuelva a iniciar sesión.", + "copyPassword": "Copiar contraseña", + "poweredByLowcoder": "Desarrollado por: Lowcoder.cloud", + "continue": "Continúe en", + "enterPassword": "Introduzca su contraseña", + "selectAuthProvider": "Seleccionar proveedor de autenticación", + "selectWorkspace": "Seleccione su espacio de trabajo", + "userNotFound": "Usuario no encontrado. Asegúrese de haber introducido el correo electrónico correcto.", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Añada bibliotecas JavaScript a su aplicación actual a través de direcciones URL. lodash, day.js, uuid, numbro están integradas en el sistema para su uso inmediato. Las bibliotecas JavaScript se cargan antes de inicializar la aplicación, lo que puede afectar al rendimiento de la misma.", + "exportedAs": "Exportado como", + "urlTooltip": "Dirección URL de la biblioteca JavaScript, se recomienda [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/)", + "externalLibsHelperText": "Sólo son compatibles las bibliotecas que utilizan el método UMD (Universal Module Definition). Más información: https://github.com/umdjs/umd", + "recommended": "Recomendado", + "viewJSLibraryDocument": "Documento", + "jsLibraryURLError": "URL no válida", + "jsLibraryExist": "La biblioteca JavaScript ya existe", + "jsLibraryEmptyContent": "No se han añadido bibliotecas JavaScript", + "jsLibraryDownloadError": "Error de descarga de la biblioteca JavaScript", + "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada correctamente", + "jsLibraryInstallFailed": "Fallo en la instalación de la biblioteca JavaScript", + "jsLibraryInstallFailedCloud": "Puede que la biblioteca no esté disponible en el Sandbox, [Documentación](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "___TITULAR0___", + "add": "Añadir nuevo", + "jsHelpText": "Añadir un Método o Variable Global a la Aplicación Actual.", + "cssHelpText": "Añadir Estilos a la Aplicación Actual. La estructura DOM puede cambiar a medida que el sistema itera. Intente Modificar Estilos a Través de Propiedades de Componentes.", + "scriptsAndStyles": "Guiones y estilos", + "jsLibrary": "Biblioteca JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Componente", + "componentContent": "El Panel de Componentes Derecho le ofrece muchos Bloques de Aplicación (Componentes) ya hechos. Estos pueden ser arrastrados al lienzo para su uso. También puede crear sus propios componentes con un poco de conocimiento de codificación.", + "canvas": "Lienzo", + "canvasContent": "Construye tus aplicaciones en Canvas con el método \"lo que ves es lo que hay\". Basta con arrastrar y soltar los componentes para diseñar el diseño, y utilizar los atajos de teclado para realizar ediciones rápidas como borrar, copiar y pegar. Una vez seleccionado un componente, puede ajustar todos los detalles, desde el estilo y el diseño hasta la vinculación de datos y el comportamiento lógico. Además, disfrute de la ventaja añadida del diseño adaptable, que garantiza que sus aplicaciones se vean perfectamente en cualquier dispositivo.", + "queryData": "Consultar datos", + "queryDataContent": "Puede crear consultas de datos aquí y conectarse a su MySQL, MongoDB, Redis, Airtable, y muchas otras fuentes de datos. Después de configurar la consulta, haga clic en \"Ejecutar\" para obtener los datos y continuar con el tutorial.", + "compProperties": "Propiedades de los componentes", + "interactiveDemo": "Demostración interactiva", + "interactiveDemoToolTip": "Haga clic para iniciar una demostración interactiva de esta función", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Bienvenido Haga clic en 'App' y comience a crear su primera solicitud.", + "createAppTitle": "Crear aplicación", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Habilitar el Registro NPM personalizado", + "npmRegistryUrl": "Url del registro del MNP", + "npmRegistryUrlRequired": "Introduzca la URL del registro", + "npmRegistryUrlInvalid": "Introduzca una URL válida", + "npmRegistryScope": "Alcance del paquete", + "npmRegistryPattern": "Patrón", + "npmRegistryPatternInvalid": "Por favor, introduzca un patrón válido (empezando por @ para organizaciones).", + "npmRegistryAuth": "Autenticación", + "npmRegistryAuthType": "Tipo de autenticación", + "npmRegistryAuthCredentials": "Credenciales de autenticación", + "npmRegistryAuthCredentialsRequired": "Introduzca las credenciales de registro", + "npmRegistryAuthCredentialsHelp": "Para la autenticación básica, proporcione el nombre de usuario y la contraseña codificados en base64 con el formato 'base64(nombredeusuario:contraseña)'; para la autenticación por token, proporcione el token.", + }, + "history": { + ...en.history, + + "layout": "{0}' ajuste de diseño", + "upgrade": "Actualizar '{0}'", + "delete": "Borrar '{0}'", + "add": "Añadir \"{0}\".", + "modify": "Modificar '{0}'", + "rename": "Cambie el nombre de \"{1}\" a \"{0}\".", + "recover": "Recuperar la versión '{2}", + "recoverVersion": "Recuperar versión", + "andSoOn": "etc.", + "timeFormat": "MM DD a las hh:mm A", + "emptyHistory": "Sin antecedentes", + "currentVersionWithBracket": " (Actual)", + "currentVersion": "Versión actual", + "justNow": "Ahora mismo", + "history": "Historia", + }, + "home": { + ...en.home, + + "profile": "Su perfil", + "news": "Noticias", + "newsLoading": "Se cargará unos segundos.", + "orgHome": "Página de inicio (Org)", + "yourOrg": "Su organización", + "orgHomeTitle": "Página de inicio de la organización", + "appMarketplace": "Mercado de aplicaciones", + "allApplications": "Tus aplicaciones", + "allModules": "Sus módulos", + "allFolders": "Sus carpetas", + "yourFolders": "Sus carpetas", + "modules": "Módulos", + "module": "Módulo", + "api": "API Lowcoder", + "trash": "Trash", + "marketplace": "Mercado", + "allCategories": "Todas las categorías", + "queryLibrary": "Biblioteca de consultas", + "datasource": "Fuentes de datos", + "selectDatasourceType": "Seleccione el tipo de fuente de datos", + "home": "Inicio", + "all": "Todos", + "app": "Aplicación", + "navigation": "Navegación", + "navLayout": "Navegación por PC", + "navLayoutDesc": "Menú a la izquierda para facilitar la navegación.", + "mobileTabLayout": "Navegación móvil", + "mobileTabLayoutDesc": "Barra de navegación inferior para una navegación móvil fluida.", + "folders": "Carpetas", + "folder": "Carpeta", + "rootFolder": "Raíz", + "import": "Importar", + "export": "Exportar a JSON", + "show": "Mostrar", + "inviteUser": "Invitar a miembros", + "createFolder": "Crear carpeta", + "createFolderSubTitle": "Nombre de la carpeta:", + "moveToFolder": "Mover a carpeta", + "moveToTrash": "Mover a la basura", + "moveToFolderSubTitle": "Mueve \"{name}\" a:", + "folderName": "Nombre de la carpeta:", + "resCardSubTitle": "{time} por {creator}", + "trashEmpty": "La papelera está vacía.", + "projectEmpty": "Aquí no hay nada.", + "projectEmptyCanAdd": "Aún no tienes ninguna aplicación. Haz clic en Nueva para empezar.", + "name": "Nombre", + "type": "Tipo", + "creator": "Creado por", + "lastModified": "Última modificación", + "deleteTime": "Borrar hora", + "createTime": "Crear tiempo", + "datasourceName": "Nombre de la fuente de datos", + "databaseName": "Nombre de la base de datos", + "nameCheckMessage": "El nombre no puede estar vacío", + "deleteElementTitle": "Borrar permanentemente", + "moveToTrashSubTitle": "{type} {name} se trasladará a la papelera.", + "deleteElementSubTitle": "Borre {type} {name} permanentemente, no se puede recuperar.", + "deleteSuccessMsg": "Eliminado con éxito", + "deleteErrorMsg": "Error borrado", + "recoverSuccessMsg": "Recuperado con éxito", + "newDatasource": "Nueva fuente de datos", + "creating": "Crear...", + "chooseDataSourceType": "Elija el tipo de fuente de datos", + "folderAlreadyExists": "La carpeta ya existe", + "newNavLayout": "{userName}'s {name}", + "newApp": "El nuevo {userName} de {name}", + "importError": "Error de importación, {message}", + "exportError": "Error de exportación, {message}", + "importSuccess": "Éxito de la importación", + "fileUploadError": "Error de carga de archivos", + "fileFormatError": "Error de formato de archivo", + "groupWithSquareBrackets": "[Grupo]", + "allPermissions": "Propietario", + "appSharingDialogueTitle": "Compartir aplicaciones y permisos", + "appSocialSharing": "Comparta su aplicación y su experiencia en:", + "appSocialSharingMessage": "Hice esta aplicación con Lowcoder, ¡échale un vistazo!", + "socialShare": "Compartir en", + "shareLink": "Compartir enlace:", + "copyLink": "Copiar enlace", + "appPublicMessage": "Haz pública la aplicación. Cualquiera puede verla.", + "modulePublicMessage": "Haz público el módulo. Cualquiera puede verlo.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Publica tu aplicación en el Mercado Público. Cualquiera podrá verla y copiarla desde allí.", + "moduleMarketplaceMessage": "Publica tu Módulo en el Mercado Público. Cualquiera puede verlo y copiarlo desde allí.", + "marketplaceGoodPublishing": "Asegúrate de que tu aplicación tiene un buen nombre y es fácil de usar. Elimina cualquier información sensible antes de publicarla. Además, elimine las fuentes de datos locales y sustitúyalas por datos temporales estáticos integrados.", + "noMarketplaceApps": "Aún no hay aplicaciones en el mercado", + "errorMarketplaceApps": "Error al cargar Marketplace Apps", + "localMarketplaceTitle": "Mercado local", + "globalMarketplaceTitle": "Mercado público", + "memberPermissionList": "Permisos de los miembros:", + "orgName": "{orgName} admins", + "addMember": "Añadir miembros", + "addPermissionPlaceholder": "Introduzca un nombre para buscar miembros", + "searchMemberOrGroup": "Buscar miembros o grupos:", + "addPermissionErrorMessage": "Fallo al añadir permiso, {message}", + "copyModalTitle": "Clonar \"{name}\"", + "copyNameLabel": "{type} nombre", + "copyModalfolderLabel": "Añadir a la carpeta", + "copyNamePlaceholder": "Por favor, introduzca un nombre {type}.", + "chooseNavType": "Elija el tipo de navegación", + "createNavigation": "Crear navegación", + "howToUseAPI": "Cómo utilizar la API Rest abierta", + "support": "Ayuda", + }, + "support": { + ...en.support, + + "selfUser": "Usted", + "supportTitle": "Soporte Lowcoder", + "supportContent": "Si tiene alguna pregunta o necesita ayuda, utilice el sistema de tickets para resolver su problema rápidamente.", + "newSupportTicket": "Nuevo ticket de soporte", + "ticketTitle": "Título", + "priority": "Prioridad", + "assignee": "Cesionario", + "status": "Estado del billete", + "updatedTime": "Hora de actualización", + "active": "Activo", + "inactive": "Inactivo", + "noEmail": "No Email", + "details": "Detalles", + "reloadTickets": "Entradas Reload", + "createdDate": "Fecha de creación", + "updatedDate": "Fecha de actualización", + "description": "Descripción del problema", + "subtasks": "Subtareas", + "subtasksProgress": "Progreso de todas las subtareas", + "attachments": "Emisión de anexos", + "comments": "Comentarios", + "addComment": "Añadir comentario", + "addAttachment": "Añadir anexo", + "edit": "Editar descripción del ticket", + "save": "Guardar billete Descripción", + "cancel": "Cancelar", + "submitComment": "Enviar comentario", + "upload": "Enviar anexo", + "selectFile": "Seleccionar archivo", + "ticketDescriptionUpdated": "Descripción de la entrada actualizada correctamente", + "ticketDescriptionUpdateFailed": "Error al actualizar la descripción del ticket.", + "writeComment": "Escribe un comentario...", + "ticketCommentAdded": "¡Comentario añadido correctamente!", + "ticketCommentFailed": "No se ha podido añadir el comentario.", + "ticketCommentEmpty": "Por favor, escriba un comentario antes de enviarlo.", + "ticketAttachmentUploaded": "El archivo adjunto se ha cargado correctamente.", + "ticketAttachmentFailed": "No se ha podido cargar el archivo adjunto.", + "ticketAttachmentEmpty": "Seleccione un archivo para cargar.", + "ticketFetchError": "Error al cargar el ticket.", + "ticketNotFound": "Billete no encontrado.", + "addAttachmentFileSize": "El archivo debe pesar menos de 5 MB.", + "goBack": "Volver atrás", + "noDescription": "No hay descripción disponible.", + "createTicket": "Crear un nuevo Ticket de Soporte", + "createTicketTitlePlaceholder": "Introduzca el título (máx. 150 caracteres)", + "createTicketDescriptionTitle": "Describa su problema: cuantos más detalles, mejor:", + "createTicketDescriptionPlaceholder": "Describa el problema en detalle, incluyendo 1) Pasos para reproducir el problema, 2) Comportamiento esperado frente a comportamiento real, 3) Fragmentos de código, si procede, 4) Cualquier componente, API o configuración específicos afectados.", + "createTicketSubmit": "Enviar billete", + "createTicketInfoText": "Una vez creado el billete, puede añadir capturas de pantalla y comentarios en la sección \"Detalles\".", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Posición de los puntos de navegación", + "autoPlay": "Reproducción automática", + "showDots": "Mostrar puntos de navegación", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Nombre de paquete npm o URL no válidos.", + "pluginExisted": "Este plugin npm ya existía", + "compNotFound": "Componente {compName} No encontrado.", + "addPluginModalTitle": "Añadir plugin desde un repositorio npm", + "pluginNameLabel": "URL o nombre del paquete npm", + "noCompText": "Sin componentes.", + "compsLoading": "Cargando...", + "removePluginBtnText": "Eliminar", + "addPluginBtnText": "Añadir plugin npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "El Valor por Defecto del Botón Alternar, Por Ejemplo: Falso", + "trueDefaultText": "Ocultar", + "falseDefaultText": "Mostrar", + "trueLabel": "Texto para True", + "falseLabel": "Texto para Falso", + "trueIconLabel": "Icono de True", + "falseIconLabel": "Icono de Falso", + "iconPosition": "Icono Posición", + "showText": "Mostrar texto", + "alignment": "Alineación", + "showBorder": "Mostrar borde", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Cree aplicaciones de software para su empresa y sus clientes con un mínimo de experiencia en programación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", + "demoText": "Lowcoder | Cree aplicaciones de software para su Empresa y sus Clientes con mínima experiencia en codificación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", + "submit": "Enviar", + "style": "Estilo", + "danger": "Peligro", + "warning": "Advertencia", + "success": "Éxito", + "menu": "Menú", + "link": "Enlace", + "customAppearance": "Apariencia personalizada", + "search": "Buscar en", + "pleaseInputNumber": "Introduzca un número", + "mostValue": "Más valor", + "maxRating": "Clasificación máxima", + "notSelect": "No seleccionado", + "halfSelect": "Media selección", + "pleaseSelect": "Seleccione una opción", + "title": "Título", + "content": "Contenido", + "componentNotFound": "El componente no existe", + "example": "Ejemplos", + "defaultMethodDesc": "Establecer el valor de la propiedad {name}.", + "propertyUsage": "Puede leer información relacionada con los componentes accediendo a las propiedades de los componentes por nombre de componente en cualquier lugar donde pueda escribir JavaScript.", + "property": "Propiedades", + "propertyName": "Nombre de la propiedad", + "propertyType": "Tipo", + "propertyDesc": "Descripción", + "event": "Eventos", + "eventName": "Nombre del evento", + "eventDesc": "Descripción", + "mehtod": "Métodos", + "methodUsage": "Tiene la capacidad de interactuar con los componentes a través de sus respectivos métodos, a los que se puede acceder por sus nombres designados dentro de cualquier segmento en el que se utilice JavaScript. Además, estos componentes pueden activarse a través de la acción \"Componente de control\", que se activa en respuesta a eventos específicos.", + "methodName": "Nombre del método", + "methodDesc": "Descripción", + "showBorder": "Mostrar borde", + "haveTry": "Pruébelo usted mismo", + "settings": "Configuración", + "settingValues": "Valor de ajuste", + "defaultValue": "Valor por defecto", + "time": "Tiempo", + "date": "Fecha", + "noValue": "Ninguno", + "xAxisType": "Tipo de eje X", + "hAlignType": "Alineación horizontal", + "leftLeftAlign": "Alineación izquierda-izquierda", + "leftRightAlign": "Alineación izquierda-derecha", + "topLeftAlign": "Alineación superior izquierda", + "topRightAlign": "Alineación superior derecha", + "validation": "Validación", + "required": "Requerido", + "defaultStartDateValue": "Fecha de inicio por defecto", + "defaultEndDateValue": "Fecha de finalización por defecto", + "basicUsage": "Uso básico", + "basicDemoDescription": "Los siguientes ejemplos muestran el uso básico del componente.", + "noDefaultValue": "Sin valor por defecto", + "forbid": "Prohibido", + "placeholder": "Marcador de posición", + "pleaseInputPassword": "Introduzca una contraseña", + "password": "Contraseña", + "textAlign": "Alineación del texto", + "length": "Longitud", + "top": "Top", + "pleaseInputName": "Introduzca su nombre", + "userName": "Nombre", + "fixed": "Fijo", + "responsive": "Respuesta", + "workCount": "Recuento de palabras", + "cascaderOptions": "Opciones de Cascader", + "pleaseSelectCity": "Seleccione una ciudad", + "advanced": "Avanzado", + "showClearIcon": "Mostrar icono de borrado", + "appleOptionLabel": "🍎 Manzana", + "waterMelonOptionLabel": "🍉 Sandía", + "berryOptionLabel": "🍓 Fresa", + "lemonOptionLabel": "🍋 Limón", + "coconutOptionLabel": "🥥 Coco", + "likedFruits": "Favoritos", + "option": "Opción", + "singleFileUpload": "Carga de un solo archivo", + "multiFileUpload": "Carga múltiple de archivos", + "folderUpload": "Cargar carpeta", + "multiFile": "Varios archivos", + "folder": "Carpeta", + "open": "Abrir", + "favoriteFruits": "Frutas favoritas", + "pleaseSelectOneFruit": "Seleccione una fruta", + "notComplete": "No Completo", + "complete": "Complete", + "echart": "EChart", + "lineChart": "Gráfico lineal", + "basicLineChart": "Gráfico de líneas básico", + "lineChartType": "Tipo de gráfico de líneas", + "stackLineChart": "Línea apilada", + "areaLineChart": "Línea de área", + "scatterChart": "Gráfico de dispersión", + "scatterShape": "Forma de dispersión", + "scatterShapeCircle": "Círculo", + "scatterShapeRect": "Rectángulo", + "scatterShapeTri": "Triángulo", + "scatterShapeDiamond": "Diamante", + "scatterShapePin": "Chincheta", + "scatterShapeArrow": "Flecha", + "pieChart": "Gráfico circular", + "basicPieChart": "Gráfico circular básico", + "pieChatType": "Tipo de gráfico circular", + "pieChartTypeCircle": "Gráfico de donuts", + "pieChartTypeRose": "Gráfico de rosas", + "titleAlign": "Título Cargo", + "color": "Color", + "dashed": "Dashed", + "imADivider": "Soy una línea divisoria", + "tableSize": "Tamaño de la tabla", + "subMenuItem": "Submenú {num}", + "menuItem": "Menú {num}", + "labelText": "Etiqueta", + "labelPosition": "Etiqueta - Posición", + "labelAlign": "Etiqueta - Alinear", + "optionsOptionType": "Método de configuración", + "styleBackgroundColor": "Color de fondo", + "styleBorderColor": "Color del borde", + "styleColor": "Color de fuente", + "selectionMode": "Modo de selección de filas", + "paginationSetting": "Configuración de la paginación", + "paginationShowSizeChanger": "Ayuda a los usuarios para modificar el número de entradas por página", + "paginationShowSizeChangerButton": "Botón de cambio de talla", + "paginationShowQuickJumper": "Mostrar Quick Jumper", + "paginationHideOnSinglePage": "Ocultar cuando sólo hay una página", + "paginationPageSizeOptions": "Tamaño de página", + "chartConfigCompType": "Tipo de gráfico", + "xConfigType": "Tipo de eje X", + "loading": "Cargando", + "disabled": "Discapacitados", + "minLength": "Longitud mínima", + "maxLength": "Longitud máxima", + "showCount": "Mostrar recuento de palabras", + "autoHeight": "Altura", + "thousandsSeparator": "Separador de miles", + "precision": "Posiciones decimales", + "value": "Valor por defecto", + "formatter": "Formato", + "min": "Valor mínimo", + "max": "Valor máximo", + "step": "Tamaño del escalón", + "start": "Hora de inicio", + "end": "Fin de los tiempos", + "allowHalf": "Permitir media selección", + "filetype": "Tipo de archivo", + "showUploadList": "Mostrar lista de cargas", + "uploadType": "Tipo de carga", + "allowClear": "Mostrar icono de borrado", + "minSize": "Tamaño mínimo del archivo", + "maxSize": "Tamaño máximo del archivo", + "maxFiles": "Número máximo de archivos cargados", + "format": "Formato", + "minDate": "Fecha mínima", + "maxDate": "Fecha máxima", + "minTime": "Tiempo mínimo", + "maxTime": "Tiempo máximo", + "text": "Texto", + "type": "Tipo", + "hideHeader": "Ocultar cabecera", + "hideBordered": "Ocultar frontera", + "src": "URL de la imagen", + "showInfo": "Mostrar valor", + "mode": "Modo", + "onlyMenu": "Sólo Menú", + "horizontalAlignment": "Alineación horizontal", + "row": "Izquierda", + "column": "Top", + "leftAlign": "Alineación izquierda", + "rightAlign": "Alineación correcta", + "percent": "Porcentaje", + "fixedHeight": "Altura fija", + "auto": "Adaptable", + "directory": "Carpeta", + "multiple": "Varios archivos", + "singleFile": "Archivo único", + "manual": "Manual", + "default": "Por defecto", + "small": "Pequeño", + "middle": "Medio", + "large": "Grande", + "single": "Único", + "multi": "Múltiples", + "close": "Cerrar", + "ui": "Modo IU", + "line": "Gráfico lineal", + "scatter": "Gráfico de dispersión", + "pie": "Gráfico circular", + "basicLine": "Gráfico de líneas básico", + "stackedLine": "Gráfico de líneas apiladas", + "areaLine": "Mapa de la zona", + "basicPie": "Gráfico circular básico", + "doughnutPie": "Gráfico de donuts", + "rosePie": "Gráfico de rosas", + "category": "Categoría Eje", + "circle": "Círculo", + "rect": "Rectángulo", + "triangle": "Triángulo", + "diamond": "Diamante", + "pin": "Chincheta", + "arrow": "Flecha", + "left": "Izquierda", + "right": "Derecha", + "center": "Centro", + "bottom": "Fondo", + "justify": "Justificar ambos extremos", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Estado actual de los datos", + "preview": "Vista previa", + "property": "Propiedades", + "console": "Consola Visual Script", + "executeMethods": "Ejecutar métodos", + "noMethods": "Sin métodos.", + "methodParams": "Parámetros del método", + "methodParamsHelp": "Parámetros del método de entrada usando JSON. Por ejemplo, puede establecer los parámetros de setValue con: [1] o 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Botón Fondo", + "btnText": "Texto del botón", + "title": "Título", + "selectBackground": "Antecedentes", + }, + "idSource": { + ...en.idSource, + + "title": "Proveedor de autenticación de usuarios", + "form": "Correo electrónico", + "pay": "Premium", + "enable": "Activar", + "unEnable": "No activado", + "loginType": "Tipo de conexión", + "status": "Estado", + "desc": "Descripción", + "manual": "Libreta de direcciones:", + "syncManual": "Sincronizar libreta de direcciones", + "syncManualSuccess": "Sincronización realizada", + "enableRegister": "Permitir el registro", + "saveBtn": "Guardar y activar", + "save": "Guardar", + "none": "Ninguno", + "formPlaceholder": "Por favor, introduzca {label}", + "formSelectPlaceholder": "Por favor, seleccione el {label}", + "saveSuccess": "Guardado correctamente", + "dangerLabel": "Zona de peligro", + "dangerTip": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Proceda con precaución.", + "lastEnabledConfig": "No se puede deshabilitar/borrar la configuración ya que es la única configuración habilitada.", + "disable": "Desactivar", + "disableSuccess": "Desactivado correctamente", + "encryptedServer": "-------- Cifrado en el lado del servidor --------", + "disableTip": "Consejos", + "disableContent": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Está seguro de continuar?", + "manualTip": "", + "lockTip": "El contenido está bloqueado. Para realizar cambios, haga clic en {icon} para desbloquear.", + "lockModalContent": "La modificación del campo \"Atributo ID\" puede tener repercusiones importantes en la identificación del usuario. Por favor, confirme que entiende las implicaciones de este cambio antes de proceder.", + "payUserTag": "Premium", + "source": "Fuente", + "sourceName": "Nombre del proveedor de autenticación", + "sourceDescription": "Descripción del proveedor de autenticación", + "sourceIcon": "Icono de proveedor de autenticación", + "sourceCategory": "Categoría de proveedor de autenticación", + "souceIssuerURI": "URI del emisor del proveedor de autenticación", + "souceAuthorizationEndpoint": "Proveedor de autenticación Punto final de autorización", + "souceTokenEndpoint": "Punto final del token del proveedor de autenticación", + "souceUserInfoEndpoint": "Proveedor de autenticación Información de usuario Punto final", + "userInfoIntrospection": "Utilizar la introspección de usuarios de OpenID", + "userCanSelectAccounts": "El usuario puede seleccionar una cuenta", + "sourceCategoryEnterprise": "Identidad empresarial", + "sourceCategoryCloud": "Servicios en la nube", + "sourceCategorySocial": "Social Media", + "sourceCategoryDevelopment": "Desarrollo", + "sourceCategoryTools": "Herramientas y productividad", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Configurar vista de ranura", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "searchAnimation": "Buscar animación", + "speed": "Velocidad", + "width": "Anchura", + "height": "Altura", + "backgroundColor": "Color de fondo", + "animationStart": "Inicio de la animación", + "valueDesc": "Datos JSON actuales", + "loop": "Bucle", + "auto": "Coche", + "onHover": "Al pasar el ratón", + "onTrigger": "Al activarse", + "singlePlay": "Juego individual", + "endlessLoop": "Bucle sin fin", + "keepLastFrame": "Mantener visualizado el último fotograma", + "fit": "Ajuste", + "align": "Alinear", + "load": "En carga", + "play": "En juego", + "pause": "En pausa", + "stop": "En Stop", + "complete": "En Completo", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Título Color", + "subTitleColor": "Color del subtítulo", + "labelColor": "Color de la etiqueta", + "value": "Datos cronológicos", + "mode": "Orden de visualización", + "left": "Derecho de contenido", + "right": "Contenido Izquierda", + "alternate": "Orden alternativo de los contenidos", + "modeTooltip": "Configurar el contenido para que aparezca a izquierda/derecha o alternativamente en ambos lados de la línea de tiempo", + "reverse": "Eventos más recientes primero", + "pending": "Texto de nodo pendiente", + "pendingDescription": "Si se establece, se mostrará un último nodo con el texto y un indicador de espera.", + "defaultPending": "Mejora continua", + "clickTitleEvent": "Haga clic en Título Evento", + "clickTitleEventDesc": "Haga clic en Título Evento", + "Introduction": "Introducción Claves", + "helpTitle": "Título del cronograma (obligatorio)", + "helpsubTitle": "Subtítulo de la cronología", + "helpLabel": "Etiqueta de la línea de tiempo, utilizada para mostrar fechas", + "helpColor": "Indica el color del nodo de la línea de tiempo", + "helpDot": "Representación de nodos de la línea de tiempo como iconos de diseño de Ant", + "helpTitleColor": "Controlar individualmente el color del título del nodo", + "helpSubTitleColor": "Controlar individualmente el color del subtítulo del nodo", + "helpLabelColor": "Control individual del color del icono de nodo", + "valueDesc": "Datos de la cronología", + "clickedObjectDesc": "Datos del artículo seleccionado", + "clickedIndexDesc": "Índice de elementos pulsados", + }, + "comment": { + ...en.comment, + + "value": "Cómo listar datos", + "showSendButton": "Permitir comentarios", + "title": "Título", + "titledDefaultValue": "%d Comentario en total", + "placeholder": "Mayúsculas + Intro para comentar; @ o # para entrada rápida", + "placeholderDec": "Marcador de posición", + "buttonTextDec": "Botón Título", + "buttonText": "Cómo", + "mentionList": "Datos de la lista de menciones", + "mentionListDec": "Palabras clave con mención clave; datos de la lista con mención de valor", + "userInfo": "Información del usuario", + "dateErr": "Error de fecha", + "commentList": "Cómo hacer una lista", + "deletedItem": "Elemento suprimido", + "submitedItem": "Artículo presentado", + "deleteAble": "Mostrar botón Eliminar", + "Introduction": "Introducción Claves", + "helpUser": "Información del usuario (obligatoria)", + "helpname": "Nombre de usuario (obligatorio)", + "helpavatar": "Avatar URL (Alta prioridad)", + "helpdisplayName": "Nombre para mostrar (prioridad baja)", + "helpvalue": "Contenido", + "helpcreatedAt": "Fecha de creación", + }, + "mention": { + ...en.mention, + + "mentionList": "Datos de la lista de menciones", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Complete Value", + "checkedValueFrom": "Valor comprobado De", + "ignoreCase": "Buscar Ignorar caso", + "searchLabelOnly": "Buscar sólo etiqueta", + "searchFirstPY": "Buscar First Pinyin", + "searchCompletePY": "Buscar Pinyin completo", + "searchText": "Buscar texto", + "SectionDataName": "Autocompletar datos", + "valueInItems": "Valor en artículos", + "type": "Tipo", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Clave", + "selectLable": "Etiqueta", + "ComponentType": "Tipo de componente", + "colorIcon": "Azul", + "grewIcon": "Gris", + "noneIcon": "Ninguno", + "small": "Pequeño", + "large": "Grande", + "componentSize": "Tamaño del componente", + "Introduction": "Introducción Claves", + "helpLabel": "Etiqueta", + "helpValue": "Valor", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Columnas", + "addColumn": "Añadir columna", + "columnDefinition": "Definición de columna", + "rowDefinition": "Definición de fila", + "columnGap": "Hueco entre columnas", + "rowGap": "Hueco entre filas", + "atLeastOneColumnError": "El diseño adaptable mantiene al menos una columna", + "columnsPerRow": "Columnas por fila", + "columnsSpacing": "Espacio entre columnas (px)", + "horizontal": "Horizontal", + "vertical": "Vertical", + "mobile": "Móvil", + "tablet": "Tableta", + "desktop": "Escritorio", + "rowStyle": "Estilo Fila", + "columnStyle": "Estilo columna", + "minWidth": "Mín. Anchura", + "rowBreak": "Row Break", + "useComponentWidth": "Usar tamaño propio", + "useComponentWidthDesc": "Usa el ancho del contenedor en lugar del ancho de la aplicación", + "matchColumnsHeight": "Igualar la altura de las columnas", + "rowLayout": "Disposición de filas", + "columnsLayout": "Disposición de las columnas", + "columnsDefinitionTooltip": "Las columnas pueden definirse libremente basándose en las propiedades CSS de las columnas. Por ejemplo, 'auto auto' creará dos columnas con la misma anchura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Las filas pueden definirse libremente basándose en las propiedades CSS de las filas. Por ejemplo, 'auto auto' creará dos filas con la misma altura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "Ver zonas", + "addColumn": "Añadir áreas", + "columnDefinition": "Definición del área", + "atLeastOneColumnError": "El diseño adaptable mantiene al menos una columna", + "horizontal": "Horizontal", + "vertical": "Vertical", + "areaStyle": "Estilo columna", + "minWidth": "Mín. Anchura", + "maxWidth": "Máx. Anchura", + "width": "Anchura", + "collapsible": "¿El área es plegable?", + "matchColumnsHeight": "Zonas de partido Altura", + "orientation": "Orientación de Splitlayout", + "orientationTooltip": "El orden visual en el que se alinean las áreas. También puede añadir Componentes Splitlayout dentro de Componentes Splitlayout para conseguir diseños complejos.", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modo", + "modeInline": "En línea", + "modeVertical": "Vertical", + "modeHorizontal": "Horizontal", + "width": "Anchura", + "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", + "navStyle": "Menú de estilo", + "navItemStyle": "Estilo del elemento de menú", + "navBackground": "Imagen de fondo", + "mobileNavVerticalOrientation": "Orientación vertical", + "mobileNavVerticalMaxWidth": "Anchura máxima", + "mobileNavBarHeight": "Altura de la barra de navegación", + "mobileNavVerticalShowSeparator": "Mostrar separador", + "mobileNavIconSize": "Tamaño del icono", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Línea de fecha internacional W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawai", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Hora del Pacífico (EE.UU.)", + "UTC-06:00": "(UTC-06:00) Hora central (EE.UU.)", + "UTC-05:00": "(UTC-05:00) Hora del Este (EE.UU.)", + "UTC-04:00": "(UTC-04:00) Hora del Atlántico", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Cabo Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlín, Roma", + "UTC+02:00": "(UTC+02:00) Atenas, Bucarest", + "UTC+03:00": "(UTC+03:00) Moscú", + "UTC+04:00": "(UTC+04:00) Dubai, Mascate", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) Nueva Delhi", + "UTC+05:45": "(UTC+05:45) Katmandú", + "UTC+06:00": "(UTC+06:00) Dacca", + "UTC+06:30": "(UTC+06:30) Yangón", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Pekín, HK", + "UTC+09:00": "(UTC+09:00) Tokio, Seúl", + "UTC+09:30": "(UTC+09:30) Adelaida, Darwin", + "UTC+10:00": "(UTC+10:00) Sídney", + "UTC+11:00": "(UTC+11:00) Islas Salomón, Nueva Caledonia", + "UTC+12:00": "(UTC+12:00) Auckland, Fiyi", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "Elección de usuario", + }, + "tour": { + ...en.tour, + + "section1Title": "Pasos", + "section1Subtitle": "Pasos", + "tooltipExampleHeader": "Ejemplo:", + "tooltipSignatureHeader": "Firma:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Título", + "placeholder": "Bienvenido", + "tooltip": "El título del paso. Cualquier HTML es válido aquí.", + }, + "description": { + ...en.tour.options.description, + + "label": "Descripción", + "placeholder": "¡Bienvenido a lowcoder!", + "tooltip": "La descripción del paso. Cualquier HTML es válido aquí.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Máscara", + "tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar props personalizados, por defecto sigue la propiedad `mask` de Tour.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Flecha", + "tooltip": "Activa y desactiva la flecha o la mueve para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Tipo", + "tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores pueden ser controlados con la sección de estilo del tour principal.", + }, + "target": { + ...en.tour.options.target, + + "label": "Componente", + "tooltip": "El componente en el que quieres poner el tooltip, o déjalo vacío si simplemente quieres un modal en medio de la pantalla.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI de la imagen de portada", + "tooltip": "Un URI para una imagen que desea mostrar con el paso", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Indicadores Render", + "tooltip": "Proporciona un indicador personalizado para saber en qué paso se encuentra", + "tooltipValidTypes": "Format es una función que acepta dos args, `current` y `total` y devuelve un ReactNode", + "tooltipFunctionSignatureHeader": "Firma:", + "tooltipFunctionSignature": "(actual: número, total: número) => ReactNode", + "tooltipExampleHeader": "Ejemplo:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Desactivar la interacción", + "tooltip": "Desactiva la interacción en la zona resaltada.", + }, + "mask": { + ...en.tour.mask, + + "label": "Máscara", + "tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar accesorios personalizados, el valor predeterminado sigue la propiedad `mask` de Tour. Se puede anular a nivel de paso.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Colocación", + "tooltip": "Posición de la tarjeta guía respecto al elemento de destino. Puede anularse en el nivel de paso.", + "tooltipValidOptions": "Opciones válidas", + "tooltipValidOptionsAbove": "Por encima del componente:", + "tooltipValidOptionsLeft": "A la izquierda del componente:", + "tooltipValidOptionsRight": "A la derecha del componente:", + "tooltipValidOptionsBelow": "Debajo del componente:", + "tooltipValidOptionsOnTop": "Encima del componente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Flecha", + "tooltip": "Activa y desactiva la flecha o la desplaza para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente. Se puede anular en el nivel de paso.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Tipo", + "tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores se pueden controlar con la sección de estilo del recorrido principal. Se puede anular a nivel de paso.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Cómo desarrollar un plugin npm", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Utilizar bibliotecas de terceros", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/plantilla-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "Buscar imagen", + "searchAnimation": "Buscar animación", + "searchIcon": "Icono de búsqueda", + "noResults": "No se han encontrado resultados.", + "buySubscriptionTitle": "Desbloquear activos premium", + "buySubscriptionContent": "Este recurso es exclusivo para suscriptores de Media Package. Suscríbase a Media Package y descargue recursos de alta calidad sin límites.", + "buySubscriptionButton": "Suscríbase ahora", + }, + +}; diff --git a/translations/locales/es.js b/translations/locales/es.js index 77e78fd2ca..4d8b9f7abf 100644 --- a/translations/locales/es.js +++ b/translations/locales/es.js @@ -1,4 +1,4059 @@ import { en } from "./en.js"; export const es = { ...en, + + "productName": "Lowcoder", + "productDesc": "Cree aplicaciones de software para su empresa y sus clientes con una experiencia mínima en codificación. Lowcoder es una excelente alternativa a Retool, Appsmith y Tooljet.", + "notSupportedBrowser": "Su navegador actual puede tener problemas de compatibilidad. Para una experiencia de usuario óptima, utilice la última versión de Chrome.", + "create": "Cree", + "move": "Mover", + "addItem": "Añadir", + "newItem": "Nuevo", + "copy": "Copia", + "rename": "Cambie el nombre de", + "delete": "Borrar", + "deletePermanently": "Borrar permanentemente", + "remove": "Eliminar", + "recover": "Recuperar", + "edit": "Editar", + "view": "Ver", + "value": "Valor", + "data": "Datos", + "information": "Información", + "success": "Éxito", + "warning": "Advertencia", + "error": "Error", + "reference": "Referencia", + "text": "Texto", + "basic": "Básico", + "label": "Etiqueta", + "layout": "Diseño", + "color": "Color", + "form": "Forma", + "menu": "Menú", + "menuItem": "Elemento del menú", + "ok": "OK", + "cancel": "Cancelar", + "finish": "Acabado", + "reset": "Restablecer", + "icon": "Icono", + "code": "Código", + "title": "Título", + "emptyContent": "Contenido vacío", + "more": "Más", + "search": "Buscar en", + "back": "Volver", + "accessControl": "Control de acceso", + "copySuccess": "Copiado correctamente", + "copyError": "Error de copia", + "api": { + ...en.api, + + "publishSuccess": "Publicado con éxito", + "recoverFailed": "Recuperación fallida", + "needUpdate": "Su versión actual es obsoleta. Por favor, actualice a la última versión.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "El editor de código actual no soporta el autoformateo.", + "fold": "Pliegue", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Establecer propiedad: ___MARCADOR0___", + "clearDesc": "Borrar propiedad: ___TITULAR0___", + "resetDesc": "Restablecer propiedad: {property} al valor por defecto", + }, + "method": { + ...en.method, + + "focus": "Fijar el foco", + "focusOptions": "Opciones de enfoque. Véase HTMLElement.focus()", + "blur": "Quitar el foco", + "click": "Haga clic en", + "select": "Seleccionar todo el texto", + "setSelectionRange": "Fijar las posiciones inicial y final de la selección de texto", + "selectionStart": "Índice basado en 0 del primer carácter seleccionado", + "selectionEnd": "Índice basado en 0 del carácter después del último carácter seleccionado", + "setRangeText": "Reemplazar rango de texto", + "replacement": "Cadena a insertar", + "replaceStart": "Índice basado en 0 del primer carácter a sustituir", + "replaceEnd": "Índice basado en 0 del carácter después del último carácter a sustituir", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Error al cargar el componente. Compruebe la configuración.", + "clickToReload": "Haga clic para recargar", + "errorMsg": "Error:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Sólo admite tipos de imagen {types}.", + "exceedSizeError": "El tamaño de la imagen no debe superar {size}.", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "No se admite", + "selectAtLeastOneComponent": "Seleccione al menos un componente", + "selectCompFirst": "Seleccionar componentes antes de copiar", + "noContainerSelected": "[Bug] No hay contenedor seleccionado", + "deleteCompsSuccess": "Eliminado con éxito. Pulse {undoKey} para deshacer.", + "deleteCompsTitle": "Eliminar componentes", + "deleteCompsBody": "¿Seguro que desea suprimir {compNum} componentes seleccionados?", + "cutCompsSuccess": "Cortar con éxito. Pulse ___CARTER0___ para pegar, o ___CARTER1___ para deshacer.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Consultas de datos en su aplicación", + "globals": "Global Data Variables", + "propTipsArr": "{num} Artículos", + "propTips": "{num} Claves", + "propTipArr": "PLACEHOLDER0___ Artículo", + "propTip": "{num} Clave", + "stateTab": "Estado", + "settingsTab": "Ajustes", + "toolbarTitle": "Individualización", + "toolbarPreload": "Guiones y estilos", + "components": "Componentes activos", + "modals": "modales in-app", + "expandTip": "Haga clic para mostrar los datos de {component}.", + "collapseTip": "Haga clic para ocultar los datos de {component}.", + "layers": "Capas", + "activatelayers": "Utilizar capas dinámicas", + "selectedComponents": "Componentes seleccionados...", + "displayComponents": "control Pantalla", + "lockComponents": "control Posición", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Consultas de datos", + "run": "Ejecutar", + "noSelectedQuery": "Ninguna consulta seleccionada", + "metaData": "Metadatos de la fuente de datos", + "noMetadata": "No hay metadatos disponibles", + "metaSearchPlaceholder": "Buscar metadatos", + "allData": "Todas las mesas", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Propiedades", + "noSelectedComps": "No hay componentes seleccionados. Haga clic en un componente para ver sus propiedades.", + "createTab": "Inserte", + "searchPlaceHolder": "Buscar componentes o módulos", + "uiComponentTab": "Componentes", + "extensionTab": "Extensiones", + "modulesTab": "Módulos", + "moduleListTitle": "Módulos", + "pluginListTitle": "Plugins", + "emptyModules": "Los módulos son Mikro-Apps reutilizables. Puede incrustarlos en su App.", + "searchNotFound": "¿No encuentra el componente adecuado?", + "emptyPlugins": "No se han añadido plugins", + "contactUs": "Contacte con nosotros", + "issueHere": "aquí.", + }, + "prop": { + ...en.prop, + + "expand": "Ampliar", + "columns": "Columnas", + "videokey": "Llave de vídeo", + "rowSelection": "Selección de filas", + "toolbar": "Barra de herramientas", + "pagination": "Paginación", + "logo": "Logotipo", + "style": "Estilo", + "inputs": "Entradas", + "meta": "Metadatos", + "data": "Datos", + "hide": "Ocultar", + "loading": "Cargando", + "disabled": "Discapacitados", + "placeholder": "Marcador de posición", + "showClear": "Mostrar botón de borrado", + "showSearch": "Búsqueda en", + "defaultValue": "Valor por defecto", + "required": "Campo obligatorio", + "readOnly": "Sólo lectura", + "readOnlyTooltip": "Los componentes de sólo lectura parecen normales pero no pueden modificarse.", + "minimum": "Mínimo", + "maximum": "Máximo", + "regex": "Regex", + "minLength": "Longitud mínima", + "maxLength": "Longitud máxima", + "height": "Altura", + "width": "Anchura", + "selectApp": "Seleccionar aplicación", + "showCount": "Mostrar recuento", + "textType": "Tipo de texto", + "customRule": "Norma personalizada", + "customRuleTooltip": "Una cadena no vacía indica un error; vacía o nula significa que se ha superado la validación. Ejemplo:", + "manual": "Manual", + "map": "Mapa", + "json": "JSON", + "use12Hours": "Utilice el formato de 12 horas", + "hourStep": "Hora Paso", + "minuteStep": "Paso del minuto", + "secondStep": "Segundo paso", + "minDate": "Fecha mínima", + "maxDate": "Fecha máxima", + "minTime": "Tiempo mínimo", + "maxTime": "Tiempo máximo", + "type": "Tipo", + "showLabel": "Mostrar etiqueta", + "showHeader": "Mostrar cabecera", + "showBody": "Mostrar cuerpo", + "showSider": "Mostrar Sider", + "innerSider": "Páginas interiores", + "showFooter": "Mostrar pie de página", + "maskClosable": "Haga clic fuera para cerrar", + "toggleClose": "Activar el botón Cerrar", + "showMask": "Mostrar máscara", + "textOverflow": "Desbordamiento de texto", + "scrollbar": "Mostrar barras de desplazamiento", + "siderScrollbar": "Mostrar barras de desplazamiento en Sider", + "siderRight": "Show sider a la derecha", + "siderWidth": "Ancho Sider", + "siderWidthTooltip": "La anchura del navegador admite porcentajes (%) y píxeles (px).", + "siderCollapsedWidth": "Sider Anchura colapsada", + "siderCollapsedWidthTooltip": "La anchura colapsada de Sider admite porcentajes (%) y píxeles (px).", + "siderCollapsible": "Sider plegable", + "siderCollapsed": "Sider Colapsado", + "contentScrollbar": "Mostrar barras de desplazamiento en el contenido", + "appID": "Id de aplicación", + "showApp": "Mostrar una aplicación en el área de contenido", + "showAppTooltip": "Puede mostrar aplicaciones completas en el área de contenido. Tenga en cuenta que los módulos no admiten entradas, salidas, eventos ni métodos.", + "baseURL": "URL base de la API", + "horizontal": "Horizontal", + "minHorizontalWidth": "Anchura horizontal mínima", + "component": "Identificadores de componentes propios", + "className": "Nombre de la clase CSS", + "dataTestId": "Identificación individual", + "preventOverwriting": "Evitar la sobreescritura de estilos", + "color": "Color", + "horizontalGridCells": "Celdas de cuadrícula horizontales", + "verticalGridCells": "Celdas de cuadrícula vertical", + "showHorizontalScrollbar": "Mostrar barra de desplazamiento horizontal", + "showVerticalScrollbar": "Mostrar barra de desplazamiento vertical", + "timeZone": "Zona horaria", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Coche", + "fixed": "Fijo", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Mouseover", + "wrap": "Envolver", + }, + "labelProp": { + ...en.labelProp, + + "text": "Etiqueta", + "tooltip": "Información sobre herramientas", + "position": "Posición", + "collapse": "Colapso", + "left": "Izquierda", + "right": "Derecha", + "top": "Top", + "align": "Alineación", + "width": "Anchura", + "widthTooltip": "La anchura de la etiqueta admite porcentajes (%) y píxeles (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Controladores de eventos", + "emptyEventHandlers": "Sin controladores de eventos", + "incomplete": "Selección incompleta", + "inlineEventTitle": "En {eventName}", + "event": "Evento", + "action": "Acción", + "noSelect": "Sin selección", + "runQuery": "Ejecutar una consulta de datos", + "selectQuery": "Seleccionar consulta de datos", + "controlComp": "Control a Component", + "runScript": "Ejecutar JavaScript", + "runScriptPlaceHolder": "Escriba aquí el código", + "component": "Componente", + "method": "Método", + "setTempState": "Establecer un valor de Estado Temporal", + "state": "Estado", + "triggerModuleEvent": "Activar un evento de módulo", + "moduleEvent": "Módulo Evento", + "goToApp": "Ir a otra aplicación", + "queryParams": "Parámetros de consulta", + "hashParams": "Parámetros Hash", + "showNotification": "Mostrar una notificación", + "text": "Texto", + "level": "Nivel", + "duration": "Duración", + "notifyDurationTooltip": "La unidad de tiempo puede ser 's' (segundo, por defecto) o 'ms' (milisegundo). La duración máxima es {max} segundos", + "goToURL": "Abrir una URL", + "openInNewTab": "Abrir en una nueva pestaña", + "copyToClipboard": "Copiar un valor en el portapapeles", + "copyToClipboardValue": "Valor", + "export": "Exportar datos", + "exportNoFileType": "Sin selección (opcional)", + "fileName": "Nombre del archivo", + "fileNameTooltip": "Incluya la extensión para especificar el tipo de archivo, por ejemplo, 'imagen.png'", + "fileType": "Tipo de archivo", + "condition": "Corre sólo cuando...", + "conditionTooltip": "Ejecutar el controlador de eventos sólo cuando esta condición se evalúa como \"true\".", + "debounce": "Rebote para", + "throttle": "Acelerador para", + "slowdownTooltip": "Utiliza debounce o throttle para controlar la frecuencia de los disparos de acción. La unidad de tiempo puede ser \"ms\" (milisegundo, por defecto) o \"s\" (segundo).", + "notHandledError": "No manipulado", + "currentApp": "Actual", + "inputEventHandlers": "Manejadores de eventos de entrada", + "inputEventHandlersDesc": "Controladores de eventos relacionados con la entrada del usuario", + "buttonEventHandlers": "Controladores de eventos de botones", + "buttonEventHandlersDesc": "Controladores de eventos relacionados con pulsaciones de botones", + "changeEventHandlers": "Cambiar los controladores de eventos", + "changeEventHandlersDesc": "Controladores de eventos relacionados con cambios de valor", + "editedEventHandlers": "Editar controladores de eventos", + "editedEventHandlersDesc": "Controladores de eventos relacionados con el estado editado de los elementos", + "clickEventHandlers": "Controladores de eventos de clic", + "clickEventHandlersDesc": "Controladores de eventos relacionados con los clics", + "keyDownEventHandlers": "Manejadores de eventos de teclas pulsadas", + "keyDownEventHandlersDesc": "Controladores de eventos relacionados con eventos de teclas pulsadas", + "checkboxEventHandlers": "Controladores de eventos de casillas de verificación", + "checkboxEventHandlersDesc": "Controladores de Eventos relacionados con Cambios de Casilla", + "dragEventHandlers": "Controladores de eventos de arrastre", + "dragEventHandlersDesc": "Controladores de Eventos relacionados con Eventos de Arrastrar y Soltar", + "elementEventHandlers": "Controladores de eventos de elementos", + "elementEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Elementos de Datos genéricos", + "mediaEventHandlers": "Controladores de eventos multimedia", + "mediaEventHandlersDesc": "Controladores de eventos relacionados con eventos multimedia", + "scannerEventHandlers": "Controladores de eventos del escáner", + "scannerEventHandlersDesc": "Manejadores de eventos relacionados con eventos de escáner", + "chartEventHandlers": "Controladores de eventos de gráficos", + "chartEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Gráficos", + "geoMapEventHandlers": "Manejadores de eventos de Geo Map", + "geoMapEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Geo Mapas", + "stepEventHandlers": "Manejadores de eventos por pasos", + "stepEventHandlersDesc": "Controladores de eventos relacionados con Step UI Events", + "shareEventHandlers": "Compartir controladores de eventos", + "shareEventHandlersDesc": "Manejadores de Eventos relacionados con Compartir Eventos", + "selectEventHandlers": "Seleccionar controladores de eventos", + "selectEventHandlersDesc": "Manejadores de Eventos relacionados con Seleccionar Eventos", + "meetingEventHandlers": "Manejadores de eventos de reuniones", + "meetingEventHandlersDesc": "Manejadores de Eventos relacionados con Eventos de Reunión", + "collaborationEventHandlers": "Manejadores de eventos de colaboración", + "collaborationEventHandlersDesc": "Manejadores de eventos relacionados con eventos de colaboración", + "set": "Establecer", + "clear": "Claro", + "reset": "Restablecer", + "messageType": "Tipo de mensaje", + "placement": "Colocación", + "description": "Descripción", + }, + "event": { + ...en.event, + + "submit": "Enviar", + "submitDesc": "Activadores al enviar", + "change": "Cambia", + "changeDesc": "Activadores de cambios de valor", + "focus": "Enfoque", + "focusDesc": "Activadores de Focus", + "blur": "Desenfoque", + "blurDesc": "Desenfoque", + "click": "Haga clic en", + "clickDesc": "Disparadores al hacer clic", + "doubleClick": "Doble clic", + "doubleClickDesc": "Disparadores al hacer doble clic", + "rightClick": "Clic derecho", + "rightClickDesc": "Disparadores al hacer clic con el botón derecho", + "keyDown": "Tecla Abajo", + "keyDownDesc": "Disparos al pulsar una tecla", + "select": "Seleccione", + "selectDesc": "Activadores al seleccionar", + "checked": "Comprobado", + "checkedDesc": "Disparadores cuando se marca una casilla de verificación", + "unchecked": "Sin marcar", + "uncheckedDesc": "Disparadores cuando una casilla de verificación está Desmarcada", + "drag": "Arrastre", + "dragDesc": "Activadores de arrastre", + "drop": "Drop", + "dropDesc": "Disparadores al caer", + "open": "Abrir", + "openDesc": "Desencadenantes al abrir", + "mute": "Silenciar", + "muteDesc": "Disparos al silenciar un micrófono", + "unmute": "Desactivar", + "unmuteDesc": "Disparadores al anular el silencio de un micrófono", + "showCamera": "Mostrar cámara", + "showCameraDesc": "Se activa cuando Mostrar cámara está activado", + "hideCamera": "Ocultar cámara", + "hideCameraDesc": "Se activa cuando Mostrar cámara está desactivado", + "shareScreen": "Compartir pantalla", + "shareScreenDesc": "Activadores en la pantalla Compartir", + "shareScreenEnd": "Compartir pantalla Fin", + "shareScreenEndDesc": "Disparadores al final de la pantalla Compartir", + "shareControl": "Compartir Control", + "shareControlDesc": "Activadores del control de acciones", + "shareControlEnd": "Control de acciones Fin", + "shareControlEndDesc": "Activadores en el extremo de control de acciones", + "shareContent": "Compartir contenido", + "shareContentDesc": "Desencadenantes al compartir contenido", + "shareContentEnd": "Compartir contenido Fin", + "shareContentEndDesc": "Desencadenantes al final de Compartir contenido", + "stopShare": "Dejar de compartir", + "stopShareDesc": "Activadores en Stop Share", + "meetingStart": "Inicio de la reunión", + "meetingStartDesc": "Activadores al inicio de la reunión", + "meetingEnd": "Fin de la reunión", + "meetingEndDesc": "Desencadenantes al final de la reunión", + "meetingJoin": "Reunión Únete", + "meetingJoinDesc": "Desencadenantes al unirse a una reunión", + "meetingLeave": "Permiso de reunión", + "meetingLeaveDesc": "Desencadenantes de la baja por reunión", + "play": "Jugar", + "playDesc": "Activadores en Play", + "pause": "Pausa", + "pauseDesc": "Disparadores en pausa", + "ended": "Finalizado", + "endedDesc": "Disparadores en Ended", + "step": "Paso", + "stepDesc": "Desencadenantes en Step", + "next": "Siguiente", + "nextDesc": "Activadores en Siguiente", + "finished": "Terminado", + "finishedDesc": "Desencadenantes al finalizar", + "saved": "Guardado", + "savedDesc": "Disparadores cuando se guarda un elemento", + "edited": "Editado", + "editedDesc": "Se activa cuando se edita un elemento", + "geoMapMove": "Mapa geográfico Mover", + "geoMapMoveDesc": "Disparadores cuando los usuarios mueven Geo Map", + "geoMapZoom": "Mapa geográfico Zoom", + "geoMapZoomDesc": "Disparadores cuando los usuarios hacen zoom en Geo Map", + "geoMapSelect": "Seleccionar mapa geográfico", + "geoMapSelectDesc": "Disparadores cuando los usuarios seleccionan un elemento en Geo Map", + "scannerSuccess": "Éxito del escáner", + "scannerSuccessDesc": "Se activa cuando un escáner explora correctamente", + "scannerError": "Error de escáner", + "scannerErrorDesc": "Disparadores cuando un escáner falla al escanear", + "chartZoom": "Zoom del gráfico", + "chartZoomDesc": "Disparadores en el Zoom del Gráfico", + "chartHover": "Gráfico Hover", + "chartHoverDesc": "Disparadores al pasar el ratón por encima del gráfico", + "chartSelect": "Seleccionar gráfico", + "chartSelectDesc": "Disparadores en la selección de gráficos", + "chartDeselect": "Deseleccionar gráfico", + "chartDeselectDesc": "Desmarcar disparadores en el gráfico", + "close": "Cerrar", + "closeDesc": "Desencadenantes al cerrar", + "parse": "Parse", + "parseDesc": "Disparadores en Parse", + "success": "Éxito", + "successDesc": "Activadores del éxito", + "delete": "Borrar", + "deleteDesc": "Disparadores al suprimir", + "mention": "Mencione", + "mentionDesc": "Activadores de mención", + "search": "Buscar en", + "searchDesc": "Activadores de búsqueda", + "selectedChange": "Cambio de selección", + "selectedChangeDesc": "Desencadenantes de la selección modificada", + "clickExtra": "Haga clic en Acción", + "clickExtraDesc": "Disparadores al hacer clic en un elemento adicional", + "start": "Inicio", + "startDesc": "Disparadores al inicio", + "resume": "Currículum", + "resumeDesc": "Desencadenantes en el currículum", + "countdown": "Cuenta atrás", + "countdownDesc": "Disparos al finalizar la cuenta atrás", + "reset": "Fin de la reinicialización", + "resetDesc": "Disparos al reiniciar el temporizador", + "refresh": "Actualizar", + "refreshDesc": "Activadores al actualizar", + }, + "style": { + ...en.style, + + "boxShadowColor": "Sombra Color", + "boxShadow": "Caja Sombra", + "opacity": "Opacidad", + "animation": "Animación", + "animationIterationCount": "Recuento de iteraciones de animación", + "animationDelay": "Retraso de animación", + "animationDuration": "Duración de la animación", + "resetTooltip": "Restablecer estilos. Borre el campo de entrada para restablecer un estilo individual.", + "textColor": "Color del texto", + "contrastText": "Contraste Color del texto", + "generated": "Generado", + "customize": "Personalice", + "staticText": "Texto estático", + "accent": "Acento", + "validate": "Mensaje de validación", + "border": "Color del borde", + "borderRadius": "Radio del borde", + "borderWidth": "Anchura del borde", + "borderStyle": "Estilo de borde", + "background": "Color de fondo", + "headerBackground": "Color de fondo de la cabecera", + "siderBackground": "Sider Color de fondo", + "footerBackground": "Color de fondo del pie de página", + "fill": "Rellene", + "track": "Pista", + "links": "Enlaces", + "thumb": "Pulgar", + "thumbBorder": "Borde del pulgar", + "checked": "Comprobado", + "unchecked": "Sin marcar", + "handle": "Mango", + "tags": "Etiquetas", + "tagsText": "Etiquetas Texto", + "multiIcon": "Icono de selección múltiple", + "tabText": "Texto de la pestaña", + "tabAccent": "Acento de lengüeta", + "checkedBackground": "Color de fondo marcado", + "uncheckedBackground": "Color de fondo sin marcar", + "uncheckedBorder": "Color del borde sin marcar", + "indicatorBackground": "Indicador Color de fondo", + "tableCellText": "Texto celular", + "selectedRowBackground": "Color de fondo de la fila seleccionada", + "hoverRowBackground": "Color de fondo de la fila Hover", + "hoverBackground": "Color de fondo", + "textTransform": "Transformación de texto", + "textDecoration": "Decoración de texto", + "alternateRowBackground": "Color de fondo de fila alternativo", + "tableHeaderBackground": "Color de fondo de la cabecera", + "tableHeaderText": "Texto de cabecera", + "toolbarBackground": "Color de fondo de la barra de herramientas", + "toolbarText": "Texto de la barra de herramientas", + "pen": "Pluma", + "footerIcon": "Icono de pie de página", + "tips": "Consejos", + "margin": "Margen", + "padding": "Acolchado", + "marginLeft": "Margen izquierdo", + "marginRight": "Margen derecho", + "marginTop": "Margen superior", + "marginBottom": "Margen inferior", + "containerHeaderPadding": "Relleno de cabecera", + "containerFooterPadding": "Relleno de pie de página", + "containerSiderPadding": "Acolchado Sider", + "containerBodyPadding": "Acolchado corporal", + "minWidth": "Anchura mínima", + "aspectRatio": "Relación de aspecto", + "text": "Texto", + "textSize": "Tamaño del texto", + "textWeight": "Peso del texto", + "fontFamily": "Familia de fuentes", + "fontStyle": "Estilo de fuente", + "backgroundImage": "Imagen de fondo", + "backgroundImageRepeat": "Repetición de fondo", + "backgroundImageSize": "Tamaño del fondo", + "backgroundImagePosition": "Antecedentes", + "backgroundImageOrigin": "Antecedentes Origen", + "headerBackgroundImage": "Imagen de fondo", + "headerBackgroundImageRepeat": "Repetición de la imagen de fondo", + "headerBackgroundImageSize": "Tamaño de la imagen de fondo", + "headerBackgroundImagePosition": "Posición de la imagen de fondo", + "headerBackgroundImageOrigin": "Origen de la imagen de fondo", + "footerBackgroundImage": "Imagen de fondo", + "footerBackgroundImageRepeat": "Repetición de la imagen de fondo", + "footerBackgroundImageSize": "Tamaño de la imagen de fondo", + "footerBackgroundImagePosition": "Posición de la imagen de fondo", + "footerBackgroundImageOrigin": "Origen de la imagen de fondo", + "rotation": "Rotación", + "alternateBackground": "Color de fondo alternativo", + "headerText": "Color del texto de cabecera", + "labelColor": "Color de la etiqueta", + "label": "Color de la etiqueta", + "lineHeight": "Altura de línea", + "subTitleColor": "Color del subtítulo", + "titleText": "Título Color", + "success": "Éxito Color", + "siderBackgroundImage": "Sider Imagen de fondo", + "siderBackgroundImageRepeat": "Sider Repetición de la imagen de fondo", + "siderBackgroundImageSize": "Sider Tamaño de la imagen de fondo", + "siderBackgroundImagePosition": "Sider Posición de la imagen de fondo", + "siderBackgroundImageOrigin": "Sider Origen de la imagen de fondo", + "activeBackground": "Color de fondo activo", + "labelBackground": "Color de fondo de la etiqueta", + + "radiusTip": "Especifica el radio de las esquinas del elemento. Ejemplo: 5px, 50% o 1em.", + "gapTip": "Especifica el espacio entre filas y columnas en un contenedor de cuadrícula o flex. Ejemplo: 10px, 1rem o 5%.", + "cardRadiusTip": "Define el radio de las esquinas para los componentes de tarjeta. Ejemplo: 10px, 15px.", + "borderWidthTip": "Especifica el ancho del borde del elemento. Ejemplo: 1px, 0.5em o fino.", + "borderStyleTip": "Establece el estilo del borde. Ejemplo: sólido, discontinuo, punteado o ninguno.", + "marginTip": "Define el margen exterior alrededor de un elemento. Ejemplo: 10px, 2em o auto. También se puede combinar como: 0px 20px. O incluso separar para las 4 direcciones como: 0px 1px 5px 2px.", + "directionTip": "Especifica la dirección del diseño. Ejemplo: row, column o row-reverse.", + "detailSizeTip": "Define el tamaño de detalles específicos en el diseño. Ejemplo: 10px, 2em o 80%.", + "chartOpacityTip": "Especifica la opacidad del gráfico. Ejemplo: 1 (opaco), 0.5 (50% transparente).", + "chartBoxShadowTip": "Define la sombra proyectada por el cuadro del gráfico. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Establece el estilo del borde del gráfico. Ejemplo: sólido, discontinuo o punteado.", + "chartBorderRadiusTip": "Especifica el radio de las esquinas del borde del gráfico. Ejemplo: 10px, 20%.", + "chartBorderWidthTip": "Especifica el ancho del borde del gráfico. Ejemplo: 2px, 0.5em.", + "chartTextSizeTip": "Especifica el tamaño de la fuente para el texto del gráfico. Ejemplo: 16px, 1em o 120%.", + "chartTextWeightTip": "Especifica el peso de la fuente para el texto del gráfico. Ejemplo: normal, negrita o 700.", + "chartFontFamilyTip": "Especifica la familia de fuentes para el texto del gráfico. Ejemplo: Arial, Helvetica o 'Times New Roman'.", + "chartFontStyleTip": "Especifica el estilo de la fuente para el texto del gráfico. Ejemplo: normal, cursiva o oblicua.", + "animationIterationCountTip": "Define cuántas veces debe ejecutarse una animación. Ejemplo: infinito, 1 o 3.", + "opacityTip": "Establece el nivel de transparencia del elemento. Ejemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisible).", + "boxShadowColorTip": "Define el color de la sombra del cuadro. Ejemplo: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Establece el color de fondo del gráfico. Ejemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Especifica los colores degradados para el fondo del gráfico. Ejemplo: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Define el color de la sombra del gráfico. Ejemplo: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Especifica el color del borde del gráfico. Ejemplo: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Establece el color del texto del gráfico. Ejemplo: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Define la sombra proyectada por un elemento. Ejemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Especifica el retraso antes de que comience la animación. Ejemplo: 1s, 500ms, 0.", + "animationDurationTip": "Establece la duración de la animación. Ejemplo: 2s, 3s, 500ms.", + "paddingTip": "Define el espacio interior dentro de un elemento. Ejemplo: 10px, 2em, 5%. También se puede combinar como: 0px 20px. O separar para las 4 direcciones: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Define el espacio interior para el encabezado del contenedor. Ejemplo: 10px, 1rem.", + "containerSiderPaddingTip": "Define el espacio interior para el lateral del contenedor. Ejemplo: 8px, 1em.", + "containerFooterPaddingTip": "Define el espacio interior para el pie de página del contenedor. Ejemplo: 12px, 1rem.", + "containerBodyPaddingTip": "Define el espacio interior para el cuerpo del contenedor. Ejemplo: 15px, 2em.", + "textSizeTip": "Especifica el tamaño de la fuente del texto. Ejemplo: 14px, 1.2em, 110%.", + "textWeightTip": "Especifica el peso de la fuente del texto. Ejemplo: normal, negrita, 400.", + "fontFamilyTip": "Especifica la familia de fuentes del texto. Ejemplo: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Define la decoración del texto. Ejemplo: subrayado, tachado, ninguno.", + "textTransformTip": "Especifica la capitalización del texto. Ejemplo: mayúsculas, minúsculas, capitalizar.", + "fontStyleTip": "Define el estilo de la fuente del texto. Ejemplo: normal, cursiva, oblicua.", + "backgroundImageTip": "Especifica la imagen de fondo de un elemento. Ejemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Especifica la imagen de fondo para el encabezado. Ejemplo: url('header.jpg').", + "footerBackgroundImageTip": "Especifica la imagen de fondo para el pie de página. Ejemplo: url('footer.jpg').", + "backgroundImageRepeatTip": "Define cómo se repite la imagen de fondo. Ejemplo: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del encabezado. Ejemplo: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Define cómo se repite la imagen de fondo del pie de página. Ejemplo: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Define el tamaño de la imagen de fondo. Ejemplo: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Define la posición de la imagen de fondo. Ejemplo: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo. Ejemplo: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del encabezado. Ejemplo: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Especifica el área de posicionamiento de la imagen de fondo del pie de página. Ejemplo: padding-box, border-box, content-box.", + "rotationTip": "Especifica el ángulo de rotación del elemento. Ejemplo: 45deg, 90deg, -180deg.", + "lineHeightTip": "Define la altura de una línea de texto. Ejemplo: 1.5, 2, 120%." + + }, + "export": { + ...en.export, + + "hiddenDesc": "Si es true, el componente se oculta", + "disabledDesc": "Si es true, el componente está desactivado y no es interactivo", + "visibleDesc": "Si es verdadero, el componente es visible", + "inputValueDesc": "Valor actual de la entrada", + "invalidDesc": "Indica si el valor no es válido", + "placeholderDesc": "Texto de marcador de posición cuando no se establece ningún valor", + "requiredDesc": "Si es verdadero, se requiere un valor válido", + "submitDesc": "Enviar formulario", + "richTextEditorValueDesc": "Valor actual del Editor", + "richTextEditorReadOnlyDesc": "Si es true, el Editor es de sólo lectura", + "richTextEditorHideToolBarDesc": "Si es true, la barra de herramientas se oculta", + "jsonEditorDesc": "Datos JSON actuales", + "sliderValueDesc": "Valor seleccionado actualmente", + "sliderMaxValueDesc": "Valor máximo de la corredera", + "sliderMinValueDesc": "Valor mínimo de la corredera", + "sliderStartDesc": "Valor del punto de partida seleccionado", + "sliderEndDesc": "Valor del punto final seleccionado", + "ratingValueDesc": "Clasificación seleccionada actualmente", + "ratingMaxDesc": "Valor nominal máximo", + "datePickerValueDesc": "Fecha seleccionada actualmente", + "datePickerFormattedValueDesc": "Fecha seleccionada con formato", + "datePickerTimestampDesc": "Marca de tiempo de la fecha seleccionada", + "dateRangeStartDesc": "Fecha de inicio de la serie", + "dateRangeEndDesc": "Fecha final del intervalo", + "dateRangeStartTimestampDesc": "Fecha de inicio", + "dateRangeEndTimestampDesc": "Fecha de finalización", + "dateRangeFormattedValueDesc": "Intervalo de fechas formateado", + "dateRangeFormattedStartValueDesc": "Fecha de inicio con formato", + "dateRangeFormattedEndValueDesc": "Fecha final con formato", + "timePickerValueDesc": "Hora seleccionada actualmente", + "timePickerFormattedValueDesc": "Hora seleccionada con formato", + "timeRangeStartDesc": "Hora de inicio de la cadena", + "timeRangeEndDesc": "Hora de finalización de la gama", + "timeRangeFormattedValueDesc": "Intervalo de tiempo formateado", + "timeRangeFormattedStartValueDesc": "Hora de inicio con formato", + "timeRangeFormattedEndValueDesc": "Hora final con formato", + "timeZone": "Huso horario", + "timeZoneDesc": "Zona horaria de la fecha seleccionada", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Introduzca una dirección de correo electrónico válida", + "url": "Introduzca una URL válida", + "regex": "Haga coincidir el patrón especificado", + "maxLength": "Demasiados caracteres, actual: {length}, máximo: {maxLength}", + "minLength": "No hay suficientes caracteres, actual: {length}, mínimo: {minLength}", + "maxValue": "El valor excede el máximo, actual: {value}, máximo: {max}", + "minValue": "Valor por debajo del mínimo, actual: {value}, mínimo: {min}", + "maxTime": "El tiempo excede el máximo, actual: {time}, máximo: {maxTime}", + "minTime": "Tiempo por debajo del mínimo, actual: {time}, mínimo: {minTime}", + "maxDate": "La fecha excede el máximo, actual: {date}, máximo: {maxDate}", + "minDate": "Fecha por debajo del mínimo, actual: {date}, mínimo: {minDate}", + }, + "query": { + ...en.query, + + "noQueries": "No hay consultas de datos disponibles.", + "queryTutorialButton": "Ver los documentos de {value}.", + "datasource": "Sus fuentes de datos", + "newDatasource": "Nueva fuente de datos", + "generalTab": "General", + "notificationTab": "Notificación", + "advancedTab": "Avanzado", + "showFailNotification": "Mostrar notificación en caso de fallo", + "failCondition": "Condiciones de fallo", + "failConditionTooltip1": "Personalice las condiciones de fallo y las notificaciones correspondientes.", + "failConditionTooltip2": "Si alguna condición resulta verdadera, la consulta se marca como fallida y se activa la notificación correspondiente.", + "showSuccessNotification": "Mostrar notificación de éxito", + "successMessageLabel": "Mensaje de éxito", + "successMessage": "Corre con éxito", + "notifyDuration": "Duración", + "notifyDurationTooltip": "Duración de la notificación. La unidad de tiempo puede ser \"s\" (segundo, por defecto) o \"ms\" (milisegundo). El valor por defecto es {default}s. El valor máximo es {max}s.", + "successMessageWithName": "{name} ejecución correcta", + "failMessageWithName": "{name} ejecución fallida: {result}", + "showConfirmationModal": "Mostrar modal de confirmación antes de ejecutar", + "confirmationMessageLabel": "Mensaje de confirmación", + "confirmationMessage": "¿Está seguro de que desea ejecutar esta consulta de datos?", + "newQuery": "Nueva consulta de datos", + "newFolder": "Nueva carpeta", + "recentlyUsed": "Usado recientemente", + "folder": "Carpeta", + "folderNotEmpty": "La carpeta no está vacía", + "dataResponder": "Respuesta de datos", + "tempState": "Estado Temporal", + "transformer": "Transformador", + "quickRestAPI": "Consulta REST", + "quickStreamAPI": "Consulta de flujos", + "quickGraphql": "Consulta GraphQL", + "lowcoderAPI": "API Lowcoder", + "executeJSCode": "Ejecutar código JavaScript", + "importFromQueryLibrary": "Importar desde la biblioteca de consultas", + "importFromFile": "Importar desde archivo", + "triggerType": "Activado cuando...", + "triggerTypeAuto": "Cuando cambian las entradas o después de que se cargue la aplicación (página)", + "triggerTypePageLoad": "Después de que se cargue la aplicación (página)", + "triggerTypeManual": "Solo cuando lo activas manualmente", + "triggerTypeInputChange": "Cuando cambian las entradas", + "triggerTypeQueryExec": "Después de la ejecución de la consulta", + "triggerTypeTimeout": "Después de que la aplicación (página) se carga y se produce el tiempo de espera", + "delayTime": "Tiempo de retraso", + "chooseDataSource": "Elegir fuente de datos", + "method": "Método", + "updateExceptionDataSourceTitle": "Actualizar fuente de datos que falla", + "updateExceptionDataSourceContent": "Actualice la siguiente consulta con la misma fuente de datos que falla:", + "update": "Actualización", + "disablePreparedStatement": "Desactivar declaraciones preparadas", + "disablePreparedStatementTooltip": "Desactivar las sentencias preparadas puede generar SQL dinámico, pero aumenta el riesgo de inyección SQL.", + "timeout": "Tiempo de espera después de", + "timeoutTooltip": "Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor por defecto: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Por ejemplo, 300 (es decir, 300 ms), 800 ms, 5 s.", + "periodic": "Ejecute esta consulta de datos periódicamente", + "periodicTime": "Periodo", + "periodicTimeTooltip": "Periodo entre ejecuciones sucesivas. Unidad por defecto: ms. Unidades de entrada admitidas: ms, s. Valor mínimo: 100ms. La ejecución periódica se desactiva para valores inferiores a 100ms. Por ejemplo, 300 (es decir, 300ms), 800ms, 5s.", + "cancelPrevious": "Ignorar los resultados de ejecuciones anteriores no finalizadas", + "cancelPreviousTooltip": "Si se desencadena una nueva ejecución, se ignorará el resultado de las ejecuciones anteriores no completadas si no se completaron, y estas ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", + "dataSourceStatusError": "Si se desencadena una nueva ejecución, el resultado de las ejecuciones anteriores no completadas se ignorará si las ejecuciones anteriores no se completaron, y las ejecuciones ignoradas no desencadenarán la lista de eventos de la consulta.", + "success": "Éxito", + "fail": "Fallo", + "successDesc": "Se activa cuando la ejecución tiene éxito", + "failDesc": "Se activa cuando falla la ejecución", + "fixedDelayError": "Consulta no ejecutada", + "execSuccess": "Corre con éxito", + "execFail": "Ejecución fallida", + "execIgnored": "Los resultados de esta consulta fueron ignorados", + "deleteSuccessMessage": "Eliminado con éxito. Puede utilizar {undoKey} para deshacer el borrado.", + "dataExportDesc": "Datos obtenidos por la consulta actual", + "codeExportDesc": "Código de estado actual de la consulta", + "successExportDesc": "Si la consulta actual se ha ejecutado correctamente", + "messageExportDesc": "Información devuelta por la consulta actual", + "extraExportDesc": "Otros datos de la consulta actual", + "isFetchingExportDesc": "Es la consulta actual en la solicitud", + "runTimeExportDesc": "Tiempo de ejecución de la consulta actual (ms)", + "latestEndTimeExportDesc": "Último tiempo de ejecución", + "triggerTypeExportDesc": "Tipo de disparador", + "chooseResource": "Elija un recurso", + "createDataSource": "Crear una nueva fuente de datos", + "editDataSource": "Editar", + "datasourceName": "Nombre", + "datasourceNameRuleMessage": "Introduzca un nombre de fuente de datos", + "generalSetting": "Ajustes generales", + "advancedSetting": "Configuración avanzada", + "port": "Puerto", + "portRequiredMessage": "Introduzca un puerto", + "portErrorMessage": "Introduzca un puerto correcto", + "connectionType": "Tipo de conexión", + "regular": "Regular", + "host": "Anfitrión", + "hostRequiredMessage": "Introduzca un nombre de dominio de host o una dirección IP", + "userName": "Nombre de usuario", + "password": "Contraseña", + "encryptedServer": "-------- Cifrado en el lado del servidor --------", + "uriRequiredMessage": "Introduzca un URI", + "urlRequiredMessage": "Introduzca una URL", + "uriErrorMessage": "Introduzca un URI correcto", + "urlErrorMessage": "Introduzca una URL correcta", + "httpRequiredMessage": "Introduzca http:// o https://", + "databaseName": "Nombre de la base de datos", + "databaseNameRequiredMessage": "Introduzca el nombre de la base de datos", + "useSSL": "Utilizar SSL", + "userNameRequiredMessage": "Introduzca su nombre", + "passwordRequiredMessage": "Introduzca su contraseña", + "authentication": "Autenticación", + "authenticationType": "Tipo de autenticación", + "sslCertVerificationType": "Verificación de certificados SSL", + "sslCertVerificationTypeDefault": "Verificar CA Cert", + "sslCertVerificationTypeSelf": "Verificar certificado autofirmado", + "sslCertVerificationTypeDisabled": "Discapacitados", + "selfSignedCert": "Certificado autofirmado", + "selfSignedCertRequireMsg": "Introduzca su certificado", + "enableTurnOffPreparedStatement": "Activar la conmutación de sentencias preparadas para consultas", + "enableTurnOffPreparedStatementTooltip": "Puede activar o desactivar las sentencias preparadas en la pestaña Avanzadas de la consulta", + "serviceName": "Nombre del servicio", + "serviceNameRequiredMessage": "Introduzca el nombre de su servicio", + "useSID": "Utilizar SID", + "connectSuccessfully": "Conexión correcta", + "saveSuccessfully": "Guardado correctamente", + "database": "Base de datos", + "cloudHosting": "Lowcoder alojado en la nube no puede acceder a los servicios locales utilizando 127.0.0.1 o localhost. Intente conectarse a fuentes de datos de redes públicas o utilice un proxy inverso para servicios privados.", + "notCloudHosting": "Para el despliegue alojado en Docker, Lowcoder utiliza redes puente, por lo que 127.0.0.1 y localhost no son válidos para las direcciones de host. Para acceder a las fuentes de datos de la máquina local, consulte", + "howToAccessHostDocLink": "Cómo acceder a la API/DB del host", + "returnList": "Devolución", + "chooseDatasourceType": "Elija el tipo de fuente de datos", + "viewDocuments": "Ver documentos", + "testConnection": "Conexión de prueba", + "save": "Guardar", + "whitelist": "Lista de permisos", + "whitelistTooltip": "Añada las direcciones IP de Lowcoder a su lista de fuentes de datos permitidas según sea necesario.", + "address": "Dirección:", + "nameExists": "El nombre {name} ya existe", + "jsQueryDocLink": "Acerca de JavaScript Query", + "dynamicDataSourceConfigLoadingText": "Cargando configuración de fuente de datos adicional...", + "dynamicDataSourceConfigErrText": "No se ha podido cargar la configuración adicional de la fuente de datos.", + "retry": "Reintentar", + "categoryDatabase": "Base de Datos", + "categoryBigdata": "Big Data", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Desarrollo de Aplicaciones", + "categoryWorkflow": "Flujo de Trabajo", + "categoryMessaging": "Mensajería", + "categoryAssets": "Recursos y Almacenamiento", + "categoryProjectManagement": "Gestión de Proyectos", + "categoryCrm": "CRM", + "categoryEcommerce": "Comercio Electrónico", + "categoryWebscrapers": "Raspadores Web & Open Data", + "categoryDocumentHandling": "Generación de Informes y Documentos", + "categoryRPA": "Automatización de Procesos Robóticos", + "componentsUsingQueryTitle": "Uso de la consulta", + "componentsUsingQuery": "Dónde se usa esta consulta", + "variables": "Variables" + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Pares clave-valor", + "object": "Objeto", + "allowMultiModify": "Permitir la modificación de varias filas", + "allowMultiModifyTooltip": "Si se selecciona, se operan todas las filas que cumplen las condiciones. En caso contrario, sólo se operará sobre la primera fila que cumpla las condiciones.", + "array": "Matriz", + "insertList": "Insertar lista", + "insertListTooltip": "Valores insertados cuando no existen", + "filterRule": "Regla de filtrado", + "updateList": "Actualizar lista", + "updateListTooltip": "Los valores actualizados tal como existen pueden ser anulados por los mismos valores de la lista de inserción", + "sqlMode": "Modo SQL", + "guiMode": "Modo GUI", + "operation": "Operación", + "insert": "Inserte", + "upsert": "Insertar, pero actualizar si hay conflicto", + "update": "Actualización", + "delete": "Borrar", + "bulkInsert": "Inserción a granel", + "bulkUpdate": "Actualización masiva", + "table": "Cuadro", + "primaryKeyColumn": "Columna de clave primaria", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Comando en bruto", + "queryTutorialButton": "Ver documentos de la API de Elasticsearch", + "request": "Solicitar", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Índice de filas", + "spreadsheetId": "ID de la hoja de cálculo", + "sheetName": "Nombre de la hoja", + "readData": "Leer datos", + "appendData": "Añadir fila", + "updateData": "Actualizar Fila", + "deleteData": "Borrar fila", + "clearData": "Borrar fila", + "serviceAccountRequireMessage": "Introduzca su cuenta de servicio", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Ordenar", + "sortPlaceholder": "Nombre", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Exportar a JSON", + "noInput": "La consulta actual no tiene entrada", + "inputName": "Nombre", + "inputDesc": "Descripción", + "emptyInputs": "Sin entradas", + "clickToAdd": "Añadir", + "chooseQuery": "Seleccione Consulta", + "viewQuery": "Ver consulta", + "chooseVersion": "Elegir versión", + "latest": "Última", + "publish": "Publique", + "historyVersion": "Historia Versión", + "deleteQueryLabel": "Borrar consulta", + "deleteQueryContent": "No se puede recuperar la consulta después de borrarla. ¿Borrar la consulta?", + "run": "Ejecutar", + "readOnly": "Sólo lectura", + "exit": "Salida", + "recoverAppSnapshotContent": "Restaurar la consulta actual a la versión {version}.", + "searchPlaceholder": "Consulta de búsqueda", + "allQuery": "Todas las consultas", + "deleteQueryTitle": "Borrar consulta", + "unnamed": "Sin nombre", + "publishNewVersion": "Publicar nueva versión", + "publishSuccess": "Publicado con éxito", + "version": "Versión", + "desc": "Descripción", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Véase", + "extParamsTooltip": "Configurar parámetros de conexión adicionales", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Consulta de usuarios del espacio de trabajo", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Comando en bruto", + "command": "Comando", + "queryTutorial": "Ver documentos sobre los comandos de Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Si se selecciona {type}, el formato del valor debe ser {object}. Ejemplo: ___TITULAR2___", + "text": "Texto", + "file": "Archivo", + "extraBodyTooltip": "Los valores clave del cuerpo adicional se añadirán al cuerpo con tipos de datos JSON o de formulario.", + "forwardCookies": "Adelante Cookies", + "forwardAllCookies": "Reenviar todas las cookies", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Adjunto", + "attachmentTooltip": "Se puede utilizar con el componente de carga de archivos, los datos deben ser convertidos a:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Transmisor", + "recipient": "Recipient", + "carbonCopy": "Copia al carbón", + "blindCarbonCopy": "Copia oculta", + "subject": "Asunto", + "content": "Contenido", + "contentTooltip": "Admite la introducción de texto o HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Cuadros de mando e informes", + "layout": "Diseño y navegación", + "forms": "Recogida de datos y formularios", + "collaboration": "Reuniones y colaboración", + "projectmanagement": "Gestión de proyectos", + "scheduling": "Calendario y programación", + "documents": "Gestión de documentos y archivos", + "itemHandling": "Gestión de artículos y firmas", + "multimedia": "Multimedia y animación", + "integration": "Integración y ampliación", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Auto Complete", + "autoCompleteCompDesc": "Un campo de entrada que ofrece sugerencias a medida que se escribe, lo que mejora la experiencia del usuario y la precisión.", + "autoCompleteCompKeywords": "sugerencias, autocompletar, escribir, entrada", + "inputCompName": "Entrada", + "inputCompDesc": "Un campo de entrada de texto básico que permite a los usuarios introducir y editar texto.", + "inputCompKeywords": "texto, entrada, campo, editar", + "textAreaCompName": "Área de texto", + "textAreaCompDesc": "Una entrada de texto de varias líneas para contenidos más largos, como comentarios o descripciones.", + "textAreaCompKeywords": "multilínea, textarea, entrada, texto", + "passwordCompName": "Contraseña", + "passwordCompDesc": "Un campo seguro para introducir la contraseña, enmascarando los caracteres para mayor privacidad.", + "passwordCompKeywords": "contraseña, seguridad, entrada, oculto", + "richTextEditorCompName": "Editor de texto enriquecido", + "richTextEditorCompDesc": "Un editor de texto avanzado que admite numerosas opciones de formato, como negrita, cursiva y listas.", + "richTextEditorCompKeywords": "editor, texto, formato, contenido enriquecido", + "numberInputCompName": "Número Entrada", + "numberInputCompDesc": "Un campo específico para la introducción de datos numéricos, con controles para aumentar y disminuir los valores.", + "numberInputCompKeywords": "número, entrada, incremento, decremento", + "sliderCompName": "Deslizador", + "sliderCompDesc": "Componente gráfico deslizante que permite seleccionar un valor o un intervalo dentro de una escala definida.", + "sliderCompKeywords": "deslizador, gama, entrada, gráfico", + "rangeSliderCompName": "Deslizador de gama", + "rangeSliderCompDesc": "Un control deslizante de doble asa para seleccionar un rango de valores, útil para filtrar o establecer límites.", + "rangeSliderCompKeywords": "gama, corredera, doble asa, filtro", + "ratingCompName": "Clasificación", + "ratingCompDesc": "Un componente para capturar las valoraciones de los usuarios, mostradas en forma de estrellas.", + "ratingCompKeywords": "valoración, estrellas, comentarios, aportaciones", + "switchCompName": "Interruptor", + "switchCompDesc": "Un interruptor basculante para decisiones del tipo encendido/apagado o sí/no.", + "switchCompKeywords": "conmutador, interruptor, encendido/apagado, control", + "selectCompName": "Seleccione", + "selectCompDesc": "Un menú desplegable para seleccionar entre una lista de opciones.", + "selectCompKeywords": "desplegable, seleccionar, opciones, menú", + "multiSelectCompName": "Multiselect", + "multiSelectCompDesc": "Componente que permite seleccionar varios elementos de una lista desplegable.", + "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", + "cascaderCompName": "Cascader", + "cascaderCompDesc": "Un desplegable de varios niveles para la selección jerárquica de datos, como la selección de una ubicación.", + "cascaderCompKeywords": "cascada, jerárquico, desplegable, niveles", + "checkboxCompName": "Casilla de verificación", + "checkboxCompDesc": "Una casilla de verificación estándar para opciones que pueden seleccionarse o deseleccionarse.", + "checkboxCompKeywords": "casilla, opciones, seleccionar, alternar", + "radioCompName": "Radio", + "radioCompDesc": "Botones de radio para seleccionar una opción de un conjunto, donde sólo se permite una elección.", + "radioCompKeywords": "radio, botones, seleccionar, elección única", + "segmentedControlCompName": "Control segmentado", + "segmentedControlCompDesc": "Un control con opciones segmentadas para alternar rápidamente entre varias opciones.", + "segmentedControlCompKeywords": "segmentado, control, alternar, opciones", + "stepControlCompName": "Control de pasos", + "stepControlCompDesc": "Un control con opciones de pasos para ofrecer pasos visuales guiados para aplicaciones como formularios o asistentes.", + "stepControlCompKeywords": "pasos, control, alternar, opciones", + "fileUploadCompName": "Carga de archivos", + "fileUploadCompDesc": "Un componente para cargar archivos, con soporte para arrastrar y soltar y selección de archivos.", + "fileUploadCompKeywords": "archivo, cargar, arrastrar y soltar, seleccionar", + "dateCompName": "Fecha", + "dateCompDesc": "Un componente selector de fechas para seleccionar fechas de una interfaz de calendario.", + "dateCompKeywords": "fecha, selector, calendario, seleccionar", + "dateRangeCompName": "Intervalo de fechas", + "dateRangeCompDesc": "Componente que permite seleccionar un intervalo de fechas, útil para sistemas de reservas o filtros.", + "dateRangeCompKeywords": "daterange, seleccionar, reservar, filtrar", + "timeCompName": "Tiempo", + "timeCompDesc": "Un componente de selección horaria para elegir determinadas horas del día.", + "timeCompKeywords": "hora, selector, seleccionar, reloj", + "timeRangeCompName": "Intervalo de tiempo", + "timeRangeCompDesc": "Componente que permite seleccionar un intervalo de tiempo, utilizado a menudo en aplicaciones de programación.", + "timeRangeCompKeywords": "timerange, seleccionar, programación, duración", + "buttonCompName": "Botón de formulario", + "buttonCompDesc": "Un componente de botón versátil para enviar formularios, desencadenar acciones o navegar.", + "buttonCompKeywords": "botón, enviar, acción, navegar", + "meetingControlCompName": "Botón Icono", + "meetingCompDesc": "Un botón para controlar funciones como iniciar, finalizar, silenciar o compartir.", + "meetingCompKeywords": "control, botón, inicio, fin", + "linkCompName": "Enlace", + "linkCompDesc": "Componente de visualización de hipervínculos para navegar o enlazar con recursos externos.", + "linkCompKeywords": "enlace, hipervínculo, navegación, externo", + "scannerCompName": "Escáner", + "scannerCompDesc": "Un componente para escanear códigos de barras, códigos QR y otros datos similares.", + "scannerCompKeywords": "escáner, código de barras, código QR, escanear", + "dropdownCompName": "Desplegable", + "dropdownCompDesc": "Un menú desplegable para mostrar de forma compacta una lista de opciones.", + "dropdownCompKeywords": "desplegable, menú, opciones, seleccionar", + "toggleButtonCompName": "Botón Toggle", + "toggleButtonCompDesc": "Botón que puede alternar entre dos estados u opciones.", + "toggleButtonCompKeywords": "conmutar, botón, interruptor, estado", + "textCompName": "Visualización de texto", + "textCompDesc": "Un componente sencillo para mostrar contenido de texto estático o dinámico con formato Markdown incluido.", + "textCompKeywords": "texto, visualización, estático, dinámico", + "tableCompName": "Cuadro", + "tableCompDesc": "Un componente de tabla enriquecido para mostrar datos en formato de tabla estructurada, con opciones de ordenación y filtrado, visualización de datos en árbol y filas extensibles.", + "tableCompKeywords": "tabla, datos, clasificación, filtrado", + "imageCompName": "Imagen", + "imageCompDesc": "Componente para la visualización de imágenes, compatible con varios formatos basados en URI o datos Base64.", + "imageCompKeywords": "imagen, visualización, medios, Base64", + "progressCompName": "Progreso", + "progressCompDesc": "Indicador visual de progreso, utilizado normalmente para mostrar el estado de finalización de una tarea.", + "progressCompKeywords": "progreso, indicador, estado, tarea", + "progressCircleCompName": "Círculo de Progreso", + "progressCircleCompDesc": "Un indicador de progreso circular, a menudo utilizado para estados de carga o tareas de tiempo limitado.", + "progressCircleCompKeywords": "círculo, progreso, indicador, carga", + "fileViewerCompName": "Visor de archivos", + "fileViewerCompDesc": "Un componente para visualizar varios tipos de archivos, incluidos documentos e imágenes.", + "fileViewerCompKeywords": "archivo, visor, documento, imagen", + "dividerCompName": "Divisor", + "dividerCompDesc": "Componente divisor visual, utilizado para separar contenidos o secciones en un diseño.", + "dividerCompKeywords": "divisor, separador, disposición, diseño", + "qrCodeCompName": "Código QR", + "qrCodeCompDesc": "Componente para mostrar códigos QR, útil para escanearlos rápidamente y transferir información.", + "qrCodeCompKeywords": "Código QR, escaneado, código de barras, información", + "formCompName": "Forma", + "formCompDesc": "Un componente contenedor para construir formularios estructurados con varios tipos de entrada.", + "formCompKeywords": "formulario, entrada, contenedor, estructura", + "jsonSchemaFormCompName": "Formulario de esquema JSON", + "jsonSchemaFormCompDesc": "Un componente de formulario dinámico generado a partir de un esquema JSON.", + "jsonSchemaFormCompKeywords": "JSON, esquema, formulario, dinámico", + "containerCompName": "Contenedor", + "containerCompDesc": "Contenedor de uso general para el diseño y la organización de los elementos de la interfaz de usuario.", + "containerCompKeywords": "contenedor, diseño, organización, interfaz de usuario", + "floatTextContainerCompName": "Contenedor de texto flotante", + "floatTextContainerCompDesc": "Componente contenedor de texto flotante", + "floatTextContainerCompKeywords": "contenedor, diseño, texto, flujo", + "collapsibleContainerCompName": "Contenedor plegable", + "collapsibleContainerCompDesc": "Un contenedor que puede expandirse o contraerse, ideal para gestionar la visibilidad de los contenidos.", + "collapsibleContainerCompKeywords": "plegable, contenedor, expandir, colapsar", + "tabbedContainerCompName": "Contenedor con pestañas", + "tabbedContainerCompDesc": "Un contenedor con navegación por pestañas para organizar el contenido en paneles separados.", + "tabbedContainerCompKeywords": "pestañas, contenedor, navegación, paneles", + "pageLayoutCompName": "Diseño de página", + "pageLayoutCompDesc": "Un contenedor que permite crear un diseño con áreas de cabecera, lateral, pie de página y contenido principal.", + "pageLayoutCompKeywords": "diseño, contenedor, navegación, páginas", + "modalCompName": "Modal", + "modalCompDesc": "Un componente modal emergente para mostrar contenido, alertas o formularios en foco.", + "modalCompKeywords": "modal, popup, alerta, formulario", + "listViewCompName": "Ver lista", + "listViewCompDesc": "Componente para mostrar una lista de elementos o datos, en cuyo interior se pueden colocar otros componentes. Como un repetidor.", + "listViewCompKeywords": "lista, vista, visualización, repetidor", + "gridCompName": "Rejilla", + "gridCompDesc": "Un componente de cuadrícula flexible para crear diseños estructurados con filas y columnas como extensión del componente Vista Lista.", + "gridCompKeywords": "cuadrícula, diseño, filas, columnas", + "navigationCompName": "Navegación", + "navigationCompDesc": "Un componente de navegación para crear menús, migas de pan o pestañas para la navegación por el sitio.", + "navigationCompKeywords": "navegación, menú, migas de pan, pestañas", + "iframeCompName": "IFrame", + "iframeCompDesc": "Un componente de marco en línea para incrustar páginas web externas y aplicaciones o contenido dentro de la aplicación.", + "iframeCompKeywords": "iframe, incrustar, página web, contenido", + "customCompName": "Componente personalizado", + "customCompDesc": "Un componente flexible y programable para crear elementos de interfaz de usuario únicos, definidos por el usuario y adaptados a sus necesidades específicas.", + "customCompKeywords": "personalizado, definido por el usuario, flexible, programable", + "moduleCompName": "Módulo", + "moduleCompDesc": "Utilice módulos para crear microaplicaciones diseñadas para encapsular funcionalidades o características específicas. Los módulos pueden incrustarse y reutilizarse en todas las aplicaciones.", + "moduleCompKeywords": "módulo, microaplicación, funcionalidad, reutilizable", + "jsonExplorerCompName": "Explorador JSON", + "jsonExplorerCompDesc": "Componente para explorar visualmente estructuras de datos JSON e interactuar con ellas.", + "jsonExplorerCompKeywords": "JSON, explorador, datos, estructura", + "jsonEditorCompName": "Editor JSON", + "jsonEditorCompDesc": "Un componente editor para crear y modificar datos JSON con validación y resaltado de sintaxis.", + "jsonEditorCompKeywords": "JSON, editor, modificar, validar", + "treeCompName": "Árbol", + "treeCompDesc": "Componente de estructura de árbol para visualizar datos jerárquicos, como sistemas de archivos u organigramas.", + "treeCompKeywords": "árbol, jerárquico, datos, estructura", + "treeSelectCompName": "Seleccionar árbol", + "treeSelectCompDesc": "Componente de selección que presenta las opciones en formato de árbol jerárquico, lo que permite realizar selecciones organizadas y anidadas.", + "treeSelectCompKeywords": "árbol, seleccionar, jerárquico, anidado", + "audioCompName": "Audio", + "audioCompDesc": "Componente para incrustar contenidos de audio, con controles de reproducción y ajuste del volumen.", + "audioCompKeywords": "audio, reproducción, sonido, música", + "videoCompName": "Vídeo", + "videoCompDesc": "Componente multimedia para incrustar y reproducir contenidos de vídeo, compatible con varios formatos.", + "videoCompKeywords": "vídeo, multimedia, reproducción, incrustación", + "drawerCompName": "Cajón", + "drawerCompDesc": "Componente de panel deslizante que puede utilizarse para navegación adicional o visualización de contenidos, y que suele emerger del borde de la pantalla.", + "drawerCompKeywords": "cajón, corredera, panel, navegación", + "chartCompName": "Gráfico", + "chartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", + "chartCompKeywords": "tabla, gráfico, datos, visualización", + "carouselCompName": "Carrusel de imágenes", + "carouselCompDesc": "Un componente de carrusel giratorio para mostrar imágenes, banners o diapositivas de contenido.", + "carouselCompKeywords": "carrusel, imágenes, rotación, escaparate", + "imageEditorCompName": "Editor de imágenes", + "imageEditorCompDesc": "Componente interactivo para editar y manipular imágenes, que ofrece diversas herramientas y filtros.", + "imageEditorCompKeywords": "imagen, editor, manipular, herramientas", + "mermaidCompName": "Cuadro de sirenas", + "mermaidCompDesc": "Componente para la representación de diagramas y organigramas complejos basados en la sintaxis Mermaid.", + "mermaidCompKeywords": "sirena, gráficos, diagramas, organigramas", + "calendarCompName": "Calendario", + "calendarCompDesc": "Un componente de calendario para mostrar fechas y eventos, con opciones para vistas de mes, semana o día.", + "calendarCompKeywords": "calendario, fechas, eventos, programación", + "signatureCompName": "Firma", + "signatureCompDesc": "Componente para la captura de firmas digitales, útil para procesos de aprobación y verificación.", + "signatureCompKeywords": "firma, digital, aprobación, verificación", + "jsonLottieCompName": "Animación Lottie", + "jsonLottieCompDesc": "Un componente para mostrar animaciones Lottie, que proporciona animaciones ligeras y escalables basadas en datos JSON.", + "jsonLottieCompKeywords": "lottie, animación, JSON, escalable", + "timelineCompName": "Cronología", + "timelineCompDesc": "Componente para mostrar eventos o acciones en orden cronológico, representados visualmente a lo largo de una línea de tiempo lineal.", + "timelineCompKeywords": "cronología, acontecimientos, cronológico, historia", + "commentCompName": "Cómo", + "commentCompDesc": "Un componente para añadir y mostrar comentarios de usuarios, con soporte para respuestas hilvanadas e interacción entre usuarios.", + "commentCompKeywords": "comentario, debate, interacción con el usuario, retroalimentación", + "mentionCompName": "Mencione", + "mentionCompDesc": "Componente que permite mencionar usuarios o etiquetas dentro de un contenido de texto, utilizado normalmente en redes sociales o plataformas colaborativas.", + "mentionCompKeywords": "mencionar, etiquetar, usuario, redes sociales", + "responsiveLayoutCompName": "Diseño adaptable", + "responsiveLayoutCompDesc": "Un componente de maquetación diseñado para adaptarse y responder a diferentes tamaños de pantalla y dispositivos, garantizando una experiencia de usuario coherente.", + "responsiveLayoutCompKeywords": "responsive, diseño, adaptar, tamaño de pantalla", + "iconCompName": "Iconos", + "iconCompDesc": "Utilice varios iconos para mejorar el atractivo visual y la experiencia de usuario de su aplicación.", + "iconCompKeywords": "Iconos, pictogramas, símbolos, formas", + "tourCompName": "Visita", + "tourCompDesc": "Un recorrido por los productos para guiar a los usuarios.", + "tourCompKeywords": "visita, visita de producto, recorrido, recorrido interactivo", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "Un componente de visualización para mostrar datos sobre el estado de la gestión de proyectos en formato de gráfico de colinas.", + "hillchartCompKeywords": "gestión de proyectos, gráfico de colinas, visualización, datos", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Un componente para mostrar mapas interactivos utilizando OpenLayers, con soporte para varias capas de mapas y características.", + "openLayersGeoMapCompKeywords": "openlayers, geo mapa, interactivo, capas de mapa", + "chartsGeoMapCompName": "Gráficos de mapas geográficos", + "chartsGeoMapCompDesc": "Un componente para visualizar datos geográficos en mapas interactivos con gráficos dinámicos", + "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualización, datos geográficos", + "bpmnEditorCompName": "BPMN Editor", + "bpmnEditorCompDesc": "Componente para visualizar, crear y editar diagramas BPMN, compatible con diversos elementos y características de BPMN.", + "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, flujos de trabajo", + "turnstileCaptchaCompName": "Torniquete Captcha", + "turnstileCaptchaCompDesc": "Un componente captcha para verificar usuarios contra bots.", + "turnstileCaptchaCompKeywords": "captcha, verificación, identidad, seguridad", + "pivotTableCompName": "Tabla dinámica", + "pivotTableCompDesc": "Herramienta de resumen y análisis de datos para organizar y agregar datos en formato tabular.", + "pivotTableCompKeywords": "tabla dinámica, datos, análisis, agregación", + "funnelChartCompName": "Gráfico de embudo", + "funnelChartCompDesc": "Una herramienta de visualización para mostrar la reducción progresiva de los datos a medida que pasan por etapas.", + "funnelChartCompKeywords": "gráfico de embudo, ventas, conversiones, proceso", + "gaugeChartCompName": "Cuadro de gálibos", + "gaugeChartCompDesc": "Gráfico que muestra los datos como una lectura en un dial, útil para indicar el estado o nivel de algo.", + "gaugeChartCompKeywords": "gráfico de indicadores, métricas, rendimiento, estado", + "sankeyChartCompName": "Gráfico Sankey", + "sankeyChartCompDesc": "Diagrama de flujo en el que la anchura de las flechas es proporcional al caudal, utilizado para mostrar transferencias de energía, material o costes.", + "sankeyChartCompKeywords": "diagrama de sankey, flujo, energía, costes", + "candleStickChartCompName": "Gráfico de velas", + "candleStickChartCompDesc": "Estilo de gráfico financiero utilizado para describir los movimientos de precios de un valor, derivado o divisa.", + "candleStickChartCompKeywords": "gráfico de velas, acciones, trading, finanzas", + "radarChartCompName": "Gráfico de radar", + "radarChartCompDesc": "Método gráfico de visualización de datos multivariantes en forma de gráfico bidimensional de tres o más variables cuantitativas.", + "radarChartCompKeywords": "gráfico radar, multivariante, análisis de resultados", + "heatmapChartCompName": "Mapa de calor", + "heatmapChartCompDesc": "Representación gráfica de datos en la que los valores individuales se representan como colores.", + "heatmapChartCompKeywords": "mapa de calor, visualización de datos, intensidad", + "graphChartCompName": "Gráfico", + "graphChartCompDesc": "Diagrama que representa una red de nodos conectados por aristas, útil para mostrar interconexiones y relaciones.", + "graphChartCompKeywords": "gráfico, redes, relaciones, nodos", + "treeChartCompName": "Gráfico de árbol", + "treeChartCompDesc": "Diagrama que representa visualmente la jerarquía en una estructura arborescente, mostrando las relaciones entre los distintos nodos.", + "treeChartCompKeywords": "organigrama, jerarquía, organización", + "treemapChartCompName": "Gráfico Treemap", + "treemapChartCompDesc": "Gráfico que utiliza rectángulos anidados para representar proporcionalmente datos jerárquicos.", + "treemapChartCompKeywords": "mapa de árbol, jerarquía, visualización de datos", + "sunburstChartCompName": "Gráfico Sunburst", + "sunburstChartCompDesc": "Técnica de visualización radial de relleno de espacio que ilustra las relaciones jerárquicas a través de capas de un círculo.", + "sunburstChartCompKeywords": "gráfico de sol, radial, jerarquía", + "themeriverChartCompName": "Mapa del río temático", + "themeriverChartCompDesc": "Una visualización parecida a un gráfico de flujo que muestra los cambios en un conjunto de datos a lo largo del tiempo en todas las categorías.", + "themeriverChartCompKeywords": "tema río, series temporales, tendencias", + "basicChartCompName": "Cuadro básico", + "basicChartCompDesc": "Un componente versátil para visualizar datos a través de varios tipos de tablas y gráficos.", + "basicChartCompKeywords": "tabla, gráfico, datos, visualización", + "shapeCompName": "Formas", + "shapeCompDesc": "Una colección de formas geométricas para diagramas, ilustraciones y visualizaciones.", + "shapeCompKeywords": "formas, geométricas, diagramas, ilustraciones", + "ganttChartCompName": "Diagrama de Gantt", + "ganttChartCompDesc": "Gráfico que ilustra el calendario de un proyecto, mostrando las fechas de inicio y fin de los elementos y las dependencias.", + "ganttChartCompKeywords": "diagrama de gantt, gestión de proyectos, calendario", + "kanbanCompName" : "Kanban Board (preview!)", + "kanbanCompDesc" : "Un tablero de Kanban interactivo para la gestión visual de tareas y flujos de trabajo.", + "kanbanCompKeywords" : "kanban, board, workflow, tasks", + "colorPickerCompName": "Selector de color", + "colorPickerCompDesc": "Selección intuitiva de colores para personalizar.", + "colorPickerCompKeywords": "color, selector, personalización", + "floatButtonCompName": "Botón de flotador", + "floatButtonCompDesc": "Un botón de acción flotante para acciones destacadas y rápidas.", + "floatButtonCompKeywords": "botón flotante, acción, rápida", + "avatarCompName": "Avatar", + "avatarCompDesc": "Muestra avatares de usuario o imágenes de perfil para una identificación personalizada.", + "avatarCompKeywords": "avatar, imagen de perfil, identificación del usuario", + "avatarGroupCompName": "Grupo Avatar", + "avatarGroupCompDesc": "Un grupo de avatares para representar a varios usuarios o entidades de forma compacta y visualmente atractiva.", + "avatarGroupCompKeywords": "grupo de avatares, usuarios, entidades, compacto", + "transferName": "Transferencia", + "transferDesc": "Facilita la transferencia de datos entre dos listas mediante la función de arrastrar y soltar.", + "transferKeywords": "transferencia, datos, arrastrar y soltar", + "cardCompName": "Tarjeta de contenido", + "cardCompDesc": "Un componente de tarjeta para mostrar información o contenidos organizados de forma estructurada.", + "cardCompKeywords": "tarjeta, información, contenido, pantalla", + "timerCompName": "Timer", + "timerCompDesc": "Componente que muestra una cuenta atrás o el tiempo transcurrido, útil para el seguimiento de duraciones y plazos.", + "timerCompKeywords": "temporizador, cuenta atrás, tiempo transcurrido, seguimiento, duraciones, plazos", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Ver documentación", + "menuViewPlayground": "Ver zona de juegos interactiva", + "menuUpgradeToLatest": "Actualizar a la última versión", + "nameNotEmpty": "No puede estar vacío", + "nameRegex": "Debe empezar por una letra y contener sólo letras, cifras y guiones bajos (_)", + "nameJSKeyword": "No puede ser una palabra clave JavaScript", + "nameGlobalVariable": "No puede ser un nombre de variable global", + "nameExists": "Nombre {name} Ya existe", + "getLatestVersionMetaError": "No se ha podido obtener la última versión, inténtelo más tarde.", + "needNotUpgrade": "La versión actual ya es la última.", + "compNotFoundInLatestVersion": "Componente actual no encontrado en la última versión.", + "upgradeSuccess": "Actualizado correctamente a la última versión.", + "searchProp": "Buscar en", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Reintentar", + "resetAfterSubmit": "Restablecer después de enviar correctamente el formulario", + "jsonSchema": "Esquema JSON", + "uiSchema": "Esquema de IU", + "schemaTooltip": "Véase", + "defaultData": "Datos de formulario precargados", + "dataDesc": "Datos del formulario actual", + "required": "Requerido", + "maximum": "El valor máximo es {value}.", + "minimum": "El valor mínimo es {value}.", + "exclusiveMaximum": "Debe ser inferior a {value}", + "exclusiveMinimum": "Debe ser mayor que {value}.", + "multipleOf": "Debe ser múltiplo de {value}.", + "minLength": "Al menos {value} Caracteres", + "maxLength": "Como máximo {value} Caracteres", + "pattern": "Debe coincidir con el patrón {value}", + "format": "Debe coincidir con el formato {value}.", + }, + "select": { + ...en.select, + + "inputValueDesc": "Valor de búsqueda de entrada", + }, + "customComp": { + ...en.customComp, + + "text": "Es un buen día.", + "triggerQuery": "Consulta de activación", + "updateData": "Actualizar datos", + "updateText": "¡También estoy de buen humor para desarrollar ahora mi propio componente personalizado con Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Datos que desea pasar al componente personalizado", + "code": "Código de su componente personalizado", + }, + "tree": { + ...en.tree, + + "placeholder": "Seleccione una opción", + "selectType": "Seleccionar tipo", + "noSelect": "No Seleccionar", + "singleSelect": "Selección individual", + "multiSelect": "Selección múltiple", + "checkbox": "Casilla de verificación", + "checkedStrategy": "Estrategia verificada", + "showAll": "Todos los nodos", + "showParent": "Sólo nodos padre", + "showChild": "Nodos hijos únicos", + "autoExpandParent": "Auto Expandir Padre", + "checkStrictly": "Comprobar estrictamente", + "checkStrictlyTooltip": "Compruebe el TreeNode con precisión; el TreeNode padre y los TreeNodes hijos no están asociados", + "treeData": "Datos del árbol", + "treeDataDesc": "Datos actuales del árbol", + "value": "Valores por defecto", + "valueDesc": "Valores actuales", + "expanded": "Valores ampliados", + "expandedDesc": "Valores ampliados actuales", + "defaultExpandAll": "Por defecto Expandir todos los nodos", + "showLine": "Mostrar línea", + "showLeafIcon": "Mostrar icono de hoja", + "treeDataAsia": "Asia", + "treeDataChina": "China", + "treeDataBeijing": "Pekín", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Japón", + "treeDataEurope": "Europa", + "treeDataEngland": "Inglaterra", + "treeDataFrance": "Francia", + "treeDataGermany": "Alemania", + "treeDataNorthAmerica": "Norteamérica", + "helpLabel": "Etiqueta de nodo", + "helpValue": "Valor de nodo único en el árbol", + "helpChildren": "Niños Nodos", + "helpDisabled": "Desactiva el Nodo", + "helpSelectable": "Si el nodo es seleccionable (tipo de selección única/múltiple)", + "helpCheckable": "Si mostrar casilla de verificación (Tipo de casilla de verificación)", + "helpDisableCheckbox": "Desactiva la casilla de verificación (Tipo de casilla de verificación)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Prueba de eventos", + "methodTest": "Método de ensayo", + "inputTest": "Prueba de entrada", + }, + "password": { + ...en.password, + + "label": "Contraseña", + "placeholder": "Introduzca la contraseña", + "conformLabel": "Confirmar contraseña", + "conformPlaceholder": "Confirmar contraseña", + "visibilityToggle": "Conmutar visibilidad", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Personalizar la barra de herramientas", + "toolbarDescription": "Puede personalizar la barra de herramientas. Por favor, consulte: https://quilljs.com/docs/modules/toolbar/ para más detalles.", + "placeholder": "Por favor, introduzca...", + "hideToolbar": "Ocultar barra de herramientas", + "content": "Contenido", + "title": "Título", + "save": "Guardar", + "link": "Enlace:", + "edit": "Editar", + "remove": "Eliminar", + "defaultValue": "Contenido básico", + }, + "floatButton": { + ...en.floatButton, + + "custom": "A medida", + "backTop": "Volver Arriba", + "buttonType": "Tipo de botón", + "buttonShape": "Forma del botón", + "square": "Cuadrado", + "circle": "Círculo", + "description": "Descripción", + "badge": "Insignia", + "primary": "Principal", + "default": "Por defecto", + "buttonTheme": "Tema del botón", + "badgeColor": "Color del distintivo", + "dot": "Insignia Como Punto", + "hidden": "Oculto", + "visibilityHeight": "Altura de visibilidad", + "visibilityHeightDesc": "Desplácese hasta una altura determinada antes de mostrar el botón de volver al principio, siempre se muestra 0,El modo de edición no puede previsualizar en tiempo real", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Evento desencadenante", + "click": "Haga clic en", + "hover": "pase el ratón por", + "disabledAlpha": "Desactivar selección alfa", + "recommended": "Recomendado", + "showPresets": "Mostrar preajustes de color", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Mostrar botón de cierre", + "Type": "Tipo de placa", + "Count": "Recuento de insignias", + "Size": "Tamaño del distintivo", + "SizeDefault": "por defecto", + "SizeSmall": "Pequeño", + "overflowCount": "Recuento de desbordamientos", + "Title": "Título de la insignia", + "dot": "Punto", + "number": "Número", + "tooltip": "Información sobre herramientas", + }, + "gantt": { + ...en.gantt, + + "key": "Clave", + "title": "Título", + "project": "Proyecto", + "from": "En", + "minute": "minuto", + "hour": "Hora", + "day": "Día", + "week": "Semana", + "month": "Mes", + "year": "Año", + "quarter": "Cuarto", + "tasks": "Datos de tareas", + "level": "nivel", + "durationUnit": "Unidad de duración", + "duration": "Duración", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Semana #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "árbol", + "ColumnsData": "Columnas Datos", + "allowChangeTask": "Tarea DbClick", + "allowAddLink": "Añadir enlace", + "allowLinkDelete": "Enlace Eliminar", + "allowProgressDrag": "Arrastre de progreso", + "allowTaskDrag": "Arrastre de tareas", + "links": "Datos de enlaces", + "dataFormat": "Formato de análisis de datos", + "handleDateChange": "Gestionar el cambio de tarea", + "handleTaskChange": "Gestionar el cambio de tarea", + "handleAddedLink": "Mango Enlace añadido", + "handleDeletedLink": "Manejar enlace eliminado", + "handleProgressDrag": "Manejar el arrastre de progreso", + "showTodayMark": "Mostrar hoy Mark", + "resize": "Cambie el tamaño de", + "otherEvents": "Otros eventos", + "openAllBranchInit": "Abrir todas las sucursales Init", + "date": "Fecha", + "text": "Texto", + "progress": "progreso", + "width": "Anchura", + "ColumnsType": "Tipo de nubes", + "currentId": "Identificación actual", + "currentObject": "Objeto actual", + "addTask": "Añadir tarea(s)", + "taskObject": "Objeto de la tarea", + "taskObjectDesc": "Admite matrices de tareas o un único objeto de tarea", + "linkID": "ID del enlace", + "linkIDDesc": "Admite matrices de ID de enlaces o un único objeto de enlace", + "removeTask": "Eliminar tarea", + "taskID": "ID de tarea", + "taskIDDesc": "Admite matrices de ID o un único ID", + "add": "Añadir", + "expandingAll": "Ampliar todo", + "collapsingAll": "Colapsar todo", + "addTaskFail": "La tarea de adición ha fallado, y el tipo de parámetro debe ser un objeto o un objeto array", + "addLinkFail": "El enlace de adición falló, y el tipo de parámetro debe ser un objeto o un objeto de matriz", + "removeTaskFail": "La tarea de eliminación ha fallado, y el tipo de parámetro debe ser cadena o matriz de cadenas", + "removeLinkFail": "Los enlaces de borrado fallaron, y el tipo de parámetro debe ser string array", + "otherData": "Otros datos{i}", + "projectText": "Proyecto #{i}", + "taskText": "Tarea #{i}", + "AutoCalculateProgress": "Progreso del cálculo automático", + "allowProjectDrag": "Permitir el arrastre de proyectos", + "showColumns": "Mostrar columnas", + "exportToPNG": "Exportar a PNG", + "exportToPDF": "Exportar a PDF", + "exportToExcel": "Exportar a Excel", + "progressLowBg": "Bajo BgColor", + "progressLowColor": "Bajo Progreso Color", + "progressMediumBg": "Medio BgColor", + "progressMediumColor": "Medio Color Progress", + "progressHighBg": "Altura BgColor", + "progressHighColor": "Heigh Progress Color", + "progresscompletedColor": "Color de progreso completado", + "lowProgressLine": "Línea de progreso baja", + "mediumProgressLine": "Línea de progreso medio", + "SegmentedColor": "Color segmentado Progress", + "link_f2s": "Enlace F2S", + "link_s2s": "Enlace S2S", + "link_f2f": "Enlace F2F", + "link_s2f": "Enlace S2F", + "weekScale": "#{i},", + "showHolidays": "Mostrar vacaciones", + "StatutoryHolidays": "Datos sobre las vacaciones legales", + "skipOffTime": "Oculta el tiempo no trabajado", + "weekend": "Fin de semana", + "weekendSelected": "Fin de semana seleccionado", + "noWorkHour": "Ninguna hora de trabajo", + "noWorkHourSelected": "ninguna hora de trabajo seleccionada", + "showWorkTimes": "Mostrar horarios de trabajo", + "workTimeData": "Datos sobre el tiempo de trabajo", + "fit": "ajuste", + "manual": "manual", + "scaleMode": "Modo Escala", + "startDate": "Fecha de inicio", + "endDate": "Fecha final", + "addLink": "Añadir enlace(s)", + "linkObject": "enlace Objeto", + "removeLink": "eliminar enlace", + "allowSort": "Permitir clasificación", + "showTask": "Mostrar tarea", + "toggleOnDBClick": "Activar DBClick", + "sortOptions": "Opciones iniciales de clasificación", + "rowHeight": "Altura de fila", + "showTooltip": "Mostrar información sobre herramientas", + "tooltipTemplates": "Plantilla Tooltip", + "allowResizeTask": "Permitir redimensionar tarea", + "projectColor": "Proyecto Color", + "projectColorBg": "Proyecto BgColor", + "taskColor": "Tarea Color", + "taskColorBg": "Tarea BgColor", + "milestoneColor": "Hito Color", + "highlightOverdue": "Resaltar Atrasado", + "overdueColor": "Color atrasado", + "overdueBgColor": "Atrasado BgColor", + "projectCompletedBgColor": "Proyecto finalizado BgColor", + "projectCompletedColor": "Proyecto finalizado Color", + "tag": "etiqueta", + "tasksTableWidth": "Anchura de la tabla de tareas", + "allowErrorMessage": "Permitir mensaje de error", + "currentProjectId": "Id de proyecto actual", + "currentProjectLastTask": "Proyecto actual Última tarea", + "onlySortProject": "Sólo Ordenar Proyecto", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Fuente de datos", + "targetTitle": "Datos objetivo", + "content": "Contenido {i}", + "items": "Artículos", + "targetKeys": "Claves seleccionadas", + "oneWay": "Una vía", + "pagination": "Paginación", + "pageSize": "Tamaño de página", + "allowSearch": "Permitir búsqueda", + "selectedKeys": "Claves seleccionadas", + "searchInfo": "Buscar información", + "targerObject": "Objeto Targer", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Recuento máximo", + "avatarSize": "Tamaño del avatar", + "autoColor": "Auto Color", + "alignment": "Alineación", + "currentAvatar": "Avatar actual", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "cuadrado", + "circle": "círculo", + "icon": "icono", + "shape": "forma", + "counts": "Insignia", + "title": "título", + "src": "src", + "avatarCompTooltip": "La prioridad de visualización es: imagen -> caracteres -> icono. En función de lo que esté disponible en primer lugar.", + "iconSize": "Tamaño del icono", + "avatarBackground": "Fondo", + "label": "Etiqueta", + "caption": "Leyenda", + "labelPosition": "Posición", + "alignmentPosition": "alineación", + "text": "Texto", + "enableDropDown": "Activar desplegable", + "containerBackground": "Fondo", + }, + "card": { + ...en.card, + + "cardType": "Tipo de tarjeta", + "common": "común", + "custom": "personalizado", + "default": "por defecto", + "small": "pequeño", + "showTitle": "Mostrar título", + "title": "Título", + "more": "Más", + "extraTitle": "Llamamiento a la acción", + "CoverImg": "Imagen de portada", + "imgSrc": "Fuente de la imagen", + "showMeta": "Mostrar contenido", + "metaTitle": "Título del contenido", + "metaDesc": "Descripción del contenido", + "imgHeight": "Altura de la imagen", + "showActionIcon": "Mostrar opciones de acción", + "actionOptions": "Opciones de acción", + "menu": "Menú {i}", + "hoverColor": "hover Color", + "IconColor": "Icono Color", + "titleSize": "Título Tamaño", + }, + "timer": { + ...en.timer, + + "timerState": "Estado del temporizador", + "elapsedTime": "Tiempo transcurrido", + "timer": "Timer", + "countdown": "Cuenta atrás", + "defaultValue": "Valor por defecto", + "timerType": "Tipo de temporizador", + "start": "Inicio", + "pause": "Pausa", + "resume": "Currículum", + "reset": "Restablecer", + "startPause": "Inicio/Pausa", + "hideButton": "Botón Ocultar", + "fontColor": "Color de fuente", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Icono", + "autoSize": "Icono AutoSize", + "iconSize": "Tamaño del icono", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Formato", + "precision": "Precisión", + "allowNull": "Permitir valor nulo", + "thousandsSeparator": "Mostrar separador de miles", + "controls": "Mostrar botones de aumento/disminución", + "step": "Paso", + "standard": "Estándar", + "percent": "Porcentaje", + }, + "slider": { + ...en.slider, + + "step": "Paso", + "stepTooltip": "El valor debe ser mayor que 0 y divisible por (Máx-Mín)", + "vertical": "Orientación vertical", + }, + "rating": { + ...en.rating, + + "max": "Clasificación máxima", + "allowHalf": "Permitir la mitad de puntos de valoración", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Opciones", + "option": "Opción", + "optionI": "Opción {i}", + "viewDocs": "Ver documentos", + "tip": "Las variables \"item\" e \"i\" representan el valor y el índice de cada elemento de la matriz de datos.", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Valor / Clave", + "valueTooltip": "El valor del paso debe ser un número. Para el primer Paso, debe ser igual al valor inicial. Los números deben estar en orden coherente y ascendente", + "title": "Paso Título", + "subTitle": "Paso Subtítulo", + "description": "Paso Descripción", + "status": "Paso Estado", + "icon": "Paso Icono", + }, + "step": { + ...en.step, + + "initialValue": "Números iniciales en", + "initialValueTooltip": "Dónde empezar la numeración visual. Debe ser 1 o superior.", + "valueDesc": "Valor actual", + "size": "Pasos Tamaño", + "sizeSmall": "Pequeño", + "sizeDefault": "Por defecto", + "percent": "Pasos Porcentaje", + "type": "Tipo de pasos", + "typeDefault": "Estándar", + "typeNavigation": "Navegación", + "typeInline": "En línea", + "direction": "Pasos Dirección", + "directionVertical": "Vertical", + "directionHorizontal": "Horizontal", + "labelPlacement": "Pasos Colocación de etiquetas", + "status": "Pasos Estado", + "statusWait": "Espere", + "statusProcess": "Proceso", + "statusFinish": "Acabado", + "statusError": "Error", + "showDots": "Mostrar puntos en lugar de símbolos", + "showIcons": "Mostrar iconos en lugar de símbolos", + "responsive": "Respuesta", + "selectable": "Seleccionable", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Texto de la etiqueta", + "color": "Color", + "icon": "Icono", + }, + "radio": { + ...en.radio, + + "options": "Opciones", + "horizontal": "Horizontal", + "horizontalTooltip": "El diseño horizontal se enrolla cuando se queda sin espacio", + "vertical": "Vertical", + "verticalTooltip": "El diseño vertical siempre se mostrará en una sola columna", + "autoColumns": "Columna Auto", + "autoColumnsTooltip": "La disposición en autocolumnas reordena automáticamente el orden según lo permita el espacio y muestra varias columnas.", + }, + "cascader": { + ...en.cascader, + + "options": "Datos JSON para mostrar selecciones en cascada", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Valor seleccionado actualmente", + "selectedIndexDesc": "El índice del valor seleccionado actualmente, o -1 si no hay ningún valor seleccionado.", + "selectedLabelDesc": "Etiqueta del valor seleccionado actualmente", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Debe ser un número con una unidad de tamaño de archivo válida, o un número de bytes sin unidad.", + "fileEmptyErrorMsg": "Carga fallida. El tamaño del archivo está vacío.", + "fileSizeExceedErrorMsg": "Carga fallida. El tamaño del archivo excede el límite.", + "minSize": "Tamaño mínimo", + "minSizeTooltip": "El tamaño mínimo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", + "maxSize": "Tamaño máximo", + "maxSizeTooltip": "El tamaño máximo de los archivos cargados con unidades de tamaño de archivo opcionales (por ejemplo, '5kb', '10 MB'). Si no se proporciona ninguna unidad, el valor se considerará un número de bytes.", + "single": "Único", + "multiple": "Múltiples", + "directory": "Directorio", + "upload": "Visite", + "fileType": "Tipos de ficheros", + "reference": "Consulte", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Especificadores únicos de tipo de archivo", + "uploadType": "Tipo de carga", + "showUploadList": "Mostrar lista de cargas", + "maxFiles": "Archivos Max", + "filesValueDesc": "El contenido del archivo cargado actualmente está codificado en Base64", + "filesDesc": "Lista de los archivos cargados actualmente. Para más detalles, consulte", + "clearValueDesc": "Borrar todos los archivos", + "parseFiles": "Analizar archivos", + "parsedValueTooltip1": "Si parseFiles es True, los archivos se convertirán en objetos, matrices o cadenas. Se puede acceder a los datos analizados a través de la matriz parsedValue.", + "parsedValueTooltip2": "Admite archivos Excel, JSON, CSV y de texto. Otros formatos devolverán un valor nulo.", + }, + "date": { + ...en.date, + + "format": "Formato", + "formatTip": "Admite: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", + "reference": "Consulte", + "showTime": "Hora del espectáculo", + "start": "Fecha de inicio", + "end": "Fecha final", + "year": "Año", + "quarter": "Cuarto", + "month": "Mes", + "week": "Semana", + "date": "Fecha", + "clearAllDesc": "Borrar todo", + "resetAllDesc": "Restablecer todo", + "placeholder": "Seleccionar fecha", + "placeholderText": "Marcador de posición", + "startDate": "Fecha de inicio", + "endDate": "Fecha final", + }, + "time": { + ...en.time, + + "start": "Hora de inicio", + "end": "Fin de los tiempos", + "formatTip": "Soporte: 'HH:mm:ss', 'Timestamp'", + "format": "Formato", + "placeholder": "Seleccionar hora", + "placeholderText": "Marcador de posición", + "startTime": "Hora de inicio", + "endTime": "Fin de los tiempos", + }, + "button": { + ...en.button, + + "prefixIcon": "Prefijo Icono", + "prefixText": "Texto del prefijo", + "suffixIcon": "Icono de sufijo", + "icon": "Icono", + "iconSize": "Tamaño del icono", + "button": "Botón de formulario", + "formToSubmit": "Formulario de envío", + "default": "Por defecto", + "submit": "Enviar", + "textDesc": "Texto que aparece actualmente en el botón", + "loadingDesc": "¿Está el botón en estado de carga? Si es verdadero, el botón actual está cargando", + "formButtonEvent": "Evento", + }, + "link": { + ...en.link, + + "link": "Enlace", + "textDesc": "Texto que aparece actualmente en el enlace", + "loadingDesc": "¿Está el enlace en estado de carga? Si es verdadero, el enlace actual está cargando", + }, + "scanner": { + ...en.scanner, + + "text": "Haga clic en Escanear", + "camera": "Cámara {index}", + "changeCamera": "Cambiar cámara", + "continuous": "Escaneado continuo", + "uniqueData": "Ignorar datos duplicados", + "maskClosable": "Haga clic en la máscara para cerrar", + "errTip": "Utilice este componente bajo HTTPS o Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Pantalla sólo con etiqueta", + "textDesc": "Texto que aparece actualmente en el botón", + "triggerMode": "Modo de disparo" + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Hola, {name}", + "valueTooltip": "Markdown admite la mayoría de las etiquetas y atributos HTML. iframe, Script y otras etiquetas están desactivadas por motivos de seguridad.", + "verticalAlignment": "Alineación vertical", + "horizontalAlignment": "Alineación horizontal", + "textDesc": "Texto mostrado en el cuadro de texto actual", + }, + "table": { + ...en.table, + + "editable": "Editable", + "columnNum": "Columnas", + "viewModeResizable": "Ancho de columna ajustado por el usuario", + "viewModeResizableTooltip": "Si los usuarios pueden ajustar el ancho de columna.", + "visibleResizables": "Mostrar asas de cambio de tamaño", + "visibleResizablesTooltip": "Mostrar los Manejadores de Redimensionamiento visibles en la Cabecera de la Tabla.", + "showFilter": "Botón Mostrar filtro", + "showRefresh": "Mostrar botón de actualización", + "showDownload": "Mostrar botón de descarga", + "columnSeparator": "Separador de columna", + "columnSeparatorTooltip": "Separador de columnas (\"delimitador\") en el archivo CSV descargado.\n\nRecomendaciones:\n- Coma (,)\n- Punto y coma (;)\n- Tubo (|)\n- Tabulación (\\t)", + "columnSetting": "Botón Mostrar visibilidad de columnas", + "searchText": "Buscar texto", + "searchTextTooltip": "Buscar y Filtrar los Datos, que se presentan actualmente en la Tabla. Esta es una Búsqueda sólo frontal y No Afecta a la Consulta de la Fuente de Datos).", + "showQuickJumper": "Mostrar Quick Jumper", + "hideOnSinglePage": "Ocultar en una sola página", + "showSizeChanger": "Botón de cambio de talla", + "pageSizeOptions": "Opciones de tamaño de página", + "pageSize": "Tamaño de página", + "total": "Recuento total de filas", + "totalTooltip": "El valor por defecto es el número de elementos de datos actuales que pueden obtenerse de la consulta, por ejemplo: '{{query1.data[0].count}}'.", + "filter": "Filtros", + "filterRule": "Regla de filtrado", + "chooseColumnName": "Elegir columna", + "chooseCondition": "Elegir condición", + "clear": "Claro", + "columnShows": "Columnas", + "selectAll": "Seleccionar todo", + "and": "Y", + "or": "O", + "contains": "Contiene", + "notContain": "No contiene", + "equals": "Es igual a", + "isNotEqual": "No es igual", + "isEmpty": "Está vacío", + "isNotEmpty": "No está vacío", + "greater": "Mayor que", + "greaterThanOrEquals": "Mayor o igual que", + "lessThan": "Menos de", + "lessThanOrEquals": "Menor o igual que", + "action": "Acción", + "columnValue": "Valor de columna", + "columnValueTooltip": "'{{currentCell}}': Datos de la celda actual\n '{{currentRow}}': Datos de la fila actual\n '{{currentIndex}}': Índice de datos actual (empezando por 0)\n Ejemplo: '{{currentCell * 5}}' Mostrar 5 Veces el Valor Original de los Datos.", + "columnTooltip": "Columna Tooltip", + "imageSrc": "Fuente de la imagen", + "imageSize": "Tamaño de la imagen", + "columnTitle": "Título", + "columnTitleTooltip": "Información sobre el título", + "showTitle": "Mostrar título", + "showTitleTooltip": "Mostrar/Ocultar el título de la columna en la cabecera de la tabla", + "sortable": "Clasificable", + "align": "Alineación", + "fixedColumn": "Columna fija", + "autoWidth": "Ancho automático", + "customColumn": "Columna personalizada", + "auto": "Coche", + "fixed": "Fijo", + "columnType": "Tipo de columna", + "dataMapping": "Cartografía de datos", + "numberStep": "Paso", + "numberStepTooltip": "El número al que aumenta o disminuye el valor actual. Puede ser un número entero o decimal", + "precision": "Precisión", + "float": "Flotador", + "prefix": "Prefijo", + "suffix": "Sufijo", + "avatars": "Avatares", + "avatarGroupAlignment": "Alineación de avatares", + "text": "Texto", + "number": "Número", + "link": "Enlace", + "links": "Enlaces", + "tag": "Etiqueta", + "select": "Seleccione", + "dropdown": "Desplegable", + "date": "Fecha", + "dateTime": "Fecha Hora", + "badgeStatus": "Estado", + "button": "Botón", + "image": "Imagen", + "boolean": "Booleano", + "switch": "Interruptor", + "rating": "Clasificación", + "progress": "Progreso", + "option": "Operación", + "optionList": "Lista de operaciones", + "option1": "Operación 1", + "status": "Estado", + "statusTooltip": "Valores opcionales: Correcto, Error, Predeterminado, Advertencia, Procesando", + "primaryButton": "Principal", + "defaultButton": "Por defecto", + "type": "Tipo", + "tableSize": "Tamaño de la tabla", + "hideHeader": "Ocultar cabecera de tabla", + "hideToolbar": "Ocultar pie de página", + "fixedHeader": "Cabecera de tabla fija", + "fixedHeaderTooltip": "La cabecera será fija para la tabla desplazable verticalmente", + "fixedToolbar": "Barra de herramientas fija", + "fixedToolbarTooltip": "La barra de herramientas se fijará para la tabla desplazable verticalmente en función de la posición", + "hideBordered": "Mostrar asas de cambio de tamaño", + "showHeaderGridBorder": "Mostrar borde de cuadrícula de cabecera", + "showRowGridBorder": "Mostrar borde de cuadrícula de fila", + "showVerticalRowGridBorder": "Mostrar el borde vertical de la cuadrícula de filas", + "showHorizontalRowGridBorder": "Mostrar el borde horizontal de la cuadrícula de filas", + "deleteColumn": "Borrar columna", + "confirmDeleteColumn": "Confirme Borrar columna:", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "Los Datos Actuales Cambian, Pulse para Regenerar la Columna.", + "changeSetDesc": "Un Objeto que Representa Cambios en una Tabla Editable, Sólo Contiene la Celda Cambiada. Las filas van primero y las columnas después.", + "selectedRowDesc": "Proporciona datos para la fila seleccionada actualmente, indicando la fila que desencadena un evento de clic si el usuario hace clic en un botón/enlace de la fila.", + "selectedRowsDesc": "Útil en el modo de selección múltiple, igual que SelectedRow", + "pageNoDesc": "Página de visualización actual, empezando por 1", + "pageSizeDesc": "Cuántas filas por página", + "sortColumnDesc": "Nombre de la columna ordenada actualmente seleccionada", + "sortDesc": "Si la fila actual está en orden descendente", + "pageOffsetDesc": "El inicio actual de la paginación, utilizado para la paginación para obtener datos. Ejemplo: Select * from Usuarios Limite '{{table1.pageSize}}' Desplazamiento '{{table1.pageOffset}}'", + "displayDataDesc": "Datos mostrados en la tabla actual", + "selectedIndexDesc": "Índice seleccionado en los datos de visualización", + "filterDesc": "Parámetros de filtrado de tablas", + "dataDesc": "Los datos JSON de la tabla", + "saveChanges": "Guardar cambios", + "cancelChanges": "Cancelar cambios", + "rowSelectChange": "Cambio de selección de fila", + "rowClick": "Fila Click", + "rowExpand": "Fila Ampliar", + "rowShrink": "Reducción de filas", + "search": "Buscar en", + "download": "Descargar", + "columnEdited": "Columna editada", + "filterChange": "Cambio de filtro", + "sortChange": "Ordenar Cambio", + "pageChange": "Cambio de página", + "refresh": "Actualizar", + "rowColor": "Color de fila condicional", + "rowColorDesc": "Establece Condicionalmente el Color de la Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "Alto de línea condicional", + "rowHeightDesc": "Establece Condicionalmente el Alto de Fila Basado en las Variables Opcionales: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por ejemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Color de celda condicional", + "cellColorDesc": "Establezca Condicionalmente el Color de la Celda Basado en el Valor de la Celda Usando CurrentCell. Por ejemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "No hay ningún manejador de eventos configurado para guardar cambios. Vincule al menos un controlador de eventos antes de hacer clic.", + "dynamicColumn": "Utilizar la visibilidad dinámica de columnas", + "dynamicColumnConfig": "Columnas visibles", + "dynamicColumnConfigDesc": "Visibilidad dinámica de columnas. Acepta un array de nombres de columnas. Todas las columnas son visibles por defecto. Ejemplo: [\"id\", \"nombre\"]", + "position": "Posición", + "showDataLoadSpinner": "Mostrar indicador de carga", + "showValue": "Mostrar valor", + "expandable": "Ampliable", + "configExpandedView": "Configurar vista ampliada", + "toUpdateRowsDesc": "Una Matriz de Objetos para Filas a Actualizar en Tablas Editables.", + "selectedCellDesc": "Célula seleccionada", + "empty": "Vacío", + "falseValues": "Texto en falso", + "iconTrue": "Icono Cuando es verdadero", + "iconFalse": "Icono en falso", + "iconNull": "Icono A cero", + "allColumn": "Todos", + "visibleColumn": "Visible", + "emptyColumns": "Actualmente no hay columnas visibles", + "showSummary": "Mostrar fila(s) de resumen", + "totalSummaryRows": "Total de filas", + "inlineAddNewRow": "Inline Añadir nueva(s) fila(s)", + "editMode": "Modo Edición", + "singleClick": "Un solo clic", + "doubleClick": "Doble clic", + "showUpdateButtons": "Mostrar botones Guardar/Cancelar", + }, + "image": { + ...en.image, + + "src": "Fuente de la imagen", + "srcDesc": "Fuente de la imagen. Puede ser una URL, una ruta o una cadena Base64. Por ejemplo: data:image/png;base64, AAA... CCC", + "supportPreview": "Soporte Click Preview (zoom)", + "supportPreviewTip": "Efectivo cuando la fuente de la imagen es válida", + }, + "progress": { + ...en.progress, + + "value": "Valor", + "valueTooltip": "El Porcentaje Completo como valor entre 0 y 100", + "showInfo": "Mostrar valor", + "valueDesc": "Valor de progreso actual, de 0 a 100", + "showInfoDesc": "Mostrar o no el valor de progreso actual", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Introduzca una URL válida o una cadena Base64", + "src": "Archivos URI", + "srcTooltip": "Vista previa del contenido del enlace proporcionado mediante la incrustación de HTML, también se pueden admitir datos codificados en Base64, por ejemplo: data:application/pdf; base64,AAA... CCC", + "srcDesc": "URI del archivo", + }, + "divider": { + ...en.divider, + + "title": "Título", + "align": "Alineación", + "dashed": "Dashed", + "type": "Tipo vertical", + "dashedDesc": "Utilizar o no línea discontinua", + "titleDesc": "Título del divisor", + "alignDesc": "Alineación del título del divisor", + }, + "QRCode": { + ...en.QRCode, + + "value": "Valor del contenido del código QR", + "valueTooltip": "El valor contiene un máximo de 2953 caracteres. El valor del código QR puede codificar varios tipos de datos, incluidos mensajes de texto, URL, detalles de contacto (VCard/meCard), credenciales de inicio de sesión Wi-Fi, direcciones de correo electrónico, números de teléfono, mensajes SMS, coordenadas de geolocalización, detalles de eventos de calendario, información de pago, direcciones de criptomonedas y enlaces de descarga de aplicaciones.", + "valueDesc": "El valor del contenido del código QR", + "level": "Nivel de tolerancia a fallos", + "levelTooltip": "Se refiere a la capacidad del código QR para ser escaneado incluso si una parte del mismo está bloqueada. Cuanto más alto es el nivel, más complejo es el código.", + "includeMargin": "Mostrar margen", + "image": "Mostrar imagen en el centro", + "L": "L (Bajo)", + "M": "M (Medio)", + "Q": "Q (Cuartil)", + "H": "H (Alto)", + "maxLength": "El contenido es demasiado largo. Ajuste la longitud a menos de 2953 caracteres", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Sangría de cada nivel", + "expandToggle": "Expandir árbol JSON", + "theme": "Tema de color", + "valueDesc": "Datos JSON actuales", + "default": "Por defecto", + "defaultDark": "Por defecto Oscuro", + "neutralLight": "Luz neutra", + "neutralDark": "Neutro Oscuro", + "azure": "Azure", + "darkBlue": "Azul oscuro", + }, + "audio": { + ...en.audio, + + "src": "URI de la fuente de audio o cadena Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Reproducción automática", + "loop": "Bucle", + "srcDesc": "URI de audio actual o cadena Base64 como data:audio/mpeg;base64,AAA... CCC", + "play": "Jugar", + "playDesc": "Se activa cuando se reproduce audio", + "pause": "Pausa", + "pauseDesc": "Se activa cuando se pausa el audio", + "ended": "Finalizado", + "endedDesc": "Se activa cuando el audio termina de reproducirse", + }, + "video": { + ...en.video, + + "src": "URI de la fuente de vídeo o cadena Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL del póster", + "defaultPosterUrl": "", + "autoPlay": "Reproducción automática", + "loop": "Bucle", + "controls": "Ocultar controles", + "volume": "Volumen", + "playbackRate": "Velocidad de reproducción", + "posterTooltip": "El valor por defecto es el primer fotograma del vídeo", + "autoPlayTooltip": "Después de cargar el vídeo, se reproducirá automáticamente. Si cambia este valor de True a False, el vídeo se pausará. (Si se configura un póster, se reproducirá con el botón de póster).", + "controlsTooltip": "Ocultar controles de reproducción de vídeo. Puede no ser totalmente compatible con todas las fuentes de vídeo.", + "volumeTooltip": "Ajustar el volumen del reproductor, entre 0 y 1", + "playbackRateTooltip": "Ajustar la velocidad del reproductor, entre 1 y 2", + "srcDesc": "URI de audio actual o cadena Base64 como data:video/mp4;base64, AAA... CCC", + "play": "Jugar", + "playDesc": "Se activa cuando se reproduce el vídeo", + "pause": "Pausa", + "pauseDesc": "Se activa al pausar el vídeo", + "load": "Carga", + "loadDesc": "Se activa cuando el recurso de vídeo ha terminado de cargarse", + "ended": "Finalizado", + "endedDesc": "Se activa cuando el vídeo termina de reproducirse", + "currentTimeStamp": "Posición actual de reproducción del vídeo en segundos", + "duration": "La duración total del vídeo en segundos", + }, + "media": { + ...en.media, + + "playDesc": "Inicia la reproducción del medio.", + "pauseDesc": "Pone en pausa la reproducción multimedia.", + "loadDesc": "Restablece el medio al principio y reinicia Seleccionando el recurso multimedia.", + "seekTo": "Buscar hasta el número de segundos dado, o fracción si la cantidad está entre 0 y 1", + "seekToAmount": "Número de segundos, o fracción si está entre 0 y 1", + "showPreview": "Avance del espectáculo", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Valor inicial", + "end": "Valor final", + "step": "Tamaño del escalón", + "stepTooltip": "Granularidad del control deslizante, el valor debe ser mayor que 0 y divisible por (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Seleccione un icono", + "insertIcon": "Insertar un icono", + "insertImage": "Insertar una imagen o", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Seleccione una forma", + "insertShape": "Insertar una forma", + "insertImage": "Insertar una imagen o", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Por favor, introduzca el período de tiempo de espera correcto en ms, la entrada actual es: ___MARCADOR0___", + "timeoutLessThanMinError": "La entrada debe ser mayor que {left}, la entrada actual es: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Único", + "multiple": "Múltiples", + "close": "Cerrar", + "mode": "Modo de selección de filas", + }, + "container": { + ...en.container, + + "title": "Título del contenedor mostrado", + "titleTooltip": "Título del contenedor", + "flowWidth": "Anchura del contenido", + "floatType": "Texto Tipo flotante", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Colocación del botón Cerrar", + "placement": "Colocación de cajones", + "size": "Talla", + "top": "Top", + "right": "Derecha", + "center": "Centro", + "bottom": "Fondo", + "left": "Izquierda", + "title": "Título del cajón", + "titleAlign": "Alineación de títulos", + "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", + "heightTooltip": "Píxel, por ejemplo 378", + "openDrawerDesc": "Cajón abierto", + "closeDrawerDesc": "Cerrar cajón", + "width": "Ancho del cajón", + "height": "Altura del cajón", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Nivel de registro de Agora SDK", + "placement": "Colocación de cajones para reuniones", + "meeting": "Configuración de la reunión", + "cameraView": "Ver habitación", + "cameraViewDesc": "Vista de cámara del usuario local (host)", + "screenShared": "Pantalla compartida", + "screenSharedDesc": "Pantalla compartida por el usuario local (host)", + "audioUnmuted": "Audio sin silenciar", + "audioMuted": "Audio silenciado", + "videoClicked": "Vídeo pulsado", + "videoOff": "Video Off", + "videoOn": "Vídeo", + "size": "Talla", + "top": "Top", + "host": "Anfitrión de la sala de reuniones. Deberá gestionar el anfitrión como una aplicación lógica propia.", + "participants": "Participantes en la sala de reuniones", + "shareScreen": "Pantalla compartida por el usuario local", + "appid": "ID de la aplicación Agora", + "meetingName": "Nombre de la reunión", + "localUserID": "ID de usuario de host", + "userName": "Nombre de usuario del host", + "rtmToken": "Ficha Agora RTM", + "rtcToken": "Ficha Agora RTC", + "noVideo": "Sin vídeo", + "profileImageUrl": "URL de la imagen del perfil", + "right": "Derecha", + "bottom": "Fondo", + "videoId": "ID de secuencia de vídeo", + "audioStatus": "Estado de audio", + "left": "Izquierda", + "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", + "heightTooltip": "Píxel, por ejemplo 378", + "openDrawerDesc": "Cajón abierto", + "closeDrawerDesc": "Cerrar cajón", + "width": "Ancho del cajón", + "height": "Altura del cajón", + "actionBtnDesc": "Botón de acción", + "broadCast": "Difusión de mensajes", + "title": "Título de la reunión", + "meetingCompName": "Controlador de reuniones Agora", + "sharingCompName": "Compartir pantalla Stream", + "videoCompName": "Flujo de cámara", + "videoSharingCompName": "Compartir pantalla Stream", + "meetingControlCompName": "Botón Icono", + "meetingCompDesc": "Componente de reunión", + "meetingCompControls": "Control de reuniones", + "meetingCompKeywords": "Agora Meeting, Web Meeting, Colaboración", + "iconSize": "Tamaño del icono", + "userId": "ID de usuario de host", + "roomId": "ID de habitación", + "meetingActive": "Reunión en curso", + "messages": "Mensajes difundidos", + }, + "settings": { + ...en.settings, + + "title": "Ajustes", + "userGroups": "Grupos de usuarios", + "organization": "Espacios de trabajo", + "subscription": "Suscripciones", + "audit": "Registros de auditoría", + "theme": "Temas", + "plugin": "Plugins", + "advanced": "Avanzado", + "apiDocs": "Documentos API", + "lab": "Laboratorio", + "branding": "Marca", + "oauthProviders": "Autenticación de usuarios", + "appUsage": "Registros de uso de aplicaciones", + "environments": "Entornos", + "premium": "Premium", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Admin", + "superAdmin": "Súper administrador", + "adminGroupRoleInfo": "El administrador puede gestionar los miembros y recursos del grupo", + "adminOrgRoleInfo": "Los administradores son propietarios de todos los recursos y pueden gestionar grupos.", + "member": "Miembro", + "memberGroupRoleInfo": "Los miembros pueden ver a los miembros del grupo", + "memberOrgRoleInfo": "Los miembros sólo pueden utilizar o visitar los recursos a los que tienen acceso.", + "title": "Miembros", + "createGroup": "Crear grupo", + "newGroupPrefix": "Nuevo Grupo", + "allMembers": "Todos los diputados", + "deleteModalTitle": "Borrar este grupo", + "deleteModalContent": "No se puede restaurar el grupo eliminado. Está seguro de eliminar el grupo?", + "addMember": "Añadir miembros", + "nameColumn": "Nombre de usuario", + "joinTimeColumn": "Hora de incorporación", + "actionColumn": "Operación", + "roleColumn": "Papel", + "exitGroup": "Grupo de salida", + "moveOutGroup": "Eliminar del Grupo", + "inviteUser": "Invitar a miembros", + "exitOrg": "Deja", + "exitOrgDesc": "¿Estás seguro de que quieres dejar este espacio de trabajo.", + "moveOutOrg": "Eliminar", + "moveOutOrgDescSaasMode": "¿Está seguro de que desea eliminar al usuario {name} de este espacio de trabajo?", + "moveOutOrgDesc": "¿Está seguro de que desea eliminar al usuario {name}? Esta acción no se puede recuperar.", + "devGroupTip": "Los miembros del grupo de desarrolladores tienen privilegios para crear aplicaciones y fuentes de datos.", + "lastAdminQuit": "El último administrador no puede salir.", + "organizationNotExist": "El espacio de trabajo actual no existe", + "inviteUserHelp": "Puede copiar el enlace de invitación para enviarlo al usuario", + "inviteUserLabel": "Enlace de invitación:", + "inviteCopyLink": "Copiar enlace", + "inviteText": "{userName} le invita a unirse al espacio de trabajo \"{organization}\", haga clic en el enlace para unirse: {inviteLink}", + "groupName": "Nombre del grupo", + "createTime": "Crear tiempo", + "manageBtn": "Gestione", + "userDetail": "Detalle", + "syncDeleteTip": "Este grupo ha sido eliminado de la libreta de direcciones Fuente", + "syncGroupTip": "Este grupo es un grupo de sincronización de la libreta de direcciones y no se puede editar", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Nuevo espacio de trabajo (Organización)", + "title": "Espacio de trabajo", + "createOrg": "Crear espacio de trabajo (Organización)", + "deleteModalTitle": "¿Está seguro de eliminar este espacio de trabajo?", + "deleteModalContent": "Está a punto de eliminar este espacio de trabajo {permanentlyDelete}. Una vez eliminado, el espacio de trabajo {notRestored}.", + "permanentlyDelete": "Permanentemente", + "notRestored": "No se puede restaurar", + "deleteModalLabel": "Introduzca el nombre del espacio de trabajo {name} para confirmar la operación:", + "deleteModalTip": "Introduzca el nombre del espacio de trabajo", + "deleteModalErr": "El nombre del espacio de trabajo es incorrecto", + "deleteModalBtn": "Borrar", + "editOrgTitle": "Editar la información del espacio de trabajo", + "orgNameLabel": "Nombre del espacio de trabajo:", + "orgNameCheckMsg": "El nombre del espacio de trabajo no puede estar vacío", + "orgLogo": "Logotipo del espacio de trabajo:", + "logoModify": "Modificar imagen", + "inviteSuccessMessage": "Unirse con éxito al espacio de trabajo", + "inviteFailMessage": "Error al unirse al espacio de trabajo", + "uploadErrorMessage": "Error de carga", + "orgName": "Nombre del espacio de trabajo", + }, + "freeLimit": "Prueba gratuita", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Pestaña Switch", + "switchTabDesc": "Se activa al cambiar de pestaña", + "tab": "Fichas", + "atLeastOneTabError": "El contenedor de fichas guarda al menos una ficha", + "selectedTabKeyDesc": "Pestaña Actualmente Seleccionado", + "iconPosition": "Icono Posición", + "placement": "Colocación de pestañas", + "showTabs": "Mostrar pestañas", + "gutter": "Brecha", + "gutterTooltip": "La distancia entre pestañas en px", + "tabsCentered": "Pestañas centradas", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Arrastrar componentes desde el panel derecho o", + "openDialogButton": "Generar un formulario a partir de una de sus fuentes de datos", + "resetAfterSubmit": "Restablecer tras envío correcto", + "initialData": "Datos iniciales", + "disableSubmit": "Desactivar Enviar", + "success": "Formulario generado correctamente", + "selectCompType": "Seleccione el tipo de componente", + "dataSource": "Fuente de datos:", + "selectSource": "Seleccionar fuente", + "table": "Mesa:", + "selectTable": "Seleccionar tabla", + "columnName": "Nombre de la columna", + "dataType": "Tipo de datos", + "compType": "Tipo de componente", + "required": "Requerido", + "generateForm": "Generar formulario", + "compSelectionError": "Tipo de columna no configurada", + "compTypeNameError": "No se ha podido obtener el nombre del tipo de componente", + "noDataSourceSelected": "No se ha seleccionado ninguna fuente de datos", + "noTableSelected": "Ninguna mesa seleccionada", + "noColumn": "Sin columna", + "noColumnSelected": "Sin columna seleccionada", + "noDataSourceFound": "No se ha encontrado ninguna fuente de datos compatible. Crear una nueva fuente de datos", + "noTableFound": "No se encontraron tablas en esta fuente de datos, por favor seleccione otra fuente de datos", + "noColumnFound": "No se ha encontrado ninguna columna compatible en esta tabla. Seleccione otra tabla", + "formTitle": "Título del formulario", + "name": "Nombre", + "nameTooltip": "El nombre del atributo en los datos del formulario, cuando se deja en blanco, es por defecto el nombre del componente", + "notSupportMethod": "Métodos no admitidos:", + "notValidForm": "El formulario no es válido", + "resetDesc": "Restablecer el valor predeterminado de los datos del formulario", + "clearDesc": "Borrar datos del formulario", + "setDataDesc": "Establecer datos del formulario", + "valuesLengthError": "Número de parámetro Error", + "valueTypeError": "Parámetro Tipo Error", + "dataDesc": "Datos del formulario actual", + "loadingDesc": "¿Se está cargando el formulario?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Abrir", + "openDesc": "Se activa al abrir el cuadro de diálogo modal", + "close": "Cerrar", + "closeDesc": "Se activa al cerrar el cuadro de diálogo modal", + "openModalDesc": "Abrir el cuadro de diálogo", + "closeModalDesc": "Cerrar el cuadro de diálogo", + "visibleDesc": "¿Es visible? Si es verdadero, aparecerá el cuadro de diálogo actual", + "title": "Título del cajón", + "titleAlign": "Alineación de títulos", + "modalHeight": "Altura modal", + "modalHeightTooltip": "Pixel, Ejemplo: 222", + "modalWidth": "Anchura modal", + "modalWidthTooltip": "Número o porcentaje, Ejemplo: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Recuento de filas", + "noOfRowsTooltip": "Número de filas de la lista - Suele establecerse en una variable (por ejemplo, '{{query1.data.length}}') para presentar los resultados de la consulta", + "noOfColumns": "Recuento de columnas", + "itemIndexName": "Elemento de datos Índice Nombre", + "itemIndexNameDesc": "El nombre de la variable que hace referencia al índice del artículo, por defecto {default}.", + "itemDataName": "Elemento de datos Nombre del objeto", + "itemDataNameDesc": "El nombre de la variable que se refiere al objeto de datos del artículo, por defecto {default}.", + "itemsDesc": "Exposición de datos de componentes en lista", + "dataDesc": "Los datos JSON utilizados en la lista actual", + "dataTooltip": "Si sólo establece un número, este campo se considerará como recuento de filas y los datos se considerarán vacíos.", + }, + "navigation": { + ...en.navigation, + + "addText": "Añadir elemento de submenú", + "logoURL": "Navegación Logo URL", + "horizontalAlignment": "Alineación horizontal", + "logoURLDesc": "Puede mostrar un logotipo en el lado izquierdo introduciendo un valor URI o una cadena Base64 como data:image/png;base64,AAA... CCC", + "itemsDesc": "Elementos del menú de navegación jerárquica", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Submenú {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Activo", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "La URL de origen para el contenido IFrame. Asegúrese de que la URL es HTTPS o localhost. Asegúrese también de que la URL no esté bloqueada por la Política de seguridad de contenidos (CSP) del navegador. El encabezado \"X-Frame-Options\" no debe tener el valor \"DENY\" o \"SAMEORIGIN\".", + "allowDownload": "Permitir descargas", + "allowSubmitForm": "Permitir enviar formulario", + "allowMicrophone": "Permitir micrófono", + "allowCamera": "Permitir cámara", + "allowPopup": "Permitir ventanas emergentes", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Valor booleano por defecto", + "open": "En", + "close": "Fuera de", + "openDesc": "Se activa al encender el interruptor", + "closeDesc": "Se activa cuando el interruptor está apagado", + "valueDesc": "Estado actual del interruptor", + }, + "signature": { + ...en.signature, + + "tips": "Texto de sugerencia", + "signHere": "Firme aquí", + "showUndo": "Mostrar Deshacer", + "showClear": "Mostrar claro", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Todos los datos almacenados actualmente", + "setItemDesc": "Añadir un artículo", + "removeItemDesc": "Eliminar un artículo", + "clearItemDesc": "Borrar todos los artículos", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "Abrir URL", + "openApp": "Aplicación abierta", + "copyToClipboard": "Copiar al portapapeles", + "downloadFile": "Descargar archivo", + }, + "messageComp": { + ...en.messageComp, + + "info": "Enviar una notificación", + "loading": "Enviar una notificación de carga", + "success": "Enviar una notificación de éxito", + "warn": "Enviar una notificación de advertencia", + "error": "Enviar una notificación de error", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "cerrar una notificación", + "info": "Enviar una notificación", + "loading": "Enviar una notificación de carga", + "success": "Enviar una notificación de éxito", + "warn": "Enviar una notificación de advertencia", + "error": "Enviar una notificación de error", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Cambiar tema", + }, + "transformer": { + ...en.transformer, + + "preview": "Vista previa", + "docLink": "Leer más sobre Transformers...", + "previewSuccess": "Vista previa Éxito", + "previewFail": "Vista previa Fracaso", + "deleteMessage": "Borrar Transformador con éxito. Puede utilizar {undoKey} para deshacer.", + "documentationText": "Los Transformadores están diseñados para la transformación de datos y la reutilización de su código JavaScript multilínea. Utilice los transformadores para adaptar los datos de consultas o componentes a las necesidades de su aplicación local. A diferencia de las consultas de JavaScript, los transformadores están diseñados para realizar operaciones de sólo lectura, lo que significa que no se puede activar una consulta o actualizar un estado temporal dentro de un transformador.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Valor Init", + "valueTooltip": "El valor inicial almacenado en el estado temporal puede ser un booleano, una cadena, un número o cualquier valor JSON válido.", + "docLink": "Más información sobre los Estados temporales...", + "pathTypeError": "La ruta debe ser una cadena o una matriz de valores", + "unStructuredError": "Los datos no estructurados {prev} no pueden ser actualizados por {path}", + "valueDesc": "Valor temporal del Estado", + "deleteMessage": "El estado temporal se ha eliminado correctamente. Puede utilizar {undoKey} para deshacer.", + "documentationText": "Los estados temporales son una potente característica utilizada para gestionar variables complejas que actualizan dinámicamente el estado de los componentes de tu aplicación. Estos estados actúan como almacenamiento intermedio o transitorio de datos que pueden cambiar con el tiempo debido a interacciones del usuario u otros procesos.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Datos", + "dataDesc": "Datos del respondedor de datos actual", + "dataTooltip": "Cuando se modifiquen estos datos, se desencadenarán acciones posteriores.", + "docLink": "Más información sobre los respondedores de datos...", + "deleteMessage": "El Data Responder se ha borrado correctamente. Puede utilizar {undoKey} para deshacer.", + "documentationText": "Al desarrollar una aplicación, puede asignar eventos a los componentes para controlar los cambios en datos específicos. Por ejemplo, un componente Tabla puede tener eventos como \"Cambio de selección de fila\", \"Cambio de filtro\", \"Cambio de ordenación\" y \"Cambio de página\" para controlar los cambios en la propiedad selectedRow. Sin embargo, para los cambios en estados temporales, transformadores o resultados de consultas, en los que no se dispone de eventos estándar, se utilizan los respondedores de datos. Permiten detectar y reaccionar ante cualquier modificación de los datos.", + }, + "theme": { + ...en.theme, + + "title": "Temas", + "createTheme": "Crear tema", + "themeName": "Nombre del tema:", + "themeNamePlaceholder": "Introduzca un nombre para el tema", + "defaultThemeTip": "Tema por defecto:", + "createdThemeTip": "El tema que ha creado:", + "option": "Option{index}", + "input": "Entrada", + "confirm": "Ok", + "emptyTheme": "No hay temas disponibles", + "click": "", + "toCreate": "", + "nameColumn": "Nombre", + "defaultTip": "Por defecto", + "updateTimeColumn": "Hora de actualización", + "edit": "Editar", + "cancelDefaultTheme": "Desactivar tema por defecto", + "setDefaultTheme": "Establecer como tema predeterminado", + "copyTheme": "Tema duplicado", + "setSuccessMsg": "Ajuste superado", + "cancelSuccessMsg": "Desestabilización lograda", + "deleteSuccessMsg": "Supresión Efectuada", + "checkDuplicateNames": "El nombre del tema ya existe, vuelva a introducirlo", + "copySuffix": " Copia", + "saveSuccessMsg": "Guardado correctamente", + "leaveTipTitle": "Consejos", + "leaveTipContent": "Aún no ha ahorrado, ¿confirma su marcha?", + "leaveTipOkText": "Deja", + "goList": "Volver a la lista", + "saveBtn": "Guardar", + "mainColor": "Colores principales", + "text": "Colores del texto", + "layout": "Configuración del diseño", + "fonts": "Configuración de fuentes", + "components": "Plantillas de componentes", + "charts": "Definición de eCharts", + "defaultTheme": "Por defecto", + "yellow": "Amarillo", + "green": "Verde", + "previewTitle": "Vista previa del tema\nComponentes de ejemplo que utilizan los colores de su tema", + "dateColumn": "Fecha", + "emailColumn": "Correo electrónico", + "phoneColumn": "Teléfono", + "subTitle": "Título", + "linkLabel": "Enlace", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progreso", + "sliderLabel": "Deslizador", + "radioLabel": "Radio", + "checkboxLabel": "Casilla de verificación", + "buttonLabel": "Botón de formulario", + "switch": "Interruptor", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "globo.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Vista previa del estilo de gráfico", + "chartSpending": "Gasto", + "chartBudget": "Presupuesto", + "chartAdmin": "Administración", + "chartFinance": "Finanzas", + "chartSales": "Sales", + "chartFunnel": "Gráfico de embudo", + "chartShow": "Mostrar", + "chartClick": "Haga clic en", + "chartVisit": "Visite", + "chartQuery": "Consulta", + "chartBuy": "Comprar", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Color de la marca", + "primaryDesc": "Color primario por defecto utilizado por la mayoría de los componentes", + "textDark": "Color de texto oscuro", + "textDarkDesc": "Se utiliza cuando el color de fondo es claro", + "textLight": "Color de texto claro", + "textLightDesc": "Se utiliza cuando el color de fondo es oscuro", + "canvas": "Canvas Color", + "canvasDesc": "Color de fondo por defecto de la aplicación", + "primarySurface": "Color del contenedor", + "primarySurfaceDesc": "Color de fondo por defecto para componentes como tablas", + "borders": "Estilos de bordes", + "spacing": "Estilos de espaciado", + "font": "Estilos de fuente", + "fonts": "Fuentes", + "borderRadius": "Radio del borde", + "borderRadiusDesc": "Radio del borde por defecto utilizado por la mayoría de los componentes", + "borderColor": "Color del borde", + "borderColorDesc": "Color de borde por defecto utilizado por la mayoría de los componentes", + "borderWidth": "Anchura del borde", + "borderWidthDesc": "Ancho de borde por defecto utilizado por la mayoría de los componentes", + "borderStyle": "Estilo de borde", + "borderStyleDesc": "Estilo de borde por defecto utilizado por la mayoría de los componentes", + "fontFamily": "Familia de fuentes", + "fontFamilyDesc": "Familia de fuentes por defecto utilizada por la mayoría de los componentes", + "chart": "Estilo de gráfico", + "chartDesc": "Aquí puede colocar eCharts Theme JSON para definir el estilo de sus gráficos en todos los Detalles.", + "echartsJson": "Puede utilizar aquí el Generador de JSON del Tema. Copie el JSON del Generador y péguelo aquí.", + "margin": "Margen", + "marginDesc": "Margen por defecto utilizado normalmente para la mayoría de los componentes", + "padding": "Acolchado", + "paddingDesc": "Relleno por defecto utilizado normalmente para la mayoría de los componentes", + "containerHeaderPadding": "Relleno de cabecera", + "containerheaderpaddingDesc": "Relleno de cabecera por defecto utilizado normalmente para la mayoría de los componentes.", + "gridColumns": "Columnas de cuadrícula de lienzo", + "gridColumnsDesc": "Número predeterminado de columnas utilizado normalmente para la mayoría de los contenedores", + "loadingIndicators": "Indicadores de carga", + "showComponentLoadingIndicators": "Mostrar indicadores de carga cuando se carga el componente", + "showDataLoadingIndicators": "Mostrar indicadores de carga al cargar los datos", + "showIndicatorsDuringDataLoading": "Mostrar indicadores durante la carga de datos", + "dataLoadingIndicator": "Indicador de carga de datos" + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugins", + "npmPluginTitle": "plugins npm", + "npmPluginDesc": "Configurar plugins npm para todas las aplicaciones en el espacio de trabajo actual.", + "npmPluginEmpty": "No se han añadido plugins npm.", + "npmPluginAddButton": "Añadir un plugin npm", + "saveSuccess": "Guardado correctamente", + }, + "advanced": { + ...en.advanced, + + "title": "Avanzado", + "defaultHomeTitle": "Página de inicio por defecto", + "defaultHomeHelp": "La página de inicio es la aplicación que todos los no desarrolladores verán por defecto cuando inicien sesión. Nota: Asegúrese de que la aplicación seleccionada es accesible para los no desarrolladores.", + "defaultHomePlaceholder": "Seleccione la página de inicio por defecto", + "saveBtn": "Guardar", + "preloadJSTitle": "Precargar JavaScript", + "preloadJSHelp": "Configurar código JavaScript precargado para todas las aplicaciones del área de trabajo actual.", + "preloadCSSTitle": "Precargar CSS", + "preloadCSSHelp": "Configurar código CSS precargado para todas las aplicaciones del área de trabajo actual.", + "preloadCSSApply": "Aplicar a la página de inicio del espacio de trabajo", + "preloadLibsTitle": "Biblioteca JavaScript", + "preloadLibsHelp": "Configure bibliotecas JavaScript precargadas para todas las aplicaciones en el espacio de trabajo actual, y el sistema tiene lodash, day.js, uuid, numbro incorporados para uso directo. Las bibliotecas JavaScript se cargan antes de que se inicialice la aplicación, por lo que se produce un cierto impacto en el rendimiento de la aplicación.", + "preloadLibsEmpty": "No se han añadido bibliotecas JavaScript", + "preloadLibsAddBtn": "Añadir una biblioteca", + "saveSuccess": "Guardado correctamente", + "AuthOrgTitle": "Pantalla de bienvenida al espacio de trabajo", + "AuthOrgDescrition": "La URL para que sus usuarios inicien sesión en el espacio de trabajo actual.", + "APIConsumption": "Consumo de API", + "APIConsumptionDescription": "Aquí puede ver el consumo de API para todas las aplicaciones en el área de trabajo actual.", + "overallAPIConsumption": "Consumo global de API en este espacio de trabajo hasta ahora", + "lastMonthAPIConsumption": "Consumo de API del último mes, en este espacio de trabajo", + "npmRegistryTitle": "Registro NPM personalizado", + "npmRegistryHelp": "Configurar un Registro NPM personalizado para permitir la obtención de plugins de un registro NPM privado.", + "showHeaderInPublicApps": "Mostrar cabecera en vista pública", + "showHeaderInPublicAppsHelp": "Fijar la visibilidad de la cabecera en la vista pública para todas las aplicaciones", + }, + "branding": { + ...en.branding, + "title": "Configuraciones de Marca", + "logoSection": "Logotipos", + "logo": "Logotipo", + "logoHelp": "Sube el logotipo de tu empresa en formato SVG o PNG.", + "squareLogo": "Logotipo Cuadrado", + "squareLogoHelp": "Sube una versión cuadrada de tu logotipo en formato SVG o PNG.", + "colorFontSection": "Colores y Fuentes", + "mainBrandingColor": "Color Principal de la Marca", + "mainBrandingColorHelp": "Selecciona el color principal para tu marca.", + "editorHeaderColor": "Color del Encabezado del Editor", + "editorHeaderColorHelp": "Selecciona el color del encabezado del editor.", + "adminSidebarColor": "Color de la Barra Lateral del Administrador", + "adminSidebarColorHelp": "Selecciona el color de la barra lateral del administrador.", + "editorSidebarColor": "Color de la Barra Lateral del Editor", + "editorSidebarColorHelp": "Selecciona el color de la barra lateral del editor.", + "font": "Fuente", + "fontHelp": "Selecciona una fuente de Google Fonts para tu aplicación.", + "textSection": "Textos y Páginas", + "errorPage": "Texto de la Página de Error", + "errorPageHelp": "Introduce el texto que se mostrará en la página de error.", + "signUpPage": "Texto de la Página de Registro", + "signUpPageHelp": "Introduce el texto que se mostrará en la página de registro.", + "loggedOutPage": "Texto de la Página de Cierre de Sesión", + "loggedOutPageHelp": "Introduce el texto que se mostrará en la página de cierre de sesión.", + "standardDescription": "Descripción Estándar", + "standardDescriptionHelp": "Introduce la descripción estándar para la información meta de SEO.", + "standardTitle": "Título Estándar", + "standardTitleHelp": "Introduce el título estándar para la información meta de SEO.", + "showDocumentation": "Mostrar Documentación", + "submitIssue": "Permitir Enviar Problema", + "whatsNew": "Habilitar \"Novedades\"", + "saveButton": "Guardar Configuraciones", + "errorPageImage": "Sube una imagen para la página de error en formato SVG o PNG.", + "signUpPageImage": "Sube una imagen para la página de registro en formato SVG o PNG.", + "loggedOutPageImage": "Sube una imagen para la página de cierre de sesión en formato SVG o PNG.", + "documentationLink": "Enlace a la documentación", + "documentationLinkPlaceholder": "Introduce la URL de tu documentación...", + "documentationLinkHelp": "Proporciona una URL válida que los usuarios puedan visitar para la documentación.", + "whatsNewSection": "Configuraciones de documentación", + "whatsNewLink": "Enlace a la documentación", + "whatsNewLinkPlaceholder": "Introduce la URL de tu documentación...", + "whatsNewLinkHelp": "Proporciona una URL válida que los usuarios puedan visitar para conocer las novedades." + }, + "networkMessage": { + ...en.networkMessage, + + "0": "No se ha podido conectar con el servidor, compruebe la red.", + "200": "Éxito", + "201": "Creado", + "204": "Sin contenido", + "400": "Mala petición", + "401": "Autenticación fallida, por favor conéctese de nuevo", + "403": "Sin permiso, póngase en contacto con el administrador para obtener autorización", + "404": "No se ha encontrado", + "500": "Servicio ocupado, inténtelo más tarde", + "timeout": "Tiempo de espera de la solicitud", + }, + "share": { + ...en.share, + + "title": "Compartir", + "viewer": "Visor", + "editor": "Editor", + "owner": "Propietario", + "datasourceViewer": "Puede utilizar", + "datasourceOwner": "Puede gestionar", + }, + "debug": { + ...en.debug, + + "title": "Título", + "switch": "Componente del interruptor:", + }, + "module": { + ...en.module, + + "emptyText": "Sin datos", + "docLink": "Más información sobre los módulos...", + "documentationText": "Los módulos son aplicaciones completas que pueden incluirse y repetirse en otras aplicaciones y que funcionan como un único componente. Como los módulos pueden ser incrustados, necesitan ser capaces de interactuar con sus aplicaciones externas o sitios web. Estas cuatro opciones ayudan a mantener la comunicación con un módulo.", + "circularReference": "Referencia circular, ¡no se puede utilizar el módulo/aplicación actual!", + "emptyTestInput": "El módulo actual no tiene ninguna entrada que comprobar", + "emptyTestMethod": "El módulo actual no tiene método de prueba", + "name": "Nombre", + "input": "Entrada", + "params": "Parámetros", + "emptyParams": "No se ha añadido ningún parámetro", + "emptyInput": "No se ha añadido ninguna entrada", + "emptyMethod": "No se ha añadido ningún método", + "emptyOutput": "No se ha añadido ninguna salida", + "data": "Datos", + "string": "Cadena", + "number": "Número", + "array": "Matriz", + "boolean": "Booleano", + "query": "Consulta", + "autoScaleCompHeight": "Balanzas de altura de componentes con contenedor", + "excuteMethod": "Ejecutar método {name}", + "method": "Método", + "action": "Acción", + "output": "Salida", + "nameExists": "Nombre {name} Ya existe", + "eventTriggered": "Se activa el evento {name}.", + "globalPromptWhenEventTriggered": "Muestra un aviso global cuando se activa un evento", + "emptyEventTest": "El módulo actual no tiene eventos que probar", + "emptyEvent": "No se ha añadido ningún evento", + "event": "Evento", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "El valor de retorno es una función.", + "consume": "___TITULAR0___", + "JSON": "Mostrar JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Crear...", + "created": "Crear {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "La autenticación de usuario ha fallado, por favor inicie sesión de nuevo", + "verifyAccount": "Necesidad de verificar la cuenta", + "functionNotSupported": "La versión actual no soporta esta función. Póngase en contacto con el equipo de Lowcoder Business para actualizar su cuenta.", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Crear componente {comp} Fallido", + "notHandledError": "{method} Método no ejecutado", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Barra de navegación", + "chooseApp": "Elegir aplicación", + "iconTooltip": "Soporta Image src Link o Base64 String como data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Oculto para usuarios no autorizados", + "queryParam": "Parámetros de consulta de URL", + "hashParam": "Parámetros hash de URL", + "tabBar": "Barra de pestañas", + "emptyTabTooltip": "Configurar esta página en el panel derecho", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Teléfono)", + "800": "800px (Tableta)", + "1440": "1440px (portátil)", + "1920": "1920px (pantalla ancha)", + "3200": "3200px (pantalla supergrande)", + "title": "Configuración general de la aplicación", + "autofill": "Autorrelleno", + "userDefined": "A medida", + "default": "Por defecto", + "tooltip": "Cerrar la ventana emergente después de la configuración", + "canvasMaxWidth": "Ancho máximo del lienzo para esta aplicación", + "userDefinedMaxWidth": "Anchura máxima personalizada", + "inputUserDefinedPxValue": "Introduzca un valor de píxel personalizado", + "maxWidthTip": "La anchura máxima debe ser mayor o igual a 350", + "themeSetting": "Tema de estilo aplicado", + "themeSettingDefault": "Por defecto", + "themeCreate": "Crear tema", + "appTitle": "Título", + "appDescription": "Descripción", + "appCategory": "Categoría", + "showPublicHeader": "Mostrar cabecera en vista pública", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Atajos personalizados", + "shortcut": "Atajo", + "action": "Acción", + "empty": "Sin atajos", + "placeholder": "Pulsar acceso directo", + "otherPlatform": "Otros", + "space": "Espacio", + }, + "profile": { + ...en.profile, + + "orgSettings": "Configuración del espacio de trabajo", + "switchOrg": "Cambiar de espacio de trabajo", + "joinedOrg": "Mis espacios de trabajo", + "createOrg": "Crear espacio de trabajo", + "logout": "Cerrar sesión", + "personalInfo": "Mi perfil", + "bindingSuccess": "Vinculación {sourceName} Éxito", + "uploadError": "Error de carga", + "editProfilePicture": "Modifique", + "saveUserNameTooltip": "Pulsa Enter para guardar tu nuevo NicName. Si ves tu Email, significa que acabamos de secuestrarlo como Nombre de Usuario y puedes cambiarlo por uno mejor. Tu Email como nombre de usuario técnico permanece intacto.", + "changeAvatarTooltip": "Puede cargar archivos PNG o JPG", + "nameCheck": "El nombre no puede estar vacío", + "name": "Nombre:", + "namePlaceholder": "Introduzca su nombre", + "toBind": "Encuadernar", + "binding": "Es vinculante", + "bindError": "Parameter Error, Currently Not Supported Binding.", + "bindName": "Enlazar {name}", + "loginAfterBind": "Tras la vinculación, puede utilizar {name} para iniciar sesión", + "bindEmail": "Vincular correo electrónico:", + "email": "Correo electrónico", + "emailCheck": "Introduzca una dirección de correo electrónico válida", + "emailPlaceholder": "Introduzca su dirección de correo electrónico", + "submit": "Enviar", + "bindEmailSuccess": "Éxito de la encuadernación por correo electrónico", + "passwordModifiedSuccess": "Contraseña cambiada con éxito", + "passwordSetSuccess": "Contraseña establecida correctamente", + "oldPassword": "Contraseña antigua:", + "inputCurrentPassword": "Introduzca su contraseña actual", + "newPassword": "Nueva contraseña:", + "inputNewPassword": "Introduzca su nueva contraseña", + "confirmNewPassword": "Confirme la nueva contraseña:", + "inputNewPasswordAgain": "Vuelva a introducir su nueva contraseña", + "password": "Contraseña:", + "modifyPassword": "Modificar contraseña", + "setPassword": "Establecer contraseña", + "alreadySetPassword": "Conjunto de contraseñas", + "setPassPlaceholder": "Puede iniciar sesión con contraseña", + "setPassAfterBind": "Puede establecer la contraseña después de vincular la cuenta", + "socialConnections": "Conexiones sociales", + "changeAvatar": "Cambiar avatar", + "about": "Acerca de", + "userId": "ID de usuario", + "createdAt": "Creado en", + "currentOrg": "Organización actual", + "settings": "Ajustes", + "uiLanguage": "Lenguaje de interfaz de usuario", + "info": "Información", + "createdApps": "Sus aplicaciones creadas", + "createdModules": "Sus módulos creados", + "sharedApps": "Aplicaciones compartidas con usted", + "sharedModules": "Módulos compartidos con usted", + "onMarketplace": "En el mercado", + "howToPublish": "Cómo publicar en Marketplace", + "memberOfOrgs": "Espacios de trabajo Afiliación", + "apiKeys": "Claves API", + "createApiKey": "Crear clave API", + "apiKeyName": "Nombre", + "apiKeyDescription": "Descripción", + "apiKeyCopy": "Haga clic en la clave Api para obtener el valor en su portapapeles", + "apiKey": "Clave API", + "deleteApiKey": "Borrar clave API", + "deleteApiKeyContent": "¿Está seguro de que desea eliminar esta clave API?", + "deleteApiKeyError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Atajos de teclado", + "click": "Haga clic en", + "global": "Global", + "toggleShortcutList": "Alternar atajos de teclado", + "editor": "Editor", + "toggleLeftPanel": "Alternar panel izquierdo", + "toggleBottomPanel": "Alternar panel inferior", + "toggleRightPanel": "Alternar panel derecho", + "toggleAllPanels": "Conmutar todos los paneles", + "preview": "Vista previa", + "undo": "Deshacer", + "redo": "Rehacer", + "showGrid": "Mostrar cuadrícula", + "component": "Componente", + "multiSelect": "Seleccionar varios", + "selectAll": "Seleccionar todo", + "copy": "Copia", + "cut": "Corte", + "paste": "Pegar", + "move": "Mover", + "zoom": "Cambie el tamaño de", + "delete": "Borrar", + "deSelect": "Desmarque", + "queryEditor": "Editor de consultas", + "excuteQuery": "Ejecutar consulta actual", + "editBox": "Editor de texto", + "formatting": "Formato", + "openInLeftPanel": "Abrir en el panel izquierdo", + }, + "help": { + ...en.help, + + "videoText": "Visión general", + "onBtnText": "OK", + "permissionDenyTitle": "💡 ¿No se puede crear una nueva aplicación o fuente de datos?", + "permissionDenyContent": "No tiene permiso para crear la aplicación y la fuente de datos. Póngase en contacto con el administrador para unirse al grupo de desarrolladores.", + "appName": "Aplicación tutorial", + "chat": "Chatea con nosotros", + "docs": "Ver documentación", + "editorTutorial": "Editor de tutoriales", + "update": "¿Qué hay de nuevo?", + "version": "Versión", + "versionWithColon": "Versión:", + "submitIssue": "Presentar un asunto", + }, + "header": { + ...en.header, + + "nameCheckMessage": "El nombre no puede estar vacío", + "viewOnly": "Ver sólo", + "recoverAppSnapshotTitle": "¿Restaurar esta versión?", + "recoverAppSnapshotContent": "Restaurar la aplicación actual a la versión creada en {time}.", + "recoverAppSnapshotMessage": "Restaurar esta versión", + "returnEdit": "Volver al editor", + "deploy": "Publique", + "export": "Exportar a JSON", + "editName": "Editar nombre", + "duplicate": "Duplicar {type}", + "snapshot": "Historia", + "scriptsAndStyles": "Guiones y estilo", + "appSettings": "Configuración de la aplicación", + "preview": "Vista previa", + "editError": "Modo de vista previa de la historia, no se admite ninguna operación.", + "clone": "Clon", + "editorMode_layout": "Diseño", + "editorMode_logic": "Lógica", + "editorMode_both": "Ambos", + "editorMode_layout_tooltip": "Personalice la apariencia y el diseño del componente en la ventana derecha. Ajusta su aspecto, estilo y animación.", + "editorMode_logic_tooltip": "Configure el funcionamiento y la interacción de su componente, en la ventana adecuada. Gestione su contenido y sus comportamientos interactivos.", + "AppEditingBlocked": "Edición de la App bloqueada para:", + "AppEditingBlockedHint": "Los cambios no se guardarán mientras otro usuario esté editando esta aplicación.", + "AppEditingBlockedMessage": "Por favor, espere antes de verificar el estado de edición de la aplicación.", + "AppEditingBlockedCheckStatus": "Verificar estado de la aplicación", + "AppEditingBlockedSomeone": "Alguien", + "AppEditingBlockedMessageSnipped": "está editando esta aplicación", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Inscribirse", + "email": "Correo electrónico:", + "inputEmail": "Introduzca su dirección de correo electrónico", + "inputValidEmail": "Introduzca una dirección de correo electrónico válida", + "forgotPassword": "Contraseña olvidada", + "forgotPasswordInfo": "Introduce tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.", + "forgotPasswordSuccess": "Consulta tu correo electrónico para ver el enlace para restablecer la contraseña.", + "forgotPasswordError": "Algo ha ido mal. Por favor, inténtelo de nuevo.", + "register": "Inscribirse", + "userLogin": "Iniciar sesión", + "login": "Iniciar sesión", + "bind": "Encuadernación", + "passwordCheckLength": "Al menos {min} Caracteres", + "passwordCheckContainsNumberAndLetter": "Debe contener letras y números", + "passwordCheckSpace": "No puede contener espacios en blanco", + "welcomeTitle": "Bienvenido a {productName}", + "inviteWelcomeTitle": "{username} le invita a trabajar juntos", + "terms": "Términos", + "privacy": "Política de privacidad", + "registerHint": "He leído y acepto la", + "chooseAccount": "Elija su cuenta", + "signInLabel": "Iniciar sesión con {name}", + "bindAccount": "Vincular cuenta", + "scanQrCode": "Escanee el código QR con {name}.", + "invalidThirdPartyParam": "Parámetros de terceros no válidos", + "account": "Cuenta", + "inputAccount": "Introduzca su cuenta", + "ldapLogin": "Inicio de sesión LDAP", + "resetPassword": "Restablecer contraseña", + "resetPasswordDesc": "Restablecer la contraseña del usuario {name}. Se generará una nueva contraseña después del restablecimiento.", + "resetSuccess": "Reinicio efectuado", + "resetSuccessDesc": "Se ha restablecido la contraseña. La nueva contraseña es: {password}.", + "resetLostPasswordSuccess": "Se ha restablecido la contraseña. Vuelva a iniciar sesión.", + "copyPassword": "Copiar contraseña", + "poweredByLowcoder": "Desarrollado por: Lowcoder.cloud", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Añada bibliotecas JavaScript a su aplicación actual a través de direcciones URL. lodash, day.js, uuid, numbro están integradas en el sistema para su uso inmediato. Las bibliotecas JavaScript se cargan antes de inicializar la aplicación, lo que puede afectar al rendimiento de la misma.", + "exportedAs": "Exportado como", + "urlTooltip": "Dirección URL de la biblioteca JavaScript, se recomienda [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/)", + "externalLibsHelperText": "Sólo son compatibles las bibliotecas que utilizan el método UMD (Universal Module Definition). Más información: https://github.com/umdjs/umd", + "recommended": "Recomendado", + "viewJSLibraryDocument": "Documento", + "jsLibraryURLError": "URL no válida", + "jsLibraryExist": "La biblioteca JavaScript ya existe", + "jsLibraryEmptyContent": "No se han añadido bibliotecas JavaScript", + "jsLibraryDownloadError": "Error de descarga de la biblioteca JavaScript", + "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada correctamente", + "jsLibraryInstallFailed": "Fallo en la instalación de la biblioteca JavaScript", + "jsLibraryInstallFailedCloud": "Puede que la biblioteca no esté disponible en el Sandbox, [Documentación](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "___TITULAR0___", + "add": "Añadir nuevo", + "jsHelpText": "Añadir un Método o Variable Global a la Aplicación Actual.", + "cssHelpText": "Añadir Estilos a la Aplicación Actual. La estructura DOM puede cambiar a medida que el sistema itera. Intente Modificar Estilos a Través de Propiedades de Componentes.", + "scriptsAndStyles": "Guiones y estilos", + "jsLibrary": "Biblioteca JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Componente", + "componentContent": "El Panel de Componentes Derecho le ofrece muchos Bloques de Aplicación (Componentes) ya hechos. Estos pueden ser arrastrados al lienzo para su uso. También puede crear sus propios componentes con un poco de conocimiento de codificación.", + "canvas": "Lienzo", + "canvasContent": "Construye tus aplicaciones en Canvas con el método \"lo que ves es lo que hay\". Basta con arrastrar y soltar los componentes para diseñar el diseño, y utilizar los atajos de teclado para realizar ediciones rápidas como borrar, copiar y pegar. Una vez seleccionado un componente, puede ajustar todos los detalles, desde el estilo y el diseño hasta la vinculación de datos y el comportamiento lógico. Además, disfrute de la ventaja añadida del diseño adaptable, que garantiza que sus aplicaciones se vean perfectamente en cualquier dispositivo.", + "queryData": "Consultar datos", + "queryDataContent": "Puede crear consultas de datos aquí y conectarse a su MySQL, MongoDB, Redis, Airtable, y muchas otras fuentes de datos. Después de configurar la consulta, haga clic en \"Ejecutar\" para obtener los datos y continuar con el tutorial.", + "compProperties": "Propiedades de los componentes", + "interactiveDemo": "Demostración interactiva", + "interactiveDemoToolTip": "Haga clic para iniciar una demostración interactiva de esta función", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Bienvenido Haga clic en 'App' y comience a crear su primera solicitud.", + "createAppTitle": "Crear aplicación", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Habilitar el Registro NPM personalizado", + "npmRegistryUrl": "Url del registro del MNP", + "npmRegistryUrlRequired": "Introduzca la URL del registro", + "npmRegistryUrlInvalid": "Introduzca una URL válida", + "npmRegistryScope": "Alcance del paquete", + "npmRegistryPattern": "Patrón", + "npmRegistryPatternInvalid": "Por favor, introduzca un patrón válido (empezando por @ para organizaciones).", + "npmRegistryAuth": "Autenticación", + "npmRegistryAuthType": "Tipo de autenticación", + "npmRegistryAuthCredentials": "Credenciales de autenticación", + "npmRegistryAuthCredentialsRequired": "Introduzca las credenciales de registro", + "npmRegistryAuthCredentialsHelp": "Para la autenticación básica, proporcione el nombre de usuario y la contraseña codificados en base64 con el formato 'base64(nombredeusuario:contraseña)'; para la autenticación por token, proporcione el token.", + }, + "history": { + ...en.history, + + "layout": "{0}' ajuste de diseño", + "upgrade": "Actualizar '{0}'", + "delete": "Borrar '{0}'", + "add": "Añadir \"{0}\".", + "modify": "Modificar '{0}'", + "rename": "Cambie el nombre de \"{1}\" a \"{0}\".", + "recover": "Recuperar la versión '{2}", + "recoverVersion": "Recuperar versión", + "andSoOn": "etc.", + "timeFormat": "MM DD a las hh:mm A", + "emptyHistory": "Sin antecedentes", + "currentVersionWithBracket": " (Actual)", + "currentVersion": "Versión actual", + "justNow": "Ahora mismo", + "history": "Historia", + }, + "home": { + ...en.home, + + "profile": "Su perfil", + "news": "Noticias", + "newsLoading": "Se cargará unos segundos.", + "orgHome": "Página de inicio (Org)", + "yourOrg": "Su organización", + "orgHomeTitle": "Página de inicio de la organización", + "appMarketplace": "Mercado de aplicaciones", + "allApplications": "Tus aplicaciones", + "allModules": "Sus módulos", + "allFolders": "Sus carpetas", + "yourFolders": "Sus carpetas", + "modules": "Módulos", + "module": "Módulo", + "api": "API Lowcoder", + "trash": "Trash", + "marketplace": "Mercado", + "allCategories": "Todas las categorías", + "queryLibrary": "Biblioteca de consultas", + "datasource": "Fuentes de datos", + "selectDatasourceType": "Seleccione el tipo de fuente de datos", + "home": "Inicio", + "all": "Todos", + "app": "Aplicación", + "navigation": "Navegación", + "navLayout": "Navegación por PC", + "navLayoutDesc": "Menú a la izquierda para facilitar la navegación.", + "mobileTabLayout": "Navegación móvil", + "mobileTabLayoutDesc": "Barra de navegación inferior para una navegación móvil fluida.", + "folders": "Carpetas", + "folder": "Carpeta", + "rootFolder": "Raíz", + "import": "Importar", + "export": "Exportar a JSON", + "show": "Mostrar", + "inviteUser": "Invitar a miembros", + "createFolder": "Crear carpeta", + "createFolderSubTitle": "Nombre de la carpeta:", + "moveToFolder": "Mover a carpeta", + "moveToTrash": "Mover a la basura", + "moveToFolderSubTitle": "Mueve \"{name}\" a:", + "folderName": "Nombre de la carpeta:", + "resCardSubTitle": "{time} por {creator}", + "trashEmpty": "La papelera está vacía.", + "projectEmpty": "Aquí no hay nada.", + "projectEmptyCanAdd": "Aún no tienes ninguna aplicación. Haz clic en Nueva para empezar.", + "name": "Nombre", + "type": "Tipo", + "creator": "Creado por", + "lastModified": "Última modificación", + "deleteTime": "Borrar hora", + "createTime": "Crear tiempo", + "datasourceName": "Nombre de la fuente de datos", + "databaseName": "Nombre de la base de datos", + "nameCheckMessage": "El nombre no puede estar vacío", + "deleteElementTitle": "Borrar permanentemente", + "moveToTrashSubTitle": "{type} {name} se trasladará a la papelera.", + "deleteElementSubTitle": "Borre {type} {name} permanentemente, no se puede recuperar.", + "deleteSuccessMsg": "Eliminado con éxito", + "deleteErrorMsg": "Error borrado", + "recoverSuccessMsg": "Recuperado con éxito", + "newDatasource": "Nueva fuente de datos", + "creating": "Crear...", + "chooseDataSourceType": "Elija el tipo de fuente de datos", + "folderAlreadyExists": "La carpeta ya existe", + "newNavLayout": "{userName}'s {name}", + "newApp": "El nuevo {userName} de {name}", + "importError": "Error de importación, {message}", + "exportError": "Error de exportación, {message}", + "importSuccess": "Éxito de la importación", + "fileUploadError": "Error de carga de archivos", + "fileFormatError": "Error de formato de archivo", + "groupWithSquareBrackets": "[Grupo]", + "allPermissions": "Propietario", + "shareLink": "Compartir enlace:", + "copyLink": "Copiar enlace", + "appPublicMessage": "Haz pública la aplicación. Cualquiera puede verla.", + "modulePublicMessage": "Haz público el módulo. Cualquiera puede verlo.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Publica tu aplicación en el Mercado Público. Cualquiera podrá verla y copiarla desde allí.", + "moduleMarketplaceMessage": "Publica tu Módulo en el Mercado Público. Cualquiera puede verlo y copiarlo desde allí.", + "marketplaceGoodPublishing": "Asegúrate de que tu aplicación tiene un buen nombre y es fácil de usar. Elimina cualquier información sensible antes de publicarla. Además, elimine las fuentes de datos locales y sustitúyalas por datos temporales estáticos integrados.", + "noMarketplaceApps": "Aún no hay aplicaciones en el mercado", + "errorMarketplaceApps": "Error al cargar Marketplace Apps", + "localMarketplaceTitle": "Mercado local", + "globalMarketplaceTitle": "Mercado público", + "memberPermissionList": "Permisos de los miembros:", + "orgName": "{orgName} admins", + "addMember": "Añadir miembros", + "addPermissionPlaceholder": "Introduzca un nombre para buscar miembros", + "searchMemberOrGroup": "Buscar miembros o grupos:", + "addPermissionErrorMessage": "Fallo al añadir permiso, {message}", + "copyModalTitle": "Clonar \"{name}\"", + "copyNameLabel": "{type} nombre", + "copyModalfolderLabel": "Añadir a la carpeta", + "copyNamePlaceholder": "Por favor, introduzca un nombre {type}.", + "chooseNavType": "Elija el tipo de navegación", + "createNavigation": "Crear navegación", + "howToUseAPI": "Cómo utilizar la API Rest abierta", + "support": "Ayuda", + }, + "support": { + ...en.support, + + "supportTitle": "Soporte Lowcoder", + "supportContent": "Si tiene alguna pregunta o necesita ayuda, utilice el sistema de tickets para resolver su problema rápidamente.", + "newSupportTicket": "Nuevo ticket de soporte", + "ticketTitle": "Título", + "priority": "Prioridad", + "assignee": "Cesionario", + "status": "Estado del billete", + "updatedTime": "Hora de actualización", + "active": "Activo", + "inactive": "Inactivo", + "noEmail": "No Email", + "details": "Detalles", + "reloadTickets": "Entradas Reload", + "createdDate": "Fecha de creación", + "updatedDate": "Fecha de actualización", + "description": "Descripción del problema", + "subtasks": "Subtareas", + "subtasksProgress": "Progreso de todas las subtareas", + "attachments": "Emisión de anexos", + "comments": "Comentarios", + "addComment": "Añadir comentario", + "addAttachment": "Añadir anexo", + "edit": "Editar descripción del ticket", + "save": "Guardar billete Descripción", + "cancel": "Cancelar", + "submitComment": "Enviar comentario", + "upload": "Enviar anexo", + "selectFile": "Seleccionar archivo", + "ticketDescriptionUpdated": "Descripción de la entrada actualizada correctamente", + "ticketDescriptionUpdateFailed": "Error al actualizar la descripción del ticket.", + "writeComment": "Escribe un comentario...", + "ticketCommentAdded": "¡Comentario añadido correctamente!", + "ticketCommentFailed": "No se ha podido añadir el comentario.", + "ticketCommentEmpty": "Por favor, escriba un comentario antes de enviarlo.", + "ticketAttachmentUploaded": "El archivo adjunto se ha cargado correctamente.", + "ticketAttachmentFailed": "No se ha podido cargar el archivo adjunto.", + "ticketAttachmentEmpty": "Seleccione un archivo para cargar.", + "ticketFetchError": "Error al cargar el ticket.", + "ticketNotFound": "Billete no encontrado.", + "addAttachmentFileSize": "El archivo debe pesar menos de 5 MB.", + "goBack": "Volver atrás", + "noDescription": "No hay descripción disponible.", + "createTicket": "Crear un nuevo Ticket de Soporte", + "createTicketTitlePlaceholder": "Introduzca el título (máx. 150 caracteres)", + "createTicketDescriptionTitle": "Describa su problema: cuantos más detalles, mejor:", + "createTicketDescriptionPlaceholder": "Describa el problema en detalle, incluyendo 1) Pasos para reproducir el problema, 2) Comportamiento esperado frente a comportamiento real, 3) Fragmentos de código, si procede, 4) Cualquier componente, API o configuración específicos afectados.", + "createTicketSubmit": "Enviar billete", + "createTicketInfoText": "Una vez creado el billete, puede añadir capturas de pantalla y comentarios en la sección \"Detalles\".", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Posición de los puntos de navegación", + "autoPlay": "Reproducción automática", + "showDots": "Mostrar puntos de navegación", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Nombre de paquete npm o URL no válidos.", + "pluginExisted": "Este plugin npm ya existía", + "compNotFound": "Componente {compName} No encontrado.", + "addPluginModalTitle": "Añadir plugin desde un repositorio npm", + "pluginNameLabel": "URL o nombre del paquete npm", + "noCompText": "Sin componentes.", + "compsLoading": "Cargando...", + "removePluginBtnText": "Eliminar", + "addPluginBtnText": "Añadir plugin npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "El Valor por Defecto del Botón Alternar, Por Ejemplo: Falso", + "trueDefaultText": "Ocultar", + "falseDefaultText": "Mostrar", + "trueLabel": "Texto para True", + "falseLabel": "Texto para Falso", + "trueIconLabel": "Icono de True", + "falseIconLabel": "Icono de Falso", + "iconPosition": "Icono Posición", + "showText": "Mostrar texto", + "alignment": "Alineación", + "showBorder": "Mostrar borde", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Cree aplicaciones de software para su empresa y sus clientes con un mínimo de experiencia en programación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", + "demoText": "Lowcoder | Cree aplicaciones de software para su Empresa y sus Clientes con mínima experiencia en codificación. Lowcoder es la mejor alternativa a Retool, Appsmith o Tooljet.", + "submit": "Enviar", + "style": "Estilo", + "danger": "Peligro", + "warning": "Advertencia", + "success": "Éxito", + "menu": "Menú", + "link": "Enlace", + "customAppearance": "Apariencia personalizada", + "search": "Buscar en", + "pleaseInputNumber": "Introduzca un número", + "mostValue": "Más valor", + "maxRating": "Clasificación máxima", + "notSelect": "No seleccionado", + "halfSelect": "Media selección", + "pleaseSelect": "Seleccione una opción", + "title": "Título", + "content": "Contenido", + "componentNotFound": "El componente no existe", + "example": "Ejemplos", + "defaultMethodDesc": "Establecer el valor de la propiedad {name}.", + "propertyUsage": "Puede leer información relacionada con los componentes accediendo a las propiedades de los componentes por nombre de componente en cualquier lugar donde pueda escribir JavaScript.", + "property": "Propiedades", + "propertyName": "Nombre de la propiedad", + "propertyType": "Tipo", + "propertyDesc": "Descripción", + "event": "Eventos", + "eventName": "Nombre del evento", + "eventDesc": "Descripción", + "mehtod": "Métodos", + "methodUsage": "Tiene la capacidad de interactuar con los componentes a través de sus respectivos métodos, a los que se puede acceder por sus nombres designados dentro de cualquier segmento en el que se utilice JavaScript. Además, estos componentes pueden activarse a través de la acción \"Componente de control\", que se activa en respuesta a eventos específicos.", + "methodName": "Nombre del método", + "methodDesc": "Descripción", + "showBorder": "Mostrar borde", + "haveTry": "Pruébelo usted mismo", + "settings": "Configuración", + "settingValues": "Valor de ajuste", + "defaultValue": "Valor por defecto", + "time": "Tiempo", + "date": "Fecha", + "noValue": "Ninguno", + "xAxisType": "Tipo de eje X", + "hAlignType": "Alineación horizontal", + "leftLeftAlign": "Alineación izquierda-izquierda", + "leftRightAlign": "Alineación izquierda-derecha", + "topLeftAlign": "Alineación superior izquierda", + "topRightAlign": "Alineación superior derecha", + "validation": "Validación", + "required": "Requerido", + "defaultStartDateValue": "Fecha de inicio por defecto", + "defaultEndDateValue": "Fecha de finalización por defecto", + "basicUsage": "Uso básico", + "basicDemoDescription": "Los siguientes ejemplos muestran el uso básico del componente.", + "noDefaultValue": "Sin valor por defecto", + "forbid": "Prohibido", + "placeholder": "Marcador de posición", + "pleaseInputPassword": "Introduzca una contraseña", + "password": "Contraseña", + "textAlign": "Alineación del texto", + "length": "Longitud", + "top": "Top", + "pleaseInputName": "Introduzca su nombre", + "userName": "Nombre", + "fixed": "Fijo", + "responsive": "Respuesta", + "workCount": "Recuento de palabras", + "cascaderOptions": "Opciones de Cascader", + "pleaseSelectCity": "Seleccione una ciudad", + "advanced": "Avanzado", + "showClearIcon": "Mostrar icono de borrado", + /* eslint-disable only-ascii/only-ascii */ + "appleOptionLabel": "🍎 Manzana", + "waterMelonOptionLabel": "🍉 Sandía", + "berryOptionLabel": "🍓 Fresa", + "lemonOptionLabel": "🍋 Limón", + "coconutOptionLabel": "🥥 Coco", + /* eslint-enable only-ascii/only-ascii */ + "likedFruits": "Favoritos", + "option": "Opción", + "singleFileUpload": "Carga de un solo archivo", + "multiFileUpload": "Carga múltiple de archivos", + "folderUpload": "Cargar carpeta", + "multiFile": "Varios archivos", + "folder": "Carpeta", + "open": "Abrir", + "favoriteFruits": "Frutas favoritas", + "pleaseSelectOneFruit": "Seleccione una fruta", + "notComplete": "No Completo", + "complete": "Complete", + "echart": "EChart", + "lineChart": "Gráfico lineal", + "basicLineChart": "Gráfico de líneas básico", + "lineChartType": "Tipo de gráfico de líneas", + "stackLineChart": "Línea apilada", + "areaLineChart": "Línea de área", + "scatterChart": "Gráfico de dispersión", + "scatterShape": "Forma de dispersión", + "scatterShapeCircle": "Círculo", + "scatterShapeRect": "Rectángulo", + "scatterShapeTri": "Triángulo", + "scatterShapeDiamond": "Diamante", + "scatterShapePin": "Chincheta", + "scatterShapeArrow": "Flecha", + "pieChart": "Gráfico circular", + "basicPieChart": "Gráfico circular básico", + "pieChatType": "Tipo de gráfico circular", + "pieChartTypeCircle": "Gráfico de donuts", + "pieChartTypeRose": "Gráfico de rosas", + "titleAlign": "Título Cargo", + "color": "Color", + "dashed": "Dashed", + "imADivider": "Soy una línea divisoria", + "tableSize": "Tamaño de la tabla", + "subMenuItem": "Submenú {num}", + "menuItem": "Menú {num}", + "labelText": "Etiqueta", + "labelPosition": "Etiqueta - Posición", + "labelAlign": "Etiqueta - Alinear", + "optionsOptionType": "Método de configuración", + "styleBackgroundColor": "Color de fondo", + "styleBorderColor": "Color del borde", + "styleColor": "Color de fuente", + "selectionMode": "Modo de selección de filas", + "paginationSetting": "Configuración de la paginación", + "paginationShowSizeChanger": "Ayuda a los usuarios para modificar el número de entradas por página", + "paginationShowSizeChangerButton": "Botón de cambio de talla", + "paginationShowQuickJumper": "Mostrar Quick Jumper", + "paginationHideOnSinglePage": "Ocultar cuando sólo hay una página", + "paginationPageSizeOptions": "Tamaño de página", + "chartConfigCompType": "Tipo de gráfico", + "xConfigType": "Tipo de eje X", + "loading": "Cargando", + "disabled": "Discapacitados", + "minLength": "Longitud mínima", + "maxLength": "Longitud máxima", + "showCount": "Mostrar recuento de palabras", + "autoHeight": "Altura", + "thousandsSeparator": "Separador de miles", + "precision": "Posiciones decimales", + "value": "Valor por defecto", + "formatter": "Formato", + "min": "Valor mínimo", + "max": "Valor máximo", + "step": "Tamaño del escalón", + "start": "Hora de inicio", + "end": "Fin de los tiempos", + "allowHalf": "Permitir media selección", + "filetype": "Tipo de archivo", + "showUploadList": "Mostrar lista de cargas", + "uploadType": "Tipo de carga", + "allowClear": "Mostrar icono de borrado", + "minSize": "Tamaño mínimo del archivo", + "maxSize": "Tamaño máximo del archivo", + "maxFiles": "Número máximo de archivos cargados", + "format": "Formato", + "minDate": "Fecha mínima", + "maxDate": "Fecha máxima", + "minTime": "Tiempo mínimo", + "maxTime": "Tiempo máximo", + "text": "Texto", + "type": "Tipo", + "hideHeader": "Ocultar cabecera", + "hideBordered": "Ocultar frontera", + "src": "URL de la imagen", + "showInfo": "Mostrar valor", + "mode": "Modo", + "onlyMenu": "Sólo Menú", + "horizontalAlignment": "Alineación horizontal", + "row": "Izquierda", + "column": "Top", + "leftAlign": "Alineación izquierda", + "rightAlign": "Alineación correcta", + "percent": "Porcentaje", + "fixedHeight": "Altura fija", + "auto": "Adaptable", + "directory": "Carpeta", + "multiple": "Varios archivos", + "singleFile": "Archivo único", + "manual": "Manual", + "default": "Por defecto", + "small": "Pequeño", + "middle": "Medio", + "large": "Grande", + "single": "Único", + "multi": "Múltiples", + "close": "Cerrar", + "ui": "Modo IU", + "line": "Gráfico lineal", + "scatter": "Gráfico de dispersión", + "pie": "Gráfico circular", + "basicLine": "Gráfico de líneas básico", + "stackedLine": "Gráfico de líneas apiladas", + "areaLine": "Mapa de la zona", + "basicPie": "Gráfico circular básico", + "doughnutPie": "Gráfico de donuts", + "rosePie": "Gráfico de rosas", + "category": "Categoría Eje", + "circle": "Círculo", + "rect": "Rectángulo", + "triangle": "Triángulo", + "diamond": "Diamante", + "pin": "Chincheta", + "arrow": "Flecha", + "left": "Izquierda", + "right": "Derecha", + "center": "Centro", + "bottom": "Fondo", + "justify": "Justificar ambos extremos", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Estado actual de los datos", + "preview": "Vista previa", + "property": "Propiedades", + "console": "Consola Visual Script", + "executeMethods": "Ejecutar métodos", + "noMethods": "Sin métodos.", + "methodParams": "Parámetros del método", + "methodParamsHelp": "Parámetros del método de entrada usando JSON. Por ejemplo, puede establecer los parámetros de setValue con: [1] o 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Botón Fondo", + "btnText": "Texto del botón", + "title": "Título", + "selectBackground": "Antecedentes", + }, + "idSource": { + ...en.idSource, + + "title": "Proveedor de autenticación de usuarios", + "form": "Correo electrónico", + "pay": "Premium", + "enable": "Activar", + "unEnable": "No activado", + "loginType": "Tipo de conexión", + "status": "Estado", + "desc": "Descripción", + "manual": "Libreta de direcciones:", + "syncManual": "Sincronizar libreta de direcciones", + "syncManualSuccess": "Sincronización realizada", + "enableRegister": "Permitir el registro", + "saveBtn": "Guardar y activar", + "save": "Guardar", + "none": "Ninguno", + "formPlaceholder": "Por favor, introduzca {label}", + "formSelectPlaceholder": "Por favor, seleccione el {label}", + "saveSuccess": "Guardado correctamente", + "dangerLabel": "Zona de peligro", + "dangerTip": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Proceda con precaución.", + "disable": "Desactivar", + "disableSuccess": "Desactivado correctamente", + "encryptedServer": "-------- Cifrado en el lado del servidor --------", + "disableTip": "Consejos", + "disableContent": "Si desactiva este proveedor de ID, es posible que algunos usuarios no puedan iniciar sesión. Está seguro de continuar?", + "manualTip": "", + "lockTip": "El contenido está bloqueado. Para realizar cambios, haga clic en {icon} para desbloquear.", + "lockModalContent": "La modificación del campo \"Atributo ID\" puede tener repercusiones importantes en la identificación del usuario. Por favor, confirme que entiende las implicaciones de este cambio antes de proceder.", + "payUserTag": "Premium", + "source": "Fuente", + "sourceName": "Nombre del proveedor de autenticación", + "sourceDescription": "Descripción del proveedor de autenticación", + "sourceIcon": "Icono de proveedor de autenticación", + "sourceCategory": "Categoría de proveedor de autenticación", + "souceIssuerURI": "URI del emisor del proveedor de autenticación", + "souceAuthorizationEndpoint": "Proveedor de autenticación Punto final de autorización", + "souceTokenEndpoint": "Punto final del token del proveedor de autenticación", + "souceUserInfoEndpoint": "Proveedor de autenticación Información de usuario Punto final", + "userInfoIntrospection": "Utilizar la introspección de usuarios de OpenID", + "userCanSelectAccounts": "El usuario puede seleccionar una cuenta", + "sourceCategoryEnterprise": "Identidad empresarial", + "sourceCategoryCloud": "Servicios en la nube", + "sourceCategorySocial": "Social Media", + "sourceCategoryDevelopment": "Desarrollo", + "sourceCategoryTools": "Herramientas y productividad", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Configurar vista de ranura", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "speed": "Velocidad", + "width": "Anchura", + "height": "Altura", + "backgroundColor": "Color de fondo", + "animationStart": "Inicio de la animación", + "valueDesc": "Datos JSON actuales", + "loop": "Bucle", + "auto": "Coche", + "onHover": "Al pasar el ratón", + "singlePlay": "Juego individual", + "endlessLoop": "Bucle sin fin", + "keepLastFrame": "Mantener visualizado el último fotograma", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Título Color", + "subTitleColor": "Color del subtítulo", + "labelColor": "Color de la etiqueta", + "value": "Datos cronológicos", + "mode": "Orden de visualización", + "left": "Derecho de contenido", + "right": "Contenido Izquierda", + "alternate": "Orden alternativo de los contenidos", + "modeTooltip": "Configurar el contenido para que aparezca a izquierda/derecha o alternativamente en ambos lados de la línea de tiempo", + "reverse": "Eventos más recientes primero", + "pending": "Texto de nodo pendiente", + "pendingDescription": "Si se establece, se mostrará un último nodo con el texto y un indicador de espera.", + "defaultPending": "Mejora continua", + "clickTitleEvent": "Haga clic en Título Evento", + "clickTitleEventDesc": "Haga clic en Título Evento", + "Introduction": "Introducción Claves", + "helpTitle": "Título del cronograma (obligatorio)", + "helpsubTitle": "Subtítulo de la cronología", + "helpLabel": "Etiqueta de la línea de tiempo, utilizada para mostrar fechas", + "helpColor": "Indica el color del nodo de la línea de tiempo", + "helpDot": "Representación de nodos de la línea de tiempo como iconos de diseño de Ant", + "helpTitleColor": "Controlar individualmente el color del título del nodo", + "helpSubTitleColor": "Controlar individualmente el color del subtítulo del nodo", + "helpLabelColor": "Control individual del color del icono de nodo", + "valueDesc": "Datos de la cronología", + "clickedObjectDesc": "Datos del artículo seleccionado", + "clickedIndexDesc": "Índice de elementos pulsados", + }, + "comment": { + ...en.comment, + + "value": "Cómo listar datos", + "showSendButton": "Permitir comentarios", + "title": "Título", + "titledDefaultValue": "%d Comentario en total", + "placeholder": "Mayúsculas + Intro para comentar; @ o # para entrada rápida", + "placeholderDec": "Marcador de posición", + "buttonTextDec": "Botón Título", + "buttonText": "Cómo", + "mentionList": "Datos de la lista de menciones", + "mentionListDec": "Palabras clave con mención clave; datos de la lista con mención de valor", + "userInfo": "Información del usuario", + "dateErr": "Error de fecha", + "commentList": "Cómo hacer una lista", + "deletedItem": "Elemento suprimido", + "submitedItem": "Artículo presentado", + "deleteAble": "Mostrar botón Eliminar", + "Introduction": "Introducción Claves", + "helpUser": "Información del usuario (obligatoria)", + "helpname": "Nombre de usuario (obligatorio)", + "helpavatar": "Avatar URL (Alta prioridad)", + "helpdisplayName": "Nombre para mostrar (prioridad baja)", + "helpvalue": "Contenido", + "helpcreatedAt": "Fecha de creación", + }, + "mention": { + ...en.mention, + + "mentionList": "Datos de la lista de menciones", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Complete Value", + "checkedValueFrom": "Valor comprobado De", + "ignoreCase": "Buscar Ignorar caso", + "searchLabelOnly": "Buscar sólo etiqueta", + "searchFirstPY": "Buscar First Pinyin", + "searchCompletePY": "Buscar Pinyin completo", + "searchText": "Buscar texto", + "SectionDataName": "Autocompletar datos", + "valueInItems": "Valor en artículos", + "type": "Tipo", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Clave", + "selectLable": "Etiqueta", + "ComponentType": "Tipo de componente", + "colorIcon": "Azul", + "grewIcon": "Gris", + "noneIcon": "Ninguno", + "small": "Pequeño", + "large": "Grande", + "componentSize": "Tamaño del componente", + "Introduction": "Introducción Claves", + "helpLabel": "Etiqueta", + "helpValue": "Valor", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Columnas", + "addColumn": "Añadir columna", + "columnDefinition": "Definición de columna", + "rowDefinition": "Definición de fila", + "columnGap": "Hueco entre columnas", + "rowGap": "Hueco entre filas", + "atLeastOneColumnError": "El diseño adaptable mantiene al menos una columna", + "columnsPerRow": "Columnas por fila", + "columnsSpacing": "Espacio entre columnas (px)", + "horizontal": "Horizontal", + "vertical": "Vertical", + "mobile": "Móvil", + "tablet": "Tableta", + "desktop": "Escritorio", + "rowStyle": "Estilo Fila", + "columnStyle": "Estilo columna", + "minWidth": "Mín. Anchura", + "rowBreak": "Row Break", + "useComponentWidth": "Usar tamaño propio", + "useComponentWidthDesc": "Usa el ancho del contenedor en lugar del ancho de la aplicación", + "matchColumnsHeight": "Igualar la altura de las columnas", + "rowLayout": "Disposición de filas", + "columnsLayout": "Disposición de las columnas", + "columnsDefinitionTooltip": "Las columnas pueden definirse libremente basándose en las propiedades CSS de las columnas. Por ejemplo, 'auto auto' creará dos columnas con la misma anchura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Las filas pueden definirse libremente basándose en las propiedades CSS de las filas. Por ejemplo, 'auto auto' creará dos filas con la misma altura. Más información: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modo", + "modeInline": "En línea", + "modeVertical": "Vertical", + "modeHorizontal": "Horizontal", + "width": "Anchura", + "widthTooltip": "Píxel o Porcentaje, por ejemplo 520, 60%.", + "navStyle": "Menú de estilo", + "navItemStyle": "Estilo del elemento de menú", + "navBackground": "Imagen de fondo", + "mobileNavVerticalOrientation": "Orientación vertical", + "mobileNavVerticalMaxWidth": "Anchura máxima", + "mobileNavBarHeight": "Altura de la barra de navegación", + "mobileNavVerticalShowSeparator": "Mostrar separador", + "mobileNavIconSize": "Tamaño del icono", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Línea de fecha internacional W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawai", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Hora del Pacífico (EE.UU.)", + "UTC-06:00": "(UTC-06:00) Hora central (EE.UU.)", + "UTC-05:00": "(UTC-05:00) Hora del Este (EE.UU.)", + "UTC-04:00": "(UTC-04:00) Hora del Atlántico", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Cabo Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlín, Roma", + "UTC+02:00": "(UTC+02:00) Atenas, Bucarest", + "UTC+03:00": "(UTC+03:00) Moscú", + "UTC+04:00": "(UTC+04:00) Dubai, Mascate", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) Nueva Delhi", + "UTC+05:45": "(UTC+05:45) Katmandú", + "UTC+06:00": "(UTC+06:00) Dacca", + "UTC+06:30": "(UTC+06:30) Yangón", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Pekín, HK", + "UTC+09:00": "(UTC+09:00) Tokio, Seúl", + "UTC+09:30": "(UTC+09:30) Adelaida, Darwin", + "UTC+10:00": "(UTC+10:00) Sídney", + "UTC+11:00": "(UTC+11:00) Islas Salomón, Nueva Caledonia", + "UTC+12:00": "(UTC+12:00) Auckland, Fiyi", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "Elección de usuario", + }, + "tour": { + ...en.tour, + + "section1Title": "Pasos", + "section1Subtitle": "Pasos", + "tooltipExampleHeader": "Ejemplo:", + "tooltipSignatureHeader": "Firma:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Título", + "placeholder": "Bienvenido", + "tooltip": "El título del paso. Cualquier HTML es válido aquí.", + }, + "description": { + ...en.tour.options.description, + + "label": "Descripción", + "placeholder": "¡Bienvenido a lowcoder!", + "tooltip": "La descripción del paso. Cualquier HTML es válido aquí.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Máscara", + "tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar props personalizados, por defecto sigue la propiedad `mask` de Tour.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Flecha", + "tooltip": "Activa y desactiva la flecha o la mueve para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Tipo", + "tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores pueden ser controlados con la sección de estilo del tour principal.", + }, + "target": { + ...en.tour.options.target, + + "label": "Componente", + "tooltip": "El componente en el que quieres poner el tooltip, o déjalo vacío si simplemente quieres un modal en medio de la pantalla.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI de la imagen de portada", + "tooltip": "Un URI para una imagen que desea mostrar con el paso", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Indicadores Render", + "tooltip": "Proporciona un indicador personalizado para saber en qué paso se encuentra", + "tooltipValidTypes": "Format es una función que acepta dos args, `current` y `total` y devuelve un ReactNode", + "tooltipFunctionSignatureHeader": "Firma:", + "tooltipFunctionSignature": "(actual: número, total: número) => ReactNode", + "tooltipExampleHeader": "Ejemplo:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Desactivar la interacción", + "tooltip": "Desactiva la interacción en la zona resaltada.", + }, + "mask": { + ...en.tour.mask, + + "label": "Máscara", + "tooltip": "Si habilitar el enmascaramiento, cambiar el estilo de la máscara y el color de relleno al pasar accesorios personalizados, el valor predeterminado sigue la propiedad `mask` de Tour. Se puede anular a nivel de paso.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, empty, o un objeto JSON siguiendo el CSSProperties Schema de Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Colocación", + "tooltip": "Posición de la tarjeta guía respecto al elemento de destino. Puede anularse en el nivel de paso.", + "tooltipValidOptions": "Opciones válidas", + "tooltipValidOptionsAbove": "Por encima del componente:", + "tooltipValidOptionsLeft": "A la izquierda del componente:", + "tooltipValidOptionsRight": "A la derecha del componente:", + "tooltipValidOptionsBelow": "Debajo del componente:", + "tooltipValidOptionsOnTop": "Encima del componente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Flecha", + "tooltip": "Activa y desactiva la flecha o la desplaza para que apunte al centro del componente, si se desea; de lo contrario, la flecha siempre apuntará cerca de la parte superior del componente. Se puede anular en el nivel de paso.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Tipo", + "tooltip": "El tipo de tooltip, esto afecta al color de fondo y al color del texto. Los colores se pueden controlar con la sección de estilo del recorrido principal. Se puede anular a nivel de paso.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Cómo desarrollar un plugin npm", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Utilizar bibliotecas de terceros", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/plantilla-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + }; diff --git a/translations/locales/it-updated.js b/translations/locales/it-updated.js new file mode 100644 index 0000000000..ebbf4a7dfd --- /dev/null +++ b/translations/locales/it-updated.js @@ -0,0 +1,4844 @@ + +import { en } from "./en.js"; +export const it = { + ...en, + + "productName": "Lowcoder", + "productDesc": "Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è un'eccellente alternativa a Retool, Appsmith e Tooljet.", + "notSupportedBrowser": "Il browser in uso potrebbe presentare problemi di compatibilità. Per un'esperienza d'uso ottimale, utilizzare l'ultima versione di Chrome.", + "create": "Creare", + "move": "Muoversi", + "addItem": "Aggiungi", + "newItem": "Nuovo", + "copy": "Copia", + "rename": "Rinominare", + "delete": "Cancellare", + "deletePermanently": "Cancellare definitivamente", + "remove": "Rimuovere", + "recover": "Recupero", + "edit": "Modifica", + "view": "Vista", + "value": "Valore", + "data": "Dati", + "information": "Informazioni", + "success": "Il successo", + "warning": "Avvertenze", + "error": "Errore", + "reference": "Riferimento", + "text": "Testo", + "basic": "Base", + "label": "Etichetta", + "layout": "Layout", + "color": "Colore", + "form": "Forma", + "menu": "Menu", + "menuItem": "Voce di menu", + "ok": "OK", + "cancel": "Annulla", + "finish": "Finitura", + "reset": "Reset", + "icon": "Icona", + "code": "Codice", + "title": "Titolo", + "emptyContent": "Contenuto vuoto", + "more": "Di più", + "search": "Ricerca", + "back": "Indietro", + "accessControl": "Controllo degli accessi", + "copySuccess": "Copiato con successo", + "copyError": "Errore di copia", + "api": { + ...en.api, + + "publishSuccess": "Pubblicato con successo", + "recoverFailed": "Recupero fallito", + "needUpdate": "La versione attuale è obsoleta. Si prega di aggiornare alla versione più recente.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "L'editor di codice attuale non supporta la formattazione automatica.", + "fold": "Piegare", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Impostare la proprietà: {property}", + "clearDesc": "Proprietà libera: {property}", + "resetDesc": "Ripristinare la proprietà: {property} al valore predefinito", + }, + "method": { + ...en.method, + + "focus": "Impostare la messa a fuoco", + "focusOptions": "Opzioni di messa a fuoco. Vedere HTMLElement.focus()", + "blur": "Rimuovere la messa a fuoco", + "click": "Cliccare", + "select": "Seleziona tutto il testo", + "setSelectionRange": "Impostare le posizioni iniziali e finali della selezione di testo", + "selectionStart": "Indice basato su 0 del primo carattere selezionato", + "selectionEnd": "Indice basato su 0 del carattere successivo all'ultimo carattere selezionato", + "setRangeText": "Sostituire l'intervallo di testo", + "replacement": "Stringa da inserire", + "replaceStart": "Indice basato su 0 del primo carattere da sostituire", + "replaceEnd": "Indice basato su 0 del carattere dopo l'ultimo carattere da sostituire", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Il caricamento del componente non è riuscito. Controllare la configurazione.", + "clickToReload": "Fare clic per ricaricare", + "errorMsg": "Errore:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Supporta solo i tipi di immagine {types}.", + "exceedSizeError": "Le dimensioni dell'immagine non devono superare {size}.", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Non supportato", + "selectAtLeastOneComponent": "Selezionare almeno un componente", + "selectCompFirst": "Selezionare i componenti prima di copiare", + "noContainerSelected": "[Bug] Nessun contenitore selezionato", + "deleteCompsSuccess": "Eliminato con successo. Premere {undoKey} per annullare.", + "deleteCompsTitle": "Eliminazione dei componenti", + "deleteCompsBody": "Siete sicuri di voler eliminare {compNum} componenti selezionati?", + "cutCompsSuccess": "Tagliare con successo. Premere {pasteKey} per incollare o {undoKey} per annullare.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Query di dati nella vostra applicazione", + "globals": "Variabili di dati globali", + "propTipsArr": "{num} Articoli", + "propTips": "{num} Chiavi", + "propTipArr": "{num} Oggetto", + "propTip": "{num} Chiave", + "stateTab": "Stato", + "settingsTab": "Impostazioni", + "toolbarTitle": "Individualizzazione", + "toolbarPreload": "Script e stili", + "components": "Componenti attivi", + "modals": "modali in-app", + "expandTip": "Fare clic per mostrare i dati di {component}", + "collapseTip": "Fare clic per nascondere i dati di {component}.", + "layers": "Strati", + "activatelayers": "Utilizzare i livelli dinamici", + "selectedComponents": "Componenti selezionati...", + "displayComponents": "controllo Display", + "lockComponents": "controllo Posizione", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Data Queries", + "run": "Correre", + "noSelectedQuery": "Nessuna query selezionata", + "metaData": "Metadati della fonte di dati", + "noMetadata": "Nessun metadato disponibile", + "metaSearchPlaceholder": "Ricerca metadati", + "allData": "Tutti i tavoli", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Proprietà", + "noSelectedComps": "Nessun componente selezionato. Fare clic su un componente per visualizzarne le proprietà.", + "createTab": "Inserire", + "searchPlaceHolder": "Ricerca di componenti o moduli", + "uiComponentTab": "Componenti", + "extensionTab": "Estensioni", + "modulesTab": "Moduli", + "moduleListTitle": "Moduli", + "pluginListTitle": "Plugin", + "emptyModules": "I moduli sono Mikro-App riutilizzabili. Possono essere incorporati nella vostra App.", + "searchNotFound": "Non riuscite a trovare il componente giusto?", + "emptyPlugins": "Nessun plugin aggiunto", + "contactUs": "Contatto", + "issueHere": "qui.", + "folderListTitle": "Cartelle", + }, + "prop": { + ...en.prop, + + "expand": "Espandi", + "columns": "Colonne", + "videokey": "Chiave video", + "rowSelection": "Selezione della riga", + "toolbar": "Barra degli strumenti", + "pagination": "Paginazione", + "logo": "Logo", + "style": "Stile", + "inputs": "Ingressi", + "meta": "Metadati", + "data": "Dati", + "hide": "Nascondere", + "loading": "Caricamento", + "disabled": "Disabili", + "placeholder": "Segnaposto", + "showClear": "Mostra il pulsante Cancella", + "showSearch": "Ricercabile", + "defaultValue": "Valore predefinito", + "required": "Campo obbligatorio", + "showEmptyValidation": "Mostra convalida su vuoto/ripristino", + "readOnly": "Solo lettura", + "readOnlyTooltip": "I componenti di sola lettura appaiono normali ma non possono essere modificati.", + "minimum": "Minimo", + "maximum": "Massimo", + "regex": "Regex", + "minLength": "Lunghezza minima", + "maxLength": "Lunghezza massima", + "height": "Altezza", + "width": "Larghezza", + "selectApp": "Selezionare l'applicazione", + "showCount": "Mostra il conteggio", + "tabIndex": "Scheda Indice", + "textType": "Tipo di testo", + "customRule": "Regola personalizzata", + "customRuleTooltip": "Una stringa non vuota indica un errore; vuota o nulla significa che la convalida è stata superata. Esempio:", + "manual": "Manuale", + "map": "Mappa", + "json": "JSON", + "use12Hours": "Utilizzare il formato a 12 ore", + "hourStep": "Ora Passo", + "minuteStep": "Passo di un minuto", + "secondStep": "Secondo passo", + "minDate": "Data minima", + "maxDate": "Data massima", + "minTime": "Tempo minimo", + "maxTime": "Tempo massimo", + "type": "Tipo", + "showLabel": "Mostra etichetta", + "showHeader": "Mostra intestazione", + "showBody": "Mostra il corpo", + "showSider": "Mostra Sider", + "innerSider": "Pagine interne", + "showFooter": "Mostra piè di pagina", + "maskClosable": "Fare clic su Fuori per chiudere", + "escapeClose": "Abilita la chiusura con il tasto Escape", + "toggleClose": "Abilita il pulsante di chiusura", + "showMask": "Mostra maschera", + "textOverflow": "Overflow del testo", + "scrollbar": "Mostra barre di scorrimento", + "showVerticalScrollbar": "Mostra barra di scorrimento verticale", + "showHorizontalScrollbar": "Show Horizontal Scrollbar", + "siderScrollbar": "Mostra le barre di scorrimento in Sider", + "mainScrollbar": "Mostra le barre di scorrimento nel contenuto principale", + "modalScrollbar": "Mostra le barre di scorrimento nella finestra modale", + "drawerScrollbar": "Mostra le barre di scorrimento nel cassetto", + "textAreaScrollBar": "Mostra le barre di scorrimento nell'area di testo", + "siderRight": "Show sider a destra", + "siderWidth": "Larghezza Sider", + "siderWidthTooltip": "La larghezza del cursore supporta percentuali (%) e pixel (px).", + "siderCollapsedWidth": "Sider Larghezza collassata", + "siderCollapsedWidthTooltip": "La larghezza collassata del cursore supporta percentuali (%) e pixel (px).", + "siderCollapsible": "Sider pieghevole", + "siderCollapsed": "Sider è crollato", + "contentScrollbar": "Mostra le barre di scorrimento nel contenuto", + "appID": "Id dell'applicazione", + "showApp": "Mostrare un'applicazione nell'area dei contenuti", + "showAppTooltip": "È possibile visualizzare intere applicazioni nell'area dei contenuti. Si tenga presente che per i moduli non sono supportati gli eventi e i metodi di input e output.", + "baseURL": "API Base URL", + "horizontal": "Orizzontale", + "minHorizontalWidth": "Larghezza orizzontale minima", + "component": "Identificatori di componenti propri", + "className": "Nome della classe CSS", + "dataTestId": "ID individuale", + "preventOverwriting": "Impedire la sovrascrittura degli stili", + "color": "Colore", + "horizontalGridCells": "Celle della griglia orizzontale", + "verticalGridCells": "Celle della griglia verticale", + "timeZone": "Fuso orario", + "pickerMode": "Modalità Picker", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Auto", + "fixed": "Fisso", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Passaggio del mouse", + "wrap": "Avvolgimento", + }, + "labelProp": { + ...en.labelProp, + + "text": "Etichetta", + "tooltip": "Tooltip", + "position": "Posizione", + "collapse": "Crollo", + "left": "A sinistra", + "right": "Diritto", + "top": "In alto", + "align": "Allineamento", + "width": "Larghezza", + "widthTooltip": "La larghezza dell'etichetta supporta le percentuali (%) e i pixel (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Gestori di eventi", + "emptyEventHandlers": "Nessun gestore di eventi", + "incomplete": "Selezione incompleta", + "inlineEventTitle": "Su {eventName}", + "event": "Evento", + "action": "Azione", + "noSelect": "Nessuna selezione", + "runQuery": "Run a Data Query", + "selectQuery": "Selezionare la query di dati", + "controlComp": "Controllo di un componente", + "runScript": "Eseguire JavaScript", + "runScriptPlaceHolder": "Scrivere qui il codice", + "component": "Component", + "method": "Metodo", + "setTempState": "Impostare un valore di Stato temporaneo", + "state": "Stato", + "triggerModuleEvent": "Attivare un evento del modulo", + "moduleEvent": "Modulo Evento", + "goToApp": "Vai a un'altra applicazione", + "queryParams": "Parametri della query", + "queryVariables": "Variabili della query", + "hashParams": "Parametri Hash", + "showNotification": "Mostra una notifica", + "text": "Testo", + "level": "Livello", + "duration": "Durata", + "notifyDurationTooltip": "L'unità di tempo può essere 's' (secondo, default) o 'ms' (millisecondo). La durata massima è di {max} secondi", + "goToURL": "Aprire un URL", + "openInNewTab": "Aprire in una nuova scheda", + "copyToClipboard": "Copiare un valore negli Appunti", + "copyToClipboardValue": "Valore", + "export": "Esportazione dei dati", + "exportNoFileType": "Nessuna selezione (opzionale)", + "fileName": "Nome del file", + "fileNameTooltip": "Includere l'estensione per specificare il tipo di file, ad esempio 'image.png'.", + "fileType": "Tipo di file", + "condition": "Eseguire solo quando...", + "conditionTooltip": "Eseguire il gestore dell'evento solo quando la condizione è valutata 'true'.", + "debounce": "Debounce per", + "throttle": "Acceleratore per", + "slowdownTooltip": "Utilizzare il debounce o il throttle per controllare la frequenza di attivazione delle azioni. L'unità di tempo può essere 'ms' (millisecondo, default) o 's' (secondo).", + "notHandledError": "Non gestito", + "currentApp": "Attuale", + "inputEventHandlers": "Gestori di eventi di ingresso", + "inputEventHandlersDesc": "Gestori di eventi relativi all'input dell'utente", + "buttonEventHandlers": "Gestori di eventi dei pulsanti", + "buttonEventHandlersDesc": "Gestori di eventi relativi ai clic dei pulsanti", + "changeEventHandlers": "Modifica dei gestori di eventi", + "changeEventHandlersDesc": "Gestori di eventi relativi a modifiche del valore", + "editedEventHandlers": "Modifica dei gestori di eventi", + "editedEventHandlersDesc": "Gestori di eventi relativi allo stato modificato degli elementi", + "clickEventHandlers": "Gestori di eventi di clic", + "clickEventHandlersDesc": "Gestori di eventi relativi ai clic", + "keyDownEventHandlers": "Gestori di eventi di abbassamento dei tasti", + "keyDownEventHandlersDesc": "Gestori di eventi relativi agli eventi di abbassamento dei tasti", + "checkboxEventHandlers": "Gestori di eventi di caselle di controllo", + "checkboxEventHandlersDesc": "Gestori di eventi relativi alle modifiche delle caselle di controllo", + "dragEventHandlers": "Gestori di eventi di trascinamento", + "dragEventHandlersDesc": "Gestori di eventi relativi agli eventi di trascinamento", + "elementEventHandlers": "Gestori di elementi", + "elementEventHandlersDesc": "Gestori di eventi relativi agli eventi generici degli elementi di dati", + "mediaEventHandlers": "Gestori di eventi multimediali", + "mediaEventHandlersDesc": "Gestori di eventi relativi agli eventi multimediali", + "scannerEventHandlers": "Gestori di eventi dello scanner", + "scannerEventHandlersDesc": "Gestori di eventi relativi agli eventi dello scanner", + "chartEventHandlers": "Gestori di eventi del grafico", + "chartEventHandlersDesc": "Gestori di eventi relativi agli eventi dei grafici", + "geoMapEventHandlers": "Gestori di eventi della mappa geografica", + "geoMapEventHandlersDesc": "Gestori di eventi relativi agli eventi delle mappe geografiche", + "stepEventHandlers": "Gestori di eventi di passo", + "stepEventHandlersDesc": "Gestori di eventi relativi agli eventi dell'interfaccia utente a gradini", + "shareEventHandlers": "Condividere i gestori di eventi", + "shareEventHandlersDesc": "Gestori di eventi correlati agli eventi di condivisione", + "selectEventHandlers": "Selezionare i gestori di eventi", + "selectEventHandlersDesc": "Gestori di eventi correlati a Seleziona eventi", + "meetingEventHandlers": "Gestori di eventi di riunione", + "meetingEventHandlersDesc": "Gestori di eventi relativi agli eventi di riunione", + "collaborationEventHandlers": "Gestori di eventi di collaborazione", + "collaborationEventHandlersDesc": "Gestori di eventi relativi agli eventi di collaborazione", + "set": "Set", + "clear": "Libero", + "reset": "Reset", + "messageType": "Tipo di messaggio", + "placement": "Posizionamento", + "description": "Descrizione", + }, + "event": { + ...en.event, + + "submit": "Invia", + "submitDesc": "Trigger su Submit", + "change": "Cambiamento", + "changeDesc": "Trigger su variazioni di valore", + "focus": "Focus", + "focusDesc": "Trigger su Focus", + "blur": "Sfocatura", + "blurDesc": "Trigger su Blur", + "click": "Cliccare", + "clickDesc": "Trigger su clic", + "doubleClick": "Doppio clic", + "doubleClickDesc": "Trigger su doppio clic", + "rightClick": "Cliccare con il tasto destro del mouse", + "rightClickDesc": "Trigger su clic destro", + "keyDown": "Tasto giù", + "keyDownDesc": "Trigger a tasto abbassato", + "select": "Selezionare", + "selectDesc": "Trigger su selezione", + "checked": "Controllato", + "checkedDesc": "Trigger quando una casella di controllo è selezionata", + "unchecked": "Non controllato", + "uncheckedDesc": "Trigger quando una casella di controllo è deselezionata", + "drag": "Trascinamento", + "dragDesc": "Trigger su trascinamento", + "drop": "Goccia", + "dropDesc": "Trigger su caduta", + "open": "Aperto", + "openDesc": "Trigger all'apertura", + "mute": "Muto", + "muteDesc": "Trigger su Mute di un microfono", + "unmute": "Disattivare l'audio", + "unmuteDesc": "Trigger di disattivazione di un microfono", + "showCamera": "Mostra telecamera", + "showCameraDesc": "Si attiva quando Show Camera è attivo", + "hideCamera": "Nascondere la telecamera", + "hideCameraDesc": "Si attiva quando Show Camera è disattivato", + "shareScreen": "Schermo di condivisione", + "shareScreenDesc": "Trigger nella schermata di condivisione", + "shareScreenEnd": "Condividi schermo Fine", + "shareScreenEndDesc": "Trigger su Share Screen End", + "shareControl": "Controllo delle azioni", + "shareControlDesc": "Trigger sul controllo delle azioni", + "shareControlEnd": "Controllo delle azioni Fine", + "shareControlEndDesc": "Trigger su Share Control End", + "shareContent": "Condividi il contenuto", + "shareContentDesc": "Trigger su Condividi contenuto", + "shareContentEnd": "Condividi il contenuto Fine", + "shareContentEndDesc": "Trigger su Share Content End", + "stopShare": "Stop alla quota", + "stopShareDesc": "Trigger su Stop Share", + "meetingStart": "Inizio della riunione", + "meetingStartDesc": "Trigger all'avvio della riunione", + "meetingEnd": "Fine della riunione", + "meetingEndDesc": "Trigger a fine riunione", + "meetingJoin": "Riunione Partecipa", + "meetingJoinDesc": "Trigger all'iscrizione alla riunione", + "meetingLeave": "Congedo per riunioni", + "meetingLeaveDesc": "Fattori scatenanti del congedo per riunioni", + "play": "Gioco", + "playDesc": "Trigger in gioco", + "pause": "Pausa", + "pauseDesc": "Trigger in pausa", + "ended": "Terminato", + "endedDesc": "Trigger su Ended", + "step": "Passo", + "stepDesc": "Trigger su Step", + "next": "Avanti", + "nextDesc": "Trigger su Next", + "finished": "Finito", + "finishedDesc": "Trigger su Finito", + "saved": "Salvati", + "savedDesc": "Trigger quando un elemento viene salvato", + "edited": "Modificato", + "editedDesc": "Trigger quando un elemento viene modificato", + "geoMapMove": "Spostamento della mappa geografica", + "geoMapMoveDesc": "Trigger quando gli utenti spostano la mappa geografica", + "geoMapZoom": "Zoom mappa geografica", + "geoMapZoomDesc": "Trigger quando gli utenti ingrandiscono la mappa", + "geoMapSelect": "Selezione della mappa geografica", + "geoMapSelectDesc": "Trigger quando gli utenti selezionano un elemento sulla mappa geografica", + "scannerSuccess": "Successo dello scanner", + "scannerSuccessDesc": "Si attiva quando uno scanner esegue una scansione con successo", + "scannerError": "Errore dello scanner", + "scannerErrorDesc": "Si attiva quando uno scanner non riesce a eseguire la scansione", + "chartZoom": "Zoom del grafico", + "chartZoomDesc": "Trigger sullo zoom del grafico", + "chartHover": "Grafico Hover", + "chartHoverDesc": "Trigger al passaggio del mouse sul grafico", + "chartSelect": "Selezione del grafico", + "chartSelectDesc": "Trigger su selezione del grafico", + "chartDeselect": "Deselezione del grafico", + "chartDeselectDesc": "Deselezione dei trigger sul grafico", + "close": "Chiudere", + "closeDesc": "Trigger su chiusura", + "parse": "Parse", + "parseDesc": "Trigger su Parse", + "success": "Il successo", + "successDesc": "I trigger del successo", + "delete": "Cancellare", + "deleteDesc": "Trigger su cancellazione", + "mention": "Menzione", + "mentionDesc": "Trigger su menzione", + "search": "Ricerca", + "searchDesc": "Trigger di ricerca", + "selectedChange": "Cambio di selezione", + "selectedChangeDesc": "Trigger su selezione modificata", + "clickExtra": "Fare clic su Azione", + "clickExtraDesc": "Trigger al clic su un elemento extra", + "start": "Inizio", + "startDesc": "Trigger all'avvio", + "resume": "Il curriculum", + "resumeDesc": "Trigger sul curriculum", + "countdown": "Conto alla rovescia", + "countdownDesc": "Trigger al termine del conto alla rovescia", + "reset": "Fine del reset", + "resetDesc": "Trigger su timer di reset", + "refresh": "Aggiornare", + "refreshDesc": "Trigger su aggiornamento", + "sortChange": "Ordinamento Cambiamento", + "sortChangeDesc": "Trigger sulle modifiche all'ordinamento", + }, + "style": { + ...en.style, + + "boxShadowColor": "Colore dell'ombra", + "boxShadow": "Box Shadow", + "opacity": "Opacità", + "animation": "Animazione", + "animationIterationCount": "Conteggio delle iterazioni dell'animazione", + "animationDelay": "Ritardo dell'animazione", + "animationDuration": "Durata dell'animazione", + "resetTooltip": "Azzeramento degli stili. Deselezionare il campo di immissione per reimpostare uno stile individuale.", + "textColor": "Colore del testo", + "contrastText": "Colore del testo a contrasto", + "generated": "Generato", + "customize": "Personalizzare", + "staticText": "Testo statico", + "accent": "Accento", + "validate": "Messaggio di convalida", + "border": "Colore del bordo", + "borderRadius": "Raggio del bordo", + "borderWidth": "Larghezza del bordo", + "borderStyle": "Stile del bordo", + "background": "Colore di sfondo", + "headerBackground": "Colore di sfondo dell'intestazione", + "siderBackground": "Colore di sfondo di Sider", + "footerBackground": "Colore di sfondo del piè di pagina", + "fill": "Riempimento", + "track": "Traccia", + "links": "Collegamenti", + "thumb": "Pollice", + "thumbBorder": "Bordo del pollice", + "checked": "Controllato", + "unchecked": "Non controllato", + "handle": "Maniglia", + "tags": "Tag", + "tagsText": "Tag Testo", + "multiIcon": "Icona Multiselezione", + "tabText": "Testo della scheda", + "tabAccent": "Scheda Accento", + "checkedBackground": "Colore di sfondo controllato", + "uncheckedBackground": "Colore di sfondo non controllato", + "uncheckedBorder": "Colore del bordo non selezionato", + "indicatorBackground": "Colore di sfondo dell'indicatore", + "tableCellText": "Testo cellulare", + "selectedRowBackground": "Colore di sfondo della riga selezionata", + "hoverRowBackground": "Colore di sfondo della riga Hover", + "hoverBackground": "Colore di sfondo Hover", + "textTransform": "Trasformazione del testo", + "textDecoration": "Decorazione del testo", + "alternateRowBackground": "Colore di sfondo della riga alternativa", + "tableHeaderBackground": "Colore di sfondo dell'intestazione", + "tableHeaderText": "Testo dell'intestazione", + "toolbarBackground": "Colore di sfondo della barra degli strumenti", + "toolbarText": "Testo della barra degli strumenti", + "pen": "Penna", + "footerIcon": "Icona Piè di pagina", + "tips": "Suggerimenti", + "margin": "Margine", + "padding": "Imbottitura", + "marginLeft": "Margine sinistro", + "marginRight": "Margine destro", + "marginTop": "Margine superiore", + "marginBottom": "Margine inferiore", + "containerHeaderPadding": "Imbottitura della testata", + "containerFooterPadding": "Imbottitura del piè di pagina", + "containerSiderPadding": "Imbottitura Sider", + "containerBodyPadding": "Imbottitura del corpo", + "minWidth": "Larghezza minima", + "aspectRatio": "Rapporto d'aspetto", + "text": "Testo", + "textSize": "Dimensione del testo", + "textWeight": "Peso del testo", + "fontFamily": "Famiglia di caratteri", + "fontStyle": "Stile del carattere", + "backgroundImage": "Immagine di sfondo", + "backgroundImageRepeat": "Ripetizione dello sfondo", + "backgroundImageSize": "Dimensione dello sfondo", + "backgroundImagePosition": "Posizione di fondo", + "backgroundImageOrigin": "Origine dello sfondo", + "headerBackgroundImage": "Immagine di sfondo", + "headerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", + "headerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", + "headerBackgroundImagePosition": "Posizione dell'immagine di sfondo", + "headerBackgroundImageOrigin": "Origine dell'immagine di sfondo", + "footerBackgroundImage": "Immagine di sfondo", + "footerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", + "footerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", + "footerBackgroundImagePosition": "Posizione dell'immagine di sfondo", + "footerBackgroundImageOrigin": "Origine dell'immagine di sfondo", + "rotation": "Rotazione", + "alternateBackground": "Colore di sfondo alternativo", + "headerText": "Colore del testo dell'intestazione", + "labelColor": "Colore dell'etichetta", + "label": "Colore dell'etichetta", + "lineHeight": "Altezza della linea", + "subTitleColor": "Colore del sottotitolo", + "titleText": "Titolo Colore", + "success": "Colore di successo", + "siderBackgroundImage": "Immagine di sfondo di Sider", + "siderBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo di Sider", + "siderBackgroundImageSize": "Dimensioni dell'immagine di sfondo di Sider", + "siderBackgroundImagePosition": "Posizione dell'immagine di sfondo Sider", + "siderBackgroundImageOrigin": "Origine dell'immagine di sfondo Sider", + "activeBackground": "Colore di sfondo attivo", + "labelBackground": "Colore di sfondo dell'etichetta", + "gradientBackground": "Colore di sfondo gradiente", + "direction": "Direzione", + "chartOpacity": "Opacità", + "chartBoxShadow": "Box Shadow", + "chartBorderStyle": "Stile del bordo", + "chartBorderRadius": "Raggio del bordo", + "chartBorderWidth": "Larghezza del bordo", + "chartTextSize": "Dimensione del testo", + "chartTextWeight": "Peso del testo", + "chartFontFamily": "Famiglia di caratteri", + "chartFontStyle": "Stile del carattere", + "chartBackgroundColor": "Colore di sfondo", + "chartGradientColor": "Colore sfumato", + "chartShadowColor": "Colore dell'ombra", + "chartBorderColor": "Colore del bordo", + "chartTextColor": "Colore del testo", + "detailSize": "Dettaglio Dimensioni", + "radiusTip": "Specifica il raggio degli angoli dell'elemento. Esempio: 5px, 50% o 1em.", + "gapTip": "Specifica lo spazio tra righe e colonne in un contenitore a griglia o flessibile. Esempio: 10px, 1rem o 5%.", + "cardRadiusTip": "Definisce il raggio degli angoli per i componenti della carta. Esempio: 10px, 15px.", + "borderWidthTip": "Specifica la larghezza del bordo dell'elemento. Esempio: 1px, 0.5em o sottile.", + "borderStyleTip": "Imposta lo stile del bordo. Esempio: solido, tratteggiato, puntinato o nessuno.", + "marginTip": "Definisce il margine esterno intorno a un elemento. Esempio: 10px, 2em o auto. Può essere combinato: 0px 20px o separato per 4 direzioni: 0px 1px 5px 2px.", + "directionTip": "Specifica la direzione del layout. Esempio: row, column o row-reverse.", + "detailSizeTip": "Definisce la dimensione di dettagli specifici nel layout. Esempio: 10px, 2em o 80%.", + "chartOpacityTip": "Specifica l'opacità del grafico. Esempio: 1 (opaco), 0.5 (50% trasparente).", + "chartBoxShadowTip": "Definisce l'ombra proiettata dal grafico. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Imposta lo stile del bordo del grafico. Esempio: solido, tratteggiato, puntinato.", + "chartBorderRadiusTip": "Specifica il raggio degli angoli del bordo del grafico. Esempio: 10px, 20%.", + "chartBorderWidthTip": "Specifica la larghezza del bordo del grafico. Esempio: 2px, 0.5em.", + "chartTextSizeTip": "Specifica la dimensione del testo del grafico. Esempio: 16px, 1em, 120%.", + "chartTextWeightTip": "Specifica lo spessore del testo del grafico. Esempio: normale, grassetto, o 700.", + "chartFontFamilyTip": "Specifica il carattere tipografico del testo del grafico. Esempio: Arial, Helvetica, o 'Times New Roman'.", + "chartFontStyleTip": "Specifica lo stile del carattere del testo del grafico. Esempio: normale, corsivo o obliquo.", + "animationIterationCountTip": "Definisce quante volte deve essere eseguita un'animazione. Esempio: infinito, 1, o 3.", + "opacityTip": "Imposta il livello di trasparenza dell'elemento. Esempio: 1 (opaco), 0.5 (50% trasparente), 0 (invisibile).", + "boxShadowColorTip": "Definisce il colore dell'ombra del box. Esempio: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Imposta il colore di sfondo del grafico. Esempio: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Definisce i colori del gradiente per lo sfondo del grafico. Esempio: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Specifica il colore dell'ombra del grafico. Esempio: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Definisce il colore del bordo del grafico. Esempio: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Imposta il colore del testo del grafico. Esempio: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Definisce l'ombra proiettata da un elemento. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Specifica il ritardo prima dell'inizio dell'animazione. Esempio: 1s, 500ms, 0.", + "animationDurationTip": "Imposta la durata dell'animazione. Esempio: 2s, 3s, 500ms.", + "paddingTip": "Definisce lo spazio interno all'interno di un elemento. Esempio: 10px, 2em, 5%. Può essere combinato: 0px 20px o separato per tutte e 4 le direzioni: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Definisce lo spazio interno per l'intestazione del contenitore. Esempio: 10px, 1rem.", + "containerSiderPaddingTip": "Definisce lo spazio interno per la barra laterale del contenitore. Esempio: 8px, 1em.", + "containerFooterPaddingTip": "Definisce lo spazio interno per il piè di pagina del contenitore. Esempio: 12px, 1rem.", + "containerBodyPaddingTip": "Definisce lo spazio interno per il corpo del contenitore. Esempio: 15px, 2em.", + "textSizeTip": "Specifica la dimensione del testo. Esempio: 14px, 1.2em, 110%.", + "textWeightTip": "Definisce lo spessore del testo. Esempio: normale, grassetto, 400.", + "fontFamilyTip": "Specifica il carattere tipografico del testo. Esempio: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Definisce la decorazione del testo. Esempio: sottolineato, barrato, nessuno.", + "textTransformTip": "Imposta la capitalizzazione del testo. Esempio: maiuscolo, minuscolo, prima lettera maiuscola.", + "fontStyleTip": "Definisce lo stile del carattere del testo. Esempio: normale, corsivo, obliquo.", + "backgroundImageTip": "Specifica l'immagine di sfondo di un elemento. Esempio: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Specifica l'immagine di sfondo per l'intestazione. Esempio: url('header.jpg').", + "footerBackgroundImageTip": "Specifica l'immagine di sfondo per il piè di pagina. Esempio: url('footer.jpg').", + "backgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo. Esempio: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo dell'intestazione. Esempio: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo del piè di pagina. Esempio: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Definisce la dimensione dell'immagine di sfondo. Esempio: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Imposta la posizione dell'immagine di sfondo. Esempio: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo. Esempio: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo dell'intestazione. Esempio: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo del piè di pagina. Esempio: padding-box, border-box, content-box.", + "rotationTip": "Specifica l'angolo di rotazione dell'elemento. Esempio: 45deg, 90deg, -180deg.", + "lineHeightTip": "Definisce l'altezza di una riga di testo. Esempio: 1.5, 2, 120%.", + }, + "export": { + ...en.export, + + "hiddenDesc": "Se vero, il componente è nascosto", + "disabledDesc": "Se vero, il componente è disattivato e non interattivo.", + "visibleDesc": "Se vero, il componente è visibile", + "inputValueDesc": "Valore attuale dell'ingresso", + "invalidDesc": "Indica se il valore non è valido", + "placeholderDesc": "Testo segnaposto quando non è impostato alcun valore", + "requiredDesc": "Se vero, è richiesto un valore valido", + "submitDesc": "Invia il modulo", + "richTextEditorValueDesc": "Valore attuale dell'editor", + "richTextEditorReadOnlyDesc": "Se true, l'editor è di sola lettura", + "richTextEditorHideToolBarDesc": "Se vero, la barra degli strumenti viene nascosta", + "jsonEditorDesc": "Dati JSON correnti", + "sliderValueDesc": "Valore attualmente selezionato", + "sliderMaxValueDesc": "Valore massimo del cursore", + "sliderMinValueDesc": "Valore minimo del cursore", + "sliderStartDesc": "Valore del punto di partenza selezionato", + "sliderEndDesc": "Valore del punto finale selezionato", + "ratingValueDesc": "Valutazione attualmente selezionata", + "ratingMaxDesc": "Valore nominale massimo", + "datePickerValueDesc": "Data attualmente selezionata", + "datePickerFormattedValueDesc": "Formattazione della data selezionata", + "datePickerTimestampDesc": "Timestamp della data selezionata", + "dateRangeStartDesc": "Data di inizio dell'intervallo", + "dateRangeEndDesc": "Data di fine dell'intervallo", + "dateRangeStartTimestampDesc": "Timestamp della data di inizio", + "dateRangeEndTimestampDesc": "Timestamp della data finale", + "dateRangeFormattedValueDesc": "Intervallo di date formattato", + "dateRangeFormattedStartValueDesc": "Data di inizio formattata", + "dateRangeFormattedEndValueDesc": "Data finale formattata", + "timePickerValueDesc": "L'ora attualmente selezionata", + "timePickerFormattedValueDesc": "Formattazione dell'ora selezionata", + "timeRangeStartDesc": "Ora di inizio dell'intervallo", + "timeRangeEndDesc": "Ora di fine dell'intervallo", + "timeRangeFormattedValueDesc": "Intervallo di tempo formattato", + "timeRangeFormattedStartValueDesc": "Ora di inizio formattata", + "timeRangeFormattedEndValueDesc": "Ora finale formattata", + "timeZone": "Fuso orario", + "timeZoneDesc": "Fuso orario della data selezionata", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Inserire un indirizzo e-mail valido", + "url": "Inserire un URL valido", + "regex": "Corrispondere al modello specificato", + "maxLength": "Troppi caratteri, corrente: {length}, massimo: {maxLength}", + "minLength": "Caratteri insufficienti, corrente: {length}, minimo: {minLength}", + "maxValue": "Il valore supera il massimo, corrente: {value}, massimo: {max}", + "minValue": "Valore inferiore al minimo, corrente: {value}, minimo: {min}", + "maxTime": "Il tempo supera il massimo, corrente: {time}, massimo: {maxTime}", + "minTime": "Tempo inferiore al minimo, corrente: {time}, minimo: {minTime}", + "maxDate": "La data supera il massimo, attuale: {date}, massimo: {maxDate}", + "minDate": "Data inferiore al minimo, attuale: {date}, minimo: ___POSSESSORE1___", + }, + "query": { + ...en.query, + + "noQueries": "Non sono disponibili query di dati.", + "queryTutorialButton": "Visualizzare i documenti di {value}", + "datasource": "Le vostre fonti di dati", + "newDatasource": "Nuova fonte di dati", + "generalTab": "Generale", + "notificationTab": "Notifica", + "variablesTab": "Variabili", + "advancedTab": "Avanzato", + "showFailNotification": "Mostra notifica in caso di fallimento", + "failCondition": "Condizioni di guasto", + "failConditionTooltip1": "Personalizzare le condizioni di guasto e le relative notifiche.", + "failConditionTooltip2": "Se una condizione risulta vera, la query viene contrassegnata come fallita e viene attivata la notifica corrispondente.", + "showSuccessNotification": "Mostra la notifica di successo", + "successMessageLabel": "Messaggio di successo", + "successMessage": "Esecuzione riuscita", + "notifyDuration": "Durata", + "notifyDurationTooltip": "Durata della notifica. L'unità di tempo può essere 's' (secondo, valore predefinito) o 'ms' (millisecondo). Il valore predefinito è {default}s. Il massimo è {max}s.", + "successMessageWithName": "{name} esecuzione riuscita", + "failMessageWithName": "{name} esecuzione fallita: {result}", + "showConfirmationModal": "Mostra la maschera di conferma prima dell'esecuzione", + "confirmationMessageLabel": "Messaggio di conferma", + "confirmationMessage": "È sicuro di voler eseguire questa query di dati?", + "newQuery": "New Data Query", + "newFolder": "Nuova cartella", + "recentlyUsed": "Usato di recente", + "folder": "Cartella", + "folderNotEmpty": "La cartella non è vuota", + "dataResponder": "Data Responder", + "tempState": "Stato temporaneo", + "transformer": "Trasformatore", + "quickRestAPI": "Query REST", + "quickStreamAPI": "Interrogazione del flusso", + "quickGraphql": "Query GraphQL", + "quickAlasql": "Query SQL locale", + "databaseType": "Tipo di database", + "chooseDatabase": "Scegliere il database", + "lowcoderAPI": "API Lowcoder", + "executeJSCode": "Eseguire il codice JavaScript", + "importFromQueryLibrary": "Importazione da Query Library", + "preparedDataQueries": "Le query di dati preparate", + "adHocDataQueries": "Query di dati Qick (senza query o origine dati preparate)", + "queryResultTransformer": "Manipolare una risposta alla query per trasformare i dati prima del binding", + "queryResultReactor": "Reagire a qualsiasi modifica di un valore dinamico dei dati", + "importFromFile": "Importazione da file", + "triggerType": "Attivato quando...", + "triggerTypeAuto": "Quando gli input cambiano o dopo il caricamento dell'applicazione (pagina)", + "triggerTypePageLoad": "Dopo il caricamento dell'applicazione (pagina)", + "triggerTypeManual": "Solo quando lo attivi manualmente", + "triggerTypeInputChange": "Quando cambiano gli input", + "triggerTypeQueryExec": "Dopo l'esecuzione della query", + "triggerTypeTimeout": "Dopo il caricamento dell'applicazione (pagina) e il timeout", + "delayTime": "Tempo di ritardo", + "chooseDataSource": "Scegliere l'origine dei dati", + "method": "Metodo", + "updateExceptionDataSourceTitle": "Aggiornamento dell'origine dati non funzionante", + "updateExceptionDataSourceContent": "Aggiornare la query seguente con la stessa origine dati in errore:", + "update": "Aggiornamento", + "disablePreparedStatement": "Disabilitare le dichiarazioni preparate", + "disablePreparedStatementTooltip": "La disabilitazione delle istruzioni preparate può generare SQL dinamico, ma aumenta il rischio di SQL injection.", + "timeout": "Timeout dopo", + "timeoutTooltip": "Unità predefinita: ms. Unità di input supportate: ms, s. Valore predefinito: {defaultSeconds} secondi. Valore massimo: {maxSeconds} secondi. Ad esempio, 300 (cioè 300 ms), 800 ms, 5 s.", + "periodic": "Eseguire periodicamente questa query di dati", + "periodicTime": "Periodo", + "periodicTimeTooltip": "Periodo tra esecuzioni successive. Unità predefinita: ms. Unità di input supportate: ms, s. Valore minimo: 100 ms. L'esecuzione periodica è disabilitata per valori inferiori a 100ms. Ad esempio, 300 (cioè 300ms), 800ms, 5s.", + "cancelPrevious": "Ignorare i risultati delle precedenti esecuzioni non completate", + "cancelPreviousTooltip": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e queste esecuzioni ignorate non attivano l'elenco di eventi della query.", + "dataSourceStatusError": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e le esecuzioni ignorate non attivano l'elenco di eventi della query.", + "success": "Il successo", + "fail": "Fallimento", + "successDesc": "Attivato quando l'esecuzione ha successo", + "failDesc": "Attivato quando l'esecuzione fallisce", + "fixedDelayError": "Query non eseguita", + "execSuccess": "Esecuzione riuscita", + "execFail": "Esecuzione fallita", + "execIgnored": "I risultati di questa interrogazione sono stati ignorati", + "deleteSuccessMessage": "Eliminato con successo. È possibile utilizzare {undoKey} per annullare l'operazione.", + "dataExportDesc": "Dati ottenuti dalla query corrente", + "codeExportDesc": "Codice di stato dell'interrogazione corrente", + "successExportDesc": "Se la query corrente è stata eseguita con successo", + "messageExportDesc": "Informazioni restituite dalla query corrente", + "extraExportDesc": "Altri dati nella query corrente", + "isFetchingExportDesc": "È la query corrente nella richiesta", + "runTimeExportDesc": "Tempo di esecuzione della query corrente (ms)", + "latestEndTimeExportDesc": "Ultimo tempo di funzionamento", + "triggerTypeExportDesc": "Tipo di innesco", + "chooseResource": "Scegliere una risorsa", + "createDataSource": "Creare una nuova origine dati", + "editDataSource": "Modifica", + "datasourceName": "Nome", + "datasourceNameRuleMessage": "Inserire un nome di origine dati", + "generalSetting": "Impostazioni generali", + "advancedSetting": "Impostazioni avanzate", + "port": "Porto", + "portRequiredMessage": "Inserire una porta", + "portErrorMessage": "Inserire una porta corretta", + "connectionType": "Tipo di connessione", + "regular": "Regolare", + "host": "Ospite", + "hostRequiredMessage": "Inserire un nome di dominio host o un indirizzo IP", + "userName": "Nome utente", + "password": "Password", + "encryptedServer": "-------- Crittografato sul lato server --------", + "uriRequiredMessage": "Inserire un URI", + "urlRequiredMessage": "Inserire un URL", + "uriErrorMessage": "Inserire un URI corretto", + "urlErrorMessage": "Inserire un URL corretto", + "httpRequiredMessage": "Inserire http:// o https://", + "databaseName": "Nome del database", + "databaseNameRequiredMessage": "Inserire il nome del database", + "useSSL": "Utilizzare SSL", + "userNameRequiredMessage": "Inserire il proprio nome", + "passwordRequiredMessage": "Inserire la password", + "authentication": "Autenticazione", + "authenticationType": "Tipo di autenticazione", + "sslCertVerificationType": "Verifica del certificato SSL", + "sslCertVerificationTypeDefault": "Verifica della certificazione CA", + "sslCertVerificationTypeSelf": "Verifica della certificazione autofirmata", + "sslCertVerificationTypeDisabled": "Disabili", + "selfSignedCert": "Certificato autofirmato", + "selfSignedCertRequireMsg": "Inserire il proprio certificato", + "enableTurnOffPreparedStatement": "Abilita l'alternanza delle dichiarazioni preparate per le query", + "enableTurnOffPreparedStatementTooltip": "È possibile attivare o disattivare le istruzioni preparate nella scheda Avanzate della query.", + "serviceName": "Nome del servizio", + "serviceNameRequiredMessage": "Inserire il nome del servizio", + "useSID": "Utilizzare il SID", + "connectSuccessfully": "Connessione riuscita", + "saveSuccessfully": "Salvato con successo", + "database": "Database", + "cloudHosting": "Lowcoder ospitato nel cloud non può accedere ai servizi locali utilizzando 127.0.0.1 o localhost. Provare a collegarsi a fonti di dati della rete pubblica o utilizzare un reverse proxy per i servizi privati.", + "notCloudHosting": "Per la distribuzione ospitata da docker, Lowcoder utilizza reti ponte, quindi 127.0.0.1 e localhost non sono validi come indirizzi host. Per accedere alle fonti di dati della macchina locale, fare riferimento a", + "howToAccessHostDocLink": "Come accedere all'API/DB dell'host", + "returnList": "Ritorno", + "chooseDatasourceType": "Scegliere il tipo di sorgente dati", + "viewDocuments": "Visualizza i documenti", + "testConnection": "Collegamento di prova", + "save": "Risparmiare", + "whitelist": "Elenco dei permessi", + "whitelistTooltip": "Aggiungete gli indirizzi IP di Lowcoder all'elenco dei permessi della vostra fonte di dati, se necessario.", + "address": "Indirizzo:", + "nameExists": "Nome {name} già esistente", + "jsQueryDocLink": "Informazioni sulla query JavaScript", + "dynamicDataSourceConfigLoadingText": "Caricamento configurazione sorgente dati extra...", + "dynamicDataSourceConfigErrText": "Impossibile caricare la configurazione della fonte di dati extra.", + "retry": "Riprova", + "categoryDatabase": "Database", + "categoryBigdata": "Grandi dati", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Sviluppo App", + "categoryWorkflow": "Flusso di lavoro", + "categoryMessaging": "Messaggistica", + "categoryAssets": "Asset & Archiviazione", + "categoryProjectManagement": "Gestione Progetti", + "categoryCrm": "CRM", + "categoryEcommerce": "Commercio elettronico", + "categoryWebscrapers": "Web Scrapers & Open Data", + "categoryDocumentHandling": "Generazione Report e Documenti", + "categoryRPA": "Automazione Robotica dei Processi", + "componentsUsingQueryTitle": "Utilizzo della Query", + "componentsUsingQuery": "Dove viene utilizzata questa query", + "variables": "Variabili", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Coppie chiave-valore", + "object": "Oggetto", + "allowMultiModify": "Consentire la modifica di più righe", + "allowMultiModifyTooltip": "Se selezionato, tutte le righe che soddisfano le condizioni vengono gestite. Altrimenti, viene gestita solo la prima riga che soddisfa le condizioni.", + "array": "Array", + "insertList": "Inserisci elenco", + "insertListTooltip": "Valori inseriti quando non esistono", + "filterRule": "Regola del filtro", + "updateList": "Elenco degli aggiornamenti", + "updateListTooltip": "I valori aggiornati in corso d'opera possono essere sovrascritti dagli stessi valori dell'elenco di inserimento.", + "sqlMode": "Modalità SQL", + "guiMode": "Modalità GUI", + "operation": "Funzionamento", + "insert": "Inserire", + "upsert": "Inserire, ma aggiornare se c'è un conflitto", + "update": "Aggiornamento", + "delete": "Cancellare", + "bulkInsert": "Inserto sfuso", + "bulkUpdate": "Aggiornamento di massa", + "table": "Tabella", + "primaryKeyColumn": "Colonna chiave primaria", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Comando grezzo", + "queryTutorialButton": "Visualizza i documenti API Elasticsearch", + "request": "Richiesta", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Indice delle righe", + "spreadsheetId": "ID del foglio di calcolo", + "sheetName": "Nome del foglio", + "readData": "Leggi i dati", + "appendData": "Aggiungi riga", + "updateData": "Fila di aggiornamento", + "deleteData": "Elimina riga", + "clearData": "Fila libera", + "serviceAccountRequireMessage": "Inserire il proprio account di servizio", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Ordinamento", + "sortPlaceholder": "Nome", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Esportazione in JSON", + "noInput": "La query corrente non ha input", + "inputName": "Nome", + "inputDesc": "Descrizione", + "emptyInputs": "Nessun ingresso", + "clickToAdd": "Aggiungi", + "chooseQuery": "Scegliere la query", + "viewQuery": "Visualizza la domanda", + "chooseVersion": "Scegliere la versione", + "latest": "Ultime novità", + "publish": "Pubblicare", + "historyVersion": "Storia Versione", + "deleteQueryLabel": "Eliminare la query", + "deleteQueryContent": "La query non può essere recuperata dopo l'eliminazione. Cancellare la query?", + "run": "Correre", + "readOnly": "Solo lettura", + "exit": "Uscita", + "recoverAppSnapshotContent": "Ripristinare la query corrente alla versione {version}.", + "searchPlaceholder": "Query di ricerca", + "allQuery": "All Queries", + "deleteQueryTitle": "Eliminare la query", + "unnamed": "Senza nome", + "publishNewVersion": "Pubblicare la nuova versione", + "publishSuccess": "Pubblicato con successo", + "version": "Versione", + "desc": "Descrizione", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Vedi", + "extParamsTooltip": "Configurare altri parametri di connessione", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Interrogare gli utenti dell'area di lavoro", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Comando grezzo", + "command": "Comando", + "queryTutorial": "Visualizza la documentazione sui comandi di Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Se si seleziona {type}, il formato del valore deve essere {object}. Esempio: {example}", + "text": "Testo", + "file": "File", + "extraBodyTooltip": "I valori chiave nell'Extra Body saranno aggiunti al body con i tipi di dati JSON o Form.", + "forwardCookies": "Biscotti di andata", + "forwardAllCookies": "Inoltrare tutti i cookie", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Allegato", + "attachmentTooltip": "Può essere utilizzato con il componente di caricamento file, i dati devono essere convertiti in:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Trasmettitore", + "recipient": "Destinatario", + "carbonCopy": "Copia carbone", + "blindCarbonCopy": "Copia carbone cieca", + "subject": "Oggetto", + "content": "Content", + "contentTooltip": "Supporta l'inserimento di testo o HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Cruscotti e reportistica", + "layout": "Layout e navigazione", + "forms": "Raccolta dati e moduli", + "collaboration": "Riunioni e collaborazione", + "projectmanagement": "Gestione del progetto", + "scheduling": "Calendario e programmazione", + "documents": "Gestione di documenti e file", + "itemHandling": "Gestione dell'articolo e della firma", + "multimedia": "Multimedia e animazione", + "integration": "Integrazione ed estensione", + "legacy": "Preesistenti e deprecati", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Auto Complete", + "autoCompleteCompDesc": "Un campo di immissione che fornisce suggerimenti durante la digitazione, migliorando l'esperienza dell'utente e la precisione.", + "autoCompleteCompKeywords": "suggerimenti, completamento automatico, digitazione, input", + "inputCompName": "Ingresso", + "inputCompDesc": "Un campo di input di testo di base che consente agli utenti di inserire e modificare il testo.", + "inputCompKeywords": "testo, input, campo, modifica", + "textAreaCompName": "Area di testo", + "textAreaCompDesc": "Un input di testo a più righe per contenuti più lunghi, come commenti o descrizioni.", + "textAreaCompKeywords": "multilinea, textarea, input, testo", + "passwordCompName": "Password", + "passwordCompDesc": "Un campo sicuro per l'inserimento della password, che maschera i caratteri per garantire la privacy.", + "passwordCompKeywords": "password, sicurezza, input, nascosto", + "richTextEditorCompName": "Editor di testo ricco", + "richTextEditorCompDesc": "Un editor di testo avanzato che supporta ricche opzioni di formattazione come grassetto, corsivo ed elenchi.", + "richTextEditorCompKeywords": "editor, testo, formattazione, contenuto ricco", + "numberInputCompName": "Numero Ingresso", + "numberInputCompDesc": "Un campo specifico per l'immissione di dati numerici, con controlli per l'incremento e il decremento dei valori.", + "numberInputCompKeywords": "numero, ingresso, incremento, decremento", + "sliderCompName": "Cursore", + "sliderCompDesc": "Un componente grafico a scorrimento per selezionare un valore o un intervallo all'interno di una scala definita.", + "sliderCompKeywords": "cursore, intervallo, ingresso, grafico", + "rangeSliderCompName": "Cursore di gamma", + "rangeSliderCompDesc": "Un cursore a doppia maniglia per selezionare un intervallo di valori, utile per filtrare o impostare limiti.", + "rangeSliderCompKeywords": "gamma, cursore, doppia impugnatura, filtro", + "ratingCompName": "Valutazione", + "ratingCompDesc": "Un componente per catturare le valutazioni degli utenti, visualizzate come stelle.", + "ratingCompKeywords": "valutazione, stelle, feedback, input", + "switchCompName": "Interruttore", + "switchCompDesc": "Un interruttore a levetta per decisioni di tipo on/off o sì/no.", + "switchCompKeywords": "a levetta, interruttore, on/off, controllo", + "selectCompName": "Selezionare", + "selectCompDesc": "Un menu a discesa per selezionare un elenco di opzioni.", + "selectCompKeywords": "a discesa, selezionare, opzioni, menu", + "multiSelectCompName": "Multiselezione", + "multiSelectCompDesc": "Un componente che consente di selezionare più elementi da un elenco a discesa.", + "multiSelectCompKeywords": "multiselezione, multipla, a discesa, scelte", + "cascaderCompName": "Cascader", + "cascaderCompDesc": "Una tendina a più livelli per la selezione gerarchica dei dati, come ad esempio la selezione di una località.", + "cascaderCompKeywords": "a cascata, gerarchico, a discesa, a livelli", + "checkboxCompName": "Casella di controllo", + "checkboxCompDesc": "Una casella di controllo standard per le opzioni che possono essere selezionate o deselezionate.", + "checkboxCompKeywords": "casella di controllo, opzioni, selezionare, alternare", + "radioCompName": "Radio", + "radioCompDesc": "Pulsanti di opzione per selezionare un'opzione da un insieme, dove è consentita una sola scelta.", + "radioCompKeywords": "radio, pulsanti, selezione, scelta singola", + "segmentedControlCompName": "Controllo segmentato", + "segmentedControlCompDesc": "Un controllo con opzioni segmentate per passare rapidamente da una scelta all'altra.", + "segmentedControlCompKeywords": "segmentato, controllo, selezione, opzioni", + "stepControlCompName": "Controllo dei passi", + "stepControlCompDesc": "Un controllo con opzioni di passo per offrire passi guidati visivamente per applicazioni come moduli o procedure guidate.", + "stepControlCompKeywords": "passi, controllo, selezione, opzioni", + "fileUploadCompName": "Caricamento dei file", + "fileUploadCompDesc": "Un componente per il caricamento dei file, con supporto per il drag-and-drop e la selezione dei file.", + "fileUploadCompKeywords": "file, caricamento, trascinamento, selezione", + "dateCompName": "Data", + "dateCompDesc": "Un componente per la selezione di date da un'interfaccia di calendario.", + "dateCompKeywords": "data, picker, calendario, selezione", + "dateRangeCompName": "Intervallo di date", + "dateRangeCompDesc": "Un componente per selezionare un intervallo di date, utile per i sistemi di prenotazione o per i filtri.", + "dateRangeCompKeywords": "daterange, selezionare, prenotare, filtrare", + "timeCompName": "Tempo", + "timeCompDesc": "Un componente di selezione dell'ora per scegliere orari specifici della giornata.", + "timeCompKeywords": "tempo, picker, selezionare, orologio", + "timeRangeCompName": "Intervallo di tempo", + "timeRangeCompDesc": "Un componente per la selezione di un intervallo di tempo, spesso utilizzato nelle applicazioni di pianificazione.", + "timeRangeCompKeywords": "timerange, selezionare, programmazione, durata", + "buttonCompName": "Pulsante del modulo", + "buttonCompDesc": "Un componente versatile per l'invio di moduli, l'attivazione di azioni o la navigazione.", + "buttonCompKeywords": "pulsante, invio, azione, navigazione", + "meetingControlCompName": "Icon Button", + "meetingCompDesc": "Un pulsante per controllare funzioni come l'avvio, la fine, il silenziamento o la condivisione.", + "meetingCompKeywords": "controllo, pulsante, inizio, fine", + "linkCompName": "Collegamento a", + "linkCompDesc": "Un componente di visualizzazione di collegamenti ipertestuali per la navigazione o il collegamento a risorse esterne.", + "linkCompKeywords": "link, collegamento ipertestuale, navigazione, esterno", + "scannerCompName": "Scanner", + "scannerCompDesc": "Un componente per la scansione di codici a barre, codici QR e altri dati simili.", + "scannerCompKeywords": "scanner, codice a barre, codice QR, scansione", + "dropdownCompName": "A discesa", + "dropdownCompDesc": "Un menu a discesa per visualizzare in modo compatto un elenco di opzioni.", + "dropdownCompKeywords": "a discesa, menu, opzioni, selezionare", + "toggleButtonCompName": "Pulsante di commutazione", + "toggleButtonCompDesc": "Un pulsante che può passare tra due stati o opzioni.", + "toggleButtonCompKeywords": "toggle, pulsante, interruttore, stato", + "textCompName": "Visualizzazione del testo", + "textCompDesc": "Un semplice componente per visualizzare contenuti testuali statici o dinamici comprensivi di formattazione Markdown.", + "textCompKeywords": "testo, visualizzazione, statico, dinamico", + "tableCompName": "Tabella", + "tableCompDesc": "Un componente ricco di tabelle per la visualizzazione di dati in un formato tabellare strutturato, con opzioni di ordinamento e filtraggio, visualizzazione di dati ad albero e righe estensibili.", + "tableCompKeywords": "tabella, dati, ordinamento, filtraggio", + "imageCompName": "Immagine", + "imageCompDesc": "Un componente per la visualizzazione di immagini, che supporta vari formati basati su URI o dati Base64.", + "imageCompKeywords": "immagine, visualizzazione, media, Base64", + "progressCompName": "Progressi", + "progressCompDesc": "Indicatore visivo di avanzamento, in genere utilizzato per mostrare lo stato di completamento di un'attività.", + "progressCompKeywords": "progresso, indicatore, stato, compito", + "progressCircleCompName": "Cerchio del progresso", + "progressCircleCompDesc": "Un indicatore di avanzamento circolare, spesso utilizzato per il caricamento di stati o di attività a tempo.", + "progressCircleCompKeywords": "cerchio, progresso, indicatore, caricamento", + "fileViewerCompName": "Visualizzatore di file", + "fileViewerCompDesc": "Un componente per la visualizzazione di vari tipi di file, compresi documenti e immagini.", + "fileViewerCompKeywords": "file, visualizzatore, documento, immagine", + "dividerCompName": "Divisore", + "dividerCompDesc": "Un componente divisorio visivo, usato per separare il contenuto o le sezioni in un layout.", + "dividerCompKeywords": "divisore, separatore, layout, design", + "qrCodeCompName": "Codice QR", + "qrCodeCompDesc": "Un componente per la visualizzazione di codici QR, utile per la scansione rapida e il trasferimento di informazioni.", + "qrCodeCompKeywords": "Codice QR, scansione, codice a barre, informazioni", + "formCompName": "Forma", + "formCompDesc": "Un componente contenitore per costruire moduli strutturati con vari tipi di input.", + "formCompKeywords": "modulo, input, contenitore, struttura", + "jsonSchemaFormCompName": "Schema JSON", + "jsonSchemaFormCompDesc": "Un componente di modulo dinamico generato sulla base di uno schema JSON.", + "jsonSchemaFormCompKeywords": "JSON, schema, modulo, dinamico", + "containerCompName": "Contenitore", + "containerCompDesc": "Un contenitore generico per il layout e l'organizzazione degli elementi dell'interfaccia utente.", + "containerCompKeywords": "contenitore, layout, organizzazione, UI", + "floatTextContainerCompName": "Contenitore di testo fluttuante", + "floatTextContainerCompDesc": "Componente Contenitore di testo fluttuante", + "floatTextContainerCompKeywords": "contenitore, layout, testo, flusso", + "collapsibleContainerCompName": "Contenitore pieghevole", + "collapsibleContainerCompDesc": "Un contenitore che può essere espanso o chiuso, ideale per gestire la visibilità dei contenuti.", + "collapsibleContainerCompKeywords": "pieghevole, contenitore, espandere, collassare", + "tabbedContainerCompName": "Contenitore a schede", + "tabbedContainerCompDesc": "Un contenitore con navigazione a schede per organizzare i contenuti in pannelli separati.", + "tabbedContainerCompKeywords": "a schede, contenitore, navigazione, pannelli", + "pageLayoutCompName": "Layout di pagina", + "pageLayoutCompDesc": "Un contenitore che offre la possibilità di creare un layout con intestazione, intestazione, piè di pagina e aree di contenuto principale.", + "pageLayoutCompKeywords": "layout, contenitore, navigazione, pagine", + "modalCompName": "Modale", + "modalCompDesc": "Un componente modale a comparsa per la visualizzazione di contenuti, avvisi o moduli a fuoco.", + "modalCompKeywords": "modale, popup, avviso, modulo", + "listViewCompName": "Vista elenco", + "listViewCompDesc": "Un componente per la visualizzazione di un elenco di elementi o dati, in cui è possibile inserire altri componenti. Come un ripetitore.", + "listViewCompKeywords": "elenco, vista, visualizzazione, ripetitore", + "gridCompName": "Griglia", + "gridCompDesc": "Un componente griglia flessibile per creare layout strutturati con righe e colonne, come estensione del componente List View.", + "gridCompKeywords": "griglia, layout, righe, colonne", + "navigationCompName": "Navigazione", + "navigationCompDesc": "Un componente di navigazione per creare menu, briciole di pane o schede per la navigazione del sito.", + "navigationCompKeywords": "navigazione, menu, briciole di pane, schede", + "iframeCompName": "IFrame", + "iframeCompDesc": "Un componente frame inline per incorporare pagine web e applicazioni o contenuti esterni all'interno dell'applicazione.", + "iframeCompKeywords": "iframe, embed, pagina web, contenuto", + "customCompName": "Componente personalizzato", + "customCompDesc": "Un componente flessibile e programmabile per creare elementi dell'interfaccia utente unici e definiti dall'utente, adatti alle vostre esigenze specifiche.", + "customCompKeywords": "personalizzato, definito dall'utente, flessibile, programmabile", + "moduleCompName": "Modulo", + "moduleCompDesc": "Utilizzate i moduli per creare micro-app progettate per incapsulare funzionalità o caratteristiche specifiche. I moduli possono essere incorporati e riutilizzati in tutte le applicazioni.", + "moduleCompKeywords": "modulo, micro-app, funzionalità, riutilizzabile", + "jsonExplorerCompName": "Esploratore JSON", + "jsonExplorerCompDesc": "Un componente per esplorare visivamente e interagire con le strutture di dati JSON.", + "jsonExplorerCompKeywords": "JSON, esploratore, dati, struttura", + "jsonEditorCompName": "JSON Editor", + "jsonEditorCompDesc": "Un componente editor per la creazione e la modifica di dati JSON con convalida ed evidenziazione della sintassi.", + "jsonEditorCompKeywords": "JSON, editor, modifica, convalida", + "treeCompName": "Albero", + "treeCompDesc": "Un componente di struttura ad albero per la visualizzazione di dati gerarchici, come file system o organigrammi.", + "treeCompKeywords": "albero, gerarchico, dati, struttura", + "treeSelectCompName": "Selezione dell'albero", + "treeSelectCompDesc": "Un componente di selezione che presenta le opzioni in un formato gerarchico ad albero, consentendo selezioni organizzate e annidate.", + "treeSelectCompKeywords": "albero, selezionare, gerarchico, annidato", + "audioCompName": "Audio", + "audioCompDesc": "Un componente per incorporare contenuti audio, con controlli per la riproduzione e la regolazione del volume.", + "audioCompKeywords": "audio, riproduzione, suono, musica", + "videoCompName": "Video", + "videoCompDesc": "Un componente multimediale per incorporare e riprodurre contenuti video, con supporto per vari formati.", + "videoCompKeywords": "video, multimedia, riproduzione, incorporazione", + "drawerCompName": "Cassetto", + "drawerCompDesc": "Un componente a pannello scorrevole che può essere utilizzato per la navigazione o la visualizzazione di contenuti aggiuntivi, in genere emergendo dal bordo dello schermo.", + "drawerCompKeywords": "cassetto, scorrevole, pannello, navigazione", + "chartCompName": "Grafico", + "chartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", + "chartCompKeywords": "grafico, grafico, dati, visualizzazione", + "carouselCompName": "Carosello di immagini", + "carouselCompDesc": "Un componente carosello rotante per mostrare immagini, banner o slide di contenuto.", + "carouselCompKeywords": "carosello, immagini, rotazione, vetrina", + "imageEditorCompName": "Editor di immagini", + "imageEditorCompDesc": "Un componente interattivo per l'editing e la manipolazione delle immagini, che offre vari strumenti e filtri.", + "imageEditorCompKeywords": "immagine, editor, manipolazione, strumenti", + "mermaidCompName": "Grafico delle sirene", + "mermaidCompDesc": "Un componente per il rendering di diagrammi complessi e diagrammi di flusso basati sulla sintassi Mermaid.", + "mermaidCompKeywords": "sirena, grafici, diagrammi, diagrammi di flusso", + "calendarCompName": "Calendario", + "calendarCompDesc": "Un componente calendario per la visualizzazione di date ed eventi, con opzioni di visualizzazione per mese, settimana o giorno.", + "calendarCompKeywords": "calendario, date, eventi, programmazione", + "signatureCompName": "Firma", + "signatureCompDesc": "Un componente per l'acquisizione di firme digitali, utile per i processi di approvazione e verifica.", + "signatureCompKeywords": "firma, digitale, approvazione, verifica", + "jsonLottieCompName": "Animazione Lottie", + "jsonLottieCompDesc": "Un componente per la visualizzazione delle animazioni Lottie, che fornisce animazioni leggere e scalabili basate su dati JSON.", + "jsonLottieCompKeywords": "lottie, animazione, JSON, scalabile", + "timelineCompName": "Linea temporale", + "timelineCompDesc": "Un componente per la visualizzazione di eventi o azioni in ordine cronologico, rappresentati visivamente lungo una linea temporale lineare.", + "timelineCompKeywords": "linea del tempo, eventi, cronologico, storia", + "commentCompName": "Come", + "commentCompDesc": "Un componente per l'aggiunta e la visualizzazione dei commenti degli utenti, che supporta le risposte in thread e l'interazione con gli utenti.", + "commentCompKeywords": "commento, discussione, interazione con l'utente, feedback", + "mentionCompName": "Menzione", + "mentionCompDesc": "Un componente che supporta la menzione di utenti o tag all'interno di contenuti testuali, tipicamente utilizzato nei social media o nelle piattaforme collaborative.", + "mentionCompKeywords": "menzione, tag, utente, social media", + "responsiveLayoutCompName": "Layout reattivo", + "responsiveLayoutCompDesc": "Un componente di layout progettato per adattarsi e rispondere alle diverse dimensioni dello schermo e dei dispositivi, garantendo un'esperienza utente coerente.", + "responsiveLayoutCompKeywords": "responsive, layout, adattarsi, dimensioni dello schermo", + "splitLayoutCompName": "Layout diviso", + "splitLayoutCompDesc": "Un componente di layout per organizzare aree di visualizzazione multiple e aree separate orizzontalmente o verticalmente. Offre all'utente la possibilità di adattare la larghezza o l'altezza delle aree di visualizzazione mediante trascinamento.", + "splitLayoutCompKeywords": "dividere, dividere, layout, adattare, dimensione dello schermo", + "iconCompName": "Icone", + "iconCompDesc": "Utilizzate varie icone per migliorare l'aspetto visivo e l'esperienza utente della vostra applicazione.", + "iconCompKeywords": "Icone, pittogrammi, simboli, forme", + "tourCompName": "Tour", + "tourCompDesc": "Un tour del prodotto per guidare gli utenti.", + "tourCompKeywords": "tour, tour del prodotto, walkthrough, walkthrough interattivo", + "hillchartCompName": "Grafico della collina", + "hillchartCompDesc": "Un componente di visualizzazione che permette di visualizzare i dati sullo stato della gestione del progetto in un formato di grafico a colline.", + "hillchartCompKeywords": "gestione del progetto, diagramma a colline, visualizzazione, dati", + "openLayersGeoMapCompName": "Geomappa Openlayers", + "openLayersGeoMapCompDesc": "Un componente per la visualizzazione di mappe interattive utilizzando OpenLayers, con il supporto di vari livelli e caratteristiche della mappa.", + "openLayersGeoMapCompKeywords": "openlayers, mappa geografica, interattiva, strati di mappa", + "chartsGeoMapCompName": "Grafici geografici", + "chartsGeoMapCompDesc": "Un componente per la visualizzazione di dati geografici su mappe interattive con grafici dinamici", + "chartsGeoMapCompKeywords": "mappa geografica, grafici, visualizzazione, dati geografici", + "bpmnEditorCompName": "Editor BPMN", + "bpmnEditorCompDesc": "Un componente per la visualizzazione, la creazione e la modifica di diagrammi BPMN, che supporta vari elementi e funzioni BPMN.", + "bpmnEditorCompKeywords": "BPMN, editor, diagrammi, elementi, flussi di lavoro", + "turnstileCaptchaCompName": "Captcha a tornello", + "turnstileCaptchaCompDesc": "Un componente captcha per verificare gli utenti contro i bot.", + "turnstileCaptchaCompKeywords": "captcha, verifica, identità, sicurezza", + "pivotTableCompName": "Tabella pivot", + "pivotTableCompDesc": "Uno strumento di sintesi e analisi dei dati per organizzare e aggregare i dati in formato tabellare.", + "pivotTableCompKeywords": "Tabella pivot, dati, analisi, aggregazione", + "funnelChartCompName": "Grafico a imbuto", + "funnelChartCompDesc": "Uno strumento di visualizzazione che permette di visualizzare la progressiva riduzione dei dati attraverso le fasi.", + "funnelChartCompKeywords": "grafico a imbuto, vendite, conversioni, processo", + "gaugeChartCompName": "Grafico del calibro", + "gaugeChartCompDesc": "Un grafico che visualizza i dati come lettura su un quadrante, utile per indicare lo stato o il livello di qualcosa.", + "gaugeChartCompKeywords": "grafico di misura, metriche, prestazioni, stato", + "sankeyChartCompName": "Grafico Sankey", + "sankeyChartCompDesc": "Un diagramma di flusso in cui l'ampiezza delle frecce è proporzionale alla portata, utilizzato per mostrare i trasferimenti di energia, materiali o costi.", + "sankeyChartCompKeywords": "diagramma di Sankey, flusso, energia, costi", + "candleStickChartCompName": "Grafico a candele", + "candleStickChartCompDesc": "Stile di grafico finanziario utilizzato per descrivere i movimenti di prezzo di un titolo, di un derivato o di una valuta.", + "candleStickChartCompKeywords": "grafico a candele, azioni, trading, finanza", + "radarChartCompName": "Grafico radar", + "radarChartCompDesc": "Metodo grafico per la visualizzazione di dati multivariati sotto forma di grafico bidimensionale di tre o più variabili quantitative.", + "radarChartCompKeywords": "grafico radar, multivariato, analisi delle prestazioni", + "heatmapChartCompName": "Grafico Heatmap", + "heatmapChartCompDesc": "Una rappresentazione grafica dei dati in cui i singoli valori sono rappresentati come colori.", + "heatmapChartCompKeywords": "heatmap, visualizzazione dei dati, intensità", + "graphChartCompName": "Grafico", + "graphChartCompDesc": "Un diagramma che rappresenta una rete di nodi collegati da spigoli, utile per mostrare interconnessioni e relazioni.", + "graphChartCompKeywords": "grafico, reti, relazioni, nodi", + "treeChartCompName": "Grafico ad albero", + "treeChartCompDesc": "Un diagramma che rappresenta visivamente la gerarchia in una struttura ad albero, mostrando le relazioni tra i vari nodi.", + "treeChartCompKeywords": "diagramma ad albero, gerarchia, organizzazione", + "treemapChartCompName": "Grafico a mappa di alberi", + "treemapChartCompDesc": "Un grafico che utilizza rettangoli annidati per rappresentare in modo proporzionale i dati gerarchici.", + "treemapChartCompKeywords": "mappa a tre, gerarchia, visualizzazione dei dati", + "sunburstChartCompName": "Grafico Sunburst", + "sunburstChartCompDesc": "Una tecnica di visualizzazione a riempimento radiale dello spazio che illustra le relazioni gerarchiche attraverso gli strati di un cerchio.", + "sunburstChartCompKeywords": "Grafico a raggiera, radiale, gerarchia", + "themeriverChartCompName": "Grafico del fiume a tema", + "themeriverChartCompDesc": "Una visualizzazione che assomiglia a un grafico a flusso che mostra i cambiamenti di un insieme di dati nel corso del tempo tra le varie categorie.", + "themeriverChartCompKeywords": "tema fiume, serie temporali, tendenze", + "basicChartCompName": "Grafico di base", + "basicChartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", + "basicChartCompKeywords": "grafico, grafico, dati, visualizzazione", + "shapeCompName": "Forme", + "shapeCompDesc": "Una raccolta di forme geometriche da utilizzare per diagrammi, illustrazioni e visualizzazioni.", + "shapeCompKeywords": "forme, geometriche, diagrammi, illustrazioni", + "ganttChartCompName": "Grafico di Gantt", + "ganttChartCompDesc": "Un grafico che illustra la pianificazione di un progetto, mostrando le date di inizio e fine degli elementi e le dipendenze.", + "ganttChartCompKeywords": "diagramma di gantt, gestione del progetto, pianificazione", + "kanbanCompName": "Lavagna Kanban (anteprima!)", + "kanbanCompDesc": "Un componente per la visualizzazione e la gestione delle attività in un flusso di lavoro Kanban, con colonne per le fasi di lavoro e le schede per le attività.", + "kanbanCompKeywords": "kanban, scheda, flusso di lavoro, attività", + "pieChartCompName": "Grafico a torta", + "pieChartCompDesc": "Un componente versatile per la visualizzazione dei dati con i grafici a torta.", + "pieChartCompKeywords": "grafico, dati, visualizzazione", + "lineChartCompName": "Grafico a linee", + "lineChartCompDesc": "Un componente versatile per la visualizzazione dei dati con i grafici a linee.", + "lineChartCompKeywords": "grafico, dati, visualizzazione", + "barChartCompName": "Grafico a barre", + "barChartCompDesc": "Un componente versatile per la visualizzazione dei dati con grafici a barre.", + "barChartCompKeywords": "grafico, dati, visualizzazione", + "scatterChartCompName": "Grafico a dispersione", + "scatterChartCompDesc": "Un componente versatile per la visualizzazione dei dati con i grafici di dispersione.", + "scatterChartCompKeywords": "grafico, dati, visualizzazione", + "colorPickerCompName": "Picker di colori", + "colorPickerCompDesc": "Selezione intuitiva dei colori per la personalizzazione.", + "colorPickerCompKeywords": "colore, selezionatore, personalizzazione", + "floatButtonCompName": "Pulsante di galleggiamento", + "floatButtonCompDesc": "Un pulsante di azione fluttuante per azioni rapide e di rilievo.", + "floatButtonCompKeywords": "pulsante flottante, azione, rapido", + "avatarCompName": "Avatar", + "avatarCompDesc": "Visualizza gli avatar degli utenti o le immagini del profilo per un'identificazione personalizzata.", + "avatarCompKeywords": "avatar, immagine del profilo, identificazione dell'utente", + "avatarGroupCompName": "Gruppo Avatar", + "avatarGroupCompDesc": "Un gruppo di avatar per rappresentare più utenti o entità in modo compatto e visivamente accattivante.", + "avatarGroupCompKeywords": "gruppo avatar, utenti, entità, compatto", + "transferName": "Trasferimento", + "transferDesc": "Facilita il trasferimento dei dati tra due elenchi con la funzione di trascinamento.", + "transferKeywords": "trasferimento, dati, drag-and-drop", + "cardCompName": "Scheda Contenuto", + "cardCompDesc": "Un componente di scheda per la visualizzazione di informazioni o contenuti organizzati in modo strutturato.", + "cardCompKeywords": "scheda, informazione, contenuto, visualizzazione", + "timerCompName": "Timer", + "timerCompDesc": "Un componente che visualizza un conto alla rovescia o un tempo trascorso, utile per tracciare durate e scadenze.", + "timerCompKeywords": "timer, conto alla rovescia, tempo trascorso, tracciamento, durate, scadenze", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Visualizza la documentazione", + "menuViewPlayground": "Visualizza il parco giochi interattivo", + "menuUpgradeToLatest": "Aggiornamento alla versione più recente", + "nameNotEmpty": "Non può essere vuoto", + "nameRegex": "Deve iniziare con una lettera e contenere solo lettere, cifre e trattini (_).", + "nameJSKeyword": "Non può essere una parola chiave JavaScript", + "nameGlobalVariable": "Non può essere un nome di variabile globale", + "nameExists": "Nome {name} Già esistente", + "getLatestVersionMetaError": "Impossibile recuperare la versione più recente, riprovare più tardi.", + "needNotUpgrade": "La versione attuale è già la più recente.", + "compNotFoundInLatestVersion": "Componente corrente non trovato nella versione più recente.", + "upgradeSuccess": "Aggiornato con successo all'ultima versione.", + "searchProp": "Ricerca", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Riprova", + "resetAfterSubmit": "Reimpostazione dopo l'invio del modulo", + "jsonSchema": "Schema JSON", + "uiSchema": "Schema UI", + "schemaTooltip": "Vedi", + "defaultData": "Dati del modulo precompilati", + "dataDesc": "Dati del modulo corrente", + "required": "Richiesto", + "maximum": "Il valore massimo è {value}.", + "minimum": "Il valore minimo è {value}.", + "exclusiveMaximum": "Dovrebbe essere minore di {value}", + "exclusiveMinimum": "Dovrebbe essere maggiore di {value}", + "multipleOf": "Dovrebbe essere un multiplo di {value}", + "minLength": "Almeno {value} Caratteri", + "maxLength": "Al massimo {value} Caratteri", + "pattern": "Dovrebbe corrispondere al modello {value}", + "format": "Dovrebbe corrispondere al formato {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "Ingresso Valore di ricerca", + }, + "customComp": { + ...en.customComp, + + "text": "È un buon giorno.", + "triggerQuery": "Query di attivazione", + "updateData": "Aggiornamento dei dati", + "updateText": "Sono anche dell'umore giusto per sviluppare ora il mio componente personalizzato con Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Dati da passare al componente personalizzato", + "code": "Codice del componente personalizzato", + }, + "tree": { + ...en.tree, + + "placeholder": "Selezionare", + "selectType": "Selezionare il tipo", + "noSelect": "Non selezionare", + "singleSelect": "Selezione singola", + "multiSelect": "Selezione multipla", + "checkbox": "Casella di controllo", + "checkedStrategy": "Strategia controllata", + "showAll": "Tutti i nodi", + "showParent": "Solo i nodi parentali", + "showChild": "Nodi figli unici", + "autoExpandParent": "Espansione automatica genitore", + "checkStrictly": "Controllare rigorosamente", + "checkStrictlyTooltip": "Controllare con precisione il TreeNode; il TreeNode genitore e i TreeNode figli non sono associati", + "treeData": "Dati dell'albero", + "treeDataDesc": "Dati attuali dell'albero", + "value": "Valori predefiniti", + "valueDesc": "Valori attuali", + "expanded": "Valori ampliati", + "expandedDesc": "Valori attuali ampliati", + "defaultExpandAll": "Predefinito Espandi tutti i nodi", + "showLine": "Linea spettacolo", + "showLeafIcon": "Mostra l'icona Foglia", + "treeDataAsia": "Asia", + "treeDataChina": "Cina", + "treeDataBeijing": "Pechino", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Giappone", + "treeDataEurope": "Europa", + "treeDataEngland": "Inghilterra", + "treeDataFrance": "Francia", + "treeDataGermany": "Germania", + "treeDataNorthAmerica": "Nord America", + "helpLabel": "Etichetta del nodo", + "helpValue": "Valore unico del nodo nell'albero", + "helpChildren": "Nodi figli", + "helpDisabled": "Disabilita il nodo", + "helpSelectable": "Se il nodo è selezionabile (tipo di selezione singola/multi)", + "helpCheckable": "Visualizzazione o meno della casella di controllo (tipo di casella di controllo)", + "helpDisableCheckbox": "Disabilita la casella di controllo (tipo casella di controllo)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Test dell'evento", + "methodTest": "Metodo Test", + "inputTest": "Test di ingresso", + }, + "password": { + ...en.password, + + "label": "Password", + "placeholder": "Inserire la password", + "conformLabel": "Conferma la password", + "conformPlaceholder": "Confermare la password", + "visibilityToggle": "Alterna la visibilità", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Personalizzare la barra degli strumenti", + "toolbarDescription": "È possibile personalizzare la barra degli strumenti. Per maggiori dettagli, consultare: https://quilljs.com/docs/modules/toolbar/.", + "placeholder": "Inserisci...", + "hideToolbar": "Nascondere la barra degli strumenti", + "content": "Content", + "title": "Titolo", + "save": "Risparmiare", + "link": "Link:", + "edit": "Modifica", + "remove": "Rimuovere", + "defaultValue": "Contenuto di base", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Personalizzato", + "backTop": "Indietro Top", + "buttonType": "Tipo di pulsante", + "buttonShape": "Forma del pulsante", + "square": "Quadrato", + "circle": "Cerchio", + "description": "Descrizione", + "badge": "Distintivo", + "primary": "Primario", + "default": "Predefinito", + "buttonTheme": "Tema dei pulsanti", + "badgeColor": "Colore del badge", + "dot": "Distintivo come punto", + "hidden": "Nascosto", + "visibilityHeight": "Altezza di visibilità", + "visibilityHeightDesc": "Scorrere fino a una certa altezza prima di visualizzare il pulsante di ritorno all'inizio, 0 è sempre visualizzato, la modalità di modifica non può visualizzare l'anteprima in tempo reale", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Evento Trigger", + "click": "Cliccare", + "hover": "Hover", + "disabledAlpha": "Disabilita la selezione alfa", + "recommended": "Consigliato", + "showPresets": "Mostra le preimpostazioni di colore", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Mostra il pulsante di chiusura", + "Type": "Tipo di badge", + "Count": "Conteggio dei badge", + "Size": "Dimensione del badge", + "SizeDefault": "predefinito", + "SizeSmall": "Piccolo", + "overflowCount": "Conteggio dell'overflow", + "Title": "Titolo del distintivo", + "dot": "Punto", + "number": "Numero", + "tooltip": "Tooltip", + }, + "gantt": { + ...en.gantt, + + "key": "Chiave", + "title": "Titolo", + "project": "Progetto", + "from": "Da", + "minute": "minuto", + "hour": "Ora", + "day": "Giorno", + "week": "Settimana", + "month": "Mese", + "year": "Anno", + "quarter": "Trimestre", + "tasks": "Dati sulle attività", + "level": "livello", + "durationUnit": "Unità di durata", + "duration": "Durata", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Settimana #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "albero", + "ColumnsData": "Colonne Dati", + "allowChangeTask": "Attività DbClick", + "allowAddLink": "Aggiungi collegamento", + "allowLinkDelete": "Cancellazione del link", + "allowProgressDrag": "Trascinamento del progresso", + "allowTaskDrag": "Trascinamento dell'attività", + "links": "Dati sui link", + "dataFormat": "Data parse Format", + "handleDateChange": "Gestire la modifica dell'attività", + "handleTaskChange": "Gestire la modifica dell'attività", + "handleAddedLink": "Maniglia Link aggiunto", + "handleDeletedLink": "Gestire il link cancellato", + "handleProgressDrag": "Gestire il trascinamento dell'avanzamento", + "showTodayMark": "Mostra Oggi Mark", + "resize": "Ridimensionamento", + "otherEvents": "Altri eventi", + "openAllBranchInit": "Aprire tutte le filiali", + "date": "Data", + "text": "Testo", + "progress": "progresso", + "width": "Larghezza", + "ColumnsType": "Tipo di cloumns", + "currentId": "ID corrente", + "currentObject": "Oggetto corrente", + "addTask": "Aggiungi attività", + "taskObject": "Oggetto dell'attività", + "taskObjectDesc": "Supporta array di task o singoli oggetti task", + "linkID": "ID collegamento", + "linkIDDesc": "Supporta array di ID di collegamenti o singoli oggetti di collegamento.", + "removeTask": "Rimuovere l'attività", + "taskID": "ID compito", + "taskIDDesc": "Supporta array di ID o ID singolo", + "add": "Aggiungi", + "expandingAll": "Espansione di tutti", + "collapsingAll": "Crollo di tutti", + "addTaskFail": "L'operazione di aggiunta non è riuscita e il tipo di parametro deve essere un oggetto o un oggetto array.", + "addLinkFail": "Il collegamento di aggiunta non è riuscito e il tipo di parametro deve essere un oggetto o un oggetto array.", + "removeTaskFail": "L'attività di eliminazione non è riuscita e il tipo di parametro deve essere stringa o array di stringhe.", + "removeLinkFail": "I collegamenti di cancellazione non sono riusciti e il tipo di parametro deve essere un array di stringhe.", + "otherData": "Altri dati{i}", + "projectText": "Progetto #{i}", + "taskText": "Compito #{i}", + "AutoCalculateProgress": "Avanzamento del calcolo automatico", + "allowProjectDrag": "Consentire il trascinamento del progetto", + "showColumns": "Mostra colonne", + "exportToPNG": "Esportazione in PNG", + "exportToPDF": "Esportazione in PDF", + "exportToExcel": "Esportazione in Excel", + "progressLowBg": "Basso BgColor", + "progressLowColor": "Colore di avanzamento basso", + "progressMediumBg": "Medio BgColor", + "progressMediumColor": "Colore Medio Progresso", + "progressHighBg": "Altezza BgColor", + "progressHighColor": "Colore di avanzamento alto", + "progresscompletedColor": "Colore di avanzamento completato", + "lowProgressLine": "Linea di avanzamento bassa", + "mediumProgressLine": "Linea di avanzamento media", + "SegmentedColor": "Progresso Colore segmentato", + "link_f2s": "Collegamento F2S", + "link_s2s": "Collegamento S2S", + "link_f2f": "Collegamento F2F", + "link_s2f": "Collegamento S2F", + "weekScale": "#{i},", + "showHolidays": "Mostra Vacanze", + "StatutoryHolidays": "Dati sulle ferie legali", + "skipOffTime": "Nasconde il tempo non lavorativo", + "weekend": "Fine settimana", + "weekendSelected": "Fine settimana selezionato", + "noWorkHour": "Nessun orario di lavoro", + "noWorkHourSelected": "nessun orario di lavoro selezionato", + "showWorkTimes": "Mostra Tempi di lavoro", + "workTimeData": "Dati sui tempi di lavoro", + "fit": "in forma", + "manual": "manuale", + "scaleMode": "Scale Mode", + "startDate": "Data di inizio", + "endDate": "Data di fine", + "addLink": "Aggiungi link", + "linkObject": "link Oggetto", + "removeLink": "rimuovere il link", + "allowSort": "Consenti ordinamento", + "showTask": "Mostra attività", + "toggleOnDBClick": "Attivare DBClick", + "sortOptions": "Opzioni di ordinamento iniziali", + "rowHeight": "Altezza della fila", + "showTooltip": "Mostra la descrizione degli strumenti", + "tooltipTemplates": "Modello di tooltip", + "allowResizeTask": "Consentire il ridimensionamento dell'attività", + "projectColor": "Progetto Colore", + "projectColorBg": "Progetto BgColor", + "taskColor": "Colore dell'attività", + "taskColorBg": "Attività BgColor", + "milestoneColor": "Colore della pietra miliare", + "highlightOverdue": "Evidenziare gli arretrati", + "overdueColor": "Overdue Color", + "overdueBgColor": "Overdue BgColor", + "projectCompletedBgColor": "Progetto completato BgColor", + "projectCompletedColor": "Progetto completato Colore", + "tag": "tag", + "tasksTableWidth": "Larghezza della tabella delle attività", + "allowErrorMessage": "Consentire il messaggio di errore", + "currentProjectId": "Id progetto attuale", + "currentProjectLastTask": "Progetto corrente Ultimo compito", + "onlySortProject": "Solo progetto di ordinamento", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Dati sorgente", + "targetTitle": "Dati di destinazione", + "content": "Contenuto {i}", + "items": "Articoli", + "targetKeys": "Chiavi selezionate", + "oneWay": "Un modo", + "pagination": "Paginazione", + "pageSize": "Dimensione della pagina", + "allowSearch": "Consenti la ricerca", + "selectedKeys": "Chiavi selezionate", + "searchInfo": "Ricerca Info", + "targerObject": "Oggetto Targer", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Conteggio massimo", + "avatarSize": "Dimensione dell'avatar", + "autoColor": "Auto Color", + "alignment": "Allineamento", + "currentAvatar": "Avatar corrente", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "piazza", + "circle": "cerchio", + "icon": "icona", + "shape": "forma", + "counts": "Distintivo", + "title": "titolo", + "src": "src", + "avatarCompTooltip": "La priorità di visualizzazione è: immagine -> caratteri -> icona. A seconda di ciò che è disponibile per primo.", + "iconSize": "Dimensione dell'icona", + "avatarBackground": "Sfondo", + "label": "Etichetta", + "caption": "Didascalia", + "labelPosition": "Posizione", + "alignmentPosition": "allineamento", + "text": "Testo", + "enableDropDown": "Abilitazione della tendina", + "containerBackground": "Sfondo", + }, + "card": { + ...en.card, + + "cardType": "Tipo di carta", + "common": "comune", + "custom": "personalizzato", + "default": "predefinito", + "small": "piccolo", + "showTitle": "Mostra il titolo", + "title": "Titolo", + "more": "Di più", + "extraTitle": "Invito all'azione", + "CoverImg": "Immagine di copertina", + "imgSrc": "Fonte immagine", + "showMeta": "Mostra il contenuto", + "metaTitle": "Titolo del contenuto", + "metaDesc": "Descrizione del contenuto", + "imgHeight": "Altezza immagine", + "showActionIcon": "Mostra opzioni di azione", + "actionOptions": "Opzioni di azione", + "menu": "Menu {i}", + "hoverColor": "hover Colore", + "IconColor": "Icona Colore", + "titleSize": "Titolo Dimensione", + }, + "timer": { + ...en.timer, + + "timerState": "Stato del timer", + "elapsedTime": "Tempo trascorso", + "timer": "Timer", + "countdown": "Conto alla rovescia", + "defaultValue": "Valore predefinito", + "timerType": "Tipo di timer", + "start": "Inizio", + "pause": "Pausa", + "resume": "Il curriculum", + "reset": "Reset", + "startPause": "Avvio/Pausa", + "hideButton": "Pulsante Nascondi", + "fontColor": "Colore del carattere", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Icona", + "autoSize": "Icona Ridimensionamento automatico", + "iconSize": "Dimensione dell'icona", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Formato", + "precision": "Precisione", + "allowNull": "Consentire il valore nullo", + "thousandsSeparator": "Mostra separatore di migliaia", + "controls": "Mostra pulsanti di incremento/decremento", + "step": "Passo", + "standard": "Standard", + "percent": "Percentuale", + }, + "slider": { + ...en.slider, + + "step": "Passo", + "stepTooltip": "Il valore deve essere maggiore di 0 e divisibile per (Max-Min)", + "vertical": "Orientamento verticale", + }, + "rating": { + ...en.rating, + + "max": "Valutazione massima", + "allowHalf": "Consentire la metà dei punti di valutazione", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Opzioni", + "option": "Opzione", + "optionI": "Opzione {i}", + "viewDocs": "Visualizza i documenti", + "tip": "Le variabili 'item' e 'i' rappresentano il valore e l'indice di ciascun elemento dell'array di dati.", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Valore / Chiave", + "valueTooltip": "Il valore del passo deve essere un numero. Per il primo passo, deve essere uguale al valore iniziale. I numeri devono essere in ordine crescente e coerente.", + "title": "Titolo del passo", + "subTitle": "Sottotitolo del passo", + "description": "Descrizione del passo", + "status": "Stato dei passi", + "icon": "Icona Passo", + }, + "step": { + ...en.step, + + "initialValue": "Numeri di partenza a", + "initialValueTooltip": "Dove iniziare la numerazione visiva. Deve essere 1 o superiore.", + "valueDesc": "Valore attuale", + "size": "Dimensione dei passi", + "sizeSmall": "Piccolo", + "sizeDefault": "Predefinito", + "percent": "Passi Percentuale", + "type": "Tipo di passo", + "typeDefault": "Standard", + "typeNavigation": "Navigazione", + "typeInline": "In linea", + "direction": "Direzione dei passi", + "directionVertical": "Verticale", + "directionHorizontal": "Orizzontale", + "labelPlacement": "Passi Posizionamento dell'etichetta", + "status": "Stato dei passi", + "statusWait": "Attendere", + "statusProcess": "Processo", + "statusFinish": "Finitura", + "statusError": "Errore", + "showDots": "Mostra punti invece di simboli", + "showIcons": "Mostra icone invece di simboli", + "responsive": "Reattivo", + "selectable": "Selezionabile", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Testo del tag", + "color": "Colore", + "icon": "Icona", + }, + "radio": { + ...en.radio, + + "options": "Opzioni", + "horizontal": "Orizzontale", + "horizontalTooltip": "Il layout orizzontale si avvolge su se stesso quando finisce lo spazio a disposizione", + "vertical": "Verticale", + "verticalTooltip": "Il layout verticale verrà sempre visualizzato in una singola colonna", + "autoColumns": "Colonna automatica", + "autoColumnsTooltip": "Il layout a colonne automatico riordina automaticamente l'ordine in base allo spazio disponibile e lo visualizza come colonne multiple.", + }, + "cascader": { + ...en.cascader, + + "options": "Dati JSON per mostrare selezioni a cascata", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Valore attualmente selezionato", + "selectedIndexDesc": "L'indice del valore attualmente selezionato o -1 se non è selezionato alcun valore.", + "selectedLabelDesc": "L'etichetta del valore attualmente selezionato", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Deve essere un numero con un'unità di dimensione del file valida o un numero di byte senza unità.", + "fileEmptyErrorMsg": "Caricamento fallito. La dimensione del file è vuota.", + "fileSizeExceedErrorMsg": "Caricamento fallito. La dimensione del file supera il limite.", + "minSize": "Dimensione minima", + "minSizeTooltip": "La dimensione minima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", + "maxSize": "Dimensione massima", + "maxSizeTooltip": "La dimensione massima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", + "single": "Singolo", + "multiple": "Multiplo", + "directory": "Elenco", + "upload": "Sfogliare", + "fileType": "Tipi di file", + "reference": "Fare riferimento a", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Specificatori unici del tipo di file", + "uploadType": "Tipo di caricamento", + "showUploadList": "Mostra elenco di caricamento", + "maxFiles": "File max", + "filesValueDesc": "Il contenuto del file attualmente caricato è codificato Base64", + "filesDesc": "Elenco dei file attualmente caricati. Per i dettagli, fare riferimento a", + "clearValueDesc": "Cancella tutti i file", + "parseFiles": "Analizzare i file", + "parsedValueTooltip1": "Se parseFiles è vero, i file di caricamento verranno analizzati come oggetti, array o stringhe. È possibile accedere ai dati analizzati tramite la matrice parsedValue.", + "parsedValueTooltip2": "Supporta file Excel, JSON, CSV e di testo. Altri formati restituiranno un valore nullo.", + "forceCapture": "Forza di cattura", + "forceCaptureTooltip": "Invece di caricare, catturare l'immagine dalla fotocamera", + "usePhoto": "Usa foto", + "retakePhoto": "Retake Photo", + "capture": "Cattura", + }, + "date": { + ...en.date, + + "format": "Formato", + "inputFormat": "Formato di ingresso", + "formatTip": "Supporto: YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", + "reference": "Fare riferimento a", + "showTime": "Orario dello spettacolo", + "start": "Data di inizio", + "end": "Data di fine", + "year": "Anno", + "quarter": "Trimestre", + "month": "Mese", + "week": "Settimana", + "date": "Data", + "clearAllDesc": "Cancella tutto", + "resetAllDesc": "Azzeramento di tutti", + "placeholder": "Selezionare la data", + "placeholderText": "Segnaposto", + "startDate": "Data di inizio", + "endDate": "Data di fine", + }, + "time": { + ...en.time, + + "start": "Ora di inizio", + "end": "Tempo della fine", + "formatTip": "Supporto: 'HH:mm:ss', 'Timestamp'", + "format": "Formato", + "placeholder": "Selezionare l'ora", + "placeholderText": "Segnaposto", + "startTime": "Ora di inizio", + "endTime": "Tempo della fine", + }, + "button": { + ...en.button, + + "prefixIcon": "Icona Prefisso", + "prefixText": "Prefisso Testo", + "suffixIcon": "Icona Suffisso", + "icon": "Icona", + "iconSize": "Dimensione dell'icona", + "button": "Pulsante del modulo", + "formToSubmit": "Modulo da inviare", + "default": "Predefinito", + "submit": "Invia", + "textDesc": "Testo attualmente visualizzato sul pulsante", + "loadingDesc": "Il pulsante è in stato di caricamento? Se è vero, il pulsante corrente sta caricando", + "formButtonEvent": "Evento", + }, + "link": { + ...en.link, + + "link": "Collegamento a", + "textDesc": "Testo attualmente visualizzato sul link", + "loadingDesc": "Il collegamento è in stato di caricamento? Se è vero, il collegamento corrente è in fase di caricamento", + }, + "scanner": { + ...en.scanner, + + "text": "Fare clic su Scansione", + "camera": "Macchina fotografica {index}", + "changeCamera": "Telecamera Switch", + "continuous": "Scansione continua", + "uniqueData": "Ignore Duplicate Data", + "maskClosable": "Fare clic sulla Maschera per chiudere", + "errTip": "Si prega di utilizzare questo componente sotto HTTPS o Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Display con sola etichetta", + "textDesc": "Testo attualmente visualizzato sul pulsante", + "triggerMode": "Modalità di attivazione", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Hello, {name}", + "valueTooltip": "Markdown supporta la maggior parte dei tag e degli attributi HTML. iframe, Script e altri tag sono disabilitati per motivi di sicurezza.", + "verticalAlignment": "Allineamento verticale", + "horizontalAlignment": "Allineamento orizzontale", + "textDesc": "Testo visualizzato nella casella di testo corrente", + }, + "table": { + ...en.table, + + "editable": "Modificabile", + "columnNum": "Colonne", + "viewModeResizable": "Larghezza della colonna regolata dall'utente", + "viewModeResizableTooltip": "Se gli utenti possono regolare la larghezza delle colonne.", + "visibleResizables": "Mostra le maniglie di ridimensionamento", + "visibleResizablesTooltip": "Visualizza le maniglie di ridimensionamento visibili nell'intestazione della tabella.", + "showFilter": "Pulsante Mostra filtro", + "showRefresh": "Mostra il pulsante di aggiornamento", + "showDownload": "Mostra il pulsante di download", + "columnSeparator": "Separatore a colonna", + "columnSeparatorTooltip": "Separatore di colonna (\"delimitatore\") nel file CSV scaricato.\n\nRaccomandazioni:\n- Virgola (,)\n- Punto e virgola (;)\n- Tubo (|)\n- Tab (\\t)", + "columnSetting": "Pulsante di visibilità delle colonne", + "searchText": "Testo di ricerca", + "searchTextTooltip": "Cercare e filtrare i dati attualmente presenti nella tabella. Si tratta di una ricerca solo di facciata e non influisce sulla query di origine dei dati).", + "showQuickJumper": "Mostra Quick Jumper", + "hideOnSinglePage": "Nascondi su pagina singola", + "showSizeChanger": "Pulsante Mostra cambio formato", + "pageSizeOptions": "Opzioni di formato pagina", + "pageSize": "Dimensione della pagina", + "total": "Conteggio totale delle righe", + "totalTooltip": "Il valore predefinito è il numero di elementi di dati correnti che possono essere ottenuti dalla query, ad esempio: '{{query1.data[0].count}}'.", + "filter": "Filtri", + "filterRule": "Regola del filtro", + "chooseColumnName": "Scegliere la colonna", + "chooseCondition": "Scegliere la condizione", + "clear": "Libero", + "columnShows": "Colonna Mostra", + "selectAll": "Seleziona tutti", + "and": "E", + "or": "Oppure", + "contains": "Contiene", + "notContain": "Non contiene", + "equals": "Pari", + "isNotEqual": "Non è uguale", + "isEmpty": "È vuoto", + "isNotEmpty": "Non è vuoto", + "greater": "Maggiore di", + "greaterThanOrEquals": "Maggiore o uguale", + "lessThan": "Meno di", + "lessThanOrEquals": "Meno di o uguale", + "action": "Azione", + "columnValue": "Valore della colonna", + "columnValueTooltip": "'{{currentCell}}': Dati cella corrente\n '{{currentRow}}': Dati riga corrente\n '{{currentIndex}}': Indice dei dati correnti (a partire da 0)\n Esempio: '{{currentCell * 5}}' Mostra 5 volte il valore originale Dati.", + "columnTooltip": "Tooltip di colonna", + "imageSrc": "Fonte immagine", + "imageSize": "Dimensione dell'immagine", + "columnTitle": "Titolo", + "columnTitleTooltip": "Tooltip del titolo", + "showTitle": "Mostra il titolo", + "showTitleTooltip": "Mostra/nascondi il titolo della colonna nell'intestazione della tabella", + "sortable": "Ordinabile", + "align": "Allineamento", + "fixedColumn": "Colonna fissa", + "autoWidth": "Larghezza automatica", + "customColumn": "Colonna personalizzata", + "auto": "Auto", + "fixed": "Fisso", + "columnType": "Tipo di colonna", + "dataMapping": "Mappatura dei dati", + "numberStep": "Passo", + "numberStepTooltip": "Il numero a cui viene aumentato o diminuito il valore corrente. Può essere un numero intero o decimale", + "precision": "Precisione", + "float": "Galleggiante", + "prefix": "Prefisso", + "suffix": "Suffisso", + "avatars": "Avatars", + "avatarGroupAlignment": "Allineamento degli avatar", + "text": "Testo", + "number": "Numero", + "link": "Collegamento a", + "links": "Collegamenti", + "tag": "Tag", + "select": "Selezionare", + "dropdown": "A discesa", + "time": "Tempo", + "date": "Data", + "dateTime": "Data Ora", + "badgeStatus": "Stato", + "button": "Button", + "image": "Immagine", + "boolean": "Booleano", + "switch": "Interruttore", + "rating": "Valutazione", + "progress": "Progressi", + "option": "Funzionamento", + "optionList": "Elenco delle operazioni", + "option1": "Operazione 1", + "status": "Stato", + "statusTooltip": "Valori opzionali: Successo, Errore, Predefinito, Avviso, Elaborazione", + "primaryButton": "Primario", + "defaultButton": "Predefinito", + "type": "Tipo", + "tableSize": "Dimensione della tabella", + "hideHeader": "Nascondere l'intestazione della tabella", + "hideToolbar": "Nascondere Piè di pagina", + "fixedHeader": "Intestazione fissa della tabella", + "fixedHeaderTooltip": "L'intestazione sarà fissa per la tabella a scorrimento verticale", + "fixedToolbar": "Barra degli strumenti fissa", + "fixedToolbarTooltip": "La barra degli strumenti sarà fissa per la tabella a scorrimento verticale in base alla posizione", + "hideBordered": "Mostra le maniglie di ridimensionamento", + "showHeaderGridBorder": "Mostra il bordo della griglia dell'intestazione", + "showRowGridBorder": "Mostra il bordo della griglia delle righe", + "showVerticalRowGridBorder": "Mostra il bordo verticale della griglia delle righe", + "showHorizontalRowGridBorder": "Mostra il bordo della griglia delle righe orizzontali", + "deleteColumn": "Cancellare la colonna", + "confirmDeleteColumn": "Confermare la colonna Elimina:", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "I dati correnti cambiano, fare clic per rigenerare la colonna.", + "changeSetDesc": "Un oggetto che rappresenta le modifiche a una tabella modificabile, contiene solo la cella modificata. Le righe vanno per prime e le colonne per seconde.", + "selectedRowDesc": "Fornisce i dati per la riga attualmente selezionata, indicando la riga che attiva un evento di clic se l'utente fa clic su un pulsante/collegamento nella riga.", + "selectedRowsDesc": "Utile nella modalità di selezione multipla, come SelectedRow", + "pageNoDesc": "Pagina di visualizzazione corrente, a partire da 1", + "pageSizeDesc": "Quante righe per pagina", + "sortColumnDesc": "Il nome della colonna ordinata attualmente selezionata", + "sortDesc": "Se la riga corrente è in ordine decrescente", + "pageOffsetDesc": "L'inizio corrente del Paging, utilizzato per il Paging per ottenere i dati. Esempio: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", + "displayDataDesc": "Dati visualizzati nella tabella corrente", + "selectedIndexDesc": "Indice selezionato nei dati di visualizzazione", + "filterDesc": "Parametri di filtraggio della tabella", + "dataDesc": "I dati JSON della tabella", + "saveChanges": "Salvare le modifiche", + "cancelChanges": "Annulla modifiche", + "rowSelectChange": "Selezione riga Modifica", + "rowClick": "Riga Fare clic", + "rowExpand": "Espandi riga", + "rowShrink": "Restringimento della fila", + "search": "Ricerca", + "download": "Scaricare", + "columnEdited": "Colonna modificata", + "filterChange": "Sostituzione del filtro", + "sortChange": "Ordinamento Cambiamento", + "pageChange": "Cambio pagina", + "refresh": "Aggiornare", + "rowColor": "Colore condizionale della riga", + "rowColorDesc": "Imposta in modo condizionale il colore della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"green\" : \"red\" }}\".", + "rowHeight": "Altezza di riga condizionale", + "rowHeightDesc": "Imposta in modo condizionale l'altezza della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}\".", + "cellColor": "Colore della cella condizionale", + "cellColorDesc": "Impostare in modo condizionale il colore della cella in base al valore della cella utilizzando CurrentCell. Ad esempio: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "Nessun gestore eventi configurato per il salvataggio delle modifiche. Associa almeno un gestore di eventi prima del clic.", + "dynamicColumn": "Utilizzare la visibilità dinamica delle colonne", + "dynamicColumnConfig": "Colonne visibili", + "dynamicColumnConfigDesc": "Visibilità dinamica delle colonne. Accetta un array di nomi di colonne. Tutte le colonne sono visibili per impostazione predefinita. Esempio: [\"id\", \"nome\"].", + "position": "Posizione", + "showDataLoadSpinner": "Mostra indicatore di caricamento", + "showValue": "Mostra valore", + "expandable": "Espandibile", + "configExpandedView": "Configurare la vista espansa", + "toUpdateRowsDesc": "Un array di oggetti per le righe da aggiornare nelle tabelle modificabili.", + "selectedCellDesc": "Cellula selezionata", + "empty": "Vuoto", + "falseValues": "Testo quando è falso", + "iconTrue": "Icona Quando è vero", + "iconFalse": "Icona Quando falso", + "iconNull": "Icona Quando zero", + "allColumn": "Tutti", + "visibleColumn": "Visibile", + "emptyColumns": "Nessuna colonna è attualmente visibile", + "showSummary": "Mostra righe di riepilogo", + "totalSummaryRows": "Totale righe", + "inlineAddNewRow": "Aggiungi nuova riga in linea", + "editMode": "Modalità di modifica", + "singleClick": "Singolo clic", + "doubleClick": "Doppio clic", + "showUpdateButtons": "Mostra i pulsanti Salva/Annulla", + }, + "image": { + ...en.image, + + "src": "Fonte immagine", + "srcDesc": "L'origine dell'immagine. Può essere un URL, un percorso o una stringa Base64. per esempio: data:image/png;base64, AAA... CCC", + "supportPreview": "Supporto Fare clic sull'anteprima (zoom)", + "supportPreviewTip": "Efficace quando la fonte dell'immagine è valida", + "previewSrc": "Fonte immagine ad alta risoluzione", + "clipPath": "Percorso di ritaglio dell'immagine", + "clipPathTip": "Utilizzare clip-path per definire una forma personalizzata per l'elemento in base a una definizione CSS, facendo riferimento a una maschera SVG (tramite l'URL di origine) o utilizzando forme predefinite come cerchio(), ellisse(), poligono() o inset() per il ritaglio.", + "enableOverflow": "Abilita l'overflow", + "enableOverflowTip": "Permette all'immagine di traboccare dal suo contenitore, consentendo il ritaglio oltre i limiti del contenitore. Utile per mantenere l'attenzione su parti specifiche dell'immagine.", + "overflow": "Comportamento del trabocco (CSS)", + "overflowTip": "Definisce il comportamento del contenuto quando trabocca dal contenitore. Opzioni come 'hidden', 'scroll' o 'visible' determinano la visibilità del contenuto ritagliato.", + "positionX": "Posizione orizzontale", + "positionXTip": "Specifica l'allineamento orizzontale dell'immagine all'interno del suo contenitore. Esempi: 'sinistra', 'centro', 'destra' o valori percentuali.", + "positionY": "Posizione verticale", + "positionYTip": "Specifica l'allineamento verticale dell'immagine all'interno del suo contenitore. Esempi: 'superiore', 'centrale', 'inferiore' o valori percentuali.", + "aspectRatio": "Rapporto di aspetto (CSS)", + "aspectRatioTip": "Mantiene un rapporto larghezza/altezza coerente per l'immagine, come ad esempio '16/9' per il widescreen o '1/1' per il quadrato. Lasciare vuoto per le dimensioni naturali dell'immagine.", + "placement": "Posizionamento dell'immagine", + "placementTip": "Determina dove e come l'immagine viene visualizzata all'interno del layout o del contenitore. Le opzioni includono una logica specifica di allineamento o posizionamento.", + }, + "progress": { + ...en.progress, + + "value": "Valore", + "valueTooltip": "La percentuale di completamento come valore compreso tra 0 e 100", + "showInfo": "Mostra valore", + "valueDesc": "Valore di avanzamento corrente, compreso tra 0 e 100", + "showInfoDesc": "Visualizzazione o meno del valore di avanzamento corrente", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Inserire un URL valido o una stringa Base64", + "src": "File URI", + "srcTooltip": "Anteprima del contenuto del link fornito tramite l'incorporazione di HTML, possono essere supportati anche dati codificati Base64, ad esempio: data:application/pdf; base64,AAA... CCC", + "srcDesc": "The File URI", + }, + "divider": { + ...en.divider, + + "title": "Titolo", + "align": "Allineamento", + "dashed": "Tratteggiato", + "type": "Tipo verticale", + "dashedDesc": "Utilizzo o meno della linea tratteggiata", + "titleDesc": "Titolo del divisore", + "alignDesc": "Allineamento del titolo del divisore", + }, + "QRCode": { + ...en.QRCode, + + "value": "Codice QR Valore del contenuto", + "valueTooltip": "Il valore contiene un massimo di 2953 caratteri. Il valore del codice QR può codificare vari tipi di dati, tra cui messaggi di testo, URL, dettagli di contatto (VCard/meCard), credenziali di accesso al Wi-Fi, indirizzi e-mail, numeri di telefono, messaggi SMS, coordinate di geolocalizzazione, dettagli di eventi del calendario, informazioni di pagamento, indirizzi di criptovalute e link per il download di app.", + "valueDesc": "Il valore del contenuto del codice QR", + "level": "Livello di tolleranza ai guasti", + "levelTooltip": "Si riferisce alla capacità del codice QR di essere scansionato anche se una parte di esso è bloccata. Più alto è il livello, più complesso è il codice.", + "includeMargin": "Mostra il margine", + "image": "Visualizzazione dell'immagine al centro", + "L": "L (Basso)", + "M": "M (Medio)", + "Q": "Q (quartile)", + "H": "H (Alto)", + "maxLength": "Il contenuto è troppo lungo. Impostare la lunghezza a meno di 2953 caratteri.", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Rientro di ogni livello", + "expandToggle": "Espandere la struttura JSON", + "theme": "Tema del colore", + "valueDesc": "Dati JSON correnti", + "default": "Predefinito", + "defaultDark": "Predefinito Scuro", + "neutralLight": "Luce neutra", + "neutralDark": "Neutro scuro", + "azure": "Azzurro", + "darkBlue": "Blu scuro", + }, + "audio": { + ...en.audio, + + "src": "URI della sorgente audio o stringa Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Autoplay", + "loop": "Anello", + "srcDesc": "URI audio corrente o stringa Base64 come data:audio/mpeg;base64,AAA... CCC", + "play": "Gioco", + "playDesc": "Attivato quando viene riprodotto l'audio", + "pause": "Pausa", + "pauseDesc": "Attivato quando l'audio è in pausa", + "ended": "Terminato", + "endedDesc": "Attivato quando l'audio finisce di essere riprodotto", + }, + "video": { + ...en.video, + + "src": "URI sorgente video o stringa Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL del poster", + "defaultPosterUrl": "", + "autoPlay": "Autoplay", + "loop": "Anello", + "controls": "Nascondere i controlli", + "volume": "Volume", + "playbackRate": "Velocità di riproduzione", + "posterTooltip": "Il valore predefinito è il primo fotogramma del video.", + "autoPlayTooltip": "Dopo il caricamento del video, la riproduzione avverrà automaticamente. Se si modifica questo valore da Vero a Falso, il video viene messo in pausa. (Se è impostato un poster, verrà riprodotto dal pulsante Poster).", + "controlsTooltip": "Nascondere i controlli di riproduzione video. Potrebbe non essere completamente supportato da tutte le sorgenti video.", + "volumeTooltip": "Impostazione del volume del lettore, tra 0 e 1", + "playbackRateTooltip": "Impostare la frequenza del lettore, tra 1 e 2", + "srcDesc": "URI audio corrente o stringa Base64 come data:video/mp4;base64, AAA... CCC", + "play": "Gioco", + "playDesc": "Attivato quando viene riprodotto un video", + "pause": "Pausa", + "pauseDesc": "Attivato quando il video è in pausa", + "load": "Carico", + "loadDesc": "Attivato al termine del caricamento della risorsa video", + "ended": "Terminato", + "endedDesc": "Attivato al termine della riproduzione del video", + "currentTimeStamp": "Posizione di riproduzione corrente del video in secondi", + "duration": "La durata totale del video in secondi", + }, + "media": { + ...en.media, + + "playDesc": "Inizia la riproduzione del supporto.", + "pauseDesc": "Mette in pausa la riproduzione multimediale.", + "loadDesc": "Ripristina il supporto all'inizio e riavvia Selezionando la risorsa multimediale.", + "seekTo": "Cerca fino al numero di secondi indicato, o alla frazione se la quantità è compresa tra 0 e 1", + "seekToAmount": "Numero di secondi o frazione se è compreso tra 0 e 1", + "showPreview": "Anteprima dello spettacolo", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Valore iniziale", + "end": "Valore finale", + "step": "Dimensione del passo", + "stepTooltip": "Granularità del cursore, il valore deve essere maggiore di 0 e divisibile per (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Selezionare un'icona", + "searchIcon": "Cercare un'icona", + "searchAnimation": "Ricerca di un'animazione", + "searchIllustration": "Ricerca di un'illustrazione", + "insertIcon": "Inserire un'icona", + "insertImage": "Inserire un'immagine o", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Selezionare una forma", + "insertShape": "Inserire una forma", + "insertImage": "Inserire un'immagine o", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Inserire il periodo di timeout corretto in ms, l'ingresso attuale è: {value}", + "timeoutLessThanMinError": "L'ingresso deve essere maggiore di {left}, l'ingresso corrente è: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Singolo", + "multiple": "Multiplo", + "close": "Chiudere", + "mode": "Modalità di selezione della riga", + }, + "container": { + ...en.container, + + "title": "Titolo del contenitore visualizzato", + "titleTooltip": "Il titolo del contenitore", + "flowWidth": "Larghezza del contenuto", + "floatType": "Testo Tipo fluttuante", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Posizionamento del pulsante di chiusura", + "placement": "Posizionamento dei cassetti", + "size": "Dimensione", + "top": "In alto", + "right": "Diritto", + "center": "Centro", + "bottom": "Bottom", + "left": "A sinistra", + "title": "Titolo del cassetto", + "titleAlign": "Allineamento dei titoli", + "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", + "heightTooltip": "Pixel, ad esempio 378", + "openDrawerDesc": "Cassetto aperto", + "closeDrawerDesc": "Chiudere il cassetto", + "width": "Larghezza cassetto", + "height": "Altezza cassetto", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Livello di registro dell'SDK Agora", + "placement": "Posizionamento dei cassetti per le riunioni", + "meeting": "Impostazioni della riunione", + "cameraView": "Camera View", + "cameraViewDesc": "Vista della telecamera dell'utente locale (Host)", + "screenShared": "Schermo condiviso", + "screenSharedDesc": "Schermo condiviso dall'utente locale (Host)", + "audioUnmuted": "Audio non silenziato", + "audioMuted": "Audio disattivato", + "videoClicked": "Video cliccato", + "videoOff": "Video Off", + "videoOn": "Video On", + "size": "Dimensione", + "top": "In alto", + "host": "Host della sala riunioni. È necessario gestire l'host come propria applicazione logica.", + "participants": "Partecipanti alla sala riunioni", + "shareScreen": "Schermo condiviso dall'utente locale", + "appid": "ID applicazione Agora", + "meetingName": "Nome della riunione", + "localUserID": "ID utente host", + "userName": "Nome utente host", + "rtmToken": "Gettone Agora RTM", + "rtcToken": "Gettone Agora RTC", + "noVideo": "Nessun video", + "profileImageUrl": "URL dell'immagine del profilo", + "right": "Diritto", + "bottom": "Bottom", + "videoId": "ID flusso video", + "audioStatus": "Audio Status", + "left": "A sinistra", + "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", + "heightTooltip": "Pixel, ad esempio 378", + "openDrawerDesc": "Cassetto aperto", + "closeDrawerDesc": "Chiudere il cassetto", + "width": "Larghezza cassetto", + "height": "Altezza cassetto", + "actionBtnDesc": "Pulsante di azione", + "broadCast": "Messaggi di trasmissione", + "title": "Titolo della riunione", + "meetingCompName": "Controllore di riunioni Agora", + "sharingCompName": "Schermo Condividi Stream", + "videoCompName": "Camera Stream", + "videoSharingCompName": "Schermo Condividi Stream", + "meetingControlCompName": "Icon Button", + "meetingCompDesc": "Componente della riunione", + "meetingCompControls": "Controllo delle riunioni", + "meetingCompKeywords": "Agorà Meeting, Web Meeting, Collaborazione", + "iconSize": "Dimensione dell'icona", + "userId": "ID utente host", + "roomId": "ID camera", + "meetingActive": "Riunione in corso", + "messages": "Messaggi trasmessi", + }, + "settings": { + ...en.settings, + + "title": "Impostazioni", + "userGroups": "Gruppi di utenti", + "organization": "Spazi di lavoro", + "subscription": "Abbonamenti", + "audit": "Registri di controllo", + "theme": "Temi", + "plugin": "Plugin", + "advanced": "Avanzato", + "apiDocs": "Documenti API", + "lab": "Laboratorio", + "branding": "Branding", + "oauthProviders": "Autenticazione utente", + "appUsage": "Registri di utilizzo delle app", + "environments": "Ambienti", + "premium": "Premio", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "Registro di controllo Dasboard", + "AuditLogOverview": "Filtro di registro", + "USER_LOGIN": "Accesso utente", + "USER_LOGOUT": "Disconnessione dell'utente", + "APPLICATION_VIEW": "Visualizza applicazione", + "APPLICATION_CREATE": "Crea applicazione", + "APPLICATION_DELETE": "Cancellare l'applicazione", + "APPLICATION_UPDATE": "Aggiornamento dell'applicazione", + "APPLICATION_MOVE": "Spostare la domanda", + "APPLICATION_RECYCLED": "Applicazione di riciclo", + "APPLICATION_RESTORE": "Ripristino dell'applicazione", + "APPLICATION_PUBLISH": "Pubblicazione di applicazioni", + "APPLICATION_VERSION_CHANGE": "Aggiornamento della versione dell'applicazione", + "APPLICATION_SHARING_CHANGE": "Modifica della condivisione delle applicazioni", + "APPLICATION_PERMISSION_CHANGE": "Modifica del permesso di applicazione", + "FOLDER_CREATE": "Crea cartella", + "FOLDER_DELETE": "Elimina cartella", + "FOLDER_UPDATE": "Cartella di aggiornamento", + "QUERY_EXECUTION": "Eseguire la query", + "GROUP_CREATE": "Crea gruppo", + "GROUP_UPDATE": "Gruppo di aggiornamento", + "GROUP_DELETE": "Cancellare il gruppo", + "GROUP_MEMBER_ADD": "Aggiungi un membro del gruppo", + "GROUP_MEMBER_ROLE_UPDATE": "Aggiornare il ruolo di membro del gruppo", + "GROUP_MEMBER_LEAVE": "Gruppo di congedo", + "GROUP_MEMBER_REMOVE": "Rimuovere un membro del gruppo", + "SERVER_START_UP": "Avvio del server", + "SERVER_INFO": "Visualizza informazioni sul server", + "DATA_SOURCE_CREATE": "Creare una fonte di dati", + "DATA_SOURCE_UPDATE": "Aggiornare la fonte di dati", + "DATA_SOURCE_DELETE": "Eliminare la fonte di dati", + "DATA_SOURCE_PERMISSION_GRANT": "Concessione dell'autorizzazione alla fonte di dati", + "DATA_SOURCE_PERMISSION_UPDATE": "Aggiornare l'autorizzazione della fonte di dati", + "DATA_SOURCE_PERMISSION_DELETE": "Autorizzazione di cancellazione della sorgente dati", + "LIBRARY_QUERY_CREATE": "Creare una query di biblioteca", + "LIBRARY_QUERY_UPDATE": "Aggiornare la query della biblioteca", + "LIBRARY_QUERY_DELETE": "Eliminare la query della biblioteca", + "LIBRARY_QUERY_PUBLISH": "Pubblicare la query della biblioteca", + "API_CALL_EVENT": "Evento di chiamata API", + "logFilter": "Filtro di registro", + "noLogsFound": "Non sono stati trovati registri. Regolare i filtri e riprovare.", + "usageLogUserEngagement": "Coinvolgimento degli utenti per regione", + "usageLogAppViews": "Utilizzo dell'app nel tempo", + "usageLogTopTen": "Top 10 delle applicazioni", + "usageLogAnonymousKNown": "Utenti anonimi/conosciuti", + "usageLogDevices": "Ripartizione dispositivi/OS", + "usageLogBrowsers": "Browser/Motore di layout", + "premiumFeaturesNotice": "Tutte le funzioni Premium sono disponibili nell'edizione Enterprise di Lowcoder.", + "requestLicense": "Richiesta di licenze Enterprise Edition", + "requestLicensesBtton": "Richiesta di accesso aziendale", + "AuditLogsTitle": "Registri di controllo", + "AuditLogsIntroTitle": "Potente visibilità sull'attività del vostro spazio di lavoro", + "AuditLogsIntro1": "I registri di audit consentono agli amministratori di tracciare esattamente ciò che accade nell'intera piattaforma Lowcoder. Dall'accesso degli utenti alle modifiche delle app, ogni azione rilevante viene catturata e memorizzata.", + "AuditLogsIntro2": "Per ogni evento includiamo metadati dettagliati come la geolocalizzazione, il tipo di dispositivo, il browser e il sistema operativo.", + "AuditLogsIntro3": "Questa trasparenza consente di monitorare l'attività in tutti gli ambienti connessi, fornendo una solida traccia di audit per supportare la conformità, la sicurezza e la comprensione operativa.", + "AuditLogsEventsTitle": "Quali eventi vengono monitorati?", + "AuditLogsEventsIntro": "Le seguenti azioni dell'utente vengono registrate in tempo reale:", + "SignIn": "Accedi", + "Logout": "Disconnessione", + "ViewApp": "Visualizza l'applicazione", + "CreateApp": "Creare una nuova applicazione", + "DeleteApp": "Eliminare l'applicazione", + "UpdateApp": "Aggiornamento app", + "MoveToFolder": "Sposta nella cartella", + "MoveToTrash": "Sposta nel cestino", + "RestoreApp": "Restore app", + "CreateFolder": "Creare una nuova cartella", + "DeleteFolder": "Cancellare la cartella", + "UpdateFolder": "Cartella di aggiornamento", + "ExecuteDataQuery": "Execute data query", + "CreateUserGroup": "Creare un nuovo gruppo di utenti", + "UpdateUserGroup": "Aggiornare il gruppo di utenti", + "DeleteUserGroup": "Cancellare il gruppo di utenti", + "AddGroupMember": "Aggiungere un membro del gruppo di utenti", + "UpdateGroupMemberRole": "Aggiornare il ruolo di un membro del gruppo di utenti", + "LeaveUserGroup": "Lasciare il gruppo utente", + "RemoveGroupMember": "Rimuovere il membro di un gruppo di utenti", + "ServerStartup": "Avvio del server", + "CreateDataSource": "Creare l'origine dati", + "UpdateDataSource": "Aggiornare l'origine dati", + "DeleteDataSource": "Delete data source", + "GrantUpdateDeletePermission": "Concedere o aggiornare le autorizzazioni", + "LibraryQueryActions": "Creare / aggiornare / cancellare le query della biblioteca", + "PublishLibraryQuery": "Pubblicare la query della biblioteca", + "AuditLogsPreviewTitle": "Anteprima del Registro di controllo in azione (fare clic per ingrandire)", + "ScreenshotPlaceholder1": "[ Screenshot 1 Placeholder ]", + "ScreenshotPlaceholder2": "[ Screenshot 2 Placeholder ]", + "ScreenshotPlaceholder3": "[ Segnaposto screenshot 3 ]", + "PricingTitle": "Prezzi dell'edizione Enterprise", + "PricingIntro": "Offriamo prezzi flessibili per organizzazioni di qualsiasi dimensione, adattati al vostro modello di utilizzo:", + "FlatRateTitle": "Opzione 1: tariffa forfettaria per istanza - $169 / mese", + "FlatRateDesc": "Un'istanza è un ambiente Lowcoder completo (database dei metadati + runtime) che può essere distribuito in modo indipendente. Questo include:", + "FlatRatePoint1": "Un archivio di metadati MongoDB dedicato", + "FlatRatePoint2": "Una o più app runtime (contenitori \"Api-Service\" e/o \"Node-Service\")", + "UsagePricingTitle": "Opzione 2: Prezzo basato sull'uso - $0,001 per chiamata API", + "UsagePricingDesc": "In alternativa, ogni istanza può essere concessa in licenza in base all'utilizzo delle API. Offriamo pacchetti prepagati:", + "API100k": "100.000 chiamate API - $100", + "API1M": "1.000.000 di chiamate API - $1.000", + "API10M": "10.000.000 di chiamate API - $10.000", + "UsageOverrunDesc": "Quando il vostro pacchetto API si esaurisce, vi avvisiamo. Una volta consumato il pacchetto, l'istanza rimane funzionante ma funzionerà a velocità ridotta per evitare abusi e mantenere la correttezza.", + "UsageTopUpInfo": "È possibile aggiungere pacchetti aggiuntivi in qualsiasi momento per garantire un accesso continuo e veloce, senza interruzioni del servizio.", + "AppUsageTitle": "Registri di utilizzo delle app", + "AppUsageIntroTitle": "Capire come vengono utilizzate le vostre app", + "AppUsageIntro1": "I registri di utilizzo delle app forniscono informazioni approfondite sul consumo delle applicazioni Lowcoder pubblicate.", + "AppUsageIntro2": "Questa funzionalità funziona come una versione integrata e semplificata di Google Analytics, ma completamente privata e limitata alla vostra istanza Lowcoder.", + "AppUsageIntro3": "Gli amministratori possono analizzare l'accesso alle app nel tempo, quali sono le più utilizzate e da dove gli utenti si connettono.", + "AppUsageMetricsTitle": "Metriche da tenere sotto controllo...", + "AppUsageMetricsIntro": "Queste analisi aiutano a prendere decisioni informate sul coinvolgimento e sull'utilizzo della piattaforma:", + "MetricActiveUsers": "Visualizzazioni dell'app per giorno / settimana / mese (in base al filtro temporale)", + "MetricViewsPerApp": "Top 10 delle applicazioni", + "MetricDevices": "Accesso per dispositivo (desktop, tablet, mobile)", + "MetricBrowsers": "Accesso per browser e sistema operativo", + "MetricCountries": "Origine geografica degli utenti", + "AppUsageScreenshotsTitle": "App Usage Analytics in azione (clicca per ingrandire)", + "AppUsageScreenshot1": "[ Schermata del cruscotto di utilizzo delle app ]", + "AppUsageScreenshot2": "[ Grafico delle visualizzazioni per app ]", + "AppUsageScreenshot3": "[ Mappa di distribuzione geografica ]", + "BrandingIntroTitle": "Marchio personalizzato e White-Labeling", + "BrandingIntro1": "Con le impostazioni di branding di Lowcoders, potete elevare l'esperienza del prodotto per i vostri utenti offrendo un branding completamente personalizzabile.", + "BrandingIntro2": "Date ai vostri clienti o ai team interni la possibilità di utilizzare la piattaforma come se fosse la loro: logo, colori, font e pagine personalizzate sono inclusi.", + "BrandingIntro3": "Oppure avete bisogno di una soluzione completamente white-label e di rafforzare l'identità del vostro marchio in ogni punto di contatto.", + "BrandingColorsIntro1": "È possibile impostare la propria combinazione di colori in base all'identità aziendale, compresi gli elementi primari dell'interfaccia utente e le barre di navigazione.", + "BrandingColorsIntro2": "Personalizzate le evidenziazioni della barra laterale, le sezioni dell'intestazione e persino il contrasto del testo per migliorare l'esperienza dell'utente e l'accessibilità.", + "BrandingFontsIntro": "Scegliete tra i font curati di Google per rendere la vostra applicazione veramente vostra sia in termini di stile che di leggibilità.", + "BrandingLogosIntro": "Naturalmente, è possibile caricare i propri loghi, rettangolari e quadrati, da inserire nelle intestazioni, nelle dashboard e nelle schermate di login. Mantenete la coerenza del marchio su tutti i dispositivi e gli schermi.", + "BrandingPagesIntro1": "Aggiungete testo e immagini personalizzate alle pagine di errore, ai flussi di iscrizione e ai messaggi di logout.", + "BrandingPagesIntro2": "Questi punti di contatto contribuiscono a fornire un'esperienza completamente brandizzata anche in caso di scenari imprevisti o di transizioni di account.", + "BrandingMetaIntro": "Definire metadati standard come titolo e descrizione della pagina per migliorare la presenza SEO e la comunicazione del marchio.", + "BrandingHelpLinksIntro": "Aggiungete collegamenti alla documentazione sensibili al contesto direttamente all'interno dell'applicazione, fornendo un aiuto just-in-time ai vostri utenti.", + "BrandingWhatsNewIntro": "Attivate la sezione \"Cosa c'è di nuovo\" per evidenziare gli aggiornamenti e gli annunci di prodotto in modo visibile e di marca.", + "EnvironmentsIntroTitle": "Stabilizzazione Lowcoder", + "EnvironmentsTitle": "Infrastruttura multi-ambiente", + "EnvironmentsIntro1": "Gli ambienti Lowcoder consentono di separare le fasi di sviluppo, test e produzione in modo pulito e sicuro.", + "EnvironmentsIntro2": "I team aziendali beneficiano di flussi di lavoro di rilascio strutturati, processi di approvazione e stabilità delle versioni in tutte le fasi.", + "EnvironmentsIntro3": "Con la funzione Ambienti, gli amministratori possono controllare cosa viene distribuito, quando e dove, il tutto da un'unica interfaccia.", + "EnvironmentsIntro4": "Lowcoder include diversi tipi di oggetti come spazi di lavoro, fonti di dati, query di dati e applicazioni. Poiché molti di questi oggetti sono interconnessi (ad esempio, una fonte di dati può essere condivisa da più applicazioni), un'esportazione puramente basata su Git non riuscirebbe a catturare tutte le dipendenze in modo coerente. Lowcoder offre invece un meccanismo di distribuzione selettiva e integrata direttamente all'interno dell'interfaccia utente. Le applicazioni, le fonti di dati e le query possono essere gestite e distribuite in modo selettivo in tutti gli ambienti. Gli oggetti gestiti garantiscono rilasci sicuri e controllati in fase di staging e di produzione.", + "yourDeploymentID": "Il vostro ID di schieramento", + "EnvironmentsFeaturePreviewTitle": "Ambienti e distribuzione in azione (fare clic per ingrandire)", + "EnvironmentsUseCasesTitle": "Perché usare gli ambienti? (Messa in scena)", + "EnvironmentsUseCase1": "Prevenite le modifiche involontarie in produzione testando le applicazioni in ambienti Dev o QA dedicati.", + "EnvironmentsUseCase2": "Allineatevi alla governance IT aziendale implementando distribuzioni graduali con tracciamento pronto per l'audit.", + "EnvironmentsUseCase3": "Consentite ai team di costruire con fiducia con configurazioni, dati e integrazioni specifiche dell'ambiente.", + "EnvironmentsFeaturesTitle": "Cosa si ottiene", + "EnvironmentsFeature1": "Cruscotto centralizzato per visualizzare e gestire tutti gli ambienti Lowcoder.", + "EnvironmentsFeature2": "Distribuzione di applicazioni, fonti di dati e configurazioni tra ambienti, direttamente dall'interfaccia utente, senza la necessità di strumenti CI/CD aggiuntivi.", + "EnvironmentsFeature3": "Controlli di accesso e regole di visibilità specifici per l'ambiente.", + "EnvironmentsFeature5": "Chiara separazione delle attività di staging, sandbox e produzione.", + "apiUsage": "Chiamate API.", + "loadingApiUsage": "Caricamento dei dati di utilizzo dell'API...", + }, + "environments": { + ...en.environments, + + "title": "Ambienti", + "search": "Ricerca", + "refresh": "Aggiornare", + "addEnvironment": "Aggiungi ambiente", + "errorLoadingEnvironments": "Errore nel caricamento degli ambienti", + "noEnvironmentsFoundMatching": "Nessun ambiente trovato corrispondente a \"{searchText}\".", + "noEnvironmentsFound": "Nessun ambiente trovato. Creare il primo ambiente per iniziare.", + "environmentsTypeLabel": "{type} Ambienti", + "showingAllEnvironments": "Mostra tutti gli ambienti {count}", + "unnamedEnvironment": "Ambiente senza nome", + "masterEnvironment": "Ambiente Master", + "viewAuditLogs": "Visualizzazione dei registri di audit", + "id": "ID", + "domain": "Dominio", + "master": "Maestro", + "license": "Licenza", + "apiCalls": "Chiamate API", + "yes": "Sì", + "no": "No", + "copyId": "Copia ID", + "copied": "Copiato!", + "percentUsed": "{percent}% utilizzato", + "licenseStatus_checking": "Controllo...", + "licenseStatus_licensed": "Licenza", + "licenseStatus_unlicensed": "Licenza richiesta", + "licenseStatus_error": "Configurazione richiesta", + "licenseStatus_unknown": "Sconosciuto", + "detail_environmentNotFound": "Ambiente non trovato", + "detail_returnToEnvironmentsList": "Ritorno all'elenco degli ambienti", + "detail_environmentDetail": "Dettaglio ambiente", + "detail_environmentOverview": "Panoramica dell'ambiente", + "detail_noDomainSet": "Nessun dominio impostato", + "detail_environmentId": "ID ambiente", + "detail_licenseStatus": "Stato della licenza", + "detail_licenseNeeded": "Licenza necessaria", + "detail_setupRequired": "Configurazione richiesta", + "detail_created": "Creato", + "detail_unknown": "Sconosciuto", + "detail_licenseDetails": "Dettagli della licenza", + "detail_apiCallsRemaining": "Chiamate API rimanenti", + "detail_totalApiCallsLimit": "Limite totale di chiamate API", + "detail_enterpriseEdition": "Edizione Enterprise", + "detail_active": "Attivo", + "detail_inactive": "Inattivo", + "detail_licenseInformation": "Informazioni sulla licenza", + "detail_calls": "chiamate", + "detail_licenses": "Licenze", + "detail_license": "Licenza", + "detail_workspaces": "Spazi di lavoro", + "detail_userGroups": "Gruppi di utenti", + "detail_type": "Tipo", + "detail_status": "Stato", + "detail_licensed": "Licenza", + "detail_unlicensed": "Senza licenza", + "detail_apiKey": "Chiave API", + "detail_configured": "Configurato", + "detail_notSet": "Non impostato", + "detail_masterEnv": "Master Env", + "unlicensed_unlicensedDescription": "Questo ambiente necessita di una licenza valida per sbloccare tutte le sue capacità e caratteristiche. Assicurarsi che l'URL del servizio API sia configurato correttamente e che il plugin sia installato.", + "unlicensed_errorDescription": "Si è verificato un problema durante la verifica della licenza. Rivedere le impostazioni di configurazione.", + "unlicensed_defaultDescription": "Questo ambiente richiede la configurazione della licenza per procedere.", + "unlicensed_contactLowcoderTeam": "Contatta il team Lowcoder", + "unlicensed_editEnvironment": "Modifica dell'ambiente", + "unlicensed_backToEnvironments": "Torna a Ambienti", + "unlicensed_helpText": "Avete bisogno di assistenza? Contattate il nostro team per ricevere assistenza sulle licenze o modificate la configurazione dell'ambiente per risolvere il problema.", + "unlicensed_type": "Tipo", + "unlicensed_status": "Stato", + "unlicensed_masterEnv": "Master Env", + "unlicensed_licenseIssue": "Problema di licenza", + "unlicensed_error": "Errore", + "unlicensed_missing": "Mancante", + "error_itemNotFound": "L'articolo che state cercando non esiste o non avete i permessi per visualizzarlo.", + "modal_createNewEnvironment": "Creare un nuovo ambiente", + "modal_editEnvironment": "Modifica dell'ambiente", + "modal_cancel": "Annullamento", + "modal_createEnvironment": "Creare un ambiente", + "modal_saveChanges": "Salva le modifiche", + "modal_environmentName": "Nome dell'ambiente", + "modal_pleaseEnterName": "Inserire un nome", + "modal_nameMinLength": "Il nome deve essere composto da almeno 2 caratteri", + "modal_enterEnvironmentName": "Inserire il nome dell'ambiente", + "modal_description": "Descrizione", + "modal_enterDescription": "Inserire la descrizione", + "modal_stage": "Palcoscenico", + "modal_pleaseSelectStage": "Selezionare una fase", + "modal_selectStage": "Selezionare la fase", + "modal_development": "Sviluppo (DEV)", + "modal_testing": "Test (TEST)", + "modal_preProduction": "Pre-produzione (PREPROD)", + "modal_production": "Produzione (PROD)", + "modal_frontendUrl": "URL del frontend", + "modal_pleaseEnterValidUrl": "Inserire un URL valido", + "modal_apiServiceUrl": "URL del servizio API", + "modal_nodeServiceUrl": "URL del servizio del nodo", + "modal_apiKey": "Chiave API", + "modal_enterApiKey": "Inserire la chiave API", + "modal_masterEnvironment": "Ambiente Master", + "modal_alreadyMasterEnvironment": "{name} è già l'ambiente Master", + "modal_willBeMaster": "Sarà Maestro", + "modal_currentlyMaster": "Attualmente Master", + "modal_configurationRequirements": "Requisiti di configurazione", + "modal_configurationRequirementsDesc": "Assicurarsi che l'URL del servizio API sia configurato e corretto, che la chiave API sia valida e, per la verifica della licenza, assicurarsi che la licenza e il plugin siano installati correttamente.", + "workspaces_title": "Spazi di lavoro", + "workspaces_subtitle": "Gestire gli spazi di lavoro in questo ambiente", + "workspaces_refresh": "Aggiornare", + "workspaces_errorLoadingWorkspaces": "Errore nel caricamento degli spazi di lavoro", + "workspaces_configurationIssue": "Problema di configurazione", + "workspaces_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", + "workspaces_totalWorkspaces": "Totale spazi di lavoro", + "workspaces_managedWorkspaces": "Spazi di lavoro gestiti", + "workspaces_unmanagedWorkspaces": "Spazi di lavoro non gestiti", + "workspaces_workspace": "Spazio di lavoro", + "workspaces_role": "Ruolo", + "workspaces_status": "Stato", + "workspaces_managed": "Gestito", + "workspaces_unmanaged": "Non gestito", + "workspaces_actions": "Azioni", + "workspaces_viewAuditLogs": "Visualizzazione dei registri di audit", + "workspaces_audit": "Audit", + "workspaces_searchWorkspaces": "Ricerca degli spazi di lavoro per nome o ID", + "workspaces_showAll": "Mostra tutto", + "workspaces_managedOnly": "Solo gestito", + "workspaces_showingResults": "Mostra {count} di {total} spazi di lavoro", + "workspaces_paginationTotal": "{start}-{end} di {total} spazi di lavoro", + "workspaces_noWorkspacesFound": "Non sono stati trovati spazi di lavoro in questo ambiente", + "userGroups_title": "Gruppi di utenti", + "userGroups_subtitle": "Gestire i gruppi di utenti in questo ambiente", + "userGroups_refresh": "Aggiornare", + "userGroups_errorLoadingUserGroups": "Errore nel caricamento dei gruppi di utenti", + "userGroups_configurationIssue": "Problema di configurazione", + "userGroups_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", + "userGroups_totalGroups": "Totale gruppi", + "userGroups_allUsersGroups": "Tutti i gruppi di utenti", + "userGroups_developerGroups": "Gruppi di sviluppatori", + "userGroups_customGroups": "Gruppi personalizzati", + "userGroups_userGroup": "Gruppo di utenti", + "userGroups_type": "Tipo", + "userGroups_allUsers": "Tutti gli utenti", + "userGroups_developers": "Sviluppatori", + "userGroups_custom": "Personalizzato", + "userGroups_members": "Membri", + "userGroups_adminMembers": "Membri dell'amministrazione", + "userGroups_created": "Creato", + "userGroups_totalMembersTooltip": "Numero totale di membri del gruppo", + "userGroups_adminMembersTooltip": "Numero di utenti amministratori in questo gruppo", + "userGroups_searchUserGroups": "Ricerca di gruppi di utenti per nome o ID", + "userGroups_showingResults": "Mostra {count} di {total} gruppi di utenti", + "userGroups_paginationTotal": "{start}-{end} di {total} gruppi di utenti", + "userGroups_noUserGroupsFound": "Nessun gruppo di utenti trovato in questo ambiente", + "apps_title": "Applicazioni", + "apps_subtitle": "Gestire le applicazioni dello spazio di lavoro", + "apps_refresh": "Aggiornare", + "apps_errorLoadingApps": "Errore nel caricamento delle applicazioni", + "apps_configurationIssue": "Problema di configurazione", + "apps_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", + "apps_totalApps": "Totale applicazioni", + "apps_publishedApps": "Applicazioni pubblicate", + "apps_managedApps": "Applicazioni gestite", + "apps_unmanagedApps": "Applicazioni non gestite", + "apps_app": "App", + "apps_status": "Stato", + "apps_published": "Pubblicato", + "apps_draft": "Bozza", + "apps_managed": "Gestito", + "apps_unmanaged": "Non gestito", + "apps_deploy": "Distribuire", + "apps_audit": "Audit", + "apps_appMustBeManagedToDeploy": "L'applicazione deve essere gestita prima di essere distribuita", + "apps_deployThisApp": "Distribuire l'applicazione in un altro ambiente", + "apps_viewAuditLogs": "Visualizzazione dei registri di audit", + "apps_searchApps": "Cercare le app per nome o ID", + "apps_showAll": "Mostra tutto", + "apps_managedOnly": "Solo gestito", + "apps_showingResults": "Mostra {count} di {total} applicazioni", + "apps_paginationTotal": "{start}-{end} di {total} apps", + "apps_noAppsFound": "Nessuna applicazione trovata in questo spazio di lavoro", + "apps_appRecycled": "Questa applicazione è stata spostata nel cestino", + "apps_managedSuccess": "{name} è ora Gestito", + "apps_unmanagedSuccess": "{name} è ora Non gestito", + "apps_managedError": "Impossibile modificare lo stato gestito per {name}.", + "dataSources_title": "Fonti dei dati", + "dataSources_subtitle": "Gestire le connessioni ai dati dell'area di lavoro", + "dataSources_refresh": "Aggiornare", + "dataSources_errorLoadingDataSources": "Errore nel caricamento delle fonti di dati", + "dataSources_configurationIssue": "Problema di configurazione", + "dataSources_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", + "dataSources_totalDataSources": "Totale fonti di dati", + "dataSources_availableTypes": "Tipi disponibili", + "dataSources_managed": "Gestito", + "dataSources_unmanaged": "Non gestito", + "dataSources_dataSource": "Fonte dei dati", + "dataSources_type": "Tipo", + "dataSources_status": "Stato", + "dataSources_deploy": "Distribuire", + "dataSources_audit": "Audit", + "dataSources_dataSourceMustBeManagedToDeploy": "L'origine dati deve essere gestita prima di essere distribuita", + "dataSources_deployThisDataSource": "Distribuire questa origine dati in un altro ambiente", + "dataSources_viewAuditLogs": "Visualizzazione dei registri di audit", + "dataSources_searchDataSources": "Ricerca delle fonti di dati per nome o ID", + "dataSources_showAll": "Mostra tutto", + "dataSources_managedOnly": "Solo gestito", + "dataSources_showingResults": "Mostra {count} di {total} fonti di dati", + "dataSources_paginationTotal": "{start}-{end} di {total} fonti di dati", + "dataSources_noDataSourcesFound": "Nessuna fonte di dati trovata in questo spazio di lavoro", + "dataSources_managedSuccess": "{name} è ora Gestito", + "dataSources_unmanagedSuccess": "{name} è ora Non gestito", + "dataSources_managedError": "Impossibile modificare lo stato gestito per {name}.", + "queries_title": "Domande", + "queries_subtitle": "Gestire le query API dell'area di lavoro", + "queries_refresh": "Aggiornare", + "queries_errorLoadingQueries": "Errore nel caricamento delle query", + "queries_configurationIssue": "Problema di configurazione", + "queries_missingConfiguration": "Manca la configurazione richiesta: Chiave API o URL del servizio API", + "queries_totalQueries": "Totale interrogazioni", + "queries_managed": "Gestito", + "queries_unmanaged": "Non gestito", + "queries_query": "Interrogazione", + "queries_creator": "Creatore", + "queries_status": "Stato", + "queries_deploy": "Distribuire", + "queries_audit": "Audit", + "queries_queryMustBeManagedToDeploy": "La query deve essere gestita prima di essere distribuita", + "queries_deployThisQuery": "Distribuire questa query in un altro ambiente", + "queries_viewAuditLogs": "Visualizzazione dei registri di audit", + "queries_searchQueries": "Ricerca per nome o ID", + "queries_showAll": "Mostra tutto", + "queries_managedOnly": "Solo gestito", + "queries_showingResults": "Mostrando {count} di {total} query", + "queries_paginationTotal": "{start}-{end} di {total} interrogazioni", + "queries_noQueriesFound": "Nessuna query trovata in questo spazio di lavoro", + "queries_managedSuccess": "{name} è ora Gestito", + "queries_unmanagedSuccess": "{name} è ora Non gestito", + "queries_managedError": "Impossibile modificare lo stato gestito per {name}.", + "deployModal_deployTitle": "Distribuire {singularLabel}: {name}", + "deployModal_loadingEnvironments": "Caricamento degli ambienti...", + "deployModal_sourceEnvironment": "Fonte Ambiente", + "deployModal_targetEnvironment": "Ambiente target", + "deployModal_selectTargetEnvironment": "Selezionare l'ambiente di destinazione", + "deployModal_selectTargetEnvironmentValidation": "Selezionare un ambiente di destinazione", + "deployModal_confirmed": "Confermato", + "deployModal_cancel": "Annullamento", + "deployModal_deploy": "Distribuire", + "deployModal_targetEnvironmentNotFound": "Ambiente di destinazione non trovato", + "deployModal_confirmCredentialOverwrite": "Confermare la sovrascrittura delle credenziali prima di eseguire la distribuzione", + "deployModal_deploySuccess": "Distribuito con successo {name} nell'ambiente di destinazione", + "deployModal_deployFailed": "Impossibile distribuire {singularLabel}", + "deployModal_selectFieldValidation": "Si prega di selezionare {label}", + "deployModal_selectFieldPlaceholder": "Selezionare {label}", + "deployModal_inputFieldValidation": "Si prega di inserire {label}", + "deployModal_inputFieldPlaceholder": "Inserire {label}", + "contactLowcoder_title": "Contatta il team Lowcoder", + "contactLowcoder_environmentLabel": "Ambiente:", + "contactLowcoder_environmentIdLabel": "ID ambiente:", + "contactLowcoder_deploymentIdLabel": "ID di schieramento:", + "contactLowcoder_loading": "Caricamento...", + "contactLowcoder_notAvailable": "Non disponibile", + "contactLowcoder_unnamedEnvironment": "Ambiente senza nome", + "contactLowcoder_fetchingDeploymentInfo": "Recupero delle informazioni sulla distribuzione...", + "contactLowcoder_unableToLoadContactForm": "Impossibile caricare il modulo di contatto", + "contactLowcoder_apiConfigurationError": "URL del servizio API ambiente o chiave API non configurata", + "contactLowcoder_failedToFetchDeploymentId": "Impossibile recuperare l'ID dell'installazione client", + "contactLowcoder_ensureProperConfiguration": "Assicurarsi che l'ambiente sia configurato correttamente per contattare l'assistenza.", + "credentialConfirmations_firstConfirmation_title": "Avviso di sovrascrittura delle credenziali", + "credentialConfirmations_firstConfirmation_message": "Questa azione sovrascrive le credenziali esistenti nell'ambiente di destinazione.", + "credentialConfirmations_firstConfirmation_description": "Si tratta di un'operazione grave che può avere ripercussioni su altre applicazioni e utenti.", + "credentialConfirmations_firstConfirmation_question": "È sicuro di voler procedere?", + "credentialConfirmations_firstConfirmation_continueButton": "Continua", + "credentialConfirmations_firstConfirmation_cancelButton": "Annullamento", + "credentialConfirmations_secondConfirmation_title": "Richiesta di conferma finale", + "credentialConfirmations_secondConfirmation_message": "Avviso finale: Sovrascrittura delle credenziali", + "credentialConfirmations_secondConfirmation_description": "Si stanno per sovrascrivere le credenziali nell'ambiente di destinazione. Questa azione non può essere annullata e può interrompere le integrazioni esistenti.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Si prega di confermare ancora una volta.", + "credentialConfirmations_secondConfirmation_finalQuestion": "Si è assolutamente certi di voler sovrascrivere le credenziali?", + "credentialConfirmations_secondConfirmation_confirmButton": "Sì, sovrascrivere le credenziali", + "credentialConfirmations_secondConfirmation_cancelButton": "Annullamento", + "config_singularLabels_app": "App", + "config_singularLabels_dataSource": "Fonte dei dati", + "config_singularLabels_query": "Interrogazione", + "config_singularLabels_workspace": "Spazio di lavoro", + "config_fields_updateDependenciesIfNeeded": "Aggiornare le dipendenze se necessario", + "config_fields_publishOnTarget": "Pubblicare sull'obiettivo", + "config_fields_publicToAll": "Pubblico A Tutti", + "config_fields_publicToMarketplace": "Dal pubblico al mercato", + "config_fields_overwriteCredentials": "Sovrascrivere le credenziali", + "services_environments_missingEnvironmentId": "ID ambiente mancante", + "services_environments_failedToUpdateEnvironment": "Impossibile aggiornare l'ambiente", + "services_environments_environmentCreatedSuccessfully": "Ambiente creato con successo", + "services_environments_failedToCreateEnvironment": "Impossibile creare l'ambiente", + "services_environments_failedToFetchEnvironments": "Impossibile recuperare gli ambienti", + "services_environments_failedToFetchEnvironment": "Impossibile recuperare l'ambiente", + "services_environments_environmentIdRequired": "È richiesto l'ID dell'ambiente", + "services_environments_apiKeyRequiredForWorkspaces": "La chiave API è necessaria per recuperare gli spazi di lavoro.", + "services_environments_apiServiceUrlRequiredForWorkspaces": "L'URL del servizio API è necessario per recuperare gli spazi di lavoro.", + "services_environments_failedToFetchWorkspaces": "Impossibile recuperare gli spazi di lavoro", + "services_environments_apiKeyRequiredForUserGroups": "La chiave API è necessaria per recuperare i gruppi di utenti", + "services_environments_apiServiceUrlRequiredForUserGroups": "L'URL del servizio API è necessario per recuperare i gruppi di utenti.", + "services_environments_failedToFetchUserGroups": "Impossibile recuperare i gruppi di utenti", + "services_environments_workspaceIdRequired": "L'ID dell'area di lavoro è necessario", + "services_environments_apiKeyRequiredForApps": "La chiave API è necessaria per recuperare le applicazioni", + "services_environments_apiServiceUrlRequiredForApps": "L'URL del servizio API è necessario per recuperare le applicazioni", + "services_environments_failedToFetchWorkspaceApps": "Impossibile recuperare le applicazioni dello spazio di lavoro", + "services_environments_apiKeyRequiredForDataSources": "La chiave API è necessaria per recuperare le fonti di dati", + "services_environments_apiServiceUrlRequiredForDataSources": "L'URL del servizio API è necessario per recuperare le fonti di dati.", + "services_environments_failedToFetchWorkspaceDataSources": "Impossibile recuperare le fonti di dati dell'area di lavoro", + "services_environments_apiKeyRequiredForQueries": "La chiave API è necessaria per recuperare le query", + "services_environments_apiServiceUrlRequiredForQueries": "L'URL del servizio API è necessario per recuperare le query.", + "services_environments_failedToFetchWorkspaceQueries": "Impossibile recuperare le query dello spazio di lavoro", + "services_environments_apiServiceUrlNotConfigured": "URL del servizio API non configurato", + "services_environments_licenseCheckFailed": "Controllo della licenza fallito", + "services_environments_apiKeyRequiredForDeploymentId": "La chiave API è necessaria per ottenere l'ID dell'installazione.", + "services_environments_failedToFetchDeploymentId": "Impossibile recuperare l'ID dell'installazione client", + "services_enterprise_missingEnvironmentId": "ID ambiente mancante", + "services_enterprise_failedToFetchManagedWorkspaces": "Impossibile recuperare gli spazi di lavoro gestiti", + "services_enterprise_missingRequiredParamsToConnectOrg": "Mancano i parametri richiesti per collegare l'area di lavoro", + "services_enterprise_failedToConnectOrg": "Impossibile connettere l'area di lavoro", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "GID dello spazio di lavoro mancante per scollegare lo spazio di lavoro", + "services_enterprise_failedToUnconnectOrg": "Impossibile scollegare l'area di lavoro", + "services_enterprise_failedToConnectApp": "Impossibile collegare l'applicazione", + "services_enterprise_failedToUnconnectApp": "Impossibile scollegare l'applicazione", + "services_enterprise_failedToFetchDataSources": "Impossibile recuperare le fonti di dati", + "services_enterprise_failedToDeployDataSource": "Impossibile distribuire l'origine dati", + "services_enterprise_failedToDisconnectManagedDataSource": "Impossibile disconnettere l'origine dati gestita", + "services_enterprise_environmentIdRequired": "È richiesto l'ID dell'ambiente", + "services_enterprise_failedToFetchQueries": "Impossibile recuperare le query", + "services_enterprise_environmentIdAndQueryGidRequired": "Sono richiesti l'ID ambiente e il GID della query", + "services_enterprise_failedToDeployQuery": "Impossibile distribuire la query", + "services_enterprise_queryGidRequired": "Il GID della query è necessario", + "services_enterprise_failedToDisconnectQuery": "Disconnessione della query fallita", + "services_apps_failedToFetchApps": "Impossibile recuperare le applicazioni", + "services_apps_failedToDeployApp": "Impossibile distribuire l'applicazione", + "services_datasources_workspaceIdRequired": "L'ID dell'area di lavoro è necessario", + "services_datasources_apiKeyRequiredToFetchDataSources": "La chiave API è necessaria per recuperare le fonti di dati", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "L'URL del servizio API è necessario per recuperare le fonti di dati.", + "services_datasources_failedToFetchDataSources": "Impossibile recuperare le fonti di dati", + "services_datasources_failedToDeployDataSource": "Impossibile distribuire l'origine dati", + "services_workspace_failedToFetchWorkspaces": "Impossibile recuperare gli spazi di lavoro", + "services_workspace_failedToDeployWorkspace": "Impossibile distribuire lo spazio di lavoro", + "services_managedObjects_missingRequiredParameters": "Mancano i parametri richiesti", + "services_managedObjects_failedToCheckManagedStatus": "Impossibile verificare lo stato di gestione", + "services_managedObjects_failedToSetAsManaged": "Non è stato possibile impostare {{objType}} come gestito.", + "services_managedObjects_failedToRemoveFromManaged": "Impossibile rimuovere {{objType}} da managed", + "services_managedObjects_missingEnvironmentId": "ID ambiente mancante", + "services_managedObjects_failedToFetchManagedObjects": "Impossibile recuperare gli oggetti gestiti", + "services_managedObjects_failedToFetchManagedObject": "Impossibile recuperare l'oggetto gestito", + "services_managedObjects_managedObjectNotFound": "Oggetto gestito non trovato per objGid: {{objGid}}", + "services_license_apiServiceUrlRequired": "L'URL del servizio API è necessario", + "services_license_licenseInformationUnavailable": "Informazioni sulla licenza non disponibili", + "services_license_licenseCheckTookTooLong": "Il controllo della patente ha richiesto troppo tempo", + "services_license_licenseServiceNotAvailable": "Servizio di licenza non disponibile", + "services_license_authenticationRequired": "È richiesta l'autenticazione - verificare la chiave API", + "services_license_licenseServiceTemporarilyUnavailable": "Servizio di licenza temporaneamente non disponibile", + "services_license_remainingAPICalls": "{{remaining}} rimanenti ({{used}}/{{total}} utilizzati, {{percentage}}%)", + }, + "subscription": { + ...en.subscription, + + "details": "Dettagli sull'abbonamento", + "productDetails": "Dettagli del prodotto", + "productName": "Nome del prodotto", + "productDescription": "Descrizione del prodotto", + "productPrice": "Prezzo del prodotto", + "subscriptionDetails": "Dettagli sull'abbonamento", + "status": "Stato", + "startDate": "Data di inizio", + "currentPeriodEnd": "Fine periodo corrente", + "customerId": "ID cliente", + "subscriptionItems": "Articoli in abbonamento", + "itemId": "ID articolo", + "plan": "Piano", + "quantity": "Quantità", + "product": "Prodotto", + "invoices": "Fatture", + "invoiceNumber": "Numero di fattura", + "date": "Data", + "amount": "Importo", + "link": "Collegamento a", + "viewInvoice": "Visualizza fattura", + "downloadPDF": "Scaricare PDF", + "billingReason": "Motivo della fatturazione", + "subscriptionCycle": "Abbonamento mensile", + "customer": "Cliente", + "links": "Collegamenti", + "paid": "Pagato", + "unpaid": "Non pagato", + "noInvoices": "Non sono disponibili fatture", + "costVolumeDevelopment": "Sviluppo costi/volumi", + "noUsageRecords": "Non sono disponibili registri di utilizzo", + "itemDescription": "Descrizione dell'articolo", + "periodStart": "Inizio periodo", + "periodEnd": "Fine periodo", + "billingReason.subscription_cycle": "Ciclo di abbonamento", + "billingReason.subscription_create": "Creazione di abbonamenti", + "billingReason.manual": "Fatturazione manuale", + "billingReason.upcoming": "Prossima fatturazione", + "billingReason.subscription_threshold": "Soglia di sottoscrizione", + "billingReason.subscription_update": "Aggiornamento dell'abbonamento", + "backToSubscriptions": "Torna a Abbonamenti", + "manageSubscription": "Gestire gli abbonamenti", + "subscriptionHelp": "Aiuto per l'abbonamento", + "subscriptionHelpDescription": "Se avete domande, contattateci. Saremo lieti di aiutarvi. service@lowcoder.cloud", + "success": "Successo del pagamento e dell'abbonamento", + "successTitle": "Grazie per essere entrato a far parte della famiglia Lowcoder!", + "successThankYou": "Siamo entusiasti di averti a bordo! La sua fiducia in Lowcoder significa tutto per noi e ci impegniamo a offrire un'esperienza eccezionale fin dal primo giorno.\n\nIn Lowcoder non sei solo un cliente, ma fai parte di una comunità che promuove l'innovazione e la crescita. La nostra missione è aiutarvi a raggiungere i vostri obiettivi con facilità, sia che ciò significhi risolvere rapidamente le sfide, costruire soluzioni innovative o essere presenti ogni volta che avete bisogno di supporto.\n\nEcco cosa vi aspetta:\n\n- Assistenza di prim'ordine: Il nostro team è pronto ad assistervi in ogni fase.\n- Innovazione continua: Miglioriamo continuamente per offrirvi gli strumenti e le funzionalità migliori.\n- Una partnership per il successo: Il vostro successo è la nostra priorità.\n\nGrazie per averci ispirato a superare i limiti e a cercare l'eccellenza ogni giorno. Non vediamo l'ora di vedere cosa costruiremo insieme.\n\nBenvenuti a bordo! Facciamo accadere cose straordinarie.", + "successLowcoderTeam": "Il team Lowcoder", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "Errore nell'acquisizione dei dettagli del prodotto.", + "fetchSubscriptionDetails": "Errore nel recupero dei dettagli dell'abbonamento.", + "fetchInvoices": "Errore nell'acquisizione delle fatture.", + }, + "auditLog": { + ...en.auditLog, + + "title": "Dettaglio registro di audit", + "geoLocation": "Posizione geografica", + "browserData": "Metadati del browser/sistema", + "browser": "Browser", + "OS": "OS", + "device": "Dispositivo", + "deviceType": "Tipo di dispositivo", + "engine": "Motore", + "webview": "Vista sul web", + "eventDetail": "Dettaglio evento", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Admin", + "superAdmin": "Super amministratore", + "adminGroupRoleInfo": "L'amministratore può gestire i membri e le risorse del gruppo", + "adminOrgRoleInfo": "Gli amministratori possiedono tutte le risorse e possono gestire i gruppi.", + "member": "Membro", + "memberGroupRoleInfo": "Il membro può vedere i membri del gruppo", + "memberOrgRoleInfo": "I membri possono utilizzare o visitare solo le risorse a cui hanno accesso.", + "title": "Membri", + "createGroup": "Crea gruppo", + "newGroupPrefix": "Nuovo Gruppo", + "allMembers": "Tutti i membri", + "deleteModalTitle": "Cancellare questo gruppo", + "deleteModalContent": "Il gruppo eliminato non può essere ripristinato. Siete sicuri di voler eliminare il gruppo?", + "addMember": "Aggiungi membri", + "nameColumn": "Nome utente", + "joinTimeColumn": "Tempo di adesione", + "actionColumn": "Funzionamento", + "roleColumn": "Ruolo", + "exitGroup": "Gruppo di uscita", + "moveOutGroup": "Rimuovere dal gruppo", + "inviteUser": "Invitare i membri", + "exitOrg": "Lasciare", + "exitOrgDesc": "Siete sicuri di voler lasciare questo spazio di lavoro?", + "moveOutOrg": "Rimuovere", + "moveOutOrgDescSaasMode": "Siete sicuri di voler rimuovere l'utente {name} da questo spazio di lavoro?", + "moveOutOrgDesc": "Siete sicuri di voler rimuovere l'utente {name}? Questa azione non può essere recuperata.", + "devGroupTip": "I membri del gruppo di sviluppatori hanno i privilegi per creare applicazioni e fonti di dati.", + "lastAdminQuit": "L'ultimo amministratore non può uscire.", + "organizationNotExist": "L'area di lavoro corrente non esiste", + "inviteUserHelp": "È possibile copiare il link di invito da inviare all'utente", + "inviteUserLabel": "Link per l'invito:", + "inviteCopyLink": "Copiare il link", + "inviteText": "{userName} vi invita a unirvi allo spazio di lavoro \"{organization}\", cliccate sul link per unirvi: {inviteLink}", + "inviteByEmailHelp": "È possibile inserire uno o più indirizzi e-mail per inviare i link di invito.", + "inviteByEmailLabel": "Inserire i messaggi di posta elettronica:", + "inviteByEmailButton": "Inviare gli inviti", + "inviteByEmailSuccess": "Inviti inviati con successo!", + "inviteByEmailError": "Qualcosa è andato storto durante l'invio degli inviti. Si prega di riprovare.", + "noValidEmails": "Non sono state trovate e-mail valide", + "groupName": "Nome del gruppo", + "createTime": "Creare tempo", + "manageBtn": "Gestire", + "userDetail": "Dettaglio", + "syncDeleteTip": "Questo gruppo è stato eliminato dalla rubrica.", + "syncGroupTip": "Questo gruppo è un gruppo di sincronizzazione della rubrica e non può essere modificato.", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Nuovo spazio di lavoro (organizzazione)", + "title": "Spazio di lavoro", + "createOrg": "Crea spazio di lavoro (organizzazione)", + "deleteModalTitle": "Siete sicuri di voler eliminare questo spazio di lavoro?", + "deleteModalContent": "Si sta per eliminare l'area di lavoro {permanentlyDelete}. Una volta eliminato, lo spazio di lavoro {notRestored}.", + "permanentlyDelete": "In modo permanente", + "notRestored": "Non può essere ripristinato", + "deleteModalLabel": "Inserire il nome dell'area di lavoro {name} per confermare l'operazione:", + "deleteModalTip": "Inserire il nome dell'area di lavoro", + "deleteModalErr": "Il nome dell'area di lavoro non è corretto", + "deleteModalBtn": "Cancellare", + "editOrgTitle": "Modifica delle informazioni sullo spazio di lavoro", + "orgNameLabel": "Nome dell'area di lavoro:", + "orgNameCheckMsg": "Il nome dell'area di lavoro non può essere vuoto", + "orgLogo": "Logo dello spazio di lavoro:", + "logoModify": "Modificare l'immagine", + "inviteSuccessMessage": "Partecipare con successo all'area di lavoro", + "inviteFailMessage": "Impossibile unirsi allo spazio di lavoro", + "uploadErrorMessage": "Errore di caricamento", + "orgName": "Nome dell'area di lavoro", + }, + "freeLimit": "Prova gratuita", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Scheda interruttore", + "switchTabDesc": "Attivato quando si passa da una scheda all'altra", + "tab": "Schede", + "atLeastOneTabError": "Il contenitore delle schede contiene almeno una scheda", + "selectedTabKeyDesc": "Scheda attualmente selezionata", + "iconPosition": "Icona Posizione", + "placement": "Posizionamento delle schede", + "showTabs": "Mostra schede", + "gutter": "Divario", + "gutterTooltip": "La distanza tra le schede in px", + "tabsCentered": "Schede centrate", + "destroyInactiveTab": "Distruggi TabPane inattivo", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Trascinare i componenti dal riquadro destro o", + "openDialogButton": "Generare un modulo da una fonte di dati", + "resetAfterSubmit": "Reimpostazione dopo l'invio riuscito", + "initialData": "Dati iniziali", + "disableSubmit": "Disattivare l'invio", + "success": "Modulo generato con successo", + "selectCompType": "Selezionare il tipo di componente", + "dataSource": "Fonte dei dati:", + "invalidFormMessage": "Messaggio personalizzato di modulo non valido", + "selectSource": "Seleziona la fonte", + "table": "Tabella:", + "selectTable": "Selezionare la tabella", + "columnName": "Nome della colonna", + "dataType": "Tipo di dati", + "compType": "Tipo di componente", + "required": "Richiesto", + "generateForm": "Generare un modulo", + "compSelectionError": "Tipo di colonna non configurato", + "compTypeNameError": "Impossibile ottenere il nome del tipo di componente", + "noDataSourceSelected": "Nessuna fonte di dati selezionata", + "noTableSelected": "Nessun tavolo selezionato", + "noColumn": "Nessuna colonna", + "noColumnSelected": "Nessuna colonna selezionata", + "noDataSourceFound": "Non è stata trovata alcuna origine dati supportata. Creare una nuova origine dati", + "noTableFound": "Non sono state trovate tabelle in questa fonte di dati, si prega di selezionare un'altra fonte di dati.", + "noColumnFound": "Non è stata trovata alcuna colonna supportata in questa tabella. Selezionare un'altra tabella", + "formTitle": "Titolo del modulo", + "name": "Nome", + "nameTooltip": "Il nome dell'attributo nei dati del modulo, se lasciato vuoto, è predefinito con il nome del componente.", + "notSupportMethod": "Non supportato Metodi:", + "notValidForm": "Il modulo non è valido", + "resetDesc": "Ripristino dei dati del modulo al valore predefinito", + "clearDesc": "Cancella i dati del modulo", + "setDataDesc": "Impostare i dati del modulo", + "valuesLengthError": "Numero di parametro Errore", + "valueTypeError": "Parametro Tipo Errore", + "dataDesc": "Dati del modulo corrente", + "loadingDesc": "Se il modulo è in fase di caricamento?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Aperto", + "openDesc": "Attivato all'apertura della finestra di dialogo modale", + "close": "Chiudere", + "closeDesc": "Attivato quando la finestra di dialogo modale viene chiusa", + "openModalDesc": "Aprire la finestra di dialogo", + "closeModalDesc": "Chiudere la finestra di dialogo", + "visibleDesc": "È visibile? Se è vero, viene visualizzata la finestra di dialogo corrente.", + "title": "Titolo del cassetto", + "titleAlign": "Allineamento dei titoli", + "modalHeight": "Altezza modale", + "modalHeightTooltip": "Pixel, Esempio: 222", + "modalWidth": "Larghezza modale", + "modalWidthTooltip": "Numero o percentuale, esempio: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Conteggio delle righe", + "noOfRowsTooltip": "Numero di righe nell'elenco - di solito impostato su una variabile (ad es., '{{query1.data.length}}') per presentare i risultati della query.", + "noOfColumns": "Conteggio colonne", + "itemIndexName": "Voce di dati Nome dell'indice", + "itemIndexNameDesc": "Il nome della variabile che si riferisce all'indice dell'elemento, predefinito come {default}.", + "itemDataName": "Voce di dati Nome dell'oggetto", + "itemDataNameDesc": "Il nome della variabile che si riferisce all'oggetto dati dell'elemento, predefinito come {default}.", + "itemsDesc": "Esporre i dati dei componenti nell'elenco", + "dataDesc": "I dati JSON utilizzati nell'elenco corrente", + "dataTooltip": "Se si imposta solo un numero, questo campo verrà considerato come conteggio delle righe e i dati verranno considerati vuoti.", + "enableSorting": "Consentire l'ordinamento", + }, + "navigation": { + ...en.navigation, + + "addText": "Aggiungi voce di sottomenu", + "logoURL": "Navigazione Logo URL", + "horizontalAlignment": "Allineamento orizzontale", + "logoURLDesc": "È possibile visualizzare un logo sul lato sinistro inserendo un valore URI o una stringa Base64 come data:image/png;base64,AAA... CCC", + "itemsDesc": "Voci del menu di navigazione gerarchico", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Sottomenu {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Attivo", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "L'URL di origine del contenuto dell'IFrame. Assicurarsi che l'URL sia HTTPS o localhost. Assicurarsi inoltre che l'URL non sia bloccato dalla Content Security Policy (CSP) del browser. L'intestazione \"X-Frame-Options\" non deve essere impostata su \"DENY\" o \"SAMEORIGIN\".", + "allowDownload": "Consentire il download", + "allowSubmitForm": "Consentire l'invio del modulo", + "allowMicrophone": "Consentire il microfono", + "allowCamera": "Consentire l'uso della fotocamera", + "allowPopup": "Consentire i popup", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Valore booleano predefinito", + "open": "Su", + "close": "Spento", + "openDesc": "Attivato all'accensione dell'interruttore", + "closeDesc": "Attivato quando l'interruttore è spento", + "valueDesc": "Stato attuale dell'interruttore", + }, + "signature": { + ...en.signature, + + "tips": "Testo del suggerimento", + "signHere": "Firma qui", + "showUndo": "Mostra Annullamento", + "showClear": "Mostra chiaro", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Tutti gli elementi di dati attualmente memorizzati", + "setItemDesc": "Aggiungere un elemento", + "removeItemDesc": "Rimuovere un elemento", + "clearItemDesc": "Cancella tutti gli articoli", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "URL aperto", + "openApp": "App aperta", + "copyToClipboard": "Copia negli Appunti", + "downloadFile": "Scarica il file", + "logoutUser": "Disconnessione dell'utente", + "resetPassword": "Reimpostare la password", + }, + "messageComp": { + ...en.messageComp, + + "info": "Inviare una notifica", + "loading": "Inviare una notifica di caricamento", + "success": "Inviare una notifica di successo", + "warn": "Inviare una notifica di avviso", + "error": "Inviare una notifica di errore", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "chiudere una notifica", + "info": "Inviare una notifica", + "loading": "Inviare una notifica di caricamento", + "success": "Inviare una notifica di successo", + "warn": "Inviare una notifica di avviso", + "error": "Inviare una notifica di errore", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Tema dell'interruttore", + }, + "transformer": { + ...en.transformer, + + "preview": "Anteprima", + "docLink": "Per saperne di più sui Transformers...", + "previewSuccess": "Anteprima del successo", + "previewFail": "Anteprima Bocciata", + "deleteMessage": "Eliminazione del trasformatore riuscita. È possibile utilizzare {undoKey} per annullare.", + "documentationText": "I trasformatori sono progettati per la trasformazione dei dati e il riutilizzo del codice JavaScript multilinea. I trasformatori possono essere utilizzati per adattare i dati provenienti da query o componenti alle esigenze dell'applicazione locale. A differenza delle query JavaScript, i trasformatori sono progettati per eseguire operazioni di sola lettura, il che significa che non è possibile attivare una query o aggiornare uno stato temporaneo all'interno di un trasformatore.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Valore iniziale", + "valueTooltip": "Il valore iniziale memorizzato nello stato temporaneo può essere un booleano, una stringa, un numero o qualsiasi valore JSON valido.", + "docLink": "Per saperne di più sugli Stati temporanei...", + "pathTypeError": "Il percorso deve essere una stringa o una matrice di valori", + "unStructuredError": "I dati non strutturati {prev} non possono essere aggiornati da {path}.", + "valueDesc": "Valore di Stato temporaneo", + "deleteMessage": "Lo stato temporaneo è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", + "documentationText": "Gli stati temporanei sono una potente funzione utilizzata per gestire variabili complesse che aggiornano dinamicamente lo stato dei componenti dell'applicazione. Questi stati fungono da memoria intermedia o transitoria per i dati che possono cambiare nel tempo a causa delle interazioni dell'utente o di altri processi.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Dati", + "dataDesc": "Dati dell'attuale risponditore dei dati", + "dataTooltip": "Quando questi dati vengono modificati, si attivano le azioni successive.", + "docLink": "Per saperne di più sui Data Responder...", + "deleteMessage": "Il risponditore dati è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", + "documentationText": "Quando si sviluppa un'applicazione, è possibile assegnare eventi ai componenti per monitorare le modifiche di dati specifici. Ad esempio, un componente Table può avere eventi come \"Row select change\", \"Filter change\", \"Sort change\" e \"Page change\" per monitorare i cambiamenti nella proprietà selectedRow. Tuttavia, per le modifiche agli stati temporanei, ai trasformatori o ai risultati delle query, dove gli eventi standard non sono disponibili, si utilizzano i risponditori di dati. Essi consentono di rilevare e reagire a qualsiasi modifica dei dati.", + }, + "theme": { + ...en.theme, + + "title": "Temi", + "createTheme": "Creare il tema", + "themeName": "Nome del tema:", + "themeNamePlaceholder": "Inserire il nome del tema", + "defaultThemeTip": "Tema predefinito:", + "createdThemeTip": "Il tema che avete creato:", + "option": "Option{index}", + "input": "Ingresso", + "confirm": "Ok", + "emptyTheme": "Nessun tema disponibile", + "click": "", + "toCreate": "", + "nameColumn": "Nome", + "defaultTip": "Predefinito", + "updateTimeColumn": "Tempo di aggiornamento", + "edit": "Modifica", + "cancelDefaultTheme": "Tema predefinito non impostato", + "setDefaultTheme": "Imposta come tema predefinito", + "copyTheme": "Tema duplicato", + "setSuccessMsg": "Impostazione riuscita", + "cancelSuccessMsg": "Disassemblaggio Riuscito", + "deleteSuccessMsg": "Cancellazione riuscita", + "checkDuplicateNames": "Il nome del tema esiste già, inserirlo nuovamente", + "copySuffix": " Copia", + "saveSuccessMsg": "Salvato con successo", + "leaveTipTitle": "Suggerimenti", + "leaveTipContent": "Non hai ancora salvato, confermi la partenza?", + "leaveTipOkText": "Lasciare", + "goList": "Torna all'elenco", + "saveBtn": "Risparmiare", + "mainColor": "Colori principali", + "text": "Colori del testo", + "layout": "Impostazioni di layout", + "fonts": "Impostazioni dei caratteri", + "components": "Modelli di componenti", + "charts": "Definizione di eCharts", + "defaultTheme": "Predefinito", + "yellow": "Giallo", + "green": "Verde", + "previewTitle": "Anteprima del tema\nEsempi di componenti che utilizzano i colori del tema", + "dateColumn": "Data", + "emailColumn": "Email", + "phoneColumn": "Telefono", + "subTitle": "Titolo", + "linkLabel": "Collegamento a", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progressi", + "sliderLabel": "Cursore", + "radioLabel": "Radio", + "checkboxLabel": "Casella di controllo", + "buttonLabel": "Pulsante del modulo", + "switch": "Interruttore", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "palloncino.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Anteprima dello stile del grafico", + "chartSpending": "Spesa", + "chartBudget": "Bilancio", + "chartAdmin": "Amministrazione", + "chartFinance": "Finanza", + "chartSales": "Vendite", + "chartFunnel": "Grafico a imbuto", + "chartShow": "Mostra", + "chartClick": "Cliccare", + "chartVisit": "Visita", + "chartQuery": "Interrogazione", + "chartBuy": "Acquista", + "canvas": "Impostazioni della tela", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Colore del marchio", + "primaryDesc": "Colore primario predefinito utilizzato dalla maggior parte dei componenti", + "textDark": "Colore del testo scuro", + "textDarkDesc": "Utilizzato quando il colore di sfondo è chiaro", + "textLight": "Colore del testo chiaro", + "textLightDesc": "Utilizzato quando il colore di sfondo è scuro", + "canvas": "Colore della tela", + "canvasDesc": "Colore di sfondo predefinito dell'applicazione", + "primarySurface": "Colore del contenitore", + "primarySurfaceDesc": "Colore di sfondo predefinito per componenti come le tabelle", + "borders": "Stili di bordo", + "spacing": "Stili di spaziatura", + "font": "Stili di carattere", + "fonts": "Caratteri", + "borderRadius": "Raggio del bordo", + "borderRadiusDesc": "Raggio del bordo predefinito utilizzato dalla maggior parte dei componenti", + "borderColor": "Colore del bordo", + "borderColorDesc": "Colore predefinito del bordo utilizzato dalla maggior parte dei componenti", + "borderWidth": "Larghezza del bordo", + "borderWidthDesc": "Larghezza predefinita del bordo utilizzata dalla maggior parte dei componenti", + "borderStyle": "Stile del bordo", + "borderStyleDesc": "Stile di bordo predefinito utilizzato dalla maggior parte dei componenti", + "fontFamily": "Famiglia di caratteri", + "fontFamilyDesc": "Famiglia di caratteri predefinita utilizzata dalla maggior parte dei componenti", + "chart": "Stile del grafico", + "chartDesc": "Qui è possibile inserire il tema JSON di eCharts per definire lo stile dei grafici in tutti i dettagli.", + "echartsJson": "È possibile utilizzare il Generatore JSON del tema. Copiare il JSON dal generatore e incollarlo qui.", + "margin": "Margine", + "marginDesc": "Margine predefinito tipicamente utilizzato per la maggior parte dei componenti", + "padding": "Imbottitura", + "paddingDesc": "Imbottitura predefinita tipicamente utilizzata per la maggior parte dei componenti", + "containerHeaderPadding": "Imbottitura della testata", + "containerheaderpaddingDesc": "Imbottitura predefinita dell'intestazione, tipicamente utilizzata per la maggior parte dei componenti.", + "gridColumns": "Colonne della griglia della tela", + "gridColumnsDesc": "Numero predefinito di colonne, tipicamente utilizzato per la maggior parte dei contenitori.", + "loadingIndicators": "Indicatori di carico", + "showComponentLoadingIndicators": "Mostra gli indicatori di caricamento quando il componente viene caricato", + "showDataLoadingIndicators": "Mostra indicatori di caricamento durante il caricamento dei dati", + "dataLoadingIndicator": "Indicatore di caricamento dei dati", + "background": "Stili di sfondo", + "gridSettings": "Impostazioni della griglia", + "gridRowHeight": "Altezza della riga della griglia", + "gridRowHeightDesc": "Altezza di ogni riga della griglia", + "gridRowCount": "Conteggio delle righe della griglia", + "gridRowCountDesc": "Numero massimo di righe nella griglia", + "gridPaddingX": "Imbottitura orizzontale", + "gridPaddingXDesc": "Imbottitura orizzontale della tela", + "gridPaddingY": "Imbottitura verticale", + "gridPaddingYDesc": "Imbottitura verticale della tela", + "gridBgImage": "Immagine di sfondo", + "gridBgImageDesc": "Immagine di sfondo della tela", + "gridBgImageRepeat": "Ripetizione dell'immagine di sfondo", + "gridBgImageRepeatDesc": "Ripetizione dell'immagine di sfondo della tela", + "gridBgImageSize": "Dimensioni dell'immagine di sfondo", + "gridBgImageSizeDesc": "Dimensioni dell'immagine di sfondo della tela", + "gridBgImagePosition": "Posizione dell'immagine di sfondo", + "gridBgImagePositionDesc": "Posizione dell'immagine di sfondo della tela", + "gridBgImageOrigin": "Origine dell'immagine di sfondo", + "gridBgImageOriginDesc": "Origine dell'immagine di sfondo della tela", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugin", + "npmPluginTitle": "plugin npm", + "npmPluginDesc": "Impostare i plugin npm per tutte le applicazioni dell'area di lavoro corrente.", + "npmPluginEmpty": "Non sono stati aggiunti plugin npm.", + "npmPluginAddButton": "Aggiungere un plugin npm", + "saveSuccess": "Salvato con successo", + }, + "advanced": { + ...en.advanced, + + "title": "Avanzato", + "defaultHomeTitle": "Homepage predefinita", + "defaultHomeHelp": "La homepage è l'app che tutti i non sviluppatori vedranno per impostazione predefinita quando accedono. Nota: assicurarsi che l'app selezionata sia accessibile ai non sviluppatori.", + "defaultHomePlaceholder": "Selezionare la pagina iniziale predefinita", + "saveBtn": "Risparmiare", + "preloadJSTitle": "Precaricare JavaScript", + "preloadJSHelp": "Impostare il codice JavaScript precaricato per tutte le applicazioni nell'area di lavoro corrente.", + "preloadCSSTitle": "Precaricare i CSS", + "preloadCSSHelp": "Impostare il codice CSS precaricato per tutte le applicazioni nell'area di lavoro corrente.", + "preloadCSSApply": "Applicare alla homepage dell'area di lavoro", + "preloadLibsTitle": "Libreria JavaScript", + "preloadLibsHelp": "Impostazione di librerie JavaScript precaricate per tutte le applicazioni nell'area di lavoro corrente; il sistema ha integrato lodash, day.js, uuid, numbro per l'uso diretto. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione e quindi hanno un certo impatto sulle prestazioni dell'applicazione.", + "preloadLibsEmpty": "Non sono state aggiunte librerie JavaScript", + "preloadLibsAddBtn": "Aggiungere una biblioteca", + "saveSuccess": "Salvato con successo", + "AuthOrgTitle": "Schermata di benvenuto dell'area di lavoro", + "AuthOrgDescrition": "L'URL per l'accesso degli utenti all'area di lavoro corrente.", + "APIConsumption": "Consumo di API", + "APIConsumptionDescription": "Qui si può vedere il consumo di API per tutte le applicazioni nell'area di lavoro corrente.", + "overallAPIConsumption": "Consumo complessivo di API in questo spazio di lavoro fino ad ora", + "lastMonthAPIConsumption": "Consumo API dell'ultimo mese, in questo spazio di lavoro", + "npmRegistryTitle": "Registro NPM personalizzato", + "npmRegistryHelp": "Impostare un registro NPM personalizzato per consentire il recupero dei plugin da un registro NPM privato.", + "showHeaderInPublicApps": "Mostra intestazione nella vista pubblica", + "showHeaderInPublicAppsHelp": "Impostare la visibilità dell'intestazione nella vista pubblica per tutte le applicazioni", + }, + "branding": { + ...en.branding, + + "title": "Impostazioni del Branding", + "general": "Impostazioni generali", + "selectWorkspace": "Selezionare l'area di lavoro", + "brandingName": "Nome del marchio", + "brandingNamePlaceholder": "Inserire il nome del marchio", + "brandingDescription": "Descrizione del marchio", + "brandingDescriptionPlaceholder": "Inserire la descrizione del marchio", + "logoSection": "Loghi", + "logo": "Logo", + "logoHelp": "Carica il logo della tua azienda in formato SVG o PNG.", + "logoUrlHelp": "Fornire un'immagine valida per il logo.", + "logoUrlPlaceholder": "URL dell'immagine del fornitore per il logo", + "squareLogo": "Logo Quadrato", + "squareLogoHelp": "Carica una versione quadrata del tuo logo in formato SVG o PNG.", + "squareLogoUrlHelp": "Fornire un url di immagine valido per il logo quadrato.", + "squareLogoUrlPlaceholder": "Fornire l'url per il logo quadrato.", + "colorFontSection": "Colori e Font", + "mainBrandingColor": "Colore Principale del Branding", + "mainBrandingColorHelp": "Seleziona il colore principale per il tuo branding.", + "editorHeaderColor": "Colore dell'intestazione dell'editor", + "editorHeaderColorHelp": "Seleziona il colore dell'intestazione dell'editor.", + "adminSidebarColor": "Colore della barra laterale amministrativa", + "adminSidebarColorHelp": "Seleziona il colore della barra laterale amministrativa.", + "adminSidebarFontColor": "Colore del carattere della barra laterale dell'amministrazione", + "adminSidebarFontColorHelp": "Scegliere il colore dei caratteri per la barra laterale dell'amministratore.", + "adminSidebarActiveBgColor": "Colore di sfondo dell'elemento selezionato nella barra laterale dell'amministrazione", + "adminSidebarActiveBgColorHelp": "Scegliere il colore di sfondo dell'elemento selezionato per la barra laterale dell'amministratore.", + "adminSidebarActiveFontColor": "Colore del carattere dell'elemento selezionato della barra laterale dell'amministrazione", + "adminSidebarActiveFontColorHelp": "Scegliere il colore del carattere dell'elemento selezionato per la barra laterale dell'amministratore.", + "editorSidebarColor": "Colore della barra laterale dell'editor", + "editorSidebarColorHelp": "Seleziona il colore della barra laterale dell'editor.", + "editorSidebarFontColor": "Colore del carattere della barra laterale dell'editor", + "editorSidebarFontColorHelp": "Scegliere il colore dei caratteri per la barra laterale dell'editor.", + "editorSidebarActiveBgColor": "Colore di sfondo dell'elemento selezionato nella barra laterale dell'editor", + "editorSidebarActiveBgColorHelp": "Scegliere il colore di sfondo dell'elemento selezionato per la barra laterale dell'editor.", + "editorSidebarActiveFontColor": "Colore del carattere dell'elemento selezionato della barra laterale dell'editor", + "editorSidebarActiveFontColorHelp": "Scegliere il colore del carattere dell'elemento selezionato per la barra laterale dell'editor.", + "font": "Carattere", + "fontHelp": "Seleziona un font da Google Fonts per la tua applicazione.", + "textSection": "Testi e Pagine", + "errorPage": "Testo della pagina di errore", + "errorPageHelp": "Inserisci il testo visualizzato nella pagina di errore.", + "signUpPage": "Testo della pagina di registrazione", + "signUpPageHelp": "Inserisci il testo visualizzato nella pagina di registrazione.", + "loggedOutPage": "Testo della pagina di disconnessione", + "loggedOutPageHelp": "Inserisci il testo visualizzato nella pagina di disconnessione.", + "standardDescription": "Descrizione standard", + "standardDescriptionHelp": "Inserisci la descrizione standard per le informazioni meta SEO.", + "standardTitle": "Titolo standard", + "standardTitleHelp": "Inserisci il titolo standard per le informazioni meta SEO.", + "showDocumentation": "Mostra Documentazione", + "submitIssue": "Consenti invio problema", + "whatsNew": "Abilita \"Novità\"", + "saveButton": "Salva Impostazioni", + "errorPageImage": "Carica un'immagine per la pagina di errore in formato SVG o PNG.", + "errorPageImageUrl": "URL dell'immagine per la pagina di errore", + "errorPageImageUrlPlaceholder": "URL dell'immagine del provider per la pagina di errore", + "errorPageImageUrlHelp": "Fornire un'immagine valida da mostrare nella pagina di errore.", + "signUpPageImage": "Carica un'immagine per la pagina di registrazione in formato SVG o PNG.", + "signUpPageImageUrl": "URL dell'immagine per la pagina di iscrizione", + "signUpPageImageUrlPlaceholder": "URL dell'immagine del fornitore per la pagina di iscrizione", + "signUpPageImageUrlHelp": "Fornire un'immagine valida da mostrare nella pagina di iscrizione.", + "loggedOutPageImage": "Carica un'immagine per la pagina di disconnessione in formato SVG o PNG.", + "showDocumentationSection": "Impostazioni del collegamento alla documentazione", + "showWhatsNewSection": "Novità Impostazioni dei collegamenti", + "documentationLink": "Link alla documentazione", + "documentationLinkPlaceholder": "Inserisci l'URL della tua documentazione...", + "documentationLinkHelp": "Fornisci un URL valido che gli utenti possano visitare per la documentazione.", + "whatsNewSection": "Impostazioni documentazione", + "whatsNewLink": "Link alla documentazione", + "whatsNewLinkPlaceholder": "Inserisci l'URL della tua documentazione...", + "whatsNewLinkHelp": "Fornisci un URL valido che gli utenti possano visitare per le novità.", + "deleteBranding": "Cancellare il marchio", + "deleteBrandingContent": "Siete sicuri di voler eliminare il marchio \"{orgName}\"?", + "fetchBrandingError": "Qualcosa è andato storto durante il recupero dei dettagli del marchio. Riprovare.", + "upload": "Caricare", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Impossibile connettersi al server, controllare la rete", + "200": "Il successo", + "201": "Creato", + "204": "Nessun contenuto", + "400": "Brutta richiesta", + "401": "Autenticazione fallita, accedere di nuovo", + "403": "Nessun permesso, contattare l'amministratore per l'autorizzazione", + "404": "Non trovato", + "500": "Servizio occupato, riprovare più tardi", + "timeout": "Timeout della richiesta", + }, + "share": { + ...en.share, + + "title": "Condividi", + "viewer": "Visualizzatore", + "editor": "Editor", + "owner": "Proprietario", + "datasourceViewer": "Può essere utilizzato", + "datasourceOwner": "Può gestire", + }, + "debug": { + ...en.debug, + + "title": "Titolo", + "switch": "Componente dell'interruttore:", + }, + "module": { + ...en.module, + + "folderNotEmpty": "La cartella non è vuota", + "emptyText": "Nessun dato", + "docLink": "Per saperne di più sui moduli...", + "documentationText": "I moduli sono applicazioni complete che possono essere incluse e ripetute in altre applicazioni e funzionano come un singolo componente. Poiché i moduli possono essere incorporati, devono essere in grado di interagire con le applicazioni o i siti web esterni. Queste quattro impostazioni aiutano a supportare la comunicazione con un modulo.", + "circularReference": "Riferimento circolare, il modulo/applicazione corrente non può essere utilizzato!", + "emptyTestInput": "Il modulo corrente non ha ingressi da testare", + "emptyTestMethod": "Il modulo attuale non ha un metodo di verifica", + "name": "Nome", + "input": "Ingresso", + "params": "Parametri", + "emptyParams": "Non è stato aggiunto alcun parametro", + "emptyInput": "Non è stato aggiunto alcun input", + "emptyMethod": "Non è stato aggiunto alcun metodo", + "emptyOutput": "Non è stata aggiunta alcuna uscita", + "data": "Dati", + "string": "Stringa", + "number": "Numero", + "array": "Array", + "boolean": "Booleano", + "query": "Interrogazione", + "autoScaleCompHeight": "Bilance di altezza per componenti con contenitore", + "excuteMethod": "Eseguire il metodo {name}", + "method": "Metodo", + "action": "Azione", + "output": "Uscita", + "nameExists": "Nome {name} Già esistente", + "eventTriggered": "L'evento {name} viene attivato", + "globalPromptWhenEventTriggered": "Visualizza un prompt globale quando viene attivato un evento", + "emptyEventTest": "Il modulo corrente non ha eventi da testare", + "emptyEvent": "Non è stato aggiunto alcun evento", + "event": "Evento", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "Il valore di ritorno è una funzione.", + "consume": "{time}", + "JSON": "Mostra JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Creare...", + "created": "Creare {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Autenticazione utente fallita, accedere di nuovo", + "verifyAccount": "Necessità di verificare l'account", + "functionNotSupported": "La versione attuale non supporta questa funzione. Contatta il team commerciale di Lowcoder per aggiornare il tuo account.", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Creazione del componente {comp} fallita", + "notHandledError": "{method} Metodo non eseguito", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Barra di navigazione", + "chooseApp": "Scegliere l'applicazione", + "iconTooltip": "Supporta il link src dell'immagine o la stringa Base64 come data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Nascosto agli utenti non autorizzati", + "queryParam": "Parametri della query URL", + "hashParam": "Parametri URL Hash", + "tabBar": "Barra delle schede", + "emptyTabTooltip": "Configurare questa pagina nel riquadro destro", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Telefono)", + "800": "800px (Tablet)", + "1440": "1440px (Laptop)", + "1920": "1920px (schermo panoramico)", + "3200": "3200px (schermo super grande)", + "title": "Impostazioni generali dell'app", + "autofill": "Autofill", + "userDefined": "Personalizzato", + "default": "Predefinito", + "tooltip": "Chiudere il Popover dopo l'impostazione", + "canvasMaxWidth": "Larghezza massima della tela per questa applicazione", + "userDefinedMaxWidth": "Larghezza massima personalizzata", + "inputUserDefinedPxValue": "Inserire un valore Pixel personalizzato", + "maxWidthTip": "La larghezza massima deve essere maggiore o uguale a 350.", + "themeSetting": "Tema di stile applicato", + "themeSettingDefault": "Predefinito", + "themeCreate": "Creare il tema", + "appTitle": "Titolo", + "appDescription": "Descrizione", + "appCategory": "Categoria", + "showPublicHeader": "Mostra l'intestazione nella vista pubblica", + "canvas": "Impostazioni della tela", + "gridColumns": "Colonne della griglia", + "gridRowHeight": "Altezza della riga della griglia", + "gridRowCount": "Conteggio delle righe della griglia", + "gridPaddingX": "Imbottitura orizzontale della tela", + "gridPaddingY": "Imbottitura verticale della tela", + "gridBgImage": "Immagine di sfondo", + "gridBgImageRepeat": "Ripetizione dell'immagine di sfondo", + "gridBgImageSize": "Dimensioni dell'immagine di sfondo", + "gridBgImagePosition": "Posizione dell'immagine di sfondo", + "gridBgImageOrigin": "Origine dell'immagine di sfondo", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Scorciatoie personalizzate", + "shortcut": "Scorciatoia", + "action": "Azione", + "empty": "Niente scorciatoie", + "placeholder": "Premere la scorciatoia", + "otherPlatform": "Altro", + "space": "Spazio", + }, + "profile": { + ...en.profile, + + "orgSettings": "Impostazioni dello spazio di lavoro", + "switchOrg": "Cambia spazio di lavoro", + "joinedOrg": "I miei spazi di lavoro", + "createOrg": "Crea spazio di lavoro", + "logout": "Disconnettersi", + "personalInfo": "Il mio profilo", + "bindingSuccess": "Legame {sourceName} Successo", + "uploadError": "Errore di caricamento", + "editProfilePicture": "Modificare", + "saveUserNameTooltip": "Premere Invio per salvare il nuovo nome utente. Se vedete la vostra e-mail, significa che l'abbiamo appena dirottata come nome utente e potete cambiarla con una migliore. L'e-mail come nome utente tecnico rimane inalterata.", + "changeAvatarTooltip": "È possibile caricare file PNG o JPG", + "nameCheck": "Il nome non può essere vuoto", + "name": "Nome:", + "namePlaceholder": "Inserire il proprio nome", + "toBind": "Per legare", + "binding": "È vincolante", + "bindError": "Errore di parametro, attualmente non supportato Legame.", + "bindName": "Legare {name}", + "loginAfterBind": "Dopo il collegamento, è possibile utilizzare {name} per accedere.", + "bindEmail": "Legare l'e-mail:", + "email": "Email", + "emailCheck": "Inserire un'e-mail valida", + "emailPlaceholder": "Inserisci il tuo indirizzo e-mail", + "submit": "Invia", + "bindEmailSuccess": "Successo della rilegatura via e-mail", + "passwordModifiedSuccess": "Password modificata con successo", + "passwordSetSuccess": "Password impostata con successo", + "oldPassword": "Vecchia password:", + "inputCurrentPassword": "Inserire la password attuale", + "newPassword": "Nuova password:", + "inputNewPassword": "Inserire la nuova password", + "confirmNewPassword": "Confermare la nuova password:", + "inputNewPasswordAgain": "Inserire nuovamente la nuova password", + "password": "Password:", + "modifyPassword": "Modifica della password", + "setPassword": "Impostare la password", + "alreadySetPassword": "Set di password", + "setPassPlaceholder": "È possibile accedere con la password", + "setPassAfterBind": "È possibile impostare la password dopo il collegamento dell'account", + "socialConnections": "Connessioni sociali", + "changeAvatar": "Cambia Avatar", + "about": "Circa", + "userId": "ID utente", + "createdAt": "Creato a", + "currentOrg": "Organizzazione attuale", + "settings": "Impostazioni", + "uiLanguage": "Lingua UI", + "info": "Info", + "createdApps": "Le vostre applicazioni create", + "createdModules": "I moduli creati", + "sharedApps": "Applicazioni condivise con voi", + "sharedModules": "Moduli condivisi con voi", + "onMarketplace": "Sul mercato", + "howToPublish": "Come pubblicare su Marketplace", + "memberOfOrgs": "Spazi di lavoro Soci", + "apiKeys": "Chiavi API", + "createApiKey": "Creare la chiave API", + "apiKeyInfo": "Assicuratevi di copiare la nuova chiave API. Non sarà più possibile visualizzarla.", + "apiKeyName": "Nome", + "apiKeyDescription": "Descrizione", + "apiKeyCopy": "Fare clic sulla chiave Api per ottenere il valore negli appunti.", + "apiKey": "Chiave API", + "deleteApiKey": "Cancellare la chiave API", + "deleteApiKeyContent": "È sicuro di voler eliminare questa chiave API?", + "deleteApiKeyError": "Qualcosa è andato storto. Riprovare.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Scorciatoie da tastiera", + "click": "Cliccare", + "global": "Globale", + "toggleShortcutList": "Alternare le scorciatoie da tastiera", + "editor": "Editor", + "toggleLeftPanel": "Alterna il riquadro sinistro", + "toggleBottomPanel": "Alterna il riquadro inferiore", + "toggleRightPanel": "Alterna il riquadro destro", + "toggleAllPanels": "Alterna tutti i riquadri", + "preview": "Anteprima", + "undo": "Undo", + "redo": "Rifare", + "showGrid": "Mostra griglia", + "component": "Component", + "multiSelect": "Seleziona multiplo", + "selectAll": "Seleziona tutti", + "copy": "Copia", + "cut": "Tagliare", + "paste": "Incolla", + "move": "Muoversi", + "zoom": "Ridimensionamento", + "delete": "Cancellare", + "deSelect": "Deselezionare", + "queryEditor": "Editor di query", + "excuteQuery": "Eseguire la query corrente", + "editBox": "Editor di testo", + "formatting": "Formato", + "openInLeftPanel": "Aprire nel riquadro sinistro", + }, + "help": { + ...en.help, + + "videoText": "Panoramica", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Impossibile creare una nuova applicazione o origine dati?", + "permissionDenyContent": "Non si ha l'autorizzazione a creare l'applicazione e l'origine dati. Contattare l'amministratore per unirsi al gruppo di sviluppatori.", + "appName": "Applicazione tutorial", + "chat": "Chatta con noi", + "docs": "Visualizza la documentazione", + "editorTutorial": "Editor di tutorial", + "update": "Cosa c'è di nuovo?", + "version": "Versione", + "versionWithColon": "Versione:", + "submitIssue": "Invia un problema", + }, + "header": { + ...en.header, + + "nameCheckMessage": "Il nome non può essere vuoto", + "viewOnly": "Solo vista", + "recoverAppSnapshotTitle": "Ripristinare questa versione?", + "recoverAppSnapshotContent": "Ripristinare l'applicazione corrente alla versione creata in {time}.", + "recoverAppSnapshotMessage": "Ripristinare questa versione", + "returnEdit": "Ritorno all'editore", + "deploy": "Pubblicare", + "export": "Esportazione in JSON", + "editName": "Modifica nome", + "duplicate": "Duplicato {type}", + "snapshot": "La storia", + "scriptsAndStyles": "Sceneggiature e stile", + "appSettings": "Impostazioni dell'app", + "preview": "Anteprima", + "editError": "Modalità Anteprima storia, non è supportata alcuna operazione.", + "clone": "Clone", + "editorMode_layout": "Layout", + "editorMode_logic": "Logica", + "editorMode_both": "Entrambi", + "editorMode_layout_tooltip": "Personalizzare l'aspetto e il layout del componente, nella finestra di destra. Regolate l'aspetto, gli stili e le animazioni.", + "editorMode_logic_tooltip": "Impostate il funzionamento e l'interazione del vostro componente, nella finestra giusta. Gestite il suo contenuto e i suoi comportamenti interattivi.", + "AppEditingBlocked": "Modifica dell'app bloccata per:", + "AppEditingBlockedHint": "Le modifiche non verranno salvate mentre un altro utente sta modificando questa app.", + "AppEditingBlockedMessage": "Attendere prima di controllare lo stato di modifica dell'app.", + "AppEditingBlockedCheckStatus": "Controlla lo stato dell'app", + "AppEditingBlockedSomeone": "Qualcuno", + "AppEditingBlockedMessageSnipped": "sta modificando questa app", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Iscriviti", + "email": "E-mail:", + "inputEmail": "Inserisci il tuo indirizzo e-mail", + "inputValidEmail": "Inserire un'e-mail valida", + "forgotPassword": "Password dimenticata", + "forgotPasswordInfo": "Inserisci la tua e-mail e ti invieremo un link per reimpostare la tua password.", + "forgotPasswordSuccess": "Controllare l'e-mail per il link di reimpostazione della password.", + "forgotPasswordError": "Qualcosa è andato storto. Riprovare.", + "register": "Iscriviti", + "userLogin": "Accedi", + "login": "Accedi", + "bind": "Rilegatura", + "passwordCheckLength": "Almeno {min} Caratteri", + "passwordCheckContainsNumberAndLetter": "Deve contenere lettere e numeri", + "passwordCheckSpace": "Non può contenere caratteri di spazi bianchi", + "welcomeTitle": "Benvenuti a {productName}", + "inviteWelcomeTitle": "{username} vi invita a lavorare insieme", + "terms": "Termini", + "privacy": "Informativa sulla privacy", + "registerHint": "Ho letto e accetto il", + "chooseAccount": "Scegliere il proprio account", + "signInLabel": "Accesso con {name}", + "bindAccount": "Legare il conto", + "scanQrCode": "Scansionare il codice QR con {name}", + "invalidThirdPartyParam": "Param di terze parti non validi", + "account": "Conto", + "inputAccount": "Inserisci il tuo account", + "ldapLogin": "LDAP Sign In", + "resetPassword": "Reimpostare la password", + "resetPasswordDesc": "Reimpostare la password dell'utente {name}. Dopo la reimpostazione verrà generata una nuova password.", + "resetSuccess": "Azzeramento riuscito", + "resetSuccessDesc": "La reimpostazione della password è riuscita. La nuova password è: {password}", + "resetLostPasswordSuccess": "La reimpostazione della password è riuscita. Effettuare nuovamente il login.", + "copyPassword": "Copia della password", + "poweredByLowcoder": "Alimentato da: Lowcoder.cloud", + "continue": "Continua", + "enterPassword": "Inserire la password", + "selectAuthProvider": "Selezionare il provider di autenticazione", + "selectWorkspace": "Selezionare l'area di lavoro", + "userNotFound": "Utente non trovato. Assicurarsi di aver inserito l'e-mail corretta.", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Aggiungere librerie JavaScript all'applicazione corrente tramite indirizzi URL. lodash, day.js, uuid, numbro sono integrati nel sistema per un uso immediato. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione, il che può avere un impatto sulle prestazioni dell'applicazione.", + "exportedAs": "Esportato come", + "urlTooltip": "Indirizzo URL della libreria JavaScript, [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/) è raccomandato.", + "externalLibsHelperText": "Sono supportate solo le librerie che utilizzano l'approccio UMD (Universal Module Definition). Per saperne di più: https://github.com/umdjs/umd", + "recommended": "Consigliato", + "viewJSLibraryDocument": "Documento", + "jsLibraryURLError": "URL non valido", + "jsLibraryExist": "La libreria JavaScript esiste già", + "jsLibraryEmptyContent": "Nessuna libreria JavaScript aggiunta", + "jsLibraryDownloadError": "Errore nel download della libreria JavaScript", + "jsLibraryInstallSuccess": "Libreria JavaScript installata con successo", + "jsLibraryInstallFailed": "Installazione della libreria JavaScript non riuscita", + "jsLibraryInstallFailedCloud": "Forse la libreria non è disponibile nella Sandbox, [Documentazione](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{message}", + "add": "Aggiungi nuovo", + "jsHelpText": "Aggiungere un metodo o una variabile globale all'applicazione corrente.", + "cssHelpText": "Aggiungere stili all'applicazione corrente. La struttura del DOM può cambiare durante l'iterazione del sistema. Cercare di modificare gli stili attraverso le proprietà dei componenti.", + "scriptsAndStyles": "Script e stili", + "jsLibrary": "Libreria JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Component", + "componentContent": "Il pannello dei componenti destro offre molti blocchi di applicazioni (componenti) già pronti. Questi possono essere trascinati sulla tela per essere utilizzati. È anche possibile creare i propri componenti con un po' di conoscenze di codifica.", + "canvas": "Tela", + "canvasContent": "Costruite le vostre applicazioni su Canvas con un approccio \"What You See Is What You Get\". È sufficiente trascinare e rilasciare i componenti per progettare il layout e utilizzare le scorciatoie da tastiera per una rapida modifica, come cancellare, copiare e incollare. Una volta selezionato un componente, è possibile mettere a punto ogni dettaglio, dallo stile al layout, dal binding dei dati al comportamento logico. In più, potete usufruire del vantaggio del design reattivo, che garantisce che le vostre app siano perfette su qualsiasi dispositivo.", + "queryData": "Interrogazione dei dati", + "queryDataContent": "Qui è possibile creare query di dati e collegarsi a MySQL, MongoDB, Redis, Airtable e molte altre fonti di dati. Dopo aver configurato la query, fare clic su 'Esegui' per ottenere i dati e continuare l'esercitazione.", + "compProperties": "Proprietà dei componenti", + "interactiveDemo": "Demo interattiva", + "interactiveDemoToolTip": "Fare clic per avviare una dimostrazione interattiva di questa funzione", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Benvenuti! Fate clic su \"App\" e iniziate a creare la vostra prima applicazione.", + "createAppTitle": "Creare un'applicazione", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Abilitare il registro NPM personalizzato", + "npmRegistryUrl": "URL del registro NPM", + "npmRegistryUrlRequired": "Inserire l'URL del registro", + "npmRegistryUrlInvalid": "Inserire un URL valido", + "npmRegistryScope": "Ambito di applicazione del pacchetto", + "npmRegistryPattern": "Pattern", + "npmRegistryPatternInvalid": "Inserire un modello valido (che inizia con @ per le organizzazioni).", + "npmRegistryAuth": "Autenticazione", + "npmRegistryAuthType": "Tipo di autenticazione", + "npmRegistryAuthCredentials": "Credenziali di autenticazione", + "npmRegistryAuthCredentialsRequired": "Inserire le credenziali del registro", + "npmRegistryAuthCredentialsHelp": "Per l'autenticazione di base, fornire il nome utente e la password codificati in base64 nel formato 'base64(nome utente:password)', mentre per l'autenticazione tramite token fornire il token.", + }, + "history": { + ...en.history, + + "layout": "'{0}' Adattamento del layout", + "upgrade": "Aggiornamento '{0}'", + "delete": "Cancellare '{0}'.", + "add": "Aggiungere \"{0}\".", + "modify": "Modificare '{0}'", + "rename": "Rinominare '{1}' in '{0}'.", + "recover": "Recuperare la versione \"{2}\".", + "recoverVersion": "Recupera la versione", + "andSoOn": "e così via", + "timeFormat": "MM GG alle hh:mm A", + "emptyHistory": "Nessuna storia", + "currentVersionWithBracket": " (Attuale)", + "currentVersion": "Versione attuale", + "justNow": "Solo ora", + "history": "La storia", + }, + "home": { + ...en.home, + + "profile": "Il vostro profilo", + "news": "Notizie", + "newsLoading": "Il caricamento avverrà in pochi secondi.", + "orgHome": "Homepage (Org)", + "yourOrg": "La vostra organizzazione", + "orgHomeTitle": "Homepage dell'organizzazione", + "appMarketplace": "Mercato delle applicazioni", + "allApplications": "Le vostre applicazioni", + "allModules": "I vostri moduli", + "allFolders": "Le vostre cartelle", + "yourFolders": "Le vostre cartelle", + "modules": "Moduli", + "module": "Modulo", + "api": "API Lowcoder", + "trash": "Rifiuti", + "marketplace": "Mercato", + "allCategories": "Tutte le categorie", + "queryLibrary": "Libreria di query", + "datasource": "Fonti dei dati", + "selectDatasourceType": "Selezionare il tipo di sorgente dati", + "home": "Casa", + "all": "Tutti", + "app": "App", + "navigation": "Navigazione", + "navLayout": "Navigazione su PC", + "navLayoutDesc": "Menu a sinistra per facilitare la navigazione sul desktop.", + "mobileTabLayout": "Navigazione mobile", + "mobileTabLayoutDesc": "Barra di navigazione inferiore per una navigazione mobile fluida.", + "folders": "Cartelle", + "folder": "Cartella", + "rootFolder": "Radice", + "import": "Importazione", + "export": "Esportazione in JSON", + "show": "Mostra", + "inviteUser": "Invitare i membri", + "createFolder": "Crea cartella", + "createFolderSubTitle": "Nome della cartella:", + "moveToFolder": "Sposta nella cartella", + "moveToTrash": "Spostarsi nella spazzatura", + "moveToFolderSubTitle": "Spostare \"{name}\" in:", + "folderName": "Nome della cartella:", + "resCardSubTitle": "{time} da {creator}", + "trashEmpty": "Il cestino è vuoto.", + "projectEmpty": "Non c'è niente qui.", + "projectEmptyCanAdd": "Non avete ancora nessuna applicazione. Fare clic su Nuovo per iniziare.", + "name": "Nome", + "type": "Tipo", + "creator": "Creato da", + "lastModified": "Ultima modifica", + "deleteTime": "Cancellare il tempo", + "createTime": "Creare tempo", + "datasourceName": "Nome dell'origine dati", + "databaseName": "Nome del database", + "nameCheckMessage": "Il nome non può essere vuoto", + "deleteElementTitle": "Cancellare definitivamente", + "moveToTrashSubTitle": "{type} {name} sarà spostato nella spazzatura.", + "deleteElementSubTitle": "Eliminare {type} {name} in modo permanente, non può essere recuperato.", + "deleteSuccessMsg": "Eliminato con successo", + "deleteErrorMsg": "Errore eliminato", + "recoverSuccessMsg": "Recuperato con successo", + "newDatasource": "Nuova fonte di dati", + "creating": "Creare...", + "chooseDataSourceType": "Scegliere il tipo di origine dati", + "folderAlreadyExists": "La cartella esiste già", + "newNavLayout": "{userName}'s {name}", + "newApp": "Il nuovo {userName} di {name}", + "importError": "Errore di importazione, {message}", + "exportError": "Errore di esportazione, {message}", + "importSuccess": "Successo dell'importazione", + "fileUploadError": "Errore nel caricamento dei file", + "fileFormatError": "Errore di formato del file", + "groupWithSquareBrackets": "[Gruppo]", + "allPermissions": "Proprietario", + "appSharingDialogueTitle": "Condivisione delle app e autorizzazioni", + "appSocialSharing": "Condividete la vostra applicazione e la vostra esperienza su:", + "appSocialSharingMessage": "Ho realizzato questa app con Lowcoder, guardatela!", + "socialShare": "Condividi su", + "shareLink": "Condividi il link:", + "copyLink": "Copiare il link", + "appPublicMessage": "Rendere pubblica l'applicazione. Chiunque può visualizzarla.", + "modulePublicMessage": "Rendere pubblico il modulo. Chiunque può vederlo.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Pubblicate la vostra applicazione sul Marketplace pubblico. Chiunque può visualizzarla e copiarla da lì.", + "moduleMarketplaceMessage": "Pubblicate il vostro modulo sul Mercato pubblico. Chiunque può visualizzarlo e copiarlo da lì.", + "marketplaceGoodPublishing": "Assicuratevi che la vostra applicazione abbia un buon nome e sia facile da usare. Rimuovere tutte le informazioni sensibili prima di pubblicarle. Inoltre, rimuovete le fonti di dati locali e sostituitele con dati temporanei statici integrati.", + "noMarketplaceApps": "Non ci sono ancora applicazioni sul mercato", + "errorMarketplaceApps": "Errore durante il caricamento delle applicazioni del Marketplace", + "localMarketplaceTitle": "Mercato locale", + "globalMarketplaceTitle": "Mercato pubblico", + "memberPermissionList": "Permessi per i membri:", + "orgName": "{orgName} admins", + "addMember": "Aggiungi membri", + "addPermissionPlaceholder": "Inserire un nome per cercare i membri", + "searchMemberOrGroup": "Ricerca di membri o gruppi:", + "addPermissionErrorMessage": "Impossibile aggiungere l'autorizzazione, {message}", + "copyModalTitle": "Clonare \"{name}\".", + "copyNameLabel": "{type} nome", + "copyModalfolderLabel": "Aggiungi alla cartella", + "copyNamePlaceholder": "Inserire il nome di un {type}.", + "chooseNavType": "Scegliere il tipo di navigazione", + "createNavigation": "Crea navigazione", + "howToUseAPI": "Come utilizzare l'API Open Rest", + "support": "Supporto", + }, + "support": { + ...en.support, + + "selfUser": "Tu", + "supportTitle": "Supporto Lowcoder", + "supportContent": "Se hai domande o hai bisogno di aiuto, usa il sistema di ticket per risolvere il problema rapidamente.", + "newSupportTicket": "Nuovo Ticket di Supporto", + "ticketTitle": "Titolo", + "priority": "Priorità", + "assignee": "Assegnatario", + "status": "Stato del Ticket", + "updatedTime": "Tempo Aggiornato", + "active": "Attivo", + "inactive": "Inattivo", + "noEmail": "Nessuna E-mail", + "details": "Dettagli", + "reloadTickets": "Ricarica Ticket", + "createdDate": "Data di Creazione", + "updatedDate": "Data di Aggiornamento", + "description": "Descrizione del Problema", + "subtasks": "Sottoattività", + "subtasksProgress": "Avanzamento di tutte le Sottoattività", + "attachments": "Allegati al Problema", + "comments": "Commenti", + "addComment": "Aggiungi Commento", + "addAttachment": "Aggiungi Allegato", + "edit": "Modifica Descrizione Ticket", + "save": "Salva Descrizione Ticket", + "cancel": "Annulla", + "submitComment": "Invia Commento", + "upload": "Invia Allegato", + "selectFile": "Seleziona File", + "ticketDescriptionUpdated": "Descrizione del ticket aggiornata con successo!", + "ticketDescriptionUpdateFailed": "Aggiornamento della descrizione del ticket non riuscito.", + "writeComment": "Scrivi un commento...", + "ticketCommentAdded": "Commento aggiunto con successo!", + "ticketCommentFailed": "Impossibile aggiungere il commento.", + "ticketCommentEmpty": "Si prega di scrivere un commento prima di inviare.", + "ticketAttachmentUploaded": "Allegato caricato con successo!", + "ticketAttachmentFailed": "Caricamento dell'allegato non riuscito.", + "ticketAttachmentEmpty": "Seleziona un file da caricare.", + "ticketFetchError": "Caricamento del ticket fallito.", + "ticketNotFound": "Ticket non trovato.", + "addAttachmentFileSize": "Il file deve essere inferiore a 5MB!", + "goBack": "Torna Indietro", + "noDescription": "Nessuna descrizione disponibile.", + "createTicket": "Crea un nuovo Ticket di Supporto", + "createTicketTitlePlaceholder": "Inserisci il Titolo (max 150 caratteri)", + "createTicketDescriptionTitle": "Descrivi il tuo problema - più dettagli, meglio è:", + "createTicketDescriptionPlaceholder": "Descrivi il problema in dettaglio, includendo: 1) Passaggi per riprodurre il problema, 2) Comportamento previsto rispetto al comportamento reale, 3) Frammenti di codice, se applicabile, 4) Componenti, API o configurazioni specifiche interessate", + "createTicketSubmit": "Invia Ticket", + "createTicketInfoText": "Una volta creato il Ticket, potrai aggiungere Screenshot e Commenti nella sezione 'Dettagli'.", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Posizione dei punti di navigazione", + "autoPlay": "AutoPlay", + "showDots": "Mostra punti di navigazione", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Nome o URL del pacchetto npm non valido.", + "pluginExisted": "Questo plugin npm esisteva già", + "compNotFound": "Il componente {compName} non è stato trovato.", + "addPluginModalTitle": "Aggiungere un plugin da un repository npm", + "pluginNameLabel": "URL o nome del pacchetto npm", + "noCompText": "Nessun componente.", + "compsLoading": "Caricamento...", + "removePluginBtnText": "Rimuovere", + "addPluginBtnText": "Aggiungere il plugin npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "Il valore predefinito del pulsante di attivazione, ad esempio: Falso", + "trueDefaultText": "Nascondere", + "falseDefaultText": "Mostra", + "trueLabel": "Testo per Vero", + "falseLabel": "Testo per Falso", + "trueIconLabel": "Icona per Vero", + "falseIconLabel": "Icona per Falso", + "iconPosition": "Icona Posizione", + "showText": "Mostra testo", + "alignment": "Allineamento", + "showBorder": "Mostra il confine", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", + "demoText": "Lowcoder | Crea applicazioni software per la tua azienda e i tuoi clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", + "submit": "Invia", + "style": "Stile", + "danger": "Pericolo", + "warning": "Avvertenze", + "success": "Il successo", + "menu": "Menu", + "link": "Collegamento a", + "customAppearance": "Aspetto personalizzato", + "search": "Ricerca", + "pleaseInputNumber": "Inserire un numero", + "mostValue": "Più valore", + "maxRating": "Valutazione massima", + "notSelect": "Non selezionato", + "halfSelect": "Mezza selezione", + "pleaseSelect": "Selezionare", + "title": "Titolo", + "content": "Content", + "componentNotFound": "Il componente non esiste", + "example": "Esempi", + "defaultMethodDesc": "Impostare il valore della proprietà {name}", + "propertyUsage": "È possibile leggere le informazioni relative al componente accedendo alle proprietà del componente in base al suo nome ovunque si possa scrivere JavaScript.", + "property": "Proprietà", + "propertyName": "Nome della proprietà", + "propertyType": "Tipo", + "propertyDesc": "Descrizione", + "event": "Eventi", + "eventName": "Nome dell'evento", + "eventDesc": "Descrizione", + "mehtod": "Metodi", + "methodUsage": "L'utente ha la possibilità di interagire con i componenti tramite i loro rispettivi metodi, ai quali si può accedere con i nomi designati all'interno di qualsiasi segmento in cui si utilizza JavaScript. Inoltre, questi componenti possono essere attivati attraverso l'azione 'Control Component', che viene attivata in risposta a eventi specifici.", + "methodName": "Nome del metodo", + "methodDesc": "Descrizione", + "showBorder": "Mostra il confine", + "haveTry": "Provate voi stessi", + "settings": "Impostazione", + "settingValues": "Impostazione Valore", + "defaultValue": "Valore predefinito", + "time": "Tempo", + "date": "Data", + "noValue": "Nessuno", + "xAxisType": "Tipo di asse X", + "hAlignType": "Allineamento orizzontale", + "leftLeftAlign": "Allineamento a sinistra", + "leftRightAlign": "Allineamento sinistra-destra", + "topLeftAlign": "Allineamento in alto a sinistra", + "topRightAlign": "Allineamento in alto a destra", + "validation": "Convalida", + "required": "Richiesto", + "defaultStartDateValue": "Data di inizio predefinita", + "defaultEndDateValue": "Data di fine predefinita", + "basicUsage": "Uso di base", + "basicDemoDescription": "I seguenti esempi mostrano l'uso di base del componente.", + "noDefaultValue": "Nessun valore predefinito", + "forbid": "Vietato", + "placeholder": "Segnaposto", + "pleaseInputPassword": "Inserire una password", + "password": "Password", + "textAlign": "Allineamento del testo", + "length": "Lunghezza", + "top": "In alto", + "pleaseInputName": "Inserire il proprio nome", + "userName": "Nome", + "fixed": "Fisso", + "responsive": "Reattivo", + "workCount": "Conteggio delle parole", + "cascaderOptions": "Opzioni Cascader", + "pleaseSelectCity": "Selezionare una città", + "advanced": "Avanzato", + "showClearIcon": "Mostra l'icona Cancella", + "appleOptionLabel": "🍎 Mela", + "waterMelonOptionLabel": "🍉 Anguria", + "berryOptionLabel": "🍓 Fragola", + "lemonOptionLabel": "🍋 Limone", + "coconutOptionLabel": "🥥 Noce di cocco", + "likedFruits": "Preferiti", + "option": "Opzione", + "singleFileUpload": "Caricamento di un singolo file", + "multiFileUpload": "Caricamento multiplo di file", + "folderUpload": "Caricamento cartelle", + "multiFile": "File multipli", + "folder": "Cartella", + "open": "Aperto", + "favoriteFruits": "Frutti preferiti", + "pleaseSelectOneFruit": "Selezionare un frutto", + "notComplete": "Non completo", + "complete": "Completo", + "echart": "Grafico elettronico", + "lineChart": "Grafico a linee", + "basicLineChart": "Grafico a linee di base", + "lineChartType": "Tipo di grafico a linee", + "stackLineChart": "Linea impilata", + "areaLineChart": "Linea d'area", + "scatterChart": "Grafico a dispersione", + "scatterShape": "Forma dello spargimento", + "scatterShapeCircle": "Cerchio", + "scatterShapeRect": "Rettangolo", + "scatterShapeTri": "Triangolo", + "scatterShapeDiamond": "Diamante", + "scatterShapePin": "Perno", + "scatterShapeArrow": "Freccia", + "pieChart": "Grafico a torta", + "basicPieChart": "Grafico a torta di base", + "pieChatType": "Tipo di grafico a torta", + "pieChartTypeCircle": "Tabella delle ciambelle", + "pieChartTypeRose": "Grafico delle rose", + "titleAlign": "Titolo Posizione", + "color": "Colore", + "dashed": "Tratteggiato", + "imADivider": "Io sono una linea di demarcazione", + "tableSize": "Dimensione della tabella", + "subMenuItem": "Sottomenu {num}", + "menuItem": "Menu {num}", + "labelText": "Etichetta", + "labelPosition": "Etichetta - Posizione", + "labelAlign": "Etichetta - Allineamento", + "optionsOptionType": "Metodo di configurazione", + "styleBackgroundColor": "Colore di sfondo", + "styleBorderColor": "Colore del bordo", + "styleColor": "Colore del carattere", + "selectionMode": "Modalità di selezione delle righe", + "paginationSetting": "Impostazione della paginazione", + "paginationShowSizeChanger": "Supporto agli utenti per la modifica del numero di voci per pagina", + "paginationShowSizeChangerButton": "Pulsante Mostra cambio formato", + "paginationShowQuickJumper": "Mostra Quick Jumper", + "paginationHideOnSinglePage": "Nascondere quando c'è una sola pagina", + "paginationPageSizeOptions": "Dimensione della pagina", + "chartConfigCompType": "Tipo di grafico", + "xConfigType": "Tipo di asse X", + "loading": "Caricamento", + "disabled": "Disabili", + "minLength": "Lunghezza minima", + "maxLength": "Lunghezza massima", + "showCount": "Mostra il conteggio delle parole", + "autoHeight": "Altezza", + "thousandsSeparator": "Separatore di migliaia", + "precision": "Posizioni decimali", + "value": "Valore predefinito", + "formatter": "Formato", + "min": "Valore minimo", + "max": "Valore massimo", + "step": "Dimensione del passo", + "start": "Ora di inizio", + "end": "Tempo della fine", + "allowHalf": "Consentire la selezione della metà", + "filetype": "Tipo di file", + "showUploadList": "Mostra elenco di caricamento", + "uploadType": "Tipo di caricamento", + "allowClear": "Mostra l'icona Cancella", + "minSize": "Dimensione minima del file", + "maxSize": "Dimensione massima del file", + "maxFiles": "Numero massimo di file caricati", + "format": "Formato", + "minDate": "Data minima", + "maxDate": "Data massima", + "minTime": "Tempo minimo", + "maxTime": "Tempo massimo", + "text": "Testo", + "type": "Tipo", + "hideHeader": "Nascondi intestazione", + "hideBordered": "Nascondi bordo", + "src": "URL immagine", + "showInfo": "Valore di visualizzazione", + "mode": "Modalità", + "onlyMenu": "Solo menu", + "horizontalAlignment": "Allineamento orizzontale", + "row": "A sinistra", + "column": "In alto", + "leftAlign": "Allineamento a sinistra", + "rightAlign": "Allineamento a destra", + "percent": "Percentuale", + "fixedHeight": "Altezza fissa", + "auto": "Adattivo", + "directory": "Cartella", + "multiple": "File multipli", + "singleFile": "File singolo", + "manual": "Manuale", + "default": "Predefinito", + "small": "Piccolo", + "middle": "Medio", + "large": "Grande", + "single": "Singolo", + "multi": "Multiplo", + "close": "Chiudere", + "ui": "Modalità UI", + "line": "Grafico a linee", + "scatter": "Grafico di dispersione", + "pie": "Grafico a torta", + "basicLine": "Grafico a linee di base", + "stackedLine": "Grafico a linee sovrapposte", + "areaLine": "Mappa dell'area", + "basicPie": "Grafico a torta di base", + "doughnutPie": "Tabella delle ciambelle", + "rosePie": "Grafico delle rose", + "category": "Categoria Asse", + "circle": "Cerchio", + "rect": "Rettangolo", + "triangle": "Triangolo", + "diamond": "Diamante", + "pin": "Perno", + "arrow": "Freccia", + "left": "A sinistra", + "right": "Diritto", + "center": "Centro", + "bottom": "Bottom", + "justify": "Giustificare entrambi i fini", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Stato attuale dei dati", + "preview": "Anteprima", + "property": "Proprietà", + "console": "Console Visual Script", + "executeMethods": "Metodi di esecuzione", + "noMethods": "Nessun metodo.", + "methodParams": "Parametri del metodo", + "methodParamsHelp": "Parametri del metodo di input tramite JSON. Ad esempio, è possibile impostare i parametri di setValue con: [1] o 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Sfondo del pulsante", + "btnText": "Testo del pulsante", + "title": "Titolo", + "selectBackground": "Un contesto selezionato", + }, + "idSource": { + ...en.idSource, + + "title": "Provider di autenticazione utente", + "form": "Email", + "pay": "Premio", + "enable": "Abilitazione", + "unEnable": "Non abilitato", + "loginType": "Tipo di accesso", + "status": "Stato", + "desc": "Descrizione", + "manual": "Rubrica:", + "syncManual": "Sincronizzazione della rubrica", + "syncManualSuccess": "Sincronizzazione riuscita", + "enableRegister": "Consentire la registrazione", + "saveBtn": "Salva e abilita", + "save": "Risparmiare", + "none": "Nessuno", + "formPlaceholder": "Inserire {label}", + "formSelectPlaceholder": "Selezionare il {label}.", + "saveSuccess": "Salvato con successo", + "dangerLabel": "Zona di pericolo", + "dangerTip": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Procedere con cautela.", + "lastEnabledConfig": "Non è possibile disabilitare/cancellare la configurazione, poiché è l'unica abilitata.", + "disable": "Disattivare", + "disableSuccess": "Disattivato con successo", + "encryptedServer": "-------- Crittografato sul lato server --------", + "disableTip": "Suggerimenti", + "disableContent": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Siete sicuri di voler procedere?", + "manualTip": "", + "lockTip": "Il contenuto è bloccato. Per apportare modifiche, fare clic su {icon} per sbloccare.", + "lockModalContent": "La modifica del campo \"Attributo ID\" può avere un impatto significativo sull'identificazione degli utenti. Prima di procedere, accertarsi di aver compreso le implicazioni di questa modifica.", + "payUserTag": "Premio", + "source": "Fonte", + "sourceName": "Nome del fornitore di autorizzazione", + "sourceDescription": "Descrizione del fornitore di autorizzazioni", + "sourceIcon": "Icona Provider di autorizzazione", + "sourceCategory": "Categoria del fornitore di autorizzazioni", + "souceIssuerURI": "URI dell'emittente del fornitore di autorizzazioni", + "souceAuthorizationEndpoint": "Provider di autorizzazione Endpoint di autorizzazione", + "souceTokenEndpoint": "Provider di autorizzazione Punto finale del token", + "souceUserInfoEndpoint": "Provider di autorizzazione Info utente Endpoint", + "userInfoIntrospection": "Utilizzare l'introspezione dell'utente OpenID", + "userCanSelectAccounts": "L'utente può selezionare i conti", + "sourceCategoryEnterprise": "Identità aziendale", + "sourceCategoryCloud": "Servizi cloud", + "sourceCategorySocial": "Media sociali", + "sourceCategoryDevelopment": "Sviluppo", + "sourceCategoryTools": "Strumenti e produttività", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Configurazione della vista slot", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "searchAnimation": "Ricerca Animazione", + "speed": "Velocità", + "width": "Larghezza", + "height": "Altezza", + "backgroundColor": "Colore di sfondo", + "animationStart": "Inizio dell'animazione", + "valueDesc": "Dati JSON correnti", + "loop": "Anello", + "auto": "Auto", + "onHover": "Su Hover", + "onTrigger": "Su innesco", + "singlePlay": "Gioco singolo", + "endlessLoop": "Anello infinito", + "keepLastFrame": "Mantenere visualizzato l'ultimo fotogramma", + "fit": "In forma", + "align": "Allineare", + "load": "Su carico", + "play": "In gioco", + "pause": "In pausa", + "stop": "Su Stop", + "complete": "Su Completo", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Titolo Colore", + "subTitleColor": "Colore dei sottotitoli", + "labelColor": "Colore dell'etichetta", + "value": "Dati sulla linea del tempo", + "mode": "Ordine di visualizzazione", + "left": "Diritto al contenuto", + "right": "Contenuto Sinistra", + "alternate": "Ordine alternativo dei contenuti", + "modeTooltip": "Impostare il contenuto in modo che appaia a destra/sinistra o alternativamente su entrambi i lati della timeline.", + "reverse": "Prima gli eventi più recenti", + "pending": "Testo del nodo in attesa", + "pendingDescription": "Se impostato, viene visualizzato un ultimo nodo con il testo e un indicatore di attesa.", + "defaultPending": "Miglioramento continuo", + "clickTitleEvent": "Fare clic su Titolo evento", + "clickTitleEventDesc": "Fare clic su Titolo evento", + "Introduction": "Tasti di introduzione", + "helpTitle": "Titolo della linea temporale (obbligatorio)", + "helpsubTitle": "Sottotitolo della linea temporale", + "helpLabel": "Etichetta della linea temporale, utilizzata per visualizzare le date", + "helpColor": "Indica il colore del nodo della linea temporale", + "helpDot": "Rendering dei nodi della timeline come icone di design Ant", + "helpTitleColor": "Controllo individuale del colore del titolo del nodo", + "helpSubTitleColor": "Controllo individuale del colore del sottotitolo del nodo", + "helpLabelColor": "Controllo individuale del colore dell'icona del nodo", + "valueDesc": "Dati della linea temporale", + "clickedObjectDesc": "Dati dell'elemento cliccato", + "clickedIndexDesc": "Indice degli elementi cliccati", + }, + "comment": { + ...en.comment, + + "value": "Come elencare i dati", + "showSendButton": "Consentire i commenti", + "title": "Titolo", + "titledDefaultValue": "%d Commento in totale", + "placeholder": "Maiusc + Invio per commentare; inserire @ o # per l'immissione rapida.", + "placeholderDec": "Segnaposto", + "buttonTextDec": "Titolo del pulsante", + "buttonText": "Come", + "mentionList": "Dati dell'elenco delle menzioni", + "mentionListDec": "Parole chiave-menzione; dati dell'elenco delle menzioni-valore", + "userInfo": "Info utente", + "dateErr": "Errore di data", + "commentList": "Come elencare", + "deletedItem": "Voce cancellata", + "submitedItem": "Articolo presentato", + "deleteAble": "Mostra il pulsante Elimina", + "Introduction": "Tasti di introduzione", + "helpUser": "Informazioni sull'utente (obbligatorio)", + "helpname": "Nome utente (obbligatorio)", + "helpavatar": "URL dell'avatar (alta priorità)", + "helpdisplayName": "Nome visualizzato (priorità bassa)", + "helpvalue": "Come il contenuto", + "helpcreatedAt": "Data di creazione", + }, + "mention": { + ...en.mention, + + "mentionList": "Dati dell'elenco delle menzioni", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Complete Value", + "checkedValueFrom": "Valore controllato Da", + "ignoreCase": "Ricerca Ignorare il caso", + "searchLabelOnly": "Cerca solo nell'etichetta", + "searchFirstPY": "Cerca il primo Pinyin", + "searchCompletePY": "Ricerca Pinyin completo", + "searchText": "Testo di ricerca", + "SectionDataName": "Dati di completamento automatico", + "valueInItems": "Valore in articoli", + "type": "Tipo", + "antDesign": "AntDesign", + "normal": "Normale", + "selectKey": "Chiave", + "selectLable": "Etichetta", + "ComponentType": "Tipo di componente", + "colorIcon": "Blu", + "grewIcon": "Grigio", + "noneIcon": "Nessuno", + "small": "Piccolo", + "large": "Grande", + "componentSize": "Dimensione del componente", + "Introduction": "Tasti di introduzione", + "helpLabel": "Etichetta", + "helpValue": "Valore", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Colonne", + "addColumn": "Aggiungi colonna", + "columnDefinition": "Definizione della colonna", + "rowDefinition": "Definizione di riga", + "columnGap": "Spazio tra le colonne", + "rowGap": "Distanza tra le file", + "atLeastOneColumnError": "Il layout reattivo mantiene almeno una colonna", + "columnsPerRow": "Colonne per riga", + "columnsSpacing": "Spaziatura delle colonne (px)", + "horizontal": "Orizzontale", + "vertical": "Verticale", + "mobile": "Mobile", + "tablet": "Tavoletta", + "desktop": "Desktop", + "rowStyle": "Stile della fila", + "columnStyle": "Stile colonna", + "minWidth": "Min. Larghezza", + "rowBreak": "Interruzione della fila", + "useComponentWidth": "Usa dimensione propria", + "useComponentWidthDesc": "Utilizza la larghezza del contenitore invece della larghezza dell'app", + "matchColumnsHeight": "Abbinare l'altezza delle colonne", + "rowLayout": "Disposizione delle file", + "columnsLayout": "Layout delle colonne", + "columnsDefinitionTooltip": "Le colonne possono essere definite liberamente in base alle proprietà delle colonne CSS. Ad esempio, 'auto auto' creerà due colonne di uguale larghezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Le righe possono essere definite liberamente in base alle proprietà CSS delle righe. Ad esempio, 'auto auto' creerà due righe di uguale altezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "Visualizza le aree", + "addColumn": "Aggiungi aree", + "columnDefinition": "Definizione dell'area", + "atLeastOneColumnError": "Il layout responsivo mantiene almeno una colonna", + "horizontal": "Orizzontale", + "vertical": "Verticale", + "areaStyle": "Stile colonna", + "minWidth": "Min. Larghezza", + "maxWidth": "Max. Larghezza", + "width": "Larghezza", + "collapsible": "L'area è pieghevole?", + "matchColumnsHeight": "Aree di corrispondenza Altezza", + "orientation": "Orientamento del layout diviso", + "orientationTooltip": "L'ordine visivo di allineamento delle aree. Per ottenere layout complessi, è possibile inserire i componenti Splitlayout anche all'interno dei componenti Splitlayout.", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modalità", + "modeInline": "In linea", + "modeVertical": "Verticale", + "modeHorizontal": "Orizzontale", + "width": "Larghezza", + "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", + "navStyle": "Menu stile", + "navItemStyle": "Stile della voce di menu", + "navBackground": "Immagine di sfondo", + "mobileNavVerticalOrientation": "Orientamento verticale", + "mobileNavVerticalMaxWidth": "Larghezza massima", + "mobileNavBarHeight": "Altezza della barra di navigazione", + "mobileNavVerticalShowSeparator": "Mostra separatore", + "mobileNavIconSize": "Dimensione dell'icona", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Linea di data internazionale W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Ora del Pacifico (USA)", + "UTC-06:00": "(UTC-06:00) Ora centrale (USA)", + "UTC-05:00": "(UTC-05:00) Ora orientale (USA)", + "UTC-04:00": "(UTC-04:00) Ora dell'Atlantico", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Capo Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlino, Roma", + "UTC+02:00": "(UTC+02:00) Atene, Bucarest", + "UTC+03:00": "(UTC+03:00) Mosca", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) Nuova Delhi", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Pechino, HK", + "UTC+09:00": "(UTC+09:00) Tokyo, Seul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Isole Salomone, Nuova Caledonia", + "UTC+12:00": "(UTC+12:00) Auckland, Figi", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "Scelta dell'utente", + }, + "tour": { + ...en.tour, + + "section1Title": "Passi", + "section1Subtitle": "Passi", + "tooltipExampleHeader": "Esempio:", + "tooltipSignatureHeader": "Firma:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Titolo", + "placeholder": "Benvenuti", + "tooltip": "Il titolo del passo. Qui è valido qualsiasi HTML.", + }, + "description": { + ...en.tour.options.description, + + "label": "Descrizione", + "placeholder": "Benvenuto su lowcoder!", + "tooltip": "La descrizione del passo. Qui è valido qualsiasi HTML.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Maschera", + "tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour.", + "tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Freccia", + "tooltip": "Attiva e disattiva la freccia o la sposta al centro del componente, se lo si desidera; in caso contrario, la freccia sarà sempre rivolta verso la parte superiore del componente.", + "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Tipo", + "tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour.", + }, + "target": { + ...en.tour.options.target, + + "label": "Component", + "tooltip": "Il componente su cui si vuole inserire il tooltip, oppure lasciarlo vuoto se si vuole semplicemente un modal al centro dello schermo.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI dell'immagine di copertina", + "tooltip": "Un URI per un'immagine che si desidera visualizzare con il passaggio", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Indicatori Render", + "tooltip": "Fornisce un indicatore personalizzato della fase in cui ci si trova", + "tooltipValidTypes": "Format è una funzione che accetta due argomenti, `current` e `total` e restituisce un ReactNode", + "tooltipFunctionSignatureHeader": "Firma:", + "tooltipFunctionSignature": "(corrente: numero, totale: numero) => ReactNode", + "tooltipExampleHeader": "Esempio:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Disattivare l'interazione", + "tooltip": "Disabilita l'interazione nell'area evidenziata.", + }, + "mask": { + ...en.tour.mask, + + "label": "Maschera", + "tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour. Può essere sovrascritto a livello di passo.", + "tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Posizionamento", + "tooltip": "Posizione della carta guida rispetto all'elemento di destinazione. Può essere sovrascritta a livello di passo.", + "tooltipValidOptions": "Opzioni valide", + "tooltipValidOptionsAbove": "Sopra il componente:", + "tooltipValidOptionsLeft": "A sinistra del componente:", + "tooltipValidOptionsRight": "A destra del componente:", + "tooltipValidOptionsBelow": "Sotto il componente:", + "tooltipValidOptionsOnTop": "In cima al componente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Freccia", + "tooltip": "Attiva e disattiva la freccia o la sposta in modo che punti al centro del componente, se lo si desidera, altrimenti la freccia punterà sempre vicino alla parte superiore del componente. Può essere sovrascritto a livello di passo.", + "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Tipo", + "tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour. Può essere sovrascritto a livello di passo.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Come sviluppare un plugin npm", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Utilizzare librerie di terze parti", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "Ricerca immagine", + "searchAnimation": "Ricerca Animazione", + "searchIcon": "Icona di ricerca", + "noResults": "Nessun risultato trovato.", + "buySubscriptionTitle": "Sbloccare le attività premium", + "buySubscriptionContent": "Questa risorsa è un'esclusiva degli abbonati a Media Package. Abbonati a Media Package e scarica asset di alta qualità senza limiti!", + "buySubscriptionButton": "Iscriviti ora", + }, + +}; diff --git a/translations/locales/it.js b/translations/locales/it.js index 59650d1771..9be69bc994 100644 --- a/translations/locales/it.js +++ b/translations/locales/it.js @@ -1,62 +1,4061 @@ import { en } from "./en.js"; export const it = { ...en, - cancel: "Annulla", - table: { - ...en.table, - saveChanges: "Salvare le modifiche", - cancelChanges: "Annulla modifiche", - saveChangesNotBind: "Nessun gestore eventi configurato per il salvataggio delle modifiche. Associa almeno un gestore di eventi prima del clic.", - }, - "support": { - ...en.support, - "supportTitle": "Supporto Lowcoder", - "supportContent": "Se hai domande o hai bisogno di aiuto, usa il sistema di ticket per risolvere il problema rapidamente.", - "newSupportTicket": "Nuovo Ticket di Supporto", - "ticketTitle": "Titolo", - "priority": "Priorità", - "assignee": "Assegnatario", - "status": "Stato del Ticket", - "updatedTime": "Tempo Aggiornato", - "active": "Attivo", - "inactive": "Inattivo", - "noEmail": "Nessuna E-mail", - "details": "Dettagli", - "reloadTickets": "Ricarica Ticket", - "createdDate": "Data di Creazione", - "updatedDate": "Data di Aggiornamento", - "description": "Descrizione del Problema", - "subtasks": "Sottoattività", - "subtasksProgress": "Avanzamento di tutte le Sottoattività", - "attachments": "Allegati al Problema", - "comments": "Commenti", - "addComment": "Aggiungi Commento", - "addAttachment": "Aggiungi Allegato", - "edit": "Modifica Descrizione Ticket", - "save": "Salva Descrizione Ticket", - "cancel": "Annulla", - "submitComment": "Invia Commento", - "upload": "Invia Allegato", - "selectFile": "Seleziona File", - "ticketDescriptionUpdated": "Descrizione del ticket aggiornata con successo!", - "ticketDescriptionUpdateFailed": "Aggiornamento della descrizione del ticket non riuscito.", - "writeComment": "Scrivi un commento...", - "ticketCommentAdded": "Commento aggiunto con successo!", - "ticketCommentFailed": "Impossibile aggiungere il commento.", - "ticketCommentEmpty": "Si prega di scrivere un commento prima di inviare.", - "ticketAttachmentUploaded": "Allegato caricato con successo!", - "ticketAttachmentFailed": "Caricamento dell'allegato non riuscito.", - "ticketAttachmentEmpty": "Seleziona un file da caricare.", - "ticketFetchError": "Caricamento del ticket fallito.", - "ticketNotFound": "Ticket non trovato.", - "addAttachmentFileSize": "Il file deve essere inferiore a 5MB!", - "goBack": "Torna Indietro", - "noDescription": "Nessuna descrizione disponibile.", - "createTicket": "Crea un nuovo Ticket di Supporto", - "createTicketTitlePlaceholder": "Inserisci il Titolo (max 150 caratteri)", - "createTicketDescriptionTitle": "Descrivi il tuo problema - più dettagli, meglio è:", - "createTicketDescriptionPlaceholder": "Descrivi il problema in dettaglio, includendo: 1) Passaggi per riprodurre il problema, 2) Comportamento previsto rispetto al comportamento reale, 3) Frammenti di codice, se applicabile, 4) Componenti, API o configurazioni specifiche interessate", - "createTicketSubmit": "Invia Ticket", - "createTicketInfoText": "Una volta creato il Ticket, potrai aggiungere Screenshot e Commenti nella sezione 'Dettagli'." - } + + "productName": "Lowcoder", + "productDesc": "Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è un'eccellente alternativa a Retool, Appsmith e Tooljet.", + "notSupportedBrowser": "Il browser in uso potrebbe presentare problemi di compatibilità. Per un'esperienza d'uso ottimale, utilizzare l'ultima versione di Chrome.", + "create": "Creare", + "move": "Muoversi", + "addItem": "Aggiungi", + "newItem": "Nuovo", + "copy": "Copia", + "rename": "Rinominare", + "delete": "Cancellare", + "deletePermanently": "Cancellare definitivamente", + "remove": "Rimuovere", + "recover": "Recupero", + "edit": "Modifica", + "view": "Vista", + "value": "Valore", + "data": "Dati", + "information": "Informazioni", + "success": "Il successo", + "warning": "Avvertenze", + "error": "Errore", + "reference": "Riferimento", + "text": "Testo", + "basic": "Base", + "label": "Etichetta", + "layout": "Layout", + "color": "Colore", + "form": "Forma", + "menu": "Menu", + "menuItem": "Voce di menu", + "ok": "OK", + "cancel": "Annulla", + "finish": "Finitura", + "reset": "Reset", + "icon": "Icona", + "code": "Codice", + "title": "Titolo", + "emptyContent": "Contenuto vuoto", + "more": "Di più", + "search": "Ricerca", + "back": "Indietro", + "accessControl": "Controllo degli accessi", + "copySuccess": "Copiato con successo", + "copyError": "Errore di copia", + "api": { + ...en.api, + + "publishSuccess": "Pubblicato con successo", + "recoverFailed": "Recupero fallito", + "needUpdate": "La versione attuale è obsoleta. Si prega di aggiornare alla versione più recente.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "L'editor di codice attuale non supporta la formattazione automatica.", + "fold": "Piegare", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Impostare la proprietà: {property}", + "clearDesc": "Proprietà libera: {property}", + "resetDesc": "Ripristinare la proprietà: {property} al valore predefinito", + }, + "method": { + ...en.method, + + "focus": "Impostare la messa a fuoco", + "focusOptions": "Opzioni di messa a fuoco. Vedere HTMLElement.focus()", + "blur": "Rimuovere la messa a fuoco", + "click": "Cliccare", + "select": "Seleziona tutto il testo", + "setSelectionRange": "Impostare le posizioni iniziali e finali della selezione di testo", + "selectionStart": "Indice basato su 0 del primo carattere selezionato", + "selectionEnd": "Indice basato su 0 del carattere successivo all'ultimo carattere selezionato", + "setRangeText": "Sostituire l'intervallo di testo", + "replacement": "Stringa da inserire", + "replaceStart": "Indice basato su 0 del primo carattere da sostituire", + "replaceEnd": "Indice basato su 0 del carattere dopo l'ultimo carattere da sostituire", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Il caricamento del componente non è riuscito. Controllare la configurazione.", + "clickToReload": "Fare clic per ricaricare", + "errorMsg": "Errore:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Supporta solo i tipi di immagine {types}.", + "exceedSizeError": "Le dimensioni dell'immagine non devono superare {size}.", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Non supportato", + "selectAtLeastOneComponent": "Selezionare almeno un componente", + "selectCompFirst": "Selezionare i componenti prima di copiare", + "noContainerSelected": "[Bug] Nessun contenitore selezionato", + "deleteCompsSuccess": "Eliminato con successo. Premere {undoKey} per annullare.", + "deleteCompsTitle": "Eliminazione dei componenti", + "deleteCompsBody": "Siete sicuri di voler eliminare {compNum} componenti selezionati?", + "cutCompsSuccess": "Tagliare con successo. Premere {pasteKey} per incollare o {undoKey} per annullare.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Query di dati nella vostra applicazione", + "globals": "Variabili di dati globali", + "propTipsArr": "{num} Articoli", + "propTips": "{num} Chiavi", + "propTipArr": "{num} Oggetto", + "propTip": "{num} Chiave", + "stateTab": "Stato", + "settingsTab": "Impostazioni", + "toolbarTitle": "Individualizzazione", + "toolbarPreload": "Script e stili", + "components": "Componenti attivi", + "modals": "modali in-app", + "expandTip": "Fare clic per mostrare i dati di {component}", + "collapseTip": "Fare clic per nascondere i dati di {component}.", + "layers": "Strati", + "activatelayers": "Utilizzare i livelli dinamici", + "selectedComponents": "Componenti selezionati...", + "displayComponents": "controllo Display", + "lockComponents": "controllo Posizione", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Data Queries", + "run": "Correre", + "noSelectedQuery": "Nessuna query selezionata", + "metaData": "Metadati della fonte di dati", + "noMetadata": "Nessun metadato disponibile", + "metaSearchPlaceholder": "Ricerca metadati", + "allData": "Tutti i tavoli", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Proprietà", + "noSelectedComps": "Nessun componente selezionato. Fare clic su un componente per visualizzarne le proprietà.", + "createTab": "Inserire", + "searchPlaceHolder": "Ricerca di componenti o moduli", + "uiComponentTab": "Componenti", + "extensionTab": "Estensioni", + "modulesTab": "Moduli", + "moduleListTitle": "Moduli", + "pluginListTitle": "Plugin", + "emptyModules": "I moduli sono Mikro-App riutilizzabili. Possono essere incorporati nella vostra App.", + "searchNotFound": "Non riuscite a trovare il componente giusto?", + "emptyPlugins": "Nessun plugin aggiunto", + "contactUs": "Contatto", + "issueHere": "qui.", + }, + "prop": { + ...en.prop, + + "expand": "Espandi", + "columns": "Colonne", + "videokey": "Chiave video", + "rowSelection": "Selezione della riga", + "toolbar": "Barra degli strumenti", + "pagination": "Paginazione", + "logo": "Logo", + "style": "Stile", + "inputs": "Ingressi", + "meta": "Metadati", + "data": "Dati", + "hide": "Nascondere", + "loading": "Caricamento", + "disabled": "Disabili", + "placeholder": "Segnaposto", + "showClear": "Mostra il pulsante Cancella", + "showSearch": "Ricercabile", + "defaultValue": "Valore predefinito", + "required": "Campo obbligatorio", + "readOnly": "Solo lettura", + "readOnlyTooltip": "I componenti di sola lettura appaiono normali ma non possono essere modificati.", + "minimum": "Minimo", + "maximum": "Massimo", + "regex": "Regex", + "minLength": "Lunghezza minima", + "maxLength": "Lunghezza massima", + "height": "Altezza", + "width": "Larghezza", + "selectApp": "Selezionare l'applicazione", + "showCount": "Mostra il conteggio", + "textType": "Tipo di testo", + "customRule": "Regola personalizzata", + "customRuleTooltip": "Una stringa non vuota indica un errore; vuota o nulla significa che la convalida è stata superata. Esempio:", + "manual": "Manuale", + "map": "Mappa", + "json": "JSON", + "use12Hours": "Utilizzare il formato a 12 ore", + "hourStep": "Ora Passo", + "minuteStep": "Passo di un minuto", + "secondStep": "Secondo passo", + "minDate": "Data minima", + "maxDate": "Data massima", + "minTime": "Tempo minimo", + "maxTime": "Tempo massimo", + "type": "Tipo", + "showLabel": "Mostra etichetta", + "showHeader": "Mostra intestazione", + "showBody": "Mostra il corpo", + "showSider": "Mostra Sider", + "innerSider": "Pagine interne", + "showFooter": "Mostra piè di pagina", + "maskClosable": "Fare clic su Fuori per chiudere", + "toggleClose": "Abilita il pulsante di chiusura", + "showMask": "Mostra maschera", + "textOverflow": "Overflow del testo", + "scrollbar": "Mostra barre di scorrimento", + "siderScrollbar": "Mostra le barre di scorrimento in Sider", + "siderRight": "Show sider a destra", + "siderWidth": "Larghezza Sider", + "siderWidthTooltip": "La larghezza del cursore supporta percentuali (%) e pixel (px).", + "siderCollapsedWidth": "Sider Larghezza collassata", + "siderCollapsedWidthTooltip": "La larghezza collassata del cursore supporta percentuali (%) e pixel (px).", + "siderCollapsible": "Sider pieghevole", + "siderCollapsed": "Sider è crollato", + "contentScrollbar": "Mostra le barre di scorrimento nel contenuto", + "appID": "Id dell'applicazione", + "showApp": "Mostrare un'applicazione nell'area dei contenuti", + "showAppTooltip": "È possibile visualizzare intere applicazioni nell'area dei contenuti. Si tenga presente che per i moduli non sono supportati gli eventi e i metodi di input e output.", + "baseURL": "API Base URL", + "horizontal": "Orizzontale", + "minHorizontalWidth": "Larghezza orizzontale minima", + "component": "Identificatori di componenti propri", + "className": "Nome della classe CSS", + "dataTestId": "ID individuale", + "preventOverwriting": "Impedire la sovrascrittura degli stili", + "color": "Colore", + "horizontalGridCells": "Celle della griglia orizzontale", + "verticalGridCells": "Celle della griglia verticale", + "showHorizontalScrollbar": "Show Horizontal Scrollbar", + "showVerticalScrollbar": "Mostra barra di scorrimento verticale", + "timeZone": "Fuso orario", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Auto", + "fixed": "Fisso", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Passaggio del mouse", + "wrap": "Avvolgimento", + }, + "labelProp": { + ...en.labelProp, + + "text": "Etichetta", + "tooltip": "Tooltip", + "position": "Posizione", + "collapse": "Crollo", + "left": "A sinistra", + "right": "Diritto", + "top": "In alto", + "align": "Allineamento", + "width": "Larghezza", + "widthTooltip": "La larghezza dell'etichetta supporta le percentuali (%) e i pixel (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Gestori di eventi", + "emptyEventHandlers": "Nessun gestore di eventi", + "incomplete": "Selezione incompleta", + "inlineEventTitle": "Su {eventName}", + "event": "Evento", + "action": "Azione", + "noSelect": "Nessuna selezione", + "runQuery": "Run a Data Query", + "selectQuery": "Selezionare la query di dati", + "controlComp": "Controllo di un componente", + "runScript": "Eseguire JavaScript", + "runScriptPlaceHolder": "Scrivere qui il codice", + "component": "Component", + "method": "Metodo", + "setTempState": "Impostare un valore di Stato temporaneo", + "state": "Stato", + "triggerModuleEvent": "Attivare un evento del modulo", + "moduleEvent": "Modulo Evento", + "goToApp": "Vai a un'altra applicazione", + "queryParams": "Parametri della query", + "hashParams": "Parametri Hash", + "showNotification": "Mostra una notifica", + "text": "Testo", + "level": "Livello", + "duration": "Durata", + "notifyDurationTooltip": "L'unità di tempo può essere 's' (secondo, default) o 'ms' (millisecondo). La durata massima è di {max} secondi", + "goToURL": "Aprire un URL", + "openInNewTab": "Aprire in una nuova scheda", + "copyToClipboard": "Copiare un valore negli Appunti", + "copyToClipboardValue": "Valore", + "export": "Esportazione dei dati", + "exportNoFileType": "Nessuna selezione (opzionale)", + "fileName": "Nome del file", + "fileNameTooltip": "Includere l'estensione per specificare il tipo di file, ad esempio 'image.png'.", + "fileType": "Tipo di file", + "condition": "Eseguire solo quando...", + "conditionTooltip": "Eseguire il gestore dell'evento solo quando la condizione è valutata 'true'.", + "debounce": "Debounce per", + "throttle": "Acceleratore per", + "slowdownTooltip": "Utilizzare il debounce o il throttle per controllare la frequenza di attivazione delle azioni. L'unità di tempo può essere 'ms' (millisecondo, default) o 's' (secondo).", + "notHandledError": "Non gestito", + "currentApp": "Attuale", + "inputEventHandlers": "Gestori di eventi di ingresso", + "inputEventHandlersDesc": "Gestori di eventi relativi all'input dell'utente", + "buttonEventHandlers": "Gestori di eventi dei pulsanti", + "buttonEventHandlersDesc": "Gestori di eventi relativi ai clic dei pulsanti", + "changeEventHandlers": "Modifica dei gestori di eventi", + "changeEventHandlersDesc": "Gestori di eventi relativi a modifiche del valore", + "editedEventHandlers": "Modifica dei gestori di eventi", + "editedEventHandlersDesc": "Gestori di eventi relativi allo stato modificato degli elementi", + "clickEventHandlers": "Gestori di eventi di clic", + "clickEventHandlersDesc": "Gestori di eventi relativi ai clic", + "keyDownEventHandlers": "Gestori di eventi di abbassamento dei tasti", + "keyDownEventHandlersDesc": "Gestori di eventi relativi agli eventi di abbassamento dei tasti", + "checkboxEventHandlers": "Gestori di eventi di caselle di controllo", + "checkboxEventHandlersDesc": "Gestori di eventi relativi alle modifiche delle caselle di controllo", + "dragEventHandlers": "Gestori di eventi di trascinamento", + "dragEventHandlersDesc": "Gestori di eventi relativi agli eventi di trascinamento", + "elementEventHandlers": "Gestori di elementi", + "elementEventHandlersDesc": "Gestori di eventi relativi agli eventi generici degli elementi di dati", + "mediaEventHandlers": "Gestori di eventi multimediali", + "mediaEventHandlersDesc": "Gestori di eventi relativi agli eventi multimediali", + "scannerEventHandlers": "Gestori di eventi dello scanner", + "scannerEventHandlersDesc": "Gestori di eventi relativi agli eventi dello scanner", + "chartEventHandlers": "Gestori di eventi del grafico", + "chartEventHandlersDesc": "Gestori di eventi relativi agli eventi dei grafici", + "geoMapEventHandlers": "Gestori di eventi della mappa geografica", + "geoMapEventHandlersDesc": "Gestori di eventi relativi agli eventi delle mappe geografiche", + "stepEventHandlers": "Gestori di eventi di passo", + "stepEventHandlersDesc": "Gestori di eventi relativi agli eventi dell'interfaccia utente a gradini", + "shareEventHandlers": "Condividere i gestori di eventi", + "shareEventHandlersDesc": "Gestori di eventi correlati agli eventi di condivisione", + "selectEventHandlers": "Selezionare i gestori di eventi", + "selectEventHandlersDesc": "Gestori di eventi correlati a Seleziona eventi", + "meetingEventHandlers": "Gestori di eventi di riunione", + "meetingEventHandlersDesc": "Gestori di eventi relativi agli eventi di riunione", + "collaborationEventHandlers": "Gestori di eventi di collaborazione", + "collaborationEventHandlersDesc": "Gestori di eventi relativi agli eventi di collaborazione", + "set": "Set", + "clear": "Libero", + "reset": "Reset", + "messageType": "Tipo di messaggio", + "placement": "Posizionamento", + "description": "Descrizione", + }, + "event": { + ...en.event, + + "submit": "Invia", + "submitDesc": "Trigger su Submit", + "change": "Cambiamento", + "changeDesc": "Trigger su variazioni di valore", + "focus": "Focus", + "focusDesc": "Trigger su Focus", + "blur": "Sfocatura", + "blurDesc": "Trigger su Blur", + "click": "Cliccare", + "clickDesc": "Trigger su clic", + "doubleClick": "Doppio clic", + "doubleClickDesc": "Trigger su doppio clic", + "rightClick": "Cliccare con il tasto destro del mouse", + "rightClickDesc": "Trigger su clic destro", + "keyDown": "Tasto giù", + "keyDownDesc": "Trigger a tasto abbassato", + "select": "Selezionare", + "selectDesc": "Trigger su selezione", + "checked": "Controllato", + "checkedDesc": "Trigger quando una casella di controllo è selezionata", + "unchecked": "Non controllato", + "uncheckedDesc": "Trigger quando una casella di controllo è deselezionata", + "drag": "Trascinamento", + "dragDesc": "Trigger su trascinamento", + "drop": "Goccia", + "dropDesc": "Trigger su caduta", + "open": "Aperto", + "openDesc": "Trigger all'apertura", + "mute": "Muto", + "muteDesc": "Trigger su Mute di un microfono", + "unmute": "Disattivare l'audio", + "unmuteDesc": "Trigger di disattivazione di un microfono", + "showCamera": "Mostra telecamera", + "showCameraDesc": "Si attiva quando Show Camera è attivo", + "hideCamera": "Nascondere la telecamera", + "hideCameraDesc": "Si attiva quando Show Camera è disattivato", + "shareScreen": "Schermo di condivisione", + "shareScreenDesc": "Trigger nella schermata di condivisione", + "shareScreenEnd": "Condividi schermo Fine", + "shareScreenEndDesc": "Trigger su Share Screen End", + "shareControl": "Controllo delle azioni", + "shareControlDesc": "Trigger sul controllo delle azioni", + "shareControlEnd": "Controllo delle azioni Fine", + "shareControlEndDesc": "Trigger su Share Control End", + "shareContent": "Condividi il contenuto", + "shareContentDesc": "Trigger su Condividi contenuto", + "shareContentEnd": "Condividi il contenuto Fine", + "shareContentEndDesc": "Trigger su Share Content End", + "stopShare": "Stop alla quota", + "stopShareDesc": "Trigger su Stop Share", + "meetingStart": "Inizio della riunione", + "meetingStartDesc": "Trigger all'avvio della riunione", + "meetingEnd": "Fine della riunione", + "meetingEndDesc": "Trigger a fine riunione", + "meetingJoin": "Riunione Partecipa", + "meetingJoinDesc": "Trigger all'iscrizione alla riunione", + "meetingLeave": "Congedo per riunioni", + "meetingLeaveDesc": "Fattori scatenanti del congedo per riunioni", + "play": "Gioco", + "playDesc": "Trigger in gioco", + "pause": "Pausa", + "pauseDesc": "Trigger in pausa", + "ended": "Terminato", + "endedDesc": "Trigger su Ended", + "step": "Passo", + "stepDesc": "Trigger su Step", + "next": "Avanti", + "nextDesc": "Trigger su Next", + "finished": "Finito", + "finishedDesc": "Trigger su Finito", + "saved": "Salvati", + "savedDesc": "Trigger quando un elemento viene salvato", + "edited": "Modificato", + "editedDesc": "Trigger quando un elemento viene modificato", + "geoMapMove": "Spostamento della mappa geografica", + "geoMapMoveDesc": "Trigger quando gli utenti spostano la mappa geografica", + "geoMapZoom": "Zoom mappa geografica", + "geoMapZoomDesc": "Trigger quando gli utenti ingrandiscono la mappa", + "geoMapSelect": "Selezione della mappa geografica", + "geoMapSelectDesc": "Trigger quando gli utenti selezionano un elemento sulla mappa geografica", + "scannerSuccess": "Successo dello scanner", + "scannerSuccessDesc": "Si attiva quando uno scanner esegue una scansione con successo", + "scannerError": "Errore dello scanner", + "scannerErrorDesc": "Si attiva quando uno scanner non riesce a eseguire la scansione", + "chartZoom": "Zoom del grafico", + "chartZoomDesc": "Trigger sullo zoom del grafico", + "chartHover": "Grafico Hover", + "chartHoverDesc": "Trigger al passaggio del mouse sul grafico", + "chartSelect": "Selezione del grafico", + "chartSelectDesc": "Trigger su selezione del grafico", + "chartDeselect": "Deselezione del grafico", + "chartDeselectDesc": "Deselezione dei trigger sul grafico", + "close": "Chiudere", + "closeDesc": "Trigger su chiusura", + "parse": "Parse", + "parseDesc": "Trigger su Parse", + "success": "Il successo", + "successDesc": "I trigger del successo", + "delete": "Cancellare", + "deleteDesc": "Trigger su cancellazione", + "mention": "Menzione", + "mentionDesc": "Trigger su menzione", + "search": "Ricerca", + "searchDesc": "Trigger di ricerca", + "selectedChange": "Cambio di selezione", + "selectedChangeDesc": "Trigger su selezione modificata", + "clickExtra": "Fare clic su Azione", + "clickExtraDesc": "Trigger al clic su un elemento extra", + "start": "Inizio", + "startDesc": "Trigger all'avvio", + "resume": "Il curriculum", + "resumeDesc": "Trigger sul curriculum", + "countdown": "Conto alla rovescia", + "countdownDesc": "Trigger al termine del conto alla rovescia", + "reset": "Fine del reset", + "resetDesc": "Trigger su timer di reset", + "refresh": "Aggiornare", + "refreshDesc": "Trigger su aggiornamento", + }, + "style": { + ...en.style, + + "boxShadowColor": "Colore dell'ombra", + "boxShadow": "Box Shadow", + "opacity": "Opacità", + "animation": "Animazione", + "animationIterationCount": "Conteggio delle iterazioni dell'animazione", + "animationDelay": "Ritardo dell'animazione", + "animationDuration": "Durata dell'animazione", + "resetTooltip": "Azzeramento degli stili. Deselezionare il campo di immissione per reimpostare uno stile individuale.", + "textColor": "Colore del testo", + "contrastText": "Colore del testo a contrasto", + "generated": "Generato", + "customize": "Personalizzare", + "staticText": "Testo statico", + "accent": "Accento", + "validate": "Messaggio di convalida", + "border": "Colore del bordo", + "borderRadius": "Raggio del bordo", + "borderWidth": "Larghezza del bordo", + "borderStyle": "Stile del bordo", + "background": "Colore di sfondo", + "headerBackground": "Colore di sfondo dell'intestazione", + "siderBackground": "Colore di sfondo di Sider", + "footerBackground": "Colore di sfondo del piè di pagina", + "fill": "Riempimento", + "track": "Traccia", + "links": "Collegamenti", + "thumb": "Pollice", + "thumbBorder": "Bordo del pollice", + "checked": "Controllato", + "unchecked": "Non controllato", + "handle": "Maniglia", + "tags": "Tag", + "tagsText": "Tag Testo", + "multiIcon": "Icona Multiselezione", + "tabText": "Testo della scheda", + "tabAccent": "Scheda Accento", + "checkedBackground": "Colore di sfondo controllato", + "uncheckedBackground": "Colore di sfondo non controllato", + "uncheckedBorder": "Colore del bordo non selezionato", + "indicatorBackground": "Colore di sfondo dell'indicatore", + "tableCellText": "Testo cellulare", + "selectedRowBackground": "Colore di sfondo della riga selezionata", + "hoverRowBackground": "Colore di sfondo della riga Hover", + "hoverBackground": "Colore di sfondo Hover", + "textTransform": "Trasformazione del testo", + "textDecoration": "Decorazione del testo", + "alternateRowBackground": "Colore di sfondo della riga alternativa", + "tableHeaderBackground": "Colore di sfondo dell'intestazione", + "tableHeaderText": "Testo dell'intestazione", + "toolbarBackground": "Colore di sfondo della barra degli strumenti", + "toolbarText": "Testo della barra degli strumenti", + "pen": "Penna", + "footerIcon": "Icona Piè di pagina", + "tips": "Suggerimenti", + "margin": "Margine", + "padding": "Imbottitura", + "marginLeft": "Margine sinistro", + "marginRight": "Margine destro", + "marginTop": "Margine superiore", + "marginBottom": "Margine inferiore", + "containerHeaderPadding": "Imbottitura della testata", + "containerFooterPadding": "Imbottitura del piè di pagina", + "containerSiderPadding": "Imbottitura Sider", + "containerBodyPadding": "Imbottitura del corpo", + "minWidth": "Larghezza minima", + "aspectRatio": "Rapporto d'aspetto", + "text": "Testo", + "textSize": "Dimensione del testo", + "textWeight": "Peso del testo", + "fontFamily": "Famiglia di caratteri", + "fontStyle": "Stile del carattere", + "backgroundImage": "Immagine di sfondo", + "backgroundImageRepeat": "Ripetizione dello sfondo", + "backgroundImageSize": "Dimensione dello sfondo", + "backgroundImagePosition": "Posizione di fondo", + "backgroundImageOrigin": "Origine dello sfondo", + "headerBackgroundImage": "Immagine di sfondo", + "headerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", + "headerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", + "headerBackgroundImagePosition": "Posizione dell'immagine di sfondo", + "headerBackgroundImageOrigin": "Origine dell'immagine di sfondo", + "footerBackgroundImage": "Immagine di sfondo", + "footerBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo", + "footerBackgroundImageSize": "Dimensioni dell'immagine di sfondo", + "footerBackgroundImagePosition": "Posizione dell'immagine di sfondo", + "footerBackgroundImageOrigin": "Origine dell'immagine di sfondo", + "rotation": "Rotazione", + "alternateBackground": "Colore di sfondo alternativo", + "headerText": "Colore del testo dell'intestazione", + "labelColor": "Colore dell'etichetta", + "label": "Colore dell'etichetta", + "lineHeight": "Altezza della linea", + "subTitleColor": "Colore del sottotitolo", + "titleText": "Titolo Colore", + "success": "Colore di successo", + "siderBackgroundImage": "Immagine di sfondo di Sider", + "siderBackgroundImageRepeat": "Ripetizione dell'immagine di sfondo di Sider", + "siderBackgroundImageSize": "Dimensioni dell'immagine di sfondo di Sider", + "siderBackgroundImagePosition": "Posizione dell'immagine di sfondo Sider", + "siderBackgroundImageOrigin": "Origine dell'immagine di sfondo Sider", + "activeBackground": "Colore di sfondo attivo", + "labelBackground": "Colore di sfondo dell'etichetta", + + "radiusTip": "Specifica il raggio degli angoli dell'elemento. Esempio: 5px, 50% o 1em.", + "gapTip": "Specifica lo spazio tra righe e colonne in un contenitore a griglia o flessibile. Esempio: 10px, 1rem o 5%.", + "cardRadiusTip": "Definisce il raggio degli angoli per i componenti della carta. Esempio: 10px, 15px.", + "borderWidthTip": "Specifica la larghezza del bordo dell'elemento. Esempio: 1px, 0.5em o sottile.", + "borderStyleTip": "Imposta lo stile del bordo. Esempio: solido, tratteggiato, puntinato o nessuno.", + "marginTip": "Definisce il margine esterno intorno a un elemento. Esempio: 10px, 2em o auto. Può essere combinato: 0px 20px o separato per 4 direzioni: 0px 1px 5px 2px.", + "directionTip": "Specifica la direzione del layout. Esempio: row, column o row-reverse.", + "detailSizeTip": "Definisce la dimensione di dettagli specifici nel layout. Esempio: 10px, 2em o 80%.", + "chartOpacityTip": "Specifica l'opacità del grafico. Esempio: 1 (opaco), 0.5 (50% trasparente).", + "chartBoxShadowTip": "Definisce l'ombra proiettata dal grafico. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Imposta lo stile del bordo del grafico. Esempio: solido, tratteggiato, puntinato.", + "chartBorderRadiusTip": "Specifica il raggio degli angoli del bordo del grafico. Esempio: 10px, 20%.", + "chartBorderWidthTip": "Specifica la larghezza del bordo del grafico. Esempio: 2px, 0.5em.", + "chartTextSizeTip": "Specifica la dimensione del testo del grafico. Esempio: 16px, 1em, 120%.", + "chartTextWeightTip": "Specifica lo spessore del testo del grafico. Esempio: normale, grassetto, o 700.", + "chartFontFamilyTip": "Specifica il carattere tipografico del testo del grafico. Esempio: Arial, Helvetica, o 'Times New Roman'.", + "chartFontStyleTip": "Specifica lo stile del carattere del testo del grafico. Esempio: normale, corsivo o obliquo.", + "animationIterationCountTip": "Definisce quante volte deve essere eseguita un'animazione. Esempio: infinito, 1, o 3.", + "opacityTip": "Imposta il livello di trasparenza dell'elemento. Esempio: 1 (opaco), 0.5 (50% trasparente), 0 (invisibile).", + "boxShadowColorTip": "Definisce il colore dell'ombra del box. Esempio: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Imposta il colore di sfondo del grafico. Esempio: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Definisce i colori del gradiente per lo sfondo del grafico. Esempio: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Specifica il colore dell'ombra del grafico. Esempio: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Definisce il colore del bordo del grafico. Esempio: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Imposta il colore del testo del grafico. Esempio: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Definisce l'ombra proiettata da un elemento. Esempio: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Specifica il ritardo prima dell'inizio dell'animazione. Esempio: 1s, 500ms, 0.", + "animationDurationTip": "Imposta la durata dell'animazione. Esempio: 2s, 3s, 500ms.", + "paddingTip": "Definisce lo spazio interno all'interno di un elemento. Esempio: 10px, 2em, 5%. Può essere combinato: 0px 20px o separato per tutte e 4 le direzioni: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Definisce lo spazio interno per l'intestazione del contenitore. Esempio: 10px, 1rem.", + "containerSiderPaddingTip": "Definisce lo spazio interno per la barra laterale del contenitore. Esempio: 8px, 1em.", + "containerFooterPaddingTip": "Definisce lo spazio interno per il piè di pagina del contenitore. Esempio: 12px, 1rem.", + "containerBodyPaddingTip": "Definisce lo spazio interno per il corpo del contenitore. Esempio: 15px, 2em.", + "textSizeTip": "Specifica la dimensione del testo. Esempio: 14px, 1.2em, 110%.", + "textWeightTip": "Definisce lo spessore del testo. Esempio: normale, grassetto, 400.", + "fontFamilyTip": "Specifica il carattere tipografico del testo. Esempio: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Definisce la decorazione del testo. Esempio: sottolineato, barrato, nessuno.", + "textTransformTip": "Imposta la capitalizzazione del testo. Esempio: maiuscolo, minuscolo, prima lettera maiuscola.", + "fontStyleTip": "Definisce lo stile del carattere del testo. Esempio: normale, corsivo, obliquo.", + "backgroundImageTip": "Specifica l'immagine di sfondo di un elemento. Esempio: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Specifica l'immagine di sfondo per l'intestazione. Esempio: url('header.jpg').", + "footerBackgroundImageTip": "Specifica l'immagine di sfondo per il piè di pagina. Esempio: url('footer.jpg').", + "backgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo. Esempio: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo dell'intestazione. Esempio: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Definisce come viene ripetuta l'immagine di sfondo del piè di pagina. Esempio: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Definisce la dimensione dell'immagine di sfondo. Esempio: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Imposta la posizione dell'immagine di sfondo. Esempio: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo. Esempio: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo dell'intestazione. Esempio: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Definisce l'area in cui è posizionata l'immagine di sfondo del piè di pagina. Esempio: padding-box, border-box, content-box.", + "rotationTip": "Specifica l'angolo di rotazione dell'elemento. Esempio: 45deg, 90deg, -180deg.", + "lineHeightTip": "Definisce l'altezza di una riga di testo. Esempio: 1.5, 2, 120%." + + }, + "export": { + ...en.export, + + "hiddenDesc": "Se vero, il componente è nascosto", + "disabledDesc": "Se vero, il componente è disattivato e non interattivo.", + "visibleDesc": "Se vero, il componente è visibile", + "inputValueDesc": "Valore attuale dell'ingresso", + "invalidDesc": "Indica se il valore non è valido", + "placeholderDesc": "Testo segnaposto quando non è impostato alcun valore", + "requiredDesc": "Se vero, è richiesto un valore valido", + "submitDesc": "Invia il modulo", + "richTextEditorValueDesc": "Valore attuale dell'editor", + "richTextEditorReadOnlyDesc": "Se true, l'editor è di sola lettura", + "richTextEditorHideToolBarDesc": "Se vero, la barra degli strumenti viene nascosta", + "jsonEditorDesc": "Dati JSON correnti", + "sliderValueDesc": "Valore attualmente selezionato", + "sliderMaxValueDesc": "Valore massimo del cursore", + "sliderMinValueDesc": "Valore minimo del cursore", + "sliderStartDesc": "Valore del punto di partenza selezionato", + "sliderEndDesc": "Valore del punto finale selezionato", + "ratingValueDesc": "Valutazione attualmente selezionata", + "ratingMaxDesc": "Valore nominale massimo", + "datePickerValueDesc": "Data attualmente selezionata", + "datePickerFormattedValueDesc": "Formattazione della data selezionata", + "datePickerTimestampDesc": "Timestamp della data selezionata", + "dateRangeStartDesc": "Data di inizio dell'intervallo", + "dateRangeEndDesc": "Data di fine dell'intervallo", + "dateRangeStartTimestampDesc": "Timestamp della data di inizio", + "dateRangeEndTimestampDesc": "Timestamp della data finale", + "dateRangeFormattedValueDesc": "Intervallo di date formattato", + "dateRangeFormattedStartValueDesc": "Data di inizio formattata", + "dateRangeFormattedEndValueDesc": "Data finale formattata", + "timePickerValueDesc": "L'ora attualmente selezionata", + "timePickerFormattedValueDesc": "Formattazione dell'ora selezionata", + "timeRangeStartDesc": "Ora di inizio dell'intervallo", + "timeRangeEndDesc": "Ora di fine dell'intervallo", + "timeRangeFormattedValueDesc": "Intervallo di tempo formattato", + "timeRangeFormattedStartValueDesc": "Ora di inizio formattata", + "timeRangeFormattedEndValueDesc": "Ora finale formattata", + "timeZone": "Fuso orario", + "timeZoneDesc": "Fuso orario della data selezionata", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Inserire un indirizzo e-mail valido", + "url": "Inserire un URL valido", + "regex": "Corrispondere al modello specificato", + "maxLength": "Troppi caratteri, corrente: {length}, massimo: {maxLength}", + "minLength": "Caratteri insufficienti, corrente: {length}, minimo: {minLength}", + "maxValue": "Il valore supera il massimo, corrente: {value}, massimo: {max}", + "minValue": "Valore inferiore al minimo, corrente: {value}, minimo: {min}", + "maxTime": "Il tempo supera il massimo, corrente: {time}, massimo: {maxTime}", + "minTime": "Tempo inferiore al minimo, corrente: {time}, minimo: {minTime}", + "maxDate": "La data supera il massimo, attuale: {date}, massimo: {maxDate}", + "minDate": "Data inferiore al minimo, attuale: {date}, minimo: ___POSSESSORE1___", + }, + "query": { + ...en.query, + + "noQueries": "Non sono disponibili query di dati.", + "queryTutorialButton": "Visualizzare i documenti di {value}", + "datasource": "Le vostre fonti di dati", + "newDatasource": "Nuova fonte di dati", + "generalTab": "Generale", + "notificationTab": "Notifica", + "advancedTab": "Avanzato", + "showFailNotification": "Mostra notifica in caso di fallimento", + "failCondition": "Condizioni di guasto", + "failConditionTooltip1": "Personalizzare le condizioni di guasto e le relative notifiche.", + "failConditionTooltip2": "Se una condizione risulta vera, la query viene contrassegnata come fallita e viene attivata la notifica corrispondente.", + "showSuccessNotification": "Mostra la notifica di successo", + "successMessageLabel": "Messaggio di successo", + "successMessage": "Esecuzione riuscita", + "notifyDuration": "Durata", + "notifyDurationTooltip": "Durata della notifica. L'unità di tempo può essere 's' (secondo, valore predefinito) o 'ms' (millisecondo). Il valore predefinito è {default}s. Il massimo è {max}s.", + "successMessageWithName": "{name} esecuzione riuscita", + "failMessageWithName": "{name} esecuzione fallita: {result}", + "showConfirmationModal": "Mostra la maschera di conferma prima dell'esecuzione", + "confirmationMessageLabel": "Messaggio di conferma", + "confirmationMessage": "È sicuro di voler eseguire questa query di dati?", + "newQuery": "New Data Query", + "newFolder": "Nuova cartella", + "recentlyUsed": "Usato di recente", + "folder": "Cartella", + "folderNotEmpty": "La cartella non è vuota", + "dataResponder": "Data Responder", + "tempState": "Stato temporaneo", + "transformer": "Trasformatore", + "quickRestAPI": "Query REST", + "quickStreamAPI": "Interrogazione del flusso", + "quickGraphql": "Query GraphQL", + "lowcoderAPI": "API Lowcoder", + "executeJSCode": "Eseguire il codice JavaScript", + "importFromQueryLibrary": "Importazione da Query Library", + "importFromFile": "Importazione da file", + "triggerType": "Attivato quando...", + "triggerTypeAuto": "Quando gli input cambiano o dopo il caricamento dell'applicazione (pagina)", + "triggerTypePageLoad": "Dopo il caricamento dell'applicazione (pagina)", + "triggerTypeManual": "Solo quando lo attivi manualmente", + "triggerTypeInputChange": "Quando cambiano gli input", + "triggerTypeQueryExec": "Dopo l'esecuzione della query", + "triggerTypeTimeout": "Dopo il caricamento dell'applicazione (pagina) e il timeout", + "delayTime": "Tempo di ritardo", + "chooseDataSource": "Scegliere l'origine dei dati", + "method": "Metodo", + "updateExceptionDataSourceTitle": "Aggiornamento dell'origine dati non funzionante", + "updateExceptionDataSourceContent": "Aggiornare la query seguente con la stessa origine dati in errore:", + "update": "Aggiornamento", + "disablePreparedStatement": "Disabilitare le dichiarazioni preparate", + "disablePreparedStatementTooltip": "La disabilitazione delle istruzioni preparate può generare SQL dinamico, ma aumenta il rischio di SQL injection.", + "timeout": "Timeout dopo", + "timeoutTooltip": "Unità predefinita: ms. Unità di input supportate: ms, s. Valore predefinito: {defaultSeconds} secondi. Valore massimo: {maxSeconds} secondi. Ad esempio, 300 (cioè 300 ms), 800 ms, 5 s.", + "periodic": "Eseguire periodicamente questa query di dati", + "periodicTime": "Periodo", + "periodicTimeTooltip": "Periodo tra esecuzioni successive. Unità predefinita: ms. Unità di input supportate: ms, s. Valore minimo: 100 ms. L'esecuzione periodica è disabilitata per valori inferiori a 100ms. Ad esempio, 300 (cioè 300ms), 800ms, 5s.", + "cancelPrevious": "Ignorare i risultati delle precedenti esecuzioni non completate", + "cancelPreviousTooltip": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e queste esecuzioni ignorate non attivano l'elenco di eventi della query.", + "dataSourceStatusError": "Se viene attivata una nuova esecuzione, il risultato delle esecuzioni precedenti non completate viene ignorato e le esecuzioni ignorate non attivano l'elenco di eventi della query.", + "success": "Il successo", + "fail": "Fallimento", + "successDesc": "Attivato quando l'esecuzione ha successo", + "failDesc": "Attivato quando l'esecuzione fallisce", + "fixedDelayError": "Query non eseguita", + "execSuccess": "Esecuzione riuscita", + "execFail": "Esecuzione fallita", + "execIgnored": "I risultati di questa interrogazione sono stati ignorati", + "deleteSuccessMessage": "Eliminato con successo. È possibile utilizzare {undoKey} per annullare l'operazione.", + "dataExportDesc": "Dati ottenuti dalla query corrente", + "codeExportDesc": "Codice di stato dell'interrogazione corrente", + "successExportDesc": "Se la query corrente è stata eseguita con successo", + "messageExportDesc": "Informazioni restituite dalla query corrente", + "extraExportDesc": "Altri dati nella query corrente", + "isFetchingExportDesc": "È la query corrente nella richiesta", + "runTimeExportDesc": "Tempo di esecuzione della query corrente (ms)", + "latestEndTimeExportDesc": "Ultimo tempo di funzionamento", + "triggerTypeExportDesc": "Tipo di innesco", + "chooseResource": "Scegliere una risorsa", + "createDataSource": "Creare una nuova origine dati", + "editDataSource": "Modifica", + "datasourceName": "Nome", + "datasourceNameRuleMessage": "Inserire un nome di origine dati", + "generalSetting": "Impostazioni generali", + "advancedSetting": "Impostazioni avanzate", + "port": "Porto", + "portRequiredMessage": "Inserire una porta", + "portErrorMessage": "Inserire una porta corretta", + "connectionType": "Tipo di connessione", + "regular": "Regolare", + "host": "Ospite", + "hostRequiredMessage": "Inserire un nome di dominio host o un indirizzo IP", + "userName": "Nome utente", + "password": "Password", + "encryptedServer": "-------- Crittografato sul lato server --------", + "uriRequiredMessage": "Inserire un URI", + "urlRequiredMessage": "Inserire un URL", + "uriErrorMessage": "Inserire un URI corretto", + "urlErrorMessage": "Inserire un URL corretto", + "httpRequiredMessage": "Inserire http:// o https://", + "databaseName": "Nome del database", + "databaseNameRequiredMessage": "Inserire il nome del database", + "useSSL": "Utilizzare SSL", + "userNameRequiredMessage": "Inserire il proprio nome", + "passwordRequiredMessage": "Inserire la password", + "authentication": "Autenticazione", + "authenticationType": "Tipo di autenticazione", + "sslCertVerificationType": "Verifica del certificato SSL", + "sslCertVerificationTypeDefault": "Verifica della certificazione CA", + "sslCertVerificationTypeSelf": "Verifica della certificazione autofirmata", + "sslCertVerificationTypeDisabled": "Disabili", + "selfSignedCert": "Certificato autofirmato", + "selfSignedCertRequireMsg": "Inserire il proprio certificato", + "enableTurnOffPreparedStatement": "Abilita l'alternanza delle dichiarazioni preparate per le query", + "enableTurnOffPreparedStatementTooltip": "È possibile attivare o disattivare le istruzioni preparate nella scheda Avanzate della query.", + "serviceName": "Nome del servizio", + "serviceNameRequiredMessage": "Inserire il nome del servizio", + "useSID": "Utilizzare il SID", + "connectSuccessfully": "Connessione riuscita", + "saveSuccessfully": "Salvato con successo", + "database": "Database", + "cloudHosting": "Lowcoder ospitato nel cloud non può accedere ai servizi locali utilizzando 127.0.0.1 o localhost. Provare a collegarsi a fonti di dati della rete pubblica o utilizzare un reverse proxy per i servizi privati.", + "notCloudHosting": "Per la distribuzione ospitata da docker, Lowcoder utilizza reti ponte, quindi 127.0.0.1 e localhost non sono validi come indirizzi host. Per accedere alle fonti di dati della macchina locale, fare riferimento a", + "howToAccessHostDocLink": "Come accedere all'API/DB dell'host", + "returnList": "Ritorno", + "chooseDatasourceType": "Scegliere il tipo di sorgente dati", + "viewDocuments": "Visualizza i documenti", + "testConnection": "Collegamento di prova", + "save": "Risparmiare", + "whitelist": "Elenco dei permessi", + "whitelistTooltip": "Aggiungete gli indirizzi IP di Lowcoder all'elenco dei permessi della vostra fonte di dati, se necessario.", + "address": "Indirizzo:", + "nameExists": "Nome {name} già esistente", + "jsQueryDocLink": "Informazioni sulla query JavaScript", + "dynamicDataSourceConfigLoadingText": "Caricamento configurazione sorgente dati extra...", + "dynamicDataSourceConfigErrText": "Impossibile caricare la configurazione della fonte di dati extra.", + "retry": "Riprova", + "categoryDatabase": "Database", + "categoryBigdata": "Big Data", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Sviluppo App", + "categoryWorkflow": "Flusso di lavoro", + "categoryMessaging": "Messaggistica", + "categoryAssets": "Asset & Archiviazione", + "categoryProjectManagement": "Gestione Progetti", + "categoryCrm": "CRM", + "categoryEcommerce": "E-commerce", + "categoryWebscrapers": "Web Scrapers & Open Data", + "categoryDocumentHandling": "Generazione Report e Documenti", + "categoryRPA": "Automazione Robotica dei Processi", + "componentsUsingQueryTitle": "Utilizzo della Query", + "componentsUsingQuery": "Dove viene utilizzata questa query", + "variables": "Variabili" + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Coppie chiave-valore", + "object": "Oggetto", + "allowMultiModify": "Consentire la modifica di più righe", + "allowMultiModifyTooltip": "Se selezionato, tutte le righe che soddisfano le condizioni vengono gestite. Altrimenti, viene gestita solo la prima riga che soddisfa le condizioni.", + "array": "Array", + "insertList": "Inserisci elenco", + "insertListTooltip": "Valori inseriti quando non esistono", + "filterRule": "Regola del filtro", + "updateList": "Elenco degli aggiornamenti", + "updateListTooltip": "I valori aggiornati in corso d'opera possono essere sovrascritti dagli stessi valori dell'elenco di inserimento.", + "sqlMode": "Modalità SQL", + "guiMode": "Modalità GUI", + "operation": "Funzionamento", + "insert": "Inserire", + "upsert": "Inserire, ma aggiornare se c'è un conflitto", + "update": "Aggiornamento", + "delete": "Cancellare", + "bulkInsert": "Inserto sfuso", + "bulkUpdate": "Aggiornamento di massa", + "table": "Tabella", + "primaryKeyColumn": "Colonna chiave primaria", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Comando grezzo", + "queryTutorialButton": "Visualizza i documenti API Elasticsearch", + "request": "Richiesta", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Indice delle righe", + "spreadsheetId": "ID del foglio di calcolo", + "sheetName": "Nome del foglio", + "readData": "Leggi i dati", + "appendData": "Aggiungi riga", + "updateData": "Fila di aggiornamento", + "deleteData": "Elimina riga", + "clearData": "Fila libera", + "serviceAccountRequireMessage": "Inserire il proprio account di servizio", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Ordinamento", + "sortPlaceholder": "Nome", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Esportazione in JSON", + "noInput": "La query corrente non ha input", + "inputName": "Nome", + "inputDesc": "Descrizione", + "emptyInputs": "Nessun ingresso", + "clickToAdd": "Aggiungi", + "chooseQuery": "Scegliere la query", + "viewQuery": "Visualizza la domanda", + "chooseVersion": "Scegliere la versione", + "latest": "Ultime novità", + "publish": "Pubblicare", + "historyVersion": "Storia Versione", + "deleteQueryLabel": "Eliminare la query", + "deleteQueryContent": "La query non può essere recuperata dopo l'eliminazione. Cancellare la query?", + "run": "Correre", + "readOnly": "Solo lettura", + "exit": "Uscita", + "recoverAppSnapshotContent": "Ripristinare la query corrente alla versione {version}.", + "searchPlaceholder": "Query di ricerca", + "allQuery": "All Queries", + "deleteQueryTitle": "Eliminare la query", + "unnamed": "Senza nome", + "publishNewVersion": "Pubblicare la nuova versione", + "publishSuccess": "Pubblicato con successo", + "version": "Versione", + "desc": "Descrizione", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Vedi", + "extParamsTooltip": "Configurare altri parametri di connessione", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Interrogare gli utenti dell'area di lavoro", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Comando grezzo", + "command": "Comando", + "queryTutorial": "Visualizza la documentazione sui comandi di Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Se si seleziona {type}, il formato del valore deve essere {object}. Esempio: {example}", + "text": "Testo", + "file": "File", + "extraBodyTooltip": "I valori chiave nell'Extra Body saranno aggiunti al body con i tipi di dati JSON o Form.", + "forwardCookies": "Biscotti di andata", + "forwardAllCookies": "Inoltrare tutti i cookie", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Allegato", + "attachmentTooltip": "Può essere utilizzato con il componente di caricamento file, i dati devono essere convertiti in:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Trasmettitore", + "recipient": "Destinatario", + "carbonCopy": "Copia carbone", + "blindCarbonCopy": "Copia carbone cieca", + "subject": "Oggetto", + "content": "Content", + "contentTooltip": "Supporta l'inserimento di testo o HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Cruscotti e reportistica", + "layout": "Layout e navigazione", + "forms": "Raccolta dati e moduli", + "collaboration": "Riunioni e collaborazione", + "projectmanagement": "Gestione del progetto", + "scheduling": "Calendario e programmazione", + "documents": "Gestione di documenti e file", + "itemHandling": "Gestione dell'articolo e della firma", + "multimedia": "Multimedia e animazione", + "integration": "Integrazione ed estensione", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Auto Complete", + "autoCompleteCompDesc": "Un campo di immissione che fornisce suggerimenti durante la digitazione, migliorando l'esperienza dell'utente e la precisione.", + "autoCompleteCompKeywords": "suggerimenti, completamento automatico, digitazione, input", + "inputCompName": "Ingresso", + "inputCompDesc": "Un campo di input di testo di base che consente agli utenti di inserire e modificare il testo.", + "inputCompKeywords": "testo, input, campo, modifica", + "textAreaCompName": "Area di testo", + "textAreaCompDesc": "Un input di testo a più righe per contenuti più lunghi, come commenti o descrizioni.", + "textAreaCompKeywords": "multilinea, textarea, input, testo", + "passwordCompName": "Password", + "passwordCompDesc": "Un campo sicuro per l'inserimento della password, che maschera i caratteri per garantire la privacy.", + "passwordCompKeywords": "password, sicurezza, input, nascosto", + "richTextEditorCompName": "Editor di testo ricco", + "richTextEditorCompDesc": "Un editor di testo avanzato che supporta ricche opzioni di formattazione come grassetto, corsivo ed elenchi.", + "richTextEditorCompKeywords": "editor, testo, formattazione, contenuto ricco", + "numberInputCompName": "Numero Ingresso", + "numberInputCompDesc": "Un campo specifico per l'immissione di dati numerici, con controlli per l'incremento e il decremento dei valori.", + "numberInputCompKeywords": "numero, ingresso, incremento, decremento", + "sliderCompName": "Cursore", + "sliderCompDesc": "Un componente grafico a scorrimento per selezionare un valore o un intervallo all'interno di una scala definita.", + "sliderCompKeywords": "cursore, intervallo, ingresso, grafico", + "rangeSliderCompName": "Cursore di gamma", + "rangeSliderCompDesc": "Un cursore a doppia maniglia per selezionare un intervallo di valori, utile per filtrare o impostare limiti.", + "rangeSliderCompKeywords": "gamma, cursore, doppia impugnatura, filtro", + "ratingCompName": "Valutazione", + "ratingCompDesc": "Un componente per catturare le valutazioni degli utenti, visualizzate come stelle.", + "ratingCompKeywords": "valutazione, stelle, feedback, input", + "switchCompName": "Interruttore", + "switchCompDesc": "Un interruttore a levetta per decisioni di tipo on/off o sì/no.", + "switchCompKeywords": "a levetta, interruttore, on/off, controllo", + "selectCompName": "Selezionare", + "selectCompDesc": "Un menu a discesa per selezionare un elenco di opzioni.", + "selectCompKeywords": "a discesa, selezionare, opzioni, menu", + "multiSelectCompName": "Multiselezione", + "multiSelectCompDesc": "Un componente che consente di selezionare più elementi da un elenco a discesa.", + "multiSelectCompKeywords": "multiselezione, multipla, a discesa, scelte", + "cascaderCompName": "Cascader", + "cascaderCompDesc": "Una tendina a più livelli per la selezione gerarchica dei dati, come ad esempio la selezione di una località.", + "cascaderCompKeywords": "a cascata, gerarchico, a discesa, a livelli", + "checkboxCompName": "Casella di controllo", + "checkboxCompDesc": "Una casella di controllo standard per le opzioni che possono essere selezionate o deselezionate.", + "checkboxCompKeywords": "casella di controllo, opzioni, selezionare, alternare", + "radioCompName": "Radio", + "radioCompDesc": "Pulsanti di opzione per selezionare un'opzione da un insieme, dove è consentita una sola scelta.", + "radioCompKeywords": "radio, pulsanti, selezione, scelta singola", + "segmentedControlCompName": "Controllo segmentato", + "segmentedControlCompDesc": "Un controllo con opzioni segmentate per passare rapidamente da una scelta all'altra.", + "segmentedControlCompKeywords": "segmentato, controllo, selezione, opzioni", + "stepControlCompName": "Controllo dei passi", + "stepControlCompDesc": "Un controllo con opzioni di passo per offrire passi guidati visivamente per applicazioni come moduli o procedure guidate.", + "stepControlCompKeywords": "passi, controllo, selezione, opzioni", + "fileUploadCompName": "Caricamento dei file", + "fileUploadCompDesc": "Un componente per il caricamento dei file, con supporto per il drag-and-drop e la selezione dei file.", + "fileUploadCompKeywords": "file, caricamento, trascinamento, selezione", + "dateCompName": "Data", + "dateCompDesc": "Un componente per la selezione di date da un'interfaccia di calendario.", + "dateCompKeywords": "data, picker, calendario, selezione", + "dateRangeCompName": "Intervallo di date", + "dateRangeCompDesc": "Un componente per selezionare un intervallo di date, utile per i sistemi di prenotazione o per i filtri.", + "dateRangeCompKeywords": "daterange, selezionare, prenotare, filtrare", + "timeCompName": "Tempo", + "timeCompDesc": "Un componente di selezione dell'ora per scegliere orari specifici della giornata.", + "timeCompKeywords": "tempo, picker, selezionare, orologio", + "timeRangeCompName": "Intervallo di tempo", + "timeRangeCompDesc": "Un componente per la selezione di un intervallo di tempo, spesso utilizzato nelle applicazioni di pianificazione.", + "timeRangeCompKeywords": "timerange, selezionare, programmazione, durata", + "buttonCompName": "Pulsante del modulo", + "buttonCompDesc": "Un componente versatile per l'invio di moduli, l'attivazione di azioni o la navigazione.", + "buttonCompKeywords": "pulsante, invio, azione, navigazione", + "meetingControlCompName": "Icon Button", + "meetingCompDesc": "Un pulsante per controllare funzioni come l'avvio, la fine, il silenziamento o la condivisione.", + "meetingCompKeywords": "controllo, pulsante, inizio, fine", + "linkCompName": "Collegamento a", + "linkCompDesc": "Un componente di visualizzazione di collegamenti ipertestuali per la navigazione o il collegamento a risorse esterne.", + "linkCompKeywords": "link, collegamento ipertestuale, navigazione, esterno", + "scannerCompName": "Scanner", + "scannerCompDesc": "Un componente per la scansione di codici a barre, codici QR e altri dati simili.", + "scannerCompKeywords": "scanner, codice a barre, codice QR, scansione", + "dropdownCompName": "A discesa", + "dropdownCompDesc": "Un menu a discesa per visualizzare in modo compatto un elenco di opzioni.", + "dropdownCompKeywords": "a discesa, menu, opzioni, selezionare", + "toggleButtonCompName": "Pulsante di commutazione", + "toggleButtonCompDesc": "Un pulsante che può passare tra due stati o opzioni.", + "toggleButtonCompKeywords": "toggle, pulsante, interruttore, stato", + "textCompName": "Visualizzazione del testo", + "textCompDesc": "Un semplice componente per visualizzare contenuti testuali statici o dinamici comprensivi di formattazione Markdown.", + "textCompKeywords": "testo, visualizzazione, statico, dinamico", + "tableCompName": "Tabella", + "tableCompDesc": "Un componente ricco di tabelle per la visualizzazione di dati in un formato tabellare strutturato, con opzioni di ordinamento e filtraggio, visualizzazione di dati ad albero e righe estensibili.", + "tableCompKeywords": "tabella, dati, ordinamento, filtraggio", + "imageCompName": "Immagine", + "imageCompDesc": "Un componente per la visualizzazione di immagini, che supporta vari formati basati su URI o dati Base64.", + "imageCompKeywords": "immagine, visualizzazione, media, Base64", + "progressCompName": "Progressi", + "progressCompDesc": "Indicatore visivo di avanzamento, in genere utilizzato per mostrare lo stato di completamento di un'attività.", + "progressCompKeywords": "progresso, indicatore, stato, compito", + "progressCircleCompName": "Cerchio del progresso", + "progressCircleCompDesc": "Un indicatore di avanzamento circolare, spesso utilizzato per il caricamento di stati o di attività a tempo.", + "progressCircleCompKeywords": "cerchio, progresso, indicatore, caricamento", + "fileViewerCompName": "Visualizzatore di file", + "fileViewerCompDesc": "Un componente per la visualizzazione di vari tipi di file, compresi documenti e immagini.", + "fileViewerCompKeywords": "file, visualizzatore, documento, immagine", + "dividerCompName": "Divisore", + "dividerCompDesc": "Un componente divisorio visivo, usato per separare il contenuto o le sezioni in un layout.", + "dividerCompKeywords": "divisore, separatore, layout, design", + "qrCodeCompName": "Codice QR", + "qrCodeCompDesc": "Un componente per la visualizzazione di codici QR, utile per la scansione rapida e il trasferimento di informazioni.", + "qrCodeCompKeywords": "Codice QR, scansione, codice a barre, informazioni", + "formCompName": "Forma", + "formCompDesc": "Un componente contenitore per costruire moduli strutturati con vari tipi di input.", + "formCompKeywords": "modulo, input, contenitore, struttura", + "jsonSchemaFormCompName": "Schema JSON", + "jsonSchemaFormCompDesc": "Un componente di modulo dinamico generato sulla base di uno schema JSON.", + "jsonSchemaFormCompKeywords": "JSON, schema, modulo, dinamico", + "containerCompName": "Contenitore", + "containerCompDesc": "Un contenitore generico per il layout e l'organizzazione degli elementi dell'interfaccia utente.", + "containerCompKeywords": "contenitore, layout, organizzazione, UI", + "floatTextContainerCompName": "Contenitore di testo fluttuante", + "floatTextContainerCompDesc": "Componente Contenitore di testo fluttuante", + "floatTextContainerCompKeywords": "contenitore, layout, testo, flusso", + "collapsibleContainerCompName": "Contenitore pieghevole", + "collapsibleContainerCompDesc": "Un contenitore che può essere espanso o chiuso, ideale per gestire la visibilità dei contenuti.", + "collapsibleContainerCompKeywords": "pieghevole, contenitore, espandere, collassare", + "tabbedContainerCompName": "Contenitore a schede", + "tabbedContainerCompDesc": "Un contenitore con navigazione a schede per organizzare i contenuti in pannelli separati.", + "tabbedContainerCompKeywords": "a schede, contenitore, navigazione, pannelli", + "pageLayoutCompName": "Layout di pagina", + "pageLayoutCompDesc": "Un contenitore che offre la possibilità di creare un layout con intestazione, intestazione, piè di pagina e aree di contenuto principale.", + "pageLayoutCompKeywords": "layout, contenitore, navigazione, pagine", + "modalCompName": "Modale", + "modalCompDesc": "Un componente modale a comparsa per la visualizzazione di contenuti, avvisi o moduli a fuoco.", + "modalCompKeywords": "modale, popup, avviso, modulo", + "listViewCompName": "Vista elenco", + "listViewCompDesc": "Un componente per la visualizzazione di un elenco di elementi o dati, in cui è possibile inserire altri componenti. Come un ripetitore.", + "listViewCompKeywords": "elenco, vista, visualizzazione, ripetitore", + "gridCompName": "Griglia", + "gridCompDesc": "Un componente griglia flessibile per creare layout strutturati con righe e colonne, come estensione del componente List View.", + "gridCompKeywords": "griglia, layout, righe, colonne", + "navigationCompName": "Navigazione", + "navigationCompDesc": "Un componente di navigazione per creare menu, briciole di pane o schede per la navigazione del sito.", + "navigationCompKeywords": "navigazione, menu, briciole di pane, schede", + "iframeCompName": "IFrame", + "iframeCompDesc": "Un componente frame inline per incorporare pagine web e applicazioni o contenuti esterni all'interno dell'applicazione.", + "iframeCompKeywords": "iframe, embed, pagina web, contenuto", + "customCompName": "Componente personalizzato", + "customCompDesc": "Un componente flessibile e programmabile per creare elementi dell'interfaccia utente unici e definiti dall'utente, adatti alle vostre esigenze specifiche.", + "customCompKeywords": "personalizzato, definito dall'utente, flessibile, programmabile", + "moduleCompName": "Modulo", + "moduleCompDesc": "Utilizzate i moduli per creare micro-app progettate per incapsulare funzionalità o caratteristiche specifiche. I moduli possono essere incorporati e riutilizzati in tutte le applicazioni.", + "moduleCompKeywords": "modulo, micro-app, funzionalità, riutilizzabile", + "jsonExplorerCompName": "Esploratore JSON", + "jsonExplorerCompDesc": "Un componente per esplorare visivamente e interagire con le strutture di dati JSON.", + "jsonExplorerCompKeywords": "JSON, esploratore, dati, struttura", + "jsonEditorCompName": "JSON Editor", + "jsonEditorCompDesc": "Un componente editor per la creazione e la modifica di dati JSON con convalida ed evidenziazione della sintassi.", + "jsonEditorCompKeywords": "JSON, editor, modifica, convalida", + "treeCompName": "Albero", + "treeCompDesc": "Un componente di struttura ad albero per la visualizzazione di dati gerarchici, come file system o organigrammi.", + "treeCompKeywords": "albero, gerarchico, dati, struttura", + "treeSelectCompName": "Selezione dell'albero", + "treeSelectCompDesc": "Un componente di selezione che presenta le opzioni in un formato gerarchico ad albero, consentendo selezioni organizzate e annidate.", + "treeSelectCompKeywords": "albero, selezionare, gerarchico, annidato", + "audioCompName": "Audio", + "audioCompDesc": "Un componente per incorporare contenuti audio, con controlli per la riproduzione e la regolazione del volume.", + "audioCompKeywords": "audio, riproduzione, suono, musica", + "videoCompName": "Video", + "videoCompDesc": "Un componente multimediale per incorporare e riprodurre contenuti video, con supporto per vari formati.", + "videoCompKeywords": "video, multimedia, riproduzione, incorporazione", + "drawerCompName": "Cassetto", + "drawerCompDesc": "Un componente a pannello scorrevole che può essere utilizzato per la navigazione o la visualizzazione di contenuti aggiuntivi, in genere emergendo dal bordo dello schermo.", + "drawerCompKeywords": "cassetto, scorrevole, pannello, navigazione", + "chartCompName": "Grafico", + "chartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", + "chartCompKeywords": "grafico, grafico, dati, visualizzazione", + "carouselCompName": "Carosello di immagini", + "carouselCompDesc": "Un componente carosello rotante per mostrare immagini, banner o slide di contenuto.", + "carouselCompKeywords": "carosello, immagini, rotazione, vetrina", + "imageEditorCompName": "Editor di immagini", + "imageEditorCompDesc": "Un componente interattivo per l'editing e la manipolazione delle immagini, che offre vari strumenti e filtri.", + "imageEditorCompKeywords": "immagine, editor, manipolazione, strumenti", + "mermaidCompName": "Grafico delle sirene", + "mermaidCompDesc": "Un componente per il rendering di diagrammi complessi e diagrammi di flusso basati sulla sintassi Mermaid.", + "mermaidCompKeywords": "sirena, grafici, diagrammi, diagrammi di flusso", + "calendarCompName": "Calendario", + "calendarCompDesc": "Un componente calendario per la visualizzazione di date ed eventi, con opzioni di visualizzazione per mese, settimana o giorno.", + "calendarCompKeywords": "calendario, date, eventi, programmazione", + "signatureCompName": "Firma", + "signatureCompDesc": "Un componente per l'acquisizione di firme digitali, utile per i processi di approvazione e verifica.", + "signatureCompKeywords": "firma, digitale, approvazione, verifica", + "jsonLottieCompName": "Animazione Lottie", + "jsonLottieCompDesc": "Un componente per la visualizzazione delle animazioni Lottie, che fornisce animazioni leggere e scalabili basate su dati JSON.", + "jsonLottieCompKeywords": "lottie, animazione, JSON, scalabile", + "timelineCompName": "Linea temporale", + "timelineCompDesc": "Un componente per la visualizzazione di eventi o azioni in ordine cronologico, rappresentati visivamente lungo una linea temporale lineare.", + "timelineCompKeywords": "linea del tempo, eventi, cronologico, storia", + "commentCompName": "Come", + "commentCompDesc": "Un componente per l'aggiunta e la visualizzazione dei commenti degli utenti, che supporta le risposte in thread e l'interazione con gli utenti.", + "commentCompKeywords": "commento, discussione, interazione con l'utente, feedback", + "mentionCompName": "Menzione", + "mentionCompDesc": "Un componente che supporta la menzione di utenti o tag all'interno di contenuti testuali, tipicamente utilizzato nei social media o nelle piattaforme collaborative.", + "mentionCompKeywords": "menzione, tag, utente, social media", + "responsiveLayoutCompName": "Layout reattivo", + "responsiveLayoutCompDesc": "Un componente di layout progettato per adattarsi e rispondere alle diverse dimensioni dello schermo e dei dispositivi, garantendo un'esperienza utente coerente.", + "responsiveLayoutCompKeywords": "responsive, layout, adattarsi, dimensioni dello schermo", + "iconCompName": "Icone", + "iconCompDesc": "Utilizzate varie icone per migliorare l'aspetto visivo e l'esperienza utente della vostra applicazione.", + "iconCompKeywords": "Icone, pittogrammi, simboli, forme", + "tourCompName": "Tour", + "tourCompDesc": "Un tour del prodotto per guidare gli utenti.", + "tourCompKeywords": "tour, tour del prodotto, walkthrough, walkthrough interattivo", + "hillchartCompName": "Grafico della collina", + "hillchartCompDesc": "Un componente di visualizzazione che permette di visualizzare i dati sullo stato della gestione del progetto in un formato di grafico a colline.", + "hillchartCompKeywords": "gestione del progetto, diagramma a colline, visualizzazione, dati", + "openLayersGeoMapCompName": "Geomappa Openlayers", + "openLayersGeoMapCompDesc": "Un componente per la visualizzazione di mappe interattive utilizzando OpenLayers, con il supporto di vari livelli e caratteristiche della mappa.", + "openLayersGeoMapCompKeywords": "openlayers, mappa geografica, interattiva, strati di mappa", + "chartsGeoMapCompName": "Grafici geografici", + "chartsGeoMapCompDesc": "Un componente per la visualizzazione di dati geografici su mappe interattive con grafici dinamici", + "chartsGeoMapCompKeywords": "mappa geografica, grafici, visualizzazione, dati geografici", + "bpmnEditorCompName": "Editor BPMN", + "bpmnEditorCompDesc": "Un componente per la visualizzazione, la creazione e la modifica di diagrammi BPMN, che supporta vari elementi e funzioni BPMN.", + "bpmnEditorCompKeywords": "BPMN, editor, diagrammi, elementi, flussi di lavoro", + "turnstileCaptchaCompName": "Captcha a tornello", + "turnstileCaptchaCompDesc": "Un componente captcha per verificare gli utenti contro i bot.", + "turnstileCaptchaCompKeywords": "captcha, verifica, identità, sicurezza", + "pivotTableCompName": "Tabella pivot", + "pivotTableCompDesc": "Uno strumento di sintesi e analisi dei dati per organizzare e aggregare i dati in formato tabellare.", + "pivotTableCompKeywords": "Tabella pivot, dati, analisi, aggregazione", + "funnelChartCompName": "Grafico a imbuto", + "funnelChartCompDesc": "Uno strumento di visualizzazione che permette di visualizzare la progressiva riduzione dei dati attraverso le fasi.", + "funnelChartCompKeywords": "grafico a imbuto, vendite, conversioni, processo", + "gaugeChartCompName": "Grafico del calibro", + "gaugeChartCompDesc": "Un grafico che visualizza i dati come lettura su un quadrante, utile per indicare lo stato o il livello di qualcosa.", + "gaugeChartCompKeywords": "grafico di misura, metriche, prestazioni, stato", + "sankeyChartCompName": "Grafico Sankey", + "sankeyChartCompDesc": "Un diagramma di flusso in cui l'ampiezza delle frecce è proporzionale alla portata, utilizzato per mostrare i trasferimenti di energia, materiali o costi.", + "sankeyChartCompKeywords": "diagramma di Sankey, flusso, energia, costi", + "candleStickChartCompName": "Grafico a candele", + "candleStickChartCompDesc": "Stile di grafico finanziario utilizzato per descrivere i movimenti di prezzo di un titolo, di un derivato o di una valuta.", + "candleStickChartCompKeywords": "grafico a candele, azioni, trading, finanza", + "radarChartCompName": "Grafico radar", + "radarChartCompDesc": "Metodo grafico per la visualizzazione di dati multivariati sotto forma di grafico bidimensionale di tre o più variabili quantitative.", + "radarChartCompKeywords": "grafico radar, multivariato, analisi delle prestazioni", + "heatmapChartCompName": "Grafico Heatmap", + "heatmapChartCompDesc": "Una rappresentazione grafica dei dati in cui i singoli valori sono rappresentati come colori.", + "heatmapChartCompKeywords": "heatmap, visualizzazione dei dati, intensità", + "graphChartCompName": "Grafico", + "graphChartCompDesc": "Un diagramma che rappresenta una rete di nodi collegati da spigoli, utile per mostrare interconnessioni e relazioni.", + "graphChartCompKeywords": "grafico, reti, relazioni, nodi", + "treeChartCompName": "Grafico ad albero", + "treeChartCompDesc": "Un diagramma che rappresenta visivamente la gerarchia in una struttura ad albero, mostrando le relazioni tra i vari nodi.", + "treeChartCompKeywords": "diagramma ad albero, gerarchia, organizzazione", + "treemapChartCompName": "Grafico a mappa di alberi", + "treemapChartCompDesc": "Un grafico che utilizza rettangoli annidati per rappresentare in modo proporzionale i dati gerarchici.", + "treemapChartCompKeywords": "mappa a tre, gerarchia, visualizzazione dei dati", + "sunburstChartCompName": "Grafico Sunburst", + "sunburstChartCompDesc": "Una tecnica di visualizzazione a riempimento radiale dello spazio che illustra le relazioni gerarchiche attraverso gli strati di un cerchio.", + "sunburstChartCompKeywords": "Grafico a raggiera, radiale, gerarchia", + "themeriverChartCompName": "Grafico del fiume a tema", + "themeriverChartCompDesc": "Una visualizzazione che assomiglia a un grafico a flusso che mostra i cambiamenti di un insieme di dati nel corso del tempo tra le varie categorie.", + "themeriverChartCompKeywords": "tema fiume, serie temporali, tendenze", + "basicChartCompName": "Grafico di base", + "basicChartCompDesc": "Un componente versatile per la visualizzazione dei dati attraverso vari tipi di grafici e diagrammi.", + "basicChartCompKeywords": "grafico, grafico, dati, visualizzazione", + "shapeCompName": "Forme", + "shapeCompDesc": "Una raccolta di forme geometriche da utilizzare per diagrammi, illustrazioni e visualizzazioni.", + "shapeCompKeywords": "forme, geometriche, diagrammi, illustrazioni", + "ganttChartCompName": "Grafico di Gantt", + "ganttChartCompDesc": "Un grafico che illustra la pianificazione di un progetto, mostrando le date di inizio e fine degli elementi e le dipendenze.", + "ganttChartCompKeywords": "diagramma di gantt, gestione del progetto, pianificazione", + "kanbanCompName" : "Kanban Board (preview!)", + "kanbanCompDesc" : "Un componente per la visualizzazione e la gestione delle attività in un flusso di lavoro Kanban, con colonne per le fasi di lavoro e le schede per le attività.", + "kanbanCompKeywords" : "kanban, board, workflow, tasks", + "colorPickerCompName": "Picker di colori", + "colorPickerCompDesc": "Selezione intuitiva dei colori per la personalizzazione.", + "colorPickerCompKeywords": "colore, selezionatore, personalizzazione", + "floatButtonCompName": "Pulsante di galleggiamento", + "floatButtonCompDesc": "Un pulsante di azione fluttuante per azioni rapide e di rilievo.", + "floatButtonCompKeywords": "pulsante flottante, azione, rapido", + "avatarCompName": "Avatar", + "avatarCompDesc": "Visualizza gli avatar degli utenti o le immagini del profilo per un'identificazione personalizzata.", + "avatarCompKeywords": "avatar, immagine del profilo, identificazione dell'utente", + "avatarGroupCompName": "Gruppo Avatar", + "avatarGroupCompDesc": "Un gruppo di avatar per rappresentare più utenti o entità in modo compatto e visivamente accattivante.", + "avatarGroupCompKeywords": "gruppo avatar, utenti, entità, compatto", + "transferName": "Trasferimento", + "transferDesc": "Facilita il trasferimento dei dati tra due elenchi con la funzione di trascinamento.", + "transferKeywords": "trasferimento, dati, drag-and-drop", + "cardCompName": "Scheda Contenuto", + "cardCompDesc": "Un componente di scheda per la visualizzazione di informazioni o contenuti organizzati in modo strutturato.", + "cardCompKeywords": "scheda, informazione, contenuto, visualizzazione", + "timerCompName": "Timer", + "timerCompDesc": "Un componente che visualizza un conto alla rovescia o un tempo trascorso, utile per tracciare durate e scadenze.", + "timerCompKeywords": "timer, conto alla rovescia, tempo trascorso, tracciamento, durate, scadenze", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Visualizza la documentazione", + "menuViewPlayground": "Visualizza il parco giochi interattivo", + "menuUpgradeToLatest": "Aggiornamento alla versione più recente", + "nameNotEmpty": "Non può essere vuoto", + "nameRegex": "Deve iniziare con una lettera e contenere solo lettere, cifre e trattini (_).", + "nameJSKeyword": "Non può essere una parola chiave JavaScript", + "nameGlobalVariable": "Non può essere un nome di variabile globale", + "nameExists": "Nome {name} Già esistente", + "getLatestVersionMetaError": "Impossibile recuperare la versione più recente, riprovare più tardi.", + "needNotUpgrade": "La versione attuale è già la più recente.", + "compNotFoundInLatestVersion": "Componente corrente non trovato nella versione più recente.", + "upgradeSuccess": "Aggiornato con successo all'ultima versione.", + "searchProp": "Ricerca", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Riprova", + "resetAfterSubmit": "Reimpostazione dopo l'invio del modulo", + "jsonSchema": "Schema JSON", + "uiSchema": "Schema UI", + "schemaTooltip": "Vedi", + "defaultData": "Dati del modulo precompilati", + "dataDesc": "Dati del modulo corrente", + "required": "Richiesto", + "maximum": "Il valore massimo è {value}.", + "minimum": "Il valore minimo è {value}.", + "exclusiveMaximum": "Dovrebbe essere minore di {value}", + "exclusiveMinimum": "Dovrebbe essere maggiore di {value}", + "multipleOf": "Dovrebbe essere un multiplo di {value}", + "minLength": "Almeno {value} Caratteri", + "maxLength": "Al massimo {value} Caratteri", + "pattern": "Dovrebbe corrispondere al modello {value}", + "format": "Dovrebbe corrispondere al formato {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "Ingresso Valore di ricerca", + }, + "customComp": { + ...en.customComp, + + "text": "È un buon giorno.", + "triggerQuery": "Query di attivazione", + "updateData": "Aggiornamento dei dati", + "updateText": "Sono anche dell'umore giusto per sviluppare ora il mio componente personalizzato con Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Dati da passare al componente personalizzato", + "code": "Codice del componente personalizzato", + }, + "tree": { + ...en.tree, + + "placeholder": "Selezionare", + "selectType": "Selezionare il tipo", + "noSelect": "Non selezionare", + "singleSelect": "Selezione singola", + "multiSelect": "Selezione multipla", + "checkbox": "Casella di controllo", + "checkedStrategy": "Strategia controllata", + "showAll": "Tutti i nodi", + "showParent": "Solo i nodi parentali", + "showChild": "Nodi figli unici", + "autoExpandParent": "Espansione automatica genitore", + "checkStrictly": "Controllare rigorosamente", + "checkStrictlyTooltip": "Controllare con precisione il TreeNode; il TreeNode genitore e i TreeNode figli non sono associati", + "treeData": "Dati dell'albero", + "treeDataDesc": "Dati attuali dell'albero", + "value": "Valori predefiniti", + "valueDesc": "Valori attuali", + "expanded": "Valori ampliati", + "expandedDesc": "Valori attuali ampliati", + "defaultExpandAll": "Predefinito Espandi tutti i nodi", + "showLine": "Linea spettacolo", + "showLeafIcon": "Mostra l'icona Foglia", + "treeDataAsia": "Asia", + "treeDataChina": "Cina", + "treeDataBeijing": "Pechino", + "treeDataShanghai": "Shanghai", + "treeDataJapan": "Giappone", + "treeDataEurope": "Europa", + "treeDataEngland": "Inghilterra", + "treeDataFrance": "Francia", + "treeDataGermany": "Germania", + "treeDataNorthAmerica": "Nord America", + "helpLabel": "Etichetta del nodo", + "helpValue": "Valore unico del nodo nell'albero", + "helpChildren": "Nodi figli", + "helpDisabled": "Disabilita il nodo", + "helpSelectable": "Se il nodo è selezionabile (tipo di selezione singola/multi)", + "helpCheckable": "Visualizzazione o meno della casella di controllo (tipo di casella di controllo)", + "helpDisableCheckbox": "Disabilita la casella di controllo (tipo casella di controllo)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Test dell'evento", + "methodTest": "Metodo Test", + "inputTest": "Test di ingresso", + }, + "password": { + ...en.password, + + "label": "Password", + "placeholder": "Inserire la password", + "conformLabel": "Conferma la password", + "conformPlaceholder": "Confermare la password", + "visibilityToggle": "Alterna la visibilità", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Personalizzare la barra degli strumenti", + "toolbarDescription": "È possibile personalizzare la barra degli strumenti. Per maggiori dettagli, consultare: https://quilljs.com/docs/modules/toolbar/.", + "placeholder": "Inserisci...", + "hideToolbar": "Nascondere la barra degli strumenti", + "content": "Content", + "title": "Titolo", + "save": "Risparmiare", + "link": "Link:", + "edit": "Modifica", + "remove": "Rimuovere", + "defaultValue": "Contenuto di base", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Personalizzato", + "backTop": "Indietro Top", + "buttonType": "Tipo di pulsante", + "buttonShape": "Forma del pulsante", + "square": "Quadrato", + "circle": "Cerchio", + "description": "Descrizione", + "badge": "Distintivo", + "primary": "Primario", + "default": "Predefinito", + "buttonTheme": "Tema dei pulsanti", + "badgeColor": "Colore del badge", + "dot": "Distintivo come punto", + "hidden": "Nascosto", + "visibilityHeight": "Altezza di visibilità", + "visibilityHeightDesc": "Scorrere fino a una certa altezza prima di visualizzare il pulsante di ritorno all'inizio, 0 è sempre visualizzato, la modalità di modifica non può visualizzare l'anteprima in tempo reale", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Evento Trigger", + "click": "Cliccare", + "hover": "Hover", + "disabledAlpha": "Disabilita la selezione alfa", + "recommended": "Consigliato", + "showPresets": "Mostra le preimpostazioni di colore", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Mostra il pulsante di chiusura", + "Type": "Tipo di badge", + "Count": "Conteggio dei badge", + "Size": "Dimensione del badge", + "SizeDefault": "predefinito", + "SizeSmall": "Piccolo", + "overflowCount": "Conteggio dell'overflow", + "Title": "Titolo del distintivo", + "dot": "Punto", + "number": "Numero", + "tooltip": "Tooltip", + }, + "gantt": { + ...en.gantt, + + "key": "Chiave", + "title": "Titolo", + "project": "Progetto", + "from": "Da", + "minute": "minuto", + "hour": "Ora", + "day": "Giorno", + "week": "Settimana", + "month": "Mese", + "year": "Anno", + "quarter": "Trimestre", + "tasks": "Dati sulle attività", + "level": "livello", + "durationUnit": "Unità di durata", + "duration": "Durata", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Settimana #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "albero", + "ColumnsData": "Colonne Dati", + "allowChangeTask": "Attività DbClick", + "allowAddLink": "Aggiungi collegamento", + "allowLinkDelete": "Cancellazione del link", + "allowProgressDrag": "Trascinamento del progresso", + "allowTaskDrag": "Trascinamento dell'attività", + "links": "Dati sui link", + "dataFormat": "Data parse Format", + "handleDateChange": "Gestire la modifica dell'attività", + "handleTaskChange": "Gestire la modifica dell'attività", + "handleAddedLink": "Maniglia Link aggiunto", + "handleDeletedLink": "Gestire il link cancellato", + "handleProgressDrag": "Gestire il trascinamento dell'avanzamento", + "showTodayMark": "Mostra Oggi Mark", + "resize": "Ridimensionamento", + "otherEvents": "Altri eventi", + "openAllBranchInit": "Aprire tutte le filiali", + "date": "Data", + "text": "Testo", + "progress": "progresso", + "width": "Larghezza", + "ColumnsType": "Tipo di cloumns", + "currentId": "ID corrente", + "currentObject": "Oggetto corrente", + "addTask": "Aggiungi attività", + "taskObject": "Oggetto dell'attività", + "taskObjectDesc": "Supporta array di task o singoli oggetti task", + "linkID": "ID collegamento", + "linkIDDesc": "Supporta array di ID di collegamenti o singoli oggetti di collegamento.", + "removeTask": "Rimuovere l'attività", + "taskID": "ID compito", + "taskIDDesc": "Supporta array di ID o ID singolo", + "add": "Aggiungi", + "expandingAll": "Espansione di tutti", + "collapsingAll": "Crollo di tutti", + "addTaskFail": "L'operazione di aggiunta non è riuscita e il tipo di parametro deve essere un oggetto o un oggetto array.", + "addLinkFail": "Il collegamento di aggiunta non è riuscito e il tipo di parametro deve essere un oggetto o un oggetto array.", + "removeTaskFail": "L'attività di eliminazione non è riuscita e il tipo di parametro deve essere stringa o array di stringhe.", + "removeLinkFail": "I collegamenti di cancellazione non sono riusciti e il tipo di parametro deve essere un array di stringhe.", + "otherData": "Altri dati{i}", + "projectText": "Progetto #{i}", + "taskText": "Compito #{i}", + "AutoCalculateProgress": "Avanzamento del calcolo automatico", + "allowProjectDrag": "Consentire il trascinamento del progetto", + "showColumns": "Mostra colonne", + "exportToPNG": "Esportazione in PNG", + "exportToPDF": "Esportazione in PDF", + "exportToExcel": "Esportazione in Excel", + "progressLowBg": "Basso BgColor", + "progressLowColor": "Colore di avanzamento basso", + "progressMediumBg": "Medio BgColor", + "progressMediumColor": "Colore Medio Progresso", + "progressHighBg": "Altezza BgColor", + "progressHighColor": "Colore di avanzamento alto", + "progresscompletedColor": "Colore di avanzamento completato", + "lowProgressLine": "Linea di avanzamento bassa", + "mediumProgressLine": "Linea di avanzamento media", + "SegmentedColor": "Progresso Colore segmentato", + "link_f2s": "Collegamento F2S", + "link_s2s": "Collegamento S2S", + "link_f2f": "Collegamento F2F", + "link_s2f": "Collegamento S2F", + "weekScale": "#{i},", + "showHolidays": "Mostra Vacanze", + "StatutoryHolidays": "Dati sulle ferie legali", + "skipOffTime": "Nasconde il tempo non lavorativo", + "weekend": "Fine settimana", + "weekendSelected": "Fine settimana selezionato", + "noWorkHour": "Nessun orario di lavoro", + "noWorkHourSelected": "nessun orario di lavoro selezionato", + "showWorkTimes": "Mostra Tempi di lavoro", + "workTimeData": "Dati sui tempi di lavoro", + "fit": "in forma", + "manual": "manuale", + "scaleMode": "Scale Mode", + "startDate": "Data di inizio", + "endDate": "Data di fine", + "addLink": "Aggiungi link", + "linkObject": "link Oggetto", + "removeLink": "rimuovere il link", + "allowSort": "Consenti ordinamento", + "showTask": "Mostra attività", + "toggleOnDBClick": "Attivare DBClick", + "sortOptions": "Opzioni di ordinamento iniziali", + "rowHeight": "Altezza della fila", + "showTooltip": "Mostra la descrizione degli strumenti", + "tooltipTemplates": "Modello di tooltip", + "allowResizeTask": "Consentire il ridimensionamento dell'attività", + "projectColor": "Progetto Colore", + "projectColorBg": "Progetto BgColor", + "taskColor": "Colore dell'attività", + "taskColorBg": "Attività BgColor", + "milestoneColor": "Colore della pietra miliare", + "highlightOverdue": "Evidenziare gli arretrati", + "overdueColor": "Overdue Color", + "overdueBgColor": "Overdue BgColor", + "projectCompletedBgColor": "Progetto completato BgColor", + "projectCompletedColor": "Progetto completato Colore", + "tag": "tag", + "tasksTableWidth": "Larghezza della tabella delle attività", + "allowErrorMessage": "Consentire il messaggio di errore", + "currentProjectId": "Id progetto attuale", + "currentProjectLastTask": "Progetto corrente Ultimo compito", + "onlySortProject": "Solo progetto di ordinamento", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Dati sorgente", + "targetTitle": "Dati di destinazione", + "content": "Contenuto {i}", + "items": "Articoli", + "targetKeys": "Chiavi selezionate", + "oneWay": "Un modo", + "pagination": "Paginazione", + "pageSize": "Dimensione della pagina", + "allowSearch": "Consenti la ricerca", + "selectedKeys": "Chiavi selezionate", + "searchInfo": "Ricerca Info", + "targerObject": "Oggetto Targer", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Conteggio massimo", + "avatarSize": "Dimensione dell'avatar", + "autoColor": "Auto Color", + "alignment": "Allineamento", + "currentAvatar": "Avatar corrente", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "piazza", + "circle": "cerchio", + "icon": "icona", + "shape": "forma", + "counts": "Distintivo", + "title": "titolo", + "src": "src", + "avatarCompTooltip": "La priorità di visualizzazione è: immagine -> caratteri -> icona. A seconda di ciò che è disponibile per primo.", + "iconSize": "Dimensione dell'icona", + "avatarBackground": "Sfondo", + "label": "Etichetta", + "caption": "Didascalia", + "labelPosition": "Posizione", + "alignmentPosition": "allineamento", + "text": "Testo", + "enableDropDown": "Abilitazione della tendina", + "containerBackground": "Sfondo", + }, + "card": { + ...en.card, + + "cardType": "Tipo di carta", + "common": "comune", + "custom": "personalizzato", + "default": "predefinito", + "small": "piccolo", + "showTitle": "Mostra il titolo", + "title": "Titolo", + "more": "Di più", + "extraTitle": "Invito all'azione", + "CoverImg": "Immagine di copertina", + "imgSrc": "Fonte immagine", + "showMeta": "Mostra il contenuto", + "metaTitle": "Titolo del contenuto", + "metaDesc": "Descrizione del contenuto", + "imgHeight": "Altezza immagine", + "showActionIcon": "Mostra opzioni di azione", + "actionOptions": "Opzioni di azione", + "menu": "Menu {i}", + "hoverColor": "hover Colore", + "IconColor": "Icona Colore", + "titleSize": "Titolo Dimensione", + }, + "timer": { + ...en.timer, + + "timerState": "Stato del timer", + "elapsedTime": "Tempo trascorso", + "timer": "Timer", + "countdown": "Conto alla rovescia", + "defaultValue": "Valore predefinito", + "timerType": "Tipo di timer", + "start": "Inizio", + "pause": "Pausa", + "resume": "Il curriculum", + "reset": "Reset", + "startPause": "Avvio/Pausa", + "hideButton": "Pulsante Nascondi", + "fontColor": "Colore del carattere", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Icona", + "autoSize": "Icona Ridimensionamento automatico", + "iconSize": "Dimensione dell'icona", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Formato", + "precision": "Precisione", + "allowNull": "Consentire il valore nullo", + "thousandsSeparator": "Mostra separatore di migliaia", + "controls": "Mostra pulsanti di incremento/decremento", + "step": "Passo", + "standard": "Standard", + "percent": "Percentuale", + }, + "slider": { + ...en.slider, + + "step": "Passo", + "stepTooltip": "Il valore deve essere maggiore di 0 e divisibile per (Max-Min)", + "vertical": "Orientamento verticale", + }, + "rating": { + ...en.rating, + + "max": "Valutazione massima", + "allowHalf": "Consentire la metà dei punti di valutazione", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Opzioni", + "option": "Opzione", + "optionI": "Opzione {i}", + "viewDocs": "Visualizza i documenti", + "tip": "Le variabili 'item' e 'i' rappresentano il valore e l'indice di ciascun elemento dell'array di dati.", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Valore / Chiave", + "valueTooltip": "Il valore del passo deve essere un numero. Per il primo passo, deve essere uguale al valore iniziale. I numeri devono essere in ordine crescente e coerente.", + "title": "Titolo del passo", + "subTitle": "Sottotitolo del passo", + "description": "Descrizione del passo", + "status": "Stato dei passi", + "icon": "Icona Passo", + }, + "step": { + ...en.step, + + "initialValue": "Numeri di partenza a", + "initialValueTooltip": "Dove iniziare la numerazione visiva. Deve essere 1 o superiore.", + "valueDesc": "Valore attuale", + "size": "Dimensione dei passi", + "sizeSmall": "Piccolo", + "sizeDefault": "Predefinito", + "percent": "Passi Percentuale", + "type": "Tipo di passo", + "typeDefault": "Standard", + "typeNavigation": "Navigazione", + "typeInline": "In linea", + "direction": "Direzione dei passi", + "directionVertical": "Verticale", + "directionHorizontal": "Orizzontale", + "labelPlacement": "Passi Posizionamento dell'etichetta", + "status": "Stato dei passi", + "statusWait": "Attendere", + "statusProcess": "Processo", + "statusFinish": "Finitura", + "statusError": "Errore", + "showDots": "Mostra punti invece di simboli", + "showIcons": "Mostra icone invece di simboli", + "responsive": "Reattivo", + "selectable": "Selezionabile", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Testo del tag", + "color": "Colore", + "icon": "Icona", + }, + "radio": { + ...en.radio, + + "options": "Opzioni", + "horizontal": "Orizzontale", + "horizontalTooltip": "Il layout orizzontale si avvolge su se stesso quando finisce lo spazio a disposizione", + "vertical": "Verticale", + "verticalTooltip": "Il layout verticale verrà sempre visualizzato in una singola colonna", + "autoColumns": "Colonna automatica", + "autoColumnsTooltip": "Il layout a colonne automatico riordina automaticamente l'ordine in base allo spazio disponibile e lo visualizza come colonne multiple.", + }, + "cascader": { + ...en.cascader, + + "options": "Dati JSON per mostrare selezioni a cascata", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Valore attualmente selezionato", + "selectedIndexDesc": "L'indice del valore attualmente selezionato o -1 se non è selezionato alcun valore.", + "selectedLabelDesc": "L'etichetta del valore attualmente selezionato", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Deve essere un numero con un'unità di dimensione del file valida o un numero di byte senza unità.", + "fileEmptyErrorMsg": "Caricamento fallito. La dimensione del file è vuota.", + "fileSizeExceedErrorMsg": "Caricamento fallito. La dimensione del file supera il limite.", + "minSize": "Dimensione minima", + "minSizeTooltip": "La dimensione minima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", + "maxSize": "Dimensione massima", + "maxSizeTooltip": "La dimensione massima dei file caricati con unità di dimensione del file opzionali (ad esempio, '5kb', '10 MB'). Se non viene fornita alcuna unità, il valore sarà considerato un numero di byte.", + "single": "Singolo", + "multiple": "Multiplo", + "directory": "Elenco", + "upload": "Sfogliare", + "fileType": "Tipi di file", + "reference": "Fare riferimento a", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Specificatori unici del tipo di file", + "uploadType": "Tipo di caricamento", + "showUploadList": "Mostra elenco di caricamento", + "maxFiles": "File max", + "filesValueDesc": "Il contenuto del file attualmente caricato è codificato Base64", + "filesDesc": "Elenco dei file attualmente caricati. Per i dettagli, fare riferimento a", + "clearValueDesc": "Cancella tutti i file", + "parseFiles": "Analizzare i file", + "parsedValueTooltip1": "Se parseFiles è vero, i file di caricamento verranno analizzati come oggetti, array o stringhe. È possibile accedere ai dati analizzati tramite la matrice parsedValue.", + "parsedValueTooltip2": "Supporta file Excel, JSON, CSV e di testo. Altri formati restituiranno un valore nullo.", + }, + "date": { + ...en.date, + + "format": "Formato", + "formatTip": "Supporto: YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", + "reference": "Fare riferimento a", + "showTime": "Orario dello spettacolo", + "start": "Data di inizio", + "end": "Data di fine", + "year": "Anno", + "quarter": "Trimestre", + "month": "Mese", + "week": "Settimana", + "date": "Data", + "clearAllDesc": "Cancella tutto", + "resetAllDesc": "Azzeramento di tutti", + "placeholder": "Selezionare la data", + "placeholderText": "Segnaposto", + "startDate": "Data di inizio", + "endDate": "Data di fine", + }, + "time": { + ...en.time, + + "start": "Ora di inizio", + "end": "Tempo della fine", + "formatTip": "Supporto: 'HH:mm:ss', 'Timestamp'", + "format": "Formato", + "placeholder": "Selezionare l'ora", + "placeholderText": "Segnaposto", + "startTime": "Ora di inizio", + "endTime": "Tempo della fine", + }, + "button": { + ...en.button, + + "prefixIcon": "Icona Prefisso", + "prefixText": "Prefisso Testo", + "suffixIcon": "Icona Suffisso", + "icon": "Icona", + "iconSize": "Dimensione dell'icona", + "button": "Pulsante del modulo", + "formToSubmit": "Modulo da inviare", + "default": "Predefinito", + "submit": "Invia", + "textDesc": "Testo attualmente visualizzato sul pulsante", + "loadingDesc": "Il pulsante è in stato di caricamento? Se è vero, il pulsante corrente sta caricando", + "formButtonEvent": "Evento", + }, + "link": { + ...en.link, + + "link": "Collegamento a", + "textDesc": "Testo attualmente visualizzato sul link", + "loadingDesc": "Il collegamento è in stato di caricamento? Se è vero, il collegamento corrente è in fase di caricamento", + }, + "scanner": { + ...en.scanner, + + "text": "Fare clic su Scansione", + "camera": "Macchina fotografica {index}", + "changeCamera": "Telecamera Switch", + "continuous": "Scansione continua", + "uniqueData": "Ignore Duplicate Data", + "maskClosable": "Fare clic sulla Maschera per chiudere", + "errTip": "Si prega di utilizzare questo componente sotto HTTPS o Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Display con sola etichetta", + "textDesc": "Testo attualmente visualizzato sul pulsante", + "triggerMode": "Modalità di attivazione" + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Hello, {name}", + "valueTooltip": "Markdown supporta la maggior parte dei tag e degli attributi HTML. iframe, Script e altri tag sono disabilitati per motivi di sicurezza.", + "verticalAlignment": "Allineamento verticale", + "horizontalAlignment": "Allineamento orizzontale", + "textDesc": "Testo visualizzato nella casella di testo corrente", + }, + "table": { + ...en.table, + + "editable": "Modificabile", + "columnNum": "Colonne", + "viewModeResizable": "Larghezza della colonna regolata dall'utente", + "viewModeResizableTooltip": "Se gli utenti possono regolare la larghezza delle colonne.", + "visibleResizables": "Mostra le maniglie di ridimensionamento", + "visibleResizablesTooltip": "Visualizza le maniglie di ridimensionamento visibili nell'intestazione della tabella.", + "showFilter": "Pulsante Mostra filtro", + "showRefresh": "Mostra il pulsante di aggiornamento", + "showDownload": "Mostra il pulsante di download", + "columnSeparator": "Separatore a colonna", + "columnSeparatorTooltip": "Separatore di colonna (\"delimitatore\") nel file CSV scaricato.\n\nRaccomandazioni:\n- Virgola (,)\n- Punto e virgola (;)\n- Tubo (|)\n- Tab (\\t)", + "columnSetting": "Pulsante di visibilità delle colonne", + "searchText": "Testo di ricerca", + "searchTextTooltip": "Cercare e filtrare i dati attualmente presenti nella tabella. Si tratta di una ricerca solo di facciata e non influisce sulla query di origine dei dati).", + "showQuickJumper": "Mostra Quick Jumper", + "hideOnSinglePage": "Nascondi su pagina singola", + "showSizeChanger": "Pulsante Mostra cambio formato", + "pageSizeOptions": "Opzioni di formato pagina", + "pageSize": "Dimensione della pagina", + "total": "Conteggio totale delle righe", + "totalTooltip": "Il valore predefinito è il numero di elementi di dati correnti che possono essere ottenuti dalla query, ad esempio: '{{query1.data[0].count}}'.", + "filter": "Filtri", + "filterRule": "Regola del filtro", + "chooseColumnName": "Scegliere la colonna", + "chooseCondition": "Scegliere la condizione", + "clear": "Libero", + "columnShows": "Colonna Mostra", + "selectAll": "Seleziona tutti", + "and": "E", + "or": "Oppure", + "contains": "Contiene", + "notContain": "Non contiene", + "equals": "Pari", + "isNotEqual": "Non è uguale", + "isEmpty": "È vuoto", + "isNotEmpty": "Non è vuoto", + "greater": "Maggiore di", + "greaterThanOrEquals": "Maggiore o uguale", + "lessThan": "Meno di", + "lessThanOrEquals": "Meno di o uguale", + "action": "Azione", + "columnValue": "Valore della colonna", + "columnValueTooltip": "'{{currentCell}}': Dati cella corrente\n '{{currentRow}}': Dati riga corrente\n '{{currentIndex}}': Indice dei dati correnti (a partire da 0)\n Esempio: '{{currentCell * 5}}' Mostra 5 volte il valore originale Dati.", + "columnTooltip": "Tooltip di colonna", + "imageSrc": "Fonte immagine", + "imageSize": "Dimensione dell'immagine", + "columnTitle": "Titolo", + "columnTitleTooltip": "Tooltip del titolo", + "showTitle": "Mostra il titolo", + "showTitleTooltip": "Mostra/nascondi il titolo della colonna nell'intestazione della tabella", + "sortable": "Ordinabile", + "align": "Allineamento", + "fixedColumn": "Colonna fissa", + "autoWidth": "Larghezza automatica", + "customColumn": "Colonna personalizzata", + "auto": "Auto", + "fixed": "Fisso", + "columnType": "Tipo di colonna", + "dataMapping": "Mappatura dei dati", + "numberStep": "Passo", + "numberStepTooltip": "Il numero a cui viene aumentato o diminuito il valore corrente. Può essere un numero intero o decimale", + "precision": "Precisione", + "float": "Galleggiante", + "prefix": "Prefisso", + "suffix": "Suffisso", + "avatars": "Avatars", + "avatarGroupAlignment": "Allineamento degli avatar", + "text": "Testo", + "number": "Numero", + "link": "Collegamento a", + "links": "Collegamenti", + "tag": "Tag", + "select": "Selezionare", + "dropdown": "A discesa", + "date": "Data", + "dateTime": "Data Ora", + "badgeStatus": "Stato", + "button": "Button", + "image": "Immagine", + "boolean": "Booleano", + "switch": "Interruttore", + "rating": "Valutazione", + "progress": "Progressi", + "option": "Funzionamento", + "optionList": "Elenco delle operazioni", + "option1": "Operazione 1", + "status": "Stato", + "statusTooltip": "Valori opzionali: Successo, Errore, Predefinito, Avviso, Elaborazione", + "primaryButton": "Primario", + "defaultButton": "Predefinito", + "type": "Tipo", + "tableSize": "Dimensione della tabella", + "hideHeader": "Nascondere l'intestazione della tabella", + "hideToolbar": "Nascondere Piè di pagina", + "fixedHeader": "Intestazione fissa della tabella", + "fixedHeaderTooltip": "L'intestazione sarà fissa per la tabella a scorrimento verticale", + "fixedToolbar": "Barra degli strumenti fissa", + "fixedToolbarTooltip": "La barra degli strumenti sarà fissa per la tabella a scorrimento verticale in base alla posizione", + "hideBordered": "Mostra le maniglie di ridimensionamento", + "showHeaderGridBorder": "Mostra il bordo della griglia dell'intestazione", + "showRowGridBorder": "Mostra il bordo della griglia delle righe", + "showVerticalRowGridBorder": "Mostra il bordo verticale della griglia delle righe", + "showHorizontalRowGridBorder": "Mostra il bordo della griglia delle righe orizzontali", + "deleteColumn": "Cancellare la colonna", + "confirmDeleteColumn": "Confermare la colonna Elimina:", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "I dati correnti cambiano, fare clic per rigenerare la colonna.", + "changeSetDesc": "Un oggetto che rappresenta le modifiche a una tabella modificabile, contiene solo la cella modificata. Le righe vanno per prime e le colonne per seconde.", + "selectedRowDesc": "Fornisce i dati per la riga attualmente selezionata, indicando la riga che attiva un evento di clic se l'utente fa clic su un pulsante/collegamento nella riga.", + "selectedRowsDesc": "Utile nella modalità di selezione multipla, come SelectedRow", + "pageNoDesc": "Pagina di visualizzazione corrente, a partire da 1", + "pageSizeDesc": "Quante righe per pagina", + "sortColumnDesc": "Il nome della colonna ordinata attualmente selezionata", + "sortDesc": "Se la riga corrente è in ordine decrescente", + "pageOffsetDesc": "L'inizio corrente del Paging, utilizzato per il Paging per ottenere i dati. Esempio: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", + "displayDataDesc": "Dati visualizzati nella tabella corrente", + "selectedIndexDesc": "Indice selezionato nei dati di visualizzazione", + "filterDesc": "Parametri di filtraggio della tabella", + "dataDesc": "I dati JSON della tabella", + "saveChanges": "Salvare le modifiche", + "cancelChanges": "Annulla modifiche", + "rowSelectChange": "Selezione riga Modifica", + "rowClick": "Riga Fare clic", + "rowExpand": "Espandi riga", + "rowShrink": "Restringimento della fila", + "search": "Ricerca", + "download": "Scaricare", + "columnEdited": "Colonna modificata", + "filterChange": "Sostituzione del filtro", + "sortChange": "Ordinamento Cambiamento", + "pageChange": "Cambio pagina", + "refresh": "Aggiornare", + "rowColor": "Colore condizionale della riga", + "rowColorDesc": "Imposta in modo condizionale il colore della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"green\" : \"red\" }}\".", + "rowHeight": "Altezza di riga condizionale", + "rowHeightDesc": "Imposta in modo condizionale l'altezza della riga in base alle variabili opzionali: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Ad esempio: \"{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}\".", + "cellColor": "Colore della cella condizionale", + "cellColorDesc": "Impostare in modo condizionale il colore della cella in base al valore della cella utilizzando CurrentCell. Ad esempio: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "Nessun gestore eventi configurato per il salvataggio delle modifiche. Associa almeno un gestore di eventi prima del clic.", + "dynamicColumn": "Utilizzare la visibilità dinamica delle colonne", + "dynamicColumnConfig": "Colonne visibili", + "dynamicColumnConfigDesc": "Visibilità dinamica delle colonne. Accetta un array di nomi di colonne. Tutte le colonne sono visibili per impostazione predefinita. Esempio: [\"id\", \"nome\"].", + "position": "Posizione", + "showDataLoadSpinner": "Mostra indicatore di caricamento", + "showValue": "Mostra valore", + "expandable": "Espandibile", + "configExpandedView": "Configurare la vista espansa", + "toUpdateRowsDesc": "Un array di oggetti per le righe da aggiornare nelle tabelle modificabili.", + "selectedCellDesc": "Cellula selezionata", + "empty": "Vuoto", + "falseValues": "Testo quando è falso", + "iconTrue": "Icona Quando è vero", + "iconFalse": "Icona Quando falso", + "iconNull": "Icona Quando zero", + "allColumn": "Tutti", + "visibleColumn": "Visibile", + "emptyColumns": "Nessuna colonna è attualmente visibile", + "showSummary": "Mostra righe di riepilogo", + "totalSummaryRows": "Totale righe", + "inlineAddNewRow": "Aggiungi nuova riga in linea", + "editMode": "Modalità di modifica", + "singleClick": "Singolo clic", + "doubleClick": "Doppio clic", + "showUpdateButtons": "Mostra i pulsanti Salva/Annulla", + }, + "image": { + ...en.image, + + "src": "Fonte immagine", + "srcDesc": "L'origine dell'immagine. Può essere un URL, un percorso o una stringa Base64. per esempio: data:image/png;base64, AAA... CCC", + "supportPreview": "Supporto Fare clic sull'anteprima (zoom)", + "supportPreviewTip": "Efficace quando la fonte dell'immagine è valida", + "previewSrc" : "Fonte immagine ad alta risoluzione" + }, + "progress": { + ...en.progress, + + "value": "Valore", + "valueTooltip": "La percentuale di completamento come valore compreso tra 0 e 100", + "showInfo": "Mostra valore", + "valueDesc": "Valore di avanzamento corrente, compreso tra 0 e 100", + "showInfoDesc": "Visualizzazione o meno del valore di avanzamento corrente", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Inserire un URL valido o una stringa Base64", + "src": "File URI", + "srcTooltip": "Anteprima del contenuto del link fornito tramite l'incorporazione di HTML, possono essere supportati anche dati codificati Base64, ad esempio: data:application/pdf; base64,AAA... CCC", + "srcDesc": "The File URI", + }, + "divider": { + ...en.divider, + + "title": "Titolo", + "align": "Allineamento", + "dashed": "Tratteggiato", + "type": "Tipo verticale", + "dashedDesc": "Utilizzo o meno della linea tratteggiata", + "titleDesc": "Titolo del divisore", + "alignDesc": "Allineamento del titolo del divisore", + }, + "QRCode": { + ...en.QRCode, + + "value": "Codice QR Valore del contenuto", + "valueTooltip": "Il valore contiene un massimo di 2953 caratteri. Il valore del codice QR può codificare vari tipi di dati, tra cui messaggi di testo, URL, dettagli di contatto (VCard/meCard), credenziali di accesso al Wi-Fi, indirizzi e-mail, numeri di telefono, messaggi SMS, coordinate di geolocalizzazione, dettagli di eventi del calendario, informazioni di pagamento, indirizzi di criptovalute e link per il download di app.", + "valueDesc": "Il valore del contenuto del codice QR", + "level": "Livello di tolleranza ai guasti", + "levelTooltip": "Si riferisce alla capacità del codice QR di essere scansionato anche se una parte di esso è bloccata. Più alto è il livello, più complesso è il codice.", + "includeMargin": "Mostra il margine", + "image": "Visualizzazione dell'immagine al centro", + "L": "L (Basso)", + "M": "M (Medio)", + "Q": "Q (quartile)", + "H": "H (Alto)", + "maxLength": "Il contenuto è troppo lungo. Impostare la lunghezza a meno di 2953 caratteri.", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Rientro di ogni livello", + "expandToggle": "Espandere la struttura JSON", + "theme": "Tema del colore", + "valueDesc": "Dati JSON correnti", + "default": "Predefinito", + "defaultDark": "Predefinito Scuro", + "neutralLight": "Luce neutra", + "neutralDark": "Neutro scuro", + "azure": "Azzurro", + "darkBlue": "Blu scuro", + }, + "audio": { + ...en.audio, + + "src": "URI della sorgente audio o stringa Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Autoplay", + "loop": "Anello", + "srcDesc": "URI audio corrente o stringa Base64 come data:audio/mpeg;base64,AAA... CCC", + "play": "Gioco", + "playDesc": "Attivato quando viene riprodotto l'audio", + "pause": "Pausa", + "pauseDesc": "Attivato quando l'audio è in pausa", + "ended": "Terminato", + "endedDesc": "Attivato quando l'audio finisce di essere riprodotto", + }, + "video": { + ...en.video, + + "src": "URI sorgente video o stringa Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL del poster", + "defaultPosterUrl": "", + "autoPlay": "Autoplay", + "loop": "Anello", + "controls": "Nascondere i controlli", + "volume": "Volume", + "playbackRate": "Velocità di riproduzione", + "posterTooltip": "Il valore predefinito è il primo fotogramma del video.", + "autoPlayTooltip": "Dopo il caricamento del video, la riproduzione avverrà automaticamente. Se si modifica questo valore da Vero a Falso, il video viene messo in pausa. (Se è impostato un poster, verrà riprodotto dal pulsante Poster).", + "controlsTooltip": "Nascondere i controlli di riproduzione video. Potrebbe non essere completamente supportato da tutte le sorgenti video.", + "volumeTooltip": "Impostazione del volume del lettore, tra 0 e 1", + "playbackRateTooltip": "Impostare la frequenza del lettore, tra 1 e 2", + "srcDesc": "URI audio corrente o stringa Base64 come data:video/mp4;base64, AAA... CCC", + "play": "Gioco", + "playDesc": "Attivato quando viene riprodotto un video", + "pause": "Pausa", + "pauseDesc": "Attivato quando il video è in pausa", + "load": "Carico", + "loadDesc": "Attivato al termine del caricamento della risorsa video", + "ended": "Terminato", + "endedDesc": "Attivato al termine della riproduzione del video", + "currentTimeStamp": "Posizione di riproduzione corrente del video in secondi", + "duration": "La durata totale del video in secondi", + }, + "media": { + ...en.media, + + "playDesc": "Inizia la riproduzione del supporto.", + "pauseDesc": "Mette in pausa la riproduzione multimediale.", + "loadDesc": "Ripristina il supporto all'inizio e riavvia Selezionando la risorsa multimediale.", + "seekTo": "Cerca fino al numero di secondi indicato, o alla frazione se la quantità è compresa tra 0 e 1", + "seekToAmount": "Numero di secondi o frazione se è compreso tra 0 e 1", + "showPreview": "Anteprima dello spettacolo", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Valore iniziale", + "end": "Valore finale", + "step": "Dimensione del passo", + "stepTooltip": "Granularità del cursore, il valore deve essere maggiore di 0 e divisibile per (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Selezionare un'icona", + "insertIcon": "Inserire un'icona", + "insertImage": "Inserire un'immagine o", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Selezionare una forma", + "insertShape": "Inserire una forma", + "insertImage": "Inserire un'immagine o", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Inserire il periodo di timeout corretto in ms, l'ingresso attuale è: {value}", + "timeoutLessThanMinError": "L'ingresso deve essere maggiore di {left}, l'ingresso corrente è: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Singolo", + "multiple": "Multiplo", + "close": "Chiudere", + "mode": "Modalità di selezione della riga", + }, + "container": { + ...en.container, + + "title": "Titolo del contenitore visualizzato", + "titleTooltip": "Il titolo del contenitore", + "flowWidth": "Larghezza del contenuto", + "floatType": "Testo Tipo fluttuante", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Posizionamento del pulsante di chiusura", + "placement": "Posizionamento dei cassetti", + "size": "Dimensione", + "top": "In alto", + "right": "Diritto", + "center": "Centro", + "bottom": "Bottom", + "left": "A sinistra", + "title": "Titolo del cassetto", + "titleAlign": "Allineamento dei titoli", + "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", + "heightTooltip": "Pixel, ad esempio 378", + "openDrawerDesc": "Cassetto aperto", + "closeDrawerDesc": "Chiudere il cassetto", + "width": "Larghezza cassetto", + "height": "Altezza cassetto", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Livello di registro dell'SDK Agora", + "placement": "Posizionamento dei cassetti per le riunioni", + "meeting": "Impostazioni della riunione", + "cameraView": "Camera View", + "cameraViewDesc": "Vista della telecamera dell'utente locale (Host)", + "screenShared": "Schermo condiviso", + "screenSharedDesc": "Schermo condiviso dall'utente locale (Host)", + "audioUnmuted": "Audio non silenziato", + "audioMuted": "Audio disattivato", + "videoClicked": "Video cliccato", + "videoOff": "Video Off", + "videoOn": "Video On", + "size": "Dimensione", + "top": "In alto", + "host": "Host della sala riunioni. È necessario gestire l'host come propria applicazione logica.", + "participants": "Partecipanti alla sala riunioni", + "shareScreen": "Schermo condiviso dall'utente locale", + "appid": "ID applicazione Agora", + "meetingName": "Nome della riunione", + "localUserID": "ID utente host", + "userName": "Nome utente host", + "rtmToken": "Gettone Agora RTM", + "rtcToken": "Gettone Agora RTC", + "noVideo": "Nessun video", + "profileImageUrl": "URL dell'immagine del profilo", + "right": "Diritto", + "bottom": "Bottom", + "videoId": "ID flusso video", + "audioStatus": "Audio Status", + "left": "A sinistra", + "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", + "heightTooltip": "Pixel, ad esempio 378", + "openDrawerDesc": "Cassetto aperto", + "closeDrawerDesc": "Chiudere il cassetto", + "width": "Larghezza cassetto", + "height": "Altezza cassetto", + "actionBtnDesc": "Pulsante di azione", + "broadCast": "Messaggi di trasmissione", + "title": "Titolo della riunione", + "meetingCompName": "Controllore di riunioni Agora", + "sharingCompName": "Schermo Condividi Stream", + "videoCompName": "Camera Stream", + "videoSharingCompName": "Schermo Condividi Stream", + "meetingControlCompName": "Icon Button", + "meetingCompDesc": "Componente della riunione", + "meetingCompControls": "Controllo delle riunioni", + "meetingCompKeywords": "Agorà Meeting, Web Meeting, Collaborazione", + "iconSize": "Dimensione dell'icona", + "userId": "ID utente host", + "roomId": "ID camera", + "meetingActive": "Riunione in corso", + "messages": "Messaggi trasmessi", + }, + "settings": { + ...en.settings, + + "title": "Impostazioni", + "userGroups": "Gruppi di utenti", + "organization": "Spazi di lavoro", + "subscription": "Abbonamenti", + "audit": "Registri di controllo", + "theme": "Temi", + "plugin": "Plugin", + "advanced": "Avanzato", + "apiDocs": "Documenti API", + "lab": "Laboratorio", + "branding": "Branding", + "oauthProviders": "Autenticazione utente", + "appUsage": "Registri di utilizzo delle app", + "environments": "Ambienti", + "premium": "Premio", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Admin", + "superAdmin": "Super amministratore", + "adminGroupRoleInfo": "L'amministratore può gestire i membri e le risorse del gruppo", + "adminOrgRoleInfo": "Gli amministratori possiedono tutte le risorse e possono gestire i gruppi.", + "member": "Membro", + "memberGroupRoleInfo": "Il membro può vedere i membri del gruppo", + "memberOrgRoleInfo": "I membri possono utilizzare o visitare solo le risorse a cui hanno accesso.", + "title": "Membri", + "createGroup": "Crea gruppo", + "newGroupPrefix": "Nuovo Gruppo", + "allMembers": "Tutti i membri", + "deleteModalTitle": "Cancellare questo gruppo", + "deleteModalContent": "Il gruppo eliminato non può essere ripristinato. Siete sicuri di voler eliminare il gruppo?", + "addMember": "Aggiungi membri", + "nameColumn": "Nome utente", + "joinTimeColumn": "Tempo di adesione", + "actionColumn": "Funzionamento", + "roleColumn": "Ruolo", + "exitGroup": "Gruppo di uscita", + "moveOutGroup": "Rimuovere dal gruppo", + "inviteUser": "Invitare i membri", + "exitOrg": "Lasciare", + "exitOrgDesc": "Siete sicuri di voler lasciare questo spazio di lavoro?", + "moveOutOrg": "Rimuovere", + "moveOutOrgDescSaasMode": "Siete sicuri di voler rimuovere l'utente {name} da questo spazio di lavoro?", + "moveOutOrgDesc": "Siete sicuri di voler rimuovere l'utente {name}? Questa azione non può essere recuperata.", + "devGroupTip": "I membri del gruppo di sviluppatori hanno i privilegi per creare applicazioni e fonti di dati.", + "lastAdminQuit": "L'ultimo amministratore non può uscire.", + "organizationNotExist": "L'area di lavoro corrente non esiste", + "inviteUserHelp": "È possibile copiare il link di invito da inviare all'utente", + "inviteUserLabel": "Link per l'invito:", + "inviteCopyLink": "Copiare il link", + "inviteText": "{userName} vi invita a unirvi allo spazio di lavoro \"{organization}\", cliccate sul link per unirvi: {inviteLink}", + "groupName": "Nome del gruppo", + "createTime": "Creare tempo", + "manageBtn": "Gestire", + "userDetail": "Dettaglio", + "syncDeleteTip": "Questo gruppo è stato eliminato dalla rubrica.", + "syncGroupTip": "Questo gruppo è un gruppo di sincronizzazione della rubrica e non può essere modificato.", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Nuovo spazio di lavoro (organizzazione)", + "title": "Spazio di lavoro", + "createOrg": "Crea spazio di lavoro (organizzazione)", + "deleteModalTitle": "Siete sicuri di voler eliminare questo spazio di lavoro?", + "deleteModalContent": "Si sta per eliminare l'area di lavoro {permanentlyDelete}. Una volta eliminato, lo spazio di lavoro {notRestored}.", + "permanentlyDelete": "In modo permanente", + "notRestored": "Non può essere ripristinato", + "deleteModalLabel": "Inserire il nome dell'area di lavoro {name} per confermare l'operazione:", + "deleteModalTip": "Inserire il nome dell'area di lavoro", + "deleteModalErr": "Il nome dell'area di lavoro non è corretto", + "deleteModalBtn": "Cancellare", + "editOrgTitle": "Modifica delle informazioni sullo spazio di lavoro", + "orgNameLabel": "Nome dell'area di lavoro:", + "orgNameCheckMsg": "Il nome dell'area di lavoro non può essere vuoto", + "orgLogo": "Logo dello spazio di lavoro:", + "logoModify": "Modificare l'immagine", + "inviteSuccessMessage": "Partecipare con successo all'area di lavoro", + "inviteFailMessage": "Impossibile unirsi allo spazio di lavoro", + "uploadErrorMessage": "Errore di caricamento", + "orgName": "Nome dell'area di lavoro", + }, + "freeLimit": "Prova gratuita", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Scheda interruttore", + "switchTabDesc": "Attivato quando si passa da una scheda all'altra", + "tab": "Schede", + "atLeastOneTabError": "Il contenitore delle schede contiene almeno una scheda", + "selectedTabKeyDesc": "Scheda attualmente selezionata", + "iconPosition": "Icona Posizione", + "placement": "Posizionamento delle schede", + "showTabs": "Mostra schede", + "gutter": "Gap", + "gutterTooltip": "La distanza tra le schede in px", + "tabsCentered": "Schede centrate", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Trascinare i componenti dal riquadro destro o", + "openDialogButton": "Generare un modulo da una fonte di dati", + "resetAfterSubmit": "Reimpostazione dopo l'invio riuscito", + "initialData": "Dati iniziali", + "disableSubmit": "Disattivare l'invio", + "success": "Modulo generato con successo", + "selectCompType": "Selezionare il tipo di componente", + "dataSource": "Fonte dei dati:", + "selectSource": "Seleziona la fonte", + "table": "Tabella:", + "selectTable": "Selezionare la tabella", + "columnName": "Nome della colonna", + "dataType": "Tipo di dati", + "compType": "Tipo di componente", + "required": "Richiesto", + "generateForm": "Generare un modulo", + "compSelectionError": "Tipo di colonna non configurato", + "compTypeNameError": "Impossibile ottenere il nome del tipo di componente", + "noDataSourceSelected": "Nessuna fonte di dati selezionata", + "noTableSelected": "Nessun tavolo selezionato", + "noColumn": "Nessuna colonna", + "noColumnSelected": "Nessuna colonna selezionata", + "noDataSourceFound": "Non è stata trovata alcuna origine dati supportata. Creare una nuova origine dati", + "noTableFound": "Non sono state trovate tabelle in questa fonte di dati, si prega di selezionare un'altra fonte di dati.", + "noColumnFound": "Non è stata trovata alcuna colonna supportata in questa tabella. Selezionare un'altra tabella", + "formTitle": "Titolo del modulo", + "name": "Nome", + "nameTooltip": "Il nome dell'attributo nei dati del modulo, se lasciato vuoto, è predefinito con il nome del componente.", + "notSupportMethod": "Non supportato Metodi:", + "notValidForm": "Il modulo non è valido", + "resetDesc": "Ripristino dei dati del modulo al valore predefinito", + "clearDesc": "Cancella i dati del modulo", + "setDataDesc": "Impostare i dati del modulo", + "valuesLengthError": "Numero di parametro Errore", + "valueTypeError": "Parametro Tipo Errore", + "dataDesc": "Dati del modulo corrente", + "loadingDesc": "Se il modulo è in fase di caricamento?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Aperto", + "openDesc": "Attivato all'apertura della finestra di dialogo modale", + "close": "Chiudere", + "closeDesc": "Attivato quando la finestra di dialogo modale viene chiusa", + "openModalDesc": "Aprire la finestra di dialogo", + "closeModalDesc": "Chiudere la finestra di dialogo", + "visibleDesc": "È visibile? Se è vero, viene visualizzata la finestra di dialogo corrente.", + "title": "Titolo del cassetto", + "titleAlign": "Allineamento dei titoli", + "modalHeight": "Altezza modale", + "modalHeightTooltip": "Pixel, Esempio: 222", + "modalWidth": "Larghezza modale", + "modalWidthTooltip": "Numero o percentuale, esempio: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Conteggio delle righe", + "noOfRowsTooltip": "Numero di righe nell'elenco - di solito impostato su una variabile (ad es., '{{query1.data.length}}') per presentare i risultati della query.", + "noOfColumns": "Conteggio colonne", + "itemIndexName": "Voce di dati Nome dell'indice", + "itemIndexNameDesc": "Il nome della variabile che si riferisce all'indice dell'elemento, predefinito come {default}.", + "itemDataName": "Voce di dati Nome dell'oggetto", + "itemDataNameDesc": "Il nome della variabile che si riferisce all'oggetto dati dell'elemento, predefinito come {default}.", + "itemsDesc": "Esporre i dati dei componenti nell'elenco", + "dataDesc": "I dati JSON utilizzati nell'elenco corrente", + "dataTooltip": "Se si imposta solo un numero, questo campo verrà considerato come conteggio delle righe e i dati verranno considerati vuoti.", + }, + "navigation": { + ...en.navigation, + + "addText": "Aggiungi voce di sottomenu", + "logoURL": "Navigazione Logo URL", + "horizontalAlignment": "Allineamento orizzontale", + "logoURLDesc": "È possibile visualizzare un logo sul lato sinistro inserendo un valore URI o una stringa Base64 come data:image/png;base64,AAA... CCC", + "itemsDesc": "Voci del menu di navigazione gerarchico", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Sottomenu {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Attivo", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "L'URL di origine del contenuto dell'IFrame. Assicurarsi che l'URL sia HTTPS o localhost. Assicurarsi inoltre che l'URL non sia bloccato dalla Content Security Policy (CSP) del browser. L'intestazione \"X-Frame-Options\" non deve essere impostata su \"DENY\" o \"SAMEORIGIN\".", + "allowDownload": "Consentire il download", + "allowSubmitForm": "Consentire l'invio del modulo", + "allowMicrophone": "Consentire il microfono", + "allowCamera": "Consentire l'uso della fotocamera", + "allowPopup": "Consentire i popup", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Valore booleano predefinito", + "open": "Su", + "close": "Spento", + "openDesc": "Attivato all'accensione dell'interruttore", + "closeDesc": "Attivato quando l'interruttore è spento", + "valueDesc": "Stato attuale dell'interruttore", + }, + "signature": { + ...en.signature, + + "tips": "Testo del suggerimento", + "signHere": "Firma qui", + "showUndo": "Mostra Annullamento", + "showClear": "Mostra chiaro", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Tutti gli elementi di dati attualmente memorizzati", + "setItemDesc": "Aggiungere un elemento", + "removeItemDesc": "Rimuovere un elemento", + "clearItemDesc": "Cancella tutti gli articoli", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "URL aperto", + "openApp": "App aperta", + "copyToClipboard": "Copia negli Appunti", + "downloadFile": "Scarica il file", + }, + "messageComp": { + ...en.messageComp, + + "info": "Inviare una notifica", + "loading": "Inviare una notifica di caricamento", + "success": "Inviare una notifica di successo", + "warn": "Inviare una notifica di avviso", + "error": "Inviare una notifica di errore", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "chiudere una notifica", + "info": "Inviare una notifica", + "loading": "Inviare una notifica di caricamento", + "success": "Inviare una notifica di successo", + "warn": "Inviare una notifica di avviso", + "error": "Inviare una notifica di errore", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Tema dell'interruttore", + }, + "transformer": { + ...en.transformer, + + "preview": "Anteprima", + "docLink": "Per saperne di più sui Transformers...", + "previewSuccess": "Anteprima del successo", + "previewFail": "Anteprima Bocciata", + "deleteMessage": "Eliminazione del trasformatore riuscita. È possibile utilizzare {undoKey} per annullare.", + "documentationText": "I trasformatori sono progettati per la trasformazione dei dati e il riutilizzo del codice JavaScript multilinea. I trasformatori possono essere utilizzati per adattare i dati provenienti da query o componenti alle esigenze dell'applicazione locale. A differenza delle query JavaScript, i trasformatori sono progettati per eseguire operazioni di sola lettura, il che significa che non è possibile attivare una query o aggiornare uno stato temporaneo all'interno di un trasformatore.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Valore iniziale", + "valueTooltip": "Il valore iniziale memorizzato nello stato temporaneo può essere un booleano, una stringa, un numero o qualsiasi valore JSON valido.", + "docLink": "Per saperne di più sugli Stati temporanei...", + "pathTypeError": "Il percorso deve essere una stringa o una matrice di valori", + "unStructuredError": "I dati non strutturati {prev} non possono essere aggiornati da {path}.", + "valueDesc": "Valore di Stato temporaneo", + "deleteMessage": "Lo stato temporaneo è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", + "documentationText": "Gli stati temporanei sono una potente funzione utilizzata per gestire variabili complesse che aggiornano dinamicamente lo stato dei componenti dell'applicazione. Questi stati fungono da memoria intermedia o transitoria per i dati che possono cambiare nel tempo a causa delle interazioni dell'utente o di altri processi.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Dati", + "dataDesc": "Dati dell'attuale risponditore dei dati", + "dataTooltip": "Quando questi dati vengono modificati, si attivano le azioni successive.", + "docLink": "Per saperne di più sui Data Responder...", + "deleteMessage": "Il risponditore dati è stato eliminato con successo. È possibile utilizzare {undoKey} per annullare.", + "documentationText": "Quando si sviluppa un'applicazione, è possibile assegnare eventi ai componenti per monitorare le modifiche di dati specifici. Ad esempio, un componente Table può avere eventi come \"Row select change\", \"Filter change\", \"Sort change\" e \"Page change\" per monitorare i cambiamenti nella proprietà selectedRow. Tuttavia, per le modifiche agli stati temporanei, ai trasformatori o ai risultati delle query, dove gli eventi standard non sono disponibili, si utilizzano i risponditori di dati. Essi consentono di rilevare e reagire a qualsiasi modifica dei dati.", + }, + "theme": { + ...en.theme, + + "title": "Temi", + "createTheme": "Creare il tema", + "themeName": "Nome del tema:", + "themeNamePlaceholder": "Inserire il nome del tema", + "defaultThemeTip": "Tema predefinito:", + "createdThemeTip": "Il tema che avete creato:", + "option": "Option{index}", + "input": "Ingresso", + "confirm": "Ok", + "emptyTheme": "Nessun tema disponibile", + "click": "", + "toCreate": "", + "nameColumn": "Nome", + "defaultTip": "Predefinito", + "updateTimeColumn": "Tempo di aggiornamento", + "edit": "Modifica", + "cancelDefaultTheme": "Tema predefinito non impostato", + "setDefaultTheme": "Imposta come tema predefinito", + "copyTheme": "Tema duplicato", + "setSuccessMsg": "Impostazione riuscita", + "cancelSuccessMsg": "Disassemblaggio Riuscito", + "deleteSuccessMsg": "Cancellazione riuscita", + "checkDuplicateNames": "Il nome del tema esiste già, inserirlo nuovamente", + "copySuffix": " Copia", + "saveSuccessMsg": "Salvato con successo", + "leaveTipTitle": "Suggerimenti", + "leaveTipContent": "Non hai ancora salvato, confermi la partenza?", + "leaveTipOkText": "Lasciare", + "goList": "Torna all'elenco", + "saveBtn": "Risparmiare", + "mainColor": "Colori principali", + "text": "Colori del testo", + "layout": "Impostazioni di layout", + "fonts": "Impostazioni dei caratteri", + "components": "Modelli di componenti", + "charts": "Definizione di eCharts", + "defaultTheme": "Predefinito", + "yellow": "Giallo", + "green": "Verde", + "previewTitle": "Anteprima del tema\nEsempi di componenti che utilizzano i colori del tema", + "dateColumn": "Data", + "emailColumn": "Email", + "phoneColumn": "Telefono", + "subTitle": "Titolo", + "linkLabel": "Collegamento a", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progressi", + "sliderLabel": "Cursore", + "radioLabel": "Radio", + "checkboxLabel": "Casella di controllo", + "buttonLabel": "Pulsante del modulo", + "switch": "Interruttore", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "palloncino.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Anteprima dello stile del grafico", + "chartSpending": "Spesa", + "chartBudget": "Bilancio", + "chartAdmin": "Amministrazione", + "chartFinance": "Finanza", + "chartSales": "Vendite", + "chartFunnel": "Grafico a imbuto", + "chartShow": "Mostra", + "chartClick": "Cliccare", + "chartVisit": "Visita", + "chartQuery": "Interrogazione", + "chartBuy": "Acquista", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Colore del marchio", + "primaryDesc": "Colore primario predefinito utilizzato dalla maggior parte dei componenti", + "textDark": "Colore del testo scuro", + "textDarkDesc": "Utilizzato quando il colore di sfondo è chiaro", + "textLight": "Colore del testo chiaro", + "textLightDesc": "Utilizzato quando il colore di sfondo è scuro", + "canvas": "Colore della tela", + "canvasDesc": "Colore di sfondo predefinito dell'applicazione", + "primarySurface": "Colore del contenitore", + "primarySurfaceDesc": "Colore di sfondo predefinito per componenti come le tabelle", + "borders": "Stili di bordo", + "spacing": "Stili di spaziatura", + "font": "Stili di carattere", + "fonts": "Caratteri", + "borderRadius": "Raggio del bordo", + "borderRadiusDesc": "Raggio del bordo predefinito utilizzato dalla maggior parte dei componenti", + "borderColor": "Colore del bordo", + "borderColorDesc": "Colore predefinito del bordo utilizzato dalla maggior parte dei componenti", + "borderWidth": "Larghezza del bordo", + "borderWidthDesc": "Larghezza predefinita del bordo utilizzata dalla maggior parte dei componenti", + "borderStyle": "Stile del bordo", + "borderStyleDesc": "Stile di bordo predefinito utilizzato dalla maggior parte dei componenti", + "fontFamily": "Famiglia di caratteri", + "fontFamilyDesc": "Famiglia di caratteri predefinita utilizzata dalla maggior parte dei componenti", + "chart": "Stile del grafico", + "chartDesc": "Qui è possibile inserire il tema JSON di eCharts per definire lo stile dei grafici in tutti i dettagli.", + "echartsJson": "È possibile utilizzare il Generatore JSON del tema. Copiare il JSON dal generatore e incollarlo qui.", + "margin": "Margine", + "marginDesc": "Margine predefinito tipicamente utilizzato per la maggior parte dei componenti", + "padding": "Imbottitura", + "paddingDesc": "Imbottitura predefinita tipicamente utilizzata per la maggior parte dei componenti", + "containerHeaderPadding": "Imbottitura della testata", + "containerheaderpaddingDesc": "Imbottitura predefinita dell'intestazione, tipicamente utilizzata per la maggior parte dei componenti.", + "gridColumns": "Colonne della griglia della tela", + "gridColumnsDesc": "Numero predefinito di colonne, tipicamente utilizzato per la maggior parte dei contenitori.", + "loadingIndicators": "Indicatori di carico", + "showComponentLoadingIndicators": "Mostra gli indicatori di caricamento quando il componente viene caricato", + "showDataLoadingIndicators": "Mostra indicatori di caricamento durante il caricamento dei dati", + "showIndicatorsDuringDataLoading": "Mostra indicatori durante il caricamento dei dati", + "dataLoadingIndicator": "Indicatore di caricamento dei dati" + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugin", + "npmPluginTitle": "plugin npm", + "npmPluginDesc": "Impostare i plugin npm per tutte le applicazioni dell'area di lavoro corrente.", + "npmPluginEmpty": "Non sono stati aggiunti plugin npm.", + "npmPluginAddButton": "Aggiungere un plugin npm", + "saveSuccess": "Salvato con successo", + }, + "advanced": { + ...en.advanced, + + "title": "Avanzato", + "defaultHomeTitle": "Homepage predefinita", + "defaultHomeHelp": "La homepage è l'app che tutti i non sviluppatori vedranno per impostazione predefinita quando accedono. Nota: assicurarsi che l'app selezionata sia accessibile ai non sviluppatori.", + "defaultHomePlaceholder": "Selezionare la pagina iniziale predefinita", + "saveBtn": "Risparmiare", + "preloadJSTitle": "Precaricare JavaScript", + "preloadJSHelp": "Impostare il codice JavaScript precaricato per tutte le applicazioni nell'area di lavoro corrente.", + "preloadCSSTitle": "Precaricare i CSS", + "preloadCSSHelp": "Impostare il codice CSS precaricato per tutte le applicazioni nell'area di lavoro corrente.", + "preloadCSSApply": "Applicare alla homepage dell'area di lavoro", + "preloadLibsTitle": "Libreria JavaScript", + "preloadLibsHelp": "Impostazione di librerie JavaScript precaricate per tutte le applicazioni nell'area di lavoro corrente; il sistema ha integrato lodash, day.js, uuid, numbro per l'uso diretto. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione e quindi hanno un certo impatto sulle prestazioni dell'applicazione.", + "preloadLibsEmpty": "Non sono state aggiunte librerie JavaScript", + "preloadLibsAddBtn": "Aggiungere una biblioteca", + "saveSuccess": "Salvato con successo", + "AuthOrgTitle": "Schermata di benvenuto dell'area di lavoro", + "AuthOrgDescrition": "L'URL per l'accesso degli utenti all'area di lavoro corrente.", + "APIConsumption": "Consumo di API", + "APIConsumptionDescription": "Qui si può vedere il consumo di API per tutte le applicazioni nell'area di lavoro corrente.", + "overallAPIConsumption": "Consumo complessivo di API in questo spazio di lavoro fino ad ora", + "lastMonthAPIConsumption": "Consumo API dell'ultimo mese, in questo spazio di lavoro", + "npmRegistryTitle": "Registro NPM personalizzato", + "npmRegistryHelp": "Impostare un registro NPM personalizzato per consentire il recupero dei plugin da un registro NPM privato.", + "showHeaderInPublicApps": "Mostra intestazione nella vista pubblica", + "showHeaderInPublicAppsHelp": "Impostare la visibilità dell'intestazione nella vista pubblica per tutte le applicazioni", + }, + "branding": { + ...en.branding, + + "title": "Impostazioni del Branding", + "logoSection": "Loghi", + "logo": "Logo", + "logoHelp": "Carica il logo della tua azienda in formato SVG o PNG.", + "squareLogo": "Logo Quadrato", + "squareLogoHelp": "Carica una versione quadrata del tuo logo in formato SVG o PNG.", + "colorFontSection": "Colori e Font", + "mainBrandingColor": "Colore Principale del Branding", + "mainBrandingColorHelp": "Seleziona il colore principale per il tuo branding.", + "editorHeaderColor": "Colore dell'intestazione dell'editor", + "editorHeaderColorHelp": "Seleziona il colore dell'intestazione dell'editor.", + "adminSidebarColor": "Colore della barra laterale amministrativa", + "adminSidebarColorHelp": "Seleziona il colore della barra laterale amministrativa.", + "editorSidebarColor": "Colore della barra laterale dell'editor", + "editorSidebarColorHelp": "Seleziona il colore della barra laterale dell'editor.", + "font": "Font", + "fontHelp": "Seleziona un font da Google Fonts per la tua applicazione.", + "textSection": "Testi e Pagine", + "errorPage": "Testo della pagina di errore", + "errorPageHelp": "Inserisci il testo visualizzato nella pagina di errore.", + "signUpPage": "Testo della pagina di registrazione", + "signUpPageHelp": "Inserisci il testo visualizzato nella pagina di registrazione.", + "loggedOutPage": "Testo della pagina di disconnessione", + "loggedOutPageHelp": "Inserisci il testo visualizzato nella pagina di disconnessione.", + "standardDescription": "Descrizione standard", + "standardDescriptionHelp": "Inserisci la descrizione standard per le informazioni meta SEO.", + "standardTitle": "Titolo standard", + "standardTitleHelp": "Inserisci il titolo standard per le informazioni meta SEO.", + "showDocumentation": "Mostra Documentazione", + "submitIssue": "Consenti invio problema", + "whatsNew": "Abilita \"Novità\"", + "saveButton": "Salva Impostazioni", + "errorPageImage": "Carica un'immagine per la pagina di errore in formato SVG o PNG.", + "signUpPageImage": "Carica un'immagine per la pagina di registrazione in formato SVG o PNG.", + "loggedOutPageImage": "Carica un'immagine per la pagina di disconnessione in formato SVG o PNG.", + "documentationLink": "Link alla documentazione", + "documentationLinkPlaceholder": "Inserisci l'URL della tua documentazione...", + "documentationLinkHelp": "Fornisci un URL valido che gli utenti possano visitare per la documentazione.", + "whatsNewSection": "Impostazioni documentazione", + "whatsNewLink": "Link alla documentazione", + "whatsNewLinkPlaceholder": "Inserisci l'URL della tua documentazione...", + "whatsNewLinkHelp": "Fornisci un URL valido che gli utenti possano visitare per le novità." + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Impossibile connettersi al server, controllare la rete", + "200": "Il successo", + "201": "Creato", + "204": "Nessun contenuto", + "400": "Brutta richiesta", + "401": "Autenticazione fallita, accedere di nuovo", + "403": "Nessun permesso, contattare l'amministratore per l'autorizzazione", + "404": "Non trovato", + "500": "Servizio occupato, riprovare più tardi", + "timeout": "Timeout della richiesta", + }, + "share": { + ...en.share, + + "title": "Condividi", + "viewer": "Visualizzatore", + "editor": "Editor", + "owner": "Proprietario", + "datasourceViewer": "Può essere utilizzato", + "datasourceOwner": "Può gestire", + }, + "debug": { + ...en.debug, + + "title": "Titolo", + "switch": "Componente dell'interruttore:", + }, + "module": { + ...en.module, + + "emptyText": "Nessun dato", + "docLink": "Per saperne di più sui moduli...", + "documentationText": "I moduli sono applicazioni complete che possono essere incluse e ripetute in altre applicazioni e funzionano come un singolo componente. Poiché i moduli possono essere incorporati, devono essere in grado di interagire con le applicazioni o i siti web esterni. Queste quattro impostazioni aiutano a supportare la comunicazione con un modulo.", + "circularReference": "Riferimento circolare, il modulo/applicazione corrente non può essere utilizzato!", + "emptyTestInput": "Il modulo corrente non ha ingressi da testare", + "emptyTestMethod": "Il modulo attuale non ha un metodo di verifica", + "name": "Nome", + "input": "Ingresso", + "params": "Parametri", + "emptyParams": "Non è stato aggiunto alcun parametro", + "emptyInput": "Non è stato aggiunto alcun input", + "emptyMethod": "Non è stato aggiunto alcun metodo", + "emptyOutput": "Non è stata aggiunta alcuna uscita", + "data": "Dati", + "string": "Stringa", + "number": "Numero", + "array": "Array", + "boolean": "Booleano", + "query": "Interrogazione", + "autoScaleCompHeight": "Bilance di altezza per componenti con contenitore", + "excuteMethod": "Eseguire il metodo {name}", + "method": "Metodo", + "action": "Azione", + "output": "Uscita", + "nameExists": "Nome {name} Già esistente", + "eventTriggered": "L'evento {name} viene attivato", + "globalPromptWhenEventTriggered": "Visualizza un prompt globale quando viene attivato un evento", + "emptyEventTest": "Il modulo corrente non ha eventi da testare", + "emptyEvent": "Non è stato aggiunto alcun evento", + "event": "Evento", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "Il valore di ritorno è una funzione.", + "consume": "{time}", + "JSON": "Mostra JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Creare...", + "created": "Creare {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Autenticazione utente fallita, accedere di nuovo", + "verifyAccount": "Necessità di verificare l'account", + "functionNotSupported": "La versione attuale non supporta questa funzione. Contatta il team commerciale di Lowcoder per aggiornare il tuo account.", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Creazione del componente {comp} fallita", + "notHandledError": "{method} Metodo non eseguito", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Barra di navigazione", + "chooseApp": "Scegliere l'applicazione", + "iconTooltip": "Supporta il link src dell'immagine o la stringa Base64 come data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Nascosto agli utenti non autorizzati", + "queryParam": "Parametri della query URL", + "hashParam": "Parametri URL Hash", + "tabBar": "Barra delle schede", + "emptyTabTooltip": "Configurare questa pagina nel riquadro destro", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Telefono)", + "800": "800px (Tablet)", + "1440": "1440px (Laptop)", + "1920": "1920px (schermo panoramico)", + "3200": "3200px (schermo super grande)", + "title": "Impostazioni generali dell'app", + "autofill": "Autofill", + "userDefined": "Personalizzato", + "default": "Predefinito", + "tooltip": "Chiudere il Popover dopo l'impostazione", + "canvasMaxWidth": "Larghezza massima della tela per questa applicazione", + "userDefinedMaxWidth": "Larghezza massima personalizzata", + "inputUserDefinedPxValue": "Inserire un valore Pixel personalizzato", + "maxWidthTip": "La larghezza massima deve essere maggiore o uguale a 350.", + "themeSetting": "Tema di stile applicato", + "themeSettingDefault": "Predefinito", + "themeCreate": "Creare il tema", + "appTitle": "Titolo", + "appDescription": "Descrizione", + "appCategory": "Categoria", + "showPublicHeader": "Mostra l'intestazione nella vista pubblica", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Scorciatoie personalizzate", + "shortcut": "Scorciatoia", + "action": "Azione", + "empty": "Niente scorciatoie", + "placeholder": "Premere la scorciatoia", + "otherPlatform": "Altro", + "space": "Spazio", + }, + "profile": { + ...en.profile, + + "orgSettings": "Impostazioni dello spazio di lavoro", + "switchOrg": "Cambia spazio di lavoro", + "joinedOrg": "I miei spazi di lavoro", + "createOrg": "Crea spazio di lavoro", + "logout": "Disconnettersi", + "personalInfo": "Il mio profilo", + "bindingSuccess": "Legame {sourceName} Successo", + "uploadError": "Errore di caricamento", + "editProfilePicture": "Modificare", + "saveUserNameTooltip": "Premere Invio per salvare il nuovo nome utente. Se vedete la vostra e-mail, significa che l'abbiamo appena dirottata come nome utente e potete cambiarla con una migliore. L'e-mail come nome utente tecnico rimane inalterata.", + "changeAvatarTooltip": "È possibile caricare file PNG o JPG", + "nameCheck": "Il nome non può essere vuoto", + "name": "Nome:", + "namePlaceholder": "Inserire il proprio nome", + "toBind": "Per legare", + "binding": "È vincolante", + "bindError": "Errore di parametro, attualmente non supportato Legame.", + "bindName": "Legare {name}", + "loginAfterBind": "Dopo il collegamento, è possibile utilizzare {name} per accedere.", + "bindEmail": "Legare l'e-mail:", + "email": "Email", + "emailCheck": "Inserire un'e-mail valida", + "emailPlaceholder": "Inserisci il tuo indirizzo e-mail", + "submit": "Invia", + "bindEmailSuccess": "Successo della rilegatura via e-mail", + "passwordModifiedSuccess": "Password modificata con successo", + "passwordSetSuccess": "Password impostata con successo", + "oldPassword": "Vecchia password:", + "inputCurrentPassword": "Inserire la password attuale", + "newPassword": "Nuova password:", + "inputNewPassword": "Inserire la nuova password", + "confirmNewPassword": "Confermare la nuova password:", + "inputNewPasswordAgain": "Inserire nuovamente la nuova password", + "password": "Password:", + "modifyPassword": "Modifica della password", + "setPassword": "Impostare la password", + "alreadySetPassword": "Set di password", + "setPassPlaceholder": "È possibile accedere con la password", + "setPassAfterBind": "È possibile impostare la password dopo il collegamento dell'account", + "socialConnections": "Connessioni sociali", + "changeAvatar": "Cambia Avatar", + "about": "Circa", + "userId": "ID utente", + "createdAt": "Creato a", + "currentOrg": "Organizzazione attuale", + "settings": "Impostazioni", + "uiLanguage": "Lingua UI", + "info": "Info", + "createdApps": "Le vostre applicazioni create", + "createdModules": "I moduli creati", + "sharedApps": "Applicazioni condivise con voi", + "sharedModules": "Moduli condivisi con voi", + "onMarketplace": "Sul mercato", + "howToPublish": "Come pubblicare su Marketplace", + "memberOfOrgs": "Spazi di lavoro Soci", + "apiKeys": "Chiavi API", + "createApiKey": "Creare la chiave API", + "apiKeyName": "Nome", + "apiKeyDescription": "Descrizione", + "apiKeyCopy": "Fare clic sulla chiave Api per ottenere il valore negli appunti.", + "apiKey": "Chiave API", + "deleteApiKey": "Cancellare la chiave API", + "deleteApiKeyContent": "È sicuro di voler eliminare questa chiave API?", + "deleteApiKeyError": "Qualcosa è andato storto. Riprovare.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Scorciatoie da tastiera", + "click": "Cliccare", + "global": "Globale", + "toggleShortcutList": "Alternare le scorciatoie da tastiera", + "editor": "Editor", + "toggleLeftPanel": "Alterna il riquadro sinistro", + "toggleBottomPanel": "Alterna il riquadro inferiore", + "toggleRightPanel": "Alterna il riquadro destro", + "toggleAllPanels": "Alterna tutti i riquadri", + "preview": "Anteprima", + "undo": "Undo", + "redo": "Rifare", + "showGrid": "Mostra griglia", + "component": "Component", + "multiSelect": "Seleziona multiplo", + "selectAll": "Seleziona tutti", + "copy": "Copia", + "cut": "Tagliare", + "paste": "Incolla", + "move": "Muoversi", + "zoom": "Ridimensionamento", + "delete": "Cancellare", + "deSelect": "Deselezionare", + "queryEditor": "Editor di query", + "excuteQuery": "Eseguire la query corrente", + "editBox": "Editor di testo", + "formatting": "Formato", + "openInLeftPanel": "Aprire nel riquadro sinistro", + }, + "help": { + ...en.help, + + "videoText": "Panoramica", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Impossibile creare una nuova applicazione o origine dati?", + "permissionDenyContent": "Non si ha l'autorizzazione a creare l'applicazione e l'origine dati. Contattare l'amministratore per unirsi al gruppo di sviluppatori.", + "appName": "Applicazione tutorial", + "chat": "Chatta con noi", + "docs": "Visualizza la documentazione", + "editorTutorial": "Editor di tutorial", + "update": "Cosa c'è di nuovo?", + "version": "Versione", + "versionWithColon": "Versione:", + "submitIssue": "Invia un problema", + }, + "header": { + ...en.header, + + "nameCheckMessage": "Il nome non può essere vuoto", + "viewOnly": "Solo vista", + "recoverAppSnapshotTitle": "Ripristinare questa versione?", + "recoverAppSnapshotContent": "Ripristinare l'applicazione corrente alla versione creata in {time}.", + "recoverAppSnapshotMessage": "Ripristinare questa versione", + "returnEdit": "Ritorno all'editore", + "deploy": "Pubblicare", + "export": "Esportazione in JSON", + "editName": "Modifica nome", + "duplicate": "Duplicato {type}", + "snapshot": "La storia", + "scriptsAndStyles": "Sceneggiature e stile", + "appSettings": "Impostazioni dell'app", + "preview": "Anteprima", + "editError": "Modalità Anteprima storia, non è supportata alcuna operazione.", + "clone": "Clone", + "editorMode_layout": "Layout", + "editorMode_logic": "Logica", + "editorMode_both": "Entrambi", + "editorMode_layout_tooltip": "Personalizzare l'aspetto e il layout del componente, nella finestra di destra. Regolate l'aspetto, gli stili e le animazioni.", + "editorMode_logic_tooltip": "Impostate il funzionamento e l'interazione del vostro componente, nella finestra giusta. Gestite il suo contenuto e i suoi comportamenti interattivi.", + "AppEditingBlocked": "Modifica dell'app bloccata per:", + "AppEditingBlockedHint": "Le modifiche non verranno salvate mentre un altro utente sta modificando questa app.", + "AppEditingBlockedMessage": "Attendere prima di controllare lo stato di modifica dell'app.", + "AppEditingBlockedCheckStatus": "Controlla lo stato dell'app", + "AppEditingBlockedSomeone": "Qualcuno", + "AppEditingBlockedMessageSnipped": "sta modificando questa app", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Iscriviti", + "email": "E-mail:", + "inputEmail": "Inserisci il tuo indirizzo e-mail", + "inputValidEmail": "Inserire un'e-mail valida", + "forgotPassword": "Password dimenticata", + "forgotPasswordInfo": "Inserisci la tua e-mail e ti invieremo un link per reimpostare la tua password.", + "forgotPasswordSuccess": "Controllare l'e-mail per il link di reimpostazione della password.", + "forgotPasswordError": "Qualcosa è andato storto. Riprovare.", + "register": "Iscriviti", + "userLogin": "Accedi", + "login": "Accedi", + "bind": "Rilegatura", + "passwordCheckLength": "Almeno {min} Caratteri", + "passwordCheckContainsNumberAndLetter": "Deve contenere lettere e numeri", + "passwordCheckSpace": "Non può contenere caratteri di spazi bianchi", + "welcomeTitle": "Benvenuti a {productName}", + "inviteWelcomeTitle": "{username} vi invita a lavorare insieme", + "terms": "Termini", + "privacy": "Informativa sulla privacy", + "registerHint": "Ho letto e accetto il", + "chooseAccount": "Scegliere il proprio account", + "signInLabel": "Accesso con {name}", + "bindAccount": "Legare il conto", + "scanQrCode": "Scansionare il codice QR con {name}", + "invalidThirdPartyParam": "Param di terze parti non validi", + "account": "Conto", + "inputAccount": "Inserisci il tuo account", + "ldapLogin": "LDAP Sign In", + "resetPassword": "Reimpostare la password", + "resetPasswordDesc": "Reimpostare la password dell'utente {name}. Dopo la reimpostazione verrà generata una nuova password.", + "resetSuccess": "Azzeramento riuscito", + "resetSuccessDesc": "La reimpostazione della password è riuscita. La nuova password è: {password}", + "resetLostPasswordSuccess": "La reimpostazione della password è riuscita. Effettuare nuovamente il login.", + "copyPassword": "Copia della password", + "poweredByLowcoder": "Alimentato da: Lowcoder.cloud", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Aggiungere librerie JavaScript all'applicazione corrente tramite indirizzi URL. lodash, day.js, uuid, numbro sono integrati nel sistema per un uso immediato. Le librerie JavaScript vengono caricate prima dell'inizializzazione dell'applicazione, il che può avere un impatto sulle prestazioni dell'applicazione.", + "exportedAs": "Esportato come", + "urlTooltip": "Indirizzo URL della libreria JavaScript, [unpkg.com](https://unpkg.com/) o [jsdelivr.net](https://www.jsdelivr.com/) è raccomandato.", + "externalLibsHelperText": "Sono supportate solo le librerie che utilizzano l'approccio UMD (Universal Module Definition). Per saperne di più: https://github.com/umdjs/umd", + "recommended": "Consigliato", + "viewJSLibraryDocument": "Documento", + "jsLibraryURLError": "URL non valido", + "jsLibraryExist": "La libreria JavaScript esiste già", + "jsLibraryEmptyContent": "Nessuna libreria JavaScript aggiunta", + "jsLibraryDownloadError": "Errore nel download della libreria JavaScript", + "jsLibraryInstallSuccess": "Libreria JavaScript installata con successo", + "jsLibraryInstallFailed": "Installazione della libreria JavaScript non riuscita", + "jsLibraryInstallFailedCloud": "Forse la libreria non è disponibile nella Sandbox, [Documentazione](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{message}", + "add": "Aggiungi nuovo", + "jsHelpText": "Aggiungere un metodo o una variabile globale all'applicazione corrente.", + "cssHelpText": "Aggiungere stili all'applicazione corrente. La struttura del DOM può cambiare durante l'iterazione del sistema. Cercare di modificare gli stili attraverso le proprietà dei componenti.", + "scriptsAndStyles": "Script e stili", + "jsLibrary": "Libreria JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Component", + "componentContent": "Il pannello dei componenti destro offre molti blocchi di applicazioni (componenti) già pronti. Questi possono essere trascinati sulla tela per essere utilizzati. È anche possibile creare i propri componenti con un po' di conoscenze di codifica.", + "canvas": "Tela", + "canvasContent": "Costruite le vostre applicazioni su Canvas con un approccio \"What You See Is What You Get\". È sufficiente trascinare e rilasciare i componenti per progettare il layout e utilizzare le scorciatoie da tastiera per una rapida modifica, come cancellare, copiare e incollare. Una volta selezionato un componente, è possibile mettere a punto ogni dettaglio, dallo stile al layout, dal binding dei dati al comportamento logico. In più, potete usufruire del vantaggio del design reattivo, che garantisce che le vostre app siano perfette su qualsiasi dispositivo.", + "queryData": "Interrogazione dei dati", + "queryDataContent": "Qui è possibile creare query di dati e collegarsi a MySQL, MongoDB, Redis, Airtable e molte altre fonti di dati. Dopo aver configurato la query, fare clic su 'Esegui' per ottenere i dati e continuare l'esercitazione.", + "compProperties": "Proprietà dei componenti", + "interactiveDemo": "Demo interattiva", + "interactiveDemoToolTip": "Fare clic per avviare una dimostrazione interattiva di questa funzione", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Benvenuti! Fate clic su \"App\" e iniziate a creare la vostra prima applicazione.", + "createAppTitle": "Creare un'applicazione", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Abilitare il registro NPM personalizzato", + "npmRegistryUrl": "URL del registro NPM", + "npmRegistryUrlRequired": "Inserire l'URL del registro", + "npmRegistryUrlInvalid": "Inserire un URL valido", + "npmRegistryScope": "Ambito di applicazione del pacchetto", + "npmRegistryPattern": "Pattern", + "npmRegistryPatternInvalid": "Inserire un modello valido (che inizia con @ per le organizzazioni).", + "npmRegistryAuth": "Autenticazione", + "npmRegistryAuthType": "Tipo di autenticazione", + "npmRegistryAuthCredentials": "Credenziali di autenticazione", + "npmRegistryAuthCredentialsRequired": "Inserire le credenziali del registro", + "npmRegistryAuthCredentialsHelp": "Per l'autenticazione di base, fornire il nome utente e la password codificati in base64 nel formato 'base64(nome utente:password)', mentre per l'autenticazione tramite token fornire il token.", + }, + "history": { + ...en.history, + + "layout": "'{0}' Adattamento del layout", + "upgrade": "Aggiornamento '{0}'", + "delete": "Cancellare '{0}'.", + "add": "Aggiungere \"{0}\".", + "modify": "Modificare '{0}'", + "rename": "Rinominare '{1}' in '{0}'.", + "recover": "Recuperare la versione \"{2}\".", + "recoverVersion": "Recupera la versione", + "andSoOn": "e così via", + "timeFormat": "MM GG alle hh:mm A", + "emptyHistory": "Nessuna storia", + "currentVersionWithBracket": " (Attuale)", + "currentVersion": "Versione attuale", + "justNow": "Solo ora", + "history": "La storia", + }, + "home": { + ...en.home, + + "profile": "Il vostro profilo", + "news": "Notizie", + "newsLoading": "Il caricamento avverrà in pochi secondi.", + "orgHome": "Homepage (Org)", + "yourOrg": "La vostra organizzazione", + "orgHomeTitle": "Homepage dell'organizzazione", + "appMarketplace": "Mercato delle applicazioni", + "allApplications": "Le vostre applicazioni", + "allModules": "I vostri moduli", + "allFolders": "Le vostre cartelle", + "yourFolders": "Le vostre cartelle", + "modules": "Moduli", + "module": "Modulo", + "api": "API Lowcoder", + "trash": "Rifiuti", + "marketplace": "Mercato", + "allCategories": "Tutte le categorie", + "queryLibrary": "Libreria di query", + "datasource": "Fonti dei dati", + "selectDatasourceType": "Selezionare il tipo di sorgente dati", + "home": "Casa", + "all": "Tutti", + "app": "App", + "navigation": "Navigazione", + "navLayout": "Navigazione su PC", + "navLayoutDesc": "Menu a sinistra per facilitare la navigazione sul desktop.", + "mobileTabLayout": "Navigazione mobile", + "mobileTabLayoutDesc": "Barra di navigazione inferiore per una navigazione mobile fluida.", + "folders": "Cartelle", + "folder": "Cartella", + "rootFolder": "Radice", + "import": "Importazione", + "export": "Esportazione in JSON", + "show": "Mostra", + "inviteUser": "Invitare i membri", + "createFolder": "Crea cartella", + "createFolderSubTitle": "Nome della cartella:", + "moveToFolder": "Sposta nella cartella", + "moveToTrash": "Spostarsi nella spazzatura", + "moveToFolderSubTitle": "Spostare \"{name}\" in:", + "folderName": "Nome della cartella:", + "resCardSubTitle": "{time} da {creator}", + "trashEmpty": "Il cestino è vuoto.", + "projectEmpty": "Non c'è niente qui.", + "projectEmptyCanAdd": "Non avete ancora nessuna applicazione. Fare clic su Nuovo per iniziare.", + "name": "Nome", + "type": "Tipo", + "creator": "Creato da", + "lastModified": "Ultima modifica", + "deleteTime": "Cancellare il tempo", + "createTime": "Creare tempo", + "datasourceName": "Nome dell'origine dati", + "databaseName": "Nome del database", + "nameCheckMessage": "Il nome non può essere vuoto", + "deleteElementTitle": "Cancellare definitivamente", + "moveToTrashSubTitle": "{type} {name} sarà spostato nella spazzatura.", + "deleteElementSubTitle": "Eliminare {type} {name} in modo permanente, non può essere recuperato.", + "deleteSuccessMsg": "Eliminato con successo", + "deleteErrorMsg": "Errore eliminato", + "recoverSuccessMsg": "Recuperato con successo", + "newDatasource": "Nuova fonte di dati", + "creating": "Creare...", + "chooseDataSourceType": "Scegliere il tipo di origine dati", + "folderAlreadyExists": "La cartella esiste già", + "newNavLayout": "{userName}'s {name}", + "newApp": "Il nuovo {userName} di {name}", + "importError": "Errore di importazione, {message}", + "exportError": "Errore di esportazione, {message}", + "importSuccess": "Successo dell'importazione", + "fileUploadError": "Errore nel caricamento dei file", + "fileFormatError": "Errore di formato del file", + "groupWithSquareBrackets": "[Gruppo]", + "allPermissions": "Proprietario", + "shareLink": "Condividi il link:", + "copyLink": "Copiare il link", + "appPublicMessage": "Rendere pubblica l'applicazione. Chiunque può visualizzarla.", + "modulePublicMessage": "Rendere pubblico il modulo. Chiunque può vederlo.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Pubblicate la vostra applicazione sul Marketplace pubblico. Chiunque può visualizzarla e copiarla da lì.", + "moduleMarketplaceMessage": "Pubblicate il vostro modulo sul Mercato pubblico. Chiunque può visualizzarlo e copiarlo da lì.", + "marketplaceGoodPublishing": "Assicuratevi che la vostra applicazione abbia un buon nome e sia facile da usare. Rimuovere tutte le informazioni sensibili prima di pubblicarle. Inoltre, rimuovete le fonti di dati locali e sostituitele con dati temporanei statici integrati.", + "noMarketplaceApps": "Non ci sono ancora applicazioni sul mercato", + "errorMarketplaceApps": "Errore durante il caricamento delle applicazioni del Marketplace", + "localMarketplaceTitle": "Mercato locale", + "globalMarketplaceTitle": "Mercato pubblico", + "memberPermissionList": "Permessi per i membri:", + "orgName": "{orgName} admins", + "addMember": "Aggiungi membri", + "addPermissionPlaceholder": "Inserire un nome per cercare i membri", + "searchMemberOrGroup": "Ricerca di membri o gruppi:", + "addPermissionErrorMessage": "Impossibile aggiungere l'autorizzazione, {message}", + "copyModalTitle": "Clonare \"{name}\".", + "copyNameLabel": "{type} nome", + "copyModalfolderLabel": "Aggiungi alla cartella", + "copyNamePlaceholder": "Inserire il nome di un {type}.", + "chooseNavType": "Scegliere il tipo di navigazione", + "createNavigation": "Crea navigazione", + "howToUseAPI": "Come utilizzare l'API Open Rest", + "support": "Supporto", + }, + "support": { + ...en.support, + + "supportTitle": "Supporto Lowcoder", + "supportContent": "Se hai domande o hai bisogno di aiuto, usa il sistema di ticket per risolvere il problema rapidamente.", + "newSupportTicket": "Nuovo Ticket di Supporto", + "ticketTitle": "Titolo", + "priority": "Priorità", + "assignee": "Assegnatario", + "status": "Stato del Ticket", + "updatedTime": "Tempo Aggiornato", + "active": "Attivo", + "inactive": "Inattivo", + "noEmail": "Nessuna E-mail", + "details": "Dettagli", + "reloadTickets": "Ricarica Ticket", + "createdDate": "Data di Creazione", + "updatedDate": "Data di Aggiornamento", + "description": "Descrizione del Problema", + "subtasks": "Sottoattività", + "subtasksProgress": "Avanzamento di tutte le Sottoattività", + "attachments": "Allegati al Problema", + "comments": "Commenti", + "addComment": "Aggiungi Commento", + "addAttachment": "Aggiungi Allegato", + "edit": "Modifica Descrizione Ticket", + "save": "Salva Descrizione Ticket", + "cancel": "Annulla", + "submitComment": "Invia Commento", + "upload": "Invia Allegato", + "selectFile": "Seleziona File", + "ticketDescriptionUpdated": "Descrizione del ticket aggiornata con successo!", + "ticketDescriptionUpdateFailed": "Aggiornamento della descrizione del ticket non riuscito.", + "writeComment": "Scrivi un commento...", + "ticketCommentAdded": "Commento aggiunto con successo!", + "ticketCommentFailed": "Impossibile aggiungere il commento.", + "ticketCommentEmpty": "Si prega di scrivere un commento prima di inviare.", + "ticketAttachmentUploaded": "Allegato caricato con successo!", + "ticketAttachmentFailed": "Caricamento dell'allegato non riuscito.", + "ticketAttachmentEmpty": "Seleziona un file da caricare.", + "ticketFetchError": "Caricamento del ticket fallito.", + "ticketNotFound": "Ticket non trovato.", + "addAttachmentFileSize": "Il file deve essere inferiore a 5MB!", + "goBack": "Torna Indietro", + "noDescription": "Nessuna descrizione disponibile.", + "createTicket": "Crea un nuovo Ticket di Supporto", + "createTicketTitlePlaceholder": "Inserisci il Titolo (max 150 caratteri)", + "createTicketDescriptionTitle": "Descrivi il tuo problema - più dettagli, meglio è:", + "createTicketDescriptionPlaceholder": "Descrivi il problema in dettaglio, includendo: 1) Passaggi per riprodurre il problema, 2) Comportamento previsto rispetto al comportamento reale, 3) Frammenti di codice, se applicabile, 4) Componenti, API o configurazioni specifiche interessate", + "createTicketSubmit": "Invia Ticket", + "createTicketInfoText": "Una volta creato il Ticket, potrai aggiungere Screenshot e Commenti nella sezione 'Dettagli'.", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Posizione dei punti di navigazione", + "autoPlay": "AutoPlay", + "showDots": "Mostra punti di navigazione", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Nome o URL del pacchetto npm non valido.", + "pluginExisted": "Questo plugin npm esisteva già", + "compNotFound": "Il componente {compName} non è stato trovato.", + "addPluginModalTitle": "Aggiungere un plugin da un repository npm", + "pluginNameLabel": "URL o nome del pacchetto npm", + "noCompText": "Nessun componente.", + "compsLoading": "Caricamento...", + "removePluginBtnText": "Rimuovere", + "addPluginBtnText": "Aggiungere il plugin npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "Il valore predefinito del pulsante di attivazione, ad esempio: Falso", + "trueDefaultText": "Nascondere", + "falseDefaultText": "Mostra", + "trueLabel": "Testo per Vero", + "falseLabel": "Testo per Falso", + "trueIconLabel": "Icona per Vero", + "falseIconLabel": "Icona per Falso", + "iconPosition": "Icona Posizione", + "showText": "Mostra testo", + "alignment": "Allineamento", + "showBorder": "Mostra il confine", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Create applicazioni software per la vostra azienda e i vostri clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", + "demoText": "Lowcoder | Crea applicazioni software per la tua azienda e i tuoi clienti con un'esperienza minima di codifica. Lowcoder è la migliore alternativa a Retool, Appsmith o Tooljet.", + "submit": "Invia", + "style": "Stile", + "danger": "Pericolo", + "warning": "Avvertenze", + "success": "Il successo", + "menu": "Menu", + "link": "Collegamento a", + "customAppearance": "Aspetto personalizzato", + "search": "Ricerca", + "pleaseInputNumber": "Inserire un numero", + "mostValue": "Più valore", + "maxRating": "Valutazione massima", + "notSelect": "Non selezionato", + "halfSelect": "Mezza selezione", + "pleaseSelect": "Selezionare", + "title": "Titolo", + "content": "Content", + "componentNotFound": "Il componente non esiste", + "example": "Esempi", + "defaultMethodDesc": "Impostare il valore della proprietà {name}", + "propertyUsage": "È possibile leggere le informazioni relative al componente accedendo alle proprietà del componente in base al suo nome ovunque si possa scrivere JavaScript.", + "property": "Proprietà", + "propertyName": "Nome della proprietà", + "propertyType": "Tipo", + "propertyDesc": "Descrizione", + "event": "Eventi", + "eventName": "Nome dell'evento", + "eventDesc": "Descrizione", + "mehtod": "Metodi", + "methodUsage": "L'utente ha la possibilità di interagire con i componenti tramite i loro rispettivi metodi, ai quali si può accedere con i nomi designati all'interno di qualsiasi segmento in cui si utilizza JavaScript. Inoltre, questi componenti possono essere attivati attraverso l'azione 'Control Component', che viene attivata in risposta a eventi specifici.", + "methodName": "Nome del metodo", + "methodDesc": "Descrizione", + "showBorder": "Mostra il confine", + "haveTry": "Provate voi stessi", + "settings": "Impostazione", + "settingValues": "Impostazione Valore", + "defaultValue": "Valore predefinito", + "time": "Tempo", + "date": "Data", + "noValue": "Nessuno", + "xAxisType": "Tipo di asse X", + "hAlignType": "Allineamento orizzontale", + "leftLeftAlign": "Allineamento a sinistra", + "leftRightAlign": "Allineamento sinistra-destra", + "topLeftAlign": "Allineamento in alto a sinistra", + "topRightAlign": "Allineamento in alto a destra", + "validation": "Convalida", + "required": "Richiesto", + "defaultStartDateValue": "Data di inizio predefinita", + "defaultEndDateValue": "Data di fine predefinita", + "basicUsage": "Uso di base", + "basicDemoDescription": "I seguenti esempi mostrano l'uso di base del componente.", + "noDefaultValue": "Nessun valore predefinito", + "forbid": "Vietato", + "placeholder": "Segnaposto", + "pleaseInputPassword": "Inserire una password", + "password": "Password", + "textAlign": "Allineamento del testo", + "length": "Lunghezza", + "top": "In alto", + "pleaseInputName": "Inserire il proprio nome", + "userName": "Nome", + "fixed": "Fisso", + "responsive": "Reattivo", + "workCount": "Conteggio delle parole", + "cascaderOptions": "Opzioni Cascader", + "pleaseSelectCity": "Selezionare una città", + "advanced": "Avanzato", + "showClearIcon": "Mostra l'icona Cancella", + /* eslint-disable only-ascii/only-ascii */ + "appleOptionLabel": "🍎 Mela", + "waterMelonOptionLabel": "🍉 Anguria", + "berryOptionLabel": "🍓 Fragola", + "lemonOptionLabel": "🍋 Limone", + "coconutOptionLabel": "🥥 Noce di cocco", + /* eslint-enable only-ascii/only-ascii */ + "likedFruits": "Preferiti", + "option": "Opzione", + "singleFileUpload": "Caricamento di un singolo file", + "multiFileUpload": "Caricamento multiplo di file", + "folderUpload": "Caricamento cartelle", + "multiFile": "File multipli", + "folder": "Cartella", + "open": "Aperto", + "favoriteFruits": "Frutti preferiti", + "pleaseSelectOneFruit": "Selezionare un frutto", + "notComplete": "Non completo", + "complete": "Completo", + "echart": "Grafico elettronico", + "lineChart": "Grafico a linee", + "basicLineChart": "Grafico a linee di base", + "lineChartType": "Tipo di grafico a linee", + "stackLineChart": "Linea impilata", + "areaLineChart": "Linea d'area", + "scatterChart": "Grafico a dispersione", + "scatterShape": "Forma dello spargimento", + "scatterShapeCircle": "Cerchio", + "scatterShapeRect": "Rettangolo", + "scatterShapeTri": "Triangolo", + "scatterShapeDiamond": "Diamante", + "scatterShapePin": "Perno", + "scatterShapeArrow": "Freccia", + "pieChart": "Grafico a torta", + "basicPieChart": "Grafico a torta di base", + "pieChatType": "Tipo di grafico a torta", + "pieChartTypeCircle": "Tabella delle ciambelle", + "pieChartTypeRose": "Grafico delle rose", + "titleAlign": "Titolo Posizione", + "color": "Colore", + "dashed": "Tratteggiato", + "imADivider": "Io sono una linea di demarcazione", + "tableSize": "Dimensione della tabella", + "subMenuItem": "Sottomenu {num}", + "menuItem": "Menu {num}", + "labelText": "Etichetta", + "labelPosition": "Etichetta - Posizione", + "labelAlign": "Etichetta - Allineamento", + "optionsOptionType": "Metodo di configurazione", + "styleBackgroundColor": "Colore di sfondo", + "styleBorderColor": "Colore del bordo", + "styleColor": "Colore del carattere", + "selectionMode": "Modalità di selezione delle righe", + "paginationSetting": "Impostazione della paginazione", + "paginationShowSizeChanger": "Supporto agli utenti per la modifica del numero di voci per pagina", + "paginationShowSizeChangerButton": "Pulsante Mostra cambio formato", + "paginationShowQuickJumper": "Mostra Quick Jumper", + "paginationHideOnSinglePage": "Nascondere quando c'è una sola pagina", + "paginationPageSizeOptions": "Dimensione della pagina", + "chartConfigCompType": "Tipo di grafico", + "xConfigType": "Tipo di asse X", + "loading": "Caricamento", + "disabled": "Disabili", + "minLength": "Lunghezza minima", + "maxLength": "Lunghezza massima", + "showCount": "Mostra il conteggio delle parole", + "autoHeight": "Altezza", + "thousandsSeparator": "Separatore di migliaia", + "precision": "Posizioni decimali", + "value": "Valore predefinito", + "formatter": "Formato", + "min": "Valore minimo", + "max": "Valore massimo", + "step": "Dimensione del passo", + "start": "Ora di inizio", + "end": "Tempo della fine", + "allowHalf": "Consentire la selezione della metà", + "filetype": "Tipo di file", + "showUploadList": "Mostra elenco di caricamento", + "uploadType": "Tipo di caricamento", + "allowClear": "Mostra l'icona Cancella", + "minSize": "Dimensione minima del file", + "maxSize": "Dimensione massima del file", + "maxFiles": "Numero massimo di file caricati", + "format": "Formato", + "minDate": "Data minima", + "maxDate": "Data massima", + "minTime": "Tempo minimo", + "maxTime": "Tempo massimo", + "text": "Testo", + "type": "Tipo", + "hideHeader": "Nascondi intestazione", + "hideBordered": "Nascondi bordo", + "src": "URL immagine", + "showInfo": "Valore di visualizzazione", + "mode": "Modalità", + "onlyMenu": "Solo menu", + "horizontalAlignment": "Allineamento orizzontale", + "row": "A sinistra", + "column": "In alto", + "leftAlign": "Allineamento a sinistra", + "rightAlign": "Allineamento a destra", + "percent": "Percentuale", + "fixedHeight": "Altezza fissa", + "auto": "Adattivo", + "directory": "Cartella", + "multiple": "File multipli", + "singleFile": "File singolo", + "manual": "Manuale", + "default": "Predefinito", + "small": "Piccolo", + "middle": "Medio", + "large": "Grande", + "single": "Singolo", + "multi": "Multiplo", + "close": "Chiudere", + "ui": "Modalità UI", + "line": "Grafico a linee", + "scatter": "Grafico di dispersione", + "pie": "Grafico a torta", + "basicLine": "Grafico a linee di base", + "stackedLine": "Grafico a linee sovrapposte", + "areaLine": "Mappa dell'area", + "basicPie": "Grafico a torta di base", + "doughnutPie": "Tabella delle ciambelle", + "rosePie": "Grafico delle rose", + "category": "Categoria Asse", + "circle": "Cerchio", + "rect": "Rettangolo", + "triangle": "Triangolo", + "diamond": "Diamante", + "pin": "Perno", + "arrow": "Freccia", + "left": "A sinistra", + "right": "Diritto", + "center": "Centro", + "bottom": "Bottom", + "justify": "Giustificare entrambi i fini", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Stato attuale dei dati", + "preview": "Anteprima", + "property": "Proprietà", + "console": "Console Visual Script", + "executeMethods": "Metodi di esecuzione", + "noMethods": "Nessun metodo.", + "methodParams": "Parametri del metodo", + "methodParamsHelp": "Parametri del metodo di input tramite JSON. Ad esempio, è possibile impostare i parametri di setValue con: [1] o 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Sfondo del pulsante", + "btnText": "Testo del pulsante", + "title": "Titolo", + "selectBackground": "Un contesto selezionato", + }, + "idSource": { + ...en.idSource, + + "title": "Provider di autenticazione utente", + "form": "Email", + "pay": "Premio", + "enable": "Abilitazione", + "unEnable": "Non abilitato", + "loginType": "Tipo di accesso", + "status": "Stato", + "desc": "Descrizione", + "manual": "Rubrica:", + "syncManual": "Sincronizzazione della rubrica", + "syncManualSuccess": "Sincronizzazione riuscita", + "enableRegister": "Consentire la registrazione", + "saveBtn": "Salva e abilita", + "save": "Risparmiare", + "none": "Nessuno", + "formPlaceholder": "Inserire {label}", + "formSelectPlaceholder": "Selezionare il {label}.", + "saveSuccess": "Salvato con successo", + "dangerLabel": "Zona di pericolo", + "dangerTip": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Procedere con cautela.", + "disable": "Disattivare", + "disableSuccess": "Disattivato con successo", + "encryptedServer": "-------- Crittografato sul lato server --------", + "disableTip": "Suggerimenti", + "disableContent": "La disattivazione di questo fornitore di ID può comportare l'impossibilità di accedere per alcuni utenti. Siete sicuri di voler procedere?", + "manualTip": "", + "lockTip": "Il contenuto è bloccato. Per apportare modifiche, fare clic su {icon} per sbloccare.", + "lockModalContent": "La modifica del campo \"Attributo ID\" può avere un impatto significativo sull'identificazione degli utenti. Prima di procedere, accertarsi di aver compreso le implicazioni di questa modifica.", + "payUserTag": "Premio", + "source": "Fonte", + "sourceName": "Nome del fornitore di autorizzazione", + "sourceDescription": "Descrizione del fornitore di autorizzazioni", + "sourceIcon": "Icona Provider di autorizzazione", + "sourceCategory": "Categoria del fornitore di autorizzazioni", + "souceIssuerURI": "URI dell'emittente del fornitore di autorizzazioni", + "souceAuthorizationEndpoint": "Provider di autorizzazione Endpoint di autorizzazione", + "souceTokenEndpoint": "Provider di autorizzazione Punto finale del token", + "souceUserInfoEndpoint": "Provider di autorizzazione Info utente Endpoint", + "userInfoIntrospection": "Utilizzare l'introspezione dell'utente OpenID", + "userCanSelectAccounts": "L'utente può selezionare i conti", + "sourceCategoryEnterprise": "Identità aziendale", + "sourceCategoryCloud": "Servizi cloud", + "sourceCategorySocial": "Media sociali", + "sourceCategoryDevelopment": "Sviluppo", + "sourceCategoryTools": "Strumenti e produttività", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Configurazione della vista slot", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "speed": "Velocità", + "width": "Larghezza", + "height": "Altezza", + "backgroundColor": "Colore di sfondo", + "animationStart": "Inizio dell'animazione", + "valueDesc": "Dati JSON correnti", + "loop": "Anello", + "auto": "Auto", + "onHover": "Su Hover", + "singlePlay": "Gioco singolo", + "endlessLoop": "Anello infinito", + "keepLastFrame": "Mantenere visualizzato l'ultimo fotogramma", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Titolo Colore", + "subTitleColor": "Colore dei sottotitoli", + "labelColor": "Colore dell'etichetta", + "value": "Dati sulla linea del tempo", + "mode": "Ordine di visualizzazione", + "left": "Diritto al contenuto", + "right": "Contenuto Sinistra", + "alternate": "Ordine alternativo dei contenuti", + "modeTooltip": "Impostare il contenuto in modo che appaia a destra/sinistra o alternativamente su entrambi i lati della timeline.", + "reverse": "Prima gli eventi più recenti", + "pending": "Testo del nodo in attesa", + "pendingDescription": "Se impostato, viene visualizzato un ultimo nodo con il testo e un indicatore di attesa.", + "defaultPending": "Miglioramento continuo", + "clickTitleEvent": "Fare clic su Titolo evento", + "clickTitleEventDesc": "Fare clic su Titolo evento", + "Introduction": "Tasti di introduzione", + "helpTitle": "Titolo della linea temporale (obbligatorio)", + "helpsubTitle": "Sottotitolo della linea temporale", + "helpLabel": "Etichetta della linea temporale, utilizzata per visualizzare le date", + "helpColor": "Indica il colore del nodo della linea temporale", + "helpDot": "Rendering dei nodi della timeline come icone di design Ant", + "helpTitleColor": "Controllo individuale del colore del titolo del nodo", + "helpSubTitleColor": "Controllo individuale del colore del sottotitolo del nodo", + "helpLabelColor": "Controllo individuale del colore dell'icona del nodo", + "valueDesc": "Dati della linea temporale", + "clickedObjectDesc": "Dati dell'elemento cliccato", + "clickedIndexDesc": "Indice degli elementi cliccati", + }, + "comment": { + ...en.comment, + + "value": "Come elencare i dati", + "showSendButton": "Consentire i commenti", + "title": "Titolo", + "titledDefaultValue": "%d Commento in totale", + "placeholder": "Maiusc + Invio per commentare; inserire @ o # per l'immissione rapida.", + "placeholderDec": "Segnaposto", + "buttonTextDec": "Titolo del pulsante", + "buttonText": "Come", + "mentionList": "Dati dell'elenco delle menzioni", + "mentionListDec": "Parole chiave-menzione; dati dell'elenco delle menzioni-valore", + "userInfo": "Info utente", + "dateErr": "Errore di data", + "commentList": "Come elencare", + "deletedItem": "Voce cancellata", + "submitedItem": "Articolo presentato", + "deleteAble": "Mostra il pulsante Elimina", + "Introduction": "Tasti di introduzione", + "helpUser": "Informazioni sull'utente (obbligatorio)", + "helpname": "Nome utente (obbligatorio)", + "helpavatar": "URL dell'avatar (alta priorità)", + "helpdisplayName": "Nome visualizzato (priorità bassa)", + "helpvalue": "Come il contenuto", + "helpcreatedAt": "Data di creazione", + }, + "mention": { + ...en.mention, + + "mentionList": "Dati dell'elenco delle menzioni", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Complete Value", + "checkedValueFrom": "Valore controllato Da", + "ignoreCase": "Ricerca Ignorare il caso", + "searchLabelOnly": "Cerca solo nell'etichetta", + "searchFirstPY": "Cerca il primo Pinyin", + "searchCompletePY": "Ricerca Pinyin completo", + "searchText": "Testo di ricerca", + "SectionDataName": "Dati di completamento automatico", + "valueInItems": "Valore in articoli", + "type": "Tipo", + "antDesign": "AntDesign", + "normal": "Normale", + "selectKey": "Chiave", + "selectLable": "Etichetta", + "ComponentType": "Tipo di componente", + "colorIcon": "Blu", + "grewIcon": "Grigio", + "noneIcon": "Nessuno", + "small": "Piccolo", + "large": "Grande", + "componentSize": "Dimensione del componente", + "Introduction": "Tasti di introduzione", + "helpLabel": "Etichetta", + "helpValue": "Valore", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Colonne", + "addColumn": "Aggiungi colonna", + "columnDefinition": "Definizione della colonna", + "rowDefinition": "Definizione di riga", + "columnGap": "Spazio tra le colonne", + "rowGap": "Distanza tra le file", + "atLeastOneColumnError": "Il layout reattivo mantiene almeno una colonna", + "columnsPerRow": "Colonne per riga", + "columnsSpacing": "Spaziatura delle colonne (px)", + "horizontal": "Orizzontale", + "vertical": "Verticale", + "mobile": "Mobile", + "tablet": "Tavoletta", + "desktop": "Desktop", + "rowStyle": "Stile della fila", + "columnStyle": "Stile colonna", + "minWidth": "Min. Larghezza", + "rowBreak": "Interruzione della fila", + "useComponentWidth": "Usa dimensione propria", + "useComponentWidthDesc": "Utilizza la larghezza del contenitore invece della larghezza dell'app", + "matchColumnsHeight": "Abbinare l'altezza delle colonne", + "rowLayout": "Disposizione delle file", + "columnsLayout": "Layout delle colonne", + "columnsDefinitionTooltip": "Le colonne possono essere definite liberamente in base alle proprietà delle colonne CSS. Ad esempio, 'auto auto' creerà due colonne di uguale larghezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Le righe possono essere definite liberamente in base alle proprietà CSS delle righe. Ad esempio, 'auto auto' creerà due righe di uguale altezza. Per saperne di più: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modalità", + "modeInline": "In linea", + "modeVertical": "Verticale", + "modeHorizontal": "Orizzontale", + "width": "Larghezza", + "widthTooltip": "Pixel o percentuale, ad esempio 520, 60%.", + "navStyle": "Menu stile", + "navItemStyle": "Stile della voce di menu", + "navBackground": "Immagine di sfondo", + "mobileNavVerticalOrientation": "Orientamento verticale", + "mobileNavVerticalMaxWidth": "Larghezza massima", + "mobileNavBarHeight": "Altezza della barra di navigazione", + "mobileNavVerticalShowSeparator": "Mostra separatore", + "mobileNavIconSize": "Dimensione dell'icona", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Linea di data internazionale W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alaska", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Ora del Pacifico (USA)", + "UTC-06:00": "(UTC-06:00) Ora centrale (USA)", + "UTC-05:00": "(UTC-05:00) Ora orientale (USA)", + "UTC-04:00": "(UTC-04:00) Ora dell'Atlantico", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Capo Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlino, Roma", + "UTC+02:00": "(UTC+02:00) Atene, Bucarest", + "UTC+03:00": "(UTC+03:00) Mosca", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) Nuova Delhi", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Bangkok", + "UTC+08:00": "(UTC+08:00) Pechino, HK", + "UTC+09:00": "(UTC+09:00) Tokyo, Seul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Isole Salomone, Nuova Caledonia", + "UTC+12:00": "(UTC+12:00) Auckland, Fiji", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "Scelta dell'utente", + }, + "tour": { + ...en.tour, + + "section1Title": "Passi", + "section1Subtitle": "Passi", + "tooltipExampleHeader": "Esempio:", + "tooltipSignatureHeader": "Firma:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Titolo", + "placeholder": "Benvenuti", + "tooltip": "Il titolo del passo. Qui è valido qualsiasi HTML.", + }, + "description": { + ...en.tour.options.description, + + "label": "Descrizione", + "placeholder": "Benvenuto su lowcoder!", + "tooltip": "La descrizione del passo. Qui è valido qualsiasi HTML.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Maschera", + "tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour.", + "tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Freccia", + "tooltip": "Attiva e disattiva la freccia o la sposta al centro del componente, se lo si desidera; in caso contrario, la freccia sarà sempre rivolta verso la parte superiore del componente.", + "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Tipo", + "tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour.", + }, + "target": { + ...en.tour.options.target, + + "label": "Component", + "tooltip": "Il componente su cui si vuole inserire il tooltip, oppure lasciarlo vuoto se si vuole semplicemente un modal al centro dello schermo.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI dell'immagine di copertina", + "tooltip": "Un URI per un'immagine che si desidera visualizzare con il passaggio", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Indicatori Render", + "tooltip": "Fornisce un indicatore personalizzato della fase in cui ci si trova", + "tooltipValidTypes": "Format è una funzione che accetta due argomenti, `current` e `total` e restituisce un ReactNode", + "tooltipFunctionSignatureHeader": "Firma:", + "tooltipFunctionSignature": "(corrente: numero, totale: numero) => ReactNode", + "tooltipExampleHeader": "Esempio:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Disattivare l'interazione", + "tooltip": "Disabilita l'interazione nell'area evidenziata.", + }, + "mask": { + ...en.tour.mask, + + "label": "Maschera", + "tooltip": "Se abilitare la mascheratura, cambiare lo stile della maschera e il colore di riempimento passando oggetti di scena personalizzati; l'impostazione predefinita segue la proprietà `mask` di Tour. Può essere sovrascritto a livello di passo.", + "tooltipValidTypes": "Tipi di input validi: `true`, `false`, empty o un oggetto JSON che segue lo schema CSSProperties di Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Posizionamento", + "tooltip": "Posizione della carta guida rispetto all'elemento di destinazione. Può essere sovrascritta a livello di passo.", + "tooltipValidOptions": "Opzioni valide", + "tooltipValidOptionsAbove": "Sopra il componente:", + "tooltipValidOptionsLeft": "A sinistra del componente:", + "tooltipValidOptionsRight": "A destra del componente:", + "tooltipValidOptionsBelow": "Sotto il componente:", + "tooltipValidOptionsOnTop": "In cima al componente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Freccia", + "tooltip": "Attiva e disattiva la freccia o la sposta in modo che punti al centro del componente, se lo si desidera, altrimenti la freccia punterà sempre vicino alla parte superiore del componente. Può essere sovrascritto a livello di passo.", + "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Tipo", + "tooltip": "Il tipo di tooltip, che influenza il colore di sfondo e il colore del testo. I colori possono essere controllati con la sezione principale dello stile del tour. Può essere sovrascritto a livello di passo.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Come sviluppare un plugin npm", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Utilizzare librerie di terze parti", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + }; diff --git a/translations/locales/pt-updated.js b/translations/locales/pt-updated.js new file mode 100644 index 0000000000..3339df8e75 --- /dev/null +++ b/translations/locales/pt-updated.js @@ -0,0 +1,4844 @@ + +import { en } from "./en.js"; +export const pt = { + ...en, + + "productName": "Lowcoder", + "productDesc": "Crie aplicações de software para sua empresa e clientes com pouquíssima experiência de programação. Lowcoder é uma excelente alternativa para Retool, Appsmith e Tooljet.", + "notSupportedBrowser": "Seu navegador atual pode ter problemas de compatibilidade. Para uma experiência melhor, por favor, utilize a última versão do Chrome.", + "create": "Crie", + "move": "Mover", + "addItem": "Adicionar", + "newItem": "Novo", + "copy": "Copiar", + "rename": "Renomear", + "delete": "Remover", + "deletePermanently": "Remover Permanentemente", + "remove": "Remover", + "recover": "Recuperar", + "edit": "Editar", + "view": "Ver", + "value": "Valor", + "data": "Dados", + "information": "Informações", + "success": "Sucesso", + "warning": "Aviso", + "error": "Erro", + "reference": "Referência", + "text": "Texto", + "basic": "Básico", + "label": "Rótulo", + "layout": "Disposição", + "color": "Cor", + "form": "Formulário", + "menu": "Menu", + "menuItem": "Item do Menu", + "ok": "OK", + "cancel": "Cancelar", + "finish": "Terminar", + "reset": "Resetar", + "icon": "Ícone", + "code": "Código", + "title": "Título", + "emptyContent": "Conteúdo em Branco", + "more": "Mais", + "search": "Pesquisar", + "back": "Voltar", + "accessControl": "Controle de Acesso", + "copySuccess": "Copiado com Sucesso", + "copyError": "Erro ao copiar", + "api": { + ...en.api, + + "publishSuccess": "Publicado com Sucesso", + "recoverFailed": "Falha ao Recuperar", + "needUpdate": "Sua versão está desatualizada. Por favor, atualize para a nova versão.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "O editor de código atual não suporta formatação automática", + "fold": "Dobrar", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Definir Propriedade: {property}", + "clearDesc": "Limpar Propriedade: {property}", + "resetDesc": "Resetar Propriedade: {property} ao Valor Padrão", + }, + "method": { + ...en.method, + + "focus": "Definir Foco", + "focusOptions": "Opções de Foco. Veja HTMLElement.focus()", + "blur": "Remover Foco", + "click": "Clicar", + "select": "Selecionar o Texto Inteiro", + "setSelectionRange": "Definit Posição de Início e Fim da Seleção de Texto", + "selectionStart": "Índice de base 0 do Primeiro Caractere Selecionado", + "selectionEnd": "Índice de base 0 do Caractere Selecionado Após o Último Caractere", + "setRangeText": "Substituir Faixa de Texto", + "replacement": "String a Inserir", + "replaceStart": "Índice baseado em 0 do primeiro caractere a ser substituído", + "replaceEnd": "Índice de caractere baseado em 0 após o último caractere a ser substituído", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Carregamento do component falhou. Por favor, cheque sua configuração.", + "clickToReload": "Clique para recarregar", + "errorMsg": "Erro: ", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Somente suporta imagens do tipo {types}", + "exceedSizeError": "Tamanho da imagem não deve passar de {size}", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Não suportado", + "selectAtLeastOneComponent": "Por favor, selecione pelo menos um componente", + "selectCompFirst": "Selecione componentes antes de copiar", + "noContainerSelected": "[Bug] Nenhum container selecionado", + "deleteCompsSuccess": "Removido com sucesso. Pressione {undoKey} para reverter.", + "deleteCompsTitle": "Remover Componentes", + "deleteCompsBody": "Tem certeza que deseja remover {compNum} componentes selecionados?", + "cutCompsSuccess": "Corte realizado com sucesso. Pressione {pasteKey} para colar, ou {undoKey} para desfazer.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Queries de Dados em seu Aplicativo", + "globals": "Variavies de Dados Globais", + "propTipsArr": "{num} Itens", + "propTips": "{num} Teclas", + "propTipArr": "___LOCALIZADOR0___ Item", + "propTip": "{num} Tecla", + "stateTab": "Estado", + "settingsTab": "Configurações", + "toolbarTitle": "Individualização", + "toolbarPreload": "Scripts e Estilos", + "components": "Componentes ativos", + "modals": "Modais Dentro do App", + "expandTip": "Clique para expandir os dados do componente {component}", + "collapseTip": "Clique para minimizar os dados do componente {component}", + "layers": "Camadas", + "activatelayers": "Usar camadas dinâmicas", + "selectedComponents": "Componentes selecionados...", + "displayComponents": "Controlar Visão", + "lockComponents": "Controlar Posição", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Consultas de Dados", + "run": "Executar", + "noSelectedQuery": "Nenhuma Consulta Selecionada", + "metaData": "Metadados da Fonte de Dados", + "noMetadata": "Nenhum Metadado Disponível", + "metaSearchPlaceholder": "Buscar Metadados", + "allData": "Todas as Tabelas", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Propriedades", + "noSelectedComps": "Nenhum Componente selecionado. Clique em um Componente para visualizar suas Propriedades.", + "createTab": "Inserir", + "searchPlaceHolder": "Buscar Componentes ou Módulos", + "uiComponentTab": "Componentes", + "extensionTab": "Extensões", + "modulesTab": "Módulos", + "moduleListTitle": "Módulos", + "pluginListTitle": "Plugins", + "emptyModules": "Os Módulos são Mikro-Apps reutilizáveis. Você pode incorporá-los em seu App.", + "searchNotFound": "Não consegue encontrar o componente certo?", + "emptyPlugins": "Nenhum Plugin Adicionado", + "contactUs": "Entre em Contato", + "issueHere": "aqui.", + "folderListTitle": "Pastas", + }, + "prop": { + ...en.prop, + + "expand": "Expandir", + "columns": "Colunas", + "videokey": "Chave do Vídeo", + "rowSelection": "Seleção de Linha", + "toolbar": "Barra de Ferramentas", + "pagination": "Paginação", + "logo": "Logotipo", + "style": "Estilo", + "inputs": "Entradas", + "meta": "Metadados", + "data": "Dados", + "hide": "Ocultar", + "loading": "Carregando", + "disabled": "Desabilitado", + "placeholder": "Espaço Reservado", + "showClear": "Mostrar Botão Limpar", + "showSearch": "Pesquisável", + "defaultValue": "Valor Padrão", + "required": "Campo Obrigatório", + "showEmptyValidation": "Mostrar validação em vazio/reinicialização", + "readOnly": "Somente Leitura", + "readOnlyTooltip": "Componentes somente leitura parecem normais, mas não podem ser modificados.", + "minimum": "Mínimo", + "maximum": "Máximo", + "regex": "Regex", + "minLength": "Comprimento Mínimo", + "maxLength": "Comprimento Máximo", + "height": "Altura", + "width": "Largura", + "selectApp": "Selecionar Aplicativo", + "showCount": "Mostrar Contagem", + "tabIndex": "Separador Índice", + "textType": "Tipo de Texto", + "customRule": "Regra Personalizada", + "customRuleTooltip": "Uma string não vazia indica um erro; vazio ou nulo significa validação aprovada. Exemplo:", + "manual": "Manual", + "map": "Mapa", + "json": "JSON", + "use12Hours": "Usar Formato de 12 Horas", + "hourStep": "Passo de Hora", + "minuteStep": "Passo de Minuto", + "secondStep": "Passo de Segundo", + "minDate": "Data Mínima", + "maxDate": "Data Máxima", + "minTime": "Tempo Mínimo", + "maxTime": "Tempo Máximo", + "type": "Tipo", + "showLabel": "Mostrar Etiqueta", + "showHeader": "Mostrar Cabeçalho", + "showBody": "Mostrar Corpo", + "showSider": "Mostrar Lateral", + "innerSider": "Lateral Interna", + "showFooter": "Mostrar Rodapé", + "maskClosable": "Clique Fora para Fechar", + "escapeClose": "Ativar Fechar na tecla Escape", + "toggleClose": "Ativar o botão Fechar", + "showMask": "Mostrar Máscara", + "textOverflow": "Overflow de Texto", + "scrollbar": "Mostrar Barras de Rolagem", + "showVerticalScrollbar": "Mostrar barra de rolagem vertical", + "showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", + "siderScrollbar": "Mostrar Barras de Rolagem na Lateral", + "mainScrollbar": "Mostrar barras de deslocação no conteúdo principal", + "modalScrollbar": "Mostrar barras de deslocação no Modal", + "drawerScrollbar": "Mostrar barras de rolagem na gaveta", + "textAreaScrollBar": "Mostrar barras de rolagem na área de texto", + "siderRight": "Mostrar lateral à Direita", + "siderWidth": "Largura da Lateral", + "siderWidthTooltip": "A largura da lateral suporta porcentagens (%) e pixels (px).", + "siderCollapsedWidth": "Largura da Lateral Recolhida", + "siderCollapsedWidthTooltip": "A largura recolhida da lateral suporta porcentagens (%) e pixels (px).", + "siderCollapsible": "Lateral Recolhível", + "siderCollapsed": "Lateral Recolhida", + "contentScrollbar": "Mostrar Barras de Rolagem no Conteúdo", + "appID": "ID do Aplicativo", + "showApp": "Mostrar um Aplicativo na área de conteúdo", + "showAppTooltip": "Você pode exibir aplicativos inteiros na área de conteúdo. Por favor, observe que para Módulos não oferecemos suporte a Entradas, Saídas, Eventos e Métodos.", + "baseURL": "URL Base da API", + "horizontal": "Horizontal", + "minHorizontalWidth": "Largura Horizontal Mínima", + "component": "Identificadores de Componentes Próprios", + "className": "Nome da Classe CSS", + "dataTestId": "ID Individual", + "preventOverwriting": "Evitar a substituição de estilos", + "color": "Cor", + "horizontalGridCells": "Células de grade horizontal", + "verticalGridCells": "Células de grade vertical", + "timeZone": "Fuso horário", + "pickerMode": "Modo de seleção", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Automóvel", + "fixed": "Fixa", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Passar o rato", + "wrap": "Quebra de Linha", + }, + "labelProp": { + ...en.labelProp, + + "text": "Rótulo", + "tooltip": "Dica de Ferramenta", + "position": "Posição", + "collapse": "Colapso", + "left": "Esquerda", + "right": "Direita", + "top": "Topo", + "align": "Alinhamento", + "width": "Largura", + "widthTooltip": "A largura do rótulo suporta porcentagens (%) e pixels (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Manipuladores de Eventos", + "emptyEventHandlers": "Nenhum Manipulador de Eventos", + "incomplete": "Seleção Incompleta", + "inlineEventTitle": "Em {eventName}", + "event": "Evento", + "action": "Ação", + "noSelect": "Nenhuma Seleção", + "runQuery": "Executar uma Consulta de Dados", + "selectQuery": "Selecionar Consulta de Dados", + "controlComp": "Controlar um Componente", + "runScript": "Executar JavaScript", + "runScriptPlaceHolder": "Escreva o Código Aqui", + "component": "Componente", + "method": "Método", + "setTempState": "Definir um Valor de Estado Temporário", + "state": "Estado", + "triggerModuleEvent": "Disparar um Evento de Módulo", + "moduleEvent": "Evento de Módulo", + "goToApp": "Ir para Outro Aplicativo", + "queryParams": "Parâmetros de Consulta", + "queryVariables": "Variáveis de consulta", + "hashParams": "Parâmetros de Hash", + "showNotification": "Mostrar uma Notificação", + "text": "Texto", + "level": "Nível", + "duration": "Duração", + "notifyDurationTooltip": "A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). A duração máxima é de {max} segundos", + "goToURL": "Abrir uma URL", + "openInNewTab": "Abrir em Nova Guia", + "copyToClipboard": "Copiar um valor para a Área de Transferência", + "copyToClipboardValue": "Valor", + "export": "Exportar Dados", + "exportNoFileType": "Nenhuma Seleção (Opcional)", + "fileName": "Nome do Arquivo", + "fileNameTooltip": "Inclua a extensão para especificar o tipo de arquivo, por exemplo, 'imagem.png'", + "fileType": "Tipo de Arquivo", + "condition": "Executar Somente Quando...", + "conditionTooltip": "Execute o manipulador de eventos apenas quando esta condição for avaliada como 'verdadeira'", + "debounce": "Atraso para", + "throttle": "Controlar a frequência para", + "slowdownTooltip": "Use atraso ou controle de frequência para controlar a frequência dos gatilhos de ação. A unidade de tempo pode ser 'ms' (milissegundo, padrão) ou 's' (segundo).", + "notHandledError": "Não Manipulado", + "currentApp": "Atual", + "inputEventHandlers": "Manipuladores de Eventos de Entrada", + "inputEventHandlersDesc": "Manipuladores de Eventos relacionados à Entrada do Usuário", + "buttonEventHandlers": "Manipuladores de Eventos de Botão", + "buttonEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques de Botão", + "changeEventHandlers": "Manipuladores de Eventos de Mudança", + "changeEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Valor", + "editedEventHandlers": "Manipuladores de Eventos de Edição", + "editedEventHandlersDesc": "Manipuladores de Eventos relacionados ao estado editado de Elementos", + "clickEventHandlers": "Manipuladores de Eventos de Clique", + "clickEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques", + "keyDownEventHandlers": "Manipuladores de Eventos de Pressionar Tecla", + "keyDownEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Pressionar Tecla", + "checkboxEventHandlers": "Manipuladores de Eventos de Caixa de Seleção", + "checkboxEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Caixa de Seleção", + "dragEventHandlers": "Manipuladores de Eventos de Arrastar", + "dragEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Arrastar e Soltar", + "elementEventHandlers": "Manipuladores de Eventos de Elemento", + "elementEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos Genéricos de Elemento de Dados", + "mediaEventHandlers": "Manipuladores de Eventos de Mídia", + "mediaEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mídia", + "scannerEventHandlers": "Manipuladores de Eventos de Scanner", + "scannerEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Scanner", + "chartEventHandlers": "Manipuladores de Eventos de Gráfico", + "chartEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Gráfico", + "geoMapEventHandlers": "Manipuladores de Eventos de Mapa Geográfico", + "geoMapEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mapa Geográfico", + "stepEventHandlers": "Manipuladores de Eventos de Etapa", + "stepEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Interface de Etapa", + "shareEventHandlers": "Manipuladores de Eventos de Compartilhamento", + "shareEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Compartilhamento", + "selectEventHandlers": "Manipuladores de Eventos de Seleção", + "selectEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Seleção", + "meetingEventHandlers": "Manipuladores de Eventos de Reunião", + "meetingEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Reunião", + "collaborationEventHandlers": "Manipuladores de Eventos de Colaboração", + "collaborationEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Colaboração", + "set": "Definir", + "clear": "Limpar", + "reset": "Redefinir", + "messageType": "Tipo de Mensagem", + "placement": "Posição", + "description": "Descrição", + }, + "event": { + ...en.event, + + "submit": "Enviar", + "submitDesc": "Dispara ao Enviar", + "change": "Alterar", + "changeDesc": "Dispara nas Mudanças de Valor", + "focus": "Foco", + "focusDesc": "Dispara no Foco", + "blur": "Desfocar", + "blurDesc": "Dispara no Desfoque", + "click": "Clique", + "clickDesc": "Dispara no Clique", + "doubleClick": "Clique Duplo", + "doubleClickDesc": "Dispara no Duplo Clique", + "rightClick": "Clique Direito", + "rightClickDesc": "Dispara no Clique Direito", + "keyDown": "Tecla Pressionada", + "keyDownDesc": "Dispara na Pressão de Tecla", + "select": "Selecionar", + "selectDesc": "Dispara na Seleção", + "checked": "Marcado", + "checkedDesc": "Dispara quando uma caixa de seleção está Marcada", + "unchecked": "Desmarcado", + "uncheckedDesc": "Dispara quando uma caixa de seleção está Desmarcada", + "drag": "Arrastar", + "dragDesc": "Dispara no Arrastar", + "drop": "Soltar", + "dropDesc": "Dispara no Soltar", + "open": "Abrir", + "openDesc": "Dispara na Abertura", + "mute": "Mudo", + "muteDesc": "Dispara no Silêncio de um Microfone", + "unmute": "Ativar Som", + "unmuteDesc": "Dispara no Ativar Som de um Microfone", + "showCamera": "Mostrar Câmera", + "showCameraDesc": "Dispara quando Mostrar Câmera está ligado", + "hideCamera": "Ocultar Câmera", + "hideCameraDesc": "Dispara quando Mostrar Câmera está desligado", + "shareScreen": "Compartilhar Tela", + "shareScreenDesc": "Dispara ao Compartilhar Tela", + "shareScreenEnd": "Fim do Compartilhamento de Tela", + "shareScreenEndDesc": "Dispara ao Finalizar o Compartilhamento de Tela", + "shareControl": "Compartilhar Controle", + "shareControlDesc": "Dispara ao Compartilhar Controle", + "shareControlEnd": "Fim do Compartilhamento de Controle", + "shareControlEndDesc": "Dispara ao Finalizar o Compartilhamento de Controle", + "shareContent": "Compartilhar Conteúdo", + "shareContentDesc": "Dispara ao Compartilhar Conteúdo", + "shareContentEnd": "Fim do Compartilhamento de Conteúdo", + "shareContentEndDesc": "Dispara ao Finalizar o Compartilhamento de Conteúdo", + "stopShare": "Parar Compartilhamento", + "stopShareDesc": "Dispara ao Parar o Compartilhamento", + "meetingStart": "Início da Reunião", + "meetingStartDesc": "Dispara no Início da Reunião", + "meetingEnd": "Fim da Reunião", + "meetingEndDesc": "Dispara no Fim da Reunião", + "meetingJoin": "Participar da Reunião", + "meetingJoinDesc": "Dispara ao Participar da Reunião", + "meetingLeave": "Sair da Reunião", + "meetingLeaveDesc": "Dispara ao Sair da Reunião", + "play": "Reproduzir", + "playDesc": "Dispara na Reprodução", + "pause": "Pausar", + "pauseDesc": "Dispara na Pausa", + "ended": "Finalizado", + "endedDesc": "Dispara ao Finalizar", + "step": "Passo", + "stepDesc": "Dispara no Passo", + "next": "Próximo", + "nextDesc": "Dispara no Próximo", + "finished": "Finalizado", + "finishedDesc": "Dispara ao Finalizar", + "saved": "Salvo", + "savedDesc": "Dispara quando um elemento é Salvo", + "edited": "Editado", + "editedDesc": "Dispara quando um elemento é Editado", + "geoMapMove": "Mover Mapa Geográfico", + "geoMapMoveDesc": "Dispara quando os Usuários movem o Mapa Geográfico", + "geoMapZoom": "Zoom no Mapa Geográfico", + "geoMapZoomDesc": "Dispara quando os Usuários dão Zoom no Mapa Geográfico", + "geoMapSelect": "Seleção no Mapa Geográfico", + "geoMapSelectDesc": "Dispara quando os Usuários selecionam um Elemento no Mapa Geográfico", + "scannerSuccess": "Sucesso do Scanner", + "scannerSuccessDesc": "Dispara quando um Scanner escaneia com sucesso", + "scannerError": "Erro do Scanner", + "scannerErrorDesc": "Dispara quando um Scanner falha ao escanear", + "chartZoom": "Zoom no Gráfico", + "chartZoomDesc": "Dispara no Zoom do Gráfico", + "chartHover": "Hover no Gráfico", + "chartHoverDesc": "Dispara no Hover do Gráfico", + "chartSelect": "Seleção no Gráfico", + "chartSelectDesc": "Dispara na Seleção do Gráfico", + "chartDeselect": "Desseleção no Gráfico", + "chartDeselectDesc": "Dispara na Desseleção do Gráfico", + "close": "Fechar", + "closeDesc": "Dispara no Fechar", + "parse": "Analisar", + "parseDesc": "Dispara na Análise", + "success": "Sucesso", + "successDesc": "Dispara no Sucesso", + "delete": "Excluir", + "deleteDesc": "Dispara na Exclusão", + "mention": "Menção", + "mentionDesc": "Dispara na Menção", + "search": "Pesquisar", + "searchDesc": "Dispara na Pesquisa", + "selectedChange": "Alteração de Seleção", + "selectedChangeDesc": "Dispara na Alteração de Seleção", + "clickExtra": "Clique na Ação", + "clickExtraDesc": "Dispara no Clique em Elemento Extra", + "start": "Iniciar", + "startDesc": "Dispara no Início", + "resume": "Continuar", + "resumeDesc": "Dispara ao Continuar", + "countdown": "Contagem Regressiva", + "countdownDesc": "Dispara quando a contagem regressiva termina", + "reset": "Reiniciar", + "resetDesc": "Dispara ao reiniciar o temporizador", + "refresh": "Atualizar", + "refreshDesc": "Dispara ao atualizar", + "sortChange": "Mudança de ordenação", + "sortChangeDesc": "Accionadores nas alterações de ordenação", + }, + "style": { + ...en.style, + + "boxShadowColor": "Cor da sombra", + "boxShadow": "Caixa de sombra", + "opacity": "Opacidade", + "animation": "Animação", + "animationIterationCount": "Contagem de Iterações de Animação", + "animationDelay": "Atraso da animação", + "animationDuration": "Duração da animação", + "resetTooltip": "Redefinir estilos. Limpe o campo de entrada para redefinir um estilo individual.", + "textColor": "Cor do Texto", + "contrastText": "Cor do Texto de Contraste", + "generated": "Gerado", + "customize": "Personalizar", + "staticText": "Texto Estático", + "accent": "Acento", + "validate": "Mensagem de Validação", + "border": "Cor da Borda", + "borderRadius": "Raio da Borda", + "borderWidth": "Largura da Borda", + "borderStyle": "Estilo da Borda", + "background": "Fundo", + "headerBackground": "Fundo do Cabeçalho", + "siderBackground": "Fundo do Sider", + "footerBackground": "Fundo do Rodapé", + "fill": "Preenchimento", + "track": "Rastreamento", + "links": "Ligações", + "thumb": "Polegar", + "thumbBorder": "Borda do Polegar", + "checked": "Marcado", + "unchecked": "Desmarcado", + "handle": "Alça", + "tags": "Etiquetas", + "tagsText": "Texto das Tags", + "multiIcon": "Ícone de Seleção Múltipla", + "tabText": "Texto da Aba", + "tabAccent": "Acento da Aba", + "checkedBackground": "Fundo do Marcado", + "uncheckedBackground": "Fundo do Desmarcado", + "uncheckedBorder": "Borda do Desmarcado", + "indicatorBackground": "Fundo do Indicador", + "tableCellText": "Texto da Célula", + "selectedRowBackground": "Fundo da Linha Selecionada", + "hoverRowBackground": "Fundo da Linha em Destaque", + "hoverBackground": "Fundo em Destaque", + "textTransform": "Transformação de Texto", + "textDecoration": "Decoração do Texto", + "alternateRowBackground": "Fundo Alternado da Linha", + "tableHeaderBackground": "Fundo do Cabeçalho da Tabela", + "tableHeaderText": "Texto do Cabeçalho da Tabela", + "toolbarBackground": "Fundo da Barra de Ferramentas", + "toolbarText": "Texto da Barra de Ferramentas", + "pen": "Caneta", + "footerIcon": "Ícone do Rodapé", + "tips": "Dicas", + "margin": "Margem", + "padding": "Preenchimento", + "marginLeft": "Margem à Esquerda", + "marginRight": "Margem à Direita", + "marginTop": "Margem Superior", + "marginBottom": "Margem Inferior", + "containerHeaderPadding": "Preenchimento do Cabeçalho do Contêiner", + "containerFooterPadding": "Preenchimento do Rodapé do Contêiner", + "containerSiderPadding": "Preenchimento do Sider do Contêiner", + "containerBodyPadding": "Preenchimento do Corpo do Contêiner", + "minWidth": "Largura Mínima", + "aspectRatio": "Proporção", + "text": "Texto", + "textSize": "Tamanho do Texto", + "textWeight": "Peso do Texto", + "fontFamily": "Família da Fonte", + "fontStyle": "Estilo da Fonte", + "backgroundImage": "Imagem de Fundo", + "backgroundImageRepeat": "Repetição da Imagem de Fundo", + "backgroundImageSize": "Tamanho da Imagem de Fundo", + "backgroundImagePosition": "Posição da Imagem de Fundo", + "backgroundImageOrigin": "Origem da Imagem de Fundo", + "headerBackgroundImage": "Imagem de Fundo do Cabeçalho", + "headerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Cabeçalho", + "headerBackgroundImageSize": "Tamanho da Imagem de Fundo do Cabeçalho", + "headerBackgroundImagePosition": "Posição da Imagem de Fundo do Cabeçalho", + "headerBackgroundImageOrigin": "Origem da Imagem de Fundo do Cabeçalho", + "footerBackgroundImage": "Imagem de Fundo do Rodapé", + "footerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Rodapé", + "footerBackgroundImageSize": "Tamanho da Imagem de Fundo do Rodapé", + "footerBackgroundImagePosition": "Posição da Imagem de Fundo do Rodapé", + "footerBackgroundImageOrigin": "Origem da Imagem de Fundo do Rodapé", + "rotation": "Rotação", + "alternateBackground": "Cor de fundo alternativa", + "headerText": "Cor do texto do cabeçalho", + "labelColor": "Cor da etiqueta", + "label": "Cor da etiqueta", + "lineHeight": "Altura da linha", + "subTitleColor": "Cor do subtítulo", + "titleText": "Título Cor", + "success": "Cor do sucesso", + "siderBackgroundImage": "Imagem de fundo do Sider", + "siderBackgroundImageRepeat": "Repetição da imagem de fundo do Sider", + "siderBackgroundImageSize": "Tamanho da imagem de fundo do Sider", + "siderBackgroundImagePosition": "Posição da imagem de fundo do Sider", + "siderBackgroundImageOrigin": "Origem da imagem de fundo do Sider", + "activeBackground": "Cor de fundo ativa", + "labelBackground": "Cor de fundo da etiqueta", + "gradientBackground": "Cor de fundo gradiente", + "direction": "Direção", + "chartOpacity": "Opacidade", + "chartBoxShadow": "Caixa de sombra", + "chartBorderStyle": "Estilo de fronteira", + "chartBorderRadius": "Raio de fronteira", + "chartBorderWidth": "Largura da margem", + "chartTextSize": "Tamanho do texto", + "chartTextWeight": "Peso do texto", + "chartFontFamily": "Família de letras", + "chartFontStyle": "Estilo de letra", + "chartBackgroundColor": "Cor de fundo", + "chartGradientColor": "Cor gradiente", + "chartShadowColor": "Cor da sombra", + "chartBorderColor": "Cor da fronteira", + "chartTextColor": "Cor do texto", + "detailSize": "Tamanho do pormenor", + "radiusTip": "Especifica o raio dos cantos do elemento. Exemplo: 5px, 50% ou 1em.", + "gapTip": "Especifica o espaçamento entre linhas e colunas em um contêiner de grade ou flex. Exemplo: 10px, 1rem ou 5%.", + "cardRadiusTip": "Define o raio dos cantos para componentes de cartão. Exemplo: 10px, 15px.", + "borderWidthTip": "Especifica a largura da borda do elemento. Exemplo: 1px, 0.5em ou fina.", + "borderStyleTip": "Define o estilo da borda. Exemplo: sólido, tracejado, pontilhado ou nenhum.", + "marginTip": "Define a margem externa ao redor de um elemento. Exemplo: 10px, 2em ou auto. Pode ser combinado: 0px 20px ou separado para 4 direções: 0px 1px 5px 2px.", + "directionTip": "Especifica a direção do layout. Exemplo: row, column ou row-reverse.", + "detailSizeTip": "Define o tamanho de detalhes específicos no layout. Exemplo: 10px, 2em ou 80%.", + "chartOpacityTip": "Especifica a opacidade do gráfico. Exemplo: 1 (opaco), 0.5 (50% transparente).", + "chartBoxShadowTip": "Define a sombra projetada pelo gráfico. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Define o estilo da borda do gráfico. Exemplo: sólido, tracejado ou pontilhado.", + "chartBorderRadiusTip": "Especifica o raio dos cantos da borda do gráfico. Exemplo: 10px, 20%.", + "chartBorderWidthTip": "Especifica a largura da borda do gráfico. Exemplo: 2px, 0.5em.", + "chartTextSizeTip": "Especifica o tamanho da fonte do texto do gráfico. Exemplo: 16px, 1em, 120%.", + "chartTextWeightTip": "Especifica o peso da fonte do texto do gráfico. Exemplo: normal, negrito, ou 700.", + "chartFontFamilyTip": "Especifica a família da fonte para o texto do gráfico. Exemplo: Arial, Helvetica ou 'Times New Roman'.", + "chartFontStyleTip": "Especifica o estilo da fonte do texto do gráfico. Exemplo: normal, itálico ou oblíquo.", + "animationIterationCountTip": "Define quantas vezes uma animação deve ser executada. Exemplo: infinito, 1 ou 3.", + "opacityTip": "Define o nível de transparência do elemento. Exemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisível).", + "boxShadowColorTip": "Define a cor da sombra da caixa. Exemplo: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Define a cor de fundo do gráfico. Exemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Especifica as cores do gradiente para o fundo do gráfico. Exemplo: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Especifica a cor da sombra do gráfico. Exemplo: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Define a cor da borda do gráfico. Exemplo: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Define a cor do texto do gráfico. Exemplo: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Define a sombra projetada por um elemento. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Especifica o atraso antes do início da animação. Exemplo: 1s, 500ms, 0.", + "animationDurationTip": "Define a duração da animação. Exemplo: 2s, 3s, 500ms.", + "paddingTip": "Define o espaço interno dentro de um elemento. Exemplo: 10px, 2em, 5%. Pode ser combinado: 0px 20px ou separado para todas as 4 direções: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Define o espaço interno para o cabeçalho do contêiner. Exemplo: 10px, 1rem.", + "containerSiderPaddingTip": "Define o espaço interno para a barra lateral do contêiner. Exemplo: 8px, 1em.", + "containerFooterPaddingTip": "Define o espaço interno para o rodapé do contêiner. Exemplo: 12px, 1rem.", + "containerBodyPaddingTip": "Define o espaço interno para o corpo do contêiner. Exemplo: 15px, 2em.", + "textSizeTip": "Especifica o tamanho da fonte do texto. Exemplo: 14px, 1.2em, 110%.", + "textWeightTip": "Define o peso da fonte do texto. Exemplo: normal, negrito, 400.", + "fontFamilyTip": "Especifica a família da fonte do texto. Exemplo: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Define a decoração do texto. Exemplo: sublinhado, riscado, nenhum.", + "textTransformTip": "Define a capitalização do texto. Exemplo: maiúsculas, minúsculas, capitalizado.", + "fontStyleTip": "Define o estilo da fonte do texto. Exemplo: normal, itálico, oblíquo.", + "backgroundImageTip": "Especifica a imagem de fundo de um elemento. Exemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Especifica a imagem de fundo para o cabeçalho. Exemplo: url('header.jpg').", + "footerBackgroundImageTip": "Especifica a imagem de fundo para o rodapé. Exemplo: url('footer.jpg').", + "backgroundImageRepeatTip": "Define como a imagem de fundo é repetida. Exemplo: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Define como a imagem de fundo do cabeçalho é repetida. Exemplo: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Define como a imagem de fundo do rodapé é repetida. Exemplo: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Define o tamanho da imagem de fundo. Exemplo: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Define a posição da imagem de fundo. Exemplo: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo. Exemplo: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do cabeçalho. Exemplo: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do rodapé. Exemplo: padding-box, border-box, content-box.", + "rotationTip": "Especifica o ângulo de rotação do elemento. Exemplo: 45deg, 90deg, -180deg.", + "lineHeightTip": "Define a altura de uma linha de texto. Exemplo: 1.5, 2, 120%.", + }, + "export": { + ...en.export, + + "hiddenDesc": "Se verdadeiro, o componente está oculto", + "disabledDesc": "Se verdadeiro, o componente está desativado e não interativo", + "visibleDesc": "Se verdadeiro, o componente é visível", + "inputValueDesc": "Valor atual da entrada", + "invalidDesc": "Indica se o valor é inválido", + "placeholderDesc": "Texto de espaço reservado quando nenhum valor está definido", + "requiredDesc": "Se verdadeiro, um valor válido é necessário", + "submitDesc": "Enviar Formulário", + "richTextEditorValueDesc": "Valor atual do Editor", + "richTextEditorReadOnlyDesc": "Se verdadeiro, o Editor está somente leitura", + "richTextEditorHideToolBarDesc": "Se verdadeiro, a barra de ferramentas está oculta", + "jsonEditorDesc": "Dados JSON atuais", + "sliderValueDesc": "Valor atualmente selecionado", + "sliderMaxValueDesc": "Valor máximo do controle deslizante", + "sliderMinValueDesc": "Valor mínimo do controle deslizante", + "sliderStartDesc": "Valor do ponto inicial selecionado", + "sliderEndDesc": "Valor do ponto final selecionado", + "ratingValueDesc": "Classificação atualmente selecionada", + "ratingMaxDesc": "Valor máximo de classificação", + "datePickerValueDesc": "Data atualmente selecionada", + "datePickerFormattedValueDesc": "Data selecionada formatada", + "datePickerTimestampDesc": "Carimbo de data/hora da data selecionada", + "dateRangeStartDesc": "Data de início do intervalo", + "dateRangeEndDesc": "Data de término do intervalo", + "dateRangeStartTimestampDesc": "Carimbo de data/hora da data de início", + "dateRangeEndTimestampDesc": "Carimbo de data/hora da data de término", + "dateRangeFormattedValueDesc": "Intervalo de datas formatado", + "dateRangeFormattedStartValueDesc": "Data de início formatada", + "dateRangeFormattedEndValueDesc": "Data de término formatada", + "timePickerValueDesc": "Hora atualmente selecionada", + "timePickerFormattedValueDesc": "Hora selecionada formatada", + "timeRangeStartDesc": "Hora de início do intervalo", + "timeRangeEndDesc": "Hora de término do intervalo", + "timeRangeFormattedValueDesc": "Intervalo de horas formatado", + "timeRangeFormattedStartValueDesc": "Hora de início formatada", + "timeRangeFormattedEndValueDesc": "Hora de término formatada", + "timeZone": "Fuso horário", + "timeZoneDesc": "Fuso horário da data selecionada", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Por favor, insira um endereço de e-mail válido", + "url": "Por favor, insira uma URL válida", + "regex": "Por favor, corresponda ao padrão especificado", + "maxLength": "Muitos caracteres, atual: {length}, máximo: {maxLength}", + "minLength": "Não há caracteres suficientes, atual: {length}, mínimo: {minLength}", + "maxValue": "O valor excede o máximo, atual: {value}, máximo: {max}", + "minValue": "O valor está abaixo do mínimo, atual: {value}, mínimo: {min}", + "maxTime": "O tempo excede o máximo, atual: {time}, máximo: {maxTime}", + "minTime": "O tempo está abaixo do mínimo, atual: {time}, mínimo: {minTime}", + "maxDate": "A data excede o máximo, atual: {date}, máximo: {maxDate}", + "minDate": "A data está abaixo do mínimo, atual: {date}, mínimo: {minDate}", + }, + "query": { + ...en.query, + + "noQueries": "Não há consultas de dados disponíveis.", + "queryTutorialButton": "Ver {value} documentos", + "datasource": "Suas Fontes de Dados", + "newDatasource": "Nova Fonte de Dados", + "generalTab": "Geral", + "notificationTab": "Notificação", + "variablesTab": "Variáveis", + "advancedTab": "Avançado", + "showFailNotification": "Mostrar Notificação em Caso de Falha", + "failCondition": "Condições de Falha", + "failConditionTooltip1": "Personalize as condições de falha e as notificações correspondentes.", + "failConditionTooltip2": "Se qualquer condição retornar verdadeira, a consulta será marcada como falha e acionará a notificação correspondente.", + "showSuccessNotification": "Mostrar Notificação em Caso de Sucesso", + "successMessageLabel": "Mensagem de Sucesso", + "successMessage": "Consulta Bem-sucedida", + "notifyDuration": "Duração", + "notifyDurationTooltip": "Duração da notificação. A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). O valor padrão é {default}s. O máximo é {max}s.", + "successMessageWithName": "{name} consulta bem-sucedida", + "failMessageWithName": "{name} consulta falhou: {result}", + "showConfirmationModal": "Mostrar Modal de Confirmação Antes de Executar", + "confirmationMessageLabel": "Mensagem de Confirmação", + "confirmationMessage": "Tem certeza de que deseja executar esta consulta de dados?", + "newQuery": "Nova Consulta de Dados", + "newFolder": "Nova Pasta", + "recentlyUsed": "Recentemente Utilizados", + "folder": "Pasta", + "folderNotEmpty": "A pasta não está vazia", + "dataResponder": "Respondedor de Dados", + "tempState": "Estado Temporário", + "transformer": "Transformador", + "quickRestAPI": "Consulta REST", + "quickStreamAPI": "Consulta de Fluxo", + "quickGraphql": "Consulta GraphQL", + "quickAlasql": "Consulta SQL local", + "databaseType": "Tipo de base de dados", + "chooseDatabase": "Selecionar base de dados", + "lowcoderAPI": "API Lowcoder", + "executeJSCode": "Executar Código JavaScript", + "importFromQueryLibrary": "Importar da Biblioteca de Consultas", + "preparedDataQueries": "As suas consultas de dados preparadas", + "adHocDataQueries": "Consultas de dados rápidas (sem consulta preparada ou fonte de dados)", + "queryResultTransformer": "Manipular uma resposta de consulta para transformar os dados antes da ligação", + "queryResultReactor": "Reagir a qualquer alteração de um valor de dados dinâmico", + "importFromFile": "Importar de Arquivo", + "triggerType": "Disparado quando...", + "triggerTypeAuto": "Quando as entradas mudam ou após o carregamento da aplicação (página)", + "triggerTypePageLoad": "Após o carregamento da aplicação (página)", + "triggerTypeManual": "Somente quando você aciona manualmente", + "triggerTypeInputChange": "Quando as entradas mudam", + "triggerTypeQueryExec": "Após a execução da consulta", + "triggerTypeTimeout": "Após a aplicação (página) carregar e o tempo limite", + "delayTime": "Tempo de atraso", + "chooseDataSource": "Escolha uma Fonte de Dados", + "method": "Método", + "updateExceptionDataSourceTitle": "Atualizar Fonte de Dados com Falha", + "updateExceptionDataSourceContent": "Atualize a seguinte consulta com a mesma fonte de dados com falha:", + "update": "Atualizar", + "disablePreparedStatement": "Desativar Declarações Preparadas", + "disablePreparedStatementTooltip": "Desativar declarações preparadas pode gerar SQL dinâmico, mas aumenta o risco de injeção de SQL", + "timeout": "Tempo Limite Após", + "timeoutTooltip": "Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor padrão: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", + "periodic": "Executar Esta Consulta de Dados Periodicamente", + "periodicTime": "Período", + "periodicTimeTooltip": "Período entre execuções sucessivas. Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor mínimo: 100ms. A execução periódica é desativada para valores abaixo de 100ms. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", + "cancelPrevious": "Ignorar Resultados de Execuções Anteriores Não Concluídas", + "cancelPreviousTooltip": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se elas não foram concluídas, e essas execuções ignoradas não acionarão a lista de eventos da consulta.", + "dataSourceStatusError": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se as execuções anteriores não foram concluídas, e as execuções ignoradas não acionarão a lista de eventos da consulta.", + "success": "Sucesso", + "fail": "Falha", + "successDesc": "Acionado Quando a Execução é Bem-sucedida", + "failDesc": "Acionado Quando a Execução Falha", + "fixedDelayError": "Consulta Não Executada", + "execSuccess": "Execução Bem-sucedida", + "execFail": "Execução Falhou", + "execIgnored": "Os Resultados Dessa Consulta Foram Ignorados", + "deleteSuccessMessage": "Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer", + "dataExportDesc": "Dados Obtidos pela Consulta Atual", + "codeExportDesc": "Código de Status da Consulta Atual", + "successExportDesc": "Se a Consulta Atual Foi Executada com Sucesso", + "messageExportDesc": "Informação Retornada pela Consulta Atual", + "extraExportDesc": "Outros Dados na Consulta Atual", + "isFetchingExportDesc": "A Consulta Atual Está na Requisição", + "runTimeExportDesc": "Tempo de Execução da Consulta Atual (ms)", + "latestEndTimeExportDesc": "Última Hora de Execução", + "triggerTypeExportDesc": "Tipo de Gatilho", + "chooseResource": "Escolha um Recurso", + "createDataSource": "Criar uma Nova Fonte de Dados", + "editDataSource": "Editar", + "datasourceName": "Nome", + "datasourceNameRuleMessage": "Por Favor, Insira um Nome para a Fonte de Dados", + "generalSetting": "Configurações Gerais", + "advancedSetting": "Configurações Avançadas", + "port": "Porta", + "portRequiredMessage": "Por Favor, Insira uma Porta", + "portErrorMessage": "Por Favor, Insira uma Porta Correta", + "connectionType": "Tipo de Conexão", + "regular": "Regular", + "host": "Anfitrião", + "hostRequiredMessage": "Por Favor, Insira um Nome de Domínio de Host ou Endereço IP", + "userName": "Nome de Usuário", + "password": "Senha", + "encryptedServer": "-------- Criptografado no Lado do Servidor --------", + "uriRequiredMessage": "Por Favor, Insira uma URI", + "urlRequiredMessage": "Por Favor, Insira uma URL", + "uriErrorMessage": "Por Favor, Insira uma URI Correta", + "urlErrorMessage": "Por Favor, Insira uma URL Correta", + "httpRequiredMessage": "Por Favor, Insira http:// ou https://", + "databaseName": "Nome do Banco de Dados", + "databaseNameRequiredMessage": "Por Favor, Insira um Nome de Banco de Dados", + "useSSL": "Usar SSL", + "userNameRequiredMessage": "Por Favor, Insira Seu Nome", + "passwordRequiredMessage": "Por Favor, Insira Sua Senha", + "authentication": "Autenticação", + "authenticationType": "Tipo de Autenticação", + "sslCertVerificationType": "Verificação de Certificado SSL", + "sslCertVerificationTypeDefault": "Verificar Certificado CA", + "sslCertVerificationTypeSelf": "Verificar Certificado Autoassinado", + "sslCertVerificationTypeDisabled": "Desativado", + "selfSignedCert": "Certificado Autoassinado", + "selfSignedCertRequireMsg": "Por Favor, Insira Seu Certificado", + "enableTurnOffPreparedStatement": "Ativar Alternância de Declarações Preparadas para Consultas", + "enableTurnOffPreparedStatementTooltip": "Você pode ativar ou desativar declarações preparadas na guia Avançado da consulta", + "serviceName": "Nome do Serviço", + "serviceNameRequiredMessage": "Por Favor, Insira o Nome do Seu Serviço", + "useSID": "Usar SID", + "connectSuccessfully": "Conexão Bem-sucedida", + "saveSuccessfully": "Salvo com Sucesso", + "database": "Banco de Dados", + "cloudHosting": "Lowcoder hospedado na nuvem não pode acessar serviços locais usando 127.0.0.1 ou localhost. Tente se conectar a fontes de dados de rede pública ou use um proxy reverso para serviços privados.", + "notCloudHosting": "Para implantação hospedada em contêineres, o Lowcoder usa redes bridge, portanto, 127.0.0.1 e localhost são inválidos para endereços de host. Para acessar fontes de dados de máquina local, consulte", + "howToAccessHostDocLink": "Como Acessar API/Banco de Dados do Host", + "returnList": "Retornar", + "chooseDatasourceType": "Escolha o Tipo de Fonte de Dados", + "viewDocuments": "Ver Documentos", + "testConnection": "Testar Conexão", + "save": "Salvar", + "whitelist": "Lista de Permissões", + "whitelistTooltip": "Adicione os endereços IP do Lowcoder à lista de permissões da sua fonte de dados conforme necessário.", + "address": "Endereço: ", + "nameExists": "O nome {name} já existe", + "jsQueryDocLink": "Sobre Consulta JavaScript", + "dynamicDataSourceConfigLoadingText": "Carregando configuração extra da fonte de dados...", + "dynamicDataSourceConfigErrText": "Falha ao carregar configuração extra da fonte de dados.", + "retry": "Tentar Novamente", + "categoryDatabase": "Banco de Dados", + "categoryBigdata": "Grandes volumes de dados", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Desenvolvimento de Aplicativos", + "categoryWorkflow": "Fluxo de Trabalho", + "categoryMessaging": "Mensagens", + "categoryAssets": "Ativos e Armazenamento", + "categoryProjectManagement": "Gerenciamento de Projetos", + "categoryCrm": "CRM", + "categoryEcommerce": "Comércio Eletrônico", + "categoryWebscrapers": "Raspadores Web & Open Data", + "categoryDocumentHandling": "Geração de Relatórios e Documentos", + "categoryRPA": "Automação de Processos Robóticos", + "componentsUsingQueryTitle": "Uso da Consulta", + "componentsUsingQuery": "Onde esta consulta está em uso", + "variables": "Variáveis", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Pares Chave-Valor", + "object": "Objeto", + "allowMultiModify": "Permitir Modificação Múltipla de Linhas", + "allowMultiModifyTooltip": "Se selecionado, todas as linhas que atendem às condições serão operadas. Caso contrário, apenas a primeira linha que atende às condições será operada.", + "array": "Arranjo", + "insertList": "Inserir Lista", + "insertListTooltip": "Valores inseridos quando eles não existem", + "filterRule": "Regra de Filtro", + "updateList": "Atualizar Lista", + "updateListTooltip": "Valores atualizados conforme existem podem ser substituídos pelos mesmos valores da lista de inserção", + "sqlMode": "Modo SQL", + "guiMode": "Modo GUI", + "operation": "Operação", + "insert": "Inserir", + "upsert": "Inserir, mas Atualizar em Caso de Conflito", + "update": "Atualizar", + "delete": "Excluir", + "bulkInsert": "Inserção em Lote", + "bulkUpdate": "Atualização em Lote", + "table": "Tabela", + "primaryKeyColumn": "Coluna Chave Primária", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Comando Bruto", + "queryTutorialButton": "Ver Documentos da API do Elasticsearch", + "request": "Pedido", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Índice da Linha", + "spreadsheetId": "ID da Planilha", + "sheetName": "Nome da Planilha", + "readData": "Ler Dados", + "appendData": "Anexar Linha", + "updateData": "Atualizar Linha", + "deleteData": "Excluir Linha", + "clearData": "Limpar Linha", + "serviceAccountRequireMessage": "Por favor, insira sua Conta de Serviço", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Ordenar", + "sortPlaceholder": "Nome", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Exportar para JSON", + "noInput": "A Consulta Atual Não Possui Entrada", + "inputName": "Nome", + "inputDesc": "Descrição", + "emptyInputs": "Sem Entradas", + "clickToAdd": "Adicionar", + "chooseQuery": "Escolher Consulta", + "viewQuery": "Visualizar Consulta", + "chooseVersion": "Escolher Versão", + "latest": "Mais Recente", + "publish": "Publicar", + "historyVersion": "Versão Histórica", + "deleteQueryLabel": "Excluir Consulta", + "deleteQueryContent": "A consulta não pode ser recuperada após a exclusão. Excluir a consulta?", + "run": "Executar", + "readOnly": "Somente Leitura", + "exit": "Sair", + "recoverAppSnapshotContent": "Restaurar a consulta atual para a versão {version}", + "searchPlaceholder": "Pesquisar Consulta", + "allQuery": "Todas as Consultas", + "deleteQueryTitle": "Excluir Consulta", + "unnamed": "Sem Nome", + "publishNewVersion": "Publicar Nova Versão", + "publishSuccess": "Publicado com Sucesso", + "version": "Versão", + "desc": "Descrição", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Ver ", + "extParamsTooltip": "Configurar Parâmetros de Conexão Adicionais", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Consultar Usuários do Espaço de Trabalho", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Comando Bruto", + "command": "Comando", + "queryTutorial": "Visualizar Documentos de Comandos do Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Se {type} for selecionado, o formato do valor deve ser {object}. Exemplo: {example}", + "text": "Texto", + "file": "Arquivo", + "extraBodyTooltip": "As chaves em Corpo Extra serão anexadas ao corpo com tipos JSON ou de Dados de Formulário", + "forwardCookies": "Encaminhar Cookies", + "forwardAllCookies": "Encaminhar Todos os Cookies", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Anexo", + "attachmentTooltip": "Pode ser usado com o componente de envio de arquivo, os dados precisam ser convertidos para:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Remetente", + "recipient": "Destinatário", + "carbonCopy": "Cópia Carbono", + "blindCarbonCopy": "Cópia Carbono Oculta", + "subject": "Assunto", + "content": "Conteúdo", + "contentTooltip": "Suporta texto de entrada ou HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Dashboards e Relatórios", + "layout": "Layout e Navegação", + "forms": "Coleta de Dados e Formulários", + "collaboration": "Reuniões e Colaboração", + "projectmanagement": "Gerenciamento de Projetos", + "scheduling": "Calendário e Agendamento", + "documents": "Gerenciamento de Documentos e Arquivos", + "itemHandling": "Manipulação de Itens e Assinaturas", + "multimedia": "Multimídia e Animação", + "integration": "Integração e Extensão", + "legacy": "Legado e obsoleto", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Auto Completar", + "autoCompleteCompDesc": "Um campo de entrada que fornece sugestões enquanto você digita, melhorando a experiência e a precisão do usuário.", + "autoCompleteCompKeywords": "sugestões, auto completar, digitação, entrada", + "inputCompName": "Entrada de Texto", + "inputCompDesc": "Um campo de entrada de texto básico que permite aos usuários inserir e editar texto.", + "inputCompKeywords": "texto, entrada, campo, editar", + "textAreaCompName": "Área de Texto", + "textAreaCompDesc": "Uma entrada de texto de várias linhas para conteúdo de formulário mais longo, como comentários ou descrições.", + "textAreaCompKeywords": "multilinha, área de texto, entrada, texto", + "passwordCompName": "Senha", + "passwordCompDesc": "Um campo seguro para entrada de senha, ocultando os caracteres para privacidade.", + "passwordCompKeywords": "senha, segurança, entrada, oculto", + "richTextEditorCompName": "Editor de Texto Rico", + "richTextEditorCompDesc": "Um editor de texto avançado que oferece opções de formatação ricas, como negrito, itálico e listas.", + "richTextEditorCompKeywords": "editor, texto, formatação, conteúdo rico", + "numberInputCompName": "Entrada Numérica", + "numberInputCompDesc": "Um campo específico para entrada numérica, com controles para incrementar e decrementar valores.", + "numberInputCompKeywords": "número, entrada, incrementar, decrementar", + "sliderCompName": "Controle Deslizante", + "sliderCompDesc": "Um componente gráfico deslizante para selecionar um valor ou intervalo dentro de uma escala definida.", + "sliderCompKeywords": "controle deslizante, intervalo, entrada, gráfico", + "rangeSliderCompName": "Controle Deslizante de Faixa", + "rangeSliderCompDesc": "Um controle deslizante com dois manipuladores para selecionar um intervalo de valores, útil para filtrar ou definir limites.", + "rangeSliderCompKeywords": "faixa, controle deslizante, manipulador duplo, filtro", + "ratingCompName": "Avaliação", + "ratingCompDesc": "Um componente para capturar avaliações do usuário, exibidas como estrelas.", + "ratingCompKeywords": "avaliação, estrelas, feedback, entrada", + "switchCompName": "Interruptor", + "switchCompDesc": "Um interruptor de alternância para decisões de ligar/desligar ou sim/não.", + "switchCompKeywords": "alternar, interruptor, ligar/desligar, controle", + "selectCompName": "Selecionar", + "selectCompDesc": "Um menu suspenso para selecionar de uma lista de opções.", + "selectCompKeywords": "menu suspenso, selecionar, opções, menu", + "multiSelectCompName": "Seleção Múltipla", + "multiSelectCompDesc": "Um componente que permite a seleção de vários itens em uma lista suspensa.", + "multiSelectCompKeywords": "seleção múltipla, múltiplo, menu suspenso, escolhas", + "cascaderCompName": "Cascata", + "cascaderCompDesc": "Um menu suspenso multinível para seleção de dados hierárquicos, como selecionar uma localização.", + "cascaderCompKeywords": "cascata, hierárquico, menu suspenso, níveis", + "checkboxCompName": "Caixa de Seleção", + "checkboxCompDesc": "Uma caixa de seleção padrão para opções que podem ser selecionadas ou desmarcadas.", + "checkboxCompKeywords": "caixa de seleção, opções, selecionar, alternar", + "radioCompName": "Botão de Rádio", + "radioCompDesc": "Botões de rádio para selecionar uma opção de um conjunto, onde apenas uma escolha é permitida.", + "radioCompKeywords": "botão de rádio, seleção, escolha única", + "segmentedControlCompName": "Controle Segmentado", + "segmentedControlCompDesc": "Um controle com opções segmentadas para alternar rapidamente entre várias escolhas.", + "segmentedControlCompKeywords": "segmentado, controle, alternar, opções", + "stepControlCompName": "Controle de Etapas", + "stepControlCompDesc": "Um controle com opções de etapas para oferecer etapas guiadas visualmente para aplicativos como formulários ou assistentes.", + "stepControlCompKeywords": "etapas, controle, alternar, opções", + "fileUploadCompName": "Upload de Arquivo", + "fileUploadCompDesc": "Um componente para fazer upload de arquivos, com suporte para arrastar e soltar e seleção de arquivos.", + "fileUploadCompKeywords": "arquivo, upload, arrastar e soltar, selecionar", + "dateCompName": "Data", + "dateCompDesc": "Um componente seletor de datas para selecionar datas a partir de uma interface de calendário.", + "dateCompKeywords": "data, seletor, calendário, selecionar", + "dateRangeCompName": "Intervalo de Datas", + "dateRangeCompDesc": "Um componente para selecionar um intervalo de datas, útil para sistemas de reserva ou filtros.", + "dateRangeCompKeywords": "intervalo de datas, selecionar, reserva, filtro", + "timeCompName": "Hora", + "timeCompDesc": "Um componente de seleção de hora para escolher horas específicas do dia.", + "timeCompKeywords": "hora, seletor, selecionar, relógio", + "timeRangeCompName": "Intervalo de Horário", + "timeRangeCompDesc": "Um componente para selecionar um intervalo de tempo, frequentemente usado em aplicativos de agendamento.", + "timeRangeCompKeywords": "intervalo de tempo, selecionar, agendamento, duração", + "buttonCompName": "Botão de Formulário", + "buttonCompDesc": "Um componente de botão versátil para enviar formulários, acionar ações ou navegar.", + "buttonCompKeywords": "botão, enviar, ação, navegar", + "meetingControlCompName": "Botão de Ícone", + "meetingCompDesc": "Um botão para controlar funções como iniciar, encerrar, silenciar ou compartilhar.", + "meetingCompKeywords": "controle, botão, iniciar, encerrar", + "linkCompName": "Ligação a", + "linkCompDesc": "Um componente de exibição de hyperlink para navegação ou vinculação a recursos externos.", + "linkCompKeywords": "link, hyperlink, navegação, externo", + "scannerCompName": "Scanner", + "scannerCompDesc": "Um componente para digitalizar códigos de barras, códigos QR e outros dados semelhantes.", + "scannerCompKeywords": "scanner, código de barras, código QR, digitalizar", + "dropdownCompName": "Menu Suspenso", + "dropdownCompDesc": "Um menu suspenso para exibir de forma compacta uma lista de opções.", + "dropdownCompKeywords": "menu suspenso, menu, opções, selecionar", + "toggleButtonCompName": "Botão de Alternância", + "toggleButtonCompDesc": "Um botão que pode alternar entre dois estados ou opções.", + "toggleButtonCompKeywords": "alternar, botão, mudar, estado", + "textCompName": "Exibição de Texto", + "textCompDesc": "Um componente simples para exibir conteúdo de texto estático ou dinâmico, incluindo formatação Markdown.", + "textCompKeywords": "texto, exibição, estático, dinâmico", + "tableCompName": "Tabela", + "tableCompDesc": "Um componente de tabela rico para exibir dados em um formato de tabela estruturada, com opções de ordenação e filtragem, exibição de dados em árvore e linhas extensíveis.", + "tableCompKeywords": "tabela, dados, ordenação, filtragem", + "imageCompName": "Imagem", + "imageCompDesc": "Um componente para exibir imagens, com suporte a vários formatos baseados em URI ou dados Base64.", + "imageCompKeywords": "imagem, exibição, mídia, Base64", + "progressCompName": "Progresso", + "progressCompDesc": "Um indicador visual de progresso, geralmente usado para mostrar o status de conclusão de uma tarefa.", + "progressCompKeywords": "progresso, indicador, status, tarefa", + "progressCircleCompName": "Círculo de Progresso", + "progressCircleCompDesc": "Um indicador de progresso circular, frequentemente usado para estados de carregamento ou tarefas com limite de tempo.", + "progressCircleCompKeywords": "círculo, progresso, indicador, carregamento", + "fileViewerCompName": "Visualizador de Arquivos", + "fileViewerCompDesc": "Um componente para visualizar vários tipos de arquivos, incluindo documentos e imagens.", + "fileViewerCompKeywords": "arquivo, visualizador, documento, imagem", + "dividerCompName": "Divisor", + "dividerCompDesc": "Um componente visual de divisão, usado para separar conteúdo ou seções em um layout.", + "dividerCompKeywords": "divisor, separador, layout, design", + "qrCodeCompName": "Código QR", + "qrCodeCompDesc": "Um componente para exibir códigos QR, útil para digitalização rápida e transferência de informações.", + "qrCodeCompKeywords": "código QR, digitalização, código de barras, informação", + "formCompName": "Formulário", + "formCompDesc": "Um componente contêiner para construir formulários estruturados com vários tipos de entrada.", + "formCompKeywords": "formulário, entrada, contêiner, estrutura", + "jsonSchemaFormCompName": "Formulário de Esquema JSON", + "jsonSchemaFormCompDesc": "Um componente de formulário dinâmico gerado com base em um esquema JSON.", + "jsonSchemaFormCompKeywords": "JSON, esquema, formulário, dinâmico", + "containerCompName": "Contêiner", + "containerCompDesc": "Um contêiner de uso geral para layout e organização de elementos de IU.", + "containerCompKeywords": "contêiner, layout, organização, IU", + "floatTextContainerCompName": "Contêiner de Texto Flutuante", + "floatTextContainerCompDesc": "Componente de Contêiner de Texto Flutuante", + "floatTextContainerCompKeywords": "contêiner, layout, texto, fluxo", + "collapsibleContainerCompName": "Contêiner Dobrável", + "collapsibleContainerCompDesc": "Um contêiner que pode ser expandido ou recolhido, ideal para gerenciar a visibilidade do conteúdo.", + "collapsibleContainerCompKeywords": "dobrável, contêiner, expandir, recolher", + "tabbedContainerCompName": "Contêiner com Abas", + "tabbedContainerCompDesc": "Um contêiner com navegação em abas para organizar o conteúdo em painéis separados.", + "tabbedContainerCompKeywords": "com abas, contêiner, navegação, painéis", + "pageLayoutCompName": "Layout de Página", + "pageLayoutCompDesc": "Um contêiner que oferece criar um layout com áreas de cabeçalho, lateral, rodapé e conteúdo principal", + "pageLayoutCompKeywords": "layout, contêiner, navegação, páginas", + "modalCompName": "Modal", + "modalCompDesc": "Um componente de modal pop-up para exibir conteúdo, alertas ou formulários em foco.", + "modalCompKeywords": "modal, pop-up, alerta, formulário", + "listViewCompName": "Visualização de Lista", + "listViewCompDesc": "Um componente para apresentar uma lista de itens ou dados, onde pode colocar outros componentes. Como um repetidor.", + "listViewCompKeywords": "lista, ver, exibir, repetidor", + "gridCompName": "Grade", + "gridCompDesc": "Um componente de grade flexível para criar layouts estruturados com linhas e colunas como uma extensão ao componente de Visualização de Lista.", + "gridCompKeywords": "grade, layout, linhas, colunas", + "navigationCompName": "Navegação", + "navigationCompDesc": "Um componente de navegação para criar menus, trilhas de navegação ou abas para navegação no site.", + "navigationCompKeywords": "navegação, menu, trilhas de navegação, abas", + "iframeCompName": "IFrame", + "iframeCompDesc": "Um componente de quadro inline para incorporar páginas da web e aplicativos externos ou conteúdo dentro do aplicativo.", + "iframeCompKeywords": "iframe, incorporar, página da web, conteúdo", + "customCompName": "Componente Personalizado", + "customCompDesc": "Um componente flexível e programável para criar elementos de IU exclusivos e definidos pelo usuário, adaptados às suas necessidades específicas.", + "customCompKeywords": "personalizado, definido pelo usuário, flexível, programável", + "moduleCompName": "Módulo", + "moduleCompDesc": "Use Módulos para criar Micro-Apps projetadas para encapsular funcionalidades ou recursos específicos. Os módulos podem então ser incorporados e reutilizados em todos os aplicativos.", + "moduleCompKeywords": "módulo, micro-app, funcionalidade, reutilizável", + "jsonExplorerCompName": "Explorador JSON", + "jsonExplorerCompDesc": "Um componente para explorar visualmente e interagir com estruturas de dados JSON.", + "jsonExplorerCompKeywords": "JSON, explorador, dados, estrutura", + "jsonEditorCompName": "Editor JSON", + "jsonEditorCompDesc": "Um componente editor para criar e modificar dados JSON com validação e destaque de sintaxe.", + "jsonEditorCompKeywords": "JSON, editor, modificar, validar", + "treeCompName": "Árvore", + "treeCompDesc": "Um componente de estrutura de árvore para exibir dados hierárquicos, como sistemas de arquivos ou organogramas.", + "treeCompKeywords": "árvore, hierárquico, dados, estrutura", + "treeSelectCompName": "Seleção de Árvore", + "treeSelectCompDesc": "Um componente de seleção que apresenta opções em um formato de árvore hierárquica, permitindo seleções organizadas e aninhadas.", + "treeSelectCompKeywords": "árvore, selecionar, hierárquica, aninhada", + "audioCompName": "Áudio", + "audioCompDesc": "Um componente para incorporar conteúdo de áudio, com controles para reprodução e ajuste de volume.", + "audioCompKeywords": "áudio, reprodução, som, música", + "videoCompName": "Vídeo", + "videoCompDesc": "Um componente multimídia para incorporar e reproduzir conteúdo de vídeo, com suporte para vários formatos.", + "videoCompKeywords": "vídeo, multimídia, reprodução, incorporar", + "drawerCompName": "Gaveta", + "drawerCompDesc": "Um componente de painel deslizante que pode ser usado para navegação adicional ou exibição de conteúdo, geralmente surgindo da borda da tela.", + "drawerCompKeywords": "gaveta, deslizante, painel, navegação", + "chartCompName": "Gráfico", + "chartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e diagramas.", + "chartCompKeywords": "gráfico, diagrama, dados, visualização", + "carouselCompName": "Carrossel de Imagens", + "carouselCompDesc": "Um componente de carrossel rotativo para exibir imagens, banners ou slides de conteúdo.", + "carouselCompKeywords": "carrossel, imagens, rotação, destaque", + "imageEditorCompName": "Editor de Imagens", + "imageEditorCompDesc": "Um componente interativo para edição e manipulação de imagens, oferecendo várias ferramentas e filtros.", + "imageEditorCompKeywords": "imagem, editor, manipular, ferramentas", + "mermaidCompName": "Gráfico Mermaid", + "mermaidCompDesc": "Um componente para renderizar diagramas complexos e fluxogramas com base na sintaxe Mermaid.", + "mermaidCompKeywords": "mermaid, gráficos, diagramas, fluxogramas", + "calendarCompName": "Calendário", + "calendarCompDesc": "Um componente de calendário para exibir datas e eventos, com opções para visualizações mensais, semanais ou diárias.", + "calendarCompKeywords": "calendário, datas, eventos, agendamento", + "signatureCompName": "Assinatura", + "signatureCompDesc": "Um componente para capturar assinaturas digitais, útil para processos de aprovação e verificação.", + "signatureCompKeywords": "assinatura, digital, aprovação, verificação", + "jsonLottieCompName": "Animação Lottie", + "jsonLottieCompDesc": "Um componente para exibir animações Lottie, fornecendo animações leves e escaláveis com base em dados JSON.", + "jsonLottieCompKeywords": "lottie, animação, JSON, escalável", + "timelineCompName": "Linha do Tempo", + "timelineCompDesc": "Um componente para exibir eventos ou ações em uma ordem cronológica, representados visualmente ao longo de uma linha do tempo linear.", + "timelineCompKeywords": "linha do tempo, eventos, cronológico, histórico", + "commentCompName": "Comentário", + "commentCompDesc": "Um componente para adicionar e exibir comentários de usuários, com suporte a respostas em tópicos e interação do usuário.", + "commentCompKeywords": "comentário, discussão, interação do usuário, feedback", + "mentionCompName": "Menção", + "mentionCompDesc": "Um componente que suporta mencionar usuários ou tags dentro do conteúdo de texto, geralmente usado em redes sociais ou plataformas colaborativas.", + "mentionCompKeywords": "menção, tag, usuário, redes sociais", + "responsiveLayoutCompName": "Layout Responsivo", + "responsiveLayoutCompDesc": "Um componente de layout projetado para se adaptar e responder a diferentes tamanhos de tela e dispositivos, garantindo uma experiência do usuário consistente.", + "responsiveLayoutCompKeywords": "responsivo, layout, adaptar, tamanho da tela", + "splitLayoutCompName": "Layout dividido", + "splitLayoutCompDesc": "Um componente de layout para organizar várias áreas de visualização e separar áreas horizontalmente ou verticalmente. Oferece ao utilizador a possibilidade de arrastar e largar a adaptação da largura ou altura das áreas de visualização.", + "splitLayoutCompKeywords": "dividir, divisor, layout, adaptar, tamanho do ecrã", + "iconCompName": "Ícones", + "iconCompDesc": "Use vários ícones para melhorar o apelo visual e a experiência do usuário do seu aplicativo.", + "iconCompKeywords": "ícones, pictogramas, símbolos, formas", + "tourCompName": "Viagem", + "tourCompDesc": "Um tour de produto para orientar os usuários.", + "tourCompKeywords": "tour, tour do produto, passo a passo, passo a passo interativo", + "hillchartCompName": "Gráfico de Hill", + "hillchartCompDesc": "Um componente de visualização para exibir dados de estado de gerenciamento de projetos em um formato de gráfico de hill.", + "hillchartCompKeywords": "gerenciamento de projetos, gráfico de hill, visualização, dados", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Um componente para exibir mapas interativos usando OpenLayers, com suporte a várias camadas e recursos de mapa.", + "openLayersGeoMapCompKeywords": "openlayers, geomapa, interativo, camadas de mapa", + "chartsGeoMapCompName": "Gráficos de Mapas Geográficos", + "chartsGeoMapCompDesc": "Um componente para visualizar dados geográficos em mapas interativos com gráficos dinâmicos.", + "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualização, dados geográficos", + "bpmnEditorCompName": "Editor BPMN", + "bpmnEditorCompDesc": "Um componente para visualizar, criar e editar diagramas BPMN, com suporte a vários elementos e recursos BPMN.", + "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, fluxos de trabalho", + "turnstileCaptchaCompName": "Captcha de Catraca", + "turnstileCaptchaCompDesc": "Um componente de captcha para verificar usuários contra bots.", + "turnstileCaptchaCompKeywords": "captcha, verificação, identidade, segurança", + "pivotTableCompName": "Tabela Dinâmica", + "pivotTableCompDesc": "Uma ferramenta de sumarização e análise de dados para organizar e agregar dados em um formato de tabela.", + "pivotTableCompKeywords": "tabela dinâmica, dados, análise, agregação", + "funnelChartCompName": "Gráfico de Funil", + "funnelChartCompDesc": "Uma ferramenta de visualização para exibir a redução progressiva de dados à medida que passam por estágios.", + "funnelChartCompKeywords": "gráfico de funil, vendas, conversões, processo", + "gaugeChartCompName": "Gráfico de Medição", + "gaugeChartCompDesc": "Um gráfico que exibe dados como uma leitura em um mostrador, útil para indicar o status ou o nível de algo.", + "gaugeChartCompKeywords": "gráfico de medição, métricas, desempenho, status", + "sankeyChartCompName": "Gráfico Sankey", + "sankeyChartCompDesc": "Um diagrama de fluxo no qual a largura das setas é proporcional à taxa de fluxo, usado para mostrar transferências de energia, material ou custo.", + "sankeyChartCompKeywords": "gráfico sankey, fluxo, energia, custos", + "candleStickChartCompName": "Gráfico de Candlestick", + "candleStickChartCompDesc": "Um estilo de gráfico financeiro usado para descrever movimentos de preços de um título, derivado ou moeda.", + "candleStickChartCompKeywords": "gráfico de candlestick, ações, negociação, finanças", + "radarChartCompName": "Gráfico Radar", + "radarChartCompDesc": "Um método gráfico de exibir dados multivariados na forma de um gráfico bidimensional de três ou mais variáveis quantitativas.", + "radarChartCompKeywords": "gráfico radar, multivariado, análise de desempenho", + "heatmapChartCompName": "Gráfico de Mapa de Calor", + "heatmapChartCompDesc": "Uma representação gráfica de dados onde os valores individuais são representados como cores.", + "heatmapChartCompKeywords": "mapa de calor, visualização de dados, intensidade", + "graphChartCompName": "Gráfico de Rede", + "graphChartCompDesc": "Um diagrama que representa uma rede de nós conectados por arestas, útil para mostrar interconexões e relacionamentos.", + "graphChartCompKeywords": "gráfico de rede, redes, relacionamentos, nós", + "treeChartCompName": "Gráfico de Árvore", + "treeChartCompDesc": "Um diagrama que representa visualmente a hierarquia em uma estrutura semelhante a uma árvore, mostrando relacionamentos entre vários nós.", + "treeChartCompKeywords": "gráfico de árvore, hierarquia, organizacional", + "treemapChartCompName": "Gráfico de Árvore de Mosaico", + "treemapChartCompDesc": "Um gráfico que usa retângulos aninhados para representar dados hierárquicos proporcionalmente.", + "treemapChartCompKeywords": "treemap, hierarquia, visualização de dados", + "sunburstChartCompName": "Gráfico Sunburst", + "sunburstChartCompDesc": "Uma técnica de visualização radial que preenche o espaço e ilustra relações hierárquicas por meio de camadas de um círculo.", + "sunburstChartCompKeywords": "gráfico sunburst, radial, hierarquia", + "themeriverChartCompName": "Gráfico de Rio Temático", + "themeriverChartCompDesc": "Uma visualização que se assemelha a um gráfico de fluxo e mostra mudanças em um conjunto de dados ao longo do tempo e entre categorias.", + "themeriverChartCompKeywords": "rio temático, séries temporais, tendências", + "basicChartCompName": "Gráfico Básico", + "basicChartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e gráficos.", + "basicChartCompKeywords": "gráfico, gráfico, dados, visualização", + "shapeCompName": "Formas", + "shapeCompDesc": "Uma coleção de formas geométricas para uso em diagramas, ilustrações e visualizações.", + "shapeCompKeywords": "formas, geométrico, diagramas, ilustrações", + "ganttChartCompName": "Gráfico de Gantt", + "ganttChartCompDesc": "Um gráfico que ilustra o calendário de um projeto, mostrando as datas de início e de fim dos elementos e as dependências.", + "ganttChartCompKeywords": "gráfico de Gantt, gestão de projectos, calendário", + "kanbanCompName": "Quadro Kanban (pré-visualização!)", + "kanbanCompDesc": "Um quadro de kanban interativo para visualizar e gerenciar o fluxo de trabalho e as tarefas em um projeto.", + "kanbanCompKeywords": "kanban, quadro, fluxo de trabalho, tarefas", + "pieChartCompName": "Gráfico de pizza", + "pieChartCompDesc": "Um componente versátil para visualizar dados com gráficos de pizza.", + "pieChartCompKeywords": "gráfico, dados, visualização", + "lineChartCompName": "Gráfico de linhas", + "lineChartCompDesc": "Um componente versátil para visualizar dados com gráficos de linhas.", + "lineChartCompKeywords": "gráfico, dados, visualização", + "barChartCompName": "Gráfico de barras", + "barChartCompDesc": "Um componente versátil para visualizar dados com gráficos de barras.", + "barChartCompKeywords": "gráfico, dados, visualização", + "scatterChartCompName": "Gráfico de dispersão", + "scatterChartCompDesc": "Um componente versátil para visualizar dados com gráficos de dispersão.", + "scatterChartCompKeywords": "gráfico, dados, visualização", + "colorPickerCompName": "Seletor de Cores", + "colorPickerCompDesc": "Seleção intuitiva de cores para personalização.", + "colorPickerCompKeywords": "cor, seletor, personalização", + "floatButtonCompName": "Botão Flutuante", + "floatButtonCompDesc": "Um botão de ação flutuante para ações proeminentes e rápidas.", + "floatButtonCompKeywords": "botão flutuante, ação, rápida", + "avatarCompName": "Avatar", + "avatarCompDesc": "Exibe avatares de usuário ou imagens de perfil para identificação personalizada.", + "avatarCompKeywords": "avatar, imagem de perfil, identificação de usuário", + "avatarGroupCompName": "Grupo de Avatares", + "avatarGroupCompDesc": "Um grupo de avatares para representar vários usuários ou entidades de forma compacta e visualmente atraente.", + "avatarGroupCompKeywords": "grupo de avatares, usuários, entidades, compacto", + "transferName": "Transferência", + "transferDesc": "Facilita a transferência de dados entre duas listas com funcionalidade de arrastar e soltar.", + "transferKeywords": "transferência, dados, arrastar e soltar", + "cardCompName": "Cartão de Conteúdo", + "cardCompDesc": "Um componente de cartão para exibir informações ou conteúdo organizado de maneira estruturada.", + "cardCompKeywords": "cartão, informações, conteúdo, exibição", + "timerCompName": "Temporizador", + "timerCompDesc": "Um componente que exibe uma contagem regressiva ou tempo decorrido, útil para rastrear durações e prazos.", + "timerCompKeywords": "temporizador, contagem regressiva, tempo decorrido, rastreamento, durações, prazos", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Ver Documentação", + "menuViewPlayground": "Ver Playground Interativo", + "menuUpgradeToLatest": "Atualizar para a Última Versão", + "nameNotEmpty": "Não Pode Estar Vazio", + "nameRegex": "Deve Começar com uma Letra e Conter Apenas Letras, Dígitos e Underlines (_)", + "nameJSKeyword": "Não Pode Ser uma Palavra-chave JavaScript", + "nameGlobalVariable": "Não Pode Ser Nome de Variável Global", + "nameExists": "O Nome {name} Já Existe", + "getLatestVersionMetaError": "Falha ao Obter a Última Versão, Por Favor, Tente Mais Tarde.", + "needNotUpgrade": "A Versão Atual Já Está Atualizada.", + "compNotFoundInLatestVersion": "O Componente Atual Não Foi Encontrado na Última Versão.", + "upgradeSuccess": "Atualizado com Sucesso para a Última Versão.", + "searchProp": "Buscar", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Tentar Novamente", + "resetAfterSubmit": "Redefinir Após Envio Bem-sucedido do Formulário", + "jsonSchema": "Esquema JSON", + "uiSchema": "Esquema UI", + "schemaTooltip": "Ver", + "defaultData": "Dados do Formulário Pré-preenchidos", + "dataDesc": "Dados Atuais do Formulário", + "required": "Obrigatório", + "maximum": "O Valor Máximo é {value}", + "minimum": "O Valor Mínimo é {value}", + "exclusiveMaximum": "Deve Ser Menor Que {value}", + "exclusiveMinimum": "Deve Ser Maior Que {value}", + "multipleOf": "Deve Ser Múltiplo de {value}", + "minLength": "Pelo Menos {value} Caracteres", + "maxLength": "No Máximo {value} Caracteres", + "pattern": "Deve Coincidir com o Padrão {value}", + "format": "Deve Coincidir com o Formato {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "Valor de Pesquisa de Entrada", + }, + "customComp": { + ...en.customComp, + + "text": "É um bom dia.", + "triggerQuery": "Disparar Consulta", + "updateData": "Atualizar Dados", + "updateText": "Eu também estou de bom humor para desenvolver agora meu próprio componente personalizado com o Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Dados que você deseja passar para o componente personalizado", + "code": "Código do seu componente personalizado", + }, + "tree": { + ...en.tree, + + "placeholder": "Por favor, selecione", + "selectType": "Selecionar Tipo", + "noSelect": "Sem Seleção", + "singleSelect": "Seleção Única", + "multiSelect": "Seleção Múltipla", + "checkbox": "Caixa de Seleção", + "checkedStrategy": "Estratégia de Verificação", + "showAll": "Todos os Nós", + "showParent": "Somente Nós Pai", + "showChild": "Somente Nós Filho", + "autoExpandParent": "Expandir Nó Pai Automaticamente", + "checkStrictly": "Verificar Estritamente", + "checkStrictlyTooltip": "Verifique o TreeNode Precisamente; O TreeNode Pai e os TreeNode Filhos não estão Associados", + "treeData": "Dados da Árvore", + "treeDataDesc": "Dados da Árvore Atuais", + "value": "Valores Padrão", + "valueDesc": "Valores Atuais", + "expanded": "Valores Expandidos", + "expandedDesc": "Valores Atuais Expandidos", + "defaultExpandAll": "Expandir Todos os Nós por Padrão", + "showLine": "Mostrar Linha", + "showLeafIcon": "Mostrar Ícone de Folha", + "treeDataAsia": "Ásia", + "treeDataChina": "China", + "treeDataBeijing": "Pequim", + "treeDataShanghai": "Xangai", + "treeDataJapan": "Japão", + "treeDataEurope": "Europa", + "treeDataEngland": "Inglaterra", + "treeDataFrance": "França", + "treeDataGermany": "Alemanha", + "treeDataNorthAmerica": "América do Norte", + "helpLabel": "Rótulo do Nó", + "helpValue": "Valor Único do Nó na Árvore", + "helpChildren": "Nós Filhos", + "helpDisabled": "Desativa o Nó", + "helpSelectable": "Se o Nó é Selecionável (Tipo de Seleção Única/Múltipla)", + "helpCheckable": "Se exibir a Caixa de Seleção (Tipo de Caixa de Seleção)", + "helpDisableCheckbox": "Desativa a Caixa de Seleção (Tipo de Caixa de Seleção)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Teste de Evento", + "methodTest": "Teste de Método", + "inputTest": "Teste de Entrada", + }, + "password": { + ...en.password, + + "label": "Senha", + "placeholder": "Por favor, digite a senha", + "conformLabel": "Confirmar Senha", + "conformPlaceholder": "Por favor, confirme a senha", + "visibilityToggle": "Mostrar Alternância de Visibilidade", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Personalizar Barra de Ferramentas", + "toolbarDescription": "Você pode personalizar a barra de ferramentas. Consulte: https://quilljs.com/docs/modules/toolbar/ para obter mais detalhes.", + "placeholder": "Por favor, insira...", + "hideToolbar": "Ocultar Barra de Ferramentas", + "content": "Conteúdo", + "title": "Título", + "save": "Salvar", + "link": "Ligação:", + "edit": "Editar", + "remove": "Remover", + "defaultValue": "Conteúdo Base", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Personalizado", + "backTop": "Voltar ao Topo", + "buttonType": "Tipo de Botão", + "buttonShape": "Formato do Botão", + "square": "Quadrado", + "circle": "Círculo", + "description": "Descrição", + "badge": "Distintivo", + "primary": "Principal", + "default": "Padrão", + "buttonTheme": "Tema do Botão", + "badgeColor": "Cor do Distintivo", + "dot": "Distintivo como Ponto", + "hidden": "Oculto", + "visibilityHeight": "Altura de Visibilidade", + "visibilityHeightDesc": "Role até uma certa altura antes de exibir o botão de retorno ao topo, 0 é sempre exibido. O modo de edição não pode ser visualizado em tempo real", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Disparadores de Eventos", + "click": "Clique", + "hover": "Passar o Mouse", + "disabledAlpha": "Desativar Seleção de Alfa", + "recommended": "Recomendado", + "showPresets": "Mostrar Predefinições de Cor", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Mostrar botão de fechar", + "Type": "Tipo de insígnia", + "Count": "Contagem da insígnia", + "Size": "Tamanho da insígnia", + "SizeDefault": "padrão", + "SizeSmall": "Pequeno", + "overflowCount": "Contagem de overflow", + "Title": "Título da insígnia", + "dot": "Ponto", + "number": "Número", + "tooltip": "Dica de ferramenta", + }, + "gantt": { + ...en.gantt, + + "key": "Chave", + "title": "Título", + "project": "Projeto", + "from": "De", + "minute": "Minuto", + "hour": "Hora", + "day": "Dia", + "week": "Semana", + "month": "Mês", + "year": "Ano", + "quarter": "Trimestre", + "tasks": "Dados de Tarefas", + "level": "Nível", + "durationUnit": "Unidade de Duração", + "duration": "Duração", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Semana #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "árvore", + "ColumnsData": "Dados das Colunas", + "allowChangeTask": "Clique duplo na Tarefa", + "allowAddLink": "Adicionar Link", + "allowLinkDelete": "Excluir Link", + "allowProgressDrag": "Arrastar Progresso", + "allowTaskDrag": "Arrastar Tarefa", + "links": "Dados de Links", + "dataFormat": "Formato de Análise de Dados", + "handleDateChange": "Lidar com a Mudança de Tarefa", + "handleTaskChange": "Lidar com a Mudança de Tarefa", + "handleAddedLink": "Lidar com Link Adicionado", + "handleDeletedLink": "Lidar com Link Excluído", + "handleProgressDrag": "Lidar com Arrastar de Progresso", + "showTodayMark": "Mostrar Marcação de Hoje", + "resize": "Redimensionar", + "otherEvents": "Outros Eventos", + "openAllBranchInit": "Abrir Todos os Ramos Iniciais", + "date": "Data", + "text": "Texto", + "progress": "progresso", + "width": "Largura", + "ColumnsType": "Tipo de Colunas", + "currentId": "ID Atual", + "currentObject": "Objeto Atual", + "addTask": "Adicionar Tarefa(s)", + "taskObject": "Objeto de Tarefa", + "taskObjectDesc": "Suporta arrays de Tarefas ou único Objeto de Tarefa", + "linkID": "ID do Link", + "linkIDDesc": "Suporta arrays de IDs de Links ou único Objeto de Link", + "removeTask": "Remover Tarefa", + "taskID": "ID da Tarefa", + "taskIDDesc": "Suporta arrays de IDs ou único ID", + "add": "Adicionar", + "expandingAll": "Expandindo Todos", + "collapsingAll": "Recolhendo Todos", + "addTaskFail": "A adição de tarefas falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", + "addLinkFail": "A adição de link falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", + "removeTaskFail": "A remoção de tarefas falhou, e o tipo de parâmetro deve ser string ou array de strings", + "removeLinkFail": "A remoção de links falhou, e o tipo de parâmetro deve ser array de strings", + "otherData": "Outros Dados{i}", + "projectText": "Projeto #{i}", + "taskText": "Tarefa #{i}", + "AutoCalculateProgress": "Calcular Progresso Automático", + "allowProjectDrag": "Permitir Arrastar Projeto", + "showColumns": "Mostrar Colunas", + "exportToPNG": "Exportar para PNG", + "exportToPDF": "Exportar para PDF", + "exportToExcel": "Exportar para Excel", + "progressLowBg": "Cor de Fundo Baixo", + "progressLowColor": "Cor de Progresso Baixo", + "progressMediumBg": "Cor de Fundo Médio", + "progressMediumColor": "Cor de Progresso Médio", + "progressHighBg": "Cor de Fundo Alto", + "progressHighColor": "Cor de Progresso Alto", + "progresscompletedColor": "Cor de Progresso Concluído", + "lowProgressLine": "Linha de Progresso Baixo", + "mediumProgressLine": "Linha de Progresso Médio", + "SegmentedColor": "Cor Segmentada de Progresso", + "link_f2s": "Ligação F2S", + "link_s2s": "Ligação S2S", + "link_f2f": "Ligação F2F", + "link_s2f": "Ligação S2F", + "weekScale": "#{i},", + "showHolidays": "Mostrar Feriados", + "StatutoryHolidays": "Dados de Feriados Legais", + "skipOffTime": "Ocultar Tempo Não Trabalhado", + "weekend": "Fim de Semana", + "weekendSelected": "Fim de Semana Selecionado", + "noWorkHour": "Sem Horário de Trabalho", + "noWorkHourSelected": "Sem Horário de Trabalho Selecionado", + "showWorkTimes": "Mostrar Horários de Trabalho", + "workTimeData": "Dados de Horário de Trabalho", + "fit": "ajustar", + "manual": "manual", + "scaleMode": "Modo de Escala", + "startDate": "Data de Início", + "endDate": "Data de Término", + "addLink": "Adicionar Link(s)", + "linkObject": "Objeto de Link", + "removeLink": "Remover Link", + "allowSort": "Permitir Ordenação", + "showTask": "Mostrar Tarefa", + "toggleOnDBClick": "Alternar no Duplo Clique", + "sortOptions": "Opções de Classificação Inicial", + "rowHeight": "Altura da Linha", + "showTooltip": "Mostrar Dica de Ferramenta", + "tooltipTemplates": "Modelo de Dica de Ferramenta", + "allowResizeTask": "Permitir Redimensionamento de Tarefa", + "projectColor": "Cor do Projeto", + "projectColorBg": "Cor de Fundo do Projeto", + "taskColor": "Cor da Tarefa", + "taskColorBg": "Cor de Fundo da Tarefa", + "milestoneColor": "Cor do Marco", + "highlightOverdue": "Destacar Atrasado", + "overdueColor": "Cor de Atrasado", + "overdueBgColor": "Cor de Fundo de Atrasado", + "projectCompletedBgColor": "Cor de Fundo de Projeto Concluído", + "projectCompletedColor": "Cor de Projeto Concluído", + "tag": "etiqueta", + "tasksTableWidth": "Largura da Tabela de Tarefas", + "allowErrorMessage": "Permitir Mensagem de Erro", + "currentProjectId": "ID do Projeto Atual", + "currentProjectLastTask": "Última Tarefa do Projeto Atual", + "onlySortProject": "Apenas Ordenar Projeto", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Dados de Origem", + "targetTitle": "Dados de Destino", + "content": "Conteúdo {i}", + "items": "Itens", + "targetKeys": "Chaves Selecionadas", + "oneWay": "De Um Sentido", + "pagination": "Paginação", + "pageSize": "Tamanho da Página", + "allowSearch": "Permitir Busca", + "selectedKeys": "Chaves Selecionadas", + "searchInfo": "Informações de Busca", + "targerObject": "Objeto de Destino", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Contagem Máxima", + "avatarSize": "Tamanho do Avatar", + "autoColor": "Cor Automática", + "alignment": "Alinhamento", + "currentAvatar": "Avatar Atual", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "quadrado", + "circle": "círculo", + "icon": "ícone", + "shape": "forma", + "counts": "Insignia", + "title": "título", + "src": "src", + "avatarCompTooltip": "A prioridade de exibição é: imagem -> caracteres -> ícone. Dependendo do que estiver disponível primeiro.", + "iconSize": "Tamanho do Ícone", + "avatarBackground": "Fundo", + "label": "Rótulo", + "caption": "Legenda", + "labelPosition": "Posição do Rótulo", + "alignmentPosition": "alinhamento", + "text": "Texto", + "enableDropDown": "Ativar menu suspenso", + "containerBackground": "Fundo do Contêiner", + }, + "card": { + ...en.card, + + "cardType": "Tipo de Cartão", + "common": "comum", + "custom": "personalizado", + "default": "padrão", + "small": "pequeno", + "showTitle": "Mostrar título", + "title": "Título", + "more": "Mais", + "extraTitle": "Chamada para Ação", + "CoverImg": "Imagem de Capa", + "imgSrc": "Fonte da Imagem", + "showMeta": "Mostrar Conteúdo", + "metaTitle": "Título do Conteúdo", + "metaDesc": "Descrição do Conteúdo", + "imgHeight": "Altura da Imagem", + "showActionIcon": "Mostrar Opções de Ação", + "actionOptions": "Opções de Ação", + "menu": "Menu {i}", + "hoverColor": "Cor ao Passar o Mouse", + "IconColor": "Cor do Ícone", + "titleSize": "Tamanho do Título", + }, + "timer": { + ...en.timer, + + "timerState": "Estado do Temporizador", + "elapsedTime": "Tempo Decorrido", + "timer": "Temporizador", + "countdown": "Contagem Regressiva", + "defaultValue": "Valor Padrão", + "timerType": "Tipo de Temporizador", + "start": "Iniciar", + "pause": "Pausar", + "resume": "Continuar", + "reset": "Redefinir", + "startPause": "Iniciar/Pausar", + "hideButton": "Ocultar Botão", + "fontColor": "Cor da Fonte", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Ícone", + "autoSize": "Tamanho Automático do Ícone", + "iconSize": "Tamanho do Ícone", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Formatar", + "precision": "Precisão", + "allowNull": "Permitir Valor Nulo", + "thousandsSeparator": "Mostrar Separador de Milhares", + "controls": "Mostrar Botões de Incremento/Decremento", + "step": "Passo", + "standard": "Padrão", + "percent": "Porcentagem", + }, + "slider": { + ...en.slider, + + "step": "Passo", + "stepTooltip": "O valor deve ser maior que 0 e divisível por (Máx-Mín)", + "vertical": "Orientação Vertical", + }, + "rating": { + ...en.rating, + + "max": "Avaliação Máxima", + "allowHalf": "Permitir Meias Pontuações", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Opções", + "option": "Opção", + "optionI": "Opção {i}", + "viewDocs": "Ver Documentação", + "tip": "As variáveis 'item' e 'i' representam o valor e o índice de cada item na matriz de dados", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Valor / Chave", + "valueTooltip": "O valor do passo deve ser um número. Para o primeiro passo, deve ser igual ao valor inicial. Os números devem estar em ordem consistente e ascendente.", + "title": "Título do Passo", + "subTitle": "Subtítulo do Passo", + "description": "Descrição do Passo", + "status": "Status do Passo", + "icon": "Ícone do Passo", + }, + "step": { + ...en.step, + + "initialValue": "Começar Números em", + "initialValueTooltip": "Onde começar a numeração visual. Deve ser 1 ou maior.", + "valueDesc": "Valor Atual", + "size": "Tamanho dos Passos", + "sizeSmall": "Pequeno", + "sizeDefault": "Padrão", + "percent": "Percentual dos Passos", + "type": "Tipo de Passos", + "typeDefault": "Padrão", + "typeNavigation": "Navegação", + "typeInline": "Em Linha", + "direction": "Direção dos Passos", + "directionVertical": "Vertical", + "directionHorizontal": "Horizontal", + "labelPlacement": "Posição do Rótulo dos Passos", + "status": "Status dos Passos", + "statusWait": "Aguardar", + "statusProcess": "Processando", + "statusFinish": "Concluído", + "statusError": "Erro", + "showDots": "Mostrar Pontos em Vez de Símbolos", + "showIcons": "Mostrar Ícones em Vez de Símbolos", + "responsive": "Responsivo", + "selectable": "Selecionável", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Texto da Tag", + "color": "Cor", + "icon": "Ícone", + }, + "radio": { + ...en.radio, + + "options": "Opções", + "horizontal": "Horizontal", + "horizontalTooltip": "O Layout Horizontal se Ajusta Quando Acaba o Espaço", + "vertical": "Vertical", + "verticalTooltip": "O Layout Vertical é Exibido em uma Única Coluna", + "autoColumns": "Coluna Automática", + "autoColumnsTooltip": "A Coluna Automática Rearranja a Ordem Automaticamente Conforme o Espaço Permitido e Exibe em Múltiplas Colunas", + }, + "cascader": { + ...en.cascader, + + "options": "Dados JSON para mostrar seleções em cascata", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Valor Atualmente Selecionado", + "selectedIndexDesc": "O Índice do Valor Atualmente Selecionado, ou -1 se Nenhum Valor Estiver Selecionado", + "selectedLabelDesc": "O Rótulo do Valor Atualmente Selecionado", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Deve Ser um Número com uma Unidade de Tamanho de Arquivo Válida, ou um Número sem Unidade de Tamanho de Arquivo.", + "fileEmptyErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Está Vazio.", + "fileSizeExceedErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Excede o Limite.", + "minSize": "Tamanho Mínimo", + "minSizeTooltip": "O Tamanho Mínimo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", + "maxSize": "Tamanho Máximo", + "maxSizeTooltip": "O Tamanho Máximo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", + "single": "Único", + "multiple": "Múltiplo", + "directory": "Diretório", + "upload": "Procurar", + "fileType": "Tipos de Arquivo", + "reference": "Por Favor Consulte", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Especificadores de Tipo de Arquivo Únicos", + "uploadType": "Tipo de Envio", + "showUploadList": "Mostrar Lista de Envios", + "maxFiles": "Máximo de Arquivos", + "filesValueDesc": "O Conteúdo do Arquivo Enviado Atualmente Está Codificado em Base64", + "filesDesc": "Lista dos Arquivos Enviados Atualmente. Para Detalhes, Consulte", + "clearValueDesc": "Limpar Todos os Arquivos", + "parseFiles": "Analisar Arquivos", + "parsedValueTooltip1": "Se parseFiles for Verdadeiro, os Arquivos Enviados serão Analisados em Objeto, Array ou String. Os Dados Analisados Podem Ser Acessados através do Array parsedValue.", + "parsedValueTooltip2": "Suporta Arquivos Excel, JSON, CSV e de Texto. Outros Formatos Retornarão Nulo.", + "forceCapture": "Captura de força", + "forceCaptureTooltip": "Em vez de carregar, capturar a imagem da câmara", + "usePhoto": "Utilizar fotografia", + "retakePhoto": "Tirar uma nova fotografia", + "capture": "Captura", + }, + "date": { + ...en.date, + + "format": "Formato", + "inputFormat": "Formato de entrada", + "formatTip": "Suporte: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", + "reference": "Por Favor Consulte", + "showTime": "Mostrar Hora", + "start": "Data de Início", + "end": "Data de Fim", + "year": "Ano", + "quarter": "Trimestre", + "month": "Mês", + "week": "Semana", + "date": "Data", + "clearAllDesc": "Limpar Tudo", + "resetAllDesc": "Redefinir Tudo", + "placeholder": "Selecionar Data", + "placeholderText": "Marcador de Posição", + "startDate": "Data de Início", + "endDate": "Data de Fim", + }, + "time": { + ...en.time, + + "start": "Hora de Início", + "end": "Hora de Término", + "formatTip": "Suporte: 'HH:mm:ss', 'Timestamp'", + "format": "Formato", + "placeholder": "Selecionar Hora", + "placeholderText": "Marcador de Posição", + "startTime": "Hora de Início", + "endTime": "Hora de Término", + }, + "button": { + ...en.button, + + "prefixIcon": "Ícone Prefixo", + "prefixText": "Texto Prefixo", + "suffixIcon": "Ícone Sufixo", + "icon": "Ícone", + "iconSize": "Tamanho do Ícone", + "button": "Botão do Formulário", + "formToSubmit": "Formulário para Envio", + "default": "Padrão", + "submit": "Enviar", + "textDesc": "Texto Atualmente Exibido no Botão", + "loadingDesc": "O Botão Está no Estado de Carregamento? Se Verdadeiro, o Botão Atual Está Carregando", + "formButtonEvent": "Evento", + }, + "link": { + ...en.link, + + "link": "Ligação a", + "textDesc": "Texto Atualmente Exibido no Link", + "loadingDesc": "O Link Está no Estado de Carregamento? Se Verdadeiro, o Link Atual Está Carregando", + }, + "scanner": { + ...en.scanner, + + "text": "Clique para Escanear", + "camera": "Câmera {index}", + "changeCamera": "Alternar Câmera", + "continuous": "Escaneamento Contínuo", + "uniqueData": "Ignorar Dados Duplicados", + "maskClosable": "Clique na Máscara para Fechar", + "errTip": "Por Favor, Utilize Este Componente Sob HTTPS ou Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Exibir Apenas com Rótulo", + "textDesc": "Texto Atualmente Exibido no Botão", + "triggerMode": "Modo de disparo", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Olá, {name}", + "valueTooltip": "Markdown Suporta a Maioria das Tags e Atributos HTML. Tags como iframe, Script e Outras Estão Desativadas por Motivos de Segurança.", + "verticalAlignment": "Alinhamento Vertical", + "horizontalAlignment": "Alinhamento Horizontal", + "textDesc": "Texto Exibido na Caixa de Texto Atual", + }, + "table": { + ...en.table, + + "editable": "Editável", + "columnNum": "Colunas", + "viewModeResizable": "Largura da Coluna Ajustada pelo Usuário", + "viewModeResizableTooltip": "Se os usuários podem ou não ajustar a largura da coluna.", + "visibleResizables": "Mostrar Alças de Redimensionamento", + "visibleResizablesTooltip": "Exibir alças de redimensionamento visíveis no cabeçalho da tabela.", + "showFilter": "Mostrar Botão de Filtro", + "showRefresh": "Mostrar Botão de Atualização", + "showDownload": "Mostrar Botão de Download", + "columnSeparator": "Separador de colunas", + "columnSeparatorTooltip": "Separador de colunas (\"delimitador\") no arquivo CSV baixado. \n\nRecomendações:\n- Vírgula (,)\n- Ponto e vírgula (;)\n- Barra vertical (|)\n- Tabulação (\\t)", + "columnSetting": "Mostrar Botão de Configuração de Coluna", + "searchText": "Texto de Busca", + "searchTextTooltip": "Pesquisar e filtrar os dados apresentados na tabela", + "showQuickJumper": "Mostrar Pulador Rápido", + "hideOnSinglePage": "Ocultar em Página Única", + "showSizeChanger": "Mostrar Botão de Alteração de Tamanho", + "pageSizeOptions": "Opções de Tamanho de Página", + "pageSize": "Tamanho de Página", + "total": "Contagem Total de Linhas", + "totalTooltip": "O valor padrão é o número de itens de dados atuais, que pode ser obtido da consulta, por exemplo: '{{query1.data[0].count}}'", + "filter": "Filtrar", + "filterRule": "Regra de Filtro", + "chooseColumnName": "Escolher Coluna", + "chooseCondition": "Escolher Condição", + "clear": "Limpar", + "columnShows": "Colunas Mostradas", + "selectAll": "Selecionar Tudo", + "and": "E", + "or": "Ou", + "contains": "Contém", + "notContain": "Não Contém", + "equals": "Igual a", + "isNotEqual": "Não é Igual a", + "isEmpty": "Está Vazio", + "isNotEmpty": "Não Está Vazio", + "greater": "Maior Que", + "greaterThanOrEquals": "Maior ou Igual a", + "lessThan": "Menor Que", + "lessThanOrEquals": "Menor ou Igual a", + "action": "Ação", + "columnValue": "Valor da Coluna", + "columnValueTooltip": "'{{currentCell}}': Dados da Célula Atual\n '{{currentRow}}': Dados da Linha Atual\n '{{currentIndex}}': Índice de Dados Atual (Começando de 0)\n Exemplo: '{{currentCell * 5}}' Mostra 5 Vezes o Valor Original dos Dados.", + "columnTooltip": "Dica de coluna", + "imageSrc": "Fonte da Imagem", + "imageSize": "Tamanho da Imagem", + "columnTitle": "Título", + "columnTitleTooltip": "Dica de título", + "showTitle": "Mostrar Título", + "showTitleTooltip": "Mostrar/Ocultar título da coluna no cabeçalho da tabela", + "sortable": "Classificável", + "align": "Alinhamento", + "fixedColumn": "Coluna Fixa", + "autoWidth": "Largura Automática", + "customColumn": "Coluna Personalizada", + "auto": "Automático", + "fixed": "Fixo", + "columnType": "Tipo de Coluna", + "dataMapping": "Mapeamento de Dados", + "numberStep": "Passo", + "numberStepTooltip": "O número para o qual o valor atual é aumentado ou diminuído. Pode ser um número inteiro ou decimal", + "precision": "Precisão", + "float": "Flutuante", + "prefix": "Prefixo", + "suffix": "Sufixo", + "avatars": "Avatares", + "avatarGroupAlignment": "Alinhamento dos Avatares", + "text": "Texto", + "number": "Número", + "link": "Ligação a", + "links": "Ligações", + "tag": "Etiqueta", + "select": "Seleção", + "dropdown": "Menu suspenso", + "time": "Tempo", + "date": "Data", + "dateTime": "Data e Hora", + "badgeStatus": "Estado", + "button": "Botão", + "image": "Imagem", + "boolean": "Booleano", + "switch": "Interruptor", + "rating": "Classificação", + "progress": "Progresso", + "option": "Operação", + "optionList": "Lista de Operações", + "option1": "Operação 1", + "status": "Estado", + "statusTooltip": "Valores Opcionais: Success, Error, Default, Warning, Processing", + "primaryButton": "Principal", + "defaultButton": "Padrão", + "type": "Tipo", + "tableSize": "Tamanho da Tabela", + "hideHeader": "Ocultar Cabeçalho da Tabela", + "hideToolbar": "Ocultar barra de ferramentas", + "fixedHeader": "Cabeçalho da Tabela Fixo", + "fixedHeaderTooltip": "O cabeçalho será fixado para tabelas com rolagem vertical", + "fixedToolbar": "Barra de Ferramentas Fixa", + "fixedToolbarTooltip": "A barra de ferramentas será fixada para tabelas com rolagem vertical com base na posição", + "hideBordered": "Mostrar Alças de Redimensionamento", + "showHeaderGridBorder": "Mostrar Borda do Grid do Cabeçalho", + "showRowGridBorder": "Mostrar Borda do Grid da Linha", + "showVerticalRowGridBorder": "Mostrar Borda do Grid da Linha Vertical", + "showHorizontalRowGridBorder": "Mostrar Borda do Grid da Linha Horizontal", + "deleteColumn": "Excluir Coluna", + "confirmDeleteColumn": "Confirmar Exclusão da Coluna: ", + "small": "P", + "middle": "M", + "large": "G", + "refreshButtonTooltip": "Os dados atuais mudaram. Clique para regenerar a coluna.", + "changeSetDesc": "Um objeto representando mudanças em uma tabela editável, contendo apenas a célula alterada. As linhas vêm primeiro e as colunas em seguida.", + "selectedRowDesc": "Fornece dados para a linha atualmente selecionada, indicando a linha que aciona um evento de clique se o usuário clicar em um botão/link na linha", + "selectedRowsDesc": "Útil no modo de seleção múltipla, igual a SelectedRow", + "pageNoDesc": "Página atual, começando em 1", + "pageSizeDesc": "Quantas linhas por página", + "sortColumnDesc": "O nome da coluna classificada atualmente selecionada", + "sortDesc": "Se a linha atual está em ordem decrescente", + "pageOffsetDesc": "O início atual da paginação, usado para paginação para obter dados. Exemplo: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", + "displayDataDesc": "Dados exibidos na tabela atual", + "selectedIndexDesc": "Índice selecionado em dados de exibição", + "filterDesc": "Parâmetros de filtragem da tabela", + "dataDesc": "Os dados JSON para a tabela", + "saveChanges": "Salvar Alterações", + "cancelChanges": "Cancelar Alterações", + "rowSelectChange": "Alteração na Seleção de Linha", + "rowClick": "Clique na Linha", + "rowExpand": "Expandir Linha", + "rowShrink": "Contrair Linha", + "search": "Buscar", + "download": "Descarregar", + "columnEdited": "Coluna Editada", + "filterChange": "Alteração de Filtro", + "sortChange": "Alteração de Classificação", + "pageChange": "Alteração de Página", + "refresh": "Atualizar", + "rowColor": "Cor da Linha Condicional", + "rowColorDesc": "Defina condicionalmente a cor da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "Altura da Linha Condicional", + "rowHeightDesc": "Defina condicionalmente a altura da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Cor da Célula Condicional", + "cellColorDesc": "Defina condicionalmente a cor da célula com base no valor da célula usando CurrentCell. Por exemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "Nenhum manipulador de eventos configurado para salvar alterações. Por favor, vincule pelo menos um manipulador de eventos antes de clicar.", + "dynamicColumn": "Usar Configuração de Coluna Dinâmica", + "dynamicColumnConfig": "Configuração de Coluna", + "dynamicColumnConfigDesc": "Configurações de coluna dinâmica. Aceita um array de nomes de colunas. Todas as colunas são visíveis por padrão. Exemplo: [\"id\", \"name\"]", + "position": "Posição", + "showDataLoadSpinner": "Mostrar indicador de carregamento", + "showValue": "Mostrar Valor", + "expandable": "Expansível", + "configExpandedView": "Configurar Visualização Expandida", + "toUpdateRowsDesc": "Um array de objetos para linhas a serem atualizadas em tabelas editáveis.", + "selectedCellDesc": "Célula selecionada", + "empty": "Vazio", + "falseValues": "Texto Quando Falso", + "iconTrue": "Ícone Quando Verdadeiro", + "iconFalse": "Ícone Quando Falso", + "iconNull": "Ícone Quando Nulo", + "allColumn": "Todas", + "visibleColumn": "Visível", + "emptyColumns": "Nenhuma coluna está atualmente visível", + "showSummary": "Mostrar linha(s) de resumo", + "totalSummaryRows": "Total de linhas", + "inlineAddNewRow": "Adicionar nova(s) linha(s) em linha", + "editMode": "Modo de edição", + "singleClick": "Clique Único", + "doubleClick": "Clique duplo", + "showUpdateButtons": "Mostrar botões Salvar/Cancelar", + }, + "image": { + ...en.image, + + "src": "Fonte da Imagem", + "srcDesc": "A fonte da imagem. Pode ser uma URL, um caminho ou uma string Base64. Por exemplo: data:image/png;base64, AAA... CCC", + "supportPreview": "Suporte para visualização clicável (zoom)", + "supportPreviewTip": "Efetivo quando a fonte da imagem é válida", + "previewSrc": "Fonte da imagem de alta resolução", + "clipPath": "Caminho de recorte de imagem", + "clipPathTip": "Utilize o clip-path para definir uma forma personalizada para o seu elemento com base na definição CSS, referenciando uma máscara SVG (através do URL de origem) ou utilizando formas predefinidas como circle(), ellipse(), polygon() ou inset() para recorte.", + "enableOverflow": "Ativar o transbordo", + "enableOverflowTip": "Permite que a imagem transborde o seu contentor, possibilitando o recorte para além dos limites do contentor. Útil para manter o foco em partes específicas da imagem.", + "overflow": "Comportamento de transbordo (CSS)", + "overflowTip": "Define como o conteúdo se deve comportar quando transborda o contentor. Opções como \"hidden\", \"scroll\" ou \"visible\" determinam a visibilidade do conteúdo recortado.", + "positionX": "Posição horizontal", + "positionXTip": "Especifica o alinhamento horizontal da imagem dentro do seu contentor. Exemplos: 'esquerda', 'centro', 'direita' ou valores percentuais.", + "positionY": "Posição vertical", + "positionYTip": "Especifica o alinhamento vertical da imagem dentro do seu contentor. Exemplos: 'top', 'center', 'bottom', ou valores percentuais.", + "aspectRatio": "Rácio de aspeto (CSS)", + "aspectRatioTip": "Mantém uma relação largura/altura consistente para a imagem, como \"16/9\" para ecrã panorâmico ou \"1/1\" para quadrado. Deixar em branco para as dimensões naturais da imagem.", + "placement": "Colocação de imagens", + "placementTip": "Determina onde e como a imagem é apresentada no esquema ou no contentor. As opções incluem alinhamento específico ou lógica de colocação.", + }, + "progress": { + ...en.progress, + + "value": "Valor", + "valueTooltip": "A porcentagem concluída como um valor entre 0 e 100", + "showInfo": "Mostrar Valor", + "valueDesc": "Valor de progresso atual, variando de 0 a 100", + "showInfoDesc": "Se deve exibir o valor de progresso atual", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Por favor, insira uma URL válida ou uma string Base64", + "src": "URI do arquivo", + "srcTooltip": "Pré-visualização do conteúdo do link fornecido por meio da incorporação de HTML, dados codificados em Base64 também podem ser suportados, por exemplo: data:application/pdf;base64, AAA... CCC", + "srcDesc": "O URI do arquivo", + }, + "divider": { + ...en.divider, + + "title": "Título", + "align": "Alinhamento", + "dashed": "Tracejado", + "type": "Tipo vertical", + "dashedDesc": "Se deve usar linha tracejada", + "titleDesc": "Título do divisor", + "alignDesc": "Alinhamento do título do divisor", + }, + "QRCode": { + ...en.QRCode, + + "value": "Valor do Conteúdo do Código QR", + "valueTooltip": "O valor contém no máximo 2953 caracteres. O valor do código QR pode codificar vários tipos de dados, incluindo mensagens de texto, URLs, detalhes de contato (VCard/meCard), credenciais de login Wi-Fi, endereços de e-mail, números de telefone, mensagens SMS, coordenadas de geolocalização, detalhes de eventos de calendário, informações de pagamento, endereços de criptomoeda e links para download de aplicativos", + "valueDesc": "O valor do conteúdo do código QR", + "level": "Nível de Tolerância a Falhas", + "levelTooltip": "Refere-se à capacidade de o código QR ser escaneado mesmo que parte dele esteja bloqueada. Quanto maior o nível, mais complexo é o código.", + "includeMargin": "Mostrar Margem", + "image": "Exibir Imagem no Centro", + "L": "L (Baixo)", + "M": "M (Médio)", + "Q": "Q (Quartil)", + "H": "H (Alto)", + "maxLength": "O conteúdo é muito longo. Defina o comprimento como menos de 2953 caracteres", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Indentação de cada nível", + "expandToggle": "Expandir Árvore JSON", + "theme": "Tema de Cores", + "valueDesc": "Dados JSON atuais", + "default": "Padrão", + "defaultDark": "Padrão Escuro", + "neutralLight": "Neutro Claro", + "neutralDark": "Neutro Escuro", + "azure": "Azul Claro", + "darkBlue": "Azul Escuro", + }, + "audio": { + ...en.audio, + + "src": "URI da Fonte de Áudio ou String Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Reprodução Automática", + "loop": "Laço", + "srcDesc": "URI ou String Base64 atual de áudio como data:audio/mpeg;base64, AAA... CCC", + "play": "Reproduzir", + "playDesc": "Disparado quando o áudio é reproduzido", + "pause": "Pausa", + "pauseDesc": "Disparado quando o áudio é pausado", + "ended": "Finalizado", + "endedDesc": "Disparado quando o áudio termina de ser reproduzido", + }, + "video": { + ...en.video, + + "src": "URI da Fonte de Vídeo ou String Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL do Pôster", + "defaultPosterUrl": "", + "autoPlay": "Reprodução Automática", + "loop": "Laço", + "controls": "Ocultar Controles", + "volume": "Volume", + "playbackRate": "Taxa de Reprodução", + "posterTooltip": "O Valor Padrão é o Primeiro Quadro do Vídeo", + "autoPlayTooltip": "Após o Vídeo ser Carregado, Ele Será Reproduzido Automaticamente. Alterar Este Valor de Verdadeiro para Falso Pausará o Vídeo. (Se um Pôster Estiver Definido, Ele Será Reproduzido pelo Botão do Pôster)", + "controlsTooltip": "Ocultar Controles de Reprodução do Vídeo. Pode Não Ser Totalmente Suportado por Cada Fonte de Vídeo.", + "volumeTooltip": "Defina o Volume do Player, Entre 0 e 1", + "playbackRateTooltip": "Defina a Taxa do Player, Entre 1 e 2", + "srcDesc": "URI ou String Base64 atual de vídeo como data:video/mp4;base64, AAA... CCC", + "play": "Reproduzir", + "playDesc": "Disparado quando o vídeo é reproduzido", + "pause": "Pausa", + "pauseDesc": "Disparado quando o vídeo é pausado", + "load": "Carregar", + "loadDesc": "Disparado quando o recurso de vídeo terminou de carregar", + "ended": "Finalizado", + "endedDesc": "Disparado quando o vídeo termina de ser reproduzido", + "currentTimeStamp": "A posição de reprodução atual do vídeo em segundos", + "duration": "A duração total do vídeo em segundos", + }, + "media": { + ...en.media, + + "playDesc": "Inicia a reprodução da mídia.", + "pauseDesc": "Pausa a reprodução da mídia.", + "loadDesc": "Redefine a mídia para o início e reinicia a seleção do recurso de mídia.", + "seekTo": "Avança para o número de segundos especificado, ou fração se o valor estiver entre 0 e 1", + "seekToAmount": "Número de segundos, ou fração se estiver entre 0 e 1", + "showPreview": "Mostrar pré-visualização", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Valor Inicial", + "end": "Valor Final", + "step": "Tamanho do Passo", + "stepTooltip": "A granularidade do controle deslizante, o valor deve ser maior que 0 e divisível por (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Selecionar um Ícone", + "searchIcon": "Procurar um ícone", + "searchAnimation": "Procurar uma animação", + "searchIllustration": "Procurar uma ilustração", + "insertIcon": "Inserir um Ícone", + "insertImage": "Inserir uma Imagem ou ", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Selecionar uma Forma", + "insertShape": "Inserir uma Forma", + "insertImage": "Inserir uma Imagem ou ", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Por favor, insira o período de timeout correto em ms, o valor atual é: {value}", + "timeoutLessThanMinError": "A entrada deve ser maior que {left}, o valor atual é: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Único", + "multiple": "Múltiplo", + "close": "Fechar", + "mode": "Modo de Seleção", + }, + "container": { + ...en.container, + + "title": "Título do Container Exibido", + "titleTooltip": "O título do container", + "flowWidth": "Largura do conteúdo", + "floatType": "Tipo de Flutuação de Texto", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Posição do Botão Fechar", + "placement": "Posição da Gaveta", + "size": "Tamanho", + "top": "Superior", + "right": "Direita", + "center": "Center", + "bottom": "Inferior", + "left": "Esquerda", + "title": "Título da gaveta", + "titleAlign": "Alinhamento do título", + "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", + "heightTooltip": "Pixel, ex: 378", + "openDrawerDesc": "Abrir Gaveta", + "closeDrawerDesc": "Fechar Gaveta", + "width": "Largura da Gaveta", + "height": "Altura da Gaveta", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Nível de log do SDK da Agora", + "placement": "Posição da Gaveta de Reuniões", + "meeting": "Configurações de Reunião", + "cameraView": "Visualização da Câmera", + "cameraViewDesc": "Visualização da câmera do usuário local (anfitrião)", + "screenShared": "Compartilhamento de Tela", + "screenSharedDesc": "Tela compartilhada pelo usuário local (anfitrião)", + "audioUnmuted": "Áudio Ativado", + "audioMuted": "Áudio Desativado", + "videoClicked": "Vídeo Clicado", + "videoOff": "Vídeo Desativado", + "videoOn": "Vídeo Ativado", + "size": "Tamanho", + "top": "Superior", + "host": "Anfitrião da Sala de Reunião. Você precisaria gerenciar o anfitrião como sua lógica de aplicativo", + "participants": "Participantes da Sala de Reunião", + "shareScreen": "Exibir Tela Compartilhada pelo Usuário Local", + "appid": "ID do Aplicativo da Agora", + "meetingName": "Nome da Reunião", + "localUserID": "ID do Usuário Anfitrião", + "userName": "Nome do Usuário Anfitrião", + "rtmToken": "Token RTM da Agora", + "rtcToken": "Token RTC da Agora", + "noVideo": "Sem Vídeo", + "profileImageUrl": "URL da Imagem de Perfil", + "right": "Direita", + "bottom": "Inferior", + "videoId": "ID do Fluxo de Vídeo", + "audioStatus": "Status de Áudio", + "left": "Esquerda", + "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", + "heightTooltip": "Pixel, ex: 378", + "openDrawerDesc": "Abrir Gaveta", + "closeDrawerDesc": "Fechar Gaveta", + "width": "Largura da Gaveta", + "height": "Altura da Gaveta", + "actionBtnDesc": "Botão de Ação", + "broadCast": "Transmissão de Mensagens", + "title": "Título da Reunião", + "meetingCompName": "Controlador de Reunião da Agora", + "sharingCompName": "Transmissão de Tela", + "videoCompName": "Transmissão de Câmera", + "videoSharingCompName": "Transmissão de Tela", + "meetingControlCompName": "Botão de Ícone", + "meetingCompDesc": "Componente de Reunião", + "meetingCompControls": "Controle de Reunião", + "meetingCompKeywords": "Reunião da Agora, Reunião Web, Colaboração", + "iconSize": "Tamanho do Ícone", + "userId": "ID do Usuário Anfitrião", + "roomId": "ID da Sala", + "meetingActive": "Reunião em Andamento", + "messages": "Mensagens Transmitidas", + }, + "settings": { + ...en.settings, + + "title": "Configurações", + "userGroups": "Grupos de Usuários", + "organization": "Espaços de Trabalho", + "subscription": "Assinaturas", + "audit": "Registros de Auditoria", + "theme": "Temas", + "plugin": "Plug-ins", + "advanced": "Avançado", + "apiDocs": "Documentos da API", + "lab": "Laboratório", + "branding": "Marca", + "oauthProviders": "Autenticação de Usuário", + "appUsage": "Logs de Uso do Aplicativo", + "environments": "Ambientes", + "premium": "Prémio", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "Painel de registo de auditoria", + "AuditLogOverview": "Filtro de registo", + "USER_LOGIN": "Início de sessão do utilizador", + "USER_LOGOUT": "Terminar sessão do utilizador", + "APPLICATION_VIEW": "Ver candidatura", + "APPLICATION_CREATE": "Criar aplicação", + "APPLICATION_DELETE": "Eliminar aplicação", + "APPLICATION_UPDATE": "Atualizar a aplicação", + "APPLICATION_MOVE": "Mover aplicação", + "APPLICATION_RECYCLED": "Aplicação de reciclagem", + "APPLICATION_RESTORE": "Restaurar a aplicação", + "APPLICATION_PUBLISH": "Publicação de aplicações", + "APPLICATION_VERSION_CHANGE": "Atualização da versão da aplicação", + "APPLICATION_SHARING_CHANGE": "Alteração da partilha de aplicações", + "APPLICATION_PERMISSION_CHANGE": "Alteração da autorização de candidatura", + "FOLDER_CREATE": "Criar pasta", + "FOLDER_DELETE": "Eliminar a pasta", + "FOLDER_UPDATE": "Atualizar a pasta", + "QUERY_EXECUTION": "Executar consulta", + "GROUP_CREATE": "Criar grupo", + "GROUP_UPDATE": "Grupo de Atualização", + "GROUP_DELETE": "Eliminar grupo", + "GROUP_MEMBER_ADD": "Adicionar membro do grupo", + "GROUP_MEMBER_ROLE_UPDATE": "Atualizar a função de membro do grupo", + "GROUP_MEMBER_LEAVE": "Grupo de férias", + "GROUP_MEMBER_REMOVE": "Remover membro do grupo", + "SERVER_START_UP": "Arranque do servidor", + "SERVER_INFO": "Ver informações do servidor", + "DATA_SOURCE_CREATE": "Criar fonte de dados", + "DATA_SOURCE_UPDATE": "Atualizar fonte de dados", + "DATA_SOURCE_DELETE": "Eliminar fonte de dados", + "DATA_SOURCE_PERMISSION_GRANT": "Conceder permissão de fonte de dados", + "DATA_SOURCE_PERMISSION_UPDATE": "Atualizar a permissão da fonte de dados", + "DATA_SOURCE_PERMISSION_DELETE": "Permissão de eliminação de fontes de dados", + "LIBRARY_QUERY_CREATE": "Criar Library Query", + "LIBRARY_QUERY_UPDATE": "Atualizar Library Query", + "LIBRARY_QUERY_DELETE": "Eliminar Library Query", + "LIBRARY_QUERY_PUBLISH": "Publicar consulta de biblioteca", + "API_CALL_EVENT": "Evento de chamada de API", + "logFilter": "Filtro de registo", + "noLogsFound": "Não foram encontrados registos. Ajuste os filtros e tente novamente.", + "usageLogUserEngagement": "Envolvimento dos utilizadores por região", + "usageLogAppViews": "Utilização da aplicação ao longo do tempo", + "usageLogTopTen": "As 10 melhores aplicações", + "usageLogAnonymousKNown": "Utilizadores anónimos/conhecidos", + "usageLogDevices": "Discriminação por dispositivo/SO", + "usageLogBrowsers": "Navegador/motor de apresentação", + "premiumFeaturesNotice": "Todas as funcionalidades Premium estão disponíveis na Enterprise Edition do Lowcoder.", + "requestLicense": "Solicitar licenças da Enterprise Edition", + "requestLicensesBtton": "Pedir acesso à empresa", + "AuditLogsTitle": "Registos de auditoria", + "AuditLogsIntroTitle": "Visibilidade poderosa da atividade do seu espaço de trabalho", + "AuditLogsIntro1": "Os registos de auditoria permitem aos administradores seguir exatamente o que acontece em toda a plataforma Lowcoder. Desde as entradas dos utilizadores até às modificações das aplicações, todas as acções relevantes são capturadas e armazenadas.", + "AuditLogsIntro2": "Incluímos metadados detalhados, como a geolocalização, o tipo de dispositivo, o navegador e o sistema operativo de cada evento.", + "AuditLogsIntro3": "Esta transparência permite-lhe monitorizar a atividade em todos os ambientes ligados, fornecendo uma pista de auditoria robusta para apoiar a conformidade, a segurança e a perceção operacional.", + "AuditLogsEventsTitle": "Que eventos são monitorizados?", + "AuditLogsEventsIntro": "As seguintes acções do utilizador são registadas em tempo real:", + "SignIn": "Iniciar sessão", + "Logout": "Terminar sessão", + "ViewApp": "Ver aplicação", + "CreateApp": "Criar nova aplicação", + "DeleteApp": "Eliminar a aplicação", + "UpdateApp": "Atualizar a aplicação", + "MoveToFolder": "Mover para a pasta", + "MoveToTrash": "Mover para o lixo", + "RestoreApp": "Restaurar a aplicação", + "CreateFolder": "Criar nova pasta", + "DeleteFolder": "Eliminar a pasta", + "UpdateFolder": "Atualizar pasta", + "ExecuteDataQuery": "Executar consulta de dados", + "CreateUserGroup": "Criar um novo grupo de utilizadores", + "UpdateUserGroup": "Atualizar o grupo de utilizadores", + "DeleteUserGroup": "Eliminar grupo de utilizadores", + "AddGroupMember": "Adicionar membro do grupo de utilizadores", + "UpdateGroupMemberRole": "Atualizar a função do membro do grupo de utilizadores", + "LeaveUserGroup": "Deixar grupo de utilizadores", + "RemoveGroupMember": "Remover membro do grupo de utilizadores", + "ServerStartup": "Arranque do servidor", + "CreateDataSource": "Criar fonte de dados", + "UpdateDataSource": "Atualizar a fonte de dados", + "DeleteDataSource": "Eliminar a fonte de dados", + "GrantUpdateDeletePermission": "Conceder ou atualizar permissões", + "LibraryQueryActions": "Criar / Atualizar / Eliminar consultas de biblioteca", + "PublishLibraryQuery": "Publicar consulta de biblioteca", + "AuditLogsPreviewTitle": "Pré-visualização do registo de auditoria em ação (clique para ampliar)", + "ScreenshotPlaceholder1": "[ Marcador de ecrã 1 ]", + "ScreenshotPlaceholder2": "[ Marcador de ecrã 2 ]", + "ScreenshotPlaceholder3": "[ Marcador de ecrã 3 ]", + "PricingTitle": "Preços da Enterprise Edition", + "PricingIntro": "Oferecemos preços flexíveis para organizações de qualquer dimensão, adaptados ao seu modelo de utilização:", + "FlatRateTitle": "Opção 1: Taxa fixa por instância - $169 / mês", + "FlatRateDesc": "Uma instância é um ambiente Lowcoder completo (base de dados de metadados + tempo de execução) que pode ser implementado de forma independente. Isto inclui:", + "FlatRatePoint1": "Um armazenamento de metadados MongoDB dedicado", + "FlatRatePoint2": "Um ou mais tempos de execução de aplicações (contentores \"Api-Service\" e/ou \"Node-Service\")", + "UsagePricingTitle": "Opção 2: Preços baseados na utilização - $0,001 por chamada API", + "UsagePricingDesc": "Em alternativa, cada instância pode ser licenciada com base na utilização da API. Oferecemos pacotes pré-pagos:", + "API100k": "100.000 chamadas API - $100", + "API1M": "1.000.000 de chamadas API - $1.000", + "API10M": "10.000.000 de chamadas API - $10.000", + "UsageOverrunDesc": "Quando o seu pacote API estiver a esgotar-se, será alertado. Assim que o pacote for consumido, a sua instância permanece funcional, mas funcionará a uma velocidade reduzida para evitar abusos e manter a equidade.", + "UsageTopUpInfo": "Pode adicionar facilmente pacotes adicionais em qualquer altura para garantir um acesso contínuo e rápido - sem interrupções de serviço.", + "AppUsageTitle": "Registos de utilização da aplicação", + "AppUsageIntroTitle": "Compreender como as suas aplicações são utilizadas", + "AppUsageIntro1": "Os Registos de Utilização da Aplicação dão-lhe uma visão profunda de como as suas aplicações Lowcoder publicadas são consumidas.", + "AppUsageIntro2": "Esta funcionalidade funciona como uma versão integrada e simplificada do Google Analytics - mas totalmente privada e limitada à sua instância Lowcoder.", + "AppUsageIntro3": "Os administradores podem analisar a forma como as aplicações são acedidas ao longo do tempo, quais são as mais utilizadas e a partir de onde os utilizadores se ligam.", + "AppUsageMetricsTitle": "Métricas que pode seguir...", + "AppUsageMetricsIntro": "Estas análises ajudam-no a tomar decisões informadas sobre o envolvimento e a utilização da plataforma:", + "MetricActiveUsers": "Visualizações da aplicação por dia / semana / mês (com base no filtro de tempo)", + "MetricViewsPerApp": "As 10 melhores aplicações", + "MetricDevices": "Acesso por dispositivo (computador, tablet, telemóvel)", + "MetricBrowsers": "Acesso por navegador e sistema operativo", + "MetricCountries": "Origem geográfica dos utilizadores", + "AppUsageScreenshotsTitle": "Análise de utilização da aplicação em ação (clique para ampliar)", + "AppUsageScreenshot1": "[ Captura de ecrã do painel de controlo da utilização da aplicação ]", + "AppUsageScreenshot2": "[ Gráfico de visualizações por aplicação ]", + "AppUsageScreenshot3": "[ Mapa de Distribuição Geo ]", + "BrandingIntroTitle": "Marca personalizada e etiqueta branca", + "BrandingIntro1": "Com as definições de marca da Lowcoders, pode elevar a experiência do produto para os seus utilizadores, oferecendo uma marca totalmente personalizável.", + "BrandingIntro2": "Permita que os seus clientes ou equipas internas utilizem a plataforma como se fosse sua - logótipo, cores, tipos de letra e páginas personalizadas incluídos.", + "BrandingIntro3": "Ou precisa de uma solução totalmente de marca branca e reforçar a identidade da sua marca em todos os pontos de contacto.", + "BrandingColorsIntro1": "Pode definir o seu próprio esquema de cores para corresponder à sua identidade empresarial, incluindo elementos primários da IU e barras de navegação.", + "BrandingColorsIntro2": "Personalize os destaques da barra lateral, as secções do cabeçalho e até o contraste do texto para melhorar a experiência do utilizador e a acessibilidade.", + "BrandingFontsIntro": "Selecione a partir de fontes selecionadas do Google Fonts para tornar a sua aplicação verdadeiramente sua, tanto em termos de estilo como de legibilidade.", + "BrandingLogosIntro": "Naturalmente, também pode carregar os seus próprios logótipos - rectangulares e quadrados - para aparecerem em cabeçalhos, painéis de controlo e ecrãs de início de sessão. Mantenha a consistência da marca em todos os dispositivos e ecrãs.", + "BrandingPagesIntro1": "Adicione texto e imagens personalizados às suas páginas de erro, fluxos de registo e mensagens de fim de sessão.", + "BrandingPagesIntro2": "Estes pontos de contacto ajudam a proporcionar uma experiência de marca completa, mesmo durante cenários inesperados ou transições de conta.", + "BrandingMetaIntro": "Defina metadados padrão como o título e a descrição da página para melhorar a sua presença SEO e a mensagem da marca.", + "BrandingHelpLinksIntro": "Adicione ligações de documentação sensíveis ao contexto diretamente dentro da aplicação, fornecendo ajuda imediata aos seus utilizadores.", + "BrandingWhatsNewIntro": "Active a secção \"Novidades\" para destacar actualizações e anúncios de produtos de uma forma visível e com a sua marca.", + "EnvironmentsIntroTitle": "Preparação do Lowcoder", + "EnvironmentsTitle": "Infraestrutura multi-ambiente", + "EnvironmentsIntro1": "Os ambientes Lowcoder permitem-lhe separar as fases de desenvolvimento, teste e produção de forma limpa e segura.", + "EnvironmentsIntro2": "As equipas empresariais beneficiam de fluxos de trabalho de lançamento estruturados, processos de aprovação e estabilidade de versões em todas as fases.", + "EnvironmentsIntro3": "Com a funcionalidade Ambientes, os administradores podem controlar o que é implementado, quando e onde - tudo a partir de uma única interface.", + "EnvironmentsIntro4": "A Lowcoder inclui vários tipos de objectos como Workspaces, Data Sources, Data Queries e Apps. Uma vez que muitos destes objectos estão interligados (por exemplo, uma Fonte de Dados pode ser partilhada por várias Apps), uma exportação puramente baseada em Git não capturaria todas as dependências de forma consistente. Em vez disso, a Lowcoder oferece um mecanismo de implementação seletivo e integrado diretamente no UI. As aplicações, as fontes de dados e as consultas podem ser geridas e implementadas seletivamente em ambientes. Os objectos geridos garantem lançamentos seguros e controlados de preparação e produção.", + "yourDeploymentID": "A sua ID de implantação", + "EnvironmentsFeaturePreviewTitle": "Ambientes e implementação em ação (clique para ampliar)", + "EnvironmentsUseCasesTitle": "Por que usar ambientes? (Encenação)", + "EnvironmentsUseCase1": "Evite alterações não intencionais na produção, testando as aplicações em ambientes dedicados de desenvolvimento ou de controlo de qualidade.", + "EnvironmentsUseCase2": "Alinhe-se com a governação de TI da empresa, implementando implementações faseadas com acompanhamento pronto para auditoria.", + "EnvironmentsUseCase3": "Permita que as equipas construam com confiança com configurações, dados e integrações específicas do ambiente.", + "EnvironmentsFeaturesTitle": "O que obtém", + "EnvironmentsFeature1": "Painel de controlo centralizado para visualizar e gerir todos os ambientes Lowcoder.", + "EnvironmentsFeature2": "Implementação de aplicações, fontes de dados e configurações entre ambientes, diretamente a partir da IU, sem necessidade de ferramentas adicionais de CI/CD.", + "EnvironmentsFeature3": "Controlos de acesso e regras de visibilidade específicos do ambiente.", + "EnvironmentsFeature5": "Separação clara de preocupações para operações de preparação, sandbox e produção.", + "apiUsage": "Chamadas API.", + "loadingApiUsage": "Carregando dados de uso da API...", + }, + "environments": { + ...en.environments, + + "title": "Ambientes", + "search": "Pesquisar", + "refresh": "Atualizar", + "addEnvironment": "Adicionar ambiente", + "errorLoadingEnvironments": "Erro ao carregar ambientes", + "noEnvironmentsFoundMatching": "Não foram encontrados ambientes correspondentes a \"{searchText}\"", + "noEnvironmentsFound": "Não foram encontrados ambientes. Crie o seu primeiro ambiente para começar.", + "environmentsTypeLabel": "{type} Ambientes", + "showingAllEnvironments": "Mostrar todos os ambientes {count}", + "unnamedEnvironment": "Ambiente sem nome", + "masterEnvironment": "Ambiente principal", + "viewAuditLogs": "Ver registos de auditoria", + "id": "ID", + "domain": "Domínio", + "master": "Mestre", + "license": "Licença", + "apiCalls": "Chamadas API", + "yes": "Sim", + "no": "Não", + "copyId": "ID de cópia", + "copied": "Copiado!", + "percentUsed": "{percent}% utilizado", + "licenseStatus_checking": "Verificação...", + "licenseStatus_licensed": "Licenciado", + "licenseStatus_unlicensed": "Licença necessária", + "licenseStatus_error": "Configuração necessária", + "licenseStatus_unknown": "Desconhecido", + "detail_environmentNotFound": "Ambiente não encontrado", + "detail_returnToEnvironmentsList": "Voltar à lista de ambientes", + "detail_environmentDetail": "Detalhe do ambiente", + "detail_environmentOverview": "Visão geral do ambiente", + "detail_noDomainSet": "Nenhum domínio definido", + "detail_environmentId": "ID do ambiente", + "detail_licenseStatus": "Estado da licença", + "detail_licenseNeeded": "Licença necessária", + "detail_setupRequired": "Configuração necessária", + "detail_created": "Criado", + "detail_unknown": "Desconhecido", + "detail_licenseDetails": "Detalhes da licença", + "detail_apiCallsRemaining": "Chamadas API restantes", + "detail_totalApiCallsLimit": "Limite total de chamadas API", + "detail_enterpriseEdition": "Edição para empresas", + "detail_active": "Ativo", + "detail_inactive": "Inativo", + "detail_licenseInformation": "Informações sobre a licença", + "detail_calls": "chamadas", + "detail_licenses": "Licenças", + "detail_license": "Licença", + "detail_workspaces": "Espaços de trabalho", + "detail_userGroups": "Grupos de utilizadores", + "detail_type": "Tipo", + "detail_status": "Estado", + "detail_licensed": "Licenciado", + "detail_unlicensed": "Não licenciado", + "detail_apiKey": "Chave API", + "detail_configured": "Configurado", + "detail_notSet": "Não definido", + "detail_masterEnv": "Mestre Env", + "unlicensed_unlicensedDescription": "Este ambiente necessita de uma licença válida para desbloquear todas as suas capacidades e funcionalidades. Certifique-se de que o URL do serviço API está corretamente configurado e que o plug-in está instalado.", + "unlicensed_errorDescription": "Encontrámos um problema ao verificar a licença. Reveja as definições de configuração.", + "unlicensed_defaultDescription": "Este ambiente requer a configuração da licença para prosseguir.", + "unlicensed_contactLowcoderTeam": "Contactar a equipa Lowcoder", + "unlicensed_editEnvironment": "Editar ambiente", + "unlicensed_backToEnvironments": "Voltar a Ambientes", + "unlicensed_helpText": "Precisa de ajuda? Contacte a nossa equipa para obter suporte de licenciamento ou edite a configuração do ambiente para resolver este problema.", + "unlicensed_type": "Tipo", + "unlicensed_status": "Estado", + "unlicensed_masterEnv": "Mestre Env", + "unlicensed_licenseIssue": "Emissão de licença", + "unlicensed_error": "Erro", + "unlicensed_missing": "Em falta", + "error_itemNotFound": "O item que procura não existe ou não tem permissão para o visualizar.", + "modal_createNewEnvironment": "Criar novo ambiente", + "modal_editEnvironment": "Editar ambiente", + "modal_cancel": "Cancel", + "modal_createEnvironment": "Criar ambiente", + "modal_saveChanges": "Guardar alterações", + "modal_environmentName": "Nome do ambiente", + "modal_pleaseEnterName": "Introduzir um nome", + "modal_nameMinLength": "O nome deve ter pelo menos 2 caracteres", + "modal_enterEnvironmentName": "Introduzir o nome do ambiente", + "modal_description": "Descrição", + "modal_enterDescription": "Introduzir descrição", + "modal_stage": "Estágio", + "modal_pleaseSelectStage": "Selecionar uma fase", + "modal_selectStage": "Selecionar a fase", + "modal_development": "Desenvolvimento (DEV)", + "modal_testing": "Testes (TEST)", + "modal_preProduction": "Pré-produção (PREPROD)", + "modal_production": "Produção (PROD)", + "modal_frontendUrl": "URL do Frontend", + "modal_pleaseEnterValidUrl": "Introduzir um URL válido", + "modal_apiServiceUrl": "URL do serviço API", + "modal_nodeServiceUrl": "URL do serviço de nó", + "modal_apiKey": "Chave API", + "modal_enterApiKey": "Introduzir chave API", + "modal_masterEnvironment": "Ambiente principal", + "modal_alreadyMasterEnvironment": "{name} já é o ambiente Master", + "modal_willBeMaster": "Será Mestre", + "modal_currentlyMaster": "Atualmente Mestre", + "modal_configurationRequirements": "Requisitos de configuração", + "modal_configurationRequirementsDesc": "Certifique-se de que o URL do serviço da API está configurado e correto, a chave da API é válida e, para a verificação da licença, certifique-se de que tem a licença e o plug-in corretamente instalados.", + "workspaces_title": "Espaços de trabalho", + "workspaces_subtitle": "Gerir espaços de trabalho neste ambiente", + "workspaces_refresh": "Atualizar", + "workspaces_errorLoadingWorkspaces": "Erro ao carregar espaços de trabalho", + "workspaces_configurationIssue": "Problema de configuração", + "workspaces_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", + "workspaces_totalWorkspaces": "Total de espaços de trabalho", + "workspaces_managedWorkspaces": "Espaços de trabalho geridos", + "workspaces_unmanagedWorkspaces": "Espaços de trabalho não geridos", + "workspaces_workspace": "Espaço de trabalho", + "workspaces_role": "Papel", + "workspaces_status": "Estado", + "workspaces_managed": "Gerido", + "workspaces_unmanaged": "Não gerido", + "workspaces_actions": "Acções", + "workspaces_viewAuditLogs": "Ver registos de auditoria", + "workspaces_audit": "Auditoria", + "workspaces_searchWorkspaces": "Procurar espaços de trabalho por nome ou ID", + "workspaces_showAll": "Mostrar tudo", + "workspaces_managedOnly": "Apenas gerido", + "workspaces_showingResults": "A mostrar ___LOCALIZADOR0___ de ___LOCALIZADOR1___ espaços de trabalho", + "workspaces_paginationTotal": "Espaços de trabalho {start}-{end} de {total}", + "workspaces_noWorkspacesFound": "Não foram encontrados espaços de trabalho neste ambiente", + "userGroups_title": "Grupos de utilizadores", + "userGroups_subtitle": "Gerir grupos de utilizadores neste ambiente", + "userGroups_refresh": "Atualizar", + "userGroups_errorLoadingUserGroups": "Erro ao carregar grupos de utilizadores", + "userGroups_configurationIssue": "Problema de configuração", + "userGroups_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", + "userGroups_totalGroups": "Total de grupos", + "userGroups_allUsersGroups": "Todos os grupos de utilizadores", + "userGroups_developerGroups": "Grupos de programadores", + "userGroups_customGroups": "Grupos personalizados", + "userGroups_userGroup": "Grupo de utilizadores", + "userGroups_type": "Tipo", + "userGroups_allUsers": "Todos os utilizadores", + "userGroups_developers": "Programadores", + "userGroups_custom": "Personalizado", + "userGroups_members": "Membros", + "userGroups_adminMembers": "Membros administradores", + "userGroups_created": "Criado", + "userGroups_totalMembersTooltip": "Número total de membros deste grupo", + "userGroups_adminMembersTooltip": "Número de utilizadores administradores neste grupo", + "userGroups_searchUserGroups": "Procurar grupos de utilizadores por nome ou ID", + "userGroups_showingResults": "Mostrar os grupos de utilizadores ___LOCALIZADOR0___ de ___LOCALIZADOR1___", + "userGroups_paginationTotal": "Grupos de utilizadores {start}-{end} de {total}", + "userGroups_noUserGroupsFound": "Não foram encontrados grupos de utilizadores neste ambiente", + "apps_title": "Aplicações", + "apps_subtitle": "Gerir aplicações do espaço de trabalho", + "apps_refresh": "Atualizar", + "apps_errorLoadingApps": "Erro ao carregar aplicações", + "apps_configurationIssue": "Problema de configuração", + "apps_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", + "apps_totalApps": "Total de aplicações", + "apps_publishedApps": "Aplicativos publicados", + "apps_managedApps": "Aplicações geridas", + "apps_unmanagedApps": "Aplicações não geridas", + "apps_app": "Aplicação", + "apps_status": "Estado", + "apps_published": "Publicado", + "apps_draft": "Projeto", + "apps_managed": "Gerido", + "apps_unmanaged": "Não gerido", + "apps_deploy": "Implantar", + "apps_audit": "Auditoria", + "apps_appMustBeManagedToDeploy": "A aplicação deve ser gerida antes de poder ser implementada", + "apps_deployThisApp": "Implementar esta aplicação noutro ambiente", + "apps_viewAuditLogs": "Ver registos de auditoria", + "apps_searchApps": "Procurar aplicações por nome ou ID", + "apps_showAll": "Mostrar tudo", + "apps_managedOnly": "Apenas gerido", + "apps_showingResults": "Mostrar ___LOCALIZADOR0___ de ___LOCALIZADOR1___ aplicações", + "apps_paginationTotal": "{start}-{end} de {total} aplicações", + "apps_noAppsFound": "Não foram encontradas aplicações neste espaço de trabalho", + "apps_appRecycled": "Esta aplicação foi movida para a reciclagem", + "apps_managedSuccess": "{name} é agora Gerido", + "apps_unmanagedSuccess": "{name} não é agora gerido", + "apps_managedError": "Falha ao alterar o estado gerido de {name}", + "dataSources_title": "Fontes de dados", + "dataSources_subtitle": "Gerir as ligações de dados do espaço de trabalho", + "dataSources_refresh": "Atualizar", + "dataSources_errorLoadingDataSources": "Erro ao carregar fontes de dados", + "dataSources_configurationIssue": "Problema de configuração", + "dataSources_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", + "dataSources_totalDataSources": "Total de fontes de dados", + "dataSources_availableTypes": "Tipos disponíveis", + "dataSources_managed": "Gerido", + "dataSources_unmanaged": "Não gerido", + "dataSources_dataSource": "Fonte de dados", + "dataSources_type": "Tipo", + "dataSources_status": "Estado", + "dataSources_deploy": "Implantar", + "dataSources_audit": "Auditoria", + "dataSources_dataSourceMustBeManagedToDeploy": "A fonte de dados deve ser gerida antes de poder ser implantada", + "dataSources_deployThisDataSource": "Implantar essa fonte de dados em outro ambiente", + "dataSources_viewAuditLogs": "Ver registos de auditoria", + "dataSources_searchDataSources": "Pesquisar fontes de dados por nome ou ID", + "dataSources_showAll": "Mostrar tudo", + "dataSources_managedOnly": "Apenas gerido", + "dataSources_showingResults": "Mostrando {count} de {total} fontes de dados", + "dataSources_paginationTotal": "{start}-{end} de {total} fontes de dados", + "dataSources_noDataSourcesFound": "Não foram encontradas fontes de dados neste espaço de trabalho", + "dataSources_managedSuccess": "{name} é agora Gerido", + "dataSources_unmanagedSuccess": "{name} não é agora gerido", + "dataSources_managedError": "Falha ao alterar o estado gerido de {name}", + "queries_title": "Consultas", + "queries_subtitle": "Gerir as consultas da API do espaço de trabalho", + "queries_refresh": "Atualizar", + "queries_errorLoadingQueries": "Erro ao carregar as consultas", + "queries_configurationIssue": "Problema de configuração", + "queries_missingConfiguration": "Configuração necessária em falta: Chave da API ou URL do serviço da API", + "queries_totalQueries": "Total de consultas", + "queries_managed": "Gerido", + "queries_unmanaged": "Não gerido", + "queries_query": "Consulta", + "queries_creator": "Criador", + "queries_status": "Estado", + "queries_deploy": "Implantar", + "queries_audit": "Auditoria", + "queries_queryMustBeManagedToDeploy": "A consulta deve ser gerida antes de poder ser implementada", + "queries_deployThisQuery": "Implantar essa consulta em outro ambiente", + "queries_viewAuditLogs": "Ver registos de auditoria", + "queries_searchQueries": "Consultas de pesquisa por nome ou ID", + "queries_showAll": "Mostrar tudo", + "queries_managedOnly": "Apenas gerido", + "queries_showingResults": "A mostrar ___LOCALIZADOR0___ de ___LOCALIZADOR1___ consultas", + "queries_paginationTotal": "{start}-{end} de {total} consultas", + "queries_noQueriesFound": "Não foram encontradas consultas neste espaço de trabalho", + "queries_managedSuccess": "{name} é agora Gerido", + "queries_unmanagedSuccess": "{name} não é agora gerido", + "queries_managedError": "Falha ao alterar o estado gerido de {name}", + "deployModal_deployTitle": "Implantar {singularLabel}: ___PLACEPLACEHOLDER1___", + "deployModal_loadingEnvironments": "Carregamento de ambientes...", + "deployModal_sourceEnvironment": "Fonte Ambiente", + "deployModal_targetEnvironment": "Ambiente alvo", + "deployModal_selectTargetEnvironment": "Selecionar o ambiente de destino", + "deployModal_selectTargetEnvironmentValidation": "Selecione um ambiente de destino", + "deployModal_confirmed": "Confirmado", + "deployModal_cancel": "Cancel", + "deployModal_deploy": "Implantar", + "deployModal_targetEnvironmentNotFound": "Ambiente de destino não encontrado", + "deployModal_confirmCredentialOverwrite": "Confirme a substituição de credenciais antes de implantar", + "deployModal_deploySuccess": "Implementado com sucesso {name} no ambiente de destino", + "deployModal_deployFailed": "Falha na implantação {singularLabel}", + "deployModal_selectFieldValidation": "Por favor, selecione {label}", + "deployModal_selectFieldPlaceholder": "Selecionar {label}", + "deployModal_inputFieldValidation": "Introduzir {label}", + "deployModal_inputFieldPlaceholder": "Introduzir {label}", + "contactLowcoder_title": "Contactar a equipa Lowcoder", + "contactLowcoder_environmentLabel": "Ambiente:", + "contactLowcoder_environmentIdLabel": "ID do ambiente:", + "contactLowcoder_deploymentIdLabel": "ID de implantação:", + "contactLowcoder_loading": "Carregando...", + "contactLowcoder_notAvailable": "Não disponível", + "contactLowcoder_unnamedEnvironment": "Ambiente sem nome", + "contactLowcoder_fetchingDeploymentInfo": "Obtenção de informações de implantação...", + "contactLowcoder_unableToLoadContactForm": "Não é possível carregar o formulário de contacto", + "contactLowcoder_apiConfigurationError": "URL do serviço API do ambiente ou chave API não configurada", + "contactLowcoder_failedToFetchDeploymentId": "Falha ao obter o ID do desenvolvimento", + "contactLowcoder_ensureProperConfiguration": "Certifique-se de que o ambiente está corretamente configurado para contactar o suporte.", + "credentialConfirmations_firstConfirmation_title": "Aviso de substituição de credenciais", + "credentialConfirmations_firstConfirmation_message": "Esta ação irá substituir as credenciais existentes no ambiente de destino.", + "credentialConfirmations_firstConfirmation_description": "Trata-se de uma operação grave que pode afetar outras aplicações e utilizadores.", + "credentialConfirmations_firstConfirmation_question": "Tens a certeza de que queres continuar?", + "credentialConfirmations_firstConfirmation_continueButton": "Continuar", + "credentialConfirmations_firstConfirmation_cancelButton": "Cancel", + "credentialConfirmations_secondConfirmation_title": "Confirmação final necessária", + "credentialConfirmations_secondConfirmation_message": "Aviso final: Substituição de credenciais", + "credentialConfirmations_secondConfirmation_description": "Está prestes a substituir as credenciais no ambiente de destino. Esta ação não pode ser desfeita e pode quebrar as integrações existentes.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Por favor, confirme mais uma vez.", + "credentialConfirmations_secondConfirmation_finalQuestion": "Tem a certeza absoluta de que pretende substituir as credenciais?", + "credentialConfirmations_secondConfirmation_confirmButton": "Sim, Substituir Credenciais", + "credentialConfirmations_secondConfirmation_cancelButton": "Cancel", + "config_singularLabels_app": "Aplicação", + "config_singularLabels_dataSource": "Fonte de dados", + "config_singularLabels_query": "Consulta", + "config_singularLabels_workspace": "Espaço de trabalho", + "config_fields_updateDependenciesIfNeeded": "Atualizar dependências, se necessário", + "config_fields_publishOnTarget": "Publicar no destino", + "config_fields_publicToAll": "Público Para todos", + "config_fields_publicToMarketplace": "Do público para o mercado", + "config_fields_overwriteCredentials": "Substituir credenciais", + "services_environments_missingEnvironmentId": "ID de ambiente em falta", + "services_environments_failedToUpdateEnvironment": "Falha na atualização do ambiente", + "services_environments_environmentCreatedSuccessfully": "Ambiente criado com sucesso", + "services_environments_failedToCreateEnvironment": "Falha ao criar ambiente", + "services_environments_failedToFetchEnvironments": "Falha na busca de ambientes", + "services_environments_failedToFetchEnvironment": "Falha ao buscar o ambiente", + "services_environments_environmentIdRequired": "É necessária uma ID de ambiente", + "services_environments_apiKeyRequiredForWorkspaces": "É necessária uma chave API para obter espaços de trabalho", + "services_environments_apiServiceUrlRequiredForWorkspaces": "O URL do serviço API é necessário para obter espaços de trabalho", + "services_environments_failedToFetchWorkspaces": "Falha na busca de espaços de trabalho", + "services_environments_apiKeyRequiredForUserGroups": "É necessária uma chave API para obter grupos de utilizadores", + "services_environments_apiServiceUrlRequiredForUserGroups": "O URL do serviço API é necessário para ir buscar grupos de utilizadores", + "services_environments_failedToFetchUserGroups": "Falha na procura de grupos de utilizadores", + "services_environments_workspaceIdRequired": "É necessário o ID do espaço de trabalho", + "services_environments_apiKeyRequiredForApps": "É necessária uma chave API para obter aplicações", + "services_environments_apiServiceUrlRequiredForApps": "O URL do serviço API é necessário para ir buscar aplicações", + "services_environments_failedToFetchWorkspaceApps": "Falha ao obter aplicações do espaço de trabalho", + "services_environments_apiKeyRequiredForDataSources": "É necessária uma chave API para obter fontes de dados", + "services_environments_apiServiceUrlRequiredForDataSources": "O URL do serviço API é necessário para ir buscar fontes de dados", + "services_environments_failedToFetchWorkspaceDataSources": "Falha na obtenção de fontes de dados do espaço de trabalho", + "services_environments_apiKeyRequiredForQueries": "É necessária uma chave API para obter consultas", + "services_environments_apiServiceUrlRequiredForQueries": "O URL do serviço API é necessário para obter consultas", + "services_environments_failedToFetchWorkspaceQueries": "Falha ao obter consultas de espaços de trabalho", + "services_environments_apiServiceUrlNotConfigured": "URL do serviço API não configurado", + "services_environments_licenseCheckFailed": "O controlo da carta de condução falhou", + "services_environments_apiKeyRequiredForDeploymentId": "É necessária uma chave API para obter a ID de implantação", + "services_environments_failedToFetchDeploymentId": "Falha ao obter o ID do desenvolvimento", + "services_enterprise_missingEnvironmentId": "ID de ambiente em falta", + "services_enterprise_failedToFetchManagedWorkspaces": "Falha ao obter espaços de trabalho geridos", + "services_enterprise_missingRequiredParamsToConnectOrg": "Faltam os parâmetros necessários para ligar o espaço de trabalho", + "services_enterprise_failedToConnectOrg": "Falha ao ligar o espaço de trabalho", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "GID do espaço de trabalho em falta para desconectar o espaço de trabalho", + "services_enterprise_failedToUnconnectOrg": "Falha ao desconectar o espaço de trabalho", + "services_enterprise_failedToConnectApp": "Falha ao ligar a aplicação", + "services_enterprise_failedToUnconnectApp": "Falha ao desconectar a aplicação", + "services_enterprise_failedToFetchDataSources": "Falha na obtenção de fontes de dados", + "services_enterprise_failedToDeployDataSource": "Falha ao implantar a fonte de dados", + "services_enterprise_failedToDisconnectManagedDataSource": "Falha ao desligar a fonte de dados gerida", + "services_enterprise_environmentIdRequired": "É necessária uma ID de ambiente", + "services_enterprise_failedToFetchQueries": "Falha na pesquisa de consultas", + "services_enterprise_environmentIdAndQueryGidRequired": "São necessários o ID de ambiente e o GID de consulta", + "services_enterprise_failedToDeployQuery": "Falha na implantação da consulta", + "services_enterprise_queryGidRequired": "É necessário o GID de consulta", + "services_enterprise_failedToDisconnectQuery": "Falha ao desligar a consulta", + "services_apps_failedToFetchApps": "Falha na obtenção de aplicações", + "services_apps_failedToDeployApp": "Falha ao implementar a aplicação", + "services_datasources_workspaceIdRequired": "É necessário o ID do espaço de trabalho", + "services_datasources_apiKeyRequiredToFetchDataSources": "É necessária uma chave API para obter fontes de dados", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "O URL do serviço API é necessário para ir buscar fontes de dados", + "services_datasources_failedToFetchDataSources": "Falha na obtenção de fontes de dados", + "services_datasources_failedToDeployDataSource": "Falha ao implantar a fonte de dados", + "services_workspace_failedToFetchWorkspaces": "Falha na busca de espaços de trabalho", + "services_workspace_failedToDeployWorkspace": "Falha ao implantar o espaço de trabalho", + "services_managedObjects_missingRequiredParameters": "Parâmetros necessários em falta", + "services_managedObjects_failedToCheckManagedStatus": "Falha na verificação do estado gerido", + "services_managedObjects_failedToSetAsManaged": "Falha ao definir {{objType}} como gerido", + "services_managedObjects_failedToRemoveFromManaged": "Falha ao remover {{objType}} do managed", + "services_managedObjects_missingEnvironmentId": "ID de ambiente em falta", + "services_managedObjects_failedToFetchManagedObjects": "Falha na obtenção de objectos geridos", + "services_managedObjects_failedToFetchManagedObject": "Falha ao obter o objeto gerido", + "services_managedObjects_managedObjectNotFound": "Objeto gerido não encontrado para objGid: {{objGid}}", + "services_license_apiServiceUrlRequired": "É necessário o URL do serviço API", + "services_license_licenseInformationUnavailable": "Informações sobre a licença não disponíveis", + "services_license_licenseCheckTookTooLong": "O controlo da carta de condução demorou demasiado tempo", + "services_license_licenseServiceNotAvailable": "Serviço de licença não disponível", + "services_license_authenticationRequired": "Autenticação necessária - verifique a chave da API", + "services_license_licenseServiceTemporarilyUnavailable": "Serviço de licenças temporariamente indisponível", + "services_license_remainingAPICalls": "{{remaining}} restante ({{used}}/{{total}} utilizado, {{percentage}}%)", + }, + "subscription": { + ...en.subscription, + + "details": "Detalhes da subscrição", + "productDetails": "Detalhes do produto", + "productName": "Nome do produto", + "productDescription": "Descrição do produto", + "productPrice": "Preço do produto", + "subscriptionDetails": "Detalhes da subscrição", + "status": "Estado", + "startDate": "Data de início", + "currentPeriodEnd": "Fim do período atual", + "customerId": "ID do cliente", + "subscriptionItems": "Itens de assinatura", + "itemId": "Item ID", + "plan": "Plano", + "quantity": "Quantidade", + "product": "Produto", + "invoices": "Facturas", + "invoiceNumber": "Número da fatura", + "date": "Data", + "amount": "Montante", + "link": "Ligação a", + "viewInvoice": "Ver fatura", + "downloadPDF": "Descarregar PDF", + "billingReason": "Motivo da faturação", + "subscriptionCycle": "Assinatura mensal", + "customer": "Cliente", + "links": "Ligações", + "paid": "Pago", + "unpaid": "Não pago", + "noInvoices": "Não há facturas disponíveis", + "costVolumeDevelopment": "Desenvolvimento de custo/volume", + "noUsageRecords": "Não há registos de utilização disponíveis", + "itemDescription": "Descrição do artigo", + "periodStart": "Início do período", + "periodEnd": "Fim do período", + "billingReason.subscription_cycle": "Ciclo de subscrição", + "billingReason.subscription_create": "Criação de assinaturas", + "billingReason.manual": "Faturação manual", + "billingReason.upcoming": "Próxima faturação", + "billingReason.subscription_threshold": "Limiar de subscrição", + "billingReason.subscription_update": "Atualização da subscrição", + "backToSubscriptions": "Voltar a Assinaturas", + "manageSubscription": "Gerir as suas subscrições", + "subscriptionHelp": "Ajuda da subscrição", + "subscriptionHelpDescription": "Se tiver alguma dúvida, contacte-nos. Teremos todo o gosto em ajudá-lo. service@lowcoder.cloud", + "success": "Sucesso do pagamento e da subscrição", + "successTitle": "Obrigado por se juntar à família Lowcoder!", + "successThankYou": "Estamos muito contentes por o ter a bordo! A sua confiança na Lowcoder significa tudo para nós, e estamos empenhados em proporcionar uma experiência excecional desde o primeiro dia.\n\nNa Lowcoder, não é apenas um cliente, mas faz parte de uma comunidade que impulsiona a inovação e o crescimento. A nossa missão é ajudá-lo a atingir os seus objectivos com facilidade, quer isso signifique resolver desafios rapidamente, criar soluções inovadoras ou estar presente sempre que precisar de apoio.\n\nEis o que pode esperar:\n\n- Suporte de primeira linha: A nossa equipa está pronta para o ajudar em cada passo.\n- Inovação contínua: Estamos sempre a melhorar para lhe oferecer as melhores ferramentas e funcionalidades.\n- Uma parceria para o sucesso: O seu sucesso é a nossa prioridade.\n\nObrigado por nos inspirar a ultrapassar os limites e a procurar a excelência todos os dias. Mal podemos esperar para ver o que vamos construir juntos.\n\nBem-vindo a bordo! Vamos fazer com que coisas extraordinárias aconteçam.", + "successLowcoderTeam": "A equipa Lowcoder", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "Erro ao obter detalhes do produto.", + "fetchSubscriptionDetails": "Erro ao obter detalhes da subscrição.", + "fetchInvoices": "Erro na obtenção de facturas.", + }, + "auditLog": { + ...en.auditLog, + + "title": "Detalhe do registo de auditoria", + "geoLocation": "Localização geográfica", + "browserData": "Metadados do navegador/sistema", + "browser": "Navegador", + "OS": "SO", + "device": "Dispositivo", + "deviceType": "Tipo de dispositivo", + "engine": "Motor", + "webview": "Visualização na Web", + "eventDetail": "Detalhe do evento", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Administrador", + "superAdmin": "Superadministrador", + "adminGroupRoleInfo": "O administrador pode gerenciar membros do grupo e recursos", + "adminOrgRoleInfo": "Os administradores possuem todos os recursos e podem gerenciar grupos.", + "member": "Membro", + "memberGroupRoleInfo": "O membro pode visualizar membros do grupo", + "memberOrgRoleInfo": "Os membros só podem usar ou acessar recursos aos quais têm acesso.", + "title": "Membros", + "createGroup": "Criar Grupo", + "newGroupPrefix": "Novo Grupo ", + "allMembers": "Todos os Membros", + "deleteModalTitle": "Excluir Este Grupo", + "deleteModalContent": "O grupo excluído não pode ser restaurado. Você tem certeza de que deseja excluir o grupo?", + "addMember": "Adicionar Membros", + "nameColumn": "Nome do Usuário", + "joinTimeColumn": "Tempo de Entrada", + "actionColumn": "Operação", + "roleColumn": "Função", + "exitGroup": "Sair do Grupo", + "moveOutGroup": "Remover do Grupo", + "inviteUser": "Convidar Membros", + "exitOrg": "Sair", + "exitOrgDesc": "Você tem certeza de que deseja sair deste espaço de trabalho.", + "moveOutOrg": "Remover", + "moveOutOrgDescSaasMode": "Você tem certeza de que deseja remover o usuário {name} deste espaço de trabalho?", + "moveOutOrgDesc": "Você tem certeza de que deseja remover o usuário {name}? Esta ação não pode ser recuperada.", + "devGroupTip": "Os membros do grupo de desenvolvedores têm privilégios para criar aplicativos e fontes de dados.", + "lastAdminQuit": "O último administrador não pode sair.", + "organizationNotExist": "O espaço de trabalho atual não existe", + "inviteUserHelp": "Você pode copiar o link de convite para enviar ao usuário", + "inviteUserLabel": "Link de Convite:", + "inviteCopyLink": "Copiar Link", + "inviteText": "{userName} convida você a ingressar no espaço de trabalho \"{organization}\", clique no link para ingressar: {inviteLink}", + "inviteByEmailHelp": "Pode introduzir um ou mais endereços de correio eletrónico para enviar ligações de convite", + "inviteByEmailLabel": "Introduzir e-mails:", + "inviteByEmailButton": "Enviar convites", + "inviteByEmailSuccess": "Os convites foram enviados com sucesso!", + "inviteByEmailError": "Algo correu mal durante o envio dos convites. Por favor, tente novamente.", + "noValidEmails": "Não foram encontradas mensagens de correio eletrónico válidas", + "groupName": "Nome do Grupo", + "createTime": "Tempo de Criação", + "manageBtn": "Gerenciar", + "userDetail": "Detalhe", + "syncDeleteTip": "Este grupo foi excluído da fonte de catálogo de endereços", + "syncGroupTip": "Este grupo é um grupo de sincronização do catálogo de endereços e não pode ser editado", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Novo Espaço de Trabalho (Organização)", + "title": "Espaço de Trabalho", + "createOrg": "Criar Espaço de Trabalho (Organização)", + "deleteModalTitle": "Tem certeza de que deseja excluir este espaço de trabalho?", + "deleteModalContent": "Você está prestes a excluir este espaço de trabalho {permanentlyDelete}. Uma vez excluído, o espaço de trabalho {notRestored}.", + "permanentlyDelete": "Permanentemente", + "notRestored": "Não pode ser restaurado", + "deleteModalLabel": "Por favor, digite o nome do espaço de trabalho {name} para confirmar a operação:", + "deleteModalTip": "Por favor, digite o nome do espaço de trabalho", + "deleteModalErr": "O nome do espaço de trabalho está incorreto", + "deleteModalBtn": "Excluir", + "editOrgTitle": "Editar Informações do Espaço de Trabalho", + "orgNameLabel": "Nome do Espaço de Trabalho:", + "orgNameCheckMsg": "O nome do espaço de trabalho não pode estar vazio", + "orgLogo": "Logo do Espaço de Trabalho:", + "logoModify": "Modificar Imagem", + "inviteSuccessMessage": "Junte-se ao Espaço de Trabalho com Sucesso", + "inviteFailMessage": "Falha ao Entrar no Espaço de Trabalho", + "uploadErrorMessage": "Erro ao Carregar", + "orgName": "Nome do Espaço de Trabalho", + }, + "freeLimit": "Teste Gratuito", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Alternar Aba", + "switchTabDesc": "Acionado ao Alternar Abas", + "tab": "Abas", + "atLeastOneTabError": "O Contêiner de Abas Deve Manter Pelo Menos Uma Aba", + "selectedTabKeyDesc": "Aba Atualmente Selecionada", + "iconPosition": "Posição do Ícone", + "placement": "Posicionamento das Abas", + "showTabs": "Mostrar Abas", + "gutter": "Espaçamento", + "gutterTooltip": "A distância entre as abas em px", + "tabsCentered": "Abas Centralizadas", + "destroyInactiveTab": "Destruir TabPane inativo", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Arraste Componentes do Painel à Direita ou", + "openDialogButton": "Gerar um Formulário a partir de uma de suas Fontes de Dados", + "resetAfterSubmit": "Redefinir Após Envio Bem-Sucedido", + "initialData": "Dados Iniciais", + "disableSubmit": "Desativar Envio", + "success": "Formulário Gerado com Sucesso", + "selectCompType": "Selecione o Tipo de Componente", + "dataSource": "Fonte de Dados: ", + "invalidFormMessage": "Mensagem personalizada de formulário inválido", + "selectSource": "Selecionar Fonte", + "table": "Tabela: ", + "selectTable": "Selecionar Tabela", + "columnName": "Nome da Coluna", + "dataType": "Tipo de Dados", + "compType": "Tipo de Componente", + "required": "Obrigatório", + "generateForm": "Gerar Formulário", + "compSelectionError": "Tipo de Coluna Não Configurado", + "compTypeNameError": "Não foi Possível Obter o Nome do Tipo de Componente", + "noDataSourceSelected": "Nenhuma Fonte de Dados Selecionada", + "noTableSelected": "Nenhuma Tabela Selecionada", + "noColumn": "Nenhuma Coluna", + "noColumnSelected": "Nenhuma Coluna Selecionada", + "noDataSourceFound": "Nenhuma Fonte de Dados Suportada Encontrada. Crie uma Nova Fonte de Dados", + "noTableFound": "Nenhuma Tabela Foi Encontrada nesta Fonte de Dados, Por Favor, Selecione Outra Fonte de Dados", + "noColumnFound": "Nenhuma Coluna Suportada Foi Encontrada nesta Tabela. Por Favor, Selecione Outra Tabela", + "formTitle": "Título do Formulário", + "name": "Nome", + "nameTooltip": "O Nome do Atributo nos Dados do Formulário, Quando Deixado em Branco, Padrão para o Nome do Componente", + "notSupportMethod": "Métodos Não Suportados: ", + "notValidForm": "O Formulário Não é Válido", + "resetDesc": "Redefinir Dados do Formulário para o Valor Padrão", + "clearDesc": "Limpar Dados do Formulário", + "setDataDesc": "Definir Dados do Formulário", + "valuesLengthError": "Erro no Número de Parâmetros", + "valueTypeError": "Erro no Tipo de Parâmetro", + "dataDesc": "Dados Atuais do Formulário", + "loadingDesc": "O Formulário Está Carregando?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Aberto", + "openDesc": "Acionado quando a caixa de diálogo modal é aberta", + "close": "Fechar", + "closeDesc": "Acionado Quando a Caixa de Diálogo Modal é Fechada", + "openModalDesc": "Abrir a Caixa de Diálogo", + "closeModalDesc": "Fechar a Caixa de Diálogo", + "visibleDesc": "Está Visível? Se Verdadeiro, a Caixa de Diálogo Atual Será Exibida", + "title": "Título da gaveta", + "titleAlign": "Alinhamento do título", + "modalHeight": "Altura da Modal", + "modalHeightTooltip": "Pixels, Exemplo: 222", + "modalWidth": "Largura da Modal", + "modalWidthTooltip": "Número ou Porcentagem, Exemplo: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Contagem de Linhas", + "noOfRowsTooltip": "Número de Linhas na Lista - Normalmente Configurado para uma Variável (por exemplo, '{{query1.data.length}}') para Apresentar Resultados da Consulta", + "noOfColumns": "Contagem de Colunas", + "itemIndexName": "Nome do Índice do Item de Dados", + "itemIndexNameDesc": "O Nome da Variável Referente ao Índice do Item, Padrão como {default}", + "itemDataName": "Nome do Objeto de Dados do Item", + "itemDataNameDesc": "O Nome da Variável Referente ao Objeto de Dados do Item, Padrão como {default}", + "itemsDesc": "Expondo Dados dos Componentes na Lista", + "dataDesc": "Os Dados JSON Usados na Lista Atual", + "dataTooltip": "Se Você Apenas Definir um Número, Este Campo Será Considerado como Contagem de Linhas, e os Dados Serão Considerados como Vazios.", + "enableSorting": "Permitir a ordenação", + }, + "navigation": { + ...en.navigation, + + "addText": "Adicionar Item de Submenu", + "logoURL": "URL do Logotipo da Navegação", + "horizontalAlignment": "Alinhamento Horizontal", + "logoURLDesc": "Você pode exibir um Logotipo no lado esquerdo inserindo um Valor de URI ou String Base64 como data:image/png;base64,AAA... CCC", + "itemsDesc": "Itens do Menu de Navegação Hierárquica", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Submenu {número}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Ativo", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "O URL de Origem para o Conteúdo do IFrame. Certifique-se de que o URL é HTTPS ou localhost. Além disso, certifique-se de que o URL não está bloqueado pela Política de Segurança de Conteúdo (CSP) do navegador. O cabeçalho 'X-Frame-Options' não deve ser definido como 'DENY' ou 'SAMEORIGIN'.", + "allowDownload": "Permitir Downloads", + "allowSubmitForm": "Permitir Envio de Formulário", + "allowMicrophone": "Permitir Microfone", + "allowCamera": "Permitir Câmera", + "allowPopup": "Permitir Pop-ups", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Valor Booleano Padrão", + "open": "Ligado", + "close": "Desligado", + "openDesc": "Acionado Quando o Interruptor é Ligado", + "closeDesc": "Acionado Quando o Interruptor é Desligado", + "valueDesc": "Status Atual do Interruptor", + }, + "signature": { + ...en.signature, + + "tips": "Texto de Dica", + "signHere": "Assine Aqui", + "showUndo": "Mostrar Desfazer", + "showClear": "Mostrar Limpar", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Todos os Itens de Dados Armazenados Atualmente", + "setItemDesc": "Adicionar um Item", + "removeItemDesc": "Remover um Item", + "clearItemDesc": "Limpar Todos os Itens", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "Abrir URL", + "openApp": "Abrir Aplicativo", + "copyToClipboard": "Copiar para a Área de Transferência", + "downloadFile": "Baixar Arquivo", + "logoutUser": "Terminar sessão do utilizador", + "resetPassword": "Redefinir a palavra-passe", + }, + "messageComp": { + ...en.messageComp, + + "info": "Enviar uma Notificação", + "loading": "Enviar uma Notificação de Carregamento", + "success": "Enviar uma Notificação de Sucesso", + "warn": "Enviar uma Notificação de Aviso", + "error": "Enviar uma Notificação de Erro", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "Fechar uma Notificação", + "info": "Enviar uma Notificação", + "loading": "Enviar uma Notificação de Carregamento", + "success": "Enviar uma Notificação de Sucesso", + "warn": "Enviar uma Notificação de Aviso", + "error": "Enviar uma Notificação de Erro", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Alterar Tema", + }, + "transformer": { + ...en.transformer, + + "preview": "Pré-Visualização", + "docLink": "Saiba Mais Sobre Transformadores...", + "previewSuccess": "Pré-Visualização Bem-Sucedida", + "previewFail": "Falha na Pré-Visualização", + "deleteMessage": "Transformador Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", + "documentationText": "Os transformadores são projetados para transformação de dados e reutilização do seu código JavaScript multi-linha. Use transformadores para adaptar dados de consultas ou componentes às necessidades de seu aplicativo local. Ao contrário da consulta JavaScript, o transformador é projetado para realizar operações somente de leitura, o que significa que você não pode acionar uma consulta ou atualizar um estado temporário dentro de um transformador.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Valor Inicial", + "valueTooltip": "O Valor Inicial Armazenado no Estado Temporário Pode Ser Qualquer Valor JSON Válido.", + "docLink": "Saiba Mais Sobre Estados Temporários...", + "pathTypeError": "O Caminho Deve Ser uma String ou um Array de Valores", + "unStructuredError": "Dados Não Estruturados {prev} Não Podem Ser Atualizados por {path}", + "valueDesc": "Valor do Estado Temporário", + "deleteMessage": "O Estado Temporário Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", + "documentationText": "Os estados temporários são um recurso poderoso usado para gerenciar variáveis complexas que atualizam dinamicamente o estado dos componentes em seu aplicativo. Esses estados funcionam como armazenamento intermediário ou transitório para dados que podem mudar ao longo do tempo devido a interações do usuário ou outros processos.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Dados", + "dataDesc": "Dados do Data Responder Atual", + "dataTooltip": "Quando Estes Dados São Alterados, Irão Acionar Ações Subsequentes.", + "docLink": "Saiba Mais Sobre os Data Responders...", + "deleteMessage": "O Data Responder Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", + "documentationText": "Ao desenvolver um aplicativo, você pode atribuir eventos a componentes para monitorar alterações em dados específicos. Por exemplo, um componente de Tabela pode ter eventos como \"Alteração de seleção de linha\", \"Alteração de filtro\", \"Alteração de ordenação\" e \"Alteração de página\" para rastrear alterações na propriedade selectedRow. No entanto, para alterações em estados temporários, transformadores ou resultados de consulta, onde eventos padrão não estão disponíveis, os Data Responders são utilizados. Eles permitem detectar e reagir a quaisquer modificações de dados.", + }, + "theme": { + ...en.theme, + + "title": "Temas", + "createTheme": "Criar Tema", + "themeName": "Nome do Tema:", + "themeNamePlaceholder": "Por favor, insira um nome para o tema", + "defaultThemeTip": "Tema Padrão:", + "createdThemeTip": "O Tema Que Você Criou:", + "option": "Opção {index}", + "input": "Entrada", + "confirm": "Ok", + "emptyTheme": "Nenhum Tema Disponível", + "click": "", + "toCreate": "", + "nameColumn": "Nome", + "defaultTip": "Padrão", + "updateTimeColumn": "Tempo de Atualização", + "edit": "Editar", + "cancelDefaultTheme": "Cancelar Tema Padrão", + "setDefaultTheme": "Definir como Tema Padrão", + "copyTheme": "Duplicar Tema", + "setSuccessMsg": "Configuração Bem-Sucedida", + "cancelSuccessMsg": "Cancelamento Bem-Sucedido", + "deleteSuccessMsg": "Exclusão Bem-Sucedida", + "checkDuplicateNames": "O Nome do Tema Já Existe, Por Favor, Reinsira-o", + "copySuffix": " Cópia", + "saveSuccessMsg": "Salvo com Sucesso", + "leaveTipTitle": "Dicas", + "leaveTipContent": "Você Ainda Não Salvou, Confirmar Saída?", + "leaveTipOkText": "Sair", + "goList": "Voltar para a Lista", + "saveBtn": "Salvar", + "mainColor": "Cores Principais", + "text": "Cores do Texto", + "layout": "Configurações de layout", + "fonts": "Definições do tipo de letra", + "components": "Modelos de componentes", + "charts": "Definição de eCharts", + "defaultTheme": "Padrão", + "yellow": "Amarelo", + "green": "Verde", + "previewTitle": "Pré-Visualização do Tema\nExemplo de Componentes que Utilizam as Cores do Seu Tema", + "dateColumn": "Data", + "emailColumn": "Correio eletrónico", + "phoneColumn": "Telefone", + "subTitle": "Título", + "linkLabel": "Ligação a", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progresso", + "sliderLabel": "Controle Deslizante", + "radioLabel": "Botão de Opção", + "checkboxLabel": "Caixa de Seleção", + "buttonLabel": "Botão de Formulário", + "switch": "Interruptor", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "balão.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Pré-Visualização do Estilo do Gráfico", + "chartSpending": "Gastos", + "chartBudget": "Orçamento", + "chartAdmin": "Administração", + "chartFinance": "Finanças", + "chartSales": "Vendas", + "chartFunnel": "Gráfico de Funil", + "chartShow": "Mostrar", + "chartClick": "Clique", + "chartVisit": "Visita", + "chartQuery": "Consulta", + "chartBuy": "Comprar", + "canvas": "Definições do ecrã", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Cor da Marca", + "primaryDesc": "Cor primária padrão usada pela maioria dos componentes", + "textDark": "Cor do Texto Escuro", + "textDarkDesc": "Usado quando a cor de fundo é clara", + "textLight": "Cor do Texto Claro", + "textLightDesc": "Usado quando a cor de fundo é escura", + "canvas": "Cor do Fundo", + "canvasDesc": "Cor de fundo padrão do aplicativo", + "primarySurface": "Cor do Contêiner", + "primarySurfaceDesc": "Cor de fundo padrão para componentes como tabelas", + "borders": "Estilos de fronteira", + "spacing": "Estilos de espaçamento", + "font": "Estilos de letra", + "fonts": "Fontes", + "borderRadius": "Raio da Borda", + "borderRadiusDesc": "Raio da borda padrão usado pela maioria dos componentes", + "borderColor": "Cor da fronteira", + "borderColorDesc": "Cor do contorno predefinida utilizada pela maioria dos componentes", + "borderWidth": "Largura da margem", + "borderWidthDesc": "Largura do limite predefinida utilizada pela maioria dos componentes", + "borderStyle": "Estilo de fronteira", + "borderStyleDesc": "Estilo de contorno predefinido utilizado pela maioria dos componentes", + "fontFamily": "Família de letras", + "fontFamilyDesc": "Família de tipos de letra predefinida utilizada pela maioria dos componentes", + "chart": "Estilo do Gráfico", + "chartDesc": "Entrada para Echarts", + "echartsJson": "Tema JSON", + "margin": "Margem", + "marginDesc": "Margem padrão normalmente usada para a maioria dos componentes", + "padding": "Preenchimento", + "paddingDesc": "Preenchimento padrão normalmente usado para a maioria dos componentes", + "containerHeaderPadding": "Preenchimento do Cabeçalho", + "containerheaderpaddingDesc": "Preenchimento padrão do cabeçalho normalmente usado para a maioria dos componentes", + "gridColumns": "Colunas da Grade", + "gridColumnsDesc": "Número padrão de colunas normalmente usado para a maioria dos contêineres", + "loadingIndicators": "Indicadores de carga", + "showComponentLoadingIndicators": "Mostrar indicadores de carregamento quando o componente é carregado", + "showDataLoadingIndicators": "Mostrar indicadores de carregamento durante o carregamento dos dados", + "dataLoadingIndicator": "Indicador de carregamento de dados", + "background": "Estilos de fundo", + "gridSettings": "Definições da grelha", + "gridRowHeight": "Altura da linha da grelha", + "gridRowHeightDesc": "Altura de cada linha na grelha", + "gridRowCount": "Contagem de linhas da grelha", + "gridRowCountDesc": "Número máximo de linhas na grelha", + "gridPaddingX": "Preenchimento horizontal", + "gridPaddingXDesc": "Preenchimento horizontal da tela", + "gridPaddingY": "Acolchoamento vertical", + "gridPaddingYDesc": "Preenchimento vertical da tela", + "gridBgImage": "Imagem de fundo", + "gridBgImageDesc": "Imagem de fundo do ecrã", + "gridBgImageRepeat": "Repetição da imagem de fundo", + "gridBgImageRepeatDesc": "Repetição da imagem de fundo do ecrã", + "gridBgImageSize": "Tamanho da imagem de fundo", + "gridBgImageSizeDesc": "Tamanho da imagem de fundo do ecrã", + "gridBgImagePosition": "Posição da imagem de fundo", + "gridBgImagePositionDesc": "Posição da imagem de fundo do ecrã", + "gridBgImageOrigin": "Origem da imagem de fundo", + "gridBgImageOriginDesc": "Origem da imagem de fundo do ecrã", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugins", + "npmPluginTitle": "Plugins do npm", + "npmPluginDesc": "Configure os plugins do npm para todas as aplicações no espaço de trabalho atual.", + "npmPluginEmpty": "Nenhum plugin do npm foi adicionado.", + "npmPluginAddButton": "Adicionar um plugin do npm", + "saveSuccess": "Salvo com sucesso", + }, + "advanced": { + ...en.advanced, + + "title": "Avançado", + "defaultHomeTitle": "Página Inicial Padrão", + "defaultHomeHelp": "A Página Inicial é a aplicação que todos os não desenvolvedores verão por padrão quando fizerem login. Observação: certifique-se de que a aplicação selecionada seja acessível aos não desenvolvedores.", + "defaultHomePlaceholder": "Selecione a Página Inicial Padrão", + "saveBtn": "Salvar", + "preloadJSTitle": "Pré-carregar JavaScript", + "preloadJSHelp": "Configure código JavaScript pré-carregado para todas as aplicações no espaço de trabalho atual.", + "preloadCSSTitle": "Pré-carregar CSS", + "preloadCSSHelp": "Configure código CSS pré-carregado para todas as aplicações no espaço de trabalho atual.", + "preloadCSSApply": "Aplicar à Página Inicial do Espaço de Trabalho", + "preloadLibsTitle": "Biblioteca JavaScript", + "preloadLibsHelp": "Configure bibliotecas JavaScript pré-carregadas para todas as aplicações no espaço de trabalho atual. O sistema possui lodash, day.js, uuid, numbro integrados para uso direto. As bibliotecas JavaScript são carregadas antes que a aplicação seja inicializada, portanto, há um certo impacto no desempenho da aplicação.", + "preloadLibsEmpty": "Nenhuma biblioteca JavaScript foi adicionada", + "preloadLibsAddBtn": "Adicionar uma biblioteca", + "saveSuccess": "Salvo com sucesso", + "AuthOrgTitle": "Tela de Boas-Vindas do Espaço de Trabalho", + "AuthOrgDescrition": "A URL para os seus usuários entrarem no espaço de trabalho atual.", + "APIConsumption": "Consumo de API", + "APIConsumptionDescription": "Aqui você pode ver o consumo de API para todas as aplicações no espaço de trabalho atual.", + "overallAPIConsumption": "Consumo geral de API neste espaço de trabalho até o momento", + "lastMonthAPIConsumption": "Consumo de API do último mês, neste espaço de trabalho", + "npmRegistryTitle": "Registo NPM personalizado", + "npmRegistryHelp": "Configurar um registo NPM personalizado para permitir a obtenção de plugins a partir de um registo NPM privado.", + "showHeaderInPublicApps": "Mostrar cabeçalho em exibição pública", + "showHeaderInPublicAppsHelp": "Defina a visibilidade do cabeçalho em exibição pública para todos os aplicativos", + }, + "branding": { + ...en.branding, + + "title": "Configurações de Marca", + "general": "Definições gerais", + "selectWorkspace": "Selecionar espaço de trabalho", + "brandingName": "Nome da marca", + "brandingNamePlaceholder": "Introduzir o nome da marca", + "brandingDescription": "Descrição da marca", + "brandingDescriptionPlaceholder": "Introduzir a descrição da marca", + "logoSection": "Logotipos", + "logo": "Logotipo", + "logoHelp": "Envie o logotipo da sua empresa em formato SVG ou PNG.", + "logoUrlHelp": "Forneça o URL de uma imagem válida para o logótipo.", + "logoUrlPlaceholder": "URL da imagem do fornecedor para o logótipo", + "squareLogo": "Logotipo Quadrado", + "squareLogoHelp": "Envie uma versão quadrada do seu logotipo em formato SVG ou PNG.", + "squareLogoUrlHelp": "Forneça o URL de uma imagem válida para o logótipo quadrado.", + "squareLogoUrlPlaceholder": "Fornecer url para o logótipo quadrado.", + "colorFontSection": "Cores e Fontes", + "mainBrandingColor": "Cor Principal da Marca", + "mainBrandingColorHelp": "Selecione a cor principal para a sua marca.", + "editorHeaderColor": "Cor do Cabeçalho do Editor", + "editorHeaderColorHelp": "Selecione a cor do cabeçalho do editor.", + "adminSidebarColor": "Cor da Barra Lateral do Administrador", + "adminSidebarColorHelp": "Selecione a cor da barra lateral do administrador.", + "adminSidebarFontColor": "Cor do tipo de letra da barra lateral do administrador", + "adminSidebarFontColorHelp": "Escolha a cor do tipo de letra para a barra lateral do administrador.", + "adminSidebarActiveBgColor": "Cor do fundo do item selecionado na barra lateral do administrador", + "adminSidebarActiveBgColorHelp": "Escolha a cor de fundo do item selecionado para a barra lateral do administrador.", + "adminSidebarActiveFontColor": "Cor do tipo de letra do item selecionado da barra lateral do administrador", + "adminSidebarActiveFontColorHelp": "Escolha a cor da fonte do item selecionado para a barra lateral do administrador.", + "editorSidebarColor": "Cor da Barra Lateral do Editor", + "editorSidebarColorHelp": "Selecione a cor da barra lateral do editor.", + "editorSidebarFontColor": "Cor do tipo de letra da barra lateral do editor", + "editorSidebarFontColorHelp": "Escolha a cor do tipo de letra para a barra lateral do editor.", + "editorSidebarActiveBgColor": "Cor de fundo do item selecionado na barra lateral do editor", + "editorSidebarActiveBgColorHelp": "Escolha a cor de fundo do item selecionado para a barra lateral do editor.", + "editorSidebarActiveFontColor": "Cor do tipo de letra do item selecionado da barra lateral do editor", + "editorSidebarActiveFontColorHelp": "Escolha a cor do tipo de letra do item selecionado para a barra lateral do editor.", + "font": "Fonte", + "fontHelp": "Selecione uma fonte do Google Fonts para o seu aplicativo.", + "textSection": "Textos e Páginas", + "errorPage": "Texto da Página de Erro", + "errorPageHelp": "Insira o texto exibido na página de erro.", + "signUpPage": "Texto da Página de Cadastro", + "signUpPageHelp": "Insira o texto exibido na página de cadastro.", + "loggedOutPage": "Texto da Página de Logout", + "loggedOutPageHelp": "Insira o texto exibido na página de logout.", + "standardDescription": "Descrição Padrão", + "standardDescriptionHelp": "Insira a descrição padrão para as informações meta de SEO.", + "standardTitle": "Título Padrão", + "standardTitleHelp": "Insira o título padrão para as informações meta de SEO.", + "showDocumentation": "Exibir Documentação", + "submitIssue": "Permitir Enviar Problema", + "whatsNew": "Ativar \"Novidades\"", + "saveButton": "Salvar Configurações", + "errorPageImage": "Envie uma imagem para a página de erro no formato SVG ou PNG.", + "errorPageImageUrl": "URL da imagem para a página de erro", + "errorPageImageUrlPlaceholder": "URL da imagem do fornecedor para a página de erro", + "errorPageImageUrlHelp": "Fornecer um url de imagem válido para mostrar na página de erro.", + "signUpPageImage": "Envie uma imagem para a página de cadastro no formato SVG ou PNG.", + "signUpPageImageUrl": "URL da imagem para a página de registo", + "signUpPageImageUrlPlaceholder": "URL da imagem do fornecedor para a página de registo", + "signUpPageImageUrlHelp": "Fornecer um url de imagem válido para mostrar na página de registo.", + "loggedOutPageImage": "Envie uma imagem para a página de saída no formato SVG ou PNG.", + "showDocumentationSection": "Definições da ligação de documentação", + "showWhatsNewSection": "O que há de novo Definições de ligação", + "documentationLink": "Link da documentação", + "documentationLinkPlaceholder": "Insira o URL da sua documentação...", + "documentationLinkHelp": "Forneça um URL válido que os usuários possam visitar para acessar a documentação.", + "whatsNewSection": "Configurações de documentação", + "whatsNewLink": "Link da documentação", + "whatsNewLinkPlaceholder": "Insira o URL da sua documentação...", + "whatsNewLinkHelp": "Forneça um URL válido que os usuários possam visitar para acessar as novidades.", + "deleteBranding": "Eliminar a marca", + "deleteBrandingContent": "Tem a certeza de que pretende apagar a marca \"{orgName}\"?", + "fetchBrandingError": "Algo correu mal durante a obtenção dos detalhes da marca. Por favor, tente novamente.", + "upload": "Carregar", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Falha ao Conectar ao Servidor, Por Favor, Verifique Sua Conexão de Rede", + "200": "Sucesso", + "201": "Criado", + "204": "Sem Conteúdo", + "400": "Solicitação Inválida", + "401": "Autenticação Falhou, Por Favor, Faça Login Novamente", + "403": "Sem Permissão, Por Favor, Contate o Administrador para Autorização", + "404": "Não Encontrado", + "500": "Serviço Ocupado, Por Favor, Tente Novamente Mais Tarde", + "timeout": "Tempo Limite da Solicitação", + }, + "share": { + ...en.share, + + "title": "Compartilhar", + "viewer": "Visualizador", + "editor": "Editor", + "owner": "Proprietário", + "datasourceViewer": "Pode Usar", + "datasourceOwner": "Pode Gerenciar", + }, + "debug": { + ...en.debug, + + "title": "Título", + "switch": "Alternar Componente: ", + }, + "module": { + ...en.module, + + "folderNotEmpty": "A pasta não está vazia", + "emptyText": "Sem Dados", + "docLink": "Saiba Mais Sobre Módulos...", + "documentationText": "Módulos são Aplicações completas, que podem ser incluídas e repetidas em outras Aplicações e funcionam como um único componente. Como os módulos podem ser incorporados, eles precisam ser capazes de interagir com suas aplicações ou sites externos. Essas quatro configurações ajudam a suportar a comunicação com um Módulo.", + "circularReference": "Referência Circular, o Módulo/Aplicação Atual Não Pode Ser Usado!", + "emptyTestInput": "O Módulo Atual Não Tem Entrada para Testar", + "emptyTestMethod": "O Módulo Atual Não Possui Método para Testar", + "name": "Nome", + "input": "Entrada", + "params": "Parâmetros", + "emptyParams": "Nenhum Parâmetro Foi Adicionado", + "emptyInput": "Nenhuma Entrada Foi Adicionada", + "emptyMethod": "Nenhum Método Foi Adicionado", + "emptyOutput": "Nenhuma Saída Foi Adicionada", + "data": "Dados", + "string": "Texto", + "number": "Número", + "array": "Arranjo", + "boolean": "Booleano", + "query": "Consulta", + "autoScaleCompHeight": "A Altura do Componente se Ajusta ao Contêiner", + "excuteMethod": "Executar Método {name}", + "method": "Método", + "action": "Ação", + "output": "Saída", + "nameExists": "O Nome {name} Já Existe", + "eventTriggered": "Evento {name} Acionado", + "globalPromptWhenEventTriggered": "Exibe um Alerta Global Quando um Evento é Acionado", + "emptyEventTest": "O Módulo Atual Não Possui Eventos para Testar", + "emptyEvent": "Nenhum Evento Foi Adicionado", + "event": "Evento", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "O Valor de Retorno é uma Função.", + "consume": "___SERVIDOR DE LUGAR0___", + "JSON": "Mostrar JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Criando...", + "created": "Criar {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Falha na Autenticação do Usuário, Por Favor Faça Login Novamente", + "verifyAccount": "Necessário Verificar a Conta", + "functionNotSupported": "A Versão Atual Não Suporta Esta Função. Por Favor, Entre em Contato com a Equipe de Negócios da Lowcoder para Atualizar sua Conta", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Falha ao Criar o Componente {comp}", + "notHandledError": "Erro Não Tratado no Método {method}", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Barra de Navegação", + "chooseApp": "Escolher Aplicativo", + "iconTooltip": "Suporta Link de Imagem src ou String Base64 como data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Oculto para Usuários Não Autorizados", + "queryParam": "Parâmetros de Consulta da URL", + "hashParam": "Parâmetros de Hash da URL", + "tabBar": "Barra de Abas", + "emptyTabTooltip": "Configure Esta Página no Painel Direito", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Celular)", + "800": "800px (Tablet)", + "1440": "1440px (Notebook)", + "1920": "1920px (Tela Larga)", + "3200": "3200px (Tela Super Grande)", + "title": "Configurações Gerais do Aplicativo", + "autofill": "Preenchimento Automático", + "userDefined": "Personalizado", + "default": "Padrão", + "tooltip": "Fechar a Popover Após Configuração", + "canvasMaxWidth": "Largura Máxima do Canvas para Este Aplicativo", + "userDefinedMaxWidth": "Largura Máxima Personalizada", + "inputUserDefinedPxValue": "Por Favor, Insira um Valor Personalizado em Pixels", + "maxWidthTip": "A Largura Máxima Deve Ser Maior ou Igual a 350", + "themeSetting": "Tema de Estilo Aplicado", + "themeSettingDefault": "Padrão", + "themeCreate": "Criar Tema", + "appTitle": "Título", + "appDescription": "Descrição", + "appCategory": "Categoria", + "showPublicHeader": "Mostrar cabeçalho na visualização pública", + "canvas": "Definições do ecrã", + "gridColumns": "Colunas da grelha", + "gridRowHeight": "Altura da linha da grelha", + "gridRowCount": "Contagem de linhas da grelha", + "gridPaddingX": "Preenchimento horizontal da tela", + "gridPaddingY": "Preenchimento vertical da tela", + "gridBgImage": "Imagem de fundo", + "gridBgImageRepeat": "Repetição da imagem de fundo", + "gridBgImageSize": "Tamanho da imagem de fundo", + "gridBgImagePosition": "Posição da imagem de fundo", + "gridBgImageOrigin": "Origem da imagem de fundo", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Atalhos Personalizados", + "shortcut": "Atalho", + "action": "Ação", + "empty": "Nenhum Atalho", + "placeholder": "Pressione Atalho", + "otherPlatform": "Outro", + "space": "Espaço", + }, + "profile": { + ...en.profile, + + "orgSettings": "Configurações do Espaço de Trabalho", + "switchOrg": "Trocar Espaço de Trabalho", + "joinedOrg": "Meus Espaços de Trabalho", + "createOrg": "Criar Espaço de Trabalho", + "logout": "Sair", + "personalInfo": "Meu Perfil", + "bindingSuccess": "Vínculo {sourceName} Bem-Sucedido", + "uploadError": "Erro ao Fazer Upload", + "editProfilePicture": "Modificar", + "saveUserNameTooltip": "Pressione Enter para Salvar seu Novo NicName. Se você ver seu E-mail, significa que acabamos de assumi-lo como Nome de Usuário e você pode alterá-lo para um melhor. Seu E-mail como nome de usuário técnico permanece intocado.", + "changeAvatarTooltip": "Você Pode Fazer Upload de Arquivos PNG ou JPG", + "nameCheck": "O Nome Não Pode Estar Vazio", + "name": "Nome: ", + "namePlaceholder": "Por Favor, Insira Seu Nome", + "toBind": "Para Vincular", + "binding": "Está Vinculando", + "bindError": "Erro de Parâmetro, Vinculação Atualmente Não Suportada.", + "bindName": "Vincular {name}", + "loginAfterBind": "Após a Vinculação, Você Pode Usar {name} para Fazer Login", + "bindEmail": "Vincular E-mail:", + "email": "E-mail", + "emailCheck": "Por Favor, Insira um E-mail Válido", + "emailPlaceholder": "Por Favor, Insira Seu E-mail", + "submit": "Enviar", + "bindEmailSuccess": "Vinculação de E-mail Bem-Sucedida", + "passwordModifiedSuccess": "Senha Alterada com Sucesso", + "passwordSetSuccess": "Senha Definida com Sucesso", + "oldPassword": "Senha Antiga:", + "inputCurrentPassword": "Por Favor, Insira Sua Senha Atual", + "newPassword": "Nova Senha:", + "inputNewPassword": "Por Favor, Insira Sua Nova Senha", + "confirmNewPassword": "Confirmar Nova Senha:", + "inputNewPasswordAgain": "Por Favor, Insira Sua Nova Senha Novamente", + "password": "Senha:", + "modifyPassword": "Alterar Senha", + "setPassword": "Definir Senha", + "alreadySetPassword": "Senha Definida", + "setPassPlaceholder": "Você Pode Fazer Login com Senha", + "setPassAfterBind": "Você Pode Definir a Senha Após Vincular a Conta", + "socialConnections": "Conexões Sociais", + "changeAvatar": "Alterar Avatar", + "about": "Sobre", + "userId": "ID do Usuário", + "createdAt": "Criado Em", + "currentOrg": "Organização Atual", + "settings": "Configurações", + "uiLanguage": "Idioma da Interface do Usuário", + "info": "Informações", + "createdApps": "Seus Aplicativos Criados", + "createdModules": "Seus Módulos Criados", + "sharedApps": "Aplicativos Compartilhados com Você", + "sharedModules": "Módulos Compartilhados com Você", + "onMarketplace": "No Marketplace", + "howToPublish": "Como Publicar no Marketplace", + "memberOfOrgs": "Membro dos Espaços de Trabalho", + "apiKeys": "Chaves de API", + "createApiKey": "Criar Chave de API", + "apiKeyInfo": "Certifique-se de que copia a sua nova chave API agora. Não a poderá voltar a ver.", + "apiKeyName": "Nome", + "apiKeyDescription": "Descrição", + "apiKeyCopy": "Clique na Chave de API para obter o valor no seu clipboard", + "apiKey": "Chave de API", + "deleteApiKey": "Excluir Chave de API", + "deleteApiKeyContent": "Tem certeza de que deseja excluir esta chave de API?", + "deleteApiKeyError": "Algo deu errado. Por favor, tente novamente.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Atalhos do Teclado", + "click": "Clique", + "global": "Mundial", + "toggleShortcutList": "Alternar Atalhos do Teclado", + "editor": "Editor", + "toggleLeftPanel": "Alternar Painel Esquerdo", + "toggleBottomPanel": "Alternar Painel Inferior", + "toggleRightPanel": "Alternar Painel Direito", + "toggleAllPanels": "Alternar Todos os Painéis", + "preview": "Visualizar", + "undo": "Desfazer", + "redo": "Refazer", + "showGrid": "Mostrar Grade", + "component": "Componente", + "multiSelect": "Selecionar Múltiplos", + "selectAll": "Selecionar Todos", + "copy": "Copiar", + "cut": "Recortar", + "paste": "Colar", + "move": "Mover", + "zoom": "Redimensionar", + "delete": "Excluir", + "deSelect": "Desselecionar", + "queryEditor": "Editor de Consulta", + "excuteQuery": "Executar Consulta Atual", + "editBox": "Editor de Texto", + "formatting": "Formatar", + "openInLeftPanel": "Abrir no Painel Esquerdo", + }, + "help": { + ...en.help, + + "videoText": "Visão Geral", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Não Consegue Criar um Novo Aplicativo ou Fonte de Dados?", + "permissionDenyContent": "Você não tem permissão para criar o aplicativo e a fonte de dados. Entre em contato com o administrador para se juntar ao grupo de desenvolvedores.", + "appName": "Tutorial do Aplicativo", + "chat": "Converse conosco", + "docs": "Ver Documentação", + "editorTutorial": "Tutorial do Editor", + "update": "O que há de novo?", + "version": "Versão", + "versionWithColon": "Versão: ", + "submitIssue": "Enviar um Problema", + }, + "header": { + ...en.header, + + "nameCheckMessage": "O Nome Não Pode Estar Vazio", + "viewOnly": "Somente Visualização", + "recoverAppSnapshotTitle": "Restaurar Esta Versão?", + "recoverAppSnapshotContent": "Restaurar o Aplicativo Atual para a Versão Criada em {time}.", + "recoverAppSnapshotMessage": "Restaurar Esta Versão", + "returnEdit": "Voltar para o Editor", + "deploy": "Publicar", + "export": "Exportar para JSON", + "editName": "Editar Nome", + "duplicate": "Duplicar {type}", + "snapshot": "Histórico", + "scriptsAndStyles": "Scripts e Estilos", + "appSettings": "Configurações do Aplicativo", + "preview": "Visualização", + "editError": "Modo de Pré-visualização do Histórico, Nenhuma Operação é Suportada.", + "clone": "Clonar", + "editorMode_layout": "Disposição", + "editorMode_logic": "Lógica", + "editorMode_both": "Ambos", + "editorMode_layout_tooltip": "Personalize a aparência e o layout do componente, na janela direita. Ajuste sua aparência, estilo e animação.", + "editorMode_logic_tooltip": "Configure como seu componente funciona e interage, na janela direita. Gerencie seu conteúdo e comportamentos interativos.", + "AppEditingBlocked": "Edição do aplicativo bloqueada para:", + "AppEditingBlockedHint": "As alterações não serão salvas enquanto outro usuário estiver editando este aplicativo.", + "AppEditingBlockedMessage": "Por favor, aguarde antes de verificar o status de edição do aplicativo.", + "AppEditingBlockedCheckStatus": "Verificar status do aplicativo", + "AppEditingBlockedSomeone": "Alguém", + "AppEditingBlockedMessageSnipped": "está editando este aplicativo", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Registrar", + "email": "Correio eletrónico:", + "inputEmail": "Por favor, digite seu email", + "inputValidEmail": "Por favor, insira um email válido", + "forgotPassword": "Esqueceu a Senha", + "forgotPasswordInfo": "Digite seu email e enviaremos um link para redefinir sua senha.", + "forgotPasswordSuccess": "Por favor, verifique seu email para o link de redefinição de senha.", + "forgotPasswordError": "Algo deu errado. Por favor, tente novamente.", + "register": "Registrar", + "userLogin": "Entrar", + "login": "Entrar", + "bind": "Vincular", + "passwordCheckLength": "Pelo Menos {min} Caracteres", + "passwordCheckContainsNumberAndLetter": "Deve Conter Letras e Números", + "passwordCheckSpace": "Não Pode Conter Espaços", + "welcomeTitle": "Bem-vindo ao {productName}", + "inviteWelcomeTitle": "{username} convida você a trabalhar juntos", + "terms": "Termos", + "privacy": "Política de Privacidade", + "registerHint": "Li e concordo com os", + "chooseAccount": "Escolha sua Conta", + "signInLabel": "Entrar com {name}", + "bindAccount": "Vincular Conta", + "scanQrCode": "Escanear o Código QR com {name}", + "invalidThirdPartyParam": "Parâmetro de Terceiros Inválido", + "account": "Conta", + "inputAccount": "Por favor, insira sua conta", + "ldapLogin": "Entrar com LDAP", + "resetPassword": "Redefinir Senha", + "resetPasswordDesc": "Redefinir a senha do usuário {name}. Uma nova senha será gerada após a redefinição.", + "resetSuccess": "Redefinição Bem-sucedida", + "resetSuccessDesc": "Redefinição de senha bem-sucedida. A nova senha é: {password}", + "resetLostPasswordSuccess": "Redefinição de senha bem-sucedida. Por favor, faça login novamente.", + "copyPassword": "Copiar Senha", + "poweredByLowcoder": "Desenvolvido por: Lowcoder.cloud", + "continue": "Continuar", + "enterPassword": "Introduza a sua palavra-passe", + "selectAuthProvider": "Selecionar o fornecedor de autenticação", + "selectWorkspace": "Selecione o seu espaço de trabalho", + "userNotFound": "Utilizador não encontrado. Certifique-se de que introduziu o e-mail correto.", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Adicione bibliotecas JavaScript ao seu aplicativo atual por meio de endereços URL. lodash, day.js, uuid, numbro são integrados ao sistema para uso imediato. As bibliotecas JavaScript são carregadas antes que o aplicativo seja inicializado, o que pode impactar no desempenho do aplicativo.", + "exportedAs": "Exportado Como", + "urlTooltip": "Endereço URL da biblioteca JavaScript, [unpkg.com](https://unpkg.com/) ou [jsdelivr.net](https://www.jsdelivr.com/) são recomendados", + "externalLibsHelperText": "Apenas são suportadas as bibliotecas que utilizam a abordagem UMD (Universal Module Definition). Leia mais aqui: https://github.com/umdjs/umd", + "recommended": "Recomendado", + "viewJSLibraryDocument": "Documento", + "jsLibraryURLError": "URL Inválido", + "jsLibraryExist": "A biblioteca JavaScript já existe", + "jsLibraryEmptyContent": "Nenhuma biblioteca JavaScript adicionada", + "jsLibraryDownloadError": "Erro ao baixar a biblioteca JavaScript", + "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada com sucesso", + "jsLibraryInstallFailed": "Falha na instalação da biblioteca JavaScript", + "jsLibraryInstallFailedCloud": "Talvez a biblioteca não esteja disponível na Sandbox, [Documentação](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{mensagem}", + "add": "Adicionar Novo", + "jsHelpText": "Adicione um método ou variável global ao aplicativo atual.", + "cssHelpText": "Adicione estilos ao aplicativo atual. A estrutura DOM pode mudar à medida que o sistema itera. Tente modificar os estilos por meio das propriedades do componente.", + "scriptsAndStyles": "Scripts e Estilos", + "jsLibrary": "Biblioteca JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Componente", + "componentContent": "O painel direito de componentes oferece muitos blocos de aplicativos prontos (componentes). Eles podem ser arrastados para o canvas para uso. Você também pode criar seus próprios componentes com um pouco de conhecimento de codificação.", + "canvas": "Tela", + "canvasContent": "Construa seus aplicativos no canvas com uma abordagem de 'O que você vê é o que você obtém'. Basta arrastar e soltar componentes para projetar seu layout e usar atalhos de teclado para edição rápida, como excluir, copiar e colar. Depois que um componente é selecionado, você pode ajustar todos os detalhes - desde estilos e layout até vinculação de dados e comportamento lógico. Além disso, desfrute do benefício adicional do design responsivo, garantindo que seus aplicativos tenham uma aparência ótima em qualquer dispositivo.", + "queryData": "Consultar Dados", + "queryDataContent": "Você pode criar consultas de dados aqui e conectar-se ao MySQL, MongoDB, Redis, Airtable e muitas outras fontes de dados. Após configurar a consulta, clique em 'Executar' para obter os dados e continuar o tutorial.", + "compProperties": "Propriedades do Componente", + "interactiveDemo": "Demonstração interactiva", + "interactiveDemoToolTip": "Clique para iniciar uma demonstração interactiva desta funcionalidade", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Bem-vindo! Clique em 'Aplicativo' e comece a criar seu primeiro aplicativo.", + "createAppTitle": "Criar Aplicativo", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Ativar o registo NPM personalizado", + "npmRegistryUrl": "URL do registo NPM", + "npmRegistryUrlRequired": "Introduza o URL do registo", + "npmRegistryUrlInvalid": "Introduza um URL válido", + "npmRegistryScope": "Âmbito do pacote", + "npmRegistryPattern": "Padrão", + "npmRegistryPatternInvalid": "Introduza um padrão válido (começando por @ para organizações).", + "npmRegistryAuth": "Autenticação", + "npmRegistryAuthType": "Tipo de autenticação", + "npmRegistryAuthCredentials": "Credenciais de autenticação", + "npmRegistryAuthCredentialsRequired": "Introduza as credenciais de registo", + "npmRegistryAuthCredentialsHelp": "Para a autenticação básica, forneça o nome de utilizador e a palavra-passe codificados em base64 no formato 'base64(nome de utilizador:palavra-passe)'; para a autenticação por token, forneça o token.", + }, + "history": { + ...en.history, + + "layout": "Ajuste de layout '{0}'", + "upgrade": "Atualização de '{0}'", + "delete": "Exclusão de '{0}'", + "add": "Adição de '{0}'", + "modify": "Modificação de '{0}'", + "rename": "Renomear '{1}' para '{0}'", + "recover": "Recuperar versão '{2}'", + "recoverVersion": "Recuperar versão", + "andSoOn": "e assim por diante", + "timeFormat": "MM DD às hh:mm A", + "emptyHistory": "Sem histórico", + "currentVersionWithBracket": " (Atual)", + "currentVersion": "Versão atual", + "justNow": "Agora mesmo", + "history": "Histórico", + }, + "home": { + ...en.home, + + "profile": "Seu Perfil", + "news": "Notícias", + "newsLoading": "Irá carregar alguns segundos.", + "orgHome": "Página Inicial (Org)", + "yourOrg": "Sua Organização", + "orgHomeTitle": "Página Inicial da Organização", + "appMarketplace": "Loja de Aplicativos", + "allApplications": "Seus Aplicativos", + "allModules": "Seus Módulos", + "allFolders": "Todas as Pastas", + "yourFolders": "Suas Pastas", + "modules": "Módulos", + "module": "Módulo", + "api": "API do Lowcoder", + "trash": "Lixeira", + "marketplace": "Mercado", + "allCategories": "Todas as Categorias", + "queryLibrary": "Biblioteca de Consultas", + "datasource": "Fontes de Dados", + "selectDatasourceType": "Selecione o Tipo de Fonte de Dados", + "home": "Início", + "all": "Todos", + "app": "Aplicativo", + "navigation": "Navegação", + "navLayout": "Navegação PC", + "navLayoutDesc": "Menu lateral para navegação fácil em desktop.", + "mobileTabLayout": "Navegação Móvel", + "mobileTabLayoutDesc": "Barra de navegação inferior para navegação móvel suave.", + "folders": "Pastas", + "folder": "Pasta", + "rootFolder": "Raiz", + "import": "Importar", + "export": "Exportar para JSON", + "show": "Mostrar", + "inviteUser": "Convidar membros", + "createFolder": "Criar Pasta", + "createFolderSubTitle": "Nome da pasta:", + "moveToFolder": "Mover para pasta", + "moveToTrash": "Mover para lixeira", + "moveToFolderSubTitle": "Mover \"{name}\" para:", + "folderName": "Nome da pasta:", + "resCardSubTitle": "{time} por {creator}", + "trashEmpty": "Lixeira vazia.", + "projectEmpty": "Nada aqui.", + "projectEmptyCanAdd": "Você ainda não tem nenhum aplicativo. Clique em Novo para começar.", + "name": "Nome", + "type": "Tipo", + "creator": "Criado por", + "lastModified": "Última modificação", + "deleteTime": "Hora da exclusão", + "createTime": "Hora da criação", + "datasourceName": "Nome da fonte de dados", + "databaseName": "Nome do banco de dados", + "nameCheckMessage": "O nome não pode estar vazio", + "deleteElementTitle": "Excluir permanentemente", + "moveToTrashSubTitle": "{type} {name} será movido para a lixeira.", + "deleteElementSubTitle": "Excluir {type} {name} permanentemente, não pode ser recuperado.", + "deleteSuccessMsg": "Excluído com sucesso", + "deleteErrorMsg": "Erro ao excluir", + "recoverSuccessMsg": "Recuperado com sucesso", + "newDatasource": "Nova fonte de dados", + "creating": "Criando...", + "chooseDataSourceType": "Escolha o tipo de fonte de dados", + "folderAlreadyExists": "A pasta já existe", + "newNavLayout": "{userName}'s {name}", + "newApp": "{userName}'s novo {name} ", + "importError": "Erro ao importar, {message}", + "exportError": "Erro ao exportar, {message}", + "importSuccess": "Importação bem-sucedida", + "fileUploadError": "Erro no envio do arquivo", + "fileFormatError": "Erro de formato de arquivo", + "groupWithSquareBrackets": "[Grupo] ", + "allPermissions": "Proprietário", + "appSharingDialogueTitle": "Partilha de aplicações e permissões", + "appSocialSharing": "Partilhe a sua aplicação e experiência em:", + "appSocialSharingMessage": "Criei esta aplicação com o Lowcoder, vê só!", + "socialShare": "Partilhar", + "shareLink": "Link de compartilhamento: ", + "copyLink": "Copiar link", + "appPublicMessage": "Torne o aplicativo público. Qualquer pessoa pode visualizá-lo.", + "modulePublicMessage": "Torne o módulo público. Qualquer pessoa pode visualizá-lo.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Publique seu aplicativo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", + "moduleMarketplaceMessage": "Publique seu Módulo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", + "marketplaceGoodPublishing": "Por favor, certifique-se de que seu aplicativo tenha um nome adequado e seja fácil de usar. Remova qualquer informação sensível antes de publicar. Além disso, remova fontes de dados locais e substitua por dados temporários estáticos integrados.", + "noMarketplaceApps": "Ainda não há aplicativos no mercado.", + "errorMarketplaceApps": "Erro ao carregar aplicativos do Mercado", + "localMarketplaceTitle": "Mercado Local", + "globalMarketplaceTitle": "Mercado Público", + "memberPermissionList": "Permissões dos membros: ", + "orgName": "{orgName} administradores", + "addMember": "Adicionar membros", + "addPermissionPlaceholder": "Por favor, insira um nome para pesquisar membros", + "searchMemberOrGroup": "Buscar membros ou grupos: ", + "addPermissionErrorMessage": "Falha ao adicionar permissão, {message}", + "copyModalTitle": "Clonar \"{name}\"", + "copyNameLabel": "Nome do {type}", + "copyModalfolderLabel": "Adicionar à pasta", + "copyNamePlaceholder": "Por favor, insira um nome de {type}", + "chooseNavType": "Por favor, escolha o tipo de navegação", + "createNavigation": "Criar Navegação", + "howToUseAPI": "Como usar a API Rest Aberta", + "support": "Apoio", + }, + "support": { + ...en.support, + + "selfUser": "Você", + "supportTitle": "Suporte Lowcoder", + "supportContent": "Se você tiver dúvidas ou precisar de ajuda, use o sistema de tickets para resolver seu problema rapidamente.", + "newSupportTicket": "Novo Ticket de Suporte", + "ticketTitle": "Título", + "priority": "Prioridade", + "assignee": "Responsável", + "status": "Status do Ticket", + "updatedTime": "Horário Atualizado", + "active": "Ativo", + "inactive": "Inativo", + "noEmail": "Sem E-mail", + "details": "Detalhes", + "reloadTickets": "Recarregar Tickets", + "createdDate": "Data de Criação", + "updatedDate": "Data de Atualização", + "description": "Descrição do Problema", + "subtasks": "Subtarefas", + "subtasksProgress": "Progresso de todas as Subtarefas", + "attachments": "Anexos do Problema", + "comments": "Comentários", + "addComment": "Adicionar Comentário", + "addAttachment": "Adicionar Anexo", + "edit": "Editar Descrição do Ticket", + "save": "Salvar Descrição do Ticket", + "cancel": "Cancelar", + "submitComment": "Enviar Comentário", + "upload": "Enviar Anexo", + "selectFile": "Selecionar Arquivo", + "ticketDescriptionUpdated": "Descrição do ticket atualizada com sucesso!", + "ticketDescriptionUpdateFailed": "Falha ao atualizar a descrição do ticket.", + "writeComment": "Escreva um comentário...", + "ticketCommentAdded": "Comentário adicionado com sucesso!", + "ticketCommentFailed": "Falha ao adicionar o comentário.", + "ticketCommentEmpty": "Por favor, escreva um comentário antes de enviar.", + "ticketAttachmentUploaded": "Anexo carregado com sucesso!", + "ticketAttachmentFailed": "Falha ao carregar o anexo.", + "ticketAttachmentEmpty": "Por favor, selecione um arquivo para enviar.", + "ticketFetchError": "Falha ao carregar o ticket.", + "ticketNotFound": "Ticket não encontrado.", + "addAttachmentFileSize": "O arquivo deve ser menor que 5MB!", + "goBack": "Voltar", + "noDescription": "Nenhuma descrição disponível.", + "createTicket": "Criar um novo Ticket de Suporte", + "createTicketTitlePlaceholder": "Digite o Título (máx. 150 caracteres)", + "createTicketDescriptionTitle": "Descreva seu problema - quanto mais detalhes, melhor:", + "createTicketDescriptionPlaceholder": "Descreva o problema em detalhes, incluindo: 1) Passos para reproduzir o problema, 2) Comportamento esperado versus comportamento real, 3) Trechos de código, se aplicável, 4) Componentes específicos, APIs ou configurações afetadas", + "createTicketSubmit": "Enviar Ticket", + "createTicketInfoText": "Quando seu Ticket for criado, você poderá adicionar Capturas de Tela e Comentários na seção 'Detalhes'.", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Posição dos pontos de navegação", + "autoPlay": "Reprodução automática", + "showDots": "Mostrar pontos de navegação", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Nome ou URL do Pacote npm Inválido.", + "pluginExisted": "Este plugin npm já existe", + "compNotFound": "Componente {compName} não encontrado.", + "addPluginModalTitle": "Adicionar Plugin de um Repositório npm", + "pluginNameLabel": "URL ou Nome do Pacote npm", + "noCompText": "Sem componentes.", + "compsLoading": "Carregando...", + "removePluginBtnText": "Remover", + "addPluginBtnText": "Adicionar Plugin npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "O Valor Padrão do Botão de Alternância, Por Exemplo: Falso", + "trueDefaultText": "Ocultar", + "falseDefaultText": "Mostrar", + "trueLabel": "Texto para Verdadeiro", + "falseLabel": "Texto para Falso", + "trueIconLabel": "Ícone para Verdadeiro", + "falseIconLabel": "Ícone para Falso", + "iconPosition": "Posição do Ícone", + "showText": "Mostrar Texto", + "alignment": "Alinhamento", + "showBorder": "Mostrar Borda", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", + "demoText": "Lowcoder | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", + "submit": "Enviar", + "style": "Estilo", + "danger": "Perigo", + "warning": "Aviso", + "success": "Sucesso", + "menu": "Menu", + "link": "Ligação a", + "customAppearance": "Aparência Personalizada", + "search": "Buscar", + "pleaseInputNumber": "Por favor, insira um número", + "mostValue": "Valor Máximo", + "maxRating": "Classificação Máxima", + "notSelect": "Não Selecionado", + "halfSelect": "Seleção Parcial", + "pleaseSelect": "Por favor, selecione", + "title": "Título", + "content": "Conteúdo", + "componentNotFound": "Componente não encontrado", + "example": "Exemplos", + "defaultMethodDesc": "Defina o valor da propriedade {name}", + "propertyUsage": "Você pode ler informações relacionadas ao componente acessando as propriedades do componente pelo nome do componente em qualquer lugar em que possa escrever JavaScript.", + "property": "Propriedades", + "propertyName": "Nome da Propriedade", + "propertyType": "Tipo", + "propertyDesc": "Descrição", + "event": "Eventos", + "eventName": "Nome do Evento", + "eventDesc": "Descrição", + "mehtod": "Métodos", + "methodUsage": "Você tem a capacidade de interagir com os componentes por meio de seus respectivos métodos, que podem ser acessados por seus nomes designados em qualquer segmento onde o JavaScript é utilizado. Além disso, esses componentes podem ser ativados por meio da ação 'Controlar Componente', que é acionada em resposta a eventos específicos.", + "methodName": "Nome do Método", + "methodDesc": "Descrição", + "showBorder": "Mostrar Borda", + "haveTry": "Experimente você mesmo", + "settings": "Configurações", + "settingValues": "Valor da Configuração", + "defaultValue": "Valor Padrão", + "time": "Tempo", + "date": "Data", + "noValue": "Nenhum", + "xAxisType": "Tipo do Eixo X", + "hAlignType": "Alinhamento Horizontal", + "leftLeftAlign": "Alinhamento à Esquerda-Esquerda", + "leftRightAlign": "Alinhamento à Esquerda-Direita", + "topLeftAlign": "Alinhamento Superior-Esquerdo", + "topRightAlign": "Alinhamento Superior-Direito", + "validation": "Validação", + "required": "Obrigatório", + "defaultStartDateValue": "Data de Início Padrão", + "defaultEndDateValue": "Data de Fim Padrão", + "basicUsage": "Uso Básico", + "basicDemoDescription": "Os seguintes exemplos mostram o uso básico do componente.", + "noDefaultValue": "Sem Valor Padrão", + "forbid": "Proibido", + "placeholder": "Marcador de Posição", + "pleaseInputPassword": "Por favor, insira uma senha", + "password": "Senha", + "textAlign": "Alinhamento do Texto", + "length": "Comprimento", + "top": "Topo", + "pleaseInputName": "Por favor, insira seu nome", + "userName": "Nome", + "fixed": "Fixo", + "responsive": "Responsivo", + "workCount": "Contagem de Palavras", + "cascaderOptions": "Opções de Cascata", + "pleaseSelectCity": "Por favor, selecione uma cidade", + "advanced": "Avançado", + "showClearIcon": "Mostrar Ícone Limpar", + "appleOptionLabel": "🍎 Maçã", + "waterMelonOptionLabel": "🍉 Melancia", + "berryOptionLabel": "🍓 Morango", + "lemonOptionLabel": "🍋 Limão", + "coconutOptionLabel": "🥥 Coco", + "likedFruits": "Favoritos", + "option": "Opção", + "singleFileUpload": "Upload de Arquivo Único", + "multiFileUpload": "Upload de Múltiplos Arquivos", + "folderUpload": "Upload de Pasta", + "multiFile": "Múltiplos Arquivos", + "folder": "Pasta", + "open": "Abrir", + "favoriteFruits": "Frutas Favoritas", + "pleaseSelectOneFruit": "Selecione uma Fruta", + "notComplete": "Não Completo", + "complete": "Completo", + "echart": "Gráfico eletrónico", + "lineChart": "Gráfico de Linha", + "basicLineChart": "Gráfico de Linha Básico", + "lineChartType": "Tipo de Gráfico de Linha", + "stackLineChart": "Linha Empilhada", + "areaLineChart": "Linha de Área", + "scatterChart": "Gráfico de Dispersão", + "scatterShape": "Forma de Dispersão", + "scatterShapeCircle": "Círculo", + "scatterShapeRect": "Retângulo", + "scatterShapeTri": "Triângulo", + "scatterShapeDiamond": "Diamante", + "scatterShapePin": "Alfinete", + "scatterShapeArrow": "Seta", + "pieChart": "Gráfico de Pizza", + "basicPieChart": "Gráfico de Pizza Básico", + "pieChatType": "Tipo de Gráfico de Pizza", + "pieChartTypeCircle": "Gráfico de Donut", + "pieChartTypeRose": "Gráfico de Rosa", + "titleAlign": "Posição do Título", + "color": "Cor", + "dashed": "Tracejado", + "imADivider": "Sou uma Linha de Divisão", + "tableSize": "Tamanho da Tabela", + "subMenuItem": "SubMenu {num}", + "menuItem": "Menu {num}", + "labelText": "Rótulo", + "labelPosition": "Posição do Rótulo", + "labelAlign": "Alinhamento do Rótulo", + "optionsOptionType": "Método de Configuração", + "styleBackgroundColor": "Cor de Fundo", + "styleBorderColor": "Cor da Borda", + "styleColor": "Cor da Fonte", + "selectionMode": "Modo de Seleção de Linha", + "paginationSetting": "Configuração de Paginação", + "paginationShowSizeChanger": "Suportar Usuários para Modificar o Número de Entradas por Página", + "paginationShowSizeChangerButton": "Mostrar Botão de Modificação de Tamanho", + "paginationShowQuickJumper": "Mostrar Pulo Rápido", + "paginationHideOnSinglePage": "Ocultar Quando Há Apenas uma Página", + "paginationPageSizeOptions": "Tamanho da Página", + "chartConfigCompType": "Tipo de Componente de Configuração de Gráfico", + "xConfigType": "Tipo de Eixo X", + "loading": "Carregando", + "disabled": "Desabilitado", + "minLength": "Comprimento Mínimo", + "maxLength": "Comprimento Máximo", + "showCount": "Mostrar Contagem de Palavras", + "autoHeight": "Altura Automática", + "thousandsSeparator": "Separador de Milhares", + "precision": "Casas Decimais", + "value": "Valor Padrão", + "formatter": "Formato", + "min": "Valor Mínimo", + "max": "Valor Máximo", + "step": "Tamanho do Passo", + "start": "Hora de Início", + "end": "Hora de Término", + "allowHalf": "Permitir Meia Seleção", + "filetype": "Tipo de Arquivo", + "showUploadList": "Mostrar Lista de Upload", + "uploadType": "Tipo de Upload", + "allowClear": "Mostrar Ícone de Limpar", + "minSize": "Tamanho Mínimo do Arquivo", + "maxSize": "Tamanho Máximo do Arquivo", + "maxFiles": "Número Máximo de Arquivos Enviados", + "format": "Formato", + "minDate": "Data Mínima", + "maxDate": "Data Máxima", + "minTime": "Tempo Mínimo", + "maxTime": "Tempo Máximo", + "text": "Texto", + "type": "Tipo", + "hideHeader": "Ocultar Cabeçalho", + "hideBordered": "Ocultar Borda", + "src": "URL da Imagem", + "showInfo": "Exibir Valor", + "mode": "Modo", + "onlyMenu": "Apenas Menu", + "horizontalAlignment": "Alinhamento Horizontal", + "row": "Linha", + "column": "Coluna", + "leftAlign": "Alinhamento à Esquerda", + "rightAlign": "Alinhamento à Direita", + "percent": "Porcentagem", + "fixedHeight": "Altura Fixa", + "auto": "Adaptativo", + "directory": "Pasta", + "multiple": "Múltiplos Arquivos", + "singleFile": "Arquivo Único", + "manual": "Manual", + "default": "Padrão", + "small": "Pequeno", + "middle": "Médio", + "large": "Grande", + "single": "Único", + "multi": "Múltiplo", + "close": "Fechar", + "ui": "Modo de UI", + "line": "Gráfico de Linha", + "scatter": "Gráfico de Dispersão", + "pie": "Gráfico de Pizza", + "basicLine": "Gráfico de Linha Básico", + "stackedLine": "Gráfico de Linha Empilhada", + "areaLine": "Mapa de Área", + "basicPie": "Gráfico de Pizza Básico", + "doughnutPie": "Gráfico de Donut", + "rosePie": "Gráfico de Rosa", + "category": "Eixo de Categoria", + "circle": "Círculo", + "rect": "Retângulo", + "triangle": "Triângulo", + "diamond": "Diamante", + "pin": "Alfinete", + "arrow": "Seta", + "left": "Esquerda", + "right": "Direita", + "center": "Centro", + "bottom": "Inferior", + "justify": "Justificar Ambos os Extremos", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Estado Atual dos Dados", + "preview": "Visualizar", + "property": "Propriedades", + "console": "Console de Script Visual", + "executeMethods": "Executar Métodos", + "noMethods": "Sem Métodos.", + "methodParams": "Parâmetros do Método", + "methodParamsHelp": "Informe os Parâmetros do Método Usando JSON. Por Exemplo, Você Pode Definir os Parâmetros do setValue Com: [1] ou 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Cor de Fundo do Botão", + "btnText": "Texto do Botão", + "title": "Título", + "selectBackground": "Fundo Selecionado", + }, + "idSource": { + ...en.idSource, + + "title": "Provedor de Autenticação do Usuário", + "form": "Correio eletrónico", + "pay": "Prémio", + "enable": "Habilitar", + "unEnable": "Não Habilitado", + "loginType": "Tipo de Login", + "status": "Estado", + "desc": "Descrição", + "manual": "Agenda de Endereços:", + "syncManual": "Sincronizar Agenda de Endereços", + "syncManualSuccess": "Sincronização Bem-Sucedida", + "enableRegister": "Permitir Registro", + "saveBtn": "Salvar e Habilitar", + "save": "Salvar", + "none": "Nenhum", + "formPlaceholder": "Por favor, informe {label}", + "formSelectPlaceholder": "Por favor, selecione {label}", + "saveSuccess": "Salvo com Sucesso", + "dangerLabel": "Zona de Perigo", + "dangerTip": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Prossiga com Cuidado.", + "lastEnabledConfig": "Não é possível desativar/eliminar a configuração, uma vez que esta é a única configuração activada.", + "disable": "Desabilitar", + "disableSuccess": "Desabilitado com Sucesso", + "encryptedServer": "-------- Criptografado no Lado do Servidor --------", + "disableTip": "Dicas", + "disableContent": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Você Tem Certeza de Que Deseja Prosseguir?", + "manualTip": "", + "lockTip": "O Conteúdo está Bloqueado. Para Fazer Alterações, Clique no {icon} para Desbloquear.", + "lockModalContent": "Alterar o Campo 'Atributo de ID' Pode Ter Impactos Significativos na Identificação do Usuário. Por Favor, Confirme Que Você Entende as Implicações Dessa Alteração Antes de Prosseguir.", + "payUserTag": "Prémio", + "source": "Fonte", + "sourceName": "Nome do fornecedor de autenticação", + "sourceDescription": "Fornecedor de autenticação Descrição", + "sourceIcon": "Ícone do fornecedor de autenticação", + "sourceCategory": "Categoria do fornecedor de autenticação", + "souceIssuerURI": "URI do emissor do fornecedor de autenticação", + "souceAuthorizationEndpoint": "Ponto final de autorização do fornecedor de autenticação", + "souceTokenEndpoint": "Ponto de extremidade do token do fornecedor de autenticação", + "souceUserInfoEndpoint": "Ponto final da informação do utilizador do fornecedor de autenticação", + "userInfoIntrospection": "Utilizar a introspeção do utilizador OpenID", + "userCanSelectAccounts": "O utilizador pode selecionar a partir de contas", + "sourceCategoryEnterprise": "Identidade empresarial", + "sourceCategoryCloud": "Serviços em nuvem", + "sourceCategorySocial": "Redes sociais", + "sourceCategoryDevelopment": "Desenvolvimento", + "sourceCategoryTools": "Ferramentas e produtividade", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Configurar Visualização de Slot", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "JSON Lottie", + "searchAnimation": "Pesquisar animação", + "speed": "Velocidade", + "width": "Largura", + "height": "Altura", + "backgroundColor": "Cor de Fundo", + "animationStart": "Início da Animação", + "valueDesc": "Dados JSON Atuais", + "loop": "Repetir", + "auto": "Automático", + "onHover": "Ao Passar o Mouse", + "onTrigger": "No acionamento", + "singlePlay": "Reprodução Única", + "endlessLoop": "Loop Infinito", + "keepLastFrame": "Manter Último Quadro Exibido", + "fit": "Em forma", + "align": "Alinhar", + "load": "Em carga", + "play": "Em jogo", + "pause": "Em pausa", + "stop": "Na paragem", + "complete": "Em Completo", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Cor do Título", + "subTitleColor": "Cor do Subtítulo", + "labelColor": "Cor do Rótulo", + "value": "Dados da Linha do Tempo", + "mode": "Ordem de Exibição", + "left": "Conteúdo à Direita", + "right": "Conteúdo à Esquerda", + "alternate": "Ordem de Conteúdo Alternada", + "modeTooltip": "Defina o Conteúdo para Aparecer à Esquerda/Direita ou Alternadamente em Ambos os Lados da Linha do Tempo", + "reverse": "Eventos Mais Recentes Primeiro", + "pending": "Texto do Nó Pendente", + "pendingDescription": "Quando Definido, um Último Nó com o Texto e um Indicador de Espera Serão Exibidos.", + "defaultPending": "Melhoria Contínua", + "clickTitleEvent": "Clique em Evento de Título", + "clickTitleEventDesc": "Clique em Evento de Título", + "Introduction": "Chaves de Introdução", + "helpTitle": "Título da Linha do Tempo (Obrigatório)", + "helpsubTitle": "Subtítulo da Linha do Tempo", + "helpLabel": "Rótulo da Linha do Tempo, Usado para Exibir Datas", + "helpColor": "Indica a Cor do Nó da Linha do Tempo", + "helpDot": "Renderização de Nós da Linha do Tempo como Ícones Ant Design", + "helpTitleColor": "Controle Individual da Cor do Título do Nó", + "helpSubTitleColor": "Controle Individual da Cor do Subtítulo do Nó", + "helpLabelColor": "Controle Individual da Cor do Ícone do Nó", + "valueDesc": "Dados da Linha do Tempo", + "clickedObjectDesc": "Dados do Item Clicado", + "clickedIndexDesc": "Índice do Item Clicado", + }, + "comment": { + ...en.comment, + + "value": "Dados da Lista de Comentários", + "showSendButton": "Permitir Comentários", + "title": "Título", + "titledDefaultValue": "%d Comentário no Total", + "placeholder": "Shift + Enter para Comentar; Digite @ ou # para Entrada Rápida", + "placeholderDec": "Espaço reservado", + "buttonTextDec": "Título do Botão", + "buttonText": "Comentar", + "mentionList": "Dados da Lista de Menções", + "mentionListDec": "Chave-Palavras-Chave de Menção; Valor-Dados da Lista de Menções", + "userInfo": "Informações do Usuário", + "dateErr": "Erro de Data", + "commentList": "Lista de Comentários", + "deletedItem": "Item Excluído", + "submitedItem": "Item Enviado", + "deleteAble": "Mostrar Botão de Excluir", + "Introduction": "Chaves de Introdução", + "helpUser": "Informações do Usuário (Obrigatório)", + "helpname": "Nome de Usuário (Obrigatório)", + "helpavatar": "URL do Avatar (Alta Prioridade)", + "helpdisplayName": "Nome de Exibição (Baixa Prioridade)", + "helpvalue": "Conteúdo do Comentário", + "helpcreatedAt": "Data de Criação", + }, + "mention": { + ...en.mention, + + "mentionList": "Dados da Lista de Menções", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Valor de Autocompletar", + "checkedValueFrom": "Valor Verificado de", + "ignoreCase": "Ignorar Maiúsculas e Minúsculas na Busca", + "searchLabelOnly": "Buscar Somente no Rótulo", + "searchFirstPY": "Buscar Primeiro Pinyin", + "searchCompletePY": "Buscar Pinyin Completo", + "searchText": "Buscar Texto", + "SectionDataName": "Dados de Autocompletar", + "valueInItems": "Valor nos Itens", + "type": "Tipo", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Chave", + "selectLable": "Rótulo", + "ComponentType": "Tipo de Componente", + "colorIcon": "Azul", + "grewIcon": "Cinza", + "noneIcon": "Nenhum", + "small": "Pequeno", + "large": "Grande", + "componentSize": "Tamanho do Componente", + "Introduction": "Chaves de Introdução", + "helpLabel": "Rótulo", + "helpValue": "Valor", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Colunas", + "addColumn": "Adicionar coluna", + "columnDefinition": "Definição de coluna", + "rowDefinition": "Definição de linha", + "columnGap": "Diferença de coluna", + "rowGap": "Lacuna de linha", + "atLeastOneColumnError": "O Layout Responsivo Mantém Pelo Menos uma Coluna", + "columnsPerRow": "Colunas por Linha", + "columnsSpacing": "Espaçamento de Colunas (px)", + "horizontal": "Horizontal", + "vertical": "Vertical", + "mobile": "Móvel", + "tablet": "Tablet", + "desktop": "Ambiente de trabalho", + "rowStyle": "Estilo de Linha", + "columnStyle": "Estilo de Coluna", + "minWidth": "Largura Mín.", + "rowBreak": "Quebra de Linha", + "useComponentWidth": "Usar tamanho próprio", + "useComponentWidthDesc": "Use a largura do contêiner em vez da largura do aplicativo", + "matchColumnsHeight": "Corresponder Altura das Colunas", + "rowLayout": "Layout de Linha", + "columnsLayout": "Layout de Colunas", + "columnsDefinitionTooltip": "As colunas podem ser definidas livremente com base nas propriedades das colunas CSS. Por exemplo, \"auto auto\" criará duas colunas com a mesma largura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "As linhas podem ser definidas livremente com base nas propriedades das linhas CSS. Por exemplo, 'auto auto' criará duas linhas com a mesma altura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "Ver áreas", + "addColumn": "Adicionar áreas", + "columnDefinition": "Definição da área", + "atLeastOneColumnError": "O layout responsivo mantém pelo menos uma coluna", + "horizontal": "Horizontal", + "vertical": "Vertical", + "areaStyle": "Estilo de coluna", + "minWidth": "Min. Largura", + "maxWidth": "Máximo. Largura", + "width": "Largura", + "collapsible": "A área é rebatível?", + "matchColumnsHeight": "Áreas de jogo Altura", + "orientation": "Orientação do Splitlayout", + "orientationTooltip": "A ordem visual em que as áreas estão alinhadas. Também pode colocar componentes Splitlayout dentro de componentes Splitlayout para obter layouts complexos.", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modo", + "modeInline": "Em linha", + "modeVertical": "Vertical", + "modeHorizontal": "Horizontal", + "width": "Largura", + "widthTooltip": "Pixel ou Porcentagem, por exemplo, 520, 60%", + "navStyle": "Estilo do Menu", + "navItemStyle": "Estilo do Item de Menu", + "navBackground": "Imagem de fundo", + "mobileNavVerticalOrientation": "Orientação vertical", + "mobileNavVerticalMaxWidth": "Largura máxima", + "mobileNavBarHeight": "Altura da barra de navegação", + "mobileNavVerticalShowSeparator": "Mostrar separador", + "mobileNavIconSize": "Tamanho do ícone", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Linha de Data Internacional W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alasca", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Hora do Pacífico (EUA)", + "UTC-06:00": "(UTC-06:00) Hora Central (EUA)", + "UTC-05:00": "(UTC-05:00) Hora do Leste (EUA)", + "UTC-04:00": "(UTC-04:00) Hora do Atlântico", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Cabo Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlim, Roma", + "UTC+02:00": "(UTC+02:00) Athens, Bucharest", + "UTC+03:00": "(UTC+03:00) Moscovo", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) Nova Deli", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Banguecoque", + "UTC+08:00": "(UTC+08:00) Pequim, HK", + "UTC+09:00": "(UTC+09:00) Tóquio, Seul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Ilhas Salomão, Nova Caledónia", + "UTC+12:00": "(UTC+12:00) Auckland, Fiji", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "Escolha do utilizador", + }, + "tour": { + ...en.tour, + + "section1Title": "Passos", + "section1Subtitle": "Passos", + "tooltipExampleHeader": "Exemple:", + "tooltipSignatureHeader": "Assinatura:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Título", + "placeholder": "Bem-vindo", + "tooltip": "O título do passo. Qualquer HTML é válido aqui.", + }, + "description": { + ...en.tour.options.description, + + "label": "Descrição", + "placeholder": "Bem-vindo ao Lowcoder!", + "tooltip": "O título do passo. Qualquer HTML é válido aqui.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Máscara", + "tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Seta", + "tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente.", + "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Tipo", + "tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal.", + }, + "target": { + ...en.tour.options.target, + + "label": "Componente", + "tooltip": "O componente no qual você deseja colocar a dica ou deixe-o vazio se simplesmente desejar um modal no centro da tela.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI da Imagem de Capa", + "tooltip": "Um URI para uma imagem que você gostaria de exibir com o passo", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Renderização de Indicadores", + "tooltip": "Fornece um indicador personalizado para qual passo você está", + "tooltipValidTypes": "O formato é uma função que aceita dois argumentos, `current` e `total` e retorna um ReactNode", + "tooltipFunctionSignatureHeader": "Assinatura:", + "tooltipFunctionSignature": "(atual: número, total: número) => ReactNode", + "tooltipExampleHeader": "Exemplo:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Desativar Interação", + "tooltip": "Desativa a interação na área destacada.", + }, + "mask": { + ...en.tour.mask, + + "label": "Máscara", + "tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour. Pode ser substituído no nível do passo.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Posição", + "tooltip": "Posição do cartão guia em relação ao elemento de destino. Pode ser substituído no nível do passo.", + "tooltipValidOptions": "Opções válidas", + "tooltipValidOptionsAbove": "Acima do componente:", + "tooltipValidOptionsLeft": "À esquerda do componente:", + "tooltipValidOptionsRight": "À direita do componente:", + "tooltipValidOptionsBelow": "Abaixo do componente:", + "tooltipValidOptionsOnTop": "No topo do componente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Seta", + "tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente. Pode ser substituído no nível do passo.", + "tooltipFunctionSignature": "booleano | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Tipo", + "tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal. Pode ser substituído no nível do passo.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Como desenvolver um plug-in npm", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Utilizar bibliotecas de terceiros", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "Pesquisar imagem", + "searchAnimation": "Pesquisar animação", + "searchIcon": "Ícone de pesquisa", + "noResults": "Não foram encontrados resultados.", + "buySubscriptionTitle": "Desbloquear Activos Premium", + "buySubscriptionContent": "Este ativo é exclusivo para os subscritores do Pacote multimédia. Subscreva o Pacote Multimédia e transfira activos de alta qualidade sem limites!", + "buySubscriptionButton": "Subscrever agora", + }, + +}; diff --git a/translations/locales/pt.js b/translations/locales/pt.js index 305ca8ec63..67bc4c30af 100644 --- a/translations/locales/pt.js +++ b/translations/locales/pt.js @@ -1,3607 +1,4061 @@ import { en } from "./en.js"; export const pt = { ...en, - "productName": "Lowcoder", - "productDesc": "Crie aplicações de software para sua empresa e clientes com pouquíssima experiência de programação. Lowcoder é uma excelente alternativa para Retool, Appsmith e Tooljet.", - "notSupportedBrowser": "Seu navegador atual pode ter problemas de compatibilidade. Para uma experiência melhor, por favor, utilize a última versão do Chrome.", - "create": "Crie", - "move": "Mover", - "addItem": "Adicionar", - "newItem": "Novo", - "copy": "Copiar", - "rename": "Renomear", - "delete": "Remover", - "deletePermanently": "Remover Permanentemente", - "remove": "Remover", - "recover": "Recuperar", - "edit": "Editar", - "view": "Ver", - "value": "Valor", - "data": "Dados", - "information": "Informações", - "success": "Sucesso", - "warning": "Aviso", - "error": "Erro", - "reference": "Referência", - "text": "Texto", - "basic": "Básico", - "label": "Rótulo", - "layout": "Layout", - "color": "Cor", - "form": "Formulário", - "menu": "Menu", - "menuItem": "Item do Menu", - "ok": "OK", - "cancel": "Cancelar", - "finish": "Terminar", - "reset": "Resetar", - "icon": "Ícone", - "code": "Código", - "title": "Título", - "emptyContent": "Conteúdo em Branco", - "more": "Mais", - "search": "Pesquisar", - "back": "Voltar", - "accessControl": "Controle de Acesso", - "copySuccess": "Copiado com Sucesso", - "copyError": "Erro ao copiar", - "api": { - ...en.api, - "publishSuccess": "Publicado com Sucesso", - "recoverFailed": "Falha ao Recuperar", - "needUpdate": "Sua versão está desatualizada. Por favor, atualize para a nova versão." - }, - "codeEditor": { - ...en.codeEditor, - "notSupportAutoFormat": "O editor de código atual não suporta formatação automática", - "fold": "Dobrar" - }, - "exportMethod": { - ...en.exportMethod, - "setDesc": "Definir Propriedade: {property}", - "clearDesc": "Limpar Propriedade: {property}", - "resetDesc": "Resetar Propriedade: {property} ao Valor Padrão" - }, - "method": { - ...en.method, - "focus": "Definir Foco", - "focusOptions": "Opções de Foco. Veja HTMLElement.focus()", - "blur": "Remover Foco", - "click": "Clicar", - "select": "Selecionar o Texto Inteiro", - "setSelectionRange": "Definit Posição de Início e Fim da Seleção de Texto", - "selectionStart": "Índice de base 0 do Primeiro Caractere Selecionado", - "selectionEnd": "Índice de base 0 do Caractere Selecionado Após o Último Caractere", - "setRangeText": "Substituir Faixa de Texto", - "replacement": "String a Inserir", - "replaceStart": "Índice baseado em 0 do primeiro caractere a ser substituído", - "replaceEnd": "Índice de caractere baseado em 0 após o último caractere a ser substituído" - }, - "errorBoundary": { - ...en.errorBoundary, - "encounterError": "Carregamento do component falhou. Por favor, cheque sua configuração.", - "clickToReload": "Clique para recarregar", - "errorMsg": "Erro: " - }, - "imgUpload": { - ...en.imgUpload, - "notSupportError": "Somente suporta imagens do tipo {types}", - "exceedSizeError": "Tamanho da imagem não deve passar de {size}" - }, - "gridCompOperator": { - ...en.gridCompOperator, - "notSupport": "Não suportado", - "selectAtLeastOneComponent": "Por favor, selecione pelo menos um componente", - "selectCompFirst": "Selecione componentes antes de copiar", - "noContainerSelected": "[Bug] Nenhum container selecionado", - "deleteCompsSuccess": "Removido com sucesso. Pressione {undoKey} para reverter.", - "deleteCompsTitle": "Remover Componentes", - "deleteCompsBody": "Tem certeza que deseja remover {compNum} componentes selecionados?", - "cutCompsSuccess": "Corte realizado com sucesso. Pressione {pasteKey} para colar, ou {undoKey} para desfazer." - }, - "leftPanel": { - ...en.leftPanel, - "queries": "Queries de Dados em seu Aplicativo", - "globals": "Variavies de Dados Globais", - "propTipsArr": "{num} Items", - "propTips": "{num} Teclas", - "propTipArr": "{num} Item", - "propTip": "{num} Tecla", - "stateTab": "Estado", - "settingsTab": "Configurações", - "toolbarTitle": "Individualização", - "toolbarPreload": "Scripts e Estilos", - "components": "Componentes ativos", - "modals": "Modais Dentro do App", - "expandTip": "Clique para expandir os dados do componente {component}", - "collapseTip": "Clique para minimizar os dados do componente {component}", - "layers": "Camadas", - "activatelayers": "Usar camadas dinâmicas", - "selectedComponents": "Componentes selecionados...", - "displayComponents": "Controlar Visão", - "lockComponents": "Controlar Posição", - }, - // second part - "bottomPanel": { - ...en.bottomPanel, - "title": "Consultas de Dados", - "run": "Executar", - "noSelectedQuery": "Nenhuma Consulta Selecionada", - "metaData": "Metadados da Fonte de Dados", - "noMetadata": "Nenhum Metadado Disponível", - "metaSearchPlaceholder": "Buscar Metadados", - "allData": "Todas as Tabelas" - }, - "rightPanel": { - ...en.rightPanel, - "propertyTab": "Propriedades", - "noSelectedComps": "Nenhum Componente selecionado. Clique em um Componente para visualizar suas Propriedades.", - "createTab": "Inserir", - "searchPlaceHolder": "Buscar Componentes ou Módulos", - "uiComponentTab": "Componentes", - "extensionTab": "Extensões", - "modulesTab": "Módulos", - "moduleListTitle": "Módulos", - "pluginListTitle": "Plugins", - "emptyModules": "Os Módulos são Mikro-Apps reutilizáveis. Você pode incorporá-los em seu App.", - "searchNotFound": "Não consegue encontrar o componente certo?", - "emptyPlugins": "Nenhum Plugin Adicionado", - "contactUs": "Entre em Contato", - "issueHere": "aqui." - }, - "prop": { - ...en.prop, - "expand": "Expandir", - "columns": "Colunas", - "videokey": "Chave do Vídeo", - "rowSelection": "Seleção de Linha", - "toolbar": "Barra de Ferramentas", - "pagination": "Paginação", - "logo": "Logotipo", - "style": "Estilo", - "inputs": "Entradas", - "meta": "Metadados", - "data": "Dados", - "hide": "Ocultar", - "loading": "Carregando", - "disabled": "Desabilitado", - "placeholder": "Espaço Reservado", - "showClear": "Mostrar Botão Limpar", - "showSearch": "Pesquisável", - "defaultValue": "Valor Padrão", - "required": "Campo Obrigatório", - "readOnly": "Somente Leitura", - "readOnlyTooltip": "Componentes somente leitura parecem normais, mas não podem ser modificados.", - "minimum": "Mínimo", - "maximum": "Máximo", - "regex": "Regex", - "minLength": "Comprimento Mínimo", - "maxLength": "Comprimento Máximo", - "height": "Altura", - "width": "Largura", - "selectApp": "Selecionar Aplicativo", - "showCount": "Mostrar Contagem", - "textType": "Tipo de Texto", - "customRule": "Regra Personalizada", - "customRuleTooltip": "Uma string não vazia indica um erro; vazio ou nulo significa validação aprovada. Exemplo:", - "manual": "Manual", - "map": "Mapa", - "json": "JSON", - "use12Hours": "Usar Formato de 12 Horas", - "hourStep": "Passo de Hora", - "minuteStep": "Passo de Minuto", - "secondStep": "Passo de Segundo", - "minDate": "Data Mínima", - "maxDate": "Data Máxima", - "minTime": "Tempo Mínimo", - "maxTime": "Tempo Máximo", - "type": "Tipo", - "showLabel": "Mostrar Etiqueta", - "showHeader": "Mostrar Cabeçalho", - "showBody": "Mostrar Corpo", - "showSider": "Mostrar Lateral", - "innerSider": "Lateral Interna", - "showFooter": "Mostrar Rodapé", - "maskClosable": "Clique Fora para Fechar", - "showMask": "Mostrar Máscara", - "textOverflow": "Overflow de Texto", - "scrollbar": "Mostrar Barras de Rolagem", - "siderScrollbar": "Mostrar Barras de Rolagem na Lateral", - "siderRight": "Mostrar lateral à Direita", - "siderWidth": "Largura da Lateral", - "siderWidthTooltip": "A largura da lateral suporta porcentagens (%) e pixels (px).", - "siderCollapsedWidth": "Largura da Lateral Recolhida", - "siderCollapsedWidthTooltip": "A largura recolhida da lateral suporta porcentagens (%) e pixels (px).", - "siderCollapsible": "Lateral Recolhível", - "siderCollapsed": "Lateral Recolhida", - "contentScrollbar": "Mostrar Barras de Rolagem no Conteúdo", - "appID": "ID do Aplicativo", - "showApp": "Mostrar um Aplicativo na área de conteúdo", - "showAppTooltip": "Você pode exibir aplicativos inteiros na área de conteúdo. Por favor, observe que para Módulos não oferecemos suporte a Entradas, Saídas, Eventos e Métodos.", - "baseURL": "URL Base da API", - "horizontal": "Horizontal", - "minHorizontalWidth": "Largura Horizontal Mínima", - "component": "Identificadores de Componentes Próprios", - "className": "Nome da Classe CSS", - "dataTestId": "ID Individual", - "horizontalGridCells": "Células de grade horizontal", - "showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", - "showVerticalScrollbar": "Mostrar barra de rolagem vertical", - }, - "autoHeightProp": { - ...en.autoHeightProp, - "auto": "Auto", - "fixed": "Fixa" - }, - "textOverflowProp": { - ...en.textOverflowProp, - "ellipsis": "Mouseover", - "wrap": "Quebra de Linha" - }, - "labelProp": { - ...en.labelProp, - "text": "Rótulo", - "tooltip": "Dica de Ferramenta", - "position": "Posição", - "left": "Esquerda", - "right": "Direita", - "top": "Topo", - "align": "Alinhamento", - "width": "Largura", - "widthTooltip": "A largura do rótulo suporta porcentagens (%) e pixels (px)." - }, - // third part - "eventHandler": { - ...en.eventHandler, - "eventHandlers": "Manipuladores de Eventos", - "emptyEventHandlers": "Nenhum Manipulador de Eventos", - "incomplete": "Seleção Incompleta", - "inlineEventTitle": "Em {eventName}", - "event": "Evento", - "action": "Ação", - "noSelect": "Nenhuma Seleção", - "runQuery": "Executar uma Consulta de Dados", - "selectQuery": "Selecionar Consulta de Dados", - "controlComp": "Controlar um Componente", - "runScript": "Executar JavaScript", - "runScriptPlaceHolder": "Escreva o Código Aqui", - "component": "Componente", - "method": "Método", - "setTempState": "Definir um Valor de Estado Temporário", - "state": "Estado", - "triggerModuleEvent": "Disparar um Evento de Módulo", - "moduleEvent": "Evento de Módulo", - "goToApp": "Ir para Outro Aplicativo", - "queryParams": "Parâmetros de Consulta", - "hashParams": "Parâmetros de Hash", - "showNotification": "Mostrar uma Notificação", - "text": "Texto", - "level": "Nível", - "duration": "Duração", - "notifyDurationTooltip": "A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). A duração máxima é de {max} segundos", - "goToURL": "Abrir uma URL", - "openInNewTab": "Abrir em Nova Guia", - "copyToClipboard": "Copiar um valor para a Área de Transferência", - "copyToClipboardValue": "Valor", - "export": "Exportar Dados", - "exportNoFileType": "Nenhuma Seleção (Opcional)", - "fileName": "Nome do Arquivo", - "fileNameTooltip": "Inclua a extensão para especificar o tipo de arquivo, por exemplo, 'imagem.png'", - "fileType": "Tipo de Arquivo", - "condition": "Executar Somente Quando...", - "conditionTooltip": "Execute o manipulador de eventos apenas quando esta condição for avaliada como 'verdadeira'", - "debounce": "Atraso para", - "throttle": "Controlar a frequência para", - "slowdownTooltip": "Use atraso ou controle de frequência para controlar a frequência dos gatilhos de ação. A unidade de tempo pode ser 'ms' (milissegundo, padrão) ou 's' (segundo).", - "notHandledError": "Não Manipulado", - "currentApp": "Atual", - "inputEventHandlers": "Manipuladores de Eventos de Entrada", - "inputEventHandlersDesc": "Manipuladores de Eventos relacionados à Entrada do Usuário", - "buttonEventHandlers": "Manipuladores de Eventos de Botão", - "buttonEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques de Botão", - "changeEventHandlers": "Manipuladores de Eventos de Mudança", - "changeEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Valor", - "editedEventHandlers": "Manipuladores de Eventos de Edição", - "editedEventHandlersDesc": "Manipuladores de Eventos relacionados ao estado editado de Elementos", - "clickEventHandlers": "Manipuladores de Eventos de Clique", - "clickEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques", - "keyDownEventHandlers": "Manipuladores de Eventos de Pressionar Tecla", - "keyDownEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Pressionar Tecla", - "checkboxEventHandlers": "Manipuladores de Eventos de Caixa de Seleção", - "checkboxEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Caixa de Seleção", - "dragEventHandlers": "Manipuladores de Eventos de Arrastar", - "dragEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Arrastar e Soltar", - "elementEventHandlers": "Manipuladores de Eventos de Elemento", - "elementEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos Genéricos de Elemento de Dados", - "mediaEventHandlers": "Manipuladores de Eventos de Mídia", - "mediaEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mídia", - "scannerEventHandlers": "Manipuladores de Eventos de Scanner", - "scannerEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Scanner", - "chartEventHandlers": "Manipuladores de Eventos de Gráfico", - "chartEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Gráfico", - "geoMapEventHandlers": "Manipuladores de Eventos de Mapa Geográfico", - "geoMapEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mapa Geográfico", - "stepEventHandlers": "Manipuladores de Eventos de Etapa", - "stepEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Interface de Etapa", - "shareEventHandlers": "Manipuladores de Eventos de Compartilhamento", - "shareEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Compartilhamento", - "selectEventHandlers": "Manipuladores de Eventos de Seleção", - "selectEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Seleção", - "meetingEventHandlers": "Manipuladores de Eventos de Reunião", - "meetingEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Reunião", - "collaborationEventHandlers": "Manipuladores de Eventos de Colaboração", - "collaborationEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Colaboração", - "set": "Definir", - "clear": "Limpar", - "reset": "Redefinir", - "messageType": "Tipo de Mensagem", - "placement": "Posição", - "description": "Descrição" - }, - "event": { - ...en.event, - "submit": "Enviar", - "submitDesc": "Dispara ao Enviar", - "change": "Alterar", - "changeDesc": "Dispara nas Mudanças de Valor", - "focus": "Foco", - "focusDesc": "Dispara no Foco", - "blur": "Desfocar", - "blurDesc": "Dispara no Desfoque", - "click": "Clique", - "clickDesc": "Dispara no Clique", - "doubleClick": "Clique Duplo", - "doubleClickDesc": "Dispara no Duplo Clique", - "rightClick": "Clique Direito", - "rightClickDesc": "Dispara no Clique Direito", - "keyDown": "Tecla Pressionada", - "keyDownDesc": "Dispara na Pressão de Tecla", - "select": "Selecionar", - "selectDesc": "Dispara na Seleção", - "checked": "Marcado", - "checkedDesc": "Dispara quando uma caixa de seleção está Marcada", - "unchecked": "Desmarcado", - "uncheckedDesc": "Dispara quando uma caixa de seleção está Desmarcada", - "drag": "Arrastar", - "dragDesc": "Dispara no Arrastar", - "drop": "Soltar", - "dropDesc": "Dispara no Soltar", - "open": "Abrir", - "openDesc": "Dispara na Abertura", - "mute": "Mudo", - "muteDesc": "Dispara no Silêncio de um Microfone", - "unmute": "Ativar Som", - "unmuteDesc": "Dispara no Ativar Som de um Microfone", - "showCamera": "Mostrar Câmera", - "showCameraDesc": "Dispara quando Mostrar Câmera está ligado", - "hideCamera": "Ocultar Câmera", - "hideCameraDesc": "Dispara quando Mostrar Câmera está desligado", - "shareScreen": "Compartilhar Tela", - "shareScreenDesc": "Dispara ao Compartilhar Tela", - "shareScreenEnd": "Fim do Compartilhamento de Tela", - "shareScreenEndDesc": "Dispara ao Finalizar o Compartilhamento de Tela", - "shareControl": "Compartilhar Controle", - "shareControlDesc": "Dispara ao Compartilhar Controle", - "shareControlEnd": "Fim do Compartilhamento de Controle", - "shareControlEndDesc": "Dispara ao Finalizar o Compartilhamento de Controle", - "shareContent": "Compartilhar Conteúdo", - "shareContentDesc": "Dispara ao Compartilhar Conteúdo", - "shareContentEnd": "Fim do Compartilhamento de Conteúdo", - "shareContentEndDesc": "Dispara ao Finalizar o Compartilhamento de Conteúdo", - "stopShare": "Parar Compartilhamento", - "stopShareDesc": "Dispara ao Parar o Compartilhamento", - "meetingStart": "Início da Reunião", - "meetingStartDesc": "Dispara no Início da Reunião", - "meetingEnd": "Fim da Reunião", - "meetingEndDesc": "Dispara no Fim da Reunião", - "meetingJoin": "Participar da Reunião", - "meetingJoinDesc": "Dispara ao Participar da Reunião", - "meetingLeave": "Sair da Reunião", - "meetingLeaveDesc": "Dispara ao Sair da Reunião", - "play": "Reproduzir", - "playDesc": "Dispara na Reprodução", - "pause": "Pausar", - "pauseDesc": "Dispara na Pausa", - "ended": "Finalizado", - "endedDesc": "Dispara ao Finalizar", - "step": "Passo", - "stepDesc": "Dispara no Passo", - "next": "Próximo", - "nextDesc": "Dispara no Próximo", - "finished": "Finalizado", - "finishedDesc": "Dispara ao Finalizar", - "saved": "Salvo", - "savedDesc": "Dispara quando um elemento é Salvo", - "edited": "Editado", - "editedDesc": "Dispara quando um elemento é Editado", - "geoMapMove": "Mover Mapa Geográfico", - "geoMapMoveDesc": "Dispara quando os Usuários movem o Mapa Geográfico", - "geoMapZoom": "Zoom no Mapa Geográfico", - "geoMapZoomDesc": "Dispara quando os Usuários dão Zoom no Mapa Geográfico", - "geoMapSelect": "Seleção no Mapa Geográfico", - "geoMapSelectDesc": "Dispara quando os Usuários selecionam um Elemento no Mapa Geográfico", - "scannerSuccess": "Sucesso do Scanner", - "scannerSuccessDesc": "Dispara quando um Scanner escaneia com sucesso", - "scannerError": "Erro do Scanner", - "scannerErrorDesc": "Dispara quando um Scanner falha ao escanear", - "chartZoom": "Zoom no Gráfico", - "chartZoomDesc": "Dispara no Zoom do Gráfico", - "chartHover": "Hover no Gráfico", - "chartHoverDesc": "Dispara no Hover do Gráfico", - "chartSelect": "Seleção no Gráfico", - "chartSelectDesc": "Dispara na Seleção do Gráfico", - "chartDeselect": "Desseleção no Gráfico", - "chartDeselectDesc": "Dispara na Desseleção do Gráfico", - "close": "Fechar", - "closeDesc": "Dispara no Fechar", - "parse": "Analisar", - "parseDesc": "Dispara na Análise", - "success": "Sucesso", - "successDesc": "Dispara no Sucesso", - "delete": "Excluir", - "deleteDesc": "Dispara na Exclusão", - "mention": "Menção", - "mentionDesc": "Dispara na Menção", - "search": "Pesquisar", - "searchDesc": "Dispara na Pesquisa", - "selectedChange": "Alteração de Seleção", - "selectedChangeDesc": "Dispara na Alteração de Seleção", - "clickExtra": "Clique na Ação", - "clickExtraDesc": "Dispara no Clique em Elemento Extra", - "start": "Iniciar", - "startDesc": "Dispara no Início", - "resume": "Continuar", - "resumeDesc": "Dispara ao Continuar", - "countdown": "Contagem Regressiva", - "countdownDesc": "Dispara quando a contagem regressiva termina", - "reset": "Reiniciar", - "resetDesc": "Dispara ao reiniciar o temporizador", - "refresh": "Atualizar", - "refreshDesc": "Dispara ao atualizar" - }, - "themeDetail": { - ...en.themeDetail, - "primary": "Cor da Marca", - "primaryDesc": "Cor primária padrão usada pela maioria dos componentes", - "textDark": "Cor do Texto Escuro", - "textDarkDesc": "Usado quando a cor de fundo é clara", - "textLight": "Cor do Texto Claro", - "textLightDesc": "Usado quando a cor de fundo é escura", - "canvas": "Cor do Fundo", - "canvasDesc": "Cor de fundo padrão do aplicativo", - "primarySurface": "Cor do Contêiner", - "primarySurfaceDesc": "Cor de fundo padrão para componentes como tabelas", - "borderRadius": "Raio da Borda", - "borderRadiusDesc": "Raio da borda padrão usado pela maioria dos componentes", - "chart": "Estilo do Gráfico", - "chartDesc": "Entrada para Echarts", - "echartsJson": "Tema JSON", - "margin": "Margem", - "marginDesc": "Margem padrão normalmente usada para a maioria dos componentes", - "padding": "Preenchimento", - "paddingDesc": "Preenchimento padrão normalmente usado para a maioria dos componentes", - "containerHeaderPadding": "Preenchimento do Cabeçalho", - "containerheaderpaddingDesc": "Preenchimento padrão do cabeçalho normalmente usado para a maioria dos componentes", - "gridColumns": "Colunas da Grade", - "gridColumnsDesc": "Número padrão de colunas normalmente usado para a maioria dos contêineres" - }, - // fourth part - "style": { - ...en.style, - "resetTooltip": "Redefinir estilos. Limpe o campo de entrada para redefinir um estilo individual.", - "textColor": "Cor do Texto", - "contrastText": "Cor do Texto de Contraste", - "generated": "Gerado", - "customize": "Personalizar", - "staticText": "Texto Estático", - "accent": "Acento", - "validate": "Mensagem de Validação", - "border": "Cor da Borda", - "borderRadius": "Raio da Borda", - "borderWidth": "Largura da Borda", - "borderStyle": "Estilo da Borda", - "background": "Fundo", - "headerBackground": "Fundo do Cabeçalho", - "siderBackground": "Fundo do Sider", - "footerBackground": "Fundo do Rodapé", - "fill": "Preenchimento", - "track": "Rastreamento", - "links": "Links", - "thumb": "Polegar", - "thumbBorder": "Borda do Polegar", - "checked": "Marcado", - "unchecked": "Desmarcado", - "handle": "Alça", - "tags": "Tags", - "tagsText": "Texto das Tags", - "multiIcon": "Ícone de Seleção Múltipla", - "tabText": "Texto da Aba", - "tabAccent": "Acento da Aba", - "checkedBackground": "Fundo do Marcado", - "uncheckedBackground": "Fundo do Desmarcado", - "uncheckedBorder": "Borda do Desmarcado", - "indicatorBackground": "Fundo do Indicador", - "tableCellText": "Texto da Célula", - "selectedRowBackground": "Fundo da Linha Selecionada", - "hoverRowBackground": "Fundo da Linha em Destaque", - "hoverBackground": "Fundo em Destaque", - "textTransform": "Transformação de Texto", - "textDecoration": "Decoração do Texto", - "alternateRowBackground": "Fundo Alternado da Linha", - "tableHeaderBackground": "Fundo do Cabeçalho da Tabela", - "tableHeaderText": "Texto do Cabeçalho da Tabela", - "toolbarBackground": "Fundo da Barra de Ferramentas", - "toolbarText": "Texto da Barra de Ferramentas", - "pen": "Caneta", - "footerIcon": "Ícone do Rodapé", - "tips": "Dicas", - "margin": "Margem", - "padding": "Preenchimento", - "marginLeft": "Margem à Esquerda", - "marginRight": "Margem à Direita", - "marginTop": "Margem Superior", - "marginBottom": "Margem Inferior", - "containerHeaderPadding": "Preenchimento do Cabeçalho do Contêiner", - "containerFooterPadding": "Preenchimento do Rodapé do Contêiner", - "containerSiderPadding": "Preenchimento do Sider do Contêiner", - "containerBodyPadding": "Preenchimento do Corpo do Contêiner", - "minWidth": "Largura Mínima", - "aspectRatio": "Proporção", - "text": "Texto", - "textSize": "Tamanho do Texto", - "textWeight": "Peso do Texto", - "fontFamily": "Família da Fonte", - "fontStyle": "Estilo da Fonte", - "backgroundImage": "Imagem de Fundo", - "backgroundImageRepeat": "Repetição da Imagem de Fundo", - "backgroundImageSize": "Tamanho da Imagem de Fundo", - "backgroundImagePosition": "Posição da Imagem de Fundo", - "backgroundImageOrigin": "Origem da Imagem de Fundo", - "headerBackgroundImage": "Imagem de Fundo do Cabeçalho", - "headerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Cabeçalho", - "headerBackgroundImageSize": "Tamanho da Imagem de Fundo do Cabeçalho", - "headerBackgroundImagePosition": "Posição da Imagem de Fundo do Cabeçalho", - "headerBackgroundImageOrigin": "Origem da Imagem de Fundo do Cabeçalho", - "footerBackgroundImage": "Imagem de Fundo do Rodapé", - "footerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Rodapé", - "footerBackgroundImageSize": "Tamanho da Imagem de Fundo do Rodapé", - "footerBackgroundImagePosition": "Posição da Imagem de Fundo do Rodapé", - "footerBackgroundImageOrigin": "Origem da Imagem de Fundo do Rodapé" - }, - "export": { - ...en.export, - "hiddenDesc": "Se verdadeiro, o componente está oculto", - "disabledDesc": "Se verdadeiro, o componente está desativado e não interativo", - "visibleDesc": "Se verdadeiro, o componente é visível", - "inputValueDesc": "Valor atual da entrada", - "invalidDesc": "Indica se o valor é inválido", - "placeholderDesc": "Texto de espaço reservado quando nenhum valor está definido", - "requiredDesc": "Se verdadeiro, um valor válido é necessário", - "submitDesc": "Enviar Formulário", - "richTextEditorValueDesc": "Valor atual do Editor", - "richTextEditorReadOnlyDesc": "Se verdadeiro, o Editor está somente leitura", - "richTextEditorHideToolBarDesc": "Se verdadeiro, a barra de ferramentas está oculta", - "jsonEditorDesc": "Dados JSON atuais", - "sliderValueDesc": "Valor atualmente selecionado", - "sliderMaxValueDesc": "Valor máximo do controle deslizante", - "sliderMinValueDesc": "Valor mínimo do controle deslizante", - "sliderStartDesc": "Valor do ponto inicial selecionado", - "sliderEndDesc": "Valor do ponto final selecionado", - "ratingValueDesc": "Classificação atualmente selecionada", - "ratingMaxDesc": "Valor máximo de classificação", - "datePickerValueDesc": "Data atualmente selecionada", - "datePickerFormattedValueDesc": "Data selecionada formatada", - "datePickerTimestampDesc": "Carimbo de data/hora da data selecionada", - "dateRangeStartDesc": "Data de início do intervalo", - "dateRangeEndDesc": "Data de término do intervalo", - "dateRangeStartTimestampDesc": "Carimbo de data/hora da data de início", - "dateRangeEndTimestampDesc": "Carimbo de data/hora da data de término", - "dateRangeFormattedValueDesc": "Intervalo de datas formatado", - "dateRangeFormattedStartValueDesc": "Data de início formatada", - "dateRangeFormattedEndValueDesc": "Data de término formatada", - "timePickerValueDesc": "Hora atualmente selecionada", - "timePickerFormattedValueDesc": "Hora selecionada formatada", - "timeRangeStartDesc": "Hora de início do intervalo", - "timeRangeEndDesc": "Hora de término do intervalo", - "timeRangeFormattedValueDesc": "Intervalo de horas formatado", - "timeRangeFormattedStartValueDesc": "Hora de início formatada", - "timeRangeFormattedEndValueDesc": "Hora de término formatada" - }, - "validationDesc": { - ...en.validationDesc, - "email": "Por favor, insira um endereço de e-mail válido", - "url": "Por favor, insira uma URL válida", - "regex": "Por favor, corresponda ao padrão especificado", - "maxLength": "Muitos caracteres, atual: {length}, máximo: {maxLength}", - "minLength": "Não há caracteres suficientes, atual: {length}, mínimo: {minLength}", - "maxValue": "O valor excede o máximo, atual: {value}, máximo: {max}", - "minValue": "O valor está abaixo do mínimo, atual: {value}, mínimo: {min}", - "maxTime": "O tempo excede o máximo, atual: {time}, máximo: {maxTime}", - "minTime": "O tempo está abaixo do mínimo, atual: {time}, mínimo: {minTime}", - "maxDate": "A data excede o máximo, atual: {date}, máximo: {maxDate}", - "minDate": "A data está abaixo do mínimo, atual: {date}, mínimo: {minDate}" - }, - // fifth part - "query": { - ...en.query, - "noQueries": "Não há consultas de dados disponíveis.", - "queryTutorialButton": "Ver {value} documentos", - "datasource": "Suas Fontes de Dados", - "newDatasource": "Nova Fonte de Dados", - "generalTab": "Geral", - "notificationTab": "Notificação", - "advancedTab": "Avançado", - "showFailNotification": "Mostrar Notificação em Caso de Falha", - "failCondition": "Condições de Falha", - "failConditionTooltip1": "Personalize as condições de falha e as notificações correspondentes.", - "failConditionTooltip2": "Se qualquer condição retornar verdadeira, a consulta será marcada como falha e acionará a notificação correspondente.", - "showSuccessNotification": "Mostrar Notificação em Caso de Sucesso", - "successMessageLabel": "Mensagem de Sucesso", - "successMessage": "Consulta Bem-sucedida", - "notifyDuration": "Duração", - "notifyDurationTooltip": "Duração da notificação. A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). O valor padrão é {default}s. O máximo é {max}s.", - "successMessageWithName": "{name} consulta bem-sucedida", - "failMessageWithName": "{name} consulta falhou: {result}", - "showConfirmationModal": "Mostrar Modal de Confirmação Antes de Executar", - "confirmationMessageLabel": "Mensagem de Confirmação", - "confirmationMessage": "Tem certeza de que deseja executar esta consulta de dados?", - "newQuery": "Nova Consulta de Dados", - "newFolder": "Nova Pasta", - "recentlyUsed": "Recentemente Utilizados", - "folder": "Pasta", - "folderNotEmpty": "A pasta não está vazia", - "dataResponder": "Respondedor de Dados", - "tempState": "Estado Temporário", - "transformer": "Transformador", - "quickRestAPI": "Consulta REST", - "quickStreamAPI": "Consulta de Fluxo", - "quickGraphql": "Consulta GraphQL", - "lowcoderAPI": "API Lowcoder", - "executeJSCode": "Executar Código JavaScript", - "importFromQueryLibrary": "Importar da Biblioteca de Consultas", - "importFromFile": "Importar de Arquivo", - "triggerType": "Acionado quando...", - "triggerTypeAuto": "Alterações de Entrada ou ao Carregar a Página", - "triggerTypePageLoad": "Quando a Aplicação (Página) carrega", - "triggerTypeManual": "Somente quando acionado manualmente", - "chooseDataSource": "Escolha uma Fonte de Dados", - "method": "Método", - "updateExceptionDataSourceTitle": "Atualizar Fonte de Dados com Falha", - "updateExceptionDataSourceContent": "Atualize a seguinte consulta com a mesma fonte de dados com falha:", - "update": "Atualizar", - "disablePreparedStatement": "Desativar Declarações Preparadas", - "disablePreparedStatementTooltip": "Desativar declarações preparadas pode gerar SQL dinâmico, mas aumenta o risco de injeção de SQL", - "timeout": "Tempo Limite Após", - "timeoutTooltip": "Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor padrão: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", - "periodic": "Executar Esta Consulta de Dados Periodicamente", - "periodicTime": "Período", - "periodicTimeTooltip": "Período entre execuções sucessivas. Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor mínimo: 100ms. A execução periódica é desativada para valores abaixo de 100ms. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", - "cancelPrevious": "Ignorar Resultados de Execuções Anteriores Não Concluídas", - "cancelPreviousTooltip": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se elas não foram concluídas, e essas execuções ignoradas não acionarão a lista de eventos da consulta.", - "dataSourceStatusError": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se as execuções anteriores não foram concluídas, e as execuções ignoradas não acionarão a lista de eventos da consulta.", - "success": "Sucesso", - "fail": "Falha", - "successDesc": "Acionado Quando a Execução é Bem-sucedida", - "failDesc": "Acionado Quando a Execução Falha", - "fixedDelayError": "Consulta Não Executada", - "execSuccess": "Execução Bem-sucedida", - "execFail": "Execução Falhou", - "execIgnored": "Os Resultados Dessa Consulta Foram Ignorados", - "deleteSuccessMessage": "Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer", - "dataExportDesc": "Dados Obtidos pela Consulta Atual", - "codeExportDesc": "Código de Status da Consulta Atual", - "successExportDesc": "Se a Consulta Atual Foi Executada com Sucesso", - "messageExportDesc": "Informação Retornada pela Consulta Atual", - "extraExportDesc": "Outros Dados na Consulta Atual", - "isFetchingExportDesc": "A Consulta Atual Está na Requisição", - "runTimeExportDesc": "Tempo de Execução da Consulta Atual (ms)", - "latestEndTimeExportDesc": "Última Hora de Execução", - "triggerTypeExportDesc": "Tipo de Gatilho", - "chooseResource": "Escolha um Recurso", - "createDataSource": "Criar uma Nova Fonte de Dados", - "editDataSource": "Editar", - "datasourceName": "Nome", - "datasourceNameRuleMessage": "Por Favor, Insira um Nome para a Fonte de Dados", - "generalSetting": "Configurações Gerais", - "advancedSetting": "Configurações Avançadas", - "port": "Porta", - "portRequiredMessage": "Por Favor, Insira uma Porta", - "portErrorMessage": "Por Favor, Insira uma Porta Correta", - "connectionType": "Tipo de Conexão", - "regular": "Regular", - "host": "Host", - "hostRequiredMessage": "Por Favor, Insira um Nome de Domínio de Host ou Endereço IP", - "userName": "Nome de Usuário", - "password": "Senha", - "encryptedServer": "-------- Criptografado no Lado do Servidor --------", - "uriRequiredMessage": "Por Favor, Insira uma URI", - "urlRequiredMessage": "Por Favor, Insira uma URL", - "uriErrorMessage": "Por Favor, Insira uma URI Correta", - "urlErrorMessage": "Por Favor, Insira uma URL Correta", - "httpRequiredMessage": "Por Favor, Insira http:// ou https://", - "databaseName": "Nome do Banco de Dados", - "databaseNameRequiredMessage": "Por Favor, Insira um Nome de Banco de Dados", - "useSSL": "Usar SSL", - "userNameRequiredMessage": "Por Favor, Insira Seu Nome", - "passwordRequiredMessage": "Por Favor, Insira Sua Senha", - "authentication": "Autenticação", - "authenticationType": "Tipo de Autenticação", - "sslCertVerificationType": "Verificação de Certificado SSL", - "sslCertVerificationTypeDefault": "Verificar Certificado CA", - "sslCertVerificationTypeSelf": "Verificar Certificado Autoassinado", - "sslCertVerificationTypeDisabled": "Desativado", - "selfSignedCert": "Certificado Autoassinado", - "selfSignedCertRequireMsg": "Por Favor, Insira Seu Certificado", - "enableTurnOffPreparedStatement": "Ativar Alternância de Declarações Preparadas para Consultas", - "enableTurnOffPreparedStatementTooltip": "Você pode ativar ou desativar declarações preparadas na guia Avançado da consulta", - "serviceName": "Nome do Serviço", - "serviceNameRequiredMessage": "Por Favor, Insira o Nome do Seu Serviço", - "useSID": "Usar SID", - "connectSuccessfully": "Conexão Bem-sucedida", - "saveSuccessfully": "Salvo com Sucesso", - "database": "Banco de Dados", - "cloudHosting": "Lowcoder hospedado na nuvem não pode acessar serviços locais usando 127.0.0.1 ou localhost. Tente se conectar a fontes de dados de rede pública ou use um proxy reverso para serviços privados.", - "notCloudHosting": "Para implantação hospedada em contêineres, o Lowcoder usa redes bridge, portanto, 127.0.0.1 e localhost são inválidos para endereços de host. Para acessar fontes de dados de máquina local, consulte", - "howToAccessHostDocLink": "Como Acessar API/Banco de Dados do Host", - "returnList": "Retornar", - "chooseDatasourceType": "Escolha o Tipo de Fonte de Dados", - "viewDocuments": "Ver Documentos", - "testConnection": "Testar Conexão", - "save": "Salvar", - "whitelist": "Lista de Permissões", - "whitelistTooltip": "Adicione os endereços IP do Lowcoder à lista de permissões da sua fonte de dados conforme necessário.", - "address": "Endereço: ", - "nameExists": "O nome {name} já existe", - "jsQueryDocLink": "Sobre Consulta JavaScript", - "dynamicDataSourceConfigLoadingText": "Carregando configuração extra da fonte de dados...", - "dynamicDataSourceConfigErrText": "Falha ao carregar configuração extra da fonte de dados.", - "retry": "Tentar Novamente" - }, - // sixth part - "sqlQuery": { - ...en.sqlQuery, - "keyValuePairs": "Pares Chave-Valor", - "object": "Objeto", - "allowMultiModify": "Permitir Modificação Múltipla de Linhas", - "allowMultiModifyTooltip": "Se selecionado, todas as linhas que atendem às condições serão operadas. Caso contrário, apenas a primeira linha que atende às condições será operada.", - "array": "Arranjo", - "insertList": "Inserir Lista", - "insertListTooltip": "Valores inseridos quando eles não existem", - "filterRule": "Regra de Filtro", - "updateList": "Atualizar Lista", - "updateListTooltip": "Valores atualizados conforme existem podem ser substituídos pelos mesmos valores da lista de inserção", - "sqlMode": "Modo SQL", - "guiMode": "Modo GUI", - "operation": "Operação", - "insert": "Inserir", - "upsert": "Inserir, mas Atualizar em Caso de Conflito", - "update": "Atualizar", - "delete": "Excluir", - "bulkInsert": "Inserção em Lote", - "bulkUpdate": "Atualização em Lote", - "table": "Tabela", - "primaryKeyColumn": "Coluna Chave Primária" - }, - "EsQuery": { - ...en.EsQuery, - "rawCommand": "Comando Bruto", - "queryTutorialButton": "Ver Documentos da API do Elasticsearch", - "request": "Pedido" - }, - "googleSheets": { - ...en.googleSheets, - "rowIndex": "Índice da Linha", - "spreadsheetId": "ID da Planilha", - "sheetName": "Nome da Planilha", - "readData": "Ler Dados", - "appendData": "Anexar Linha", - "updateData": "Atualizar Linha", - "deleteData": "Excluir Linha", - "clearData": "Limpar Linha", - "serviceAccountRequireMessage": "Por favor, insira sua Conta de Serviço", - "ASC": "ASC", - "DESC": "DESC", - "sort": "Ordenar", - "sortPlaceholder": "Nome" - }, - "queryLibrary": { - ...en.queryLibrary, - "export": "Exportar para JSON", - "noInput": "A Consulta Atual Não Possui Entrada", - "inputName": "Nome", - "inputDesc": "Descrição", - "emptyInputs": "Sem Entradas", - "clickToAdd": "Adicionar", - "chooseQuery": "Escolher Consulta", - "viewQuery": "Visualizar Consulta", - "chooseVersion": "Escolher Versão", - "latest": "Mais Recente", - "publish": "Publicar", - "historyVersion": "Versão Histórica", - "deleteQueryLabel": "Excluir Consulta", - "deleteQueryContent": "A consulta não pode ser recuperada após a exclusão. Excluir a consulta?", - "run": "Executar", - "readOnly": "Somente Leitura", - "exit": "Sair", - "recoverAppSnapshotContent": "Restaurar a consulta atual para a versão {version}", - "searchPlaceholder": "Pesquisar Consulta", - "allQuery": "Todas as Consultas", - "deleteQueryTitle": "Excluir Consulta", - "unnamed": "Sem Nome", - "publishNewVersion": "Publicar Nova Versão", - "publishSuccess": "Publicado com Sucesso", - "version": "Versão", - "desc": "Descrição" - }, - "snowflake": { - ...en.snowflake, - "accountIdentifierTooltip": "Ver ", - "extParamsTooltip": "Configurar Parâmetros de Conexão Adicionais" - }, - "lowcoderQuery": { - ...en.lowcoderQuery, - "queryOrgUsers": "Consultar Usuários do Espaço de Trabalho" - }, - "redisQuery": { - ...en.redisQuery, - "rawCommand": "Comando Bruto", - "command": "Comando", - "queryTutorial": "Visualizar Documentos de Comandos do Redis" - }, - "httpQuery": { - ...en.httpQuery, - "bodyFormDataTooltip": "Se {type} for selecionado, o formato do valor deve ser {object}. Exemplo: {example}", - "text": "Texto", - "file": "Arquivo", - "extraBodyTooltip": "As chaves em Corpo Extra serão anexadas ao corpo com tipos JSON ou de Dados de Formulário", - "forwardCookies": "Encaminhar Cookies", - "forwardAllCookies": "Encaminhar Todos os Cookies" - }, - "smtpQuery": { - ...en.smtpQuery, - "attachment": "Anexo", - "attachmentTooltip": "Pode ser usado com o componente de envio de arquivo, os dados precisam ser convertidos para:", - "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", - "sender": "Remetente", - "recipient": "Destinatário", - "carbonCopy": "Cópia Carbono", - "blindCarbonCopy": "Cópia Carbono Oculta", - "subject": "Assunto", - "content": "Conteúdo", - "contentTooltip": "Suporta texto de entrada ou HTML" - }, - // seventh part - "uiCompCategory": { - ...en.uiCompCategory, - "dashboards": "Dashboards e Relatórios", - "layout": "Layout e Navegação", - "forms": "Coleta de Dados e Formulários", - "collaboration": "Reuniões e Colaboração", - "projectmanagement": "Gerenciamento de Projetos", - "scheduling": "Calendário e Agendamento", - "documents": "Gerenciamento de Documentos e Arquivos", - "itemHandling": "Manipulação de Itens e Assinaturas", - "multimedia": "Multimídia e Animação", - "integration": "Integração e Extensão" - }, - "uiComp": { - ...en.uiComp, - "autoCompleteCompName": "Auto Completar", - "autoCompleteCompDesc": "Um campo de entrada que fornece sugestões enquanto você digita, melhorando a experiência e a precisão do usuário.", - "autoCompleteCompKeywords": "sugestões, auto completar, digitação, entrada", - "inputCompName": "Entrada de Texto", - "inputCompDesc": "Um campo de entrada de texto básico que permite aos usuários inserir e editar texto.", - "inputCompKeywords": "texto, entrada, campo, editar", - "textAreaCompName": "Área de Texto", - "textAreaCompDesc": "Uma entrada de texto de várias linhas para conteúdo de formulário mais longo, como comentários ou descrições.", - "textAreaCompKeywords": "multilinha, área de texto, entrada, texto", - "passwordCompName": "Senha", - "passwordCompDesc": "Um campo seguro para entrada de senha, ocultando os caracteres para privacidade.", - "passwordCompKeywords": "senha, segurança, entrada, oculto", - "richTextEditorCompName": "Editor de Texto Rico", - "richTextEditorCompDesc": "Um editor de texto avançado que oferece opções de formatação ricas, como negrito, itálico e listas.", - "richTextEditorCompKeywords": "editor, texto, formatação, conteúdo rico", - "numberInputCompName": "Entrada Numérica", - "numberInputCompDesc": "Um campo específico para entrada numérica, com controles para incrementar e decrementar valores.", - "numberInputCompKeywords": "número, entrada, incrementar, decrementar", - "sliderCompName": "Controle Deslizante", - "sliderCompDesc": "Um componente gráfico deslizante para selecionar um valor ou intervalo dentro de uma escala definida.", - "sliderCompKeywords": "controle deslizante, intervalo, entrada, gráfico", - "rangeSliderCompName": "Controle Deslizante de Faixa", - "rangeSliderCompDesc": "Um controle deslizante com dois manipuladores para selecionar um intervalo de valores, útil para filtrar ou definir limites.", - "rangeSliderCompKeywords": "faixa, controle deslizante, manipulador duplo, filtro", - "ratingCompName": "Avaliação", - "ratingCompDesc": "Um componente para capturar avaliações do usuário, exibidas como estrelas.", - "ratingCompKeywords": "avaliação, estrelas, feedback, entrada", - "switchCompName": "Interruptor", - "switchCompDesc": "Um interruptor de alternância para decisões de ligar/desligar ou sim/não.", - "switchCompKeywords": "alternar, interruptor, ligar/desligar, controle", - "selectCompName": "Selecionar", - "selectCompDesc": "Um menu suspenso para selecionar de uma lista de opções.", - "selectCompKeywords": "menu suspenso, selecionar, opções, menu", - "multiSelectCompName": "Seleção Múltipla", - "multiSelectCompDesc": "Um componente que permite a seleção de vários itens em uma lista suspensa.", - "multiSelectCompKeywords": "seleção múltipla, múltiplo, menu suspenso, escolhas", - "cascaderCompName": "Cascata", - "cascaderCompDesc": "Um menu suspenso multinível para seleção de dados hierárquicos, como selecionar uma localização.", - "cascaderCompKeywords": "cascata, hierárquico, menu suspenso, níveis", - "checkboxCompName": "Caixa de Seleção", - "checkboxCompDesc": "Uma caixa de seleção padrão para opções que podem ser selecionadas ou desmarcadas.", - "checkboxCompKeywords": "caixa de seleção, opções, selecionar, alternar", - "radioCompName": "Botão de Rádio", - "radioCompDesc": "Botões de rádio para selecionar uma opção de um conjunto, onde apenas uma escolha é permitida.", - "radioCompKeywords": "botão de rádio, seleção, escolha única", - "segmentedControlCompName": "Controle Segmentado", - "segmentedControlCompDesc": "Um controle com opções segmentadas para alternar rapidamente entre várias escolhas.", - "segmentedControlCompKeywords": "segmentado, controle, alternar, opções", - "stepControlCompName": "Controle de Etapas", - "stepControlCompDesc": "Um controle com opções de etapas para oferecer etapas guiadas visualmente para aplicativos como formulários ou assistentes.", - "stepControlCompKeywords": "etapas, controle, alternar, opções", - "fileUploadCompName": "Upload de Arquivo", - "fileUploadCompDesc": "Um componente para fazer upload de arquivos, com suporte para arrastar e soltar e seleção de arquivos.", - "fileUploadCompKeywords": "arquivo, upload, arrastar e soltar, selecionar", - "dateCompName": "Data", - "dateCompDesc": "Um componente seletor de datas para selecionar datas a partir de uma interface de calendário.", - "dateCompKeywords": "data, seletor, calendário, selecionar", - "dateRangeCompName": "Intervalo de Datas", - "dateRangeCompDesc": "Um componente para selecionar um intervalo de datas, útil para sistemas de reserva ou filtros.", - "dateRangeCompKeywords": "intervalo de datas, selecionar, reserva, filtro", - "timeCompName": "Hora", - "timeCompDesc": "Um componente de seleção de hora para escolher horas específicas do dia.", - "timeCompKeywords": "hora, seletor, selecionar, relógio", - "timeRangeCompName": "Intervalo de Horário", - "timeRangeCompDesc": "Um componente para selecionar um intervalo de tempo, frequentemente usado em aplicativos de agendamento.", - "timeRangeCompKeywords": "intervalo de tempo, selecionar, agendamento, duração", - "buttonCompName": "Botão de Formulário", - "buttonCompDesc": "Um componente de botão versátil para enviar formulários, acionar ações ou navegar.", - "buttonCompKeywords": "botão, enviar, ação, navegar", - "meetingControlCompName": "Botão de Ícone", - "meetingCompDesc": "Um botão para controlar funções como iniciar, encerrar, silenciar ou compartilhar.", - "meetingCompKeywords": "controle, botão, iniciar, encerrar", - "linkCompName": "Link", - "linkCompDesc": "Um componente de exibição de hyperlink para navegação ou vinculação a recursos externos.", - "linkCompKeywords": "link, hyperlink, navegação, externo", - "scannerCompName": "Scanner", - "scannerCompDesc": "Um componente para digitalizar códigos de barras, códigos QR e outros dados semelhantes.", - "scannerCompKeywords": "scanner, código de barras, código QR, digitalizar", - "dropdownCompName": "Menu Suspenso", - "dropdownCompDesc": "Um menu suspenso para exibir de forma compacta uma lista de opções.", - "dropdownCompKeywords": "menu suspenso, menu, opções, selecionar", - "toggleButtonCompName": "Botão de Alternância", - "toggleButtonCompDesc": "Um botão que pode alternar entre dois estados ou opções.", - "toggleButtonCompKeywords": "alternar, botão, mudar, estado", - "textCompName": "Exibição de Texto", - "textCompDesc": "Um componente simples para exibir conteúdo de texto estático ou dinâmico, incluindo formatação Markdown.", - "textCompKeywords": "texto, exibição, estático, dinâmico", - "tableCompName": "Tabela", - "tableCompDesc": "Um componente de tabela rico para exibir dados em um formato de tabela estruturada, com opções de ordenação e filtragem, exibição de dados em árvore e linhas extensíveis.", - "tableCompKeywords": "tabela, dados, ordenação, filtragem", - "imageCompName": "Imagem", - "imageCompDesc": "Um componente para exibir imagens, com suporte a vários formatos baseados em URI ou dados Base64.", - "imageCompKeywords": "imagem, exibição, mídia, Base64", - "progressCompName": "Progresso", - "progressCompDesc": "Um indicador visual de progresso, geralmente usado para mostrar o status de conclusão de uma tarefa.", - "progressCompKeywords": "progresso, indicador, status, tarefa", - "progressCircleCompName": "Círculo de Progresso", - "progressCircleCompDesc": "Um indicador de progresso circular, frequentemente usado para estados de carregamento ou tarefas com limite de tempo.", - "progressCircleCompKeywords": "círculo, progresso, indicador, carregamento", - "fileViewerCompName": "Visualizador de Arquivos", - "fileViewerCompDesc": "Um componente para visualizar vários tipos de arquivos, incluindo documentos e imagens.", - "fileViewerCompKeywords": "arquivo, visualizador, documento, imagem", - "dividerCompName": "Divisor", - "dividerCompDesc": "Um componente visual de divisão, usado para separar conteúdo ou seções em um layout.", - "dividerCompKeywords": "divisor, separador, layout, design", - "qrCodeCompName": "Código QR", - "qrCodeCompDesc": "Um componente para exibir códigos QR, útil para digitalização rápida e transferência de informações.", - "qrCodeCompKeywords": "código QR, digitalização, código de barras, informação", - "formCompName": "Formulário", - "formCompDesc": "Um componente contêiner para construir formulários estruturados com vários tipos de entrada.", - "formCompKeywords": "formulário, entrada, contêiner, estrutura", - "jsonSchemaFormCompName": "Formulário de Esquema JSON", - "jsonSchemaFormCompDesc": "Um componente de formulário dinâmico gerado com base em um esquema JSON.", - "jsonSchemaFormCompKeywords": "JSON, esquema, formulário, dinâmico", - "containerCompName": "Contêiner", - "containerCompDesc": "Um contêiner de uso geral para layout e organização de elementos de IU.", - "containerCompKeywords": "contêiner, layout, organização, IU", - "floatTextContainerCompName": "Contêiner de Texto Flutuante", - "floatTextContainerCompDesc": "Componente de Contêiner de Texto Flutuante", - "floatTextContainerCompKeywords": "contêiner, layout, texto, fluxo", - "collapsibleContainerCompName": "Contêiner Dobrável", - "collapsibleContainerCompDesc": "Um contêiner que pode ser expandido ou recolhido, ideal para gerenciar a visibilidade do conteúdo.", - "collapsibleContainerCompKeywords": "dobrável, contêiner, expandir, recolher", - "tabbedContainerCompName": "Contêiner com Abas", - "tabbedContainerCompDesc": "Um contêiner com navegação em abas para organizar o conteúdo em painéis separados.", - "tabbedContainerCompKeywords": "com abas, contêiner, navegação, painéis", - "pageLayoutCompName": "Layout de Página", - "pageLayoutCompDesc": "Um contêiner que oferece criar um layout com áreas de cabeçalho, lateral, rodapé e conteúdo principal", - "pageLayoutCompKeywords": "layout, contêiner, navegação, páginas", - "modalCompName": "Modal", - "modalCompDesc": "Um componente de modal pop-up para exibir conteúdo, alertas ou formulários em foco.", - "modalCompKeywords": "modal, pop-up, alerta, formulário", - "listViewCompName": "Visualização de Lista", - "gridCompName": "Grade", - "gridCompDesc": "Um componente de grade flexível para criar layouts estruturados com linhas e colunas como uma extensão ao componente de Visualização de Lista.", - "gridCompKeywords": "grade, layout, linhas, colunas", - "navigationCompName": "Navegação", - "navigationCompDesc": "Um componente de navegação para criar menus, trilhas de navegação ou abas para navegação no site.", - "navigationCompKeywords": "navegação, menu, trilhas de navegação, abas", - "iframeCompName": "IFrame", - "iframeCompDesc": "Um componente de quadro inline para incorporar páginas da web e aplicativos externos ou conteúdo dentro do aplicativo.", - "iframeCompKeywords": "iframe, incorporar, página da web, conteúdo", - "customCompName": "Componente Personalizado", - "customCompDesc": "Um componente flexível e programável para criar elementos de IU exclusivos e definidos pelo usuário, adaptados às suas necessidades específicas.", - "customCompKeywords": "personalizado, definido pelo usuário, flexível, programável", - "moduleCompName": "Módulo", - "moduleCompDesc": "Use Módulos para criar Micro-Apps projetadas para encapsular funcionalidades ou recursos específicos. Os módulos podem então ser incorporados e reutilizados em todos os aplicativos.", - "moduleCompKeywords": "módulo, micro-app, funcionalidade, reutilizável", - "jsonExplorerCompName": "Explorador JSON", - "jsonExplorerCompDesc": "Um componente para explorar visualmente e interagir com estruturas de dados JSON.", - "jsonExplorerCompKeywords": "JSON, explorador, dados, estrutura", - "jsonEditorCompName": "Editor JSON", - "jsonEditorCompDesc": "Um componente editor para criar e modificar dados JSON com validação e destaque de sintaxe.", - "jsonEditorCompKeywords": "JSON, editor, modificar, validar", - "treeCompName": "Árvore", - "treeCompDesc": "Um componente de estrutura de árvore para exibir dados hierárquicos, como sistemas de arquivos ou organogramas.", - "treeCompKeywords": "árvore, hierárquico, dados, estrutura", - "treeSelectCompName": "Seleção de Árvore", - "treeSelectCompDesc": "Um componente de seleção que apresenta opções em um formato de árvore hierárquica, permitindo seleções organizadas e aninhadas.", - "treeSelectCompKeywords": "árvore, selecionar, hierárquica, aninhada", - "audioCompName": "Áudio", - "audioCompDesc": "Um componente para incorporar conteúdo de áudio, com controles para reprodução e ajuste de volume.", - "audioCompKeywords": "áudio, reprodução, som, música", - "videoCompName": "Vídeo", - "videoCompDesc": "Um componente multimídia para incorporar e reproduzir conteúdo de vídeo, com suporte para vários formatos.", - "videoCompKeywords": "vídeo, multimídia, reprodução, incorporar", - "drawerCompName": "Gaveta", - "drawerCompDesc": "Um componente de painel deslizante que pode ser usado para navegação adicional ou exibição de conteúdo, geralmente surgindo da borda da tela.", - "drawerCompKeywords": "gaveta, deslizante, painel, navegação", - "chartCompName": "Gráfico", - "chartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e diagramas.", - "chartCompKeywords": "gráfico, diagrama, dados, visualização", - "carouselCompName": "Carrossel de Imagens", - "carouselCompDesc": "Um componente de carrossel rotativo para exibir imagens, banners ou slides de conteúdo.", - "carouselCompKeywords": "carrossel, imagens, rotação, destaque", - "imageEditorCompName": "Editor de Imagens", - "imageEditorCompDesc": "Um componente interativo para edição e manipulação de imagens, oferecendo várias ferramentas e filtros.", - "imageEditorCompKeywords": "imagem, editor, manipular, ferramentas", - "mermaidCompName": "Gráfico Mermaid", - "mermaidCompDesc": "Um componente para renderizar diagramas complexos e fluxogramas com base na sintaxe Mermaid.", - "mermaidCompKeywords": "mermaid, gráficos, diagramas, fluxogramas", - "calendarCompName": "Calendário", - "calendarCompDesc": "Um componente de calendário para exibir datas e eventos, com opções para visualizações mensais, semanais ou diárias.", - "calendarCompKeywords": "calendário, datas, eventos, agendamento", - "signatureCompName": "Assinatura", - "signatureCompDesc": "Um componente para capturar assinaturas digitais, útil para processos de aprovação e verificação.", - "signatureCompKeywords": "assinatura, digital, aprovação, verificação", - "jsonLottieCompName": "Animação Lottie", - "jsonLottieCompDesc": "Um componente para exibir animações Lottie, fornecendo animações leves e escaláveis com base em dados JSON.", - "jsonLottieCompKeywords": "lottie, animação, JSON, escalável", - "timelineCompName": "Linha do Tempo", - "timelineCompDesc": "Um componente para exibir eventos ou ações em uma ordem cronológica, representados visualmente ao longo de uma linha do tempo linear.", - "timelineCompKeywords": "linha do tempo, eventos, cronológico, histórico", - "commentCompName": "Comentário", - "commentCompDesc": "Um componente para adicionar e exibir comentários de usuários, com suporte a respostas em tópicos e interação do usuário.", - "commentCompKeywords": "comentário, discussão, interação do usuário, feedback", - "mentionCompName": "Menção", - "mentionCompDesc": "Um componente que suporta mencionar usuários ou tags dentro do conteúdo de texto, geralmente usado em redes sociais ou plataformas colaborativas.", - "mentionCompKeywords": "menção, tag, usuário, redes sociais", - "responsiveLayoutCompName": "Layout Responsivo", - "responsiveLayoutCompDesc": "Um componente de layout projetado para se adaptar e responder a diferentes tamanhos de tela e dispositivos, garantindo uma experiência do usuário consistente.", - "responsiveLayoutCompKeywords": "responsivo, layout, adaptar, tamanho da tela", - "iconCompName": "Ícones", - "iconCompDesc": "Use vários ícones para melhorar o apelo visual e a experiência do usuário do seu aplicativo.", - "iconCompKeywords": "ícones, pictogramas, símbolos, formas", - "tourCompName": "Tour", - "tourCompDesc": "Um tour de produto para orientar os usuários.", - "tourCompKeywords": "tour, tour do produto, passo a passo, passo a passo interativo", - "hillchartCompName": "Gráfico de Hill", - "hillchartCompDesc": "Um componente de visualização para exibir dados de estado de gerenciamento de projetos em um formato de gráfico de hill.", - "hillchartCompKeywords": "gerenciamento de projetos, gráfico de hill, visualização, dados", - "openLayersGeoMapCompName": "Openlayers Geomap", - "openLayersGeoMapCompDesc": "Um componente para exibir mapas interativos usando OpenLayers, com suporte a várias camadas e recursos de mapa.", - "openLayersGeoMapCompKeywords": "openlayers, geomapa, interativo, camadas de mapa", - "chartsGeoMapCompName": "Gráficos de Mapas Geográficos", - "chartsGeoMapCompDesc": "Um componente para visualizar dados geográficos em mapas interativos com gráficos dinâmicos.", - "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualização, dados geográficos", - "bpmnEditorCompName": "Editor BPMN", - "bpmnEditorCompDesc": "Um componente para visualizar, criar e editar diagramas BPMN, com suporte a vários elementos e recursos BPMN.", - "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, fluxos de trabalho", - "turnstileCaptchaCompName": "Captcha de Catraca", - "turnstileCaptchaCompDesc": "Um componente de captcha para verificar usuários contra bots.", - "turnstileCaptchaCompKeywords": "captcha, verificação, identidade, segurança", - "pivotTableCompName": "Tabela Dinâmica", - "pivotTableCompDesc": "Uma ferramenta de sumarização e análise de dados para organizar e agregar dados em um formato de tabela.", - "pivotTableCompKeywords": "tabela dinâmica, dados, análise, agregação", - "funnelChartCompName": "Gráfico de Funil", - "funnelChartCompDesc": "Uma ferramenta de visualização para exibir a redução progressiva de dados à medida que passam por estágios.", - "funnelChartCompKeywords": "gráfico de funil, vendas, conversões, processo", - "gaugeChartCompName": "Gráfico de Medição", - "gaugeChartCompDesc": "Um gráfico que exibe dados como uma leitura em um mostrador, útil para indicar o status ou o nível de algo.", - "gaugeChartCompKeywords": "gráfico de medição, métricas, desempenho, status", - "sankeyChartCompName": "Gráfico Sankey", - "sankeyChartCompDesc": "Um diagrama de fluxo no qual a largura das setas é proporcional à taxa de fluxo, usado para mostrar transferências de energia, material ou custo.", - "sankeyChartCompKeywords": "gráfico sankey, fluxo, energia, custos", - "candleStickChartCompName": "Gráfico de Candlestick", - "candleStickChartCompDesc": "Um estilo de gráfico financeiro usado para descrever movimentos de preços de um título, derivado ou moeda.", - "candleStickChartCompKeywords": "gráfico de candlestick, ações, negociação, finanças", - "radarChartCompName": "Gráfico Radar", - "radarChartCompDesc": "Um método gráfico de exibir dados multivariados na forma de um gráfico bidimensional de três ou mais variáveis quantitativas.", - "radarChartCompKeywords": "gráfico radar, multivariado, análise de desempenho", - "heatmapChartCompName": "Gráfico de Mapa de Calor", - "heatmapChartCompDesc": "Uma representação gráfica de dados onde os valores individuais são representados como cores.", - "heatmapChartCompKeywords": "mapa de calor, visualização de dados, intensidade", - "graphChartCompName": "Gráfico de Rede", - "graphChartCompDesc": "Um diagrama que representa uma rede de nós conectados por arestas, útil para mostrar interconexões e relacionamentos.", - "graphChartCompKeywords": "gráfico de rede, redes, relacionamentos, nós", - "treeChartCompName": "Gráfico de Árvore", - "treeChartCompDesc": "Um diagrama que representa visualmente a hierarquia em uma estrutura semelhante a uma árvore, mostrando relacionamentos entre vários nós.", - "treeChartCompKeywords": "gráfico de árvore, hierarquia, organizacional", - "treemapChartCompName": "Gráfico de Árvore de Mosaico", - "treemapChartCompDesc": "Um gráfico que usa retângulos aninhados para representar dados hierárquicos proporcionalmente.", - "treemapChartCompKeywords": "treemap, hierarquia, visualização de dados", - "sunburstChartCompName": "Gráfico Sunburst", - "sunburstChartCompDesc": "Uma técnica de visualização radial que preenche o espaço e ilustra relações hierárquicas por meio de camadas de um círculo.", - "sunburstChartCompKeywords": "gráfico sunburst, radial, hierarquia", - "themeriverChartCompName": "Gráfico de Rio Temático", - "themeriverChartCompDesc": "Uma visualização que se assemelha a um gráfico de fluxo e mostra mudanças em um conjunto de dados ao longo do tempo e entre categorias.", - "themeriverChartCompKeywords": "rio temático, séries temporais, tendências", - "basicChartCompName": "Gráfico Básico", - "basicChartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e gráficos.", - "basicChartCompKeywords": "gráfico, gráfico, dados, visualização", - "shapeCompName": "Formas", - "shapeCompDesc": "Uma coleção de formas geométricas para uso em diagramas, ilustrações e visualizações.", - "shapeCompKeywords": "formas, geométrico, diagramas, ilustrações", - // by mousheng - "colorPickerCompName": "Seletor de Cores", - "colorPickerCompDesc": "Seleção intuitiva de cores para personalização.", - "colorPickerCompKeywords": "cor, seletor, personalização", - "floatButtonCompName": "Botão Flutuante", - "floatButtonCompDesc": "Um botão de ação flutuante para ações proeminentes e rápidas.", - "floatButtonCompKeywords": "botão flutuante, ação, rápida", - "avatarCompName": "Avatar", - "avatarCompDesc": "Exibe avatares de usuário ou imagens de perfil para identificação personalizada.", - "avatarCompKeywords": "avatar, imagem de perfil, identificação de usuário", - "avatarGroupCompName": "Grupo de Avatares", - "avatarGroupCompDesc": "Um grupo de avatares para representar vários usuários ou entidades de forma compacta e visualmente atraente.", - "avatarGroupCompKeywords": "grupo de avatares, usuários, entidades, compacto", - "transferName": "Transferência", - "transferDesc": "Facilita a transferência de dados entre duas listas com funcionalidade de arrastar e soltar.", - "transferKeywords": "transferência, dados, arrastar e soltar", - "cardCompName": "Cartão de Conteúdo", - "cardCompDesc": "Um componente de cartão para exibir informações ou conteúdo organizado de maneira estruturada.", - "cardCompKeywords": "cartão, informações, conteúdo, exibição", - "timerCompName": "Temporizador", - "timerCompDesc": "Um componente que exibe uma contagem regressiva ou tempo decorrido, útil para rastrear durações e prazos.", - "timerCompKeywords": "temporizador, contagem regressiva, tempo decorrido, rastreamento, durações, prazos", - }, - // eighth part - "comp": { - ...en.comp, - "menuViewDocs": "Ver Documentação", - "menuViewPlayground": "Ver Playground Interativo", - "menuUpgradeToLatest": "Atualizar para a Última Versão", - "nameNotEmpty": "Não Pode Estar Vazio", - "nameRegex": "Deve Começar com uma Letra e Conter Apenas Letras, Dígitos e Underlines (_)", - "nameJSKeyword": "Não Pode Ser uma Palavra-chave JavaScript", - "nameGlobalVariable": "Não Pode Ser Nome de Variável Global", - "nameExists": "O Nome {name} Já Existe", - "getLatestVersionMetaError": "Falha ao Obter a Última Versão, Por Favor, Tente Mais Tarde.", - "needNotUpgrade": "A Versão Atual Já Está Atualizada.", - "compNotFoundInLatestVersion": "O Componente Atual Não Foi Encontrado na Última Versão.", - "upgradeSuccess": "Atualizado com Sucesso para a Última Versão.", - "searchProp": "Buscar" - }, - "jsonSchemaForm": { - ...en.jsonSchemaForm, - "retry": "Tentar Novamente", - "resetAfterSubmit": "Redefinir Após Envio Bem-sucedido do Formulário", - "jsonSchema": "Esquema JSON", - "uiSchema": "Esquema UI", - "schemaTooltip": "Ver", - "defaultData": "Dados do Formulário Pré-preenchidos", - "dataDesc": "Dados Atuais do Formulário", - "required": "Obrigatório", - "maximum": "O Valor Máximo é {value}", - "minimum": "O Valor Mínimo é {value}", - "exclusiveMaximum": "Deve Ser Menor Que {value}", - "exclusiveMinimum": "Deve Ser Maior Que {value}", - "multipleOf": "Deve Ser Múltiplo de {value}", - "minLength": "Pelo Menos {value} Caracteres", - "maxLength": "No Máximo {value} Caracteres", - "pattern": "Deve Coincidir com o Padrão {value}", - "format": "Deve Coincidir com o Formato {value}" - }, - "select": { - ...en.select, - "inputValueDesc": "Valor de Pesquisa de Entrada" - }, - "customComp": { - ...en.customComp, - "text": "É um bom dia.", - "triggerQuery": "Disparar Consulta", - "updateData": "Atualizar Dados", - "updateText": "Eu também estou de bom humor para desenvolver agora meu próprio componente personalizado com o Lowcoder!", - "sdkGlobalVarName": "Lowcoder", - "data": "Dados que você deseja passar para o componente personalizado", - "code": "Código do seu componente personalizado" - }, - "tree": { - ...en.tree, - "placeholder": "Por favor, selecione", - "selectType": "Selecionar Tipo", - "noSelect": "Sem Seleção", - "singleSelect": "Seleção Única", - "multiSelect": "Seleção Múltipla", - "checkbox": "Caixa de Seleção", - "checkedStrategy": "Estratégia de Verificação", - "showAll": "Todos os Nós", - "showParent": "Somente Nós Pai", - "showChild": "Somente Nós Filho", - "autoExpandParent": "Expandir Nó Pai Automaticamente", - "checkStrictly": "Verificar Estritamente", - "checkStrictlyTooltip": "Verifique o TreeNode Precisamente; O TreeNode Pai e os TreeNode Filhos não estão Associados", - "treeData": "Dados da Árvore", - "treeDataDesc": "Dados da Árvore Atuais", - "value": "Valores Padrão", - "valueDesc": "Valores Atuais", - "expanded": "Valores Expandidos", - "expandedDesc": "Valores Atuais Expandidos", - "defaultExpandAll": "Expandir Todos os Nós por Padrão", - "showLine": "Mostrar Linha", - "showLeafIcon": "Mostrar Ícone de Folha", - "treeDataAsia": "Ásia", - "treeDataChina": "China", - "treeDataBeijing": "Pequim", - "treeDataShanghai": "Xangai", - "treeDataJapan": "Japão", - "treeDataEurope": "Europa", - "treeDataEngland": "Inglaterra", - "treeDataFrance": "França", - "treeDataGermany": "Alemanha", - "treeDataNorthAmerica": "América do Norte", - "helpLabel": "Rótulo do Nó", - "helpValue": "Valor Único do Nó na Árvore", - "helpChildren": "Nós Filhos", - "helpDisabled": "Desativa o Nó", - "helpSelectable": "Se o Nó é Selecionável (Tipo de Seleção Única/Múltipla)", - "helpCheckable": "Se exibir a Caixa de Seleção (Tipo de Caixa de Seleção)", - "helpDisableCheckbox": "Desativa a Caixa de Seleção (Tipo de Caixa de Seleção)" - }, - "moduleContainer": { - ...en.moduleContainer, - "eventTest": "Teste de Evento", - "methodTest": "Teste de Método", - "inputTest": "Teste de Entrada" - }, - "password": { - ...en.password, - "label": "Senha", - "placeholder": "Por favor, digite a senha", - "conformLabel": "Confirmar Senha", - "conformPlaceholder": "Por favor, confirme a senha", - "visibilityToggle": "Mostrar Alternância de Visibilidade" - }, - "richTextEditor": { - ...en.richTextEditor, - "toolbar": "Personalizar Barra de Ferramentas", - "toolbarDescription": "Você pode personalizar a barra de ferramentas. Consulte: https://quilljs.com/docs/modules/toolbar/ para obter mais detalhes.", - "placeholder": "Por favor, insira...", - "hideToolbar": "Ocultar Barra de Ferramentas", - "content": "Conteúdo", - "title": "Título", - "save": "Salvar", - "link": "Link: ", - "edit": "Editar", - "remove": "Remover", - "defaultValue": "Conteúdo Base" - }, - // mousheng - "floatButton": { - ...en.floatButton, - "custom": "Personalizado", - "backTop": "Voltar ao Topo", - "buttonType": "Tipo de Botão", - "buttonShape": "Formato do Botão", - "square": "Quadrado", - "circle": "Círculo", - "description": "Descrição", - "badge": "Distintivo", - "primary": "Principal", - "default": "Padrão", - "buttonTheme": "Tema do Botão", - "badgeColor": "Cor do Distintivo", - "dot": "Distintivo como Ponto", - "hidden": "Oculto", - "visibilityHeight": "Altura de Visibilidade", - "visibilityHeightDesc": "Role até uma certa altura antes de exibir o botão de retorno ao topo, 0 é sempre exibido. O modo de edição não pode ser visualizado em tempo real" - }, - "colorPicker": { - ...en.colorPicker, - "trigger": "Disparadores de Eventos", - "click": "Clique", - "hover": "Passar o Mouse", - "disabledAlpha": "Desativar Seleção de Alfa", - "recommended": "Recomendado", - "showPresets": "Mostrar Predefinições de Cor" - }, - "badge": { - ...en.badge, - "showCloseButton": "Mostrar botão de fechar", - "Type": "Tipo de insígnia", - "Count": "Contagem da insígnia", - "Size": "Tamanho da insígnia", - "SizeDefault": "padrão", - "SizeSmall": "Pequeno", - "overflowCount": "Contagem de overflow", - "Title": "Título da insígnia", - "dot": "Ponto", - "number": "Número", - "tooltip": "Dica de ferramenta" - }, - "gantt": { - ...en.gantt, - "key": "Chave", - "title": "Título", - "project": "Projeto", - "from": "De", - "minute": "Minuto", - "hour": "Hora", - "day": "Dia", - "week": "Semana", - "month": "Mês", - "year": "Ano", - "quarter": "Trimestre", - "tasks": "Dados de Tarefas", - "level": "Nível", - "durationUnit": "Unidade de Duração", - "duration": "Duração", - "hourScalesFormat": "%F %d", - "dayScalesFormat": "%d %M", - "weekScalesFormat1": "%d %M", - "weekScalesFormat2": "%j %D", - "monthScalesFormat1": "%F, %Y", - "monthScalesFormat2": "Semana #%W", - "quarterScalesFormat": "{y} Q{i}", - "yearScalesFormat": "%Y", - "tree": "árvore", - "ColumnsData": "Dados das Colunas", - "allowChangeTask": "Clique duplo na Tarefa", - "allowAddLink": "Adicionar Link", - "allowLinkDelete": "Excluir Link", - "allowProgressDrag": "Arrastar Progresso", - "allowTaskDrag": "Arrastar Tarefa", - "links": "Dados de Links", - "dataFormat": "Formato de Análise de Dados", - "handleDateChange": "Lidar com a Mudança de Tarefa", - "handleTaskChange": "Lidar com a Mudança de Tarefa", - "handleAddedLink": "Lidar com Link Adicionado", - "handleDeletedLink": "Lidar com Link Excluído", - "handleProgressDrag": "Lidar com Arrastar de Progresso", - "showTodayMark": "Mostrar Marcação de Hoje", - "resize": "Redimensionar", - "otherEvents": "Outros Eventos", - "openAllBranchInit": "Abrir Todos os Ramos Iniciais", - "date": "Data", - "text": "Texto", - "progress": "progresso", - "width": "Largura", - "ColumnsType": "Tipo de Colunas", - "currentId": "ID Atual", - "currentObject": "Objeto Atual", - "addTask": "Adicionar Tarefa(s)", - "taskObject": "Objeto de Tarefa", - "taskObjectDesc": "Suporta arrays de Tarefas ou único Objeto de Tarefa", - "linkID": "ID do Link", - "linkIDDesc": "Suporta arrays de IDs de Links ou único Objeto de Link", - "removeTask": "Remover Tarefa", - "taskID": "ID da Tarefa", - "taskIDDesc": "Suporta arrays de IDs ou único ID", - "add": "Adicionar", - "expandingAll": "Expandindo Todos", - "collapsingAll": "Recolhendo Todos", - "addTaskFail": "A adição de tarefas falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", - "addLinkFail": "A adição de link falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", - "removeTaskFail": "A remoção de tarefas falhou, e o tipo de parâmetro deve ser string ou array de strings", - "removeLinkFail": "A remoção de links falhou, e o tipo de parâmetro deve ser array de strings", - "otherData": "Outros Dados{i}", - "projectText": "Projeto #{i}", - "taskText": "Tarefa #{i}", - "AutoCalculateProgress": "Calcular Progresso Automático", - "allowProjectDrag": "Permitir Arrastar Projeto", - "showColumns": "Mostrar Colunas", - "exportToPNG": "Exportar para PNG", - "exportToPDF": "Exportar para PDF", - "exportToExcel": "Exportar para Excel", - "progressLowBg": "Cor de Fundo Baixo", - "progressLowColor": "Cor de Progresso Baixo", - "progressMediumBg": "Cor de Fundo Médio", - "progressMediumColor": "Cor de Progresso Médio", - "progressHighBg": "Cor de Fundo Alto", - "progressHighColor": "Cor de Progresso Alto", - "progresscompletedColor": "Cor de Progresso Concluído", - "lowProgressLine": "Linha de Progresso Baixo", - "mediumProgressLine": "Linha de Progresso Médio", - "SegmentedColor": "Cor Segmentada de Progresso", - "link_f2s": "Link F2S", - "link_s2s": "Link S2S", - "link_f2f": "Link F2F", - "link_s2f": "Link S2F", - "weekScale": "#{i}, ", - "showHolidays": "Mostrar Feriados", - "StatutoryHolidays": "Dados de Feriados Legais", - "skipOffTime": "Ocultar Tempo Não Trabalhado", - "weekend": "Fim de Semana", - "weekendSelected": "Fim de Semana Selecionado", - "noWorkHour": "Sem Horário de Trabalho", - "noWorkHourSelected": "Sem Horário de Trabalho Selecionado", - "showWorkTimes": "Mostrar Horários de Trabalho", - "workTimeData": "Dados de Horário de Trabalho", - "fit": "ajustar", - "manual": "manual", - "scaleMode": "Modo de Escala", - "startDate": "Data de Início", - "endDate": "Data de Término", - "addLink": "Adicionar Link(s)", - "linkObject": "Objeto de Link", - "removeLink": "Remover Link", - "allowSort": "Permitir Ordenação", - "showTask": "Mostrar Tarefa", - "toggleOnDBClick": "Alternar no Duplo Clique", - "sortOptions": "Opções de Classificação Inicial", - "rowHeight": "Altura da Linha", - "showTooltip": "Mostrar Dica de Ferramenta", - "tooltipTemplates": "Modelo de Dica de Ferramenta", - "allowResizeTask": "Permitir Redimensionamento de Tarefa", - "projectColor": "Cor do Projeto", - "projectColorBg": "Cor de Fundo do Projeto", - "taskColor": "Cor da Tarefa", - "taskColorBg": "Cor de Fundo da Tarefa", - "milestoneColor": "Cor do Marco", - "highlightOverdue": "Destacar Atrasado", - "overdueColor": "Cor de Atrasado", - "overdueBgColor": "Cor de Fundo de Atrasado", - "projectCompletedBgColor": "Cor de Fundo de Projeto Concluído", - "projectCompletedColor": "Cor de Projeto Concluído", - "tag": "tag", - "tasksTableWidth": "Largura da Tabela de Tarefas", - "allowErrorMessage": "Permitir Mensagem de Erro", - "currentProjectId": "ID do Projeto Atual", - "currentProjectLastTask": "Última Tarefa do Projeto Atual", - "onlySortProject": "Apenas Ordenar Projeto" - }, - "transfer": { - ...en.transfer, - "sourceTitle": "Dados de Origem", - "targetTitle": "Dados de Destino", - "content": "Conteúdo {i}", - "items": "Itens", - "targetKeys": "Chaves Selecionadas", - "oneWay": "De Um Sentido", - "pagination": "Paginação", - "pageSize": "Tamanho da Página", - "allowSearch": "Permitir Busca", - "selectedKeys": "Chaves Selecionadas", - "searchInfo": "Informações de Busca", - "targerObject": "Objeto de Destino" - }, - "avatarGroup": { - ...en.avatarGroup, - "maxCount": "Contagem Máxima", - "avatarSize": "Tamanho do Avatar", - "autoColor": "Cor Automática", - "alignment": "Alinhamento", - "currentAvatar": "Avatar Atual" - }, - "avatarComp": { - ...en.avatarComp, - "square": "quadrado", - "circle": "círculo", - "icon": "ícone", - "shape": "forma", - "counts": "Insignia", - "title": "título", - "src": "src", - "avatarCompTooltip": "A prioridade de exibição é: imagem -> caracteres -> ícone. Dependendo do que estiver disponível primeiro.", - "iconSize": "Tamanho do Ícone", - "avatarBackground": "Fundo", - "label": "Rótulo", - "caption": "Legenda", - "labelPosition": "Posição do Rótulo", - "alignmentPosition": "alinhamento", - "text": "Texto", - "enableDropDown": "Ativar menu suspenso", - "containerBackground": "Fundo do Contêiner" - }, - "card": { - ...en.card, - "cardType": "Tipo de Cartão", - "common": "comum", - "custom": "personalizado", - "default": "padrão", - "small": "pequeno", - "showTitle": "Mostrar título", - "title": "Título", - "more": "Mais", - "extraTitle": "Chamada para Ação", - "CoverImg": "Imagem de Capa", - "imgSrc": "Fonte da Imagem", - "showMeta": "Mostrar Conteúdo", - "metaTitle": "Título do Conteúdo", - "metaDesc": "Descrição do Conteúdo", - "imgHeight": "Altura da Imagem", - "showActionIcon": "Mostrar Opções de Ação", - "actionOptions": "Opções de Ação", - "menu": "Menu {i}", - "hoverColor": "Cor ao Passar o Mouse", - "IconColor": "Cor do Ícone", - "titleSize": "Tamanho do Título" - }, - "timer": { - ...en.timer, - "timerState": "Estado do Temporizador", - "elapsedTime": "Tempo Decorrido", - "timer": "Temporizador", - "countdown": "Contagem Regressiva", - "defaultValue": "Valor Padrão", - "timerType": "Tipo de Temporizador", - "start": "Iniciar", - "pause": "Pausar", - "resume": "Continuar", - "reset": "Redefinir", - "startPause": "Iniciar/Pausar", - "hideButton": "Ocultar Botão", - "fontColor": "Cor da Fonte" - }, - // ninth part - "iconComp": { - ...en.iconComp, - "icon": "Ícone", - "autoSize": "Tamanho Automático do Ícone", - "iconSize": "Tamanho do Ícone" - }, - "numberInput": { - ...en.numberInput, - "formatter": "Formatar", - "precision": "Precisão", - "allowNull": "Permitir Valor Nulo", - "thousandsSeparator": "Mostrar Separador de Milhares", - "controls": "Mostrar Botões de Incremento/Decremento", - "step": "Passo", - "standard": "Padrão", - "percent": "Porcentagem" - }, - "slider": { - ...en.slider, - "step": "Passo", - "stepTooltip": "O valor deve ser maior que 0 e divisível por (Máx-Mín)", - "vertical": "Orientação Vertical" - }, - "rating": { - ...en.rating, - "max": "Avaliação Máxima", - "allowHalf": "Permitir Meias Pontuações" - }, - "optionsControl": { - ...en.optionsControl, - "optionList": "Opções", - "option": "Opção", - "optionI": "Opção {i}", - "viewDocs": "Ver Documentação", - "tip": "As variáveis 'item' e 'i' representam o valor e o índice de cada item na matriz de dados" - }, - "stepOptionsControl": { - ...en.stepOptionsControl, - "value": "Valor / Chave", - "valueTooltip": "O valor do passo deve ser um número. Para o primeiro passo, deve ser igual ao valor inicial. Os números devem estar em ordem consistente e ascendente.", - "title": "Título do Passo", - "subTitle": "Subtítulo do Passo", - "description": "Descrição do Passo", - "status": "Status do Passo", - "icon": "Ícone do Passo", - }, - "step": { - ...en.step, - "initialValue": "Começar Números em", - "initialValueTooltip": "Onde começar a numeração visual. Deve ser 1 ou maior.", - "valueDesc": "Valor Atual", - "size": "Tamanho dos Passos", - "sizeSmall": "Pequeno", - "sizeDefault": "Padrão", - "percent": "Percentual dos Passos", - "type": "Tipo de Passos", - "typeDefault": "Padrão", - "typeNavigation": "Navegação", - "typeInline": "Em Linha", - "direction": "Direção dos Passos", - "directionVertical": "Vertical", - "directionHorizontal": "Horizontal", - "labelPlacement": "Posição do Rótulo dos Passos", - "status": "Status dos Passos", - "statusWait": "Aguardar", - "statusProcess": "Processando", - "statusFinish": "Concluído", - "statusError": "Erro", - "showDots": "Mostrar Pontos em Vez de Símbolos", - "showIcons": "Mostrar Ícones em Vez de Símbolos", - "responsive": "Responsivo", - "selectable": "Selecionável", - }, - "coloredTagOptionControl": { - ...en.coloredTagOptionControl, - "tag": "Texto da Tag", - "color": "Cor", - "icon": "Ícone", - }, - "radio": { - ...en.radio, - "options": "Opções", - "horizontal": "Horizontal", - "horizontalTooltip": "O Layout Horizontal se Ajusta Quando Acaba o Espaço", - "vertical": "Vertical", - "verticalTooltip": "O Layout Vertical é Exibido em uma Única Coluna", - "autoColumns": "Coluna Automática", - "autoColumnsTooltip": "A Coluna Automática Rearranja a Ordem Automaticamente Conforme o Espaço Permitido e Exibe em Múltiplas Colunas" - }, - "cascader": { - ...en.cascader, - "options": "Dados JSON para mostrar seleções em cascata", - }, - "selectInput": { - ...en.selectInput, - "valueDesc": "Valor Atualmente Selecionado", - "selectedIndexDesc": "O Índice do Valor Atualmente Selecionado, ou -1 se Nenhum Valor Estiver Selecionado", - "selectedLabelDesc": "O Rótulo do Valor Atualmente Selecionado" - }, - "file": { - ...en.file, - "typeErrorMsg": "Deve Ser um Número com uma Unidade de Tamanho de Arquivo Válida, ou um Número sem Unidade de Tamanho de Arquivo.", - "fileEmptyErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Está Vazio.", - "fileSizeExceedErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Excede o Limite.", - "minSize": "Tamanho Mínimo", - "minSizeTooltip": "O Tamanho Mínimo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", - "maxSize": "Tamanho Máximo", - "maxSizeTooltip": "O Tamanho Máximo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", - "single": "Único", - "multiple": "Múltiplo", - "directory": "Diretório", - "upload": "Procurar", - "fileType": "Tipos de Arquivo", - "reference": "Por Favor Consulte", - "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", - "fileTypeTooltip": "Especificadores de Tipo de Arquivo Únicos", - "uploadType": "Tipo de Envio", - "showUploadList": "Mostrar Lista de Envios", - "maxFiles": "Máximo de Arquivos", - "filesValueDesc": "O Conteúdo do Arquivo Enviado Atualmente Está Codificado em Base64", - "filesDesc": "Lista dos Arquivos Enviados Atualmente. Para Detalhes, Consulte", - "clearValueDesc": "Limpar Todos os Arquivos", - "parseFiles": "Analisar Arquivos", - "parsedValueTooltip1": "Se parseFiles for Verdadeiro, os Arquivos Enviados serão Analisados em Objeto, Array ou String. Os Dados Analisados Podem Ser Acessados através do Array parsedValue.", - "parsedValueTooltip2": "Suporta Arquivos Excel, JSON, CSV e de Texto. Outros Formatos Retornarão Nulo." - }, - "date": { - ...en.date, - "format": "Formato", - "formatTip": "Suporte: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", - "reference": "Por Favor Consulte", - "showTime": "Mostrar Hora", - "start": "Data de Início", - "end": "Data de Fim", - "year": "Ano", - "quarter": "Trimestre", - "month": "Mês", - "week": "Semana", - "date": "Data", - "clearAllDesc": "Limpar Tudo", - "resetAllDesc": "Redefinir Tudo", - "placeholder": "Selecionar Data", - "placeholderText": "Marcador de Posição", - "startDate": "Data de Início", - "endDate": "Data de Fim" - }, - "time": { - ...en.time, - "start": "Hora de Início", - "end": "Hora de Término", - "formatTip": "Suporte: 'HH:mm:ss', 'Timestamp'", - "format": "Formato", - "placeholder": "Selecionar Hora", - "placeholderText": "Marcador de Posição", - "startTime": "Hora de Início", - "endTime": "Hora de Término" - }, - "button": { - ...en.button, - "prefixIcon": "Ícone Prefixo", - "prefixText": "Texto Prefixo", - "suffixIcon": "Ícone Sufixo", - "icon": "Ícone", - "iconSize": "Tamanho do Ícone", - "button": "Botão do Formulário", - "formToSubmit": "Formulário para Envio", - "default": "Padrão", - "submit": "Enviar", - "textDesc": "Texto Atualmente Exibido no Botão", - "loadingDesc": "O Botão Está no Estado de Carregamento? Se Verdadeiro, o Botão Atual Está Carregando", - "formButtonEvent": "Evento" - }, - "link": { - ...en.link, - "link": "Link", - "textDesc": "Texto Atualmente Exibido no Link", - "loadingDesc": "O Link Está no Estado de Carregamento? Se Verdadeiro, o Link Atual Está Carregando" - }, - "scanner": { - ...en.scanner, - "text": "Clique para Escanear", - "camera": "Câmera {index}", - "changeCamera": "Alternar Câmera", - "continuous": "Escaneamento Contínuo", - "uniqueData": "Ignorar Dados Duplicados", - "maskClosable": "Clique na Máscara para Fechar", - "errTip": "Por Favor, Utilize Este Componente Sob HTTPS ou Localhost" - }, - "dropdown": { - ...en.dropdown, - "onlyMenu": "Exibir Apenas com Rótulo", - "textDesc": "Texto Atualmente Exibido no Botão" - }, - "textShow": { - ...en.textShow, - "text": "### 👋 Olá, {name}", - "valueTooltip": "Markdown Suporta a Maioria das Tags e Atributos HTML. Tags como iframe, Script e Outras Estão Desativadas por Motivos de Segurança.", - "verticalAlignment": "Alinhamento Vertical", - "horizontalAlignment": "Alinhamento Horizontal", - "textDesc": "Texto Exibido na Caixa de Texto Atual" - }, - // tenth part - "table": { - ...en.table, - "editable": "Editável", - "columnNum": "Colunas", - "viewModeResizable": "Largura da Coluna Ajustada pelo Usuário", - "viewModeResizableTooltip": "Se os usuários podem ou não ajustar a largura da coluna.", - "visibleResizables": "Mostrar Alças de Redimensionamento", - "visibleResizablesTooltip": "Exibir alças de redimensionamento visíveis no cabeçalho da tabela.", - "showFilter": "Mostrar Botão de Filtro", - "showRefresh": "Mostrar Botão de Atualização", - "showDownload": "Mostrar Botão de Download", - "columnSeparator": "Separador de colunas", - "columnSeparatorTooltip": "Separador de colunas (\"delimitador\") no arquivo CSV baixado. \n\nRecomendações:\n- Vírgula (,)\n- Ponto e vírgula (;)\n- Barra vertical (|)\n- Tabulação (\\t)", - "columnSetting": "Mostrar Botão de Configuração de Coluna", - "searchText": "Texto de Busca", - "searchTextTooltip": "Pesquisar e filtrar os dados apresentados na tabela", - "showQuickJumper": "Mostrar Pulador Rápido", - "hideOnSinglePage": "Ocultar em Página Única", - "showSizeChanger": "Mostrar Botão de Alteração de Tamanho", - "pageSizeOptions": "Opções de Tamanho de Página", - "pageSize": "Tamanho de Página", - "total": "Contagem Total de Linhas", - "totalTooltip": "O valor padrão é o número de itens de dados atuais, que pode ser obtido da consulta, por exemplo: '{{query1.data[0].count}}'", - "filter": "Filtrar", - "filterRule": "Regra de Filtro", - "chooseColumnName": "Escolher Coluna", - "chooseCondition": "Escolher Condição", - "clear": "Limpar", - "columnShows": "Colunas Mostradas", - "selectAll": "Selecionar Tudo", - "and": "E", - "or": "Ou", - "contains": "Contém", - "notContain": "Não Contém", - "equals": "Igual a", - "isNotEqual": "Não é Igual a", - "isEmpty": "Está Vazio", - "isNotEmpty": "Não Está Vazio", - "greater": "Maior Que", - "greaterThanOrEquals": "Maior ou Igual a", - "lessThan": "Menor Que", - "lessThanOrEquals": "Menor ou Igual a", - "action": "Ação", - "columnValue": "Valor da Coluna", - "columnValueTooltip": "'{{currentCell}}': Dados da Célula Atual\n '{{currentRow}}': Dados da Linha Atual\n '{{currentIndex}}': Índice de Dados Atual (Começando de 0)\n Exemplo: '{{currentCell * 5}}' Mostra 5 Vezes o Valor Original dos Dados.", - "columnTooltip": "Dica de coluna", - "imageSrc": "Fonte da Imagem", - "imageSize": "Tamanho da Imagem", - "columnTitle": "Título", - "columnTitleTooltip": "Dica de título", - "showTitle": "Mostrar Título", - "showTitleTooltip": "Mostrar/Ocultar título da coluna no cabeçalho da tabela", - "sortable": "Classificável", - "align": "Alinhamento", - "fixedColumn": "Coluna Fixa", - "autoWidth": "Largura Automática", - "customColumn": "Coluna Personalizada", - "auto": "Automático", - "fixed": "Fixo", - "columnType": "Tipo de Coluna", - "dataMapping": "Mapeamento de Dados", - "numberStep": "Passo", - "numberStepTooltip": "O número para o qual o valor atual é aumentado ou diminuído. Pode ser um número inteiro ou decimal", - "precision": "Precisão", - "float": "Flutuante", - "prefix": "Prefixo", - "suffix": "Sufixo", - "avatars": "Avatares", - "avatarGroupAlignment": "Alinhamento dos Avatares", - "text": "Texto", - "number": "Número", - "link": "Link", - "links": "Links", - "tag": "Tag", - "select": "Seleção", - "date": "Data", - "dateTime": "Data e Hora", - "badgeStatus": "Status", - "button": "Botão", - "image": "Imagem", - "boolean": "Booleano", - "switch": "Interruptor", - "rating": "Classificação", - "progress": "Progresso", - "option": "Operação", - "optionList": "Lista de Operações", - "option1": "Operação 1", - "status": "Status", - "statusTooltip": "Valores Opcionais: Success, Error, Default, Warning, Processing", - "primaryButton": "Principal", - "defaultButton": "Padrão", - "type": "Tipo", - "tableSize": "Tamanho da Tabela", - "hideHeader": "Ocultar Cabeçalho da Tabela", - "fixedHeader": "Cabeçalho da Tabela Fixo", - "fixedHeaderTooltip": "O cabeçalho será fixado para tabelas com rolagem vertical", - "fixedToolbar": "Barra de Ferramentas Fixa", - "fixedToolbarTooltip": "A barra de ferramentas será fixada para tabelas com rolagem vertical com base na posição", - "hideBordered": "Mostrar Alças de Redimensionamento", - "showHeaderGridBorder": "Mostrar Borda do Grid do Cabeçalho", - "showRowGridBorder": "Mostrar Borda do Grid da Linha", - "showVerticalRowGridBorder": "Mostrar Borda do Grid da Linha Vertical", - "showHorizontalRowGridBorder": "Mostrar Borda do Grid da Linha Horizontal", - "deleteColumn": "Excluir Coluna", - "confirmDeleteColumn": "Confirmar Exclusão da Coluna: ", - "small": "P", - "middle": "M", - "large": "G", - "refreshButtonTooltip": "Os dados atuais mudaram. Clique para regenerar a coluna.", - "changeSetDesc": "Um objeto representando mudanças em uma tabela editável, contendo apenas a célula alterada. As linhas vêm primeiro e as colunas em seguida.", - "selectedRowDesc": "Fornece dados para a linha atualmente selecionada, indicando a linha que aciona um evento de clique se o usuário clicar em um botão/link na linha", - "selectedRowsDesc": "Útil no modo de seleção múltipla, igual a SelectedRow", - "pageNoDesc": "Página atual, começando em 1", - "pageSizeDesc": "Quantas linhas por página", - "sortColumnDesc": "O nome da coluna classificada atualmente selecionada", - "sortDesc": "Se a linha atual está em ordem decrescente", - "pageOffsetDesc": "O início atual da paginação, usado para paginação para obter dados. Exemplo: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", - "displayDataDesc": "Dados exibidos na tabela atual", - "selectedIndexDesc": "Índice selecionado em dados de exibição", - "filterDesc": "Parâmetros de filtragem da tabela", - "dataDesc": "Os dados JSON para a tabela", - "saveChanges": "Salvar Alterações", - "cancelChanges": "Cancelar Alterações", - "rowSelectChange": "Alteração na Seleção de Linha", - "rowClick": "Clique na Linha", - "rowExpand": "Expandir Linha", - "rowShrink": "Contrair Linha", - "search": "Buscar", - "download": "Download", - "columnEdited": "Coluna Editada", - "filterChange": "Alteração de Filtro", - "sortChange": "Alteração de Classificação", - "pageChange": "Alteração de Página", - "refresh": "Atualizar", - "rowColor": "Cor da Linha Condicional", - "rowColorDesc": "Defina condicionalmente a cor da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", - "rowHeight": "Altura da Linha Condicional", - "rowHeightDesc": "Defina condicionalmente a altura da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", - "cellColor": "Cor da Célula Condicional", - "cellColorDesc": "Defina condicionalmente a cor da célula com base no valor da célula usando CurrentCell. Por exemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", - "saveChangesNotBind": "Nenhum manipulador de eventos configurado para salvar alterações. Por favor, vincule pelo menos um manipulador de eventos antes de clicar.", - "dynamicColumn": "Usar Configuração de Coluna Dinâmica", - "dynamicColumnConfig": "Configuração de Coluna", - "dynamicColumnConfigDesc": "Configurações de coluna dinâmica. Aceita um array de nomes de colunas. Todas as colunas são visíveis por padrão. Exemplo: [\"id\", \"name\"]", - "position": "Posição", - "showDataLoadSpinner": "Mostrar indicador de carregamento", - "showValue": "Mostrar Valor", - "expandable": "Expansível", - "configExpandedView": "Configurar Visualização Expandida", - "toUpdateRowsDesc": "Um array de objetos para linhas a serem atualizadas em tabelas editáveis.", - "empty": "Vazio", - "falseValues": "Texto Quando Falso", - "iconTrue": "Ícone Quando Verdadeiro", - "iconFalse": "Ícone Quando Falso", - "iconNull": "Ícone Quando Nulo", - "allColumn": "Todas", - "visibleColumn": "Visível", - "emptyColumns": "Nenhuma coluna está atualmente visível", - "showSummary": "Mostrar linha(s) de resumo", - "totalSummaryRows": "Total de linhas", - "inlineAddNewRow": "Adicionar nova(s) linha(s) em linha", - "editMode": "Modo de edição", - "singleClick": "Clique Único", - "doubleClick": "Clique duplo", - "showUpdateButtons": "Mostrar botões Salvar/Cancelar", - }, - // eleventh part - "image": { - ...en.image, - "src": "Fonte da Imagem", - "srcDesc": "A fonte da imagem. Pode ser uma URL, um caminho ou uma string Base64. Por exemplo: data:image/png;base64, AAA... CCC", - "supportPreview": "Suporte para visualização clicável (zoom)", - "supportPreviewTip": "Efetivo quando a fonte da imagem é válida" - }, - "progress": { - ...en.progress, - "value": "Valor", - "valueTooltip": "A porcentagem concluída como um valor entre 0 e 100", - "showInfo": "Mostrar Valor", - "valueDesc": "Valor de progresso atual, variando de 0 a 100", - "showInfoDesc": "Se deve exibir o valor de progresso atual" - }, - "fileViewer": { - ...en.fileViewer, - "invalidURL": "Por favor, insira uma URL válida ou uma string Base64", - "src": "URI do arquivo", - "srcTooltip": "Pré-visualização do conteúdo do link fornecido por meio da incorporação de HTML, dados codificados em Base64 também podem ser suportados, por exemplo: data:application/pdf;base64, AAA... CCC", - "srcDesc": "O URI do arquivo" - }, - "divider": { - ...en.divider, - "title": "Título", - "align": "Alinhamento", - "dashed": "Tracejado", - "dashedDesc": "Se deve usar linha tracejada", - "titleDesc": "Título do divisor", - "alignDesc": "Alinhamento do título do divisor" - }, - "QRCode": { - ...en.QRCode, - "value": "Valor do Conteúdo do Código QR", - "valueTooltip": "O valor contém no máximo 2953 caracteres. O valor do código QR pode codificar vários tipos de dados, incluindo mensagens de texto, URLs, detalhes de contato (VCard/meCard), credenciais de login Wi-Fi, endereços de e-mail, números de telefone, mensagens SMS, coordenadas de geolocalização, detalhes de eventos de calendário, informações de pagamento, endereços de criptomoeda e links para download de aplicativos", - "valueDesc": "O valor do conteúdo do código QR", - "level": "Nível de Tolerância a Falhas", - "levelTooltip": "Refere-se à capacidade de o código QR ser escaneado mesmo que parte dele esteja bloqueada. Quanto maior o nível, mais complexo é o código.", - "includeMargin": "Mostrar Margem", - "image": "Exibir Imagem no Centro", - "L": "L (Baixo)", - "M": "M (Médio)", - "Q": "Q (Quartil)", - "H": "H (Alto)", - "maxLength": "O conteúdo é muito longo. Defina o comprimento como menos de 2953 caracteres" - }, - "jsonExplorer": { - ...en.jsonExplorer, - "indent": "Indentação de cada nível", - "expandToggle": "Expandir Árvore JSON", - "theme": "Tema de Cores", - "valueDesc": "Dados JSON atuais", - "default": "Padrão", - "defaultDark": "Padrão Escuro", - "neutralLight": "Neutro Claro", - "neutralDark": "Neutro Escuro", - "azure": "Azul Claro", - "darkBlue": "Azul Escuro" - }, - "audio": { - ...en.audio, - "src": "URI da Fonte de Áudio ou String Base64", - "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", - "autoPlay": "Reprodução Automática", - "loop": "Loop", - "srcDesc": "URI ou String Base64 atual de áudio como data:audio/mpeg;base64, AAA... CCC", - "play": "Reproduzir", - "playDesc": "Disparado quando o áudio é reproduzido", - "pause": "Pausa", - "pauseDesc": "Disparado quando o áudio é pausado", - "ended": "Finalizado", - "endedDesc": "Disparado quando o áudio termina de ser reproduzido" - }, - "video": { - ...en.video, - "src": "URI da Fonte de Vídeo ou String Base64", - "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", - "poster": "URL do Pôster", - "defaultPosterUrl": "", - "autoPlay": "Reprodução Automática", - "loop": "Loop", - "controls": "Ocultar Controles", - "volume": "Volume", - "playbackRate": "Taxa de Reprodução", - "posterTooltip": "O Valor Padrão é o Primeiro Quadro do Vídeo", - "autoPlayTooltip": "Após o Vídeo ser Carregado, Ele Será Reproduzido Automaticamente. Alterar Este Valor de Verdadeiro para Falso Pausará o Vídeo. (Se um Pôster Estiver Definido, Ele Será Reproduzido pelo Botão do Pôster)", - "controlsTooltip": "Ocultar Controles de Reprodução do Vídeo. Pode Não Ser Totalmente Suportado por Cada Fonte de Vídeo.", - "volumeTooltip": "Defina o Volume do Player, Entre 0 e 1", - "playbackRateTooltip": "Defina a Taxa do Player, Entre 1 e 2", - "srcDesc": "URI ou String Base64 atual de vídeo como data:video/mp4;base64, AAA... CCC", - "play": "Reproduzir", - "playDesc": "Disparado quando o vídeo é reproduzido", - "pause": "Pausa", - "pauseDesc": "Disparado quando o vídeo é pausado", - "load": "Carregar", - "loadDesc": "Disparado quando o recurso de vídeo terminou de carregar", - "ended": "Finalizado", - "endedDesc": "Disparado quando o vídeo termina de ser reproduzido", - "currentTimeStamp": "A posição de reprodução atual do vídeo em segundos", - "duration": "A duração total do vídeo em segundos" - }, - "media": { - ...en.media, - "playDesc": "Inicia a reprodução da mídia.", - "pauseDesc": "Pausa a reprodução da mídia.", - "loadDesc": "Redefine a mídia para o início e reinicia a seleção do recurso de mídia.", - "seekTo": "Avança para o número de segundos especificado, ou fração se o valor estiver entre 0 e 1", - "seekToAmount": "Número de segundos, ou fração se estiver entre 0 e 1", - "showPreview": "Mostrar pré-visualização" - }, - "rangeSlider": { - ...en.rangeSlider, - "start": "Valor Inicial", - "end": "Valor Final", - "step": "Tamanho do Passo", - "stepTooltip": "A granularidade do controle deslizante, o valor deve ser maior que 0 e divisível por (Max-Min)" - }, - "iconControl": { - ...en.iconControl, - "selectIcon": "Selecionar um Ícone", - "insertIcon": "Inserir um Ícone", - "insertImage": "Inserir uma Imagem ou " - }, - "shapeControl": { - ...en.shapeControl, - "selectShape": "Selecionar uma Forma", - "insertShape": "Inserir uma Forma", - "insertImage": "Inserir uma Imagem ou ", - }, - // twelfth part - "millisecondsControl": { - ...en.millisecondsControl, - "timeoutTypeError": "Por favor, insira o período de timeout correto em ms, o valor atual é: {value}", - "timeoutLessThanMinError": "A entrada deve ser maior que {left}, o valor atual é: {value}" - }, - "selectionControl": { - ...en.selectionControl, - "single": "Único", - "multiple": "Múltiplo", - "close": "Fechar", - "mode": "Modo de Seleção" - }, - "container": { - ...en.container, - "title": "Título do Container Exibido", - "titleTooltip": "O título do container", - "flowWidth": "Largura do conteúdo", - "floatType": "Tipo de Flutuação de Texto" - }, - "drawer": { - ...en.drawer, - "closePosition": "Posição do Botão Fechar", - "placement": "Posição da Gaveta", - "size": "Tamanho", - "top": "Superior", - "right": "Direita", - "bottom": "Inferior", - "left": "Esquerda", - "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", - "heightTooltip": "Pixel, ex: 378", - "openDrawerDesc": "Abrir Gaveta", - "closeDrawerDesc": "Fechar Gaveta", - "width": "Largura da Gaveta", - "height": "Altura da Gaveta" - }, - "meeting": { - ...en.meeting, - "logLevel": "Nível de log do SDK da Agora", - "placement": "Posição da Gaveta de Reuniões", - "meeting": "Configurações de Reunião", - "cameraView": "Visualização da Câmera", - "cameraViewDesc": "Visualização da câmera do usuário local (anfitrião)", - "screenShared": "Compartilhamento de Tela", - "screenSharedDesc": "Tela compartilhada pelo usuário local (anfitrião)", - "audioUnmuted": "Áudio Ativado", - "audioMuted": "Áudio Desativado", - "videoClicked": "Vídeo Clicado", - "videoOff": "Vídeo Desativado", - "videoOn": "Vídeo Ativado", - "size": "Tamanho", - "top": "Superior", - "host": "Anfitrião da Sala de Reunião. Você precisaria gerenciar o anfitrião como sua lógica de aplicativo", - "participants": "Participantes da Sala de Reunião", - "shareScreen": "Exibir Tela Compartilhada pelo Usuário Local", - "appid": "ID do Aplicativo da Agora", - "meetingName": "Nome da Reunião", - "localUserID": "ID do Usuário Anfitrião", - "userName": "Nome do Usuário Anfitrião", - "rtmToken": "Token RTM da Agora", - "rtcToken": "Token RTC da Agora", - "noVideo": "Sem Vídeo", - "profileImageUrl": "URL da Imagem de Perfil", - "right": "Direita", - "bottom": "Inferior", - "videoId": "ID do Fluxo de Vídeo", - "audioStatus": "Status de Áudio", - "left": "Esquerda", - "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", - "heightTooltip": "Pixel, ex: 378", - "openDrawerDesc": "Abrir Gaveta", - "closeDrawerDesc": "Fechar Gaveta", - "width": "Largura da Gaveta", - "height": "Altura da Gaveta", - "actionBtnDesc": "Botão de Ação", - "broadCast": "Transmissão de Mensagens", - "title": "Título da Reunião", - "meetingCompName": "Controlador de Reunião da Agora", - "sharingCompName": "Transmissão de Tela", - "videoCompName": "Transmissão de Câmera", - "videoSharingCompName": "Transmissão de Tela", - "meetingControlCompName": "Botão de Ícone", - "meetingCompDesc": "Componente de Reunião", - "meetingCompControls": "Controle de Reunião", - "meetingCompKeywords": "Reunião da Agora, Reunião Web, Colaboração", - "iconSize": "Tamanho do Ícone", - "userId": "ID do Usuário Anfitrião", - "roomId": "ID da Sala", - "meetingActive": "Reunião em Andamento", - "messages": "Mensagens Transmitidas" - }, - "settings": { - ...en.settings, - "title": "Configurações", - "userGroups": "Grupos de Usuários", - "organization": "Espaços de Trabalho", - "audit": "Registros de Auditoria", - "theme": "Temas", - "plugin": "Plug-ins", - "advanced": "Avançado", - "lab": "Laboratório", - "branding": "Marca", - "oauthProviders": "Autenticação de Usuário", - "appUsage": "Logs de Uso do Aplicativo", - "environments": "Ambientes", - "premium": "Premium", - "AppUsage": "Uso Global do Aplicativo", - }, - // thirteenth part - "memberSettings": { - ...en.memberSettings, - "admin": "Admin", - "adminGroupRoleInfo": "O administrador pode gerenciar membros do grupo e recursos", - "adminOrgRoleInfo": "Os administradores possuem todos os recursos e podem gerenciar grupos.", - "member": "Membro", - "memberGroupRoleInfo": "O membro pode visualizar membros do grupo", - "memberOrgRoleInfo": "Os membros só podem usar ou acessar recursos aos quais têm acesso.", - "title": "Membros", - "createGroup": "Criar Grupo", - "newGroupPrefix": "Novo Grupo ", - "allMembers": "Todos os Membros", - "deleteModalTitle": "Excluir Este Grupo", - "deleteModalContent": "O grupo excluído não pode ser restaurado. Você tem certeza de que deseja excluir o grupo?", - "addMember": "Adicionar Membros", - "nameColumn": "Nome do Usuário", - "joinTimeColumn": "Tempo de Entrada", - "actionColumn": "Operação", - "roleColumn": "Função", - "exitGroup": "Sair do Grupo", - "moveOutGroup": "Remover do Grupo", - "inviteUser": "Convidar Membros", - "exitOrg": "Sair", - "exitOrgDesc": "Você tem certeza de que deseja sair deste espaço de trabalho.", - "moveOutOrg": "Remover", - "moveOutOrgDescSaasMode": "Você tem certeza de que deseja remover o usuário {name} deste espaço de trabalho?", - "moveOutOrgDesc": "Você tem certeza de que deseja remover o usuário {name}? Esta ação não pode ser recuperada.", - "devGroupTip": "Os membros do grupo de desenvolvedores têm privilégios para criar aplicativos e fontes de dados.", - "lastAdminQuit": "O último administrador não pode sair.", - "organizationNotExist": "O espaço de trabalho atual não existe", - "inviteUserHelp": "Você pode copiar o link de convite para enviar ao usuário", - "inviteUserLabel": "Link de Convite:", - "inviteCopyLink": "Copiar Link", - "inviteText": "{userName} convida você a ingressar no espaço de trabalho \"{organization}\", clique no link para ingressar: {inviteLink}", - "groupName": "Nome do Grupo", - "createTime": "Tempo de Criação", - "manageBtn": "Gerenciar", - "userDetail": "Detalhe", - "syncDeleteTip": "Este grupo foi excluído da fonte de catálogo de endereços", - "syncGroupTip": "Este grupo é um grupo de sincronização do catálogo de endereços e não pode ser editado" - }, - "orgSettings": { - ...en.orgSettings, - "newOrg": "Novo Espaço de Trabalho (Organização)", - "title": "Espaço de Trabalho", - "createOrg": "Criar Espaço de Trabalho (Organização)", - "deleteModalTitle": "Tem certeza de que deseja excluir este espaço de trabalho?", - "deleteModalContent": "Você está prestes a excluir este espaço de trabalho {permanentlyDelete}. Uma vez excluído, o espaço de trabalho {notRestored}.", - "permanentlyDelete": "Permanentemente", - "notRestored": "Não pode ser restaurado", - "deleteModalLabel": "Por favor, digite o nome do espaço de trabalho {name} para confirmar a operação:", - "deleteModalTip": "Por favor, digite o nome do espaço de trabalho", - "deleteModalErr": "O nome do espaço de trabalho está incorreto", - "deleteModalBtn": "Excluir", - "editOrgTitle": "Editar Informações do Espaço de Trabalho", - "orgNameLabel": "Nome do Espaço de Trabalho:", - "orgNameCheckMsg": "O nome do espaço de trabalho não pode estar vazio", - "orgLogo": "Logo do Espaço de Trabalho:", - "logoModify": "Modificar Imagem", - "inviteSuccessMessage": "Junte-se ao Espaço de Trabalho com Sucesso", - "inviteFailMessage": "Falha ao Entrar no Espaço de Trabalho", - "uploadErrorMessage": "Erro ao Carregar", - "orgName": "Nome do Espaço de Trabalho" - }, - "freeLimit": "Teste Gratuito", - "tabbedContainer": { - ...en.tabbedContainer, - "switchTab": "Alternar Aba", - "switchTabDesc": "Acionado ao Alternar Abas", - "tab": "Abas", - "atLeastOneTabError": "O Contêiner de Abas Deve Manter Pelo Menos Uma Aba", - "selectedTabKeyDesc": "Aba Atualmente Selecionada", - "iconPosition": "Posição do Ícone", - "placement": "Posicionamento das Abas", - "showTabs": "Mostrar Abas", - "gutter": "Espaçamento", - "gutterTooltip": "A distância entre as abas em px", - "tabsCentered": "Abas Centralizadas", - }, - "formComp": { - ...en.formComp, - "containerPlaceholder": "Arraste Componentes do Painel à Direita ou", - "openDialogButton": "Gerar um Formulário a partir de uma de suas Fontes de Dados", - "resetAfterSubmit": "Redefinir Após Envio Bem-Sucedido", - "initialData": "Dados Iniciais", - "disableSubmit": "Desativar Envio", - "success": "Formulário Gerado com Sucesso", - "selectCompType": "Selecione o Tipo de Componente", - "dataSource": "Fonte de Dados: ", - "selectSource": "Selecionar Fonte", - "table": "Tabela: ", - "selectTable": "Selecionar Tabela", - "columnName": "Nome da Coluna", - "dataType": "Tipo de Dados", - "compType": "Tipo de Componente", - "required": "Obrigatório", - "generateForm": "Gerar Formulário", - "compSelectionError": "Tipo de Coluna Não Configurado", - "compTypeNameError": "Não foi Possível Obter o Nome do Tipo de Componente", - "noDataSourceSelected": "Nenhuma Fonte de Dados Selecionada", - "noTableSelected": "Nenhuma Tabela Selecionada", - "noColumn": "Nenhuma Coluna", - "noColumnSelected": "Nenhuma Coluna Selecionada", - "noDataSourceFound": "Nenhuma Fonte de Dados Suportada Encontrada. Crie uma Nova Fonte de Dados", - "noTableFound": "Nenhuma Tabela Foi Encontrada nesta Fonte de Dados, Por Favor, Selecione Outra Fonte de Dados", - "noColumnFound": "Nenhuma Coluna Suportada Foi Encontrada nesta Tabela. Por Favor, Selecione Outra Tabela", - "formTitle": "Título do Formulário", - "name": "Nome", - "nameTooltip": "O Nome do Atributo nos Dados do Formulário, Quando Deixado em Branco, Padrão para o Nome do Componente", - "notSupportMethod": "Métodos Não Suportados: ", - "notValidForm": "O Formulário Não é Válido", - "resetDesc": "Redefinir Dados do Formulário para o Valor Padrão", - "clearDesc": "Limpar Dados do Formulário", - "setDataDesc": "Definir Dados do Formulário", - "valuesLengthError": "Erro no Número de Parâmetros", - "valueTypeError": "Erro no Tipo de Parâmetro", - "dataDesc": "Dados Atuais do Formulário", - "loadingDesc": "O Formulário Está Carregando?" - }, - // fourteenth part - "modalComp": { - ...en.modalComp, - "close": "Fechar", - "closeDesc": "Acionado Quando a Caixa de Diálogo Modal é Fechada", - "openModalDesc": "Abrir a Caixa de Diálogo", - "closeModalDesc": "Fechar a Caixa de Diálogo", - "visibleDesc": "Está Visível? Se Verdadeiro, a Caixa de Diálogo Atual Será Exibida", - "modalHeight": "Altura da Modal", - "modalHeightTooltip": "Pixels, Exemplo: 222", - "modalWidth": "Largura da Modal", - "modalWidthTooltip": "Número ou Porcentagem, Exemplo: 520, 60%" - }, - "listView": { - ...en.listView, - "noOfRows": "Contagem de Linhas", - "noOfRowsTooltip": "Número de Linhas na Lista - Normalmente Configurado para uma Variável (por exemplo, '{{query1.data.length}}') para Apresentar Resultados da Consulta", - "noOfColumns": "Contagem de Colunas", - "itemIndexName": "Nome do Índice do Item de Dados", - "itemIndexNameDesc": "O Nome da Variável Referente ao Índice do Item, Padrão como {default}", - "itemDataName": "Nome do Objeto de Dados do Item", - "itemDataNameDesc": "O Nome da Variável Referente ao Objeto de Dados do Item, Padrão como {default}", - "itemsDesc": "Expondo Dados dos Componentes na Lista", - "dataDesc": "Os Dados JSON Usados na Lista Atual", - "dataTooltip": "Se Você Apenas Definir um Número, Este Campo Será Considerado como Contagem de Linhas, e os Dados Serão Considerados como Vazios." - }, - "navigation": { - ...en.navigation, - "addText": "Adicionar Item de Submenu", - "logoURL": "URL do Logotipo da Navegação", - "horizontalAlignment": "Alinhamento Horizontal", - "logoURLDesc": "Você pode exibir um Logotipo no lado esquerdo inserindo um Valor de URI ou String Base64 como data:image/png;base64,AAA... CCC", - "itemsDesc": "Itens do Menu de Navegação Hierárquica" - }, - "droppadbleMenuItem": { - ...en.droppadbleMenuItem, - "subMenu": "Submenu {number}" - }, - "navItemComp": { - ...en.navItemComp, - "active": "Ativo" - }, - "iframe": { - ...en.iframe, - "URLDesc": "O URL de Origem para o Conteúdo do IFrame. Certifique-se de que o URL é HTTPS ou localhost. Além disso, certifique-se de que o URL não está bloqueado pela Política de Segurança de Conteúdo (CSP) do navegador. O cabeçalho 'X-Frame-Options' não deve ser definido como 'DENY' ou 'SAMEORIGIN'.", - "allowDownload": "Permitir Downloads", - "allowSubmitForm": "Permitir Envio de Formulário", - "allowMicrophone": "Permitir Microfone", - "allowCamera": "Permitir Câmera", - "allowPopup": "Permitir Pop-ups" - }, - "switchComp": { - ...en.switchComp, - "defaultValue": "Valor Booleano Padrão", - "open": "Ligado", - "close": "Desligado", - "openDesc": "Acionado Quando o Interruptor é Ligado", - "closeDesc": "Acionado Quando o Interruptor é Desligado", - "valueDesc": "Status Atual do Interruptor" - }, - "signature": { - ...en.signature, - "tips": "Texto de Dica", - "signHere": "Assine Aqui", - "showUndo": "Mostrar Desfazer", - "showClear": "Mostrar Limpar" - }, - "localStorageComp": { - ...en.localStorageComp, - "valueDesc": "Todos os Itens de Dados Armazenados Atualmente", - "setItemDesc": "Adicionar um Item", - "removeItemDesc": "Remover um Item", - "clearItemDesc": "Limpar Todos os Itens" - }, - "utilsComp": { - ...en.utilsComp, - "openUrl": "Abrir URL", - "openApp": "Abrir Aplicativo", - "copyToClipboard": "Copiar para a Área de Transferência", - "downloadFile": "Baixar Arquivo" - }, - "messageComp": { - ...en.messageComp, - "info": "Enviar uma Notificação", - "loading": "Enviar uma Notificação de Carregamento", - "success": "Enviar uma Notificação de Sucesso", - "warn": "Enviar uma Notificação de Aviso", - "error": "Enviar uma Notificação de Erro" - }, - "toastComp": { - ...en.toastComp, - "destroy": "Fechar uma Notificação", - "info": "Enviar uma Notificação", - "loading": "Enviar uma Notificação de Carregamento", - "success": "Enviar uma Notificação de Sucesso", - "warn": "Enviar uma Notificação de Aviso", - "error": "Enviar uma Notificação de Erro" - }, - "themeComp": { - ...en.themeComp, - "switchTo": "Alterar Tema" - }, - "transformer": { - ...en.transformer, - "preview": "Pré-Visualização", - "docLink": "Saiba Mais Sobre Transformadores...", - "previewSuccess": "Pré-Visualização Bem-Sucedida", - "previewFail": "Falha na Pré-Visualização", - "deleteMessage": "Transformador Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", - "documentationText": "Os transformadores são projetados para transformação de dados e reutilização do seu código JavaScript multi-linha. Use transformadores para adaptar dados de consultas ou componentes às necessidades de seu aplicativo local. Ao contrário da consulta JavaScript, o transformador é projetado para realizar operações somente de leitura, o que significa que você não pode acionar uma consulta ou atualizar um estado temporário dentro de um transformador." - }, - "temporaryState": { - ...en.temporaryState, - "value": "Valor Inicial", - "valueTooltip": "O Valor Inicial Armazenado no Estado Temporário Pode Ser Qualquer Valor JSON Válido.", - "docLink": "Saiba Mais Sobre Estados Temporários...", - "pathTypeError": "O Caminho Deve Ser uma String ou um Array de Valores", - "unStructuredError": "Dados Não Estruturados {prev} Não Podem Ser Atualizados por {path}", - "valueDesc": "Valor do Estado Temporário", - "deleteMessage": "O Estado Temporário Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", - "documentationText": "Os estados temporários são um recurso poderoso usado para gerenciar variáveis complexas que atualizam dinamicamente o estado dos componentes em seu aplicativo. Esses estados funcionam como armazenamento intermediário ou transitório para dados que podem mudar ao longo do tempo devido a interações do usuário ou outros processos." - }, - "dataResponder": { - ...en.dataResponder, - "data": "Dados", - "dataDesc": "Dados do Data Responder Atual", - "dataTooltip": "Quando Estes Dados São Alterados, Irão Acionar Ações Subsequentes.", - "docLink": "Saiba Mais Sobre os Data Responders...", - "deleteMessage": "O Data Responder Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", - "documentationText": "Ao desenvolver um aplicativo, você pode atribuir eventos a componentes para monitorar alterações em dados específicos. Por exemplo, um componente de Tabela pode ter eventos como \"Alteração de seleção de linha\", \"Alteração de filtro\", \"Alteração de ordenação\" e \"Alteração de página\" para rastrear alterações na propriedade selectedRow. No entanto, para alterações em estados temporários, transformadores ou resultados de consulta, onde eventos padrão não estão disponíveis, os Data Responders são utilizados. Eles permitem detectar e reagir a quaisquer modificações de dados." - }, - // fifteenth part - "theme": { - ...en.theme, - "title": "Temas", - "createTheme": "Criar Tema", - "themeName": "Nome do Tema:", - "themeNamePlaceholder": "Por favor, insira um nome para o tema", - "defaultThemeTip": "Tema Padrão:", - "createdThemeTip": "O Tema Que Você Criou:", - "option": "Opção {index}", - "input": "Entrada", - "confirm": "Ok", - "emptyTheme": "Nenhum Tema Disponível", - "click": "", - "toCreate": "", - "nameColumn": "Nome", - "defaultTip": "Padrão", - "updateTimeColumn": "Tempo de Atualização", - "edit": "Editar", - "cancelDefaultTheme": "Cancelar Tema Padrão", - "setDefaultTheme": "Definir como Tema Padrão", - "copyTheme": "Duplicar Tema", - "setSuccessMsg": "Configuração Bem-Sucedida", - "cancelSuccessMsg": "Cancelamento Bem-Sucedido", - "deleteSuccessMsg": "Exclusão Bem-Sucedida", - "checkDuplicateNames": "O Nome do Tema Já Existe, Por Favor, Reinsira-o", - "copySuffix": " Cópia", - "saveSuccessMsg": "Salvo com Sucesso", - "leaveTipTitle": "Dicas", - "leaveTipContent": "Você Ainda Não Salvou, Confirmar Saída?", - "leaveTipOkText": "Sair", - "goList": "Voltar para a Lista", - "saveBtn": "Salvar", - "mainColor": "Cores Principais", - "text": "Cores do Texto", - "defaultTheme": "Padrão", - "yellow": "Amarelo", - "green": "Verde", - "previewTitle": "Pré-Visualização do Tema\nExemplo de Componentes que Utilizam as Cores do Seu Tema", - "dateColumn": "Data", - "emailColumn": "Email", - "phoneColumn": "Telefone", - "subTitle": "Título", - "linkLabel": "Link", - "linkUrl": "app.lowcoder.cloud", - "progressLabel": "Progresso", - "sliderLabel": "Controle Deslizante", - "radioLabel": "Botão de Opção", - "checkboxLabel": "Caixa de Seleção", - "buttonLabel": "Botão de Formulário", - "switch": "Interruptor", - "previewDate": "16/10/2022", - "previewEmail1": "ted.com", - "previewEmail2": "skype.com", - "previewEmail3": "imgur.com", - "previewEmail4": "globo.com", - "previewPhone1": "+63-317-333-0093", - "previewPhone2": "+30-668-580-6521", - "previewPhone3": "+86-369-925-2071", - "previewPhone4": "+7-883-227-8093", - "chartPreviewTitle": "Pré-Visualização do Estilo do Gráfico", - "chartSpending": "Gastos", - "chartBudget": "Orçamento", - "chartAdmin": "Administração", - "chartFinance": "Finanças", - "chartSales": "Vendas", - "chartFunnel": "Gráfico de Funil", - "chartShow": "Mostrar", - "chartClick": "Clique", - "chartVisit": "Visita", - "chartQuery": "Consulta", - "chartBuy": "Comprar" - }, - "pluginSetting": { - ...en.pluginSetting, - "title": "Plugins", - "npmPluginTitle": "Plugins do npm", - "npmPluginDesc": "Configure os plugins do npm para todas as aplicações no espaço de trabalho atual.", - "npmPluginEmpty": "Nenhum plugin do npm foi adicionado.", - "npmPluginAddButton": "Adicionar um plugin do npm", - "saveSuccess": "Salvo com sucesso" - }, - "advanced": { - ...en.advanced, - "title": "Avançado", - "defaultHomeTitle": "Página Inicial Padrão", - "defaultHomeHelp": "A Página Inicial é a aplicação que todos os não desenvolvedores verão por padrão quando fizerem login. Observação: certifique-se de que a aplicação selecionada seja acessível aos não desenvolvedores.", - "defaultHomePlaceholder": "Selecione a Página Inicial Padrão", - "saveBtn": "Salvar", - "preloadJSTitle": "Pré-carregar JavaScript", - "preloadJSHelp": "Configure código JavaScript pré-carregado para todas as aplicações no espaço de trabalho atual.", - "preloadCSSTitle": "Pré-carregar CSS", - "preloadCSSHelp": "Configure código CSS pré-carregado para todas as aplicações no espaço de trabalho atual.", - "preloadCSSApply": "Aplicar à Página Inicial do Espaço de Trabalho", - "preloadLibsTitle": "Biblioteca JavaScript", - "preloadLibsHelp": "Configure bibliotecas JavaScript pré-carregadas para todas as aplicações no espaço de trabalho atual. O sistema possui lodash, day.js, uuid, numbro integrados para uso direto. As bibliotecas JavaScript são carregadas antes que a aplicação seja inicializada, portanto, há um certo impacto no desempenho da aplicação.", - "preloadLibsEmpty": "Nenhuma biblioteca JavaScript foi adicionada", - "preloadLibsAddBtn": "Adicionar uma biblioteca", - "saveSuccess": "Salvo com sucesso", - "AuthOrgTitle": "Tela de Boas-Vindas do Espaço de Trabalho", - "AuthOrgDescrition": "A URL para os seus usuários entrarem no espaço de trabalho atual.", - "APIConsumption": "Consumo de API", - "APIConsumptionDescription": "Aqui você pode ver o consumo de API para todas as aplicações no espaço de trabalho atual.", - "overallAPIConsumption": "Consumo geral de API neste espaço de trabalho até o momento", - "lastMonthAPIConsumption": "Consumo de API do último mês, neste espaço de trabalho", - "showHeaderInPublicApps": "Mostrar cabeçalho em exibição pública", - "showHeaderInPublicAppsHelp": "Defina a visibilidade do cabeçalho em exibição pública para todos os aplicativos", - }, - // sixteenth part - "branding": { - ...en.branding, - "title": "Branding", - "logoTitle": "Logo", - "logoHelp": "Somente .JPG, .SVG ou .PNG", - "faviconTitle": "Favicon", - "faviconHelp": "Somente .JPG, .SVG ou .PNG", - "brandNameTitle": "Nome da Marca", - "headColorTitle": "Cor Principal", - "save": "Salvar", - "saveSuccessMsg": "Salvo com sucesso", - "upload": "Clique para Fazer Upload" - }, - "networkMessage": { - ...en.networkMessage, - "200": "Sucesso", - "201": "Criado", - "204": "Sem Conteúdo", - "400": "Solicitação Inválida", - "404": "Não Encontrado", - "500": "Serviço Ocupado, Por Favor, Tente Novamente Mais Tarde", - "0": "Falha ao Conectar ao Servidor, Por Favor, Verifique Sua Conexão de Rede", - "401": "Autenticação Falhou, Por Favor, Faça Login Novamente", - "403": "Sem Permissão, Por Favor, Contate o Administrador para Autorização", - "timeout": "Tempo Limite da Solicitação" - }, - "share": { - ...en.share, - "title": "Compartilhar", - "viewer": "Visualizador", - "editor": "Editor", - "owner": "Proprietário", - "datasourceViewer": "Pode Usar", - "datasourceOwner": "Pode Gerenciar" - }, - "debug": { - ...en.debug, - "title": "Título", - "switch": "Alternar Componente: " - }, - "module": { - ...en.module, - "emptyText": "Sem Dados", - "docLink": "Saiba Mais Sobre Módulos...", - "documentationText": "Módulos são Aplicações completas, que podem ser incluídas e repetidas em outras Aplicações e funcionam como um único componente. Como os módulos podem ser incorporados, eles precisam ser capazes de interagir com suas aplicações ou sites externos. Essas quatro configurações ajudam a suportar a comunicação com um Módulo.", - "circularReference": "Referência Circular, o Módulo/Aplicação Atual Não Pode Ser Usado!", - "emptyTestInput": "O Módulo Atual Não Tem Entrada para Testar", - "emptyTestMethod": "O Módulo Atual Não Possui Método para Testar", - "name": "Nome", - "input": "Entrada", - "params": "Parâmetros", - "emptyParams": "Nenhum Parâmetro Foi Adicionado", - "emptyInput": "Nenhuma Entrada Foi Adicionada", - "emptyMethod": "Nenhum Método Foi Adicionado", - "emptyOutput": "Nenhuma Saída Foi Adicionada", - "data": "Dados", - "string": "Texto", - "number": "Número", - "array": "Arranjo", - "boolean": "Booleano", - "query": "Consulta", - "autoScaleCompHeight": "A Altura do Componente se Ajusta ao Contêiner", - "excuteMethod": "Executar Método {name}", - "method": "Método", - "action": "Ação", - "output": "Saída", - "nameExists": "O Nome {name} Já Existe", - "eventTriggered": "Evento {name} Acionado", - "globalPromptWhenEventTriggered": "Exibe um Alerta Global Quando um Evento é Acionado", - "emptyEventTest": "O Módulo Atual Não Possui Eventos para Testar", - "emptyEvent": "Nenhum Evento Foi Adicionado", - "event": "Evento" - }, - "resultPanel": { - ...en.resultPanel, - "returnFunction": "O Valor de Retorno é uma Função.", - "consume": "{time}", - "JSON": "Mostrar JSON" - }, - "createAppButton": { - ...en.createAppButton, - "creating": "Criando...", - "created": "Criar {name}" - }, - "apiMessage": { - ...en.apiMessage, - "authenticationFail": "Falha na Autenticação do Usuário, Por Favor Faça Login Novamente", - "verifyAccount": "Necessário Verificar a Conta", - "functionNotSupported": "A Versão Atual Não Suporta Esta Função. Por Favor, Entre em Contato com a Equipe de Negócios da Lowcoder para Atualizar sua Conta" - }, - "globalErrorMessage": { - ...en.globalErrorMessage, - "createCompFail": "Falha ao Criar o Componente {comp}", - "notHandledError": "Erro Não Tratado no Método {method}" - }, - "aggregation": { - ...en.aggregation, - "navLayout": "Barra de Navegação", - "chooseApp": "Escolher Aplicativo", - "iconTooltip": "Suporta Link de Imagem src ou String Base64 como data:image/png;base64,AAA... CCC", - "hideWhenNoPermission": "Oculto para Usuários Não Autorizados", - "queryParam": "Parâmetros de Consulta da URL", - "hashParam": "Parâmetros de Hash da URL", - "tabBar": "Barra de Abas", - "emptyTabTooltip": "Configure Esta Página no Painel Direito" - }, - // seventeenth part - "appSetting": { - ...en.appSetting, - "title": "Configurações Gerais do Aplicativo", - "450": "450px (Celular)", - "800": "800px (Tablet)", - "1440": "1440px (Notebook)", - "1920": "1920px (Tela Larga)", - "3200": "3200px (Tela Super Grande)", - "autofill": "Preenchimento Automático", - "userDefined": "Personalizado", - "default": "Padrão", - "tooltip": "Fechar a Popover Após Configuração", - "canvasMaxWidth": "Largura Máxima do Canvas para Este Aplicativo", - "userDefinedMaxWidth": "Largura Máxima Personalizada", - "inputUserDefinedPxValue": "Por Favor, Insira um Valor Personalizado em Pixels", - "maxWidthTip": "A Largura Máxima Deve Ser Maior ou Igual a 350", - "themeSetting": "Tema de Estilo Aplicado", - "themeSettingDefault": "Padrão", - "themeCreate": "Criar Tema", - "appTitle": "Título", - "appDescription": "Descrição", - "appCategory": "Categoria", - "showPublicHeader": "Mostrar cabeçalho na visualização pública" - }, - "customShortcut": { - ...en.customShortcut, - "title": "Atalhos Personalizados", - "shortcut": "Atalho", - "action": "Ação", - "empty": "Nenhum Atalho", - "placeholder": "Pressione Atalho", - "otherPlatform": "Outro", - "space": "Espaço" - }, - "profile": { - ...en.profile, - "orgSettings": "Configurações do Espaço de Trabalho", - "switchOrg": "Trocar Espaço de Trabalho", - "joinedOrg": "Meus Espaços de Trabalho", - "createOrg": "Criar Espaço de Trabalho", - "logout": "Sair", - "personalInfo": "Meu Perfil", - "bindingSuccess": "Vínculo {sourceName} Bem-Sucedido", - "uploadError": "Erro ao Fazer Upload", - "editProfilePicture": "Modificar", - "saveUserNameTooltip": "Pressione Enter para Salvar seu Novo NicName. Se você ver seu E-mail, significa que acabamos de assumi-lo como Nome de Usuário e você pode alterá-lo para um melhor. Seu E-mail como nome de usuário técnico permanece intocado.", - "changeAvatarTooltip": "Você Pode Fazer Upload de Arquivos PNG ou JPG", - "nameCheck": "O Nome Não Pode Estar Vazio", - "name": "Nome: ", - "namePlaceholder": "Por Favor, Insira Seu Nome", - "toBind": "Para Vincular", - "binding": "Está Vinculando", - "bindError": "Erro de Parâmetro, Vinculação Atualmente Não Suportada.", - "bindName": "Vincular {name}", - "loginAfterBind": "Após a Vinculação, Você Pode Usar {name} para Fazer Login", - "bindEmail": "Vincular E-mail:", - "email": "E-mail", - "emailCheck": "Por Favor, Insira um E-mail Válido", - "emailPlaceholder": "Por Favor, Insira Seu E-mail", - "submit": "Enviar", - "bindEmailSuccess": "Vinculação de E-mail Bem-Sucedida", - "passwordModifiedSuccess": "Senha Alterada com Sucesso", - "passwordSetSuccess": "Senha Definida com Sucesso", - "oldPassword": "Senha Antiga:", - "inputCurrentPassword": "Por Favor, Insira Sua Senha Atual", - "newPassword": "Nova Senha:", - "inputNewPassword": "Por Favor, Insira Sua Nova Senha", - "confirmNewPassword": "Confirmar Nova Senha:", - "inputNewPasswordAgain": "Por Favor, Insira Sua Nova Senha Novamente", - "password": "Senha:", - "modifyPassword": "Alterar Senha", - "setPassword": "Definir Senha", - "alreadySetPassword": "Senha Definida", - "setPassPlaceholder": "Você Pode Fazer Login com Senha", - "setPassAfterBind": "Você Pode Definir a Senha Após Vincular a Conta", - "socialConnections": "Conexões Sociais", - "changeAvatar": "Alterar Avatar", - "about": "Sobre", - "userId": "ID do Usuário", - "createdAt": "Criado Em", - "currentOrg": "Organização Atual", - "settings": "Configurações", - "uiLanguage": "Idioma da Interface do Usuário", - "info": "Informações", - "createdApps": "Seus Aplicativos Criados", - "createdModules": "Seus Módulos Criados", - "sharedApps": "Aplicativos Compartilhados com Você", - "sharedModules": "Módulos Compartilhados com Você", - "onMarketplace": "No Marketplace", - "howToPublish": "Como Publicar no Marketplace", - "memberOfOrgs": "Membro dos Espaços de Trabalho", - "apiKeys": "Chaves de API", - "createApiKey": "Criar Chave de API", - "apiKeyName": "Nome", - "apiKeyDescription": "Descrição", - "apiKeyCopy": "Clique na Chave de API para obter o valor no seu clipboard", - "apiKey": "Chave de API", - "deleteApiKey": "Excluir Chave de API", - "deleteApiKeyContent": "Tem certeza de que deseja excluir esta chave de API?", - "deleteApiKeyError": "Algo deu errado. Por favor, tente novamente." - }, - "shortcut": { - ...en.shortcut, - "shortcutList": "Atalhos do Teclado", - "click": "Clique", - "global": "Global", - "toggleShortcutList": "Alternar Atalhos do Teclado", - "editor": "Editor", - "toggleLeftPanel": "Alternar Painel Esquerdo", - "toggleBottomPanel": "Alternar Painel Inferior", - "toggleRightPanel": "Alternar Painel Direito", - "toggleAllPanels": "Alternar Todos os Painéis", - "preview": "Visualizar", - "undo": "Desfazer", - "redo": "Refazer", - "showGrid": "Mostrar Grade", - "component": "Componente", - "multiSelect": "Selecionar Múltiplos", - "selectAll": "Selecionar Todos", - "copy": "Copiar", - "cut": "Recortar", - "paste": "Colar", - "move": "Mover", - "zoom": "Redimensionar", - "delete": "Excluir", - "deSelect": "Desselecionar", - "queryEditor": "Editor de Consulta", - "excuteQuery": "Executar Consulta Atual", - "editBox": "Editor de Texto", - "formatting": "Formatar", - "openInLeftPanel": "Abrir no Painel Esquerdo" - }, - // eighteenth part - "help": { - ...en.help, - "videoText": "Visão Geral", - "onBtnText": "OK", - "permissionDenyTitle": "💡 Não Consegue Criar um Novo Aplicativo ou Fonte de Dados?", - "permissionDenyContent": "Você não tem permissão para criar o aplicativo e a fonte de dados. Entre em contato com o administrador para se juntar ao grupo de desenvolvedores.", - "appName": "Tutorial do Aplicativo", - "chat": "Converse conosco", - "docs": "Ver Documentação", - "editorTutorial": "Tutorial do Editor", - "update": "O que há de novo?", - "version": "Versão", - "versionWithColon": "Versão: ", - "submitIssue": "Enviar um Problema" - }, - "header": { - ...en.header, - "nameCheckMessage": "O Nome Não Pode Estar Vazio", - "viewOnly": "Somente Visualização", - "recoverAppSnapshotTitle": "Restaurar Esta Versão?", - "recoverAppSnapshotContent": "Restaurar o Aplicativo Atual para a Versão Criada em {time}.", - "recoverAppSnapshotMessage": "Restaurar Esta Versão", - "returnEdit": "Voltar para o Editor", - "deploy": "Publicar", - "export": "Exportar para JSON", - "editName": "Editar Nome", - "duplicate": "Duplicar {type}", - "snapshot": "Histórico", - "scriptsAndStyles": "Scripts e Estilos", - "appSettings": "Configurações do Aplicativo", - "preview": "Visualização", - "editError": "Modo de Pré-visualização do Histórico, Nenhuma Operação é Suportada.", - "clone": "Clonar", - "editorMode_layout": "Layout", - "editorMode_logic": "Lógica", - "editorMode_both": "Ambos", - "editorMode_layout_tooltip": "Personalize a aparência e o layout do componente, na janela direita. Ajuste sua aparência, estilo e animação.", - "editorMode_logic_tooltip": "Configure como seu componente funciona e interage, na janela direita. Gerencie seu conteúdo e comportamentos interativos." - }, - "userAuth": { - ...en.userAuth, - "registerByEmail": "Registrar", - "email": "Email:", - "inputEmail": "Por favor, digite seu email", - "inputValidEmail": "Por favor, insira um email válido", - "forgotPassword": "Esqueceu a Senha", - "forgotPasswordInfo": "Digite seu email e enviaremos um link para redefinir sua senha.", - "forgotPasswordSuccess": "Por favor, verifique seu email para o link de redefinição de senha.", - "forgotPasswordError": "Algo deu errado. Por favor, tente novamente.", - "register": "Registrar", - "userLogin": "Entrar", - "login": "Entrar", - "bind": "Vincular", - "passwordCheckLength": "Pelo Menos {min} Caracteres", - "passwordCheckContainsNumberAndLetter": "Deve Conter Letras e Números", - "passwordCheckSpace": "Não Pode Conter Espaços", - "welcomeTitle": "Bem-vindo ao {productName}", - "inviteWelcomeTitle": "{username} convida você a trabalhar juntos", - "terms": "Termos", - "privacy": "Política de Privacidade", - "registerHint": "Li e concordo com os", - "chooseAccount": "Escolha sua Conta", - "signInLabel": "Entrar com {name}", - "bindAccount": "Vincular Conta", - "scanQrCode": "Escanear o Código QR com {name}", - "invalidThirdPartyParam": "Parâmetro de Terceiros Inválido", - "account": "Conta", - "inputAccount": "Por favor, insira sua conta", - "ldapLogin": "Entrar com LDAP", - "resetPassword": "Redefinir Senha", - "resetPasswordDesc": "Redefinir a senha do usuário {name}. Uma nova senha será gerada após a redefinição.", - "resetSuccess": "Redefinição Bem-sucedida", - "resetSuccessDesc": "Redefinição de senha bem-sucedida. A nova senha é: {password}", - "resetLostPasswordSuccess": "Redefinição de senha bem-sucedida. Por favor, faça login novamente.", - "copyPassword": "Copiar Senha", - "poweredByLowcoder": "Desenvolvido por: Lowcoder.cloud" - }, - "preLoad": { - ...en.preLoad, - "jsLibraryHelpText": "Adicione bibliotecas JavaScript ao seu aplicativo atual por meio de endereços URL. lodash, day.js, uuid, numbro são integrados ao sistema para uso imediato. As bibliotecas JavaScript são carregadas antes que o aplicativo seja inicializado, o que pode impactar no desempenho do aplicativo.", - "exportedAs": "Exportado Como", - "urlTooltip": "Endereço URL da biblioteca JavaScript, [unpkg.com](https://unpkg.com/) ou [jsdelivr.net](https://www.jsdelivr.com/) são recomendados", - "recommended": "Recomendado", - "viewJSLibraryDocument": "Documento", - "jsLibraryURLError": "URL Inválido", - "jsLibraryExist": "A biblioteca JavaScript já existe", - "jsLibraryEmptyContent": "Nenhuma biblioteca JavaScript adicionada", - "jsLibraryDownloadError": "Erro ao baixar a biblioteca JavaScript", - "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada com sucesso", - "jsLibraryInstallFailed": "Falha na instalação da biblioteca JavaScript", - "jsLibraryInstallFailedCloud": "Talvez a biblioteca não esteja disponível na Sandbox, [Documentação](https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries#manually-import-libraries)\n{message}", - "jsLibraryInstallFailedHost": "{message}", - "add": "Adicionar Novo", - "jsHelpText": "Adicione um método ou variável global ao aplicativo atual.", - "cssHelpText": "Adicione estilos ao aplicativo atual. A estrutura DOM pode mudar à medida que o sistema itera. Tente modificar os estilos por meio das propriedades do componente.", - "scriptsAndStyles": "Scripts e Estilos", - "jsLibrary": "Biblioteca JavaScript" - }, - "editorTutorials": { - ...en.editorTutorials, - "component": "Componente", - "componentContent": "O painel direito de componentes oferece muitos blocos de aplicativos prontos (componentes). Eles podem ser arrastados para o canvas para uso. Você também pode criar seus próprios componentes com um pouco de conhecimento de codificação.", - "canvas": "Canvas", - "canvasContent": "Construa seus aplicativos no canvas com uma abordagem de 'O que você vê é o que você obtém'. Basta arrastar e soltar componentes para projetar seu layout e usar atalhos de teclado para edição rápida, como excluir, copiar e colar. Depois que um componente é selecionado, você pode ajustar todos os detalhes - desde estilos e layout até vinculação de dados e comportamento lógico. Além disso, desfrute do benefício adicional do design responsivo, garantindo que seus aplicativos tenham uma aparência ótima em qualquer dispositivo.", - "queryData": "Consultar Dados", - "queryDataContent": "Você pode criar consultas de dados aqui e conectar-se ao MySQL, MongoDB, Redis, Airtable e muitas outras fontes de dados. Após configurar a consulta, clique em 'Executar' para obter os dados e continuar o tutorial.", - "compProperties": "Propriedades do Componente" - }, - "homeTutorials": { - ...en.homeTutorials, - "createAppContent": "Bem-vindo! Clique em 'Aplicativo' e comece a criar seu primeiro aplicativo.", - "createAppTitle": "Criar Aplicativo" - }, - // nineteenth part - "history": { - ...en.history, - "layout": "Ajuste de layout '{0}'", - "upgrade": "Atualização de '{0}'", - "delete": "Exclusão de '{0}'", - "add": "Adição de '{0}'", - "modify": "Modificação de '{0}'", - "rename": "Renomear '{1}' para '{0}'", - "recover": "Recuperar versão '{2}'", - "recoverVersion": "Recuperar versão", - "andSoOn": "e assim por diante", - "timeFormat": "MM DD às hh:mm A", - "emptyHistory": "Sem histórico", - "currentVersionWithBracket": " (Atual)", - "currentVersion": "Versão atual", - "justNow": "Agora mesmo", - "history": "Histórico" - }, - "home": { - ...en.home, - "profile": "Seu Perfil", - "news": "Notícias", - "orgHome": "Página Inicial (Org)", - "yourOrg": "Sua Organização", - "orgHomeTitle": "Página Inicial da Organização", - "appMarketplace": "Loja de Aplicativos", - "allApplications": "Seus Aplicativos", - "allModules": "Seus Módulos", - "allFolders": "Todas as Pastas", - "yourFolders": "Suas Pastas", - "modules": "Módulos", - "module": "Módulo", - "trash": "Lixeira", - "marketplace": "Mercado", - "allCategories": "Todas as Categorias", - "queryLibrary": "Biblioteca de Consultas", - "datasource": "Fontes de Dados", - "selectDatasourceType": "Selecione o Tipo de Fonte de Dados", - "home": "Início", - "all": "Todos", - "app": "Aplicativo", - "navigation": "Navegação", - "navLayout": "Navegação PC", - "navLayoutDesc": "Menu lateral para navegação fácil em desktop.", - "mobileTabLayout": "Navegação Móvel", - "mobileTabLayoutDesc": "Barra de navegação inferior para navegação móvel suave.", - "folders": "Pastas", - "folder": "Pasta", - "rootFolder": "Raiz", - "import": "Importar", - "export": "Exportar para JSON", - "show": "Mostrar", - "inviteUser": "Convidar membros", - "createFolder": "Criar Pasta", - "createFolderSubTitle": "Nome da pasta:", - "moveToFolder": "Mover para pasta", - "moveToTrash": "Mover para lixeira", - "moveToFolderSubTitle": 'Mover "{name}" para:', - "folderName": "Nome da pasta:", - "resCardSubTitle": "{time} por {creator}", - "trashEmpty": "Lixeira vazia.", - "projectEmpty": "Nada aqui.", - "projectEmptyCanAdd": "Você ainda não tem nenhum aplicativo. Clique em Novo para começar.", - "name": "Nome", - "type": "Tipo", - "creator": "Criado por", - "lastModified": "Última modificação", - "deleteTime": "Hora da exclusão", - "createTime": "Hora da criação", - "datasourceName": "Nome da fonte de dados", - "databaseName": "Nome do banco de dados", - "nameCheckMessage": "O nome não pode estar vazio", - "deleteElementTitle": "Excluir permanentemente", - "moveToTrashSubTitle": "{type} {name} será movido para a lixeira.", - "deleteElementSubTitle": "Excluir {type} {name} permanentemente, não pode ser recuperado.", - "deleteSuccessMsg": "Excluído com sucesso", - "deleteErrorMsg": "Erro ao excluir", - "recoverSuccessMsg": "Recuperado com sucesso", - "newDatasource": "Nova fonte de dados", - "creating": "Criando...", - "chooseDataSourceType": "Escolha o tipo de fonte de dados", - "folderAlreadyExists": "A pasta já existe", - "newNavLayout": "{userName}'s {name} ", - "newApp": "{userName}'s novo {name} ", - "importError": "Erro ao importar, {message}", - "exportError": "Erro ao exportar, {message}", - "importSuccess": "Importação bem-sucedida", - "fileUploadError": "Erro no envio do arquivo", - "fileFormatError": "Erro de formato de arquivo", - "groupWithSquareBrackets": "[Grupo] ", - "allPermissions": "Proprietário", - "shareLink": "Link de compartilhamento: ", - "copyLink": "Copiar link", - "appPublicMessage": "Torne o aplicativo público. Qualquer pessoa pode visualizá-lo.", - "modulePublicMessage": "Torne o módulo público. Qualquer pessoa pode visualizá-lo.", - "marketplaceURL": "https://api-service.lowcoder.cloud", - "appMarketplaceMessage": "Publique seu aplicativo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", - "moduleMarketplaceMessage": "Publique seu Módulo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", - "marketplaceGoodPublishing": "Por favor, certifique-se de que seu aplicativo tenha um nome adequado e seja fácil de usar. Remova qualquer informação sensível antes de publicar. Além disso, remova fontes de dados locais e substitua por dados temporários estáticos integrados.", - "noMarketplaceApps": "Ainda não há aplicativos no mercado.", - "errorMarketplaceApps": "Erro ao carregar aplicativos do Mercado", - "localMarketplaceTitle": "Mercado Local", - "globalMarketplaceTitle": "Mercado Público", - "memberPermissionList": "Permissões dos membros: ", - "orgName": "{orgName} administradores", - "addMember": "Adicionar membros", - "addPermissionPlaceholder": "Por favor, insira um nome para pesquisar membros", - "searchMemberOrGroup": "Buscar membros ou grupos: ", - "addPermissionErrorMessage": "Falha ao adicionar permissão, {message}", - "copyModalTitle": 'Clonar "{name}"', - "copyNameLabel": "Nome do {type}", - "copyModalfolderLabel": "Adicionar à pasta", - "copyNamePlaceholder": "Por favor, insira um nome de {type}", - "chooseNavType": "Por favor, escolha o tipo de navegação", - "createNavigation": "Criar Navegação", - "howToUseAPI": "Como usar a API Rest Aberta" - }, - "support": { - ...en.support, - "supportTitle": "Suporte Lowcoder", - "supportContent": "Se você tiver dúvidas ou precisar de ajuda, use o sistema de tickets para resolver seu problema rapidamente.", - "newSupportTicket": "Novo Ticket de Suporte", - "ticketTitle": "Título", - "priority": "Prioridade", - "assignee": "Responsável", - "status": "Status do Ticket", - "updatedTime": "Horário Atualizado", - "active": "Ativo", - "inactive": "Inativo", - "noEmail": "Sem E-mail", - "details": "Detalhes", - "reloadTickets": "Recarregar Tickets", - "createdDate": "Data de Criação", - "updatedDate": "Data de Atualização", - "description": "Descrição do Problema", - "subtasks": "Subtarefas", - "subtasksProgress": "Progresso de todas as Subtarefas", - "attachments": "Anexos do Problema", - "comments": "Comentários", - "addComment": "Adicionar Comentário", - "addAttachment": "Adicionar Anexo", - "edit": "Editar Descrição do Ticket", - "save": "Salvar Descrição do Ticket", - "cancel": "Cancelar", - "submitComment": "Enviar Comentário", - "upload": "Enviar Anexo", - "selectFile": "Selecionar Arquivo", - "ticketDescriptionUpdated": "Descrição do ticket atualizada com sucesso!", - "ticketDescriptionUpdateFailed": "Falha ao atualizar a descrição do ticket.", - "writeComment": "Escreva um comentário...", - "ticketCommentAdded": "Comentário adicionado com sucesso!", - "ticketCommentFailed": "Falha ao adicionar o comentário.", - "ticketCommentEmpty": "Por favor, escreva um comentário antes de enviar.", - "ticketAttachmentUploaded": "Anexo carregado com sucesso!", - "ticketAttachmentFailed": "Falha ao carregar o anexo.", - "ticketAttachmentEmpty": "Por favor, selecione um arquivo para enviar.", - "ticketFetchError": "Falha ao carregar o ticket.", - "ticketNotFound": "Ticket não encontrado.", - "addAttachmentFileSize": "O arquivo deve ser menor que 5MB!", - "goBack": "Voltar", - "noDescription": "Nenhuma descrição disponível.", - "createTicket": "Criar um novo Ticket de Suporte", - "createTicketTitlePlaceholder": "Digite o Título (máx. 150 caracteres)", - "createTicketDescriptionTitle": "Descreva seu problema - quanto mais detalhes, melhor:", - "createTicketDescriptionPlaceholder": "Descreva o problema em detalhes, incluindo: 1) Passos para reproduzir o problema, 2) Comportamento esperado versus comportamento real, 3) Trechos de código, se aplicável, 4) Componentes específicos, APIs ou configurações afetadas", - "createTicketSubmit": "Enviar Ticket", - "createTicketInfoText": "Quando seu Ticket for criado, você poderá adicionar Capturas de Tela e Comentários na seção 'Detalhes'." - }, - // twentieth part - "npm": { - ...en.npm, - "invalidNpmPackageName": "Nome ou URL do Pacote npm Inválido.", - "pluginExisted": "Este plugin npm já existe", - "compNotFound": "Componente {compName} não encontrado.", - "addPluginModalTitle": "Adicionar Plugin de um Repositório npm", - "pluginNameLabel": "URL ou Nome do Pacote npm", - "noCompText": "Sem componentes.", - "compsLoading": "Carregando...", - "removePluginBtnText": "Remover", - "addPluginBtnText": "Adicionar Plugin npm" - }, - "toggleButton": { - ...en.toggleButton, - "valueDesc": "O Valor Padrão do Botão de Alternância, Por Exemplo: Falso", - "trueDefaultText": "Ocultar", - "falseDefaultText": "Mostrar", - "trueLabel": "Texto para Verdadeiro", - "falseLabel": "Texto para Falso", - "trueIconLabel": "Ícone para Verdadeiro", - "falseIconLabel": "Ícone para Falso", - "iconPosition": "Posição do Ícone", - "showText": "Mostrar Texto", - "alignment": "Alinhamento", - "showBorder": "Mostrar Borda" - }, - // twenty-first part - "componentDoc": { - ...en.componentDoc, - "markdownDemoText": "**Lowcoder** | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", - "demoText": "Lowcoder | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", - "submit": "Enviar", - "style": "Estilo", - "danger": "Perigo", - "warning": "Aviso", - "success": "Sucesso", - "menu": "Menu", - "link": "Link", - "customAppearance": "Aparência Personalizada", - "search": "Buscar", - "pleaseInputNumber": "Por favor, insira um número", - "mostValue": "Valor Máximo", - "maxRating": "Classificação Máxima", - "notSelect": "Não Selecionado", - "halfSelect": "Seleção Parcial", - "pleaseSelect": "Por favor, selecione", - "title": "Título", - "content": "Conteúdo", - "componentNotFound": "Componente não encontrado", - "example": "Exemplos", - "defaultMethodDesc": "Defina o valor da propriedade {name}", - "propertyUsage": "Você pode ler informações relacionadas ao componente acessando as propriedades do componente pelo nome do componente em qualquer lugar em que possa escrever JavaScript.", - "property": "Propriedades", - "propertyName": "Nome da Propriedade", - "propertyType": "Tipo", - "propertyDesc": "Descrição", - "event": "Eventos", - "eventName": "Nome do Evento", - "eventDesc": "Descrição", - "mehtod": "Métodos", - "methodUsage": "Você tem a capacidade de interagir com os componentes por meio de seus respectivos métodos, que podem ser acessados por seus nomes designados em qualquer segmento onde o JavaScript é utilizado. Além disso, esses componentes podem ser ativados por meio da ação 'Controlar Componente', que é acionada em resposta a eventos específicos.", - "methodName": "Nome do Método", - "methodDesc": "Descrição", - "showBorder": "Mostrar Borda", - "haveTry": "Experimente você mesmo", - "settings": "Configurações", - "settingValues": "Valor da Configuração", - "defaultValue": "Valor Padrão", - "time": "Tempo", - "date": "Data", - "noValue": "Nenhum", - "xAxisType": "Tipo do Eixo X", - "hAlignType": "Alinhamento Horizontal", - "leftLeftAlign": "Alinhamento à Esquerda-Esquerda", - "leftRightAlign": "Alinhamento à Esquerda-Direita", - "topLeftAlign": "Alinhamento Superior-Esquerdo", - "topRightAlign": "Alinhamento Superior-Direito", - "validation": "Validação", - "required": "Obrigatório", - "defaultStartDateValue": "Data de Início Padrão", - "defaultEndDateValue": "Data de Fim Padrão", - "basicUsage": "Uso Básico", - "basicDemoDescription": "Os seguintes exemplos mostram o uso básico do componente.", - "noDefaultValue": "Sem Valor Padrão", - "forbid": "Proibido", - "placeholder": "Marcador de Posição", - "pleaseInputPassword": "Por favor, insira uma senha", - "password": "Senha", - "textAlign": "Alinhamento do Texto", - "length": "Comprimento", - "top": "Topo", - "pleaseInputName": "Por favor, insira seu nome", - "userName": "Nome", - "fixed": "Fixo", - "responsive": "Responsivo", - "workCount": "Contagem de Palavras", - "cascaderOptions": "Opções de Cascata", - "pleaseSelectCity": "Por favor, selecione uma cidade", - "advanced": "Avançado", - "showClearIcon": "Mostrar Ícone Limpar", - /* eslint-disable only-ascii/only-ascii */ - appleOptionLabel: "🍎 Maçã", - waterMelonOptionLabel: "🍉 Melancia", - berryOptionLabel: "🍓 Morango", - lemonOptionLabel: "🍋 Limão", - coconutOptionLabel: "🥥 Coco", - /* eslint-enable only-ascii/only-ascii */ - "likedFruits": "Favoritos", - "option": "Opção", - "singleFileUpload": "Upload de Arquivo Único", - "multiFileUpload": "Upload de Múltiplos Arquivos", - "folderUpload": "Upload de Pasta", - "multiFile": "Múltiplos Arquivos", - "folder": "Pasta", - "open": "Abrir", - "favoriteFruits": "Frutas Favoritas", - "pleaseSelectOneFruit": "Selecione uma Fruta", - "notComplete": "Não Completo", - "complete": "Completo", - "echart": "EChart", - "lineChart": "Gráfico de Linha", - "basicLineChart": "Gráfico de Linha Básico", - "lineChartType": "Tipo de Gráfico de Linha", - "stackLineChart": "Linha Empilhada", - "areaLineChart": "Linha de Área", - "scatterChart": "Gráfico de Dispersão", - "scatterShape": "Forma de Dispersão", - "scatterShapeCircle": "Círculo", - "scatterShapeRect": "Retângulo", - "scatterShapeTri": "Triângulo", - "scatterShapeDiamond": "Diamante", - "scatterShapePin": "Alfinete", - "scatterShapeArrow": "Seta", - "pieChart": "Gráfico de Pizza", - "basicPieChart": "Gráfico de Pizza Básico", - "pieChatType": "Tipo de Gráfico de Pizza", - "pieChartTypeCircle": "Gráfico de Donut", - "pieChartTypeRose": "Gráfico de Rosa", - "titleAlign": "Posição do Título", - "color": "Cor", - "dashed": "Tracejado", - "imADivider": "Sou uma Linha de Divisão", - "tableSize": "Tamanho da Tabela", - "subMenuItem": "SubMenu {num}", - "menuItem": "Menu {num}", - "labelText": "Rótulo", - "labelPosition": "Posição do Rótulo", - "labelAlign": "Alinhamento do Rótulo", - "optionsOptionType": "Método de Configuração", - "styleBackgroundColor": "Cor de Fundo", - "styleBorderColor": "Cor da Borda", - "styleColor": "Cor da Fonte", - "selectionMode": "Modo de Seleção de Linha", - "paginationSetting": "Configuração de Paginação", - "paginationShowSizeChanger": "Suportar Usuários para Modificar o Número de Entradas por Página", - "paginationShowSizeChangerButton": "Mostrar Botão de Modificação de Tamanho", - "paginationShowQuickJumper": "Mostrar Pulo Rápido", - "paginationHideOnSinglePage": "Ocultar Quando Há Apenas uma Página", - "paginationPageSizeOptions": "Tamanho da Página", - "chartConfigCompType": "Tipo de Componente de Configuração de Gráfico", - "xConfigType": "Tipo de Eixo X", - "loading": "Carregando", - "disabled": "Desabilitado", - "minLength": "Comprimento Mínimo", - "maxLength": "Comprimento Máximo", - "showCount": "Mostrar Contagem de Palavras", - "autoHeight": "Altura Automática", - "thousandsSeparator": "Separador de Milhares", - "precision": "Casas Decimais", - "value": "Valor Padrão", - "formatter": "Formato", - "min": "Valor Mínimo", - "max": "Valor Máximo", - "step": "Tamanho do Passo", - "start": "Hora de Início", - "end": "Hora de Término", - "allowHalf": "Permitir Meia Seleção", - "filetype": "Tipo de Arquivo", - "showUploadList": "Mostrar Lista de Upload", - "uploadType": "Tipo de Upload", - "allowClear": "Mostrar Ícone de Limpar", - "minSize": "Tamanho Mínimo do Arquivo", - "maxSize": "Tamanho Máximo do Arquivo", - "maxFiles": "Número Máximo de Arquivos Enviados", - "format": "Formato", - "minDate": "Data Mínima", - "maxDate": "Data Máxima", - "minTime": "Tempo Mínimo", - "maxTime": "Tempo Máximo", - "text": "Texto", - "type": "Tipo", - "hideHeader": "Ocultar Cabeçalho", - "hideBordered": "Ocultar Borda", - "src": "URL da Imagem", - "showInfo": "Exibir Valor", - "mode": "Modo", - "onlyMenu": "Apenas Menu", - "horizontalAlignment": "Alinhamento Horizontal", - "row": "Linha", - "column": "Coluna", - "leftAlign": "Alinhamento à Esquerda", - "rightAlign": "Alinhamento à Direita", - "percent": "Porcentagem", - "fixedHeight": "Altura Fixa", - "auto": "Adaptativo", - "directory": "Pasta", - "multiple": "Múltiplos Arquivos", - "singleFile": "Arquivo Único", - "manual": "Manual", - "default": "Padrão", - "small": "Pequeno", - "middle": "Médio", - "large": "Grande", - "single": "Único", - "multi": "Múltiplo", - "close": "Fechar", - "ui": "Modo de UI", - "line": "Gráfico de Linha", - "scatter": "Gráfico de Dispersão", - "pie": "Gráfico de Pizza", - "basicLine": "Gráfico de Linha Básico", - "stackedLine": "Gráfico de Linha Empilhada", - "areaLine": "Mapa de Área", - "basicPie": "Gráfico de Pizza Básico", - "doughnutPie": "Gráfico de Donut", - "rosePie": "Gráfico de Rosa", - "category": "Eixo de Categoria", - "circle": "Círculo", - "rect": "Retângulo", - "triangle": "Triângulo", - "diamond": "Diamante", - "pin": "Alfinete", - "arrow": "Seta", - "left": "Esquerda", - "right": "Direita", - "center": "Centro", - "bottom": "Inferior", - "justify": "Justificar Ambos os Extremos" - }, - // twenty-second part - "playground": { - ...en.playground, - "url": "https://app.lowcoder.cloud/playground/{compType}/1", - "data": "Estado Atual dos Dados", - "preview": "Visualizar", - "property": "Propriedades", - "console": "Console de Script Visual", - "executeMethods": "Executar Métodos", - "noMethods": "Sem Métodos.", - "methodParams": "Parâmetros do Método", - "methodParamsHelp": "Informe os Parâmetros do Método Usando JSON. Por Exemplo, Você Pode Definir os Parâmetros do setValue Com: [1] ou 1" - }, - "calendar": { - ...en.calendar, - "headerBtnBackground": "Cor de Fundo do Botão", - "btnText": "Texto do Botão", - "title": "Título", - "selectBackground": "Fundo Selecionado" - }, - /*"componentDocExtra": { - "table": table, - },*/ - "idSource": { - ...en.idSource, - "title": "Provedor de Autenticação do Usuário", - "form": "Email", - "pay": "Premium", - "enable": "Habilitar", - "unEnable": "Não Habilitado", - "loginType": "Tipo de Login", - "status": "Status", - "desc": "Descrição", - "manual": "Agenda de Endereços:", - "syncManual": "Sincronizar Agenda de Endereços", - "syncManualSuccess": "Sincronização Bem-Sucedida", - "enableRegister": "Permitir Registro", - "saveBtn": "Salvar e Habilitar", - "save": "Salvar", - "none": "Nenhum", - "formPlaceholder": "Por favor, informe {label}", - "formSelectPlaceholder": "Por favor, selecione {label}", - "saveSuccess": "Salvo com Sucesso", - "dangerLabel": "Zona de Perigo", - "dangerTip": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Prossiga com Cuidado.", - "disable": "Desabilitar", - "disableSuccess": "Desabilitado com Sucesso", - "encryptedServer": "-------- Criptografado no Lado do Servidor --------", - "disableTip": "Dicas", - "disableContent": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Você Tem Certeza de Que Deseja Prosseguir?", - "manualTip": "", - "lockTip": "O Conteúdo está Bloqueado. Para Fazer Alterações, Clique no {icon} para Desbloquear.", - "lockModalContent": "Alterar o Campo 'Atributo de ID' Pode Ter Impactos Significativos na Identificação do Usuário. Por Favor, Confirme Que Você Entende as Implicações Dessa Alteração Antes de Prosseguir.", - "payUserTag": "Premium" - }, - "slotControl": { - ...en.slotControl, - "configSlotView": "Configurar Visualização de Slot" - }, - "jsonLottie": { - ...en.jsonLottie, - "lottieJson": "JSON Lottie", - "speed": "Velocidade", - "width": "Largura", - "height": "Altura", - "backgroundColor": "Cor de Fundo", - "animationStart": "Início da Animação", - "valueDesc": "Dados JSON Atuais", - "loop": "Repetir", - "auto": "Automático", - "onHover": "Ao Passar o Mouse", - "singlePlay": "Reprodução Única", - "endlessLoop": "Loop Infinito", - "keepLastFrame": "Manter Último Quadro Exibido" - }, - "timeLine": { - ...en.timeLine, - "titleColor": "Cor do Título", - "subTitleColor": "Cor do Subtítulo", - "labelColor": "Cor do Rótulo", - "value": "Dados da Linha do Tempo", - "mode": "Ordem de Exibição", - "left": "Conteúdo à Direita", - "right": "Conteúdo à Esquerda", - "alternate": "Ordem de Conteúdo Alternada", - "modeTooltip": "Defina o Conteúdo para Aparecer à Esquerda/Direita ou Alternadamente em Ambos os Lados da Linha do Tempo", - "reverse": "Eventos Mais Recentes Primeiro", - "pending": "Texto do Nó Pendente", - "pendingDescription": "Quando Definido, um Último Nó com o Texto e um Indicador de Espera Serão Exibidos.", - "defaultPending": "Melhoria Contínua", - "clickTitleEvent": "Clique em Evento de Título", - "clickTitleEventDesc": "Clique em Evento de Título", - "Introduction": "Chaves de Introdução", - "helpTitle": "Título da Linha do Tempo (Obrigatório)", - "helpsubTitle": "Subtítulo da Linha do Tempo", - "helpLabel": "Rótulo da Linha do Tempo, Usado para Exibir Datas", - "helpColor": "Indica a Cor do Nó da Linha do Tempo", - "helpDot": "Renderização de Nós da Linha do Tempo como Ícones Ant Design", - "helpTitleColor": "Controle Individual da Cor do Título do Nó", - "helpSubTitleColor": "Controle Individual da Cor do Subtítulo do Nó", - "helpLabelColor": "Controle Individual da Cor do Ícone do Nó", - "valueDesc": "Dados da Linha do Tempo", - "clickedObjectDesc": "Dados do Item Clicado", - "clickedIndexDesc": "Índice do Item Clicado" - }, - // twenty-third part - "comment": { - ...en.comment, - "value": "Dados da Lista de Comentários", - "showSendButton": "Permitir Comentários", - "title": "Título", - "titledDefaultValue": "%d Comentário no Total", - "placeholder": "Shift + Enter para Comentar; Digite @ ou # para Entrada Rápida", - "placeholderDec": "Placeholder", - "buttonTextDec": "Título do Botão", - "buttonText": "Comentar", - "mentionList": "Dados da Lista de Menções", - "mentionListDec": "Chave-Palavras-Chave de Menção; Valor-Dados da Lista de Menções", - "userInfo": "Informações do Usuário", - "dateErr": "Erro de Data", - "commentList": "Lista de Comentários", - "deletedItem": "Item Excluído", - "submitedItem": "Item Enviado", - "deleteAble": "Mostrar Botão de Excluir", - "Introduction": "Chaves de Introdução", - "helpUser": "Informações do Usuário (Obrigatório)", - "helpname": "Nome de Usuário (Obrigatório)", - "helpavatar": "URL do Avatar (Alta Prioridade)", - "helpdisplayName": "Nome de Exibição (Baixa Prioridade)", - "helpvalue": "Conteúdo do Comentário", - "helpcreatedAt": "Data de Criação" - }, - "mention": { - ...en.mention, - "mentionList": "Dados da Lista de Menções" - }, - "autoComplete": { - ...en.autoComplete, - "value": "Valor de Autocompletar", - "checkedValueFrom": "Valor Verificado de", - "ignoreCase": "Ignorar Maiúsculas e Minúsculas na Busca", - "searchLabelOnly": "Buscar Somente no Rótulo", - "searchFirstPY": "Buscar Primeiro Pinyin", - "searchCompletePY": "Buscar Pinyin Completo", - "searchText": "Buscar Texto", - "SectionDataName": "Dados de Autocompletar", - "valueInItems": "Valor nos Itens", - "type": "Tipo", - "antDesign": "AntDesign", - "normal": "Normal", - "selectKey": "Chave", - "selectLable": "Rótulo", - "ComponentType": "Tipo de Componente", - "colorIcon": "Azul", - "grewIcon": "Cinza", - "noneIcon": "Nenhum", - "small": "Pequeno", - "large": "Grande", - "componentSize": "Tamanho do Componente", - "Introduction": "Chaves de Introdução", - "helpLabel": "Rótulo", - "helpValue": "Valor" - }, - "responsiveLayout": { - ...en.responsiveLayout, - "column": "Colunas", - "atLeastOneColumnError": "O Layout Responsivo Mantém Pelo Menos uma Coluna", - "columnsPerRow": "Colunas por Linha", - "columnsSpacing": "Espaçamento de Colunas (px)", - "horizontal": "Horizontal", - "vertical": "Vertical", - "mobile": "Móvel", - "tablet": "Tablet", - "desktop": "Desktop", - "rowStyle": "Estilo de Linha", - "columnStyle": "Estilo de Coluna", - "minWidth": "Largura Mín.", - "rowBreak": "Quebra de Linha", - "matchColumnsHeight": "Corresponder Altura das Colunas", - "rowLayout": "Layout de Linha", - "columnsLayout": "Layout de Colunas" - }, - "navLayout": { - ...en.navLayout, - "mode": "Modo", - "modeInline": "Inline", - "modeVertical": "Vertical", - "width": "Largura", - "widthTooltip": "Pixel ou Porcentagem, por exemplo, 520, 60%", - "navStyle": "Estilo do Menu", - "navItemStyle": "Estilo do Item de Menu" - }, - tour: { - ...en.tour, - section1Title: "Passos", - section1Subtitle: "Passos", - tooltipExampleHeader: "Exemple:", - tooltipSignatureHeader: "Assinatura:", - options: { - title: { - label: "Título", - placeholder: "Bem-vindo", - tooltip: "O título do passo. Qualquer HTML é válido aqui.", - }, - description: { - label: "Descrição", - placeholder: "Bem-vindo ao Lowcoder!", - tooltip: "O título do passo. Qualquer HTML é válido aqui.", - }, - mask: { - label: "Máscara", - tooltip: "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour.", - tooltipValidTypes: "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", - }, - arrow: { - label: "Seta", - tooltip: "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente.", - tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", - }, - type: { - label: "Tipo", - tooltip: "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal." - }, - target: { - label: "Componente", - tooltip: "O componente no qual você deseja colocar a dica ou deixe-o vazio se simplesmente desejar um modal no centro da tela." - }, - coverImage: { - label: "URI da Imagem de Capa", - tooltip: "Um URI para uma imagem que você gostaria de exibir com o passo", - } - }, - indicatorsRender: { - label: "Renderização de Indicadores", - tooltip: "Fornece um indicador personalizado para qual passo você está", - tooltipValidTypes: "O formato é uma função que aceita dois argumentos, `current` e `total` e retorna um ReactNode", - tooltipFunctionSignatureHeader: "Assinatura:", - tooltipFunctionSignature: "(current: number, total: number) => ReactNode", - tooltipExampleHeader: "Exemplo:", - }, - disabledInteraction: { - label: "Desativar Interação", - tooltip: "Desativa a interação na área destacada." - }, - mask: { - label: "Máscara", - tooltip: "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour. Pode ser substituído no nível do passo.", - tooltipValidTypes: "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", - }, - placement: { - label: "Posição", - tooltip: "Posição do cartão guia em relação ao elemento de destino. Pode ser substituído no nível do passo.", - tooltipValidOptions: "Opções válidas", - tooltipValidOptionsAbove: "Acima do componente:", - tooltipValidOptionsLeft: "À esquerda do componente:", - tooltipValidOptionsRight: "À direita do componente:", - tooltipValidOptionsBelow: "Abaixo do componente:", - tooltipValidOptionsOnTop: "No topo do componente:", - }, - arrow: { - label: "Seta", - tooltip: "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente. Pode ser substituído no nível do passo.", - tooltipFunctionSignature: "boolean | { pointAtCenter: boolean }", - }, - type: { - label: "Tipo", - tooltip: "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal. Pode ser substituído no nível do passo." - }, - }, - docUrls: { - ...en.docUrls, - docHome: "https://docs.lowcoder.cloud/", - apiDocHome: "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", - components: "https://app.lowcoder.cloud/components/{compType}", - module: "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", - optionList: "", - terms: "https://lowcoder.cloud/terms", - privacy: "https://lowcoder.cloud/privacy", - aboutUs: "https://lowcoder.cloud/about", - changeLog: "https://github.com/lowcoder-org/lowcoder/releases", - introVideo: "", - devNpmPlugin: "https://github.com/lowcoder-org/lowcoder-create-component-plugin", - devNpmPluginText: "How to develop npm plugin", - useHost: "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", - eventHandlerSlowdown: "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", - thirdLib: "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", - thirdLibUrlText: "Use third-party libraries", - }, - datasourceTutorial: { - ...en.datasourceTutorial, - mysql: "", - mongodb: "", - postgres: "", - redis: "", - es: "", - smtp: "", - clickHouse: "", - }, - queryTutorial: { - ...en.queryTutorial, - js: "", - transformer: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", - tempState: "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", - dataResponder: "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", - }, - customComponent: { - ...en.customComponent, - entryUrl: "https://sdk.lowcoder.cloud/custom_component.html", - }, - template: { - ...en.template, - cloneUrl: "/apps/template-import/", - }, - lowcoderUrl: { - ...en.lowcoderUrl, - createIssue: "https://github.com/lowcoder-org/lowcoder/issues", - discord: "https://discord.com/invite/qMG9uTmAx2", - }, + + "productName": "Lowcoder", + "productDesc": "Crie aplicações de software para sua empresa e clientes com pouquíssima experiência de programação. Lowcoder é uma excelente alternativa para Retool, Appsmith e Tooljet.", + "notSupportedBrowser": "Seu navegador atual pode ter problemas de compatibilidade. Para uma experiência melhor, por favor, utilize a última versão do Chrome.", + "create": "Crie", + "move": "Mover", + "addItem": "Adicionar", + "newItem": "Novo", + "copy": "Copiar", + "rename": "Renomear", + "delete": "Remover", + "deletePermanently": "Remover Permanentemente", + "remove": "Remover", + "recover": "Recuperar", + "edit": "Editar", + "view": "Ver", + "value": "Valor", + "data": "Dados", + "information": "Informações", + "success": "Sucesso", + "warning": "Aviso", + "error": "Erro", + "reference": "Referência", + "text": "Texto", + "basic": "Básico", + "label": "Rótulo", + "layout": "Disposição", + "color": "Cor", + "form": "Formulário", + "menu": "Menu", + "menuItem": "Item do Menu", + "ok": "OK", + "cancel": "Cancelar", + "finish": "Terminar", + "reset": "Resetar", + "icon": "Ícone", + "code": "Código", + "title": "Título", + "emptyContent": "Conteúdo em Branco", + "more": "Mais", + "search": "Pesquisar", + "back": "Voltar", + "accessControl": "Controle de Acesso", + "copySuccess": "Copiado com Sucesso", + "copyError": "Erro ao copiar", + "api": { + ...en.api, + + "publishSuccess": "Publicado com Sucesso", + "recoverFailed": "Falha ao Recuperar", + "needUpdate": "Sua versão está desatualizada. Por favor, atualize para a nova versão.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "O editor de código atual não suporta formatação automática", + "fold": "Dobrar", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Definir Propriedade: {property}", + "clearDesc": "Limpar Propriedade: {property}", + "resetDesc": "Resetar Propriedade: {property} ao Valor Padrão", + }, + "method": { + ...en.method, + + "focus": "Definir Foco", + "focusOptions": "Opções de Foco. Veja HTMLElement.focus()", + "blur": "Remover Foco", + "click": "Clicar", + "select": "Selecionar o Texto Inteiro", + "setSelectionRange": "Definit Posição de Início e Fim da Seleção de Texto", + "selectionStart": "Índice de base 0 do Primeiro Caractere Selecionado", + "selectionEnd": "Índice de base 0 do Caractere Selecionado Após o Último Caractere", + "setRangeText": "Substituir Faixa de Texto", + "replacement": "String a Inserir", + "replaceStart": "Índice baseado em 0 do primeiro caractere a ser substituído", + "replaceEnd": "Índice de caractere baseado em 0 após o último caractere a ser substituído", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Carregamento do component falhou. Por favor, cheque sua configuração.", + "clickToReload": "Clique para recarregar", + "errorMsg": "Erro: ", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Somente suporta imagens do tipo {types}", + "exceedSizeError": "Tamanho da imagem não deve passar de {size}", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Não suportado", + "selectAtLeastOneComponent": "Por favor, selecione pelo menos um componente", + "selectCompFirst": "Selecione componentes antes de copiar", + "noContainerSelected": "[Bug] Nenhum container selecionado", + "deleteCompsSuccess": "Removido com sucesso. Pressione {undoKey} para reverter.", + "deleteCompsTitle": "Remover Componentes", + "deleteCompsBody": "Tem certeza que deseja remover {compNum} componentes selecionados?", + "cutCompsSuccess": "Corte realizado com sucesso. Pressione {pasteKey} para colar, ou {undoKey} para desfazer.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Queries de Dados em seu Aplicativo", + "globals": "Variavies de Dados Globais", + "propTipsArr": "{num} Itens", + "propTips": "{num} Teclas", + "propTipArr": "{num} Item", + "propTip": "{num} Tecla", + "stateTab": "Estado", + "settingsTab": "Configurações", + "toolbarTitle": "Individualização", + "toolbarPreload": "Scripts e Estilos", + "components": "Componentes ativos", + "modals": "Modais Dentro do App", + "expandTip": "Clique para expandir os dados do componente {component}", + "collapseTip": "Clique para minimizar os dados do componente {component}", + "layers": "Camadas", + "activatelayers": "Usar camadas dinâmicas", + "selectedComponents": "Componentes selecionados...", + "displayComponents": "Controlar Visão", + "lockComponents": "Controlar Posição", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Consultas de Dados", + "run": "Executar", + "noSelectedQuery": "Nenhuma Consulta Selecionada", + "metaData": "Metadados da Fonte de Dados", + "noMetadata": "Nenhum Metadado Disponível", + "metaSearchPlaceholder": "Buscar Metadados", + "allData": "Todas as Tabelas", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Propriedades", + "noSelectedComps": "Nenhum Componente selecionado. Clique em um Componente para visualizar suas Propriedades.", + "createTab": "Inserir", + "searchPlaceHolder": "Buscar Componentes ou Módulos", + "uiComponentTab": "Componentes", + "extensionTab": "Extensões", + "modulesTab": "Módulos", + "moduleListTitle": "Módulos", + "pluginListTitle": "Plugins", + "emptyModules": "Os Módulos são Mikro-Apps reutilizáveis. Você pode incorporá-los em seu App.", + "searchNotFound": "Não consegue encontrar o componente certo?", + "emptyPlugins": "Nenhum Plugin Adicionado", + "contactUs": "Entre em Contato", + "issueHere": "aqui.", + }, + "prop": { + ...en.prop, + + "expand": "Expandir", + "columns": "Colunas", + "videokey": "Chave do Vídeo", + "rowSelection": "Seleção de Linha", + "toolbar": "Barra de Ferramentas", + "pagination": "Paginação", + "logo": "Logotipo", + "style": "Estilo", + "inputs": "Entradas", + "meta": "Metadados", + "data": "Dados", + "hide": "Ocultar", + "loading": "Carregando", + "disabled": "Desabilitado", + "placeholder": "Espaço Reservado", + "showClear": "Mostrar Botão Limpar", + "showSearch": "Pesquisável", + "defaultValue": "Valor Padrão", + "required": "Campo Obrigatório", + "readOnly": "Somente Leitura", + "readOnlyTooltip": "Componentes somente leitura parecem normais, mas não podem ser modificados.", + "minimum": "Mínimo", + "maximum": "Máximo", + "regex": "Regex", + "minLength": "Comprimento Mínimo", + "maxLength": "Comprimento Máximo", + "height": "Altura", + "width": "Largura", + "selectApp": "Selecionar Aplicativo", + "showCount": "Mostrar Contagem", + "textType": "Tipo de Texto", + "customRule": "Regra Personalizada", + "customRuleTooltip": "Uma string não vazia indica um erro; vazio ou nulo significa validação aprovada. Exemplo:", + "manual": "Manual", + "map": "Mapa", + "json": "JSON", + "use12Hours": "Usar Formato de 12 Horas", + "hourStep": "Passo de Hora", + "minuteStep": "Passo de Minuto", + "secondStep": "Passo de Segundo", + "minDate": "Data Mínima", + "maxDate": "Data Máxima", + "minTime": "Tempo Mínimo", + "maxTime": "Tempo Máximo", + "type": "Tipo", + "showLabel": "Mostrar Etiqueta", + "showHeader": "Mostrar Cabeçalho", + "showBody": "Mostrar Corpo", + "showSider": "Mostrar Lateral", + "innerSider": "Lateral Interna", + "showFooter": "Mostrar Rodapé", + "maskClosable": "Clique Fora para Fechar", + "toggleClose": "Ativar o botão Fechar", + "showMask": "Mostrar Máscara", + "textOverflow": "Overflow de Texto", + "scrollbar": "Mostrar Barras de Rolagem", + "siderScrollbar": "Mostrar Barras de Rolagem na Lateral", + "siderRight": "Mostrar lateral à Direita", + "siderWidth": "Largura da Lateral", + "siderWidthTooltip": "A largura da lateral suporta porcentagens (%) e pixels (px).", + "siderCollapsedWidth": "Largura da Lateral Recolhida", + "siderCollapsedWidthTooltip": "A largura recolhida da lateral suporta porcentagens (%) e pixels (px).", + "siderCollapsible": "Lateral Recolhível", + "siderCollapsed": "Lateral Recolhida", + "contentScrollbar": "Mostrar Barras de Rolagem no Conteúdo", + "appID": "ID do Aplicativo", + "showApp": "Mostrar um Aplicativo na área de conteúdo", + "showAppTooltip": "Você pode exibir aplicativos inteiros na área de conteúdo. Por favor, observe que para Módulos não oferecemos suporte a Entradas, Saídas, Eventos e Métodos.", + "baseURL": "URL Base da API", + "horizontal": "Horizontal", + "minHorizontalWidth": "Largura Horizontal Mínima", + "component": "Identificadores de Componentes Próprios", + "className": "Nome da Classe CSS", + "dataTestId": "ID Individual", + "preventOverwriting": "Evitar a substituição de estilos", + "color": "Cor", + "horizontalGridCells": "Células de grade horizontal", + "verticalGridCells": "Células de grade vertical", + "showHorizontalScrollbar": "Mostrar barra de rolagem horizontal", + "showVerticalScrollbar": "Mostrar barra de rolagem vertical", + "timeZone": "Fuso horário", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Automóvel", + "fixed": "Fixa", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Passar o rato", + "wrap": "Quebra de Linha", + }, + "labelProp": { + ...en.labelProp, + + "text": "Rótulo", + "tooltip": "Dica de Ferramenta", + "position": "Posição", + "collapse": "Colapso", + "left": "Esquerda", + "right": "Direita", + "top": "Topo", + "align": "Alinhamento", + "width": "Largura", + "widthTooltip": "A largura do rótulo suporta porcentagens (%) e pixels (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Manipuladores de Eventos", + "emptyEventHandlers": "Nenhum Manipulador de Eventos", + "incomplete": "Seleção Incompleta", + "inlineEventTitle": "Em {eventName}", + "event": "Evento", + "action": "Ação", + "noSelect": "Nenhuma Seleção", + "runQuery": "Executar uma Consulta de Dados", + "selectQuery": "Selecionar Consulta de Dados", + "controlComp": "Controlar um Componente", + "runScript": "Executar JavaScript", + "runScriptPlaceHolder": "Escreva o Código Aqui", + "component": "Componente", + "method": "Método", + "setTempState": "Definir um Valor de Estado Temporário", + "state": "Estado", + "triggerModuleEvent": "Disparar um Evento de Módulo", + "moduleEvent": "Evento de Módulo", + "goToApp": "Ir para Outro Aplicativo", + "queryParams": "Parâmetros de Consulta", + "hashParams": "Parâmetros de Hash", + "showNotification": "Mostrar uma Notificação", + "text": "Texto", + "level": "Nível", + "duration": "Duração", + "notifyDurationTooltip": "A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). A duração máxima é de {max} segundos", + "goToURL": "Abrir uma URL", + "openInNewTab": "Abrir em Nova Guia", + "copyToClipboard": "Copiar um valor para a Área de Transferência", + "copyToClipboardValue": "Valor", + "export": "Exportar Dados", + "exportNoFileType": "Nenhuma Seleção (Opcional)", + "fileName": "Nome do Arquivo", + "fileNameTooltip": "Inclua a extensão para especificar o tipo de arquivo, por exemplo, 'imagem.png'", + "fileType": "Tipo de Arquivo", + "condition": "Executar Somente Quando...", + "conditionTooltip": "Execute o manipulador de eventos apenas quando esta condição for avaliada como 'verdadeira'", + "debounce": "Atraso para", + "throttle": "Controlar a frequência para", + "slowdownTooltip": "Use atraso ou controle de frequência para controlar a frequência dos gatilhos de ação. A unidade de tempo pode ser 'ms' (milissegundo, padrão) ou 's' (segundo).", + "notHandledError": "Não Manipulado", + "currentApp": "Atual", + "inputEventHandlers": "Manipuladores de Eventos de Entrada", + "inputEventHandlersDesc": "Manipuladores de Eventos relacionados à Entrada do Usuário", + "buttonEventHandlers": "Manipuladores de Eventos de Botão", + "buttonEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques de Botão", + "changeEventHandlers": "Manipuladores de Eventos de Mudança", + "changeEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Valor", + "editedEventHandlers": "Manipuladores de Eventos de Edição", + "editedEventHandlersDesc": "Manipuladores de Eventos relacionados ao estado editado de Elementos", + "clickEventHandlers": "Manipuladores de Eventos de Clique", + "clickEventHandlersDesc": "Manipuladores de Eventos relacionados a Cliques", + "keyDownEventHandlers": "Manipuladores de Eventos de Pressionar Tecla", + "keyDownEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Pressionar Tecla", + "checkboxEventHandlers": "Manipuladores de Eventos de Caixa de Seleção", + "checkboxEventHandlersDesc": "Manipuladores de Eventos relacionados a Mudanças de Caixa de Seleção", + "dragEventHandlers": "Manipuladores de Eventos de Arrastar", + "dragEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Arrastar e Soltar", + "elementEventHandlers": "Manipuladores de Eventos de Elemento", + "elementEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos Genéricos de Elemento de Dados", + "mediaEventHandlers": "Manipuladores de Eventos de Mídia", + "mediaEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mídia", + "scannerEventHandlers": "Manipuladores de Eventos de Scanner", + "scannerEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Scanner", + "chartEventHandlers": "Manipuladores de Eventos de Gráfico", + "chartEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Gráfico", + "geoMapEventHandlers": "Manipuladores de Eventos de Mapa Geográfico", + "geoMapEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Mapa Geográfico", + "stepEventHandlers": "Manipuladores de Eventos de Etapa", + "stepEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Interface de Etapa", + "shareEventHandlers": "Manipuladores de Eventos de Compartilhamento", + "shareEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Compartilhamento", + "selectEventHandlers": "Manipuladores de Eventos de Seleção", + "selectEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Seleção", + "meetingEventHandlers": "Manipuladores de Eventos de Reunião", + "meetingEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Reunião", + "collaborationEventHandlers": "Manipuladores de Eventos de Colaboração", + "collaborationEventHandlersDesc": "Manipuladores de Eventos relacionados a Eventos de Colaboração", + "set": "Definir", + "clear": "Limpar", + "reset": "Redefinir", + "messageType": "Tipo de Mensagem", + "placement": "Posição", + "description": "Descrição", + }, + "event": { + ...en.event, + + "submit": "Enviar", + "submitDesc": "Dispara ao Enviar", + "change": "Alterar", + "changeDesc": "Dispara nas Mudanças de Valor", + "focus": "Foco", + "focusDesc": "Dispara no Foco", + "blur": "Desfocar", + "blurDesc": "Dispara no Desfoque", + "click": "Clique", + "clickDesc": "Dispara no Clique", + "doubleClick": "Clique Duplo", + "doubleClickDesc": "Dispara no Duplo Clique", + "rightClick": "Clique Direito", + "rightClickDesc": "Dispara no Clique Direito", + "keyDown": "Tecla Pressionada", + "keyDownDesc": "Dispara na Pressão de Tecla", + "select": "Selecionar", + "selectDesc": "Dispara na Seleção", + "checked": "Marcado", + "checkedDesc": "Dispara quando uma caixa de seleção está Marcada", + "unchecked": "Desmarcado", + "uncheckedDesc": "Dispara quando uma caixa de seleção está Desmarcada", + "drag": "Arrastar", + "dragDesc": "Dispara no Arrastar", + "drop": "Soltar", + "dropDesc": "Dispara no Soltar", + "open": "Abrir", + "openDesc": "Dispara na Abertura", + "mute": "Mudo", + "muteDesc": "Dispara no Silêncio de um Microfone", + "unmute": "Ativar Som", + "unmuteDesc": "Dispara no Ativar Som de um Microfone", + "showCamera": "Mostrar Câmera", + "showCameraDesc": "Dispara quando Mostrar Câmera está ligado", + "hideCamera": "Ocultar Câmera", + "hideCameraDesc": "Dispara quando Mostrar Câmera está desligado", + "shareScreen": "Compartilhar Tela", + "shareScreenDesc": "Dispara ao Compartilhar Tela", + "shareScreenEnd": "Fim do Compartilhamento de Tela", + "shareScreenEndDesc": "Dispara ao Finalizar o Compartilhamento de Tela", + "shareControl": "Compartilhar Controle", + "shareControlDesc": "Dispara ao Compartilhar Controle", + "shareControlEnd": "Fim do Compartilhamento de Controle", + "shareControlEndDesc": "Dispara ao Finalizar o Compartilhamento de Controle", + "shareContent": "Compartilhar Conteúdo", + "shareContentDesc": "Dispara ao Compartilhar Conteúdo", + "shareContentEnd": "Fim do Compartilhamento de Conteúdo", + "shareContentEndDesc": "Dispara ao Finalizar o Compartilhamento de Conteúdo", + "stopShare": "Parar Compartilhamento", + "stopShareDesc": "Dispara ao Parar o Compartilhamento", + "meetingStart": "Início da Reunião", + "meetingStartDesc": "Dispara no Início da Reunião", + "meetingEnd": "Fim da Reunião", + "meetingEndDesc": "Dispara no Fim da Reunião", + "meetingJoin": "Participar da Reunião", + "meetingJoinDesc": "Dispara ao Participar da Reunião", + "meetingLeave": "Sair da Reunião", + "meetingLeaveDesc": "Dispara ao Sair da Reunião", + "play": "Reproduzir", + "playDesc": "Dispara na Reprodução", + "pause": "Pausar", + "pauseDesc": "Dispara na Pausa", + "ended": "Finalizado", + "endedDesc": "Dispara ao Finalizar", + "step": "Passo", + "stepDesc": "Dispara no Passo", + "next": "Próximo", + "nextDesc": "Dispara no Próximo", + "finished": "Finalizado", + "finishedDesc": "Dispara ao Finalizar", + "saved": "Salvo", + "savedDesc": "Dispara quando um elemento é Salvo", + "edited": "Editado", + "editedDesc": "Dispara quando um elemento é Editado", + "geoMapMove": "Mover Mapa Geográfico", + "geoMapMoveDesc": "Dispara quando os Usuários movem o Mapa Geográfico", + "geoMapZoom": "Zoom no Mapa Geográfico", + "geoMapZoomDesc": "Dispara quando os Usuários dão Zoom no Mapa Geográfico", + "geoMapSelect": "Seleção no Mapa Geográfico", + "geoMapSelectDesc": "Dispara quando os Usuários selecionam um Elemento no Mapa Geográfico", + "scannerSuccess": "Sucesso do Scanner", + "scannerSuccessDesc": "Dispara quando um Scanner escaneia com sucesso", + "scannerError": "Erro do Scanner", + "scannerErrorDesc": "Dispara quando um Scanner falha ao escanear", + "chartZoom": "Zoom no Gráfico", + "chartZoomDesc": "Dispara no Zoom do Gráfico", + "chartHover": "Hover no Gráfico", + "chartHoverDesc": "Dispara no Hover do Gráfico", + "chartSelect": "Seleção no Gráfico", + "chartSelectDesc": "Dispara na Seleção do Gráfico", + "chartDeselect": "Desseleção no Gráfico", + "chartDeselectDesc": "Dispara na Desseleção do Gráfico", + "close": "Fechar", + "closeDesc": "Dispara no Fechar", + "parse": "Analisar", + "parseDesc": "Dispara na Análise", + "success": "Sucesso", + "successDesc": "Dispara no Sucesso", + "delete": "Excluir", + "deleteDesc": "Dispara na Exclusão", + "mention": "Menção", + "mentionDesc": "Dispara na Menção", + "search": "Pesquisar", + "searchDesc": "Dispara na Pesquisa", + "selectedChange": "Alteração de Seleção", + "selectedChangeDesc": "Dispara na Alteração de Seleção", + "clickExtra": "Clique na Ação", + "clickExtraDesc": "Dispara no Clique em Elemento Extra", + "start": "Iniciar", + "startDesc": "Dispara no Início", + "resume": "Continuar", + "resumeDesc": "Dispara ao Continuar", + "countdown": "Contagem Regressiva", + "countdownDesc": "Dispara quando a contagem regressiva termina", + "reset": "Reiniciar", + "resetDesc": "Dispara ao reiniciar o temporizador", + "refresh": "Atualizar", + "refreshDesc": "Dispara ao atualizar", + }, + "style": { + ...en.style, + + "boxShadowColor": "Cor da sombra", + "boxShadow": "Caixa de sombra", + "opacity": "Opacidade", + "animation": "Animação", + "animationIterationCount": "Contagem de Iterações de Animação", + "animationDelay": "Atraso da animação", + "animationDuration": "Duração da animação", + "resetTooltip": "Redefinir estilos. Limpe o campo de entrada para redefinir um estilo individual.", + "textColor": "Cor do Texto", + "contrastText": "Cor do Texto de Contraste", + "generated": "Gerado", + "customize": "Personalizar", + "staticText": "Texto Estático", + "accent": "Acento", + "validate": "Mensagem de Validação", + "border": "Cor da Borda", + "borderRadius": "Raio da Borda", + "borderWidth": "Largura da Borda", + "borderStyle": "Estilo da Borda", + "background": "Fundo", + "headerBackground": "Fundo do Cabeçalho", + "siderBackground": "Fundo do Sider", + "footerBackground": "Fundo do Rodapé", + "fill": "Preenchimento", + "track": "Rastreamento", + "links": "Ligações", + "thumb": "Polegar", + "thumbBorder": "Borda do Polegar", + "checked": "Marcado", + "unchecked": "Desmarcado", + "handle": "Alça", + "tags": "Etiquetas", + "tagsText": "Texto das Tags", + "multiIcon": "Ícone de Seleção Múltipla", + "tabText": "Texto da Aba", + "tabAccent": "Acento da Aba", + "checkedBackground": "Fundo do Marcado", + "uncheckedBackground": "Fundo do Desmarcado", + "uncheckedBorder": "Borda do Desmarcado", + "indicatorBackground": "Fundo do Indicador", + "tableCellText": "Texto da Célula", + "selectedRowBackground": "Fundo da Linha Selecionada", + "hoverRowBackground": "Fundo da Linha em Destaque", + "hoverBackground": "Fundo em Destaque", + "textTransform": "Transformação de Texto", + "textDecoration": "Decoração do Texto", + "alternateRowBackground": "Fundo Alternado da Linha", + "tableHeaderBackground": "Fundo do Cabeçalho da Tabela", + "tableHeaderText": "Texto do Cabeçalho da Tabela", + "toolbarBackground": "Fundo da Barra de Ferramentas", + "toolbarText": "Texto da Barra de Ferramentas", + "pen": "Caneta", + "footerIcon": "Ícone do Rodapé", + "tips": "Dicas", + "margin": "Margem", + "padding": "Preenchimento", + "marginLeft": "Margem à Esquerda", + "marginRight": "Margem à Direita", + "marginTop": "Margem Superior", + "marginBottom": "Margem Inferior", + "containerHeaderPadding": "Preenchimento do Cabeçalho do Contêiner", + "containerFooterPadding": "Preenchimento do Rodapé do Contêiner", + "containerSiderPadding": "Preenchimento do Sider do Contêiner", + "containerBodyPadding": "Preenchimento do Corpo do Contêiner", + "minWidth": "Largura Mínima", + "aspectRatio": "Proporção", + "text": "Texto", + "textSize": "Tamanho do Texto", + "textWeight": "Peso do Texto", + "fontFamily": "Família da Fonte", + "fontStyle": "Estilo da Fonte", + "backgroundImage": "Imagem de Fundo", + "backgroundImageRepeat": "Repetição da Imagem de Fundo", + "backgroundImageSize": "Tamanho da Imagem de Fundo", + "backgroundImagePosition": "Posição da Imagem de Fundo", + "backgroundImageOrigin": "Origem da Imagem de Fundo", + "headerBackgroundImage": "Imagem de Fundo do Cabeçalho", + "headerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Cabeçalho", + "headerBackgroundImageSize": "Tamanho da Imagem de Fundo do Cabeçalho", + "headerBackgroundImagePosition": "Posição da Imagem de Fundo do Cabeçalho", + "headerBackgroundImageOrigin": "Origem da Imagem de Fundo do Cabeçalho", + "footerBackgroundImage": "Imagem de Fundo do Rodapé", + "footerBackgroundImageRepeat": "Repetição da Imagem de Fundo do Rodapé", + "footerBackgroundImageSize": "Tamanho da Imagem de Fundo do Rodapé", + "footerBackgroundImagePosition": "Posição da Imagem de Fundo do Rodapé", + "footerBackgroundImageOrigin": "Origem da Imagem de Fundo do Rodapé", + "rotation": "Rotação", + "alternateBackground": "Cor de fundo alternativa", + "headerText": "Cor do texto do cabeçalho", + "labelColor": "Cor da etiqueta", + "label": "Cor da etiqueta", + "lineHeight": "Altura da linha", + "subTitleColor": "Cor do subtítulo", + "titleText": "Título Cor", + "success": "Cor do sucesso", + "siderBackgroundImage": "Imagem de fundo do Sider", + "siderBackgroundImageRepeat": "Repetição da imagem de fundo do Sider", + "siderBackgroundImageSize": "Tamanho da imagem de fundo do Sider", + "siderBackgroundImagePosition": "Posição da imagem de fundo do Sider", + "siderBackgroundImageOrigin": "Origem da imagem de fundo do Sider", + "activeBackground": "Cor de fundo ativa", + "labelBackground": "Cor de fundo da etiqueta", + + "radiusTip": "Especifica o raio dos cantos do elemento. Exemplo: 5px, 50% ou 1em.", + "gapTip": "Especifica o espaçamento entre linhas e colunas em um contêiner de grade ou flex. Exemplo: 10px, 1rem ou 5%.", + "cardRadiusTip": "Define o raio dos cantos para componentes de cartão. Exemplo: 10px, 15px.", + "borderWidthTip": "Especifica a largura da borda do elemento. Exemplo: 1px, 0.5em ou fina.", + "borderStyleTip": "Define o estilo da borda. Exemplo: sólido, tracejado, pontilhado ou nenhum.", + "marginTip": "Define a margem externa ao redor de um elemento. Exemplo: 10px, 2em ou auto. Pode ser combinado: 0px 20px ou separado para 4 direções: 0px 1px 5px 2px.", + "directionTip": "Especifica a direção do layout. Exemplo: row, column ou row-reverse.", + "detailSizeTip": "Define o tamanho de detalhes específicos no layout. Exemplo: 10px, 2em ou 80%.", + "chartOpacityTip": "Especifica a opacidade do gráfico. Exemplo: 1 (opaco), 0.5 (50% transparente).", + "chartBoxShadowTip": "Define a sombra projetada pelo gráfico. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3).", + "chartBorderStyleTip": "Define o estilo da borda do gráfico. Exemplo: sólido, tracejado ou pontilhado.", + "chartBorderRadiusTip": "Especifica o raio dos cantos da borda do gráfico. Exemplo: 10px, 20%.", + "chartBorderWidthTip": "Especifica a largura da borda do gráfico. Exemplo: 2px, 0.5em.", + "chartTextSizeTip": "Especifica o tamanho da fonte do texto do gráfico. Exemplo: 16px, 1em, 120%.", + "chartTextWeightTip": "Especifica o peso da fonte do texto do gráfico. Exemplo: normal, negrito, ou 700.", + "chartFontFamilyTip": "Especifica a família da fonte para o texto do gráfico. Exemplo: Arial, Helvetica ou 'Times New Roman'.", + "chartFontStyleTip": "Especifica o estilo da fonte do texto do gráfico. Exemplo: normal, itálico ou oblíquo.", + "animationIterationCountTip": "Define quantas vezes uma animação deve ser executada. Exemplo: infinito, 1 ou 3.", + "opacityTip": "Define o nível de transparência do elemento. Exemplo: 1 (opaco), 0.5 (50% transparente), 0 (invisível).", + "boxShadowColorTip": "Define a cor da sombra da caixa. Exemplo: rgba(0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Define a cor de fundo do gráfico. Exemplo: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Especifica as cores do gradiente para o fundo do gráfico. Exemplo: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Especifica a cor da sombra do gráfico. Exemplo: rgba(0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Define a cor da borda do gráfico. Exemplo: #000000, rgba(0, 0, 0, 0.5).", + "chartTextColorTip": "Define a cor do texto do gráfico. Exemplo: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Define a sombra projetada por um elemento. Exemplo: 0px 4px 8px rgba(0, 0, 0, 0.3), inset 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Especifica o atraso antes do início da animação. Exemplo: 1s, 500ms, 0.", + "animationDurationTip": "Define a duração da animação. Exemplo: 2s, 3s, 500ms.", + "paddingTip": "Define o espaço interno dentro de um elemento. Exemplo: 10px, 2em, 5%. Pode ser combinado: 0px 20px ou separado para todas as 4 direções: 10px 21px 5px 20px.", + "containerHeaderPaddingTip": "Define o espaço interno para o cabeçalho do contêiner. Exemplo: 10px, 1rem.", + "containerSiderPaddingTip": "Define o espaço interno para a barra lateral do contêiner. Exemplo: 8px, 1em.", + "containerFooterPaddingTip": "Define o espaço interno para o rodapé do contêiner. Exemplo: 12px, 1rem.", + "containerBodyPaddingTip": "Define o espaço interno para o corpo do contêiner. Exemplo: 15px, 2em.", + "textSizeTip": "Especifica o tamanho da fonte do texto. Exemplo: 14px, 1.2em, 110%.", + "textWeightTip": "Define o peso da fonte do texto. Exemplo: normal, negrito, 400.", + "fontFamilyTip": "Especifica a família da fonte do texto. Exemplo: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Define a decoração do texto. Exemplo: sublinhado, riscado, nenhum.", + "textTransformTip": "Define a capitalização do texto. Exemplo: maiúsculas, minúsculas, capitalizado.", + "fontStyleTip": "Define o estilo da fonte do texto. Exemplo: normal, itálico, oblíquo.", + "backgroundImageTip": "Especifica a imagem de fundo de um elemento. Exemplo: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Especifica a imagem de fundo para o cabeçalho. Exemplo: url('header.jpg').", + "footerBackgroundImageTip": "Especifica a imagem de fundo para o rodapé. Exemplo: url('footer.jpg').", + "backgroundImageRepeatTip": "Define como a imagem de fundo é repetida. Exemplo: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Define como a imagem de fundo do cabeçalho é repetida. Exemplo: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Define como a imagem de fundo do rodapé é repetida. Exemplo: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Define o tamanho da imagem de fundo. Exemplo: cover, contain, 50% 50%.", + "backgroundImagePositionTip": "Define a posição da imagem de fundo. Exemplo: center, top right, 10% 20%.", + "backgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo. Exemplo: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do cabeçalho. Exemplo: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Especifica a área de posicionamento da imagem de fundo do rodapé. Exemplo: padding-box, border-box, content-box.", + "rotationTip": "Especifica o ângulo de rotação do elemento. Exemplo: 45deg, 90deg, -180deg.", + "lineHeightTip": "Define a altura de uma linha de texto. Exemplo: 1.5, 2, 120%." + + }, + "export": { + ...en.export, + + "hiddenDesc": "Se verdadeiro, o componente está oculto", + "disabledDesc": "Se verdadeiro, o componente está desativado e não interativo", + "visibleDesc": "Se verdadeiro, o componente é visível", + "inputValueDesc": "Valor atual da entrada", + "invalidDesc": "Indica se o valor é inválido", + "placeholderDesc": "Texto de espaço reservado quando nenhum valor está definido", + "requiredDesc": "Se verdadeiro, um valor válido é necessário", + "submitDesc": "Enviar Formulário", + "richTextEditorValueDesc": "Valor atual do Editor", + "richTextEditorReadOnlyDesc": "Se verdadeiro, o Editor está somente leitura", + "richTextEditorHideToolBarDesc": "Se verdadeiro, a barra de ferramentas está oculta", + "jsonEditorDesc": "Dados JSON atuais", + "sliderValueDesc": "Valor atualmente selecionado", + "sliderMaxValueDesc": "Valor máximo do controle deslizante", + "sliderMinValueDesc": "Valor mínimo do controle deslizante", + "sliderStartDesc": "Valor do ponto inicial selecionado", + "sliderEndDesc": "Valor do ponto final selecionado", + "ratingValueDesc": "Classificação atualmente selecionada", + "ratingMaxDesc": "Valor máximo de classificação", + "datePickerValueDesc": "Data atualmente selecionada", + "datePickerFormattedValueDesc": "Data selecionada formatada", + "datePickerTimestampDesc": "Carimbo de data/hora da data selecionada", + "dateRangeStartDesc": "Data de início do intervalo", + "dateRangeEndDesc": "Data de término do intervalo", + "dateRangeStartTimestampDesc": "Carimbo de data/hora da data de início", + "dateRangeEndTimestampDesc": "Carimbo de data/hora da data de término", + "dateRangeFormattedValueDesc": "Intervalo de datas formatado", + "dateRangeFormattedStartValueDesc": "Data de início formatada", + "dateRangeFormattedEndValueDesc": "Data de término formatada", + "timePickerValueDesc": "Hora atualmente selecionada", + "timePickerFormattedValueDesc": "Hora selecionada formatada", + "timeRangeStartDesc": "Hora de início do intervalo", + "timeRangeEndDesc": "Hora de término do intervalo", + "timeRangeFormattedValueDesc": "Intervalo de horas formatado", + "timeRangeFormattedStartValueDesc": "Hora de início formatada", + "timeRangeFormattedEndValueDesc": "Hora de término formatada", + "timeZone": "Fuso horário", + "timeZoneDesc": "Fuso horário da data selecionada", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Por favor, insira um endereço de e-mail válido", + "url": "Por favor, insira uma URL válida", + "regex": "Por favor, corresponda ao padrão especificado", + "maxLength": "Muitos caracteres, atual: {length}, máximo: {maxLength}", + "minLength": "Não há caracteres suficientes, atual: {length}, mínimo: {minLength}", + "maxValue": "O valor excede o máximo, atual: {value}, máximo: {max}", + "minValue": "O valor está abaixo do mínimo, atual: {value}, mínimo: {min}", + "maxTime": "O tempo excede o máximo, atual: {time}, máximo: {maxTime}", + "minTime": "O tempo está abaixo do mínimo, atual: {time}, mínimo: {minTime}", + "maxDate": "A data excede o máximo, atual: {date}, máximo: {maxDate}", + "minDate": "A data está abaixo do mínimo, atual: {date}, mínimo: {minDate}", + }, + "query": { + ...en.query, + + "noQueries": "Não há consultas de dados disponíveis.", + "queryTutorialButton": "Ver {value} documentos", + "datasource": "Suas Fontes de Dados", + "newDatasource": "Nova Fonte de Dados", + "generalTab": "Geral", + "notificationTab": "Notificação", + "advancedTab": "Avançado", + "showFailNotification": "Mostrar Notificação em Caso de Falha", + "failCondition": "Condições de Falha", + "failConditionTooltip1": "Personalize as condições de falha e as notificações correspondentes.", + "failConditionTooltip2": "Se qualquer condição retornar verdadeira, a consulta será marcada como falha e acionará a notificação correspondente.", + "showSuccessNotification": "Mostrar Notificação em Caso de Sucesso", + "successMessageLabel": "Mensagem de Sucesso", + "successMessage": "Consulta Bem-sucedida", + "notifyDuration": "Duração", + "notifyDurationTooltip": "Duração da notificação. A unidade de tempo pode ser 's' (segundo, padrão) ou 'ms' (milissegundo). O valor padrão é {default}s. O máximo é {max}s.", + "successMessageWithName": "{name} consulta bem-sucedida", + "failMessageWithName": "{name} consulta falhou: {result}", + "showConfirmationModal": "Mostrar Modal de Confirmação Antes de Executar", + "confirmationMessageLabel": "Mensagem de Confirmação", + "confirmationMessage": "Tem certeza de que deseja executar esta consulta de dados?", + "newQuery": "Nova Consulta de Dados", + "newFolder": "Nova Pasta", + "recentlyUsed": "Recentemente Utilizados", + "folder": "Pasta", + "folderNotEmpty": "A pasta não está vazia", + "dataResponder": "Respondedor de Dados", + "tempState": "Estado Temporário", + "transformer": "Transformador", + "quickRestAPI": "Consulta REST", + "quickStreamAPI": "Consulta de Fluxo", + "quickGraphql": "Consulta GraphQL", + "lowcoderAPI": "API Lowcoder", + "executeJSCode": "Executar Código JavaScript", + "importFromQueryLibrary": "Importar da Biblioteca de Consultas", + "importFromFile": "Importar de Arquivo", + "triggerType": "Disparado quando...", + "triggerTypeAuto": "Quando as entradas mudam ou após o carregamento da aplicação (página)", + "triggerTypePageLoad": "Após o carregamento da aplicação (página)", + "triggerTypeManual": "Somente quando você aciona manualmente", + "triggerTypeInputChange": "Quando as entradas mudam", + "triggerTypeQueryExec": "Após a execução da consulta", + "triggerTypeTimeout": "Após a aplicação (página) carregar e o tempo limite", + "delayTime": "Tempo de atraso", + "chooseDataSource": "Escolha uma Fonte de Dados", + "method": "Método", + "updateExceptionDataSourceTitle": "Atualizar Fonte de Dados com Falha", + "updateExceptionDataSourceContent": "Atualize a seguinte consulta com a mesma fonte de dados com falha:", + "update": "Atualizar", + "disablePreparedStatement": "Desativar Declarações Preparadas", + "disablePreparedStatementTooltip": "Desativar declarações preparadas pode gerar SQL dinâmico, mas aumenta o risco de injeção de SQL", + "timeout": "Tempo Limite Após", + "timeoutTooltip": "Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor padrão: {defaultSeconds} segundos. Valor máximo: {maxSeconds} segundos. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", + "periodic": "Executar Esta Consulta de Dados Periodicamente", + "periodicTime": "Período", + "periodicTimeTooltip": "Período entre execuções sucessivas. Unidade padrão: ms. Unidades de entrada suportadas: ms, s. Valor mínimo: 100ms. A execução periódica é desativada para valores abaixo de 100ms. Exemplo: 300 (ou seja, 300ms), 800ms, 5s.", + "cancelPrevious": "Ignorar Resultados de Execuções Anteriores Não Concluídas", + "cancelPreviousTooltip": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se elas não foram concluídas, e essas execuções ignoradas não acionarão a lista de eventos da consulta.", + "dataSourceStatusError": "Se uma nova execução for acionada, o resultado das execuções anteriores não concluídas será ignorado se as execuções anteriores não foram concluídas, e as execuções ignoradas não acionarão a lista de eventos da consulta.", + "success": "Sucesso", + "fail": "Falha", + "successDesc": "Acionado Quando a Execução é Bem-sucedida", + "failDesc": "Acionado Quando a Execução Falha", + "fixedDelayError": "Consulta Não Executada", + "execSuccess": "Execução Bem-sucedida", + "execFail": "Execução Falhou", + "execIgnored": "Os Resultados Dessa Consulta Foram Ignorados", + "deleteSuccessMessage": "Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer", + "dataExportDesc": "Dados Obtidos pela Consulta Atual", + "codeExportDesc": "Código de Status da Consulta Atual", + "successExportDesc": "Se a Consulta Atual Foi Executada com Sucesso", + "messageExportDesc": "Informação Retornada pela Consulta Atual", + "extraExportDesc": "Outros Dados na Consulta Atual", + "isFetchingExportDesc": "A Consulta Atual Está na Requisição", + "runTimeExportDesc": "Tempo de Execução da Consulta Atual (ms)", + "latestEndTimeExportDesc": "Última Hora de Execução", + "triggerTypeExportDesc": "Tipo de Gatilho", + "chooseResource": "Escolha um Recurso", + "createDataSource": "Criar uma Nova Fonte de Dados", + "editDataSource": "Editar", + "datasourceName": "Nome", + "datasourceNameRuleMessage": "Por Favor, Insira um Nome para a Fonte de Dados", + "generalSetting": "Configurações Gerais", + "advancedSetting": "Configurações Avançadas", + "port": "Porta", + "portRequiredMessage": "Por Favor, Insira uma Porta", + "portErrorMessage": "Por Favor, Insira uma Porta Correta", + "connectionType": "Tipo de Conexão", + "regular": "Regular", + "host": "Anfitrião", + "hostRequiredMessage": "Por Favor, Insira um Nome de Domínio de Host ou Endereço IP", + "userName": "Nome de Usuário", + "password": "Senha", + "encryptedServer": "-------- Criptografado no Lado do Servidor --------", + "uriRequiredMessage": "Por Favor, Insira uma URI", + "urlRequiredMessage": "Por Favor, Insira uma URL", + "uriErrorMessage": "Por Favor, Insira uma URI Correta", + "urlErrorMessage": "Por Favor, Insira uma URL Correta", + "httpRequiredMessage": "Por Favor, Insira http:// ou https://", + "databaseName": "Nome do Banco de Dados", + "databaseNameRequiredMessage": "Por Favor, Insira um Nome de Banco de Dados", + "useSSL": "Usar SSL", + "userNameRequiredMessage": "Por Favor, Insira Seu Nome", + "passwordRequiredMessage": "Por Favor, Insira Sua Senha", + "authentication": "Autenticação", + "authenticationType": "Tipo de Autenticação", + "sslCertVerificationType": "Verificação de Certificado SSL", + "sslCertVerificationTypeDefault": "Verificar Certificado CA", + "sslCertVerificationTypeSelf": "Verificar Certificado Autoassinado", + "sslCertVerificationTypeDisabled": "Desativado", + "selfSignedCert": "Certificado Autoassinado", + "selfSignedCertRequireMsg": "Por Favor, Insira Seu Certificado", + "enableTurnOffPreparedStatement": "Ativar Alternância de Declarações Preparadas para Consultas", + "enableTurnOffPreparedStatementTooltip": "Você pode ativar ou desativar declarações preparadas na guia Avançado da consulta", + "serviceName": "Nome do Serviço", + "serviceNameRequiredMessage": "Por Favor, Insira o Nome do Seu Serviço", + "useSID": "Usar SID", + "connectSuccessfully": "Conexão Bem-sucedida", + "saveSuccessfully": "Salvo com Sucesso", + "database": "Banco de Dados", + "cloudHosting": "Lowcoder hospedado na nuvem não pode acessar serviços locais usando 127.0.0.1 ou localhost. Tente se conectar a fontes de dados de rede pública ou use um proxy reverso para serviços privados.", + "notCloudHosting": "Para implantação hospedada em contêineres, o Lowcoder usa redes bridge, portanto, 127.0.0.1 e localhost são inválidos para endereços de host. Para acessar fontes de dados de máquina local, consulte", + "howToAccessHostDocLink": "Como Acessar API/Banco de Dados do Host", + "returnList": "Retornar", + "chooseDatasourceType": "Escolha o Tipo de Fonte de Dados", + "viewDocuments": "Ver Documentos", + "testConnection": "Testar Conexão", + "save": "Salvar", + "whitelist": "Lista de Permissões", + "whitelistTooltip": "Adicione os endereços IP do Lowcoder à lista de permissões da sua fonte de dados conforme necessário.", + "address": "Endereço: ", + "nameExists": "O nome {name} já existe", + "jsQueryDocLink": "Sobre Consulta JavaScript", + "dynamicDataSourceConfigLoadingText": "Carregando configuração extra da fonte de dados...", + "dynamicDataSourceConfigErrText": "Falha ao carregar configuração extra da fonte de dados.", + "retry": "Tentar Novamente", + "categoryDatabase": "Banco de Dados", + "categoryBigdata": "Big Data", + "categoryAi": "IA", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Desenvolvimento de Aplicativos", + "categoryWorkflow": "Fluxo de Trabalho", + "categoryMessaging": "Mensagens", + "categoryAssets": "Ativos e Armazenamento", + "categoryProjectManagement": "Gerenciamento de Projetos", + "categoryCrm": "CRM", + "categoryEcommerce": "Comércio Eletrônico", + "categoryWebscrapers": "Raspadores Web & Open Data", + "categoryDocumentHandling": "Geração de Relatórios e Documentos", + "categoryRPA": "Automação de Processos Robóticos", + "componentsUsingQueryTitle": "Uso da Consulta", + "componentsUsingQuery": "Onde esta consulta está em uso", + "variables": "Variáveis" + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Pares Chave-Valor", + "object": "Objeto", + "allowMultiModify": "Permitir Modificação Múltipla de Linhas", + "allowMultiModifyTooltip": "Se selecionado, todas as linhas que atendem às condições serão operadas. Caso contrário, apenas a primeira linha que atende às condições será operada.", + "array": "Arranjo", + "insertList": "Inserir Lista", + "insertListTooltip": "Valores inseridos quando eles não existem", + "filterRule": "Regra de Filtro", + "updateList": "Atualizar Lista", + "updateListTooltip": "Valores atualizados conforme existem podem ser substituídos pelos mesmos valores da lista de inserção", + "sqlMode": "Modo SQL", + "guiMode": "Modo GUI", + "operation": "Operação", + "insert": "Inserir", + "upsert": "Inserir, mas Atualizar em Caso de Conflito", + "update": "Atualizar", + "delete": "Excluir", + "bulkInsert": "Inserção em Lote", + "bulkUpdate": "Atualização em Lote", + "table": "Tabela", + "primaryKeyColumn": "Coluna Chave Primária", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Comando Bruto", + "queryTutorialButton": "Ver Documentos da API do Elasticsearch", + "request": "Pedido", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Índice da Linha", + "spreadsheetId": "ID da Planilha", + "sheetName": "Nome da Planilha", + "readData": "Ler Dados", + "appendData": "Anexar Linha", + "updateData": "Atualizar Linha", + "deleteData": "Excluir Linha", + "clearData": "Limpar Linha", + "serviceAccountRequireMessage": "Por favor, insira sua Conta de Serviço", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Ordenar", + "sortPlaceholder": "Nome", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Exportar para JSON", + "noInput": "A Consulta Atual Não Possui Entrada", + "inputName": "Nome", + "inputDesc": "Descrição", + "emptyInputs": "Sem Entradas", + "clickToAdd": "Adicionar", + "chooseQuery": "Escolher Consulta", + "viewQuery": "Visualizar Consulta", + "chooseVersion": "Escolher Versão", + "latest": "Mais Recente", + "publish": "Publicar", + "historyVersion": "Versão Histórica", + "deleteQueryLabel": "Excluir Consulta", + "deleteQueryContent": "A consulta não pode ser recuperada após a exclusão. Excluir a consulta?", + "run": "Executar", + "readOnly": "Somente Leitura", + "exit": "Sair", + "recoverAppSnapshotContent": "Restaurar a consulta atual para a versão {version}", + "searchPlaceholder": "Pesquisar Consulta", + "allQuery": "Todas as Consultas", + "deleteQueryTitle": "Excluir Consulta", + "unnamed": "Sem Nome", + "publishNewVersion": "Publicar Nova Versão", + "publishSuccess": "Publicado com Sucesso", + "version": "Versão", + "desc": "Descrição", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "Ver ", + "extParamsTooltip": "Configurar Parâmetros de Conexão Adicionais", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Consultar Usuários do Espaço de Trabalho", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Comando Bruto", + "command": "Comando", + "queryTutorial": "Visualizar Documentos de Comandos do Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Se {type} for selecionado, o formato do valor deve ser {object}. Exemplo: {example}", + "text": "Texto", + "file": "Arquivo", + "extraBodyTooltip": "As chaves em Corpo Extra serão anexadas ao corpo com tipos JSON ou de Dados de Formulário", + "forwardCookies": "Encaminhar Cookies", + "forwardAllCookies": "Encaminhar Todos os Cookies", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Anexo", + "attachmentTooltip": "Pode ser usado com o componente de envio de arquivo, os dados precisam ser convertidos para:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Remetente", + "recipient": "Destinatário", + "carbonCopy": "Cópia Carbono", + "blindCarbonCopy": "Cópia Carbono Oculta", + "subject": "Assunto", + "content": "Conteúdo", + "contentTooltip": "Suporta texto de entrada ou HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Dashboards e Relatórios", + "layout": "Layout e Navegação", + "forms": "Coleta de Dados e Formulários", + "collaboration": "Reuniões e Colaboração", + "projectmanagement": "Gerenciamento de Projetos", + "scheduling": "Calendário e Agendamento", + "documents": "Gerenciamento de Documentos e Arquivos", + "itemHandling": "Manipulação de Itens e Assinaturas", + "multimedia": "Multimídia e Animação", + "integration": "Integração e Extensão", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Auto Completar", + "autoCompleteCompDesc": "Um campo de entrada que fornece sugestões enquanto você digita, melhorando a experiência e a precisão do usuário.", + "autoCompleteCompKeywords": "sugestões, auto completar, digitação, entrada", + "inputCompName": "Entrada de Texto", + "inputCompDesc": "Um campo de entrada de texto básico que permite aos usuários inserir e editar texto.", + "inputCompKeywords": "texto, entrada, campo, editar", + "textAreaCompName": "Área de Texto", + "textAreaCompDesc": "Uma entrada de texto de várias linhas para conteúdo de formulário mais longo, como comentários ou descrições.", + "textAreaCompKeywords": "multilinha, área de texto, entrada, texto", + "passwordCompName": "Senha", + "passwordCompDesc": "Um campo seguro para entrada de senha, ocultando os caracteres para privacidade.", + "passwordCompKeywords": "senha, segurança, entrada, oculto", + "richTextEditorCompName": "Editor de Texto Rico", + "richTextEditorCompDesc": "Um editor de texto avançado que oferece opções de formatação ricas, como negrito, itálico e listas.", + "richTextEditorCompKeywords": "editor, texto, formatação, conteúdo rico", + "numberInputCompName": "Entrada Numérica", + "numberInputCompDesc": "Um campo específico para entrada numérica, com controles para incrementar e decrementar valores.", + "numberInputCompKeywords": "número, entrada, incrementar, decrementar", + "sliderCompName": "Controle Deslizante", + "sliderCompDesc": "Um componente gráfico deslizante para selecionar um valor ou intervalo dentro de uma escala definida.", + "sliderCompKeywords": "controle deslizante, intervalo, entrada, gráfico", + "rangeSliderCompName": "Controle Deslizante de Faixa", + "rangeSliderCompDesc": "Um controle deslizante com dois manipuladores para selecionar um intervalo de valores, útil para filtrar ou definir limites.", + "rangeSliderCompKeywords": "faixa, controle deslizante, manipulador duplo, filtro", + "ratingCompName": "Avaliação", + "ratingCompDesc": "Um componente para capturar avaliações do usuário, exibidas como estrelas.", + "ratingCompKeywords": "avaliação, estrelas, feedback, entrada", + "switchCompName": "Interruptor", + "switchCompDesc": "Um interruptor de alternância para decisões de ligar/desligar ou sim/não.", + "switchCompKeywords": "alternar, interruptor, ligar/desligar, controle", + "selectCompName": "Selecionar", + "selectCompDesc": "Um menu suspenso para selecionar de uma lista de opções.", + "selectCompKeywords": "menu suspenso, selecionar, opções, menu", + "multiSelectCompName": "Seleção Múltipla", + "multiSelectCompDesc": "Um componente que permite a seleção de vários itens em uma lista suspensa.", + "multiSelectCompKeywords": "seleção múltipla, múltiplo, menu suspenso, escolhas", + "cascaderCompName": "Cascata", + "cascaderCompDesc": "Um menu suspenso multinível para seleção de dados hierárquicos, como selecionar uma localização.", + "cascaderCompKeywords": "cascata, hierárquico, menu suspenso, níveis", + "checkboxCompName": "Caixa de Seleção", + "checkboxCompDesc": "Uma caixa de seleção padrão para opções que podem ser selecionadas ou desmarcadas.", + "checkboxCompKeywords": "caixa de seleção, opções, selecionar, alternar", + "radioCompName": "Botão de Rádio", + "radioCompDesc": "Botões de rádio para selecionar uma opção de um conjunto, onde apenas uma escolha é permitida.", + "radioCompKeywords": "botão de rádio, seleção, escolha única", + "segmentedControlCompName": "Controle Segmentado", + "segmentedControlCompDesc": "Um controle com opções segmentadas para alternar rapidamente entre várias escolhas.", + "segmentedControlCompKeywords": "segmentado, controle, alternar, opções", + "stepControlCompName": "Controle de Etapas", + "stepControlCompDesc": "Um controle com opções de etapas para oferecer etapas guiadas visualmente para aplicativos como formulários ou assistentes.", + "stepControlCompKeywords": "etapas, controle, alternar, opções", + "fileUploadCompName": "Upload de Arquivo", + "fileUploadCompDesc": "Um componente para fazer upload de arquivos, com suporte para arrastar e soltar e seleção de arquivos.", + "fileUploadCompKeywords": "arquivo, upload, arrastar e soltar, selecionar", + "dateCompName": "Data", + "dateCompDesc": "Um componente seletor de datas para selecionar datas a partir de uma interface de calendário.", + "dateCompKeywords": "data, seletor, calendário, selecionar", + "dateRangeCompName": "Intervalo de Datas", + "dateRangeCompDesc": "Um componente para selecionar um intervalo de datas, útil para sistemas de reserva ou filtros.", + "dateRangeCompKeywords": "intervalo de datas, selecionar, reserva, filtro", + "timeCompName": "Hora", + "timeCompDesc": "Um componente de seleção de hora para escolher horas específicas do dia.", + "timeCompKeywords": "hora, seletor, selecionar, relógio", + "timeRangeCompName": "Intervalo de Horário", + "timeRangeCompDesc": "Um componente para selecionar um intervalo de tempo, frequentemente usado em aplicativos de agendamento.", + "timeRangeCompKeywords": "intervalo de tempo, selecionar, agendamento, duração", + "buttonCompName": "Botão de Formulário", + "buttonCompDesc": "Um componente de botão versátil para enviar formulários, acionar ações ou navegar.", + "buttonCompKeywords": "botão, enviar, ação, navegar", + "meetingControlCompName": "Botão de Ícone", + "meetingCompDesc": "Um botão para controlar funções como iniciar, encerrar, silenciar ou compartilhar.", + "meetingCompKeywords": "controle, botão, iniciar, encerrar", + "linkCompName": "Ligação a", + "linkCompDesc": "Um componente de exibição de hyperlink para navegação ou vinculação a recursos externos.", + "linkCompKeywords": "link, hyperlink, navegação, externo", + "scannerCompName": "Scanner", + "scannerCompDesc": "Um componente para digitalizar códigos de barras, códigos QR e outros dados semelhantes.", + "scannerCompKeywords": "scanner, código de barras, código QR, digitalizar", + "dropdownCompName": "Menu Suspenso", + "dropdownCompDesc": "Um menu suspenso para exibir de forma compacta uma lista de opções.", + "dropdownCompKeywords": "menu suspenso, menu, opções, selecionar", + "toggleButtonCompName": "Botão de Alternância", + "toggleButtonCompDesc": "Um botão que pode alternar entre dois estados ou opções.", + "toggleButtonCompKeywords": "alternar, botão, mudar, estado", + "textCompName": "Exibição de Texto", + "textCompDesc": "Um componente simples para exibir conteúdo de texto estático ou dinâmico, incluindo formatação Markdown.", + "textCompKeywords": "texto, exibição, estático, dinâmico", + "tableCompName": "Tabela", + "tableCompDesc": "Um componente de tabela rico para exibir dados em um formato de tabela estruturada, com opções de ordenação e filtragem, exibição de dados em árvore e linhas extensíveis.", + "tableCompKeywords": "tabela, dados, ordenação, filtragem", + "imageCompName": "Imagem", + "imageCompDesc": "Um componente para exibir imagens, com suporte a vários formatos baseados em URI ou dados Base64.", + "imageCompKeywords": "imagem, exibição, mídia, Base64", + "progressCompName": "Progresso", + "progressCompDesc": "Um indicador visual de progresso, geralmente usado para mostrar o status de conclusão de uma tarefa.", + "progressCompKeywords": "progresso, indicador, status, tarefa", + "progressCircleCompName": "Círculo de Progresso", + "progressCircleCompDesc": "Um indicador de progresso circular, frequentemente usado para estados de carregamento ou tarefas com limite de tempo.", + "progressCircleCompKeywords": "círculo, progresso, indicador, carregamento", + "fileViewerCompName": "Visualizador de Arquivos", + "fileViewerCompDesc": "Um componente para visualizar vários tipos de arquivos, incluindo documentos e imagens.", + "fileViewerCompKeywords": "arquivo, visualizador, documento, imagem", + "dividerCompName": "Divisor", + "dividerCompDesc": "Um componente visual de divisão, usado para separar conteúdo ou seções em um layout.", + "dividerCompKeywords": "divisor, separador, layout, design", + "qrCodeCompName": "Código QR", + "qrCodeCompDesc": "Um componente para exibir códigos QR, útil para digitalização rápida e transferência de informações.", + "qrCodeCompKeywords": "código QR, digitalização, código de barras, informação", + "formCompName": "Formulário", + "formCompDesc": "Um componente contêiner para construir formulários estruturados com vários tipos de entrada.", + "formCompKeywords": "formulário, entrada, contêiner, estrutura", + "jsonSchemaFormCompName": "Formulário de Esquema JSON", + "jsonSchemaFormCompDesc": "Um componente de formulário dinâmico gerado com base em um esquema JSON.", + "jsonSchemaFormCompKeywords": "JSON, esquema, formulário, dinâmico", + "containerCompName": "Contêiner", + "containerCompDesc": "Um contêiner de uso geral para layout e organização de elementos de IU.", + "containerCompKeywords": "contêiner, layout, organização, IU", + "floatTextContainerCompName": "Contêiner de Texto Flutuante", + "floatTextContainerCompDesc": "Componente de Contêiner de Texto Flutuante", + "floatTextContainerCompKeywords": "contêiner, layout, texto, fluxo", + "collapsibleContainerCompName": "Contêiner Dobrável", + "collapsibleContainerCompDesc": "Um contêiner que pode ser expandido ou recolhido, ideal para gerenciar a visibilidade do conteúdo.", + "collapsibleContainerCompKeywords": "dobrável, contêiner, expandir, recolher", + "tabbedContainerCompName": "Contêiner com Abas", + "tabbedContainerCompDesc": "Um contêiner com navegação em abas para organizar o conteúdo em painéis separados.", + "tabbedContainerCompKeywords": "com abas, contêiner, navegação, painéis", + "pageLayoutCompName": "Layout de Página", + "pageLayoutCompDesc": "Um contêiner que oferece criar um layout com áreas de cabeçalho, lateral, rodapé e conteúdo principal", + "pageLayoutCompKeywords": "layout, contêiner, navegação, páginas", + "modalCompName": "Modal", + "modalCompDesc": "Um componente de modal pop-up para exibir conteúdo, alertas ou formulários em foco.", + "modalCompKeywords": "modal, pop-up, alerta, formulário", + "listViewCompName": "Visualização de Lista", + "listViewCompDesc": "Um componente para apresentar uma lista de itens ou dados, onde pode colocar outros componentes. Como um repetidor.", + "listViewCompKeywords": "lista, ver, exibir, repetidor", + "gridCompName": "Grade", + "gridCompDesc": "Um componente de grade flexível para criar layouts estruturados com linhas e colunas como uma extensão ao componente de Visualização de Lista.", + "gridCompKeywords": "grade, layout, linhas, colunas", + "navigationCompName": "Navegação", + "navigationCompDesc": "Um componente de navegação para criar menus, trilhas de navegação ou abas para navegação no site.", + "navigationCompKeywords": "navegação, menu, trilhas de navegação, abas", + "iframeCompName": "IFrame", + "iframeCompDesc": "Um componente de quadro inline para incorporar páginas da web e aplicativos externos ou conteúdo dentro do aplicativo.", + "iframeCompKeywords": "iframe, incorporar, página da web, conteúdo", + "customCompName": "Componente Personalizado", + "customCompDesc": "Um componente flexível e programável para criar elementos de IU exclusivos e definidos pelo usuário, adaptados às suas necessidades específicas.", + "customCompKeywords": "personalizado, definido pelo usuário, flexível, programável", + "moduleCompName": "Módulo", + "moduleCompDesc": "Use Módulos para criar Micro-Apps projetadas para encapsular funcionalidades ou recursos específicos. Os módulos podem então ser incorporados e reutilizados em todos os aplicativos.", + "moduleCompKeywords": "módulo, micro-app, funcionalidade, reutilizável", + "jsonExplorerCompName": "Explorador JSON", + "jsonExplorerCompDesc": "Um componente para explorar visualmente e interagir com estruturas de dados JSON.", + "jsonExplorerCompKeywords": "JSON, explorador, dados, estrutura", + "jsonEditorCompName": "Editor JSON", + "jsonEditorCompDesc": "Um componente editor para criar e modificar dados JSON com validação e destaque de sintaxe.", + "jsonEditorCompKeywords": "JSON, editor, modificar, validar", + "treeCompName": "Árvore", + "treeCompDesc": "Um componente de estrutura de árvore para exibir dados hierárquicos, como sistemas de arquivos ou organogramas.", + "treeCompKeywords": "árvore, hierárquico, dados, estrutura", + "treeSelectCompName": "Seleção de Árvore", + "treeSelectCompDesc": "Um componente de seleção que apresenta opções em um formato de árvore hierárquica, permitindo seleções organizadas e aninhadas.", + "treeSelectCompKeywords": "árvore, selecionar, hierárquica, aninhada", + "audioCompName": "Áudio", + "audioCompDesc": "Um componente para incorporar conteúdo de áudio, com controles para reprodução e ajuste de volume.", + "audioCompKeywords": "áudio, reprodução, som, música", + "videoCompName": "Vídeo", + "videoCompDesc": "Um componente multimídia para incorporar e reproduzir conteúdo de vídeo, com suporte para vários formatos.", + "videoCompKeywords": "vídeo, multimídia, reprodução, incorporar", + "drawerCompName": "Gaveta", + "drawerCompDesc": "Um componente de painel deslizante que pode ser usado para navegação adicional ou exibição de conteúdo, geralmente surgindo da borda da tela.", + "drawerCompKeywords": "gaveta, deslizante, painel, navegação", + "chartCompName": "Gráfico", + "chartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e diagramas.", + "chartCompKeywords": "gráfico, diagrama, dados, visualização", + "carouselCompName": "Carrossel de Imagens", + "carouselCompDesc": "Um componente de carrossel rotativo para exibir imagens, banners ou slides de conteúdo.", + "carouselCompKeywords": "carrossel, imagens, rotação, destaque", + "imageEditorCompName": "Editor de Imagens", + "imageEditorCompDesc": "Um componente interativo para edição e manipulação de imagens, oferecendo várias ferramentas e filtros.", + "imageEditorCompKeywords": "imagem, editor, manipular, ferramentas", + "mermaidCompName": "Gráfico Mermaid", + "mermaidCompDesc": "Um componente para renderizar diagramas complexos e fluxogramas com base na sintaxe Mermaid.", + "mermaidCompKeywords": "mermaid, gráficos, diagramas, fluxogramas", + "calendarCompName": "Calendário", + "calendarCompDesc": "Um componente de calendário para exibir datas e eventos, com opções para visualizações mensais, semanais ou diárias.", + "calendarCompKeywords": "calendário, datas, eventos, agendamento", + "signatureCompName": "Assinatura", + "signatureCompDesc": "Um componente para capturar assinaturas digitais, útil para processos de aprovação e verificação.", + "signatureCompKeywords": "assinatura, digital, aprovação, verificação", + "jsonLottieCompName": "Animação Lottie", + "jsonLottieCompDesc": "Um componente para exibir animações Lottie, fornecendo animações leves e escaláveis com base em dados JSON.", + "jsonLottieCompKeywords": "lottie, animação, JSON, escalável", + "timelineCompName": "Linha do Tempo", + "timelineCompDesc": "Um componente para exibir eventos ou ações em uma ordem cronológica, representados visualmente ao longo de uma linha do tempo linear.", + "timelineCompKeywords": "linha do tempo, eventos, cronológico, histórico", + "commentCompName": "Comentário", + "commentCompDesc": "Um componente para adicionar e exibir comentários de usuários, com suporte a respostas em tópicos e interação do usuário.", + "commentCompKeywords": "comentário, discussão, interação do usuário, feedback", + "mentionCompName": "Menção", + "mentionCompDesc": "Um componente que suporta mencionar usuários ou tags dentro do conteúdo de texto, geralmente usado em redes sociais ou plataformas colaborativas.", + "mentionCompKeywords": "menção, tag, usuário, redes sociais", + "responsiveLayoutCompName": "Layout Responsivo", + "responsiveLayoutCompDesc": "Um componente de layout projetado para se adaptar e responder a diferentes tamanhos de tela e dispositivos, garantindo uma experiência do usuário consistente.", + "responsiveLayoutCompKeywords": "responsivo, layout, adaptar, tamanho da tela", + "iconCompName": "Ícones", + "iconCompDesc": "Use vários ícones para melhorar o apelo visual e a experiência do usuário do seu aplicativo.", + "iconCompKeywords": "ícones, pictogramas, símbolos, formas", + "tourCompName": "Viagem", + "tourCompDesc": "Um tour de produto para orientar os usuários.", + "tourCompKeywords": "tour, tour do produto, passo a passo, passo a passo interativo", + "hillchartCompName": "Gráfico de Hill", + "hillchartCompDesc": "Um componente de visualização para exibir dados de estado de gerenciamento de projetos em um formato de gráfico de hill.", + "hillchartCompKeywords": "gerenciamento de projetos, gráfico de hill, visualização, dados", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Um componente para exibir mapas interativos usando OpenLayers, com suporte a várias camadas e recursos de mapa.", + "openLayersGeoMapCompKeywords": "openlayers, geomapa, interativo, camadas de mapa", + "chartsGeoMapCompName": "Gráficos de Mapas Geográficos", + "chartsGeoMapCompDesc": "Um componente para visualizar dados geográficos em mapas interativos com gráficos dinâmicos.", + "chartsGeoMapCompKeywords": "mapa geográfico, gráficos, visualização, dados geográficos", + "bpmnEditorCompName": "Editor BPMN", + "bpmnEditorCompDesc": "Um componente para visualizar, criar e editar diagramas BPMN, com suporte a vários elementos e recursos BPMN.", + "bpmnEditorCompKeywords": "BPMN, editor, diagramas, elementos, fluxos de trabalho", + "turnstileCaptchaCompName": "Captcha de Catraca", + "turnstileCaptchaCompDesc": "Um componente de captcha para verificar usuários contra bots.", + "turnstileCaptchaCompKeywords": "captcha, verificação, identidade, segurança", + "pivotTableCompName": "Tabela Dinâmica", + "pivotTableCompDesc": "Uma ferramenta de sumarização e análise de dados para organizar e agregar dados em um formato de tabela.", + "pivotTableCompKeywords": "tabela dinâmica, dados, análise, agregação", + "funnelChartCompName": "Gráfico de Funil", + "funnelChartCompDesc": "Uma ferramenta de visualização para exibir a redução progressiva de dados à medida que passam por estágios.", + "funnelChartCompKeywords": "gráfico de funil, vendas, conversões, processo", + "gaugeChartCompName": "Gráfico de Medição", + "gaugeChartCompDesc": "Um gráfico que exibe dados como uma leitura em um mostrador, útil para indicar o status ou o nível de algo.", + "gaugeChartCompKeywords": "gráfico de medição, métricas, desempenho, status", + "sankeyChartCompName": "Gráfico Sankey", + "sankeyChartCompDesc": "Um diagrama de fluxo no qual a largura das setas é proporcional à taxa de fluxo, usado para mostrar transferências de energia, material ou custo.", + "sankeyChartCompKeywords": "gráfico sankey, fluxo, energia, custos", + "candleStickChartCompName": "Gráfico de Candlestick", + "candleStickChartCompDesc": "Um estilo de gráfico financeiro usado para descrever movimentos de preços de um título, derivado ou moeda.", + "candleStickChartCompKeywords": "gráfico de candlestick, ações, negociação, finanças", + "radarChartCompName": "Gráfico Radar", + "radarChartCompDesc": "Um método gráfico de exibir dados multivariados na forma de um gráfico bidimensional de três ou mais variáveis quantitativas.", + "radarChartCompKeywords": "gráfico radar, multivariado, análise de desempenho", + "heatmapChartCompName": "Gráfico de Mapa de Calor", + "heatmapChartCompDesc": "Uma representação gráfica de dados onde os valores individuais são representados como cores.", + "heatmapChartCompKeywords": "mapa de calor, visualização de dados, intensidade", + "graphChartCompName": "Gráfico de Rede", + "graphChartCompDesc": "Um diagrama que representa uma rede de nós conectados por arestas, útil para mostrar interconexões e relacionamentos.", + "graphChartCompKeywords": "gráfico de rede, redes, relacionamentos, nós", + "treeChartCompName": "Gráfico de Árvore", + "treeChartCompDesc": "Um diagrama que representa visualmente a hierarquia em uma estrutura semelhante a uma árvore, mostrando relacionamentos entre vários nós.", + "treeChartCompKeywords": "gráfico de árvore, hierarquia, organizacional", + "treemapChartCompName": "Gráfico de Árvore de Mosaico", + "treemapChartCompDesc": "Um gráfico que usa retângulos aninhados para representar dados hierárquicos proporcionalmente.", + "treemapChartCompKeywords": "treemap, hierarquia, visualização de dados", + "sunburstChartCompName": "Gráfico Sunburst", + "sunburstChartCompDesc": "Uma técnica de visualização radial que preenche o espaço e ilustra relações hierárquicas por meio de camadas de um círculo.", + "sunburstChartCompKeywords": "gráfico sunburst, radial, hierarquia", + "themeriverChartCompName": "Gráfico de Rio Temático", + "themeriverChartCompDesc": "Uma visualização que se assemelha a um gráfico de fluxo e mostra mudanças em um conjunto de dados ao longo do tempo e entre categorias.", + "themeriverChartCompKeywords": "rio temático, séries temporais, tendências", + "basicChartCompName": "Gráfico Básico", + "basicChartCompDesc": "Um componente versátil para visualizar dados por meio de vários tipos de gráficos e gráficos.", + "basicChartCompKeywords": "gráfico, gráfico, dados, visualização", + "shapeCompName": "Formas", + "shapeCompDesc": "Uma coleção de formas geométricas para uso em diagramas, ilustrações e visualizações.", + "shapeCompKeywords": "formas, geométrico, diagramas, ilustrações", + "ganttChartCompName": "Gráfico de Gantt", + "ganttChartCompDesc": "Um gráfico que ilustra o calendário de um projeto, mostrando as datas de início e de fim dos elementos e as dependências.", + "ganttChartCompKeywords": "gráfico de Gantt, gestão de projectos, calendário", + "kanbanCompName" : "Kanban Board (preview!)", + "kanbanCompDesc" : "Um quadro de kanban interativo para visualizar e gerenciar o fluxo de trabalho e as tarefas em um projeto.", + "kanbanCompKeywords" : "kanban, board, workflow, tasks", + "colorPickerCompName": "Seletor de Cores", + "colorPickerCompDesc": "Seleção intuitiva de cores para personalização.", + "colorPickerCompKeywords": "cor, seletor, personalização", + "floatButtonCompName": "Botão Flutuante", + "floatButtonCompDesc": "Um botão de ação flutuante para ações proeminentes e rápidas.", + "floatButtonCompKeywords": "botão flutuante, ação, rápida", + "avatarCompName": "Avatar", + "avatarCompDesc": "Exibe avatares de usuário ou imagens de perfil para identificação personalizada.", + "avatarCompKeywords": "avatar, imagem de perfil, identificação de usuário", + "avatarGroupCompName": "Grupo de Avatares", + "avatarGroupCompDesc": "Um grupo de avatares para representar vários usuários ou entidades de forma compacta e visualmente atraente.", + "avatarGroupCompKeywords": "grupo de avatares, usuários, entidades, compacto", + "transferName": "Transferência", + "transferDesc": "Facilita a transferência de dados entre duas listas com funcionalidade de arrastar e soltar.", + "transferKeywords": "transferência, dados, arrastar e soltar", + "cardCompName": "Cartão de Conteúdo", + "cardCompDesc": "Um componente de cartão para exibir informações ou conteúdo organizado de maneira estruturada.", + "cardCompKeywords": "cartão, informações, conteúdo, exibição", + "timerCompName": "Temporizador", + "timerCompDesc": "Um componente que exibe uma contagem regressiva ou tempo decorrido, útil para rastrear durações e prazos.", + "timerCompKeywords": "temporizador, contagem regressiva, tempo decorrido, rastreamento, durações, prazos", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Ver Documentação", + "menuViewPlayground": "Ver Playground Interativo", + "menuUpgradeToLatest": "Atualizar para a Última Versão", + "nameNotEmpty": "Não Pode Estar Vazio", + "nameRegex": "Deve Começar com uma Letra e Conter Apenas Letras, Dígitos e Underlines (_)", + "nameJSKeyword": "Não Pode Ser uma Palavra-chave JavaScript", + "nameGlobalVariable": "Não Pode Ser Nome de Variável Global", + "nameExists": "O Nome {name} Já Existe", + "getLatestVersionMetaError": "Falha ao Obter a Última Versão, Por Favor, Tente Mais Tarde.", + "needNotUpgrade": "A Versão Atual Já Está Atualizada.", + "compNotFoundInLatestVersion": "O Componente Atual Não Foi Encontrado na Última Versão.", + "upgradeSuccess": "Atualizado com Sucesso para a Última Versão.", + "searchProp": "Buscar", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Tentar Novamente", + "resetAfterSubmit": "Redefinir Após Envio Bem-sucedido do Formulário", + "jsonSchema": "Esquema JSON", + "uiSchema": "Esquema UI", + "schemaTooltip": "Ver", + "defaultData": "Dados do Formulário Pré-preenchidos", + "dataDesc": "Dados Atuais do Formulário", + "required": "Obrigatório", + "maximum": "O Valor Máximo é {value}", + "minimum": "O Valor Mínimo é {value}", + "exclusiveMaximum": "Deve Ser Menor Que {value}", + "exclusiveMinimum": "Deve Ser Maior Que {value}", + "multipleOf": "Deve Ser Múltiplo de {value}", + "minLength": "Pelo Menos {value} Caracteres", + "maxLength": "No Máximo {value} Caracteres", + "pattern": "Deve Coincidir com o Padrão {value}", + "format": "Deve Coincidir com o Formato {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "Valor de Pesquisa de Entrada", + }, + "customComp": { + ...en.customComp, + + "text": "É um bom dia.", + "triggerQuery": "Disparar Consulta", + "updateData": "Atualizar Dados", + "updateText": "Eu também estou de bom humor para desenvolver agora meu próprio componente personalizado com o Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Dados que você deseja passar para o componente personalizado", + "code": "Código do seu componente personalizado", + }, + "tree": { + ...en.tree, + + "placeholder": "Por favor, selecione", + "selectType": "Selecionar Tipo", + "noSelect": "Sem Seleção", + "singleSelect": "Seleção Única", + "multiSelect": "Seleção Múltipla", + "checkbox": "Caixa de Seleção", + "checkedStrategy": "Estratégia de Verificação", + "showAll": "Todos os Nós", + "showParent": "Somente Nós Pai", + "showChild": "Somente Nós Filho", + "autoExpandParent": "Expandir Nó Pai Automaticamente", + "checkStrictly": "Verificar Estritamente", + "checkStrictlyTooltip": "Verifique o TreeNode Precisamente; O TreeNode Pai e os TreeNode Filhos não estão Associados", + "treeData": "Dados da Árvore", + "treeDataDesc": "Dados da Árvore Atuais", + "value": "Valores Padrão", + "valueDesc": "Valores Atuais", + "expanded": "Valores Expandidos", + "expandedDesc": "Valores Atuais Expandidos", + "defaultExpandAll": "Expandir Todos os Nós por Padrão", + "showLine": "Mostrar Linha", + "showLeafIcon": "Mostrar Ícone de Folha", + "treeDataAsia": "Ásia", + "treeDataChina": "China", + "treeDataBeijing": "Pequim", + "treeDataShanghai": "Xangai", + "treeDataJapan": "Japão", + "treeDataEurope": "Europa", + "treeDataEngland": "Inglaterra", + "treeDataFrance": "França", + "treeDataGermany": "Alemanha", + "treeDataNorthAmerica": "América do Norte", + "helpLabel": "Rótulo do Nó", + "helpValue": "Valor Único do Nó na Árvore", + "helpChildren": "Nós Filhos", + "helpDisabled": "Desativa o Nó", + "helpSelectable": "Se o Nó é Selecionável (Tipo de Seleção Única/Múltipla)", + "helpCheckable": "Se exibir a Caixa de Seleção (Tipo de Caixa de Seleção)", + "helpDisableCheckbox": "Desativa a Caixa de Seleção (Tipo de Caixa de Seleção)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Teste de Evento", + "methodTest": "Teste de Método", + "inputTest": "Teste de Entrada", + }, + "password": { + ...en.password, + + "label": "Senha", + "placeholder": "Por favor, digite a senha", + "conformLabel": "Confirmar Senha", + "conformPlaceholder": "Por favor, confirme a senha", + "visibilityToggle": "Mostrar Alternância de Visibilidade", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Personalizar Barra de Ferramentas", + "toolbarDescription": "Você pode personalizar a barra de ferramentas. Consulte: https://quilljs.com/docs/modules/toolbar/ para obter mais detalhes.", + "placeholder": "Por favor, insira...", + "hideToolbar": "Ocultar Barra de Ferramentas", + "content": "Conteúdo", + "title": "Título", + "save": "Salvar", + "link": "Ligação:", + "edit": "Editar", + "remove": "Remover", + "defaultValue": "Conteúdo Base", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Personalizado", + "backTop": "Voltar ao Topo", + "buttonType": "Tipo de Botão", + "buttonShape": "Formato do Botão", + "square": "Quadrado", + "circle": "Círculo", + "description": "Descrição", + "badge": "Distintivo", + "primary": "Principal", + "default": "Padrão", + "buttonTheme": "Tema do Botão", + "badgeColor": "Cor do Distintivo", + "dot": "Distintivo como Ponto", + "hidden": "Oculto", + "visibilityHeight": "Altura de Visibilidade", + "visibilityHeightDesc": "Role até uma certa altura antes de exibir o botão de retorno ao topo, 0 é sempre exibido. O modo de edição não pode ser visualizado em tempo real", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Disparadores de Eventos", + "click": "Clique", + "hover": "Passar o Mouse", + "disabledAlpha": "Desativar Seleção de Alfa", + "recommended": "Recomendado", + "showPresets": "Mostrar Predefinições de Cor", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Mostrar botão de fechar", + "Type": "Tipo de insígnia", + "Count": "Contagem da insígnia", + "Size": "Tamanho da insígnia", + "SizeDefault": "padrão", + "SizeSmall": "Pequeno", + "overflowCount": "Contagem de overflow", + "Title": "Título da insígnia", + "dot": "Ponto", + "number": "Número", + "tooltip": "Dica de ferramenta", + }, + "gantt": { + ...en.gantt, + + "key": "Chave", + "title": "Título", + "project": "Projeto", + "from": "De", + "minute": "Minuto", + "hour": "Hora", + "day": "Dia", + "week": "Semana", + "month": "Mês", + "year": "Ano", + "quarter": "Trimestre", + "tasks": "Dados de Tarefas", + "level": "Nível", + "durationUnit": "Unidade de Duração", + "duration": "Duração", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Semana #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "árvore", + "ColumnsData": "Dados das Colunas", + "allowChangeTask": "Clique duplo na Tarefa", + "allowAddLink": "Adicionar Link", + "allowLinkDelete": "Excluir Link", + "allowProgressDrag": "Arrastar Progresso", + "allowTaskDrag": "Arrastar Tarefa", + "links": "Dados de Links", + "dataFormat": "Formato de Análise de Dados", + "handleDateChange": "Lidar com a Mudança de Tarefa", + "handleTaskChange": "Lidar com a Mudança de Tarefa", + "handleAddedLink": "Lidar com Link Adicionado", + "handleDeletedLink": "Lidar com Link Excluído", + "handleProgressDrag": "Lidar com Arrastar de Progresso", + "showTodayMark": "Mostrar Marcação de Hoje", + "resize": "Redimensionar", + "otherEvents": "Outros Eventos", + "openAllBranchInit": "Abrir Todos os Ramos Iniciais", + "date": "Data", + "text": "Texto", + "progress": "progresso", + "width": "Largura", + "ColumnsType": "Tipo de Colunas", + "currentId": "ID Atual", + "currentObject": "Objeto Atual", + "addTask": "Adicionar Tarefa(s)", + "taskObject": "Objeto de Tarefa", + "taskObjectDesc": "Suporta arrays de Tarefas ou único Objeto de Tarefa", + "linkID": "ID do Link", + "linkIDDesc": "Suporta arrays de IDs de Links ou único Objeto de Link", + "removeTask": "Remover Tarefa", + "taskID": "ID da Tarefa", + "taskIDDesc": "Suporta arrays de IDs ou único ID", + "add": "Adicionar", + "expandingAll": "Expandindo Todos", + "collapsingAll": "Recolhendo Todos", + "addTaskFail": "A adição de tarefas falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", + "addLinkFail": "A adição de link falhou, e o tipo de parâmetro deve ser um objeto ou um array de objetos", + "removeTaskFail": "A remoção de tarefas falhou, e o tipo de parâmetro deve ser string ou array de strings", + "removeLinkFail": "A remoção de links falhou, e o tipo de parâmetro deve ser array de strings", + "otherData": "Outros Dados{i}", + "projectText": "Projeto #{i}", + "taskText": "Tarefa #{i}", + "AutoCalculateProgress": "Calcular Progresso Automático", + "allowProjectDrag": "Permitir Arrastar Projeto", + "showColumns": "Mostrar Colunas", + "exportToPNG": "Exportar para PNG", + "exportToPDF": "Exportar para PDF", + "exportToExcel": "Exportar para Excel", + "progressLowBg": "Cor de Fundo Baixo", + "progressLowColor": "Cor de Progresso Baixo", + "progressMediumBg": "Cor de Fundo Médio", + "progressMediumColor": "Cor de Progresso Médio", + "progressHighBg": "Cor de Fundo Alto", + "progressHighColor": "Cor de Progresso Alto", + "progresscompletedColor": "Cor de Progresso Concluído", + "lowProgressLine": "Linha de Progresso Baixo", + "mediumProgressLine": "Linha de Progresso Médio", + "SegmentedColor": "Cor Segmentada de Progresso", + "link_f2s": "Ligação F2S", + "link_s2s": "Ligação S2S", + "link_f2f": "Ligação F2F", + "link_s2f": "Ligação S2F", + "weekScale": "#{i},", + "showHolidays": "Mostrar Feriados", + "StatutoryHolidays": "Dados de Feriados Legais", + "skipOffTime": "Ocultar Tempo Não Trabalhado", + "weekend": "Fim de Semana", + "weekendSelected": "Fim de Semana Selecionado", + "noWorkHour": "Sem Horário de Trabalho", + "noWorkHourSelected": "Sem Horário de Trabalho Selecionado", + "showWorkTimes": "Mostrar Horários de Trabalho", + "workTimeData": "Dados de Horário de Trabalho", + "fit": "ajustar", + "manual": "manual", + "scaleMode": "Modo de Escala", + "startDate": "Data de Início", + "endDate": "Data de Término", + "addLink": "Adicionar Link(s)", + "linkObject": "Objeto de Link", + "removeLink": "Remover Link", + "allowSort": "Permitir Ordenação", + "showTask": "Mostrar Tarefa", + "toggleOnDBClick": "Alternar no Duplo Clique", + "sortOptions": "Opções de Classificação Inicial", + "rowHeight": "Altura da Linha", + "showTooltip": "Mostrar Dica de Ferramenta", + "tooltipTemplates": "Modelo de Dica de Ferramenta", + "allowResizeTask": "Permitir Redimensionamento de Tarefa", + "projectColor": "Cor do Projeto", + "projectColorBg": "Cor de Fundo do Projeto", + "taskColor": "Cor da Tarefa", + "taskColorBg": "Cor de Fundo da Tarefa", + "milestoneColor": "Cor do Marco", + "highlightOverdue": "Destacar Atrasado", + "overdueColor": "Cor de Atrasado", + "overdueBgColor": "Cor de Fundo de Atrasado", + "projectCompletedBgColor": "Cor de Fundo de Projeto Concluído", + "projectCompletedColor": "Cor de Projeto Concluído", + "tag": "etiqueta", + "tasksTableWidth": "Largura da Tabela de Tarefas", + "allowErrorMessage": "Permitir Mensagem de Erro", + "currentProjectId": "ID do Projeto Atual", + "currentProjectLastTask": "Última Tarefa do Projeto Atual", + "onlySortProject": "Apenas Ordenar Projeto", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Dados de Origem", + "targetTitle": "Dados de Destino", + "content": "Conteúdo {i}", + "items": "Itens", + "targetKeys": "Chaves Selecionadas", + "oneWay": "De Um Sentido", + "pagination": "Paginação", + "pageSize": "Tamanho da Página", + "allowSearch": "Permitir Busca", + "selectedKeys": "Chaves Selecionadas", + "searchInfo": "Informações de Busca", + "targerObject": "Objeto de Destino", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Contagem Máxima", + "avatarSize": "Tamanho do Avatar", + "autoColor": "Cor Automática", + "alignment": "Alinhamento", + "currentAvatar": "Avatar Atual", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "quadrado", + "circle": "círculo", + "icon": "ícone", + "shape": "forma", + "counts": "Insignia", + "title": "título", + "src": "src", + "avatarCompTooltip": "A prioridade de exibição é: imagem -> caracteres -> ícone. Dependendo do que estiver disponível primeiro.", + "iconSize": "Tamanho do Ícone", + "avatarBackground": "Fundo", + "label": "Rótulo", + "caption": "Legenda", + "labelPosition": "Posição do Rótulo", + "alignmentPosition": "alinhamento", + "text": "Texto", + "enableDropDown": "Ativar menu suspenso", + "containerBackground": "Fundo do Contêiner", + }, + "card": { + ...en.card, + + "cardType": "Tipo de Cartão", + "common": "comum", + "custom": "personalizado", + "default": "padrão", + "small": "pequeno", + "showTitle": "Mostrar título", + "title": "Título", + "more": "Mais", + "extraTitle": "Chamada para Ação", + "CoverImg": "Imagem de Capa", + "imgSrc": "Fonte da Imagem", + "showMeta": "Mostrar Conteúdo", + "metaTitle": "Título do Conteúdo", + "metaDesc": "Descrição do Conteúdo", + "imgHeight": "Altura da Imagem", + "showActionIcon": "Mostrar Opções de Ação", + "actionOptions": "Opções de Ação", + "menu": "Menu {i}", + "hoverColor": "Cor ao Passar o Mouse", + "IconColor": "Cor do Ícone", + "titleSize": "Tamanho do Título", + }, + "timer": { + ...en.timer, + + "timerState": "Estado do Temporizador", + "elapsedTime": "Tempo Decorrido", + "timer": "Temporizador", + "countdown": "Contagem Regressiva", + "defaultValue": "Valor Padrão", + "timerType": "Tipo de Temporizador", + "start": "Iniciar", + "pause": "Pausar", + "resume": "Continuar", + "reset": "Redefinir", + "startPause": "Iniciar/Pausar", + "hideButton": "Ocultar Botão", + "fontColor": "Cor da Fonte", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Ícone", + "autoSize": "Tamanho Automático do Ícone", + "iconSize": "Tamanho do Ícone", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Formatar", + "precision": "Precisão", + "allowNull": "Permitir Valor Nulo", + "thousandsSeparator": "Mostrar Separador de Milhares", + "controls": "Mostrar Botões de Incremento/Decremento", + "step": "Passo", + "standard": "Padrão", + "percent": "Porcentagem", + }, + "slider": { + ...en.slider, + + "step": "Passo", + "stepTooltip": "O valor deve ser maior que 0 e divisível por (Máx-Mín)", + "vertical": "Orientação Vertical", + }, + "rating": { + ...en.rating, + + "max": "Avaliação Máxima", + "allowHalf": "Permitir Meias Pontuações", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Opções", + "option": "Opção", + "optionI": "Opção {i}", + "viewDocs": "Ver Documentação", + "tip": "As variáveis 'item' e 'i' representam o valor e o índice de cada item na matriz de dados", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Valor / Chave", + "valueTooltip": "O valor do passo deve ser um número. Para o primeiro passo, deve ser igual ao valor inicial. Os números devem estar em ordem consistente e ascendente.", + "title": "Título do Passo", + "subTitle": "Subtítulo do Passo", + "description": "Descrição do Passo", + "status": "Status do Passo", + "icon": "Ícone do Passo", + }, + "step": { + ...en.step, + + "initialValue": "Começar Números em", + "initialValueTooltip": "Onde começar a numeração visual. Deve ser 1 ou maior.", + "valueDesc": "Valor Atual", + "size": "Tamanho dos Passos", + "sizeSmall": "Pequeno", + "sizeDefault": "Padrão", + "percent": "Percentual dos Passos", + "type": "Tipo de Passos", + "typeDefault": "Padrão", + "typeNavigation": "Navegação", + "typeInline": "Em Linha", + "direction": "Direção dos Passos", + "directionVertical": "Vertical", + "directionHorizontal": "Horizontal", + "labelPlacement": "Posição do Rótulo dos Passos", + "status": "Status dos Passos", + "statusWait": "Aguardar", + "statusProcess": "Processando", + "statusFinish": "Concluído", + "statusError": "Erro", + "showDots": "Mostrar Pontos em Vez de Símbolos", + "showIcons": "Mostrar Ícones em Vez de Símbolos", + "responsive": "Responsivo", + "selectable": "Selecionável", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Texto da Tag", + "color": "Cor", + "icon": "Ícone", + }, + "radio": { + ...en.radio, + + "options": "Opções", + "horizontal": "Horizontal", + "horizontalTooltip": "O Layout Horizontal se Ajusta Quando Acaba o Espaço", + "vertical": "Vertical", + "verticalTooltip": "O Layout Vertical é Exibido em uma Única Coluna", + "autoColumns": "Coluna Automática", + "autoColumnsTooltip": "A Coluna Automática Rearranja a Ordem Automaticamente Conforme o Espaço Permitido e Exibe em Múltiplas Colunas", + }, + "cascader": { + ...en.cascader, + + "options": "Dados JSON para mostrar seleções em cascata", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Valor Atualmente Selecionado", + "selectedIndexDesc": "O Índice do Valor Atualmente Selecionado, ou -1 se Nenhum Valor Estiver Selecionado", + "selectedLabelDesc": "O Rótulo do Valor Atualmente Selecionado", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Deve Ser um Número com uma Unidade de Tamanho de Arquivo Válida, ou um Número sem Unidade de Tamanho de Arquivo.", + "fileEmptyErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Está Vazio.", + "fileSizeExceedErrorMsg": "Falha ao Carregar. O Tamanho do Arquivo Excede o Limite.", + "minSize": "Tamanho Mínimo", + "minSizeTooltip": "O Tamanho Mínimo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", + "maxSize": "Tamanho Máximo", + "maxSizeTooltip": "O Tamanho Máximo dos Arquivos Enviados com Unidades de Tamanho de Arquivo Opcionais (por exemplo, '5kb', '10 MB'). Se Nenhuma Unidade For Fornecida, o Valor Será Considerado um Número de Bytes.", + "single": "Único", + "multiple": "Múltiplo", + "directory": "Diretório", + "upload": "Procurar", + "fileType": "Tipos de Arquivo", + "reference": "Por Favor Consulte", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Especificadores de Tipo de Arquivo Únicos", + "uploadType": "Tipo de Envio", + "showUploadList": "Mostrar Lista de Envios", + "maxFiles": "Máximo de Arquivos", + "filesValueDesc": "O Conteúdo do Arquivo Enviado Atualmente Está Codificado em Base64", + "filesDesc": "Lista dos Arquivos Enviados Atualmente. Para Detalhes, Consulte", + "clearValueDesc": "Limpar Todos os Arquivos", + "parseFiles": "Analisar Arquivos", + "parsedValueTooltip1": "Se parseFiles for Verdadeiro, os Arquivos Enviados serão Analisados em Objeto, Array ou String. Os Dados Analisados Podem Ser Acessados através do Array parsedValue.", + "parsedValueTooltip2": "Suporta Arquivos Excel, JSON, CSV e de Texto. Outros Formatos Retornarão Nulo.", + }, + "date": { + ...en.date, + + "format": "Formato", + "formatTip": "Suporte: 'AAAA-MM-DD HH:mm:ss', 'AAAA-MM-DD', 'Timestamp'", + "reference": "Por Favor Consulte", + "showTime": "Mostrar Hora", + "start": "Data de Início", + "end": "Data de Fim", + "year": "Ano", + "quarter": "Trimestre", + "month": "Mês", + "week": "Semana", + "date": "Data", + "clearAllDesc": "Limpar Tudo", + "resetAllDesc": "Redefinir Tudo", + "placeholder": "Selecionar Data", + "placeholderText": "Marcador de Posição", + "startDate": "Data de Início", + "endDate": "Data de Fim", + }, + "time": { + ...en.time, + + "start": "Hora de Início", + "end": "Hora de Término", + "formatTip": "Suporte: 'HH:mm:ss', 'Timestamp'", + "format": "Formato", + "placeholder": "Selecionar Hora", + "placeholderText": "Marcador de Posição", + "startTime": "Hora de Início", + "endTime": "Hora de Término", + }, + "button": { + ...en.button, + + "prefixIcon": "Ícone Prefixo", + "prefixText": "Texto Prefixo", + "suffixIcon": "Ícone Sufixo", + "icon": "Ícone", + "iconSize": "Tamanho do Ícone", + "button": "Botão do Formulário", + "formToSubmit": "Formulário para Envio", + "default": "Padrão", + "submit": "Enviar", + "textDesc": "Texto Atualmente Exibido no Botão", + "loadingDesc": "O Botão Está no Estado de Carregamento? Se Verdadeiro, o Botão Atual Está Carregando", + "formButtonEvent": "Evento", + }, + "link": { + ...en.link, + + "link": "Ligação a", + "textDesc": "Texto Atualmente Exibido no Link", + "loadingDesc": "O Link Está no Estado de Carregamento? Se Verdadeiro, o Link Atual Está Carregando", + }, + "scanner": { + ...en.scanner, + + "text": "Clique para Escanear", + "camera": "Câmera {index}", + "changeCamera": "Alternar Câmera", + "continuous": "Escaneamento Contínuo", + "uniqueData": "Ignorar Dados Duplicados", + "maskClosable": "Clique na Máscara para Fechar", + "errTip": "Por Favor, Utilize Este Componente Sob HTTPS ou Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Exibir Apenas com Rótulo", + "textDesc": "Texto Atualmente Exibido no Botão", + "triggerMode": "Modo de disparo" + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Olá, {name}", + "valueTooltip": "Markdown Suporta a Maioria das Tags e Atributos HTML. Tags como iframe, Script e Outras Estão Desativadas por Motivos de Segurança.", + "verticalAlignment": "Alinhamento Vertical", + "horizontalAlignment": "Alinhamento Horizontal", + "textDesc": "Texto Exibido na Caixa de Texto Atual", + }, + "table": { + ...en.table, + + "editable": "Editável", + "columnNum": "Colunas", + "viewModeResizable": "Largura da Coluna Ajustada pelo Usuário", + "viewModeResizableTooltip": "Se os usuários podem ou não ajustar a largura da coluna.", + "visibleResizables": "Mostrar Alças de Redimensionamento", + "visibleResizablesTooltip": "Exibir alças de redimensionamento visíveis no cabeçalho da tabela.", + "showFilter": "Mostrar Botão de Filtro", + "showRefresh": "Mostrar Botão de Atualização", + "showDownload": "Mostrar Botão de Download", + "columnSeparator": "Separador de colunas", + "columnSeparatorTooltip": "Separador de colunas (\"delimitador\") no arquivo CSV baixado. \n\nRecomendações:\n- Vírgula (,)\n- Ponto e vírgula (;)\n- Barra vertical (|)\n- Tabulação (\\t)", + "columnSetting": "Mostrar Botão de Configuração de Coluna", + "searchText": "Texto de Busca", + "searchTextTooltip": "Pesquisar e filtrar os dados apresentados na tabela", + "showQuickJumper": "Mostrar Pulador Rápido", + "hideOnSinglePage": "Ocultar em Página Única", + "showSizeChanger": "Mostrar Botão de Alteração de Tamanho", + "pageSizeOptions": "Opções de Tamanho de Página", + "pageSize": "Tamanho de Página", + "total": "Contagem Total de Linhas", + "totalTooltip": "O valor padrão é o número de itens de dados atuais, que pode ser obtido da consulta, por exemplo: '{{query1.data[0].count}}'", + "filter": "Filtrar", + "filterRule": "Regra de Filtro", + "chooseColumnName": "Escolher Coluna", + "chooseCondition": "Escolher Condição", + "clear": "Limpar", + "columnShows": "Colunas Mostradas", + "selectAll": "Selecionar Tudo", + "and": "E", + "or": "Ou", + "contains": "Contém", + "notContain": "Não Contém", + "equals": "Igual a", + "isNotEqual": "Não é Igual a", + "isEmpty": "Está Vazio", + "isNotEmpty": "Não Está Vazio", + "greater": "Maior Que", + "greaterThanOrEquals": "Maior ou Igual a", + "lessThan": "Menor Que", + "lessThanOrEquals": "Menor ou Igual a", + "action": "Ação", + "columnValue": "Valor da Coluna", + "columnValueTooltip": "'{{currentCell}}': Dados da Célula Atual\n '{{currentRow}}': Dados da Linha Atual\n '{{currentIndex}}': Índice de Dados Atual (Começando de 0)\n Exemplo: '{{currentCell * 5}}' Mostra 5 Vezes o Valor Original dos Dados.", + "columnTooltip": "Dica de coluna", + "imageSrc": "Fonte da Imagem", + "imageSize": "Tamanho da Imagem", + "columnTitle": "Título", + "columnTitleTooltip": "Dica de título", + "showTitle": "Mostrar Título", + "showTitleTooltip": "Mostrar/Ocultar título da coluna no cabeçalho da tabela", + "sortable": "Classificável", + "align": "Alinhamento", + "fixedColumn": "Coluna Fixa", + "autoWidth": "Largura Automática", + "customColumn": "Coluna Personalizada", + "auto": "Automático", + "fixed": "Fixo", + "columnType": "Tipo de Coluna", + "dataMapping": "Mapeamento de Dados", + "numberStep": "Passo", + "numberStepTooltip": "O número para o qual o valor atual é aumentado ou diminuído. Pode ser um número inteiro ou decimal", + "precision": "Precisão", + "float": "Flutuante", + "prefix": "Prefixo", + "suffix": "Sufixo", + "avatars": "Avatares", + "avatarGroupAlignment": "Alinhamento dos Avatares", + "text": "Texto", + "number": "Número", + "link": "Ligação a", + "links": "Ligações", + "tag": "Etiqueta", + "select": "Seleção", + "dropdown": "Menu suspenso", + "date": "Data", + "dateTime": "Data e Hora", + "badgeStatus": "Estado", + "button": "Botão", + "image": "Imagem", + "boolean": "Booleano", + "switch": "Interruptor", + "rating": "Classificação", + "progress": "Progresso", + "option": "Operação", + "optionList": "Lista de Operações", + "option1": "Operação 1", + "status": "Estado", + "statusTooltip": "Valores Opcionais: Success, Error, Default, Warning, Processing", + "primaryButton": "Principal", + "defaultButton": "Padrão", + "type": "Tipo", + "tableSize": "Tamanho da Tabela", + "hideHeader": "Ocultar Cabeçalho da Tabela", + "hideToolbar": "Ocultar barra de ferramentas", + "fixedHeader": "Cabeçalho da Tabela Fixo", + "fixedHeaderTooltip": "O cabeçalho será fixado para tabelas com rolagem vertical", + "fixedToolbar": "Barra de Ferramentas Fixa", + "fixedToolbarTooltip": "A barra de ferramentas será fixada para tabelas com rolagem vertical com base na posição", + "hideBordered": "Mostrar Alças de Redimensionamento", + "showHeaderGridBorder": "Mostrar Borda do Grid do Cabeçalho", + "showRowGridBorder": "Mostrar Borda do Grid da Linha", + "showVerticalRowGridBorder": "Mostrar Borda do Grid da Linha Vertical", + "showHorizontalRowGridBorder": "Mostrar Borda do Grid da Linha Horizontal", + "deleteColumn": "Excluir Coluna", + "confirmDeleteColumn": "Confirmar Exclusão da Coluna: ", + "small": "P", + "middle": "M", + "large": "G", + "refreshButtonTooltip": "Os dados atuais mudaram. Clique para regenerar a coluna.", + "changeSetDesc": "Um objeto representando mudanças em uma tabela editável, contendo apenas a célula alterada. As linhas vêm primeiro e as colunas em seguida.", + "selectedRowDesc": "Fornece dados para a linha atualmente selecionada, indicando a linha que aciona um evento de clique se o usuário clicar em um botão/link na linha", + "selectedRowsDesc": "Útil no modo de seleção múltipla, igual a SelectedRow", + "pageNoDesc": "Página atual, começando em 1", + "pageSizeDesc": "Quantas linhas por página", + "sortColumnDesc": "O nome da coluna classificada atualmente selecionada", + "sortDesc": "Se a linha atual está em ordem decrescente", + "pageOffsetDesc": "O início atual da paginação, usado para paginação para obter dados. Exemplo: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", + "displayDataDesc": "Dados exibidos na tabela atual", + "selectedIndexDesc": "Índice selecionado em dados de exibição", + "filterDesc": "Parâmetros de filtragem da tabela", + "dataDesc": "Os dados JSON para a tabela", + "saveChanges": "Salvar Alterações", + "cancelChanges": "Cancelar Alterações", + "rowSelectChange": "Alteração na Seleção de Linha", + "rowClick": "Clique na Linha", + "rowExpand": "Expandir Linha", + "rowShrink": "Contrair Linha", + "search": "Buscar", + "download": "Descarregar", + "columnEdited": "Coluna Editada", + "filterChange": "Alteração de Filtro", + "sortChange": "Alteração de Classificação", + "pageChange": "Alteração de Página", + "refresh": "Atualizar", + "rowColor": "Cor da Linha Condicional", + "rowColorDesc": "Defina condicionalmente a cor da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "Altura da Linha Condicional", + "rowHeightDesc": "Defina condicionalmente a altura da linha com base nas variáveis opcionais: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Por exemplo: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Cor da Célula Condicional", + "cellColorDesc": "Defina condicionalmente a cor da célula com base no valor da célula usando CurrentCell. Por exemplo: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "Nenhum manipulador de eventos configurado para salvar alterações. Por favor, vincule pelo menos um manipulador de eventos antes de clicar.", + "dynamicColumn": "Usar Configuração de Coluna Dinâmica", + "dynamicColumnConfig": "Configuração de Coluna", + "dynamicColumnConfigDesc": "Configurações de coluna dinâmica. Aceita um array de nomes de colunas. Todas as colunas são visíveis por padrão. Exemplo: [\"id\", \"name\"]", + "position": "Posição", + "showDataLoadSpinner": "Mostrar indicador de carregamento", + "showValue": "Mostrar Valor", + "expandable": "Expansível", + "configExpandedView": "Configurar Visualização Expandida", + "toUpdateRowsDesc": "Um array de objetos para linhas a serem atualizadas em tabelas editáveis.", + "selectedCellDesc": "Célula selecionada", + "empty": "Vazio", + "falseValues": "Texto Quando Falso", + "iconTrue": "Ícone Quando Verdadeiro", + "iconFalse": "Ícone Quando Falso", + "iconNull": "Ícone Quando Nulo", + "allColumn": "Todas", + "visibleColumn": "Visível", + "emptyColumns": "Nenhuma coluna está atualmente visível", + "showSummary": "Mostrar linha(s) de resumo", + "totalSummaryRows": "Total de linhas", + "inlineAddNewRow": "Adicionar nova(s) linha(s) em linha", + "editMode": "Modo de edição", + "singleClick": "Clique Único", + "doubleClick": "Clique duplo", + "showUpdateButtons": "Mostrar botões Salvar/Cancelar", + }, + "image": { + ...en.image, + + "src": "Fonte da Imagem", + "srcDesc": "A fonte da imagem. Pode ser uma URL, um caminho ou uma string Base64. Por exemplo: data:image/png;base64, AAA... CCC", + "supportPreview": "Suporte para visualização clicável (zoom)", + "supportPreviewTip": "Efetivo quando a fonte da imagem é válida", + "previewSrc" : "Fonte da imagem de alta resolução" + }, + "progress": { + ...en.progress, + + "value": "Valor", + "valueTooltip": "A porcentagem concluída como um valor entre 0 e 100", + "showInfo": "Mostrar Valor", + "valueDesc": "Valor de progresso atual, variando de 0 a 100", + "showInfoDesc": "Se deve exibir o valor de progresso atual", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Por favor, insira uma URL válida ou uma string Base64", + "src": "URI do arquivo", + "srcTooltip": "Pré-visualização do conteúdo do link fornecido por meio da incorporação de HTML, dados codificados em Base64 também podem ser suportados, por exemplo: data:application/pdf;base64, AAA... CCC", + "srcDesc": "O URI do arquivo", + }, + "divider": { + ...en.divider, + + "title": "Título", + "align": "Alinhamento", + "dashed": "Tracejado", + "type": "Tipo vertical", + "dashedDesc": "Se deve usar linha tracejada", + "titleDesc": "Título do divisor", + "alignDesc": "Alinhamento do título do divisor", + }, + "QRCode": { + ...en.QRCode, + + "value": "Valor do Conteúdo do Código QR", + "valueTooltip": "O valor contém no máximo 2953 caracteres. O valor do código QR pode codificar vários tipos de dados, incluindo mensagens de texto, URLs, detalhes de contato (VCard/meCard), credenciais de login Wi-Fi, endereços de e-mail, números de telefone, mensagens SMS, coordenadas de geolocalização, detalhes de eventos de calendário, informações de pagamento, endereços de criptomoeda e links para download de aplicativos", + "valueDesc": "O valor do conteúdo do código QR", + "level": "Nível de Tolerância a Falhas", + "levelTooltip": "Refere-se à capacidade de o código QR ser escaneado mesmo que parte dele esteja bloqueada. Quanto maior o nível, mais complexo é o código.", + "includeMargin": "Mostrar Margem", + "image": "Exibir Imagem no Centro", + "L": "L (Baixo)", + "M": "M (Médio)", + "Q": "Q (Quartil)", + "H": "H (Alto)", + "maxLength": "O conteúdo é muito longo. Defina o comprimento como menos de 2953 caracteres", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Indentação de cada nível", + "expandToggle": "Expandir Árvore JSON", + "theme": "Tema de Cores", + "valueDesc": "Dados JSON atuais", + "default": "Padrão", + "defaultDark": "Padrão Escuro", + "neutralLight": "Neutro Claro", + "neutralDark": "Neutro Escuro", + "azure": "Azul Claro", + "darkBlue": "Azul Escuro", + }, + "audio": { + ...en.audio, + + "src": "URI da Fonte de Áudio ou String Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Reprodução Automática", + "loop": "Laço", + "srcDesc": "URI ou String Base64 atual de áudio como data:audio/mpeg;base64, AAA... CCC", + "play": "Reproduzir", + "playDesc": "Disparado quando o áudio é reproduzido", + "pause": "Pausa", + "pauseDesc": "Disparado quando o áudio é pausado", + "ended": "Finalizado", + "endedDesc": "Disparado quando o áudio termina de ser reproduzido", + }, + "video": { + ...en.video, + + "src": "URI da Fonte de Vídeo ou String Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL do Pôster", + "defaultPosterUrl": "", + "autoPlay": "Reprodução Automática", + "loop": "Laço", + "controls": "Ocultar Controles", + "volume": "Volume", + "playbackRate": "Taxa de Reprodução", + "posterTooltip": "O Valor Padrão é o Primeiro Quadro do Vídeo", + "autoPlayTooltip": "Após o Vídeo ser Carregado, Ele Será Reproduzido Automaticamente. Alterar Este Valor de Verdadeiro para Falso Pausará o Vídeo. (Se um Pôster Estiver Definido, Ele Será Reproduzido pelo Botão do Pôster)", + "controlsTooltip": "Ocultar Controles de Reprodução do Vídeo. Pode Não Ser Totalmente Suportado por Cada Fonte de Vídeo.", + "volumeTooltip": "Defina o Volume do Player, Entre 0 e 1", + "playbackRateTooltip": "Defina a Taxa do Player, Entre 1 e 2", + "srcDesc": "URI ou String Base64 atual de vídeo como data:video/mp4;base64, AAA... CCC", + "play": "Reproduzir", + "playDesc": "Disparado quando o vídeo é reproduzido", + "pause": "Pausa", + "pauseDesc": "Disparado quando o vídeo é pausado", + "load": "Carregar", + "loadDesc": "Disparado quando o recurso de vídeo terminou de carregar", + "ended": "Finalizado", + "endedDesc": "Disparado quando o vídeo termina de ser reproduzido", + "currentTimeStamp": "A posição de reprodução atual do vídeo em segundos", + "duration": "A duração total do vídeo em segundos", + }, + "media": { + ...en.media, + + "playDesc": "Inicia a reprodução da mídia.", + "pauseDesc": "Pausa a reprodução da mídia.", + "loadDesc": "Redefine a mídia para o início e reinicia a seleção do recurso de mídia.", + "seekTo": "Avança para o número de segundos especificado, ou fração se o valor estiver entre 0 e 1", + "seekToAmount": "Número de segundos, ou fração se estiver entre 0 e 1", + "showPreview": "Mostrar pré-visualização", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Valor Inicial", + "end": "Valor Final", + "step": "Tamanho do Passo", + "stepTooltip": "A granularidade do controle deslizante, o valor deve ser maior que 0 e divisível por (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Selecionar um Ícone", + "insertIcon": "Inserir um Ícone", + "insertImage": "Inserir uma Imagem ou ", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Selecionar uma Forma", + "insertShape": "Inserir uma Forma", + "insertImage": "Inserir uma Imagem ou ", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Por favor, insira o período de timeout correto em ms, o valor atual é: {value}", + "timeoutLessThanMinError": "A entrada deve ser maior que {left}, o valor atual é: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Único", + "multiple": "Múltiplo", + "close": "Fechar", + "mode": "Modo de Seleção", + }, + "container": { + ...en.container, + + "title": "Título do Container Exibido", + "titleTooltip": "O título do container", + "flowWidth": "Largura do conteúdo", + "floatType": "Tipo de Flutuação de Texto", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Posição do Botão Fechar", + "placement": "Posição da Gaveta", + "size": "Tamanho", + "top": "Superior", + "right": "Direita", + "center": "Center", + "bottom": "Inferior", + "left": "Esquerda", + "title": "Título da gaveta", + "titleAlign": "Alinhamento do título", + "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", + "heightTooltip": "Pixel, ex: 378", + "openDrawerDesc": "Abrir Gaveta", + "closeDrawerDesc": "Fechar Gaveta", + "width": "Largura da Gaveta", + "height": "Altura da Gaveta", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Nível de log do SDK da Agora", + "placement": "Posição da Gaveta de Reuniões", + "meeting": "Configurações de Reunião", + "cameraView": "Visualização da Câmera", + "cameraViewDesc": "Visualização da câmera do usuário local (anfitrião)", + "screenShared": "Compartilhamento de Tela", + "screenSharedDesc": "Tela compartilhada pelo usuário local (anfitrião)", + "audioUnmuted": "Áudio Ativado", + "audioMuted": "Áudio Desativado", + "videoClicked": "Vídeo Clicado", + "videoOff": "Vídeo Desativado", + "videoOn": "Vídeo Ativado", + "size": "Tamanho", + "top": "Superior", + "host": "Anfitrião da Sala de Reunião. Você precisaria gerenciar o anfitrião como sua lógica de aplicativo", + "participants": "Participantes da Sala de Reunião", + "shareScreen": "Exibir Tela Compartilhada pelo Usuário Local", + "appid": "ID do Aplicativo da Agora", + "meetingName": "Nome da Reunião", + "localUserID": "ID do Usuário Anfitrião", + "userName": "Nome do Usuário Anfitrião", + "rtmToken": "Token RTM da Agora", + "rtcToken": "Token RTC da Agora", + "noVideo": "Sem Vídeo", + "profileImageUrl": "URL da Imagem de Perfil", + "right": "Direita", + "bottom": "Inferior", + "videoId": "ID do Fluxo de Vídeo", + "audioStatus": "Status de Áudio", + "left": "Esquerda", + "widthTooltip": "Pixel ou porcentagem, ex: 520, 60%", + "heightTooltip": "Pixel, ex: 378", + "openDrawerDesc": "Abrir Gaveta", + "closeDrawerDesc": "Fechar Gaveta", + "width": "Largura da Gaveta", + "height": "Altura da Gaveta", + "actionBtnDesc": "Botão de Ação", + "broadCast": "Transmissão de Mensagens", + "title": "Título da Reunião", + "meetingCompName": "Controlador de Reunião da Agora", + "sharingCompName": "Transmissão de Tela", + "videoCompName": "Transmissão de Câmera", + "videoSharingCompName": "Transmissão de Tela", + "meetingControlCompName": "Botão de Ícone", + "meetingCompDesc": "Componente de Reunião", + "meetingCompControls": "Controle de Reunião", + "meetingCompKeywords": "Reunião da Agora, Reunião Web, Colaboração", + "iconSize": "Tamanho do Ícone", + "userId": "ID do Usuário Anfitrião", + "roomId": "ID da Sala", + "meetingActive": "Reunião em Andamento", + "messages": "Mensagens Transmitidas", + }, + "settings": { + ...en.settings, + + "title": "Configurações", + "userGroups": "Grupos de Usuários", + "organization": "Espaços de Trabalho", + "subscription": "Assinaturas", + "audit": "Registros de Auditoria", + "theme": "Temas", + "plugin": "Plug-ins", + "advanced": "Avançado", + "apiDocs": "Documentos da API", + "lab": "Laboratório", + "branding": "Marca", + "oauthProviders": "Autenticação de Usuário", + "appUsage": "Logs de Uso do Aplicativo", + "environments": "Ambientes", + "premium": "Prémio", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Administrador", + "superAdmin": "Superadministrador", + "adminGroupRoleInfo": "O administrador pode gerenciar membros do grupo e recursos", + "adminOrgRoleInfo": "Os administradores possuem todos os recursos e podem gerenciar grupos.", + "member": "Membro", + "memberGroupRoleInfo": "O membro pode visualizar membros do grupo", + "memberOrgRoleInfo": "Os membros só podem usar ou acessar recursos aos quais têm acesso.", + "title": "Membros", + "createGroup": "Criar Grupo", + "newGroupPrefix": "Novo Grupo ", + "allMembers": "Todos os Membros", + "deleteModalTitle": "Excluir Este Grupo", + "deleteModalContent": "O grupo excluído não pode ser restaurado. Você tem certeza de que deseja excluir o grupo?", + "addMember": "Adicionar Membros", + "nameColumn": "Nome do Usuário", + "joinTimeColumn": "Tempo de Entrada", + "actionColumn": "Operação", + "roleColumn": "Função", + "exitGroup": "Sair do Grupo", + "moveOutGroup": "Remover do Grupo", + "inviteUser": "Convidar Membros", + "exitOrg": "Sair", + "exitOrgDesc": "Você tem certeza de que deseja sair deste espaço de trabalho.", + "moveOutOrg": "Remover", + "moveOutOrgDescSaasMode": "Você tem certeza de que deseja remover o usuário {name} deste espaço de trabalho?", + "moveOutOrgDesc": "Você tem certeza de que deseja remover o usuário {name}? Esta ação não pode ser recuperada.", + "devGroupTip": "Os membros do grupo de desenvolvedores têm privilégios para criar aplicativos e fontes de dados.", + "lastAdminQuit": "O último administrador não pode sair.", + "organizationNotExist": "O espaço de trabalho atual não existe", + "inviteUserHelp": "Você pode copiar o link de convite para enviar ao usuário", + "inviteUserLabel": "Link de Convite:", + "inviteCopyLink": "Copiar Link", + "inviteText": "{userName} convida você a ingressar no espaço de trabalho \"{organization}\", clique no link para ingressar: {inviteLink}", + "groupName": "Nome do Grupo", + "createTime": "Tempo de Criação", + "manageBtn": "Gerenciar", + "userDetail": "Detalhe", + "syncDeleteTip": "Este grupo foi excluído da fonte de catálogo de endereços", + "syncGroupTip": "Este grupo é um grupo de sincronização do catálogo de endereços e não pode ser editado", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Novo Espaço de Trabalho (Organização)", + "title": "Espaço de Trabalho", + "createOrg": "Criar Espaço de Trabalho (Organização)", + "deleteModalTitle": "Tem certeza de que deseja excluir este espaço de trabalho?", + "deleteModalContent": "Você está prestes a excluir este espaço de trabalho {permanentlyDelete}. Uma vez excluído, o espaço de trabalho {notRestored}.", + "permanentlyDelete": "Permanentemente", + "notRestored": "Não pode ser restaurado", + "deleteModalLabel": "Por favor, digite o nome do espaço de trabalho {name} para confirmar a operação:", + "deleteModalTip": "Por favor, digite o nome do espaço de trabalho", + "deleteModalErr": "O nome do espaço de trabalho está incorreto", + "deleteModalBtn": "Excluir", + "editOrgTitle": "Editar Informações do Espaço de Trabalho", + "orgNameLabel": "Nome do Espaço de Trabalho:", + "orgNameCheckMsg": "O nome do espaço de trabalho não pode estar vazio", + "orgLogo": "Logo do Espaço de Trabalho:", + "logoModify": "Modificar Imagem", + "inviteSuccessMessage": "Junte-se ao Espaço de Trabalho com Sucesso", + "inviteFailMessage": "Falha ao Entrar no Espaço de Trabalho", + "uploadErrorMessage": "Erro ao Carregar", + "orgName": "Nome do Espaço de Trabalho", + }, + "freeLimit": "Teste Gratuito", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Alternar Aba", + "switchTabDesc": "Acionado ao Alternar Abas", + "tab": "Abas", + "atLeastOneTabError": "O Contêiner de Abas Deve Manter Pelo Menos Uma Aba", + "selectedTabKeyDesc": "Aba Atualmente Selecionada", + "iconPosition": "Posição do Ícone", + "placement": "Posicionamento das Abas", + "showTabs": "Mostrar Abas", + "gutter": "Espaçamento", + "gutterTooltip": "A distância entre as abas em px", + "tabsCentered": "Abas Centralizadas", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Arraste Componentes do Painel à Direita ou", + "openDialogButton": "Gerar um Formulário a partir de uma de suas Fontes de Dados", + "resetAfterSubmit": "Redefinir Após Envio Bem-Sucedido", + "initialData": "Dados Iniciais", + "disableSubmit": "Desativar Envio", + "success": "Formulário Gerado com Sucesso", + "selectCompType": "Selecione o Tipo de Componente", + "dataSource": "Fonte de Dados: ", + "selectSource": "Selecionar Fonte", + "table": "Tabela: ", + "selectTable": "Selecionar Tabela", + "columnName": "Nome da Coluna", + "dataType": "Tipo de Dados", + "compType": "Tipo de Componente", + "required": "Obrigatório", + "generateForm": "Gerar Formulário", + "compSelectionError": "Tipo de Coluna Não Configurado", + "compTypeNameError": "Não foi Possível Obter o Nome do Tipo de Componente", + "noDataSourceSelected": "Nenhuma Fonte de Dados Selecionada", + "noTableSelected": "Nenhuma Tabela Selecionada", + "noColumn": "Nenhuma Coluna", + "noColumnSelected": "Nenhuma Coluna Selecionada", + "noDataSourceFound": "Nenhuma Fonte de Dados Suportada Encontrada. Crie uma Nova Fonte de Dados", + "noTableFound": "Nenhuma Tabela Foi Encontrada nesta Fonte de Dados, Por Favor, Selecione Outra Fonte de Dados", + "noColumnFound": "Nenhuma Coluna Suportada Foi Encontrada nesta Tabela. Por Favor, Selecione Outra Tabela", + "formTitle": "Título do Formulário", + "name": "Nome", + "nameTooltip": "O Nome do Atributo nos Dados do Formulário, Quando Deixado em Branco, Padrão para o Nome do Componente", + "notSupportMethod": "Métodos Não Suportados: ", + "notValidForm": "O Formulário Não é Válido", + "resetDesc": "Redefinir Dados do Formulário para o Valor Padrão", + "clearDesc": "Limpar Dados do Formulário", + "setDataDesc": "Definir Dados do Formulário", + "valuesLengthError": "Erro no Número de Parâmetros", + "valueTypeError": "Erro no Tipo de Parâmetro", + "dataDesc": "Dados Atuais do Formulário", + "loadingDesc": "O Formulário Está Carregando?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Aberto", + "openDesc": "Acionado quando a caixa de diálogo modal é aberta", + "close": "Fechar", + "closeDesc": "Acionado Quando a Caixa de Diálogo Modal é Fechada", + "openModalDesc": "Abrir a Caixa de Diálogo", + "closeModalDesc": "Fechar a Caixa de Diálogo", + "visibleDesc": "Está Visível? Se Verdadeiro, a Caixa de Diálogo Atual Será Exibida", + "title": "Título da gaveta", + "titleAlign": "Alinhamento do título", + "modalHeight": "Altura da Modal", + "modalHeightTooltip": "Pixels, Exemplo: 222", + "modalWidth": "Largura da Modal", + "modalWidthTooltip": "Número ou Porcentagem, Exemplo: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Contagem de Linhas", + "noOfRowsTooltip": "Número de Linhas na Lista - Normalmente Configurado para uma Variável (por exemplo, '{{query1.data.length}}') para Apresentar Resultados da Consulta", + "noOfColumns": "Contagem de Colunas", + "itemIndexName": "Nome do Índice do Item de Dados", + "itemIndexNameDesc": "O Nome da Variável Referente ao Índice do Item, Padrão como {default}", + "itemDataName": "Nome do Objeto de Dados do Item", + "itemDataNameDesc": "O Nome da Variável Referente ao Objeto de Dados do Item, Padrão como {default}", + "itemsDesc": "Expondo Dados dos Componentes na Lista", + "dataDesc": "Os Dados JSON Usados na Lista Atual", + "dataTooltip": "Se Você Apenas Definir um Número, Este Campo Será Considerado como Contagem de Linhas, e os Dados Serão Considerados como Vazios.", + }, + "navigation": { + ...en.navigation, + + "addText": "Adicionar Item de Submenu", + "logoURL": "URL do Logotipo da Navegação", + "horizontalAlignment": "Alinhamento Horizontal", + "logoURLDesc": "Você pode exibir um Logotipo no lado esquerdo inserindo um Valor de URI ou String Base64 como data:image/png;base64,AAA... CCC", + "itemsDesc": "Itens do Menu de Navegação Hierárquica", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Submenu {número}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Ativo", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "O URL de Origem para o Conteúdo do IFrame. Certifique-se de que o URL é HTTPS ou localhost. Além disso, certifique-se de que o URL não está bloqueado pela Política de Segurança de Conteúdo (CSP) do navegador. O cabeçalho 'X-Frame-Options' não deve ser definido como 'DENY' ou 'SAMEORIGIN'.", + "allowDownload": "Permitir Downloads", + "allowSubmitForm": "Permitir Envio de Formulário", + "allowMicrophone": "Permitir Microfone", + "allowCamera": "Permitir Câmera", + "allowPopup": "Permitir Pop-ups", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Valor Booleano Padrão", + "open": "Ligado", + "close": "Desligado", + "openDesc": "Acionado Quando o Interruptor é Ligado", + "closeDesc": "Acionado Quando o Interruptor é Desligado", + "valueDesc": "Status Atual do Interruptor", + }, + "signature": { + ...en.signature, + + "tips": "Texto de Dica", + "signHere": "Assine Aqui", + "showUndo": "Mostrar Desfazer", + "showClear": "Mostrar Limpar", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Todos os Itens de Dados Armazenados Atualmente", + "setItemDesc": "Adicionar um Item", + "removeItemDesc": "Remover um Item", + "clearItemDesc": "Limpar Todos os Itens", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "Abrir URL", + "openApp": "Abrir Aplicativo", + "copyToClipboard": "Copiar para a Área de Transferência", + "downloadFile": "Baixar Arquivo", + }, + "messageComp": { + ...en.messageComp, + + "info": "Enviar uma Notificação", + "loading": "Enviar uma Notificação de Carregamento", + "success": "Enviar uma Notificação de Sucesso", + "warn": "Enviar uma Notificação de Aviso", + "error": "Enviar uma Notificação de Erro", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "Fechar uma Notificação", + "info": "Enviar uma Notificação", + "loading": "Enviar uma Notificação de Carregamento", + "success": "Enviar uma Notificação de Sucesso", + "warn": "Enviar uma Notificação de Aviso", + "error": "Enviar uma Notificação de Erro", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Alterar Tema", + }, + "transformer": { + ...en.transformer, + + "preview": "Pré-Visualização", + "docLink": "Saiba Mais Sobre Transformadores...", + "previewSuccess": "Pré-Visualização Bem-Sucedida", + "previewFail": "Falha na Pré-Visualização", + "deleteMessage": "Transformador Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", + "documentationText": "Os transformadores são projetados para transformação de dados e reutilização do seu código JavaScript multi-linha. Use transformadores para adaptar dados de consultas ou componentes às necessidades de seu aplicativo local. Ao contrário da consulta JavaScript, o transformador é projetado para realizar operações somente de leitura, o que significa que você não pode acionar uma consulta ou atualizar um estado temporário dentro de um transformador.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Valor Inicial", + "valueTooltip": "O Valor Inicial Armazenado no Estado Temporário Pode Ser Qualquer Valor JSON Válido.", + "docLink": "Saiba Mais Sobre Estados Temporários...", + "pathTypeError": "O Caminho Deve Ser uma String ou um Array de Valores", + "unStructuredError": "Dados Não Estruturados {prev} Não Podem Ser Atualizados por {path}", + "valueDesc": "Valor do Estado Temporário", + "deleteMessage": "O Estado Temporário Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", + "documentationText": "Os estados temporários são um recurso poderoso usado para gerenciar variáveis complexas que atualizam dinamicamente o estado dos componentes em seu aplicativo. Esses estados funcionam como armazenamento intermediário ou transitório para dados que podem mudar ao longo do tempo devido a interações do usuário ou outros processos.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Dados", + "dataDesc": "Dados do Data Responder Atual", + "dataTooltip": "Quando Estes Dados São Alterados, Irão Acionar Ações Subsequentes.", + "docLink": "Saiba Mais Sobre os Data Responders...", + "deleteMessage": "O Data Responder Foi Excluído com Sucesso. Você Pode Usar {undoKey} para Desfazer.", + "documentationText": "Ao desenvolver um aplicativo, você pode atribuir eventos a componentes para monitorar alterações em dados específicos. Por exemplo, um componente de Tabela pode ter eventos como \"Alteração de seleção de linha\", \"Alteração de filtro\", \"Alteração de ordenação\" e \"Alteração de página\" para rastrear alterações na propriedade selectedRow. No entanto, para alterações em estados temporários, transformadores ou resultados de consulta, onde eventos padrão não estão disponíveis, os Data Responders são utilizados. Eles permitem detectar e reagir a quaisquer modificações de dados.", + }, + "theme": { + ...en.theme, + + "title": "Temas", + "createTheme": "Criar Tema", + "themeName": "Nome do Tema:", + "themeNamePlaceholder": "Por favor, insira um nome para o tema", + "defaultThemeTip": "Tema Padrão:", + "createdThemeTip": "O Tema Que Você Criou:", + "option": "Opção {index}", + "input": "Entrada", + "confirm": "Ok", + "emptyTheme": "Nenhum Tema Disponível", + "click": "", + "toCreate": "", + "nameColumn": "Nome", + "defaultTip": "Padrão", + "updateTimeColumn": "Tempo de Atualização", + "edit": "Editar", + "cancelDefaultTheme": "Cancelar Tema Padrão", + "setDefaultTheme": "Definir como Tema Padrão", + "copyTheme": "Duplicar Tema", + "setSuccessMsg": "Configuração Bem-Sucedida", + "cancelSuccessMsg": "Cancelamento Bem-Sucedido", + "deleteSuccessMsg": "Exclusão Bem-Sucedida", + "checkDuplicateNames": "O Nome do Tema Já Existe, Por Favor, Reinsira-o", + "copySuffix": " Cópia", + "saveSuccessMsg": "Salvo com Sucesso", + "leaveTipTitle": "Dicas", + "leaveTipContent": "Você Ainda Não Salvou, Confirmar Saída?", + "leaveTipOkText": "Sair", + "goList": "Voltar para a Lista", + "saveBtn": "Salvar", + "mainColor": "Cores Principais", + "text": "Cores do Texto", + "layout": "Configurações de layout", + "fonts": "Definições do tipo de letra", + "components": "Modelos de componentes", + "charts": "Definição de eCharts", + "defaultTheme": "Padrão", + "yellow": "Amarelo", + "green": "Verde", + "previewTitle": "Pré-Visualização do Tema\nExemplo de Componentes que Utilizam as Cores do Seu Tema", + "dateColumn": "Data", + "emailColumn": "Correio eletrónico", + "phoneColumn": "Telefone", + "subTitle": "Título", + "linkLabel": "Ligação a", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Progresso", + "sliderLabel": "Controle Deslizante", + "radioLabel": "Botão de Opção", + "checkboxLabel": "Caixa de Seleção", + "buttonLabel": "Botão de Formulário", + "switch": "Interruptor", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "balão.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Pré-Visualização do Estilo do Gráfico", + "chartSpending": "Gastos", + "chartBudget": "Orçamento", + "chartAdmin": "Administração", + "chartFinance": "Finanças", + "chartSales": "Vendas", + "chartFunnel": "Gráfico de Funil", + "chartShow": "Mostrar", + "chartClick": "Clique", + "chartVisit": "Visita", + "chartQuery": "Consulta", + "chartBuy": "Comprar", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Cor da Marca", + "primaryDesc": "Cor primária padrão usada pela maioria dos componentes", + "textDark": "Cor do Texto Escuro", + "textDarkDesc": "Usado quando a cor de fundo é clara", + "textLight": "Cor do Texto Claro", + "textLightDesc": "Usado quando a cor de fundo é escura", + "canvas": "Cor do Fundo", + "canvasDesc": "Cor de fundo padrão do aplicativo", + "primarySurface": "Cor do Contêiner", + "primarySurfaceDesc": "Cor de fundo padrão para componentes como tabelas", + "borders": "Estilos de fronteira", + "spacing": "Estilos de espaçamento", + "font": "Estilos de letra", + "fonts": "Fontes", + "borderRadius": "Raio da Borda", + "borderRadiusDesc": "Raio da borda padrão usado pela maioria dos componentes", + "borderColor": "Cor da fronteira", + "borderColorDesc": "Cor do contorno predefinida utilizada pela maioria dos componentes", + "borderWidth": "Largura da margem", + "borderWidthDesc": "Largura do limite predefinida utilizada pela maioria dos componentes", + "borderStyle": "Estilo de fronteira", + "borderStyleDesc": "Estilo de contorno predefinido utilizado pela maioria dos componentes", + "fontFamily": "Família de letras", + "fontFamilyDesc": "Família de tipos de letra predefinida utilizada pela maioria dos componentes", + "chart": "Estilo do Gráfico", + "chartDesc": "Entrada para Echarts", + "echartsJson": "Tema JSON", + "margin": "Margem", + "marginDesc": "Margem padrão normalmente usada para a maioria dos componentes", + "padding": "Preenchimento", + "paddingDesc": "Preenchimento padrão normalmente usado para a maioria dos componentes", + "containerHeaderPadding": "Preenchimento do Cabeçalho", + "containerheaderpaddingDesc": "Preenchimento padrão do cabeçalho normalmente usado para a maioria dos componentes", + "gridColumns": "Colunas da Grade", + "gridColumnsDesc": "Número padrão de colunas normalmente usado para a maioria dos contêineres", + "loadingIndicators": "Indicadores de carga", + "showComponentLoadingIndicators": "Mostrar indicadores de carregamento quando o componente é carregado", + "showDataLoadingIndicators": "Mostrar indicadores de carregamento durante o carregamento dos dados", + "showIndicatorsDuringDataLoading": "Mostrar indicadores durante o carregamento de dados", + "dataLoadingIndicator": "Indicador de carregamento de dados" + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Plugins", + "npmPluginTitle": "Plugins do npm", + "npmPluginDesc": "Configure os plugins do npm para todas as aplicações no espaço de trabalho atual.", + "npmPluginEmpty": "Nenhum plugin do npm foi adicionado.", + "npmPluginAddButton": "Adicionar um plugin do npm", + "saveSuccess": "Salvo com sucesso", + }, + "advanced": { + ...en.advanced, + + "title": "Avançado", + "defaultHomeTitle": "Página Inicial Padrão", + "defaultHomeHelp": "A Página Inicial é a aplicação que todos os não desenvolvedores verão por padrão quando fizerem login. Observação: certifique-se de que a aplicação selecionada seja acessível aos não desenvolvedores.", + "defaultHomePlaceholder": "Selecione a Página Inicial Padrão", + "saveBtn": "Salvar", + "preloadJSTitle": "Pré-carregar JavaScript", + "preloadJSHelp": "Configure código JavaScript pré-carregado para todas as aplicações no espaço de trabalho atual.", + "preloadCSSTitle": "Pré-carregar CSS", + "preloadCSSHelp": "Configure código CSS pré-carregado para todas as aplicações no espaço de trabalho atual.", + "preloadCSSApply": "Aplicar à Página Inicial do Espaço de Trabalho", + "preloadLibsTitle": "Biblioteca JavaScript", + "preloadLibsHelp": "Configure bibliotecas JavaScript pré-carregadas para todas as aplicações no espaço de trabalho atual. O sistema possui lodash, day.js, uuid, numbro integrados para uso direto. As bibliotecas JavaScript são carregadas antes que a aplicação seja inicializada, portanto, há um certo impacto no desempenho da aplicação.", + "preloadLibsEmpty": "Nenhuma biblioteca JavaScript foi adicionada", + "preloadLibsAddBtn": "Adicionar uma biblioteca", + "saveSuccess": "Salvo com sucesso", + "AuthOrgTitle": "Tela de Boas-Vindas do Espaço de Trabalho", + "AuthOrgDescrition": "A URL para os seus usuários entrarem no espaço de trabalho atual.", + "APIConsumption": "Consumo de API", + "APIConsumptionDescription": "Aqui você pode ver o consumo de API para todas as aplicações no espaço de trabalho atual.", + "overallAPIConsumption": "Consumo geral de API neste espaço de trabalho até o momento", + "lastMonthAPIConsumption": "Consumo de API do último mês, neste espaço de trabalho", + "npmRegistryTitle": "Registo NPM personalizado", + "npmRegistryHelp": "Configurar um registo NPM personalizado para permitir a obtenção de plugins a partir de um registo NPM privado.", + "showHeaderInPublicApps": "Mostrar cabeçalho em exibição pública", + "showHeaderInPublicAppsHelp": "Defina a visibilidade do cabeçalho em exibição pública para todos os aplicativos", + }, + "branding": { + ...en.branding, + + "title": "Configurações de Marca", + "logoSection": "Logotipos", + "logo": "Logotipo", + "logoHelp": "Envie o logotipo da sua empresa em formato SVG ou PNG.", + "squareLogo": "Logotipo Quadrado", + "squareLogoHelp": "Envie uma versão quadrada do seu logotipo em formato SVG ou PNG.", + "colorFontSection": "Cores e Fontes", + "mainBrandingColor": "Cor Principal da Marca", + "mainBrandingColorHelp": "Selecione a cor principal para a sua marca.", + "editorHeaderColor": "Cor do Cabeçalho do Editor", + "editorHeaderColorHelp": "Selecione a cor do cabeçalho do editor.", + "adminSidebarColor": "Cor da Barra Lateral do Administrador", + "adminSidebarColorHelp": "Selecione a cor da barra lateral do administrador.", + "editorSidebarColor": "Cor da Barra Lateral do Editor", + "editorSidebarColorHelp": "Selecione a cor da barra lateral do editor.", + "font": "Fonte", + "fontHelp": "Selecione uma fonte do Google Fonts para o seu aplicativo.", + "textSection": "Textos e Páginas", + "errorPage": "Texto da Página de Erro", + "errorPageHelp": "Insira o texto exibido na página de erro.", + "signUpPage": "Texto da Página de Cadastro", + "signUpPageHelp": "Insira o texto exibido na página de cadastro.", + "loggedOutPage": "Texto da Página de Logout", + "loggedOutPageHelp": "Insira o texto exibido na página de logout.", + "standardDescription": "Descrição Padrão", + "standardDescriptionHelp": "Insira a descrição padrão para as informações meta de SEO.", + "standardTitle": "Título Padrão", + "standardTitleHelp": "Insira o título padrão para as informações meta de SEO.", + "showDocumentation": "Exibir Documentação", + "submitIssue": "Permitir Enviar Problema", + "whatsNew": "Ativar \"Novidades\"", + "saveButton": "Salvar Configurações", + "errorPageImage": "Envie uma imagem para a página de erro no formato SVG ou PNG.", + "signUpPageImage": "Envie uma imagem para a página de cadastro no formato SVG ou PNG.", + "loggedOutPageImage": "Envie uma imagem para a página de saída no formato SVG ou PNG.", + "documentationLink": "Link da documentação", + "documentationLinkPlaceholder": "Insira o URL da sua documentação...", + "documentationLinkHelp": "Forneça um URL válido que os usuários possam visitar para acessar a documentação.", + "whatsNewSection": "Configurações de documentação", + "whatsNewLink": "Link da documentação", + "whatsNewLinkPlaceholder": "Insira o URL da sua documentação...", + "whatsNewLinkHelp": "Forneça um URL válido que os usuários possam visitar para acessar as novidades." + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Falha ao Conectar ao Servidor, Por Favor, Verifique Sua Conexão de Rede", + "200": "Sucesso", + "201": "Criado", + "204": "Sem Conteúdo", + "400": "Solicitação Inválida", + "401": "Autenticação Falhou, Por Favor, Faça Login Novamente", + "403": "Sem Permissão, Por Favor, Contate o Administrador para Autorização", + "404": "Não Encontrado", + "500": "Serviço Ocupado, Por Favor, Tente Novamente Mais Tarde", + "timeout": "Tempo Limite da Solicitação", + }, + "share": { + ...en.share, + + "title": "Compartilhar", + "viewer": "Visualizador", + "editor": "Editor", + "owner": "Proprietário", + "datasourceViewer": "Pode Usar", + "datasourceOwner": "Pode Gerenciar", + }, + "debug": { + ...en.debug, + + "title": "Título", + "switch": "Alternar Componente: ", + }, + "module": { + ...en.module, + + "emptyText": "Sem Dados", + "docLink": "Saiba Mais Sobre Módulos...", + "documentationText": "Módulos são Aplicações completas, que podem ser incluídas e repetidas em outras Aplicações e funcionam como um único componente. Como os módulos podem ser incorporados, eles precisam ser capazes de interagir com suas aplicações ou sites externos. Essas quatro configurações ajudam a suportar a comunicação com um Módulo.", + "circularReference": "Referência Circular, o Módulo/Aplicação Atual Não Pode Ser Usado!", + "emptyTestInput": "O Módulo Atual Não Tem Entrada para Testar", + "emptyTestMethod": "O Módulo Atual Não Possui Método para Testar", + "name": "Nome", + "input": "Entrada", + "params": "Parâmetros", + "emptyParams": "Nenhum Parâmetro Foi Adicionado", + "emptyInput": "Nenhuma Entrada Foi Adicionada", + "emptyMethod": "Nenhum Método Foi Adicionado", + "emptyOutput": "Nenhuma Saída Foi Adicionada", + "data": "Dados", + "string": "Texto", + "number": "Número", + "array": "Arranjo", + "boolean": "Booleano", + "query": "Consulta", + "autoScaleCompHeight": "A Altura do Componente se Ajusta ao Contêiner", + "excuteMethod": "Executar Método {name}", + "method": "Método", + "action": "Ação", + "output": "Saída", + "nameExists": "O Nome {name} Já Existe", + "eventTriggered": "Evento {name} Acionado", + "globalPromptWhenEventTriggered": "Exibe um Alerta Global Quando um Evento é Acionado", + "emptyEventTest": "O Módulo Atual Não Possui Eventos para Testar", + "emptyEvent": "Nenhum Evento Foi Adicionado", + "event": "Evento", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "O Valor de Retorno é uma Função.", + "consume": "{time}", + "JSON": "Mostrar JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Criando...", + "created": "Criar {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Falha na Autenticação do Usuário, Por Favor Faça Login Novamente", + "verifyAccount": "Necessário Verificar a Conta", + "functionNotSupported": "A Versão Atual Não Suporta Esta Função. Por Favor, Entre em Contato com a Equipe de Negócios da Lowcoder para Atualizar sua Conta", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Falha ao Criar o Componente {comp}", + "notHandledError": "Erro Não Tratado no Método {method}", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Barra de Navegação", + "chooseApp": "Escolher Aplicativo", + "iconTooltip": "Suporta Link de Imagem src ou String Base64 como data:image/png;base64,AAA... CCC", + "hideWhenNoPermission": "Oculto para Usuários Não Autorizados", + "queryParam": "Parâmetros de Consulta da URL", + "hashParam": "Parâmetros de Hash da URL", + "tabBar": "Barra de Abas", + "emptyTabTooltip": "Configure Esta Página no Painel Direito", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Celular)", + "800": "800px (Tablet)", + "1440": "1440px (Notebook)", + "1920": "1920px (Tela Larga)", + "3200": "3200px (Tela Super Grande)", + "title": "Configurações Gerais do Aplicativo", + "autofill": "Preenchimento Automático", + "userDefined": "Personalizado", + "default": "Padrão", + "tooltip": "Fechar a Popover Após Configuração", + "canvasMaxWidth": "Largura Máxima do Canvas para Este Aplicativo", + "userDefinedMaxWidth": "Largura Máxima Personalizada", + "inputUserDefinedPxValue": "Por Favor, Insira um Valor Personalizado em Pixels", + "maxWidthTip": "A Largura Máxima Deve Ser Maior ou Igual a 350", + "themeSetting": "Tema de Estilo Aplicado", + "themeSettingDefault": "Padrão", + "themeCreate": "Criar Tema", + "appTitle": "Título", + "appDescription": "Descrição", + "appCategory": "Categoria", + "showPublicHeader": "Mostrar cabeçalho na visualização pública", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Atalhos Personalizados", + "shortcut": "Atalho", + "action": "Ação", + "empty": "Nenhum Atalho", + "placeholder": "Pressione Atalho", + "otherPlatform": "Outro", + "space": "Espaço", + }, + "profile": { + ...en.profile, + + "orgSettings": "Configurações do Espaço de Trabalho", + "switchOrg": "Trocar Espaço de Trabalho", + "joinedOrg": "Meus Espaços de Trabalho", + "createOrg": "Criar Espaço de Trabalho", + "logout": "Sair", + "personalInfo": "Meu Perfil", + "bindingSuccess": "Vínculo {sourceName} Bem-Sucedido", + "uploadError": "Erro ao Fazer Upload", + "editProfilePicture": "Modificar", + "saveUserNameTooltip": "Pressione Enter para Salvar seu Novo NicName. Se você ver seu E-mail, significa que acabamos de assumi-lo como Nome de Usuário e você pode alterá-lo para um melhor. Seu E-mail como nome de usuário técnico permanece intocado.", + "changeAvatarTooltip": "Você Pode Fazer Upload de Arquivos PNG ou JPG", + "nameCheck": "O Nome Não Pode Estar Vazio", + "name": "Nome: ", + "namePlaceholder": "Por Favor, Insira Seu Nome", + "toBind": "Para Vincular", + "binding": "Está Vinculando", + "bindError": "Erro de Parâmetro, Vinculação Atualmente Não Suportada.", + "bindName": "Vincular {name}", + "loginAfterBind": "Após a Vinculação, Você Pode Usar {name} para Fazer Login", + "bindEmail": "Vincular E-mail:", + "email": "E-mail", + "emailCheck": "Por Favor, Insira um E-mail Válido", + "emailPlaceholder": "Por Favor, Insira Seu E-mail", + "submit": "Enviar", + "bindEmailSuccess": "Vinculação de E-mail Bem-Sucedida", + "passwordModifiedSuccess": "Senha Alterada com Sucesso", + "passwordSetSuccess": "Senha Definida com Sucesso", + "oldPassword": "Senha Antiga:", + "inputCurrentPassword": "Por Favor, Insira Sua Senha Atual", + "newPassword": "Nova Senha:", + "inputNewPassword": "Por Favor, Insira Sua Nova Senha", + "confirmNewPassword": "Confirmar Nova Senha:", + "inputNewPasswordAgain": "Por Favor, Insira Sua Nova Senha Novamente", + "password": "Senha:", + "modifyPassword": "Alterar Senha", + "setPassword": "Definir Senha", + "alreadySetPassword": "Senha Definida", + "setPassPlaceholder": "Você Pode Fazer Login com Senha", + "setPassAfterBind": "Você Pode Definir a Senha Após Vincular a Conta", + "socialConnections": "Conexões Sociais", + "changeAvatar": "Alterar Avatar", + "about": "Sobre", + "userId": "ID do Usuário", + "createdAt": "Criado Em", + "currentOrg": "Organização Atual", + "settings": "Configurações", + "uiLanguage": "Idioma da Interface do Usuário", + "info": "Informações", + "createdApps": "Seus Aplicativos Criados", + "createdModules": "Seus Módulos Criados", + "sharedApps": "Aplicativos Compartilhados com Você", + "sharedModules": "Módulos Compartilhados com Você", + "onMarketplace": "No Marketplace", + "howToPublish": "Como Publicar no Marketplace", + "memberOfOrgs": "Membro dos Espaços de Trabalho", + "apiKeys": "Chaves de API", + "createApiKey": "Criar Chave de API", + "apiKeyName": "Nome", + "apiKeyDescription": "Descrição", + "apiKeyCopy": "Clique na Chave de API para obter o valor no seu clipboard", + "apiKey": "Chave de API", + "deleteApiKey": "Excluir Chave de API", + "deleteApiKeyContent": "Tem certeza de que deseja excluir esta chave de API?", + "deleteApiKeyError": "Algo deu errado. Por favor, tente novamente.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Atalhos do Teclado", + "click": "Clique", + "global": "Mundial", + "toggleShortcutList": "Alternar Atalhos do Teclado", + "editor": "Editor", + "toggleLeftPanel": "Alternar Painel Esquerdo", + "toggleBottomPanel": "Alternar Painel Inferior", + "toggleRightPanel": "Alternar Painel Direito", + "toggleAllPanels": "Alternar Todos os Painéis", + "preview": "Visualizar", + "undo": "Desfazer", + "redo": "Refazer", + "showGrid": "Mostrar Grade", + "component": "Componente", + "multiSelect": "Selecionar Múltiplos", + "selectAll": "Selecionar Todos", + "copy": "Copiar", + "cut": "Recortar", + "paste": "Colar", + "move": "Mover", + "zoom": "Redimensionar", + "delete": "Excluir", + "deSelect": "Desselecionar", + "queryEditor": "Editor de Consulta", + "excuteQuery": "Executar Consulta Atual", + "editBox": "Editor de Texto", + "formatting": "Formatar", + "openInLeftPanel": "Abrir no Painel Esquerdo", + }, + "help": { + ...en.help, + + "videoText": "Visão Geral", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Não Consegue Criar um Novo Aplicativo ou Fonte de Dados?", + "permissionDenyContent": "Você não tem permissão para criar o aplicativo e a fonte de dados. Entre em contato com o administrador para se juntar ao grupo de desenvolvedores.", + "appName": "Tutorial do Aplicativo", + "chat": "Converse conosco", + "docs": "Ver Documentação", + "editorTutorial": "Tutorial do Editor", + "update": "O que há de novo?", + "version": "Versão", + "versionWithColon": "Versão: ", + "submitIssue": "Enviar um Problema", + }, + "header": { + ...en.header, + + "nameCheckMessage": "O Nome Não Pode Estar Vazio", + "viewOnly": "Somente Visualização", + "recoverAppSnapshotTitle": "Restaurar Esta Versão?", + "recoverAppSnapshotContent": "Restaurar o Aplicativo Atual para a Versão Criada em {time}.", + "recoverAppSnapshotMessage": "Restaurar Esta Versão", + "returnEdit": "Voltar para o Editor", + "deploy": "Publicar", + "export": "Exportar para JSON", + "editName": "Editar Nome", + "duplicate": "Duplicar {type}", + "snapshot": "Histórico", + "scriptsAndStyles": "Scripts e Estilos", + "appSettings": "Configurações do Aplicativo", + "preview": "Visualização", + "editError": "Modo de Pré-visualização do Histórico, Nenhuma Operação é Suportada.", + "clone": "Clonar", + "editorMode_layout": "Disposição", + "editorMode_logic": "Lógica", + "editorMode_both": "Ambos", + "editorMode_layout_tooltip": "Personalize a aparência e o layout do componente, na janela direita. Ajuste sua aparência, estilo e animação.", + "editorMode_logic_tooltip": "Configure como seu componente funciona e interage, na janela direita. Gerencie seu conteúdo e comportamentos interativos.", + "AppEditingBlocked": "Edição do aplicativo bloqueada para:", + "AppEditingBlockedHint": "As alterações não serão salvas enquanto outro usuário estiver editando este aplicativo.", + "AppEditingBlockedMessage": "Por favor, aguarde antes de verificar o status de edição do aplicativo.", + "AppEditingBlockedCheckStatus": "Verificar status do aplicativo", + "AppEditingBlockedSomeone": "Alguém", + "AppEditingBlockedMessageSnipped": "está editando este aplicativo", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Registrar", + "email": "Correio eletrónico:", + "inputEmail": "Por favor, digite seu email", + "inputValidEmail": "Por favor, insira um email válido", + "forgotPassword": "Esqueceu a Senha", + "forgotPasswordInfo": "Digite seu email e enviaremos um link para redefinir sua senha.", + "forgotPasswordSuccess": "Por favor, verifique seu email para o link de redefinição de senha.", + "forgotPasswordError": "Algo deu errado. Por favor, tente novamente.", + "register": "Registrar", + "userLogin": "Entrar", + "login": "Entrar", + "bind": "Vincular", + "passwordCheckLength": "Pelo Menos {min} Caracteres", + "passwordCheckContainsNumberAndLetter": "Deve Conter Letras e Números", + "passwordCheckSpace": "Não Pode Conter Espaços", + "welcomeTitle": "Bem-vindo ao {productName}", + "inviteWelcomeTitle": "{username} convida você a trabalhar juntos", + "terms": "Termos", + "privacy": "Política de Privacidade", + "registerHint": "Li e concordo com os", + "chooseAccount": "Escolha sua Conta", + "signInLabel": "Entrar com {name}", + "bindAccount": "Vincular Conta", + "scanQrCode": "Escanear o Código QR com {name}", + "invalidThirdPartyParam": "Parâmetro de Terceiros Inválido", + "account": "Conta", + "inputAccount": "Por favor, insira sua conta", + "ldapLogin": "Entrar com LDAP", + "resetPassword": "Redefinir Senha", + "resetPasswordDesc": "Redefinir a senha do usuário {name}. Uma nova senha será gerada após a redefinição.", + "resetSuccess": "Redefinição Bem-sucedida", + "resetSuccessDesc": "Redefinição de senha bem-sucedida. A nova senha é: {password}", + "resetLostPasswordSuccess": "Redefinição de senha bem-sucedida. Por favor, faça login novamente.", + "copyPassword": "Copiar Senha", + "poweredByLowcoder": "Desenvolvido por: Lowcoder.cloud", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Adicione bibliotecas JavaScript ao seu aplicativo atual por meio de endereços URL. lodash, day.js, uuid, numbro são integrados ao sistema para uso imediato. As bibliotecas JavaScript são carregadas antes que o aplicativo seja inicializado, o que pode impactar no desempenho do aplicativo.", + "exportedAs": "Exportado Como", + "urlTooltip": "Endereço URL da biblioteca JavaScript, [unpkg.com](https://unpkg.com/) ou [jsdelivr.net](https://www.jsdelivr.com/) são recomendados", + "externalLibsHelperText": "Apenas são suportadas as bibliotecas que utilizam a abordagem UMD (Universal Module Definition). Leia mais aqui: https://github.com/umdjs/umd", + "recommended": "Recomendado", + "viewJSLibraryDocument": "Documento", + "jsLibraryURLError": "URL Inválido", + "jsLibraryExist": "A biblioteca JavaScript já existe", + "jsLibraryEmptyContent": "Nenhuma biblioteca JavaScript adicionada", + "jsLibraryDownloadError": "Erro ao baixar a biblioteca JavaScript", + "jsLibraryInstallSuccess": "Biblioteca JavaScript instalada com sucesso", + "jsLibraryInstallFailed": "Falha na instalação da biblioteca JavaScript", + "jsLibraryInstallFailedCloud": "Talvez a biblioteca não esteja disponível na Sandbox, [Documentação](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{mensagem}", + "add": "Adicionar Novo", + "jsHelpText": "Adicione um método ou variável global ao aplicativo atual.", + "cssHelpText": "Adicione estilos ao aplicativo atual. A estrutura DOM pode mudar à medida que o sistema itera. Tente modificar os estilos por meio das propriedades do componente.", + "scriptsAndStyles": "Scripts e Estilos", + "jsLibrary": "Biblioteca JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Componente", + "componentContent": "O painel direito de componentes oferece muitos blocos de aplicativos prontos (componentes). Eles podem ser arrastados para o canvas para uso. Você também pode criar seus próprios componentes com um pouco de conhecimento de codificação.", + "canvas": "Tela", + "canvasContent": "Construa seus aplicativos no canvas com uma abordagem de 'O que você vê é o que você obtém'. Basta arrastar e soltar componentes para projetar seu layout e usar atalhos de teclado para edição rápida, como excluir, copiar e colar. Depois que um componente é selecionado, você pode ajustar todos os detalhes - desde estilos e layout até vinculação de dados e comportamento lógico. Além disso, desfrute do benefício adicional do design responsivo, garantindo que seus aplicativos tenham uma aparência ótima em qualquer dispositivo.", + "queryData": "Consultar Dados", + "queryDataContent": "Você pode criar consultas de dados aqui e conectar-se ao MySQL, MongoDB, Redis, Airtable e muitas outras fontes de dados. Após configurar a consulta, clique em 'Executar' para obter os dados e continuar o tutorial.", + "compProperties": "Propriedades do Componente", + "interactiveDemo": "Demonstração interactiva", + "interactiveDemoToolTip": "Clique para iniciar uma demonstração interactiva desta funcionalidade", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Bem-vindo! Clique em 'Aplicativo' e comece a criar seu primeiro aplicativo.", + "createAppTitle": "Criar Aplicativo", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Ativar o registo NPM personalizado", + "npmRegistryUrl": "URL do registo NPM", + "npmRegistryUrlRequired": "Introduza o URL do registo", + "npmRegistryUrlInvalid": "Introduza um URL válido", + "npmRegistryScope": "Âmbito do pacote", + "npmRegistryPattern": "Padrão", + "npmRegistryPatternInvalid": "Introduza um padrão válido (começando por @ para organizações).", + "npmRegistryAuth": "Autenticação", + "npmRegistryAuthType": "Tipo de autenticação", + "npmRegistryAuthCredentials": "Credenciais de autenticação", + "npmRegistryAuthCredentialsRequired": "Introduza as credenciais de registo", + "npmRegistryAuthCredentialsHelp": "Para a autenticação básica, forneça o nome de utilizador e a palavra-passe codificados em base64 no formato 'base64(nome de utilizador:palavra-passe)'; para a autenticação por token, forneça o token.", + }, + "history": { + ...en.history, + + "layout": "Ajuste de layout '{0}'", + "upgrade": "Atualização de '{0}'", + "delete": "Exclusão de '{0}'", + "add": "Adição de '{0}'", + "modify": "Modificação de '{0}'", + "rename": "Renomear '{1}' para '{0}'", + "recover": "Recuperar versão '{2}'", + "recoverVersion": "Recuperar versão", + "andSoOn": "e assim por diante", + "timeFormat": "MM DD às hh:mm A", + "emptyHistory": "Sem histórico", + "currentVersionWithBracket": " (Atual)", + "currentVersion": "Versão atual", + "justNow": "Agora mesmo", + "history": "Histórico", + }, + "home": { + ...en.home, + + "profile": "Seu Perfil", + "news": "Notícias", + "newsLoading": "Irá carregar alguns segundos.", + "orgHome": "Página Inicial (Org)", + "yourOrg": "Sua Organização", + "orgHomeTitle": "Página Inicial da Organização", + "appMarketplace": "Loja de Aplicativos", + "allApplications": "Seus Aplicativos", + "allModules": "Seus Módulos", + "allFolders": "Todas as Pastas", + "yourFolders": "Suas Pastas", + "modules": "Módulos", + "module": "Módulo", + "api": "API do Lowcoder", + "trash": "Lixeira", + "marketplace": "Mercado", + "allCategories": "Todas as Categorias", + "queryLibrary": "Biblioteca de Consultas", + "datasource": "Fontes de Dados", + "selectDatasourceType": "Selecione o Tipo de Fonte de Dados", + "home": "Início", + "all": "Todos", + "app": "Aplicativo", + "navigation": "Navegação", + "navLayout": "Navegação PC", + "navLayoutDesc": "Menu lateral para navegação fácil em desktop.", + "mobileTabLayout": "Navegação Móvel", + "mobileTabLayoutDesc": "Barra de navegação inferior para navegação móvel suave.", + "folders": "Pastas", + "folder": "Pasta", + "rootFolder": "Raiz", + "import": "Importar", + "export": "Exportar para JSON", + "show": "Mostrar", + "inviteUser": "Convidar membros", + "createFolder": "Criar Pasta", + "createFolderSubTitle": "Nome da pasta:", + "moveToFolder": "Mover para pasta", + "moveToTrash": "Mover para lixeira", + "moveToFolderSubTitle": "Mover \"{name}\" para:", + "folderName": "Nome da pasta:", + "resCardSubTitle": "{time} por {creator}", + "trashEmpty": "Lixeira vazia.", + "projectEmpty": "Nada aqui.", + "projectEmptyCanAdd": "Você ainda não tem nenhum aplicativo. Clique em Novo para começar.", + "name": "Nome", + "type": "Tipo", + "creator": "Criado por", + "lastModified": "Última modificação", + "deleteTime": "Hora da exclusão", + "createTime": "Hora da criação", + "datasourceName": "Nome da fonte de dados", + "databaseName": "Nome do banco de dados", + "nameCheckMessage": "O nome não pode estar vazio", + "deleteElementTitle": "Excluir permanentemente", + "moveToTrashSubTitle": "{type} {name} será movido para a lixeira.", + "deleteElementSubTitle": "Excluir {type} {name} permanentemente, não pode ser recuperado.", + "deleteSuccessMsg": "Excluído com sucesso", + "deleteErrorMsg": "Erro ao excluir", + "recoverSuccessMsg": "Recuperado com sucesso", + "newDatasource": "Nova fonte de dados", + "creating": "Criando...", + "chooseDataSourceType": "Escolha o tipo de fonte de dados", + "folderAlreadyExists": "A pasta já existe", + "newNavLayout": "{userName}'s {name}", + "newApp": "{userName}'s novo {name} ", + "importError": "Erro ao importar, {message}", + "exportError": "Erro ao exportar, {message}", + "importSuccess": "Importação bem-sucedida", + "fileUploadError": "Erro no envio do arquivo", + "fileFormatError": "Erro de formato de arquivo", + "groupWithSquareBrackets": "[Grupo] ", + "allPermissions": "Proprietário", + "shareLink": "Link de compartilhamento: ", + "copyLink": "Copiar link", + "appPublicMessage": "Torne o aplicativo público. Qualquer pessoa pode visualizá-lo.", + "modulePublicMessage": "Torne o módulo público. Qualquer pessoa pode visualizá-lo.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Publique seu aplicativo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", + "moduleMarketplaceMessage": "Publique seu Módulo no Mercado Público. Qualquer pessoa pode visualizá-lo e copiá-lo de lá.", + "marketplaceGoodPublishing": "Por favor, certifique-se de que seu aplicativo tenha um nome adequado e seja fácil de usar. Remova qualquer informação sensível antes de publicar. Além disso, remova fontes de dados locais e substitua por dados temporários estáticos integrados.", + "noMarketplaceApps": "Ainda não há aplicativos no mercado.", + "errorMarketplaceApps": "Erro ao carregar aplicativos do Mercado", + "localMarketplaceTitle": "Mercado Local", + "globalMarketplaceTitle": "Mercado Público", + "memberPermissionList": "Permissões dos membros: ", + "orgName": "{orgName} administradores", + "addMember": "Adicionar membros", + "addPermissionPlaceholder": "Por favor, insira um nome para pesquisar membros", + "searchMemberOrGroup": "Buscar membros ou grupos: ", + "addPermissionErrorMessage": "Falha ao adicionar permissão, {message}", + "copyModalTitle": "Clonar \"{name}\"", + "copyNameLabel": "Nome do {type}", + "copyModalfolderLabel": "Adicionar à pasta", + "copyNamePlaceholder": "Por favor, insira um nome de {type}", + "chooseNavType": "Por favor, escolha o tipo de navegação", + "createNavigation": "Criar Navegação", + "howToUseAPI": "Como usar a API Rest Aberta", + "support": "Apoio", + }, + "support": { + ...en.support, + + "supportTitle": "Suporte Lowcoder", + "supportContent": "Se você tiver dúvidas ou precisar de ajuda, use o sistema de tickets para resolver seu problema rapidamente.", + "newSupportTicket": "Novo Ticket de Suporte", + "ticketTitle": "Título", + "priority": "Prioridade", + "assignee": "Responsável", + "status": "Status do Ticket", + "updatedTime": "Horário Atualizado", + "active": "Ativo", + "inactive": "Inativo", + "noEmail": "Sem E-mail", + "details": "Detalhes", + "reloadTickets": "Recarregar Tickets", + "createdDate": "Data de Criação", + "updatedDate": "Data de Atualização", + "description": "Descrição do Problema", + "subtasks": "Subtarefas", + "subtasksProgress": "Progresso de todas as Subtarefas", + "attachments": "Anexos do Problema", + "comments": "Comentários", + "addComment": "Adicionar Comentário", + "addAttachment": "Adicionar Anexo", + "edit": "Editar Descrição do Ticket", + "save": "Salvar Descrição do Ticket", + "cancel": "Cancelar", + "submitComment": "Enviar Comentário", + "upload": "Enviar Anexo", + "selectFile": "Selecionar Arquivo", + "ticketDescriptionUpdated": "Descrição do ticket atualizada com sucesso!", + "ticketDescriptionUpdateFailed": "Falha ao atualizar a descrição do ticket.", + "writeComment": "Escreva um comentário...", + "ticketCommentAdded": "Comentário adicionado com sucesso!", + "ticketCommentFailed": "Falha ao adicionar o comentário.", + "ticketCommentEmpty": "Por favor, escreva um comentário antes de enviar.", + "ticketAttachmentUploaded": "Anexo carregado com sucesso!", + "ticketAttachmentFailed": "Falha ao carregar o anexo.", + "ticketAttachmentEmpty": "Por favor, selecione um arquivo para enviar.", + "ticketFetchError": "Falha ao carregar o ticket.", + "ticketNotFound": "Ticket não encontrado.", + "addAttachmentFileSize": "O arquivo deve ser menor que 5MB!", + "goBack": "Voltar", + "noDescription": "Nenhuma descrição disponível.", + "createTicket": "Criar um novo Ticket de Suporte", + "createTicketTitlePlaceholder": "Digite o Título (máx. 150 caracteres)", + "createTicketDescriptionTitle": "Descreva seu problema - quanto mais detalhes, melhor:", + "createTicketDescriptionPlaceholder": "Descreva o problema em detalhes, incluindo: 1) Passos para reproduzir o problema, 2) Comportamento esperado versus comportamento real, 3) Trechos de código, se aplicável, 4) Componentes específicos, APIs ou configurações afetadas", + "createTicketSubmit": "Enviar Ticket", + "createTicketInfoText": "Quando seu Ticket for criado, você poderá adicionar Capturas de Tela e Comentários na seção 'Detalhes'.", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Posição dos pontos de navegação", + "autoPlay": "Reprodução automática", + "showDots": "Mostrar pontos de navegação", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Nome ou URL do Pacote npm Inválido.", + "pluginExisted": "Este plugin npm já existe", + "compNotFound": "Componente {compName} não encontrado.", + "addPluginModalTitle": "Adicionar Plugin de um Repositório npm", + "pluginNameLabel": "URL ou Nome do Pacote npm", + "noCompText": "Sem componentes.", + "compsLoading": "Carregando...", + "removePluginBtnText": "Remover", + "addPluginBtnText": "Adicionar Plugin npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "O Valor Padrão do Botão de Alternância, Por Exemplo: Falso", + "trueDefaultText": "Ocultar", + "falseDefaultText": "Mostrar", + "trueLabel": "Texto para Verdadeiro", + "falseLabel": "Texto para Falso", + "trueIconLabel": "Ícone para Verdadeiro", + "falseIconLabel": "Ícone para Falso", + "iconPosition": "Posição do Ícone", + "showText": "Mostrar Texto", + "alignment": "Alinhamento", + "showBorder": "Mostrar Borda", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", + "demoText": "Lowcoder | Crie aplicativos de software para sua empresa e seus clientes com experiência mínima em codificação. Lowcoder é a melhor alternativa ao Retool, Appsmith ou Tooljet.", + "submit": "Enviar", + "style": "Estilo", + "danger": "Perigo", + "warning": "Aviso", + "success": "Sucesso", + "menu": "Menu", + "link": "Ligação a", + "customAppearance": "Aparência Personalizada", + "search": "Buscar", + "pleaseInputNumber": "Por favor, insira um número", + "mostValue": "Valor Máximo", + "maxRating": "Classificação Máxima", + "notSelect": "Não Selecionado", + "halfSelect": "Seleção Parcial", + "pleaseSelect": "Por favor, selecione", + "title": "Título", + "content": "Conteúdo", + "componentNotFound": "Componente não encontrado", + "example": "Exemplos", + "defaultMethodDesc": "Defina o valor da propriedade {name}", + "propertyUsage": "Você pode ler informações relacionadas ao componente acessando as propriedades do componente pelo nome do componente em qualquer lugar em que possa escrever JavaScript.", + "property": "Propriedades", + "propertyName": "Nome da Propriedade", + "propertyType": "Tipo", + "propertyDesc": "Descrição", + "event": "Eventos", + "eventName": "Nome do Evento", + "eventDesc": "Descrição", + "mehtod": "Métodos", + "methodUsage": "Você tem a capacidade de interagir com os componentes por meio de seus respectivos métodos, que podem ser acessados por seus nomes designados em qualquer segmento onde o JavaScript é utilizado. Além disso, esses componentes podem ser ativados por meio da ação 'Controlar Componente', que é acionada em resposta a eventos específicos.", + "methodName": "Nome do Método", + "methodDesc": "Descrição", + "showBorder": "Mostrar Borda", + "haveTry": "Experimente você mesmo", + "settings": "Configurações", + "settingValues": "Valor da Configuração", + "defaultValue": "Valor Padrão", + "time": "Tempo", + "date": "Data", + "noValue": "Nenhum", + "xAxisType": "Tipo do Eixo X", + "hAlignType": "Alinhamento Horizontal", + "leftLeftAlign": "Alinhamento à Esquerda-Esquerda", + "leftRightAlign": "Alinhamento à Esquerda-Direita", + "topLeftAlign": "Alinhamento Superior-Esquerdo", + "topRightAlign": "Alinhamento Superior-Direito", + "validation": "Validação", + "required": "Obrigatório", + "defaultStartDateValue": "Data de Início Padrão", + "defaultEndDateValue": "Data de Fim Padrão", + "basicUsage": "Uso Básico", + "basicDemoDescription": "Os seguintes exemplos mostram o uso básico do componente.", + "noDefaultValue": "Sem Valor Padrão", + "forbid": "Proibido", + "placeholder": "Marcador de Posição", + "pleaseInputPassword": "Por favor, insira uma senha", + "password": "Senha", + "textAlign": "Alinhamento do Texto", + "length": "Comprimento", + "top": "Topo", + "pleaseInputName": "Por favor, insira seu nome", + "userName": "Nome", + "fixed": "Fixo", + "responsive": "Responsivo", + "workCount": "Contagem de Palavras", + "cascaderOptions": "Opções de Cascata", + "pleaseSelectCity": "Por favor, selecione uma cidade", + "advanced": "Avançado", + "showClearIcon": "Mostrar Ícone Limpar", + /* eslint-disable only-ascii/only-ascii */ + "appleOptionLabel": "🍎 Maçã", + "waterMelonOptionLabel": "🍉 Melancia", + "berryOptionLabel": "🍓 Morango", + "lemonOptionLabel": "🍋 Limão", + "coconutOptionLabel": "🥥 Coco", + /* eslint-enable only-ascii/only-ascii */ + "likedFruits": "Favoritos", + "option": "Opção", + "singleFileUpload": "Upload de Arquivo Único", + "multiFileUpload": "Upload de Múltiplos Arquivos", + "folderUpload": "Upload de Pasta", + "multiFile": "Múltiplos Arquivos", + "folder": "Pasta", + "open": "Abrir", + "favoriteFruits": "Frutas Favoritas", + "pleaseSelectOneFruit": "Selecione uma Fruta", + "notComplete": "Não Completo", + "complete": "Completo", + "echart": "Gráfico eletrónico", + "lineChart": "Gráfico de Linha", + "basicLineChart": "Gráfico de Linha Básico", + "lineChartType": "Tipo de Gráfico de Linha", + "stackLineChart": "Linha Empilhada", + "areaLineChart": "Linha de Área", + "scatterChart": "Gráfico de Dispersão", + "scatterShape": "Forma de Dispersão", + "scatterShapeCircle": "Círculo", + "scatterShapeRect": "Retângulo", + "scatterShapeTri": "Triângulo", + "scatterShapeDiamond": "Diamante", + "scatterShapePin": "Alfinete", + "scatterShapeArrow": "Seta", + "pieChart": "Gráfico de Pizza", + "basicPieChart": "Gráfico de Pizza Básico", + "pieChatType": "Tipo de Gráfico de Pizza", + "pieChartTypeCircle": "Gráfico de Donut", + "pieChartTypeRose": "Gráfico de Rosa", + "titleAlign": "Posição do Título", + "color": "Cor", + "dashed": "Tracejado", + "imADivider": "Sou uma Linha de Divisão", + "tableSize": "Tamanho da Tabela", + "subMenuItem": "SubMenu {num}", + "menuItem": "Menu {num}", + "labelText": "Rótulo", + "labelPosition": "Posição do Rótulo", + "labelAlign": "Alinhamento do Rótulo", + "optionsOptionType": "Método de Configuração", + "styleBackgroundColor": "Cor de Fundo", + "styleBorderColor": "Cor da Borda", + "styleColor": "Cor da Fonte", + "selectionMode": "Modo de Seleção de Linha", + "paginationSetting": "Configuração de Paginação", + "paginationShowSizeChanger": "Suportar Usuários para Modificar o Número de Entradas por Página", + "paginationShowSizeChangerButton": "Mostrar Botão de Modificação de Tamanho", + "paginationShowQuickJumper": "Mostrar Pulo Rápido", + "paginationHideOnSinglePage": "Ocultar Quando Há Apenas uma Página", + "paginationPageSizeOptions": "Tamanho da Página", + "chartConfigCompType": "Tipo de Componente de Configuração de Gráfico", + "xConfigType": "Tipo de Eixo X", + "loading": "Carregando", + "disabled": "Desabilitado", + "minLength": "Comprimento Mínimo", + "maxLength": "Comprimento Máximo", + "showCount": "Mostrar Contagem de Palavras", + "autoHeight": "Altura Automática", + "thousandsSeparator": "Separador de Milhares", + "precision": "Casas Decimais", + "value": "Valor Padrão", + "formatter": "Formato", + "min": "Valor Mínimo", + "max": "Valor Máximo", + "step": "Tamanho do Passo", + "start": "Hora de Início", + "end": "Hora de Término", + "allowHalf": "Permitir Meia Seleção", + "filetype": "Tipo de Arquivo", + "showUploadList": "Mostrar Lista de Upload", + "uploadType": "Tipo de Upload", + "allowClear": "Mostrar Ícone de Limpar", + "minSize": "Tamanho Mínimo do Arquivo", + "maxSize": "Tamanho Máximo do Arquivo", + "maxFiles": "Número Máximo de Arquivos Enviados", + "format": "Formato", + "minDate": "Data Mínima", + "maxDate": "Data Máxima", + "minTime": "Tempo Mínimo", + "maxTime": "Tempo Máximo", + "text": "Texto", + "type": "Tipo", + "hideHeader": "Ocultar Cabeçalho", + "hideBordered": "Ocultar Borda", + "src": "URL da Imagem", + "showInfo": "Exibir Valor", + "mode": "Modo", + "onlyMenu": "Apenas Menu", + "horizontalAlignment": "Alinhamento Horizontal", + "row": "Linha", + "column": "Coluna", + "leftAlign": "Alinhamento à Esquerda", + "rightAlign": "Alinhamento à Direita", + "percent": "Porcentagem", + "fixedHeight": "Altura Fixa", + "auto": "Adaptativo", + "directory": "Pasta", + "multiple": "Múltiplos Arquivos", + "singleFile": "Arquivo Único", + "manual": "Manual", + "default": "Padrão", + "small": "Pequeno", + "middle": "Médio", + "large": "Grande", + "single": "Único", + "multi": "Múltiplo", + "close": "Fechar", + "ui": "Modo de UI", + "line": "Gráfico de Linha", + "scatter": "Gráfico de Dispersão", + "pie": "Gráfico de Pizza", + "basicLine": "Gráfico de Linha Básico", + "stackedLine": "Gráfico de Linha Empilhada", + "areaLine": "Mapa de Área", + "basicPie": "Gráfico de Pizza Básico", + "doughnutPie": "Gráfico de Donut", + "rosePie": "Gráfico de Rosa", + "category": "Eixo de Categoria", + "circle": "Círculo", + "rect": "Retângulo", + "triangle": "Triângulo", + "diamond": "Diamante", + "pin": "Alfinete", + "arrow": "Seta", + "left": "Esquerda", + "right": "Direita", + "center": "Centro", + "bottom": "Inferior", + "justify": "Justificar Ambos os Extremos", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Estado Atual dos Dados", + "preview": "Visualizar", + "property": "Propriedades", + "console": "Console de Script Visual", + "executeMethods": "Executar Métodos", + "noMethods": "Sem Métodos.", + "methodParams": "Parâmetros do Método", + "methodParamsHelp": "Informe os Parâmetros do Método Usando JSON. Por Exemplo, Você Pode Definir os Parâmetros do setValue Com: [1] ou 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Cor de Fundo do Botão", + "btnText": "Texto do Botão", + "title": "Título", + "selectBackground": "Fundo Selecionado", + }, + "idSource": { + ...en.idSource, + + "title": "Provedor de Autenticação do Usuário", + "form": "Correio eletrónico", + "pay": "Prémio", + "enable": "Habilitar", + "unEnable": "Não Habilitado", + "loginType": "Tipo de Login", + "status": "Estado", + "desc": "Descrição", + "manual": "Agenda de Endereços:", + "syncManual": "Sincronizar Agenda de Endereços", + "syncManualSuccess": "Sincronização Bem-Sucedida", + "enableRegister": "Permitir Registro", + "saveBtn": "Salvar e Habilitar", + "save": "Salvar", + "none": "Nenhum", + "formPlaceholder": "Por favor, informe {label}", + "formSelectPlaceholder": "Por favor, selecione {label}", + "saveSuccess": "Salvo com Sucesso", + "dangerLabel": "Zona de Perigo", + "dangerTip": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Prossiga com Cuidado.", + "disable": "Desabilitar", + "disableSuccess": "Desabilitado com Sucesso", + "encryptedServer": "-------- Criptografado no Lado do Servidor --------", + "disableTip": "Dicas", + "disableContent": "Desabilitar Este Provedor de ID Pode Resultar em Alguns Usuários Não Conseguindo Fazer Login. Você Tem Certeza de Que Deseja Prosseguir?", + "manualTip": "", + "lockTip": "O Conteúdo está Bloqueado. Para Fazer Alterações, Clique no {icon} para Desbloquear.", + "lockModalContent": "Alterar o Campo 'Atributo de ID' Pode Ter Impactos Significativos na Identificação do Usuário. Por Favor, Confirme Que Você Entende as Implicações Dessa Alteração Antes de Prosseguir.", + "payUserTag": "Prémio", + "source": "Fonte", + "sourceName": "Nome do fornecedor de autenticação", + "sourceDescription": "Fornecedor de autenticação Descrição", + "sourceIcon": "Ícone do fornecedor de autenticação", + "sourceCategory": "Categoria do fornecedor de autenticação", + "souceIssuerURI": "URI do emissor do fornecedor de autenticação", + "souceAuthorizationEndpoint": "Ponto final de autorização do fornecedor de autenticação", + "souceTokenEndpoint": "Ponto de extremidade do token do fornecedor de autenticação", + "souceUserInfoEndpoint": "Ponto final da informação do utilizador do fornecedor de autenticação", + "userInfoIntrospection": "Utilizar a introspeção do utilizador OpenID", + "userCanSelectAccounts": "O utilizador pode selecionar a partir de contas", + "sourceCategoryEnterprise": "Identidade empresarial", + "sourceCategoryCloud": "Serviços em nuvem", + "sourceCategorySocial": "Redes sociais", + "sourceCategoryDevelopment": "Desenvolvimento", + "sourceCategoryTools": "Ferramentas e produtividade", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Configurar Visualização de Slot", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "JSON Lottie", + "speed": "Velocidade", + "width": "Largura", + "height": "Altura", + "backgroundColor": "Cor de Fundo", + "animationStart": "Início da Animação", + "valueDesc": "Dados JSON Atuais", + "loop": "Repetir", + "auto": "Automático", + "onHover": "Ao Passar o Mouse", + "singlePlay": "Reprodução Única", + "endlessLoop": "Loop Infinito", + "keepLastFrame": "Manter Último Quadro Exibido", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Cor do Título", + "subTitleColor": "Cor do Subtítulo", + "labelColor": "Cor do Rótulo", + "value": "Dados da Linha do Tempo", + "mode": "Ordem de Exibição", + "left": "Conteúdo à Direita", + "right": "Conteúdo à Esquerda", + "alternate": "Ordem de Conteúdo Alternada", + "modeTooltip": "Defina o Conteúdo para Aparecer à Esquerda/Direita ou Alternadamente em Ambos os Lados da Linha do Tempo", + "reverse": "Eventos Mais Recentes Primeiro", + "pending": "Texto do Nó Pendente", + "pendingDescription": "Quando Definido, um Último Nó com o Texto e um Indicador de Espera Serão Exibidos.", + "defaultPending": "Melhoria Contínua", + "clickTitleEvent": "Clique em Evento de Título", + "clickTitleEventDesc": "Clique em Evento de Título", + "Introduction": "Chaves de Introdução", + "helpTitle": "Título da Linha do Tempo (Obrigatório)", + "helpsubTitle": "Subtítulo da Linha do Tempo", + "helpLabel": "Rótulo da Linha do Tempo, Usado para Exibir Datas", + "helpColor": "Indica a Cor do Nó da Linha do Tempo", + "helpDot": "Renderização de Nós da Linha do Tempo como Ícones Ant Design", + "helpTitleColor": "Controle Individual da Cor do Título do Nó", + "helpSubTitleColor": "Controle Individual da Cor do Subtítulo do Nó", + "helpLabelColor": "Controle Individual da Cor do Ícone do Nó", + "valueDesc": "Dados da Linha do Tempo", + "clickedObjectDesc": "Dados do Item Clicado", + "clickedIndexDesc": "Índice do Item Clicado", + }, + "comment": { + ...en.comment, + + "value": "Dados da Lista de Comentários", + "showSendButton": "Permitir Comentários", + "title": "Título", + "titledDefaultValue": "%d Comentário no Total", + "placeholder": "Shift + Enter para Comentar; Digite @ ou # para Entrada Rápida", + "placeholderDec": "Espaço reservado", + "buttonTextDec": "Título do Botão", + "buttonText": "Comentar", + "mentionList": "Dados da Lista de Menções", + "mentionListDec": "Chave-Palavras-Chave de Menção; Valor-Dados da Lista de Menções", + "userInfo": "Informações do Usuário", + "dateErr": "Erro de Data", + "commentList": "Lista de Comentários", + "deletedItem": "Item Excluído", + "submitedItem": "Item Enviado", + "deleteAble": "Mostrar Botão de Excluir", + "Introduction": "Chaves de Introdução", + "helpUser": "Informações do Usuário (Obrigatório)", + "helpname": "Nome de Usuário (Obrigatório)", + "helpavatar": "URL do Avatar (Alta Prioridade)", + "helpdisplayName": "Nome de Exibição (Baixa Prioridade)", + "helpvalue": "Conteúdo do Comentário", + "helpcreatedAt": "Data de Criação", + }, + "mention": { + ...en.mention, + + "mentionList": "Dados da Lista de Menções", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Valor de Autocompletar", + "checkedValueFrom": "Valor Verificado de", + "ignoreCase": "Ignorar Maiúsculas e Minúsculas na Busca", + "searchLabelOnly": "Buscar Somente no Rótulo", + "searchFirstPY": "Buscar Primeiro Pinyin", + "searchCompletePY": "Buscar Pinyin Completo", + "searchText": "Buscar Texto", + "SectionDataName": "Dados de Autocompletar", + "valueInItems": "Valor nos Itens", + "type": "Tipo", + "antDesign": "AntDesign", + "normal": "Normal", + "selectKey": "Chave", + "selectLable": "Rótulo", + "ComponentType": "Tipo de Componente", + "colorIcon": "Azul", + "grewIcon": "Cinza", + "noneIcon": "Nenhum", + "small": "Pequeno", + "large": "Grande", + "componentSize": "Tamanho do Componente", + "Introduction": "Chaves de Introdução", + "helpLabel": "Rótulo", + "helpValue": "Valor", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Colunas", + "addColumn": "Adicionar coluna", + "columnDefinition": "Definição de coluna", + "rowDefinition": "Definição de linha", + "columnGap": "Diferença de coluna", + "rowGap": "Lacuna de linha", + "atLeastOneColumnError": "O Layout Responsivo Mantém Pelo Menos uma Coluna", + "columnsPerRow": "Colunas por Linha", + "columnsSpacing": "Espaçamento de Colunas (px)", + "horizontal": "Horizontal", + "vertical": "Vertical", + "mobile": "Móvel", + "tablet": "Tablet", + "desktop": "Ambiente de trabalho", + "rowStyle": "Estilo de Linha", + "columnStyle": "Estilo de Coluna", + "minWidth": "Largura Mín.", + "rowBreak": "Quebra de Linha", + "useComponentWidth": "Usar tamanho próprio", + "useComponentWidthDesc": "Use a largura do contêiner em vez da largura do aplicativo", + "matchColumnsHeight": "Corresponder Altura das Colunas", + "rowLayout": "Layout de Linha", + "columnsLayout": "Layout de Colunas", + "columnsDefinitionTooltip": "As colunas podem ser definidas livremente com base nas propriedades das colunas CSS. Por exemplo, \"auto auto\" criará duas colunas com a mesma largura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "As linhas podem ser definidas livremente com base nas propriedades das linhas CSS. Por exemplo, 'auto auto' criará duas linhas com a mesma altura. Leia mais aqui: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Modo", + "modeInline": "Em linha", + "modeVertical": "Vertical", + "modeHorizontal": "Horizontal", + "width": "Largura", + "widthTooltip": "Pixel ou Porcentagem, por exemplo, 520, 60%", + "navStyle": "Estilo do Menu", + "navItemStyle": "Estilo do Item de Menu", + "navBackground": "Imagem de fundo", + "mobileNavVerticalOrientation": "Orientação vertical", + "mobileNavVerticalMaxWidth": "Largura máxima", + "mobileNavBarHeight": "Altura da barra de navegação", + "mobileNavVerticalShowSeparator": "Mostrar separador", + "mobileNavIconSize": "Tamanho do ícone", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Linha de Data Internacional W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Hawaii", + "UTC-09:00": "(UTC-09:00) Alasca", + "UTC-08:00": "(UTC-08:00) Baja CA", + "UTC-07:00": "(UTC-07:00) Hora do Pacífico (EUA)", + "UTC-06:00": "(UTC-06:00) Hora Central (EUA)", + "UTC-05:00": "(UTC-05:00) Hora do Leste (EUA)", + "UTC-04:00": "(UTC-04:00) Hora do Atlântico", + "UTC-03:00": "(UTC-03:00) Buenos Aires", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Cabo Verde", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Berlim, Roma", + "UTC+02:00": "(UTC+02:00) Athens, Bucharest", + "UTC+03:00": "(UTC+03:00) Moscovo", + "UTC+04:00": "(UTC+04:00) Dubai, Muscat", + "UTC+05:00": "(UTC+05:00) Karachi", + "UTC+05:30": "(UTC+05:30) Nova Deli", + "UTC+05:45": "(UTC+05:45) Kathmandu", + "UTC+06:00": "(UTC+06:00) Dhaka", + "UTC+06:30": "(UTC+06:30) Yangon", + "UTC+07:00": "(UTC+07:00) Banguecoque", + "UTC+08:00": "(UTC+08:00) Pequim, HK", + "UTC+09:00": "(UTC+09:00) Tóquio, Seul", + "UTC+09:30": "(UTC+09:30) Adelaide, Darwin", + "UTC+10:00": "(UTC+10:00) Sydney", + "UTC+11:00": "(UTC+11:00) Ilhas Salomão, Nova Caledónia", + "UTC+12:00": "(UTC+12:00) Auckland, Fiji", + "UTC+13:00": "(UTC+13:00) Nuku'alofa, Samoa", + "UserChoice": "Escolha do utilizador", + }, + "tour": { + ...en.tour, + + "section1Title": "Passos", + "section1Subtitle": "Passos", + "tooltipExampleHeader": "Exemple:", + "tooltipSignatureHeader": "Assinatura:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Título", + "placeholder": "Bem-vindo", + "tooltip": "O título do passo. Qualquer HTML é válido aqui.", + }, + "description": { + ...en.tour.options.description, + + "label": "Descrição", + "placeholder": "Bem-vindo ao Lowcoder!", + "tooltip": "O título do passo. Qualquer HTML é válido aqui.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Máscara", + "tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Seta", + "tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Tipo", + "tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal.", + }, + "target": { + ...en.tour.options.target, + + "label": "Componente", + "tooltip": "O componente no qual você deseja colocar a dica ou deixe-o vazio se simplesmente desejar um modal no centro da tela.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI da Imagem de Capa", + "tooltip": "Um URI para uma imagem que você gostaria de exibir com o passo", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Renderização de Indicadores", + "tooltip": "Fornece um indicador personalizado para qual passo você está", + "tooltipValidTypes": "O formato é uma função que aceita dois argumentos, `current` e `total` e retorna um ReactNode", + "tooltipFunctionSignatureHeader": "Assinatura:", + "tooltipFunctionSignature": "(atual: número, total: número) => ReactNode", + "tooltipExampleHeader": "Exemplo:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Desativar Interação", + "tooltip": "Desativa a interação na área destacada.", + }, + "mask": { + ...en.tour.mask, + + "label": "Máscara", + "tooltip": "Se habilitar a máscara, altere o estilo da máscara e a cor de preenchimento passando props personalizadas, o padrão segue a propriedade `mask` do Tour. Pode ser substituído no nível do passo.", + "tooltipValidTypes": "Tipos de entrada válidos: `true`, `false`, vazio, ou um objeto JSON seguindo o Esquema CSSProperties de Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Posição", + "tooltip": "Posição do cartão guia em relação ao elemento de destino. Pode ser substituído no nível do passo.", + "tooltipValidOptions": "Opções válidas", + "tooltipValidOptionsAbove": "Acima do componente:", + "tooltipValidOptionsLeft": "À esquerda do componente:", + "tooltipValidOptionsRight": "À direita do componente:", + "tooltipValidOptionsBelow": "Abaixo do componente:", + "tooltipValidOptionsOnTop": "No topo do componente:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Seta", + "tooltip": "Ativa ou desativa a seta ou move-a para apontar para o centro do componente, se desejado, caso contrário, a seta sempre apontará perto do topo do componente. Pode ser substituído no nível do passo.", + "tooltipFunctionSignature": "boolean | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Tipo", + "tooltip": "O tipo de dica, isso afeta a cor de fundo e a cor do texto. As cores podem ser controladas com a seção de estilo de tour principal. Pode ser substituído no nível do passo.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Como desenvolver um plug-in npm", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Utilizar bibliotecas de terceiros", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + }; -// const jsonString = JSON.stringify(en, null, 2); -// console.log(jsonString); -// If you want to write this to a file, you can use the fs module -// const fs = require('fs'); -// fs.writeFileSync('output.json', jsonString, 'utf8'); diff --git a/translations/locales/readme.md b/translations/locales/readme.md new file mode 100644 index 0000000000..6de86ccc7e --- /dev/null +++ b/translations/locales/readme.md @@ -0,0 +1,133 @@ +# Lowcoder Translation Script + +This script is used to automatically update translation files for Lowcoder using DeepL as translation provider. +It allows you to keep your non-English translation files in sync with the master English translation, and automatically fill any missing keys. + +--- + +## Translation Files Structure + +The translation files follow a very simple ES Module export format. + +**English file (`en.js` — master file):** + +```javascript +export const en = { + "productName": "Lowcoder", + "productDesc": "Create software applications for your company and customers with minimal coding experience. Lowcoder is an excellent alternative to Retool, Appsmith, and Tooljet.", + "create": "Create", + "api": { + "publishSuccess": "Published Successfully", + "recoverFailed": "Recovery Failed", + "needUpdate": "Your current version is outdated. Please upgrade to the latest version." + }, + ... +}; +``` + +**Target language files (`de.js`, `fr.js`, etc):** + +```javascript +export const de = { + ...en, + "productName": "Lowcoder", + "productDesc": "", // missing translation will be auto-filled + "notSupportedBrowser": "Ihr aktueller Browser ist möglicherweise nicht kompatibel...", + "create": "Erstellen", + "api": { + ...en.api, + + "publishSuccess": "Erfolgreich veröffentlicht", + "recoverFailed": "Wiederherstellung fehlgeschlagen", + "needUpdate": "Deine aktuelle Version ist veraltet. Bitte aktualisiere auf die neueste Version.", + }, + ... +}; +``` + +> Missing or empty keys will be automatically translated and filled. + +--- + +## How The Script Works + +* Uses `en.js` as master translation source. +* Loads the target language file (e.g. `de.js`). +* Recursively checks all keys. +* For any missing keys or empty values, uses **DeepL API** to translate from English. +* Safely preserves placeholders (e.g. `{name}`, `{count}`) during translation. +* Saves the updated file as `de-updated.js` (non-destructive overwrite). + +--- + +## Folder Structure + +All translation files and the script should be located inside: + +``` +/translations/locales/ + ├── en.js + ├── de.js + ├── fr.js + └── translate.js +``` + +--- + +## 🚀 Running The Script + +You must execute the script from inside the `/translations/locales/` directory. + +```bash +cd translations/locales +node translate.js <targetLang> <targetFile> <deeplApiKey> +``` + +### Example: + +```bash +node translate.js de ./de.js YOUR_DEEPL_API_KEY +``` + +Where: + +* `de` — The target language code (ISO 639-1, e.g. `de`, `fr`, `es`, `it`, etc.) +* `./de.js` — Path to the existing target translation file. +* `YOUR_DEEPL_API_KEY` — Your personal DeepL API key. + +--- + +## DeepL API Key + +You need a valid DeepL API Key to perform automatic translations. + +* You can get a free developer account at [https://www.deepl.com/pro-api](https://www.deepl.com/pro-api) +* Store your key securely. + +--- + +## Notes + +* The script preserves all existing translations. +* Only missing or empty fields will be translated. +* Placeholders inside curly braces (e.g. `{count}`, `{userName}`) are automatically detected and protected. +* Output will be saved into a new file `de-updated.js` to avoid overwriting your existing file directly. + +--- + +## Typical Workflow + +1️⃣ Start by maintaining your master file `en.js` with new keys. +2️⃣ Update (or create) your target language file (e.g. `de.js`), even if empty. +3️⃣ Run the script to automatically fill in missing keys. + +```bash +node translate.js de ./de.js YOUR_DEEPL_API_KEY +``` + +4️⃣ Review and manually adjust translations if needed. +5️⃣ Rename or replace `de-updated.js` into `de.js` after verification. + +--- + +Happy Translating! 🌍 diff --git a/translations/locales/ru-updated.js b/translations/locales/ru-updated.js new file mode 100644 index 0000000000..7c8d861a3a --- /dev/null +++ b/translations/locales/ru-updated.js @@ -0,0 +1,4844 @@ + +import { en } from "./en.js"; +export const ru = { + ...en, + + "productName": "Lowcoder", + "productDesc": "Создавайте программные приложения для своей компании и клиентов с минимальным опытом кодирования. Lowcoder - отличная альтернатива Retool, Appsmith и Tooljet.", + "notSupportedBrowser": "Ваш текущий браузер может иметь проблемы с совместимостью. Для оптимальной работы используйте последнюю версию браузера Chrome.", + "create": "Создать", + "move": "Переместить", + "addItem": "Добавить", + "newItem": "Новый", + "copy": "Копировать", + "rename": "Переименовать", + "delete": "Удалить", + "deletePermanently": "Удалить навсегда", + "remove": "Удалить", + "recover": "Восстановить", + "edit": "Редактировать", + "view": "Посмотреть", + "value": "Значение", + "data": "Данные", + "information": "Информация", + "success": "Успех", + "warning": "Внимание", + "error": "Ошибка", + "reference": "Ссылка", + "text": "Текст", + "basic": "Основные", + "label": "Этикетка", + "layout": "Макет", + "color": "Цвет", + "form": "Форма", + "menu": "Меню", + "menuItem": "Пункт меню", + "ok": "OK", + "cancel": "Отмена", + "finish": "Отделка", + "reset": "Сброс", + "icon": "Икона", + "code": "Код", + "title": "Название", + "emptyContent": "Пустое содержимое", + "more": "Подробнее", + "search": "Поиск", + "back": "Назад", + "accessControl": "Контроль доступа", + "copySuccess": "Успешно скопировано", + "copyError": "Ошибка копирования", + "api": { + ...en.api, + + "publishSuccess": "Успешная публикация", + "recoverFailed": "Восстановление не удалось", + "needUpdate": "Ваша текущая версия устарела. Пожалуйста, обновите ее до последней версии.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "Текущий редактор кода не поддерживает автоформатирование.", + "fold": "Сложите", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "Установить свойство: {property}", + "clearDesc": "Очистить имущество: {property}", + "resetDesc": "Сбросить значение свойства: {property} в значение по умолчанию", + }, + "method": { + ...en.method, + + "focus": "Установите фокус", + "focusOptions": "Параметры фокуса. См. HTMLElement.focus()", + "blur": "Убрать фокус", + "click": "Нажмите", + "select": "Выделить весь текст", + "setSelectionRange": "Установка начальной и конечной позиций выделения текста", + "selectionStart": "Индекс первого выбранного символа на основе 0", + "selectionEnd": "0-базированный индекс символа после последнего выбранного символа", + "setRangeText": "Заменить диапазон текста", + "replacement": "Строка для вставки", + "replaceStart": "Индекс первого заменяемого символа, основанный на 0", + "replaceEnd": "0-базированный индекс символа после последнего символа для замены", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "Не удалось загрузить компонент. Пожалуйста, проверьте конфигурацию.", + "clickToReload": "Нажмите, чтобы перезагрузить", + "errorMsg": "Ошибка:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "Поддерживаются только типы изображений {types}.", + "exceedSizeError": "Размер изображения не должен превышать {size}", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "Не поддерживается", + "selectAtLeastOneComponent": "Пожалуйста, выберите хотя бы один компонент", + "selectCompFirst": "Выбор компонентов перед копированием", + "noContainerSelected": "[Ошибка] Не выбран контейнер", + "deleteCompsSuccess": "Удаление прошло успешно. Нажмите {undoKey}, чтобы отменить удаление.", + "deleteCompsTitle": "Удалить компоненты", + "deleteCompsBody": "Вы уверены, что хотите удалить {compNum} выбранных компонентов?", + "cutCompsSuccess": "Вырезание прошло успешно. Нажмите {pasteKey}, чтобы вставить, или {undoKey}, чтобы отменить.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "Запросы данных в вашем приложении", + "globals": "Глобальные переменные данных", + "propTipsArr": "{num} Предметы", + "propTips": "{num} Ключи", + "propTipArr": "{num} Артикул", + "propTip": "{num} Ключ", + "stateTab": "Государство", + "settingsTab": "Настройки", + "toolbarTitle": "Индивидуализация", + "toolbarPreload": "Сценарии и стили", + "components": "Активные компоненты", + "modals": "модалы в приложении", + "expandTip": "Нажмите, чтобы показать данные {component}", + "collapseTip": "Нажмите, чтобы скрыть данные {component}", + "layers": "Слои", + "activatelayers": "Используйте динамические слои", + "selectedComponents": "Избранные компоненты...", + "displayComponents": "управление Дисплей", + "lockComponents": "управление Положение", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "Запросы данных", + "run": "Запускайте", + "noSelectedQuery": "Запрос не выбран", + "metaData": "Метаданные источника данных", + "noMetadata": "Метаданные отсутствуют", + "metaSearchPlaceholder": "Поиск метаданных", + "allData": "Все столы", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "Свойства", + "noSelectedComps": "Компоненты не выбраны. Щелкните компонент, чтобы просмотреть его свойства.", + "createTab": "Вставка", + "searchPlaceHolder": "Поиск компонентов или модулей", + "uiComponentTab": "Компоненты", + "extensionTab": "Удлинители", + "modulesTab": "Модули", + "moduleListTitle": "Модули", + "pluginListTitle": "Плагины", + "emptyModules": "Модули - это многократно используемые приложения Mikro-Apps. Вы можете внедрить их в свое приложение.", + "searchNotFound": "Не можете найти нужный компонент?", + "emptyPlugins": "Плагины еще не добавлены. Добавьте плагины npm для улучшения вашего проекта.", + "contactUs": "Свяжитесь с нами", + "issueHere": "здесь.", + "folderListTitle": "Папки", + }, + "prop": { + ...en.prop, + + "expand": "Развернуть", + "columns": "Колонны", + "videokey": "Видеоключ", + "rowSelection": "Выбор строки", + "toolbar": "Панель инструментов", + "pagination": "Пагинация", + "logo": "Логотип", + "style": "Стиль", + "inputs": "Входы", + "meta": "Метаданные", + "data": "Данные", + "hide": "Скрыть", + "loading": "Загрузка", + "disabled": "Инвалид", + "placeholder": "Место для размещения", + "showClear": "Показать кнопку Очистить", + "showSearch": "С возможностью поиска", + "defaultValue": "Значение по умолчанию", + "required": "Обязательное поле", + "showEmptyValidation": "Показать проверку при опустошении/перезагрузке", + "readOnly": "Только чтение", + "readOnlyTooltip": "Компоненты, доступные только для чтения, отображаются нормально, но не могут быть изменены.", + "minimum": "Минимум", + "maximum": "Максимальный", + "regex": "Regex", + "minLength": "Минимальная длина", + "maxLength": "Максимальная длина", + "height": "Высота", + "width": "Ширина", + "selectApp": "Выберите приложение", + "showCount": "Показать счет", + "tabIndex": "Вкладка \"Индекс", + "textType": "Тип текста", + "customRule": "Пользовательское правило", + "customRuleTooltip": "Непустая строка указывает на ошибку", + "manual": "Руководство", + "map": "Карта", + "json": "JSON", + "use12Hours": "Используйте 12-часовой формат", + "hourStep": "Часовой шаг", + "minuteStep": "Минутный шаг", + "secondStep": "Второй шаг", + "minDate": "Минимальная дата", + "maxDate": "Максимальная дата", + "minTime": "Минимальное время", + "maxTime": "Максимальное время", + "type": "Тип", + "showLabel": "Показать ярлык", + "showHeader": "Показать заголовок", + "showBody": "Показать тело", + "showSider": "Шоу Сайдер", + "innerSider": "Внутренние страницы", + "showFooter": "Показать нижний колонтитул", + "maskClosable": "Нажмите \"Снаружи\", чтобы закрыть", + "escapeClose": "Включить закрытие при нажатии клавиши Escape", + "toggleClose": "Включить кнопку закрытия", + "showMask": "Показать маску", + "textOverflow": "Переполнение текста", + "scrollbar": "Показать полосы прокрутки", + "showVerticalScrollbar": "Показать вертикальную полосу прокрутки", + "showHorizontalScrollbar": "Показать горизонтальную полосу прокрутки", + "siderScrollbar": "Показать полосы прокрутки в сайдере", + "mainScrollbar": "Показать полосы прокрутки в основном содержимом", + "modalScrollbar": "Показать полосы прокрутки в модале", + "drawerScrollbar": "Показать полосы прокрутки в ящике", + "textAreaScrollBar": "Показать полосы прокрутки в текстовой области", + "siderRight": "Сидящий справа", + "siderWidth": "Ширина сидера", + "siderWidthTooltip": "Ширина сайдера поддерживает проценты (%) и пиксели (px).", + "siderCollapsedWidth": "Развернутая ширина Sider", + "siderCollapsedWidthTooltip": "Ширина свернутого сидера поддерживает проценты (%) и пиксели (px).", + "siderCollapsible": "Sider Collapsible", + "siderCollapsed": "Сайдер рухнул", + "contentScrollbar": "Показать полосы прокрутки в содержимом", + "appID": "App Id", + "showApp": "Покажите приложение в области содержания", + "showAppTooltip": "Вы можете отображать целые приложения в области содержимого. Обратите внимание, что для модулей мы не поддерживаем входы, выходы, события и методы.", + "baseURL": "Базовый URL-адрес API", + "horizontal": "Горизонтальный", + "minHorizontalWidth": "Минимальная горизонтальная ширина", + "component": "Собственные идентификаторы компонентов", + "className": "Имя класса CSS", + "dataTestId": "Индивидуальный идентификатор", + "preventOverwriting": "Предотвращение перезаписи стилей", + "color": "Цвет", + "horizontalGridCells": "Ячейки горизонтальной сетки", + "verticalGridCells": "Ячейки вертикальной сетки", + "timeZone": "TimeZone", + "pickerMode": "Режим подборщика", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "Автомобиль", + "fixed": "Исправлено", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "Наведение мыши", + "wrap": "Обертывание", + }, + "labelProp": { + ...en.labelProp, + + "text": "Этикетка", + "tooltip": "Всплывающая подсказка", + "position": "Позиция", + "collapse": "Свернуть", + "left": "Слева", + "right": "Справа", + "top": "Топ", + "align": "Выравнивание", + "width": "Ширина", + "widthTooltip": "Ширина этикетки поддерживает проценты (%) и пиксели (px).", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "Обработчики событий", + "emptyEventHandlers": "Нет обработчиков событий", + "incomplete": "Неполный выбор", + "inlineEventTitle": "На {eventName}", + "event": "Событие", + "action": "Действие", + "noSelect": "Нет выбора", + "runQuery": "Запуск запроса данных", + "selectQuery": "Выберите запрос данных", + "controlComp": "Управление компонентом", + "runScript": "Выполнить JavaScript", + "runScriptPlaceHolder": "Введите код здесь", + "component": "Компонент", + "method": "Метод", + "setTempState": "Установите значение временного состояния", + "state": "Государство", + "triggerModuleEvent": "Запуск события модуля", + "moduleEvent": "Модуль Событие", + "goToApp": "Перейти к другому приложению", + "queryParams": "Параметры запроса", + "queryVariables": "Переменные запроса", + "hashParams": "Параметры хэша", + "showNotification": "Показать уведомление", + "text": "Текст", + "level": "Уровень", + "duration": "Продолжительность", + "notifyDurationTooltip": "Единицей времени может быть 's' (секунда, по умолчанию) или 'ms' (миллисекунда). Максимальная продолжительность - {max} секунд", + "goToURL": "Открыть URL-адрес", + "openInNewTab": "Открыть в новой вкладке", + "copyToClipboard": "Копирование значения в буфер обмена", + "copyToClipboardValue": "Значение", + "export": "Экспортные данные", + "exportNoFileType": "Без выбора (необязательно)", + "fileName": "Имя файла", + "fileNameTooltip": "Включите расширение, чтобы указать тип файла, например, 'image.png'.", + "fileType": "Тип файла", + "condition": "Бегите только тогда, когда...", + "conditionTooltip": "Запускайте обработчик события только тогда, когда это условие оценивается как 'true'", + "debounce": "Отсрочка для", + "throttle": "Дроссель для", + "slowdownTooltip": "Используйте дебафф или дроссель для управления частотой срабатывания действий. Единицей времени может быть 'ms' (миллисекунда, по умолчанию) или 's' (секунда).", + "notHandledError": "Не обрабатывается", + "currentApp": "Текущий", + "inputEventHandlers": "Обработчики событий ввода", + "inputEventHandlersDesc": "Обработчики событий, связанных с пользовательским вводом", + "buttonEventHandlers": "Обработчики событий кнопок", + "buttonEventHandlersDesc": "Обработчики событий, связанных с нажатием кнопок", + "changeEventHandlers": "Изменение обработчиков событий", + "changeEventHandlersDesc": "Обработчики событий, связанных с изменением значений", + "editedEventHandlers": "Обработчики событий редактирования", + "editedEventHandlersDesc": "Обработчики событий, связанных с редактированием состояния элементов", + "clickEventHandlers": "Обработчики событий щелчка мыши", + "clickEventHandlersDesc": "Обработчики событий, связанные с кликами", + "keyDownEventHandlers": "Обработчики событий нажатия клавиш", + "keyDownEventHandlersDesc": "Обработчики событий, связанные с событиями нажатия клавиш", + "checkboxEventHandlers": "Обработчики событий флажка", + "checkboxEventHandlersDesc": "Обработчики событий, связанные с изменением флажка", + "dragEventHandlers": "Обработчики событий перетаскивания", + "dragEventHandlersDesc": "Обработчики событий, связанные с событиями перетаскивания", + "elementEventHandlers": "Обработчики событий элементов", + "elementEventHandlersDesc": "Обработчики событий, связанные с общими событиями элементов данных", + "mediaEventHandlers": "Обработчики медиасобытий", + "mediaEventHandlersDesc": "Обработчики событий, связанных с медиасобытиями", + "scannerEventHandlers": "Обработчики событий сканера", + "scannerEventHandlersDesc": "Обработчики событий, связанные с событиями сканера", + "chartEventHandlers": "Обработчики событий диаграммы", + "chartEventHandlersDesc": "Обработчики событий, связанные с событиями диаграммы", + "geoMapEventHandlers": "Обработчики событий геокарты", + "geoMapEventHandlersDesc": "Обработчики событий, связанные с событиями геокарты", + "stepEventHandlers": "Обработчики событий шагов", + "stepEventHandlersDesc": "Обработчики событий, связанные с событиями пользовательского интерфейса Step", + "shareEventHandlers": "Общие обработчики событий", + "shareEventHandlersDesc": "Обработчики событий, связанные с событиями совместного доступа", + "selectEventHandlers": "Выберите обработчики событий", + "selectEventHandlersDesc": "Обработчики событий, связанные с событиями выбора", + "meetingEventHandlers": "Обработчики событий встречи", + "meetingEventHandlersDesc": "Обработчики событий, связанные с событиями встреч", + "collaborationEventHandlers": "Обработчики событий совместной работы", + "collaborationEventHandlersDesc": "Обработчики событий, связанные с событиями совместной работы", + "set": "Установите", + "clear": "Очистить", + "reset": "Сброс", + "messageType": "Тип сообщения", + "placement": "Размещение", + "description": "Описание", + }, + "event": { + ...en.event, + + "submit": "Отправить", + "submitDesc": "Триггеры при отправке", + "change": "Изменить", + "changeDesc": "Триггеры при изменении значений", + "focus": "Фокус", + "focusDesc": "Триггеры на фокусе", + "blur": "Пятно", + "blurDesc": "Триггеры на размытии", + "click": "Нажмите", + "clickDesc": "Триггеры при нажатии", + "doubleClick": "Двойной щелчок", + "doubleClickDesc": "Триггеры при двойном щелчке", + "rightClick": "Щелкните правой кнопкой мыши", + "rightClickDesc": "Триггеры при нажатии правой кнопки мыши", + "keyDown": "Ключ вниз", + "keyDownDesc": "Триггеры при нажатии клавиш", + "select": "Выберите", + "selectDesc": "Триггеры на выбор", + "checked": "Проверено", + "checkedDesc": "Триггеры при установке флажка", + "unchecked": "Непроверенные", + "uncheckedDesc": "Триггеры при снятии флажка", + "drag": "Drag", + "dragDesc": "Триггеры при перетаскивании", + "drop": "Капля", + "dropDesc": "Триггеры при падении", + "open": "Открыть", + "openDesc": "Триггеры при открытии", + "mute": "Отключить звук", + "muteDesc": "Триггеры при отключении микрофона", + "unmute": "Отключить", + "unmuteDesc": "Триггеры при отключении микрофона", + "showCamera": "Показать камеру", + "showCameraDesc": "Срабатывает при включении функции \"Показать камеру\".", + "hideCamera": "Спрятать камеру", + "hideCameraDesc": "Срабатывает при выключении функции \"Показать камеру\".", + "shareScreen": "Экран акций", + "shareScreenDesc": "Триггеры на экране обмена", + "shareScreenEnd": "Поделиться \"Экранный конец", + "shareScreenEndDesc": "Триггеры на конце экрана обмена", + "shareControl": "Контроль акций", + "shareControlDesc": "Триггеры по контролю над акциями", + "shareControlEnd": "Контроль акций Конец", + "shareControlEndDesc": "Триггеры на конце управления акциями", + "shareContent": "Поделиться содержимым", + "shareContentDesc": "Триггеры при совместном использовании контента", + "shareContentEnd": "Поделиться контентом Конец", + "shareContentEndDesc": "Триггеры на конце общего контента", + "stopShare": "Остановить акцию", + "stopShareDesc": "Триггеры при остановке акции", + "meetingStart": "Начало встречи", + "meetingStartDesc": "Триггеры при начале совещания", + "meetingEnd": "Окончание встречи", + "meetingEndDesc": "Триггеры на стороне встречи", + "meetingJoin": "Встреча Присоединяйтесь", + "meetingJoinDesc": "Триггеры при присоединении к собранию", + "meetingLeave": "Отпуск на совещании", + "meetingLeaveDesc": "Триггеры на время отпуска", + "play": "Играть", + "playDesc": "Триггеры в игре", + "pause": "Пауза", + "pauseDesc": "Триггеры на паузе", + "ended": "Окончание", + "endedDesc": "Триггеры на Ended", + "step": "Шаг", + "stepDesc": "Триггеры на шаге", + "next": "Следующий", + "nextDesc": "Триггеры на следующей", + "finished": "Готовые", + "finishedDesc": "Триггеры на готовом", + "saved": "Сохранено", + "savedDesc": "Триггеры при сохранении элемента", + "edited": "Отредактировано", + "editedDesc": "Триггеры при редактировании элемента", + "geoMapMove": "Перемещение по географической карте", + "geoMapMoveDesc": "Триггеры при перемещении пользователем геокарты", + "geoMapZoom": "Масштаб геокарты", + "geoMapZoomDesc": "Триггеры при изменении масштаба геокарты", + "geoMapSelect": "Выбор географической карты", + "geoMapSelectDesc": "Триггеры при выборе пользователем элемента на геокарте", + "scannerSuccess": "Успех сканера", + "scannerSuccessDesc": "Срабатывает при успешном сканировании сканером", + "scannerError": "Ошибка сканера", + "scannerErrorDesc": "Триггеры, когда сканер не может выполнить сканирование", + "chartZoom": "Масштаб диаграммы", + "chartZoomDesc": "Триггеры при масштабировании графика", + "chartHover": "Наведение диаграммы", + "chartHoverDesc": "Триггеры при наведении диаграммы", + "chartSelect": "Выбор диаграммы", + "chartSelectDesc": "Триггеры при выборе графика", + "chartDeselect": "Отмена выбора диаграммы", + "chartDeselectDesc": "Триггеры на графике Отмена выбора", + "close": "Закрыть", + "closeDesc": "Триггеры при закрытии", + "parse": "Разбор", + "parseDesc": "Триггеры при разборе", + "success": "Успех", + "successDesc": "Триггеры успеха", + "delete": "Удалить", + "deleteDesc": "Триггеры при удалении", + "mention": "Упоминание", + "mentionDesc": "Триггеры при упоминании", + "search": "Поиск", + "searchDesc": "Триггеры в поиске", + "selectedChange": "Изменение выбора", + "selectedChangeDesc": "Триггеры при измененном выборе", + "clickExtra": "Нажмите на Действие", + "clickExtraDesc": "Триггеры при щелчке на дополнительном элементе", + "start": "Начало", + "startDesc": "Триггеры при запуске", + "resume": "Резюме", + "resumeDesc": "Триггеры в резюме", + "countdown": "Обратный отсчет", + "countdownDesc": "Триггеры по окончании обратного отсчета", + "reset": "Сброс заканчивается", + "resetDesc": "Срабатывания по таймеру сброса", + "refresh": "Обновить", + "refreshDesc": "Триггеры при обновлении", + "sortChange": "Изменение сортировки", + "sortChangeDesc": "Триггеры при изменении сортировки", + }, + "style": { + ...en.style, + + "boxShadowColor": "Цвет теней", + "boxShadow": "Тень от коробки", + "opacity": "Непрозрачность", + "animation": "Анимация", + "animationIterationCount": "Количество итераций анимации", + "animationDelay": "Задержка анимации", + "animationDuration": "Продолжительность анимации", + "resetTooltip": "Сброс стилей. Очистите поле ввода, чтобы сбросить индивидуальный стиль.", + "textColor": "Цвет текста", + "contrastText": "Контрастный цвет текста", + "generated": "Создано", + "customize": "Настроить", + "staticText": "Статический текст", + "accent": "Акцент", + "validate": "Сообщение о проверке", + "border": "Цвет границы", + "borderRadius": "Радиус границы", + "borderWidth": "Ширина границы", + "borderStyle": "Пограничный стиль", + "background": "Цвет фона", + "headerBackground": "Цвет фона заголовка", + "siderBackground": "Цвет фона сидера", + "footerBackground": "Цвет фона нижнего колонтитула", + "fill": "Наполнение", + "track": "Трек", + "links": "Ссылки", + "thumb": "Большой палец", + "thumbBorder": "Граница большого пальца", + "checked": "Проверено", + "unchecked": "Непроверенные", + "handle": "Ручка", + "tags": "Теги", + "tagsText": "Теги Текст", + "multiIcon": "Значок мультиселектора", + "tabText": "Вкладка Текст", + "tabAccent": "Вкладка Акцент", + "checkedBackground": "Проверено Цвет фона", + "uncheckedBackground": "Цвет фона не отмечен", + "uncheckedBorder": "Цвет границы не отмечен", + "indicatorBackground": "Цвет фона индикатора", + "tableCellText": "Текст для сотового телефона", + "selectedRowBackground": "Цвет фона выделенной строки", + "hoverRowBackground": "Цвет фона наведенной строки", + "hoverBackground": "Цвет фона при наведении", + "textTransform": "Преобразование текста", + "textDecoration": "Украшение текста", + "alternateRowBackground": "Цвет фона альтернативной строки", + "tableHeaderBackground": "Цвет фона заголовка", + "tableHeaderText": "Текст заголовка", + "toolbarBackground": "Цвет фона панели инструментов", + "toolbarText": "Текст панели инструментов", + "pen": "Ручка", + "footerIcon": "Значок нижнего колонтитула", + "tips": "Советы", + "margin": "Маржа", + "padding": "Набивка", + "marginLeft": "Левое поле", + "marginRight": "Маржа справа", + "marginTop": "Маргинальный верх", + "marginBottom": "Маржа нижняя", + "containerHeaderPadding": "Подшивка заголовков", + "containerFooterPadding": "Нижний колонтитул", + "containerSiderPadding": "Набивка сидера", + "containerBodyPadding": "Набивка корпуса", + "minWidth": "Минимальная ширина", + "aspectRatio": "Соотношение сторон", + "text": "Текст", + "textSize": "Размер текста", + "textWeight": "Вес текста", + "fontFamily": "Семейство шрифтов", + "fontStyle": "Стиль шрифта", + "backgroundImage": "Фоновое изображение", + "backgroundImageRepeat": "Повторение фона", + "backgroundImageSize": "Размер фона", + "backgroundImagePosition": "Фоновая позиция", + "backgroundImageOrigin": "Происхождение фона", + "headerBackgroundImage": "Фоновое изображение", + "headerBackgroundImageRepeat": "Повтор фонового изображения", + "headerBackgroundImageSize": "Размер фонового изображения", + "headerBackgroundImagePosition": "Положение фонового изображения", + "headerBackgroundImageOrigin": "Происхождение фонового изображения", + "footerBackgroundImage": "Фоновое изображение", + "footerBackgroundImageRepeat": "Повтор фонового изображения", + "footerBackgroundImageSize": "Размер фонового изображения", + "footerBackgroundImagePosition": "Положение фонового изображения", + "footerBackgroundImageOrigin": "Происхождение фонового изображения", + "rotation": "Вращение", + "alternateBackground": "Альтернативный цвет фона", + "headerText": "Цвет текста заголовка", + "labelColor": "Цвет этикетки", + "label": "Цвет этикетки", + "lineHeight": "Высота линии", + "subTitleColor": "Цвет подзаголовка", + "titleText": "Цвет названия", + "success": "Цвет успеха", + "siderBackgroundImage": "Фоновое изображение сидера", + "siderBackgroundImageRepeat": "Повтор фонового изображения в сидере", + "siderBackgroundImageSize": "Размер фонового изображения Sider", + "siderBackgroundImagePosition": "Положение фонового изображения в сайдере", + "siderBackgroundImageOrigin": "Происхождение фонового изображения Sider", + "activeBackground": "Активный цвет фона", + "labelBackground": "Цвет фона этикетки", + "gradientBackground": "Градиентный цвет фона", + "direction": "Направление", + "chartOpacity": "Непрозрачность", + "chartBoxShadow": "Тень от коробки", + "chartBorderStyle": "Пограничный стиль", + "chartBorderRadius": "Радиус границы", + "chartBorderWidth": "Ширина границы", + "chartTextSize": "Размер текста", + "chartTextWeight": "Вес текста", + "chartFontFamily": "Семейство шрифтов", + "chartFontStyle": "Стиль шрифта", + "chartBackgroundColor": "Цвет фона", + "chartGradientColor": "Цвет градиента", + "chartShadowColor": "Цвет теней", + "chartBorderColor": "Цвет границы", + "chartTextColor": "Цвет текста", + "detailSize": "Размер детали", + "radiusTip": "Указывает радиус углов элемента. Пример: 5px, 50% или 1em.", + "gapTip": "Указывает промежуток между строками и столбцами в сетке или гибком контейнере. Пример: 10px, 1rem или 5%.", + "cardRadiusTip": "Определяет радиус угла для компонентов карты. Пример: 10px, 15px.", + "borderWidthTip": "Указывает ширину границы элемента. Пример: 1px, 0,5em или тонкая.", + "borderStyleTip": "Устанавливает стиль границы. Например: сплошная, пунктирная, точечная или нет.", + "marginTip": "Определяет внешнее поле вокруг элемента. Пример: 10px, 2em или auto. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 0px 1px 5px 2px", + "directionTip": "Указывает направление макета. Пример: строка, столбец или обратная строка.", + "detailSizeTip": "Определяет размер конкретных деталей в макете. Пример: 10px, 2em или 80%.", + "chartOpacityTip": "Задает непрозрачность графика. Пример: 1 (непрозрачный), 0,5 (50 % прозрачности).", + "chartBoxShadowTip": "Определяет тень, отбрасываемую рамкой графика. Пример: 0px 4px 8px rgba(0, 0, 0, 0, 0.3).", + "chartBorderStyleTip": "Устанавливает стиль границы графика. Пример: сплошная, пунктирная, точечная.", + "chartBorderRadiusTip": "Задает угловой радиус границы графика. Пример: 10px, 20%.", + "chartBorderWidthTip": "Задает ширину границы графика. Пример: 2px, 0.5em.", + "chartTextSizeTip": "Указывает размер шрифта для текста диаграммы. Пример: 16px, 1em или 120%.", + "chartTextWeightTip": "Указывает вес шрифта для текста графика. Пример: обычный, полужирный или 700.", + "chartFontFamilyTip": "Указывает семейство шрифтов для текста диаграммы. Пример: Arial, Helvetica или \"Times New Roman\".", + "chartFontStyleTip": "Определяет стиль шрифта для текста графика. Пример: обычный, курсив или наклонный.", + "animationIterationCountTip": "Определяет, сколько раз должна запускаться анимация. Пример: бесконечно, 1 или 3.", + "opacityTip": "Устанавливает уровень прозрачности элемента. Пример: 1 (непрозрачный), 0,5 (50 % прозрачности) или 0 (невидимый).", + "boxShadowColorTip": "Определяет цвет тени бокса. Пример: rgba(0, 0, 0, 0, 0.3), #FF5733.", + "chartBackgroundColorTip": "Устанавливает цвет фона графика. Пример: #FFFFFF, rgba(255, 255, 255, 0.8).", + "chartGradientColorTip": "Указывает цвета градиента для фона графика. Пример: linear-gradient(to right, #ff7e5f, #feb47b).", + "chartShadowColorTip": "Определяет цвет тени графика. Пример: rgba(0, 0, 0, 0, 0.2), #333333.", + "chartBorderColorTip": "Задает цвет границы графика. Пример: #000000, rgba(0, 0, 0, 0, 0.5).", + "chartTextColorTip": "Устанавливает цвет текста графика. Пример: #333333, rgba(51, 51, 51, 1).", + "boxShadowTip": "Определяет тень, отбрасываемую рамкой элемента. Пример: 0px 4px 8px rgba(0, 0, 0, 0, 0.3), вставка 0px 2px 5px rgba(255, 255, 255, 0.5).", + "animationDelayTip": "Указывает задержку перед началом анимации. Пример: 1 с, 500 мс, 0.", + "animationDurationTip": "Устанавливает продолжительность анимации. Пример: 2 с, 3 с, 500 мс.", + "paddingTip": "Определяет внутреннее пространство подложки внутри элемента. Пример: 10px, 2em, 5%. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", + "containerHeaderPaddingTip": "Определяет отступы для заголовка контейнера. Пример: 10px, 1rem. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", + "containerSiderPaddingTip": "Определяет отступы для сидера контейнера. Пример: 8px, 1em. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", + "containerFooterPaddingTip": "Определяет отступы для нижнего колонтитула контейнера. Пример: 12px, 1rem. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", + "containerBodyPaddingTip": "Определяет отступы для тела контейнера. Пример: 15px, 2em. Также вы можете комбинировать их, например: 0px 20px. Или даже отдельно для всех 4 направлений, например: 10px 21px 5px 20px", + "textSizeTip": "Указывает размер шрифта текста. Пример: 14px, 1.2em, 110%.", + "textWeightTip": "Указывает вес шрифта в тексте. Пример: обычный, полужирный, 400.", + "fontFamilyTip": "Указывает семейство шрифтов текста. Пример: Arial, Verdana, 'Courier New'.", + "textDecorationTip": "Определяет оформление текста. Пример: подчеркивание, сквозная линия, нет.", + "textTransformTip": "Определяет капитализацию текста. Пример: верхний регистр, нижний регистр, капитализация.", + "fontStyleTip": "Устанавливает стиль шрифта текста. Пример: обычный, курсив, наклонный.", + "backgroundImageTip": "Указывает фоновое изображение элемента. Пример: url('image.jpg'), linear-gradient(to right, #ff7e5f, #feb47b).", + "headerBackgroundImageTip": "Указывает фоновое изображение для заголовка. Пример: url('header.jpg').", + "footerBackgroundImageTip": "Указывает фоновое изображение для нижнего колонтитула. Пример: url('footer.jpg').", + "backgroundImageRepeatTip": "Определяет, как будет повторяться фоновое изображение. Пример: no-repeat, repeat-x, repeat-y.", + "headerBackgroundImageRepeatTip": "Определяет, как будет повторяться фоновое изображение заголовка. Пример: repeat-x, no-repeat.", + "footerBackgroundImageRepeatTip": "Определяет, как будет повторяться фоновое изображение нижнего колонтитула. Пример: repeat-y, no-repeat.", + "backgroundImageSizeTip": "Определяет размер фонового изображения. Пример: обложка, содержать, 50% 50%.", + "backgroundImagePositionTip": "Определяет положение фонового изображения. Пример: по центру, справа вверху, 10 % 20 %.", + "backgroundImageOriginTip": "Определяет область позиционирования фонового изображения заголовка. Пример: padding-box, border-box, content-box.", + "headerBackgroundImageOriginTip": "Определяет область позиционирования фонового изображения заголовка. Пример: padding-box, border-box, content-box.", + "footerBackgroundImageOriginTip": "Указывает область позиционирования фонового изображения колонтитула. Пример: padding-box, border-box, content-box.", + "rotationTip": "Указывает угол поворота элемента. Пример: 45deg, 90deg, -180deg.", + "lineHeightTip": "Устанавливает высоту строки текста. Пример: 1,5, 2, 120 %.", + }, + "export": { + ...en.export, + + "hiddenDesc": "Если true, компонент будет скрыт", + "disabledDesc": "Если true, компонент отключен и неинтерактивен.", + "visibleDesc": "Если true, то компонент виден", + "inputValueDesc": "Текущее значение входа", + "invalidDesc": "Указывает, является ли значение недействительным", + "placeholderDesc": "Текст-заглушка, когда значение не задано", + "requiredDesc": "Если true, необходимо ввести действительное значение", + "submitDesc": "Отправить форму", + "richTextEditorValueDesc": "Текущее значение редактора", + "richTextEditorReadOnlyDesc": "Если true, редактор доступен только для чтения", + "richTextEditorHideToolBarDesc": "Если true, панель инструментов будет скрыта", + "jsonEditorDesc": "Текущие данные в формате JSON", + "sliderValueDesc": "Текущее выбранное значение", + "sliderMaxValueDesc": "Максимальное значение ползунка", + "sliderMinValueDesc": "Минимальное значение ползунка", + "sliderStartDesc": "Значение выбранной начальной точки", + "sliderEndDesc": "Значение выбранной конечной точки", + "ratingValueDesc": "Текущий выбранный рейтинг", + "ratingMaxDesc": "Максимальное номинальное значение", + "datePickerValueDesc": "Текущая выбранная дата", + "datePickerFormattedValueDesc": "Форматирование выбранной даты", + "datePickerTimestampDesc": "Временная метка выбранной даты", + "dateRangeStartDesc": "Дата начала диапазона", + "dateRangeEndDesc": "Дата окончания диапазона", + "dateRangeStartTimestampDesc": "Временная метка даты начала", + "dateRangeEndTimestampDesc": "Временная метка даты окончания", + "dateRangeFormattedValueDesc": "Форматированный диапазон дат", + "dateRangeFormattedStartValueDesc": "Отформатированная дата начала", + "dateRangeFormattedEndValueDesc": "Форматированная дата окончания", + "timePickerValueDesc": "Текущее выбранное время", + "timePickerFormattedValueDesc": "Форматированное выбранное время", + "timeRangeStartDesc": "Время начала диапазона", + "timeRangeEndDesc": "Время окончания диапазона", + "timeRangeFormattedValueDesc": "Форматированный диапазон времени", + "timeRangeFormattedStartValueDesc": "Форматированное время начала", + "timeRangeFormattedEndValueDesc": "Форматированное время окончания", + "timeZone": "Часовой пояс", + "timeZoneDesc": "Часовой пояс выбранной даты", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "Пожалуйста, введите действительный адрес электронной почты", + "url": "Пожалуйста, введите действительный URL-адрес", + "regex": "Пожалуйста, сопоставьте указанный образец", + "maxLength": "Слишком много символов, текущий: {length}, максимальный: {maxLength}", + "minLength": "Недостаточно символов, текущий: {length}, минимальный: {minLength}", + "maxValue": "Значение превышает максимальное, текущее: {value}, максимум: {max}", + "minValue": "Значение ниже минимального, текущее: {value}, минимальное: {min}", + "maxTime": "Время превышает максимальное, текущее: {time}, максимум: ___МЕСТОДЕРЖАТЕЛЬ1___", + "minTime": "Время ниже минимального, текущее: {time}, минимум: ___МЕСТОДЕРЖАТЕЛЬ1___", + "maxDate": "Дата превышает максимум, текущая: {date}, максимум: {maxDate}", + "minDate": "Дата ниже минимальной, текущая: {date}, минимальный: ___МЕСТОДЕРЖАТЕЛЬ1___", + }, + "query": { + ...en.query, + + "noQueries": "Запросы данных недоступны.", + "queryTutorialButton": "Просмотреть документы {value}", + "datasource": "Ваши источники данных", + "newDatasource": "Новый источник данных", + "generalTab": "Общие сведения", + "notificationTab": "Уведомление", + "variablesTab": "Переменные", + "advancedTab": "Расширенный", + "showFailNotification": "Показать уведомление о неудаче", + "failCondition": "Условия отказа", + "failConditionTooltip1": "Настройте условия отказа и соответствующие уведомления.", + "failConditionTooltip2": "Если какое-либо условие возвращается к истине, запрос помечается как неудачный и вызывает соответствующее уведомление.", + "showSuccessNotification": "Показать уведомление об успехе", + "successMessageLabel": "Сообщение об успехе", + "successMessage": "Успешный запуск", + "notifyDuration": "Продолжительность", + "notifyDurationTooltip": "Длительность уведомления. Единицей времени может быть 's' (секунда, по умолчанию) или 'ms' (миллисекунда). Значение по умолчанию - {default}s. Максимальное значение - {max}s.", + "successMessageWithName": "{name} выполнение успешно", + "failMessageWithName": "{name} выполнить не удалось: {result}", + "showConfirmationModal": "Показать модальное окно подтверждения перед запуском", + "confirmationMessageLabel": "Подтверждающее сообщение", + "confirmationMessage": "Вы уверены, что хотите запустить этот запрос данных?", + "newQuery": "Новый запрос данных", + "newFolder": "Новая папка", + "recentlyUsed": "Недавно использованные", + "folder": "Папка", + "folderNotEmpty": "Папка не пуста", + "dataResponder": "Ответчик данных", + "tempState": "Временное состояние", + "transformer": "Трансформатор", + "quickRestAPI": "Запрос REST", + "quickStreamAPI": "Запрос потока", + "quickGraphql": "Запрос на GraphQL", + "quickAlasql": "Локальный SQL-запрос", + "databaseType": "Тип базы данных", + "chooseDatabase": "Выберите базу данных", + "lowcoderAPI": "Lowcoder API", + "executeJSCode": "Выполнение кода JavaScript", + "importFromQueryLibrary": "Запрос подготовленных данных", + "preparedDataQueries": "Ваши готовые запросы к данным", + "adHocDataQueries": "Запросы данных Qick (без подготовленного запроса или источника данных)", + "queryResultTransformer": "Манипулируйте ответом запроса для преобразования данных перед привязкой", + "queryResultReactor": "Реагируйте на любое изменение динамического значения данных", + "importFromFile": "Импорт из файла", + "triggerType": "Срабатывает, когда...", + "triggerTypeAuto": "При изменении входов или после загрузки приложения (страница)", + "triggerTypePageLoad": "После загрузки приложения (страницы)", + "triggerTypeManual": "Только когда вы запускаете его вручную", + "triggerTypeInputChange": "При изменении входных сигналов", + "triggerTypeQueryExec": "После выполнения запроса", + "triggerTypeTimeout": "После загрузки приложения (страницы) и таймаута", + "delayTime": "Время задержки", + "chooseDataSource": "Выберите источник данных", + "method": "Метод", + "updateExceptionDataSourceTitle": "Обновление неработающего источника данных", + "updateExceptionDataSourceContent": "Обновите следующий запрос с тем же источником данных:", + "update": "Обновление", + "disablePreparedStatement": "Отключение подготовленных отчетов", + "disablePreparedStatementTooltip": "Отключение подготовленных операторов позволяет генерировать динамический SQL, но увеличивает риск SQL-инъекций", + "timeout": "Тайм-аут после", + "timeoutTooltip": "Единица измерения по умолчанию: мс. Поддерживаемые единицы ввода: мс, с. Значение по умолчанию: {defaultSeconds} секунд. Максимальное значение: {maxSeconds} секунд. Например, 300 (т.е. 300 мс), 800 мс, 5 с.", + "periodic": "Периодически выполняйте этот запрос данных", + "periodicTime": "Период", + "periodicTimeTooltip": "Период между последовательными выполнениями. Единица по умолчанию: мс. Поддерживаемые единицы ввода: мс, с. Минимальное значение: 100 мс. Периодическое выполнение отключается при значениях менее 100 мс. Например, 300 (т. е. 300 мс), 800 мс, 5 с.", + "cancelPrevious": "Игнорировать результаты предыдущих незавершенных казней", + "cancelPreviousTooltip": "Если запускается новое выполнение, то результаты предыдущих незавершенных выполнений будут проигнорированы, если они не завершились, и эти проигнорированные выполнения не будут вызывать список событий запроса.", + "dataSourceStatusError": "Если запускается новое выполнение, то результат предыдущих незавершенных выполнений будет проигнорирован, а проигнорированные выполнения не будут вызывать список событий запроса.", + "success": "Успех", + "fail": "Отказ", + "successDesc": "Срабатывает при успешном выполнении", + "failDesc": "Срабатывает при неудачном выполнении", + "fixedDelayError": "Запрос не выполняется", + "execSuccess": "Успешный запуск", + "execFail": "Запуск не удался", + "execIgnored": "Результаты этого запроса были проигнорированы", + "deleteSuccessMessage": "Успешно удалено. Вы можете использовать {undoKey}, чтобы отменить удаление", + "dataExportDesc": "Данные, полученные в текущем запросе", + "codeExportDesc": "Код состояния текущего запроса", + "successExportDesc": "Успешно ли был выполнен текущий запрос", + "messageExportDesc": "Информация, полученная по текущему запросу", + "extraExportDesc": "Другие данные в текущем запросе", + "isFetchingExportDesc": "Является ли текущий запрос запросом", + "runTimeExportDesc": "Текущее время выполнения запроса (мс)", + "latestEndTimeExportDesc": "Последнее время работы", + "triggerTypeExportDesc": "Тип триггера", + "chooseResource": "Выберите ресурс", + "createDataSource": "Создайте новый источник данных", + "editDataSource": "Редактировать", + "datasourceName": "Имя", + "datasourceNameRuleMessage": "Введите имя источника данных", + "generalSetting": "Общие настройки", + "advancedSetting": "Дополнительные настройки", + "port": "Порт", + "portRequiredMessage": "Пожалуйста, введите порт", + "portErrorMessage": "Пожалуйста, введите правильный порт", + "connectionType": "Тип соединения", + "regular": "Обычный", + "host": "Хозяин", + "hostRequiredMessage": "Введите доменное имя или IP-адрес хоста", + "userName": "Имя пользователя", + "password": "Пароль", + "encryptedServer": "-------- Зашифровано на стороне сервера --------", + "uriRequiredMessage": "Пожалуйста, введите URI", + "urlRequiredMessage": "Пожалуйста, введите URL", + "uriErrorMessage": "Пожалуйста, введите правильный URI", + "urlErrorMessage": "Пожалуйста, введите правильный URL-адрес", + "httpRequiredMessage": "Пожалуйста, введите http:// или https://", + "databaseName": "Имя базы данных", + "databaseNameRequiredMessage": "Введите имя базы данных", + "useSSL": "Используйте SSL", + "userNameRequiredMessage": "Пожалуйста, введите ваше имя", + "passwordRequiredMessage": "Пожалуйста, введите пароль", + "authentication": "Аутентификация", + "authenticationType": "Тип аутентификации", + "sslCertVerificationType": "Проверка сертификата SSL", + "sslCertVerificationTypeDefault": "Проверка сертификата ЦС", + "sslCertVerificationTypeSelf": "Проверка самоподписного сертификата", + "sslCertVerificationTypeDisabled": "Инвалид", + "selfSignedCert": "Самоподписанный сертификат", + "selfSignedCertRequireMsg": "Пожалуйста, введите ваш сертификат", + "enableTurnOffPreparedStatement": "Включение переключения подготовленных сообщений для запросов", + "enableTurnOffPreparedStatementTooltip": "Включить или отключить подготовленные операторы можно на вкладке \"Дополнительно\" запроса.", + "serviceName": "Название услуги", + "serviceNameRequiredMessage": "Пожалуйста, введите название вашей службы", + "useSID": "Используйте SID", + "connectSuccessfully": "Подключение успешно", + "saveSuccessfully": "Сохранено успешно", + "database": "База данных", + "cloudHosting": "Облачный хостинг Lowcoder не может получить доступ к локальным службам, используя 127.0.0.1 или localhost. Попробуйте подключиться к общедоступным сетевым источникам данных или используйте обратный прокси-сервер для частных сервисов.", + "notCloudHosting": "При развертывании на докер-хосте Lowcoder использует мостовые сети, поэтому 127.0.0.1 и localhost не подходят для адресов хостов. Для доступа к источникам данных локальной машины см.", + "howToAccessHostDocLink": "Как получить доступ к API/БД хоста", + "returnList": "Возврат", + "chooseDatasourceType": "Выберите тип источника данных", + "viewDocuments": "Посмотреть документы", + "testConnection": "Тестовое подключение", + "save": "Сохранить", + "whitelist": "Список разрешений", + "whitelistTooltip": "При необходимости добавьте IP-адреса Lowcoder в список разрешенных источников данных.", + "address": "Адрес:", + "nameExists": "Имя {name} уже существует", + "jsQueryDocLink": "О запросе JavaScript", + "dynamicDataSourceConfigLoadingText": "Загрузка дополнительной конфигурации источника данных...", + "dynamicDataSourceConfigErrText": "Не удалось загрузить дополнительную конфигурацию источника данных.", + "retry": "Повторная попытка", + "categoryDatabase": "База данных", + "categoryBigdata": "Большие данные", + "categoryAi": "AI", + "categoryDevops": "DevOps", + "categoryAppdevelopment": "Разработка приложений", + "categoryWorkflow": "Рабочий процесс", + "categoryMessaging": "Передача сообщений", + "categoryAssets": "Активы и хранение", + "categoryProjectManagement": "Управление проектами", + "categoryCrm": "CRM", + "categoryEcommerce": "Электронная коммерция", + "categoryWebscrapers": "Вебскраперы и открытые данные", + "categoryDocumentHandling": "Создание отчетов и документов", + "categoryRPA": "Автоматизация роботизированных процессов", + "componentsUsingQueryTitle": "Использование запросов", + "componentsUsingQuery": "Где используется этот запрос", + "variables": "Переменные", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "Пары ключ-значение", + "object": "Объект", + "allowMultiModify": "Разрешить модификацию нескольких рядов", + "allowMultiModifyTooltip": "Если выбрано, то обрабатываются все строки, удовлетворяющие условиям. В противном случае будет обработана только первая строка, удовлетворяющая условиям.", + "array": "Массив", + "insertList": "Список вставок", + "insertListTooltip": "Значения вставляются, если они не существуют", + "filterRule": "Правило фильтрации", + "updateList": "Список обновлений", + "updateListTooltip": "Значения, обновляемые по мере их существования, могут быть отменены теми же значениями списка вставки", + "sqlMode": "Режим SQL", + "guiMode": "Режим графического интерфейса", + "operation": "Операция", + "insert": "Вставка", + "upsert": "Вставка, но обновление при конфликте", + "update": "Обновление", + "delete": "Удалить", + "bulkInsert": "Объемная вставка", + "bulkUpdate": "Обновление объема", + "table": "Таблица", + "primaryKeyColumn": "Колонка первичного ключа", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "Сырая команда", + "queryTutorialButton": "Просмотр документов API Elasticsearch", + "request": "Запрос", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "Индекс строки", + "spreadsheetId": "Идентификатор электронной таблицы", + "sheetName": "Название листа", + "readData": "Чтение данных", + "appendData": "Добавить строку", + "updateData": "Обновить ряд", + "deleteData": "Удалить строку", + "clearData": "Чистый ряд", + "serviceAccountRequireMessage": "Пожалуйста, введите учетную запись", + "ASC": "ASC", + "DESC": "DESC", + "sort": "Сортировать", + "sortPlaceholder": "Имя", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "Экспорт в JSON", + "noInput": "Текущий запрос не имеет входа", + "inputName": "Имя", + "inputDesc": "Описание", + "emptyInputs": "Нет входов", + "clickToAdd": "Добавить", + "chooseQuery": "Выберите запрос", + "viewQuery": "Просмотр запроса", + "chooseVersion": "Выберите версию", + "latest": "Последние", + "publish": "Опубликовать", + "historyVersion": "Историческая версия", + "deleteQueryLabel": "Удалить запрос", + "deleteQueryContent": "Запрос нельзя восстановить после удаления. Удалить запрос?", + "run": "Запускайте", + "readOnly": "Только чтение", + "exit": "Выход", + "recoverAppSnapshotContent": "Восстановите текущий запрос до версии {version}", + "searchPlaceholder": "Поисковый запрос", + "allQuery": "Все запросы", + "deleteQueryTitle": "Удалить запрос", + "unnamed": "Безымянный", + "publishNewVersion": "Опубликовать новую версию", + "publishSuccess": "Успешная публикация", + "version": "Версия", + "desc": "Описание", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "См.", + "extParamsTooltip": "Настройка дополнительных параметров подключения", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "Запрос пользователей рабочей области", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "Сырая команда", + "command": "Команда", + "queryTutorial": "Просмотр документов по командам Redis", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "Если выбрано {type}, формат значения должен быть {object}. Пример: {example}", + "text": "Текст", + "file": "Файл", + "extraBodyTooltip": "Ключевые значения в Extra Body будут добавлены к телу с типом данных JSON или Form Data", + "forwardCookies": "Печенье Forward", + "forwardAllCookies": "Переслать все файлы cookie", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "Вложение", + "attachmentTooltip": "Может использоваться с компонентом загрузки файлов, данные должны быть преобразованы в:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "Передатчик", + "recipient": "Получатель", + "carbonCopy": "Углеродная копия", + "blindCarbonCopy": "Слепая копия", + "subject": "Тема", + "content": "Содержание", + "contentTooltip": "Поддерживает ввод текста или HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "Приборные панели и отчетность", + "layout": "Макет и навигация", + "forms": "Сбор данных и формы", + "collaboration": "Встречи и сотрудничество", + "projectmanagement": "Управление проектами", + "scheduling": "Календарь и планирование", + "documents": "Управление документами и файлами", + "itemHandling": "Обработка предметов и подписей", + "multimedia": "Мультимедиа и анимация", + "integration": "Интеграция и расширение", + "legacy": "Устаревшие и устаревшие", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "Автокомплект", + "autoCompleteCompDesc": "Поле ввода, которое выдает подсказки по мере ввода, повышая удобство и точность.", + "autoCompleteCompKeywords": "предложения, автозаполнение, набор текста, ввод", + "inputCompName": "Вход", + "inputCompDesc": "Основное поле ввода текста, позволяющее пользователям вводить и редактировать текст.", + "inputCompKeywords": "текст, ввод, поле, редактирование", + "textAreaCompName": "Текстовая область", + "textAreaCompDesc": "Многострочный текст для ввода более длинного содержимого, например, комментариев или описаний.", + "textAreaCompKeywords": "многострочный, textarea, ввод, текст", + "passwordCompName": "Пароль", + "passwordCompDesc": "Защищенное поле для ввода пароля, маскирующее символы для обеспечения конфиденциальности.", + "passwordCompKeywords": "пароль, безопасность, ввод, скрытый", + "richTextEditorCompName": "Редактор насыщенного текста", + "richTextEditorCompDesc": "Продвинутый текстовый редактор с богатыми возможностями форматирования, такими как жирный шрифт, курсив и списки.", + "richTextEditorCompKeywords": "редактор, текст, форматирование, богатый контент", + "numberInputCompName": "Ввод номера", + "numberInputCompDesc": "Поле, предназначенное для ввода числовых данных, с элементами управления для увеличения и уменьшения значений.", + "numberInputCompKeywords": "число, ввод, инкремент, декремент", + "sliderCompName": "Слайдер", + "sliderCompDesc": "Графический компонент ползунка для выбора значения или диапазона в пределах определенной шкалы.", + "sliderCompKeywords": "ползунок, диапазон, ввод, графический", + "rangeSliderCompName": "Слайдер диапазона", + "rangeSliderCompDesc": "Ползунок с двумя ручками для выбора диапазона значений, полезный для фильтрации или установки границ.", + "rangeSliderCompKeywords": "диапазон, слайдер, двойная ручка, фильтр", + "ratingCompName": "Рейтинг", + "ratingCompDesc": "Компонент для сбора оценок пользователей, отображаемых в виде звезд.", + "ratingCompKeywords": "рейтинг, звезды, отзывы, вклад", + "switchCompName": "Переключатель", + "switchCompDesc": "Тумблер для принятия решений типа \"вкл/выкл\" или \"да/нет\".", + "switchCompKeywords": "тумблер, переключатель, вкл/выкл, управление", + "selectCompName": "Выберите", + "selectCompDesc": "Выпадающее меню для выбора из списка опций.", + "selectCompKeywords": "выпадающее, выбор, опции, меню", + "multiSelectCompName": "Multiselect", + "multiSelectCompDesc": "Компонент, позволяющий выбирать несколько элементов из выпадающего списка.", + "multiSelectCompKeywords": "multiselect, multiple, dropdown, choices", + "cascaderCompName": "Каскадер", + "cascaderCompDesc": "Многоуровневый выпадающий список для иерархического выбора данных, например, для выбора местоположения.", + "cascaderCompKeywords": "каскадный, иерархический, выпадающий, уровни", + "checkboxCompName": "Флажок", + "checkboxCompDesc": "Стандартный флажок для опций, которые можно выбрать или отменить.", + "checkboxCompKeywords": "флажок, опции, выбор, переключение", + "radioCompName": "Радио", + "radioCompDesc": "Радиокнопки для выбора одного варианта из набора, где допускается только один выбор.", + "radioCompKeywords": "радио, кнопки, выбор, единственный выбор", + "segmentedControlCompName": "Сегментированный контроль", + "segmentedControlCompDesc": "Элемент управления с сегментированными опциями для быстрого переключения между несколькими вариантами.", + "segmentedControlCompKeywords": "сегментированный, управление, переключение, опции", + "stepControlCompName": "Ступенчатое управление", + "stepControlCompDesc": "Элемент управления с опциями шагов, предлагающий визуальные шаги для таких приложений, как формы или мастера.", + "stepControlCompKeywords": "шаги, управление, переключение, опции", + "fileUploadCompName": "Загрузка файлов", + "fileUploadCompDesc": "Компонент для загрузки файлов с поддержкой перетаскивания и выбора файлов.", + "fileUploadCompKeywords": "файл, загрузка, перетаскивание, выбор", + "dateCompName": "Дата", + "dateCompDesc": "Компонент для выбора даты из интерфейса календаря.", + "dateCompKeywords": "дата, подборщик, календарь, выбор", + "dateRangeCompName": "Диапазон дат", + "dateRangeCompDesc": "Компонент для выбора диапазона дат, полезный для систем бронирования или фильтров.", + "dateRangeCompKeywords": "daterange, выбор, бронирование, фильтр", + "timeCompName": "Время", + "timeCompDesc": "Компонент выбора времени для выбора определенного времени суток.", + "timeCompKeywords": "время, подборщик, выбрать, часы", + "timeRangeCompName": "Диапазон времени", + "timeRangeCompDesc": "Компонент для выбора диапазона времени, часто используемый в приложениях для составления расписаний.", + "timeRangeCompKeywords": "диапазон времени, выбор, планирование, продолжительность", + "buttonCompName": "Кнопка формы", + "buttonCompDesc": "Универсальный компонент кнопки для отправки форм, запуска действий или навигации.", + "buttonCompKeywords": "кнопка, отправка, действие, навигация", + "meetingControlCompName": "Кнопка со значком", + "meetingCompDesc": "Кнопка для управления такими функциями, как начало, завершение, отключение звука или общий доступ.", + "meetingCompKeywords": "управление, кнопка, начало, конец", + "linkCompName": "Ссылка на", + "linkCompDesc": "Компонент отображения гиперссылок для навигации или ссылок на внешние ресурсы.", + "linkCompKeywords": "ссылка, гиперссылка, навигация, внешний", + "scannerCompName": "Сканер", + "scannerCompDesc": "Компонент для сканирования штрих-кодов, QR-кодов и других подобных данных.", + "scannerCompKeywords": "сканер, штрих-код, QR-код, сканирование", + "dropdownCompName": "Dropdown", + "dropdownCompDesc": "Выпадающее меню для компактного отображения списка опций.", + "dropdownCompKeywords": "выпадающее, меню, опции, выбор", + "toggleButtonCompName": "Кнопка переключения", + "toggleButtonCompDesc": "Кнопка, которая может переключаться между двумя состояниями или опциями.", + "toggleButtonCompKeywords": "тумблер, кнопка, переключатель, состояние", + "textCompName": "Отображение текста", + "textCompDesc": "Простой компонент для отображения статического или динамического текстового контента с учетом форматирования Markdown.", + "textCompKeywords": "текст, дисплей, статический, динамический", + "tableCompName": "Таблица", + "tableCompDesc": "Компонент таблицы для отображения данных в формате структурированной таблицы, с возможностью сортировки и фильтрации, древовидным отображением данных и расширяемыми строками.", + "tableCompKeywords": "таблица, данные, сортировка, фильтрация", + "imageCompName": "Изображение", + "imageCompDesc": "Компонент для отображения изображений, поддерживающий различные форматы на основе URI или данных Base64.", + "imageCompKeywords": "изображение, отображение, медиа, Base64", + "progressCompName": "Прогресс", + "progressCompDesc": "Визуальный индикатор прогресса, обычно используемый для отображения статуса завершения задачи.", + "progressCompKeywords": "прогресс, индикатор, статус, задача", + "progressCircleCompName": "Круг прогресса", + "progressCircleCompDesc": "Круговой индикатор выполнения, часто используемый для состояния загрузки или задач, ограниченных по времени.", + "progressCircleCompKeywords": "круг, прогресс, индикатор, загрузка", + "fileViewerCompName": "Просмотрщик файлов", + "fileViewerCompDesc": "Компонент для просмотра различных типов файлов, включая документы и изображения.", + "fileViewerCompKeywords": "файл, просмотрщик, документ, изображение", + "dividerCompName": "Разделитель", + "dividerCompDesc": "Визуальный компонент-разделитель, используемый для разделения содержимого или разделов в макете.", + "dividerCompKeywords": "разделитель, разделитель, макет, дизайн", + "qrCodeCompName": "QR-код", + "qrCodeCompDesc": "Компонент для отображения QR-кодов, полезных для быстрого сканирования и передачи информации.", + "qrCodeCompKeywords": "QR-код, сканирование, штрих-код, информация", + "formCompName": "Форма", + "formCompDesc": "Контейнерный компонент для создания структурированных форм с различными типами ввода.", + "formCompKeywords": "форма, ввод, контейнер, структура", + "jsonSchemaFormCompName": "Форма схемы JSON", + "jsonSchemaFormCompDesc": "Компонент динамической формы, созданный на основе схемы JSON.", + "jsonSchemaFormCompKeywords": "JSON, схема, форма, динамический", + "containerCompName": "Контейнер", + "containerCompDesc": "Контейнер общего назначения для компоновки и организации элементов пользовательского интерфейса.", + "containerCompKeywords": "контейнер, макет, организация, пользовательский интерфейс", + "floatTextContainerCompName": "Плавающий текстовый контейнер", + "floatTextContainerCompDesc": "Компонент с плавающим текстовым контейнером", + "floatTextContainerCompKeywords": "контейнер, макет, текст, поток", + "collapsibleContainerCompName": "Складной контейнер", + "collapsibleContainerCompDesc": "Контейнер, который можно разворачивать или сворачивать, идеально подходит для управления видимостью содержимого.", + "collapsibleContainerCompKeywords": "Складной, контейнер, расширяться, сворачиваться", + "tabbedContainerCompName": "Контейнер с вкладками", + "tabbedContainerCompDesc": "Контейнер с навигацией по вкладкам для организации содержимого в отдельные панели.", + "tabbedContainerCompKeywords": "вкладка, контейнер, навигация, панели", + "pageLayoutCompName": "Макет страницы", + "pageLayoutCompDesc": "Контейнер, который предлагает создать макет с хедером, сайдером, футером и областью основного содержимого.", + "pageLayoutCompKeywords": "макет, контейнер, навигация, страницы", + "modalCompName": "Модальный", + "modalCompDesc": "Всплывающий модальный компонент для отображения содержимого, предупреждений или форм в фокусе.", + "modalCompKeywords": "модальный, всплывающий, оповещение, форма", + "listViewCompName": "Просмотр списка", + "listViewCompDesc": "Компонент для отображения списка элементов или данных, внутри которого можно разместить другие компоненты. Например, ретранслятор.", + "listViewCompKeywords": "список, просмотр, отображение, ретранслятор", + "gridCompName": "Сетка", + "gridCompDesc": "Гибкий компонент сетки для создания структурированных макетов со строками и столбцами в качестве расширения компонента List View.", + "gridCompKeywords": "сетка, макет, строки, столбцы", + "navigationCompName": "Навигация", + "navigationCompDesc": "Навигационный компонент для создания меню, хлебных крошек или вкладок для навигации по сайту.", + "navigationCompKeywords": "навигация, меню, хлебные крошки, вкладки", + "iframeCompName": "IFrame", + "iframeCompDesc": "Встроенный компонент-фрейм для встраивания внешних веб-страниц и приложений или контента в приложение.", + "iframeCompKeywords": "iframe, встраивание, веб-страница, содержимое", + "customCompName": "Пользовательский компонент", + "customCompDesc": "Гибкий, программируемый компонент для создания уникальных, определяемых пользователем элементов пользовательского интерфейса, отвечающих вашим конкретным потребностям.", + "customCompKeywords": "пользовательские, определяемые пользователем, гибкие, программируемые", + "moduleCompName": "Модуль", + "moduleCompDesc": "Используйте модули для создания микроприложений, предназначенных для инкапсуляции определенных функций или возможностей. Модули можно встраивать и повторно использовать во всех приложениях.", + "moduleCompKeywords": "модуль, микроприложение, функциональность, многоразовое использование", + "jsonExplorerCompName": "JSON Explorer", + "jsonExplorerCompDesc": "Компонент для визуального изучения и взаимодействия со структурами данных JSON.", + "jsonExplorerCompKeywords": "JSON, проводник, данные, структура", + "jsonEditorCompName": "Редактор JSON", + "jsonEditorCompDesc": "Компонент редактора для создания и изменения JSON-данных с проверкой и подсветкой синтаксиса.", + "jsonEditorCompKeywords": "JSON, редактор, изменение, проверка", + "treeCompName": "Дерево", + "treeCompDesc": "Компонент древовидной структуры для отображения иерархических данных, таких как файловые системы или организационные диаграммы.", + "treeCompKeywords": "дерево, иерархический, данные, структура", + "treeSelectCompName": "Выбор дерева", + "treeSelectCompDesc": "Компонент выбора, который представляет опции в формате иерархического дерева, позволяя организовывать и встраивать выборки.", + "treeSelectCompKeywords": "дерево, выбрать, иерархический, вложенный", + "audioCompName": "Аудио", + "audioCompDesc": "Компонент для встраивания аудиоконтента с элементами управления воспроизведением и регулировкой громкости.", + "audioCompKeywords": "аудио, воспроизведение, звук, музыка", + "videoCompName": "Видео", + "videoCompDesc": "Мультимедийный компонент для встраивания и воспроизведения видеоконтента с поддержкой различных форматов.", + "videoCompKeywords": "видео, мультимедиа, воспроизведение, встраивание", + "drawerCompName": "Ящик", + "drawerCompDesc": "Выдвижной компонент панели, который может использоваться для дополнительной навигации или отображения контента, обычно выступая за край экрана.", + "drawerCompKeywords": "ящик, раздвижной, панель, навигация", + "chartCompName": "Диаграмма (устаревшая)", + "chartCompDesc": "Универсальный компонент для визуализации данных с помощью различных типов графиков и диаграмм.", + "chartCompKeywords": "диаграмма, график, данные, визуализация", + "carouselCompName": "Карусель изображений", + "carouselCompDesc": "Компонент вращающейся карусели для демонстрации изображений, баннеров или слайдов контента.", + "carouselCompKeywords": "Карусель, изображения, вращение, витрина", + "imageEditorCompName": "Редактор изображений", + "imageEditorCompDesc": "Интерактивный компонент для редактирования и работы с изображениями, предлагающий различные инструменты и фильтры.", + "imageEditorCompKeywords": "изображение, редактор, манипулировать, инструменты", + "mermaidCompName": "Диаграмма русалки", + "mermaidCompDesc": "Компонент для визуализации сложных диаграмм и блок-схем на основе синтаксиса Mermaid.", + "mermaidCompKeywords": "русалка, диаграммы, схемы, блок-схемы", + "calendarCompName": "Календарь", + "calendarCompDesc": "Компонент календаря для отображения дат и событий, с возможностью просмотра месяца, недели или дня.", + "calendarCompKeywords": "календарь, даты, события, планирование", + "signatureCompName": "Подпись", + "signatureCompDesc": "Компонент для сбора цифровых подписей, полезный для процессов утверждения и проверки.", + "signatureCompKeywords": "подпись, цифровая, одобрение, проверка", + "jsonLottieCompName": "Лотти Анимация", + "jsonLottieCompDesc": "Компонент для отображения анимации Lottie, обеспечивающий легкие и масштабируемые анимации на основе данных JSON.", + "jsonLottieCompKeywords": "лотти, анимация, JSON, масштабируемость", + "timelineCompName": "Временная шкала", + "timelineCompDesc": "Компонент для отображения событий или действий в хронологическом порядке, визуально представленном в виде линейной шкалы времени.", + "timelineCompKeywords": "хронология, события, хронологический, история", + "commentCompName": "Как", + "commentCompDesc": "Компонент для добавления и отображения комментариев пользователей, поддерживающий потоковые ответы и взаимодействие с пользователями.", + "commentCompKeywords": "комментарий, обсуждение, взаимодействие с пользователем, обратная связь", + "mentionCompName": "Упоминание", + "mentionCompDesc": "Компонент, поддерживающий упоминание пользователей или тегов в текстовом контенте, обычно используется в социальных сетях или платформах для совместной работы.", + "mentionCompKeywords": "упоминание, тег, пользователь, социальные сети", + "responsiveLayoutCompName": "Отзывчивый макет", + "responsiveLayoutCompDesc": "Компонент макета, разработанный для адаптации и реагирования на различные размеры экранов и устройств, обеспечивая постоянный пользовательский опыт.", + "responsiveLayoutCompKeywords": "отзывчивый, макет, адаптация, размер экрана", + "splitLayoutCompName": "Раздельная планировка", + "splitLayoutCompDesc": "Компонент компоновки для организации нескольких областей просмотра и разделения областей по горизонтали или вертикали. Он предлагает пользователю адаптацию ширины и высоты областей просмотра с помощью перетаскивания.", + "splitLayoutCompKeywords": "разделить, разделитель, макет, адаптировать, размер экрана", + "iconCompName": "Иконы", + "iconCompDesc": "Используйте различные значки, чтобы повысить визуальную привлекательность и удобство использования вашего приложения.", + "iconCompKeywords": "Значки, пиктограммы, символы, фигуры", + "tourCompName": "Тур", + "tourCompDesc": "Экскурсия по продукту для пользователей-гидов.", + "tourCompKeywords": "экскурсия, экскурсия по продукту, прогулка, интерактивная прогулка", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "Компонент визуализации для отображения данных о состоянии управления проектом в формате холмистой диаграммы.", + "hillchartCompKeywords": "управление проектами, диаграмма холма, визуализация, данные", + "openLayersGeoMapCompName": "Openlayers Geomap", + "openLayersGeoMapCompDesc": "Компонент для отображения интерактивных карт с использованием OpenLayers, с поддержкой различных слоев и возможностей карты.", + "openLayersGeoMapCompKeywords": "openlayers, геокарта, интерактивная, слои карты", + "chartsGeoMapCompName": "Картосхемы географических карт", + "chartsGeoMapCompDesc": "Компонент для визуализации географических данных на интерактивных картах с динамическими графиками", + "chartsGeoMapCompKeywords": "Геокарта, диаграммы, визуализация, географические данные", + "bpmnEditorCompName": "Редактор BPMN", + "bpmnEditorCompDesc": "Компонент для просмотра, создания и редактирования BPMN-диаграмм, поддерживающий различные элементы и возможности BPMN.", + "bpmnEditorCompKeywords": "BPMN, редактор, диаграммы, элементы, рабочие процессы", + "turnstileCaptchaCompName": "Турникет Captcha", + "turnstileCaptchaCompDesc": "Компонент captcha для проверки пользователей от ботов.", + "turnstileCaptchaCompKeywords": "captcha, проверка, идентификация, безопасность", + "pivotTableCompName": "Поворотная таблица", + "pivotTableCompDesc": "Инструмент для обобщения и анализа данных, позволяющий организовать и объединить данные в табличном формате.", + "pivotTableCompKeywords": "pivot table, данные, анализ, агрегирование", + "funnelChartCompName": "Диаграмма воронки", + "funnelChartCompDesc": "Инструмент визуализации для отображения постепенного сокращения данных при прохождении этапов.", + "funnelChartCompKeywords": "диаграмма воронки, продажи, конверсия, процесс", + "gaugeChartCompName": "Таблица манометров", + "gaugeChartCompDesc": "График, отображающий данные в виде показаний на циферблате, полезен для индикации состояния или уровня чего-либо.", + "gaugeChartCompKeywords": "диаграмма, показатели, производительность, состояние", + "sankeyChartCompName": "Диаграмма Санки", + "sankeyChartCompDesc": "Диаграмма потока, в которой ширина стрелок пропорциональна скорости потока, используется для отображения передачи энергии, материалов или затрат.", + "sankeyChartCompKeywords": "диаграмма санки, поток, энергия, затраты", + "candleStickChartCompName": "Свечной график", + "candleStickChartCompDesc": "Стиль финансового графика, используемый для описания движения цены ценной бумаги, дериватива или валюты.", + "candleStickChartCompKeywords": "свечной график, акции, торговля, финансы", + "radarChartCompName": "Радарная диаграмма", + "radarChartCompDesc": "Графический метод отображения многомерных данных в виде двумерной диаграммы трех или более количественных переменных.", + "radarChartCompKeywords": "радарная диаграмма, многомерность, анализ производительности", + "heatmapChartCompName": "Тепловая карта", + "heatmapChartCompDesc": "Графическое представление данных, в котором отдельные значения представлены в виде цветов.", + "heatmapChartCompKeywords": "тепловая карта, визуализация данных, интенсивность", + "graphChartCompName": "График Диаграмма", + "graphChartCompDesc": "Диаграмма, представляющая собой сеть узлов, соединенных ребрами, полезная для отображения взаимосвязей и отношений.", + "graphChartCompKeywords": "Граф-схема, сети, отношения, узлы", + "treeChartCompName": "Диаграмма деревьев", + "treeChartCompDesc": "Диаграмма, которая визуально представляет иерархию в виде древовидной структуры, показывая взаимосвязи между различными узлами.", + "treeChartCompKeywords": "древовидная диаграмма, иерархия, организационная", + "treemapChartCompName": "Трехмерная диаграмма", + "treemapChartCompDesc": "Диаграмма, в которой используются вложенные прямоугольники для пропорционального представления иерархических данных.", + "treemapChartCompKeywords": "карта, иерархия, визуализация данных", + "sunburstChartCompName": "Диаграмма солнечных лучей", + "sunburstChartCompDesc": "Техника визуализации с радиальным заполнением пространства, которая иллюстрирует иерархические отношения через слои круга.", + "sunburstChartCompKeywords": "диаграмма солнечных лучей, радиальная, иерархическая", + "themeriverChartCompName": "Тематическая карта реки", + "themeriverChartCompDesc": "Визуализация, напоминающая потоковый график, которая показывает изменения в наборе данных с течением времени по категориям.", + "themeriverChartCompKeywords": "тематическая река, временные ряды, тенденции", + "basicChartCompName": "Многотиповая диаграмма", + "basicChartCompDesc": "Универсальный компонент для визуализации данных с помощью различных типов графиков и диаграмм.", + "basicChartCompKeywords": "диаграмма, график, данные, визуализация", + "shapeCompName": "Формы", + "shapeCompDesc": "Коллекция геометрических фигур для использования в диаграммах, иллюстрациях и визуализациях.", + "shapeCompKeywords": "фигуры, геометрические, диаграммы, иллюстрации", + "ganttChartCompName": "Диаграмма Ганта", + "ganttChartCompDesc": "Диаграмма, иллюстрирующая график проекта и показывающая даты начала и завершения элементов и зависимостей.", + "ganttChartCompKeywords": "диаграмма Ганта, управление проектами, расписание", + "kanbanCompName": "Канбан-доска (предварительный просмотр!)", + "kanbanCompDesc": "Доска для визуализации рабочего процесса, на которой столбцы представляют этапы работы, а карточки - задачи.", + "kanbanCompKeywords": "Канбан, доска, рабочий процесс, задачи", + "pieChartCompName": "Круговая диаграмма", + "pieChartCompDesc": "Универсальный компонент для визуализации данных с помощью круговых диаграмм.", + "pieChartCompKeywords": "диаграмма, данные, визуализация", + "lineChartCompName": "Линейная диаграмма", + "lineChartCompDesc": "Универсальный компонент для визуализации данных с помощью линейных диаграмм.", + "lineChartCompKeywords": "диаграмма, данные, визуализация", + "barChartCompName": "Гистограмма", + "barChartCompDesc": "Универсальный компонент для визуализации данных с помощью гистограмм.", + "barChartCompKeywords": "диаграмма, данные, визуализация", + "scatterChartCompName": "Диаграмма рассеяния", + "scatterChartCompDesc": "Универсальный компонент для визуализации данных с помощью диаграмм рассеяния.", + "scatterChartCompKeywords": "диаграмма, данные, визуализация", + "colorPickerCompName": "Подборщик цветов", + "colorPickerCompDesc": "Интуитивно понятный выбор цвета для персонализации.", + "colorPickerCompKeywords": "цвет, подборщик, настройка", + "floatButtonCompName": "Кнопка поплавка", + "floatButtonCompDesc": "Плавающая кнопка действий для заметных и быстрых действий.", + "floatButtonCompKeywords": "плавающая кнопка, действие, быстро", + "avatarCompName": "Аватар", + "avatarCompDesc": "Отображение аватаров пользователей или изображений профиля для персонализированной идентификации.", + "avatarCompKeywords": "аватар, изображение профиля, идентификация пользователя", + "avatarGroupCompName": "Группа \"Аватар", + "avatarGroupCompDesc": "Группа аватаров для компактного и визуально привлекательного представления нескольких пользователей или сущностей.", + "avatarGroupCompKeywords": "группа аватаров, пользователи, сущности, компактность", + "transferName": "Передача", + "transferDesc": "Облегчает перенос данных между двумя списками с помощью функции перетаскивания.", + "transferKeywords": "передача, данные, перетаскивание", + "cardCompName": "Карта содержания", + "cardCompDesc": "Компонент карты для отображения упорядоченной информации или контента в структурированном виде.", + "cardCompKeywords": "карта, информация, содержание, дисплей", + "timerCompName": "Таймер", + "timerCompDesc": "Компонент, отображающий обратный отсчет или прошедшее время, полезный для отслеживания продолжительности и сроков.", + "timerCompKeywords": "таймер, обратный отсчет, прошедшее время, отслеживание, продолжительность, сроки", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "Посмотреть документацию", + "menuViewPlayground": "Посмотреть интерактивную игровую площадку", + "menuUpgradeToLatest": "Обновление до последней версии", + "nameNotEmpty": "Не может быть пустым", + "nameRegex": "Должен начинаться с буквы и содержать только буквы, цифры и символы подчеркивания (_)", + "nameJSKeyword": "Не может быть ключевым словом JavaScript", + "nameGlobalVariable": "Не может быть глобальным именем переменной", + "nameExists": "Имя {name} Уже существует", + "getLatestVersionMetaError": "Не удалось получить последнюю версию, попробуйте позже.", + "needNotUpgrade": "Текущая версия уже является последней.", + "compNotFoundInLatestVersion": "Текущий компонент не найден в последней версии.", + "upgradeSuccess": "Успешно обновлено до последней версии.", + "searchProp": "Поиск", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "Повторная попытка", + "resetAfterSubmit": "Сброс после успешной отправки формы", + "jsonSchema": "JSON-схема", + "uiSchema": "Схема пользовательского интерфейса", + "schemaTooltip": "См.", + "defaultData": "Предварительно заполненные данные формы", + "dataDesc": "Данные текущей формы", + "required": "Требуется", + "maximum": "Максимальное значение - {value}.", + "minimum": "Минимальное значение - {value}.", + "exclusiveMaximum": "Должно быть меньше, чем {value}", + "exclusiveMinimum": "Должно быть больше, чем {value}", + "multipleOf": "Должно быть кратно {value}", + "minLength": "Не менее {value} символов", + "maxLength": "Не более {value} символов", + "pattern": "Должен соответствовать шаблону {value}", + "format": "Должен соответствовать формату {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "Входное значение поиска", + }, + "customComp": { + ...en.customComp, + + "text": "Хороший день.", + "triggerQuery": "Запрос триггера", + "updateData": "Обновление данных", + "updateText": "Я также в хорошем настроении, чтобы разработать теперь свой собственный пользовательский компонент с Lowcoder!", + "sdkGlobalVarName": "Lowcoder", + "data": "Данные, которые вы хотите передать в пользовательский компонент", + "code": "Код вашего пользовательского компонента", + }, + "tree": { + ...en.tree, + + "placeholder": "Пожалуйста, выберите", + "selectType": "Выберите тип", + "noSelect": "Нет выбора", + "singleSelect": "Одиночный выбор", + "multiSelect": "Мультивыбор", + "checkbox": "Флажок", + "checkedStrategy": "Проверенная стратегия", + "showAll": "Все узлы", + "showParent": "Только родительские узлы", + "showChild": "Только дочерние узлы", + "autoExpandParent": "Авторазвертывание Родитель", + "checkStrictly": "Проверьте строго", + "checkStrictlyTooltip": "Точная проверка узла дерева", + "treeData": "Данные о деревьях", + "treeDataDesc": "Текущие данные о деревьях", + "value": "Значения по умолчанию", + "valueDesc": "Текущие значения", + "expanded": "Расширенные значения", + "expandedDesc": "Текущие расширенные значения", + "defaultExpandAll": "По умолчанию Развернуть все узлы", + "showLine": "Показать линию", + "showLeafIcon": "Показать значок листа", + "treeDataAsia": "Азия", + "treeDataChina": "Китай", + "treeDataBeijing": "Пекин", + "treeDataShanghai": "Шанхай", + "treeDataJapan": "Япония", + "treeDataEurope": "Европа", + "treeDataEngland": "Англия", + "treeDataFrance": "Франция", + "treeDataGermany": "Германия", + "treeDataNorthAmerica": "Северная Америка", + "helpLabel": "Ярлык узла", + "helpValue": "Уникальное значение узла в дереве", + "helpChildren": "Дети Узлы", + "helpDisabled": "Отключение узла", + "helpSelectable": "Является ли узел выбираемым (тип одиночного/множественного выбора)", + "helpCheckable": "Отображать ли флажок (тип флажка)", + "helpDisableCheckbox": "Отключение флажка (тип флажка)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "Испытание событием", + "methodTest": "Метод испытания", + "inputTest": "Входной тест", + }, + "password": { + ...en.password, + + "label": "Пароль", + "placeholder": "Пожалуйста, введите пароль", + "conformLabel": "Подтвердите пароль", + "conformPlaceholder": "Пожалуйста, подтвердите пароль", + "visibilityToggle": "Тумблер \"Показать видимость", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "Настройка панели инструментов", + "toolbarDescription": "Вы можете настроить панель инструментов. Более подробную информацию см. на сайте: https://quilljs.com/docs/modules/toolbar/.", + "placeholder": "Пожалуйста, введите...", + "hideToolbar": "Скрыть панель инструментов", + "content": "Содержание", + "title": "Название", + "save": "Сохранить", + "link": "Ссылка:", + "edit": "Редактировать", + "remove": "Удалить", + "defaultValue": "Базовое содержание", + }, + "floatButton": { + ...en.floatButton, + + "custom": "Пользовательское", + "backTop": "Назад Вверх", + "buttonType": "Тип кнопки", + "buttonShape": "Форма пуговицы", + "square": "Квадрат", + "circle": "Круг", + "description": "Описание", + "badge": "Бейдж", + "primary": "Главная", + "default": "По умолчанию", + "buttonTheme": "Кнопочная тема", + "badgeColor": "Цвет значка", + "dot": "Значок в виде точки", + "hidden": "Скрытый", + "visibilityHeight": "Высота видимости", + "visibilityHeightDesc": "Прокрутка до определенной высоты перед отображением кнопки возврата к началу, 0 отображается всегда, режим редактирования не может осуществлять предварительный просмотр в режиме реального времени", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "Триггеры Событие", + "click": "Нажмите", + "hover": "наведение", + "disabledAlpha": "Отключить выбор альфы", + "recommended": "Рекомендуем", + "showPresets": "Показать предустановки цвета", + }, + "badge": { + ...en.badge, + + "showCloseButton": "Показать кнопку закрытия", + "Type": "Тип значка", + "Count": "Количество значков", + "Size": "Размер значка", + "SizeDefault": "по умолчанию", + "SizeSmall": "Маленький", + "overflowCount": "Счетчик переполнения", + "Title": "Название значка", + "dot": "Точка", + "number": "Номер", + "tooltip": "Всплывающая подсказка", + }, + "gantt": { + ...en.gantt, + + "key": "Ключ", + "title": "Название", + "project": "Проект", + "from": "С сайта", + "minute": "минута", + "hour": "Час", + "day": "День", + "week": "Неделя", + "month": "Месяц", + "year": "Год", + "quarter": "Квартал", + "tasks": "Данные о задачах", + "level": "уровень", + "durationUnit": "Единица измерения продолжительности", + "duration": "Продолжительность", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "Неделя #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "дерево", + "ColumnsData": "Данные столбцов", + "allowChangeTask": "Задача DbClick", + "allowAddLink": "Добавить ссылку", + "allowLinkDelete": "Ссылка Удалить", + "allowProgressDrag": "Перетаскивание прогресса", + "allowTaskDrag": "Перетаскивание задач", + "links": "Данные о ссылках", + "dataFormat": "Разбор данных Формат", + "handleDateChange": "Справиться с изменением задачи", + "handleTaskChange": "Справиться с изменением задачи", + "handleAddedLink": "Ручка Добавлена ссылка", + "handleDeletedLink": "Обработка удаленной ссылки", + "handleProgressDrag": "Перетаскивание прогресса", + "showTodayMark": "Показать сегодня Марк", + "resize": "Изменить размер", + "otherEvents": "Другие события", + "openAllBranchInit": "Открыть все филиалы", + "date": "Дата", + "text": "Текст", + "progress": "прогресс", + "width": "Ширина", + "ColumnsType": "Тип Cloumns", + "currentId": "Текущий идентификатор", + "currentObject": "Текущий объект", + "addTask": "Добавить задачу(и)", + "taskObject": "Объект задачи", + "taskObjectDesc": "Поддержка массивов задач или одного объекта задачи", + "linkID": "идентификатор ссылки", + "linkIDDesc": "Поддерживает массивы идентификаторов ссылок или один объект ссылки", + "removeTask": "Удалить задачу", + "taskID": "Идентификатор задачи", + "taskIDDesc": "Поддерживает массивы идентификаторов или один идентификатор", + "add": "Добавить", + "expandingAll": "Расширяя все", + "collapsingAll": "Все рушится", + "addTaskFail": "Задача добавления завершилась неудачно, а тип параметра должен быть объектом или объектом массива", + "addLinkFail": "Ссылка на добавление не удалась, а тип параметра должен быть объектом или объектом массива", + "removeTaskFail": "Задача удаления завершилась неудачей, и тип параметра должен быть строкой или массивом строк", + "removeLinkFail": "Ссылки на удаление не удались, и тип параметра должен быть строковым массивом", + "otherData": "Другие данные{i}", + "projectText": "Проект №{i}", + "taskText": "Задание №{i}", + "AutoCalculateProgress": "Ход автоматического расчета", + "allowProjectDrag": "Разрешить перетаскивание проектов", + "showColumns": "Показать столбцы", + "exportToPNG": "Экспорт в PNG", + "exportToPDF": "Экспорт в PDF", + "exportToExcel": "Экспорт в Excel", + "progressLowBg": "Низкий BgColor", + "progressLowColor": "Цвет низкого прогресса", + "progressMediumBg": "Средний BgColor", + "progressMediumColor": "Средний цвет прогресса", + "progressHighBg": "Высота BgColor", + "progressHighColor": "Цвет прогресса", + "progresscompletedColor": "Цвет завершенного прогресса", + "lowProgressLine": "Низкая линия прогресса", + "mediumProgressLine": "Средняя линия прогресса", + "SegmentedColor": "Прогресс Сегментированный цвет", + "link_f2s": "Ссылка F2S", + "link_s2s": "Ссылка S2S", + "link_f2f": "Ссылка F2F", + "link_s2f": "Ссылка S2F", + "weekScale": "#{i},", + "showHolidays": "Показать праздники", + "StatutoryHolidays": "Данные об обязательных праздничных днях", + "skipOffTime": "Скрывает нерабочее время", + "weekend": "Выходные", + "weekendSelected": "Выбранные выходные", + "noWorkHour": "Нерабочий час", + "noWorkHourSelected": "не выбран рабочий час", + "showWorkTimes": "Показать время работы", + "workTimeData": "Данные о рабочем времени", + "fit": "подходит", + "manual": "руководство", + "scaleMode": "Режим шкалы", + "startDate": "Дата начала", + "endDate": "Дата окончания", + "addLink": "Добавить ссылку(и)", + "linkObject": "ссылка Объект", + "removeLink": "удалить ссылку", + "allowSort": "Разрешить сортировку", + "showTask": "Показать задание", + "toggleOnDBClick": "Включить DBClick", + "sortOptions": "Первоначальные параметры сортировки", + "rowHeight": "Высота ряда", + "showTooltip": "Показать всплывающую подсказку", + "tooltipTemplates": "Шаблон всплывающей подсказки", + "allowResizeTask": "Разрешить изменение размера задачи", + "projectColor": "Цвет проекта", + "projectColorBg": "Проект BgColor", + "taskColor": "Цвет задачи", + "taskColorBg": "Задача BgColor", + "milestoneColor": "Цвет вехи", + "highlightOverdue": "Выделить Просроченные", + "overdueColor": "Просроченный цвет", + "overdueBgColor": "Просроченный BgColor", + "projectCompletedBgColor": "Проект завершен BgColor", + "projectCompletedColor": "Цвет завершенного проекта", + "tag": "тег", + "tasksTableWidth": "Ширина таблицы задач", + "allowErrorMessage": "Разрешить сообщение об ошибке", + "currentProjectId": "Текущий идентификатор проекта", + "currentProjectLastTask": "Текущий проект Последняя задача", + "onlySortProject": "Только сортировка проекта", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "Исходные данные", + "targetTitle": "Целевые данные", + "content": "Содержание {i}", + "items": "Товары", + "targetKeys": "Выбранные ключи", + "oneWay": "Один путь", + "pagination": "Пагинация", + "pageSize": "Размер страницы", + "allowSearch": "Разрешить поиск", + "selectedKeys": "Выбранные ключи", + "searchInfo": "Поисковая информация", + "targerObject": "Объект Таргера", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "Максимальное количество", + "avatarSize": "Размер аватара", + "autoColor": "Автоцвет", + "alignment": "Выравнивание", + "currentAvatar": "Текущий аватар", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "квадрат", + "circle": "круг", + "icon": "икона", + "shape": "форма", + "counts": "Бейдж", + "title": "название", + "src": "src", + "avatarCompTooltip": "Приоритет отображения следующий: изображение -> символы -> значок. В зависимости от того, что доступно первым.", + "iconSize": "Размер значка", + "avatarBackground": "Фон", + "label": "Этикетка", + "caption": "Надпись", + "labelPosition": "Позиция", + "alignmentPosition": "выравнивание", + "text": "Текст", + "enableDropDown": "Включить выпадающий список", + "containerBackground": "Фон", + }, + "card": { + ...en.card, + + "cardType": "Тип карты", + "common": "общий", + "custom": "на заказ", + "default": "по умолчанию", + "small": "маленький", + "showTitle": "Показать название", + "title": "Название", + "more": "Подробнее", + "extraTitle": "Призыв к действию", + "CoverImg": "Изображение на обложке", + "imgSrc": "Источник изображения", + "showMeta": "Показать содержимое", + "metaTitle": "Содержание Заголовок", + "metaDesc": "Описание содержания", + "imgHeight": "Высота изображения", + "showActionIcon": "Показать параметры действия", + "actionOptions": "Варианты действий", + "menu": "Меню {i}", + "hoverColor": "hover Цвет", + "IconColor": "Цвет значка", + "titleSize": "Размер названия", + }, + "timer": { + ...en.timer, + + "timerState": "Состояние таймера", + "elapsedTime": "Прошедшее время", + "timer": "Таймер", + "countdown": "Обратный отсчет", + "defaultValue": "Значение по умолчанию", + "timerType": "Тип таймера", + "start": "Начало", + "pause": "Пауза", + "resume": "Резюме", + "reset": "Сброс", + "startPause": "Старт/Пауза", + "hideButton": "Скрыть кнопку", + "fontColor": "Цвет шрифта", + }, + "iconComp": { + ...en.iconComp, + + "icon": "Икона", + "autoSize": "Иконка Авторазмер", + "iconSize": "Размер значка", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "Формат", + "precision": "Точность", + "allowNull": "Разрешить нулевое значение", + "thousandsSeparator": "Показать разделитель тысяч", + "controls": "Показать кнопки увеличения/уменьшения", + "step": "Шаг", + "standard": "Стандарт", + "percent": "Процент", + }, + "slider": { + ...en.slider, + + "step": "Шаг", + "stepTooltip": "Значение должно быть больше 0 и делиться на (Max-Min)", + "vertical": "Вертикальная ориентация", + }, + "rating": { + ...en.rating, + + "max": "Максимальная оценка", + "allowHalf": "Разрешить половину рейтинговых очков", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "Опции", + "option": "Вариант", + "optionI": "Вариант {i}", + "viewDocs": "Просмотр документов", + "tip": "Переменные 'item' и 'i' представляют значение и индекс каждого элемента в массиве данных", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "Значение / Ключ", + "valueTooltip": "Значение шага должно быть числом. Для первого Шага оно должно быть равно начальному значению. Числа должны быть расположены в последовательном и возрастающем порядке", + "title": "Название шага", + "subTitle": "Шаг субтитров", + "description": "Описание шага", + "status": "Статус шага", + "icon": "Значок шага", + }, + "step": { + ...en.step, + + "initialValue": "Начальные числа в", + "initialValueTooltip": "С чего начать визуальную нумерацию. Должно быть 1 или выше.", + "valueDesc": "Текущая стоимость", + "size": "Размер шагов", + "sizeSmall": "Маленький", + "sizeDefault": "По умолчанию", + "percent": "Шаги Процент", + "type": "Тип шагов", + "typeDefault": "Стандарт", + "typeNavigation": "Навигация", + "typeInline": "Inline", + "direction": "Направление шагов", + "directionVertical": "Вертикальный", + "directionHorizontal": "Горизонтальный", + "labelPlacement": "Шаги Размещение этикеток", + "status": "Статус шагов", + "statusWait": "Подождите", + "statusProcess": "Процесс", + "statusFinish": "Отделка", + "statusError": "Ошибка", + "showDots": "Показать точки вместо символов", + "showIcons": "Показать значки вместо символов", + "responsive": "Отзывчивый", + "selectable": "Выбираемый", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "Текст тега", + "color": "Цвет", + "icon": "Икона", + }, + "radio": { + ...en.radio, + + "options": "Опции", + "horizontal": "Горизонтальный", + "horizontalTooltip": "Горизонтальный макет сворачивается, когда заканчивается место", + "vertical": "Вертикальный", + "verticalTooltip": "Вертикальный макет всегда будет отображаться в один столбец", + "autoColumns": "Автоколонка", + "autoColumnsTooltip": "Макет \"Автоколонка\" автоматически перестраивает порядок, если позволяет место, и отображает в виде нескольких колонок", + }, + "cascader": { + ...en.cascader, + + "options": "Данные JSON для отображения каскадного выбора", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "Текущее выбранное значение", + "selectedIndexDesc": "Индекс текущего выбранного значения или -1, если значение не выбрано", + "selectedLabelDesc": "Метка текущего выбранного значения", + }, + "file": { + ...en.file, + + "typeErrorMsg": "Должно быть числом с допустимой единицей размера файла или числом байт без единицы измерения.", + "fileEmptyErrorMsg": "Загрузка не удалась. Размер файла пуст.", + "fileSizeExceedErrorMsg": "Загрузка не удалась. Размер файла превышает лимит.", + "minSize": "Минимальный размер", + "minSizeTooltip": "Минимальный размер загружаемых файлов с необязательными единицами измерения размера файла (например, '5kb', '10 MB'). Если единица измерения не указана, значение будет считаться числом байт.", + "maxSize": "Максимальный размер", + "maxSizeTooltip": "Максимальный размер загружаемых файлов с необязательными единицами измерения размера файла (например, '5kb', '10 MB'). Если единица измерения не указана, значение будет считаться числом байт.", + "single": "Одиночка", + "multiple": "Множество", + "directory": "Каталог", + "upload": "Просмотреть", + "fileType": "Типы файлов", + "reference": "Пожалуйста, обратитесь к", + "fileTypeTooltipUrl": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers", + "fileTypeTooltip": "Уникальные спецификаторы типа файла", + "uploadType": "Тип загрузки", + "showUploadList": "Показать список загрузок", + "maxFiles": "Max Files", + "filesValueDesc": "Содержимое загружаемого в данный момент файла закодировано в Base64", + "filesDesc": "Список текущих загруженных файлов. Для получения подробной информации см.", + "clearValueDesc": "Очистить все файлы", + "parseFiles": "Разбор файлов", + "parsedValueTooltip1": "Если параметр parseFiles равен True, файлы загрузки будут разобраны до объекта, массива или строки. Доступ к разобранным данным можно получить через массив parsedValue.", + "parsedValueTooltip2": "Поддерживаются файлы Excel, JSON, CSV и текстовые файлы. Другие форматы возвращают Null.", + "forceCapture": "Силовой захват", + "forceCaptureTooltip": "Вместо загрузки сделайте снимок с камеры", + "usePhoto": "Используйте фотографию", + "retakePhoto": "Повторное фото", + "capture": "Захват", + }, + "date": { + ...en.date, + + "format": "Формат", + "inputFormat": "Формат ввода", + "formatTip": "Поддерживаются: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'", + "reference": "Пожалуйста, обратитесь к", + "showTime": "Время показа", + "start": "Дата начала", + "end": "Дата окончания", + "year": "Год", + "quarter": "Квартал", + "month": "Месяц", + "week": "Неделя", + "date": "Дата", + "clearAllDesc": "Очистить все", + "resetAllDesc": "Сбросить все", + "placeholder": "Выберите дату", + "placeholderText": "Место для размещения", + "startDate": "Дата начала", + "endDate": "Дата окончания", + }, + "time": { + ...en.time, + + "start": "Время начала", + "end": "Конец времени", + "formatTip": "Поддержка: 'HH:mm:ss', 'Timestamp'", + "format": "Формат", + "placeholder": "Выберите время", + "placeholderText": "Место для размещения", + "startTime": "Время начала", + "endTime": "Конец времени", + }, + "button": { + ...en.button, + + "prefixIcon": "Значок префикса", + "prefixText": "Префиксный текст", + "suffixIcon": "Значок суффикса", + "icon": "Икона", + "iconSize": "Размер значка", + "button": "Кнопка формы", + "formToSubmit": "Форма для отправки", + "default": "По умолчанию", + "submit": "Отправить", + "textDesc": "Текст, отображаемый в данный момент на кнопке", + "loadingDesc": "Находится ли кнопка в состоянии загрузки? Если True, то текущая кнопка загружается", + "formButtonEvent": "Событие", + }, + "link": { + ...en.link, + + "link": "Ссылка на", + "textDesc": "Текст, отображаемый в настоящее время на ссылке", + "loadingDesc": "Находится ли ссылка в состоянии загрузки? Если True, то текущая ссылка загружается", + }, + "scanner": { + ...en.scanner, + + "text": "Нажмите кнопку Сканировать", + "camera": "Камера {index}", + "changeCamera": "Переключить камеру", + "continuous": "Непрерывное сканирование", + "uniqueData": "Игнорирование дублирующихся данных", + "maskClosable": "Нажмите на маску, чтобы закрыть", + "errTip": "Пожалуйста, используйте этот компонент под HTTPS или Localhost", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "Дисплей только с этикеткой", + "textDesc": "Текст, отображаемый в данный момент на кнопке", + "triggerMode": "Режим триггера", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 Здравствуйте, {name}.", + "valueTooltip": "Markdown поддерживает большинство тегов и атрибутов HTML. iframe, Script и другие теги отключены по соображениям безопасности.", + "verticalAlignment": "Вертикальное выравнивание", + "horizontalAlignment": "Горизонтальное выравнивание", + "textDesc": "Текст, отображаемый в текущем текстовом поле", + }, + "table": { + ...en.table, + + "editable": "Редактируемый", + "columnNum": "Колонны", + "viewModeResizable": "Ширина колонки настраивается пользователем", + "viewModeResizableTooltip": "Могут ли пользователи регулировать ширину столбцов.", + "visibleResizables": "Показать ручки изменения размера", + "visibleResizablesTooltip": "Отображение видимых ручек изменения размера в заголовке таблицы.", + "showFilter": "Кнопка \"Показать фильтр", + "showRefresh": "Показать кнопку обновления", + "showDownload": "Показать кнопку загрузки", + "columnSeparator": "Сепаратор колонн", + "columnSeparatorTooltip": "Разделитель столбцов (\"delimiter\") в загруженном CSV-файле.\n\nРекомендации:\n- Запятая (,)\n- точка с запятой (", + "columnSetting": "Кнопка \"Показать видимость столбцов", + "searchText": "Текст для поиска", + "searchTextTooltip": "Поиск и фильтрация данных, которые в данный момент представлены в таблице. Это только фронтальный поиск и не влияет на запрос к источнику данных).", + "showQuickJumper": "Показать Быстрый джемпер", + "hideOnSinglePage": "Скрыть на одной странице", + "showSizeChanger": "Показать кнопку изменения размера", + "pageSizeOptions": "Параметры размера страницы", + "pageSize": "Размер страницы", + "total": "Общее количество строк", + "totalTooltip": "Значение по умолчанию - количество текущих элементов данных, которые можно получить из запроса, например: '{{query1.data[0].count}}'.", + "filter": "Фильтры", + "filterRule": "Правило фильтрации", + "chooseColumnName": "Выберите колонку", + "chooseCondition": "Выберите условие", + "clear": "Очистить", + "columnShows": "Колонна показывает", + "selectAll": "Выбрать все", + "and": "И", + "or": "Или", + "contains": "Содержит", + "notContain": "Не содержит", + "equals": "Равняется", + "isNotEqual": "Не равны", + "isEmpty": "Пустой", + "isNotEmpty": "Не пустой", + "greater": "Больше, чем", + "greaterThanOrEquals": "Больше, чем или равно", + "lessThan": "Меньше, чем", + "lessThanOrEquals": "Меньше, чем или равно", + "action": "Действие", + "columnValue": "Значение столбца", + "columnValueTooltip": "'{{currentCell}}': Данные текущей ячейки\n '{{currentRow}}': Данные текущей строки\n '{{currentIndex}}': Индекс текущих данных (начиная с 0)\n Пример: '{{currentCell * 5}}' Показать данные, в 5 раз превышающие исходное значение.", + "columnTooltip": "Всплывающая подсказка столбца", + "imageSrc": "Источник изображения", + "imageSize": "Размер изображения", + "columnTitle": "Название", + "columnTitleTooltip": "Всплывающая подсказка заголовка", + "showTitle": "Показать название", + "showTitleTooltip": "Показать/скрыть заголовок столбца в заголовке таблицы", + "sortable": "Сортировка", + "align": "Выравнивание", + "fixedColumn": "Фиксированная колонна", + "autoWidth": "Автоматическая ширина", + "customColumn": "Пользовательская колонка", + "auto": "Автомобиль", + "fixed": "Исправлено", + "columnType": "Тип колонки", + "dataMapping": "Сопоставление данных", + "numberStep": "Шаг", + "numberStepTooltip": "Число, на которое увеличивается или уменьшается текущее значение. Это может быть целое число или десятичная дробь", + "precision": "Точность", + "float": "Поплавок", + "prefix": "Префикс", + "suffix": "Суффикс", + "avatars": "Аватары", + "avatarGroupAlignment": "Выравнивание аватаров", + "text": "Текст", + "number": "Номер", + "link": "Ссылка на", + "links": "Ссылки", + "tag": "Тег", + "select": "Выберите", + "dropdown": "Dropdown", + "time": "Время", + "date": "Дата", + "dateTime": "Дата Время", + "badgeStatus": "Статус", + "button": "Кнопка", + "image": "Изображение", + "boolean": "Булево", + "switch": "Переключатель", + "rating": "Рейтинг", + "progress": "Прогресс", + "option": "Операция", + "optionList": "Список операций", + "option1": "Операция 1", + "status": "Статус", + "statusTooltip": "Необязательные значения: Успех, Ошибка, По умолчанию, Предупреждение, Обработка", + "primaryButton": "Главная", + "defaultButton": "По умолчанию", + "type": "Тип", + "tableSize": "Размер стола", + "hideHeader": "Скрыть заголовок таблицы", + "hideToolbar": "Скрыть панель инструментов таблицы (нижний колонтитул)", + "fixedHeader": "Фиксированный заголовок таблицы", + "fixedHeaderTooltip": "Заголовок будет фиксированным для вертикально прокручиваемой таблицы", + "fixedToolbar": "Исправленная панель инструментов", + "fixedToolbarTooltip": "Панель инструментов будет фиксированной для вертикально прокручиваемой таблицы на основе позиции", + "hideBordered": "Показать ручки изменения размера", + "showHeaderGridBorder": "Показать границы сетки заголовка", + "showRowGridBorder": "Показать границы сетки строк", + "showVerticalRowGridBorder": "Показать вертикальную границу сетки строк", + "showHorizontalRowGridBorder": "Показать горизонтальную границу сетки строк", + "deleteColumn": "Удалить колонку", + "confirmDeleteColumn": "Подтвердите удаление колонки:", + "small": "S", + "middle": "M", + "large": "L", + "refreshButtonTooltip": "Текущие данные изменились, нажмите, чтобы перегенерировать столбец.", + "changeSetDesc": "Объект, представляющий изменения в редактируемой таблице, содержит только измененную ячейку. Строки идут первыми, а столбцы - вторыми.", + "selectedRowDesc": "Предоставляет данные для текущей выделенной строки, указывая на строку, которая вызывает событие щелчка, если пользователь нажимает кнопку/ссылку в строке", + "selectedRowsDesc": "Используется в режиме множественного выбора, аналогично SelectedRow", + "pageNoDesc": "Текущая страница дисплея, начиная с 1", + "pageSizeDesc": "Сколько строк на странице", + "sortColumnDesc": "Имя выбранного в данный момент отсортированного столбца", + "sortDesc": "Находится ли текущая строка в нисходящем порядке", + "pageOffsetDesc": "Текущее начало листания, используется для листания с целью получения данных. Пример: Select * from Users Limit '{{table1.pageSize}}' Offset '{{table1.pageOffset}}'", + "displayDataDesc": "Данные, отображаемые в текущей таблице", + "selectedIndexDesc": "Выбранный индекс в отображаемых данных", + "filterDesc": "Параметры фильтрации таблиц", + "dataDesc": "Данные JSON для таблицы", + "saveChanges": "Сохранить изменения", + "cancelChanges": "Отменить изменения", + "rowSelectChange": "Изменение выбора строки", + "rowClick": "Щелчок по строке", + "rowExpand": "Ряд Развернуть", + "rowShrink": "Сокращение рядов", + "search": "Поиск", + "download": "Скачать", + "columnEdited": "Колонка отредактирована", + "filterChange": "Замена фильтра", + "sortChange": "Изменение сортировки", + "pageChange": "Изменение страницы", + "refresh": "Обновить", + "rowColor": "Условный цвет строки", + "rowColorDesc": "Условная установка цвета строки на основе необязательных переменных: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Например: '{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "Условная высота строки", + "rowHeightDesc": "Условная установка высоты строки на основе необязательных переменных: CurrentRow, CurrentOriginalIndex, CurrentIndex, ColumnTitle. Например: '{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "Условный цвет ячеек", + "cellColorDesc": "Условно установите цвет ячейки на основе значения ячейки с помощью CurrentCell. Например: '{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "Не настроен обработчик событий для сохранения изменений. Пожалуйста, привяжите хотя бы один обработчик событий перед нажатием.", + "dynamicColumn": "Использование динамической видимости столбцов", + "dynamicColumnConfig": "Видимые столбцы", + "dynamicColumnConfigDesc": "Динамическая видимость столбцов. Принимает массив имен столбцов. По умолчанию все столбцы видны. Пример: [\"id\", \"name\"].", + "position": "Позиция", + "showDataLoadSpinner": "Показать индикатор загрузки", + "showValue": "Показать значение", + "expandable": "Расширяемый", + "configExpandedView": "Настройка расширенного вида", + "toUpdateRowsDesc": "Массив объектов для обновляемых строк в редактируемых таблицах.", + "selectedCellDesc": "Выбранная ячейка", + "empty": "Пустой", + "falseValues": "Текст при ложном значении", + "iconTrue": "Значок, когда истинно", + "iconFalse": "Значок, когда ложно", + "iconNull": "Значок При нуле", + "allColumn": "Все", + "visibleColumn": "Видимый", + "emptyColumns": "В настоящее время ни один столбец не виден", + "showSummary": "Показать итоговую строку (строки)", + "totalSummaryRows": "Всего строк", + "inlineAddNewRow": "Добавить новую строку (строки)", + "editMode": "Режим редактирования", + "singleClick": "Один клик", + "doubleClick": "Двойной щелчок", + "showUpdateButtons": "Показать кнопки сохранения/отмены", + }, + "image": { + ...en.image, + + "src": "Источник изображения", + "srcDesc": "Источник изображения. Может быть URL, путь или строка Base64. например: data:image/png", + "supportPreview": "Поддержка предварительного просмотра с масштабированием (при нажатии)", + "supportPreviewTip": "Эффективно, если источник изображения действителен", + "previewSrc": "Источник изображений в формате HighRes", + "clipPath": "Контур обрезки изображения", + "clipPathTip": "Используйте clip-path, чтобы определить пользовательскую форму для вашего элемента на основе определения CSS, ссылки на маску SVG (через URL источника) или используя предопределенные формы, такие как круг(), эллипс(), многоугольник() или вставка() для обрезки.", + "enableOverflow": "Включить переполнение", + "enableOverflowTip": "Позволяет изображению переполнять свой контейнер, что дает возможность обрезать его за пределами контейнера. Полезно для поддержания фокуса на определенных частях изображения.", + "overflow": "Поведение при переполнении (CSS)", + "overflowTip": "Определяет, как должно вести себя содержимое при переполнении контейнера. Такие параметры, как 'hidden', 'scroll' или 'visible', определяют видимость обрезанного содержимого.", + "positionX": "Горизонтальное положение", + "positionXTip": "Задает горизонтальное выравнивание изображения внутри его контейнера. Примеры: 'left', 'center', 'right' или процентные значения.", + "positionY": "Вертикальное положение", + "positionYTip": "Задает вертикальное выравнивание изображения внутри его контейнера. Примеры: 'top', 'center', 'bottom' или процентные значения.", + "aspectRatio": "Соотношение сторон (CSS)", + "aspectRatioTip": "Поддерживает постоянное соотношение ширины и высоты изображения, например, '16/9' для широкоэкранного или '1/1' для квадратного. Оставьте пустым для естественных размеров изображения.", + "placement": "Размещение изображений", + "placementTip": "Определяет, где и как будет отображаться изображение в макете или контейнере. Варианты включают определенное выравнивание или логику размещения.", + }, + "progress": { + ...en.progress, + + "value": "Значение", + "valueTooltip": "Процент завершения как значение от 0 до 100", + "showInfo": "Показать значение", + "valueDesc": "Текущее значение прогресса, в диапазоне от 0 до 100", + "showInfoDesc": "Отображать ли текущее значение прогресса", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "Пожалуйста, введите правильный URL или строку Base64", + "src": "Файлы URI", + "srcTooltip": "Предварительный просмотр содержимого ссылки путем вставки HTML, также поддерживаются данные в кодировке Base64, например: data:application/pdf", + "srcDesc": "URI файла", + }, + "divider": { + ...en.divider, + + "title": "Название", + "align": "Выравнивание", + "dashed": "Пунктир", + "type": "Вертикальный тип", + "dashedDesc": "Использовать ли пунктирную линию", + "titleDesc": "Название разделителя", + "alignDesc": "Выравнивание заголовка разделителя", + }, + "QRCode": { + ...en.QRCode, + + "value": "Значение содержимого QR-кода", + "valueTooltip": "Значение содержит максимум 2953 символа. Значение QR-кода может кодировать различные типы данных, включая текстовые сообщения, URL, контактные данные (VCard/meCard), данные для входа в Wi-Fi, адреса электронной почты, номера телефонов, SMS-сообщения, координаты геолокации, данные о событиях календаря, платежную информацию, адреса криптовалют и ссылки для загрузки приложений.", + "valueDesc": "Значение содержимого QR-кода", + "level": "Уровень отказоустойчивости", + "levelTooltip": "Означает способность QR-кода быть отсканированным, даже если его часть заблокирована. Чем выше уровень, тем сложнее код.", + "includeMargin": "Показать маржу", + "image": "Отображение изображения в центре", + "L": "L (Низкий)", + "M": "M (средний)", + "Q": "Q (квартиль)", + "H": "H (высокий)", + "maxLength": "Содержание слишком длинное. Установите длину менее 2953 символов", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "Отступ каждого уровня", + "expandToggle": "Развернуть дерево JSON", + "theme": "Цветная тема", + "valueDesc": "Текущие данные в формате JSON", + "default": "По умолчанию", + "defaultDark": "По умолчанию Темный", + "neutralLight": "Нейтральный свет", + "neutralDark": "Нейтральный темный", + "azure": "Лазурь", + "darkBlue": "Темно-синий", + }, + "audio": { + ...en.audio, + + "src": "URI источника звука или строка Base64", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "Автоигра", + "loop": "Петля", + "srcDesc": "Текущий URI аудио или строка Base64, например data:audio/mpeg", + "play": "Играть", + "playDesc": "Срабатывает при воспроизведении звука", + "pause": "Пауза", + "pauseDesc": "Срабатывает при приостановке звука", + "ended": "Окончание", + "endedDesc": "Срабатывает при завершении воспроизведения аудиозаписи", + }, + "video": { + ...en.video, + + "src": "URI источника видео или строка Base64", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "URL-адрес плаката", + "defaultPosterUrl": "", + "autoPlay": "Автоигра", + "loop": "Петля", + "controls": "Скрыть элементы управления", + "volume": "Объем", + "playbackRate": "Скорость воспроизведения", + "posterTooltip": "Значение по умолчанию - первый кадр видео.", + "autoPlayTooltip": "После загрузки видео оно будет воспроизводиться автоматически. Изменение этого значения с True на False приостановит воспроизведение видео. (Если установлен постер, он будет воспроизводиться кнопкой Poster)", + "controlsTooltip": "Скрыть элементы управления воспроизведением видео. Может поддерживаться не всеми источниками видео.", + "volumeTooltip": "Установка громкости проигрывателя, от 0 до 1", + "playbackRateTooltip": "Установите скорость игрока, между 1 и 2", + "srcDesc": "Текущий URI аудиофайла или строка Base64, например data:video/mp4", + "play": "Играть", + "playDesc": "Срабатывает при воспроизведении видео", + "pause": "Пауза", + "pauseDesc": "Срабатывает, когда видео приостанавливается", + "load": "Загрузить", + "loadDesc": "Срабатывает после завершения загрузки видеоресурса", + "ended": "Окончание", + "endedDesc": "Срабатывает по окончании воспроизведения видео", + "currentTimeStamp": "Текущая позиция воспроизведения видео в секундах", + "duration": "Общая продолжительность видео в секундах", + }, + "media": { + ...en.media, + + "playDesc": "Начинает воспроизведение носителя.", + "pauseDesc": "Приостанавливает воспроизведение мультимедиа.", + "loadDesc": "Сброс носителя на начало и перезапуск Выбор медиаресурса.", + "seekTo": "Ищите до заданного количества секунд или долей, если количество от 0 до 1", + "seekToAmount": "Количество секунд или дробь, если она от 0 до 1", + "showPreview": "Предварительный просмотр", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "Начальное значение", + "end": "Конечное значение", + "step": "Размер шага", + "stepTooltip": "Зернистость ползунка, значение должно быть больше 0 и делиться на (Max-Min)", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "Выберите значок", + "searchIcon": "Поиск значка", + "searchAnimation": "Поиск анимации", + "searchIllustration": "Поиск иллюстрации", + "insertIcon": "Вставить значок", + "insertImage": "Вставить изображение или", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "Выберите форму", + "insertShape": "Вставить фигуру", + "insertImage": "Вставить изображение или", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "Пожалуйста, введите правильный период тайм-аута в мс, текущий входной сигнал: {value}", + "timeoutLessThanMinError": "Вход должен быть больше, чем {left}, текущий вход составляет: {value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "Одиночка", + "multiple": "Множество", + "close": "Закрыть", + "mode": "Режим выбора строк", + }, + "container": { + ...en.container, + + "title": "Отображаемое название контейнера", + "titleTooltip": "Название контейнера", + "flowWidth": "Ширина содержимого", + "floatType": "Текст Тип поплавка", + }, + "drawer": { + ...en.drawer, + + "closePosition": "Размещение кнопки закрытия", + "placement": "Размещение ящиков", + "size": "Размер", + "top": "Топ", + "right": "Справа", + "center": "Центр", + "bottom": "Дно", + "left": "Слева", + "title": "Название ящика", + "titleAlign": "Согласование названий", + "widthTooltip": "Пиксель или процент, например, 520, 60%", + "heightTooltip": "Пиксель, например, 378", + "openDrawerDesc": "Открытый ящик", + "closeDrawerDesc": "Закрыть ящик", + "width": "Ширина ящика", + "height": "Высота ящика", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Уровень журнала Agora SDK", + "placement": "Размещение ящиков для совещаний", + "meeting": "Настройки совещаний", + "cameraView": "Посмотреть номер", + "cameraViewDesc": "Вид с камеры на локального пользователя (хост)", + "screenShared": "Общий экран", + "screenSharedDesc": "Экран, разделяемый локальным пользователем (хостом)", + "audioUnmuted": "Аудио без звука", + "audioMuted": "Приглушение звука", + "videoClicked": "Видео нажато", + "videoOff": "Видео выключено", + "videoOn": "Видео на", + "size": "Размер", + "top": "Топ", + "host": "Хост переговорной комнаты. Вам нужно будет управлять хостом как собственным Application Logic", + "participants": "Участники совещания", + "shareScreen": "Экран дисплея, разделяемый локальным пользователем", + "appid": "Идентификатор приложения Agora", + "meetingName": "Название встречи", + "localUserID": "Идентификатор пользователя хоста", + "userName": "Имя пользователя хоста", + "rtmToken": "Токен Agora RTM", + "rtcToken": "Токен Agora RTC", + "noVideo": "Нет видео", + "profileImageUrl": "URL-адрес изображения профиля", + "right": "Справа", + "bottom": "Дно", + "videoId": "Идентификатор видеопотока", + "audioStatus": "Состояние звука", + "left": "Слева", + "widthTooltip": "Пиксель или процент, например, 520, 60%", + "heightTooltip": "Пиксель, например, 378", + "openDrawerDesc": "Открытый ящик", + "closeDrawerDesc": "Закрыть ящик", + "width": "Ширина ящика", + "height": "Высота ящика", + "actionBtnDesc": "Кнопка действия", + "broadCast": "Широковещательные сообщения", + "title": "Название встречи", + "meetingCompName": "Agora Meeting Controller", + "sharingCompName": "Screen Share Stream", + "videoCompName": "Поток камер", + "videoSharingCompName": "Screen Share Stream", + "meetingControlCompName": "Кнопка со значком", + "meetingCompDesc": "Компонент встречи", + "meetingCompControls": "Управление совещаниями", + "meetingCompKeywords": "Agora Meeting, веб-совещания, совместная работа", + "iconSize": "Размер значка", + "userId": "Идентификатор пользователя хоста", + "roomId": "ID комнаты", + "meetingActive": "Текущая встреча", + "messages": "Передаваемые сообщения", + }, + "settings": { + ...en.settings, + + "title": "Настройки", + "userGroups": "Группы пользователей", + "organization": "Рабочие места", + "subscription": "Подписки", + "audit": "Журналы аудита", + "theme": "Темы", + "plugin": "Плагины", + "advanced": "Расширенный", + "apiDocs": "Документы API", + "lab": "Лаборатория", + "branding": "Брендинг", + "oauthProviders": "Аутентификация пользователей", + "appUsage": "Журналы использования приложений", + "environments": "Окружающая среда", + "premium": "Премиум", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "Журнал аудита Dasboard", + "AuditLogOverview": "Фильтр журнала", + "USER_LOGIN": "Вход в систему", + "USER_LOGOUT": "Выход пользователя из системы", + "APPLICATION_VIEW": "Посмотреть приложение", + "APPLICATION_CREATE": "Создать приложение", + "APPLICATION_DELETE": "Удалить приложение", + "APPLICATION_UPDATE": "Обновить приложение", + "APPLICATION_MOVE": "Переместить приложение", + "APPLICATION_RECYCLED": "Заявка на переработку", + "APPLICATION_RESTORE": "Восстановление приложения", + "APPLICATION_PUBLISH": "Издательство приложений", + "APPLICATION_VERSION_CHANGE": "Обновление версии приложения", + "APPLICATION_SHARING_CHANGE": "Изменение совместного использования приложений", + "APPLICATION_PERMISSION_CHANGE": "Разрешение на применение Изменение", + "FOLDER_CREATE": "Создать папку", + "FOLDER_DELETE": "Удалить папку", + "FOLDER_UPDATE": "Папка обновлений", + "QUERY_EXECUTION": "Выполнить запрос", + "GROUP_CREATE": "Создать группу", + "GROUP_UPDATE": "Группа обновления", + "GROUP_DELETE": "Удалить группу", + "GROUP_MEMBER_ADD": "Добавить члена группы", + "GROUP_MEMBER_ROLE_UPDATE": "Обновление роли члена группы", + "GROUP_MEMBER_LEAVE": "Группа отпусков", + "GROUP_MEMBER_REMOVE": "Удалить члена группы", + "SERVER_START_UP": "Запуск сервера", + "SERVER_INFO": "Просмотр информации о сервере", + "DATA_SOURCE_CREATE": "Создать источник данных", + "DATA_SOURCE_UPDATE": "Обновление источника данных", + "DATA_SOURCE_DELETE": "Удалить источник данных", + "DATA_SOURCE_PERMISSION_GRANT": "Предоставление разрешения на использование источника данных", + "DATA_SOURCE_PERMISSION_UPDATE": "Обновление разрешения источника данных", + "DATA_SOURCE_PERMISSION_DELETE": "Разрешение на удаление источника данных", + "LIBRARY_QUERY_CREATE": "Создать библиотечный запрос", + "LIBRARY_QUERY_UPDATE": "Обновление библиотечного запроса", + "LIBRARY_QUERY_DELETE": "Удалить библиотечный запрос", + "LIBRARY_QUERY_PUBLISH": "Опубликовать библиотечный запрос", + "API_CALL_EVENT": "Событие вызова API", + "logFilter": "Фильтр журнала", + "noLogsFound": "Журналы не найдены. Настройте фильтры и повторите попытку.", + "usageLogUserEngagement": "Вовлеченность пользователей по регионам", + "usageLogAppViews": "Использование приложений с течением времени", + "usageLogTopTen": "10 лучших приложений", + "usageLogAnonymousKNown": "Анонимные/известные пользователи", + "usageLogDevices": "Разбивка по устройствам/ОС", + "usageLogBrowsers": "Разбивка браузера/программного обеспечения", + "premiumFeaturesNotice": "Все премиум-функции доступны в корпоративной версии Lowcoder.", + "requestLicense": "Запрос лицензий Enterprise Edition", + "requestLicensesBtton": "Запрос доступа к предприятию", + "AuditLogsTitle": "Журналы аудита", + "AuditLogsIntroTitle": "Мощный обзор активности рабочего пространства", + "AuditLogsIntro1": "Журналы аудита позволяют администраторам отслеживать, что именно происходит на всей платформе Lowcoder. Каждое действие, от входа пользователя в систему до внесения изменений в приложение, фиксируется и сохраняется.", + "AuditLogsIntro2": "Мы включаем подробные метаданные, такие как геолокация, тип устройства, браузер и операционная система для каждого события.", + "AuditLogsIntro3": "Такая прозрачность позволяет отслеживать активность во всех подключенных средах, обеспечивая надежный аудиторский след для поддержки соответствия нормативным требованиям, безопасности и оперативной информации.", + "AuditLogsEventsTitle": "Какие события отслеживаются?", + "AuditLogsEventsIntro": "Следующие действия пользователя регистрируются в режиме реального времени:", + "SignIn": "Войти", + "Logout": "Выход из системы", + "ViewApp": "Посмотреть приложение", + "CreateApp": "Создайте новое приложение", + "DeleteApp": "Удалить приложение", + "UpdateApp": "Обновление приложения", + "MoveToFolder": "Переместить в папку", + "MoveToTrash": "Переместить в корзину", + "RestoreApp": "Восстановление приложения", + "CreateFolder": "Создайте новую папку", + "DeleteFolder": "Удалить папку", + "UpdateFolder": "Обновление папки", + "ExecuteDataQuery": "Выполнение запроса данных", + "CreateUserGroup": "Создайте новую группу пользователей", + "UpdateUserGroup": "Обновление группы пользователей", + "DeleteUserGroup": "Удалить группу пользователей", + "AddGroupMember": "Добавить члена группы пользователей", + "UpdateGroupMemberRole": "Обновление роли члена группы пользователей", + "LeaveUserGroup": "Оставить группу пользователей", + "RemoveGroupMember": "Удалить члена группы пользователей", + "ServerStartup": "Запуск сервера", + "CreateDataSource": "Создайте источник данных", + "UpdateDataSource": "Обновление источника данных", + "DeleteDataSource": "Удалить источник данных", + "GrantUpdateDeletePermission": "Предоставление или обновление разрешений", + "LibraryQueryActions": "Создание / обновление / удаление библиотечных запросов", + "PublishLibraryQuery": "Опубликовать библиотечный запрос", + "AuditLogsPreviewTitle": "Предварительный просмотр журнала аудита в действии (нажмите для увеличения)", + "ScreenshotPlaceholder1": "[ Скриншот 1 ]", + "ScreenshotPlaceholder2": "[ Скриншот 2 ]", + "ScreenshotPlaceholder3": "[ Скриншот 3 ]", + "PricingTitle": "Цены на корпоративную версию", + "PricingIntro": "Мы предлагаем гибкую ценовую политику для организаций любого размера, учитывающую вашу модель использования:", + "FlatRateTitle": "Вариант 1: фиксированная цена за экземпляр - $169 / месяц", + "FlatRateDesc": "Экземпляр - это полная среда Lowcoder (база метаданных + среда выполнения), которая может быть развернута независимо. Сюда входят:", + "FlatRatePoint1": "Специальное хранилище метаданных MongoDB", + "FlatRatePoint2": "Один или несколько режимов выполнения приложений (контейнеры \"Api-Service\" и/или \"Node-Service\")", + "UsagePricingTitle": "Вариант 2: ценообразование на основе использования - $0,001 за вызов API", + "UsagePricingDesc": "Каждый экземпляр может быть лицензирован в зависимости от использования API. Мы предлагаем пакеты с предоплатой:", + "API100k": "100 000 вызовов API - $100", + "API1M": "1 000 000 вызовов API - 1 000 долл.", + "API10M": "10 000 000 вызовов API - $10 000", + "UsageOverrunDesc": "Когда ваш пакет API закончится, мы предупредим вас об этом. Как только пакет будет израсходован, ваш экземпляр останется функциональным, но будет работать на пониженной скорости, чтобы предотвратить злоупотребления и сохранить справедливость.", + "UsageTopUpInfo": "Вы можете в любое время плавно добавлять дополнительные пакеты, чтобы обеспечить постоянный и быстрый доступ - без перебоев в обслуживании.", + "AppUsageTitle": "Журналы использования приложений", + "AppUsageIntroTitle": "Поймите, как используются ваши приложения", + "AppUsageIntro1": "Журналы использования приложений дают вам глубокое представление о том, как потребляются опубликованные вами приложения Lowcoder.", + "AppUsageIntro2": "Эта функциональность работает как встроенная, упрощенная версия Google Analytics - но полностью приватная и привязанная к вашему экземпляру Lowcoder.", + "AppUsageIntro3": "Администраторы могут проанализировать, как происходит обращение к приложениям с течением времени, какие из них используются чаще всего и откуда подключаются пользователи.", + "AppUsageMetricsTitle": "Показатели, которые вы можете отслеживать...", + "AppUsageMetricsIntro": "Эта аналитика поможет вам принимать обоснованные решения о вовлеченности и использовании платформы:", + "MetricActiveUsers": "Просмотры приложений в день / неделю / месяц (на основе временного фильтра)", + "MetricViewsPerApp": "10 лучших приложений", + "MetricDevices": "Доступ с разных устройств (настольных, планшетных, мобильных)", + "MetricBrowsers": "Доступ через браузер и ОС", + "MetricCountries": "Географическое происхождение пользователей", + "AppUsageScreenshotsTitle": "App Usage Analytics в действии (нажмите для увеличения)", + "AppUsageScreenshot1": "[ Снимок экрана App Usage Dashboard ].", + "AppUsageScreenshot2": "[ График просмотров приложений ]", + "AppUsageScreenshot3": "[ Географическая карта распространения ]", + "BrandingIntroTitle": "Индивидуальный брендинг и белая этикетка", + "BrandingIntro1": "С помощью настроек Lowcoders Branding вы можете повысить качество продукта для своих пользователей, предлагая полностью настраиваемый брендинг.", + "BrandingIntro2": "Дайте возможность вашим клиентам или внутренним командам использовать платформу как свою собственную - логотип, цвета, шрифты и пользовательские страницы включены.", + "BrandingIntro3": "Или вам нужно полностью белое решение и усиление фирменного стиля в каждой точке контакта.", + "BrandingColorsIntro1": "Вы можете задать собственную цветовую схему, соответствующую вашему фирменному стилю, включая основные элементы пользовательского интерфейса и навигационные панели.", + "BrandingColorsIntro2": "Настройте выделение боковых панелей, разделы заголовков и даже контрастность текста, чтобы повысить удобство использования и доступность.", + "BrandingFontsIntro": "Выбирайте шрифты Google, чтобы сделать ваше приложение по-настоящему стильным и удобным для чтения.", + "BrandingLogosIntro": "Естественно, вы можете загружать собственные логотипы - прямоугольные и квадратные - для отображения в заголовках, на приборных панелях и экранах входа в систему. Поддерживайте единообразие бренда на всех устройствах и экранах.", + "BrandingPagesIntro1": "Добавьте персонализированный текст и визуальные эффекты на страницы ошибок, потоки регистрации и сообщения о выходе из системы.", + "BrandingPagesIntro2": "Эти точки соприкосновения помогают обеспечить полностью брендированный опыт даже при неожиданных сценариях или переходе от одного аккаунта к другому.", + "BrandingMetaIntro": "Определите стандартные метаданные, такие как заголовок и описание страницы, чтобы улучшить SEO-присутствие и сообщение бренда.", + "BrandingHelpLinksIntro": "Добавляйте контекстно-зависимые ссылки на документацию прямо в приложение, предоставляя пользователям своевременную помощь.", + "BrandingWhatsNewIntro": "Активируйте раздел \"Что нового\", чтобы выделить обновления и анонсы продуктов в фирменном и заметном виде.", + "EnvironmentsIntroTitle": "Постановка лоукодера", + "EnvironmentsTitle": "Инфраструктура для нескольких сред", + "EnvironmentsIntro1": "Среды Lowcoder позволяют четко и безопасно разделить этапы Dev, Test и Prod.", + "EnvironmentsIntro2": "Корпоративные команды выигрывают от структурированных рабочих процессов выпуска, процессов утверждения и стабильности версий на всех этапах.", + "EnvironmentsIntro3": "С помощью функции Environments администраторы могут контролировать, что, когда и где будет развернуто - все из единого интерфейса.", + "EnvironmentsIntro4": "Lowcoder включает в себя множество типов объектов, таких как рабочие пространства, источники данных, запросы данных и приложения. Поскольку многие из этих объектов взаимосвязаны (например, источник данных может быть общим для нескольких приложений), чистый экспорт на основе Git не сможет последовательно отразить все зависимости. Вместо этого Lowcoder предлагает механизм выборочного, интегрированного развертывания непосредственно в пользовательском интерфейсе. Приложениями, источниками данных и запросами можно выборочно управлять и развертывать в разных средах. Управляемые объекты обеспечивают безопасное и контролируемое развертывание в средах.", + "yourDeploymentID": "Ваш идентификатор развертывания", + "EnvironmentsFeaturePreviewTitle": "Среды и развертывание в действии (нажмите для увеличения)", + "EnvironmentsUseCasesTitle": "Зачем использовать окружения? (Постановка)", + "EnvironmentsUseCase1": "Предотвратите непредвиденные изменения в производстве, тестируя приложения в специальных средах Dev или QA.", + "EnvironmentsUseCase2": "Приведите в соответствие с корпоративным ИТ-руководством поэтапное развертывание с возможностью отслеживания в ходе аудита.", + "EnvironmentsUseCase3": "Дайте возможность командам уверенно создавать конфигурации, данные и интеграции с учетом специфики среды.", + "EnvironmentsFeaturesTitle": "Что вы получите", + "EnvironmentsFeature1": "Централизованная приборная панель для просмотра и управления всеми средами Lowcoder.", + "EnvironmentsFeature2": "Развертывание приложений, источников данных и конфигураций между средами непосредственно из пользовательского интерфейса без использования дополнительных инструментов CI/CD.", + "EnvironmentsFeature3": "Контроль доступа и правила видимости для конкретной среды.", + "EnvironmentsFeature5": "Четкое разделение задач для стадийных, песочниц и производственных операций.", + "apiUsage": "Вызовы API.", + "loadingApiUsage": "Загрузка данных об использовании API...", + }, + "environments": { + ...en.environments, + + "title": "Окружающая среда", + "search": "Поиск", + "refresh": "Обновить", + "addEnvironment": "Добавить окружающую среду", + "errorLoadingEnvironments": "Ошибка при загрузке окружения", + "noEnvironmentsFoundMatching": "Не найдено окружений, соответствующих \"{searchText}\"", + "noEnvironmentsFound": "Среды не найдены. Создайте свое первое окружение, чтобы начать работу.", + "environmentsTypeLabel": "{type} Окружающая среда", + "showingAllEnvironments": "Показать все окружения {count}", + "unnamedEnvironment": "Неназванная среда", + "masterEnvironment": "Мастерская среда", + "viewAuditLogs": "Просмотр журналов аудита", + "id": "ID", + "domain": "Домен", + "master": "Мастер", + "license": "Лицензия", + "apiCalls": "Вызовы API", + "yes": "Да", + "no": "Нет", + "copyId": "Идентификатор копии", + "copied": "Скопировано!", + "percentUsed": "{percent}% используется", + "licenseStatus_checking": "Проверяем...", + "licenseStatus_licensed": "Лицензия", + "licenseStatus_unlicensed": "Требуется лицензия", + "licenseStatus_error": "Требуется установка", + "licenseStatus_unknown": "Неизвестный", + "detail_environmentNotFound": "Окружающая среда не найдена", + "detail_returnToEnvironmentsList": "Вернуться к списку сред", + "detail_environmentDetail": "Деталь окружающей среды", + "detail_environmentOverview": "Обзор окружающей среды", + "detail_noDomainSet": "Домен не установлен", + "detail_environmentId": "Идентификатор среды", + "detail_licenseStatus": "Статус лицензии", + "detail_licenseNeeded": "Необходима лицензия", + "detail_setupRequired": "Требуется установка", + "detail_created": "Создано", + "detail_unknown": "Неизвестный", + "detail_licenseDetails": "Подробности лицензии", + "detail_apiCallsRemaining": "Оставшиеся вызовы API", + "detail_totalApiCallsLimit": "Общий лимит вызовов API", + "detail_enterpriseEdition": "Enterprise Edition", + "detail_active": "Активный", + "detail_inactive": "Неактивный", + "detail_licenseInformation": "Информация о лицензии", + "detail_calls": "звонки", + "detail_licenses": "Лицензии", + "detail_license": "Лицензия", + "detail_workspaces": "Рабочие места", + "detail_userGroups": "Группы пользователей", + "detail_type": "Тип", + "detail_status": "Статус", + "detail_licensed": "Лицензия", + "detail_unlicensed": "Без лицензии", + "detail_apiKey": "Ключ API", + "detail_configured": "Настроенный", + "detail_notSet": "Не установлено", + "detail_masterEnv": "Мастер Энв", + "unlicensed_unlicensedDescription": "Для использования всех возможностей и функций этой среды необходима действующая лицензия. Убедитесь, что URL-адрес вашего API-сервиса правильно настроен, а плагин установлен.", + "unlicensed_errorDescription": "Мы столкнулись с проблемой при проверке лицензии. Пожалуйста, пересмотрите настройки конфигурации.", + "unlicensed_defaultDescription": "Для работы в этой среде требуется настройка лицензии.", + "unlicensed_contactLowcoderTeam": "Связаться с командой Lowcoder", + "unlicensed_editEnvironment": "Редактирование среды", + "unlicensed_backToEnvironments": "Назад к средам", + "unlicensed_helpText": "Нужна помощь? Свяжитесь с нашей командой для получения лицензионной поддержки или измените конфигурацию среды, чтобы решить эту проблему.", + "unlicensed_type": "Тип", + "unlicensed_status": "Статус", + "unlicensed_masterEnv": "Мастер Энв", + "unlicensed_licenseIssue": "Выдача лицензии", + "unlicensed_error": "Ошибка", + "unlicensed_missing": "Пропажа", + "error_itemNotFound": "Предмет, который вы ищете, не существует или у вас нет разрешения на его просмотр.", + "modal_createNewEnvironment": "Создать новую среду", + "modal_editEnvironment": "Редактирование среды", + "modal_cancel": "Отмена", + "modal_createEnvironment": "Создание среды", + "modal_saveChanges": "Сохранить изменения", + "modal_environmentName": "Название среды", + "modal_pleaseEnterName": "Пожалуйста, введите имя", + "modal_nameMinLength": "Имя должно состоять не менее чем из 2 символов", + "modal_enterEnvironmentName": "Введите имя среды", + "modal_description": "Описание", + "modal_enterDescription": "Введите описание", + "modal_stage": "Сцена", + "modal_pleaseSelectStage": "Пожалуйста, выберите этап", + "modal_selectStage": "Выберите этап", + "modal_development": "Развитие (DEV)", + "modal_testing": "Тестирование (TEST)", + "modal_preProduction": "Предварительное производство (PREPROD)", + "modal_production": "Производство (PROD)", + "modal_frontendUrl": "URL-адрес фронтенда", + "modal_pleaseEnterValidUrl": "Пожалуйста, введите действительный URL-адрес", + "modal_apiServiceUrl": "URL-адрес службы API", + "modal_nodeServiceUrl": "URL-адрес службы узла", + "modal_apiKey": "Ключ API", + "modal_enterApiKey": "Введите ключ API", + "modal_masterEnvironment": "Мастерская среда", + "modal_alreadyMasterEnvironment": "{name} уже является хозяином среды", + "modal_willBeMaster": "Будет мастером", + "modal_currentlyMaster": "В настоящее время мастер", + "modal_configurationRequirements": "Требования к конфигурации", + "modal_configurationRequirementsDesc": "Убедитесь, что URL-адрес службы API настроен и корректен, ключ API действителен, а для проверки лицензии убедитесь, что лицензия и плагин установлены правильно.", + "workspaces_title": "Рабочие места", + "workspaces_subtitle": "Управление рабочими пространствами в этой среде", + "workspaces_refresh": "Обновить", + "workspaces_errorLoadingWorkspaces": "Ошибка при загрузке рабочих пространств", + "workspaces_configurationIssue": "Проблема конфигурации", + "workspaces_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", + "workspaces_totalWorkspaces": "Всего рабочих мест", + "workspaces_managedWorkspaces": "Управляемые рабочие пространства", + "workspaces_unmanagedWorkspaces": "Неуправляемые рабочие места", + "workspaces_workspace": "Рабочее пространство", + "workspaces_role": "Роль", + "workspaces_status": "Статус", + "workspaces_managed": "Управляемый", + "workspaces_unmanaged": "Неуправляемый", + "workspaces_actions": "Действия", + "workspaces_viewAuditLogs": "Просмотр журналов аудита", + "workspaces_audit": "Аудит", + "workspaces_searchWorkspaces": "Поиск рабочих пространств по имени или идентификатору", + "workspaces_showAll": "Показать все", + "workspaces_managedOnly": "Только управляемые", + "workspaces_showingResults": "Показать {count} из {total} рабочих пространств", + "workspaces_paginationTotal": "{start}-{end} из {total} рабочих пространств", + "workspaces_noWorkspacesFound": "В этой среде не найдено ни одного рабочего пространства", + "userGroups_title": "Группы пользователей", + "userGroups_subtitle": "Управление группами пользователей в этой среде", + "userGroups_refresh": "Обновить", + "userGroups_errorLoadingUserGroups": "Ошибка при загрузке групп пользователей", + "userGroups_configurationIssue": "Проблема конфигурации", + "userGroups_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", + "userGroups_totalGroups": "Всего групп", + "userGroups_allUsersGroups": "Все группы пользователей", + "userGroups_developerGroups": "Группы разработчиков", + "userGroups_customGroups": "Пользовательские группы", + "userGroups_userGroup": "Группа пользователей", + "userGroups_type": "Тип", + "userGroups_allUsers": "Все пользователи", + "userGroups_developers": "Разработчики", + "userGroups_custom": "Пользовательское", + "userGroups_members": "Члены", + "userGroups_adminMembers": "Члены администрации", + "userGroups_created": "Создано", + "userGroups_totalMembersTooltip": "Общее количество участников в этой группе", + "userGroups_adminMembersTooltip": "Количество пользователей-администраторов в этой группе", + "userGroups_searchUserGroups": "Поиск групп пользователей по имени или идентификатору", + "userGroups_showingResults": "Показывает {count} из {total} групп пользователей", + "userGroups_paginationTotal": "{start}-{end} из {total} групп пользователей", + "userGroups_noUserGroupsFound": "В этой среде не найдено ни одной группы пользователей", + "apps_title": "Приложения", + "apps_subtitle": "Управление приложениями рабочего пространства", + "apps_refresh": "Обновить", + "apps_errorLoadingApps": "Ошибка при загрузке приложений", + "apps_configurationIssue": "Проблема конфигурации", + "apps_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", + "apps_totalApps": "Всего приложений", + "apps_publishedApps": "Опубликованные приложения", + "apps_managedApps": "Управляемые приложения", + "apps_unmanagedApps": "Неуправляемые приложения", + "apps_app": "Приложение", + "apps_status": "Статус", + "apps_published": "Опубликовано", + "apps_draft": "Проект", + "apps_managed": "Управляемый", + "apps_unmanaged": "Неуправляемый", + "apps_deploy": "Развернуть", + "apps_audit": "Аудит", + "apps_appMustBeManagedToDeploy": "Прежде чем развернуть приложение, им необходимо управлять", + "apps_deployThisApp": "Разверните это приложение в другой среде", + "apps_viewAuditLogs": "Просмотр журналов аудита", + "apps_searchApps": "Поиск приложений по имени или идентификатору", + "apps_showAll": "Показать все", + "apps_managedOnly": "Только управляемые", + "apps_showingResults": "Показать {count} из {total} приложений", + "apps_paginationTotal": "{start}-{end} из {total} приложений", + "apps_noAppsFound": "В этом рабочем пространстве не найдено ни одного приложения", + "apps_appRecycled": "Это приложение было перемещено в корзину", + "apps_managedSuccess": "{name} теперь управляется", + "apps_unmanagedSuccess": "{name} теперь неуправляемый", + "apps_managedError": "Не удалось изменить управляемый статус для {name}", + "dataSources_title": "Источники данных", + "dataSources_subtitle": "Управление соединениями данных рабочей области", + "dataSources_refresh": "Обновить", + "dataSources_errorLoadingDataSources": "Ошибка при загрузке источников данных", + "dataSources_configurationIssue": "Проблема конфигурации", + "dataSources_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", + "dataSources_totalDataSources": "Всего источников данных", + "dataSources_availableTypes": "Доступные типы", + "dataSources_managed": "Управляемый", + "dataSources_unmanaged": "Неуправляемый", + "dataSources_dataSource": "Источник данных", + "dataSources_type": "Тип", + "dataSources_status": "Статус", + "dataSources_deploy": "Развернуть", + "dataSources_audit": "Аудит", + "dataSources_dataSourceMustBeManagedToDeploy": "Перед развертыванием источника данных им необходимо управлять", + "dataSources_deployThisDataSource": "Разверните этот источник данных в другой среде", + "dataSources_viewAuditLogs": "Просмотр журналов аудита", + "dataSources_searchDataSources": "Поиск источников данных по имени или идентификатору", + "dataSources_showAll": "Показать все", + "dataSources_managedOnly": "Только управляемые", + "dataSources_showingResults": "Показывает {count} из {total} источников данных", + "dataSources_paginationTotal": "{start}-{end} из {total} источников данных", + "dataSources_noDataSourcesFound": "В этом рабочем пространстве не найдено ни одного источника данных", + "dataSources_managedSuccess": "{name} теперь управляется", + "dataSources_unmanagedSuccess": "{name} теперь неуправляемый", + "dataSources_managedError": "Не удалось изменить управляемый статус для {name}", + "queries_title": "Запросы", + "queries_subtitle": "Управление запросами API рабочего пространства", + "queries_refresh": "Обновить", + "queries_errorLoadingQueries": "Ошибка при загрузке запросов", + "queries_configurationIssue": "Проблема конфигурации", + "queries_missingConfiguration": "Отсутствует необходимая конфигурация: Ключ API или URL-адрес службы API", + "queries_totalQueries": "Всего запросов", + "queries_managed": "Управляемый", + "queries_unmanaged": "Неуправляемый", + "queries_query": "Запрос", + "queries_creator": "Создатель", + "queries_status": "Статус", + "queries_deploy": "Развернуть", + "queries_audit": "Аудит", + "queries_queryMustBeManagedToDeploy": "Прежде чем развернуть запрос, им необходимо управлять", + "queries_deployThisQuery": "Разверните этот запрос в другой среде", + "queries_viewAuditLogs": "Просмотр журналов аудита", + "queries_searchQueries": "Поисковые запросы по имени или идентификатору", + "queries_showAll": "Показать все", + "queries_managedOnly": "Только управляемые", + "queries_showingResults": "Показывать {count} из {total} запросов", + "queries_paginationTotal": "{start}-{end} из {total} запросов", + "queries_noQueriesFound": "В этом рабочем пространстве не найдено ни одного запроса", + "queries_managedSuccess": "{name} теперь управляется", + "queries_unmanagedSuccess": "{name} теперь неуправляемый", + "queries_managedError": "Не удалось изменить управляемый статус для {name}", + "deployModal_deployTitle": "Разверните {singularLabel}: {name}", + "deployModal_loadingEnvironments": "Загрузка окружения...", + "deployModal_sourceEnvironment": "Источник Экология", + "deployModal_targetEnvironment": "Целевая среда", + "deployModal_selectTargetEnvironment": "Выберите целевую среду", + "deployModal_selectTargetEnvironmentValidation": "Пожалуйста, выберите целевую среду", + "deployModal_confirmed": "Подтверждено", + "deployModal_cancel": "Отмена", + "deployModal_deploy": "Развернуть", + "deployModal_targetEnvironmentNotFound": "Целевая среда не найдена", + "deployModal_confirmCredentialOverwrite": "Пожалуйста, подтвердите перезапись учетных данных перед развертыванием", + "deployModal_deploySuccess": "Успешное развертывание {name} в целевой среде", + "deployModal_deployFailed": "Не удалось развернуть {singularLabel}", + "deployModal_selectFieldValidation": "Пожалуйста, выберите {label}", + "deployModal_selectFieldPlaceholder": "Выберите {label}", + "deployModal_inputFieldValidation": "Пожалуйста, введите {label}", + "deployModal_inputFieldPlaceholder": "Введите {label}", + "contactLowcoder_title": "Связаться с командой Lowcoder", + "contactLowcoder_environmentLabel": "Окружающая среда:", + "contactLowcoder_environmentIdLabel": "ID среды:", + "contactLowcoder_deploymentIdLabel": "Идентификатор развертывания:", + "contactLowcoder_loading": "Загрузка...", + "contactLowcoder_notAvailable": "Нет в наличии", + "contactLowcoder_unnamedEnvironment": "Неназванная среда", + "contactLowcoder_fetchingDeploymentInfo": "Получение информации о развертывании...", + "contactLowcoder_unableToLoadContactForm": "Невозможно загрузить контактную форму", + "contactLowcoder_apiConfigurationError": "URL-адрес службы API среды или ключ API не настроены", + "contactLowcoder_failedToFetchDeploymentId": "Не удалось получить идентификатор развертывания", + "contactLowcoder_ensureProperConfiguration": "Чтобы связаться со службой поддержки, убедитесь, что среда настроена правильно.", + "credentialConfirmations_firstConfirmation_title": "Предупреждение о перезаписи учетных данных", + "credentialConfirmations_firstConfirmation_message": "Это действие перезапишет существующие учетные данные в целевой среде.", + "credentialConfirmations_firstConfirmation_description": "Это серьезная операция, которая может повлиять на другие приложения и пользователей.", + "credentialConfirmations_firstConfirmation_question": "Вы уверены, что хотите продолжить?", + "credentialConfirmations_firstConfirmation_continueButton": "Продолжить", + "credentialConfirmations_firstConfirmation_cancelButton": "Отмена", + "credentialConfirmations_secondConfirmation_title": "Требуется окончательное подтверждение", + "credentialConfirmations_secondConfirmation_message": "Последнее предупреждение: Перезапись учетных данных", + "credentialConfirmations_secondConfirmation_description": "Вы собираетесь перезаписать учетные данные в целевой среде. Это действие нельзя отменить, и оно может нарушить существующую интеграцию.", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "Пожалуйста, подтвердите еще раз.", + "credentialConfirmations_secondConfirmation_finalQuestion": "Вы точно уверены, что хотите перезаписать учетные данные?", + "credentialConfirmations_secondConfirmation_confirmButton": "Да, перезапись учетных данных", + "credentialConfirmations_secondConfirmation_cancelButton": "Отмена", + "config_singularLabels_app": "Приложение", + "config_singularLabels_dataSource": "Источник данных", + "config_singularLabels_query": "Запрос", + "config_singularLabels_workspace": "Рабочее пространство", + "config_fields_updateDependenciesIfNeeded": "Обновление зависимостей при необходимости", + "config_fields_publishOnTarget": "Публикуйте в срок", + "config_fields_publicToAll": "Публично для всех", + "config_fields_publicToMarketplace": "От публики до рынка", + "config_fields_overwriteCredentials": "Перезапись учетных данных", + "services_environments_missingEnvironmentId": "Отсутствующий идентификатор среды", + "services_environments_failedToUpdateEnvironment": "Не удалось обновить среду", + "services_environments_environmentCreatedSuccessfully": "Среда создана успешно", + "services_environments_failedToCreateEnvironment": "Не удалось создать среду", + "services_environments_failedToFetchEnvironments": "Не удалось получить окружение", + "services_environments_failedToFetchEnvironment": "Не удалось получить информацию о среде", + "services_environments_environmentIdRequired": "Требуется идентификатор среды", + "services_environments_apiKeyRequiredForWorkspaces": "Для получения рабочих пространств требуется ключ API", + "services_environments_apiServiceUrlRequiredForWorkspaces": "Для получения рабочих пространств требуется URL-адрес службы API", + "services_environments_failedToFetchWorkspaces": "Не удалось получить рабочие пространства", + "services_environments_apiKeyRequiredForUserGroups": "Для получения информации о группах пользователей требуется ключ API", + "services_environments_apiServiceUrlRequiredForUserGroups": "URL-адрес службы API необходим для получения групп пользователей", + "services_environments_failedToFetchUserGroups": "Не удалось получить группы пользователей", + "services_environments_workspaceIdRequired": "Требуется идентификатор рабочей области", + "services_environments_apiKeyRequiredForApps": "Для получения приложений требуется ключ API", + "services_environments_apiServiceUrlRequiredForApps": "Для получения приложений требуется URL-адрес службы API", + "services_environments_failedToFetchWorkspaceApps": "Не удалось получить приложения рабочей области", + "services_environments_apiKeyRequiredForDataSources": "Для получения данных из источников требуется ключ API", + "services_environments_apiServiceUrlRequiredForDataSources": "URL-адрес службы API необходим для получения источников данных", + "services_environments_failedToFetchWorkspaceDataSources": "Не удалось получить источники данных рабочей области", + "services_environments_apiKeyRequiredForQueries": "Для получения запросов требуется ключ API", + "services_environments_apiServiceUrlRequiredForQueries": "URL-адрес службы API необходим для получения запросов", + "services_environments_failedToFetchWorkspaceQueries": "Не удалось получить запросы рабочей области", + "services_environments_apiServiceUrlNotConfigured": "URL-адрес службы API не настроен", + "services_environments_licenseCheckFailed": "Проверка лицензии не удалась", + "services_environments_apiKeyRequiredForDeploymentId": "Для получения идентификатора развертывания требуется ключ API", + "services_environments_failedToFetchDeploymentId": "Не удалось получить идентификатор развертывания", + "services_enterprise_missingEnvironmentId": "Отсутствующий идентификатор среды", + "services_enterprise_failedToFetchManagedWorkspaces": "Не удалось получить управляемые рабочие пространства", + "services_enterprise_missingRequiredParamsToConnectOrg": "Отсутствуют необходимые параметры для подключения рабочего пространства", + "services_enterprise_failedToConnectOrg": "Не удалось подключить рабочую область", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "Отсутствие GID рабочей области для отключения рабочей области", + "services_enterprise_failedToUnconnectOrg": "Не удалось отсоединить рабочее пространство", + "services_enterprise_failedToConnectApp": "Не удалось подключить приложение", + "services_enterprise_failedToUnconnectApp": "Не удалось отключить приложение", + "services_enterprise_failedToFetchDataSources": "Не удалось получить источники данных", + "services_enterprise_failedToDeployDataSource": "Не удалось развернуть источник данных", + "services_enterprise_failedToDisconnectManagedDataSource": "Не удалось отключить управляемый источник данных", + "services_enterprise_environmentIdRequired": "Требуется идентификатор среды", + "services_enterprise_failedToFetchQueries": "Не удалось получить запросы", + "services_enterprise_environmentIdAndQueryGidRequired": "Требуется идентификатор среды и GID запроса", + "services_enterprise_failedToDeployQuery": "Не удалось развернуть запрос", + "services_enterprise_queryGidRequired": "Требуется GID запроса", + "services_enterprise_failedToDisconnectQuery": "Не удалось отключить запрос", + "services_apps_failedToFetchApps": "Не удалось получить приложения", + "services_apps_failedToDeployApp": "Не удалось развернуть приложение", + "services_datasources_workspaceIdRequired": "Требуется идентификатор рабочей области", + "services_datasources_apiKeyRequiredToFetchDataSources": "Для получения данных из источников требуется ключ API", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "URL-адрес службы API необходим для получения источников данных", + "services_datasources_failedToFetchDataSources": "Не удалось получить источники данных", + "services_datasources_failedToDeployDataSource": "Не удалось развернуть источник данных", + "services_workspace_failedToFetchWorkspaces": "Не удалось получить рабочие пространства", + "services_workspace_failedToDeployWorkspace": "Не удалось развернуть рабочее пространство", + "services_managedObjects_missingRequiredParameters": "Отсутствие необходимых параметров", + "services_managedObjects_failedToCheckManagedStatus": "Не удалось проверить состояние управления", + "services_managedObjects_failedToSetAsManaged": "Не удалось установить {{objType}} в качестве управляемого", + "services_managedObjects_failedToRemoveFromManaged": "Не удалось удалить {{objType}} из управляемых", + "services_managedObjects_missingEnvironmentId": "Отсутствующий идентификатор среды", + "services_managedObjects_failedToFetchManagedObjects": "Не удалось получить управляемые объекты", + "services_managedObjects_failedToFetchManagedObject": "Не удалось получить управляемый объект", + "services_managedObjects_managedObjectNotFound": "Управляемый объект не найден для objGid: {{objGid}}", + "services_license_apiServiceUrlRequired": "Требуется URL-адрес службы API", + "services_license_licenseInformationUnavailable": "Информация о лицензии недоступна", + "services_license_licenseCheckTookTooLong": "Проверка лицензии заняла слишком много времени", + "services_license_licenseServiceNotAvailable": "Лицензионная служба недоступна", + "services_license_authenticationRequired": "Требуется аутентификация - пожалуйста, проверьте ключ API", + "services_license_licenseServiceTemporarilyUnavailable": "Лицензионный сервис временно недоступен", + "services_license_remainingAPICalls": "Осталось {{remaining}} ({{used}}/{{total}} использовано, {{percentage}}%)", + }, + "subscription": { + ...en.subscription, + + "details": "Подробности подписки", + "productDetails": "Подробнее о продукте", + "productName": "Название продукта", + "productDescription": "Описание товара", + "productPrice": "Цена продукта", + "subscriptionDetails": "Подробности подписки", + "status": "Статус", + "startDate": "Дата начала", + "currentPeriodEnd": "Конец текущего периода", + "customerId": "Идентификатор клиента", + "subscriptionItems": "Предметы подписки", + "itemId": "ID предмета", + "plan": "План", + "quantity": "Количество", + "product": "Продукт", + "invoices": "Счета-фактуры", + "invoiceNumber": "Номер счета-фактуры", + "date": "Дата", + "amount": "Сумма", + "link": "Ссылка на", + "viewInvoice": "Просмотреть счет-фактуру", + "downloadPDF": "Скачать PDF", + "billingReason": "Причина выставления счета", + "subscriptionCycle": "ежемесячная Подписка", + "customer": "Клиент", + "links": "Ссылки", + "paid": "Оплачивается", + "unpaid": "Неоплаченный", + "noInvoices": "Счета-фактуры отсутствуют", + "costVolumeDevelopment": "Развитие затрат/объемов", + "noUsageRecords": "Записи об использовании отсутствуют", + "itemDescription": "Описание товара", + "periodStart": "Начало периода", + "periodEnd": "Конец периода", + "billingReason.subscription_cycle": "Цикл подписки", + "billingReason.subscription_create": "Создание подписки", + "billingReason.manual": "Выставление счетов вручную", + "billingReason.upcoming": "Предстоящее выставление счетов", + "billingReason.subscription_threshold": "Порог подписки", + "billingReason.subscription_update": "Обновление подписки", + "backToSubscriptions": "Назад к подпискам", + "manageSubscription": "Управление подписками", + "subscriptionHelp": "Помощь при подписке", + "subscriptionHelpDescription": "Если у вас возникли вопросы, пожалуйста, свяжитесь с нами. Мы будем рады помочь вам. service@lowcoder.cloud", + "success": "Успех оплаты и подписки", + "successTitle": "Спасибо, что присоединились к семье Lowcoder!", + "successThankYou": "Мы очень рады, что вы стали нашим сотрудником! Ваше доверие к Lowcoder значит для нас все, и мы стремимся обеспечить исключительный опыт с первого дня.\n\nВ Lowcoder вы не просто клиент, вы - часть сообщества, которое способствует инновациям и росту. Наша миссия - помочь вам легко достичь поставленных целей, будь то быстрое решение проблем, создание инновационных решений или поддержка в любой момент.\n\nВот на что вы можете рассчитывать:\n\n- Первоклассная поддержка: Наша команда готова помочь вам на каждом шагу.\n- Постоянные инновации: Мы постоянно совершенствуемся, чтобы предложить вам лучшие инструменты и функции.\n- Партнерство во имя успеха: Ваш успех - наш приоритет.\n\nСпасибо, что вдохновляете нас расширять границы и стремиться к совершенству каждый день. Нам не терпится увидеть, что мы построим вместе.\n\nДобро пожаловать на борт! Давайте делать необычные вещи.", + "successLowcoderTeam": "Команда Lowcoder", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "Ошибка при получении сведений о продукте.", + "fetchSubscriptionDetails": "Ошибка при получении данных о подписке.", + "fetchInvoices": "Ошибка при получении счетов-фактур.", + }, + "auditLog": { + ...en.auditLog, + + "title": "Детали журнала аудита", + "geoLocation": "Геолокация", + "browserData": "Метаданные браузера / системы", + "browser": "Браузер", + "OS": "OS", + "device": "Устройство", + "deviceType": "Тип устройства", + "engine": "Двигатель", + "webview": "Webview", + "eventDetail": "Деталь события", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "Администратор", + "superAdmin": "Супер-администратор", + "adminGroupRoleInfo": "Администратор может управлять членами группы и ресурсами", + "adminOrgRoleInfo": "Администраторы владеют всеми ресурсами и могут управлять группами.", + "member": "Член", + "memberGroupRoleInfo": "Участник может просматривать членов группы", + "memberOrgRoleInfo": "Участники могут использовать или посещать только те ресурсы, к которым у них есть доступ.", + "title": "Члены", + "createGroup": "Создать группу", + "newGroupPrefix": "Новая группа", + "allMembers": "Все члены", + "deleteModalTitle": "Удалить эту группу", + "deleteModalContent": "Удаленная группа не может быть восстановлена. Вы уверены, что удалите группу?", + "addMember": "Добавить участников", + "nameColumn": "Имя пользователя", + "joinTimeColumn": "Время присоединения", + "actionColumn": "Операция", + "roleColumn": "Роль", + "exitGroup": "Группа \"Выход", + "moveOutGroup": "Удалить из группы", + "inviteUser": "Пригласить участников", + "exitOrg": "Оставить", + "exitOrgDesc": "Вы уверены, что хотите покинуть это рабочее место?", + "moveOutOrg": "Удалить", + "moveOutOrgDescSaasMode": "Вы уверены, что хотите удалить пользователя {name} из этого рабочего пространства?", + "moveOutOrgDesc": "Вы уверены, что хотите удалить пользователя {name}? Это действие не может быть восстановлено.", + "devGroupTip": "Члены группы разработчиков имеют привилегии на создание приложений и источников данных.", + "lastAdminQuit": "Последний администратор не может выйти.", + "organizationNotExist": "Текущая рабочая область не существует", + "inviteUserHelp": "Вы можете скопировать ссылку на приглашение, чтобы отправить его пользователю", + "inviteUserLabel": "Ссылка на приглашение:", + "inviteCopyLink": "Копировать ссылку", + "inviteText": "{userName} приглашает вас присоединиться к рабочему пространству \"{organization}\", нажмите на ссылку, чтобы присоединиться: {inviteLink}", + "inviteByEmailHelp": "Вы можете ввести один или несколько адресов электронной почты для отправки ссылок на приглашения.", + "inviteByEmailLabel": "Введите электронную почту:", + "inviteByEmailButton": "Отправить приглашения", + "inviteByEmailSuccess": "Приглашения отправлены успешно!", + "inviteByEmailError": "При отправке приглашений что-то пошло не так. Пожалуйста, попробуйте еще раз.", + "noValidEmails": "Не найдено ни одного действительного электронного письма", + "groupName": "Название группы", + "createTime": "Создать время", + "manageBtn": "Управление", + "userDetail": "Деталь", + "syncDeleteTip": "Эта группа была удалена из источника адресной книги", + "syncGroupTip": "Эта группа является группой синхронизации адресной книги и не может быть отредактирована", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "Новое рабочее пространство (Организация)", + "title": "Рабочее пространство", + "createOrg": "Создать рабочее пространство (организация)", + "deleteModalTitle": "Вы уверены, что хотите удалить это рабочее пространство?", + "deleteModalContent": "Вы собираетесь удалить это рабочее пространство {permanentlyDelete}. После удаления рабочее пространство {notRestored}.", + "permanentlyDelete": "Постоянно", + "notRestored": "Невозможно восстановить", + "deleteModalLabel": "Введите имя рабочей области {name}, чтобы подтвердить операцию:", + "deleteModalTip": "Введите имя рабочей области", + "deleteModalErr": "Неверное имя рабочей области", + "deleteModalBtn": "Удалить", + "editOrgTitle": "Редактирование информации о рабочей области", + "orgNameLabel": "Имя рабочего пространства:", + "orgNameCheckMsg": "Имя рабочей области не может быть пустым", + "orgLogo": "Логотип рабочего пространства:", + "logoModify": "Изменить изображение", + "inviteSuccessMessage": "Успешное присоединение к рабочему пространству", + "inviteFailMessage": "Не удалось присоединиться к рабочему пространству", + "uploadErrorMessage": "Ошибка загрузки", + "orgName": "Имя рабочей области", + }, + "freeLimit": "Бесплатная пробная версия", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "Вкладка \"Переключение", + "switchTabDesc": "Срабатывает при переключении вкладок", + "tab": "Табы", + "atLeastOneTabError": "В контейнере для вкладок хранится как минимум одна вкладка", + "selectedTabKeyDesc": "Выбранная вкладка", + "iconPosition": "Положение значка", + "placement": "Размещение вкладок", + "showTabs": "Показать вкладки", + "gutter": "Gap", + "gutterTooltip": "Расстояние между вкладками в px", + "tabsCentered": "Вкладки по центру", + "destroyInactiveTab": "Уничтожить неактивную панель вкладок", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "Перетащите компоненты с правой панели или", + "openDialogButton": "Создайте форму на основе одного из источников данных", + "resetAfterSubmit": "Сброс после успешной отправки", + "initialData": "Исходные данные", + "disableSubmit": "Отключить отправку", + "success": "Форма сгенерирована успешно", + "selectCompType": "Выберите тип компонента", + "dataSource": "Источник данных:", + "invalidFormMessage": "Пользовательское сообщение о неправильной форме", + "selectSource": "Выберите источник", + "table": "Таблица:", + "selectTable": "Выберите таблицу", + "columnName": "Имя колонки", + "dataType": "Тип данных", + "compType": "Тип компонента", + "required": "Требуется", + "generateForm": "Создать форму", + "compSelectionError": "Тип ненастроенного столбца", + "compTypeNameError": "Не удалось получить имя типа компонента", + "noDataSourceSelected": "Источник данных не выбран", + "noTableSelected": "Нет выбранного стола", + "noColumn": "Нет колонки", + "noColumnSelected": "Колонка не выбрана", + "noDataSourceFound": "Не найден поддерживаемый источник данных. Создайте новый источник данных", + "noTableFound": "В этом источнике данных не найдено таблиц, выберите другой источник данных", + "noColumnFound": "В этой таблице не найдено поддерживаемых столбцов. Пожалуйста, выберите другую таблицу", + "formTitle": "Название формы", + "name": "Имя", + "nameTooltip": "Имя атрибута в данных формы, оставленное пустым, по умолчанию соответствует имени компонента", + "notSupportMethod": "Методы не поддерживаются:", + "notValidForm": "Форма недействительна", + "resetDesc": "Сброс данных формы на значение по умолчанию", + "clearDesc": "Очистить данные формы", + "setDataDesc": "Установить данные формы", + "valuesLengthError": "Номер параметра Ошибка", + "valueTypeError": "Тип параметра Ошибка", + "dataDesc": "Данные текущей формы", + "loadingDesc": "Загружается ли форма?", + }, + "modalComp": { + ...en.modalComp, + + "open": "Открыть", + "openDesc": "Срабатывает при открытии модального диалогового окна", + "close": "Закрыть", + "closeDesc": "Срабатывает при закрытии модального диалогового окна", + "openModalDesc": "Откройте диалоговое окно", + "closeModalDesc": "Закрыть диалоговое окно", + "visibleDesc": "Видима ли она? Если да, появится текущее диалоговое окно", + "title": "Название ящика", + "titleAlign": "Выравнивание по названию", + "modalHeight": "Модальная высота", + "modalHeightTooltip": "Пиксель, пример: 222", + "modalWidth": "Ширина модала", + "modalWidthTooltip": "Число или процент, Пример: 520, 60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "Счетчик строк", + "noOfRowsTooltip": "Количество строк в списке - обычно задается переменной (например, '{{query1.data.length}}') для представления результатов запроса", + "noOfColumns": "Счетчик колонок", + "itemIndexName": "Имя индекса элемента данных", + "itemIndexNameDesc": "Имя переменной, указывающее на индекс элемента, по умолчанию {default}", + "itemDataName": "Имя объекта элемента данных", + "itemDataNameDesc": "Имя переменной, относящееся к объекту данных элемента, по умолчанию {default}", + "itemsDesc": "Раскрытие данных компонентов в списке", + "dataDesc": "Данные JSON, используемые в текущем списке", + "dataTooltip": "Если вы просто зададите число, это поле будет рассматриваться как Row Count, а данные будут считаться пустыми.", + "enableSorting": "Разрешить сортировку", + }, + "navigation": { + ...en.navigation, + + "addText": "Добавить элемент подменю", + "logoURL": "Навигация Логотип URL", + "horizontalAlignment": "Горизонтальное выравнивание", + "logoURLDesc": "Вы можете отобразить логотип на левой стороне, введя значение URI или строку Base64, например data:image/png", + "itemsDesc": "Элементы иерархического навигационного меню", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "Подменю {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "Активный", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "URL-адрес источника содержимого IFrame. Убедитесь, что URL-адрес является HTTPS или localhost. Также убедитесь, что URL не заблокирован политикой безопасности содержимого (CSP) браузера. Заголовок 'X-Frame-Options' не должен быть установлен на 'DENY' или 'SAMEORIGIN'.", + "allowDownload": "Разрешить загрузку", + "allowSubmitForm": "Разрешить отправку формы", + "allowMicrophone": "Разрешить микрофон", + "allowCamera": "Разрешить камеру", + "allowPopup": "Разрешить всплывающие окна", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "Булево значение по умолчанию", + "open": "На сайте", + "close": "С сайта", + "openDesc": "Срабатывает при включении выключателя", + "closeDesc": "Срабатывает при выключении выключателя", + "valueDesc": "Текущее состояние переключателя", + }, + "signature": { + ...en.signature, + + "tips": "Текст подсказки", + "signHere": "Подпишитесь здесь", + "showUndo": "Показать отмену", + "showClear": "Показать чистоту", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "Все элементы данных, хранящиеся в данный момент", + "setItemDesc": "Добавить элемент", + "removeItemDesc": "Удалить элемент", + "clearItemDesc": "Очистить все элементы", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "Открытый URL", + "openApp": "Открытое приложение", + "copyToClipboard": "Копировать в буфер обмена", + "downloadFile": "Скачать файл", + "logoutUser": "Выход пользователя из системы", + "resetPassword": "Сброс пароля", + }, + "messageComp": { + ...en.messageComp, + + "info": "Отправить уведомление", + "loading": "Отправить уведомление о загрузке", + "success": "Отправить уведомление об успехе", + "warn": "Отправить уведомление о предупреждении", + "error": "Отправить уведомление об ошибке", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "закрыть уведомление", + "info": "Отправить уведомление", + "loading": "Отправить уведомление о загрузке", + "success": "Отправить уведомление об успехе", + "warn": "Отправить уведомление о предупреждении", + "error": "Отправить уведомление об ошибке", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "Switch Theme", + }, + "transformer": { + ...en.transformer, + + "preview": "Предварительный просмотр", + "docLink": "Подробнее о трансформерах...", + "previewSuccess": "Предварительный просмотр Успех", + "previewFail": "Предварительный просмотр Неудача", + "deleteMessage": "Удаление трансформера успешно. Вы можете использовать {undoKey} для отмены.", + "documentationText": "Трансформаторы предназначены для преобразования данных и повторного использования вашего многострочного кода JavaScript. Используйте трансформаторы для адаптации данных из запросов или компонентов к потребностям вашего локального приложения. В отличие от JavaScript-запросов, трансформатор предназначен для выполнения операций только для чтения, что означает, что вы не можете запустить запрос или обновить временное состояние внутри трансформатора.", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "Начальное значение", + "valueTooltip": "Начальное значение, хранящееся во временном состоянии, может быть булевым, строковым, числовым или любым другим допустимым значением JSON.", + "docLink": "Подробнее о временных штатах...", + "pathTypeError": "Путь должен быть либо строкой, либо массивом значений", + "unStructuredError": "Неструктурированные данные {prev} не могут быть обновлены {path}", + "valueDesc": "Временное государственное значение", + "deleteMessage": "Временное состояние удалено успешно. Вы можете использовать {undoKey} для отмены.", + "documentationText": "Временные состояния - это мощная функция, используемая для управления сложными переменными, которые динамически обновляют состояние компонентов в вашем приложении. Эти состояния выступают в качестве промежуточного или переходного хранилища для данных, которые могут изменяться со временем из-за взаимодействия с пользователем или других процессов.", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "Данные", + "dataDesc": "Данные текущего респондента", + "dataTooltip": "Когда эти данные изменятся, это послужит толчком к последующим действиям.", + "docLink": "Подробнее о респондентах...", + "deleteMessage": "Ответчик данных успешно удален. Вы можете использовать {undoKey} для отмены.", + "documentationText": "При разработке приложения вы можете назначать события компонентам, чтобы отслеживать изменения определенных данных. Например, компонент Table может иметь такие события, как \"Изменение выбора строки\", \"Изменение фильтра\", \"Изменение сортировки\" и \"Изменение страницы\" для отслеживания изменений в свойстве selectedRow. Однако для изменений во временных состояниях, трансформаторах или результатах запросов, когда стандартные события недоступны, используются ответчики данных. Они позволяют обнаруживать и реагировать на любые изменения данных.", + }, + "theme": { + ...en.theme, + + "title": "Темы", + "createTheme": "Создать тему", + "themeName": "Название темы:", + "themeNamePlaceholder": "Пожалуйста, введите название темы", + "defaultThemeTip": "Тема по умолчанию:", + "createdThemeTip": "Тема, которую вы создали:", + "option": "Option{index}", + "input": "Вход", + "confirm": "Хорошо", + "emptyTheme": "Темы не доступны", + "click": "", + "toCreate": "", + "nameColumn": "Имя", + "defaultTip": "По умолчанию", + "updateTimeColumn": "Время обновления", + "edit": "Редактировать", + "cancelDefaultTheme": "Неустановленная тема по умолчанию", + "setDefaultTheme": "Установите тему по умолчанию", + "copyTheme": "Дублирование темы", + "setSuccessMsg": "Установка удалась", + "cancelSuccessMsg": "Унсеттинг преуспел", + "deleteSuccessMsg": "Удаление прошло успешно", + "checkDuplicateNames": "Название темы уже существует, пожалуйста, введите его заново", + "copySuffix": " Копировать", + "saveSuccessMsg": "Сохранено успешно", + "leaveTipTitle": "Советы", + "leaveTipContent": "Вы еще не сохранились, подтверждаете уход?", + "leaveTipOkText": "Оставить", + "goList": "Назад к списку", + "saveBtn": "Сохранить", + "mainColor": "Основные цвета", + "text": "Цвета текста", + "layout": "Настройки макета", + "fonts": "Настройки шрифта", + "components": "Шаблоны компонентов", + "charts": "Определение eCharts", + "defaultTheme": "По умолчанию", + "yellow": "Желтый", + "green": "Зеленый", + "previewTitle": "Предварительный просмотр темы\nПримеры компонентов, использующих цвета вашей темы", + "dateColumn": "Дата", + "emailColumn": "Электронная почта", + "phoneColumn": "Телефон", + "subTitle": "Название", + "linkLabel": "Ссылка на", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "Прогресс", + "sliderLabel": "Слайдер", + "radioLabel": "Радио", + "checkboxLabel": "Флажок", + "buttonLabel": "Кнопка формы", + "switch": "Переключатель", + "previewDate": "16/10/2022", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "balloon.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "Предварительный просмотр стиля диаграммы", + "chartSpending": "Расходы", + "chartBudget": "Бюджет", + "chartAdmin": "Администрация", + "chartFinance": "Финансы", + "chartSales": "Продажи", + "chartFunnel": "Диаграмма воронки", + "chartShow": "Показать", + "chartClick": "Нажмите", + "chartVisit": "Посетите", + "chartQuery": "Запрос", + "chartBuy": "Купить", + "canvas": "Настройки холста", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "Фирменный цвет", + "primaryDesc": "Основной цвет по умолчанию, используемый большинством компонентов", + "textDark": "Темный цвет текста", + "textDarkDesc": "Используется, когда цвет фона светлый", + "textLight": "Светлый цвет текста", + "textLightDesc": "Используется, когда цвет фона темный", + "canvas": "Цвет холста", + "canvasDesc": "Цвет фона приложения по умолчанию", + "primarySurface": "Цвет контейнера", + "primarySurfaceDesc": "Цвет фона по умолчанию для таких компонентов, как таблицы", + "borders": "Пограничные стили", + "spacing": "Стили интервалов", + "font": "Стили шрифтов", + "fonts": "Шрифты", + "borderRadius": "Радиус границы", + "borderRadiusDesc": "Радиус границы по умолчанию, используемый большинством компонентов", + "borderColor": "Цвет границы", + "borderColorDesc": "Цвет границы по умолчанию, используемый большинством компонентов", + "borderWidth": "Ширина границы", + "borderWidthDesc": "Ширина границы по умолчанию, используемая большинством компонентов", + "borderStyle": "Пограничный стиль", + "borderStyleDesc": "Стиль границы по умолчанию, используемый большинством компонентов", + "fontFamily": "Семейство шрифтов", + "fontFamilyDesc": "Семейство шрифтов по умолчанию, используемое большинством компонентов", + "chart": "Стиль диаграммы", + "chartDesc": "Здесь вы можете разместить eCharts Theme JSON, чтобы определить стиль ваших диаграмм во всех деталях.", + "echartsJson": "Вы можете воспользоваться Генератором JSON темы. Скопируйте JSON из генератора и вставьте его сюда.", + "margin": "Маржа", + "marginDesc": "Маржа по умолчанию, обычно используемая для большинства компонентов", + "padding": "Набивка", + "paddingDesc": "Подкладка по умолчанию, обычно используемая для большинства компонентов", + "containerHeaderPadding": "Подшивка заголовков", + "containerheaderpaddingDesc": "Подложка заголовка по умолчанию, обычно используемая для большинства компонентов", + "gridColumns": "Колонки сетки", + "gridColumnsDesc": "Количество столбцов по умолчанию, обычно используемое для большинства контейнеров", + "loadingIndicators": "Индикаторы загрузки", + "showComponentLoadingIndicators": "Показывайте индикаторы загрузки при загрузке компонента", + "showDataLoadingIndicators": "Отображение индикаторов во время загрузки данных", + "dataLoadingIndicator": "Индикатор загрузки данных", + "background": "Фоновые стили", + "gridSettings": "Настройки сетки", + "gridRowHeight": "Высота строки сетки", + "gridRowHeightDesc": "Высота каждого ряда в сетке", + "gridRowCount": "Счетчик строк сетки", + "gridRowCountDesc": "Максимальное количество строк в сетке", + "gridPaddingX": "Горизонтальная прокладка", + "gridPaddingXDesc": "Горизонтальная подложка холста", + "gridPaddingY": "Вертикальные прокладки", + "gridPaddingYDesc": "Вертикальная подложка холста", + "gridBgImage": "Фоновое изображение", + "gridBgImageDesc": "Фоновое изображение на холсте", + "gridBgImageRepeat": "Повтор фонового изображения", + "gridBgImageRepeatDesc": "Повторение фонового изображения на холсте", + "gridBgImageSize": "Размер фонового изображения", + "gridBgImageSizeDesc": "Размер фонового изображения на холсте", + "gridBgImagePosition": "Положение фонового изображения", + "gridBgImagePositionDesc": "Положение фонового изображения на холсте", + "gridBgImageOrigin": "Происхождение фонового изображения", + "gridBgImageOriginDesc": "Происхождение фонового изображения на холсте", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "Плагины", + "npmPluginTitle": "плагины npm", + "npmPluginDesc": "Установите плагины npm для всех приложений в текущем рабочем пространстве.", + "npmPluginEmpty": "Плагины npm не были добавлены.", + "npmPluginAddButton": "Добавьте плагин npm", + "saveSuccess": "Сохранено успешно", + }, + "advanced": { + ...en.advanced, + + "title": "Расширенный", + "defaultHomeTitle": "Домашняя страница по умолчанию", + "defaultHomeHelp": "Домашняя страница - это приложение, которое все пользователи, не являющиеся разработчиками, будут видеть по умолчанию при входе в систему. Примечание: Убедитесь, что выбранное приложение доступно для пользователей, не являющихся разработчиками.", + "defaultHomePlaceholder": "Выберите домашнюю страницу по умолчанию", + "saveBtn": "Сохранить", + "preloadJSTitle": "Предварительная загрузка JavaScript", + "preloadJSHelp": "Установите предварительно загруженный код JavaScript для всех приложений в текущей рабочей области.", + "preloadCSSTitle": "Предварительная загрузка CSS", + "preloadCSSHelp": "Установите предварительно загруженный код CSS для всех приложений в текущей рабочей области.", + "preloadCSSApply": "Применить к домашней странице рабочей области", + "preloadLibsTitle": "Библиотека JavaScript", + "preloadLibsHelp": "Установите предварительно загруженные библиотеки JavaScript для всех приложений в текущем рабочем пространстве, и система имеет встроенные lodash, day.js, uuid, numbro для прямого использования. Библиотеки JavaScript загружаются до инициализации приложения, поэтому это оказывает определенное влияние на производительность приложения.", + "preloadLibsEmpty": "Библиотеки JavaScript не были добавлены", + "preloadLibsAddBtn": "Добавить библиотеку", + "saveSuccess": "Сохранено успешно", + "AuthOrgTitle": "Экран приветствия рабочей области", + "AuthOrgDescrition": "URL-адрес для входа ваших пользователей в текущее рабочее пространство.", + "APIConsumption": "Потребление API", + "APIConsumptionDescription": "Здесь вы можете увидеть потребление API для всех приложений в текущем рабочем пространстве.", + "overallAPIConsumption": "Общее потребление API в этой рабочей области до настоящего времени", + "lastMonthAPIConsumption": "Потребление API за последний месяц в данной рабочей области", + "npmRegistryTitle": "Пользовательский реестр NPM", + "npmRegistryHelp": "Настройте пользовательский реестр NPM, чтобы обеспечить получение плагинов из частного реестра NPM.", + "showHeaderInPublicApps": "Показать заголовок в публичном представлении", + "showHeaderInPublicAppsHelp": "Настройка видимости заголовка в публичном представлении для всех приложений", + }, + "branding": { + ...en.branding, + + "title": "Настройки брендинга", + "general": "Общие настройки", + "selectWorkspace": "Выберите рабочую область", + "brandingName": "Название бренда", + "brandingNamePlaceholder": "Введите название бренда", + "brandingDescription": "Описание брендинга", + "brandingDescriptionPlaceholder": "Введите описание брендинга", + "logoSection": "Логотипы", + "logo": "Логотип", + "logoHelp": "Загрузите логотип вашей компании в формате SVG или PNG.", + "logoUrlHelp": "Укажите правильный url изображения для логотипа.", + "logoUrlPlaceholder": "url изображения поставщика для логотипа", + "squareLogo": "Квадратный логотип", + "squareLogoHelp": "Загрузите квадратную версию вашего логотипа в формате SVG или PNG.", + "squareLogoUrlHelp": "Предоставьте правильный url изображения для логотипа Square.", + "squareLogoUrlPlaceholder": "Предоставьте url для логотипа Square.", + "colorFontSection": "Цвета и шрифты", + "mainBrandingColor": "Основной цвет брендинга", + "mainBrandingColorHelp": "Выберите основной цвет для своего брендинга.", + "editorHeaderColor": "Цвет заголовка приложения", + "editorHeaderColorHelp": "Выберите цвет для заголовка приложения.", + "adminSidebarColor": "Цвет боковой панели администратора", + "adminSidebarColorHelp": "Выберите цвет для боковой панели администратора.", + "adminSidebarFontColor": "Цвет шрифта боковой панели администратора", + "adminSidebarFontColorHelp": "Выберите цвет шрифта для боковой панели администратора.", + "adminSidebarActiveBgColor": "Цвет фона выбранного элемента боковой панели администратора", + "adminSidebarActiveBgColorHelp": "Выберите цвет фона выбранного элемента для боковой панели администратора.", + "adminSidebarActiveFontColor": "Цвет шрифта выбранного элемента боковой панели администратора", + "adminSidebarActiveFontColorHelp": "Выберите цвет шрифта выбранного элемента для боковой панели администратора.", + "editorSidebarColor": "Цвет боковой панели редактора", + "editorSidebarColorHelp": "Выберите цвет для боковой панели редактора.", + "editorSidebarFontColor": "Цвет шрифта боковой панели редактора", + "editorSidebarFontColorHelp": "Выберите цвет шрифта для боковой панели редактора.", + "editorSidebarActiveBgColor": "Цвет фона выбранного элемента боковой панели редактора", + "editorSidebarActiveBgColorHelp": "Выберите цвет фона выбранного элемента для боковой панели редактора.", + "editorSidebarActiveFontColor": "Цвет шрифта выбранного элемента боковой панели редактора", + "editorSidebarActiveFontColorHelp": "Выберите цвет шрифта выбранного элемента для боковой панели редактора.", + "font": "Шрифт", + "fontHelp": "Выберите шрифт из Google Fonts для своего приложения.", + "textSection": "Тексты и страницы", + "errorPage": "Текст страницы ошибки", + "errorPageHelp": "Введите текст, отображаемый на странице ошибки.", + "signUpPage": "Текст страницы регистрации", + "signUpPageHelp": "Введите текст, отображаемый на странице регистрации.", + "loggedOutPage": "Текст страницы, с которой вы вошли в систему", + "loggedOutPageHelp": "Введите текст, отображаемый на странице выхода из системы.", + "standardDescription": "Стандартное описание", + "standardDescriptionHelp": "Введите стандартное описание для метаинформации SEO.", + "standardTitle": "Стандартное название", + "standardTitleHelp": "Введите стандартный заголовок для метаинформации SEO.", + "showDocumentation": "Показать документацию", + "submitIssue": "Разрешить выдачу", + "whatsNew": "Включить Что нового", + "saveButton": "Сохранить настройки", + "errorPageImage": "Загрузите изображение для страницы ошибок в формате SVG или PNG.", + "errorPageImageUrl": "URL-адрес изображения для страницы ошибки", + "errorPageImageUrlPlaceholder": "url изображения провайдера для страницы ошибок", + "errorPageImageUrlHelp": "Предоставьте правильный url изображения для отображения на странице ошибки.", + "signUpPageImage": "Загрузите изображение для страницы регистрации в формате SVG или PNG.", + "signUpPageImageUrl": "URL-адрес изображения для страницы регистрации", + "signUpPageImageUrlPlaceholder": "url изображения поставщика для страницы регистрации", + "signUpPageImageUrlHelp": "Предоставьте правильный url изображения для отображения на странице регистрации.", + "loggedOutPageImage": "Загрузите изображение для страницы входа в систему в формате SVG или PNG.", + "showDocumentationSection": "Настройки ссылок на документацию", + "showWhatsNewSection": "Что нового Настройки ссылок", + "documentationLink": "Документация по ссылке", + "documentationLinkPlaceholder": "Введите URL-адрес вашей документации...", + "documentationLinkHelp": "Укажите действительный URL-адрес, который пользователи могут посетить для получения документации.", + "whatsNewSection": "Настройки документации", + "whatsNewLink": "Что нового Ссылка", + "whatsNewLinkPlaceholder": "Введите URL-адрес вашей документации...", + "whatsNewLinkHelp": "Укажите действительный URL-адрес, по которому пользователи смогут найти ваши новости.", + "deleteBranding": "Удалить брендинг", + "deleteBrandingContent": "Вы уверены, что хотите удалить бренд \"{orgName}\"?", + "fetchBrandingError": "Что-то пошло не так при получении данных о брендинге. Пожалуйста, попробуйте еще раз.", + "upload": "Загрузить", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "Не удалось подключиться к серверу, проверьте сеть", + "200": "Успех", + "201": "Создано", + "204": "Нет содержания", + "400": "Плохая просьба", + "401": "Аутентификация не прошла, пожалуйста, войдите снова", + "403": "Нет разрешения, обратитесь к администратору для получения разрешения", + "404": "Не найдено", + "500": "Служба занята, повторите попытку позже", + "timeout": "Таймаут запроса", + }, + "share": { + ...en.share, + + "title": "Поделиться", + "viewer": "Просмотрщик", + "editor": "Редактор", + "owner": "Владелец", + "datasourceViewer": "Можно использовать", + "datasourceOwner": "Может управлять", + }, + "debug": { + ...en.debug, + + "title": "Название", + "switch": "Компонент переключателя:", + }, + "module": { + ...en.module, + + "folderNotEmpty": "Папка не пуста", + "emptyText": "Нет данных", + "docLink": "Подробнее о модулях...", + "documentationText": "Модули - это полноценные приложения, которые могут быть включены и повторены в других приложениях и функционировать так же, как и отдельный компонент. Поскольку модули могут быть встроены, они должны иметь возможность взаимодействовать с внешними приложениями или веб-сайтами. Эти четыре параметра помогают поддерживать взаимодействие с модулем.", + "circularReference": "Круговая ссылка, текущий модуль/приложение не может быть использован!", + "emptyTestInput": "Текущий модуль не имеет входа для тестирования", + "emptyTestMethod": "Текущий модуль не имеет метода тестирования", + "name": "Имя", + "input": "Вход", + "params": "Params", + "emptyParams": "Никакие параметры не были добавлены", + "emptyInput": "Ввод не был добавлен", + "emptyMethod": "Метод не был добавлен", + "emptyOutput": "Выходные данные не были добавлены", + "data": "Данные", + "string": "Строка", + "number": "Номер", + "array": "Массив", + "boolean": "Булево", + "query": "Запрос", + "autoScaleCompHeight": "Весы для измерения высоты компонентов с контейнером", + "excuteMethod": "Выполнить метод {name}", + "method": "Метод", + "action": "Действие", + "output": "Выход", + "nameExists": "Имя {name} Уже существует", + "eventTriggered": "Срабатывает событие {name}", + "globalPromptWhenEventTriggered": "Отображение глобальной подсказки при срабатывании события", + "emptyEventTest": "Текущий модуль не имеет событий для тестирования", + "emptyEvent": "Событие не было добавлено", + "event": "Событие", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "Возвращаемое значение - это функция.", + "consume": "{time}", + "JSON": "Показать JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "Создание...", + "created": "Создайте {name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "Аутентификация пользователя не прошла, пожалуйста, войдите снова", + "verifyAccount": "Необходимо подтвердить учетную запись", + "functionNotSupported": "Текущая версия не поддерживает эту функцию. Пожалуйста, свяжитесь с командой Lowcoder Business Team, чтобы обновить ваш аккаунт", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "Создать компонент {comp} Не удалось", + "notHandledError": "{method} Метод не выполнен", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "Панель навигации", + "chooseApp": "Выберите приложение", + "iconTooltip": "Поддержка ссылки на src изображения или строки Base64, например data:image/png", + "hideWhenNoPermission": "Скрыт для неавторизованных пользователей", + "queryParam": "Параметры запроса URL", + "hashParam": "Параметры хэша URL", + "tabBar": "Панель вкладок", + "emptyTabTooltip": "Настройте эту страницу на правой панели", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px (Телефон)", + "800": "800px (планшет)", + "1440": "1440px (ноутбук)", + "1920": "1920px (широкий экран)", + "3200": "3200px (сверхбольшой экран)", + "title": "Общие настройки приложения", + "autofill": "Автозаполнение", + "userDefined": "Пользовательское", + "default": "По умолчанию", + "tooltip": "Закройте всплывающее окно после установки", + "canvasMaxWidth": "Максимальная ширина холста для этого приложения", + "userDefinedMaxWidth": "Пользовательская максимальная ширина", + "inputUserDefinedPxValue": "Введите пользовательское значение пикселя", + "maxWidthTip": "Максимальная ширина должна быть больше или равна 350", + "themeSetting": "Прикладной стиль Тема", + "themeSettingDefault": "По умолчанию", + "themeCreate": "Создать тему", + "appTitle": "Название", + "appDescription": "Описание", + "appCategory": "Категория", + "showPublicHeader": "Показать заголовок в открытом виде", + "canvas": "Настройки холста", + "gridColumns": "Колонки сетки", + "gridRowHeight": "Высота строки сетки", + "gridRowCount": "Счетчик строк сетки", + "gridPaddingX": "Горизонтальная подложка холста", + "gridPaddingY": "Вертикальная подкладка для холста", + "gridBgImage": "Фоновое изображение", + "gridBgImageRepeat": "Повтор фонового изображения", + "gridBgImageSize": "Размер фонового изображения", + "gridBgImagePosition": "Положение фонового изображения", + "gridBgImageOrigin": "Происхождение фонового изображения", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "Пользовательские ярлыки", + "shortcut": "Ярлык", + "action": "Действие", + "empty": "Никаких недомолвок", + "placeholder": "Нажмите клавишу быстрого доступа", + "otherPlatform": "Другие", + "space": "Космос", + }, + "profile": { + ...en.profile, + + "orgSettings": "Настройки рабочей области", + "switchOrg": "Переключение рабочего пространства", + "joinedOrg": "Мои рабочие места", + "createOrg": "Создать рабочее пространство", + "logout": "Выйти из системы", + "personalInfo": "Мой профиль", + "bindingSuccess": "Привязка {sourceName} Успех", + "uploadError": "Ошибка загрузки", + "editProfilePicture": "Изменить", + "saveUserNameTooltip": "Нажмите Enter, чтобы сохранить новое имя пользователя. Если вы видите свой Email, это означает, что мы просто захватили его в качестве имени пользователя, и вы можете изменить его на более подходящий. Ваш Email в качестве технического имени пользователя останется нетронутым.", + "changeAvatarTooltip": "Вы можете загружать файлы PNG или JPG", + "nameCheck": "Имя не может быть пустым", + "name": "Имя:", + "namePlaceholder": "Пожалуйста, введите ваше имя", + "toBind": "Связать", + "binding": "Обязательно", + "bindError": "Ошибка параметра, в настоящее время не поддерживается Привязка.", + "bindName": "Связать {name}", + "loginAfterBind": "После привязки вы можете использовать {name} для входа в систему", + "bindEmail": "Привязать электронную почту:", + "email": "Электронная почта", + "emailCheck": "Пожалуйста, введите действительный адрес электронной почты", + "emailPlaceholder": "Пожалуйста, введите ваш e-mail", + "submit": "Отправить", + "bindEmailSuccess": "Успех переплетения электронных писем", + "passwordModifiedSuccess": "Пароль успешно изменен", + "passwordSetSuccess": "Пароль установлен успешно", + "oldPassword": "Старый пароль:", + "inputCurrentPassword": "Пожалуйста, введите ваш текущий пароль", + "newPassword": "Новый пароль:", + "inputNewPassword": "Пожалуйста, введите новый пароль", + "confirmNewPassword": "Подтвердите новый пароль:", + "inputNewPasswordAgain": "Пожалуйста, введите новый пароль еще раз", + "password": "Пароль:", + "modifyPassword": "Изменить пароль", + "setPassword": "Установить пароль", + "alreadySetPassword": "Установка пароля", + "setPassPlaceholder": "Вы можете войти в систему с помощью пароля", + "setPassAfterBind": "Вы можете установить пароль после привязки учетной записи", + "socialConnections": "Социальные связи", + "changeAvatar": "Изменить аватар", + "about": "О сайте", + "userId": "Идентификатор пользователя", + "createdAt": "Создано в", + "currentOrg": "Действующая организация", + "settings": "Настройки", + "uiLanguage": "Язык пользовательского интерфейса", + "info": "Информация", + "createdApps": "Созданные вами приложения", + "createdModules": "Созданные вами модули", + "sharedApps": "Приложения, которыми вы поделились с друзьями", + "sharedModules": "Модули, переданные вам", + "onMarketplace": "На рынке", + "howToPublish": "Как опубликовать на Marketplace", + "memberOfOrgs": "Членство в клубе Workspaces", + "apiKeys": "Ключи API", + "createApiKey": "Создайте ключ API", + "apiKeyInfo": "Обязательно скопируйте свой новый API-ключ. Вы больше не сможете его увидеть.", + "apiKeyName": "Имя", + "apiKeyDescription": "Описание", + "apiKeyCopy": "Нажмите на Api Key, чтобы получить значение в буфере обмена", + "apiKey": "Ключ API", + "deleteApiKey": "Удалить ключ API", + "deleteApiKeyContent": "Вы уверены, что хотите удалить этот ключ API?", + "deleteApiKeyError": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "Ярлыки клавиатуры", + "click": "Нажмите", + "global": "Глобальная", + "toggleShortcutList": "Переключение сочетаний клавиш", + "editor": "Редактор", + "toggleLeftPanel": "Переключение левой панели", + "toggleBottomPanel": "Переключение нижней панели", + "toggleRightPanel": "Переключение правой панели", + "toggleAllPanels": "Переключить все панели", + "preview": "Предварительный просмотр", + "undo": "Отменить", + "redo": "Redo", + "showGrid": "Показать сетку", + "component": "Компонент", + "multiSelect": "Выберите несколько", + "selectAll": "Выбрать все", + "copy": "Копировать", + "cut": "Разрез", + "paste": "Паста", + "move": "Переместить", + "zoom": "Изменить размер", + "delete": "Удалить", + "deSelect": "Отменить выбор", + "queryEditor": "Редактор запросов", + "excuteQuery": "Выполнить текущий запрос", + "editBox": "Текстовый редактор", + "formatting": "Формат", + "openInLeftPanel": "Открыть в левой панели", + }, + "help": { + ...en.help, + + "videoText": "Обзор", + "onBtnText": "OK", + "permissionDenyTitle": "💡 Не удается создать новое приложение или источник данных?", + "permissionDenyContent": "У вас нет прав на создание приложения и источника данных. Обратитесь к администратору, чтобы присоединиться к группе разработчиков.", + "appName": "Учебное приложение", + "chat": "Пообщайтесь с нами", + "docs": "Посмотреть документацию", + "editorTutorial": "Учебный редактор", + "update": "Что нового?", + "version": "Версия", + "versionWithColon": "Версия:", + "submitIssue": "Подать заявку на выпуск", + }, + "header": { + ...en.header, + + "nameCheckMessage": "Имя не может быть пустым", + "viewOnly": "Только просмотр", + "recoverAppSnapshotTitle": "Восстановить эту версию?", + "recoverAppSnapshotContent": "Восстановите текущее приложение до версии, созданной в {time}.", + "recoverAppSnapshotMessage": "Восстановить эту версию", + "returnEdit": "Вернуться к редактору", + "deploy": "Опубликовать", + "export": "Экспорт в JSON", + "editName": "Редактировать имя", + "duplicate": "Дубликат {type}", + "snapshot": "История", + "scriptsAndStyles": "Сценарии и стиль", + "appSettings": "Настройки приложения", + "preview": "Предварительный просмотр", + "editError": "Режим предварительного просмотра истории, операция не поддерживается.", + "clone": "Клон", + "editorMode_layout": "Макет", + "editorMode_logic": "Логика", + "editorMode_both": "Оба", + "editorMode_layout_tooltip": "Настройте внешний вид и расположение компонента в правом окне. Настройте его внешний вид, стили и анимацию.", + "editorMode_logic_tooltip": "Настройте работу и взаимодействие вашего компонента в нужном окне. Управляйте его содержимым и интерактивным поведением.", + "AppEditingBlocked": "Редактирование приложений заблокировано для:", + "AppEditingBlockedHint": "Изменения не будут сохранены, пока другой пользователь редактирует это приложение.", + "AppEditingBlockedMessage": "Пожалуйста, подождите, прежде чем проверять статус редактирования приложения.", + "AppEditingBlockedCheckStatus": "Проверка состояния приложения", + "AppEditingBlockedSomeone": "Кто-то", + "AppEditingBlockedMessageSnipped": "редактирует это приложение", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "Зарегистрироваться", + "email": "Электронная почта:", + "inputEmail": "Пожалуйста, введите свой адрес электронной почты", + "inputValidEmail": "Пожалуйста, введите действительный адрес электронной почты", + "forgotPassword": "Забыли пароль", + "forgotPasswordInfo": "Введите свой e-mail, и мы вышлем вам ссылку для сброса пароля.", + "forgotPasswordSuccess": "Пожалуйста, проверьте свою электронную почту, чтобы получить ссылку на сброс пароля.", + "forgotPasswordError": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.", + "register": "Зарегистрироваться", + "userLogin": "Войти", + "login": "Войти", + "bind": "Переплет", + "passwordCheckLength": "Не менее {min} символов", + "passwordCheckContainsNumberAndLetter": "Должны содержать буквы и цифры", + "passwordCheckSpace": "Не может содержать пробельные символы", + "welcomeTitle": "Добро пожаловать в {productName}", + "inviteWelcomeTitle": "___ЗНАКОМЕЦ0___ приглашает вас к совместной работе", + "terms": "Условия", + "privacy": "Политика конфиденциальности", + "registerHint": "Я прочитал и согласен с", + "chooseAccount": "Выберите свой аккаунт", + "signInLabel": "Войти с помощью {name}", + "bindAccount": "Привязать аккаунт", + "scanQrCode": "Отсканируйте QR-код с помощью {name}.", + "invalidThirdPartyParam": "Недействительный параметр третьей стороны", + "account": "Счет", + "inputAccount": "Пожалуйста, введите ваш счет", + "ldapLogin": "Вход в систему LDAP", + "resetPassword": "Сброс пароля", + "resetPasswordDesc": "Сбросьте пароль пользователя {name}. После сброса будет сгенерирован новый пароль.", + "resetSuccess": "Сброс прошел успешно", + "resetSuccessDesc": "Сброс пароля прошел успешно. Новый пароль: {password}", + "resetLostPasswordSuccess": "Сброс пароля прошел успешно. Пожалуйста, войдите снова.", + "copyPassword": "Копирование пароля", + "poweredByLowcoder": "Работает от: Lowcoder.cloud", + "continue": "Продолжить", + "enterPassword": "Введите пароль", + "selectAuthProvider": "Выберите поставщика аутентификации", + "selectWorkspace": "Выберите рабочее пространство", + "userNotFound": "Пользователь не найден. Убедитесь, что вы ввели правильный адрес электронной почты.", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "Добавление библиотек JavaScript в текущее приложение через URL-адреса. lodash, day.js, uuid, numbro встроены в систему для немедленного использования. Библиотеки JavaScript загружаются до инициализации приложения, что может повлиять на его производительность.", + "exportedAs": "Экспортировано как", + "urlTooltip": "URL-адрес библиотеки JavaScript, рекомендуется [unpkg.com](https://unpkg.com/) или [jsdelivr.net](https://www.jsdelivr.com/)", + "externalLibsHelperText": "Поддерживаются только библиотеки, использующие подход UMD (Universal Module Definition). Подробнее здесь: https://github.com/umdjs/umd", + "recommended": "Рекомендуем", + "viewJSLibraryDocument": "Документ", + "jsLibraryURLError": "Недопустимый URL", + "jsLibraryExist": "Библиотека JavaScript уже существует", + "jsLibraryEmptyContent": "Библиотеки JavaScript не добавлены", + "jsLibraryDownloadError": "Ошибка загрузки библиотеки JavaScript", + "jsLibraryInstallSuccess": "Библиотека JavaScript успешно установлена", + "jsLibraryInstallFailed": "Не удалось установить библиотеку JavaScript", + "jsLibraryInstallFailedCloud": "Возможно, библиотека недоступна в песочнице, [Документация](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "{message}", + "add": "Добавить новый", + "jsHelpText": "Добавьте глобальный метод или переменную в текущее приложение.", + "cssHelpText": "Добавьте стили в текущее приложение. Структура DOM может меняться по мере итерации системы. Попытайтесь изменить стили через свойства компонента.", + "scriptsAndStyles": "Сценарии и стили", + "jsLibrary": "Библиотека JavaScript", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "Компонент", + "componentContent": "Правая панель компонентов предлагает вам множество готовых блоков приложений (компонентов). Их можно перетаскивать на холст для использования. Вы также можете создавать собственные компоненты, обладая небольшими знаниями в области кодирования.", + "canvas": "Холст", + "canvasContent": "Создавайте свои приложения на холсте по принципу \"что видишь, то и получаешь\". Просто перетаскивайте компоненты для создания макета и используйте сочетания клавиш для быстрого редактирования, например, удаления, копирования и вставки. Выбрав компонент, вы можете точно настроить каждую деталь - от стиля и макета до привязки данных и логического поведения. Кроме того, вы можете воспользоваться дополнительными преимуществами отзывчивого дизайна, благодаря которому ваши приложения будут отлично смотреться на любом устройстве.", + "queryData": "Данные запроса", + "queryDataContent": "Здесь вы можете создавать запросы данных и подключаться к MySQL, MongoDB, Redis, Airtable и многим другим источникам данных. После настройки запроса нажмите кнопку \"Выполнить\", чтобы получить данные и продолжить обучение.", + "compProperties": "Свойства компонентов", + "interactiveDemo": "Интерактивная демонстрация", + "interactiveDemoToolTip": "Нажмите, чтобы начать интерактивную демонстрацию этой функции", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "Добро пожаловать! Нажмите \"App\" и начните создавать свое первое приложение.", + "createAppTitle": "Создать приложение", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "Включите пользовательский реестр NPM", + "npmRegistryUrl": "Урл реестра NPM", + "npmRegistryUrlRequired": "Введите URL-адрес реестра", + "npmRegistryUrlInvalid": "Пожалуйста, введите действительный URL-адрес", + "npmRegistryScope": "Объем пакета", + "npmRegistryPattern": "Узор", + "npmRegistryPatternInvalid": "Пожалуйста, введите правильный шаблон (начиная с @ для организаций).", + "npmRegistryAuth": "Аутентификация", + "npmRegistryAuthType": "Тип аутентификации", + "npmRegistryAuthCredentials": "Учетные данные для аутентификации", + "npmRegistryAuthCredentialsRequired": "Введите учетные данные реестра", + "npmRegistryAuthCredentialsHelp": "Для базового аутентификатора укажите имя пользователя и пароль в формате base64(username:password), для токен-аута - токен.", + }, + "history": { + ...en.history, + + "layout": "Настройка макета '{0}'", + "upgrade": "Обновление '{0}'", + "delete": "Удалить '{0}'", + "add": "Добавьте '{0}'", + "modify": "Изменить '{0}'", + "rename": "Переименуйте '{1}' в '{0}'.", + "recover": "Восстановить версию '{2}'", + "recoverVersion": "Восстановить версию", + "andSoOn": "и так далее", + "timeFormat": "ММ ДД в чч:мм A", + "emptyHistory": "Нет истории", + "currentVersionWithBracket": " (Текущий)", + "currentVersion": "Текущая версия", + "justNow": "Только что", + "history": "История", + }, + "home": { + ...en.home, + + "profile": "Ваш профиль", + "news": "Новости", + "newsLoading": "Он будет загружаться несколько секунд.", + "orgHome": "Домашняя страница (Org)", + "yourOrg": "Ваша организация", + "orgHomeTitle": "Домашняя страница организации", + "appMarketplace": "Рынок приложений", + "allApplications": "Ваши приложения", + "allModules": "Ваши модули", + "allFolders": "Ваши папки", + "yourFolders": "Ваши папки", + "modules": "Модули", + "module": "Модуль", + "api": "Lowcoder API", + "trash": "Мусор", + "marketplace": "Рынок", + "allCategories": "Все категории", + "queryLibrary": "Запросы данных", + "datasource": "Источники данных", + "selectDatasourceType": "Выберите тип источника данных", + "home": "Главная", + "all": "Все", + "app": "Приложение", + "navigation": "Навигация", + "navLayout": "Навигация на ПК", + "navLayoutDesc": "Левостороннее меню для удобной навигации по рабочему столу.", + "mobileTabLayout": "Мобильная навигация", + "mobileTabLayoutDesc": "Нижняя навигационная панель для плавного просмотра страниц на мобильных устройствах.", + "folders": "Папки", + "folder": "Папка", + "rootFolder": "Корень", + "import": "Импорт", + "export": "Экспорт в JSON", + "show": "Показать", + "inviteUser": "Пригласить участников", + "createFolder": "Создать папку", + "createFolderSubTitle": "Имя папки:", + "moveToFolder": "Переместить в папку", + "moveToTrash": "Переместить в мусор", + "moveToFolderSubTitle": "Переместите \"{name}\" в:", + "folderName": "Имя папки:", + "resCardSubTitle": "{time} от {creator}", + "trashEmpty": "Корзина пуста.", + "projectEmpty": "Здесь ничего нет.", + "projectEmptyCanAdd": "У вас еще нет приложений. Нажмите \"Новое\", чтобы начать.", + "name": "Имя", + "type": "Тип", + "creator": "Создано", + "lastModified": "Последнее изменение", + "deleteTime": "Время удаления", + "createTime": "Создать время", + "datasourceName": "Имя источника данных", + "databaseName": "Имя базы данных", + "nameCheckMessage": "Имя не может быть пустым", + "deleteElementTitle": "Удалить навсегда", + "moveToTrashSubTitle": "{type} {name} будет перемещен в мусор.", + "deleteElementSubTitle": "Удалите {type} {name} навсегда, его невозможно восстановить.", + "deleteSuccessMsg": "Удалено успешно", + "deleteErrorMsg": "Удаленная ошибка", + "recoverSuccessMsg": "Восстановлено успешно", + "newDatasource": "Новый источник данных", + "creating": "Создание...", + "chooseDataSourceType": "Выберите тип источника данных", + "folderAlreadyExists": "Папка уже существует", + "newNavLayout": "{userName}'s {name}", + "newApp": "Новый {userName} от {name}", + "importError": "Ошибка импорта, {message}", + "exportError": "Ошибка экспорта, {message}", + "importSuccess": "Успех импорта", + "fileUploadError": "Ошибка загрузки файла", + "fileFormatError": "Ошибка формата файла", + "groupWithSquareBrackets": "[Группа]", + "allPermissions": "Владелец", + "appSharingDialogueTitle": "Совместное использование приложений и разрешения", + "appSocialSharing": "Поделитесь своим приложением и опытом на:", + "appSocialSharingMessage": "Я сделал это приложение с помощью Lowcoder, посмотрите!", + "socialShare": "Поделиться на", + "shareLink": "Поделиться ссылкой:", + "copyLink": "Копировать ссылку", + "appPublicMessage": "Сделайте приложение общедоступным. Любой желающий сможет посмотреть.", + "modulePublicMessage": "Сделайте модуль общедоступным. Любой желающий сможет просмотреть его.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "Опубликуйте свое приложение на публичной торговой площадке. Любой желающий сможет просмотреть и скопировать его оттуда.", + "moduleMarketplaceMessage": "Опубликуйте свой модуль на Публичной торговой площадке. Любой желающий может просмотреть и скопировать его оттуда.", + "marketplaceGoodPublishing": "Убедитесь, что ваше приложение имеет хорошее название и простое в использовании. Перед публикацией удалите всю конфиденциальную информацию. Также удалите локальные источники данных и замените их статическими встроенными временными данными.", + "noMarketplaceApps": "Пока нет приложений на рынке", + "errorMarketplaceApps": "Ошибка при загрузке приложений Marketplace", + "localMarketplaceTitle": "Местный рынок", + "globalMarketplaceTitle": "Общественный рынок", + "memberPermissionList": "Разрешения членов:", + "orgName": "{orgName} admins", + "addMember": "Добавить участников", + "addPermissionPlaceholder": "Пожалуйста, введите имя для поиска участников", + "searchMemberOrGroup": "Поиск участников или групп:", + "addPermissionErrorMessage": "Не удалось добавить разрешение, {message}", + "copyModalTitle": "Клонировать \"{name}\"", + "copyNameLabel": "Имя {type}", + "copyModalfolderLabel": "Добавить в папку", + "copyNamePlaceholder": "Пожалуйста, укажите имя {type}", + "chooseNavType": "Пожалуйста, выберите тип навигации", + "createNavigation": "Создать навигацию", + "howToUseAPI": "Как использовать открытый Rest API", + "support": "Поддержка", + }, + "support": { + ...en.support, + + "selfUser": "Вы", + "supportTitle": "Поддержка Lowcoder", + "supportContent": "Если у вас возникли вопросы или вам нужна помощь, воспользуйтесь системой тикетов, чтобы быстро решить вашу проблему.", + "newSupportTicket": "Новый тикет поддержки", + "ticketTitle": "Название", + "priority": "Приоритет", + "assignee": "Назначение", + "status": "Статус билета", + "updatedTime": "Обновленное время", + "active": "Активный", + "inactive": "Неактивный", + "noEmail": "Нет электронной почты", + "details": "Подробности", + "reloadTickets": "Билеты на перезагрузку", + "createdDate": "Дата создания", + "updatedDate": "Дата обновления", + "description": "Описание выпуска", + "subtasks": "Подзадачи", + "subtasksProgress": "Выполнение всех подзадач", + "attachments": "Приложения к изданию", + "comments": "Комментарии", + "addComment": "Добавить комментарий", + "addAttachment": "Добавить вложение", + "edit": "Редактировать описание билета", + "save": "Сохранить билет Описание", + "cancel": "Отмена", + "submitComment": "Отправить комментарий", + "upload": "Отправить вложение", + "selectFile": "Выберите файл", + "ticketDescriptionUpdated": "Описание билета успешно обновлено!", + "ticketDescriptionUpdateFailed": "Не удалось обновить описание билета.", + "writeComment": "Написать комментарий...", + "ticketCommentAdded": "Комментарий успешно добавлен!", + "ticketCommentFailed": "Не удалось добавить комментарий.", + "ticketCommentEmpty": "Пожалуйста, напишите комментарий перед отправкой.", + "ticketAttachmentUploaded": "Вложение успешно загружено!", + "ticketAttachmentFailed": "Не удалось загрузить вложение.", + "ticketAttachmentEmpty": "Пожалуйста, выберите файл для загрузки.", + "ticketFetchError": "Не удалось загрузить билет.", + "ticketNotFound": "Билет не найден.", + "addAttachmentFileSize": "Файл должен быть меньше 5 МБ!", + "goBack": "Вернуться", + "noDescription": "Описание отсутствует.", + "createTicket": "Создайте новый тикет поддержки", + "createTicketTitlePlaceholder": "Введите название (не более 150 символов)", + "createTicketDescriptionTitle": "Опишите свою проблему - чем больше деталей, тем лучше:", + "createTicketDescriptionPlaceholder": "Подробно опишите проблему, включая: 1) шаги по воспроизведению проблемы, 2) ожидаемое поведение по сравнению с фактическим, 3) фрагменты кода, если применимо, 4) любые конкретные компоненты, API или конфигурации, затронутые проблемой.", + "createTicketSubmit": "Отправить билет", + "createTicketInfoText": "Когда билет создан, вы можете добавить скриншоты и комментарии в разделе \"Подробности\".", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "Положение навигационных точек", + "autoPlay": "Автоигра", + "showDots": "Показать навигационные точки", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "Неверное имя пакета npm или URL.", + "pluginExisted": "Этот плагин npm уже существовал", + "compNotFound": "Компонент {compName} не найден.", + "addPluginModalTitle": "Добавление плагина из репозитория npm", + "pluginNameLabel": "URL или имя пакета npm", + "noCompText": "Компоненты отсутствуют.", + "compsLoading": "Загрузка...", + "removePluginBtnText": "Удалить", + "addPluginBtnText": "Добавьте плагин npm", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "Значение по умолчанию для кнопки переключения, например: False", + "trueDefaultText": "Скрыть", + "falseDefaultText": "Показать", + "trueLabel": "Текст для True", + "falseLabel": "Текст для Ложь", + "trueIconLabel": "Значок \"Истина", + "falseIconLabel": "Значок \"Ложь", + "iconPosition": "Положение значка", + "showText": "Показать текст", + "alignment": "Выравнивание", + "showBorder": "Показать границу", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** | Создавайте программные приложения для вашей компании и ваших клиентов с минимальным опытом кодирования. Lowcoder - это лучшая альтернатива Retool, Appsmith или Tooljet.", + "demoText": "Lowcoder | Создавайте программные приложения для вашей компании и ваших клиентов с минимальным опытом кодирования. Lowcoder - это лучшая альтернатива Retool, Appsmith или Tooljet.", + "submit": "Отправить", + "style": "Стиль", + "danger": "Опасность", + "warning": "Внимание", + "success": "Успех", + "menu": "Меню", + "link": "Ссылка на", + "customAppearance": "Пользовательский внешний вид", + "search": "Поиск", + "pleaseInputNumber": "Пожалуйста, введите номер", + "mostValue": "Наибольшая ценность", + "maxRating": "Максимальная оценка", + "notSelect": "Не выбрано", + "halfSelect": "Половина выбора", + "pleaseSelect": "Пожалуйста, выберите", + "title": "Название", + "content": "Содержание", + "componentNotFound": "Компонент не существует", + "example": "Примеры", + "defaultMethodDesc": "Установите значение свойства {name}", + "propertyUsage": "Вы можете читать информацию, связанную с компонентом, обращаясь к свойствам компонента по имени компонента везде, где можно написать JavaScript.", + "property": "Свойства", + "propertyName": "Название недвижимости", + "propertyType": "Тип", + "propertyDesc": "Описание", + "event": "События", + "eventName": "Название события", + "eventDesc": "Описание", + "mehtod": "Методы", + "methodUsage": "Вы можете взаимодействовать с компонентами с помощью соответствующих методов, доступ к которым можно получить по их именам в любом сегменте, где используется JavaScript. Кроме того, эти компоненты можно активировать с помощью действия 'Control Component', которое запускается в ответ на определенные события", + "methodName": "Название метода", + "methodDesc": "Описание", + "showBorder": "Показать границу", + "haveTry": "Попробуйте сами", + "settings": "Настройка", + "settingValues": "Значение настройки", + "defaultValue": "Значение по умолчанию", + "time": "Время", + "date": "Дата", + "noValue": "Нет", + "xAxisType": "Тип оси X", + "hAlignType": "Горизонтальное выравнивание", + "leftLeftAlign": "Выравнивание по левому краю", + "leftRightAlign": "Выравнивание влево-вправо", + "topLeftAlign": "Выравнивание по левому краю", + "topRightAlign": "Выравнивание вправо-вверх", + "validation": "Валидация", + "required": "Требуется", + "defaultStartDateValue": "Дата начала по умолчанию", + "defaultEndDateValue": "Дата окончания по умолчанию", + "basicUsage": "Базовое использование", + "basicDemoDescription": "В следующих примерах показано базовое использование компонента.", + "noDefaultValue": "Нет Значение по умолчанию", + "forbid": "Запрещенный", + "placeholder": "Место для размещения", + "pleaseInputPassword": "Пожалуйста, введите пароль", + "password": "Пароль", + "textAlign": "Выравнивание текста", + "length": "Длина", + "top": "Топ", + "pleaseInputName": "Пожалуйста, введите ваше имя", + "userName": "Имя", + "fixed": "Исправлено", + "responsive": "Отзывчивый", + "workCount": "Количество слов", + "cascaderOptions": "Опции каскадера", + "pleaseSelectCity": "Пожалуйста, выберите город", + "advanced": "Расширенный", + "showClearIcon": "Показать значок очистки", + "appleOptionLabel": "Apple", + "waterMelonOptionLabel": "Арбуз", + "berryOptionLabel": "Клубника", + "lemonOptionLabel": "Лимон", + "coconutOptionLabel": "Кокосовый орех", + "likedFruits": "Избранное", + "option": "Вариант", + "singleFileUpload": "Загрузка одного файла", + "multiFileUpload": "Многократная загрузка файлов", + "folderUpload": "Загрузка папок", + "multiFile": "Несколько файлов", + "folder": "Папка", + "open": "Открыть", + "favoriteFruits": "Любимые фрукты", + "pleaseSelectOneFruit": "Выберите фрукт", + "notComplete": "Не завершено", + "complete": "Полный", + "echart": "EChart", + "lineChart": "Линейная диаграмма", + "basicLineChart": "Основная линейная диаграмма", + "lineChartType": "Тип линейной диаграммы", + "stackLineChart": "Сложенная линия", + "areaLineChart": "Зональная линия", + "scatterChart": "Диаграмма рассеяния", + "scatterShape": "Форма россыпи", + "scatterShapeCircle": "Круг", + "scatterShapeRect": "Прямоугольник", + "scatterShapeTri": "Треугольник", + "scatterShapeDiamond": "Алмаз", + "scatterShapePin": "Pushpin", + "scatterShapeArrow": "Стрела", + "pieChart": "Круговая диаграмма", + "basicPieChart": "Основные круговые диаграммы", + "pieChatType": "Тип круговой диаграммы", + "pieChartTypeCircle": "Диаграмма пончиков", + "pieChartTypeRose": "Розовая диаграмма", + "titleAlign": "Название Должность", + "color": "Цвет", + "dashed": "Пунктир", + "imADivider": "Я - разделительная полоса", + "tableSize": "Размер стола", + "subMenuItem": "Подменю {num}", + "menuItem": "Меню {num}", + "labelText": "Этикетка", + "labelPosition": "Ярлык - Положение", + "labelAlign": "Этикетка - Выровнять", + "optionsOptionType": "Метод конфигурации", + "styleBackgroundColor": "Цвет фона", + "styleBorderColor": "Цвет границы", + "styleColor": "Цвет шрифта", + "selectionMode": "Режим выбора строк", + "paginationSetting": "Настройка пагинации", + "paginationShowSizeChanger": "Поддержка пользователей для изменения количества записей на странице", + "paginationShowSizeChangerButton": "Показать кнопку изменения размера", + "paginationShowQuickJumper": "Показать Быстрый джемпер", + "paginationHideOnSinglePage": "Скрыть, когда есть только одна страница", + "paginationPageSizeOptions": "Размер страницы", + "chartConfigCompType": "Тип диаграммы", + "xConfigType": "Тип оси X", + "loading": "Загрузка", + "disabled": "Инвалид", + "minLength": "Минимальная длина", + "maxLength": "Максимальная длина", + "showCount": "Показать количество слов", + "autoHeight": "Высота", + "thousandsSeparator": "Тысячи сепараторов", + "precision": "Десятичные знаки", + "value": "Значение по умолчанию", + "formatter": "Формат", + "min": "Минимальное значение", + "max": "Максимальное значение", + "step": "Размер шага", + "start": "Время начала", + "end": "Конец времени", + "allowHalf": "Разрешить выбор половины", + "filetype": "Тип файла", + "showUploadList": "Показать список загрузок", + "uploadType": "Тип загрузки", + "allowClear": "Показать значок очистки", + "minSize": "Минимальный размер файла", + "maxSize": "Максимальный размер файла", + "maxFiles": "Максимальное количество загружаемых файлов", + "format": "Формат", + "minDate": "Минимальная дата", + "maxDate": "Максимальная дата", + "minTime": "Минимальное время", + "maxTime": "Максимальное время", + "text": "Текст", + "type": "Тип", + "hideHeader": "Скрыть заголовок", + "hideBordered": "Скрыть границу", + "src": "URL-адрес изображения", + "showInfo": "Значение дисплея", + "mode": "Режим", + "onlyMenu": "Только меню", + "horizontalAlignment": "Горизонтальное выравнивание", + "row": "Слева", + "column": "Топ", + "leftAlign": "Выравнивание по левому краю", + "rightAlign": "Правильное выравнивание", + "percent": "Процент", + "fixedHeight": "Фиксированная высота", + "auto": "Адаптивный", + "directory": "Папка", + "multiple": "Несколько файлов", + "singleFile": "Один файл", + "manual": "Руководство", + "default": "По умолчанию", + "small": "Маленький", + "middle": "Средний", + "large": "Большой", + "single": "Одиночка", + "multi": "Множество", + "close": "Закрыть", + "ui": "Режим пользовательского интерфейса", + "line": "Линейная диаграмма", + "scatter": "Диаграмма рассеяния", + "pie": "Круговая диаграмма", + "basicLine": "Основная линейная диаграмма", + "stackedLine": "Линейная диаграмма со стеками", + "areaLine": "Карта района", + "basicPie": "Основные круговые диаграммы", + "doughnutPie": "Диаграмма пончиков", + "rosePie": "Розовая диаграмма", + "category": "Категория Ось", + "circle": "Круг", + "rect": "Прямоугольник", + "triangle": "Треугольник", + "diamond": "Алмаз", + "pin": "Pushpin", + "arrow": "Стрела", + "left": "Слева", + "right": "Справа", + "center": "Центр", + "bottom": "Дно", + "justify": "Оправдать оба конца", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "Текущее состояние данных", + "preview": "Предварительный просмотр", + "property": "Свойства", + "console": "Консоль визуальных сценариев", + "executeMethods": "Методы выполнения", + "noMethods": "Нет методов.", + "methodParams": "Параметры метода", + "methodParamsHelp": "Параметры метода ввода с помощью JSON. Например, вы можете задать параметры setValue с помощью: [1] или 1", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "Фон для кнопок", + "btnText": "Текст кнопки", + "title": "Название", + "selectBackground": "Избранная биография", + }, + "idSource": { + ...en.idSource, + + "title": "Поставщик аутентификации пользователей", + "form": "Электронная почта", + "pay": "Премиум", + "enable": "Включить", + "unEnable": "Не включено", + "loginType": "Тип входа в систему", + "status": "Статус", + "desc": "Описание", + "manual": "Адресная книга:", + "syncManual": "Синхронизация адресной книги", + "syncManualSuccess": "Синхронизация прошла успешно", + "enableRegister": "Разрешить регистрацию", + "saveBtn": "Сохранить и включить", + "save": "Сохранить", + "none": "Нет", + "formPlaceholder": "Пожалуйста, введите {label}", + "formSelectPlaceholder": "Пожалуйста, выберите {label}", + "saveSuccess": "Сохранено успешно", + "dangerLabel": "Опасная зона", + "dangerTip": "Отключение или удаление этого идентификатора может привести к тому, что некоторые пользователи не смогут войти в систему. Действуйте с осторожностью.", + "lastEnabledConfig": "Вы не можете отключить/удалить конфигурацию, так как это единственная включенная конфигурация.", + "disable": "Отключить", + "disableSuccess": "Успешно отключено", + "encryptedServer": "-------- Зашифровано на стороне сервера --------", + "disableTip": "Советы", + "disableContent": "{action} В результате использования этого идентификатора некоторые пользователи не смогут войти в систему. Вы уверены, что можете продолжать?", + "manualTip": "", + "lockTip": "Содержание заблокировано. Чтобы внести изменения, нажмите на {icon}, чтобы разблокировать.", + "lockModalContent": "Изменение поля 'ID Attribute' может оказать существенное влияние на идентификацию пользователей. Прежде чем приступить к работе, убедитесь, что вы понимаете последствия этого изменения.", + "payUserTag": "Премиум", + "source": "Источник", + "sourceName": "Имя провайдера авторизации", + "sourceDescription": "Описание поставщика авторизации", + "sourceIcon": "Значок провайдера аутентификации", + "sourceCategory": "Категория поставщика прав доступа", + "souceIssuerURI": "URI эмитента провайдера аутентификации", + "souceAuthorizationEndpoint": "Конечная точка авторизации Auth Provider", + "souceTokenEndpoint": "Конечная точка токена поставщика аутентификации", + "souceUserInfoEndpoint": "Конечная точка информации о пользователе", + "userInfoIntrospection": "Использование интроспекции пользователей OpenID", + "userCanSelectAccounts": "Пользователь может выбирать из учетных записей", + "sourceCategoryEnterprise": "Идентификация предприятия", + "sourceCategoryCloud": "Облачные сервисы", + "sourceCategorySocial": "Социальные сети", + "sourceCategoryDevelopment": "Разработка", + "sourceCategoryTools": "Инструменты и продуктивность", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "Настроить вид слота", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "Lottie JSON", + "searchAnimation": "Поиск Анимация", + "speed": "Скорость", + "width": "Ширина", + "height": "Высота", + "backgroundColor": "Цвет фона", + "animationStart": "Начало анимации", + "valueDesc": "Текущие данные в формате JSON", + "loop": "Петля", + "auto": "Автомобиль", + "onHover": "При наведении", + "onTrigger": "При срабатывании", + "singlePlay": "Одиночная игра", + "endlessLoop": "Бесконечная петля", + "keepLastFrame": "Сохранять отображение последнего кадра", + "fit": "Fit", + "align": "Выровнять", + "load": "Нагрузка", + "play": "В игре", + "pause": "На паузе", + "stop": "На остановке", + "complete": "В комплекте", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "Цвет названия", + "subTitleColor": "Цвет субтитров", + "labelColor": "Цвет этикетки", + "value": "Временные данные", + "mode": "Заказ дисплея", + "left": "Право на содержание", + "right": "Содержание Слева", + "alternate": "Альтернативный порядок содержания", + "modeTooltip": "Настройте отображение содержимого слева/справа или поочередно на обеих сторонах временной шкалы", + "reverse": "Самые новые события первыми", + "pending": "Текст ожидающего узла", + "pendingDescription": "При установке отображается последний узел с текстом и индикатором ожидания.", + "defaultPending": "Непрерывное совершенствование", + "clickTitleEvent": "Нажмите кнопку Название события", + "clickTitleEventDesc": "Нажмите кнопку Название события", + "Introduction": "Вводные ключи", + "helpTitle": "Название временной шкалы (обязательно)", + "helpsubTitle": "Подзаголовок временной шкалы", + "helpLabel": "Метка временной шкалы, используемая для отображения дат", + "helpColor": "Указывает цвет узла временной шкалы", + "helpDot": "Отображение узлов временной шкалы в виде значков Ant Design", + "helpTitleColor": "Индивидуальное управление цветом заголовка узла", + "helpSubTitleColor": "Индивидуальное управление цветом субтитров узла", + "helpLabelColor": "Индивидуальный контроль цвета значка узла", + "valueDesc": "Данные временной шкалы", + "clickedObjectDesc": "Данные о нажатом элементе", + "clickedIndexDesc": "Указатель нажатых элементов", + }, + "comment": { + ...en.comment, + + "value": "Как составить список данных", + "showSendButton": "Разрешение комментариев", + "title": "Название", + "titledDefaultValue": "%d Комментарий всего", + "placeholder": "Shift + Enter для комментария", + "placeholderDec": "Место для размещения", + "buttonTextDec": "Название кнопки", + "buttonText": "Как", + "mentionList": "Данные списка упоминаний", + "mentionListDec": "Ключевые слова", + "userInfo": "Информация о пользователе", + "dateErr": "Ошибка даты", + "commentList": "Как составить список", + "deletedItem": "Удаленный элемент", + "submitedItem": "Представленный предмет", + "deleteAble": "Показать кнопку удаления", + "Introduction": "Ключи для введения", + "helpUser": "Информация о пользователе (Обязательно)", + "helpname": "Имя пользователя (Обязательно)", + "helpavatar": "URL-адрес аватара (высокий приоритет)", + "helpdisplayName": "Отображаемое имя (низкий приоритет)", + "helpvalue": "Как содержание", + "helpcreatedAt": "Дата создания", + }, + "mention": { + ...en.mention, + + "mentionList": "Данные списка упоминаний", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "Auto Complete Value", + "checkedValueFrom": "Проверенное значение От", + "ignoreCase": "Поиск игнорировать дело", + "searchLabelOnly": "Поиск только по ярлыку", + "searchFirstPY": "Поиск первого пиньина", + "searchCompletePY": "Поиск Полный пиньинь", + "searchText": "Текст для поиска", + "SectionDataName": "Автозаполнение данных", + "valueInItems": "Стоимость в предметах", + "type": "Тип", + "antDesign": "AntDesign", + "normal": "Нормальный", + "selectKey": "Ключ", + "selectLable": "Этикетка", + "ComponentType": "Тип компонента", + "colorIcon": "Голубой", + "grewIcon": "Серый", + "noneIcon": "Нет", + "small": "Маленький", + "large": "Большой", + "componentSize": "Размер компонента", + "Introduction": "Вводные ключи", + "helpLabel": "Этикетка", + "helpValue": "Значение", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "Колонны", + "addColumn": "Добавить колонку", + "columnDefinition": "Определение столбца", + "rowDefinition": "Определение строки", + "columnGap": "Зазор между колоннами", + "rowGap": "Разрыв в ряду", + "atLeastOneColumnError": "Отзывчивый макет сохраняет хотя бы одну колонку", + "columnsPerRow": "Столбцы на строку", + "columnsSpacing": "Расстояние между столбцами (px)", + "horizontal": "Горизонтальный", + "vertical": "Вертикальный", + "mobile": "Мобильный", + "tablet": "Планшет", + "desktop": "Настольный компьютер", + "rowStyle": "Стиль ряда", + "columnStyle": "Стиль колонны", + "minWidth": "Мин. Ширина", + "rowBreak": "Перерыв между рядами", + "useComponentWidth": "Использование собственного размера", + "useComponentWidthDesc": "Используйте ширину контейнера вместо ширины приложения", + "matchColumnsHeight": "Соответствие высоты столбцов", + "rowLayout": "Расположение рядов", + "columnsLayout": "Макет колонок", + "columnsDefinitionTooltip": "Колонки можно определять произвольно, основываясь на свойствах CSS columns. Например, 'auto auto' создаст две колонки с одинаковой шириной. Подробнее здесь: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "Строки могут быть определены произвольно на основе свойств CSS rows. Например, 'auto auto' создаст две строки с одинаковой высотой. Подробнее здесь: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "Просмотр областей", + "addColumn": "Добавить области", + "columnDefinition": "Определение области", + "atLeastOneColumnError": "Отзывчивый макет сохраняет хотя бы одну колонку", + "horizontal": "Горизонтальный", + "vertical": "Вертикальный", + "areaStyle": "Стиль колонны", + "minWidth": "Мин. Ширина", + "maxWidth": "Макс. Ширина", + "width": "Ширина", + "collapsible": "Область является разборной?", + "matchColumnsHeight": "Соответствие площадей Высота", + "orientation": "Ориентация сплит-макета", + "orientationTooltip": "Визуальный порядок, в котором выстраиваются области. Для создания сложных макетов можно вставлять компоненты Splitlayout внутрь компонентов Splitlayout.", + }, + "navLayout": { + ...en.navLayout, + + "mode": "Режим", + "modeInline": "Inline", + "modeVertical": "Вертикальный", + "modeHorizontal": "Горизонтальный", + "width": "Ширина", + "widthTooltip": "Пиксель или процент, например, 520, 60%", + "navStyle": "Меню стиля", + "navItemStyle": "Стиль пункта меню", + "navBackground": "Фоновое изображение", + "mobileNavVerticalOrientation": "Вертикальная ориентация", + "mobileNavVerticalMaxWidth": "Максимальная ширина", + "mobileNavBarHeight": "Высота панели навигации", + "mobileNavVerticalShowSeparator": "Показать разделитель", + "mobileNavIconSize": "Размер значка", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) Международная линия перемены даты W", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(UTC-10:00) Гавайи", + "UTC-09:00": "(UTC-09:00) Аляска", + "UTC-08:00": "(UTC-08:00) Баха Калифорния", + "UTC-07:00": "(UTC-07:00) Тихоокеанское время (США)", + "UTC-06:00": "(UTC-06:00) Центральное время (США)", + "UTC-05:00": "(UTC-05:00) Восточное время (США)", + "UTC-04:00": "(UTC-04:00) Атлантическое время", + "UTC-03:00": "(UTC-03:00) Буэнос-Айрес", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) Кабо-Верде", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00) Берлин, Рим", + "UTC+02:00": "(UTC+02:00) Афины, Бухарест", + "UTC+03:00": "(UTC+03:00) Москва", + "UTC+04:00": "(UTC+04:00) Дубай, Маскат", + "UTC+05:00": "(UTC+05:00) Карачи", + "UTC+05:30": "(UTC+05:30) Нью-Дели", + "UTC+05:45": "(UTC+05:45) Катманду", + "UTC+06:00": "(UTC+06:00) Дакка", + "UTC+06:30": "(UTC+06:30) Янгон", + "UTC+07:00": "(UTC+07:00) Бангкок", + "UTC+08:00": "(UTC+08:00) Пекин, Гонконг", + "UTC+09:00": "(UTC+09:00) Токио, Сеул", + "UTC+09:30": "(UTC+09:30) Аделаида, Дарвин", + "UTC+10:00": "(UTC+10:00) Сидней", + "UTC+11:00": "(UTC+11:00) Соломоновы острова, Новая Каледония", + "UTC+12:00": "(UTC+12:00) Окленд, Фиджи", + "UTC+13:00": "(UTC+13:00) Нукуалофа, Самоа", + "UserChoice": "Выбор пользователя", + }, + "tour": { + ...en.tour, + + "section1Title": "Шаги", + "section1Subtitle": "Шаги", + "tooltipExampleHeader": "Пример:", + "tooltipSignatureHeader": "Подпись:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "Название", + "placeholder": "Добро пожаловать", + "tooltip": "Название шага. Здесь можно использовать любой HTML.", + }, + "description": { + ...en.tour.options.description, + + "label": "Описание", + "placeholder": "Добро пожаловать на Lowcoder!", + "tooltip": "Описание шага. Здесь может использоваться любой HTML.", + }, + "mask": { + ...en.tour.options.mask, + + "label": "Маска", + "tooltip": "Включать ли маскирование, изменять ли стиль маски и цвет заливки, передавая пользовательский реквизит, по умолчанию используется свойство `mask` в Tour.", + "tooltipValidTypes": "Допустимые типы ввода: `true`, `false`, empty, или JSON-объект, соответствующий схеме CSSProperties из Antd.", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "Стрела", + "tooltip": "Включает и выключает стрелку или перемещает ее в центр компонента, если это необходимо, в противном случае стрелка всегда будет указывать на верхнюю часть компонента.", + "tooltipFunctionSignature": "булево | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "Тип", + "tooltip": "Тип всплывающей подсказки, который влияет на цвет фона и цвет текста. Цветами можно управлять в разделе стилизации основного тура.", + }, + "target": { + ...en.tour.options.target, + + "label": "Компонент", + "tooltip": "Компонент, на который вы хотите поместить всплывающую подсказку, или оставьте его пустым, если вы просто хотите, чтобы модальное окно находилось в центре экрана.", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "URI изображения обложки", + "tooltip": "URI для изображения, которое вы хотите отобразить вместе с шагом", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "Рендер индикаторов", + "tooltip": "Предоставляет пользовательский индикатор того, на каком этапе вы находитесь", + "tooltipValidTypes": "Format - это функция, которая принимает два аргумента, `current` и `total`, и возвращает ReactNode", + "tooltipFunctionSignatureHeader": "Подпись:", + "tooltipFunctionSignature": "(текущий: число, общий: число) => ReactNode", + "tooltipExampleHeader": "Пример:", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "Отключить взаимодействие", + "tooltip": "Отключите взаимодействие в выделенной области.", + }, + "mask": { + ...en.tour.mask, + + "label": "Маска", + "tooltip": "Включать ли маскирование, изменять ли стиль маски и цвет заливки при передаче пользовательского реквизита, по умолчанию используется свойство `mask` в Tour. Может быть переопределено на уровне шага.", + "tooltipValidTypes": "Допустимые типы ввода: `true`, `false`, empty, или JSON-объект, соответствующий схеме CSSProperties из Antd.", + }, + "placement": { + ...en.tour.placement, + + "label": "Размещение", + "tooltip": "Положение направляющей карты относительно целевого элемента. Может быть переопределено на уровне шага.", + "tooltipValidOptions": "Валидные опции", + "tooltipValidOptionsAbove": "Над компонентом:", + "tooltipValidOptionsLeft": "Слева от компонента:", + "tooltipValidOptionsRight": "Справа от компонента:", + "tooltipValidOptionsBelow": "Ниже компонента:", + "tooltipValidOptionsOnTop": "На верхней части компонента:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "Стрела", + "tooltip": "Включает и выключает стрелку или перемещает ее, чтобы она указывала на центр компонента, если это необходимо, в противном случае стрелка всегда будет указывать на верх компонента. Может быть переопределено на уровне шага.", + "tooltipFunctionSignature": "булево | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "Тип", + "tooltip": "Тип всплывающей подсказки, который влияет на цвет фона и цвет текста. Цветами можно управлять в разделе стилизации основного тура. Их можно переопределить на уровне шагов.", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://github.com/lowcoder-org/lowcoder-create-component-plugin", + "devNpmPluginText": "Как разработать npm-плагин", + "useHost": "https://docs.lowcoder.cloud/setup-and-run/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-applications/app-interaction/event-handlers", + "thirdLib": "https://docs.lowcoder.cloud/lowcoder-extension/use-third-party-libraries-in-apps", + "thirdLibUrlText": "Используйте библиотеки сторонних разработчиков", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "Поиск изображений", + "searchAnimation": "Поиск Анимация", + "searchIcon": "Значок поиска", + "noResults": "Результаты не найдены.", + "buySubscriptionTitle": "Разблокируйте премиальные активы", + "buySubscriptionContent": "Этот актив эксклюзивен для подписчиков Медиа Пакета. Подпишитесь на Media Package и скачивайте высококачественные активы без ограничений!", + "buySubscriptionButton": "Подписаться сейчас", + }, + +}; diff --git a/translations/locales/zh-updated.js b/translations/locales/zh-updated.js new file mode 100644 index 0000000000..cb53b6586f --- /dev/null +++ b/translations/locales/zh-updated.js @@ -0,0 +1,4844 @@ + +import { en } from "./en.js"; +export const zh = { + ...en, + + "productName": "低编码器", + "productDesc": "快速构建内部工具,无任何限制", + "notSupportedBrowser": "您当前使用的浏览器可能存在兼容性问题.为了获得更好的用户体验,建议使用最新版本的Chrome浏览器", + "create": "创建", + "move": "移动", + "addItem": "添加", + "newItem": "新建", + "copy": "复制", + "rename": "重命名", + "delete": "删除", + "deletePermanently": "删除", + "remove": "移除", + "recover": "恢复", + "edit": "编辑", + "view": "查看", + "value": "值", + "data": "数据", + "information": "信息", + "success": "成功", + "warning": "警告", + "error": "错误", + "reference": "参考", + "text": "文本", + "basic": "基础", + "label": "标题", + "layout": "布局", + "color": "颜色", + "form": "表单", + "menu": "菜单", + "menuItem": "菜单项", + "ok": "确定", + "cancel": "取消", + "finish": "完成", + "reset": "重置", + "icon": "图标", + "code": "代码", + "title": "标题", + "emptyContent": "空内容", + "more": "更多", + "search": "搜索", + "back": "返回", + "accessControl": "访问控制", + "copySuccess": "已复制", + "copyError": "复制错误", + "api": { + ...en.api, + + "publishSuccess": "已发布", + "recoverFailed": "恢复失败", + "needUpdate": "您当前的版本过旧,请升级至最新版本.", + }, + "codeEditor": { + ...en.codeEditor, + + "notSupportAutoFormat": "当前的代码编辑器不支持自动格式化", + "fold": "折叠", + }, + "exportMethod": { + ...en.exportMethod, + + "setDesc": "设置属性:{property}", + "clearDesc": "清除属性:{property}", + "resetDesc": "重置属性:{property} 为默认值", + }, + "method": { + ...en.method, + + "focus": "设置焦点", + "focusOptions": "焦点选项,参考HTMLElement.focus()方法", + "blur": "移除焦点", + "click": "点击", + "select": "选择所有文本", + "setSelectionRange": "设置当前文本选择的起始和结束位置", + "selectionStart": "从头选择字符.", + "selectionEnd": "从倒数选择字符.", + "setRangeText": "替换一段文本", + "replacement": "要插入的字符串.", + "replaceStart": "从头开始替换字符.", + "replaceEnd": "从倒数开始替换字符.", + }, + "errorBoundary": { + ...en.errorBoundary, + + "encounterError": "加载组件失败,请检查您的配置.", + "clickToReload": "点击重新加载", + "errorMsg": "错误:", + }, + "imgUpload": { + ...en.imgUpload, + + "notSupportError": "仅支持上传 {types} 类型的图像", + "exceedSizeError": "图像大小不应超过 {size}", + }, + "gridCompOperator": { + ...en.gridCompOperator, + + "notSupport": "不支持", + "selectAtLeastOneComponent": "请至少选择一个组件", + "selectCompFirst": "请在复制之前选择组件", + "noContainerSelected": "[错误] 未选择容器", + "deleteCompsSuccess": "删除成功,您可以使用 {undoKey} 撤销操作.", + "deleteCompsTitle": "删除组件", + "deleteCompsBody": "确定要删除所选的 {compNum} 个组件吗?", + "cutCompsSuccess": "剪切成功!您可以使用 {pasteKey} 进行粘贴,或使用 {undoKey} 撤销操作.", + }, + "leftPanel": { + ...en.leftPanel, + + "queries": "查询", + "globals": "全局变量", + "propTipsArr": "{num} 项", + "propTips": "{num} 个键", + "propTipArr": "{num} 项", + "propTip": "{num} 个键", + "stateTab": "状态", + "settingsTab": "设置", + "toolbarTitle": "其他", + "toolbarPreload": "脚本和样式", + "components": "组件", + "modals": "对话框", + "expandTip": "点击展开 {component} 的数据", + "collapseTip": "点击折叠 {component} 的数据", + "layers": "图层", + "activatelayers": "激活图层", + "selectedComponents": "已选组件", + "displayComponents": "控制显示屏", + "lockComponents": "控制位置", + }, + "bottomPanel": { + ...en.bottomPanel, + + "title": "查询", + "run": "运行", + "noSelectedQuery": "未选择查询", + "metaData": "元数据", + "noMetadata": "无元数据", + "metaSearchPlaceholder": "搜索元数据", + "allData": "所有表", + }, + "rightPanel": { + ...en.rightPanel, + + "propertyTab": "属性", + "noSelectedComps": "未选择组件,点击以选择一个.", + "createTab": "插入", + "searchPlaceHolder": "搜索组件或模块", + "uiComponentTab": "组件", + "extensionTab": "扩展", + "modulesTab": "模块", + "moduleListTitle": "模块", + "pluginListTitle": "插件", + "emptyModules": "模块是可复用的组件和查询的组合.", + "searchNotFound": "找不到合适的组件?提交一个新的想法", + "emptyPlugins": "未添加插件.", + "contactUs": "联系我们", + "issueHere": "这里.", + "folderListTitle": "文件夹", + }, + "prop": { + ...en.prop, + + "expand": "展开", + "columns": "列", + "videokey": "视频键", + "rowSelection": "行选择", + "toolbar": "工具栏", + "pagination": "分页", + "logo": "标志", + "style": "样式", + "inputs": "输入", + "meta": "元数据", + "data": "数据", + "hide": "隐藏", + "loading": "加载中", + "disabled": "禁用", + "placeholder": "占位符", + "showClear": "显示清除按钮", + "showSearch": "可搜索", + "defaultValue": "默认值", + "required": "必填字段", + "showEmptyValidation": "清空/重置时显示验证", + "readOnly": "只读", + "readOnlyTooltip": "只读组件外观与普通组件相同,可以获得焦点和选择,但不能修改", + "minimum": "最小值", + "maximum": "最大值", + "regex": "正则表达式", + "minLength": "最小长度", + "maxLength": "最大长度", + "height": "高度", + "width": "宽度", + "selectApp": "应用程序", + "showCount": "显示计数", + "tabIndex": "索引选项卡", + "textType": "文本类型", + "customRule": "自定义规则", + "customRuleTooltip": "如果结果是非空字符串,则为错误消息.如果为空或null,则验证通过.\n示例:", + "manual": "手动", + "map": "映射", + "json": "JSON", + "use12Hours": "使用12小时制", + "hourStep": "小时步长", + "minuteStep": "分钟步长", + "secondStep": "秒步长", + "minDate": "最小日期", + "maxDate": "最大日期", + "minTime": "最小时间", + "maxTime": "最大时间", + "type": "类型", + "showLabel": "显示标签", + "showHeader": "显示标题", + "showBody": "显示表体", + "showSider": "显示 Sider", + "innerSider": "内部 Sider", + "showFooter": "显示表尾", + "maskClosable": "点击蒙层关闭", + "escapeClose": "启用 Escape 键关闭功能", + "toggleClose": "启用关闭按钮", + "showMask": "显示蒙层", + "textOverflow": "文本溢出", + "scrollbar": "滚动条", + "showVerticalScrollbar": "显示垂直滚动条", + "showHorizontalScrollbar": "显示水平滚动条", + "siderScrollbar": "在 Sider 中显示滚动条", + "mainScrollbar": "在主要内容中显示滚动条", + "modalScrollbar": "在模态中显示滚动条", + "drawerScrollbar": "在抽屉中显示滚动条", + "textAreaScrollBar": "在文本区域显示滚动条", + "siderRight": "右侧显示屏", + "siderWidth": "凫水宽度", + "siderWidthTooltip": "网格宽度支持百分比(%)和像素(px)。", + "siderCollapsedWidth": "折叠宽度", + "siderCollapsedWidthTooltip": "折叠宽度支持百分比(%)和像素(px)。", + "siderCollapsible": "Sider 折叠式", + "siderCollapsed": "Sider 崩溃", + "contentScrollbar": "在内容中显示滚动条", + "appID": "应用程序 ID", + "showApp": "在内容区域显示应用程序", + "showAppTooltip": "您可以在内容区域显示整个 Lowcoder 应用程序。请注意,对于模块,我们不支持输入、输出事件和方法。", + "baseURL": "Lowcoder API 基本 URL", + "horizontal": "水平", + "minHorizontalWidth": "最小水平宽度", + "component": "自有组件标识符", + "className": "CSS 类名称", + "dataTestId": "个人 ID", + "preventOverwriting": "防止覆盖样式", + "color": "颜色", + "horizontalGridCells": "垂直网格单元", + "verticalGridCells": "垂直网格单元格", + "timeZone": "时区", + "pickerMode": "选取器模式", + }, + "autoHeightProp": { + ...en.autoHeightProp, + + "auto": "自动", + "fixed": "固定", + }, + "textOverflowProp": { + ...en.textOverflowProp, + + "ellipsis": "鼠标悬停", + "wrap": "包装", + }, + "labelProp": { + ...en.labelProp, + + "text": "标题", + "tooltip": "提示", + "position": "位置", + "collapse": "崩溃", + "left": "左", + "right": "对", + "top": "上", + "align": "对齐", + "width": "宽度", + "widthTooltip": "组件标题的宽度,支持百分比(%)和像素(px)为单位.", + }, + "eventHandler": { + ...en.eventHandler, + + "eventHandlers": "事件处理器", + "emptyEventHandlers": "无事件处理器", + "incomplete": "选择不完整", + "inlineEventTitle": "在 {eventName} 时", + "event": "事件", + "action": "操作", + "noSelect": "无选择", + "runQuery": "运行查询", + "selectQuery": "选择查询", + "controlComp": "控制组件", + "runScript": "运行JavaScript代码", + "runScriptPlaceHolder": "在此处编写代码", + "component": "组件", + "method": "方法", + "setTempState": "设置临时状态", + "state": "状态", + "triggerModuleEvent": "触发模块事件", + "moduleEvent": "模块事件", + "goToApp": "跳转到指定应用", + "queryParams": "查询参数", + "queryVariables": "查询变量", + "hashParams": "哈希参数", + "showNotification": "显示通知", + "text": "文本", + "level": "级别", + "duration": "持续时间", + "notifyDurationTooltip": "时间单位可以是秒(默认为s)或毫秒(ms),最大持续时间为{max}秒", + "goToURL": "跳转到URL链接", + "openInNewTab": "在新标签页中打开", + "copyToClipboard": "复制到剪贴板", + "copyToClipboardValue": "值", + "export": "导出数据", + "exportNoFileType": "未选择(可选)", + "fileName": "文件名", + "fileNameTooltip": "支持使用扩展名指定文件类型,例如image.png.", + "fileType": "文件类型", + "condition": "满足条件时运行", + "conditionTooltip": "只有当此条件评估为“true”时才运行事件处理器", + "debounce": "防抖", + "throttle": "节流", + "slowdownTooltip": "使用防抖或节流控制操作触发的频率,时间单位可以是毫秒(默认为ms)或秒(s).", + "notHandledError": "未处理", + "currentApp": "当前应用程序", + "inputEventHandlers": "输入事件处理程序", + "inputEventHandlersDesc": "与用户输入有关的事件处理程序", + "buttonEventHandlers": "按钮事件处理程序", + "buttonEventHandlersDesc": "与按钮点击相关的事件处理程序", + "changeEventHandlers": "更改事件处理程序", + "changeEventHandlersDesc": "与数值更改相关的事件处理程序", + "editedEventHandlers": "编辑事件处理程序", + "editedEventHandlersDesc": "与元素编辑状态相关的事件处理程序", + "clickEventHandlers": "点击事件处理程序", + "clickEventHandlersDesc": "与点击有关的事件处理程序", + "keyDownEventHandlers": "按键下降事件处理程序", + "keyDownEventHandlersDesc": "与按键下降事件相关的事件处理程序", + "checkboxEventHandlers": "复选框事件处理程序", + "checkboxEventHandlersDesc": "与复选框更改相关的事件处理程序", + "dragEventHandlers": "拖动事件处理程序", + "dragEventHandlersDesc": "与拖放事件相关的事件处理程序", + "elementEventHandlers": "元素事件处理程序", + "elementEventHandlersDesc": "与通用数据元素事件相关的事件处理程序", + "mediaEventHandlers": "媒体事件处理程序", + "mediaEventHandlersDesc": "与媒体事件相关的事件处理程序", + "scannerEventHandlers": "扫描仪事件处理程序", + "scannerEventHandlersDesc": "与扫描仪事件相关的事件处理程序", + "chartEventHandlers": "图表事件处理程序", + "chartEventHandlersDesc": "与图表事件相关的事件处理程序", + "geoMapEventHandlers": "地理地图事件处理程序", + "geoMapEventHandlersDesc": "与地理地图事件相关的事件处理程序", + "stepEventHandlers": "步骤事件处理程序", + "stepEventHandlersDesc": "与步骤 UI 事件相关的事件处理程序", + "shareEventHandlers": "共享事件处理程序", + "shareEventHandlersDesc": "与共享事件相关的事件处理程序", + "selectEventHandlers": "选择事件处理程序", + "selectEventHandlersDesc": "与选择事件相关的事件处理程序", + "meetingEventHandlers": "会议活动处理程序", + "meetingEventHandlersDesc": "与会议活动相关的事件处理程序", + "collaborationEventHandlers": "协作事件处理程序", + "collaborationEventHandlersDesc": "与协作事件相关的事件处理程序", + "set": "设置", + "clear": "清晰", + "reset": "重置", + "messageType": "信息类型", + "placement": "安置", + "description": "说明", + }, + "event": { + ...en.event, + + "submit": "提交", + "submitDesc": "在提交时触发", + "change": "更改", + "changeDesc": "在值更改时触发", + "focus": "聚焦", + "focusDesc": "在聚焦时触发", + "blur": "失焦", + "blurDesc": "在失焦时触发", + "click": "点击", + "clickDesc": "在点击时触发", + "doubleClick": "双击", + "doubleClickDesc": "在双击时触发", + "rightClick": "右键点击", + "rightClickDesc": "在右键点击时触发", + "keyDown": "按键", + "keyDownDesc": "在按键时触发", + "select": "选择", + "selectDesc": "在选择时触发", + "checked": "已检查", + "checkedDesc": "在复选框被选中时触发", + "unchecked": "未检查", + "uncheckedDesc": "在复选框未选中时触发", + "drag": "拖拽", + "dragDesc": "在拖拽时触发", + "drop": "放置", + "dropDesc": "在放置时触发", + "open": "打开", + "openDesc": "在打开时触发", + "mute": "静音", + "muteDesc": "在静音时触发", + "unmute": "取消静音", + "unmuteDesc": "在取消静音时触发", + "showCamera": "显示摄像头", + "showCameraDesc": "在显示摄像头时触发", + "hideCamera": "隐藏摄像头", + "hideCameraDesc": "在隐藏摄像头时触发", + "shareScreen": "共享屏幕", + "shareScreenDesc": "在共享屏幕时触发", + "shareScreenEnd": "共享屏幕结束", + "shareScreenEndDesc": "在共享屏幕结束时触发", + "shareControl": "共享控制", + "shareControlDesc": "在共享控制时触发", + "shareControlEnd": "共享控制结束", + "shareControlEndDesc": "在共享控制结束时触发", + "shareContent": "共享内容", + "shareContentDesc": "在共享内容时触发", + "shareContentEnd": "共享内容结束", + "shareContentEndDesc": "在共享内容结束时触发", + "stopShare": "停止共享", + "stopShareDesc": "在停止共享时触发", + "meetingStart": "会议开始", + "meetingStartDesc": "在会议开始时触发", + "meetingEnd": "会议结束", + "meetingEndDesc": "在会议结束时触发", + "meetingJoin": "会议加入", + "meetingJoinDesc": "在会议加入时触发", + "meetingLeave": "会议离开", + "meetingLeaveDesc": "在会议离开时触发", + "play": "播放", + "playDesc": "在播放时触发", + "pause": "暂停", + "pauseDesc": "在暂停时触发", + "ended": "结束", + "endedDesc": "在结束时触发", + "step": "步骤", + "stepDesc": "在步骤时触发", + "next": "下一步", + "nextDesc": "在下一步时触发", + "finished": "完成", + "finishedDesc": "在完成时触发", + "saved": "保存", + "savedDesc": "在保存时触发", + "edited": "编辑", + "editedDesc": "在编辑时触发", + "geoMapMove": "地图移动", + "geoMapMoveDesc": "在地图移动时触发", + "geoMapZoom": "地图缩放", + "geoMapZoomDesc": "在地图缩放时触发", + "geoMapSelect": "地图选择", + "geoMapSelectDesc": "在地图选择时触发", + "scannerSuccess": "扫描成功", + "scannerSuccessDesc": "在扫描成功时触发", + "scannerError": "扫描失败", + "scannerErrorDesc": "在扫描失败时触发", + "chartZoom": "图表缩放", + "chartZoomDesc": "在图表缩放时触发", + "chartHover": "图表悬停", + "chartHoverDesc": "在图表悬停时触发", + "chartSelect": "图表选择", + "chartSelectDesc": "在图表选择时触发", + "chartDeselect": "图表取消选择", + "chartDeselectDesc": "在图表取消选择时触发", + "close": "关闭", + "closeDesc": "在关闭时触发", + "parse": "解析", + "parseDesc": "在解析时触发", + "success": "成功", + "successDesc": "在成功时触发", + "delete": "删除", + "deleteDesc": "在删除时触发", + "mention": "提及", + "mentionDesc": "在提及时触发", + "search": "搜索", + "searchDesc": "搜索触发器", + "selectedChange": "选择更改", + "selectedChangeDesc": "已更改选择的触发器", + "clickExtra": "点击行动", + "clickExtraDesc": "点击额外元素时的触发器", + "start": "开始", + "startDesc": "启动时的触发器", + "resume": "简历", + "resumeDesc": "简历中的触发因素", + "countdown": "倒计时", + "countdownDesc": "倒计时结束时的触发器", + "reset": "重置结束", + "resetDesc": "重置计时器触发器", + "refresh": "刷新", + "refreshDesc": "刷新时的触发器", + "sortChange": "排序变化", + "sortChangeDesc": "排序变化触发器", + }, + "style": { + ...en.style, + + "boxShadowColor": "阴影颜色", + "boxShadow": "盒影", + "opacity": "不透明度", + "animation": "动画", + "animationIterationCount": "动画迭代次数", + "animationDelay": "动画延迟", + "animationDuration": "动画时长", + "resetTooltip": "重置样式.删除输入框的值以重置单个字段.", + "textColor": "文字颜色", + "contrastText": "对比文本颜色", + "generated": "已生成", + "customize": "自定义", + "staticText": "静态文本", + "accent": "强调色", + "validate": "验证消息", + "border": "边框颜色", + "borderRadius": "边框半径", + "borderWidth": "边框宽度", + "borderStyle": "边框样式", + "background": "背景", + "headerBackground": "头部背景", + "siderBackground": "Sider 背景", + "footerBackground": "底部背景", + "fill": "填充", + "track": "轨道", + "links": "链接", + "thumb": "滑块", + "thumbBorder": "滑块边框", + "checked": "已选中", + "unchecked": "未选中", + "handle": "手柄", + "tags": "标签", + "tagsText": "标签文本", + "multiIcon": "多选图标", + "tabText": "选项卡文本", + "tabAccent": "选项卡强调色", + "checkedBackground": "已选中背景", + "uncheckedBackground": "未选中背景", + "uncheckedBorder": "未选中边框", + "indicatorBackground": "指示器背景", + "tableCellText": "单元格文本", + "selectedRowBackground": "选中行背景", + "hoverRowBackground": "悬停行背景", + "hoverBackground": "悬停背景", + "textTransform": "文本变换", + "textDecoration": "文字装饰", + "alternateRowBackground": "交替行背景", + "tableHeaderBackground": "表头背景", + "tableHeaderText": "表头文本", + "toolbarBackground": "工具栏背景", + "toolbarText": "工具栏文本", + "pen": "画笔", + "footerIcon": "底部图标", + "tips": "提示", + "margin": "外边距", + "padding": "内边距", + "marginLeft": "左外边距", + "marginRight": "右外边距", + "marginTop": "上外边距", + "marginBottom": "下外边距", + "containerHeaderPadding": "上内边距", + "containerFooterPadding": "下内边距", + "containerSiderPadding": "Sider 衬垫", + "containerBodyPadding": "内边距", + "minWidth": "最小宽度", + "aspectRatio": "宽高比", + "text": "文本", + "textSize": "字体大小", + "textWeight": "字体粗细", + "fontFamily": "字体", + "fontStyle": "字体风格", + "backgroundImage": "背景图片", + "backgroundImageRepeat": "背景图片重复", + "backgroundImageSize": "背景图片大小", + "backgroundImagePosition": "背景图片位置", + "backgroundImageOrigin": "背景图片原点", + "headerBackgroundImage": "头部背景图片", + "headerBackgroundImageRepeat": "头部背景图片重复", + "headerBackgroundImageSize": "头部背景图片大小", + "headerBackgroundImagePosition": "头部背景图片位置", + "headerBackgroundImageOrigin": "头部背景图片原点", + "footerBackgroundImage": "底部背景图片", + "footerBackgroundImageRepeat": "底部背景图片重复", + "footerBackgroundImageSize": "底部背景图片大小", + "footerBackgroundImagePosition": "底部背景图片位置", + "footerBackgroundImageOrigin": "底部背景图片原点", + "rotation": "旋转", + "alternateBackground": "备用背景色", + "headerText": "标题文字颜色", + "labelColor": "标签颜色", + "label": "标签颜色", + "lineHeight": "线条高度", + "subTitleColor": "副标题颜色", + "titleText": "标题颜色", + "success": "成功色彩", + "siderBackgroundImage": "Sider 背景图片", + "siderBackgroundImageRepeat": "Sider 背景图片重复", + "siderBackgroundImageSize": "滑块背景图像大小", + "siderBackgroundImagePosition": "选择背景图片位置", + "siderBackgroundImageOrigin": "Sider 背景图片来源", + "activeBackground": "活动背景颜色", + "labelBackground": "标签背景颜色", + "gradientBackground": "渐变背景色", + "direction": "方向", + "chartOpacity": "不透明度", + "chartBoxShadow": "盒影", + "chartBorderStyle": "边框样式", + "chartBorderRadius": "边界半径", + "chartBorderWidth": "边框宽度", + "chartTextSize": "文字大小", + "chartTextWeight": "文本重量", + "chartFontFamily": "字体家族", + "chartFontStyle": "字体样式", + "chartBackgroundColor": "背景颜色", + "chartGradientColor": "渐变色", + "chartShadowColor": "阴影颜色", + "chartBorderColor": "边框颜色", + "chartTextColor": "文字颜色", + "detailSize": "详细尺寸", + "radiusTip": "指定元素角的半径。例如:5px,50%,或1em。", + "gapTip": "指定网格或弹性容器中行和列之间的间距。例如:10px,1rem,或5%。", + "cardRadiusTip": "定义卡片组件的角半径。例如:10px,15px。", + "borderWidthTip": "指定元素边框的宽度。例如:1px,0.5em,或thin。", + "borderStyleTip": "设置边框的样式。例如:solid,dashed,dotted或none。", + "marginTip": "定义元素周围的外边距。例如:10px,2em或auto。您还可以组合使用,例如:0px 20px,或为四个方向分别指定:0px 1px 5px 2px。", + "directionTip": "指定布局的方向。例如:row,column或row-reverse。", + "detailSizeTip": "定义布局中特定细节的大小。例如:10px,2em,或80%。", + "chartOpacityTip": "指定图表的透明度。例如:1(不透明),0.5(50%透明)。", + "chartBoxShadowTip": "定义图表框投下的阴影。例如:0px 4px 8px rgba(0, 0, 0, 0.3)。", + "chartBorderStyleTip": "设置图表边框的样式。例如:solid,dashed或dotted。", + "chartBorderRadiusTip": "指定图表边框的角半径。例如:10px,20%。", + "chartBorderWidthTip": "指定图表边框的宽度。例如:2px,0.5em。", + "chartTextSizeTip": "指定图表文字的字体大小。例如:16px,1em或120%。", + "chartTextWeightTip": "指定图表文字的字体粗细。例如:normal,bold或700。", + "chartFontFamilyTip": "指定图表文字的字体系列。例如:Arial,Helvetica或'Times New Roman'。", + "chartFontStyleTip": "指定图表文字的字体样式。例如:normal,italic或oblique。", + "animationIterationCountTip": "定义动画运行的次数。例如:infinite,1或3。", + "opacityTip": "设置元素的透明度级别。例如:1(不透明),0.5(50%透明),0(不可见)。", + "boxShadowColorTip": "定义盒子阴影的颜色。例如:rgba(0, 0, 0, 0.3),#FF5733。", + "chartBackgroundColorTip": "设置图表的背景颜色。例如:#FFFFFF,rgba(255, 255, 255, 0.8)。", + "chartGradientColorTip": "指定图表背景的渐变颜色。例如:linear-gradient(to right, #ff7e5f, #feb47b)。", + "chartShadowColorTip": "定义图表阴影的颜色。例如:rgba(0, 0, 0, 0.2),#333333。", + "chartBorderColorTip": "指定图表边框的颜色。例如:#000000,rgba(0, 0, 0, 0.5)。", + "chartTextColorTip": "设置图表文字的颜色。例如:#333333,rgba(51, 51, 51, 1)。", + "boxShadowTip": "定义元素的投影阴影。例如:0px 4px 8px rgba(0, 0, 0, 0.3),inset 0px 2px 5px rgba(255, 255, 255, 0.5)。", + "animationDelayTip": "指定动画开始前的延迟时间。例如:1s,500ms,0。", + "animationDurationTip": "设置动画的持续时间。例如:2s,3s,500ms。", + "paddingTip": "定义元素内部的填充空间。例如:10px,2em,5%。您还可以组合使用,例如:0px 20px,或为四个方向分别指定:10px 21px 5px 20px。", + "containerHeaderPaddingTip": "定义容器标题的填充空间。例如:10px,1rem。", + "containerSiderPaddingTip": "定义容器侧边的填充空间。例如:8px,1em。", + "containerFooterPaddingTip": "定义容器底部的填充空间。例如:12px,1rem。", + "containerBodyPaddingTip": "定义容器主体的填充空间。例如:15px,2em。", + "textSizeTip": "指定文字的字体大小。例如:14px,1.2em,110%。", + "textWeightTip": "指定文字的字体粗细。例如:normal,bold,400。", + "fontFamilyTip": "指定文字的字体系列。例如:Arial,Verdana,'Courier New'。", + "textDecorationTip": "定义文字的装饰。例如:underline,line-through,none。", + "textTransformTip": "指定文字的大小写格式。例如:uppercase,lowercase,capitalize。", + "fontStyleTip": "定义文字的字体样式。例如:normal,italic,oblique。", + "backgroundImageTip": "指定元素的背景图像。例如:url('image.jpg'),linear-gradient(to right, #ff7e5f, #feb47b)。", + "headerBackgroundImageTip": "指定标题的背景图像。例如:url('header.jpg')。", + "footerBackgroundImageTip": "指定页脚的背景图像。例如:url('footer.jpg')。", + "backgroundImageRepeatTip": "定义背景图像的重复方式。例如:no-repeat,repeat-x,repeat-y。", + "headerBackgroundImageRepeatTip": "定义标题背景图像的重复方式。例如:repeat-x,no-repeat。", + "footerBackgroundImageRepeatTip": "定义页脚背景图像的重复方式。例如:repeat-y,no-repeat。", + "backgroundImageSizeTip": "定义背景图像的大小。例如:cover,contain,50% 50%。", + "backgroundImagePositionTip": "定义背景图像的位置。例如:center,top right,10% 20%。", + "backgroundImageOriginTip": "指定背景图像的定位区域。例如:padding-box,border-box,content-box。", + "headerBackgroundImageOriginTip": "指定标题背景图像的定位区域。例如:padding-box,border-box,content-box。", + "footerBackgroundImageOriginTip": "指定页脚背景图像的定位区域。例如:padding-box,border-box,content-box。", + "rotationTip": "指定元素的旋转角度。例如:45deg,90deg,-180deg。", + "lineHeightTip": "定义文字行高。例如:1.5,2,120%。", + }, + "export": { + ...en.export, + + "hiddenDesc": "如果为true,则隐藏组件", + "disabledDesc": "如果为true,则将组件置为灰色且不可交互", + "visibleDesc": "如果为true,则组件可见", + "inputValueDesc": "输入框的当前值", + "invalidDesc": "值是否无效", + "placeholderDesc": "未设置值时显示的文本", + "requiredDesc": "如果为true,则必须提供有效值", + "submitDesc": "提交表单", + "richTextEditorValueDesc": "编辑器的当前值", + "richTextEditorReadOnlyDesc": "如果为true,则编辑器为只读", + "richTextEditorHideToolBarDesc": "如果为true,则隐藏工具栏", + "jsonEditorDesc": "当前的JSON数据", + "sliderValueDesc": "当前选定的值", + "sliderMaxValueDesc": "当前区间的最大值", + "sliderMinValueDesc": "当前区间的最小值", + "sliderStartDesc": "当前选定起始点的值", + "sliderEndDesc": "当前选定结束点的值", + "ratingValueDesc": "当前选定的评分", + "ratingMaxDesc": "当前设置的最大评分", + "datePickerValueDesc": "当前选定的日期", + "datePickerFormattedValueDesc": "根据指定的格式格式化的选定日期", + "datePickerTimestampDesc": "日期的当前选定时间戳(秒)", + "dateRangeStartDesc": "当前选定的起始日期", + "dateRangeEndDesc": "当前选定的结束日期", + "dateRangeStartTimestampDesc": "开始日期的当前选定时间戳(秒)", + "dateRangeEndTimestampDesc": "结束日期的当前选定时间戳(秒)", + "dateRangeFormattedValueDesc": "根据指定的格式格式化的选定日期", + "dateRangeFormattedStartValueDesc": "根据指定的格式格式化的起始日期", + "dateRangeFormattedEndValueDesc": "根据指定的格式格式化的结束日期", + "timePickerValueDesc": "当前选定的时间", + "timePickerFormattedValueDesc": "根据指定的格式格式化的选定时间", + "timeRangeStartDesc": "当前选定的起始时间", + "timeRangeEndDesc": "当前选定的结束时间", + "timeRangeFormattedValueDesc": "根据指定的格式格式化的选定时间", + "timeRangeFormattedStartValueDesc": "根据指定的格式格式化的起始时间", + "timeRangeFormattedEndValueDesc": "根据指定的格式格式化的结束时间", + "timeZone": "时区", + "timeZoneDesc": "所选日期的时区", + }, + "validationDesc": { + ...en.validationDesc, + + "email": "请输入有效的电子邮件地址", + "url": "请输入有效的URL链接", + "regex": "请输入与正则表达式匹配的内容", + "maxLength": "字符数过多,当前长度为{length},最大长度为{maxLength}", + "minLength": "字符数不足,当前长度为{length},最小长度为{minLength}", + "maxValue": "大于最大值,当前值为{value},最大值为{max}", + "minValue": "小于最小值,当前值为{value},最小值为{min}", + "maxTime": "大于最大时间,当前时间为{time},最大时间为{maxTime}", + "minTime": "小于最小时间,当前时间为{time},最小时间为{minTime}", + "maxDate": "大于最大日期,当前日期为{date},最大日期为{maxDate}", + "minDate": "小于最小日期,当前日期为{date},最小日期为{minDate}", + }, + "query": { + ...en.query, + + "noQueries": "没有可用的查询.", + "queryTutorialButton": "查看{value}文档", + "datasource": "数据源", + "newDatasource": "新建数据源", + "generalTab": "常规", + "notificationTab": "通知", + "variablesTab": "变量", + "advancedTab": "高级", + "showFailNotification": "执行失败时显示通知", + "failCondition": "失败条件", + "failConditionTooltip1": "自定义失败条件和相应的通知.", + "failConditionTooltip2": "如果任何条件返回true,则将查询标记为失败并触发相应的通知.", + "showSuccessNotification": "执行成功时显示通知", + "successMessageLabel": "成功消息", + "successMessage": "执行成功", + "notifyDuration": "持续时间", + "notifyDurationTooltip": "通知持续时间.时间单位可以是秒(s,默认)或毫秒(ms).默认值为{default}s,最大值为{max}s.", + "successMessageWithName": "{name}执行成功", + "failMessageWithName": "{name}执行失败:{result}", + "showConfirmationModal": "运行前显示确认对话框", + "confirmationMessageLabel": "确认消息", + "confirmationMessage": "您确定要运行此查询吗?", + "newQuery": "新建查询", + "newFolder": "新建文件夹", + "recentlyUsed": "最近使用", + "folder": "文件夹", + "folderNotEmpty": "文件夹不为空", + "dataResponder": "数据响应器", + "tempState": "临时状态", + "transformer": "转换器", + "quickRestAPI": "REST查询", + "quickStreamAPI": "Stream查询", + "quickGraphql": "GraphQL查询", + "quickAlasql": "本地 SQL 查询", + "databaseType": "数据库类型", + "chooseDatabase": "选择数据库", + "lowcoderAPI": "低编码器应用程序接口", + "executeJSCode": "运行JavaScript代码", + "importFromQueryLibrary": "从查询库导入", + "preparedDataQueries": "您准备的数据查询", + "adHocDataQueries": "Qick 数据查询(无需准备查询或数据源)", + "queryResultTransformer": "操作查询响应,在绑定前转换数据", + "queryResultReactor": "对动态数据值的任何变化做出反应", + "importFromFile": "从文件导入", + "triggerType": "触发条件...", + "triggerTypeAuto": "当输入更改或应用程序(页面)加载后", + "triggerTypePageLoad": "应用程序(页面)加载后", + "triggerTypeManual": "仅当您手动触发时", + "triggerTypeInputChange": "当输入更改时", + "triggerTypeQueryExec": "查询执行后", + "triggerTypeTimeout": "应用程序(页面)加载后和超时", + "delayTime": "延迟时间", + "chooseDataSource": "选择数据源", + "method": "方法", + "updateExceptionDataSourceTitle": "更新失败的数据源", + "updateExceptionDataSourceContent": "使用相同的失败数据源更新以下查询:", + "update": "更新", + "disablePreparedStatement": "禁用预编译语句", + "disablePreparedStatementTooltip": "禁用预编译语句可以动态生成SQL,但存在SQL注入的风险", + "timeout": "超时时间", + "timeoutTooltip": "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n默认值:{defaultSeconds}秒\n最大值:{maxSeconds}秒.\n\n例如:300(即300毫秒),800毫秒,5秒.", + "periodic": "定期运行此查询", + "periodicTime": "周期", + "periodicTimeTooltip": "连续执行之间的时间间隔.\n默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n最小值:100毫秒,低于此值将禁用周期性执行.\n\n例如:300(即300毫秒),800毫秒,5秒.", + "cancelPrevious": "忽略上一次未完成的执行结果.", + "cancelPreviousTooltip": "如果触发了新的执行,则之前未完成的执行结果将被忽略,这些被忽略的执行将不会触发查询的事件列表。", + "dataSourceStatusError": "如果触发新的执行,将忽略之前未完成的执行结果(如果之前的执行未完成),被忽略的执行将不会触发查询的事件列表.", + "success": "成功", + "fail": "失败", + "successDesc": "执行成功时触发", + "failDesc": "执行失败时触发", + "fixedDelayError": "查询未运行", + "execSuccess": "执行成功", + "execFail": "执行失败", + "execIgnored": "忽略了此查询的结果.", + "deleteSuccessMessage": "删除成功,您可以使用 {undoKey} 进行撤消.", + "dataExportDesc": "当前查询获取的数据", + "codeExportDesc": "当前查询状态代码", + "successExportDesc": "当前查询是否成功执行", + "messageExportDesc": "当前查询返回的信息", + "extraExportDesc": "当前查询的其他数据", + "isFetchingExportDesc": "当前查询是否在请求中", + "runTimeExportDesc": "当前查询的执行时间(毫秒)", + "latestEndTimeExportDesc": "最后运行时间", + "triggerTypeExportDesc": "触发类型", + "chooseResource": "选择资源", + "createDataSource": "创建新的数据源", + "editDataSource": "编辑", + "datasourceName": "数据源名称", + "datasourceNameRuleMessage": "请输入数据源名称", + "generalSetting": "常规设置", + "advancedSetting": "高级设置", + "port": "端口", + "portRequiredMessage": "请输入端口", + "portErrorMessage": "请输入正确的端口", + "connectionType": "连接类型", + "regular": "常规", + "host": "主机", + "hostRequiredMessage": "请输入主机域名或IP地址", + "userName": "用户名", + "password": "密码", + "encryptedServer": "-------- 服务器端加密 --------", + "uriRequiredMessage": "请输入URL链接", + "urlRequiredMessage": "请输入URL链接", + "uriErrorMessage": "请输入正确的URL链接", + "urlErrorMessage": "请输入正确的URL链接", + "httpRequiredMessage": "请输入http://或https://", + "databaseName": "数据库名称", + "databaseNameRequiredMessage": "请输入数据库名称", + "useSSL": "使用SSL", + "userNameRequiredMessage": "请输入用户名", + "passwordRequiredMessage": "请输入密码", + "authentication": "身份验证", + "authenticationType": "身份验证类型", + "sslCertVerificationType": "SSL证书验证", + "sslCertVerificationTypeDefault": "验证CA证书", + "sslCertVerificationTypeSelf": "验证自签名证书", + "sslCertVerificationTypeDisabled": "禁用", + "selfSignedCert": "自签名证书", + "selfSignedCertRequireMsg": "请提供您的证书", + "enableTurnOffPreparedStatement": "启用切换查询的预编译语句", + "enableTurnOffPreparedStatementTooltip": "您可以在查询的高级选项卡中启用或禁用预编译语句", + "serviceName": "服务名称", + "serviceNameRequiredMessage": "请输入您的服务名称", + "useSID": "使用SID", + "connectSuccessfully": "连接成功", + "saveSuccessfully": "保存成功", + "database": "数据库", + "cloudHosting": "云托管的Lowcoder无法访问您的本地服务,如使用127.0.0.1或localhost.请尝试连接公共网络数据源或使用反向代理来访问您的私有服务.", + "notCloudHosting": "对于Docker托管部署,Lowcoder使用桥接网络,因此对于主机地址,127.0.0.1和localhost是无效的.要访问本地机器上的数据源,请参考以下链接", + "howToAccessHostDocLink": "如何访问主机API/数据库", + "returnList": "返回列表", + "chooseDatasourceType": "选择数据源类型", + "viewDocuments": "文档", + "testConnection": "测试连接", + "save": "保存", + "whitelist": "白名单", + "whitelistTooltip": "当需要时,将以下Lowcoder的IP地址添加到数据源的白名单中.", + "address": "地址:", + "nameExists": "名称{name}已存在", + "jsQueryDocLink": "关于JavaScript查询", + "dynamicDataSourceConfigLoadingText": "加载额外数据源配置...", + "dynamicDataSourceConfigErrText": "无法加载额外数据源配置.", + "retry": "重试", + "categoryDatabase": "数据库", + "categoryBigdata": "大数据", + "categoryAi": "人工智能", + "categoryDevops": "开发运维", + "categoryAppdevelopment": "应用开发", + "categoryWorkflow": "工作流", + "categoryMessaging": "消息传递", + "categoryAssets": "资产与存储", + "categoryProjectManagement": "项目管理", + "categoryCrm": "客户关系管理", + "categoryEcommerce": "电子商务", + "categoryWebscrapers": "网络爬虫", + "categoryDocumentHandling": "报告与文档生成", + "categoryRPA": "机器人流程自动化", + "componentsUsingQueryTitle": "查询使用情况", + "componentsUsingQuery": "此查询在哪里使用", + "variables": "变量", + }, + "sqlQuery": { + ...en.sqlQuery, + + "keyValuePairs": "键值对", + "object": "对象", + "allowMultiModify": "允许修改多行", + "allowMultiModifyTooltip": "如果选择此参数,将操作符合条件的所有行.否则,只会操作符合条件的第一行.", + "array": "数组", + "insertList": "插入列表", + "insertListTooltip": "当值不存在时插入的值", + "filterRule": "筛选规则", + "updateList": "更新列表", + "updateListTooltip": "已存在的值会被相同的插入列表值覆盖", + "sqlMode": "SQL模式", + "guiMode": "GUI模式", + "operation": "操作", + "insert": "插入", + "upsert": "插入,冲突时更新", + "update": "更新", + "delete": "删除", + "bulkInsert": "批量插入", + "bulkUpdate": "批量更新", + "table": "表", + "primaryKeyColumn": "主键列", + }, + "EsQuery": { + ...en.EsQuery, + + "rawCommand": "原始命令", + "queryTutorialButton": "查看Elasticsearch API文档", + "request": "请求", + }, + "googleSheets": { + ...en.googleSheets, + + "rowIndex": "行索引", + "spreadsheetId": "电子表格", + "sheetName": "工作表名称", + "readData": "读取数据", + "appendData": "追加行", + "updateData": "更新行", + "deleteData": "删除行", + "clearData": "清除行", + "serviceAccountRequireMessage": "请输入您的服务账号", + "ASC": "升序", + "DESC": "降序", + "sort": "排序", + "sortPlaceholder": "名称", + }, + "queryLibrary": { + ...en.queryLibrary, + + "export": "导出为JSON", + "noInput": "当前查询没有输入", + "inputName": "名称", + "inputDesc": "描述", + "emptyInputs": "无输入", + "clickToAdd": "点击添加", + "chooseQuery": "选择查询", + "viewQuery": "查看查询", + "chooseVersion": "选择版本", + "latest": "最新", + "publish": "发布", + "historyVersion": "历史版本", + "deleteQueryLabel": "删除查询", + "deleteQueryContent": "删除后无法恢复查询.是否删除查询?", + "run": "运行", + "readOnly": "只读", + "exit": "退出", + "recoverAppSnapshotContent": "将当前查询恢复到版本 {version}", + "searchPlaceholder": "搜索查询", + "allQuery": "所有查询", + "deleteQueryTitle": "删除查询", + "unnamed": "未命名", + "publishNewVersion": "发布新版本", + "publishSuccess": "已发布", + "version": "版本", + "desc": "描述", + }, + "snowflake": { + ...en.snowflake, + + "accountIdentifierTooltip": "请参考", + "extParamsTooltip": "配置更多连接参数", + }, + "lowcoderQuery": { + ...en.lowcoderQuery, + + "queryOrgUsers": "查询工作区用户", + }, + "redisQuery": { + ...en.redisQuery, + + "rawCommand": "原始命令", + "command": "命令", + "queryTutorial": "查看Redis命令文档", + }, + "httpQuery": { + ...en.httpQuery, + + "bodyFormDataTooltip": "如果选择{type},值的格式应为{object}.示例:{example}", + "text": "文本", + "file": "文件", + "extraBodyTooltip": "额外的body中的键值对将与JSON或表单数据类型一起添加到body中", + "forwardCookies": "转发cookies", + "forwardAllCookies": "转发所有cookies", + }, + "smtpQuery": { + ...en.smtpQuery, + + "attachment": "附件", + "attachmentTooltip": "可与文件上传组件一起使用,需要将数据转换为:", + "MIMETypeUrl": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types", + "sender": "发件人", + "recipient": "收件人", + "carbonCopy": "抄送", + "blindCarbonCopy": "密送", + "subject": "主题", + "content": "内容", + "contentTooltip": "支持输入文本或HTML", + }, + "uiCompCategory": { + ...en.uiCompCategory, + + "dashboards": "仪表板和报告", + "layout": "布局和导航", + "forms": "数据收集与表格", + "collaboration": "会议与合作", + "projectmanagement": "项目管理", + "scheduling": "日历和日程安排", + "documents": "文件和档案管理", + "itemHandling": "项目和签名处理", + "multimedia": "多媒体与动画", + "integration": "整合与扩展", + "legacy": "传统与过时", + }, + "uiComp": { + ...en.uiComp, + + "autoCompleteCompName": "自动完成", + "autoCompleteCompDesc": "自动完成", + "autoCompleteCompKeywords": "zdwc", + "inputCompName": "输入框", + "inputCompDesc": "输入框组件", + "inputCompKeywords": "文本", + "textAreaCompName": "多行文本", + "textAreaCompDesc": "多行文本组件", + "textAreaCompKeywords": "多行、文本区域、输入、文本", + "passwordCompName": "密码输入框", + "passwordCompDesc": "密码输入框组件", + "passwordCompKeywords": "密码、安全、输入、隐藏", + "richTextEditorCompName": "富文本", + "richTextEditorCompDesc": "富文本编辑器组件", + "richTextEditorCompKeywords": "编辑器、文本、格式化、丰富内容", + "numberInputCompName": "数字输入框", + "numberInputCompDesc": "数字输入框组件", + "numberInputCompKeywords": "数字、输入、递增、递减", + "sliderCompName": "滑块", + "sliderCompDesc": "滑块组件", + "sliderCompKeywords": "滑块、范围、输入、图形", + "rangeSliderCompName": "范围滑块", + "rangeSliderCompDesc": "范围滑块组件", + "rangeSliderCompKeywords": "量程、滑块、双把手、过滤器", + "ratingCompName": "评分", + "ratingCompDesc": "评分组件", + "ratingCompKeywords": "评级、星级、反馈、意见", + "switchCompName": "开关", + "switchCompDesc": "开关组件", + "switchCompKeywords": "拨动、开关、开/关、控制", + "selectCompName": "下拉单选", + "selectCompDesc": "下拉单选组件", + "selectCompKeywords": "下拉、选择、选项、菜单", + "multiSelectCompName": "下拉多选", + "multiSelectCompDesc": "下拉多选组件", + "multiSelectCompKeywords": "多选、多重、下拉、选择", + "cascaderCompName": "级联选择", + "cascaderCompDesc": "级联选择框组件", + "cascaderCompKeywords": "级联、分层、下拉、层级", + "checkboxCompName": "复选", + "checkboxCompDesc": "复选框组件", + "checkboxCompKeywords": "复选框、选项、选择、切换", + "radioCompName": "单选", + "radioCompDesc": "单选框组件", + "radioCompKeywords": "单选、按钮、选择、单选", + "segmentedControlCompName": "分段控件", + "segmentedControlCompDesc": "分段控件组件", + "segmentedControlCompKeywords": "分段、控制、切换、选项", + "stepControlCompName": "步骤控制", + "stepControlCompDesc": "带有步骤选项的控件,可为表单或向导等应用程序提供可视化引导步骤。", + "stepControlCompKeywords": "步骤、控制、切换、选项", + "fileUploadCompName": "附件", + "fileUploadCompDesc": "文件上传组件", + "fileUploadCompKeywords": "文件、上传、拖放、选择", + "dateCompName": "日期", + "dateCompDesc": "日期组件", + "dateCompKeywords": "日期、选择器、日历、选择", + "dateRangeCompName": "日期范围", + "dateRangeCompDesc": "日期范围组件", + "dateRangeCompKeywords": "日期、选择、预订、筛选", + "timeCompName": "时间", + "timeCompDesc": "时间组件", + "timeCompKeywords": "时间、选择器、选择、时钟", + "timeRangeCompName": "时间范围", + "timeRangeCompDesc": "时间范围组件", + "timeRangeCompKeywords": "时间范围、选择、调度、持续时间", + "buttonCompName": "按钮", + "buttonCompDesc": "按钮组件", + "buttonCompKeywords": "按钮、提交、操作、导航", + "meetingControlCompName": "图标按钮", + "meetingCompDesc": "用于控制开始、结束、静音或共享等功能的按钮。", + "meetingCompKeywords": "控制、按钮、开始、结束", + "linkCompName": "链接", + "linkCompDesc": "链接组件", + "linkCompKeywords": "链接、超链接、导航、外部", + "scannerCompName": "扫码", + "scannerCompDesc": "扫码组件", + "scannerCompKeywords": "扫描仪、条形码、QR 码、扫描", + "dropdownCompName": "下拉按钮组", + "dropdownCompDesc": "下拉按钮组组件", + "dropdownCompKeywords": "下拉、菜单、选项、选择", + "toggleButtonCompName": "切换按钮", + "toggleButtonCompDesc": "切换按钮组件", + "toggleButtonCompKeywords": "切换、按钮、开关、状态", + "textCompName": "文本", + "textCompDesc": "文本组件", + "textCompKeywords": "文本、显示、静态、动态", + "tableCompName": "表格", + "tableCompDesc": "表格组件", + "tableCompKeywords": "表格、数据、排序、筛选", + "imageCompName": "图片", + "imageCompDesc": "图片组件", + "imageCompKeywords": "图像、显示、媒体、Base64", + "progressCompName": "进度条", + "progressCompDesc": "进度条组件", + "progressCompKeywords": "进度、指标、状态、任务", + "progressCircleCompName": "圆形进度条", + "progressCircleCompDesc": "圆形进度条组件", + "progressCircleCompKeywords": "圆圈、进度、指示器、加载", + "fileViewerCompName": "文件查看", + "fileViewerCompDesc": "文件查看组件", + "fileViewerCompKeywords": "文件、查看器、文档、图像", + "dividerCompName": "分割线", + "dividerCompDesc": "分割线组件", + "dividerCompKeywords": "分隔线、分隔符、布局、设计", + "qrCodeCompName": "二维码", + "qrCodeCompDesc": "二维码组件", + "qrCodeCompKeywords": "QR 码、扫描、条形码、信息", + "formCompName": "表单", + "formCompDesc": "表单组件", + "formCompKeywords": "表单、输入、容器、结构", + "jsonSchemaFormCompName": "JSON表单", + "jsonSchemaFormCompDesc": "JSON表单组件", + "jsonSchemaFormCompKeywords": "JSON、模式、表单、动态", + "containerCompName": "容器", + "containerCompDesc": "容器组件", + "containerCompKeywords": "容器、布局、组织、用户界面", + "floatTextContainerCompName": "浮动文本容器", + "floatTextContainerCompDesc": "浮动文本容器组件", + "floatTextContainerCompKeywords": "容器、布局、文本、流程", + "collapsibleContainerCompName": "可折叠容器", + "collapsibleContainerCompDesc": "可折叠容器组件", + "collapsibleContainerCompKeywords": "可折叠、容器、展开、折叠", + "tabbedContainerCompName": "选项卡", + "tabbedContainerCompDesc": "选项卡组件", + "tabbedContainerCompKeywords": "标签式、容器、导航、面板", + "pageLayoutCompName": "布局容器", + "pageLayoutCompDesc": "一个容器,用于创建包含页眉、页脚和主要内容区域的布局", + "pageLayoutCompKeywords": "布局、容器、导航、页面", + "modalCompName": "对话框", + "modalCompDesc": "对话框组件", + "modalCompKeywords": "模态、弹出、警报、表单", + "listViewCompName": "列表视图", + "listViewCompDesc": "列表视图组件", + "listViewCompKeywords": "列表、查看、显示、中继器", + "gridCompName": "网格", + "gridCompDesc": "网格组件", + "gridCompKeywords": "网格、布局、行、列", + "navigationCompName": "导航", + "navigationCompDesc": "导航组件", + "navigationCompKeywords": "导航、菜单、面包屑、标签", + "iframeCompName": "嵌入网页", + "iframeCompDesc": "iframe嵌入网页组件", + "iframeCompKeywords": "iframe、嵌入、网页、内容", + "customCompName": "自定义组件", + "customCompDesc": "自定义组件", + "customCompKeywords": "自定义、用户定义、灵活、可编程", + "moduleCompName": "模块", + "moduleCompDesc": "模块组件", + "moduleCompKeywords": "模块、微应用程序、功能、可重用", + "jsonExplorerCompName": "JSON浏览", + "jsonExplorerCompDesc": "JSON浏览组件", + "jsonExplorerCompKeywords": "JSON、资源管理器、数据、结构", + "jsonEditorCompName": "JSON 编辑器", + "jsonEditorCompDesc": "JSON 编辑器组件", + "jsonEditorCompKeywords": "JSON、编辑器、修改、验证", + "treeCompName": "树形组件", + "treeCompDesc": "树形组件", + "treeCompKeywords": "树、分层、数据、结构", + "treeSelectCompName": "树形选择", + "treeSelectCompDesc": "树形选择框组件", + "treeSelectCompKeywords": "树形、选择、分层、嵌套", + "audioCompName": "音频", + "audioCompDesc": "音频组件", + "audioCompKeywords": "音频、播放、声音、音乐", + "videoCompName": "视频", + "videoCompDesc": "视频组件", + "videoCompKeywords": "视频、多媒体、播放、嵌入", + "drawerCompName": "抽屉", + "drawerCompDesc": "抽屉组件", + "drawerCompKeywords": "抽屉、滑动、面板、导航", + "chartCompName": "图表", + "chartCompDesc": "图表组件", + "chartCompKeywords": "图表、图形、数据、可视化", + "carouselCompName": "轮播图", + "carouselCompDesc": "轮播图组件", + "carouselCompKeywords": "旋转木马、图像、旋转、展示", + "imageEditorCompName": "图片编辑器", + "imageEditorCompDesc": "图片编辑器组件", + "imageEditorCompKeywords": "图像、编辑器、操作、工具", + "mermaidCompName": "美人鱼图表", + "mermaidCompDesc": "根据文本渲染美人鱼图表", + "mermaidCompKeywords": "美人鱼、图表、示意图、流程图", + "calendarCompName": "日历", + "calendarCompDesc": "日历组件", + "calendarCompKeywords": "日历、日期、活动、日程安排", + "signatureCompName": "签名", + "signatureCompDesc": "签名组件", + "signatureCompKeywords": "签名、数字、批准、验证", + "jsonLottieCompName": "Lottie动画", + "jsonLottieCompDesc": "Lottie动画组件", + "jsonLottieCompKeywords": "lottie、动画、JSON、可扩展", + "timelineCompName": "时间线", + "timelineCompDesc": "时间线组件", + "timelineCompKeywords": "sjx", + "commentCompName": "评论", + "commentCompDesc": "评论组件", + "commentCompKeywords": "pl", + "mentionCompName": "提及", + "mentionCompDesc": "提及组件", + "mentionCompKeywords": "tj", + "responsiveLayoutCompName": "响应式布局", + "responsiveLayoutCompDesc": "响应式布局", + "responsiveLayoutCompKeywords": "响应、布局、适应、屏幕尺寸", + "splitLayoutCompName": "分割布局", + "splitLayoutCompDesc": "这是一个布局组件,用于组织多个视图区域和水平或垂直分隔区域。用户可通过拖放方式调整视图区域的宽度或高度。", + "splitLayoutCompKeywords": "分割、分割器、布局、适应、屏幕尺寸", + "iconCompName": "图标", + "iconCompDesc": "图标", + "iconCompKeywords": "tb", + "tourCompName": "旅游", + "tourCompDesc": "引导用户参观产品。", + "tourCompKeywords": "导览、产品导览、演练、互动演练", + "hillchartCompName": "Hillchart", + "hillchartCompDesc": "以山丘图格式显示项目管理状态数据的可视化组件。", + "hillchartCompKeywords": "项目管理、山丘图、可视化、数据", + "openLayersGeoMapCompName": "Openlayers 地理地图", + "openLayersGeoMapCompDesc": "使用 OpenLayers 显示交互式地图的组件,支持各种地图图层和功能。", + "openLayersGeoMapCompKeywords": "开放式图层、地理地图、交互式、地图图层", + "chartsGeoMapCompName": "地理地图图", + "chartsGeoMapCompDesc": "通过动态图表在交互式地图上实现地理数据可视化的组件", + "chartsGeoMapCompKeywords": "地理地图、图表、可视化、地理数据", + "bpmnEditorCompName": "BPMN 编辑器", + "bpmnEditorCompDesc": "用于查看、创建和编辑 BPMN 图表的组件,支持各种 BPMN 元素和功能。", + "bpmnEditorCompKeywords": "BPMN、编辑器、图表、元素、工作流程", + "turnstileCaptchaCompName": "转门验证码", + "turnstileCaptchaCompDesc": "验证码组件,用于验证用户是否为机器人。", + "turnstileCaptchaCompKeywords": "验证码、验证、身份、安全", + "pivotTableCompName": "透视表", + "pivotTableCompDesc": "数据汇总和分析工具,用于以表格形式组织和汇总数据。", + "pivotTableCompKeywords": "数据透视表、数据、分析、汇总", + "funnelChartCompName": "漏斗图", + "funnelChartCompDesc": "一种可视化工具,用于显示数据在经过各个阶段时的逐步缩减过程。", + "funnelChartCompKeywords": "漏斗图、销售、转换、流程", + "gaugeChartCompName": "仪表图表", + "gaugeChartCompDesc": "以刻度盘上的读数显示数据的图表,用于显示某物的状态或水平。", + "gaugeChartCompKeywords": "测量图、指标、性能、状态", + "sankeyChartCompName": "桑基图", + "sankeyChartCompDesc": "箭头宽度与流速成正比的流程图,用于显示能量、材料或成本的转移。", + "sankeyChartCompKeywords": "桑基图、流程、能源、成本", + "candleStickChartCompName": "蜡烛图", + "candleStickChartCompDesc": "一种金融图表样式,用于描述证券、衍生品或货币的价格走势。", + "candleStickChartCompKeywords": "蜡烛图、股票、交易、金融", + "radarChartCompName": "雷达图", + "radarChartCompDesc": "以三维或更多定量变量的二维图表形式显示多元数据的图形方法。", + "radarChartCompKeywords": "雷达图、多变量、性能分析", + "heatmapChartCompName": "热图", + "heatmapChartCompDesc": "数据的图形表示法,用颜色表示各个数值。", + "heatmapChartCompKeywords": "热图、数据可视化、强度", + "graphChartCompName": "图表", + "graphChartCompDesc": "表示由边连接的节点网络的图表,用于显示相互联系和关系。", + "graphChartCompKeywords": "图表、网络、关系、节点", + "treeChartCompName": "树形图", + "treeChartCompDesc": "以树状结构直观表示层次结构的图表,显示各节点之间的关系。", + "treeChartCompKeywords": "树状图、层次结构、组织结构", + "treemapChartCompName": "树状地图", + "treemapChartCompDesc": "使用嵌套矩形按比例表示分层数据的图表。", + "treemapChartCompKeywords": "树状图、层次结构、数据可视化", + "sunburstChartCompName": "旭日图", + "sunburstChartCompDesc": "一种径向空间填充可视化技术,通过圆的层次来说明等级关系。", + "sunburstChartCompKeywords": "旭日图、放射状、层次结构", + "themeriverChartCompName": "主题河图", + "themeriverChartCompDesc": "类似流图的可视化图表,显示数据集在不同类别中随着时间的推移而发生的变化。", + "themeriverChartCompKeywords": "主题河、时间序列、趋势", + "basicChartCompName": "多种语言图表", + "basicChartCompDesc": "这是一个多功能组件,可通过各种类型的图表和图形将数据可视化。", + "basicChartCompKeywords": "图表、图形、数据、可视化", + "shapeCompName": "形状", + "shapeCompDesc": "用于图表、插图和可视化的几何图形集。", + "shapeCompKeywords": "形状、几何、图表、插图", + "ganttChartCompName": "甘特图", + "ganttChartCompDesc": "说明项目进度的图表,显示各要素和依赖关系的开始和结束日期。", + "ganttChartCompKeywords": "甘特图、项目管理、时间表", + "kanbanCompName": "看板(预览!)", + "kanbanCompDesc": "一个用于可视化工作流程的板,其中列代表工作阶段,卡片代表任务。", + "kanbanCompKeywords": "看板、板、工作流程、任务", + "pieChartCompName": "饼图", + "pieChartCompDesc": "通过饼图实现数据可视化的多功能组件。", + "pieChartCompKeywords": "图表、数据、可视化", + "lineChartCompName": "折线图", + "lineChartCompDesc": "通过折线图实现数据可视化的多功能组件。", + "lineChartCompKeywords": "图表、数据、可视化", + "barChartCompName": "柱状图", + "barChartCompDesc": "通过条形图实现数据可视化的多功能组件。", + "barChartCompKeywords": "图表、数据、可视化", + "scatterChartCompName": "散点图", + "scatterChartCompDesc": "通过散点图实现数据可视化的多功能组件。", + "scatterChartCompKeywords": "图表、数据、可视化", + "colorPickerCompName": "颜色选择器", + "colorPickerCompDesc": "直观的颜色选择方便用户定制。", + "colorPickerCompKeywords": "颜色、选择器、定制", + "floatButtonCompName": "浮动按钮", + "floatButtonCompDesc": "浮动操作按钮,用于突出和快速操作。", + "floatButtonCompKeywords": "浮动按钮、动作、快速", + "avatarCompName": "阿凡达", + "avatarCompDesc": "显示用户头像或个人资料图像,以便进行个性化识别。", + "avatarCompKeywords": "头像、个人资料图像、用户标识", + "avatarGroupCompName": "阿凡达集团", + "avatarGroupCompDesc": "一组头像,以紧凑、视觉效果好的方式代表多个用户或实体。", + "avatarGroupCompKeywords": "头像组、用户、实体、紧凑", + "transferName": "转让", + "transferDesc": "通过拖放功能,方便两个列表之间的数据传输。", + "transferKeywords": "传输、数据、拖放", + "cardCompName": "内容卡", + "cardCompDesc": "卡片组件,用于以结构化方式显示有组织的信息或内容。", + "cardCompKeywords": "卡片、信息、内容、显示", + "timerCompName": "计时器", + "timerCompDesc": "显示倒计时或经过时间的组件,可用于跟踪工期和截止日期。", + "timerCompKeywords": "计时器、倒计时、经过时间、跟踪、持续时间、截止日期", + }, + "comp": { + ...en.comp, + + "menuViewDocs": "查看文档", + "menuViewPlayground": "查看组件游乐场", + "menuUpgradeToLatest": "升级到最新版本", + "nameNotEmpty": "不能为空", + "nameRegex": "必须以字母开头,只能包含字母、数字和下划线(_)", + "nameJSKeyword": "不能是 JavaScript 关键字", + "nameGlobalVariable": "不能是全局变量名", + "nameExists": "名称 {name} 已存在", + "getLatestVersionMetaError": "获取最新版本失败,请稍后重试.", + "needNotUpgrade": "当前版本已经是最新版本.", + "compNotFoundInLatestVersion": "最新版本中找不到当前组件.", + "upgradeSuccess": "成功升级到最新版本.", + "searchProp": "搜索属性", + }, + "jsonSchemaForm": { + ...en.jsonSchemaForm, + + "retry": "重试", + "resetAfterSubmit": "成功提交后重置", + "jsonSchema": "JSON数据", + "uiSchema": "UI数据", + "schemaTooltip": "查看", + "defaultData": "默认数据", + "dataDesc": "当前表单数据", + "required": "必填", + "maximum": "最大值为 {value}", + "minimum": "最小值为 {value}", + "exclusiveMaximum": "应小于 {value}", + "exclusiveMinimum": "应大于 {value}", + "multipleOf": "应为 {value} 的倍数", + "minLength": "至少 {value} 个字符", + "maxLength": "最多 {value} 个字符", + "pattern": "应匹配模式 {value}", + "format": "应符合格式 {value}", + }, + "select": { + ...en.select, + + "inputValueDesc": "输入搜索值", + }, + "customComp": { + ...en.customComp, + + "text": "今天是个好日子.", + "triggerQuery": "触发查询", + "updateData": "更新数据", + "updateText": "我也心情很好!", + "sdkGlobalVarName": "低编码器", + "data": "要传递给自定义组件的数据", + "code": "自定义组件代码", + }, + "tree": { + ...en.tree, + + "placeholder": "请选择", + "selectType": "选择类型", + "noSelect": "无选择", + "singleSelect": "单选", + "multiSelect": "多选", + "checkbox": "复选框", + "checkedStrategy": "选择策略", + "showAll": "显示所有节点", + "showParent": "仅显示父节点", + "showChild": "仅显示子节点", + "autoExpandParent": "自动展开父节点", + "checkStrictly": "严格勾选", + "checkStrictlyTooltip": "准确选择树节点;父节点和子节点之间没有关联", + "treeData": "结构", + "treeDataDesc": "当前数据", + "value": "默认值", + "valueDesc": "当前值", + "expanded": "展开节点", + "expandedDesc": "当前展开的节点", + "defaultExpandAll": "默认展开所有节点", + "showLine": "显示连接线", + "showLeafIcon": "显示叶子图标", + "treeDataAsia": "亚洲", + "treeDataChina": "中国", + "treeDataBeijing": "北京", + "treeDataShanghai": "上海", + "treeDataJapan": "日本", + "treeDataEurope": "欧洲", + "treeDataEngland": "英格兰", + "treeDataFrance": "法国", + "treeDataGermany": "德国", + "treeDataNorthAmerica": "北美洲", + "helpLabel": "节点标题", + "helpValue": "树中唯一的节点值", + "helpChildren": "子节点", + "helpDisabled": "禁用节点", + "helpSelectable": "节点是否可选(单选/多选类型)", + "helpCheckable": "是否显示复选框(复选框类型)", + "helpDisableCheckbox": "禁用复选框(复选框类型)", + }, + "moduleContainer": { + ...en.moduleContainer, + + "eventTest": "事件测试", + "methodTest": "方法测试", + "inputTest": "输入测试", + }, + "password": { + ...en.password, + + "label": "密码", + "placeholder": "请输入密码", + "conformLabel": "确认密码", + "conformPlaceholder": "请确认密码", + "visibilityToggle": "显示可见性切换", + }, + "richTextEditor": { + ...en.richTextEditor, + + "toolbar": "自定义工具栏", + "toolbarDescription": "您可以自定义工具栏。详情请参阅:https://quilljs.com/docs/modules/toolbar/。", + "placeholder": "请输入...", + "hideToolbar": "隐藏工具栏", + "content": "内容", + "title": "标题", + "save": "保存", + "link": "链接:", + "edit": "编辑", + "remove": "移除", + "defaultValue": "基础内容", + }, + "floatButton": { + ...en.floatButton, + + "custom": "定制", + "backTop": "返回顶部", + "buttonType": "按钮类型", + "buttonShape": "按钮形状", + "square": "方形", + "circle": "圆圈", + "description": "说明", + "badge": "徽章", + "primary": "小学", + "default": "默认值", + "buttonTheme": "按钮主题", + "badgeColor": "徽章颜色", + "dot": "徽章为圆点", + "hidden": "隐藏", + "visibilityHeight": "可见度高度", + "visibilityHeightDesc": "滚动到一定高度才显示返回顶部按钮,0 始终显示,编辑模式无法实时预览", + }, + "colorPicker": { + ...en.colorPicker, + + "trigger": "触发事件", + "click": "点击", + "hover": "悬停", + "disabledAlpha": "禁用阿尔法选择", + "recommended": "推荐", + "showPresets": "显示颜色预设", + }, + "badge": { + ...en.badge, + + "showCloseButton": "显示关闭按钮", + "Type": "徽章类型", + "Count": "徽章计数", + "Size": "徽章尺寸", + "SizeDefault": "默认", + "SizeSmall": "小型", + "overflowCount": "溢出计数", + "Title": "徽章名称", + "dot": "圆点", + "number": "数量", + "tooltip": "工具提示", + }, + "gantt": { + ...en.gantt, + + "key": "钥匙", + "title": "标题", + "project": "项目", + "from": "来自", + "minute": "分钟", + "hour": "小时", + "day": "日", + "week": "周数", + "month": "月份", + "year": "年份", + "quarter": "季度", + "tasks": "任务数据", + "level": "夷为平地", + "durationUnit": "时间单位", + "duration": "持续时间", + "hourScalesFormat": "%F %d", + "dayScalesFormat": "%d %M", + "weekScalesFormat1": "%d %M", + "weekScalesFormat2": "%j %D", + "monthScalesFormat1": "%F, %Y", + "monthScalesFormat2": "周 #%W", + "quarterScalesFormat": "{y} Q{i}", + "yearScalesFormat": "%Y", + "tree": "树", + "ColumnsData": "列数据", + "allowChangeTask": "DbClick 任务", + "allowAddLink": "添加链接", + "allowLinkDelete": "删除链接", + "allowProgressDrag": "进度拖动", + "allowTaskDrag": "任务拖动", + "links": "链接数据", + "dataFormat": "数据解析格式", + "handleDateChange": "处理任务变更", + "handleTaskChange": "处理任务变更", + "handleAddedLink": "添加的手柄链接", + "handleDeletedLink": "处理已删除的链接", + "handleProgressDrag": "处理进度拖动", + "showTodayMark": "今日展示 马克", + "resize": "调整大小", + "otherEvents": "其他活动", + "openAllBranchInit": "打开所有分支机构的启动程序", + "date": "日期", + "text": "文本", + "progress": "进展", + "width": "宽度", + "ColumnsType": "云类型", + "currentId": "当前 ID", + "currentObject": "当前对象", + "addTask": "添加任务", + "taskObject": "任务对象", + "taskObjectDesc": "支持任务数组或单个任务对象", + "linkID": "链接 ID", + "linkIDDesc": "支持链接 ID 数组或单个链接对象", + "removeTask": "删除任务", + "taskID": "任务编号", + "taskIDDesc": "支持 ID 阵列或单一 ID", + "add": "添加", + "expandingAll": "扩展所有", + "collapsingAll": "全部崩溃", + "addTaskFail": "添加任务失败,参数类型应为对象或数组对象", + "addLinkFail": "添加链接失败,参数类型应为对象或数组对象", + "removeTaskFail": "删除任务失败,参数类型应为字符串或字符串数组", + "removeLinkFail": "删除链接失败,参数类型应为字符串数组", + "otherData": "其他数据_{i}_", + "projectText": "项目编号__{i}__", + "taskText": "任务编号__{i}__", + "AutoCalculateProgress": "自动计算进度", + "allowProjectDrag": "允许项目拖动", + "showColumns": "显示列", + "exportToPNG": "导出为 PNG", + "exportToPDF": "导出为 PDF", + "exportToExcel": "导出到 Excel", + "progressLowBg": "低 BgColor", + "progressLowColor": "低进度颜色", + "progressMediumBg": "中型 BgColor", + "progressMediumColor": "中进步色", + "progressHighBg": "高 BgColor", + "progressHighColor": "进度颜色", + "progresscompletedColor": "已完成进度颜色", + "lowProgressLine": "低进度线", + "mediumProgressLine": "中进度线", + "SegmentedColor": "进度分段颜色", + "link_f2s": "链接 F2S", + "link_s2s": "链接 S2S", + "link_f2f": "链接 F2F", + "link_s2f": "链接 S2F", + "weekScale": "#___placeholder0___、", + "showHolidays": "显示假期", + "StatutoryHolidays": "法定假日数据", + "skipOffTime": "隐藏非工作时间", + "weekend": "周末", + "weekendSelected": "周末精选", + "noWorkHour": "无工作时间", + "noWorkHourSelected": "未选择工时", + "showWorkTimes": "展会工作时间", + "workTimeData": "工作时间数据", + "fit": "合适", + "manual": "手册", + "scaleMode": "刻度模式", + "startDate": "开始日期", + "endDate": "结束日期", + "addLink": "添加链接", + "linkObject": "链接对象", + "removeLink": "删除链接", + "allowSort": "允许排序", + "showTask": "显示任务", + "toggleOnDBClick": "切换 DBClick", + "sortOptions": "初始排序选项", + "rowHeight": "行高", + "showTooltip": "显示工具提示", + "tooltipTemplates": "工具提示模板", + "allowResizeTask": "允许调整任务大小", + "projectColor": "项目颜色", + "projectColorBg": "项目 BgColor", + "taskColor": "任务颜色", + "taskColorBg": "任务 BgColor", + "milestoneColor": "里程碑颜色", + "highlightOverdue": "突出显示逾期", + "overdueColor": "过期颜色", + "overdueBgColor": "逾期 BgColor", + "projectCompletedBgColor": "项目已完成 BgColor", + "projectCompletedColor": "项目完成颜色", + "tag": "标签", + "tasksTableWidth": "任务表宽度", + "allowErrorMessage": "允许错误信息", + "currentProjectId": "当前项目编号", + "currentProjectLastTask": "当前项目 最后任务", + "onlySortProject": "仅分类项目", + }, + "transfer": { + ...en.transfer, + + "sourceTitle": "来源数据", + "targetTitle": "目标数据", + "content": "内容 {i}", + "items": "项目", + "targetKeys": "选定密钥", + "oneWay": "单程", + "pagination": "分页", + "pageSize": "页面大小", + "allowSearch": "允许搜索", + "selectedKeys": "选定密钥", + "searchInfo": "搜索信息", + "targerObject": "塔格物体", + }, + "avatarGroup": { + ...en.avatarGroup, + + "maxCount": "最大计数", + "avatarSize": "头像大小", + "autoColor": "自动色彩", + "alignment": "对齐", + "currentAvatar": "当前头像", + }, + "avatarComp": { + ...en.avatarComp, + + "square": "方形", + "circle": "圆形", + "icon": "图标", + "shape": "形状", + "counts": "徽章", + "title": "标题", + "src": "来源", + "avatarCompTooltip": "显示优先级为:图像 -> 字符 -> 图标。取决于什么最先可用。", + "iconSize": "图标大小", + "avatarBackground": "背景介绍", + "label": "标签", + "caption": "标题", + "labelPosition": "职位", + "alignmentPosition": "路线", + "text": "文本", + "enableDropDown": "启用下拉菜单", + "containerBackground": "背景介绍", + }, + "card": { + ...en.card, + + "cardType": "卡片类型", + "common": "常见", + "custom": "风俗", + "default": "默认", + "small": "小", + "showTitle": "显示标题", + "title": "标题", + "more": "更多信息", + "extraTitle": "行动呼吁", + "CoverImg": "封面图片", + "imgSrc": "图片来源", + "showMeta": "显示内容", + "metaTitle": "内容标题", + "metaDesc": "内容说明", + "imgHeight": "图像高度", + "showActionIcon": "显示操作选项", + "actionOptions": "行动选项", + "menu": "菜单 {i}", + "hoverColor": "悬停颜色", + "IconColor": "图标颜色", + "titleSize": "标题大小", + }, + "timer": { + ...en.timer, + + "timerState": "定时器状态", + "elapsedTime": "所用时间", + "timer": "计时器", + "countdown": "倒计时", + "defaultValue": "默认值", + "timerType": "计时器类型", + "start": "开始", + "pause": "暂停", + "resume": "简历", + "reset": "重置", + "startPause": "开始/暂停", + "hideButton": "隐藏按钮", + "fontColor": "字体颜色", + }, + "iconComp": { + ...en.iconComp, + + "icon": "图标", + "autoSize": "图标自动大小", + "iconSize": "图标大小", + }, + "numberInput": { + ...en.numberInput, + + "formatter": "格式", + "precision": "精度", + "allowNull": "允许空值", + "thousandsSeparator": "显示千位分隔符", + "controls": "显示增加/减少按钮", + "step": "步长", + "standard": "标准", + "percent": "百分比", + }, + "slider": { + ...en.slider, + + "step": "步长", + "stepTooltip": "该值必须大于0且可被(最大值-最小值)整除", + "vertical": "垂直方向", + }, + "rating": { + ...en.rating, + + "max": "最大评分", + "allowHalf": "允许半颗星", + }, + "optionsControl": { + ...en.optionsControl, + + "optionList": "选项列表", + "option": "选项", + "optionI": "选项 {i}", + "viewDocs": "查看文档", + "tip": "“item”和“i”变量代表数据数组中每个项的值和索引", + }, + "stepOptionsControl": { + ...en.stepOptionsControl, + + "value": "值/键", + "valueTooltip": "步骤值必须是一个数字。对于第一个步骤,它必须等于初始值。数字必须按升序一致排列", + "title": "步骤", + "subTitle": "子标题", + "description": "描述", + "status": "状态", + "icon": "步骤图标", + }, + "step": { + ...en.step, + + "initialValue": "初始值", + "initialValueTooltip": "视觉编号的起始位置。必须是 1 或更高。", + "valueDesc": "当前价值", + "size": "台阶大小", + "sizeSmall": "小型", + "sizeDefault": "默认值", + "percent": "步骤 百分比", + "type": "步骤类型", + "typeDefault": "标准", + "typeNavigation": "导航", + "typeInline": "内联", + "direction": "步骤 方向", + "directionVertical": "垂直", + "directionHorizontal": "横向", + "labelPlacement": "步骤 标签放置", + "status": "步骤状态", + "statusWait": "等待", + "statusProcess": "过程", + "statusFinish": "完成", + "statusError": "错误", + "showDots": "用圆点代替数字", + "showIcons": "显示图标而不是数字", + "responsive": "响应式", + "selectable": "可选择", + }, + "coloredTagOptionControl": { + ...en.coloredTagOptionControl, + + "tag": "标签文本", + "color": "颜色", + "icon": "图标", + }, + "radio": { + ...en.radio, + + "options": "选项", + "horizontal": "水平", + "horizontalTooltip": "水平布局在空间不足时自动换行", + "vertical": "垂直", + "verticalTooltip": "垂直布局始终以单列显示", + "autoColumns": "自动列", + "autoColumnsTooltip": "自动列布局根据空间自动调整顺序,以多列显示", + }, + "cascader": { + ...en.cascader, + + "options": "结构", + }, + "selectInput": { + ...en.selectInput, + + "valueDesc": "当前选择的值", + "selectedIndexDesc": "当前选择的值的索引,如果未选择任何值则为-1", + "selectedLabelDesc": "当前选择的值的标签", + }, + "file": { + ...en.file, + + "typeErrorMsg": "必须是一个带有有效文件大小单位的数字,或者是一个无单位的字节数.", + "fileEmptyErrorMsg": "上传失败.文件大小为空.", + "fileSizeExceedErrorMsg": "上传失败.文件大小超过限制.", + "minSize": "最小大小", + "minSizeTooltip": "上传文件的最小大小,可选择使用文件大小单位(例如:\"5kb\"、\"10MB\").如果没有提供单位,该值将被视为字节数.", + "maxSize": "最大大小", + "maxSizeTooltip": "上传文件的最大大小,可选择使用文件大小单位(例如:\"5kb\"、\"10MB\").如果没有提供单位,该值将被视为字节数.", + "single": "单个", + "multiple": "多个", + "directory": "目录", + "upload": "浏览", + "fileType": "文件类型", + "reference": "请参考", + "fileTypeTooltipUrl": "https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file", + "fileTypeTooltip": "唯一的文件类型指定", + "uploadType": "上传类型", + "showUploadList": "显示上传列表", + "maxFiles": "最大文件数", + "filesValueDesc": "当前上传文件的内容以Base64编码", + "filesDesc": "当前上传文件的列表.详细信息请参阅", + "clearValueDesc": "清除所有文件", + "parseFiles": "解析文件", + "parsedValueTooltip1": "如果解析文件解析成功,上传的文件将解析为对象、数组或字符串.解析后的数据可以通过parsedValue数组访问.", + "parsedValueTooltip2": "支持Excel、JSON、CSV和文本文件.其他格式将返回null.", + "forceCapture": "武力捕获", + "forceCaptureTooltip": "用相机捕捉图像代替上传", + "usePhoto": "使用照片", + "retakePhoto": "重拍照片", + "capture": "捕获", + }, + "date": { + ...en.date, + + "format": "格式", + "inputFormat": "输入格式", + "formatTip": "支持:\nYYYY-MM-DD HH:mm:ss\nYYYY-MM-DD\n时间戳", + "reference": "请参考", + "showTime": "显示时间", + "start": "开始日期", + "end": "结束日期", + "year": "年", + "quarter": "季度", + "month": "月", + "week": "周", + "date": "日期", + "clearAllDesc": "清除全部", + "resetAllDesc": "重置全部", + "placeholder": "选择日期", + "placeholderText": "占位符", + "startDate": "开始日期", + "endDate": "结束日期", + }, + "time": { + ...en.time, + + "start": "开始时间", + "end": "结束时间", + "formatTip": "支持格式:\nHH:mm:ss\n时间戳", + "format": "格式", + "placeholder": "选择时间", + "placeholderText": "占位符", + "startTime": "开始时间", + "endTime": "结束时间", + }, + "button": { + ...en.button, + + "prefixIcon": "前缀图标", + "prefixText": "前缀文本", + "suffixIcon": "后缀图标", + "icon": "图标", + "iconSize": "图标大小", + "button": "按钮", + "formToSubmit": "要提交的表单", + "default": "默认", + "submit": "提交", + "textDesc": "当前显示在按钮上的文本", + "loadingDesc": "按钮是否处于加载状态?如果为true,则当前按钮正在加载", + "formButtonEvent": "按钮事件", + }, + "link": { + ...en.link, + + "link": "链接", + "textDesc": "当前显示在链接上的文本", + "loadingDesc": "链接是否处于加载状态?如果为true,则当前链接正在加载", + }, + "scanner": { + ...en.scanner, + + "text": "点击扫码", + "camera": "摄像头{index}", + "changeCamera": "切换摄像头", + "continuous": "连续扫描", + "uniqueData": "忽略重复数据", + "maskClosable": "点击背景后关闭", + "errTip": "请在HTTPS模式或本地主机模式下使用此组件", + }, + "dropdown": { + ...en.dropdown, + + "onlyMenu": "仅菜单", + "textDesc": "当前显示在按钮上的文本", + "triggerMode": "触发方式", + }, + "textShow": { + ...en.textShow, + + "text": "### 👋 你好,{name}", + "valueTooltip": "Markdown支持大多数HTML标签和属性.出于安全原因,禁用了iframe、script和其他标签.", + "verticalAlignment": "垂直对齐", + "horizontalAlignment": "水平对齐", + "textDesc": "在当前文本框中显示的文本", + }, + "table": { + ...en.table, + + "editable": "可编辑", + "columnNum": "列数", + "viewModeResizable": "用户调整列宽", + "viewModeResizableTooltip": "是否允许调整列宽.", + "visibleResizables": "显示调整大小句柄", + "visibleResizablesTooltip": "在表头显示可见的调整大小句柄", + "showFilter": "显示筛选按钮", + "showRefresh": "显示刷新按钮", + "showDownload": "显示下载按钮", + "columnSeparator": "柱分离器", + "columnSeparatorTooltip": "下载的 CSV 文件中的列分隔符(“分隔符”)。 \n\n建议:\n- 逗号 (,)\n- 分号 (;)\n- 竖线 (|)\n- 制表符 (\\t)", + "columnSetting": "显示列设置按钮", + "searchText": "搜索文本", + "searchTextTooltip": "搜索和筛选在表格中呈现的数据", + "showQuickJumper": "显示快速跳转", + "hideOnSinglePage": "只有一页时隐藏", + "showSizeChanger": "显示分页大小切换按钮", + "pageSizeOptions": "分页大小选项", + "pageSize": "分页大小", + "total": "总行数", + "totalTooltip": "默认值为当前数据项的数量,可以从查询中获取,例如:'{{query1.data[0].count}}'", + "filter": "筛选", + "filterRule": "筛选规则", + "chooseColumnName": "选择列", + "chooseCondition": "选择条件", + "clear": "清空", + "columnShows": "显示字段", + "selectAll": "全选", + "and": "与", + "or": "或", + "contains": "包含", + "notContain": "不包含", + "equals": "等于", + "isNotEqual": "不等于", + "isEmpty": "为空", + "isNotEmpty": "不为空", + "greater": "大于", + "greaterThanOrEquals": "大于等于", + "lessThan": "小于", + "lessThanOrEquals": "小于等于", + "action": "操作", + "columnValue": "列值", + "columnValueTooltip": "'{{currentCell}}': 当前单元格数据\n'{{currentRow}}': 当前行数据\n'{{currentIndex}}': 当前数据索引(从0开始)\n示例: '{{currentCell * 5}}' 显示原始值数据的5倍.", + "columnTooltip": "列工具提示", + "imageSrc": "图片链接", + "imageSize": "图片尺寸", + "columnTitle": "标题", + "columnTitleTooltip": "标题工具提示", + "showTitle": "显示标题", + "showTitleTooltip": "显示/隐藏表标题中的列标题", + "sortable": "可排序", + "align": "对齐方式", + "fixedColumn": "固定列", + "autoWidth": "自动宽度", + "customColumn": "自定义列", + "auto": "自动", + "fixed": "固定", + "columnType": "列类型", + "dataMapping": "数据映射", + "numberStep": "步", + "numberStepTooltip": "当前值增加或减少的数量。它可以是整数或小数", + "precision": "精度", + "float": "分数", + "prefix": "字首", + "suffix": "后缀", + "avatars": "头像", + "avatarGroupAlignment": "头像排列", + "text": "文本", + "number": "数字", + "link": "链接", + "links": "多链接", + "tag": "标签", + "select": "下拉单选", + "dropdown": "下拉式", + "time": "时间", + "date": "日期", + "dateTime": "日期时间", + "badgeStatus": "状态", + "button": "按钮", + "image": "图片", + "boolean": "布尔值", + "switch": "开关", + "rating": "评分", + "progress": "进度", + "option": "操作", + "optionList": "操作列表", + "option1": "操作1", + "status": "状态", + "statusTooltip": "可选值: success, error, default, warning, processing", + "primaryButton": "主要", + "defaultButton": "默认", + "type": "类型", + "tableSize": "表格尺寸", + "hideHeader": "隐藏表头", + "hideToolbar": "隐藏表工具栏(页脚)", + "fixedHeader": "固定表头", + "fixedHeaderTooltip": "垂直滚动表格的标题将被固定", + "fixedToolbar": "固定工具栏", + "fixedToolbarTooltip": "工具栏将根据位置固定在可垂直滚动的表格上", + "hideBordered": "隐藏列边框", + "showHeaderGridBorder": "显示标题网格边框", + "showRowGridBorder": "显示行网格边框", + "showVerticalRowGridBorder": "显示垂直行网格边框", + "showHorizontalRowGridBorder": "显示水平行网格边框", + "deleteColumn": "删除列", + "confirmDeleteColumn": "确认删除列:", + "small": "小", + "middle": "中", + "large": "大", + "refreshButtonTooltip": "数据发生变化,点击重新生成列.", + "changeSetDesc": "表示可编辑表格的更改的对象,仅包含已更改的单元格.行优先,列次之.", + "selectedRowDesc": "提供当前选中行的数据,指示如果用户在行上点击按钮/链接时触发的行", + "selectedRowsDesc": "在多选模式下有用,与selectedRow相同", + "pageNoDesc": "当前显示的页码,从1开始", + "pageSizeDesc": "每页显示的行数", + "sortColumnDesc": "当前选中的排序列的名称", + "sortDesc": "当前行是否按降序排列", + "pageOffsetDesc": "当前分页的起始位置,用于分页获取数据.示例:select * from users limit '{{table1.pageSize}}' offset '{{table1.pageOffset}}'", + "displayDataDesc": "当前表格中显示的数据", + "selectedIndexDesc": "在显示数据中选中的索引", + "filterDesc": "表格筛选参数", + "dataDesc": "当前表格使用的原始数据", + "saveChanges": "保存更改", + "cancelChanges": "取消更改", + "rowSelectChange": "行选中变化", + "rowClick": "行点击", + "rowExpand": "行展开", + "rowShrink": "行收缩", + "search": "搜索", + "download": "下载", + "columnEdited": "栏目已编辑", + "filterChange": "筛选变化", + "sortChange": "排序变化", + "pageChange": "分页变化", + "refresh": "刷新", + "rowColor": "条件行颜色", + "rowColorDesc": "基于可选变量条件设置行颜色:\ncurrentRow, currentOriginalIndex, currentIndex, columnTitle.\n例如:'{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", + "rowHeight": "条件行高度", + "rowHeightDesc": "根据可选变量有条件地设置行高: CurrentRow、CurrentOriginalIndex、CurrentIndex、ColumnTitle。例如:'{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", + "cellColor": "条件单元格颜色", + "cellColorDesc": "使用 currentCell 根据单元格值有条件地设置单元格颜色:\n例如:'{{ currentCell == 3 ? \"green\" : \"red\" }}'", + "saveChangesNotBind": "未配置保存更改的事件处理程序.请在点击之前绑定至少一个事件处理程序.", + "dynamicColumn": "使用动态列设置", + "dynamicColumnConfig": "列设置", + "dynamicColumnConfigDesc": "动态列设置.接受一个列名的数组,默认情况下所有列都可见.\n示例:[\"id\", \"name\"]", + "position": "位置", + "showDataLoadSpinner": "显示加载指示器", + "showValue": "显示值", + "expandable": "可展开", + "configExpandedView": "配置展开视图", + "toUpdateRowsDesc": "可编辑表格中要更新的行的对象数组.", + "selectedCellDesc": "选定单元格", + "empty": "空", + "falseValues": "false时的文本", + "iconTrue": "图标 为真时", + "iconFalse": "图标为假时", + "iconNull": "图标 零时", + "allColumn": "全部", + "visibleColumn": "可见", + "emptyColumns": "当前没有可见列", + "showSummary": "显示摘要行", + "totalSummaryRows": "总行数", + "inlineAddNewRow": "内联添加新行", + "editMode": "编辑模式", + "singleClick": "单击", + "doubleClick": "双击", + "showUpdateButtons": "显示保存/取消按钮", + }, + "image": { + ...en.image, + + "src": "图片链接", + "srcDesc": "图片链接地址", + "supportPreview": "支持点击预览", + "supportPreviewTip": "仅在图片链接有效时生效", + "previewSrc": "图片预览链接", + "clipPath": "图像剪切路径", + "clipPathTip": "使用 clip-path 为元素定义基于 CSS 定义的自定义形状、引用 SVG 屏蔽(通过源 URL)或使用预定义形状(如圆形()、椭圆形()、多边形()或嵌入())进行剪切。", + "enableOverflow": "启用溢出", + "enableOverflowTip": "允许图像溢出其容器,使裁剪超出容器的边界。这对于保持图像特定部分的焦点非常有用。", + "overflow": "溢出行为(CSS)", + "overflowTip": "定义内容溢出容器时的行为方式。隐藏\"、\"滚动 \"或 \"可见 \"等选项决定了裁剪内容的可见性。", + "positionX": "水平位置", + "positionXTip": "指定图像在容器内的水平对齐方式。例如左\"、\"中\"、\"右 \"或百分比值。", + "positionY": "垂直位置", + "positionYTip": "指定图像在容器内的垂直对齐方式。例如顶部\"、\"中间\"、\"底部 \"或百分比值。", + "aspectRatio": "长宽比(CSS)", + "aspectRatioTip": "保持一致的图像宽高比例,如宽屏为 \"16/9\",正方形为 \"1/1\"。自然图像尺寸留空。", + "placement": "图像放置", + "placementTip": "决定图像在布局或容器中的显示位置和方式。选项包括特定的对齐或放置逻辑。", + }, + "progress": { + ...en.progress, + + "value": "进度值", + "valueTooltip": "完成百分比,取值范围为0到100", + "showInfo": "显示数值", + "valueDesc": "当前的进度值,取值范围为0到100", + "showInfoDesc": "是否显示当前的进度值", + }, + "fileViewer": { + ...en.fileViewer, + + "invalidURL": "未提供有效的URL链接", + "src": "文件链接", + "srcTooltip": "通过嵌入HTML预览提供的链接内容,也可以支持base64编码的数据,例如:data:application/pdf; base64,AAA... CCC", + "srcDesc": "文件链接地址", + }, + "divider": { + ...en.divider, + + "title": "标题", + "align": "对齐方式", + "dashed": "虚线", + "type": "垂直型", + "dashedDesc": "是否使用虚线", + "titleDesc": "分割线标题", + "alignDesc": "分割线标题对齐方式", + }, + "QRCode": { + ...en.QRCode, + + "value": "内容", + "valueTooltip": "数值的最大长度为2953个字符", + "valueDesc": "二维码的内容", + "level": "容错级别", + "levelTooltip": "指的是二维码被遮挡的部分仍然能够被扫描出来的程度.级别越高,二维码越复杂、被遮挡的部分越多,仍然能够被扫描出来的可能性就越大", + "includeMargin": "显示边距", + "image": "图片", + "L": "L (低)", + "M": "M (中)", + "Q": "Q (四分之一)", + "H": "H (高)", + "maxLength": "内容过长,请将长度设置为2953个字符以下", + }, + "jsonExplorer": { + ...en.jsonExplorer, + + "indent": "缩进", + "expandToggle": "展开切换", + "theme": "主题", + "valueDesc": "当前的 JSON 数据", + "default": "默认", + "defaultDark": "默认暗色", + "neutralLight": "中性浅色", + "neutralDark": "中性暗色", + "azure": "天蓝色", + "darkBlue": "深蓝色", + }, + "audio": { + ...en.audio, + + "src": "音频链接", + "defaultSrcUrl": "https://cdn.pixabay.com/audio/2023/07/06/audio_e12e5bea9d.mp3", + "autoPlay": "自动播放", + "loop": "循环播放", + "srcDesc": "当前音频链接", + "play": "播放", + "playDesc": "音频播放时触发", + "pause": "暂停", + "pauseDesc": "音频暂停时触发", + "ended": "播放结束", + "endedDesc": "音频播放结束时触发", + }, + "video": { + ...en.video, + + "src": "视频链接", + "defaultSrcUrl": "https://www.youtube.com/watch?v=pRpeEdMmmQ0", + "poster": "视频链接", + "defaultPosterUrl": "", + "autoPlay": "自动播放", + "loop": "循环播放", + "controls": "隐藏控件", + "volume": "音量", + "playbackRate": "播放速度", + "posterTooltip": "默认值为视频的第一帧", + "autoPlayTooltip": "视频加载后自动播放.将该值从true更改为false将暂停视频播放.(如果设置了封面,将通过封面按钮播放)", + "controlsTooltip": "隐藏视频播放控件.可能不被所有视频源完全支持.", + "volumeTooltip": "设置播放器的音量,介于0和1之间", + "playbackRateTooltip": "设置播放器的速度,介于1和2之间", + "srcDesc": "当前视频URL链接", + "play": "播放", + "playDesc": "视频播放时触发", + "pause": "暂停", + "pauseDesc": "视频暂停时触发", + "load": "加载", + "loadDesc": "视频资源加载完成时触发", + "ended": "结束", + "endedDesc": "视频播放结束时触发", + "currentTimeStamp": "视频的当前播放位置(以秒为单位)", + "duration": "视频的总时长(以秒为单位)", + }, + "media": { + ...en.media, + + "playDesc": "开始播放媒体.", + "pauseDesc": "暂停媒体播放.", + "loadDesc": "将媒体重置到开头并重新选择媒体资源.", + "seekTo": "跳转到给定的秒数或介于0和1之间的分数位置", + "seekToAmount": "秒数或介于0和1之间的分数", + "showPreview": "显示预览", + }, + "rangeSlider": { + ...en.rangeSlider, + + "start": "起始值", + "end": "结束值", + "step": "步长", + "stepTooltip": "滑块的精确度,值必须大于0\n且能被(最大值-最小值)整除", + }, + "iconControl": { + ...en.iconControl, + + "selectIcon": "选择图标", + "searchIcon": "搜索图标", + "searchAnimation": "搜索动画", + "searchIllustration": "搜索插图", + "insertIcon": "插入图标", + "insertImage": "插入图片或", + }, + "shapeControl": { + ...en.shapeControl, + + "selectShape": "选择形状", + "insertShape": "插入形状", + "insertImage": "插入图像或", + }, + "millisecondsControl": { + ...en.millisecondsControl, + + "timeoutTypeError": "请输入正确的超时时间,当前输入为:{value}", + "timeoutLessThanMinError": "输入必须大于 {left},当前输入为:{value}", + }, + "selectionControl": { + ...en.selectionControl, + + "single": "单选", + "multiple": "多选", + "close": "关闭", + "mode": "选择模式", + }, + "container": { + ...en.container, + + "title": "容器标题", + "titleTooltip": "集装箱标题", + "flowWidth": "内容宽度", + "floatType": "文本浮动类型", + }, + "drawer": { + ...en.drawer, + + "closePosition": "关闭位置", + "placement": "抽屉位置", + "size": "大小", + "top": "顶部", + "right": "右侧", + "center": "中心", + "bottom": "底部", + "left": "左侧", + "title": "抽屉标题", + "titleAlign": "标题调整", + "widthTooltip": "数字或百分比,例如 520,60%", + "heightTooltip": "数字,例如 378", + "openDrawerDesc": "打开抽屉", + "closeDrawerDesc": "关闭抽屉", + "width": "抽屉宽度", + "height": "抽屉高度", + }, + "meeting": { + ...en.meeting, + + "logLevel": "Agora SDK 日志级别", + "placement": "会议抽屉的摆放", + "meeting": "会议设置", + "cameraView": "摄像头视图", + "cameraViewDesc": "本地用户(主机)的摄像头视图", + "screenShared": "屏幕共享", + "screenSharedDesc": "本地用户(主机)共享的屏幕", + "audioUnmuted": "音频静音", + "audioMuted": "音频静音", + "videoClicked": "点击视频", + "videoOff": "关闭视频", + "videoOn": "视频", + "size": "尺寸", + "top": "返回顶部", + "host": "会议室主机。您需要将主机作为自己的应用程序逻辑进行管理", + "participants": "会议室与会者", + "shareScreen": "本地用户共享的显示屏幕", + "appid": "Agora 应用 ID", + "meetingName": "会议名称", + "localUserID": "主机用户 ID", + "userName": "主机用户名", + "rtmToken": "Agora RTM 代币", + "rtcToken": "Agora RTC 代币", + "noVideo": "无视频", + "profileImageUrl": "简介图片 URL", + "right": "对", + "bottom": "底部", + "videoId": "视频流 ID", + "audioStatus": "音频状态", + "left": "左侧", + "widthTooltip": "像素或百分比,例如 520、60", + "heightTooltip": "像素,例如 378", + "openDrawerDesc": "开放式抽屉", + "closeDrawerDesc": "关闭抽屉", + "width": "抽屉宽度", + "height": "抽屉高度", + "actionBtnDesc": "操作按钮", + "broadCast": "广播信息", + "title": "会议名称", + "meetingCompName": "Agora 会议控制器", + "sharingCompName": "屏幕共享流", + "videoCompName": "摄像机流", + "videoSharingCompName": "屏幕共享流", + "meetingControlCompName": "控制按钮", + "meetingCompDesc": "会议组成部分", + "meetingCompControls": "会议控制", + "meetingCompKeywords": "Agora 会议、网络会议、协作", + "iconSize": "图标大小", + "userId": "主机用户 ID", + "roomId": "房间 ID", + "meetingActive": "持续会议", + "messages": "广播信息", + }, + "settings": { + ...en.settings, + + "title": "设置", + "userGroups": "用户组", + "organization": "工作空间", + "subscription": "订阅", + "audit": "审计日志", + "theme": "主题", + "plugin": "插件", + "advanced": "高级", + "apiDocs": "应用程序接口文档", + "lab": "实验室", + "branding": "品牌", + "oauthProviders": "用户认证", + "appUsage": "应用程序使用日志", + "environments": "环境", + "premium": "高级版", + }, + "enterprise": { + ...en.enterprise, + + "AuditLogTitle": "审计日志 Dasboard", + "AuditLogOverview": "日志过滤器", + "USER_LOGIN": "用户登录", + "USER_LOGOUT": "用户注销", + "APPLICATION_VIEW": "查看申请", + "APPLICATION_CREATE": "创建应用程序", + "APPLICATION_DELETE": "删除申请", + "APPLICATION_UPDATE": "更新申请", + "APPLICATION_MOVE": "移动申请", + "APPLICATION_RECYCLED": "回收申请", + "APPLICATION_RESTORE": "恢复应用程序", + "APPLICATION_PUBLISH": "应用出版", + "APPLICATION_VERSION_CHANGE": "应用程序版本更新", + "APPLICATION_SHARING_CHANGE": "应用程序共享更改", + "APPLICATION_PERMISSION_CHANGE": "申请许可变更", + "FOLDER_CREATE": "创建文件夹", + "FOLDER_DELETE": "删除文件夹", + "FOLDER_UPDATE": "更新文件夹", + "QUERY_EXECUTION": "执行查询", + "GROUP_CREATE": "创建组", + "GROUP_UPDATE": "更新小组", + "GROUP_DELETE": "删除组", + "GROUP_MEMBER_ADD": "添加组员", + "GROUP_MEMBER_ROLE_UPDATE": "更新小组成员角色", + "GROUP_MEMBER_LEAVE": "休假小组", + "GROUP_MEMBER_REMOVE": "删除组员", + "SERVER_START_UP": "服务器启动", + "SERVER_INFO": "查看服务器信息", + "DATA_SOURCE_CREATE": "创建数据源", + "DATA_SOURCE_UPDATE": "更新数据源", + "DATA_SOURCE_DELETE": "删除数据源", + "DATA_SOURCE_PERMISSION_GRANT": "授予数据源权限", + "DATA_SOURCE_PERMISSION_UPDATE": "更新数据源权限", + "DATA_SOURCE_PERMISSION_DELETE": "删除数据源权限", + "LIBRARY_QUERY_CREATE": "创建图书馆查询", + "LIBRARY_QUERY_UPDATE": "更新图书馆查询", + "LIBRARY_QUERY_DELETE": "删除图书馆查询", + "LIBRARY_QUERY_PUBLISH": "发布图书馆查询", + "API_CALL_EVENT": "API 调用事件", + "logFilter": "日志过滤器", + "noLogsFound": "未找到日志。调整过滤器后再试一次。", + "usageLogUserEngagement": "各地区用户参与情况", + "usageLogAppViews": "应用程序使用时间", + "usageLogTopTen": "十大应用程序", + "usageLogAnonymousKNown": "匿名/已知用户", + "usageLogDevices": "设备/操作系统明细", + "usageLogBrowsers": "浏览器/布局引擎细分", + "premiumFeaturesNotice": "Lowcoder 企业版可提供所有高级功能。", + "requestLicense": "申请企业版许可证", + "requestLicensesBtton": "申请企业访问权限", + "AuditLogsTitle": "审计日志", + "AuditLogsIntroTitle": "工作区活动的强大可见性", + "AuditLogsIntro1": "审计日志使管理员能够准确跟踪整个 Lowcoder 平台上发生的情况。从用户登录到应用程序修改,每个相关操作都会被捕获和存储。", + "AuditLogsIntro2": "我们包括每个事件的详细元数据,如地理位置、设备类型、浏览器和操作系统。", + "AuditLogsIntro3": "这种透明度使您能够监控所有连接环境中的活动,提供强大的审计跟踪,以支持合规性、安全性和运营洞察力。", + "AuditLogsEventsTitle": "跟踪哪些事件?", + "AuditLogsEventsIntro": "以下用户操作会被实时记录:", + "SignIn": "登录", + "Logout": "注销", + "ViewApp": "查看应用程序", + "CreateApp": "创建新应用程序", + "DeleteApp": "删除应用程序", + "UpdateApp": "更新应用程序", + "MoveToFolder": "移至文件夹", + "MoveToTrash": "移至垃圾桶", + "RestoreApp": "恢复应用程序", + "CreateFolder": "创建新文件夹", + "DeleteFolder": "删除文件夹", + "UpdateFolder": "更新文件夹", + "ExecuteDataQuery": "执行数据查询", + "CreateUserGroup": "创建新用户组", + "UpdateUserGroup": "更新用户组", + "DeleteUserGroup": "删除用户组", + "AddGroupMember": "添加用户组成员", + "UpdateGroupMemberRole": "更新用户组成员的角色", + "LeaveUserGroup": "离开用户组", + "RemoveGroupMember": "删除用户组成员", + "ServerStartup": "服务器启动", + "CreateDataSource": "创建数据源", + "UpdateDataSource": "更新数据源", + "DeleteDataSource": "删除数据源", + "GrantUpdateDeletePermission": "授予或更新权限", + "LibraryQueryActions": "创建/更新/删除图书馆查询", + "PublishLibraryQuery": "发布图书馆查询", + "AuditLogsPreviewTitle": "预览运行中的审计日志(点击放大)", + "ScreenshotPlaceholder1": "[ 截图 1 占位符 ]", + "ScreenshotPlaceholder2": "[ 截图 2 占位符 ]", + "ScreenshotPlaceholder3": "[ 截图 3 占位符 ]", + "PricingTitle": "企业版定价", + "PricingIntro": "我们根据您的使用模式,为任何规模的组织提供灵活的定价:", + "FlatRateTitle": "方案 1:每个实例统一收费 - 169 美元/月", + "FlatRateDesc": "实例是一个可独立部署的完整 Lowcoder 环境(元数据库+运行时)。其中包括", + "FlatRatePoint1": "专用的 MongoDB 元数据存储", + "FlatRatePoint2": "一个或多个应用程序运行时(\"Api-Service \"和/或 \"Node-Service \"容器)", + "UsagePricingTitle": "方案 2:按使用量定价--每次 API 调用 0.001 美元", + "UsagePricingDesc": "每个实例也可根据应用程序接口的使用情况进行许可。我们提供预付套餐:", + "API100k": "100,000 次 API 调用 - $100", + "API1M": "1,000,000 次 API 调用 - 1,000 美元", + "API10M": "10,000,000 次 API 调用 - $10,000", + "UsageOverrunDesc": "当您的 API 包耗尽时,我们会提醒您。一旦包耗尽,您的实例仍可正常运行,但运行速度会降低,以防止滥用并保持公平。", + "UsageTopUpInfo": "您可以随时无缝添加其他套餐,以确保持续、快速的访问--不会出现服务中断。", + "AppUsageTitle": "应用程序使用日志", + "AppUsageIntroTitle": "了解应用程序的使用方式", + "AppUsageIntro1": "应用程序使用日志可让您深入了解已发布的 Lowcoder 应用程序的使用情况。", + "AppUsageIntro2": "该功能的工作原理类似于内置的简化版 Google Analytics,但完全是私有的,并且只适用于您的 Lowcoder 实例。", + "AppUsageIntro3": "管理员可以分析一段时间内如何访问应用程序、哪些应用程序使用率最高以及用户从哪里连接。", + "AppUsageMetricsTitle": "您可以跟踪的指标...", + "AppUsageMetricsIntro": "这些分析有助于您就参与度和平台使用情况做出明智决策:", + "MetricActiveUsers": "应用程序每天/每周/每月的浏览量(基于时间过滤器)", + "MetricViewsPerApp": "十大应用程序", + "MetricDevices": "通过设备(台式电脑、平板电脑、手机)访问", + "MetricBrowsers": "通过浏览器和操作系统访问", + "MetricCountries": "用户的地理来源", + "AppUsageScreenshotsTitle": "运行中的应用程序使用分析(点击放大)", + "AppUsageScreenshot1": "[应用程序使用情况仪表板屏幕截图]", + "AppUsageScreenshot2": "[每个应用程序的浏览量图表]", + "AppUsageScreenshot3": "[ 地理分布图 ]", + "BrandingIntroTitle": "定制品牌和白标", + "BrandingIntro1": "使用 Lowcoders 品牌设置,您可以通过提供完全可定制的品牌来提升用户的产品体验。", + "BrandingIntro2": "让您的客户或内部团队能够像使用自己的平台一样使用该平台--包括徽标、颜色、字体和自定义页面。", + "BrandingIntro3": "或者,您需要一个完全白标解决方案,并在每个接触点强化您的品牌形象。", + "BrandingColorsIntro1": "您可以设置自己的配色方案,包括主要用户界面元素和导航栏,以匹配您的企业形象。", + "BrandingColorsIntro2": "自定义侧边栏亮点、标题部分甚至文本对比度,以增强用户体验和可访问性。", + "BrandingFontsIntro": "从精心挑选的 Google 字体中进行选择,让您的应用程序在风格和可读性方面都真正属于您自己。", + "BrandingLogosIntro": "当然,您也可以上传自己的长方形和正方形徽标,以显示在标题、仪表盘和登录屏幕中。跨设备和屏幕保持品牌一致性。", + "BrandingPagesIntro1": "在错误页面、注册流程和注销信息中添加个性化文本和视觉效果。", + "BrandingPagesIntro2": "这些接触点有助于提供完全品牌化的体验,即使是在意外情况或账户过渡期间也是如此。", + "BrandingMetaIntro": "定义页面标题和描述等标准元数据,以提高搜索引擎优化效果和品牌信息传递。", + "BrandingHelpLinksIntro": "直接在应用程序内添加上下文相关的文档链接,为用户提供及时帮助。", + "BrandingWhatsNewIntro": "激活 \"最新消息 \"版块,以品牌化的明显方式突出更新和产品公告。", + "EnvironmentsIntroTitle": "低编码器分期", + "EnvironmentsTitle": "多环境基础设施", + "EnvironmentsIntro1": "Lowcoder 环境允许您干净、安全地分离开发、测试和生产阶段。", + "EnvironmentsIntro2": "企业团队可从结构化的发布工作流程、审批流程和跨阶段的版本稳定性中获益。", + "EnvironmentsIntro3": "利用环境功能,管理员可以控制部署的内容、时间和地点,所有这些都可以从一个界面上完成。", + "EnvironmentsIntro4": "Lowcoder 包含多种对象类型,如工作区、数据源、数据查询和应用程序。由于其中许多对象是相互关联的(例如,一个数据源可以在多个应用程序中共享),因此纯粹基于 Git 的导出无法一致地捕获所有依赖关系。相反,Lowcoder 直接在用户界面中提供了一种选择性的集成部署机制。应用程序、数据源和查询可以有选择性地进行管理并跨环境部署。管理对象可确保安全、可控的暂存和生产版本。", + "yourDeploymentID": "您的部署 ID", + "EnvironmentsFeaturePreviewTitle": "运行中的环境与部署(点击放大)", + "EnvironmentsUseCasesTitle": "为什么要使用环境?(分阶段)", + "EnvironmentsUseCase1": "通过在专用开发或质量保证环境中测试应用程序,防止在生产过程中发生意外更改。", + "EnvironmentsUseCase2": "通过实施具有审计就绪跟踪功能的分阶段部署,与企业 IT 治理保持一致。", + "EnvironmentsUseCase3": "让团队能够自信地利用特定环境配置、数据和集成进行构建。", + "EnvironmentsFeaturesTitle": "您的收获", + "EnvironmentsFeature1": "中央控制面板,用于查看和管理所有 Lowcoder 环境。", + "EnvironmentsFeature2": "直接从用户界面在不同环境间部署应用程序、数据源和配置,无需额外的 CI/CD 工具。", + "EnvironmentsFeature3": "特定环境的访问控制和可见性规则。", + "EnvironmentsFeature5": "明确区分暂存、沙盒和生产操作的关注点。", + "apiUsage": "API 调用。", + "loadingApiUsage": "加载 API 使用数据...", + }, + "environments": { + ...en.environments, + + "title": "环境", + "search": "搜索", + "refresh": "刷新", + "addEnvironment": "添加环境", + "errorLoadingEnvironments": "加载环境出错", + "noEnvironmentsFoundMatching": "未找到与\"_{searchText}_\"匹配的环境", + "noEnvironmentsFound": "未找到环境。创建第一个环境,开始使用。", + "environmentsTypeLabel": "环境", + "showingAllEnvironments": "显示所有 {count} 环境", + "unnamedEnvironment": "未命名环境", + "masterEnvironment": "主环境", + "viewAuditLogs": "查看审计日志", + "id": "身份证", + "domain": "域名", + "master": "主人", + "license": "许可证", + "apiCalls": "API 调用", + "yes": "是", + "no": "没有", + "copyId": "复制 ID", + "copied": "已复制!", + "percentUsed": "{percent}% 已用", + "licenseStatus_checking": "检查...", + "licenseStatus_licensed": "特许", + "licenseStatus_unlicensed": "需要许可证", + "licenseStatus_error": "所需设置", + "licenseStatus_unknown": "未知", + "detail_environmentNotFound": "未找到环境", + "detail_returnToEnvironmentsList": "返回环境列表", + "detail_environmentDetail": "环境详情", + "detail_environmentOverview": "环境概述", + "detail_noDomainSet": "无域设置", + "detail_environmentId": "环境 ID", + "detail_licenseStatus": "许可证状态", + "detail_licenseNeeded": "所需许可证", + "detail_setupRequired": "所需设置", + "detail_created": "创建", + "detail_unknown": "未知", + "detail_licenseDetails": "许可证详细信息", + "detail_apiCallsRemaining": "剩余的 API 调用", + "detail_totalApiCallsLimit": "API 调用总数限制", + "detail_enterpriseEdition": "企业版", + "detail_active": "活跃", + "detail_inactive": "不活动", + "detail_licenseInformation": "许可证信息", + "detail_calls": "电话", + "detail_licenses": "许可证", + "detail_license": "许可证", + "detail_workspaces": "工作空间", + "detail_userGroups": "用户组", + "detail_type": "类型", + "detail_status": "现状", + "detail_licensed": "特许", + "detail_unlicensed": "无执照", + "detail_apiKey": "API 密钥", + "detail_configured": "已配置", + "detail_notSet": "未设置", + "detail_masterEnv": "主环境", + "unlicensed_unlicensedDescription": "该环境需要有效的许可证才能解锁其全部功能和特性。请确保正确配置了 API 服务 URL 并安装了插件。", + "unlicensed_errorDescription": "我们在检查许可证时遇到了一个问题。请查看配置设置。", + "unlicensed_defaultDescription": "该环境需要许可证配置才能继续。", + "unlicensed_contactLowcoderTeam": "联系 Lowcoder 团队", + "unlicensed_editEnvironment": "编辑环境", + "unlicensed_backToEnvironments": "返回环境", + "unlicensed_helpText": "需要帮助?请联系我们的团队获取许可支持,或编辑环境配置以解决此问题。", + "unlicensed_type": "类型", + "unlicensed_status": "现状", + "unlicensed_masterEnv": "主环境", + "unlicensed_licenseIssue": "许可证问题", + "unlicensed_error": "错误", + "unlicensed_missing": "失踪", + "error_itemNotFound": "您要查找的项目不存在,或者您没有权限查看该项目。", + "modal_createNewEnvironment": "创建新环境", + "modal_editEnvironment": "编辑环境", + "modal_cancel": "取消", + "modal_createEnvironment": "创建环境", + "modal_saveChanges": "保存更改", + "modal_environmentName": "环境名称", + "modal_pleaseEnterName": "请输入姓名", + "modal_nameMinLength": "姓名必须至少包含 2 个字符", + "modal_enterEnvironmentName": "输入环境名称", + "modal_description": "说明", + "modal_enterDescription": "输入描述", + "modal_stage": "舞台", + "modal_pleaseSelectStage": "请选择阶段", + "modal_selectStage": "选择阶段", + "modal_development": "开发 (DEV)", + "modal_testing": "测试 (TEST)", + "modal_preProduction": "前期制作(PREPROD)", + "modal_production": "生产 (PROD)", + "modal_frontendUrl": "前台 URL", + "modal_pleaseEnterValidUrl": "请输入有效的 URL", + "modal_apiServiceUrl": "应用程序接口服务 URL", + "modal_nodeServiceUrl": "节点服务 URL", + "modal_apiKey": "API 密钥", + "modal_enterApiKey": "输入 API 密钥", + "modal_masterEnvironment": "主环境", + "modal_alreadyMasterEnvironment": "_{name}_已是主环境", + "modal_willBeMaster": "将成为主人", + "modal_currentlyMaster": "现任主人", + "modal_configurationRequirements": "配置要求", + "modal_configurationRequirementsDesc": "确保 API 服务 URL 已配置且正确,API 密钥有效,并确保已正确安装许可证和插件以进行许可证验证。", + "workspaces_title": "工作空间", + "workspaces_subtitle": "管理该环境中的工作空间", + "workspaces_refresh": "刷新", + "workspaces_errorLoadingWorkspaces": "加载工作区出错", + "workspaces_configurationIssue": "配置问题", + "workspaces_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "workspaces_totalWorkspaces": "工作空间总数", + "workspaces_managedWorkspaces": "托管工作区", + "workspaces_unmanagedWorkspaces": "无人管理的工作空间", + "workspaces_workspace": "工作空间", + "workspaces_role": "角色", + "workspaces_status": "现状", + "workspaces_managed": "托管", + "workspaces_unmanaged": "无人管理", + "workspaces_actions": "行动", + "workspaces_viewAuditLogs": "查看审计日志", + "workspaces_audit": "审计", + "workspaces_searchWorkspaces": "按名称或 ID 搜索工作区", + "workspaces_showAll": "显示全部", + "workspaces_managedOnly": "仅管理", + "workspaces_showingResults": "显示 {count} 的 {total} 工作区", + "workspaces_paginationTotal": "工作空间 {start}-{end} 的 {total} 工作空间", + "workspaces_noWorkspacesFound": "此环境中未发现工作区", + "userGroups_title": "用户组", + "userGroups_subtitle": "管理该环境中的用户组", + "userGroups_refresh": "刷新", + "userGroups_errorLoadingUserGroups": "加载用户组时出错", + "userGroups_configurationIssue": "配置问题", + "userGroups_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "userGroups_totalGroups": "组别总数", + "userGroups_allUsersGroups": "所有用户组", + "userGroups_developerGroups": "开发人员小组", + "userGroups_customGroups": "自定义组", + "userGroups_userGroup": "用户组", + "userGroups_type": "类型", + "userGroups_allUsers": "所有用户", + "userGroups_developers": "开发人员", + "userGroups_custom": "定制", + "userGroups_members": "成员", + "userGroups_adminMembers": "行政成员", + "userGroups_created": "创建", + "userGroups_totalMembersTooltip": "该小组成员总数", + "userGroups_adminMembersTooltip": "该组中管理员用户的数量", + "userGroups_searchUserGroups": "按名称或 ID 搜索用户组", + "userGroups_showingResults": "显示 {count} 的 {total} 用户组", + "userGroups_paginationTotal": "用户组 {total} 的 {start}-{end} 用户组", + "userGroups_noUserGroupsFound": "此环境中未发现用户组", + "apps_title": "应用程序", + "apps_subtitle": "管理工作区应用程序", + "apps_refresh": "刷新", + "apps_errorLoadingApps": "加载应用程序出错", + "apps_configurationIssue": "配置问题", + "apps_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "apps_totalApps": "应用程序总数", + "apps_publishedApps": "已发布的应用程序", + "apps_managedApps": "托管应用程序", + "apps_unmanagedApps": "非托管应用程序", + "apps_app": "应用程序", + "apps_status": "现状", + "apps_published": "已出版", + "apps_draft": "草案", + "apps_managed": "托管", + "apps_unmanaged": "无人管理", + "apps_deploy": "部署", + "apps_audit": "审计", + "apps_appMustBeManagedToDeploy": "在部署应用程序之前必须对其进行管理", + "apps_deployThisApp": "将此应用程序部署到另一个环境", + "apps_viewAuditLogs": "查看审计日志", + "apps_searchApps": "按名称或 ID 搜索应用程序", + "apps_showAll": "显示全部", + "apps_managedOnly": "仅管理", + "apps_showingResults": "显示 {total} 应用程序中的 {count} 应用程序", + "apps_paginationTotal": "_{start}_-_{end}_的__{total}_应用程序", + "apps_noAppsFound": "该工作区没有发现应用程序", + "apps_appRecycled": "此应用程序已被移至回收站", + "apps_managedSuccess": "_{name}_现已托管", + "apps_unmanagedSuccess": "_{name}_现在处于非托管状态", + "apps_managedError": "更改 {name} 的托管状态失败", + "dataSources_title": "数据来源", + "dataSources_subtitle": "管理工作区数据连接", + "dataSources_refresh": "刷新", + "dataSources_errorLoadingDataSources": "加载数据源出错", + "dataSources_configurationIssue": "配置问题", + "dataSources_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "dataSources_totalDataSources": "数据源总数", + "dataSources_availableTypes": "可用类型", + "dataSources_managed": "托管", + "dataSources_unmanaged": "无人管理", + "dataSources_dataSource": "数据来源", + "dataSources_type": "类型", + "dataSources_status": "现状", + "dataSources_deploy": "部署", + "dataSources_audit": "审计", + "dataSources_dataSourceMustBeManagedToDeploy": "在部署数据源之前必须对其进行管理", + "dataSources_deployThisDataSource": "将此数据源部署到另一个环境", + "dataSources_viewAuditLogs": "查看审计日志", + "dataSources_searchDataSources": "按名称或 ID 搜索数据源", + "dataSources_showAll": "显示全部", + "dataSources_managedOnly": "仅管理", + "dataSources_showingResults": "显示 {total} 数据源中的 {count} 数据源", + "dataSources_paginationTotal": "_{start}_-_{end}_的__{total}_数据源", + "dataSources_noDataSourcesFound": "该工作区未发现数据源", + "dataSources_managedSuccess": "_{name}_现已托管", + "dataSources_unmanagedSuccess": "_{name}_现在处于非托管状态", + "dataSources_managedError": "更改 {name} 的托管状态失败", + "queries_title": "查询", + "queries_subtitle": "管理工作区 API 查询", + "queries_refresh": "刷新", + "queries_errorLoadingQueries": "加载查询出错", + "queries_configurationIssue": "配置问题", + "queries_missingConfiguration": "缺少所需配置:应用程序接口密钥或应用程序接口服务 URL", + "queries_totalQueries": "查询总数", + "queries_managed": "托管", + "queries_unmanaged": "无人管理", + "queries_query": "查询", + "queries_creator": "创作者", + "queries_status": "现状", + "queries_deploy": "部署", + "queries_audit": "审计", + "queries_queryMustBeManagedToDeploy": "在部署查询之前必须对其进行管理", + "queries_deployThisQuery": "将此查询部署到另一个环境", + "queries_viewAuditLogs": "查看审计日志", + "queries_searchQueries": "按名称或 ID 搜索查询", + "queries_showAll": "显示全部", + "queries_managedOnly": "仅管理", + "queries_showingResults": "显示 {total} 查询的 {count}", + "queries_paginationTotal": "{total}的_{start}_-{end}_查询", + "queries_noQueriesFound": "在此工作区未发现查询", + "queries_managedSuccess": "_{name}_现已托管", + "queries_unmanagedSuccess": "_{name}_现在处于非托管状态", + "queries_managedError": "更改 {name} 的托管状态失败", + "deployModal_deployTitle": "部署{singularLabel}:", + "deployModal_loadingEnvironments": "加载环境...", + "deployModal_sourceEnvironment": "来源 环境", + "deployModal_targetEnvironment": "目标环境", + "deployModal_selectTargetEnvironment": "选择目标环境", + "deployModal_selectTargetEnvironmentValidation": "请选择目标环境", + "deployModal_confirmed": "已确认", + "deployModal_cancel": "取消", + "deployModal_deploy": "部署", + "deployModal_targetEnvironmentNotFound": "未找到目标环境", + "deployModal_confirmCredentialOverwrite": "请在部署前确认证书覆盖", + "deployModal_deploySuccess": "成功将 {name} 部署到目标环境中", + "deployModal_deployFailed": "部署{singularLabel}失败", + "deployModal_selectFieldValidation": "请选择 {label}", + "deployModal_selectFieldPlaceholder": "选择 {label}", + "deployModal_inputFieldValidation": "请输入{label}__。", + "deployModal_inputFieldPlaceholder": "输入 {label}", + "contactLowcoder_title": "联系 Lowcoder 团队", + "contactLowcoder_environmentLabel": "环境", + "contactLowcoder_environmentIdLabel": "环境 ID:", + "contactLowcoder_deploymentIdLabel": "部署编号:", + "contactLowcoder_loading": "正在加载...", + "contactLowcoder_notAvailable": "不详", + "contactLowcoder_unnamedEnvironment": "未命名环境", + "contactLowcoder_fetchingDeploymentInfo": "获取部署信息...", + "contactLowcoder_unableToLoadContactForm": "无法加载联系表单", + "contactLowcoder_apiConfigurationError": "未配置环境 API 服务 URL 或 API 密钥", + "contactLowcoder_failedToFetchDeploymentId": "获取部署 ID 失败", + "contactLowcoder_ensureProperConfiguration": "请确保环境配置正确,以便联系支持人员。", + "credentialConfirmations_firstConfirmation_title": "重写凭证警告", + "credentialConfirmations_firstConfirmation_message": "此操作将覆盖目标环境中的现有凭证。", + "credentialConfirmations_firstConfirmation_description": "这是一项严重的操作,可能会影响其他应用程序和用户。", + "credentialConfirmations_firstConfirmation_question": "你确定要继续吗?", + "credentialConfirmations_firstConfirmation_continueButton": "继续", + "credentialConfirmations_firstConfirmation_cancelButton": "取消", + "credentialConfirmations_secondConfirmation_title": "需要最终确认", + "credentialConfirmations_secondConfirmation_message": "最后警告:证书重写", + "credentialConfirmations_secondConfirmation_description": "您将覆盖目标环境中的凭证。此操作无法撤销,并可能破坏现有集成。", + "credentialConfirmations_secondConfirmation_confirmOnceMore": "请再确认一次。", + "credentialConfirmations_secondConfirmation_finalQuestion": "您确定要覆盖证书吗?", + "credentialConfirmations_secondConfirmation_confirmButton": "是,重写证书", + "credentialConfirmations_secondConfirmation_cancelButton": "取消", + "config_singularLabels_app": "应用程序", + "config_singularLabels_dataSource": "数据来源", + "config_singularLabels_query": "查询", + "config_singularLabels_workspace": "工作空间", + "config_fields_updateDependenciesIfNeeded": "必要时更新依赖项", + "config_fields_publishOnTarget": "按目标出版", + "config_fields_publicToAll": "公众对所有人", + "config_fields_publicToMarketplace": "公众到市场", + "config_fields_overwriteCredentials": "重写证书", + "services_environments_missingEnvironmentId": "缺少环境 ID", + "services_environments_failedToUpdateEnvironment": "更新环境失败", + "services_environments_environmentCreatedSuccessfully": "成功创建环境", + "services_environments_failedToCreateEnvironment": "创建环境失败", + "services_environments_failedToFetchEnvironments": "获取环境失败", + "services_environments_failedToFetchEnvironment": "获取环境失败", + "services_environments_environmentIdRequired": "需要环境 ID", + "services_environments_apiKeyRequiredForWorkspaces": "获取工作区需要 API 密钥", + "services_environments_apiServiceUrlRequiredForWorkspaces": "获取工作区需要 API 服务 URL", + "services_environments_failedToFetchWorkspaces": "获取工作区失败", + "services_environments_apiKeyRequiredForUserGroups": "获取用户组需要 API 密钥", + "services_environments_apiServiceUrlRequiredForUserGroups": "获取用户组需要 API 服务 URL", + "services_environments_failedToFetchUserGroups": "获取用户组失败", + "services_environments_workspaceIdRequired": "需要工作区 ID", + "services_environments_apiKeyRequiredForApps": "获取应用程序需要 API 密钥", + "services_environments_apiServiceUrlRequiredForApps": "获取应用程序需要 API 服务 URL", + "services_environments_failedToFetchWorkspaceApps": "获取工作区应用程序失败", + "services_environments_apiKeyRequiredForDataSources": "获取数据源需要 API 密钥", + "services_environments_apiServiceUrlRequiredForDataSources": "获取数据源需要 API 服务 URL", + "services_environments_failedToFetchWorkspaceDataSources": "获取工作区数据源失败", + "services_environments_apiKeyRequiredForQueries": "获取查询需要 API 密钥", + "services_environments_apiServiceUrlRequiredForQueries": "获取查询需要 API 服务 URL", + "services_environments_failedToFetchWorkspaceQueries": "获取工作区查询失败", + "services_environments_apiServiceUrlNotConfigured": "未配置 API 服务 URL", + "services_environments_licenseCheckFailed": "许可证检查失败", + "services_environments_apiKeyRequiredForDeploymentId": "获取部署 ID 需要 API 密钥", + "services_environments_failedToFetchDeploymentId": "获取部署 ID 失败", + "services_enterprise_missingEnvironmentId": "缺少环境 ID", + "services_enterprise_failedToFetchManagedWorkspaces": "获取托管工作区失败", + "services_enterprise_missingRequiredParamsToConnectOrg": "缺少连接工作区所需的参数", + "services_enterprise_failedToConnectOrg": "连接工作区失败", + "services_enterprise_missingOrgGidToUnconnectWorkspace": "缺少工作区 GID,无法连接工作区", + "services_enterprise_failedToUnconnectOrg": "取消连接工作区失败", + "services_enterprise_failedToConnectApp": "连接应用程序失败", + "services_enterprise_failedToUnconnectApp": "取消连接应用程序失败", + "services_enterprise_failedToFetchDataSources": "获取数据源失败", + "services_enterprise_failedToDeployDataSource": "部署数据源失败", + "services_enterprise_failedToDisconnectManagedDataSource": "断开受管数据源连接失败", + "services_enterprise_environmentIdRequired": "需要环境 ID", + "services_enterprise_failedToFetchQueries": "获取查询失败", + "services_enterprise_environmentIdAndQueryGidRequired": "需要环境 ID 和查询 GID", + "services_enterprise_failedToDeployQuery": "部署查询失败", + "services_enterprise_queryGidRequired": "需要查询 GID", + "services_enterprise_failedToDisconnectQuery": "断开查询失败", + "services_apps_failedToFetchApps": "获取应用程序失败", + "services_apps_failedToDeployApp": "部署应用程序失败", + "services_datasources_workspaceIdRequired": "需要工作区 ID", + "services_datasources_apiKeyRequiredToFetchDataSources": "获取数据源需要 API 密钥", + "services_datasources_apiServiceUrlRequiredToFetchDataSources": "获取数据源需要 API 服务 URL", + "services_datasources_failedToFetchDataSources": "获取数据源失败", + "services_datasources_failedToDeployDataSource": "部署数据源失败", + "services_workspace_failedToFetchWorkspaces": "获取工作区失败", + "services_workspace_failedToDeployWorkspace": "部署工作区失败", + "services_managedObjects_missingRequiredParameters": "缺少所需参数", + "services_managedObjects_failedToCheckManagedStatus": "检查托管状态失败", + "services_managedObjects_failedToSetAsManaged": "将 {{objType}} 设为托管失败", + "services_managedObjects_failedToRemoveFromManaged": "从托管中删除 {{objType}} 失败", + "services_managedObjects_missingEnvironmentId": "缺少环境 ID", + "services_managedObjects_failedToFetchManagedObjects": "获取托管对象失败", + "services_managedObjects_failedToFetchManagedObject": "获取托管对象失败", + "services_managedObjects_managedObjectNotFound": "未找到 objGid 的托管对象:___placeholder0___}", + "services_license_apiServiceUrlRequired": "需要 API 服务 URL", + "services_license_licenseInformationUnavailable": "许可证信息不可用", + "services_license_licenseCheckTookTooLong": "执照检查时间过长", + "services_license_licenseServiceNotAvailable": "许可证服务不可用", + "services_license_authenticationRequired": "需要验证 - 请检查 API 密钥", + "services_license_licenseServiceTemporarilyUnavailable": "许可证服务暂时不可用", + "services_license_remainingAPICalls": "剩余_{{remaining}_}(_{{used}_}/_{{total}_}已用,_{{percentage}_}%)。", + }, + "subscription": { + ...en.subscription, + + "details": "订阅详情", + "productDetails": "产品详情", + "productName": "产品名称", + "productDescription": "产品说明", + "productPrice": "产品价格", + "subscriptionDetails": "订阅详情", + "status": "现状", + "startDate": "开始日期", + "currentPeriodEnd": "本期末", + "customerId": "客户 ID", + "subscriptionItems": "订阅项目", + "itemId": "项目编号", + "plan": "计划", + "quantity": "数量", + "product": "产品", + "invoices": "发票", + "invoiceNumber": "发票号码", + "date": "日期", + "amount": "金额", + "link": "链接到", + "viewInvoice": "查看发票", + "downloadPDF": "下载 PDF", + "billingReason": "计费原因", + "subscriptionCycle": "每月订阅", + "customer": "客户", + "links": "链接", + "paid": "已付款", + "unpaid": "未支付", + "noInvoices": "无发票", + "costVolumeDevelopment": "成本/数量开发", + "noUsageRecords": "无使用记录", + "itemDescription": "项目说明", + "periodStart": "期间开始", + "periodEnd": "期末", + "billingReason.subscription_cycle": "订阅周期", + "billingReason.subscription_create": "创建订阅", + "billingReason.manual": "人工账单", + "billingReason.upcoming": "近期账单", + "billingReason.subscription_threshold": "订阅阈值", + "billingReason.subscription_update": "订阅更新", + "backToSubscriptions": "返回订阅", + "manageSubscription": "管理您的订阅", + "subscriptionHelp": "订阅帮助", + "subscriptionHelpDescription": "如有任何疑问,请联系我们。service@lowcoder.cloud", + "success": "付款和订阅成功", + "successTitle": "感谢您加入 Lowcoder 大家庭!", + "successThankYou": "我们很高兴您的加入!您对 Lowcoder 的信任对我们意义重大,我们致力于从第一天起就为您提供卓越的体验。\n\n在 Lowcoder,您不仅是我们的客户,还是推动创新和发展的社区的一员。我们的使命是帮助您轻松实现目标,无论是快速解决挑战、构建创新解决方案,还是随时为您提供支持。\n\n以下是您可以期待的:\n\n- 一流的支持:我们的团队随时准备为您提供帮助。\n- 不断创新:我们不断改进,为您提供最好的工具和功能。\n- 成功的合作伙伴关系:您的成功是我们的首要任务。\n\n感谢您激励我们不断超越自我,追求卓越。我们迫不及待地想看到我们共同打造的成果。\n\n欢迎加入我们!让我们一起创造非凡。", + "successLowcoderTeam": "Lowcoder 团队", + }, + "subscriptionError": { + ...en.subscriptionError, + + "fetchProductDetails": "获取产品详细信息时出错。", + "fetchSubscriptionDetails": "获取订阅详细信息时出错。", + "fetchInvoices": "获取发票时出错。", + }, + "auditLog": { + ...en.auditLog, + + "title": "审计日志详情", + "geoLocation": "地理位置", + "browserData": "浏览器/系统元数据", + "browser": "浏览器", + "OS": "操作系统", + "device": "设备", + "deviceType": "设备类型", + "engine": "发动机", + "webview": "网络视图", + "eventDetail": "活动详情", + }, + "memberSettings": { + ...en.memberSettings, + + "admin": "管理员", + "superAdmin": "超级管理员", + "adminGroupRoleInfo": "管理员可以管理群组成员和资源", + "adminOrgRoleInfo": "拥有所有资源并可以管理群组.", + "member": "成员", + "memberGroupRoleInfo": "成员可以查看群组成员", + "memberOrgRoleInfo": "仅能使用或访问他们有权限的资源.", + "title": "成员", + "createGroup": "创建分组", + "newGroupPrefix": "新分组 ", + "allMembers": "所有成员", + "deleteModalTitle": "删除该分组", + "deleteModalContent": "删除的分组将无法恢复.确定要删除该分组吗?", + "addMember": "添加成员", + "nameColumn": "用户名", + "joinTimeColumn": "加入时间", + "actionColumn": "操作", + "roleColumn": "角色", + "exitGroup": "退出分组", + "moveOutGroup": "从分组中移除", + "inviteUser": "邀请成员", + "exitOrg": "离开", + "exitOrgDesc": "确定要离开该工作空间吗?", + "moveOutOrg": "移除", + "moveOutOrgDescSaasMode": "确定要将用户 {name} 从该工作空间中移除吗?", + "moveOutOrgDesc": "确定要移除用户 {name} 吗?此操作无法恢复.", + "devGroupTip": "开发者组的成员具有创建应用程序和数据源的权限.", + "lastAdminQuit": "最后一个管理员不能退出.", + "organizationNotExist": "当前工作空间不存在", + "inviteUserHelp": "您可以复制邀请链接发送给所想邀请的用户", + "inviteUserLabel": "邀请链接:", + "inviteCopyLink": "复制链接", + "inviteText": "{userName} 邀请您加入工作空间 \"{organization}\",点击链接加入:{inviteLink}", + "inviteByEmailHelp": "您可以输入一个或多个电子邮件地址来发送邀请链接", + "inviteByEmailLabel": "输入电子邮件:", + "inviteByEmailButton": "发送邀请函", + "inviteByEmailSuccess": "邀请函已成功发送!", + "inviteByEmailError": "发送邀请时出了问题。请重试。", + "noValidEmails": "未找到有效电子邮件", + "groupName": "群组名称", + "createTime": "创建时间", + "manageBtn": "管理", + "userDetail": "详细信息", + "syncDeleteTip": "该分组已从通讯录源中删除", + "syncGroupTip": "该分组是一个通讯录同步分组,无法进行编辑", + }, + "orgSettings": { + ...en.orgSettings, + + "newOrg": "新工作空间", + "title": "工作空间", + "createOrg": "创建工作空间", + "deleteModalTitle": "确定要删除该工作空间吗?", + "deleteModalContent": "您即将删除该工作空间 {permanentlyDelete}.一旦删除,工作空间将{notRestored}.", + "permanentlyDelete": "永久删除", + "notRestored": "无法恢复", + "deleteModalLabel": "请输入工作空间名称{name}以确认操作:", + "deleteModalTip": "请输入工作空间名称", + "deleteModalErr": "工作空间名称不正确", + "deleteModalBtn": "删除", + "editOrgTitle": "编辑工作空间信息", + "orgNameLabel": "工作空间名称:", + "orgNameCheckMsg": "工作空间名称不能为空", + "orgLogo": "工作空间徽标:", + "logoModify": "修改图片", + "inviteSuccessMessage": "成功加入工作空间", + "inviteFailMessage": "加入工作空间失败", + "uploadErrorMessage": "上传错误", + "orgName": "工作空间名称", + }, + "freeLimit": "免费试用", + "tabbedContainer": { + ...en.tabbedContainer, + + "switchTab": "切换选项卡", + "switchTabDesc": "切换选项卡时触发", + "tab": "选项卡", + "atLeastOneTabError": "选项卡容器至少保留一个选项卡", + "selectedTabKeyDesc": "当前选中的选项卡", + "iconPosition": "图标位置", + "placement": "位置", + "showTabs": "显示选项卡", + "gutter": "间距", + "gutterTooltip": "标签页之间的距离,单位为 px", + "tabsCentered": "居中标签", + "destroyInactiveTab": "销毁不活动的 TabPane", + }, + "formComp": { + ...en.formComp, + + "containerPlaceholder": "从右侧窗格拖动组件或", + "openDialogButton": "从数据生成表单", + "resetAfterSubmit": "成功提交后重置", + "initialData": "初始数据", + "disableSubmit": "禁用提交", + "success": "表单生成成功", + "selectCompType": "选择组件类型", + "dataSource": "数据源:", + "invalidFormMessage": "自定义无效表单信息", + "selectSource": "选择数据源", + "table": "表格:", + "selectTable": "选择表格", + "columnName": "列名", + "dataType": "数据类型", + "compType": "组件类型", + "required": "必填", + "generateForm": "生成表单", + "compSelectionError": "未配置的列类型", + "compTypeNameError": "无法获取组件类型名称", + "noDataSourceSelected": "未选择数据源", + "noTableSelected": "未选择表格", + "noColumn": "没有这一列", + "noColumnSelected": "未选择列", + "noDataSourceFound": "未找到支持的数据源,创建新的数据源", + "noTableFound": "在此数据源中未找到表格,请选择其他数据源", + "noColumnFound": "在此表格中未找到支持的列,请选取其他表格", + "formTitle": "表单标题", + "name": "名称", + "nameTooltip": "表单数据中的属性名称,如果留空默认为组件名称", + "notSupportMethod": "不支持的方法:", + "notValidForm": "表单无效", + "resetDesc": "将表单数据重置为默认值", + "clearDesc": "清除表单数据", + "setDataDesc": "设置表单数据", + "valuesLengthError": "参数数量错误", + "valueTypeError": "参数类型错误", + "dataDesc": "当前表单数据", + "loadingDesc": "表单是否正在加载中?", + }, + "modalComp": { + ...en.modalComp, + + "open": "开放", + "openDesc": "打开模态对话框时触发", + "close": "关闭", + "closeDesc": "对话框关闭时触发", + "openModalDesc": "打开对话框", + "closeModalDesc": "关闭对话框", + "visibleDesc": "是否可见?如果为true,当前对话框将弹出", + "title": "抽屉标题", + "titleAlign": "标题调整", + "modalHeight": "对话框高度", + "modalHeightTooltip": "数字,例如:222", + "modalWidth": "对话框宽度", + "modalWidthTooltip": "数字或百分比,例如:520,60%", + }, + "listView": { + ...en.listView, + + "noOfRows": "行数", + "noOfRowsTooltip": "列表中的行数 - 如果您需要呈现查询结果,通常将其设置为变量(例如,'{{query1.data.length}}').", + "noOfColumns": "列数", + "itemIndexName": "项目索引名称", + "itemIndexNameDesc": "指向项目索引的变量名称,默认为{default}", + "itemDataName": "项目数据名称", + "itemDataNameDesc": "指向项目数据对象的变量名称,默认为{default}", + "itemsDesc": "在列表中公开组件的数据", + "dataDesc": "当前列表中使用的原始数据", + "dataTooltip": "如果将其计算为数字,此字段将被视为行数,并且数据将被视为空.", + "enableSorting": "允许排序", + }, + "navigation": { + ...en.navigation, + + "addText": "添加子菜单项", + "logoURL": "Logo链接", + "horizontalAlignment": "水平对齐", + "logoURLDesc": "Logo链接", + "itemsDesc": "导航菜单项", + }, + "droppadbleMenuItem": { + ...en.droppadbleMenuItem, + + "subMenu": "子菜单 {number}", + }, + "navItemComp": { + ...en.navItemComp, + + "active": "活动的", + }, + "iframe": { + ...en.iframe, + + "URLDesc": "iframe源链接", + "allowDownload": "下载", + "allowSubmitForm": "提交表单", + "allowMicrophone": "麦克风", + "allowCamera": "摄像头", + "allowPopup": "弹出窗口", + }, + "switchComp": { + ...en.switchComp, + + "defaultValue": "默认布尔值", + "open": "打开", + "close": "关闭", + "openDesc": "切换打开时触发", + "closeDesc": "切换关闭时触发", + "valueDesc": "当前开关状态", + }, + "signature": { + ...en.signature, + + "tips": "提示", + "signHere": "在此处签名", + "showUndo": "显示撤消", + "showClear": "显示清除", + }, + "localStorageComp": { + ...en.localStorageComp, + + "valueDesc": "当前存储的所有数据项", + "setItemDesc": "添加一个数据项", + "removeItemDesc": "移除一个数据项", + "clearItemDesc": "清除所有数据项", + }, + "utilsComp": { + ...en.utilsComp, + + "openUrl": "打开链接", + "openApp": "打开应用", + "copyToClipboard": "复制到剪贴板", + "downloadFile": "下载文件", + "logoutUser": "注销用户", + "resetPassword": "重置密码", + }, + "messageComp": { + ...en.messageComp, + + "info": "发送通知", + "loading": "发送加载通知", + "success": "发送成功通知", + "warn": "发送警告通知", + "error": "发送错误通知", + }, + "toastComp": { + ...en.toastComp, + + "destroy": "关闭通知", + "info": "发送通知", + "loading": "发送加载通知", + "success": "发送成功通知", + "warn": "发送警告通知", + "error": "发送错误通知", + }, + "themeComp": { + ...en.themeComp, + + "switchTo": "切换主题", + }, + "transformer": { + ...en.transformer, + + "preview": "预览", + "docLink": "关于转换器", + "previewSuccess": "预览成功", + "previewFail": "预览失败", + "deleteMessage": "删除转换器成功.您可以使用 {undoKey} 进行撤销.", + "documentationText": "转换器专为数据转换和重复使用多行 JavaScript 代码而设计。使用转换器可将来自查询或组件的数据调整为本地应用程序所需的数据。与 JavaScript 查询不同,转换器旨在执行只读操作,这意味着您不能在转换器内触发查询或更新临时状态。", + }, + "temporaryState": { + ...en.temporaryState, + + "value": "初始值", + "valueTooltip": "存储在临时状态中的初始值可以是任何有效的 JSON 值.", + "docLink": "关于临时状态", + "pathTypeError": "路径必须是字符串或值数组", + "unStructuredError": "无结构数据 {prev} 不能被 {path} 更新", + "valueDesc": "临时状态值", + "deleteMessage": "临时状态已成功删除.您可以使用 {undoKey} 进行撤销.", + "documentationText": "临时状态是一种强大的功能,用于管理复杂的变量,动态更新应用程序中组件的状态。这些状态可作为数据的中间或临时存储,这些数据会随着用户交互或其他进程的变化而变化。", + }, + "dataResponder": { + ...en.dataResponder, + + "data": "数据", + "dataDesc": "当前数据响应器的数据", + "dataTooltip": "当此数据发生变化时,将触发后续操作.", + "docLink": "关于数据响应器", + "deleteMessage": "数据响应器已成功删除.您可以使用 {undoKey} 进行撤销.", + "documentationText": "在开发应用程序时,您可以为组件分配事件,以监控特定数据的变化。例如,表格组件可能会有 \"行选择变化\"、\"过滤器变化\"、\"排序变化 \"和 \"页面变化 \"等事件,以跟踪 selectedRow 属性的变化。但是,对于临时状态、转换器或查询结果的变化,如果没有标准事件,则需要使用数据响应器。数据响应器能让你检测到任何数据修改并做出反应。", + }, + "theme": { + ...en.theme, + + "title": "主题", + "createTheme": "创建主题", + "themeName": "主题名称:", + "themeNamePlaceholder": "请输入主题名称", + "defaultThemeTip": "默认主题:", + "createdThemeTip": "您创建的主题:", + "option": "选项{index}", + "input": "输入", + "confirm": "确定", + "emptyTheme": "没有可用的主题", + "click": "", + "toCreate": "", + "nameColumn": "名称", + "defaultTip": "默认", + "updateTimeColumn": "更新时间", + "edit": "编辑", + "cancelDefaultTheme": "取消默认主题", + "setDefaultTheme": "设为默认主题", + "copyTheme": "复制主题", + "setSuccessMsg": "设置成功", + "cancelSuccessMsg": "取消设置成功", + "deleteSuccessMsg": "删除成功", + "checkDuplicateNames": "主题名称已存在,请重新输入", + "copySuffix": " 副本", + "saveSuccessMsg": "保存成功", + "leaveTipTitle": "提示", + "leaveTipContent": "您还没有保存,确认离开吗?", + "leaveTipOkText": "离开", + "goList": "返回列表", + "saveBtn": "保存", + "mainColor": "主要颜色", + "text": "文本颜色", + "layout": "布局设置", + "fonts": "字体设置", + "components": "组件模板", + "charts": "电子图表定义", + "defaultTheme": "默认", + "yellow": "黄色", + "green": "绿色", + "previewTitle": "主题预览\n使用您的主题颜色的示例组件", + "dateColumn": "日期", + "emailColumn": "电子邮件", + "phoneColumn": "电话", + "subTitle": "标题", + "linkLabel": "链接", + "linkUrl": "app.lowcoder.cloud", + "progressLabel": "进度", + "sliderLabel": "滑块", + "radioLabel": "单选按钮", + "checkboxLabel": "复选框", + "buttonLabel": "按钮", + "switch": "开关", + "previewDate": "2022/10/16", + "previewEmail1": "ted.com", + "previewEmail2": "skype.com", + "previewEmail3": "imgur.com", + "previewEmail4": "balloon.com", + "previewPhone1": "+63-317-333-0093", + "previewPhone2": "+30-668-580-6521", + "previewPhone3": "+86-369-925-2071", + "previewPhone4": "+7-883-227-8093", + "chartPreviewTitle": "图表样式预览", + "chartSpending": "支出", + "chartBudget": "预算", + "chartAdmin": "管理", + "chartFinance": "财务", + "chartSales": "销售", + "chartFunnel": "漏斗图", + "chartShow": "展示", + "chartClick": "点击", + "chartVisit": "访问", + "chartQuery": "查询", + "chartBuy": "购买", + "canvas": "画布设置", + }, + "themeDetail": { + ...en.themeDetail, + + "primary": "品牌颜色", + "primaryDesc": "大多数组件使用的默认主颜色", + "textDark": "深色文本颜色", + "textDarkDesc": "当背景颜色较浅时使用", + "textLight": "浅色文本颜色", + "textLightDesc": "当背景颜色较深时使用", + "canvas": "画布颜色", + "canvasDesc": "应用的默认背景颜色", + "primarySurface": "容器颜色", + "primarySurfaceDesc": "组件(如表格)的默认背景颜色", + "borders": "边框样式", + "spacing": "间距样式", + "font": "字体样式", + "fonts": "字体", + "borderRadius": "边框圆角", + "borderRadiusDesc": "大多数组件使用的默认边框圆角", + "borderColor": "边框颜色", + "borderColorDesc": "大多数组件使用的默认边框颜色", + "borderWidth": "边框宽度", + "borderWidthDesc": "大多数组件使用的默认边框宽度", + "borderStyle": "边框样式", + "borderStyleDesc": "大多数组件使用的默认边框样式", + "fontFamily": "字体系列", + "fontFamilyDesc": "大多数组件使用的默认字体系列", + "chart": "图表样式", + "chartDesc": "在此处放置 eCharts 的主题 JSON,以定义所有详细信息中图表的样式。", + "echartsJson": "您可以使用主题 JSON 生成器。将生成器中的 JSON 复制并粘贴到这里。", + "margin": "外边距", + "marginDesc": "大多数组件通常使用的默认外边距", + "padding": "内边距", + "paddingDesc": "大多数组件通常使用的默认内边距", + "containerHeaderPadding": "标题内边距", + "containerheaderpaddingDesc": "大多数组件通常使用的默认标题内边距", + "gridColumns": "网格列", + "gridColumnsDesc": "大多数容器通常使用的默认列数", + "loadingIndicators": "加载指示器", + "showComponentLoadingIndicators": "当组件加载时显示加载指示器", + "showDataLoadingIndicators": "在数据加载期间显示指示器", + "dataLoadingIndicator": "数据加载指示器", + "background": "背景样式", + "gridSettings": "网格设置", + "gridRowHeight": "网格行高", + "gridRowHeightDesc": "网格中每行的高度", + "gridRowCount": "网格行数", + "gridRowCountDesc": "网格中的最大行数", + "gridPaddingX": "水平内边距", + "gridPaddingXDesc": "画布的水平内边距", + "gridPaddingY": "垂直内边距", + "gridPaddingYDesc": "画布的垂直内边距", + "gridBgImage": "背景图片", + "gridBgImageDesc": "画布的背景图片", + "gridBgImageRepeat": "背景图片重复", + "gridBgImageRepeatDesc": "画布背景图片的重复方式", + "gridBgImageSize": "背景图片大小", + "gridBgImageSizeDesc": "画布背景图片的大小", + "gridBgImagePosition": "背景图片位置", + "gridBgImagePositionDesc": "画布背景图片的位置", + "gridBgImageOrigin": "背景图片起点", + "gridBgImageOriginDesc": "画布背景图片的起点", + }, + "pluginSetting": { + ...en.pluginSetting, + + "title": "插件", + "npmPluginTitle": "npm 插件", + "npmPluginDesc": "为当前工作空间中的所有应用程序设置 npm 插件.", + "npmPluginEmpty": "尚未添加 npm 插件.", + "npmPluginAddButton": "添加 npm 插件", + "saveSuccess": "保存成功", + }, + "advanced": { + ...en.advanced, + + "title": "高级", + "defaultHomeTitle": "默认首页", + "defaultHomeHelp": "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", + "defaultHomePlaceholder": "选择默认首页", + "saveBtn": "保存", + "preloadJSTitle": "预加载 JavaScript", + "preloadJSHelp": "为当前工作空间中的所有应用程序设置预加载的 JavaScript 代码.", + "preloadCSSTitle": "预加载 CSS", + "preloadCSSHelp": "为当前工作空间中的所有应用程序设置预加载的 CSS 代码.", + "preloadCSSApply": "应用到工作空间的首页", + "preloadLibsTitle": "JavaScript 库", + "preloadLibsHelp": "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", + "preloadLibsEmpty": "尚未添加 JavaScript 库", + "preloadLibsAddBtn": "添加库", + "saveSuccess": "保存成功", + "AuthOrgTitle": "工作区欢迎屏幕", + "AuthOrgDescrition": "用户登录当前工作区的 URL。", + "APIConsumption": "API 消耗", + "APIConsumptionDescription": "API 消耗是指当前工作空间中所有应用程序的 API 消耗情况,包括调用次数和调用时间.", + "overallAPIConsumption": "总体 API 消耗", + "lastMonthAPIConsumption": "上个月 API 消耗", + "npmRegistryTitle": "自定义 NPM 注册表", + "npmRegistryHelp": "设置自定义 NPM 注册表,以便从私有 NPM 注册表中获取插件。", + "showHeaderInPublicApps": "在公共视图中显示标题", + "showHeaderInPublicAppsHelp": "设置所有应用程序的标题在公共视图中的可见性", + }, + "branding": { + ...en.branding, + + "title": "品牌设置", + "general": "常规设置", + "selectWorkspace": "选择工作区", + "brandingName": "品牌名称", + "brandingNamePlaceholder": "输入品牌名称", + "brandingDescription": "品牌描述", + "brandingDescriptionPlaceholder": "输入品牌描述", + "logoSection": "标志", + "logo": "标志", + "logoHelp": "上传公司标志,支持 SVG 或 PNG 格式。", + "logoUrlHelp": "为徽标提供有效的图片链接。", + "logoUrlPlaceholder": "提供商徽标图像网址", + "squareLogo": "方形标志", + "squareLogoHelp": "上传方形版本的标志,支持 SVG 或 PNG 格式。", + "squareLogoUrlHelp": "提供方形徽标的有效图片链接地址。", + "squareLogoUrlPlaceholder": "提供方形徽标的网址。", + "colorFontSection": "颜色和字体", + "mainBrandingColor": "主品牌颜色", + "mainBrandingColorHelp": "选择品牌的主要颜色。", + "editorHeaderColor": "编辑器头部颜色", + "editorHeaderColorHelp": "选择编辑器头部的颜色。", + "adminSidebarColor": "管理员侧边栏颜色", + "adminSidebarColorHelp": "选择管理员侧边栏的颜色。", + "adminSidebarFontColor": "管理侧边栏字体颜色", + "adminSidebarFontColorHelp": "为管理员侧边栏选择字体颜色。", + "adminSidebarActiveBgColor": "管理侧边栏所选项目的背景颜色", + "adminSidebarActiveBgColorHelp": "为管理员侧边栏选择所选项目的背景颜色。", + "adminSidebarActiveFontColor": "管理侧边栏所选项目的字体颜色", + "adminSidebarActiveFontColorHelp": "为管理员侧边栏选择所选项目的字体颜色。", + "editorSidebarColor": "编辑器侧边栏颜色", + "editorSidebarColorHelp": "选择编辑器侧边栏的颜色。", + "editorSidebarFontColor": "编辑器侧边栏字体颜色", + "editorSidebarFontColorHelp": "为编辑器侧边栏选择字体颜色。", + "editorSidebarActiveBgColor": "编辑器侧边栏所选项目的背景颜色", + "editorSidebarActiveBgColorHelp": "为编辑器侧边栏选择所选项目的背景颜色。", + "editorSidebarActiveFontColor": "编辑器侧边栏所选项目的字体颜色", + "editorSidebarActiveFontColorHelp": "为编辑器侧边栏选择所选项目的字体颜色。", + "font": "字体", + "fontHelp": "从 Google Fonts 中选择您的应用字体。", + "textSection": "文本和页面", + "errorPage": "错误页面文本", + "errorPageHelp": "输入显示在错误页面上的文本。", + "signUpPage": "注册页面文本", + "signUpPageHelp": "输入显示在注册页面上的文本。", + "loggedOutPage": "注销页面文本", + "loggedOutPageHelp": "输入显示在注销页面上的文本。", + "standardDescription": "标准描述", + "standardDescriptionHelp": "输入 SEO 元信息的标准描述。", + "standardTitle": "标准标题", + "standardTitleHelp": "输入 SEO 元信息的标准标题。", + "showDocumentation": "显示文档", + "submitIssue": "允许提交问题", + "whatsNew": "启用“新功能”", + "saveButton": "保存设置", + "errorPageImage": "上传一个用于错误页面的SVG或PNG格式的图片。", + "errorPageImageUrl": "错误页面的图像 URL", + "errorPageImageUrlPlaceholder": "错误页面的提供程序图像网址", + "errorPageImageUrlHelp": "提供一个有效的图片 url 以显示在错误页面上。", + "signUpPageImage": "上传一个用于注册页面的SVG或PNG格式的图片。", + "signUpPageImageUrl": "注册页面的图片 URL", + "signUpPageImageUrlPlaceholder": "为注册页面提供图片网址", + "signUpPageImageUrlHelp": "提供有效的图片网址,以便在注册页面上显示。", + "loggedOutPageImage": "上传一个用于注销页面的SVG或PNG格式的图片。", + "showDocumentationSection": "文件链接设置", + "showWhatsNewSection": "新功能 链接设置", + "documentationLink": "文档链接", + "documentationLinkPlaceholder": "输入您的文档链接...", + "documentationLinkHelp": "提供一个有效的 URL 用户可以访问查看文档。", + "whatsNewSection": "文档设置", + "whatsNewLink": "文档链接", + "whatsNewLinkPlaceholder": "输入您的文档链接...", + "whatsNewLinkHelp": "提供一个有效的 URL 用户可以访问查看最新消息。", + "deleteBranding": "删除品牌", + "deleteBrandingContent": "您确定要删除\"{orgName}\"品牌吗?", + "fetchBrandingError": "在获取品牌详情时出了问题。请重试。", + "upload": "上传", + }, + "networkMessage": { + ...en.networkMessage, + + "0": "无法连接到服务器,请检查您的网络", + "200": "请求成功", + "201": "请求成功,资源已创建", + "204": "无内容", + "400": "请求参数错误", + "401": "身份验证失败,请重新登录", + "403": "没有权限,请联系管理员进行授权", + "404": "请求资源不存在", + "500": "服务器忙碌,请稍后重试", + "timeout": "请求超时", + }, + "share": { + ...en.share, + + "title": "分享", + "viewer": "可查看", + "editor": "可编辑", + "owner": "拥有者", + "datasourceViewer": "可使用", + "datasourceOwner": "可管理", + }, + "debug": { + ...en.debug, + + "title": "标题", + "switch": "切换组件: ", + }, + "module": { + ...en.module, + + "folderNotEmpty": "文件夹不是空的", + "emptyText": "无数据", + "docLink": "了解更多有关模块的信息...", + "documentationText": "模块是完整的应用程序,可以包含在其他应用程序中并重复使用,其功能与单个组件无异。由于模块可以嵌入,因此需要能够与外部应用程序或网站进行交互。这四种设置有助于支持与模块的通信。", + "circularReference": "循环引用,当前模块/应用程序无法使用!", + "emptyTestInput": "当前模块没有输入可以测试", + "emptyTestMethod": "当前模块没有可测试的方法", + "name": "名称", + "input": "输入", + "params": "参数", + "emptyParams": "尚未添加参数", + "emptyInput": "尚未添加输入", + "emptyMethod": "尚未添加方法", + "emptyOutput": "尚未添加输出", + "data": "数据", + "string": "字符串", + "number": "数字", + "array": "数组", + "boolean": "布尔值", + "query": "查询", + "autoScaleCompHeight": "组件高度与容器自动调整", + "excuteMethod": "执行方法 {name}", + "method": "方法", + "action": "动作", + "output": "输出", + "nameExists": "名称 {name} 已存在", + "eventTriggered": "事件 {name} 被触发", + "globalPromptWhenEventTriggered": "当事件被触发时显示全局提示", + "emptyEventTest": "当前模块没有可测试的事件", + "emptyEvent": "尚未添加事件", + "event": "事件", + }, + "resultPanel": { + ...en.resultPanel, + + "returnFunction": "返回值为函数.", + "consume": "___placeholder0___", + "JSON": "显示JSON", + }, + "createAppButton": { + ...en.createAppButton, + + "creating": "创建中...", + "created": "创建{name}", + }, + "apiMessage": { + ...en.apiMessage, + + "authenticationFail": "用户身份验证失败,请重新登录", + "verifyAccount": "需要验证账户", + "functionNotSupported": "当前版本不支持此功能.请联系 Lowcoder 业务团队升级您的账户", + }, + "globalErrorMessage": { + ...en.globalErrorMessage, + + "createCompFail": "创建组件{comp}失败", + "notHandledError": "{method}方法未执行", + }, + "aggregation": { + ...en.aggregation, + + "navLayout": "导航栏布局", + "chooseApp": "选择应用", + "iconTooltip": "支持图片链接或Base64", + "hideWhenNoPermission": "未经授权的用户隐藏", + "queryParam": "URL链接查询参数", + "hashParam": "URL链接哈希参数", + "tabBar": "选项卡栏", + "emptyTabTooltip": "在右侧窗格上配置此页面", + }, + "appSetting": { + ...en.appSetting, + + "450": "450px(手机)", + "800": "800px(平板)", + "1440": "1440px(笔记本电脑)", + "1920": "1920px(宽屏)", + "3200": "3200px(超大屏幕)", + "title": "应用设置", + "autofill": "自动填充", + "userDefined": "自定义", + "default": "默认", + "tooltip": "设置后关闭弹出框", + "canvasMaxWidth": "最大画布宽度", + "userDefinedMaxWidth": "自定义最大宽度", + "inputUserDefinedPxValue": "请输入自定义像素值", + "maxWidthTip": "最大宽度应大于或等于350", + "themeSetting": "主题设置", + "themeSettingDefault": "默认", + "themeCreate": "创建主题", + "appTitle": "标题", + "appDescription": "描述", + "appCategory": "类别", + "showPublicHeader": "在公共视图中显示页眉", + "canvas": "画布设置", + "gridColumns": "网格列", + "gridRowHeight": "网格行高", + "gridRowCount": "网格行数", + "gridPaddingX": "帆布水平填充", + "gridPaddingY": "帆布垂直衬垫", + "gridBgImage": "背景图片", + "gridBgImageRepeat": "背景图像重复", + "gridBgImageSize": "背景图像大小", + "gridBgImagePosition": "背景图像位置", + "gridBgImageOrigin": "背景图片来源", + }, + "customShortcut": { + ...en.customShortcut, + + "title": "自定义快捷键", + "shortcut": "快捷键", + "action": "操作", + "empty": "无快捷键", + "placeholder": "按下快捷键", + "otherPlatform": "其他", + "space": "空格", + }, + "profile": { + ...en.profile, + + "orgSettings": "工作区设置", + "switchOrg": "切换工作区", + "joinedOrg": "我的工作区", + "createOrg": "创建工作区", + "logout": "退出登录", + "personalInfo": "个人信息", + "bindingSuccess": "{sourceName}绑定成功", + "uploadError": "上传出错", + "editProfilePicture": "修改", + "saveUserNameTooltip": "点击 Enter 保存新的用户名。如果您看到您的电子邮件,这意味着我们刚刚劫持了它作为用户名,您可以将其更改为更好的用户名。作为技术用户名的电子邮件将保持不变。", + "changeAvatarTooltip": "您可以上传 PNG 或 JPG 文件", + "nameCheck": "名称不能为空", + "name": "名称:", + "namePlaceholder": "请输入您的名称", + "toBind": "前往绑定", + "binding": "正在绑定", + "bindError": "参数错误,暂不支持绑定.", + "bindName": "绑定{name}", + "loginAfterBind": "绑定后,您可以使用{name}登录", + "bindEmail": "绑定邮箱:", + "email": "邮箱", + "emailCheck": "请输入有效的邮箱", + "emailPlaceholder": "请输入您的邮箱", + "submit": "提交", + "bindEmailSuccess": "邮箱绑定成功", + "passwordModifiedSuccess": "密码修改成功", + "passwordSetSuccess": "密码设置成功", + "oldPassword": "旧密码:", + "inputCurrentPassword": "请输入您的当前密码", + "newPassword": "新密码:", + "inputNewPassword": "请输入您的新密码", + "confirmNewPassword": "确认新密码:", + "inputNewPasswordAgain": "请再次输入您的新密码", + "password": "密码:", + "modifyPassword": "修改密码", + "setPassword": "设置密码", + "alreadySetPassword": "已设置密码", + "setPassPlaceholder": "您可以使用密码登录", + "setPassAfterBind": "账号绑定后,您可以设置密码", + "socialConnections": "社交连接", + "changeAvatar": "更改头像", + "about": "关于", + "userId": "用户身份", + "createdAt": "创建于", + "currentOrg": "当前组织", + "settings": "设置", + "uiLanguage": "用户界面语言", + "info": "信息", + "createdApps": "创建的应用程序", + "createdModules": "创建的模块", + "sharedApps": "与您共享的应用程序", + "sharedModules": "与您共享的模块", + "onMarketplace": "在市场上", + "howToPublish": "如何在 Marketplace 上发布", + "memberOfOrgs": "工作空间会员", + "apiKeys": "API 密钥", + "createApiKey": "创建 API 密钥", + "apiKeyInfo": "请务必复制您的新 API 密钥。您将无法再次看到它。", + "apiKeyName": "姓名", + "apiKeyDescription": "描述", + "apiKeyCopy": "点击 Api 密钥,获取剪贴板中的值", + "apiKey": "API密钥", + "deleteApiKey": "删除 API 密钥", + "deleteApiKeyContent": "您确定要删除此 API 密钥吗?", + "deleteApiKeyError": "出了些问题。请再试一次。", + }, + "shortcut": { + ...en.shortcut, + + "shortcutList": "键盘快捷键", + "click": "点击", + "global": "全局", + "toggleShortcutList": "切换键盘快捷键", + "editor": "编辑器", + "toggleLeftPanel": "切换左侧面板", + "toggleBottomPanel": "切换底部面板", + "toggleRightPanel": "切换右侧面板", + "toggleAllPanels": "切换所有面板", + "preview": "预览", + "undo": "撤销", + "redo": "重做", + "showGrid": "显示网格", + "component": "组件", + "multiSelect": "多选", + "selectAll": "全选", + "copy": "复制", + "cut": "剪切", + "paste": "粘贴", + "move": "移动", + "zoom": "调整大小", + "delete": "删除", + "deSelect": "取消选择", + "queryEditor": "查询编辑器", + "excuteQuery": "运行当前查询", + "editBox": "文本编辑器", + "formatting": "格式化", + "openInLeftPanel": "在左侧面板中打开", + }, + "help": { + ...en.help, + + "videoText": "概述", + "onBtnText": "确定", + "permissionDenyTitle": "💡 无法创建新的应用程序或数据源?", + "permissionDenyContent": "您没有权限创建应用程序和数据源.请联系管理员加入开发者组.", + "appName": "教程应用", + "chat": "与我们聊天", + "docs": "查看文档", + "editorTutorial": "编辑器教程", + "update": "有什么新功能?", + "version": "版本", + "versionWithColon": "版本:", + "submitIssue": "提交问题", + }, + "header": { + ...en.header, + + "nameCheckMessage": "名称不能为空", + "viewOnly": "只读模式", + "recoverAppSnapshotTitle": "恢复此版本?", + "recoverAppSnapshotContent": "将当前应用程序恢复到 {time} 创建的版本.", + "recoverAppSnapshotMessage": "恢复此版本", + "returnEdit": "返回编辑器", + "deploy": "发布", + "export": "导出为 JSON", + "editName": "编辑名称", + "duplicate": "复制{type}", + "snapshot": "历史", + "scriptsAndStyles": "脚本和样式", + "appSettings": "应用程序设置", + "preview": "预览", + "editError": "历史预览模式下,不支持任何操作.", + "clone": "克隆", + "editorMode_layout": "应用程序布局", + "editorMode_logic": "应用程序逻辑", + "editorMode_both": "两者", + "editorMode_layout_tooltip": "在右侧窗口中自定义组件的外观和布局。调整它的外观、样式和动画。", + "editorMode_logic_tooltip": "在右侧窗口中设置组件的工作和交互方式。管理其内容和交互行为。", + "AppEditingBlocked": "应用编辑已被阻止:", + "AppEditingBlockedHint": "在其他用户编辑此应用时,无法保存更改。", + "AppEditingBlockedMessage": "请稍候再检查应用的编辑状态。", + "AppEditingBlockedCheckStatus": "检查应用状态", + "AppEditingBlockedSomeone": "某人", + "AppEditingBlockedMessageSnipped": "正在编辑此应用", + }, + "userAuth": { + ...en.userAuth, + + "registerByEmail": "通过电子邮件注册", + "email": "电子邮件:", + "inputEmail": "请输入您的电子邮件", + "inputValidEmail": "请输入有效的电子邮件", + "forgotPassword": "忘记密码", + "forgotPasswordInfo": "输入您的电子邮件,我们将向您发送重置密码的链接。", + "forgotPasswordSuccess": "请查看电子邮件中的重置密码链接。", + "forgotPasswordError": "出错了。请重试。", + "register": "注册", + "userLogin": "用户登录", + "login": "登录", + "bind": "绑定", + "passwordCheckLength": "至少 {min} 个字符", + "passwordCheckContainsNumberAndLetter": "必须包含字母和数字", + "passwordCheckSpace": "不能包含空格字符", + "welcomeTitle": "🎉 欢迎使用 {productName} 🎉", + "inviteWelcomeTitle": "{username} 邀请您登录 {productName}", + "terms": "条款", + "privacy": "隐私政策", + "registerHint": "我已阅读并同意", + "chooseAccount": "选择您的帐户", + "signInLabel": "使用 {name} 登录", + "bindAccount": "绑定帐户", + "scanQrCode": "使用 {name} 扫描二维码", + "invalidThirdPartyParam": "无效的第三方参数", + "account": "帐户", + "inputAccount": "请输入您的帐户", + "ldapLogin": "LDAP登录", + "resetPassword": "重置密码", + "resetPasswordDesc": "重置用户 {name} 的密码.重置后将生成新密码.", + "resetSuccess": "重置成功", + "resetSuccessDesc": "密码重置成功.新密码为:{password}", + "resetLostPasswordSuccess": "密码重置成功。请重新登录。", + "copyPassword": "复制密码", + "poweredByLowcoder": "供电 Lowcoder.cloud", + "continue": "继续", + "enterPassword": "输入密码", + "selectAuthProvider": "选择身份验证提供程序", + "selectWorkspace": "选择工作区", + "userNotFound": "未找到用户。请确保您输入了正确的电子邮件。", + }, + "preLoad": { + ...en.preLoad, + + "jsLibraryHelpText": "通过URL链接向当前应用程序添加JavaScript库.lodash、day.js、uuid、numbro内置于系统中,可立即使用.JavaScript库在应用程序初始化之前加载,这可能会影响应用程序的性能.", + "exportedAs": "导出为", + "urlTooltip": "JavaScript库的URL链接,建议使用[unpkg.com](https://unpkg.com/)或[jsdelivr.net](https://www.jsdelivr.com/).", + "externalLibsHelperText": "仅支持使用 UMD(通用模块定义)方法的库。更多信息请点击: https://github.com/umdjs/umd", + "recommended": "推荐", + "viewJSLibraryDocument": "文档", + "jsLibraryURLError": "无效的URL链接", + "jsLibraryExist": "JavaScript库已存在", + "jsLibraryEmptyContent": "未添加JavaScript库", + "jsLibraryDownloadError": "JavaScript库下载错误", + "jsLibraryInstallSuccess": "JavaScript库安装成功", + "jsLibraryInstallFailed": "JavaScript库安装失败", + "jsLibraryInstallFailedCloud": "可能该库在沙盒中不可用,[文档](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/use-third-party-libraries-in-apps#import-third-party-libraries)\n{message}", + "jsLibraryInstallFailedHost": "___placeholder0___", + "add": "新增", + "jsHelpText": "向当前应用程序添加全局方法或变量.", + "cssHelpText": "向当前应用程序添加样式.由于系统进行迭代,DOM结构可能会发生变化.请尝试通过组件属性修改样式.", + "scriptsAndStyles": "脚本和样式", + "jsLibrary": "JavaScript库", + }, + "editorTutorials": { + ...en.editorTutorials, + + "component": "组件", + "componentContent": "右侧的组件区域拥有表格、按钮、输入框、选择器等组件,可以拖动到画布上进行使用.", + "canvas": "画布", + "canvasContent": "画布上所见即所得,您可以通过拖放来调整组件的布局和大小,使用键盘快捷键删除/复制/粘贴组件.", + "queryData": "查询数据", + "queryDataContent": "在此处创建新的查询,并连接到您的MySQL、PostgreSQL、MongoDB、Redis、Airtable等数据源.配置查询后,点击“运行”获取数据.", + "compProperties": "组件属性", + "interactiveDemo": "互动演示", + "interactiveDemoToolTip": "点击开始该功能的互动演示", + }, + "supademos": { + ...en.supademos, + + "transformer": "https://app.supademo.com/embed/clyohuj2r0sluy805bs0e8mru?embed_v=2", + "dataresponder": "https://app.supademo.com/embed/clypwukfr19ury805vzrt2otg?embed_v=2", + "temporarystate": "https://app.supademo.com/embed/clyikd4yd03wbphh054on5hh2?embed_v=2", + "dataquery2table": "https://app.supademo.com/embed/clxri6p3d4ctht2oemjdxz12f?embed_v=2", + "restApiQuery": "https://app.supademo.com/embed/clxu32uj50d3012o2mnh4ulpw?embed_v=2", + "jsQuery": "", + "streamApiQuery": "", + "mongodbQuery": "", + "libraryQuery": "", + "googleSheets": "", + "graphqlQuery": "", + "snowflakeQuery": "", + }, + "homeTutorials": { + ...en.homeTutorials, + + "createAppContent": "🎉 欢迎使用{productName},点击“应用程序”开始创建您的第一个应用程序.", + "createAppTitle": "创建应用程序", + }, + "npmRegistry": { + ...en.npmRegistry, + + "npmRegistryEnable": "启用自定义 NPM 注册表", + "npmRegistryUrl": "故宫博物院登记处网址", + "npmRegistryUrlRequired": "请输入注册表 URL", + "npmRegistryUrlInvalid": "请输入有效的 URL", + "npmRegistryScope": "包装范围", + "npmRegistryPattern": "图案", + "npmRegistryPatternInvalid": "请输入一个有效的模式(以 @ 开头表示组织)。", + "npmRegistryAuth": "认证", + "npmRegistryAuthType": "认证类型", + "npmRegistryAuthCredentials": "认证证书", + "npmRegistryAuthCredentialsRequired": "请输入注册表凭据", + "npmRegistryAuthCredentialsHelp": "对于基本授权,请提供格式为 \"base64(username:password) \"的 base64 编码用户名和密码;对于令牌授权,请提供令牌。", + }, + "history": { + ...en.history, + + "layout": "'{0}'布局调整", + "upgrade": "升级'{0}'", + "delete": "删除'{0}'", + "add": "添加'{0}'", + "modify": "修改'{0}'", + "rename": "将'{1}'重命名为'{0}'", + "recover": "恢复'{2}'的版本", + "recoverVersion": "恢复版本", + "andSoOn": "等等", + "timeFormat": "MM DD HH:mm A", + "emptyHistory": "无历史记录", + "currentVersionWithBracket": "(当前)", + "currentVersion": "当前版本", + "justNow": "刚刚", + "history": "历史记录", + }, + "home": { + ...en.home, + + "profile": "你的个人资料", + "news": "新闻", + "newsLoading": "它会加载几秒钟。", + "orgHome": "主页 (Org)", + "yourOrg": "您所在的组织", + "orgHomeTitle": "组织主页", + "appMarketplace": "应用市场", + "allApplications": "所有应用", + "allModules": "所有模块", + "allFolders": "所有文件夹", + "yourFolders": "您的文件夹", + "modules": "模块", + "module": "模块", + "api": "低编码器应用程序接口", + "trash": "回收站", + "marketplace": "市场", + "allCategories": "所有类别", + "queryLibrary": "查询管理", + "datasource": "数据源", + "selectDatasourceType": "选择数据源类型", + "home": "首页", + "all": "全部", + "app": "应用", + "navigation": "导航", + "navLayout": "桌面端导航", + "navLayoutDesc": "便于桌面端设备导航的左侧菜单.", + "mobileTabLayout": "移动端导航", + "mobileTabLayoutDesc": "流畅的移动端设备浏览底部导航栏.", + "folders": "文件夹", + "folder": "文件夹", + "rootFolder": "根目录", + "import": "导入", + "export": "导出为JSON", + "show": "显示", + "inviteUser": "邀请成员", + "createFolder": "创建文件夹", + "createFolderSubTitle": "文件夹名称:", + "moveToFolder": "移动到文件夹", + "moveToTrash": "移动到回收站", + "moveToFolderSubTitle": "将\"{name}\"移动到:", + "folderName": "文件夹名称:", + "resCardSubTitle": "{creator}于{time}创建", + "trashEmpty": "回收站为空.", + "projectEmpty": "这里没有内容.", + "projectEmptyCanAdd": "您还没有任何应用程序.点击“新建”开始.", + "name": "名称", + "type": "类型", + "creator": "创建者", + "lastModified": "上次修改", + "deleteTime": "删除时间", + "createTime": "创建时间", + "datasourceName": "数据源名称", + "databaseName": "数据库名称", + "nameCheckMessage": "名称不能为空", + "deleteElementTitle": "永久删除", + "moveToTrashSubTitle": "{type} {name} 将被移动到回收站.", + "deleteElementSubTitle": "永久删除 {type} {name},无法恢复.", + "deleteSuccessMsg": "删除成功", + "deleteErrorMsg": "删除错误", + "recoverSuccessMsg": "恢复成功", + "newDatasource": "新建数据源", + "creating": "创建中...", + "chooseDataSourceType": "选择数据源类型", + "folderAlreadyExists": "文件夹已存在", + "newNavLayout": "{userName}的{name}", + "newApp": "{userName}的新{name}", + "importError": "导入错误,{message}", + "exportError": "导出错误,{message}", + "importSuccess": "导入成功", + "fileUploadError": "文件上传错误", + "fileFormatError": "文件格式错误", + "groupWithSquareBrackets": "[组] ", + "allPermissions": "所有者", + "appSharingDialogueTitle": "应用程序共享和权限", + "appSocialSharing": "分享您的应用程序和体验:", + "appSocialSharingMessage": "我用 Lowcoder 制作了这个应用程序,快来看看吧!", + "socialShare": "分享到", + "shareLink": "分享链接:", + "copyLink": "复制链接", + "appPublicMessage": "将应用设为公开,任何人都可以查看.", + "modulePublicMessage": "将模块设为公开,任何人都可以查看.", + "marketplaceURL": "https://api-service.lowcoder.cloud", + "appMarketplaceMessage": "发布您的应用程序到Lowcoder市场.任何人都可以在那里查看和复制它.", + "moduleMarketplaceMessage": "发布您的模块到Lowcoder市场.任何人都可以在那里查看和复制它.", + "marketplaceGoodPublishing": "请确保您的应用程序命名准确、易于使用。发布前请删除任何敏感信息。此外,移除本地数据源,代之以静态内置临时数据", + "noMarketplaceApps": "市场上还没有应用程序", + "errorMarketplaceApps": "获取市场应用程序错误", + "localMarketplaceTitle": "本地市场", + "globalMarketplaceTitle": "Lowcoder 市场", + "memberPermissionList": "成员权限:", + "orgName": "{orgName}管理员", + "addMember": "添加成员", + "addPermissionPlaceholder": "请输入姓名以搜索成员", + "searchMemberOrGroup": "搜索成员或组:", + "addPermissionErrorMessage": "添加权限失败,{message}", + "copyModalTitle": "克隆\"{name}\"", + "copyNameLabel": "{type}名称", + "copyModalfolderLabel": "添加到文件夹", + "copyNamePlaceholder": "请输入{type}名称", + "chooseNavType": "请选择导航类型", + "createNavigation": "创建导航", + "howToUseAPI": "如何使用开放式 Rest API", + "support": "支持", + }, + "support": { + ...en.support, + + "selfUser": "你", + "supportTitle": "Lowcoder 支持", + "supportContent": "如果您有任何疑问或需要帮助,请使用工单系统快速解决您的问题。", + "newSupportTicket": "新建支持工单", + "ticketTitle": "标题", + "priority": "优先级", + "assignee": "负责人", + "status": "工单状态", + "updatedTime": "更新时间", + "active": "激活", + "inactive": "未激活", + "noEmail": "没有邮箱", + "details": "详情", + "reloadTickets": "重新加载工单", + "createdDate": "创建日期", + "updatedDate": "更新日期", + "description": "问题描述", + "subtasks": "子任务", + "subtasksProgress": "所有子任务的进度", + "attachments": "问题附件", + "comments": "评论", + "addComment": "添加评论", + "addAttachment": "添加附件", + "edit": "编辑工单描述", + "save": "保存工单描述", + "cancel": "取消", + "submitComment": "提交评论", + "upload": "提交附件", + "selectFile": "选择文件", + "ticketDescriptionUpdated": "工单描述更新成功!", + "ticketDescriptionUpdateFailed": "更新工单描述失败。", + "writeComment": "写一条评论...", + "ticketCommentAdded": "评论添加成功!", + "ticketCommentFailed": "添加评论失败。", + "ticketCommentEmpty": "请先写评论再提交。", + "ticketAttachmentUploaded": "附件上传成功!", + "ticketAttachmentFailed": "附件上传失败。", + "ticketAttachmentEmpty": "请选择要上传的文件。", + "ticketFetchError": "加载工单失败。", + "ticketNotFound": "未找到工单。", + "addAttachmentFileSize": "文件必须小于5MB!", + "goBack": "返回", + "noDescription": "没有可用的描述。", + "createTicket": "创建新的支持工单", + "createTicketTitlePlaceholder": "输入标题(最多150个字符)", + "createTicketDescriptionTitle": "描述您的问题 - 详细信息越多越好:", + "createTicketDescriptionPlaceholder": "详细描述问题,包括:1)重现问题的步骤,2)预期行为与实际行为的差异,3)适用时的代码片段,4)受影响的具体组件、API 或配置", + "createTicketSubmit": "提交工单", + "createTicketInfoText": "当您的工单创建后,您可以在“详情”部分添加截图和评论。", + }, + "carousel": { + ...en.carousel, + + "dotPosition": "点位置", + "autoPlay": "自动播放", + "showDots": "显示点", + }, + "npm": { + ...en.npm, + + "invalidNpmPackageName": "无效的npm包名称或URL链接.", + "pluginExisted": "该npm插件已存在", + "compNotFound": "未找到组件 {compName}.", + "addPluginModalTitle": "添加npm插件", + "pluginNameLabel": "npm包的URL链接或名称", + "noCompText": "没有组件.", + "compsLoading": "加载中...", + "removePluginBtnText": "移除", + "addPluginBtnText": "添加npm插件", + }, + "toggleButton": { + ...en.toggleButton, + + "valueDesc": "修改按钮的默认值,例如:false", + "trueDefaultText": "显示", + "falseDefaultText": "隐藏", + "trueLabel": "True 文本", + "falseLabel": "False文本", + "trueIconLabel": "True 图标", + "falseIconLabel": "False图标", + "iconPosition": "图标位置", + "showText": "显示文本", + "alignment": "对齐方式", + "showBorder": "显示边框", + }, + "componentDoc": { + ...en.componentDoc, + + "markdownDemoText": "**Lowcoder** 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用.", + "demoText": "Lowcoder 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用.", + "submit": "提交", + "style": "样式", + "danger": "危险", + "warning": "警告", + "success": "成功", + "menu": "菜单", + "link": "链接", + "customAppearance": "自定义外观", + "search": "搜索", + "pleaseInputNumber": "请输入一个数字", + "mostValue": "最大值", + "maxRating": "最大评级", + "notSelect": "未选择", + "halfSelect": "半选", + "pleaseSelect": "请选择", + "title": "标题", + "content": "内容", + "componentNotFound": "组件不存在", + "example": "示例", + "defaultMethodDesc": "设置属性 {name} 的默认值", + "propertyUsage": "您可以通过在任何可以编写 JavaScript 的地方访问组件属性来读取与组件相关的信息.", + "property": "属性", + "propertyName": "属性名称", + "propertyType": "类型", + "propertyDesc": "描述", + "event": "事件", + "eventName": "事件名称", + "eventDesc": "描述", + "mehtod": "方法", + "methodUsage": "您可以通过方法与组件进行交互,并且可以在任何可以编写 JavaScript 的地方通过它们的名称调用它们.或者您可以通过事件的“控制组件”操作来调用它们.", + "methodName": "方法名称", + "methodDesc": "描述", + "showBorder": "显示边框", + "haveTry": "自行尝试", + "settings": "设置", + "settingValues": "设置值", + "defaultValue": "默认值", + "time": "时间", + "date": "日期", + "noValue": "无", + "xAxisType": "X 轴类型", + "hAlignType": "水平对齐", + "leftLeftAlign": "左对齐", + "leftRightAlign": "右对齐", + "topLeftAlign": "上方靠左对齐", + "topRightAlign": "上方靠右对齐", + "validation": "验证", + "required": "必填", + "defaultStartDateValue": "默认起始日期", + "defaultEndDateValue": "默认结束日期", + "basicUsage": "基本用法", + "basicDemoDescription": "以下示例展示了组件的基本用法.", + "noDefaultValue": "无默认值", + "forbid": "禁止", + "placeholder": "占位符", + "pleaseInputPassword": "请输入密码", + "password": "密码", + "textAlign": "文本对齐", + "length": "长度", + "top": "顶部", + "pleaseInputName": "请输入您的姓名", + "userName": "姓名", + "fixed": "固定", + "responsive": "自适应", + "workCount": "字数统计", + "cascaderOptions": "[\n {\n \"value\": \"zhejiang\",\n \"label\": \"浙江\",\n \"children\": [\n {\n \"value\": \"hangzhou\",\n \"label\": \"杭州\",\n \"children\": [\n {\n \"value\": \"xihu\",\n \"label\": \"西湖\"\n }\n ]\n }\n ]\n },\n {\n \"value\": \"jiangsu\",\n \"label\": \"江苏\",\n \"children\": [\n {\n \"value\": \"nanjing\",\n \"label\": \"南京\",\n \"children\": [\n {\n \"value\": \"zhonghuamen\",\n \"label\": \"中华门\"\n }\n ]\n }\n ]\n }\n ]", + "pleaseSelectCity": "请选择一个城市", + "advanced": "高级", + "showClearIcon": "显示清除图标", + "appleOptionLabel": "🍎 苹果", + "waterMelonOptionLabel": "🍉 西瓜", + "berryOptionLabel": "🍓 草莓", + "lemonOptionLabel": "🍋 柠檬", + "coconutOptionLabel": "🥥 椰子", + "likedFruits": "喜爱的水果", + "option": "选项", + "singleFileUpload": "单个文件上传", + "multiFileUpload": "多个文件上传", + "folderUpload": "文件夹上传", + "multiFile": "多个文件", + "folder": "文件夹", + "open": "打开", + "favoriteFruits": "收藏的水果", + "pleaseSelectOneFruit": "请选择一个水果", + "notComplete": "未完成", + "complete": "完成", + "echart": "电子图表", + "lineChart": "折线图", + "basicLineChart": "基础折线图", + "lineChartType": "折线图类型", + "stackLineChart": "堆叠折线图", + "areaLineChart": "区域折线图", + "scatterChart": "散点图", + "scatterShape": "散点形状", + "scatterShapeCircle": "圆形", + "scatterShapeRect": "矩形", + "scatterShapeTri": "三角形", + "scatterShapeDiamond": "菱形", + "scatterShapePin": "图钉", + "scatterShapeArrow": "箭头", + "pieChart": "饼图", + "basicPieChart": "基础饼图", + "pieChatType": "饼图类型", + "pieChartTypeCircle": "环形图", + "pieChartTypeRose": "玫瑰图", + "titleAlign": "标题位置", + "color": "颜色", + "dashed": "虚线", + "imADivider": "我是一条分割线", + "tableSize": "表格尺寸", + "subMenuItem": "子菜单 {num}", + "menuItem": "菜单 {num}", + "labelText": "组件标题", + "labelPosition": "标题位置", + "labelAlign": "标题对齐方式", + "optionsOptionType": "配置方法", + "styleBackgroundColor": "背景颜色", + "styleBorderColor": "边框颜色", + "styleColor": "字体颜色", + "selectionMode": "行选择模式", + "paginationSetting": "分页设置", + "paginationShowSizeChanger": "支持用户修改每页条目数", + "paginationShowSizeChangerButton": "显示条目数选择按钮", + "paginationShowQuickJumper": "显示快速跳转", + "paginationHideOnSinglePage": "只有一页时隐藏", + "paginationPageSizeOptions": "每页条目数选项", + "chartConfigCompType": "图表类型", + "xConfigType": "X 轴类型", + "loading": "加载中", + "disabled": "禁用", + "minLength": "最小长度", + "maxLength": "最大长度", + "showCount": "显示字数统计", + "autoHeight": "自动高度", + "thousandsSeparator": "千位分隔符", + "precision": "小数位数", + "value": "默认值", + "formatter": "格式化", + "min": "最小值", + "max": "最大值", + "step": "步长", + "start": "开始时间", + "end": "结束时间", + "allowHalf": "允许半选", + "filetype": "文件类型", + "showUploadList": "显示上传列表", + "uploadType": "上传类型", + "allowClear": "显示清除图标", + "minSize": "最小文件大小", + "maxSize": "最大文件大小", + "maxFiles": "最大上传文件数", + "format": "格式", + "minDate": "最小日期", + "maxDate": "最大日期", + "minTime": "最小时间", + "maxTime": "最大时间", + "text": "文本", + "type": "类型", + "hideHeader": "隐藏标题", + "hideBordered": "隐藏边框", + "src": "图片链接", + "showInfo": "显示数值", + "mode": "模式", + "onlyMenu": "仅菜单", + "horizontalAlignment": "水平对齐", + "row": "左", + "column": "上", + "leftAlign": "左对齐", + "rightAlign": "右对齐", + "percent": "百分比", + "fixedHeight": "固定高度", + "auto": "自适应", + "directory": "文件夹", + "multiple": "多个文件", + "singleFile": "单个文件", + "manual": "手动", + "default": "默认", + "small": "小", + "middle": "中", + "large": "大", + "single": "单个", + "multi": "多个", + "close": "关闭", + "ui": "界面模式", + "line": "折线图", + "scatter": "散点图", + "pie": "饼图", + "basicLine": "基本折线图", + "stackedLine": "堆叠折线图", + "areaLine": "面积图", + "basicPie": "基本饼图", + "doughnutPie": "圆环图", + "rosePie": "玫瑰图", + "category": "分类轴", + "circle": "圆形", + "rect": "矩形", + "triangle": "三角形", + "diamond": "菱形", + "pin": "图钉", + "arrow": "箭头", + "left": "左", + "right": "右", + "center": "居中", + "bottom": "底部", + "justify": "两端对齐", + }, + "playground": { + ...en.playground, + + "url": "https://app.lowcoder.cloud/playground/{compType}/1", + "data": "数据", + "preview": "预览", + "property": "属性", + "console": "控制台", + "executeMethods": "执行方法", + "noMethods": "没有方法.", + "methodParams": "方法参数", + "methodParamsHelp": "输入方法参数使用 JSON,例如,可以使用 [1] 或 1 来设置 setValue 的参数.", + }, + "calendar": { + ...en.calendar, + + "headerBtnBackground": "按钮背景", + "btnText": "按钮文字", + "title": "标题", + "selectBackground": "选中背景", + }, + "idSource": { + ...en.idSource, + + "title": "用户认证提供商", + "form": "电子邮件", + "pay": "高级", + "enable": "启用", + "unEnable": "未启用", + "loginType": "登录方式", + "status": "状态", + "desc": "描述", + "manual": "通讯录:", + "syncManual": "同步通讯录", + "syncManualSuccess": "同步成功", + "enableRegister": "允许注册", + "saveBtn": "保存并启用", + "save": "保存", + "none": "无", + "formPlaceholder": "请输入{label}", + "formSelectPlaceholder": "请选择{label}", + "saveSuccess": "保存成功", + "dangerLabel": "危险动作", + "dangerTip": "禁用此登录方式可能导致部分用户无法登录,请谨慎操作.", + "lastEnabledConfig": "您不能禁用/删除配置,因为这是唯一启用的配置。", + "disable": "禁用", + "disableSuccess": "禁用成功", + "encryptedServer": "-------- 服务器端加密 --------", + "disableTip": "提示", + "disableContent": "禁用此登录方式可能导致部分用户无法登录,是否确定继续?", + "manualTip": "", + "lockTip": "内容已锁定.要进行更改,请点击{icon}解锁.", + "lockModalContent": "更改“ID属性”字段可能对用户识别产生重大影响,请在继续之前确认您理解此更改的影响.", + "payUserTag": "高级", + "source": "资料来源", + "sourceName": "认证提供商名称", + "sourceDescription": "认证提供程序说明", + "sourceIcon": "验证提供程序图标", + "sourceCategory": "认证提供商类别", + "souceIssuerURI": "Auth Provider Issuer URI", + "souceAuthorizationEndpoint": "Auth Provider 授权端点", + "souceTokenEndpoint": "认证提供程序令牌端点", + "souceUserInfoEndpoint": "认证提供商用户信息终端", + "userInfoIntrospection": "使用 OpenID 用户自省", + "userCanSelectAccounts": "用户可从账户中选择", + "sourceCategoryEnterprise": "企业身份", + "sourceCategoryCloud": "云服务", + "sourceCategorySocial": "社交媒体", + "sourceCategoryDevelopment": "发展", + "sourceCategoryTools": "工具与生产力", + }, + "slotControl": { + ...en.slotControl, + + "configSlotView": "配置槽视图", + }, + "jsonLottie": { + ...en.jsonLottie, + + "lottieJson": "JSON数据", + "searchAnimation": "搜索动画", + "speed": "播放速度", + "width": "宽度", + "height": "高度", + "backgroundColor": "背景颜色", + "animationStart": "播放方式", + "valueDesc": "JSON数据", + "loop": "循环方式", + "auto": "自动", + "onHover": "鼠标悬停时", + "onTrigger": "触发时", + "singlePlay": "播放一次", + "endlessLoop": "循环播放", + "keepLastFrame": "冻结最后一帧", + "fit": "适合", + "align": "对齐", + "load": "负载", + "play": "关于播放", + "pause": "暂停", + "stop": "关于停止", + "complete": "完整", + }, + "timeLine": { + ...en.timeLine, + + "titleColor": "标题颜色", + "subTitleColor": "子标题颜色", + "labelColor": "标签颜色", + "value": "数据", + "mode": "模式", + "left": "左", + "right": "右", + "alternate": "轮流", + "modeTooltip": "设置内容出现在时间轴左边/右边或左右轮流出现", + "reverse": "倒置", + "pending": "未完成", + "pendingDescription": "设置后,将显示带有文本和等待指示器的最后一个节点。", + "defaultPending": "继续改进", + "clickTitleEvent": "点击时", + "clickTitleEventDesc": "点击标题时", + "Introduction": "键值介绍", + "helpTitle": "时间线的标题(必填)", + "helpsubTitle": "时间线的副标题", + "helpLabel": "时间线的标签,可用于显示日期", + "helpColor": "设置时间线圆点的颜色", + "helpDot": "时间线的原点渲染成AntD的图标", + "helpTitleColor": "设置时间线标题颜色", + "helpSubTitleColor": "设置时间线子标题颜色", + "helpLabelColor": "设置时间线标签颜色", + "valueDesc": "时间线的数据", + "clickedObjectDesc": "点击的项目数据", + "clickedIndexDesc": "点击的项目序号", + }, + "comment": { + ...en.comment, + + "value": "评论列表数据", + "showSendButton": "允许评论", + "title": "标题", + "titledDefaultValue": "共有%d条评论", + "placeholder": "shift + enter 快捷发送评论;输入@或#可快速输入", + "placeholderDec": "占位符", + "buttonTextDec": "按钮文本", + "buttonText": "发表", + "mentionList": "提及列表数据", + "mentionListDec": "key-提及关键字;value-提及列表", + "userInfo": "用户信息", + "dateErr": "日期错误", + "commentList": "评论列表数据", + "deletedItem": "已删除的数据", + "submitedItem": "已提交的数据", + "deleteAble": "显示删除按钮", + "Introduction": "属性介绍", + "helpUser": "用户信息(必填)", + "helpname": "用户名(必填)", + "helpavatar": "头像地址(高优先)", + "helpdisplayName": "头像文字(低优先)", + "helpvalue": "评论内容", + "helpcreatedAt": "创建时间", + }, + "mention": { + ...en.mention, + + "mentionList": "提及列表", + }, + "autoComplete": { + ...en.autoComplete, + + "value": "数据", + "checkedValueFrom": "选择提示时获取", + "ignoreCase": "搜索忽略大小写", + "searchLabelOnly": "仅搜索标签", + "searchFirstPY": "搜索首拼", + "searchCompletePY": "搜索全拼", + "searchText": "搜索文字", + "SectionDataName": "组件数据", + "valueInItems": "项目中的值", + "type": "类型", + "antDesign": "蚂蚁设计", + "normal": "常规", + "selectKey": "值", + "selectLable": "标签", + "ComponentType": "组件类型", + "colorIcon": "彩色", + "grewIcon": "黑白", + "noneIcon": "无", + "small": "小", + "large": "大", + "componentSize": "组件尺寸", + "Introduction": "键值介绍", + "helpLabel": "标签", + "helpValue": "值", + }, + "responsiveLayout": { + ...en.responsiveLayout, + + "column": "列", + "addColumn": "添加栏", + "columnDefinition": "列定义", + "rowDefinition": "行定义", + "columnGap": "立柱间隙", + "rowGap": "行间距", + "atLeastOneColumnError": "响应式布局至少保留一列", + "columnsPerRow": "每行列数", + "columnsSpacing": "列间距 (px)", + "horizontal": "水平的", + "vertical": "垂直的", + "mobile": "移动的", + "tablet": "药片", + "desktop": "桌面", + "rowStyle": "行式", + "columnStyle": "栏目样式", + "minWidth": "分钟。宽度", + "rowBreak": "断行", + "useComponentWidth": "使用自身尺寸", + "useComponentWidthDesc": "使用容器宽度而不是应用宽度", + "matchColumnsHeight": "匹配列高度", + "rowLayout": "行布局", + "columnsLayout": "栏目布局", + "columnsDefinitionTooltip": "列可以根据 CSS 列属性自由定义。例如,\"auto auto \"将创建宽度相等的两列。更多信息请点击: https://css-tricks.com/almanac/properties/g/grid-template-columns", + "rowsDefinitionTooltip": "行可以根据 CSS 行属性自由定义。例如,\"auto auto \"将创建高度相等的两行。更多信息请点击: https://css-tricks.com/almanac/properties/g/grid-template-rows", + }, + "splitLayout": { + ...en.splitLayout, + + "column": "查看区域", + "addColumn": "添加区域", + "columnDefinition": "区域定义", + "atLeastOneColumnError": "响应式布局至少保留一列", + "horizontal": "横向", + "vertical": "垂直", + "areaStyle": "立柱式", + "minWidth": "最小宽度", + "maxWidth": "最大最大宽度", + "width": "宽度", + "collapsible": "区域是否可折叠?", + "matchColumnsHeight": "匹配区域 高度", + "orientation": "分割布局方向", + "orientationTooltip": "区域对齐的视觉顺序。您也可以在 Splitlayout Components 内部再添加一个 Splitlayout Components,以实现复杂的布局。", + }, + "navLayout": { + ...en.navLayout, + + "mode": "模式", + "modeInline": "排队", + "modeVertical": "垂直的", + "modeHorizontal": "横向", + "width": "宽度", + "widthTooltip": "数字或百分比,例如 520,60%", + "navStyle": "菜单风格", + "navItemStyle": "菜单项样式", + "navBackground": "背景图片", + "mobileNavVerticalOrientation": "垂直方向", + "mobileNavVerticalMaxWidth": "最大宽度", + "mobileNavBarHeight": "导航栏高度", + "mobileNavVerticalShowSeparator": "显示分隔符", + "mobileNavIconSize": "图标大小", + }, + "timeZone": { + ...en.timeZone, + + "UTC-12:00": "(UTC-12:00) 国际日期变更线西侧", + "UTC-11:00": "(UTC-11:00) UTC-11", + "UTC-10:00": "(世界协调时-10:00) 夏威夷", + "UTC-09:00": "(UTC-09:00) 阿拉斯加", + "UTC-08:00": "(协调世界时-08:00) 下加利福尼亚州", + "UTC-07:00": "(UTC-07:00) 太平洋时间(美国)", + "UTC-06:00": "(美国中部时间(UTC-06:00)", + "UTC-05:00": "(美国东部时间(UTC-05:00)", + "UTC-04:00": "(UTC-04:00) 大西洋时间", + "UTC-03:00": "(UTC-03:00) 布宜诺斯艾利斯", + "UTC-02:00": "(UTC-02:00) UTC-02", + "UTC-01:00": "(UTC-01:00) 佛得角", + "UTC+00:00": "(UTC 00:00) UTC", + "UTC+01:00": "(UTC+01:00)柏林、罗马", + "UTC+02:00": "(UTC+02:00)雅典、布加勒斯特", + "UTC+03:00": "(UTC+03:00) 莫斯科", + "UTC+04:00": "(世界协调时+04:00)迪拜、马斯喀特", + "UTC+05:00": "(世界协调时+05:00) 卡拉奇", + "UTC+05:30": "(世界协调时+05:30) 新德里", + "UTC+05:45": "(世界协调时+05:45) 加德满都", + "UTC+06:00": "(UTC+06:00) 达卡", + "UTC+06:30": "(UTC+06:30) 仰光", + "UTC+07:00": "(UTC+07:00) 曼谷", + "UTC+08:00": "(世界协调时+08:00)北京,香港", + "UTC+09:00": "(UTC+09:00)东京、首尔", + "UTC+09:30": "(UTC+09:30)阿德莱德、达尔文", + "UTC+10:00": "(UTC+10:00) 悉尼", + "UTC+11:00": "(UTC+11:00)所罗门群岛、新喀里多尼亚", + "UTC+12:00": "(UTC+12:00) 斐济,奥克兰", + "UTC+13:00": "(UTC+13:00) 萨摩亚,努库阿洛法", + "UserChoice": "用户选择", + }, + "tour": { + ...en.tour, + + "section1Title": "步骤", + "section1Subtitle": "步骤", + "tooltipExampleHeader": "例如", + "tooltipSignatureHeader": "签名:", + "options": { + ...en.tour.options, + + "title": { + ...en.tour.options.title, + + "label": "标题", + "placeholder": "欢迎", + "tooltip": "步骤的标题。任何 HTML 在此都有效。", + }, + "description": { + ...en.tour.options.description, + + "label": "说明", + "placeholder": "欢迎来到 lowcoder!", + "tooltip": "步骤描述。任何 HTML 在此都有效。", + }, + "mask": { + ...en.tour.options.mask, + + "label": "面罩", + "tooltip": "是否启用遮罩、通过自定义道具更改遮罩样式和填充颜色,默认遵循 Tour 的 `mask` 属性。", + "tooltipValidTypes": "有效输入类型:true\"、\"false\"、空或遵循 Antd 的 CSSProperties 模式的 JSON 对象。", + }, + "arrow": { + ...en.tour.options.arrow, + + "label": "箭头", + "tooltip": "根据需要打开或关闭箭头,或移动箭头使其指向组件中心,否则箭头将始终指向组件顶部附近。", + "tooltipFunctionSignature": "布尔 | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.options.type, + + "label": "类型", + "tooltip": "工具提示的类型,它会影响背景颜色和文本颜色。这些颜色可通过主游览样式部分进行控制。", + }, + "target": { + ...en.tour.options.target, + + "label": "组件", + "tooltip": "您要在其上添加工具提示的组件,如果您只想在屏幕中间添加一个模态,则将其留空。", + }, + "coverImage": { + ...en.tour.options.coverImage, + + "label": "封面图片 URI", + "tooltip": "您希望与步骤一起显示的图片的 URI", + }, + }, + "indicatorsRender": { + ...en.tour.indicatorsRender, + + "label": "指标渲染", + "tooltip": "提供自定义指示器,显示您所在的步骤", + "tooltipValidTypes": "Format 是一个函数,它接受两个参数 \"current \"和 \"total\",并返回一个 ReactNode", + "tooltipFunctionSignatureHeader": "签名:", + "tooltipFunctionSignature": "(当前:数字,总数:数字) => ReactNode", + "tooltipExampleHeader": "例如", + }, + "disabledInteraction": { + ...en.tour.disabledInteraction, + + "label": "禁用互动", + "tooltip": "禁用高亮区域的交互。", + }, + "mask": { + ...en.tour.mask, + + "label": "面罩", + "tooltip": "是否启用遮罩、通过自定义道具更改遮罩样式和填充颜色,默认情况下遵循 Tour 的 `mask`属性。可在步骤级别重载。", + "tooltipValidTypes": "有效输入类型:true\"、\"false\"、空或遵循 Antd 的 CSSProperties 模式的 JSON 对象。", + }, + "placement": { + ...en.tour.placement, + + "label": "安置", + "tooltip": "引导卡相对于目标元素的位置。可在步长级别覆盖。", + "tooltipValidOptions": "有效选项", + "tooltipValidOptionsAbove": "组件上方:", + "tooltipValidOptionsLeft": "在组件左侧:", + "tooltipValidOptionsRight": "在组件右侧:", + "tooltipValidOptionsBelow": "在组件下方:", + "tooltipValidOptionsOnTop": "在组件的顶部:", + }, + "arrow": { + ...en.tour.arrow, + + "label": "箭头", + "tooltip": "根据需要打开或关闭箭头,或移动箭头使其指向组件中心,否则箭头将始终指向组件顶部附近。可在步长级别覆盖。", + "tooltipFunctionSignature": "布尔 | { pointAtCenter: boolean }", + }, + "type": { + ...en.tour.type, + + "label": "类型", + "tooltip": "工具提示的类型,它会影响背景颜色和文本颜色。这些颜色可通过主游览样式部分进行控制。可在步骤级别覆盖。", + }, + }, + "docUrls": { + ...en.docUrls, + + "docHome": "https://docs.lowcoder.cloud/", + "apiDocHome": "https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/lowcoder-open-rest-api", + "components": "https://app.lowcoder.cloud/components/{compType}", + "module": "https://docs.lowcoder.cloud/lowcoder-documentation/build-applications/create-a-new-app/modules", + "optionList": "", + "terms": "https://lowcoder.cloud/terms", + "privacy": "https://lowcoder.cloud/privacy", + "aboutUs": "https://lowcoder.cloud/about", + "changeLog": "https://github.com/lowcoder-org/lowcoder/releases", + "introVideo": "", + "devNpmPlugin": "https://docs.lowcoder.cloud/build-plugins/develop-your-first-plugin", + "devNpmPluginText": "如何开发npm插件?", + "useHost": "https://docs.lowcoder.cloud/self-hosting/access-local-database-or-api", + "eventHandlerSlowdown": "https://docs.lowcoder.cloud/build-apps/event-handlers#debounce-and-throttle", + "thirdLib": "https://docs.lowcoder.cloud/build-apps/write-javascript/use-third-party-libraries", + "thirdLibUrlText": "使用第三方插件库", + }, + "datasourceTutorial": { + ...en.datasourceTutorial, + + "mysql": "", + "mongodb": "", + "postgres": "", + "redis": "", + "es": "", + "smtp": "", + "clickHouse": "", + }, + "queryTutorial": { + ...en.queryTutorial, + + "js": "", + "transformer": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/transformers", + "tempState": "https://docs.lowcoder.cloud/business-logic-in-apps/write-javascript/temporary-state", + "dataResponder": "https://docs.lowcoder.cloud/lowcoder-documentation/business-logic-in-apps/write-javascript/data-responder", + }, + "customComponent": { + ...en.customComponent, + + "entryUrl": "https://sdk.lowcoder.cloud/custom_component.html", + }, + "template": { + ...en.template, + + "cloneUrl": "/apps/template-import/", + }, + "lowcoderUrl": { + ...en.lowcoderUrl, + + "createIssue": "https://github.com/lowcoder-org/lowcoder/issues", + "discord": "https://discord.com/invite/qMG9uTmAx2", + }, + "iconScout": { + ...en.iconScout, + + "searchImage": "搜索图片", + "searchAnimation": "搜索动画", + "searchIcon": "搜索图标", + "noResults": "未找到结果。", + "buySubscriptionTitle": "解锁高级资产", + "buySubscriptionContent": "此资产为媒体包订阅者独享。订阅媒体包,无限制下载高质量资产!", + "buySubscriptionButton": "立即订阅", + }, + +}; diff --git a/translations/locales/zh.js b/translations/locales/zh.js index e624b3c215..8efad1e831 100644 --- a/translations/locales/zh.js +++ b/translations/locales/zh.js @@ -24,9 +24,9 @@ export const zh = { error: "错误", reference: "参考", text: "文本", - basic: "基础", + basic:"基础", label: "标题", - layout: "布局", + layout:"布局", color: "颜色", form: "表单", menu: "菜单", @@ -99,6 +99,7 @@ export const zh = { deleteCompsBody: "确定要删除所选的 {compNum} 个组件吗?", cutCompsSuccess: "剪切成功!您可以使用 {pasteKey} 进行粘贴,或使用 {undoKey} 撤销操作." }, + leftPanel: { ...en.leftPanel, queries: "查询", @@ -196,30 +197,32 @@ export const zh = { showBody: "显示表体", showFooter: "显示表尾", "showSider": "显示 Sider", - "innerSider": "内部 Sider", + "innerSider" : "内部 Sider", maskClosable: "点击蒙层关闭", showMask: "显示蒙层", scrollbar: "滚动条", "textOverflow": "文本溢出", - "siderScrollbar": "在 Sider 中显示滚动条", - "siderRight": "右侧显示屏", - "siderWidth": "凫水宽度", - "siderWidthTooltip": "网格宽度支持百分比(%)和像素(px)。", - "siderCollapsedWidth": "折叠宽度", - "siderCollapsedWidthTooltip": "折叠宽度支持百分比(%)和像素(px)。", - "siderCollapsible": "Sider 折叠式", - "siderCollapsed": "Sider 崩溃", - "contentScrollbar": "在内容中显示滚动条", + "siderScrollbar" : "在 Sider 中显示滚动条", + "siderRight" : "右侧显示屏", + "siderWidth" : "凫水宽度", + "siderWidthTooltip" : "网格宽度支持百分比(%)和像素(px)。", + "siderCollapsedWidth" : "折叠宽度", + "siderCollapsedWidthTooltip" : "折叠宽度支持百分比(%)和像素(px)。", + "siderCollapsible" : "Sider 折叠式", + "siderCollapsed" : "Sider 崩溃", + "contentScrollbar" : "在内容中显示滚动条", "appID": "应用程序 ID", "showApp": "在内容区域显示应用程序", "showAppTooltip": "您可以在内容区域显示整个 Lowcoder 应用程序。请注意,对于模块,我们不支持输入、输出事件和方法。", "baseURL": "Lowcoder API 基本 URL", "horizontal": "水平", "minHorizontalWidth": "最小水平宽度", - "horizontalGridCells": "水平网格单元", + "horizontalGridCells": "垂直网格单元", + "verticalGridCells": "Vertical Grid Cells", "showHorizontalScrollbar": "显示水平滚动条", "showVerticalScrollbar": "显示垂直滚动条", }, + autoHeightProp: { ...en.autoHeightProp, auto: "自动", @@ -234,13 +237,15 @@ export const zh = { top: "上", align: "对齐", width: "宽度", - widthTooltip: "组件标题的宽度,支持百分比(%)和像素(px)为单位.", + widthTooltip: + "组件标题的宽度,支持百分比(%)和像素(px)为单位.", }, "textOverflowProp": { ...en.textOverflowProp, "ellipsis": "鼠标悬停", "wrap": "包装" }, + eventHandler: { ...en.eventHandler, eventHandlers: "事件处理器", @@ -326,7 +331,7 @@ export const zh = { "hideCameraDesc": "在隐藏摄像头时触发", "shareScreen": "共享屏幕", "shareScreenDesc": "在共享屏幕时触发", - "shareScreenEnd": "共享屏幕结束", + "shareScreenEnd": "共享屏幕结束", "shareScreenEndDesc": "在共享屏幕结束时触发", "shareControl": "共享控制", "shareControlDesc": "在共享控制时触发", @@ -391,31 +396,69 @@ export const zh = { mention: "提及", mentionDesc: "在提及时触发", }, + themeDetail: { ...en.themeDetail, - primary: "颜色主题", - primaryDesc: "大多数组件使用默认的颜色主题", - textDark: "深色文本颜色", - textDarkDesc: "当应用背景颜色为浅色时", - textLight: "浅色文本颜色", - textLightDesc: "当应用背景颜色为深色时", - canvas: "画布颜色", - canvasDesc: "应用的默认背景颜色", - primarySurface: "容器颜色", - primarySurfaceDesc: "用于诸如表格之类的组件的默认背景颜色", - borderRadius: "边框半径", - borderRadiusDesc: "大多数组件使用默认的边框半径", - chart: "图表样式", - chartDesc: "Echarts", - echartsJson: "主题配置", - margin: "外边距", - marginDesc: "默认外边距通常用于大多数组件", - padding: "内边距", - paddingDesc: "默认内边距通常用于大多数组件", - containerHeaderPadding: "头部边距", - containerheaderpaddingDesc: "默认头部边距通常用于大多数组件", - gridColumns: "网格列", - gridColumnsDesc: "默认列数通常用于大多数容器", + + "primary": "品牌颜色", + "primaryDesc": "大多数组件使用的默认主颜色", + "textDark": "深色文本颜色", + "textDarkDesc": "当背景颜色较浅时使用", + "textLight": "浅色文本颜色", + "textLightDesc": "当背景颜色较深时使用", + "canvas": "画布颜色", + "canvasDesc": "应用的默认背景颜色", + "primarySurface": "容器颜色", + "primarySurfaceDesc": "组件(如表格)的默认背景颜色", + "borders": "边框样式", + "spacing": "间距样式", + "font": "字体样式", + "fonts": "字体", + "borderRadius": "边框圆角", + "borderRadiusDesc": "大多数组件使用的默认边框圆角", + "borderColor": "边框颜色", + "borderColorDesc": "大多数组件使用的默认边框颜色", + "borderWidth": "边框宽度", + "borderWidthDesc": "大多数组件使用的默认边框宽度", + "borderStyle": "边框样式", + "borderStyleDesc": "大多数组件使用的默认边框样式", + "fontFamily": "字体系列", + "fontFamilyDesc": "大多数组件使用的默认字体系列", + "chart": "图表样式", + "chartDesc": "在此处放置 eCharts 的主题 JSON,以定义所有详细信息中图表的样式。", + "echartsJson": "您可以使用主题 JSON 生成器。将生成器中的 JSON 复制并粘贴到这里。", + "margin": "外边距", + "marginDesc": "大多数组件通常使用的默认外边距", + "padding": "内边距", + "paddingDesc": "大多数组件通常使用的默认内边距", + "containerHeaderPadding": "标题内边距", + "containerheaderpaddingDesc": "大多数组件通常使用的默认标题内边距", + "gridColumns": "网格列", + "gridColumnsDesc": "大多数容器通常使用的默认列数", + "loadingIndicators": "加载指示器", + "showComponentLoadingIndicators": "当组件加载时显示加载指示器", + "showDataLoadingIndicators": "在数据加载期间显示指示器", + "dataLoadingIndicator": "数据加载指示器", + "background": "背景样式", + "gridSettings": "网格设置", + "gridRowHeight": "网格行高", + "gridRowHeightDesc": "网格中每行的高度", + "gridRowCount": "网格行数", + "gridRowCountDesc": "网格中的最大行数", + "gridPaddingX": "水平内边距", + "gridPaddingXDesc": "画布的水平内边距", + "gridPaddingY": "垂直内边距", + "gridPaddingYDesc": "画布的垂直内边距", + "gridBgImage": "背景图片", + "gridBgImageDesc": "画布的背景图片", + "gridBgImageRepeat": "背景图片重复", + "gridBgImageRepeatDesc": "画布背景图片的重复方式", + "gridBgImageSize": "背景图片大小", + "gridBgImageSizeDesc": "画布背景图片的大小", + "gridBgImagePosition": "背景图片位置", + "gridBgImagePositionDesc": "画布背景图片的位置", + "gridBgImageOrigin": "背景图片起点", + "gridBgImageOriginDesc": "画布背景图片的起点" }, style: { ...en.style, @@ -430,7 +473,7 @@ export const zh = { border: "边框颜色", borderRadius: "边框半径", borderWidth: "边框宽度", - borderStyle: "边框样式", + borderStyle:"边框样式", background: "背景", headerBackground: "头部背景", footerBackground: "底部背景", @@ -455,9 +498,9 @@ export const zh = { tableCellText: "单元格文本", selectedRowBackground: "选中行背景", hoverRowBackground: "悬停行背景", - hoverBackground: "悬停背景", - textTransform: "文本变换", - textDecoration: "文字装饰", + hoverBackground:"悬停背景", + textTransform:"文本变换", + textDecoration:"文字装饰", alternateRowBackground: "交替行背景", tableHeaderBackground: "表头背景", tableHeaderText: "表头文本", @@ -483,21 +526,76 @@ export const zh = { "fontFamily": "字体", "fontStyle": "字体风格", "backgroundImage": "背景图片", - "backgroundImageRepeat": "背景图片重复", - "backgroundImageSize": "背景图片大小", - "backgroundImagePosition": "背景图片位置", + "backgroundImageRepeat" : "背景图片重复", + "backgroundImageSize" : "背景图片大小", + "backgroundImagePosition" : "背景图片位置", "backgroundImageOrigin": "背景图片原点", "headerBackgroundImage": "头部背景图片", - "headerBackgroundImageRepeat": "头部背景图片重复", - "headerBackgroundImageSize": "头部背景图片大小", - "headerBackgroundImagePosition": "头部背景图片位置", + "headerBackgroundImageRepeat" : "头部背景图片重复", + "headerBackgroundImageSize" : "头部背景图片大小", + "headerBackgroundImagePosition" : "头部背景图片位置", "headerBackgroundImageOrigin": "头部背景图片原点", "footerBackgroundImage": "底部背景图片", - "footerBackgroundImageRepeat": "底部背景图片重复", - "footerBackgroundImageSize": "底部背景图片大小", - "footerBackgroundImagePosition": "底部背景图片位置", + "footerBackgroundImageRepeat" : "底部背景图片重复", + "footerBackgroundImageSize" : "底部背景图片大小", + "footerBackgroundImagePosition" : "底部背景图片位置", "footerBackgroundImageOrigin": "底部背景图片原点", - }, + + "radiusTip": "指定元素角的半径。例如:5px,50%,或1em。", + "gapTip": "指定网格或弹性容器中行和列之间的间距。例如:10px,1rem,或5%。", + "cardRadiusTip": "定义卡片组件的角半径。例如:10px,15px。", + "borderWidthTip": "指定元素边框的宽度。例如:1px,0.5em,或thin。", + "borderStyleTip": "设置边框的样式。例如:solid,dashed,dotted或none。", + "marginTip": "定义元素周围的外边距。例如:10px,2em或auto。您还可以组合使用,例如:0px 20px,或为四个方向分别指定:0px 1px 5px 2px。", + "directionTip": "指定布局的方向。例如:row,column或row-reverse。", + "detailSizeTip": "定义布局中特定细节的大小。例如:10px,2em,或80%。", + "chartOpacityTip": "指定图表的透明度。例如:1(不透明),0.5(50%透明)。", + "chartBoxShadowTip": "定义图表框投下的阴影。例如:0px 4px 8px rgba(0, 0, 0, 0.3)。", + "chartBorderStyleTip": "设置图表边框的样式。例如:solid,dashed或dotted。", + "chartBorderRadiusTip": "指定图表边框的角半径。例如:10px,20%。", + "chartBorderWidthTip": "指定图表边框的宽度。例如:2px,0.5em。", + "chartTextSizeTip": "指定图表文字的字体大小。例如:16px,1em或120%。", + "chartTextWeightTip": "指定图表文字的字体粗细。例如:normal,bold或700。", + "chartFontFamilyTip": "指定图表文字的字体系列。例如:Arial,Helvetica或'Times New Roman'。", + "chartFontStyleTip": "指定图表文字的字体样式。例如:normal,italic或oblique。", + "animationIterationCountTip": "定义动画运行的次数。例如:infinite,1或3。", + "opacityTip": "设置元素的透明度级别。例如:1(不透明),0.5(50%透明),0(不可见)。", + "boxShadowColorTip": "定义盒子阴影的颜色。例如:rgba(0, 0, 0, 0.3),#FF5733。", + "chartBackgroundColorTip": "设置图表的背景颜色。例如:#FFFFFF,rgba(255, 255, 255, 0.8)。", + "chartGradientColorTip": "指定图表背景的渐变颜色。例如:linear-gradient(to right, #ff7e5f, #feb47b)。", + "chartShadowColorTip": "定义图表阴影的颜色。例如:rgba(0, 0, 0, 0.2),#333333。", + "chartBorderColorTip": "指定图表边框的颜色。例如:#000000,rgba(0, 0, 0, 0.5)。", + "chartTextColorTip": "设置图表文字的颜色。例如:#333333,rgba(51, 51, 51, 1)。", + "boxShadowTip": "定义元素的投影阴影。例如:0px 4px 8px rgba(0, 0, 0, 0.3),inset 0px 2px 5px rgba(255, 255, 255, 0.5)。", + "animationDelayTip": "指定动画开始前的延迟时间。例如:1s,500ms,0。", + "animationDurationTip": "设置动画的持续时间。例如:2s,3s,500ms。", + "paddingTip": "定义元素内部的填充空间。例如:10px,2em,5%。您还可以组合使用,例如:0px 20px,或为四个方向分别指定:10px 21px 5px 20px。", + "containerHeaderPaddingTip": "定义容器标题的填充空间。例如:10px,1rem。", + "containerSiderPaddingTip": "定义容器侧边的填充空间。例如:8px,1em。", + "containerFooterPaddingTip": "定义容器底部的填充空间。例如:12px,1rem。", + "containerBodyPaddingTip": "定义容器主体的填充空间。例如:15px,2em。", + "textSizeTip": "指定文字的字体大小。例如:14px,1.2em,110%。", + "textWeightTip": "指定文字的字体粗细。例如:normal,bold,400。", + "fontFamilyTip": "指定文字的字体系列。例如:Arial,Verdana,'Courier New'。", + "textDecorationTip": "定义文字的装饰。例如:underline,line-through,none。", + "textTransformTip": "指定文字的大小写格式。例如:uppercase,lowercase,capitalize。", + "fontStyleTip": "定义文字的字体样式。例如:normal,italic,oblique。", + "backgroundImageTip": "指定元素的背景图像。例如:url('image.jpg'),linear-gradient(to right, #ff7e5f, #feb47b)。", + "headerBackgroundImageTip": "指定标题的背景图像。例如:url('header.jpg')。", + "footerBackgroundImageTip": "指定页脚的背景图像。例如:url('footer.jpg')。", + "backgroundImageRepeatTip": "定义背景图像的重复方式。例如:no-repeat,repeat-x,repeat-y。", + "headerBackgroundImageRepeatTip": "定义标题背景图像的重复方式。例如:repeat-x,no-repeat。", + "footerBackgroundImageRepeatTip": "定义页脚背景图像的重复方式。例如:repeat-y,no-repeat。", + "backgroundImageSizeTip": "定义背景图像的大小。例如:cover,contain,50% 50%。", + "backgroundImagePositionTip": "定义背景图像的位置。例如:center,top right,10% 20%。", + "backgroundImageOriginTip": "指定背景图像的定位区域。例如:padding-box,border-box,content-box。", + "headerBackgroundImageOriginTip": "指定标题背景图像的定位区域。例如:padding-box,border-box,content-box。", + "footerBackgroundImageOriginTip": "指定页脚背景图像的定位区域。例如:padding-box,border-box,content-box。", + "rotationTip": "指定元素的旋转角度。例如:45deg,90deg,-180deg。", + "lineHeightTip": "定义文字行高。例如:1.5,2,120%。" + + }, + export: { ...en.export, hiddenDesc: "如果为true,则隐藏组件", @@ -589,10 +687,14 @@ export const zh = { executeJSCode: "运行JavaScript代码", importFromQueryLibrary: "从查询库导入", importFromFile: "从文件导入", - triggerType: "触发方式", - triggerTypeAuto: "输入更改或页面加载时触发", - triggerTypePageLoad: "页面加载时触发", - triggerTypeManual: "手动触发", + "triggerType": "触发条件...", + "triggerTypeAuto": "当输入更改或应用程序(页面)加载后", + "triggerTypePageLoad": "应用程序(页面)加载后", + "triggerTypeManual": "仅当您手动触发时", + "triggerTypeInputChange": "当输入更改时", + "triggerTypeQueryExec": "查询执行后", + "triggerTypeTimeout": "应用程序(页面)加载后和超时", + "delayTime": "延迟时间", chooseDataSource: "选择数据源", method: "方法", updateExceptionDataSourceTitle: "更新失败的数据源", @@ -601,21 +703,24 @@ export const zh = { disablePreparedStatement: "禁用预编译语句", disablePreparedStatementTooltip: "禁用预编译语句可以动态生成SQL,但存在SQL注入的风险", timeout: "超时时间", - timeoutTooltip: "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n" + + timeoutTooltip: + "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n" + "默认值:{defaultSeconds}秒\n" + "最大值:{maxSeconds}秒.\n" + "\n" + "例如:300(即300毫秒),800毫秒,5秒.", periodic: "定期运行此查询", periodicTime: "周期", - periodicTimeTooltip: "连续执行之间的时间间隔.\n" + + periodicTimeTooltip: + "连续执行之间的时间间隔.\n" + "默认单位:毫秒(ms),支持的输入单位:毫秒(ms)、秒(s).\n" + "最小值:100毫秒,低于此值将禁用周期性执行.\n" + "\n" + "例如:300(即300毫秒),800毫秒,5秒.", cancelPrevious: "忽略上一次未完成的执行结果.", cancelPreviousTooltip: "", - dataSourceStatusError: "如果触发新的执行,将忽略之前未完成的执行结果(如果之前的执行未完成),被忽略的执行将不会触发查询的事件列表.", + dataSourceStatusError: + "如果触发新的执行,将忽略之前未完成的执行结果(如果之前的执行未完成),被忽略的执行将不会触发查询的事件列表.", success: "成功", fail: "失败", successDesc: "执行成功时触发", @@ -677,8 +782,10 @@ export const zh = { connectSuccessfully: "连接成功", saveSuccessfully: "保存成功", database: "数据库", - cloudHosting: "云托管的Lowcoder无法访问您的本地服务,如使用127.0.0.1或localhost.请尝试连接公共网络数据源或使用反向代理来访问您的私有服务.", - notCloudHosting: "对于Docker托管部署,Lowcoder使用桥接网络,因此对于主机地址,127.0.0.1和localhost是无效的.要访问本地机器上的数据源,请参考以下链接", + cloudHosting: + "云托管的Lowcoder无法访问您的本地服务,如使用127.0.0.1或localhost.请尝试连接公共网络数据源或使用反向代理来访问您的私有服务.", + notCloudHosting: + "对于Docker托管部署,Lowcoder使用桥接网络,因此对于主机地址,127.0.0.1和localhost是无效的.要访问本地机器上的数据源,请参考以下链接", howToAccessHostDocLink: "如何访问主机API/数据库", returnList: "返回列表", chooseDatasourceType: "选择数据源类型", @@ -693,7 +800,25 @@ export const zh = { dynamicDataSourceConfigLoadingText: "加载额外数据源配置...", dynamicDataSourceConfigErrText: "无法加载额外数据源配置.", retry: "重试", - }, + "categoryDatabase": "数据库", + "categoryBigdata": "大数据", + "categoryAi": "人工智能", + "categoryDevops": "开发运维", + "categoryAppdevelopment": "应用开发", + "categoryWorkflow": "工作流", + "categoryMessaging": "消息传递", + "categoryAssets": "资产与存储", + "categoryProjectManagement": "项目管理", + "categoryCrm": "客户关系管理", + "categoryEcommerce": "电子商务", + "categoryWebscrapers": "网络爬虫", + "categoryDocumentHandling": "报告与文档生成", + "categoryRPA": "机器人流程自动化", + "componentsUsingQueryTitle": "查询使用情况", + "componentsUsingQuery": "此查询在哪里使用", + "variables": "变量" + }, + sqlQuery: { ...en.sqlQuery, keyValuePairs: "键值对", @@ -786,10 +911,12 @@ export const zh = { }, httpQuery: { ...en.httpQuery, - bodyFormDataTooltip: "如果选择{type},值的格式应为{object}.示例:{example}", + bodyFormDataTooltip: + "如果选择{type},值的格式应为{object}.示例:{example}", text: "文本", file: "文件", - extraBodyTooltip: "额外的body中的键值对将与JSON或表单数据类型一起添加到body中", + extraBodyTooltip: + "额外的body中的键值对将与JSON或表单数据类型一起添加到body中", forwardCookies: "转发cookies", forwardAllCookies: "转发所有cookies", }, @@ -806,7 +933,9 @@ export const zh = { content: "内容", contentTooltip: "支持输入文本或HTML", }, + // component Registry + uiCompCategory: { ...en.uiCompCategory, "dashboards": "仪表板和报告", @@ -1023,7 +1152,11 @@ export const zh = { "pageLayoutCompName": "布局容器", "pageLayoutCompDesc": "一个容器,用于创建包含页眉、页脚和主要内容区域的布局", "pageLayoutCompKeywords": "布局、容器、导航、页面", + "kanbanCompName" : "看板(预览!)", + "kanbanCompDesc" : "一个用于可视化工作流程的板,其中列代表工作阶段,卡片代表任务。", + "kanbanCompKeywords" : "看板、板、工作流程、任务", }, + comp: { ...en.comp, menuViewDocs: "查看文档", @@ -1042,58 +1175,58 @@ export const zh = { }, "meeting": { ...en.meeting, - "logLevel": "Agora SDK 日志级别", - "placement": "会议抽屉的摆放", - "meeting": "会议设置", - "cameraView": "摄像头视图", - "cameraViewDesc": "本地用户(主机)的摄像头视图", - "screenShared": "屏幕共享", - "screenSharedDesc": "本地用户(主机)共享的屏幕", - "audioUnmuted": "音频静音", - "audioMuted": "音频静音", - "videoClicked": "点击视频", - "videoOff": "关闭视频", - "videoOn": "视频", - "size": "尺寸", - "top": "返回顶部", - "host": "会议室主机。您需要将主机作为自己的应用程序逻辑进行管理", - "participants": "会议室与会者", - "shareScreen": "本地用户共享的显示屏幕", - "appid": "Agora 应用 ID", - "meetingName": "会议名称", - "localUserID": "主机用户 ID", - "userName": "主机用户名", - "rtmToken": "Agora RTM 代币", - "rtcToken": "Agora RTC 代币", - "noVideo": "无视频", - "profileImageUrl": "简介图片 URL", - "right": "对", - "bottom": "底部", - "videoId": "视频流 ID", - "audioStatus": "音频状态", - "left": "左侧", - "widthTooltip": "像素或百分比,例如 520、60", - "heightTooltip": "像素,例如 378", - "openDrawerDesc": "开放式抽屉", - "closeDrawerDesc": "关闭抽屉", - "width": "抽屉宽度", - "height": "抽屉高度", - "actionBtnDesc": "操作按钮", - "broadCast": "广播信息", - "title": "会议名称", - "meetingCompName": "Agora 会议控制器", - "sharingCompName": "屏幕共享流", - "videoCompName": "摄像机流", - "videoSharingCompName": "屏幕共享流", - "meetingControlCompName": "控制按钮", - "meetingCompDesc": "会议组成部分", - "meetingCompControls": "会议控制", - "meetingCompKeywords": "Agora 会议、网络会议、协作", - "iconSize": "图标大小", - "userId": "主机用户 ID", - "roomId": "房间 ID", - "meetingActive": "持续会议", - "messages": "广播信息" + "logLevel": "Agora SDK 日志级别", + "placement": "会议抽屉的摆放", + "meeting": "会议设置", + "cameraView": "摄像头视图", + "cameraViewDesc": "本地用户(主机)的摄像头视图", + "screenShared": "屏幕共享", + "screenSharedDesc": "本地用户(主机)共享的屏幕", + "audioUnmuted": "音频静音", + "audioMuted": "音频静音", + "videoClicked": "点击视频", + "videoOff": "关闭视频", + "videoOn": "视频", + "size": "尺寸", + "top": "返回顶部", + "host": "会议室主机。您需要将主机作为自己的应用程序逻辑进行管理", + "participants": "会议室与会者", + "shareScreen": "本地用户共享的显示屏幕", + "appid": "Agora 应用 ID", + "meetingName": "会议名称", + "localUserID": "主机用户 ID", + "userName": "主机用户名", + "rtmToken": "Agora RTM 代币", + "rtcToken": "Agora RTC 代币", + "noVideo": "无视频", + "profileImageUrl": "简介图片 URL", + "right": "对", + "bottom": "底部", + "videoId": "视频流 ID", + "audioStatus": "音频状态", + "left": "左侧", + "widthTooltip": "像素或百分比,例如 520、60", + "heightTooltip": "像素,例如 378", + "openDrawerDesc": "开放式抽屉", + "closeDrawerDesc": "关闭抽屉", + "width": "抽屉宽度", + "height": "抽屉高度", + "actionBtnDesc": "操作按钮", + "broadCast": "广播信息", + "title": "会议名称", + "meetingCompName": "Agora 会议控制器", + "sharingCompName": "屏幕共享流", + "videoCompName": "摄像机流", + "videoSharingCompName": "屏幕共享流", + "meetingControlCompName": "控制按钮", + "meetingCompDesc": "会议组成部分", + "meetingCompControls": "会议控制", + "meetingCompKeywords": "Agora 会议、网络会议、协作", + "iconSize": "图标大小", + "userId": "主机用户 ID", + "roomId": "房间 ID", + "meetingActive": "持续会议", + "messages": "广播信息" }, jsonSchemaForm: { ...en.jsonSchemaForm, @@ -1227,32 +1360,32 @@ export const zh = { "description": "描述", "status": "状态", }, - "step": { + "step" : { ...en.step, "initialValue": "初始值", "initialValueTooltip": "视觉编号的起始位置。必须是 1 或更高。", "valueDesc": "当前价值", - "size": "台阶大小", - "sizeSmall": "小型", - "sizeDefault": "默认值", - "percent": "步骤 百分比", - "type": "步骤类型", - "typeDefault": "标准", - "typeNavigation": "导航", - "typeInline": "内联", - "direction": "步骤 方向", - "directionVertical": "垂直", - "directionHorizontal": "横向", - "labelPlacement": "步骤 标签放置", - "status": "步骤状态", - "statusWait": "等待", - "statusProcess": "过程", - "statusFinish": "完成", - "statusError": "错误", - "showDots": "用圆点代替数字", - "showIcons": "显示图标而不是数字", - "responsive": "响应式", - "selectable": "可选择", + "size" : "台阶大小", + "sizeSmall" : "小型", + "sizeDefault" : "默认值", + "percent" : "步骤 百分比", + "type" : "步骤类型", + "typeDefault" : "标准", + "typeNavigation" : "导航", + "typeInline" : "内联", + "direction" : "步骤 方向", + "directionVertical" : "垂直", + "directionHorizontal" : "横向", + "labelPlacement" : "步骤 标签放置", + "status" : "步骤状态", + "statusWait" : "等待", + "statusProcess" : "过程", + "statusFinish" : "完成", + "statusError" : "错误", + "showDots" : "用圆点代替数字", + "showIcons" : "显示图标而不是数字", + "responsive" : "响应式", + "selectable" : "可选择", }, radio: { ...en.radio, @@ -1274,6 +1407,7 @@ export const zh = { selectedIndexDesc: "当前选择的值的索引,如果未选择任何值则为-1", selectedLabelDesc: "当前选择的值的标签", }, + file: { ...en.file, typeErrorMsg: "必须是一个带有有效文件大小单位的数字,或者是一个无单位的字节数.", @@ -1289,7 +1423,8 @@ export const zh = { upload: "浏览", fileType: "文件类型", reference: "请参考", - fileTypeTooltipUrl: "https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file", + fileTypeTooltipUrl: + "https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file", fileTypeTooltip: "唯一的文件类型指定", uploadType: "上传类型", showUploadList: "显示上传列表", @@ -1298,8 +1433,10 @@ export const zh = { filesDesc: "当前上传文件的列表.详细信息请参阅", clearValueDesc: "清除所有文件", parseFiles: "解析文件", - parsedValueTooltip1: "如果解析文件解析成功,上传的文件将解析为对象、数组或字符串.解析后的数据可以通过parsedValue数组访问.", - parsedValueTooltip2: "支持Excel、JSON、CSV和文本文件.其他格式将返回null.", + parsedValueTooltip1: + "如果解析文件解析成功,上传的文件将解析为对象、数组或字符串.解析后的数据可以通过parsedValue数组访问.", + parsedValueTooltip2: + "支持Excel、JSON、CSV和文本文件.其他格式将返回null.", }, date: { ...en.date, @@ -1346,8 +1483,8 @@ export const zh = { link: "链接", textDesc: "当前显示在链接上的文本", loadingDesc: "链接是否处于加载状态?如果为true,则当前链接正在加载", - }, - scanner: { + }, + scanner: { text: "点击扫码", camera: "摄像头{index}", changeCamera: "切换摄像头", @@ -1355,12 +1492,13 @@ export const zh = { uniqueData: "忽略重复数据", maskClosable: "点击背景后关闭", errTip: "请在HTTPS模式或本地主机模式下使用此组件", - }, - dropdown: { + }, + dropdown: { onlyMenu: "仅菜单", textDesc: "当前显示在按钮上的文本", - }, - textShow: { + triggerMode: "触发方式" + }, + textShow: { // eslint-disable-next-line only-ascii/only-ascii text: "### 👋 你好,{name}", valueTooltip: "Markdown支持大多数HTML标签和属性.出于安全原因,禁用了iframe、script和其他标签.", @@ -1461,6 +1599,7 @@ export const zh = { type: "类型", tableSize: "表格尺寸", hideHeader: "隐藏表头", + hideToolbar: "隐藏表工具栏(页脚)", fixedHeader: "固定表头", fixedHeaderTooltip: "垂直滚动表格的标题将被固定", fixedToolbar: "固定工具栏", @@ -1502,9 +1641,10 @@ export const zh = { rowColor: "条件行颜色", rowColorDesc: "基于可选变量条件设置行颜色:\n" + "currentRow, currentOriginalIndex, currentIndex, columnTitle.\n" + "例如:'{{ currentRow.id > 3 ? \"green\" : \"red\" }}'", cellColor: "条件单元格颜色", - cellColorDesc: "使用 currentCell 根据单元格值有条件地设置单元格颜色:\n" + + cellColorDesc: + "使用 currentCell 根据单元格值有条件地设置单元格颜色:\n" + "例如:'{{ currentCell == 3 ? \"green\" : \"red\" }}'", - rowHeight: "条件行高度", + rowHeight : "条件行高度", rowHeightDesc: "根据可选变量有条件地设置行高: CurrentRow、CurrentOriginalIndex、CurrentIndex、ColumnTitle。例如:'{{ currentRow.id > 3 ? \"60px\" : \"40px\" }}'", saveChangesNotBind: "未配置保存更改的事件处理程序.请在点击之前绑定至少一个事件处理程序.", dynamicColumn: "使用动态列设置", @@ -1535,8 +1675,9 @@ export const zh = { srcDesc: "图片链接地址", supportPreview: "支持点击预览", supportPreviewTip: "仅在图片链接有效时生效", + previewSrc: "图片预览链接" }, - progress: { + progress: { ...en.progress, value: "进度值", valueTooltip: "完成百分比,取值范围为0到100", @@ -1548,7 +1689,8 @@ export const zh = { ...en.fileViewer, invalidURL: "未提供有效的URL链接", src: "文件链接", - srcTooltip: "通过嵌入HTML预览提供的链接内容,也可以支持base64编码的数据,例如:data:application/pdf; base64,AAA... CCC", + srcTooltip: + "通过嵌入HTML预览提供的链接内容,也可以支持base64编码的数据,例如:data:application/pdf; base64,AAA... CCC", srcDesc: "文件链接地址", }, divider: { @@ -1614,8 +1756,10 @@ export const zh = { volume: "音量", playbackRate: "播放速度", posterTooltip: "默认值为视频的第一帧", - autoPlayTooltip: "视频加载后自动播放.将该值从true更改为false将暂停视频播放.(如果设置了封面,将通过封面按钮播放)", - controlsTooltip: "隐藏视频播放控件.可能不被所有视频源完全支持.", + autoPlayTooltip: + "视频加载后自动播放.将该值从true更改为false将暂停视频播放.(如果设置了封面,将通过封面按钮播放)", + controlsTooltip: + "隐藏视频播放控件.可能不被所有视频源完全支持.", volumeTooltip: "设置播放器的音量,介于0和1之间", playbackRateTooltip: "设置播放器的速度,介于1和2之间", srcDesc: "当前视频URL链接", @@ -1701,12 +1845,12 @@ export const zh = { oauthProviders: "User Authentication", appUsage: "应用程序使用日志", environments: "环境", - premium: "高级版", - "AppUsage": "全球应用程序使用情况", + premium: "高级版" }, memberSettings: { ...en.memberSettings, admin: "管理员", + superAdmin: "超级管理员", adminGroupRoleInfo: "管理员可以管理群组成员和资源", adminOrgRoleInfo: "拥有所有资源并可以管理群组.", member: "成员", @@ -1737,7 +1881,8 @@ export const zh = { inviteUserHelp: "您可以复制邀请链接发送给所想邀请的用户", inviteUserLabel: "邀请链接:", inviteCopyLink: "复制链接", - inviteText: '{userName} 邀请您加入工作空间 "{organization}",点击链接加入:{inviteLink}', + inviteText: + '{userName} 邀请您加入工作空间 "{organization}",点击链接加入:{inviteLink}', groupName: "群组名称", createTime: "创建时间", manageBtn: "管理", @@ -1751,7 +1896,8 @@ export const zh = { title: "工作空间", createOrg: "创建工作空间", deleteModalTitle: "确定要删除该工作空间吗?", - deleteModalContent: "您即将删除该工作空间 {permanentlyDelete}.一旦删除,工作空间将{notRestored}.", + deleteModalContent: + "您即将删除该工作空间 {permanentlyDelete}.一旦删除,工作空间将{notRestored}.", permanentlyDelete: "永久删除", notRestored: "无法恢复", deleteModalLabel: "请输入工作空间名称{name}以确认操作:", @@ -1781,7 +1927,7 @@ export const zh = { showTabs: "显示选项卡", gutter: "间距", gutterTooltip: "标签页之间的距离,单位为 px", - tabsCentered: "居中标签" + tabsCentered: "居中标签" }, formComp: { ...en.formComp, @@ -2033,7 +2179,8 @@ export const zh = { ...en.advanced, title: "高级", defaultHomeTitle: "默认首页", - defaultHomeHelp: "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", + defaultHomeHelp: + "首页是非开发人员登录时默认看到的应用程序.注意:确保所选应用程序对非开发人员可访问.", defaultHomePlaceholder: "选择默认首页", saveBtn: "保存", preloadJSTitle: "预加载 JavaScript", @@ -2042,7 +2189,8 @@ export const zh = { preloadCSSHelp: "为当前工作空间中的所有应用程序设置预加载的 CSS 代码.", preloadCSSApply: "应用到工作空间的首页", preloadLibsTitle: "JavaScript 库", - preloadLibsHelp: "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", + preloadLibsHelp: + "为当前工作空间中的所有应用程序设置预加载的 JavaScript 库,系统内置了 lodash、day.js、uuid、numbro 可供直接使用.JavaScript 库在应用程序初始化之前加载,因此对应用程序性能有一定影响.", preloadLibsEmpty: "尚未添加 JavaScript 库", preloadLibsAddBtn: "添加库", saveSuccess: "保存成功", @@ -2053,19 +2201,53 @@ export const zh = { "showHeaderInPublicApps": "在公共视图中显示标题", "showHeaderInPublicAppsHelp": "设置所有应用程序的标题在公共视图中的可见性", }, - branding: { + + "branding": { ...en.branding, - title: "品牌", - logoTitle: "Logo", - logoHelp: "仅支持 .JPG、.SVG 或 .